Skip to content

Commit

Permalink
Deleete pilot sending ssps (#583)
Browse files Browse the repository at this point in the history
* Delete sending of SSPS from job for pilot-users

* Delete test

* wip

* wip

* Log after dataToVarselData()

* Log data inside toArbeidstakerHendelse

* put(ENABLE_AUTO_COMMIT_CONFIG, "true")

* wip

* Revert ENABLE_AUTO_COMMIT_CONFIG to false

* Logging in flow, with fnr

* Delete sending of SSPS from job for pilot-users

* Delete test

* wip

* wip

* Log after dataToVarselData()

* Log data inside toArbeidstakerHendelse

* put(ENABLE_AUTO_COMMIT_CONFIG, "true")

* wip

* Revert ENABLE_AUTO_COMMIT_CONFIG to false

* Logging in flow, with fnr

* wip

* wip

* Add backup table for utsendt SSPS for pilot

* Add backup table for utsendt SSPS for pilot

* Cleanup: delete test logging

* Cleanup: delete test logging2

* wip

* qa

---------

Co-authored-by: Luan Tran <[email protected]>
  • Loading branch information
Vitenok and luantr authored Oct 25, 2024
1 parent 0837300 commit 127d0a7
Show file tree
Hide file tree
Showing 10 changed files with 118 additions and 125 deletions.
2 changes: 1 addition & 1 deletion nais/topics/varselbus-topic-dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@ spec:
access: write
- team: team-esyfo
application: esyfo-kafka-manager
access: write
access: readwrite
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const val OVRE_EIKER_ENHETSNUMMER = "0624"
const val ASKER_ENHETSNUMMER = "0220"
const val NORDRE_AKER_ENHETSNUMMER = "0331"
const val TEST_ENHETSNUMMER = "0314"
const val TEST_ENHETSNUMMER_2 = "1203"

data class BehandlendeEnhet(
var enhetId: String,
Expand All @@ -15,5 +16,5 @@ fun BehandlendeEnhet.isPilot(isProd: Boolean): Boolean {
return listOf(OVRE_EIKER_ENHETSNUMMER, ASKER_ENHETSNUMMER, NORDRE_AKER_ENHETSNUMMER).contains(this.enhetId)
}

return listOf(TEST_ENHETSNUMMER).contains(this.enhetId)
return listOf(TEST_ENHETSNUMMER, TEST_ENHETSNUMMER_2, "1037", "1742", "0105", "1532", "1169", "1837", "0806").contains(this.enhetId)
}
31 changes: 31 additions & 0 deletions src/main/kotlin/no/nav/syfo/db/UtsendtVarselDAO.kt
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,34 @@ fun DatabaseInterface.deleteUtsendtVarselByFnr(fnr: PersonIdent) {
}
}

fun DatabaseInterface.storeUtsendtMerVeiledningVarselBackup(PUtsendtVarsel: PUtsendtVarsel) {
val insertStatement = """INSERT INTO UTSENDT_MER_VEILEDNING_VARSEL_BACKUP (
uuid,
narmesteLeder_fnr,
fnr,
orgnummer,
type,
kanal,
utsendt_tidspunkt,
ekstern_ref,
arbeidsgivernotifikasjon_merkelapp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
""".trimIndent()

connection.use { connection ->
connection.prepareStatement(insertStatement).use {
it.setObject(1, UUID.fromString(PUtsendtVarsel.uuid))
it.setString(2, PUtsendtVarsel.narmesteLederFnr)
it.setString(3, PUtsendtVarsel.fnr)
it.setString(4, PUtsendtVarsel.orgnummer)
it.setString(5, PUtsendtVarsel.type)
it.setString(6, PUtsendtVarsel.kanal)
it.setTimestamp(7, Timestamp.valueOf(PUtsendtVarsel.utsendtTidspunkt))
it.setString(8, PUtsendtVarsel.eksternReferanse)
it.setString(9, PUtsendtVarsel.arbeidsgivernotifikasjonMerkelapp)
it.executeUpdate()
}

connection.commit()
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class VarselBusKafkaConsumer(
"Exception in [$topicVarselBus]-listener: ${e.message}",
e
)
applicationState.shutdownApplication()
kafkaListener.commitSync()
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package no.nav.syfo.kafka.consumers.varselbus.domain

import com.fasterxml.jackson.annotation.JsonTypeInfo
import no.nav.syfo.kafka.common.createObjectMapper
import java.io.Serializable
import java.time.LocalDateTime
import no.nav.syfo.kafka.common.createObjectMapper

private val objectMapper = createObjectMapper()

Expand Down Expand Up @@ -167,3 +167,4 @@ fun ArbeidstakerHendelse.isNotEligibleForMikrofrontendProcessing(): Boolean {

fun HendelseType.isNotValidHendelseType() =
!this.isAktivitetspliktType() && !this.isDialogmoteInnkallingType() && !this.isMerOppfolgingType()

76 changes: 31 additions & 45 deletions src/main/kotlin/no/nav/syfo/service/MerVeiledningVarselService.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package no.nav.syfo.service

import java.net.URL
import java.time.LocalDateTime
import java.time.ZoneOffset
import java.util.*
import no.nav.syfo.BRUKERNOTIFIKASJONER_MER_VEILEDNING_MESSAGE_TEXT
import no.nav.syfo.DITT_SYKEFRAVAER_MER_VEILEDNING_MESSAGE_TEXT
import no.nav.syfo.Environment
Expand All @@ -9,20 +13,19 @@ import no.nav.syfo.behandlendeenhet.domain.isPilot
import no.nav.syfo.consumer.distribuerjournalpost.DistibusjonsType
import no.nav.syfo.consumer.pdfgen.PdfgenClient
import no.nav.syfo.db.DatabaseInterface
import no.nav.syfo.db.domain.Kanal.*
import no.nav.syfo.db.domain.PUtsendtVarsel
import no.nav.syfo.db.fetchFNRUtsendtMerVeiledningVarsler
import no.nav.syfo.db.storeUtsendtMerVeiledningVarselBackup
import no.nav.syfo.isProdGcp
import no.nav.syfo.kafka.consumers.varselbus.domain.ArbeidstakerHendelse
import no.nav.syfo.kafka.producers.dittsykefravaer.domain.DittSykefravaerMelding
import no.nav.syfo.kafka.producers.dittsykefravaer.domain.DittSykefravaerVarsel
import no.nav.syfo.kafka.producers.dittsykefravaer.domain.OpprettMelding
import no.nav.syfo.kafka.producers.dittsykefravaer.domain.Variant
import no.nav.syfo.service.SenderFacade.InternalBrukernotifikasjonType.OPPGAVE
import no.nav.syfo.service.SenderFacade.InternalBrukernotifikasjonType.*
import no.nav.syfo.utils.dataToVarselData
import org.slf4j.LoggerFactory
import java.net.URL
import java.time.LocalDateTime
import java.time.ZoneOffset
import java.util.*

const val DITT_SYKEFRAVAER_HENDELSE_TYPE_MER_VEILEDNING = "ESYFOVARSEL_MER_VEILEDNING"

Expand All @@ -47,26 +50,33 @@ class MerVeiledningVarselService(
behandlendeEnhetClient.getBehandlendeEnhet(arbeidstakerHendelse.arbeidstakerFnr)
?.isPilot(env.isProdGcp()) == true

when {
isBrukerReservert -> {
sendInformasjonTilReserverte(arbeidstakerHendelse, planlagtVarselUuid)
}

isPilotbruker -> {
sendInformasjonTilDigitalePilotBrukere(arbeidstakerHendelse, planlagtVarselUuid)
}

else -> {
sendInformasjonTilDigitaleIkkePilotBrukere(arbeidstakerHendelse, planlagtVarselUuid)
}
val kanal = if (isBrukerReservert) {
BREV
} else {
BRUKERNOTIFIKASJON
}

sendOppgaveTilDittSykefravaer(arbeidstakerHendelse.arbeidstakerFnr, planlagtVarselUuid, arbeidstakerHendelse)
databaseAccess.storeUtsendtMerVeiledningVarselBackup(
PUtsendtVarsel(
uuid = UUID.randomUUID().toString(),
fnr = arbeidstakerHendelse.arbeidstakerFnr,
aktorId = null,
narmesteLederFnr = null,
orgnummer = arbeidstakerHendelse.orgnummer,
type = arbeidstakerHendelse.type.name,
kanal = kanal.name,
utsendtTidspunkt = LocalDateTime.now(),
planlagtVarselId = null,
eksternReferanse = "${UUID.randomUUID()}",
ferdigstiltTidspunkt = null,
arbeidsgivernotifikasjonMerkelapp = null,
),
)
}

private suspend fun sendInformasjonTilReserverte(
arbeidstakerHendelse: ArbeidstakerHendelse,
planlagtVarselUuid: String
planlagtVarselUuid: String,
) {
val pdf = pdfgenConsumer.getMerVeiledningPdfForReserverte(arbeidstakerHendelse.arbeidstakerFnr)

Expand All @@ -83,33 +93,9 @@ class MerVeiledningVarselService(
sendBrevVarselTilArbeidstaker(planlagtVarselUuid, arbeidstakerHendelse, journalpostId!!)
}

private suspend fun sendInformasjonTilDigitalePilotBrukere(
arbeidstakerHendelse: ArbeidstakerHendelse,
planlagtVarselUuid: String
) {
val pdf =
pdfgenConsumer.getMerVeiledningPdfForDigitalePilotBrukere(arbeidstakerHendelse.arbeidstakerFnr)

val journalpostId = pdf?.let {
dokarkivService.journalforDokument(
arbeidstakerHendelse.arbeidstakerFnr,
planlagtVarselUuid,
it,
)
}

if (journalpostId != null) {
log.info("Journalførte SSPS for pilotbruker i dokarkiv, journalpostId er $journalpostId")
} else {
log.error("Kunne ikke journalføre SSPS for pilotbruker i dokarkiv for planlagt uuid $planlagtVarselUuid.")
}

sendDigitaltVarselTilArbeidstaker(arbeidstakerHendelse)
}

private suspend fun sendInformasjonTilDigitaleIkkePilotBrukere(
arbeidstakerHendelse: ArbeidstakerHendelse,
planlagtVarselUuid: String
planlagtVarselUuid: String,
) {
val pdf =
pdfgenConsumer.getMerVeiledningPdfForDigitale(arbeidstakerHendelse.arbeidstakerFnr)
Expand All @@ -135,9 +121,9 @@ class MerVeiledningVarselService(
requireNotNull(data.journalpost.id)
val userAccessStatus = accessControlService.getUserAccessStatus(arbeidstakerHendelse.arbeidstakerFnr)
if (databaseAccess.fetchFNRUtsendtMerVeiledningVarsler().contains(arbeidstakerHendelse.arbeidstakerFnr)) {
log.info("Fnr er i listen fra utsendt_varsel, sender ikke varsel")
return
}

if (userAccessStatus.canUserBeDigitallyNotified) {
sendDigitaltVarselTilArbeidstaker(arbeidstakerHendelse)
} else {
Expand Down
41 changes: 32 additions & 9 deletions src/main/kotlin/no/nav/syfo/service/SenderFacade.kt
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package no.nav.syfo.service

import java.net.URL
import java.time.LocalDateTime
import java.util.*
import no.nav.syfo.consumer.distribuerjournalpost.DistibusjonsType
import no.nav.syfo.db.DatabaseInterface
import no.nav.syfo.db.domain.Kanal
import no.nav.syfo.db.domain.Kanal.ARBEIDSGIVERNOTIFIKASJON
import no.nav.syfo.db.domain.Kanal.BREV
import no.nav.syfo.db.domain.Kanal.BRUKERNOTIFIKASJON
import no.nav.syfo.db.domain.Kanal.DINE_SYKMELDTE
import no.nav.syfo.db.domain.Kanal.DITT_SYKEFRAVAER
import no.nav.syfo.db.domain.Kanal.*
import no.nav.syfo.db.domain.PUtsendtVarsel
import no.nav.syfo.db.domain.PUtsendtVarselFeilet
import no.nav.syfo.db.fetchUferdigstilteVarsler
import no.nav.syfo.db.setUtsendtVarselToFerdigstilt
import no.nav.syfo.db.storeUtsendtMerVeiledningVarselBackup
import no.nav.syfo.db.storeUtsendtVarsel
import no.nav.syfo.db.storeUtsendtVarselFeilet
import no.nav.syfo.domain.PersonIdent
Expand All @@ -25,9 +25,6 @@ import no.nav.syfo.kafka.producers.dittsykefravaer.domain.DittSykefravaerVarsel
import no.nav.syfo.utils.enumValueOfOrNull
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.net.URL
import java.time.LocalDateTime
import java.util.*

class SenderFacade(
private val dineSykmeldteHendelseKafkaProducer: DineSykmeldteHendelseKafkaProducer,
Expand Down Expand Up @@ -178,7 +175,7 @@ class SenderFacade(

suspend fun ferdigstillDittSykefravaerVarslerAvTyper(
varselHendelse: ArbeidstakerHendelse,
varselTyper: Set<HendelseType>
varselTyper: Set<HendelseType>,
) {
fetchUferdigstilteVarsler(
PersonIdent(varselHendelse.arbeidstakerFnr),
Expand Down Expand Up @@ -305,6 +302,32 @@ class SenderFacade(
)
}

fun lagreUtsendtMerVeiledningVarselBackUp(
kanal: Kanal,
varselHendelse: ArbeidstakerHendelse,
eksternReferanse: String,
) {
if (varselHendelse.type == HendelseType.SM_MER_VEILEDNING) {
log.info("Storing backup mer veiledning varsel")
database.storeUtsendtMerVeiledningVarselBackup(
PUtsendtVarsel(
UUID.randomUUID().toString(),
varselHendelse.arbeidstakerFnr,
null,
null,
null,
varselHendelse.type.name,
kanal.name,
LocalDateTime.now(),
null,
eksternReferanse,
null,
null,
),
)
}
}

private fun lagreIkkeUtsendtArbeidstakerVarsel(
kanal: Kanal,
varselHendelse: ArbeidstakerHendelse,
Expand Down
2 changes: 1 addition & 1 deletion src/main/kotlin/no/nav/syfo/service/VarselBusService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class VarselBusService(
suspend fun processVarselHendelse(
varselHendelse: EsyfovarselHendelse,
) {
if (varselHendelse.skalFerdigstilles()) {
if (varselHendelse.skalFerdigstilles()) {
ferdigstillVarsel(varselHendelse)
} else {
when (varselHendelse.type) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
CREATE TABLE utsendt_mer_veiledning_varsel_backup
(
uuid UUID PRIMARY KEY,
fnr VARCHAR(11) NOT NULL,
aktor_id VARCHAR(13),
type VARCHAR(100) NOT NULL,
utsendt_tidspunkt TIMESTAMP NOT NULL,
planlagt_varsel_id UUID,
narmesteleder_fnr VARCHAR(11),
orgnummer varchar(9),
kanal VARCHAR(50),
ekstern_ref VARCHAR(50),
ferdigstilt_tidspunkt TIMESTAMP,
arbeidsgivernotifikasjon_merkelapp VARCHAR(50)
);

CREATE INDEX utsendt_mer_veiledning_varsel_backup_fnr_index ON utsendt_mer_veiledning_varsel_backup (fnr);
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import io.mockk.mockk
import no.nav.syfo.BRUKERNOTIFIKASJONER_MER_VEILEDNING_MESSAGE_TEXT
import no.nav.syfo.access.domain.UserAccessStatus
import no.nav.syfo.behandlendeenhet.BehandlendeEnhetClient
import no.nav.syfo.behandlendeenhet.domain.BehandlendeEnhet
import no.nav.syfo.consumer.distribuerjournalpost.DistibusjonsType
import no.nav.syfo.consumer.pdfgen.PdfgenClient
import no.nav.syfo.getTestEnv
Expand Down Expand Up @@ -118,70 +117,5 @@ class MerVeiledningVarselServiceTest : DescribeSpec({
)
}
}

it("Pilotbrukere får journalført egen variant av PDF, og får også digitalt varsel") {
coEvery { accessControlService.getUserAccessStatus(any()) } returns UserAccessStatus(
fnr = SM_FNR,
canUserBeDigitallyNotified = true
)

val journalpostId = "420049753"
val journalpostUuid = "cda0b55a-df72-4888-a5a5-6bfa74cacafe"
val planlagtVarselUuid = "bda0b55a-hf72-4888-a5a5-6bfa74cacafv"

val hendelse = ArbeidstakerHendelse(
type = HendelseType.SM_MER_VEILEDNING,
ferdigstill = false,
data = varselData(journalpostId = journalpostId, journalpostUuid = journalpostUuid),
arbeidstakerFnr = SM_FNR,
orgnummer = null,
)

coEvery { pdfgenClient.getMerVeiledningPdfForDigitalePilotBrukere(SM_FNR) } returns ByteArray(1)

coEvery { behandlendeEnhetClient.getBehandlendeEnhet(any()) } returns BehandlendeEnhet(
enhetId = "0314",
navn = "Test",
)

coEvery { dokarkivService.journalforDokument(any(), any(), any()) } returns journalpostId

merveiledningVarselService.sendVarselTilArbeidstakerFromJob(
arbeidstakerHendelse = hendelse,
planlagtVarselUuid = planlagtVarselUuid
)

coVerify(exactly = 0) {
senderFacade.sendBrevTilFysiskPrint(
journalpostUuid,
hendelse,
journalpostId,
DistibusjonsType.VIKTIG,
)
}

coVerify(exactly = 1) {
pdfgenClient.getMerVeiledningPdfForDigitalePilotBrukere(SM_FNR)
}

coVerify(exactly = 1) {
dokarkivService.journalforDokument(
SM_FNR,
planlagtVarselUuid,
any(),
)
}

coVerify(exactly = 1) {
senderFacade.sendTilBrukernotifikasjoner(
uuid = any(),
mottakerFnr = SM_FNR,
content = BRUKERNOTIFIKASJONER_MER_VEILEDNING_MESSAGE_TEXT,
url = any(),
varselHendelse = hendelse,
varseltype = SenderFacade.InternalBrukernotifikasjonType.OPPGAVE
)
}
}
}
})

0 comments on commit 127d0a7

Please sign in to comment.