Skip to content

Commit

Permalink
chore: split nasjonal and utenlandsk ferdigstillingServices (#377)
Browse files Browse the repository at this point in the history
* chore: split nasjonal and utenlandsk ferdigstillingServices

* chore: small fix

Co-authored-by: Jørn-Are Flaten <[email protected]>

* chore: rm unused code

Co-authored-by: Jørn-Are Flaten <[email protected]>

---------

Co-authored-by: Jørn-Are Flaten <[email protected]>
  • Loading branch information
helehar and jaflaten authored Dec 17, 2024
1 parent dcdce12 commit 3c6f924
Show file tree
Hide file tree
Showing 13 changed files with 231 additions and 224 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -391,54 +391,7 @@ class DokarkivClient(
loggingMeta: LoggingMeta,
navEnhet: String,
avvist: Boolean,
receivedSykmelding: ReceivedSykmelding,
): String? {
val oppdaterJournalpostRequest = createOppdaterJournalpostNasjonalRequest(dokumentInfoId, pasientFnr, sykmelder, avvist, receivedSykmelding)
oppdaterJournalpostRequest(oppdaterJournalpostRequest, sykmeldingId, journalpostId)

return ferdigstillJournalpost(
enhet = navEnhet,
journalpostId = journalpostId,
sykmeldingId = sykmeldingId,
).body
}

private fun createOppdaterJournalpostNasjonalRequest(
dokumentInfoId: String?,
pasientFnr: String,
sykmelder: Sykmelder,
avvist: Boolean,
receivedSykmelding: ReceivedSykmelding,
): OppdaterJournalpostRequest {
val oppdaterJournalpostRequest = OppdaterJournalpostRequest(
avsenderMottaker = getAvsenderMottakerRequest(sykmelder),
bruker = DokBruker(id = pasientFnr),
sak = Sak(),
tittel = createTitleNasjonal(receivedSykmelding.sykmelding.perioder, avvist),
dokumenter = if (dokumentInfoId != null) {
listOf(
DokumentInfo(
dokumentInfoId = dokumentInfoId,
tittel = createTitleNasjonal(receivedSykmelding.sykmelding.perioder, avvist),
),
)
} else {
null
},
)
return oppdaterJournalpostRequest
}

fun oppdaterOgFerdigstillNasjonalJournalpost(
journalpostId: String,
dokumentInfoId: String? = null,
pasientFnr: String,
sykmeldingId: String,
sykmelder: Sykmelder,
loggingMeta: LoggingMeta,
navEnhet: String,
avvist: Boolean,
perioder: List<Periode>,
perioder: List<Periode>?,
): String? {
val oppdaterJournalpostRequest = createOppdaterJournalpostNasjonalRequest(dokumentInfoId, pasientFnr, sykmelder, avvist, perioder)
oppdaterJournalpostRequest(oppdaterJournalpostRequest, sykmeldingId, journalpostId)
Expand All @@ -455,7 +408,7 @@ class DokarkivClient(
pasientFnr: String,
sykmelder: Sykmelder,
avvist: Boolean,
perioder: List<Periode>,
perioder: List<Periode>?,
): OppdaterJournalpostRequest {
val oppdaterJournalpostRequest = OppdaterJournalpostRequest(
avsenderMottaker = getAvsenderMottakerRequest(sykmelder),
Expand Down Expand Up @@ -486,7 +439,7 @@ class DokarkivClient(

private fun getAvsenderMottakerRequest(sykmelder: Sykmelder): AvsenderMottakerRequest {
return AvsenderMottakerRequest(
id = padHpr(sykmelder.hprNummer),
id = padHpr(sykmelder.hprNummer!!),
navn = finnNavn(sykmelder),
land = null,
idType = IdType.HPRNR,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package no.nav.sykdig.digitalisering.ferdigstilling

import no.nav.sykdig.LoggingMeta
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.ferdigstilling.mapping.mapToReceivedSykmelding
import no.nav.sykdig.digitalisering.ferdigstilling.oppgave.OppgaveClient
import no.nav.sykdig.digitalisering.helsenett.SykmelderService
import no.nav.sykdig.digitalisering.model.FerdistilltRegisterOppgaveValues
import no.nav.sykdig.digitalisering.papirsykmelding.db.model.NasjonalManuellOppgaveDAO
import no.nav.sykdig.digitalisering.pdl.Person
import no.nav.sykdig.digitalisering.pdl.toFormattedNameString
import no.nav.sykdig.digitalisering.saf.SafJournalpostGraphQlClient
Expand All @@ -18,7 +15,6 @@ import no.nav.sykdig.model.OppgaveDbModel
import no.nav.sykdig.objectMapper
import no.nav.sykdig.securelog
import no.nav.sykdig.utils.createTitle
import no.nav.sykdig.utils.createTitleNasjonal
import no.nav.sykdig.utils.createTitleNavNo
import no.nav.sykdig.utils.createTitleRina
import org.apache.kafka.clients.producer.KafkaProducer
Expand All @@ -32,7 +28,6 @@ class FerdigstillingService(
private val oppgaveClient: OppgaveClient,
private val sykmeldingOKProducer: KafkaProducer<String, ReceivedSykmelding>,
private val dokumentService: DocumentService,
private val sykmelderService: SykmelderService,
) {
val log = applog()
val securelog = securelog()
Expand Down Expand Up @@ -162,44 +157,6 @@ class FerdigstillingService(
}
}

fun ferdigstillNasjonalAvvistJournalpost(
enhet: String,
oppgave: NasjonalManuellOppgaveDAO,
sykmeldt: Person,
avvisningsGrunn: String?,
loggingMeta: LoggingMeta,
) {
requireNotNull(oppgave.dokumentInfoId) { "DokumentInfoId må være satt for å kunne ferdigstille oppgave" }
val journalpost = safJournalpostGraphQlClient.getJournalpost(oppgave.journalpostId)
securelog.info("journalpostid ${oppgave.journalpostId} ble hentet: ${objectMapper.writeValueAsString(journalpost)}")

if (safJournalpostGraphQlClient.erFerdigstilt(journalpost)) {
log.info("Journalpost med id ${oppgave.journalpostId} er allerede ferdigstilt, sykmeldingId ${oppgave.sykmeldingId}")
}
else {
log.info("Ferdigstiller journalpost med id ${oppgave.journalpostId}, dokumentInfoId ${oppgave.dokumentInfoId}, sykmeldingId ${oppgave.sykmeldingId} og oppgaveId ${oppgave.oppgaveId}")
dokarkivClient.oppdaterOgFerdigstillNasjonalJournalpost(
journalpostId = oppgave.journalpostId,
dokumentInfoId = oppgave.dokumentInfoId,
pasientFnr = oppgave.fnr!!,
sykmeldingId = oppgave.sykmeldingId,
sykmelder = sykmelderService.getSykmelder(oppgave.papirSmRegistrering.behandler?.hpr!!, "callId"),
loggingMeta = loggingMeta,
navEnhet = enhet,
avvist = true,
perioder = oppgave.papirSmRegistrering.perioder ?: emptyList(),
)

oppgaveClient.ferdigstillOppgave(oppgave.oppgaveId.toString(), oppgave.sykmeldingId)

dokarkivClient.updateDocument(
journalpostid = oppgave.journalpostId,
documentId = oppgave.dokumentInfoId,
tittel = createTitleNasjonal(oppgave.papirSmRegistrering.perioder, true),
)
}
}

fun sendUpdatedSykmelding(oppgave: OppgaveDbModel, sykmeldt: Person, navEmail: String, values: FerdistilltRegisterOppgaveValues) {
val receivedSykmelding =
mapToReceivedSykmelding(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,8 @@ class OppgaveClient(
oppgaveId: String,
sykmeldingId: String,
ferdigstillRegistrering: FerdigstillRegistrering,
loggingMeta: LoggingMeta
loggingMeta: LoggingMeta,
beskrivelse: String?
) {
val oppgave = getNasjonalOppgave(oppgaveId, sykmeldingId)
if (oppgave.status == OppgaveStatus.FERDIGSTILT.name || oppgave.status == OppgaveStatus.FEILREGISTRERT.name) {
Expand All @@ -80,10 +81,10 @@ class OppgaveClient(
tilordnetRessurs = ferdigstillRegistrering.veileder.veilederIdent,
tildeltEnhetsnr = ferdigstillRegistrering.navEnhet,
mappeId = null,
beskrivelse = oppgave.beskrivelse,
beskrivelse = if (beskrivelse?.isNotBlank() == true) beskrivelse else oppgave.beskrivelse,
)
log.info(
"Ferdigstiller oppgave med {}, {}",
"Ferdigstiller nasjonal oppgave med {}, {}",
StructuredArguments.keyValue("oppgaveId", oppgaveId),
StructuredArguments.fields(loggingMeta),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,29 @@ class SykmelderService(
)
}

fun getSykmelderForAvvistOppgave(
hpr: String?,
callId: String,
oppgaveId: Int,
): Sykmelder {
log.info("Henter sykmelder fra HPR og PDL for oppgaveid $oppgaveId")
if (hpr == null) {
return getDefaultSykmelder()
}
return getSykmelder(hpr, callId)
}

private fun getDefaultSykmelder(): Sykmelder =
Sykmelder(
fornavn = "Helseforetak",
hprNummer = null,
fnr = null,
aktorId = null,
mellomnavn = null,
etternavn = null,
godkjenninger = null,
)

suspend fun getTssIdInfotrygd(samhandlerFnr: String, samhandlerOrgName: String, loggingMeta: LoggingMeta, sykmeldingId: String): String {
return smtssClient.findBestTssInfotrygd(samhandlerFnr, samhandlerOrgName, loggingMeta, sykmeldingId)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class NasjonalCommonService(
callId = callId,
)

val tssId = sykmelderService.getTssIdInfotrygd(sykmelder.fnr, "", loggingMeta, sykmeldingId)
val tssId = sykmelderService.getTssIdInfotrygd(sykmelder.fnr!!, "", loggingMeta, sykmeldingId)

val datoOpprettet = oppgave.datoOpprettet
val journalpostId = oppgave.journalpostId
Expand All @@ -67,7 +67,7 @@ class NasjonalCommonService(
healthInformation.toSykmelding(
sykmeldingId,
pasient.aktorId,
sykmelder.aktorId,
sykmelder.aktorId!!,
sykmeldingId,
getLocalDateTime(msgHead.msgInfo.genDate),
)
Expand Down Expand Up @@ -187,4 +187,4 @@ class NasjonalCommonService(
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
@@ -0,0 +1,115 @@
package no.nav.sykdig.digitalisering.papirsykmelding

import net.logstash.logback.argument.StructuredArguments
import no.nav.sykdig.LoggingMeta
import no.nav.sykdig.applog
import no.nav.sykdig.digitalisering.ferdigstilling.GosysService
import no.nav.sykdig.digitalisering.ferdigstilling.oppgave.NasjonalOppgaveResponse
import no.nav.sykdig.digitalisering.ferdigstilling.oppgave.OppgaveClient
import no.nav.sykdig.digitalisering.helsenett.SykmelderService
import no.nav.sykdig.digitalisering.papirsykmelding.api.model.FerdigstillRegistrering
import no.nav.sykdig.digitalisering.papirsykmelding.api.model.Veileder
import no.nav.sykdig.digitalisering.papirsykmelding.db.model.NasjonalManuellOppgaveDAO
import no.nav.sykdig.digitalisering.sykmelding.service.JournalpostService
import no.nav.sykdig.securelog
import org.springframework.stereotype.Service
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

@Service
class NasjonalFerdigstillingsService(
private val journalpostService: JournalpostService,
private val nasjonalCommonService: NasjonalCommonService,
private val sykmelderService: SykmelderService,
private val oppgaveClient: OppgaveClient,
private val gosysService: GosysService,
) {

val log = applog()
val securelog = securelog()


suspend fun ferdigstillOppgave(
ferdigstillRegistrering: FerdigstillRegistrering,
beskrivelse: String?,
loggingMeta: LoggingMeta,
oppgaveId: String,
) {
oppgaveClient.ferdigstillNasjonalOppgave(oppgaveId, ferdigstillRegistrering.sykmeldingId, ferdigstillRegistrering, loggingMeta, beskrivelse)
}

suspend fun ferdigstillNasjonalAvvistOppgave(
lokalOppgave: NasjonalManuellOppgaveDAO,
eksternOppgave: NasjonalOppgaveResponse,
navEnhet: String,
avvisningsgrunn: String?,
veilederIdent: String,
) {
val sykmeldingId = lokalOppgave.sykmeldingId
val oppgaveId = lokalOppgave.oppgaveId
val loggingMeta = nasjonalCommonService.getLoggingMeta(lokalOppgave.sykmeldingId, lokalOppgave)
requireNotNull(lokalOppgave.oppgaveId)
val sykmelder = sykmelderService.getSykmelderForAvvistOppgave(lokalOppgave.papirSmRegistrering.behandler?.hpr, lokalOppgave.sykmeldingId, lokalOppgave.oppgaveId)


requireNotNull(lokalOppgave.fnr)
val ferdigstillRegistrering =
FerdigstillRegistrering(
oppgaveId = oppgaveId,
journalpostId = lokalOppgave.journalpostId,
dokumentInfoId = lokalOppgave.dokumentInfoId,
pasientFnr = lokalOppgave.fnr,
sykmeldingId = sykmeldingId,
sykmelder = sykmelder,
navEnhet = navEnhet,
veileder = Veileder(veilederIdent),
avvist = true,
oppgave = eksternOppgave,
)
journalpostService.ferdigstillNasjonalJournalpost(ferdigstillRegistrering, lokalOppgave.papirSmRegistrering.perioder, loggingMeta)
ferdigstillOppgave(
ferdigstillRegistrering = ferdigstillRegistrering,
beskrivelse = lagAvvisOppgavebeskrivelse(
opprinneligBeskrivelse = eksternOppgave.beskrivelse,
veileder = Veileder(veilederIdent),
navEnhet = navEnhet,
avvisSykmeldingReason = avvisningsgrunn,
),
loggingMeta = loggingMeta,
oppgaveId = oppgaveId.toString(),
)
}

fun lagAvvisOppgavebeskrivelse(
avvisSykmeldingReason: String?,
opprinneligBeskrivelse: String?,
veileder: Veileder,
navEnhet: String,
timestamp: LocalDateTime? = null,
): String {
val oppdatertBeskrivelse =
when {
!avvisSykmeldingReason.isNullOrEmpty() ->
"Avvist papirsykmelding med årsak: $avvisSykmeldingReason"

else -> "Avvist papirsykmelding uten oppgitt årsak."
}
val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm")
val formattedTimestamp = (timestamp ?: LocalDateTime.now()).format(formatter)
return "--- $formattedTimestamp ${veileder.veilederIdent}, $navEnhet ---\n$oppdatertBeskrivelse\n\n$opprinneligBeskrivelse"
}


fun ferdigstillOgSendOppgaveTilGosys(oppgaveId: String, authorization: String, eksisterendeOppgave: NasjonalManuellOppgaveDAO) {
val sykmeldingId = eksisterendeOppgave.sykmeldingId
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)

}

}
Loading

0 comments on commit 3c6f924

Please sign in to comment.