Skip to content

Commit

Permalink
Støtt ny skjemaklasse (#619)
Browse files Browse the repository at this point in the history
* Støtt ny skjemaklasse

* Sett innsendingsårsak basert på tidligere lagrede inntektsmeldinger
  • Loading branch information
bjerga authored Jul 25, 2024
1 parent e763be1 commit ad3b9c7
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ import io.prometheus.client.Summary
import kotlinx.serialization.SerializationException
import kotlinx.serialization.builtins.serializer
import no.nav.helse.rapids_rivers.RapidsConnection
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Utils.convert
import no.nav.helsearbeidsgiver.domene.inntektsmelding.deprecated.Innsending
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.AarsakInnsending
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmelding
import no.nav.helsearbeidsgiver.felles.ResultJson
import no.nav.helsearbeidsgiver.felles.Tekst
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisConnection
Expand Down Expand Up @@ -71,7 +74,16 @@ fun Route.innsendingRoute(
logger.info(it)
sikkerLogger.info("$it og request:\n$json")
}
}.fromJson(Innsending.serializer())
}.let { json ->
runCatching {
json.fromJson(SkjemaInntektsmelding.serializer()).convert(
sykmeldingsperioder = emptyList(),
aarsakInnsending = AarsakInnsending.Ny,
)
}.getOrElse {
json.fromJson(Innsending.serializer())
}
}

tilgangskontroll.validerTilgangTilForespoersel(call.request, forespoerselId)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ private suspend fun PipelineContext<Unit, ApplicationCall>.sendResponse(resultat
}
}

// TODO slett når frontend bruker korrekte navn
private fun JsonElement.fromJsonBackup(error: Throwable): SkjemaInntektsmeldingSelvbestemt {
val skjemaJson = jsonObject
val inntektJson = skjemaJson[SkjemaInntektsmeldingSelvbestemt::inntekt.name]!!.jsonObject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ package no.nav.helsearbeidsgiver.inntektsmelding.innsending
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.JsonElement
import no.nav.helse.rapids_rivers.RapidsConnection
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Utils.convert
import no.nav.helsearbeidsgiver.domene.inntektsmelding.deprecated.Innsending
import no.nav.helsearbeidsgiver.domene.inntektsmelding.deprecated.Inntektsmelding
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.AarsakInnsending
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmelding
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Forespoersel
Expand All @@ -21,6 +24,7 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore
import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceMed2Steg
import no.nav.helsearbeidsgiver.felles.utils.Log
import no.nav.helsearbeidsgiver.utils.json.fromJson
import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer
import no.nav.helsearbeidsgiver.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.json.toPretty
Expand All @@ -37,12 +41,13 @@ data class Steg0(
val orgnr: Orgnr,
val sykmeldtFnr: Fnr,
val avsenderFnr: Fnr,
val skjema: Innsending,
val skjema: JsonElement,
)

sealed class Steg1 {
data class Komplett(
val forespoersel: Forespoersel,
val aarsakInnsending: AarsakInnsending,
val orgNavn: String,
val sykmeldt: PersonDato,
val avsender: PersonDato,
Expand Down Expand Up @@ -80,6 +85,8 @@ class InnsendingService(
Key.INNTEKTSMELDING_DOKUMENT,
Key.ER_DUPLIKAT_IM,
Key.FORESPOERSEL_SVAR,
Key.LAGRET_INNTEKTSMELDING,
Key.EKSTERN_INNTEKTSMELDING,
)

override fun lesSteg0(melding: Map<Key, JsonElement>): Steg0 =
Expand All @@ -89,20 +96,30 @@ class InnsendingService(
orgnr = Key.ORGNRUNDERENHET.les(Orgnr.serializer(), melding),
sykmeldtFnr = Key.IDENTITETSNUMMER.les(Fnr.serializer(), melding),
avsenderFnr = Key.ARBEIDSGIVER_ID.les(Fnr.serializer(), melding),
skjema = Key.SKJEMA_INNTEKTSMELDING.les(Innsending.serializer(), melding),
skjema = Key.SKJEMA_INNTEKTSMELDING.les(JsonElement.serializer(), melding),
)

override fun lesSteg1(melding: Map<Key, JsonElement>): Steg1 {
val forespoersel = runCatching { Key.FORESPOERSEL_SVAR.les(Forespoersel.serializer(), melding) }
val tidligereInntektsmelding = runCatching { Key.LAGRET_INNTEKTSMELDING.les(ResultJson.serializer(), melding) }
val tidligereEksternInntektsmelding = runCatching { Key.EKSTERN_INNTEKTSMELDING.les(ResultJson.serializer(), melding) }
val orgNavn = runCatching { Key.VIRKSOMHET.les(String.serializer(), melding) }
val sykmeldt = runCatching { Key.ARBEIDSTAKER_INFORMASJON.les(PersonDato.serializer(), melding) }
val avsender = runCatching { Key.ARBEIDSGIVER_INFORMASJON.les(PersonDato.serializer(), melding) }

val results = listOf(forespoersel, orgNavn, sykmeldt, avsender)
val results = listOf(forespoersel, tidligereInntektsmelding, tidligereEksternInntektsmelding, orgNavn, sykmeldt, avsender)

return if (results.all { it.isSuccess }) {
val aarsakInnsending =
if (tidligereInntektsmelding.getOrThrow().success == null && tidligereEksternInntektsmelding.getOrThrow().success == null) {
AarsakInnsending.Ny
} else {
AarsakInnsending.Endring
}

Steg1.Komplett(
forespoersel = forespoersel.getOrThrow(),
aarsakInnsending = aarsakInnsending,
orgNavn = orgNavn.getOrThrow(),
sykmeldt = sykmeldt.getOrThrow(),
avsender = avsender.getOrThrow(),
Expand All @@ -129,6 +146,17 @@ class InnsendingService(
Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(),
).also { loggBehovPublisert(BehovType.HENT_TRENGER_IM, it) }

rapid
.publish(
Key.EVENT_NAME to eventName.toJson(),
Key.BEHOV to BehovType.HENT_LAGRET_IM.toJson(),
Key.UUID to steg0.transaksjonId.toJson(),
Key.DATA to
mapOf(
Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(),
).toJson(),
).also { loggBehovPublisert(BehovType.HENT_LAGRET_IM, it) }

rapid
.publish(
Key.EVENT_NAME to eventName.toJson(),
Expand All @@ -154,10 +182,22 @@ class InnsendingService(
steg1: Steg1,
) {
if (steg1 is Steg1.Komplett) {
val skjema =
runCatching {
steg0.skjema
.fromJson(SkjemaInntektsmelding.serializer())
.convert(
sykmeldingsperioder = steg1.forespoersel.sykmeldingsperioder,
aarsakInnsending = steg1.aarsakInnsending,
)
}.getOrElse {
steg0.skjema.fromJson(Innsending.serializer())
}

val inntektsmelding =
mapInntektsmelding(
forespoersel = steg1.forespoersel,
skjema = steg0.skjema,
skjema = skjema,
fulltnavnArbeidstaker = steg1.sykmeldt.navn,
virksomhetNavn = steg1.orgNavn,
innsenderNavn = steg1.avsender.navn,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ 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.toJson
import no.nav.helsearbeidsgiver.felles.json.toMap
import no.nav.helsearbeidsgiver.felles.test.mock.gyldigInnsendingRequest
import no.nav.helsearbeidsgiver.felles.test.mock.mockForespurtData
import no.nav.helsearbeidsgiver.felles.test.mock.mockInntektsmelding
import no.nav.helsearbeidsgiver.inntektsmelding.helsebro.domene.ForespoerselSvar
import no.nav.helsearbeidsgiver.inntektsmelding.helsebro.toForespoersel
import no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest.utils.EndToEndTest
Expand All @@ -37,9 +39,12 @@ import java.util.UUID
class InnsendingServiceIT : EndToEndTest() {
@Test
fun `Test at innsending er mottatt`() {
val tidligereInntektsmelding = mockInntektsmelding()

forespoerselRepository.lagreForespoersel(Mock.forespoerselId.toString(), Mock.orgnr.verdi)
forespoerselRepository.oppdaterSakId(Mock.forespoerselId.toString(), Mock.SAK_ID)
forespoerselRepository.oppdaterOppgaveId(Mock.forespoerselId.toString(), Mock.OPPGAVE_ID)
imRepository.lagreInntektsmelding(Mock.forespoerselId.toString(), tidligereInntektsmelding)

val transaksjonId: UUID = UUID.randomUUID()

Expand Down Expand Up @@ -83,6 +88,24 @@ class InnsendingServiceIT : EndToEndTest() {
it[Key.FORESPOERSEL_SVAR]?.fromJson(Forespoersel.serializer()) shouldBe Mock.forespoersel
}

// Tidligere inntektsmelding hentet
messages
.filter(EventName.INSENDING_STARTED)
.filter(Key.LAGRET_INNTEKTSMELDING, nestedData = true)
.filter(Key.EKSTERN_INNTEKTSMELDING, nestedData = true)
.firstAsMap()
.verifiserTransaksjonId(transaksjonId)
.verifiserForespoerselId()
.also {
it shouldContainKey Key.DATA

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

data[Key.LAGRET_INNTEKTSMELDING]?.fromJson(ResultJson.serializer()) shouldBe tidligereInntektsmeldingResult
data[Key.EKSTERN_INNTEKTSMELDING]?.fromJson(ResultJson.serializer()) shouldBe ResultJson(success = null)
}

// Virksomhetsnavn hentet
messages
.filter(EventName.INSENDING_STARTED)
Expand Down Expand Up @@ -183,7 +206,9 @@ class InnsendingServiceIT : EndToEndTest() {

private fun Map<Key, JsonElement>.verifiserForespoerselId(): Map<Key, JsonElement> =
also {
Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, it) shouldBe Mock.forespoerselId
val data = it[Key.DATA]?.toMap().orEmpty()
val forespoerselId = Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, it) ?: Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, data)
forespoerselId shouldBe Mock.forespoerselId
}

private object Mock {
Expand Down

0 comments on commit ad3b9c7

Please sign in to comment.