Skip to content

Commit

Permalink
Merge branch 'main' into dependabot/gradle/no.nav.dagpenger-dp-versio…
Browse files Browse the repository at this point in the history
…n-catalog-20241120.103.14b299
  • Loading branch information
geiralund authored Nov 20, 2024
2 parents 5c6c66e + 261da93 commit e34e123
Show file tree
Hide file tree
Showing 27 changed files with 556 additions and 418 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ object Avklaringspunkter {
beskrivelse = "Personen har lukkede saker i Arena siste 8 uker",
)

val Samordnes =
val Samordning =
Avklaringkode(
kode = "Samordning",
tittel = "Om reduserte ytelser fra folketrygden som skal samordnes",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ object KravPåDagpenger {
StreikOgLockout.ikkeStreikEllerLockout,
Medlemskap.oppfyllerMedlemskap,
TapAvArbeidsinntektOgArbeidstid.kravTilTapAvArbeidsinntektOgArbeidstid,
Samordning.utfallEtterSamordning,
)
}
}
Expand Down
56 changes: 32 additions & 24 deletions dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ import no.nav.dagpenger.avklaring.Kontrollpunkt
import no.nav.dagpenger.opplysning.Opplysningstype
import no.nav.dagpenger.opplysning.Regelsett
import no.nav.dagpenger.opplysning.id
import no.nav.dagpenger.opplysning.regel.addisjon
import no.nav.dagpenger.opplysning.regel.enAv
import no.nav.dagpenger.opplysning.regel.innhentMed
import no.nav.dagpenger.opplysning.regel.oppslag
import no.nav.dagpenger.opplysning.regel.substraksjon
import no.nav.dagpenger.opplysning.regel.størreEnnEllerLik
import no.nav.dagpenger.opplysning.regel.substraksjonTilNull
import no.nav.dagpenger.opplysning.verdier.Beløp
import no.nav.dagpenger.regel.Behov.Foreldrepenger
import no.nav.dagpenger.regel.Behov.Omsorgspenger
Expand All @@ -17,32 +19,34 @@ import no.nav.dagpenger.regel.Behov.Svangerskapspenger
import no.nav.dagpenger.regel.Behov.Sykepenger
import no.nav.dagpenger.regel.Behov.Uføre
import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato
import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse
import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse.dagsatsEtterNittiProsent
import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse.harBarnetillegg

/**
* § 4-25.Samordning med reduserte ytelser fra folketrygden, eller redusert avtalefestet pensjon
*/
object Samordning {
val utfallEtterSamordning = Opplysningstype.somBoolsk("Utfall etter samordning")
val sykepenger = Opplysningstype.somBoolsk("Sykepenger etter lovens kapittel 8".id(Sykepenger))
val pleiepenger = Opplysningstype.somBoolsk("Pleiepenger etter lovens kapittel 9".id(Pleienger))
val omsorgspenger = Opplysningstype.somBoolsk("Omsorgspenger etter lovens kapittel 9".id(Omsorgspenger))
val opplæringspenger = Opplysningstype.somBoolsk("Opplæringspenger etter lovens kapittel 9".id(Opplæringspenger))
val uføre = Opplysningstype.somBoolsk("Uføretrygd etter lovens kapittel 12".id(Uføre))
val foreldrepenger = Opplysningstype.somBoolsk("Foreldrepenger etter lovens kapittel 14".id(Foreldrepenger))
val svangerskapspenger = Opplysningstype.somBoolsk("Svangerskapspenger etter lovens kapittel 14".id(Svangerskapspenger))
val skalSamordnes = Opplysningstype.somBoolsk("Medlem har reduserte ytelser fra folketrygden (Samordning)")
internal val utfallEtterSamordning = Opplysningstype.somBoolsk("Utfall etter samordning")
internal val sykepenger = Opplysningstype.somBoolsk("Sykepenger etter lovens kapittel 8".id(Sykepenger))
internal val pleiepenger = Opplysningstype.somBoolsk("Pleiepenger etter lovens kapittel 9".id(Pleienger))
internal val omsorgspenger = Opplysningstype.somBoolsk("Omsorgspenger etter lovens kapittel 9".id(Omsorgspenger))
internal val opplæringspenger = Opplysningstype.somBoolsk("Opplæringspenger etter lovens kapittel 9".id(Opplæringspenger))
internal val uføre = Opplysningstype.somBoolsk("Uføretrygd etter lovens kapittel 12".id(Uføre))
internal val foreldrepenger = Opplysningstype.somBoolsk("Foreldrepenger etter lovens kapittel 14".id(Foreldrepenger))
internal val svangerskapspenger = Opplysningstype.somBoolsk("Svangerskapspenger etter lovens kapittel 14".id(Svangerskapspenger))
internal val skalSamordnes = Opplysningstype.somBoolsk("Medlem har reduserte ytelser fra folketrygden (Samordning)")

val sykepengerDagsats = Opplysningstype.somBeløp("Sykepenger dagsats")
val pleiepengerDagsats = Opplysningstype.somBeløp("Pleiepenger dagsats")
val omsorgspengerDagsats = Opplysningstype.somBeløp("Omsorgspenger dagsats")
val opplæringspengerDagsats = Opplysningstype.somBeløp("Opplæringspenger dagsats")
val uføreDagsats = Opplysningstype.somBeløp("Uføre dagsats")
val foreldrepengerDagsats = Opplysningstype.somBeløp("Foreldrepenger dagsats")
val svangerskapspengerDagsats = Opplysningstype.somBeløp("Svangerskapspenger dagsats")
internal val sykepengerDagsats = Opplysningstype.somBeløp("Sykepenger dagsats")
internal val pleiepengerDagsats = Opplysningstype.somBeløp("Pleiepenger dagsats")
internal val omsorgspengerDagsats = Opplysningstype.somBeløp("Omsorgspenger dagsats")
internal val opplæringspengerDagsats = Opplysningstype.somBeløp("Opplæringspenger dagsats")
internal val uføreDagsats = Opplysningstype.somBeløp("Uføre dagsats")
internal val foreldrepengerDagsats = Opplysningstype.somBeløp("Foreldrepenger dagsats")
internal val svangerskapspengerDagsats = Opplysningstype.somBeløp("Svangerskapspenger dagsats")

val avrundetDagsUtenBarnetillegg = DagpengenesStørrelse.avrundetDagsUtenBarnetillegg
val samordnetDagsats = Opplysningstype.somBeløp("Samordnet dagsats")
private val sumAndreYtelser = Opplysningstype.somBeløp("Sum andre ytelser")
internal val samordnetDagsats = Opplysningstype.somBeløp("Samordnet dagsats uten barnetillegg")
private val kanUtbetale = Opplysningstype.somBoolsk("Samordnet dagsats er negativ eller 0")

// Fulle dagpenger minus en/flere av reduserte ytelsene man mottar per samme dag (regnestykket)
// avrundetDagsUtenBarnetillegg - sykepenger - pleiepenger - omsorgspenger - opplæringspenger - uføre - foreldrepenger - svangerskapspenger
Expand All @@ -68,9 +72,8 @@ object Samordning {
regel(uføreDagsats) { oppslag(prøvingsdato) { Beløp(0.0) } }
regel(svangerskapspengerDagsats) { oppslag(prøvingsdato) { Beløp(0.0) } }
regel(foreldrepengerDagsats) { oppslag(prøvingsdato) { Beløp(0.0) } }
regel(samordnetDagsats) {
substraksjon(
avrundetDagsUtenBarnetillegg,
regel(sumAndreYtelser) {
addisjon(
sykepengerDagsats,
pleiepengerDagsats,
omsorgspengerDagsats,
Expand All @@ -81,6 +84,11 @@ object Samordning {
)
}

regel(samordnetDagsats) { substraksjonTilNull(dagsatsEtterNittiProsent, sumAndreYtelser) }
regel(kanUtbetale) { størreEnnEllerLik(dagsatsEtterNittiProsent, sumAndreYtelser) }

regel(utfallEtterSamordning) { enAv(kanUtbetale, harBarnetillegg) }

regel(skalSamordnes) {
enAv(
sykepenger,
Expand All @@ -97,7 +105,7 @@ object Samordning {
val ønsketResultat = listOf(samordnetDagsats, skalSamordnes)

val SkalSamordnes =
Kontrollpunkt(Avklaringspunkter.Samordnes) {
Kontrollpunkt(Avklaringspunkter.Samordning) {
it.har(skalSamordnes) && it.finnOpplysning(skalSamordnes).verdi
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ internal class BeregningsperiodeFabrikk(
Arbeidsdag(
dato,
opplysninger
.finnOpplysning(DagpengenesStørrelse.sats)
.finnOpplysning(DagpengenesStørrelse.dagsatsEtterSamordningMedBarnetillegg)
.verdi.verdien
.toInt(),
opplysninger.finnOpplysning(TapAvArbeidsinntektOgArbeidstid.fastsattVanligArbeidstid).verdi / 5,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,12 @@ import no.nav.dagpenger.opplysning.regel.innhentMed
import no.nav.dagpenger.opplysning.regel.minstAv
import no.nav.dagpenger.opplysning.regel.multiplikasjon
import no.nav.dagpenger.opplysning.regel.oppslag
import no.nav.dagpenger.opplysning.regel.størreEnnEllerLik
import no.nav.dagpenger.opplysning.regel.substraksjonTilNull
import no.nav.dagpenger.opplysning.verdier.Beløp
import no.nav.dagpenger.regel.Avklaringspunkter.BarnMåGodkjennes
import no.nav.dagpenger.regel.Behov.Barnetillegg
import no.nav.dagpenger.regel.Samordning.samordnetDagsats
import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato
import no.nav.dagpenger.regel.Søknadstidspunkt.søknadIdOpplysningstype
import java.math.BigDecimal
Expand All @@ -26,55 +29,79 @@ object DagpengenesStørrelse {

val barn = Opplysningstype.somBarn("Barn".id(Barnetillegg))
internal val antallBarn = Opplysningstype.somHeltall("Antall barn som gir rett til barnetillegg")
private val barnetilleggetsStørrelse = Opplysningstype.somBeløp("Barnetilleggets størrelse")
internal val barnetilleggetsStørrelse = Opplysningstype.somBeløp("Barnetilleggets størrelse i kroner per dag for hvert barn")

/**
* 1. Hente barn fra søknad
* 2. Saksbehandler vilkårprøver at en har rett til barnetillegg per barn
* 3. == antall barn * barnetillegg
*/
private val dekningsgrad = Opplysningstype.somDesimaltall("Dekningsgrad")
val dagsatsUtenBarnetillegg = Opplysningstype.somBeløp("Dagsats uten barnetillegg")
val avrundetDagsUtenBarnetillegg = Opplysningstype.somBeløp("Avrundet dagsats uten barnetillegg")
val avrundetDagsMedBarnetillegg = Opplysningstype.somBeløp("Avrundet dagsats med barnetillegg")
val barnetillegg = Opplysningstype.somBeløp("Barnetillegg i kroner")
val dagsatsMedBarn = Opplysningstype.somBeløp("Dagsats med barn")
val ukessats = Opplysningstype.somBeløp("Ukessats")
private val maksGrunnlag = Opplysningstype.somBeløp("Maks grunnlag for dagpenger")
private val dekningsgrad = Opplysningstype.somDesimaltall("Faktor for utregning av dagsats etter dagpengegrunnlaget")
val dagsatsUtenBarnetillegg = Opplysningstype.somBeløp("Dagsats uten barnetillegg før samordning")
private val avrundetDagsatsUtenBarnetillegg = Opplysningstype.somBeløp("Avrundet dagsats uten barnetillegg før samordning")
private val beløpOverMaks =
Opplysningstype.somBeløp(
"Andel av dagsats med barnetillegg som overstiger maks andel av dagpengegrunnlaget",
)
val dagsatsEtterNittiProsent =
Opplysningstype.somBeløp(
"Andel av dagsats med barnetillegg avkortet til maks andel av dagpengegrunnlaget",
)
val barnetillegg = Opplysningstype.somBeløp("Sum av barnetillegg")
private val dagsatsMedBarnetillegg = Opplysningstype.somBeløp("Dagsats med barnetillegg før samordning")
private val nittiProsent = Opplysningstype.somDesimaltall("90% av grunnlag for dagpenger")
private val antallArbeidsdagerPerÅr = Opplysningstype.somHeltall("Antall arbeidsdager per år")
private val maksGrunnlag = Opplysningstype.somBeløp("Maksimalt mulig grunnlag avgrenset til 90% av dagpengegrunnlaget")
private val arbeidsdagerPerUke = Opplysningstype.somHeltall("Antall arbeidsdager per uke")
private val maksSats = Opplysningstype.somBeløp("Maks dagsats for dagpenger")
private val nittiProsent = Opplysningstype.somDesimaltall("90% av grunnlag for dagpenger")
val sats = Opplysningstype.somBeløp("Dagsats for dagpenger med barnetillegg")
private val maksSats = Opplysningstype.somBeløp("Maksimal mulig dagsats avgrenset til 90% av dagpengegrunnlaget")
private val avrundetMaksSats = Opplysningstype.somBeløp("Avrundet maksimal mulig dagsats avgrenset til 90% av dagpengegrunnlaget")
internal val harBarnetillegg = Opplysningstype.somBoolsk("Har barnetillegg")
private val samordnetDagsatsMedBarnetillegg = Opplysningstype.somBeløp("Samordnet dagsats med barnetillegg")
val ukessats = Opplysningstype.somBeløp("Ukessats med barnetillegg etter samordning")
val dagsatsEtterSamordningMedBarnetillegg = Opplysningstype.somBeløp("Dagsats med barnetillegg etter samordning og 90% regel")

val regelsett =
Regelsett("§ 4-12. Dagpengenes størrelse\n (Sats)") {
regel(barn) { innhentMed(søknadIdOpplysningstype) }
regel(antallBarn) { antallAv(barn) { kvalifiserer } }

regel(barnetilleggetsStørrelse) { oppslag(prøvingsdato) { BarnetilleggSats.forDato(it) } }
regel(dekningsgrad) {
oppslag(prøvingsdato) { DagpengensStørrelseFaktor.forDato(it) }
}
// Regn ut dagsats uten barnetillegg, før samordning
regel(dekningsgrad) { oppslag(prøvingsdato) { DagpengensStørrelseFaktor.forDato(it) } }
regel(dagsatsUtenBarnetillegg) { multiplikasjon(grunnlag, dekningsgrad) }

// Avrunder og sender over til samordning
regel(avrundetDagsatsUtenBarnetillegg) { avrund(dagsatsUtenBarnetillegg) }

// Regn ut barnetillegg
regel(barnetilleggetsStørrelse) { oppslag(prøvingsdato) { BarnetilleggSats.forDato(it) } }
regel(barnetillegg) { multiplikasjon(barnetilleggetsStørrelse, antallBarn) }
regel(dagsatsMedBarn) { addisjon(dagsatsUtenBarnetillegg, barnetillegg) }

// Regne ut ukessats
regel(arbeidsdagerPerUke) { oppslag(prøvingsdato) { 5 } }
// Regn ut dagsats med barnetillegg, før maks og samordning
regel(dagsatsMedBarnetillegg) { addisjon(dagsatsUtenBarnetillegg, barnetillegg) }

// Regn ut 90% av dagpengegrunnlaget
regel(nittiProsent) { oppslag(prøvingsdato) { 0.9 } }
regel(antallArbeidsdagerPerÅr) { oppslag(prøvingsdato) { 260 } }

regel(maksGrunnlag) { multiplikasjon(grunnlag, nittiProsent) }
regel(maksSats) { divisjon(maksGrunnlag, antallArbeidsdagerPerÅr) }
regel(sats) { minstAv(maksSats, dagsatsMedBarn) }
regel(avrundetMaksSats) { avrund(maksSats) }

// Finn beløp som overstiger maksimal mulig dagsats
regel(beløpOverMaks) { substraksjonTilNull(dagsatsMedBarnetillegg, avrundetMaksSats) }
regel(dagsatsEtterNittiProsent) { substraksjonTilNull(avrundetDagsatsUtenBarnetillegg, beløpOverMaks) }

// Regn ut samordnet dagsats med barnetillegg, begrenset til 90% av dagpengegrunnlaget
regel(samordnetDagsatsMedBarnetillegg) { addisjon(samordnetDagsats, barnetillegg) }
regel(dagsatsEtterSamordningMedBarnetillegg) { minstAv(samordnetDagsatsMedBarnetillegg, avrundetMaksSats) }

// Regn ut ukessats
regel(arbeidsdagerPerUke) { oppslag(prøvingsdato) { 5 } }
regel(ukessats) { multiplikasjon(dagsatsEtterSamordningMedBarnetillegg, arbeidsdagerPerUke) }

regel(avrundetDagsMedBarnetillegg) { avrund(sats) }
regel(avrundetDagsUtenBarnetillegg) { avrund(dagsatsUtenBarnetillegg) } // Arena trenger denne
regel(ukessats) { multiplikasjon(avrundetDagsMedBarnetillegg, arbeidsdagerPerUke) }
regel(harBarnetillegg) { størreEnnEllerLik(barnetillegg, barnetilleggetsStørrelse) }
}

val ønsketResultat = listOf(ukessats, avrundetDagsUtenBarnetillegg)
val ønsketResultat = listOf(ukessats, samordnetDagsats)

val BarnetilleggKontroll =
Kontrollpunkt(BarnMåGodkjennes) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato

object Egenandel {
val egenandel = Opplysningstype.somBeløp("Egenandel")
private val sats = DagpengenesStørrelse.avrundetDagsMedBarnetillegg
private val sats = DagpengenesStørrelse.dagsatsEtterSamordningMedBarnetillegg
private val faktor = Opplysningstype.somDesimaltall("Antall dagsats for egenandel")

val regelsett =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import no.nav.dagpenger.regel.beregning.Beregning.arbeidstimer
import no.nav.dagpenger.regel.beregning.Beregning.forbruk
import no.nav.dagpenger.regel.beregning.Beregning.terskel
import no.nav.dagpenger.regel.beregning.BeregningsperiodeFabrikk
import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse.sats
import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse.dagsatsEtterSamordningMedBarnetillegg
import no.nav.dagpenger.regel.fastsetting.Dagpengeperiode.antallStønadsuker
import no.nav.dagpenger.regel.fastsetting.Dagpengeperiode.gjenståendeStønadsdager
import no.nav.dagpenger.regel.fastsetting.Egenandel.egenandel
Expand Down Expand Up @@ -148,7 +148,7 @@ class BeregningSteg : No {
Faktum(antallStønadsuker, args["verdi"]!!.toInt(), gyldighetsperiode)
},
"Sats" to { args, gyldighetsperiode ->
Faktum(sats, Beløp(args["verdi"]!!.toInt()), gyldighetsperiode)
Faktum(dagsatsEtterSamordningMedBarnetillegg, Beløp(args["verdi"]!!.toInt()), gyldighetsperiode)
},
"FVA" to { args, gyldighetsperiode ->
Faktum(fastsattVanligArbeidstid, args["verdi"]!!.toDouble(), gyldighetsperiode)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@ import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato
import no.nav.dagpenger.regel.fastsetting.Dagpengegrunnlag
import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse
import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse.antallBarn
import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse.avrundetDagsMedBarnetillegg
import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse.dagsatsEtterSamordningMedBarnetillegg
import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse.dagsatsUtenBarnetillegg
import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse.ukessats

class DagpengensStørrelseSteg : No {
private val fraDato = 10.mai(2024)
private val regelsett = RegelverkDagpenger.regelsettFor(avrundetDagsMedBarnetillegg)
private val regelsett = RegelverkDagpenger.regelsettFor(ukessats)
private val opplysninger: Opplysninger = Opplysninger()
private lateinit var regelkjøring: Regelkjøring

Expand Down Expand Up @@ -52,7 +53,7 @@ class DagpengensStørrelseSteg : No {
}

Så("skal dagpengens størrelse være {string}") { størrelse: String ->
opplysninger.finnOpplysning(avrundetDagsMedBarnetillegg).verdi shouldBe Beløp(størrelse.toBigDecimal())
opplysninger.finnOpplysning(dagsatsEtterSamordningMedBarnetillegg).verdi shouldBe Beløp(størrelse.toBigDecimal())
}

Så("skal ukessats være {string}") { ukessats: String ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,7 @@ class EgenandelSteg : No {
opplysninger.leggTil(Faktum(prøvingsdato, fraDato)).also { regelkjøring.evaluer() }
opplysninger
.leggTil(
Faktum(
DagpengenesStørrelse.avrundetDagsMedBarnetillegg,
Beløp(sats.toBigDecimal()),
),
Faktum(DagpengenesStørrelse.dagsatsEtterSamordningMedBarnetillegg, Beløp(sats.toBigDecimal())),
).also { regelkjøring.evaluer() }
}

Expand Down
Loading

0 comments on commit e34e123

Please sign in to comment.