From 2b818c60445fc9aa939f2e17fa4100bda75d5b23 Mon Sep 17 00:00:00 2001 From: espenwaaga Date: Tue, 18 Jun 2024 10:13:40 +0200 Subject: [PATCH] Lager tester for justering av trekkdager og utbetalingsgrad for gradering/morarbeid --- .../DelvisArbeidOrkestreringTest.java | 186 ++++++++++++++++-- 1 file changed, 167 insertions(+), 19 deletions(-) diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/DelvisArbeidOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/DelvisArbeidOrkestreringTest.java index b72b0912..08fdeea4 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/DelvisArbeidOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/DelvisArbeidOrkestreringTest.java @@ -1,12 +1,15 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode; import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.MorsAktivitet.ARBEID; +import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype.FELLESPERIODE; import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype.FORELDREPENGER; import static org.assertj.core.api.Assertions.assertThat; import java.math.BigDecimal; import java.time.LocalDate; +import java.util.Set; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; @@ -20,32 +23,177 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Perioderesultattype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.RegelGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknad; -import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; public class DelvisArbeidOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { - @Test - void far_søker_foreldrepenger_bare_far_rett_med_aktivitetskrav_og_mor_arbeider_under_75_prosent() { - var fødselsdato = LocalDate.of(2024, 6, 17); - var kontoer = new Kontoer.Builder() - .konto(FORELDREPENGER, 100); - var oppgittPeriode = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(12).minusDays(1), null, - false, fødselsdato, fødselsdato, ARBEID, new MorsStillingsprosent(BigDecimal.valueOf(40)), + public static final LocalDate FØDSELSDATO = LocalDate.of(2024, 6, 17); + + @Nested + class BareFarHarRett { + @Test + void far_fullt_uttak_mor_over_75_prosent_i_arbeid() { + var oppgittPeriode = lagOppgittPeriode(new MorsStillingsprosent(100)); + + var fastsattePerioder = fastsettPerioder(lagGrunnlag(oppgittPeriode)); + + assertThat(fastsattePerioder).hasSize(1); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(100)); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(30)); + } + + @Test + void far_fullt_uttak_mor_75_prosent_i_arbeid() { + var oppgittPeriode = lagOppgittPeriode(new MorsStillingsprosent(75)); + + var fastsattePerioder = fastsettPerioder(lagGrunnlag(oppgittPeriode)); + + assertThat(fastsattePerioder).hasSize(1); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(100)); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(30)); + } + + @Test + void far_fullt_uttak_mor_under_75_prosent_i_arbeid() { + var oppgittPeriode = lagOppgittPeriode(new MorsStillingsprosent(40)); + + var fastsattePerioder = fastsettPerioder(lagGrunnlag(oppgittPeriode)); + + assertThat(fastsattePerioder).hasSize(1); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(40)); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(30)); + } + + @Test + void far_graderer_20_prosent_mor_er_over_75_prosent_i_arbeid() { + var oppgittPeriode = lagOppgittPeriode(new MorsStillingsprosent(100), 20); + + var fastsattePerioder = fastsettPerioder(lagGrunnlag(oppgittPeriode)); + + assertThat(fastsattePerioder).hasSize(1); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(80)); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(24)); // 80% av 30 + } + + @Test + void far_graderer_40_prosent_mor_arbeider_40_prosent() { + var oppgittPeriode = lagOppgittPeriode(new MorsStillingsprosent(40), 40); + + var fastsattePerioder = fastsettPerioder(lagGrunnlag(oppgittPeriode)); + + assertThat(fastsattePerioder).hasSize(1); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(40)); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(30)); + } + + @Test + void far_graderer_60_prosent_mor_arbeider_40_prosent() { + var oppgittPeriode = lagOppgittPeriode(new MorsStillingsprosent(40), 60); + + var fastsattePerioder = fastsettPerioder(lagGrunnlag(oppgittPeriode)); + + assertThat(fastsattePerioder).hasSize(1); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(40)); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(30)); + } + + @Test + void far_graderer_80_prosent_mor_arbeider_40_prosent() { + var oppgittPeriode = lagOppgittPeriode(new MorsStillingsprosent(40), 80); + + var fastsattePerioder = fastsettPerioder(lagGrunnlag(oppgittPeriode)); + + assertThat(fastsattePerioder).hasSize(1); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(20)); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(15)); // 50% av 30 + } + } + + @Nested + class BeggeHarRett { + @Test + void far_graderer_80_prosent_mor_arbeider_40_prosent_fellesperiode() { + var farsArbeidsprosent = 80; + var morsStillingsprosent = new MorsStillingsprosent(40); + var oppgittPeriode = OppgittPeriode.forGradering( + FELLESPERIODE, + FØDSELSDATO.plusWeeks(6), // 30 dager + FØDSELSDATO.plusWeeks(12).minusDays(1), + BigDecimal.valueOf(farsArbeidsprosent), + null, + false, + Set.of(ARBEIDSFORHOLD), + FØDSELSDATO, + FØDSELSDATO, + ARBEID, + morsStillingsprosent, + DokumentasjonVurdering.MORS_AKTIVITET_GODKJENT); + + var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(FØDSELSDATO)) + .datoer(new Datoer.Builder().fødsel(FØDSELSDATO)) + .rettOgOmsorg(beggeRett()) + .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode)) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(new Kontoer.Builder().konto(FELLESPERIODE, 100)); + + var fastsattePerioder = fastsettPerioder(grunnlag); + + assertThat(fastsattePerioder).hasSize(1); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(20)); + assertThat(fastsattePerioder.getFirst().uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(15)); // 50% av 30 + } + + } + + + private static OppgittPeriode lagOppgittPeriode(MorsStillingsprosent morsStillingsprosent) { + return OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + FØDSELSDATO.plusWeeks(6), // 30 dager + FØDSELSDATO.plusWeeks(12).minusDays(1), + null, + false, + FØDSELSDATO, + FØDSELSDATO, + ARBEID, + morsStillingsprosent, + DokumentasjonVurdering.MORS_AKTIVITET_GODKJENT); + } + + private static OppgittPeriode lagOppgittPeriode(MorsStillingsprosent morsStillingsprosent, Integer farsArbeidsprosent) { + return OppgittPeriode.forGradering( + FORELDREPENGER, + FØDSELSDATO.plusWeeks(6), // 30 dager + FØDSELSDATO.plusWeeks(12).minusDays(1), + BigDecimal.valueOf(farsArbeidsprosent), + null, + false, + Set.of(ARBEIDSFORHOLD), + FØDSELSDATO, + FØDSELSDATO, + ARBEID, + morsStillingsprosent, DokumentasjonVurdering.MORS_AKTIVITET_GODKJENT); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); + } - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) + private RegelGrunnlag.Builder lagGrunnlag(OppgittPeriode oppgittPeriode) { + return new RegelGrunnlag.Builder().behandling(farBehandling()) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(FØDSELSDATO)) + .datoer(new Datoer.Builder().fødsel(FØDSELSDATO)) .rettOgOmsorg(bareFarRett()) - .søknad(søknad) + .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode)) .inngangsvilkår(oppfyltAlleVilkår()) .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); - var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder).hasSize(1); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(fastsattePerioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(40)); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualByComparingTo(new Trekkdager(30)); + .kontoer(new Kontoer.Builder().konto(FORELDREPENGER, 100)); } + }