Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore/tilbake til gosys #362

Merged
merged 3 commits into from
Dec 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading