Skip to content

Commit

Permalink
Fjerner tilpasninger på utbetalingsgrad og trekkdager for morsstillin…
Browse files Browse the repository at this point in the history
…gsprosent under 75
  • Loading branch information
espenwaaga committed Jun 28, 2024
1 parent cb48c36 commit 03b8b43
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 86 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ private PeriodeAktivitetResultat finnPeriodeAktivitetResultat(OppgittPeriode opp
} else {
var graderingInnvilget = regelresultat.getGraderingIkkeInnvilgetÅrsak() == null && oppgittPeriode.erSøktGradering(aktivitet);
trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(oppgittPeriode, graderingInnvilget, oppgittPeriode.getArbeidsprosent(),
regnSamtidigUttaksprosentMotGradering(oppgittPeriode, annenpartSamtidigUttaksprosent), oppgittPeriode.getMorsStillingsprosent());
regnSamtidigUttaksprosentMotGradering(oppgittPeriode, annenpartSamtidigUttaksprosent));
}
}
return new PeriodeAktivitetResultat(utbetalingsgrad, trekkdager);
Expand Down Expand Up @@ -184,15 +184,14 @@ private UtbetalingsgradUtregning bestemUtbetalingsgradUtregning(OppgittPeriode o
AktivitetIdentifikator aktivitet,
SamtidigUttaksprosent annenpartSamtidigUttaksprosent) {
if (oppgittPeriode.erSøktGradering(aktivitet)) {
return new UtbetalingsgradMedGraderingUtregning(oppgittPeriode, annenpartSamtidigUttaksprosent);
return new UtbetalingsgradMedGraderingUtregning(oppgittPeriode, aktivitet, annenpartSamtidigUttaksprosent);
}
var samtidigUttaksprosent = regnSamtidigUttaksprosentMotGradering(oppgittPeriode, annenpartSamtidigUttaksprosent);
if (samtidigUttaksprosent != null) {
return new UtbetalingsgradSamtidigUttakUtregning(samtidigUttaksprosent, oppgittPeriode.getArbeidsprosent(),
annenpartSamtidigUttaksprosent);
}
var morsStillingsprosent = oppgittPeriode.getMorsStillingsprosent();
return new UtbetalingsgradUtenGraderingUtregning(annenpartSamtidigUttaksprosent, morsStillingsprosent);
return new UtbetalingsgradUtenGraderingUtregning(annenpartSamtidigUttaksprosent);
}

private record PeriodeAktivitetResultat(Utbetalingsgrad utbetalingsgrad, Trekkdager trekkdager) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.math.BigDecimal;
import java.math.RoundingMode;

import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.MorsStillingsprosent;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Periode;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent;

Expand All @@ -15,44 +14,26 @@ private TrekkdagerUtregningUtil() {
public static Trekkdager trekkdagerFor(Periode periode,
boolean gradert,
BigDecimal gradertArbeidstidsprosent,
SamtidigUttaksprosent samtidigUttaksprosent,
MorsStillingsprosent morsStillingsprosent) {
var virkedager = Virkedager.beregnAntallVirkedager(periode);
if (gradert && samtidigUttaksprosent != null) {
//TODO
}
SamtidigUttaksprosent samtidigUttaksprosent) {
var trekkdagerUtenGradering = Virkedager.beregnAntallVirkedager(periode);
if (gradert) {
return trekkdagerMedGradering(virkedager, gradertArbeidstidsprosent, morsStillingsprosent);
return trekkdagerMedGradering(trekkdagerUtenGradering, gradertArbeidstidsprosent);
}
if (samtidigUttaksprosent != null) {
//Samme utregning som med gradering
return trekkdagerMedGradering(virkedager, BigDecimal.valueOf(100).subtract(samtidigUttaksprosent.decimalValue()), morsStillingsprosent);
return trekkdagerMedGradering(trekkdagerUtenGradering, BigDecimal.valueOf(100).subtract(samtidigUttaksprosent.decimalValue()));
}
return new Trekkdager(virkedager);
return new Trekkdager(trekkdagerUtenGradering);
}

private static Trekkdager trekkdagerMedGradering(int trekkdagerUtenGradering,
BigDecimal gradertArbeidstidsprosent,
MorsStillingsprosent morsStillingsprosent) {

private static Trekkdager trekkdagerMedGradering(int trekkdagerUtenGradering, BigDecimal gradertArbeidstidsprosent) {
if (gradertArbeidstidsprosent.compareTo(BigDecimal.valueOf(100)) >= 0) {
return Trekkdager.ZERO;
}
var trekkprosent = utledTrekkprosent(morsStillingsprosent, gradertArbeidstidsprosent);
var trekkdager = BigDecimal.valueOf(trekkdagerUtenGradering)
.multiply(trekkprosent);
.multiply(BigDecimal.valueOf(100).subtract(gradertArbeidstidsprosent))
.divide(BigDecimal.valueOf(100), 1, RoundingMode.DOWN);
return new Trekkdager(trekkdager);
}

private static BigDecimal utledTrekkprosent(MorsStillingsprosent morsStillingsprosent, BigDecimal gradertArbeidstidsprosent) {
var søktUttaksprosent = BigDecimal.valueOf(100).subtract(gradertArbeidstidsprosent);
if (morsStillingsprosent == null) {
return søktUttaksprosent.divide(BigDecimal.valueOf(100), 10, RoundingMode.HALF_DOWN);
}
if (morsStillingsprosent.decimalValue().compareTo(søktUttaksprosent) > 0) {
return søktUttaksprosent.divide(morsStillingsprosent.decimalValue(), 10, RoundingMode.HALF_DOWN);
}
return BigDecimal.ONE;
}

}
Original file line number Diff line number Diff line change
@@ -1,43 +1,37 @@
package no.nav.foreldrepenger.regler.uttak.fastsetteperiode;

import java.math.BigDecimal;
import java.util.Optional;

import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.MorsStillingsprosent;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad;

class UtbetalingsgradMedGraderingUtregning implements UtbetalingsgradUtregning {

private final OppgittPeriode uttakPeriode;
private final AktivitetIdentifikator aktivitet;
private final SamtidigUttaksprosent annenpartSamtidigUttaksprosent;

UtbetalingsgradMedGraderingUtregning(OppgittPeriode uttakPeriode, SamtidigUttaksprosent annenpartSamtidigUttaksprosent) {
UtbetalingsgradMedGraderingUtregning(OppgittPeriode uttakPeriode,
AktivitetIdentifikator aktivitet,
SamtidigUttaksprosent annenpartSamtidigUttaksprosent) {
this.uttakPeriode = uttakPeriode;
this.aktivitet = aktivitet;
this.annenpartSamtidigUttaksprosent = annenpartSamtidigUttaksprosent;
}

@Override
public Utbetalingsgrad resultat() {
if (uttakPeriode.getArbeidsprosent() == null) {
throw new IllegalArgumentException("arbeidstidsprosent kan ikke være null");
// Samtidiguttaksprosent med mindre gradering på noen aktiviteter i perioden
var lokalSamtidigUttaksprosent = uttakPeriode.erSøktGradering(aktivitet) ? Optional.ofNullable(uttakPeriode.getArbeidsprosent())
.map(SamtidigUttaksprosent.HUNDRED::subtract)
.orElseThrow(() -> new IllegalArgumentException("arbeidstidsprosent kan ikke være null")) : SamtidigUttaksprosent.HUNDRED;
var maksSamtidigUttakUtFraAnnenpart = SamtidigUttaksprosent.HUNDRED.subtract(annenpartSamtidigUttaksprosent);
// Reduser utbetaling dersom annenpart > 0 og det ligger an til mer enn 100 prosent
if (lokalSamtidigUttaksprosent.subtract(maksSamtidigUttakUtFraAnnenpart).merEnn0()) {
return new Utbetalingsgrad(maksSamtidigUttakUtFraAnnenpart.decimalValue());
}
var søktUttaksprosent = SamtidigUttaksprosent.HUNDRED.subtract(uttakPeriode.getArbeidsprosent());

// Hvis far søker gradering. Mor kan ha mindre enn 75% arbeids
var morsStillingsprosent = uttakPeriode.getMorsStillingsprosent();
// TODO: Far graderer, mor i arbeid og samtidig uttak. Hva skjer hera?
var gjenståendeUttakForBruker = SamtidigUttaksprosent.HUNDRED.subtract(annenpartSamtidigUttaksprosent);

if (morsStillingsprosent != null) {
// Reduser utbetaling dersom annenpart > 0 og det ligger an til mer enn 100 prosent
return new Utbetalingsgrad(minstAv(søktUttaksprosent, morsStillingsprosent));
}
return new Utbetalingsgrad(søktUttaksprosent.decimalValue());
}

private static BigDecimal minstAv(SamtidigUttaksprosent søktUttaksprosent, MorsStillingsprosent morsStillingsprosent) {
return søktUttaksprosent.decimalValue().compareTo(morsStillingsprosent.decimalValue())
> 0 ? morsStillingsprosent.decimalValue() : søktUttaksprosent.decimalValue();
return new Utbetalingsgrad(lokalSamtidigUttaksprosent.decimalValue());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ class UtbetalingsgradSamtidigUttakUtregning implements UtbetalingsgradUtregning

@Override
public Utbetalingsgrad resultat() {
// TODO SAMTIDIG UTTAK MED MOR ARBEID PEW PEW
// Samtidiguttaksprosent med mindre gradering på noen aktiviteter i perioden
var lokalSamtidigUttaksprosent = Optional.ofNullable(graderingArbeidstidsprosent)
.map(SamtidigUttaksprosent.HUNDRED::subtract)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,20 @@

import java.util.Objects;

import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.MorsStillingsprosent;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad;

class UtbetalingsgradUtenGraderingUtregning implements UtbetalingsgradUtregning {

private final SamtidigUttaksprosent annenpartSamtidigUttaksprosent;
private final MorsStillingsprosent morsStillingsprosent;

public UtbetalingsgradUtenGraderingUtregning(SamtidigUttaksprosent annenpartSamtidigUttaksprosent, MorsStillingsprosent morsStillingsprosent) {
public UtbetalingsgradUtenGraderingUtregning(SamtidigUttaksprosent annenpartSamtidigUttaksprosent) {
Objects.requireNonNull(annenpartSamtidigUttaksprosent);
this.annenpartSamtidigUttaksprosent = annenpartSamtidigUttaksprosent;
this.morsStillingsprosent = morsStillingsprosent;
}

@Override
public Utbetalingsgrad resultat() {
if (morsStillingsprosent != null) {
// TODO: Annenparts samtidig uttaksprosent sammen med mor i arbeid
return new Utbetalingsgrad(morsStillingsprosent.decimalValue());
}
return Utbetalingsgrad.HUNDRED.subtract(annenpartSamtidigUttaksprosent.decimalValue());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,12 @@

import org.junit.jupiter.api.Test;

import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.MorsStillingsprosent;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype;

class TrekkdagerUtregningUtilTest {

@Test
void mors_stillingsprosent_øker_antall_trekkdager_ved_gradering() {
var fom = LocalDate.of(2024, 6, 20);
var tom = fom.plusWeeks(6).minusDays(1);
var arbeidstidsprosent = BigDecimal.valueOf(80);
var morsStillingsprosent = new MorsStillingsprosent(40);
var periode = OppgittPeriode.forGradering(Stønadskontotype.FORELDREPENGER, fom, tom, arbeidstidsprosent, null, false, Set.of(), null, null,
null, null, null);
var trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(periode, true, arbeidstidsprosent, null, morsStillingsprosent);

assertThat(trekkdager).isEqualTo(new Trekkdager(15));
}

@Test
void skal_runde_ned_ved_gradering() {

Expand All @@ -37,7 +23,7 @@ void skal_runde_ned_ved_gradering() {
var arbeidstidsprosent = BigDecimal.valueOf(1);
var periode = OppgittPeriode.forGradering(Stønadskontotype.FORELDREPENGER, fom, tom, arbeidstidsprosent, null, false, Set.of(), null, null,
null, null, null);
var trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(periode, true, arbeidstidsprosent, null, null);
var trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(periode, true, arbeidstidsprosent, null);

assertThat(trekkdager).isEqualTo(new Trekkdager(1.9));
}
Expand All @@ -50,9 +36,9 @@ void skal_redusere_trekkdager_ved_samtidig_uttak_uten_gradering() {
var tom = LocalDate.of(2019, 4, 12);

var samtidigUttaksprosent = new SamtidigUttaksprosent(50);
var periode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FORELDREPENGER, fom, tom, samtidigUttaksprosent, false, null, null, null, null,
null);
var trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(periode, false, null, samtidigUttaksprosent, null);
var periode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FORELDREPENGER, fom, tom, samtidigUttaksprosent, false, null, null, null,
null, null);
var trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(periode, false, null, samtidigUttaksprosent);

assertThat(trekkdager).isEqualTo(new Trekkdager(5));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,18 @@

import org.junit.jupiter.api.Test;

import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.MorsStillingsprosent;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad;

class UtbetalingsgradUtenGraderingUtregningTest {

@Test
void utbetaling_skal_være_100_prosent() {
var utregning = new UtbetalingsgradUtenGraderingUtregning(SamtidigUttaksprosent.ZERO, null);
var utregning = utregning();
assertThat(utregning.resultat()).isEqualTo(Utbetalingsgrad.HUNDRED);
}

@Test
void utbetaling_skal_være_justert_til_annenparts_stillingsprosent() {
var utregning = new UtbetalingsgradUtenGraderingUtregning(SamtidigUttaksprosent.ZERO, new MorsStillingsprosent(10));
assertThat(utregning.resultat()).isEqualTo(Utbetalingsgrad.TEN);
private UtbetalingsgradUtenGraderingUtregning utregning() {
return new UtbetalingsgradUtenGraderingUtregning(SamtidigUttaksprosent.ZERO);
}
}

0 comments on commit 03b8b43

Please sign in to comment.