Skip to content

Commit

Permalink
chore: tilbake til gosys endpoint
Browse files Browse the repository at this point in the history
* chore: tilbake til gosys for nasjonal oppgave

* chore: remove get sykmelder request

* chore: refactoring to use updated to handle oppgaver

---------

Co-authored-by: Jørn-Are Flaten <ja.flaten91@gmail.com>
  • Loading branch information
nuranes and jaflaten authored Dec 10, 2024
1 parent 0f43240 commit 4f590d5
Show file tree
Hide file tree
Showing 14 changed files with 302 additions and 211 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.ResponseBody
import org.springframework.web.bind.annotation.RestController
import java.util.UUID
import java.util.*

@RestController
class DocumentController(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import no.nav.sykdig.applog
import no.nav.sykdig.config.kafka.OK_SYKMELDING_TOPIC
import no.nav.sykdig.digitalisering.dokarkiv.DokarkivClient
import no.nav.sykdig.digitalisering.dokument.DocumentService
import no.nav.sykdig.digitalisering.felles.Periode
import no.nav.sykdig.digitalisering.ferdigstilling.mapping.mapToReceivedSykmelding
import no.nav.sykdig.digitalisering.ferdigstilling.oppgave.OppgaveClient
import no.nav.sykdig.digitalisering.helsenett.SykmelderService
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ class NasjonalCommonService(
verdi
}
}

fun getNavIdent(): Veileder {
val authentication = SecurityContextHolder.getContext().authentication as JwtAuthenticationToken
return Veileder(authentication.token.claims["NAVident"].toString())
Expand All @@ -134,6 +135,7 @@ class NasjonalCommonService(
val authentication = SecurityContextHolder.getContext().authentication as JwtAuthenticationToken
return authentication.token.claims["preferred_username"].toString()
}

private fun toSykmelding(sykmeldingId: String, oppgave: NasjonalManuellOppgaveDAO): Sykmelding {
requireNotNull(oppgave.papirSmRegistrering.aktorId) { "PapirSmRegistrering.aktorId er null" }
requireNotNull(oppgave.papirSmRegistrering.medisinskVurdering) { "PapirSmRegistrering.medisinskVurdering er null" }
Expand All @@ -156,17 +158,33 @@ class NasjonalCommonService(
meldingTilArbeidsgiver = oppgave.papirSmRegistrering.meldingTilArbeidsgiver,
kontaktMedPasient = KontaktMedPasient(
kontaktDato = oppgave.papirSmRegistrering.kontaktMedPasient?.kontaktDato,
begrunnelseIkkeKontakt = oppgave.papirSmRegistrering.kontaktMedPasient?.begrunnelseIkkeKontakt
begrunnelseIkkeKontakt = oppgave.papirSmRegistrering.kontaktMedPasient?.begrunnelseIkkeKontakt,
),
behandletTidspunkt = LocalDateTime.from(oppgave.papirSmRegistrering.behandletTidspunkt),
behandler = oppgave.papirSmRegistrering.behandler,
avsenderSystem = AvsenderSystem( //TODO
avsenderSystem = AvsenderSystem(
//TODO
navn = "Navn avsendersystem",
versjon = "0.0"
versjon = "0.0",
),
syketilfelleStartDato = oppgave.papirSmRegistrering.syketilfelleStartDato,
signaturDato = LocalDateTime.from(oppgave.papirSmRegistrering.behandletTidspunkt),
navnFastlege = "Fastlege navn", //TODO
)
}

fun getLoggingMeta(sykmeldingId: String, oppgave: NasjonalManuellOppgaveDAO): LoggingMeta {
return LoggingMeta(
mottakId = sykmeldingId,
dokumentInfoId = oppgave.dokumentInfoId,
msgId = sykmeldingId,
sykmeldingId = sykmeldingId,
journalpostId = oppgave.journalpostId,
)
}
}

fun isValidOppgaveId(oppgaveId: String): Boolean {
val regex = Regex("^\\d{9}$|^[a-zA-Z0-9]{1,20}$")
return oppgaveId.matches(regex)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package no.nav.sykdig.digitalisering.papirsykmelding

import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import net.logstash.logback.argument.StructuredArguments
import no.nav.sykdig.LoggingMeta
import no.nav.sykdig.applog
import no.nav.sykdig.digitalisering.exceptions.NoOppgaveException
import no.nav.sykdig.digitalisering.ferdigstilling.FerdigstillingService
import no.nav.sykdig.digitalisering.ferdigstilling.GosysService
import no.nav.sykdig.digitalisering.ferdigstilling.oppgave.OppgaveClient
import no.nav.sykdig.digitalisering.mapAvvisningsgrunn
import no.nav.sykdig.digitalisering.papirsykmelding.api.SmregistreringClient
Expand All @@ -20,6 +22,7 @@ import no.nav.sykdig.digitalisering.papirsykmelding.db.model.NasjonalManuellOppg
import no.nav.sykdig.digitalisering.papirsykmelding.db.model.Utfall
import no.nav.sykdig.digitalisering.pdl.PersonService
import no.nav.sykdig.generated.types.Avvisingsgrunn
import no.nav.sykdig.metrics.MetricRegister
import no.nav.sykdig.securelog
import org.springframework.http.HttpStatus
import org.springframework.http.HttpStatusCode
Expand All @@ -36,6 +39,8 @@ class NasjonalOppgaveService(
private val ferdigstillingService: FerdigstillingService,
private val smregistreringClient: SmregistreringClient,
private val nasjonalCommonService: NasjonalCommonService,
private val gosysService: GosysService,
private val metricRegister: MetricRegister,
) {
val log = applog()
val securelog = securelog()
Expand Down Expand Up @@ -97,7 +102,7 @@ class NasjonalOppgaveService(


private fun findByOppgaveId(oppgaveId: String): NasjonalManuellOppgaveDAO? {
if(!isValidOppgaveId(oppgaveId))
if (!isValidOppgaveId(oppgaveId))
throw IllegalArgumentException("Invalid oppgaveId does not contain only alphanumerical characters. oppgaveId: $oppgaveId")
val oppgave = nasjonalOppgaveRepository.findByOppgaveId(oppgaveId.toInt()) ?: return null

Expand Down Expand Up @@ -172,99 +177,100 @@ class NasjonalOppgaveService(
log.info("Finner ikke uløst oppgave med id $oppgaveId")
return null
}

fun avvisOppgave(
oppgaveId: String,
request: String,
navEnhet: String,
authorization: String
): ResponseEntity<HttpStatusCode> {
): ResponseEntity<HttpStatusCode> {
val eksisterendeOppgave = getOppgave(oppgaveId, authorization)

if(eksisterendeOppgave == null) {
log.info("Fant ikke oppgave som skulle avvises: $oppgaveId")
return ResponseEntity(HttpStatus.NOT_FOUND)
}
if (eksisterendeOppgave == null) {
log.info("Fant ikke oppgave som skulle avvises: $oppgaveId")
return ResponseEntity(HttpStatus.NOT_FOUND)
}

if(eksisterendeOppgave.ferdigstilt) {
log.info("Oppgave med id $oppgaveId er allerede ferdigstilt")
return ResponseEntity(HttpStatus.NO_CONTENT)
}
if (eksisterendeOppgave.ferdigstilt) {
log.info("Oppgave med id $oppgaveId er allerede ferdigstilt")
return ResponseEntity(HttpStatus.NO_CONTENT)
}

val avvisningsgrunn = mapper.readValue(request, AvvisSykmeldingRequest::class.java).reason
val veilederIdent = nasjonalCommonService.getNavIdent().veilederIdent
val avvisningsgrunn = mapper.readValue(request, AvvisSykmeldingRequest::class.java).reason
val veilederIdent = nasjonalCommonService.getNavIdent().veilederIdent

ferdigstillNasjonalAvvistOppgave(eksisterendeOppgave, navEnhet, avvisningsgrunn, veilederIdent)
oppdaterOppgave(
eksisterendeOppgave.sykmeldingId,
utfall = Utfall.AVVIST.toString(),
ferdigstiltAv = veilederIdent,
avvisningsgrunn = avvisningsgrunn,
null
)
ferdigstillNasjonalAvvistOppgave(eksisterendeOppgave, navEnhet, avvisningsgrunn, veilederIdent)
oppdaterOppgave(
eksisterendeOppgave.sykmeldingId,
utfall = Utfall.AVVIST.toString(),
ferdigstiltAv = veilederIdent,
avvisningsgrunn = avvisningsgrunn,
null
)

log.info("Har avvist oppgave med oppgaveId $oppgaveId")
return ResponseEntity(HttpStatus.NO_CONTENT)
log.info("Har avvist oppgave med oppgaveId $oppgaveId")
return ResponseEntity(HttpStatus.NO_CONTENT)

}
}


fun mapToDao(
papirManuellOppgave: PapirManuellOppgave,
existingId: UUID?,
ferdigstilt: Boolean = false
): NasjonalManuellOppgaveDAO {
mapper.registerModules(JavaTimeModule())
securelog.info("Mapper til DAO: $papirManuellOppgave")

val nasjonalManuellOppgaveDAO =
NasjonalManuellOppgaveDAO(
sykmeldingId = papirManuellOppgave.sykmeldingId,
journalpostId = papirManuellOppgave.papirSmRegistering.journalpostId,
fnr = papirManuellOppgave.fnr,
aktorId = papirManuellOppgave.papirSmRegistering.aktorId,
dokumentInfoId = papirManuellOppgave.papirSmRegistering.dokumentInfoId,
datoOpprettet = papirManuellOppgave.papirSmRegistering.datoOpprettet?.toLocalDateTime(),
oppgaveId = papirManuellOppgave.oppgaveid,
ferdigstilt = ferdigstilt,
papirSmRegistrering =
PapirSmRegistering(
journalpostId = papirManuellOppgave.papirSmRegistering.journalpostId,
oppgaveId = papirManuellOppgave.papirSmRegistering.oppgaveId,
fnr = papirManuellOppgave.papirSmRegistering.fnr,
aktorId = papirManuellOppgave.papirSmRegistering.aktorId,
dokumentInfoId = papirManuellOppgave.papirSmRegistering.dokumentInfoId,
datoOpprettet = papirManuellOppgave.papirSmRegistering.datoOpprettet,
sykmeldingId = papirManuellOppgave.papirSmRegistering.sykmeldingId,
syketilfelleStartDato = papirManuellOppgave.papirSmRegistering.syketilfelleStartDato,
arbeidsgiver = papirManuellOppgave.papirSmRegistering.arbeidsgiver,
medisinskVurdering = papirManuellOppgave.papirSmRegistering.medisinskVurdering,
skjermesForPasient = papirManuellOppgave.papirSmRegistering.skjermesForPasient,
perioder = papirManuellOppgave.papirSmRegistering.perioder,
prognose = papirManuellOppgave.papirSmRegistering.prognose,
utdypendeOpplysninger = papirManuellOppgave.papirSmRegistering.utdypendeOpplysninger,
tiltakNAV = papirManuellOppgave.papirSmRegistering.tiltakNAV,
tiltakArbeidsplassen = papirManuellOppgave.papirSmRegistering.tiltakArbeidsplassen,
andreTiltak = papirManuellOppgave.papirSmRegistering.andreTiltak,
meldingTilNAV = papirManuellOppgave.papirSmRegistering.meldingTilNAV,
meldingTilArbeidsgiver = papirManuellOppgave.papirSmRegistering.meldingTilArbeidsgiver,
kontaktMedPasient = papirManuellOppgave.papirSmRegistering.kontaktMedPasient,
behandletTidspunkt = papirManuellOppgave.papirSmRegistering.behandletTidspunkt,
behandler = papirManuellOppgave.papirSmRegistering.behandler,
),
utfall = null,
ferdigstiltAv = null,
datoFerdigstilt = null,
avvisningsgrunn = null,
)
fun mapToDao(
papirManuellOppgave: PapirManuellOppgave,
existingId: UUID?,
ferdigstilt: Boolean = false
): NasjonalManuellOppgaveDAO {
mapper.registerModules(JavaTimeModule())
securelog.info("Mapper til DAO: $papirManuellOppgave")

val nasjonalManuellOppgaveDAO =
NasjonalManuellOppgaveDAO(
sykmeldingId = papirManuellOppgave.sykmeldingId,
journalpostId = papirManuellOppgave.papirSmRegistering.journalpostId,
fnr = papirManuellOppgave.fnr,
aktorId = papirManuellOppgave.papirSmRegistering.aktorId,
dokumentInfoId = papirManuellOppgave.papirSmRegistering.dokumentInfoId,
datoOpprettet = papirManuellOppgave.papirSmRegistering.datoOpprettet?.toLocalDateTime(),
oppgaveId = papirManuellOppgave.oppgaveid,
ferdigstilt = ferdigstilt,
papirSmRegistrering =
PapirSmRegistering(
journalpostId = papirManuellOppgave.papirSmRegistering.journalpostId,
oppgaveId = papirManuellOppgave.papirSmRegistering.oppgaveId,
fnr = papirManuellOppgave.papirSmRegistering.fnr,
aktorId = papirManuellOppgave.papirSmRegistering.aktorId,
dokumentInfoId = papirManuellOppgave.papirSmRegistering.dokumentInfoId,
datoOpprettet = papirManuellOppgave.papirSmRegistering.datoOpprettet,
sykmeldingId = papirManuellOppgave.papirSmRegistering.sykmeldingId,
syketilfelleStartDato = papirManuellOppgave.papirSmRegistering.syketilfelleStartDato,
arbeidsgiver = papirManuellOppgave.papirSmRegistering.arbeidsgiver,
medisinskVurdering = papirManuellOppgave.papirSmRegistering.medisinskVurdering,
skjermesForPasient = papirManuellOppgave.papirSmRegistering.skjermesForPasient,
perioder = papirManuellOppgave.papirSmRegistering.perioder,
prognose = papirManuellOppgave.papirSmRegistering.prognose,
utdypendeOpplysninger = papirManuellOppgave.papirSmRegistering.utdypendeOpplysninger,
tiltakNAV = papirManuellOppgave.papirSmRegistering.tiltakNAV,
tiltakArbeidsplassen = papirManuellOppgave.papirSmRegistering.tiltakArbeidsplassen,
andreTiltak = papirManuellOppgave.papirSmRegistering.andreTiltak,
meldingTilNAV = papirManuellOppgave.papirSmRegistering.meldingTilNAV,
meldingTilArbeidsgiver = papirManuellOppgave.papirSmRegistering.meldingTilArbeidsgiver,
kontaktMedPasient = papirManuellOppgave.papirSmRegistering.kontaktMedPasient,
behandletTidspunkt = papirManuellOppgave.papirSmRegistering.behandletTidspunkt,
behandler = papirManuellOppgave.papirSmRegistering.behandler,
),
utfall = null,
ferdigstiltAv = null,
datoFerdigstilt = null,
avvisningsgrunn = null,
)

if (existingId != null) {
nasjonalManuellOppgaveDAO.apply {
id = existingId
if (existingId != null) {
nasjonalManuellOppgaveDAO.apply {
id = existingId
}
}
}

return nasjonalManuellOppgaveDAO
}
return nasjonalManuellOppgaveDAO
}

fun mapFromDao(
nasjonalManuellOppgaveDAO: NasjonalManuellOppgaveDAO
Expand Down Expand Up @@ -307,45 +313,59 @@ fun mapToDao(
}


fun ferdigstillNasjonalAvvistOppgave(
oppgave: NasjonalManuellOppgaveDAO,
navEnhet: String,
avvisningsgrunn: String?,
veilederIdent: String,
) {
fun ferdigstillNasjonalAvvistOppgave(
oppgave: NasjonalManuellOppgaveDAO,
navEnhet: String,
avvisningsgrunn: String?,
veilederIdent: String,
) {

if (oppgave.fnr != null) {
val sykmeldt =
personService.getPerson(
id = oppgave.fnr,
callId = oppgave.sykmeldingId,
if (oppgave.fnr != null) {
val sykmeldt =
personService.getPerson(
id = oppgave.fnr,
callId = oppgave.sykmeldingId,
)
val avvistGrunn = enumValues<Avvisingsgrunn>().find { it.name.equals(avvisningsgrunn, ignoreCase = true) }
ferdigstillingService.ferdigstillNasjonalAvvistJournalpost(
enhet = navEnhet,
oppgave = oppgave,
sykmeldt = sykmeldt,
avvisningsGrunn = avvistGrunn?.let { mapAvvisningsgrunn(it, null) },
loggingMeta = nasjonalCommonService.getLoggingMeta(oppgave.sykmeldingId, oppgave),
)
val avvistGrunn = enumValues<Avvisingsgrunn>().find { it.name.equals(avvisningsgrunn, ignoreCase = true) }
ferdigstillingService.ferdigstillNasjonalAvvistJournalpost(
enhet = navEnhet,
oppgave = oppgave,
sykmeldt = sykmeldt,
avvisningsGrunn = avvistGrunn?.let { mapAvvisningsgrunn(it, null) },
loggingMeta = getLoggingMeta(oppgave.sykmeldingId, oppgave),
)

} else {
log.error("Fant ikke fnr for oppgave med id $oppgave.oppgaveId")
} else {
log.error("Fant ikke fnr for oppgave med id $oppgave.oppgaveId")
}
}
}

private fun getLoggingMeta(sykmeldingId: String, oppgave: NasjonalManuellOppgaveDAO): LoggingMeta {
return LoggingMeta(
mottakId = sykmeldingId,
dokumentInfoId = oppgave.dokumentInfoId,
msgId = sykmeldingId,
sykmeldingId = sykmeldingId,
journalpostId = oppgave.journalpostId,
)
}
}
fun ferdigstillOgSendOppgaveTilGosys(oppgaveId: String, authorization: String) {
val eksisterendeOppgave = getOppgave(oppgaveId, authorization)

if (eksisterendeOppgave == null) {
log.warn("Fant ikke oppgave med id $oppgaveId")
throw NoOppgaveException("Fant ikke oppgave med id $oppgaveId")
}

val sykmeldingId = eksisterendeOppgave.sykmeldingId

fun isValidOppgaveId(oppgaveId: String): Boolean {
val regex = Regex("^\\d{9}$|^[a-zA-Z0-9]{1,20}$")
return oppgaveId.matches(regex)
val loggingMeta = nasjonalCommonService.getLoggingMeta(sykmeldingId, eksisterendeOppgave)

log.info(
"Sender nasjonal oppgave med id $oppgaveId til Gosys {}",
StructuredArguments.fields(loggingMeta)
)

val navIdent = nasjonalCommonService.getNavIdent().veilederIdent
gosysService.sendOppgaveTilGosys(oppgaveId, sykmeldingId, navIdent)
oppdaterOppgave(sykmeldingId, Utfall.SENDT_TIL_GOSYS.toString(), navIdent, null, null)

log.info(
"Ferdig å sende oppgave med id $oppgaveId til Gosys {}",
StructuredArguments.fields(loggingMeta)
)

metricRegister.sendtTilGosysNasjonal.increment()
}
}
Loading

0 comments on commit 4f590d5

Please sign in to comment.