diff --git a/nais/topics/varselbus-topic-dev.yaml b/nais/topics/varselbus-topic-dev.yaml index 02ceb2ecc..204f77904 100644 --- a/nais/topics/varselbus-topic-dev.yaml +++ b/nais/topics/varselbus-topic-dev.yaml @@ -42,3 +42,6 @@ spec: - team: team-esyfo application: meroppfolging-backend access: write + - team: teamsykefravr + application: ismanglendemedvirkning + access: write diff --git a/nais/topics/varselbus-topic-prod.yaml b/nais/topics/varselbus-topic-prod.yaml index 71d90db41..f7f5579a6 100644 --- a/nais/topics/varselbus-topic-prod.yaml +++ b/nais/topics/varselbus-topic-prod.yaml @@ -39,3 +39,6 @@ spec: - team: team-esyfo application: meroppfolging-backend access: write + - team: teamsykefravr + application: ismanglendemedvirkning + access: write diff --git a/src/main/kotlin/no/nav/syfo/BootstrapApplication.kt b/src/main/kotlin/no/nav/syfo/BootstrapApplication.kt index 7b1dd95e5..7a71d6d32 100644 --- a/src/main/kotlin/no/nav/syfo/BootstrapApplication.kt +++ b/src/main/kotlin/no/nav/syfo/BootstrapApplication.kt @@ -144,6 +144,7 @@ fun createEngineEnvironment(): ApplicationEngineEnvironment = applicationEngineE ) val arbeidsuforhetForhandsvarselService = ArbeidsuforhetForhandsvarselService(senderFacade) val friskmeldingTilArbeidsformidlingVedtakService = FriskmeldingTilArbeidsformidlingVedtakService(senderFacade) + val manglendeMedvirkningVarselService = ManglendeMedvirkningVarselService(senderFacade) val oppfolgingsplanVarselService = OppfolgingsplanVarselService(senderFacade, accessControlService, env.urlEnv.oppfolgingsplanerUrl) val sykepengerMaxDateService = SykepengerMaxDateService(database, pdlConsumer) @@ -177,6 +178,7 @@ fun createEngineEnvironment(): ApplicationEngineEnvironment = applicationEngineE arbeidsuforhetForhandsvarselService, mikrofrontendService, friskmeldingTilArbeidsformidlingVedtakService, + manglendeMedvirkningVarselService, ) val veilederTilgangskontrollConsumer = diff --git a/src/main/kotlin/no/nav/syfo/kafka/consumers/varselbus/domain/EsyfovarselHendelse.kt b/src/main/kotlin/no/nav/syfo/kafka/consumers/varselbus/domain/EsyfovarselHendelse.kt index 2638f77af..a5a6efb3b 100644 --- a/src/main/kotlin/no/nav/syfo/kafka/consumers/varselbus/domain/EsyfovarselHendelse.kt +++ b/src/main/kotlin/no/nav/syfo/kafka/consumers/varselbus/domain/EsyfovarselHendelse.kt @@ -81,6 +81,7 @@ enum class HendelseType { SM_AKTIVITETSPLIKT, SM_ARBEIDSUFORHET_FORHANDSVARSEL, SM_VEDTAK_FRISKMELDING_TIL_ARBEIDSFORMIDLING, + SM_FORHANDSVARSEL_MANGLENDE_MEDVIRKNING, } fun ArbeidstakerHendelse.getSynligTom(): LocalDateTime? { diff --git a/src/main/kotlin/no/nav/syfo/service/ManglendeMedvirkningVarselService.kt b/src/main/kotlin/no/nav/syfo/service/ManglendeMedvirkningVarselService.kt new file mode 100644 index 000000000..8545c7ed7 --- /dev/null +++ b/src/main/kotlin/no/nav/syfo/service/ManglendeMedvirkningVarselService.kt @@ -0,0 +1,29 @@ +package no.nav.syfo.service + +import no.nav.syfo.consumer.distribuerjournalpost.DistibusjonsType +import no.nav.syfo.kafka.consumers.varselbus.domain.ArbeidstakerHendelse +import no.nav.syfo.utils.dataToVarselData +import org.slf4j.LoggerFactory + +class ManglendeMedvirkningVarselService( + private val senderFacade: SenderFacade, +) { + + suspend fun sendVarselTilArbeidstaker(varselHendelse: ArbeidstakerHendelse) { + val data = dataToVarselData(varselHendelse.data) + requireNotNull(data.journalpost) + requireNotNull(data.journalpost.id) + + log.info("Sending [SM_FORHANDSVARSEL_MANGLENDE_MEDVIRKNING] with uuid ${data.journalpost.uuid} to print") + senderFacade.sendBrevTilFysiskPrint( + uuid = data.journalpost.uuid, + varselHendelse = varselHendelse, + journalpostId = data.journalpost.id, + distribusjonsType = DistibusjonsType.VIKTIG, + ) + } + + companion object { + private val log = LoggerFactory.getLogger(ManglendeMedvirkningVarselService::class.qualifiedName) + } +} diff --git a/src/main/kotlin/no/nav/syfo/service/VarselBusService.kt b/src/main/kotlin/no/nav/syfo/service/VarselBusService.kt index e19239741..c2b57a04e 100644 --- a/src/main/kotlin/no/nav/syfo/service/VarselBusService.kt +++ b/src/main/kotlin/no/nav/syfo/service/VarselBusService.kt @@ -15,6 +15,7 @@ class VarselBusService( private val arbeidsuforhetForhandsvarselService: ArbeidsuforhetForhandsvarselService, private val mikrofrontendService: MikrofrontendService, private val friskmeldingTilArbeidsformidlingVedtakService: FriskmeldingTilArbeidsformidlingVedtakService, + private val manglendeMedvirkningVarselService: ManglendeMedvirkningVarselService, ) { private val log: Logger = LoggerFactory.getLogger(VarselBusService::class.qualifiedName) suspend fun processVarselHendelse( @@ -62,11 +63,14 @@ class VarselBusService( SM_ARBEIDSUFORHET_FORHANDSVARSEL -> arbeidsuforhetForhandsvarselService.sendVarselTilArbeidstaker( varselHendelse.toArbeidstakerHendelse() ) - + SM_VEDTAK_FRISKMELDING_TIL_ARBEIDSFORMIDLING -> friskmeldingTilArbeidsformidlingVedtakService.sendVarselTilArbeidstaker( varselHendelse.toArbeidstakerHendelse() ) + SM_FORHANDSVARSEL_MANGLENDE_MEDVIRKNING -> + manglendeMedvirkningVarselService.sendVarselTilArbeidstaker(varselHendelse.toArbeidstakerHendelse()) + else -> { log.warn("Klarte ikke mappe varsel av type ${varselHendelse.type} ved behandling forsøk") } diff --git a/src/test/kotlin/no/nav/syfo/service/ManglendeMedvirkningVarselServiceTest.kt b/src/test/kotlin/no/nav/syfo/service/ManglendeMedvirkningVarselServiceTest.kt new file mode 100644 index 000000000..067f3eeb2 --- /dev/null +++ b/src/test/kotlin/no/nav/syfo/service/ManglendeMedvirkningVarselServiceTest.kt @@ -0,0 +1,61 @@ +package no.nav.syfo.service + +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.core.spec.style.DescribeSpec +import io.mockk.clearAllMocks +import io.mockk.coVerify +import io.mockk.mockk +import no.nav.syfo.consumer.distribuerjournalpost.DistibusjonsType +import no.nav.syfo.kafka.consumers.varselbus.domain.ArbeidstakerHendelse +import no.nav.syfo.kafka.consumers.varselbus.domain.HendelseType +import no.nav.syfo.kafka.consumers.varselbus.domain.VarselData +import no.nav.syfo.kafka.consumers.varselbus.domain.VarselDataJournalpost +import org.amshove.kluent.shouldBeEqualTo +import java.io.IOException + +class ManglendeMedvirkningVarselServiceTest : DescribeSpec({ + val senderFacade = mockk(relaxed = true) + val manglendeMedvirkningVarselService = ManglendeMedvirkningVarselService(senderFacade) + val journalpostId = "620049753" + val journalpostUuid = "bda0b55a-df72-4888-a5a5-6bfa74cacafe" + val hendelse = ArbeidstakerHendelse( + type = HendelseType.SM_FORHANDSVARSEL_MANGLENDE_MEDVIRKNING, + ferdigstill = false, + data = varselData(journalpostId = journalpostId, journalpostUuid = journalpostUuid), + arbeidstakerFnr = SM_FNR, + orgnummer = null, + ) + + beforeTest { + clearAllMocks() + } + + describe("Varsel ang. manglende medvirkning") { + it("Sender varsel til fysisk print") { + manglendeMedvirkningVarselService.sendVarselTilArbeidstaker(hendelse) + + coVerify(exactly = 1) { + senderFacade.sendBrevTilFysiskPrint( + journalpostUuid, + hendelse, + journalpostId, + DistibusjonsType.VIKTIG, + ) + } + } + + it("Får IOException dersom mangende journalpostid") { + val feilendeHendelse = hendelse.copy( + data = VarselData( + journalpost = VarselDataJournalpost(uuid = "something", id = null) + ) + ) + + val exception = shouldThrow { + manglendeMedvirkningVarselService.sendVarselTilArbeidstaker(feilendeHendelse) + } + + exception.message shouldBeEqualTo "ArbeidstakerHendelse har feil format" + } + } +})