Skip to content

Commit

Permalink
chore: split nasjonal and utenlandsk ferdigstillingServices
Browse files Browse the repository at this point in the history
  • Loading branch information
helehar committed Dec 16, 2024
1 parent dcdce12 commit bf4a99e
Show file tree
Hide file tree
Showing 13 changed files with 242 additions and 164 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ class DokarkivClient(
loggingMeta: LoggingMeta,
navEnhet: String,
avvist: Boolean,
receivedSykmelding: ReceivedSykmelding,
receivedSykmelding: ReceivedSykmelding?,
): String? {
val oppdaterJournalpostRequest = createOppdaterJournalpostNasjonalRequest(dokumentInfoId, pasientFnr, sykmelder, avvist, receivedSykmelding)
oppdaterJournalpostRequest(oppdaterJournalpostRequest, sykmeldingId, journalpostId)
Expand All @@ -408,18 +408,18 @@ class DokarkivClient(
pasientFnr: String,
sykmelder: Sykmelder,
avvist: Boolean,
receivedSykmelding: ReceivedSykmelding,
receivedSykmelding: ReceivedSykmelding?,
): OppdaterJournalpostRequest {
val oppdaterJournalpostRequest = OppdaterJournalpostRequest(
avsenderMottaker = getAvsenderMottakerRequest(sykmelder),
bruker = DokBruker(id = pasientFnr),
sak = Sak(),
tittel = createTitleNasjonal(receivedSykmelding.sykmelding.perioder, avvist),
tittel = createTitleNasjonal(receivedSykmelding?.sykmelding?.perioder, avvist),
dokumenter = if (dokumentInfoId != null) {
listOf(
DokumentInfo(
dokumentInfoId = dokumentInfoId,
tittel = createTitleNasjonal(receivedSykmelding.sykmelding.perioder, avvist),
tittel = createTitleNasjonal(receivedSykmelding?.sykmelding?.perioder, avvist),
),
)
} else {
Expand Down Expand Up @@ -486,7 +486,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
Expand Up @@ -9,11 +9,14 @@ import no.nav.sykdig.digitalisering.ferdigstilling.mapping.mapToReceivedSykmeldi
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.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.pdl.Person
import no.nav.sykdig.digitalisering.pdl.toFormattedNameString
import no.nav.sykdig.digitalisering.saf.SafJournalpostGraphQlClient
import no.nav.sykdig.digitalisering.sykmelding.ReceivedSykmelding
import no.nav.sykdig.digitalisering.sykmelding.service.JournalpostService
import no.nav.sykdig.model.OppgaveDbModel
import no.nav.sykdig.objectMapper
import no.nav.sykdig.securelog
Expand All @@ -32,7 +35,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 +164,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,125 @@
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,
) {
if (lokalOppgave.oppgaveId == null) {
log.error("Ingen oppgave tilgjengelig med oppgaveId ${lokalOppgave.oppgaveId} ")
return
}
// dette er nok ikke mulig
if (lokalOppgave.fnr == null) {
log.error("Fant ikke fnr for oppgave med id ${lokalOppgave.oppgaveId}. kan ikke avvise oppgave")
return
}

val sykmeldingId = lokalOppgave.sykmeldingId
val oppgaveId = lokalOppgave.oppgaveId
val jounalpostId = lokalOppgave.journalpostId
val dokumentInfoId = lokalOppgave.dokumentInfoId
val loggingMeta = nasjonalCommonService.getLoggingMeta(lokalOppgave.sykmeldingId, lokalOppgave)
val sykmelder = sykmelderService.getSykmelderForAvvistOppgave(lokalOppgave.papirSmRegistrering.behandler?.hpr, lokalOppgave.sykmeldingId, lokalOppgave.oppgaveId)


val ferdigstillRegistrering =
FerdigstillRegistrering(
oppgaveId = oppgaveId,
journalpostId = jounalpostId,
dokumentInfoId = dokumentInfoId,
pasientFnr = lokalOppgave.fnr,
sykmeldingId = sykmeldingId,
sykmelder = sykmelder,
navEnhet = navEnhet,
veileder = Veileder(veilederIdent),
avvist = true,
oppgave = eksternOppgave,
)
journalpostService.ferdigstillNasjonalJournalpost(ferdigstillRegistrering, null, 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 bf4a99e

Please sign in to comment.