Skip to content

Commit

Permalink
Ignorer overflødige skjemafelt
Browse files Browse the repository at this point in the history
  • Loading branch information
bjerga committed Dec 13, 2024
1 parent b284aae commit fa430a1
Show file tree
Hide file tree
Showing 19 changed files with 342 additions and 186 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig
import no.nav.helsearbeidsgiver.utils.wrapper.Fnr
import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr
import java.util.UUID
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Inntektsmelding as InntektsmeldingV1

class BerikInntektsmeldingServiceTest :
FunSpec({
Expand Down Expand Up @@ -113,7 +112,7 @@ class BerikInntektsmeldingServiceTest :

val data = it.lesData()
Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, data) shouldBe Mock.skjema.forespoerselId
Key.INNTEKTSMELDING.lesOrNull(InntektsmeldingV1.serializer(), data) shouldNotBe null
Key.INNTEKTSMELDING.lesOrNull(Inntektsmelding.serializer(), data) shouldNotBe null
Key.BESTEMMENDE_FRAVAERSDAG.lesOrNull(LocalDateSerializer, data) shouldNotBe null
Key.INNSENDING_ID.lesOrNull(Long.serializer(), data) shouldBe Mock.INNSENDING_ID
}
Expand Down Expand Up @@ -201,7 +200,7 @@ private object Mock {
steg3(transaksjonId).plusData(
mapOf(
Key.ER_DUPLIKAT_IM to false.toJson(Boolean.serializer()),
Key.INNTEKTSMELDING to mockInntektsmeldingV1().toJson(InntektsmeldingV1.serializer()),
Key.INNTEKTSMELDING to mockInntektsmeldingV1().toJson(Inntektsmelding.serializer()),
Key.BESTEMMENDE_FRAVAERSDAG to 20.oktober.toJson(),
),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Sykmeldt
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.til
import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel
import no.nav.helsearbeidsgiver.felles.test.mock.mockSkjemaInntektsmelding
import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdAGP
import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdInntekt
import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdRefusjon
import no.nav.helsearbeidsgiver.utils.test.date.august
import no.nav.helsearbeidsgiver.utils.test.date.desember
import no.nav.helsearbeidsgiver.utils.test.date.juli
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import io.kotest.matchers.shouldNotBe
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.til
import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel
import no.nav.helsearbeidsgiver.felles.test.mock.mockInntektsmeldingV1
import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdAGP
import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdInntekt
import no.nav.helsearbeidsgiver.utils.test.date.august
import no.nav.helsearbeidsgiver.utils.test.date.januar
import no.nav.helsearbeidsgiver.utils.test.date.juni
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package no.nav.helsearbeidsgiver.inntektsmelding.db

import no.nav.helsearbeidsgiver.domene.inntektsmelding.deprecated.Inntektsmelding
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmelding
import no.nav.helsearbeidsgiver.felles.domene.Forespoersel

fun Inntektsmelding.erDuplikatAv(other: Inntektsmelding): Boolean =
this ==
Expand All @@ -13,8 +14,30 @@ fun Inntektsmelding.erDuplikatAv(other: Inntektsmelding): Boolean =
telefonnummer = telefonnummer,
)

fun SkjemaInntektsmelding.erDuplikatAv(other: SkjemaInntektsmelding): Boolean =
// Så lenge frontend sender felter som ikke kreves av Spleis så må vi filtrere ut disse for å sammenligne skjema
fun SkjemaInntektsmelding.erDuplikatAv(
other: SkjemaInntektsmelding,
forespoersel: Forespoersel,
): Boolean =
this ==
other.copy(
avsenderTlf = avsenderTlf,
agp =
if (forespoersel.forespurtData.arbeidsgiverperiode.paakrevd) {
other.agp
} else {
agp
},
inntekt =
if (forespoersel.forespurtData.inntekt.paakrevd) {
other.inntekt
} else {
inntekt
},
refusjon =
if (forespoersel.forespurtData.refusjon.paakrevd) {
other.refusjon
} else {
refusjon
},
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsm
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.domene.Forespoersel
import no.nav.helsearbeidsgiver.felles.json.krev
import no.nav.helsearbeidsgiver.felles.json.les
import no.nav.helsearbeidsgiver.felles.json.toJson
Expand All @@ -28,7 +29,8 @@ data class LagreImSkjemaMelding(
val behovType: BehovType,
val transaksjonId: UUID,
val data: Map<Key, JsonElement>,
val inntektsmeldingSkjema: SkjemaInntektsmelding,
val forespoersel: Forespoersel,
val skjema: SkjemaInntektsmelding,
)

class LagreImSkjemaRiver(
Expand All @@ -47,21 +49,22 @@ class LagreImSkjemaRiver(
behovType = Key.BEHOV.krev(BehovType.LAGRE_IM_SKJEMA, BehovType.serializer(), json),
transaksjonId = Key.KONTEKST_ID.les(UuidSerializer, json),
data = data,
inntektsmeldingSkjema = Key.SKJEMA_INNTEKTSMELDING.les(SkjemaInntektsmelding.serializer(), data),
forespoersel = Key.FORESPOERSEL_SVAR.les(Forespoersel.serializer(), data),
skjema = Key.SKJEMA_INNTEKTSMELDING.les(SkjemaInntektsmelding.serializer(), data),
)
}

override fun LagreImSkjemaMelding.haandter(json: Map<Key, JsonElement>): Map<Key, JsonElement> {
val sisteImSkjema = repository.hentNyesteInntektsmeldingSkjema(inntektsmeldingSkjema.forespoerselId)
val sisteImSkjema = repository.hentNyesteInntektsmeldingSkjema(skjema.forespoerselId)

val erDuplikat = sisteImSkjema?.erDuplikatAv(inntektsmeldingSkjema) ?: false
val erDuplikat = sisteImSkjema?.erDuplikatAv(skjema, forespoersel) ?: false

val innsendingId =
if (erDuplikat) {
sikkerLogger.warn("Fant duplikat av inntektsmeldingskjema.")
INNSENDING_ID_VED_DUPLIKAT
} else {
repository.lagreInntektsmeldingSkjema(inntektsmeldingSkjema).also {
repository.lagreInntektsmeldingSkjema(skjema).also {
sikkerLogger.info("Lagret inntektsmeldingskjema.")
}
}
Expand Down Expand Up @@ -102,6 +105,6 @@ class LagreImSkjemaRiver(
Log.event(eventName),
Log.behov(behovType),
Log.transaksjonId(transaksjonId),
Log.forespoerselId(inntektsmeldingSkjema.forespoerselId),
Log.forespoerselId(skjema.forespoerselId),
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package no.nav.helsearbeidsgiver.inntektsmelding.db

import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.booleans.shouldBeFalse
import io.kotest.matchers.booleans.shouldBeTrue
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Arbeidsgiverperiode
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Bonus
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Inntekt
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Refusjon
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.til
import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel
import no.nav.helsearbeidsgiver.felles.test.mock.mockSkjemaInntektsmelding
import no.nav.helsearbeidsgiver.felles.test.mock.randomDigitString
import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdAGP
import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdInntekt
import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdRefusjon
import no.nav.helsearbeidsgiver.utils.test.date.desember
import no.nav.helsearbeidsgiver.utils.test.date.november

class InntektsmeldingUtilsKtTest :
FunSpec({
context("erDuplikatAv") {
context("_ikke_ duplikater") {
test("ulike skjema er _ikke_ duplikater") {
val gammel = mockSkjemaInntektsmelding()
val ny = mockSkjemaInntektsmelding()
val forespoersel = mockForespoersel()

ny.erDuplikatAv(gammel, forespoersel).shouldBeFalse()
}

test("skjema med ulik agp er _ikke_ duplikater") {
val gammel = mockSkjemaInntektsmelding()
val ny = gammel.copy(agp = nyAgp)
val forespoersel = mockForespoersel()

ny.erDuplikatAv(gammel, forespoersel).shouldBeFalse()
}

test("skjema med ulik inntekt er _ikke_ duplikater") {
val gammel = mockSkjemaInntektsmelding()
val ny = gammel.copy(inntekt = nyInntekt)
val forespoersel = mockForespoersel()

ny.erDuplikatAv(gammel, forespoersel).shouldBeFalse()
}

test("skjema med ulik refusjon er _ikke_ duplikater") {
val gammel = mockSkjemaInntektsmelding()
val ny = gammel.copy(refusjon = nyRefusjon)
val forespoersel = mockForespoersel()

ny.erDuplikatAv(gammel, forespoersel).shouldBeFalse()
}
}

context("duplikater") {
test("helt like skjema er duplikater") {
val gammel = mockSkjemaInntektsmelding()
val ny = gammel.copy()
val forespoersel = mockForespoersel()

ny.erDuplikatAv(gammel, forespoersel).shouldBeTrue()
}

test("skjema med ulike avsender-tlf er duplikater") {
val gammel = mockSkjemaInntektsmelding()
val ny = gammel.copy(avsenderTlf = randomDigitString(8))
val forespoersel = mockForespoersel()

ny.erDuplikatAv(gammel, forespoersel).shouldBeTrue()
}

test("skjema med ulik agp når lik agp ikke er påkrevd er duplikater") {
val gammel = mockSkjemaInntektsmelding()
val ny = gammel.copy(agp = nyAgp)
val forespoersel = mockForespoersel().utenPaakrevdAGP()

ny.erDuplikatAv(gammel, forespoersel).shouldBeTrue()
}

test("skjema med ulik inntekt når inntekt ikke er påkrevd er duplikater") {
val gammel = mockSkjemaInntektsmelding()
val ny = gammel.copy(inntekt = nyInntekt)
val forespoersel = mockForespoersel().utenPaakrevdInntekt()

ny.erDuplikatAv(gammel, forespoersel).shouldBeTrue()
}

test("skjema med ulik refusjon når refusjon ikke er påkrevd er duplikater") {
val gammel = mockSkjemaInntektsmelding()
val ny = gammel.copy(refusjon = nyRefusjon)
val forespoersel = mockForespoersel().utenPaakrevdRefusjon()

ny.erDuplikatAv(gammel, forespoersel).shouldBeTrue()
}
}
}
})

private val nyAgp =
Arbeidsgiverperiode(
perioder =
listOf(
14.desember til 29.desember,
),
egenmeldinger =
listOf(
14.desember til 16.desember,
),
redusertLoennIAgp = null,
)

private val nyInntekt =
Inntekt(
beloep = 7707.7,
inntektsdato = 30.november,
naturalytelser = emptyList(),
endringAarsak = Bonus,
)

private val nyRefusjon =
Refusjon(
beloepPerMaaned = 4021.1,
endringer = emptyList(),
sluttdato = 31.desember,
)
Loading

0 comments on commit fa430a1

Please sign in to comment.