Skip to content

Commit

Permalink
Bytt river for å hente personer (#645)
Browse files Browse the repository at this point in the history
  • Loading branch information
bjerga authored Aug 1, 2024
1 parent b4a1bcb commit 5f21a6e
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 104 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class InnsendingProducer(
Key.FORESPOERSEL_ID to forespoerselId.toJson(),
Key.ORGNRUNDERENHET to request.orgnrUnderenhet.toJson(),
Key.IDENTITETSNUMMER to request.identitetsnummer.toJson(),
Key.ARBEIDSGIVER_ID to arbeidsgiverFnr.toJson(),
Key.ARBEIDSGIVER_FNR to arbeidsgiverFnr.toJson(),
Key.SKJEMA_INNTEKTSMELDING to request.toJson(Innsending.serializer()),
).also {
logger.info("Publiserte til kafka forespørselId: $forespoerselId og transaksjonId=$transaksjonId")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class InnsendingProducerTest :
Key.FORESPOERSEL_ID to forespoerselId.toJson(),
Key.ORGNRUNDERENHET to gyldigInnsendingRequest.orgnrUnderenhet.toJson(),
Key.IDENTITETSNUMMER to gyldigInnsendingRequest.identitetsnummer.toJson(),
Key.ARBEIDSGIVER_ID to avsenderFnr.toJson(),
Key.ARBEIDSGIVER_FNR to avsenderFnr.toJson(),
Key.SKJEMA_INNTEKTSMELDING to gyldigInnsendingRequest.toJson(Innsending.serializer()),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Forespoersel
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.PersonDato
import no.nav.helsearbeidsgiver.felles.Person
import no.nav.helsearbeidsgiver.felles.ResultJson
import no.nav.helsearbeidsgiver.felles.json.les
import no.nav.helsearbeidsgiver.felles.json.lesOrNull
import no.nav.helsearbeidsgiver.felles.json.orgMapSerializer
import no.nav.helsearbeidsgiver.felles.json.personMapSerializer
import no.nav.helsearbeidsgiver.felles.json.toJson
import no.nav.helsearbeidsgiver.felles.json.toMap
import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail
Expand All @@ -37,6 +38,8 @@ import no.nav.helsearbeidsgiver.utils.wrapper.Fnr
import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr
import java.util.UUID

private const val UKJENT_NAVN = "Ukjent navn"

data class Steg0(
val transaksjonId: UUID,
val forespoerselId: UUID,
Expand All @@ -52,8 +55,7 @@ sealed class Steg2 {
data class Komplett(
val aarsakInnsending: AarsakInnsending,
val orgnrMedNavn: Map<Orgnr, String>,
val sykmeldt: PersonDato,
val avsender: PersonDato,
val personer: Map<Fnr, Person>,
) : Steg2()

data object Delvis : Steg2()
Expand All @@ -76,14 +78,13 @@ class InnsendingService(
override val startKeys =
setOf(
Key.FORESPOERSEL_ID,
Key.ARBEIDSGIVER_ID,
Key.ARBEIDSGIVER_FNR,
Key.SKJEMA_INNTEKTSMELDING,
)
override val dataKeys =
setOf(
Key.VIRKSOMHETER,
Key.ARBEIDSGIVER_INFORMASJON,
Key.ARBEIDSTAKER_INFORMASJON,
Key.PERSONER,
Key.INNTEKTSMELDING_DOKUMENT,
Key.ER_DUPLIKAT_IM,
Key.FORESPOERSEL_SVAR,
Expand All @@ -95,7 +96,7 @@ class InnsendingService(
Steg0(
transaksjonId = Key.UUID.les(UuidSerializer, melding),
forespoerselId = Key.FORESPOERSEL_ID.les(UuidSerializer, melding),
avsenderFnr = Key.ARBEIDSGIVER_ID.les(Fnr.serializer(), melding),
avsenderFnr = Key.ARBEIDSGIVER_FNR.les(Fnr.serializer(), melding),
skjema = Key.SKJEMA_INNTEKTSMELDING.les(JsonElement.serializer(), melding),
)

Expand All @@ -108,10 +109,9 @@ class InnsendingService(
val tidligereInntektsmelding = runCatching { Key.LAGRET_INNTEKTSMELDING.les(ResultJson.serializer(), melding) }
val tidligereEksternInntektsmelding = runCatching { Key.EKSTERN_INNTEKTSMELDING.les(ResultJson.serializer(), melding) }
val orgnrMedNavn = runCatching { Key.VIRKSOMHETER.les(orgMapSerializer, melding) }
val sykmeldt = runCatching { Key.ARBEIDSTAKER_INFORMASJON.les(PersonDato.serializer(), melding) }
val avsender = runCatching { Key.ARBEIDSGIVER_INFORMASJON.les(PersonDato.serializer(), melding) }
val personer = runCatching { Key.PERSONER.les(personMapSerializer, melding) }

val results = listOf(tidligereInntektsmelding, tidligereEksternInntektsmelding, orgnrMedNavn, sykmeldt, avsender)
val results = listOf(tidligereInntektsmelding, tidligereEksternInntektsmelding, orgnrMedNavn, personer)

return if (results.all { it.isSuccess }) {
val aarsakInnsending =
Expand All @@ -124,8 +124,7 @@ class InnsendingService(
Steg2.Komplett(
aarsakInnsending = aarsakInnsending,
orgnrMedNavn = orgnrMedNavn.getOrThrow(),
sykmeldt = sykmeldt.getOrThrow(),
avsender = avsender.getOrThrow(),
personer = personer.getOrThrow(),
)
} else if (results.any { it.isSuccess }) {
Steg2.Delvis
Expand Down Expand Up @@ -180,12 +179,18 @@ class InnsendingService(
rapid
.publish(
Key.EVENT_NAME to eventName.toJson(),
Key.BEHOV to BehovType.FULLT_NAVN.toJson(),
Key.BEHOV to BehovType.HENT_PERSONER.toJson(),
Key.UUID to steg0.transaksjonId.toJson(),
Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(),
Key.IDENTITETSNUMMER to steg1.forespoersel.fnr.toJson(),
Key.ARBEIDSGIVER_ID to steg0.avsenderFnr.toJson(),
).also { loggBehovPublisert(BehovType.FULLT_NAVN, it) }
Key.DATA to
mapOf(
Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(),
Key.FNR_LISTE to
setOf(
steg1.forespoersel.fnr.let(::Fnr),
steg0.avsenderFnr,
).toJson(Fnr.serializer()),
).toJson(),
).also { loggBehovPublisert(BehovType.HENT_PERSONER, it) }
}

override fun utfoerSteg2(
Expand All @@ -207,14 +212,16 @@ class InnsendingService(
}

val orgNavn = steg2.orgnrMedNavn[steg1.forespoersel.orgnr.let(::Orgnr)] ?: "Ukjent virksomhet"
val sykmeldtNavn = steg2.personer[steg1.forespoersel.fnr.let(::Fnr)]?.navn ?: UKJENT_NAVN
val avsenderNavn = steg2.personer[steg0.avsenderFnr]?.navn ?: UKJENT_NAVN

val inntektsmelding =
mapInntektsmelding(
forespoersel = steg1.forespoersel,
skjema = skjema,
fulltnavnArbeidstaker = steg2.sykmeldt.navn,
fulltnavnArbeidstaker = sykmeldtNavn,
virksomhetNavn = orgNavn,
innsenderNavn = steg2.avsender.navn,
innsenderNavn = avsenderNavn,
)

if (inntektsmelding.bestemmendeFraværsdag.isBefore(inntektsmelding.inntektsdato)) {
Expand Down Expand Up @@ -274,33 +281,15 @@ class InnsendingService(

val datafeil =
when (utloesendeBehov) {
BehovType.HENT_VIRKSOMHET_NAVN -> {
listOf(
Key.VIRKSOMHETER to emptyMap<String, String>().toJson(),
)
}

BehovType.FULLT_NAVN -> {
val sykmeldtFnr = Key.IDENTITETSNUMMER.les(String.serializer(), melding)
val avsenderFnr = Key.ARBEIDSGIVER_ID.les(String.serializer(), melding)

listOf(
Key.ARBEIDSTAKER_INFORMASJON to tomPerson(sykmeldtFnr).toJson(PersonDato.serializer()),
Key.ARBEIDSGIVER_INFORMASJON to tomPerson(avsenderFnr).toJson(PersonDato.serializer()),
)
}

else -> {
emptyList()
}
BehovType.HENT_VIRKSOMHET_NAVN -> Key.VIRKSOMHETER to emptyMap<String, String>().toJson()
BehovType.HENT_PERSONER -> Key.PERSONER to emptyMap<String, String>().toJson()
else -> null
}

if (datafeil.isNotEmpty()) {
datafeil.onEach { (key, defaultVerdi) ->
redisStore.set(RedisKey.of(fail.transaksjonId, key), defaultVerdi)
}
if (datafeil != null) {
redisStore.set(RedisKey.of(fail.transaksjonId, datafeil.first), datafeil.second)

val meldingMedDefault = datafeil.toMap().plus(melding)
val meldingMedDefault = mapOf(datafeil).plus(melding)

onData(meldingMedDefault)
} else {
Expand Down Expand Up @@ -332,10 +321,3 @@ class InnsendingService(
}
}
}

private fun tomPerson(fnr: String): PersonDato =
PersonDato(
navn = "",
fødselsdato = null,
ident = fnr,
)
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class InnsendingIT : EndToEndTest() {
Key.UUID to transaksjonId.toJson(),
Key.DATA to "".toJson(),
Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(),
Key.ARBEIDSGIVER_ID to Mock.skjema.identitetsnummer.toJson(),
Key.ARBEIDSGIVER_FNR to Mock.skjema.identitetsnummer.toJson(),
Key.SKJEMA_INNTEKTSMELDING to Mock.skjema.toJson(Innsending.serializer()),
)

Expand Down Expand Up @@ -165,7 +165,7 @@ class InnsendingIT : EndToEndTest() {
Key.UUID to transaksjonId.toJson(),
Key.DATA to "".toJson(),
Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(),
Key.ARBEIDSGIVER_ID to maxMekker.ident!!.toJson(),
Key.ARBEIDSGIVER_FNR to maxMekker.ident!!.toJson(),
Key.SKJEMA_INNTEKTSMELDING to Mock.skjema.toJson(Innsending.serializer()),
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Forespoersel
import no.nav.helsearbeidsgiver.felles.ForespoerselType
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.PersonDato
import no.nav.helsearbeidsgiver.felles.ResultJson
import no.nav.helsearbeidsgiver.felles.json.lesOrNull
import no.nav.helsearbeidsgiver.felles.json.orgMapSerializer
import no.nav.helsearbeidsgiver.felles.json.personMapSerializer
import no.nav.helsearbeidsgiver.felles.json.toJson
import no.nav.helsearbeidsgiver.felles.json.toMap
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix
Expand Down Expand Up @@ -72,7 +72,7 @@ class InnsendingServiceIT : EndToEndTest() {
Key.UUID to transaksjonId.toJson(),
Key.DATA to "".toJson(),
Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(),
Key.ARBEIDSGIVER_ID to Mock.fnrAg.toJson(),
Key.ARBEIDSGIVER_FNR to Mock.fnrAg.toJson(),
Key.SKJEMA_INNTEKTSMELDING to gyldigInnsendingRequest.toJson(Innsending.serializer()),
)

Expand All @@ -99,7 +99,7 @@ class InnsendingServiceIT : EndToEndTest() {
.also {
it shouldContainKey Key.DATA

val data = it[Key.DATA]?.toMap().orEmpty()
val data = it[Key.DATA].shouldNotBeNull().toMap()
val tidligereInntektsmeldingResult = ResultJson(success = tidligereInntektsmelding.toJson(Inntektsmelding.serializer()))

data[Key.LAGRET_INNTEKTSMELDING]?.fromJson(ResultJson.serializer()) shouldBe tidligereInntektsmeldingResult
Expand All @@ -121,22 +121,17 @@ class InnsendingServiceIT : EndToEndTest() {
// Sykmeldt og innsender hentet
messages
.filter(EventName.INSENDING_STARTED)
.filter(Key.ARBEIDSTAKER_INFORMASJON)
.filter(Key.ARBEIDSGIVER_INFORMASJON)
.filter(Key.PERSONER, nestedData = true)
.firstAsMap()
.verifiserTransaksjonId(transaksjonId)
.verifiserForespoerselId()
.also {
it shouldContainKey Key.DATA
val data = it[Key.DATA].shouldNotBeNull().toMap()

shouldNotThrowAny {
it[Key.ARBEIDSTAKER_INFORMASJON]
.shouldNotBeNull()
.fromJson(PersonDato.serializer())

it[Key.ARBEIDSGIVER_INFORMASJON]
data[Key.PERSONER]
.shouldNotBeNull()
.fromJson(PersonDato.serializer())
.fromJson(personMapSerializer)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@ import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Forespoersel
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.PersonDato
import no.nav.helsearbeidsgiver.felles.json.personMapSerializer
import no.nav.helsearbeidsgiver.felles.json.toJson
import no.nav.helsearbeidsgiver.felles.json.toMap
import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel
import no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest.utils.EndToEndTest
import no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest.utils.fromJsonToString
import no.nav.helsearbeidsgiver.utils.json.fromJson
import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer
import no.nav.helsearbeidsgiver.utils.json.serializer.set
import no.nav.helsearbeidsgiver.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig
import no.nav.helsearbeidsgiver.utils.wrapper.Fnr
Expand Down Expand Up @@ -43,20 +44,22 @@ class NotifikasjonIT : EndToEndTest() {

messages
.filter(EventName.SAK_OPPRETT_REQUESTED)
.filter(BehovType.FULLT_NAVN)
.filter(BehovType.HENT_PERSONER)
.firstAsMap()
.also {
it[Key.IDENTITETSNUMMER]?.fromJson(Fnr.serializer()) shouldBe Mock.fnr
it[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoerselId
val data = it[Key.DATA].shouldNotBeNull().toMap()
data[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoerselId
data[Key.FNR_LISTE]?.fromJson(Fnr.serializer().set()) shouldBe setOf(Mock.fnr)
}

messages
.filter(EventName.SAK_OPPRETT_REQUESTED)
.filter(Key.ARBEIDSTAKER_INFORMASJON)
.filter(Key.PERSONER, nestedData = true)
.firstAsMap()
.also {
it[Key.ARBEIDSTAKER_INFORMASJON]
?.fromJson(PersonDato.serializer())
val data = it[Key.DATA].shouldNotBeNull().toMap()
data[Key.PERSONER]
?.fromJson(personMapSerializer)
.shouldNotBeNull()
}

Expand Down Expand Up @@ -174,20 +177,22 @@ class NotifikasjonIT : EndToEndTest() {

messages
.filter(EventName.MANUELL_OPPRETT_SAK_REQUESTED)
.filter(BehovType.FULLT_NAVN)
.filter(BehovType.HENT_PERSONER)
.firstAsMap()
.also {
it[Key.IDENTITETSNUMMER]?.fromJson(Fnr.serializer()) shouldBe Mock.fnr
it[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoerselId
val data = it[Key.DATA].shouldNotBeNull().toMap()
data[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoerselId
data[Key.FNR_LISTE]?.fromJson(Fnr.serializer().set()) shouldBe setOf(Mock.fnr)
}

messages
.filter(EventName.MANUELL_OPPRETT_SAK_REQUESTED)
.filter(Key.ARBEIDSTAKER_INFORMASJON)
.filter(Key.PERSONER, nestedData = true)
.firstAsMap()
.also {
it[Key.ARBEIDSTAKER_INFORMASJON]
?.fromJson(PersonDato.serializer())
val data = it[Key.DATA].shouldNotBeNull().toMap()
data[Key.PERSONER]
?.fromJson(personMapSerializer)
.shouldNotBeNull()
}

Expand Down
Loading

0 comments on commit 5f21a6e

Please sign in to comment.