diff --git a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/regelmodell/fastsett/BeregningsgrunnlagPrArbeidsforhold.java b/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/regelmodell/fastsett/BeregningsgrunnlagPrArbeidsforhold.java index d8650772..a6d4cb9b 100644 --- a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/regelmodell/fastsett/BeregningsgrunnlagPrArbeidsforhold.java +++ b/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/regelmodell/fastsett/BeregningsgrunnlagPrArbeidsforhold.java @@ -19,6 +19,7 @@ public class BeregningsgrunnlagPrArbeidsforhold { private BigDecimal bruttoPrÅr; private Arbeidsforhold arbeidsforhold; private BigDecimal refusjonPrÅr; + private Boolean erAndelMedTilkommetInntekt; // Beregnet eller skjønnsfastsatt inntekt private BigDecimal inntektsgrunnlagPrÅr; @@ -105,6 +106,10 @@ public Arbeidsforhold getArbeidsforhold() { return Optional.ofNullable(finnGradert(refusjonPrÅr)); } + public Boolean erAndelMedTilkommetInntekt() { + return erAndelMedTilkommetInntekt; + } + public Optional getGradertBruttoInkludertNaturalytelsePrÅr() { Optional brutto = getBruttoInkludertNaturalytelsePrÅr(); return brutto.map(this::finnGradert); @@ -248,6 +253,11 @@ public Builder erNytt(boolean erNytt) { return this; } + public Builder medErAndelMedTilkommetInntekt(Boolean erAndelMedTilkommetInntekt) { + mal.erAndelMedTilkommetInntekt = erAndelMedTilkommetInntekt; + return this; + } + public Builder medMaksimalRefusjonPrÅr(BigDecimal maksimalRefusjonPrÅr) { mal.maksimalRefusjonPrÅr = maksimalRefusjonPrÅr; return this; diff --git a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/regelmodell/fastsett/BeregningsgrunnlagPrStatus.java b/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/regelmodell/fastsett/BeregningsgrunnlagPrStatus.java index a6565116..81893848 100644 --- a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/regelmodell/fastsett/BeregningsgrunnlagPrStatus.java +++ b/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/regelmodell/fastsett/BeregningsgrunnlagPrStatus.java @@ -24,6 +24,7 @@ public class BeregningsgrunnlagPrStatus { // Alltid full utbetaling for foreldrepenger private BigDecimal utbetalingsprosent = BigDecimal.valueOf(100); private BigDecimal aktivitetsgrad; // For bruk til å regne fortsatt arbeid (Mer nøyaktig enn å se på (1-utbetalingsprosent) + private Boolean erAndelMedTilkommetInntekt; private BigDecimal andelsmessigFørGraderingPrAar; private BigDecimal bruttoPrÅr; @@ -144,6 +145,10 @@ public Optional getAktivitetsgrad() { return Optional.ofNullable(aktivitetsgrad); } + public Boolean erAndelMedTilkommetInntekt() { + return erAndelMedTilkommetInntekt; + } + public List getArbeidsforholdSomSkalBrukes() { return getArbeidsforhold().stream().filter(BeregningsgrunnlagPrArbeidsforhold::getErSøktYtelseFor).toList(); } @@ -303,12 +308,17 @@ public Builder medUtbetalingsprosent(BigDecimal utbetalingsprosent) { public Builder medAktivitetsgrad(BigDecimal aktivitetsgrad) { if (aktivitetsgrad != null && (aktivitetsgrad.compareTo(BigDecimal.ZERO) < 0 || aktivitetsgrad.compareTo(BigDecimal.valueOf(100)) > 0)) { - throw new IllegalArgumentException("Aktivitetsgrad må ha verdi fra 0 til 100, faktisk: " + aktivitetsgrad); + throw new IllegalArgumentException("Aktivitetsgrad må ha verdi fra 0 til 100, faktisk: " + aktivitetsgrad); } beregningsgrunnlagPrStatusMal.aktivitetsgrad = aktivitetsgrad; return this; } + public Builder medErAndelMedTilkommetInntekt(Boolean erAndelMedTilkommetInntekt) { + beregningsgrunnlagPrStatusMal.erAndelMedTilkommetInntekt = erAndelMedTilkommetInntekt; + return this; + } + public BeregningsgrunnlagPrStatus build() { verifyStateForBuild(); return beregningsgrunnlagPrStatusMal; diff --git a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/ytelse/svp/FinnGrenseverdi.java b/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/ytelse/svp/FinnGrenseverdi.java index 31091573..937c6742 100644 --- a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/ytelse/svp/FinnGrenseverdi.java +++ b/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/ytelse/svp/FinnGrenseverdi.java @@ -68,7 +68,7 @@ public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) { } - static BigDecimal min(BigDecimal a, BigDecimal b){ + static BigDecimal min(BigDecimal a, BigDecimal b) { return a.compareTo(b) > 0 ? b : a; } @@ -77,24 +77,31 @@ private static BigDecimal summerAvkortetGradertMotUttak(BeregningsgrunnlagPeriod for (BeregningsgrunnlagPrStatus bps : grunnlag.getBeregningsgrunnlagPrStatusSomSkalBrukes()) { if (bps.erArbeidstakerEllerFrilanser()) { sum = sum.add(bps.getArbeidsforholdSomSkalBrukes().stream() + .filter(arb -> !Boolean.TRUE.equals(arb.erAndelMedTilkommetInntekt())) .map(arb -> arb.getAndelsmessigFørGraderingPrAar().multiply(arb.getUtbetalingsprosent().scaleByPowerOfTen(-2))) .reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); } else { - sum = sum.add(bps.getAndelsmessigFørGraderingPrAar().multiply(bps.getUtbetalingsprosent().scaleByPowerOfTen(-2))); + if (!Boolean.TRUE.equals(bps.erAndelMedTilkommetInntekt())) { + sum = sum.add(bps.getAndelsmessigFørGraderingPrAar().multiply(bps.getUtbetalingsprosent().scaleByPowerOfTen(-2))); + } } } return sum; } + private static BigDecimal summerAvkortet(BeregningsgrunnlagPeriode grunnlag) { BigDecimal sum = BigDecimal.ZERO; for (BeregningsgrunnlagPrStatus bps : grunnlag.getBeregningsgrunnlagPrStatusSomSkalBrukes()) { if (bps.erArbeidstakerEllerFrilanser()) { sum = sum.add(bps.getArbeidsforholdSomSkalBrukes().stream() + .filter(arb -> !Boolean.TRUE.equals(arb.erAndelMedTilkommetInntekt())) .map(arb -> arb.getAndelsmessigFørGraderingPrAar()) .reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); } else { - sum = sum.add(bps.getAndelsmessigFørGraderingPrAar()); + if (!Boolean.TRUE.equals(bps.erAndelMedTilkommetInntekt())) { + sum = sum.add(bps.getAndelsmessigFørGraderingPrAar()); + } } } return sum;