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

Opprett sak og oppgave i samme river #723

Merged
merged 2 commits into from
Oct 23, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
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 @@ -16,7 +16,7 @@ import no.nav.helsearbeidsgiver.utils.log.sikkerLogger
import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr
import java.util.UUID

class LagreForespoerselMelding(
data class LagreForespoerselMelding(
val eventName: EventName,
val behovType: BehovType,
val transaksjonId: UUID,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,17 @@ class FeilLytter(
val behovSomHaandteres =
listOf(
BehovType.LAGRE_FORESPOERSEL,
BehovType.OPPRETT_OPPGAVE,
BehovType.OPPRETT_SAK,
BehovType.PERSISTER_OPPGAVE_ID,
BehovType.PERSISTER_SAK_ID,
BehovType.JOURNALFOER,
BehovType.LAGRE_JOURNALPOST_ID,
)
val eventerSomHaandteres =
listOf(
EventName.INNTEKTSMELDING_SKJEMA_LAGRET,
EventName.FORESPOERSEL_MOTTATT,
EventName.FORESPOERSEL_BESVART,
EventName.SAK_OG_OPPGAVE_OPPRETT_REQUESTED,
EventName.INNTEKTSMELDING_SKJEMA_LAGRET,
)

init {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,11 @@ enum class BehovType {
LAGRE_SELVBESTEMT_IM,
OPPRETT_SELVBESTEMT_SAK,
LAGRE_IM_SKJEMA,
SLETT_SAK, // kun brukt ved manuell kjøring

// Asynkrone endringer
LAGRE_EKSTERN_INNTEKTSMELDING, // kan erstattes av event
LAGRE_FORESPOERSEL, // kan erstattes av event
LAGRE_JOURNALPOST_ID, // kan erstattes av event
OPPRETT_OPPGAVE, // blir overflødig ved flytting av notifikasjondatabase
OPPRETT_SAK, // blir overflødig ved flytting av notifikasjondatabase
PERSISTER_OPPGAVE_ID, // kan erstattes av event
PERSISTER_SAK_ID, // kan erstattes av event

Expand Down Expand Up @@ -72,14 +69,11 @@ enum class EventName {
FORESPOERSEL_KASTET_TIL_INFOTRYGD,

SAK_OPPRETT_REQUESTED,
SAK_OPPRETTET,
SAK_OG_OPPGAVE_FERDIGSTILT,

MANUELL_SLETT_SAK_REQUESTED,

OPPGAVE_OPPRETT_REQUESTED,
OPPGAVE_LAGRET,
OPPGAVE_OPPRETTET,
SAK_OG_OPPGAVE_OPPRETT_REQUESTED,
SAK_OG_OPPGAVE_OPPRETTET,
SAK_OG_OPPGAVE_FERDIGSTILT,
SAK_OG_OPPGAVE_UTGAATT,
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ enum class Key(
SYKMELDT("sykmeldt"),
VIRKSOMHET("virksomhet"),
VIRKSOMHETER("virksomheter"),
ARBEIDSTAKER_INFORMASJON("arbeidstakerInformasjon"),
ARBEIDSFORHOLD("arbeidsforhold"),
SAK_ID("sak_id"),
PERSISTERT_SAK_ID("persistert_sak_id"),
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.pritopic.Pri
import java.util.UUID

object Log {
fun <T : Any> klasse(value: T) = "class" to value.simpleName()
fun <T : Any> klasse(value: T) = "class" to value::class.simpleName.orEmpty()

fun event(value: EventName) = "event" to value.name

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@ package no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest
import io.kotest.matchers.nulls.shouldNotBeNull
import io.kotest.matchers.shouldBe
import io.mockk.coEvery
import io.mockk.coVerify
import kotlinx.serialization.builtins.serializer
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.domene.Person
import no.nav.helsearbeidsgiver.felles.domene.PersonDato
import no.nav.helsearbeidsgiver.felles.json.lesOrNull
import no.nav.helsearbeidsgiver.felles.json.orgMapSerializer
import no.nav.helsearbeidsgiver.felles.json.personMapSerializer
Expand Down Expand Up @@ -108,28 +106,6 @@ class ForespoerselMottattIT : EndToEndTest() {
.shouldNotBeNull()
}

messagesFilteredForespoerselMottatt
.filter(BehovType.OPPRETT_SAK)
.firstAsMap()
.also {
it[Key.UUID]?.fromJson(UuidSerializer).shouldNotBeNull()
it[Key.ARBEIDSTAKER_INFORMASJON]?.fromJson(PersonDato.serializer()).shouldNotBeNull()

it[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoerselId
it[Key.ORGNRUNDERENHET]?.fromJson(Orgnr.serializer()) shouldBe Mock.orgnr
}

messagesFilteredForespoerselMottatt
.filter(BehovType.OPPRETT_OPPGAVE)
.firstAsMap()
.also {
it[Key.UUID]?.fromJson(UuidSerializer).shouldNotBeNull()
it[Key.VIRKSOMHET]?.fromJson(String.serializer()).shouldNotBeNull()

it[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoerselId
it[Key.ORGNRUNDERENHET]?.fromJson(Orgnr.serializer()) shouldBe Mock.orgnr
}

messages
.filter(EventName.SAK_OG_OPPGAVE_OPPRETT_REQUESTED)
.firstAsMap()
Expand All @@ -146,38 +122,16 @@ class ForespoerselMottattIT : EndToEndTest() {
}

messages
.filter(EventName.SAK_OPPRETTET)
.filter(EventName.SAK_OG_OPPGAVE_OPPRETTET)
.firstAsMap()
.also {
val data = it[Key.DATA].shouldNotBeNull().toMap()
data[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoerselId
data[Key.SAK_ID]?.fromJson(String.serializer()) shouldBe Mock.sakId
}

messages
.filter(EventName.OPPGAVE_OPPRETTET)
.firstAsMap()
.also {
val data = it[Key.DATA].shouldNotBeNull().toMap()
data[Key.OPPGAVE_ID]?.fromJson(String.serializer()) shouldBe Mock.oppgaveId
}
}

@Test
fun `Slett sak loeser test`() {
coEvery {
arbeidsgiverNotifikasjonKlient.hardDeleteSak(any())
} returns Unit

publish(
Key.EVENT_NAME to EventName.MANUELL_SLETT_SAK_REQUESTED.toJson(),
Key.BEHOV to BehovType.SLETT_SAK.toJson(),
Key.SAK_ID to Mock.sakId.toJson(),
)

coVerify(exactly = 1) { arbeidsgiverNotifikasjonKlient.hardDeleteSak(Mock.sakId) }
messages.all().size shouldBe 1
}

private object Mock {
val forespoerselId: UUID = UUID.randomUUID()
val orgnr = Orgnr.genererGyldig()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,8 @@ import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.db.SelvbestemtRepo
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.FerdigstillForespoerselSakOgOppgaveRiver
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.FjernPaaminnelseRiver
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.ForespoerselLagretRiver
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.OpprettOppgaveLoeser
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.OpprettSakLoeser
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.OpprettForespoerselSakOgOppgaveRiver
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.OpprettSelvbestemtSakRiver
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.SlettSakLoeser
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.UtgaattLoeser
import no.nav.helsearbeidsgiver.tokenprovider.oauth2ClientCredentialsTokenGetter
import no.nav.helsearbeidsgiver.utils.log.logger
Expand Down Expand Up @@ -56,27 +54,21 @@ fun RapidsConnection.createNotifikasjonRivers(
arbeidsgiverNotifikasjonKlient: ArbeidsgiverNotifikasjonKlient,
): RapidsConnection =
also {
logger.info("Starter ${OpprettForespoerselSakOgOppgaveRiver::class.simpleName}...")
OpprettForespoerselSakOgOppgaveRiver(linkUrl, arbeidsgiverNotifikasjonKlient).connect(this)

logger.info("Starter ${OpprettSelvbestemtSakRiver::class.simpleName}...")
OpprettSelvbestemtSakRiver(linkUrl, selvbestemtRepo, arbeidsgiverNotifikasjonKlient).connect(this)

logger.info("Starter ${FerdigstillForespoerselSakOgOppgaveRiver::class.simpleName}...")
FerdigstillForespoerselSakOgOppgaveRiver(linkUrl, arbeidsgiverNotifikasjonKlient).connect(this)

logger.info("Starter ${ForespoerselLagretRiver::class.simpleName}...")
ForespoerselLagretRiver(this)

logger.info("Starter ${OpprettSakLoeser::class.simpleName}...")
OpprettSakLoeser(this, arbeidsgiverNotifikasjonKlient, linkUrl)

logger.info("Starter ${OpprettOppgaveLoeser::class.simpleName}...")
OpprettOppgaveLoeser(this, arbeidsgiverNotifikasjonKlient, linkUrl)

logger.info("Starter ${UtgaattLoeser::class.simpleName}...")
UtgaattLoeser(this, arbeidsgiverNotifikasjonKlient, linkUrl)

logger.info("Starter ${SlettSakLoeser::class.simpleName}...")
SlettSakLoeser(this, arbeidsgiverNotifikasjonKlient)

logger.info("Starter ${OpprettSelvbestemtSakRiver::class.simpleName}...")
OpprettSelvbestemtSakRiver(linkUrl, selvbestemtRepo, arbeidsgiverNotifikasjonKlient).connect(this)

logger.info("Starter ${FjernPaaminnelseRiver::class.simpleName}...")
FjernPaaminnelseRiver(arbeidsgiverNotifikasjonKlient).connect(this)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon
import kotlinx.coroutines.runBlocking
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.ArbeidsgiverNotifikasjonKlient
import no.nav.helsearbeidsgiver.arbeidsgivernotifkasjon.graphql.generated.enums.SaksStatus
import no.nav.helsearbeidsgiver.felles.domene.Person
import no.nav.helsearbeidsgiver.felles.metrics.Metrics
import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr
import java.util.UUID
import kotlin.time.Duration.Companion.days

Expand All @@ -20,18 +22,28 @@ object NotifikasjonTekst {
const val STATUS_TEKST_FERDIG = "Mottatt – Se kvittering eller korriger inntektsmelding"
const val STATUS_TEKST_AVBRUTT = "Avbrutt av NAV"

fun lenkeFerdigstilt(
fun lenkeAktiv(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kanskje denne kan hete lenkeAktivForespoersel så det er likt pattern som de andre?

linkUrl: String,
forespoerselId: UUID,
): String = "$linkUrl/im-dialog/$forespoerselId"

fun lenkeFerdigstiltForespoersel(
linkUrl: String,
forespoerselId: UUID,
): String = "$linkUrl/im-dialog/kvittering/$forespoerselId"

fun sakTittel(
sykmeldtNavn: String,
sykmeldtFoedselsdato: String,
): String = "Inntektsmelding for $sykmeldtNavn: f. $sykmeldtFoedselsdato"
fun lenkeFerdigstiltSelvbestemt(
linkUrl: String,
selvbestemtId: UUID,
): String = "$linkUrl/im-dialog/kvittering/agi/$selvbestemtId"

fun sakTittel(sykmeldt: Person): String {
val foedselsdato = sykmeldt.fnr.verdi.take(6)
return "Inntektsmelding for ${sykmeldt.navn}: f. $foedselsdato"
}

fun oppgaveInnhold(
orgnr: String,
orgnr: Orgnr,
orgNavn: String,
): String =
listOf(
Expand All @@ -46,9 +58,8 @@ object NotifikasjonTekst {
fun ArbeidsgiverNotifikasjonKlient.opprettSak(
lenke: String,
inntektsmeldingTypeId: UUID,
orgnr: String,
sykmeldtNavn: String,
sykmeldtFoedselsdato: String,
orgnr: Orgnr,
sykmeldt: Person,
initiellStatus: SaksStatus = SaksStatus.UNDER_BEHANDLING,
): String {
val statusTekst =
Expand All @@ -60,11 +71,11 @@ fun ArbeidsgiverNotifikasjonKlient.opprettSak(
return Metrics.agNotifikasjonRequest.recordTime(::opprettNySak) {
runBlocking {
opprettNySak(
virksomhetsnummer = orgnr,
merkelapp = NotifikasjonTekst.MERKELAPP,
virksomhetsnummer = orgnr.verdi,
grupperingsid = inntektsmeldingTypeId.toString(),
merkelapp = NotifikasjonTekst.MERKELAPP,
lenke = lenke,
tittel = NotifikasjonTekst.sakTittel(sykmeldtNavn, sykmeldtFoedselsdato),
tittel = NotifikasjonTekst.sakTittel(sykmeldt),
statusTekst = statusTekst,
initiellStatus = initiellStatus,
harddeleteOm = sakLevetid,
Expand Down Expand Up @@ -120,3 +131,23 @@ fun ArbeidsgiverNotifikasjonKlient.avbrytSak(
)
}
}

fun ArbeidsgiverNotifikasjonKlient.opprettOppgave(
lenke: String,
forespoerselId: UUID,
orgnr: Orgnr,
orgNavn: String,
): String =
runBlocking {
opprettNyOppgave(
virksomhetsnummer = orgnr.verdi,
eksternId = forespoerselId.toString(),
grupperingsid = forespoerselId.toString(),
merkelapp = NotifikasjonTekst.MERKELAPP,
lenke = lenke,
tekst = NotifikasjonTekst.OPPGAVE_TEKST,
varslingTittel = NotifikasjonTekst.STATUS_TEKST_UNDER_BEHANDLING,
varslingInnhold = NotifikasjonTekst.oppgaveInnhold(orgnr, orgNavn),
tidspunkt = null,
)
}
Loading