Skip to content

Commit

Permalink
Lager tester for justering av trekkdager og utbetalingsgrad for grade…
Browse files Browse the repository at this point in the history
…ring/morarbeid
  • Loading branch information
espenwaaga authored and sirimykland committed Jun 18, 2024
1 parent 29837a5 commit 2b818c6
Showing 1 changed file with 167 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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));
}

}

0 comments on commit 2b818c6

Please sign in to comment.