Skip to content

Commit

Permalink
forenkler sjekk av inntekt måneden før
Browse files Browse the repository at this point in the history
boolean-verdien som vi getter gjennom Opptjening-objektet er tilgjengelig i Vilkårsgrunnlag

Co-authored-by: Simen Ullern <simen.ullern@nav.no>
Co-authored-by: Sivert Lunsæter <Sivert.Frang.Lunseter@nav.no>
  • Loading branch information
3 people committed Nov 8, 2024
1 parent fb3a05a commit 90f2683
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import no.nav.helse.person.Opptjening
import no.nav.helse.person.Person
import no.nav.helse.person.VilkårsgrunnlagHistorikk
import no.nav.helse.person.aktivitetslogg.IAktivitetslogg
import no.nav.helse.person.aktivitetslogg.Varselkode
import no.nav.helse.person.inntekt.AnsattPeriode
import no.nav.helse.person.inntekt.Inntektsgrunnlag
import no.nav.helse.person.inntekt.SkattSykepengegrunnlag
Expand Down Expand Up @@ -55,8 +56,7 @@ class Vilkårsgrunnlag(
grunnlag = opptjeningsgrunnlag.map { (orgnummer, ansattPerioder) ->
Opptjening.ArbeidsgiverOpptjeningsgrunnlag(orgnummer, ansattPerioder.map { it.tilDomeneobjekt() })
},
skjæringstidspunkt = skjæringstidspunkt,
harInntektMånedenFørSkjæringstidspunkt = harInntektMånedenFørSkjæringstidspunkt
skjæringstidspunkt = skjæringstidspunkt
)
}

Expand All @@ -78,12 +78,13 @@ class Vilkårsgrunnlag(
arbeidsforhold.forEach { it.loggFrilans(aktivitetslogg, skjæringstidspunkt, arbeidsforhold) }
val opptjening = opptjening()
subsumsjonslogg.logg(opptjening.subsumsjon)
opptjening.validerInntektMånedenFørSkjæringstidspunkt(aktivitetslogg).also {
if (harInntektMånedenFørSkjæringstidspunkt && !inntektsvurderingForSykepengegrunnlag.harInntektI(YearMonth.from(skjæringstidspunkt.minusMonths(1)))) {
// Varsel spart
aktivitetslogg.info("Har inntekt måneden før skjæringstidspunkt med inntekter for opptjeningsvurdering, men ikke med inntekter for sykepengegrunnlag")
}

if (!harInntektMånedenFørSkjæringstidspunkt) {
aktivitetslogg.varsel(Varselkode.RV_OV_3)
} else if (!inntektsvurderingForSykepengegrunnlag.harInntektI(YearMonth.from(skjæringstidspunkt.minusMonths(1)))) {
aktivitetslogg.info("Har inntekt måneden før skjæringstidspunkt med inntekter for opptjeningsvurdering, men ikke med inntekter for sykepengegrunnlag")
}

val opptjeningvurderingOk = opptjening.validerOpptjeningsdager(aktivitetslogg)
val medlemskapsvurderingOk = medlemskapsvurdering.valider(aktivitetslogg)
grunnlagsdata = VilkårsgrunnlagHistorikk.Grunnlagsdata(
Expand Down
22 changes: 4 additions & 18 deletions sykepenger-model/src/main/kotlin/no/nav/helse/person/Opptjening.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,10 @@ import no.nav.helse.person.Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Companion.
import no.nav.helse.person.Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Companion.opptjeningsperiode
import no.nav.helse.person.Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Companion.startdatoFor
import no.nav.helse.person.aktivitetslogg.IAktivitetslogg
import no.nav.helse.person.aktivitetslogg.Varselkode
import no.nav.helse.person.aktivitetslogg.Varselkode.RV_OV_1

internal class Opptjening private constructor(
private val skjæringstidspunkt: LocalDate,
private val harInntektMånedenFørSkjæringstidspunkt: Boolean?,
private val arbeidsforhold: List<ArbeidsgiverOpptjeningsgrunnlag>,
private val opptjeningsperiode: Periode
) {
Expand All @@ -47,7 +45,6 @@ internal class Opptjening private constructor(

internal fun opptjeningsdager() = opptjeningsdager
internal fun harTilstrekkeligAntallOpptjeningsdager(): Boolean = opptjeningsdager >= TILSTREKKELIG_ANTALL_OPPTJENINGSDAGER
internal fun harInntektMånedenFørSkjæringstidspunkt(): Boolean? = harInntektMånedenFørSkjæringstidspunkt

internal fun erOppfylt(): Boolean = harTilstrekkeligAntallOpptjeningsdager()

Expand All @@ -57,25 +54,18 @@ internal class Opptjening private constructor(
return harTilstrekkeligAntallOpptjeningsdager()
}

internal fun validerInntektMånedenFørSkjæringstidspunkt(aktivitetslogg: IAktivitetslogg) {
val harInntektMånedenFørSkjæringstidspunkt = harInntektMånedenFørSkjæringstidspunkt()
if (!harInntektMånedenFørSkjæringstidspunkt!!) {
aktivitetslogg.varsel(Varselkode.RV_OV_3)
}
}

internal fun opptjeningFom() = opptjeningsperiode.start
internal fun startdatoFor(orgnummer: String) = arbeidsforhold.startdatoFor(orgnummer, skjæringstidspunkt)
internal fun overstyrArbeidsforhold(hendelse: OverstyrArbeidsforhold): Opptjening {
return hendelse.overstyr(this)
}

internal fun deaktiver(orgnummer: String): Opptjening {
return Opptjening.nyOpptjening(arbeidsforhold.deaktiver(orgnummer), skjæringstidspunkt, harInntektMånedenFørSkjæringstidspunkt)
return Opptjening.nyOpptjening(arbeidsforhold.deaktiver(orgnummer), skjæringstidspunkt)
}

internal fun aktiver(orgnummer: String): Opptjening {
return Opptjening.nyOpptjening(arbeidsforhold.aktiver(orgnummer), skjæringstidspunkt, harInntektMånedenFørSkjæringstidspunkt)
return Opptjening.nyOpptjening(arbeidsforhold.aktiver(orgnummer), skjæringstidspunkt)
}

internal data class ArbeidsgiverOpptjeningsgrunnlag(val orgnummer: String, val ansattPerioder: List<Arbeidsforhold>) {
Expand Down Expand Up @@ -195,22 +185,18 @@ internal class Opptjening private constructor(
companion object {
private const val TILSTREKKELIG_ANTALL_OPPTJENINGSDAGER = 28

internal fun gjenopprett(skjæringstidspunkt: LocalDate, harInntektMånedenFørSkjæringstidspunkt: Boolean?, arbeidsforhold: List<ArbeidsgiverOpptjeningsgrunnlag>, opptjeningsperiode: Periode) =
Opptjening(skjæringstidspunkt, harInntektMånedenFørSkjæringstidspunkt, arbeidsforhold, opptjeningsperiode)

internal fun gjenopprett(skjæringstidspunkt: LocalDate, dto: OpptjeningInnDto): Opptjening {
return Opptjening(
skjæringstidspunkt = skjæringstidspunkt,
harInntektMånedenFørSkjæringstidspunkt = null,
dto.arbeidsforhold.map { ArbeidsgiverOpptjeningsgrunnlag.gjenopprett(it) },
opptjeningsperiode = Periode.gjenopprett(dto.opptjeningsperiode)
)
}

internal fun nyOpptjening(grunnlag: List<ArbeidsgiverOpptjeningsgrunnlag>, skjæringstidspunkt: LocalDate, harInntektMånedenFørSkjæringstidspunkt: Boolean?): Opptjening {
internal fun nyOpptjening(grunnlag: List<ArbeidsgiverOpptjeningsgrunnlag>, skjæringstidspunkt: LocalDate): Opptjening {
val opptjeningsperiode = grunnlag.opptjeningsperiode(skjæringstidspunkt)
val arbeidsforhold = grunnlag.inngårIOpptjening(opptjeningsperiode)
val opptjening = Opptjening(skjæringstidspunkt, harInntektMånedenFørSkjæringstidspunkt, arbeidsforhold, opptjeningsperiode)
val opptjening = Opptjening(skjæringstidspunkt, arbeidsforhold, opptjeningsperiode)
return opptjening
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import java.time.LocalDate.EPOCH
import java.util.UUID
import no.nav.helse.april
import no.nav.helse.desember
import no.nav.helse.etterlevelse.Ledd.Companion.ledd
import no.nav.helse.etterlevelse.BehandlingSubsumsjonslogg
import no.nav.helse.etterlevelse.KontekstType
import no.nav.helse.etterlevelse.Ledd.Companion.ledd
import no.nav.helse.etterlevelse.Paragraf.PARAGRAF_8_2
import no.nav.helse.etterlevelse.Subsumsjon
import no.nav.helse.etterlevelse.Subsumsjon.Utfall.VILKAR_IKKE_OPPFYLT
Expand Down Expand Up @@ -89,7 +89,7 @@ internal class OpptjeningTest {
val arbeidsforhold = listOf(Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a1", listOf(
Arbeidsforhold(1.januar, null, false)
)))
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.mars, true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.mars)
assertNull(opptjening.startdatoFor("a2"))
}

Expand All @@ -98,7 +98,7 @@ internal class OpptjeningTest {
val arbeidsforhold = listOf(Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a1", listOf(
Arbeidsforhold(1.januar, null, true)
)))
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.mars, true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.mars)
assertEquals(28.februar, opptjening.startdatoFor("a1"))
}

Expand All @@ -108,14 +108,14 @@ internal class OpptjeningTest {
Arbeidsforhold(1.februar, null, false),
Arbeidsforhold(1.januar, 31.januar, false),
)))
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.mars, true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.mars)
assertEquals(1.januar, opptjening.startdatoFor("a1"))
}

@Test
fun `Tom liste med arbeidsforhold betyr at du ikke oppfyller opptjeningskrav`() {
val arbeidsforhold = emptyList<Opptjening.ArbeidsgiverOpptjeningsgrunnlag>()
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar, true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar)

assertFalse(opptjening.harTilstrekkeligAntallOpptjeningsdager())
}
Expand All @@ -134,7 +134,7 @@ internal class OpptjeningTest {
)
)
)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 2.januar, true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 2.januar)

assertFalse(opptjening.harTilstrekkeligAntallOpptjeningsdager())
}
Expand All @@ -153,7 +153,7 @@ internal class OpptjeningTest {
)
)
)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(27), true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(27))

assertFalse(opptjening.harTilstrekkeligAntallOpptjeningsdager())
}
Expand All @@ -172,7 +172,7 @@ internal class OpptjeningTest {
)
)
)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(28), true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(28))

assertTrue(opptjening.harTilstrekkeligAntallOpptjeningsdager())
}
Expand All @@ -191,7 +191,7 @@ internal class OpptjeningTest {
)
)
)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(28), true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(28))

assertFalse(opptjening.harTilstrekkeligAntallOpptjeningsdager())
}
Expand All @@ -217,7 +217,7 @@ internal class OpptjeningTest {
)
)

val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(28), true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(28))

assertFalse(opptjening.harTilstrekkeligAntallOpptjeningsdager())
}
Expand All @@ -238,7 +238,7 @@ internal class OpptjeningTest {
)
)

val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(28), true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(28))

assertTrue(opptjening.harTilstrekkeligAntallOpptjeningsdager())
}
Expand All @@ -253,7 +253,7 @@ internal class OpptjeningTest {
))
)

val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(28), true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(28))

assertTrue(opptjening.harTilstrekkeligAntallOpptjeningsdager())
}
Expand All @@ -265,7 +265,7 @@ internal class OpptjeningTest {
Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a2", listOf(Arbeidsforhold(ansattFom = mandag den 2.mai(2022), ansattTom = null, deaktivert = false)))
)

val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 2.mai(2022), true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 2.mai(2022))

assertTrue(opptjening.harTilstrekkeligAntallOpptjeningsdager())
assertEquals(1.oktober(2017), opptjening.opptjeningFom())
Expand All @@ -278,7 +278,7 @@ internal class OpptjeningTest {
Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a2", listOf(Arbeidsforhold(ansattFom = mandag den 2.mai(2022), ansattTom = null, deaktivert = false)))
)

val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 3.mai(2022), true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 3.mai(2022))

assertTrue(opptjening.harTilstrekkeligAntallOpptjeningsdager())
assertEquals(1.oktober(2017), opptjening.opptjeningFom())
Expand All @@ -291,7 +291,7 @@ internal class OpptjeningTest {
Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a2", listOf(Arbeidsforhold(ansattFom = mandag den 2.mai(2022), ansattTom = null, deaktivert = false)))
)

val opptjening = Opptjening.nyOpptjening(arbeidsforhold, tirsdag den 3.mai(2022), true)
val opptjening = Opptjening.nyOpptjening(arbeidsforhold, tirsdag den 3.mai(2022))

assertFalse(opptjening.harTilstrekkeligAntallOpptjeningsdager())
assertEquals(2.mai(2022), opptjening.opptjeningFom())
Expand All @@ -306,7 +306,7 @@ internal class OpptjeningTest {
listOf(Arbeidsforhold(4.desember(2017), 31.januar, deaktivert = false))
)
)
val subsumsjon = Opptjening.nyOpptjening(arbeidsforhold, 1.januar, true).subsumsjon
val subsumsjon = Opptjening.nyOpptjening(arbeidsforhold, 1.januar).subsumsjon
assertEquals(Subsumsjon.enkelSubsumsjon(
lovverk = "folketrygdloven",
utfall = VILKAR_OPPFYLT,
Expand Down Expand Up @@ -338,7 +338,7 @@ internal class OpptjeningTest {
listOf(Arbeidsforhold(5.desember(2017), 31.januar, deaktivert = false))
)
)
val subsumsjon = Opptjening.nyOpptjening(arbeidsforhold, 1.januar, true).subsumsjon
val subsumsjon = Opptjening.nyOpptjening(arbeidsforhold, 1.januar).subsumsjon
assertEquals(Subsumsjon.enkelSubsumsjon(
lovverk = "folketrygdloven",
utfall = VILKAR_IKKE_OPPFYLT,
Expand All @@ -360,19 +360,4 @@ internal class OpptjeningTest {
kontekster = emptyList()
), subsumsjon)
}

@Test
fun `Har ikke inntekt måneden før skjæringstidspunkt`() {
val arbeidsforhold = listOf(
Opptjening.ArbeidsgiverOpptjeningsgrunnlag("orgnummer", listOf(
Arbeidsforhold(ansattFom = EPOCH, ansattTom = null, deaktivert = false),
))
)

val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar, false)

assertTrue(opptjening.harTilstrekkeligAntallOpptjeningsdager())
assertFalse(opptjening.harInntektMånedenFørSkjæringstidspunkt()!!)
assertTrue(opptjening.erOppfylt())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ internal class VilkårsgrunnlagHistorikkInnslagTest {
)
), skjæringstidspunkt, jurist
),
opptjening = Opptjening.nyOpptjening(opptjening, 1.januar, true),
opptjening = Opptjening.nyOpptjening(opptjening, 1.januar),
medlemskapstatus = when (erMedlem) {
true -> Medlemskapsvurdering.Medlemskapstatus.Ja
false -> Medlemskapsvurdering.Medlemskapstatus.Nei
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ internal class VilkårsgrunnlagHistorikkTest {
VilkårsgrunnlagHistorikk.Grunnlagsdata(
skjæringstidspunkt = skjæringstidspunkt,
inntektsgrunnlag = inntekt.inntektsgrunnlag(ORGNR),
opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, skjæringstidspunkt, true),
opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, skjæringstidspunkt),
medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja,
vurdertOk = true,
meldingsreferanseId = UUID.randomUUID(),
Expand Down Expand Up @@ -106,7 +106,7 @@ internal class VilkårsgrunnlagHistorikkTest {
historikk.lagre(VilkårsgrunnlagHistorikk.Grunnlagsdata(
skjæringstidspunkt = gammeltSkjæringstidspunkt,
inntektsgrunnlag = inntekt.inntektsgrunnlag(ORGNR),
opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, gammeltSkjæringstidspunkt, true),
opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, gammeltSkjæringstidspunkt),
medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja,
vurdertOk = true,
meldingsreferanseId = UUID.randomUUID(),
Expand All @@ -129,7 +129,7 @@ internal class VilkårsgrunnlagHistorikkTest {
val grunnlag = VilkårsgrunnlagHistorikk.Grunnlagsdata(
skjæringstidspunkt = 1.januar,
inntektsgrunnlag = inntekt.inntektsgrunnlag(ORGNR),
opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, 1.januar, true),
opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, 1.januar),
medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja,
vurdertOk = true,
meldingsreferanseId = UUID.randomUUID(),
Expand All @@ -145,7 +145,7 @@ internal class VilkårsgrunnlagHistorikkTest {
val grunnlagsdata = VilkårsgrunnlagHistorikk.Grunnlagsdata(
skjæringstidspunkt = 1.januar,
inntektsgrunnlag = inntekt.inntektsgrunnlag(ORGNR),
opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, 1.januar, true),
opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, 1.januar),
medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja,
vurdertOk = false,
meldingsreferanseId = UUID.randomUUID(),
Expand All @@ -161,7 +161,7 @@ internal class VilkårsgrunnlagHistorikkTest {
val grunnlag = VilkårsgrunnlagHistorikk.Grunnlagsdata(
skjæringstidspunkt = 1.januar,
inntektsgrunnlag = inntekt.inntektsgrunnlag("et annet orgnr"),
opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, 1.januar, true),
opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, 1.januar),
medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja,
vurdertOk = true,
meldingsreferanseId = UUID.randomUUID(),
Expand Down
Loading

0 comments on commit 90f2683

Please sign in to comment.