diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AbstractObservableTest.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AbstractObservableTest.kt index 3c8f56848c..57127afb9e 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AbstractObservableTest.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AbstractObservableTest.kt @@ -130,7 +130,6 @@ internal abstract class AbstractObservableTest { refusjon = refusjon, orgnummer = orgnummer, førsteFraværsdag = førsteFraværsdag, - inntektsdato = null, beregnetInntekt = beregnetInntekt, arbeidsgiverperioder = arbeidsgiverperioder, begrunnelseForReduksjonEllerIkkeUtbetalt = null, diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/RestApiTest.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/RestApiTest.kt index aab8cdbcdc..c786fdf8f3 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/RestApiTest.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/RestApiTest.kt @@ -101,7 +101,6 @@ internal class RestApiTest { ), orgnummer = ORGNUMMER, førsteFraværsdag = LocalDate.of(2018, 1, 1), - inntektsdato = null, beregnetInntekt = 12000.månedlig, arbeidsgiverperioder = listOf(Periode(LocalDate.of(2018, 9, 10), LocalDate.of(2018, 9, 10).plusDays(16))), begrunnelseForReduksjonEllerIkkeUtbetalt = null, diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/ArbeidsgiverHendelsefabrikk.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/ArbeidsgiverHendelsefabrikk.kt index 897106df65..119b8f59be 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/ArbeidsgiverHendelsefabrikk.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/ArbeidsgiverHendelsefabrikk.kt @@ -131,7 +131,6 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri refusjon = refusjon, orgnummer = organisasjonsnummer, førsteFraværsdag = førsteFraværsdag, - inntektsdato = null, beregnetInntekt = beregnetInntekt, arbeidsgiverperioder = arbeidsgiverperioder, begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, @@ -175,7 +174,6 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri refusjon = refusjon, orgnummer = organisasjonsnummer, førsteFraværsdag = førsteFraværsdag, - inntektsdato = null, beregnetInntekt = beregnetInntekt, arbeidsgiverperioder = arbeidsgiverperioder, begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingMessage.kt index 6b23e540be..38c06b2acf 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingMessage.kt @@ -51,7 +51,6 @@ internal open class InntektsmeldingMessage( refusjon = refusjon, orgnummer = orgnummer, førsteFraværsdag = førsteFraværsdag, - inntektsdato = inntektsdato, beregnetInntekt = beregnetInntekt.månedlig, arbeidsgiverperioder = arbeidsgiverperioder, begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingerReplayMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingerReplayMessage.kt index 1443f87555..04e8cde580 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingerReplayMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingerReplayMessage.kt @@ -70,7 +70,6 @@ internal class InntektsmeldingerReplayMessage(packet: JsonMessage, override val refusjon = refusjon, orgnummer = orgnummer, førsteFraværsdag = førsteFraværsdag, - inntektsdato = null, // PortalIM skal ikke replayes beregnetInntekt = beregnetInntekt.månedlig, arbeidsgiverperioder = arbeidsgiverperioder, begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Inntektsmelding.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Inntektsmelding.kt index b301361b66..72f63363fa 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Inntektsmelding.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Inntektsmelding.kt @@ -19,7 +19,6 @@ import no.nav.helse.person.Person import no.nav.helse.person.Sykmeldingsperioder import no.nav.helse.person.Vedtaksperiode import no.nav.helse.person.Vedtaksperiode.Companion.finn -import no.nav.helse.person.Vedtaksperiode.Companion.finnSkjæringstidspunktFor import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import no.nav.helse.person.aktivitetslogg.Varselkode import no.nav.helse.person.beløp.Beløpstidslinje @@ -39,7 +38,6 @@ class Inntektsmelding( private val refusjon: Refusjon, private val orgnummer: String, private val førsteFraværsdag: LocalDate?, - private val inntektsdato: LocalDate?, private val beregnetInntekt: Inntekt, arbeidsgiverperioder: List, begrunnelseForReduksjonEllerIkkeUtbetalt: String?, @@ -54,10 +52,6 @@ class Inntektsmelding( if (førsteFraværsdag != null && (arbeidsgiverperioder.isEmpty() || førsteFraværsdag > arbeidsgiverperioder.last().endInclusive.nesteDag)) return førsteFraværsdag return arbeidsgiverperioder.maxOf { it.start } } - - private val sikkerlogg = LoggerFactory.getLogger("tjenestekall") - private val logger = LoggerFactory.getLogger(Inntektsmelding::class.java) - } init { @@ -96,24 +90,11 @@ class Inntektsmelding( aktivitetslogg.info("Lagrer inntekt på alternativ inntektsdato $alternativInntektsdato") } - internal fun addInntekt(inntektshistorikk: Inntektshistorikk, subsumsjonslogg: Subsumsjonslogg, vedtaksperioder: List): LocalDate { + internal fun addInntekt(inntektshistorikk: Inntektshistorikk, subsumsjonslogg: Subsumsjonslogg): LocalDate { subsumsjonslogg.logg(`§ 8-10 ledd 3`(beregnetInntekt.årlig, beregnetInntekt.daglig)) - if (erPortalinntektsmelding()) { - requireNotNull(vedtaksperiodeId) { "En portalinntektsmelding må oppgi vedtaksperiodeId-en den skal gjelde for" } - val skjæringstidspunkt = vedtaksperioder.finnSkjæringstidspunktFor(vedtaksperiodeId) ?: return beregnetInntektsdato // TODO tenk litt mer på dette - if (skjæringstidspunkt != inntektsdato) { - "Inntekt lagres på en annen dato enn oppgitt i portalinntektsmelding for inntektsmeldingId ${metadata.meldingsreferanseId}. Inntektsmelding oppga inntektsdato $inntektsdato, men inntekten ble lagret på skjæringstidspunkt $skjæringstidspunkt" - .let { - logger.info(it) - sikkerlogg.info(it) - } - } - inntektshistorikk.leggTil(InntektsmeldingInntekt(skjæringstidspunkt, metadata.meldingsreferanseId, beregnetInntekt)) - return skjæringstidspunkt - } - - inntektshistorikk.leggTil(InntektsmeldingInntekt(beregnetInntektsdato, metadata.meldingsreferanseId, beregnetInntekt)) - return beregnetInntektsdato + val inntektsdato = type.inntektsdatoForInntekthistorikk(this) + inntektshistorikk.leggTil(InntektsmeldingInntekt(inntektsdato, metadata.meldingsreferanseId, beregnetInntekt)) + return inntektsdato } private val refusjonsElement = Refusjonshistorikk.Refusjon( @@ -273,8 +254,8 @@ class Inntektsmelding( this.type = when (avsendersystem) { Avsendersystem.ALTINN, Avsendersystem.LPS -> KlassiskInntektsmelding - is Avsendersystem.NAV_NO -> vedtaksperioder.finn(avsendersystem.vedtaksperiodeId)?.let { Portalinntetksmelding(it) } ?: ForkastetPortalinntetksmelding - is Avsendersystem.NAV_NO_SELVBESTEMT -> vedtaksperioder.finn(avsendersystem.vedtaksperiodeId)?.let { Portalinntetksmelding(it) } ?: ForkastetPortalinntetksmelding + is Avsendersystem.NAV_NO -> vedtaksperioder.finn(avsendersystem.vedtaksperiodeId)?.let { Portalinntetksmelding(it, avsendersystem.inntektsdato) } ?: ForkastetPortalinntetksmelding + is Avsendersystem.NAV_NO_SELVBESTEMT -> vedtaksperioder.finn(avsendersystem.vedtaksperiodeId)?.let { Portalinntetksmelding(it, avsendersystem.inntektsdato) } ?: ForkastetPortalinntetksmelding } return this.type.entering(this, aktivitetslogg, person, vedtaksperioder) } @@ -282,6 +263,7 @@ class Inntektsmelding( private sealed interface Type { fun entering(inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg, person: Person, vedtaksperioder: List): Boolean fun skalOppdatereVilkårsgrunnlag(inntektsmelding: Inntektsmelding, sykdomstidslinjeperiode: Periode?): Boolean + fun inntektsdatoForInntekthistorikk(inntektsmelding: Inntektsmelding): LocalDate } private data object KlassiskInntektsmelding: Type { @@ -293,6 +275,7 @@ class Inntektsmelding( if (sykdomstidslinjeperiode == null) return false // har ikke noe sykdom for arbeidsgiveren return inntektsmelding.beregnetInntektsdato in sykdomstidslinjeperiode } + override fun inntektsdatoForInntekthistorikk(inntektsmelding: Inntektsmelding) = inntektsmelding.beregnetInntektsdato } private data object ForkastetPortalinntetksmelding: Type { @@ -303,13 +286,30 @@ class Inntektsmelding( return false } override fun skalOppdatereVilkårsgrunnlag(inntektsmelding: Inntektsmelding, sykdomstidslinjeperiode: Periode?) = error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") + override fun inntektsdatoForInntekthistorikk(inntektsmelding: Inntektsmelding) = error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") } - private data class Portalinntetksmelding(private val vedtaksperiode: Vedtaksperiode) : Type { + private data class Portalinntetksmelding(private val vedtaksperiode: Vedtaksperiode, private val inntektsdato: LocalDate) : Type { override fun entering(inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg, person: Person, vedtaksperioder: List): Boolean { aktivitetslogg.info("Håndterer en portalinntektsmelding") return true } override fun skalOppdatereVilkårsgrunnlag(inntektsmelding: Inntektsmelding, sykdomstidslinjeperiode: Periode?) = true + override fun inntektsdatoForInntekthistorikk(inntektsmelding: Inntektsmelding): LocalDate { + val skjæringstidspunkt = vedtaksperiode.skjæringstidspunkt + if (skjæringstidspunkt != inntektsdato) { + "Inntekt lagres på en annen dato enn oppgitt i portalinntektsmelding for inntektsmeldingId ${inntektsmelding.metadata.meldingsreferanseId}. Inntektsmelding oppga inntektsdato $inntektsdato, men inntekten ble lagret på skjæringstidspunkt $skjæringstidspunkt" + .let { + logger.info(it) + sikkerlogg.info(it) + } + } + return skjæringstidspunkt + } + + private companion object { + private val sikkerlogg = LoggerFactory.getLogger("tjenestekall") + private val logger = LoggerFactory.getLogger(Portalinntetksmelding::class.java) + } } } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Portalinntektsmelding.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Portalinntektsmelding.kt index 70fca9fd1c..11d6795338 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Portalinntektsmelding.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Portalinntektsmelding.kt @@ -55,7 +55,6 @@ class Portalinntektsmelding( refusjon = refusjon, orgnummer = orgnummer, førsteFraværsdag = vedtaksperiodeFom, - inntektsdato = skjæringstidspunkt, beregnetInntekt = beregnetInntekt, arbeidsgiverperioder = arbeidsgiverperioder, begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Arbeidsgiver.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Arbeidsgiver.kt index bc8927c063..0079370ced 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Arbeidsgiver.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Arbeidsgiver.kt @@ -851,7 +851,7 @@ internal class Arbeidsgiver private constructor( inntektsmelding.leggTilRefusjon(refusjonshistorikk, vedtaksperioder) val subsumsjonsloggMedInntektsmeldingkontekst = subsumsjonsloggMedInntektsmeldingkontekst(inntektsmelding) - val inntektsdato = inntektsmelding.addInntekt(inntektshistorikk, subsumsjonsloggMedInntektsmeldingkontekst, vedtaksperioder) + val inntektsdato = inntektsmelding.addInntekt(inntektshistorikk, subsumsjonsloggMedInntektsmeldingkontekst) val sykdomstidslinjeperiode = sykdomstidslinje().periode() val skjæringstidspunkt = person.beregnSkjæringstidspunkt()().beregnSkjæringstidspunkt(inntektsdato.somPeriode()) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/ArbeidsgiverHendelsefabrikk.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/ArbeidsgiverHendelsefabrikk.kt index b549d1e091..c0669d0a37 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/ArbeidsgiverHendelsefabrikk.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/ArbeidsgiverHendelsefabrikk.kt @@ -150,7 +150,6 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri refusjon = refusjon, orgnummer = organisasjonsnummer, førsteFraværsdag = førsteFraværsdag, - inntektsdato = null, beregnetInntekt = beregnetInntekt, arbeidsgiverperioder = arbeidsgiverperioder, begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, @@ -214,7 +213,6 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri refusjon = refusjon, orgnummer = organisasjonsnummer, førsteFraværsdag = førsteFraværsdag, - inntektsdato = førsteFraværsdag ?: arbeidsgiverperioder.maxOfOrNull { it.start } ?: LocalDate.EPOCH, beregnetInntekt = beregnetInntekt, arbeidsgiverperioder = arbeidsgiverperioder, begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektsmeldingTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektsmeldingTest.kt index 91ca4e2ffe..4683ac7b6e 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektsmeldingTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektsmeldingTest.kt @@ -432,7 +432,7 @@ internal class InntektsmeldingTest { @Test fun `førsteFraværsdag kan være null ved lagring av inntekt`() { inntektsmelding(listOf(Periode(1.januar, 16.januar)), førsteFraværsdag = null) - assertDoesNotThrow { inntektsmelding.addInntekt(Inntektshistorikk(), EmptyLog, emptyList()) } + assertDoesNotThrow { inntektsmelding.addInntekt(Inntektshistorikk(), EmptyLog) } } @Test @@ -458,7 +458,7 @@ internal class InntektsmeldingTest { førsteFraværsdag = 1.januar ) val inntektshistorikk = Inntektshistorikk() - inntektsmelding.addInntekt(inntektshistorikk, EmptyLog, emptyList()) + inntektsmelding.addInntekt(inntektshistorikk, EmptyLog) assertEquals(2000.månedlig, inntektshistorikk.avklarSykepengegrunnlag(1.januar, 1.januar, null)?.inspektør?.beløp) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektshistorikkTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektshistorikkTest.kt index d9a3c6b03b..53ab3f3e1c 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektshistorikkTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektshistorikkTest.kt @@ -88,7 +88,7 @@ internal class InntektshistorikkTest { @Test fun `Inntekt fra inntektsmelding brukes til å beregne sykepengegrunnlaget`() { - inntektsmelding(førsteFraværsdag = 1.januar).addInntekt(historikk, EmptyLog, emptyList()) + inntektsmelding(førsteFraværsdag = 1.januar).addInntekt(historikk, EmptyLog) assertEquals(1, inspektør.size) assertEquals(INNTEKT, historikk.avklarSykepengegrunnlag( 1.januar, @@ -99,17 +99,17 @@ internal class InntektshistorikkTest { @Test fun `Inntekt fra andre inntektsmelding overskriver inntekt fra første, gitt samme første fraværsdag`() { - inntektsmelding(førsteFraværsdag = 1.januar, beregnetInntekt = 30000.månedlig).addInntekt(historikk, EmptyLog, emptyList()) - inntektsmelding(førsteFraværsdag = 1.januar, beregnetInntekt = 29000.månedlig).addInntekt(historikk, EmptyLog, emptyList()) + inntektsmelding(førsteFraværsdag = 1.januar, beregnetInntekt = 30000.månedlig).addInntekt(historikk, EmptyLog) + inntektsmelding(førsteFraværsdag = 1.januar, beregnetInntekt = 29000.månedlig).addInntekt(historikk, EmptyLog) resetSeed(1.februar) - inntektsmelding(førsteFraværsdag = 1.februar, beregnetInntekt = 31000.månedlig).addInntekt(historikk, EmptyLog, emptyList()) + inntektsmelding(førsteFraværsdag = 1.februar, beregnetInntekt = 31000.månedlig).addInntekt(historikk, EmptyLog) assertEquals(29000.månedlig, historikk.avklarSykepengegrunnlag(1.januar, 1.januar, null)?.inspektør?.beløp) assertEquals(31000.månedlig, historikk.avklarSykepengegrunnlag(1.februar, 1.februar, null)?.inspektør?.beløp) } @Test fun `Inntekt fra inntektsmelding brukes ikke til å beregne sykepengegrunnlaget på annen dato`() { - inntektsmelding(førsteFraværsdag = 1.januar).addInntekt(historikk, EmptyLog, emptyList()) + inntektsmelding(førsteFraværsdag = 1.januar).addInntekt(historikk, EmptyLog) assertEquals(1, inspektør.size) assertNull(historikk.avklarSykepengegrunnlag(2.januar, 2.januar, null)) } @@ -207,8 +207,11 @@ internal class InntektshistorikkTest { @Test fun `Inntekt for annen dato og samme kilde erstatter ikke eksisterende`() { - inntektsmelding(førsteFraværsdag = 1.januar).addInntekt(historikk, EmptyLog, emptyList()) - inntektsmelding(førsteFraværsdag = 2.januar, arbeidsgiverperioder = listOf(2.januar til 17.januar)).addInntekt(historikk, EmptyLog, emptyList()) + inntektsmelding(førsteFraværsdag = 1.januar).addInntekt(historikk, EmptyLog) + inntektsmelding(førsteFraværsdag = 2.januar, arbeidsgiverperioder = listOf(2.januar til 17.januar)).addInntekt( + historikk, + EmptyLog + ) assertEquals(2, inspektør.size) }