diff --git a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/OmfordelFraBrukersAndel.java b/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/OmfordelFraBrukersAndel.java
deleted file mode 100644
index fb905203..00000000
--- a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/OmfordelFraBrukersAndel.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package no.nav.folketrygdloven.beregningsgrunnlag.fordel;
-
-import java.math.BigDecimal;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import no.nav.folketrygdloven.beregningsgrunnlag.fordel.modell.FordelAndelModell;
-import no.nav.folketrygdloven.beregningsgrunnlag.fordel.modell.FordelModell;
-import no.nav.folketrygdloven.beregningsgrunnlag.fordel.modell.FordelPeriodeModell;
-import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatus;
-import no.nav.fpsak.nare.evaluation.Evaluation;
-import no.nav.fpsak.nare.specification.LeafSpecification;
-
-/**
- * Omfordeler fra en generell brukers andel til en aktivitet/andel som er det er søkt for.
- *
- * En brukers andel blir brukt i situasjoner der bruker er midlertidig inaktiv eller kommer direkte fra ytelse uten arbeidsforhold.
- *
- * Dersom det søkes utbetaling for andre aktiviteter i løpet av ytelseperioden skal beregningsgrunnlag omfordeles til disse.
- *
- * Omfordeling gjøres slik at hele grunnlaget fra brukers andel settes på andelen med lavest avkortingprioritet (den som avkortes sist).
- */
-class OmfordelFraBrukersAndel extends LeafSpecification {
-
- public static final String ID = "OMFORDEL_FRA_BA";
- public static final String BESKRIVELSE = "Flytt beregningsgrunnlag fra brukers andel til aktivitetstatus med høyere prioritet";
- private static final Comparator AVKORTING_COMPARATOR = Comparator.comparingInt(a -> a.getAktivitetStatus().getAvkortingPrioritet());
-
- OmfordelFraBrukersAndel() {
- super(ID, BESKRIVELSE);
- }
-
- @Override
- public Evaluation evaluate(FordelModell modell) {
- Map resultater = new HashMap<>();
- var brukersAndel = modell.getInput().getAlleAndelerForStatus(AktivitetStatus.BA);
- var statusSomAvkortesSistUtenArbeid = finnStatusÅFlytteTil(modell.getInput());
- resultater.put("aktivitetstatusSomFlyttesTilFraInaktiv", statusSomAvkortesSistUtenArbeid.getAktivitetStatus());
- flyttTil(brukersAndel, statusSomAvkortesSistUtenArbeid, modell.getInput());
- settBrukersAndelTil0(brukersAndel);
- return beregnet(resultater);
- }
-
- private void settBrukersAndelTil0(List brukersAndel) {
- brukersAndel.forEach(ba -> FordelAndelModell.oppdater(ba)
- .medFordeltPrÅr(BigDecimal.ZERO)
- .build());
- }
-
- private void flyttTil(List brukersAndel, FordelAndelModell flytteTilAndel, FordelPeriodeModell periodeModell) {
- // Siden vi er her vet vi at det finnes minst ett element i lista, flytter bg herfra til flytteTilAndel
- var førsteBrukersAndel = brukersAndel.get(0);
- FordelAndelModell.oppdater(flytteTilAndel)
- .medInntektskategori(førsteBrukersAndel.getInntektskategori())
- .medFordeltPrÅr(flytteTilAndel.getBruttoPrÅr().orElse(BigDecimal.ZERO).add(førsteBrukersAndel.getBruttoPrÅr().orElse(BigDecimal.ZERO)))
- .build();
- if (brukersAndel.size() > 1) {
- fordelRestenTilNyeAndeler(brukersAndel, flytteTilAndel, periodeModell);
- }
- }
-
- private void fordelRestenTilNyeAndeler(List brukersAndel,
- FordelAndelModell eksisterendeAndel,
- FordelPeriodeModell periodeModell) {
- var restenAvLista = brukersAndel.subList(1, brukersAndel.size());
- for (FordelAndelModell andel : restenAvLista) {
- var nyAndel = opprettNyAndelBasertPå(eksisterendeAndel);
- FordelAndelModell.oppdater(nyAndel)
- .medInntektskategori(andel.getInntektskategori())
- .medFordeltPrÅr(andel.getBruttoPrÅr().orElse(BigDecimal.ZERO))
- .build();
- periodeModell.leggTilAndel(nyAndel);
- }
- }
-
- private FordelAndelModell finnStatusÅFlytteTil(FordelPeriodeModell beregningsgrunnlagPeriode) {
- return beregningsgrunnlagPeriode.getBeregningsgrunnlagPrStatusSomSkalBrukes()
- .stream()
- .filter(a -> !AktivitetStatus.AT.equals(a.getAktivitetStatus()))
- .min(AVKORTING_COMPARATOR)
- .orElseThrow(() -> new IllegalStateException("Forventet å ha en aktivitet å flytte til som ikke er arbeid"));
- }
-
- private FordelAndelModell opprettNyAndelBasertPå(FordelAndelModell basertPå) {
- return FordelAndelModell.builder()
- .medArbeidsforhold(basertPå.getArbeidsforhold().orElse(null))
- .medAktivitetStatus(basertPå.getAktivitetStatus())
- .erNytt(true)
- .build();
- }
-
-
-}
diff --git a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/RegelFordelBeregningsgrunnlag.java b/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/RegelFordelBeregningsgrunnlag.java
index 74f88f0b..333438b4 100644
--- a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/RegelFordelBeregningsgrunnlag.java
+++ b/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/RegelFordelBeregningsgrunnlag.java
@@ -16,7 +16,7 @@
public class RegelFordelBeregningsgrunnlag implements EksportRegel {
- public static final String ID = "FP_BR 22.3";
+ public static final String ID = "FP_BR 22.3";
private FordelModell modell;
public RegelFordelBeregningsgrunnlag() {
@@ -58,31 +58,26 @@ private void validerAtBruttoErUendret(FordelModell modell) {
.orElse(BigDecimal.ZERO);
if (bruttoInn.compareTo(bruttoUt) != 0) {
throw new IllegalStateException("Missmatch mellom fordelt beløp før og etter andelsmessig fordeling." +
- " Inn i regel var brutto " + bruttoInn + ". Ut av regel var brutto " + bruttoUt);
+ " Inn i regel var brutto " + bruttoInn + ". Ut av regel var brutto " + bruttoUt);
}
}
@SuppressWarnings("unchecked")
- @Override
- public Specification getSpecification() {
- Ruleset rs = new Ruleset<>();
-
- Specification fastsettFordelingAvBeregningsgrunnlag = new FastsettNyFordeling(modell).getSpecification();
-
- Specification sjekkRefusjonMotBeregningsgrunnlag = rs.beregningHvisRegel(new SjekkHarRefusjonSomOverstigerBeregningsgrunnlag(),
- fastsettFordelingAvBeregningsgrunnlag, new SettAndelerUtenSøktYtelseTilNull());
+ @Override
+ public Specification getSpecification() {
+ Ruleset rs = new Ruleset<>();
- Specification omfordelFraBrukersAndel = rs.beregningsRegel(OmfordelFraBrukersAndel.ID,
- OmfordelFraBrukersAndel.BESKRIVELSE, new OmfordelFraBrukersAndel(), sjekkRefusjonMotBeregningsgrunnlag);
+ Specification fastsettFordelingAvBeregningsgrunnlag = new FastsettNyFordeling(modell).getSpecification();
- Specification sjekkOmSkalFordeleFraBrukersAndel = rs.beregningHvisRegel(new SkalOmfordeleFraBrukersAndelTilFLEllerSN(), omfordelFraBrukersAndel, sjekkRefusjonMotBeregningsgrunnlag);
+ Specification sjekkRefusjonMotBeregningsgrunnlag = rs.beregningHvisRegel(new SjekkHarRefusjonSomOverstigerBeregningsgrunnlag(),
+ fastsettFordelingAvBeregningsgrunnlag, new SettAndelerUtenSøktYtelseTilNull());
Specification fordelBruttoAndelsmessig = rs.beregningsRegel(RegelFordelBeregningsgrunnlagAndelsmessig.ID, RegelFordelBeregningsgrunnlagAndelsmessig.BESKRIVELSE, new RegelFordelBeregningsgrunnlagAndelsmessig().getSpecification(), new Fordelt());
- Specification sjekkOmBruttoKanDekkeAllRefusjon = rs.beregningHvisRegel(new FinnesMerRefusjonEnnBruttoTilgjengeligOgFlereAndelerKreverRefusjon(), fordelBruttoAndelsmessig, sjekkOmSkalFordeleFraBrukersAndel);
+ Specification sjekkOmBruttoKanDekkeAllRefusjon = rs.beregningHvisRegel(new FinnesMerRefusjonEnnBruttoTilgjengeligOgFlereAndelerKreverRefusjon(), fordelBruttoAndelsmessig, sjekkRefusjonMotBeregningsgrunnlag);
- Specification sjekkOmDetFinnesTilkommetRefkrav = rs.beregningHvisRegel(new FinnesTilkommetArbeidsandelMedRefusjonskrav(), sjekkOmBruttoKanDekkeAllRefusjon, sjekkOmSkalFordeleFraBrukersAndel);
+ Specification sjekkOmDetFinnesTilkommetRefkrav = rs.beregningHvisRegel(new FinnesTilkommetArbeidsandelMedRefusjonskrav(), sjekkOmBruttoKanDekkeAllRefusjon, sjekkRefusjonMotBeregningsgrunnlag);
return sjekkOmDetFinnesTilkommetRefkrav;
- }
+ }
}
diff --git a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/SkalOmfordeleFraBrukersAndelTilFLEllerSN.java b/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/SkalOmfordeleFraBrukersAndelTilFLEllerSN.java
deleted file mode 100644
index 220c4caf..00000000
--- a/src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/SkalOmfordeleFraBrukersAndelTilFLEllerSN.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package no.nav.folketrygdloven.beregningsgrunnlag.fordel;
-
-import java.math.BigDecimal;
-
-import no.nav.folketrygdloven.beregningsgrunnlag.fordel.modell.FordelAndelModell;
-import no.nav.folketrygdloven.beregningsgrunnlag.fordel.modell.FordelModell;
-import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatus;
-import no.nav.fpsak.nare.evaluation.Evaluation;
-import no.nav.fpsak.nare.specification.LeafSpecification;
-
-/**
- * Bestemmer om det skal omfordeles fra en brukers andel til FL eller SN.
- *
- * Se {@link OmfordelFraBrukersAndel} for en forklaring på hvilke situasjoner vi forventer å finne en brukers andel.
- *
- */
-class SkalOmfordeleFraBrukersAndelTilFLEllerSN extends LeafSpecification {
-
- static final String ID = "SKAL_OMFORDELE_FRA_BA";
- static final String BESKRIVELSE = "Har brukers andel og søkt for FL eller SN?";
-
- SkalOmfordeleFraBrukersAndelTilFLEllerSN() {
- super(ID, BESKRIVELSE);
- }
-
- @Override
- public Evaluation evaluate(FordelModell grunnlag) {
- var harBrukersAndel = harBrukersAndelMedBeregningsgrunnlag(grunnlag);
- boolean harSøktForFLEllerSN = harSøktFLEllerSN(grunnlag);
- return harBrukersAndel && harSøktForFLEllerSN ? ja() : nei();
- }
-
- private boolean harSøktFLEllerSN(FordelModell grunnlag) {
- boolean harSøktFrilans = grunnlag.getInput().getEnesteAndelForStatus(AktivitetStatus.FL).map(FordelAndelModell::erSøktYtelseFor).orElse(false);
- boolean harSøktSN = grunnlag.getInput().getEnesteAndelForStatus(AktivitetStatus.SN).map(FordelAndelModell::erSøktYtelseFor).orElse(false);
- return harSøktFrilans || harSøktSN;
- }
-
- private boolean harBrukersAndelMedBeregningsgrunnlag(FordelModell grunnlag) {
- var brukersAndeler = grunnlag.getInput().getAlleAndelerForStatus(AktivitetStatus.BA);
- var brukerAndelBrutto = brukersAndeler.stream().map(ba -> ba.getBruttoPrÅr().orElse(BigDecimal.ZERO)).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
- return brukerAndelBrutto.compareTo(BigDecimal.ZERO) > 0;
- }
-
-}
diff --git a/src/test/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/OmfordelFraBrukersAndelTest.java b/src/test/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/OmfordelFraBrukersAndelTest.java
deleted file mode 100644
index 29f3f199..00000000
--- a/src/test/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/OmfordelFraBrukersAndelTest.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package no.nav.folketrygdloven.beregningsgrunnlag.fordel;
-
-import static no.nav.folketrygdloven.beregningsgrunnlag.util.DateUtil.TIDENES_ENDE;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.util.Arrays;
-
-
-import no.nav.folketrygdloven.beregningsgrunnlag.fordel.modell.FordelAndelModell;
-import no.nav.folketrygdloven.beregningsgrunnlag.fordel.modell.FordelModell;
-import no.nav.folketrygdloven.beregningsgrunnlag.fordel.modell.FordelPeriodeModell;
-
-import org.junit.jupiter.api.Test;
-
-import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatus;
-import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.Periode;
-import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.grunnlag.inntekt.Arbeidsforhold;
-import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.grunnlag.inntekt.Inntektskategori;
-
-class OmfordelFraBrukersAndelTest {
-
- @Test
- void skal_omfordele_fra_brukers_andel_til_frilans() {
- // Arrange
- var inntekt = BigDecimal.valueOf(200_000);
- var arbeidstakerUtenFeriepenger = Inntektskategori.ARBEIDSTAKER_UTEN_FERIEPENGER;
- var brukers_andel = lagBrukersAndel(inntekt, arbeidstakerUtenFeriepenger, 1L);
- var frilans = lagFrilans(2L);
-
- var periode = new FordelPeriodeModell(Periode.of(LocalDate.now(), TIDENES_ENDE), Arrays.asList(brukers_andel, frilans));
- FordelModell regelmodell = new FordelModell(periode);
- kjørRegel(regelmodell);
-
- // Regelen endrer på input så vi kan asserte på brukers_andel og frilans
- assertThat(brukers_andel.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(BigDecimal.ZERO);
- assertThat(frilans.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(inntekt);
- assertThat(frilans.getInntektskategori()).isEqualTo(arbeidstakerUtenFeriepenger);
- }
-
- @Test
- void skal_omfordele_fra_to_brukers_andel_til_frilans() {
- // Arrange
- var inntekt = BigDecimal.valueOf(200_000);
- var inntekt2 = BigDecimal.valueOf(40_000);
- var brukers_andel = lagBrukersAndel(inntekt, Inntektskategori.ARBEIDSTAKER, 1L);
- var brukers_andel2 = lagBrukersAndel(inntekt2, Inntektskategori.FRILANSER, 2L);
- var frilans = lagFrilans(3L);
-
- var periode = new FordelPeriodeModell(Periode.of(LocalDate.now(), TIDENES_ENDE), Arrays.asList(brukers_andel, brukers_andel2, frilans));
- FordelModell regelmodell = new FordelModell(periode);
- kjørRegel(regelmodell);
-
- // Regelen endrer på input så vi kan asserte på brukers_andel og frilans
- assertThat(periode.getAndeler()).hasSize(4);
- assertThat(brukers_andel.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(BigDecimal.ZERO);
- assertThat(brukers_andel2.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(BigDecimal.ZERO);
- assertThat(frilans.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(inntekt);
- assertThat(frilans.getInntektskategori()).isEqualTo(Inntektskategori.ARBEIDSTAKER);
- var nyAndel = periode.getAndeler().get(3);
- assertThat(nyAndel.getInntektskategori()).isEqualTo(Inntektskategori.FRILANSER);
- assertThat(nyAndel.getFordeltPrÅr().orElseThrow()).isEqualTo(inntekt2);
- }
-
- @Test
- void skal_omfordele_fra_brukers_andel_til_sn() {
- // Arrange
- var inntekt = BigDecimal.valueOf(200_000);
- var arbeidstakerUtenFeriepenger = Inntektskategori.ARBEIDSTAKER_UTEN_FERIEPENGER;
- var brukers_andel = lagBrukersAndel(inntekt, arbeidstakerUtenFeriepenger, 1L);
-
- long andelsnrSN = 2L;
- var snStatus = lagSN(andelsnrSN);
-
- var periode = new FordelPeriodeModell(Periode.of(LocalDate.now(), TIDENES_ENDE), Arrays.asList(brukers_andel, snStatus));
-
- FordelModell regelmodell = new FordelModell(periode);
- kjørRegel(regelmodell);
-
- // Regelen endrer på input så vi kan asserte på brukers_andel og sn
- assertThat(brukers_andel.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(BigDecimal.ZERO);
- assertThat(snStatus.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(inntekt);
- assertThat(snStatus.getInntektskategori()).isEqualTo(arbeidstakerUtenFeriepenger);
- }
-
- @Test
- void skal_omfordele_fra_to_brukers_andel_til_sn() {
- // Arrange
- var inntekt = BigDecimal.valueOf(200_000);
- var inntekt2 = BigDecimal.valueOf(100_000);
- var brukers_andel = lagBrukersAndel(inntekt, Inntektskategori.ARBEIDSTAKER, 1L);
- var brukers_andel2 = lagBrukersAndel(inntekt2, Inntektskategori.SELVSTENDIG_NÆRINGSDRIVENDE, 2L);
-
- long andelsnrSN = 3L;
- var snStatus = lagSN(andelsnrSN);
-
- var periode = new FordelPeriodeModell(Periode.of(LocalDate.now(), TIDENES_ENDE), Arrays.asList(brukers_andel,brukers_andel2, snStatus));
-
- FordelModell regelmodell = new FordelModell(periode);
- kjørRegel(regelmodell);
-
- // Regelen endrer på input så vi kan asserte på brukers_andel og sn
- assertThat(periode.getAndeler()).hasSize(4);
- assertThat(brukers_andel.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(BigDecimal.ZERO);
- assertThat(brukers_andel2.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(BigDecimal.ZERO);
- assertThat(snStatus.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(inntekt);
- assertThat(snStatus.getInntektskategori()).isEqualTo(Inntektskategori.ARBEIDSTAKER);
- var nyAndel = periode.getAndeler().get(3);
- assertThat(nyAndel.getAktivitetStatus()).isEqualTo(AktivitetStatus.SN);
- assertThat(nyAndel.getInntektskategori()).isEqualTo(Inntektskategori.SELVSTENDIG_NÆRINGSDRIVENDE);
- assertThat(nyAndel.getFordeltPrÅr().orElseThrow()).isEqualTo(inntekt2);
- }
-
-
- @Test
- void skal_omfordele_fra_brukers_andel_til_frilans_for_periode_med_fl_og_sn() {
- // Arrange
- var inntekt = BigDecimal.valueOf(200_000);
- var arbeidstakerUtenFeriepenger = Inntektskategori.ARBEIDSTAKER_UTEN_FERIEPENGER;
- var brukers_andel = lagBrukersAndel(inntekt, arbeidstakerUtenFeriepenger, 1L);
- long andelsnrFrilans = 2L;
- var frilans = lagFrilans(andelsnrFrilans);
- long andelsnrSN = 3L;
- var snStatus = lagSN(andelsnrSN);
- var periode = new FordelPeriodeModell(Periode.of(LocalDate.now(), TIDENES_ENDE), Arrays.asList(brukers_andel, snStatus, frilans));
- FordelModell regelmodell = new FordelModell(periode);
- kjørRegel(regelmodell);
-
- // Regelen endrer på input så vi kan asserte på brukers_andel og frilans/sn
- assertThat(brukers_andel.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(BigDecimal.ZERO);
- assertThat(frilans.getFordeltPrÅr().orElseThrow()).isEqualByComparingTo(inntekt);
- assertThat(frilans.getInntektskategori()).isEqualTo(arbeidstakerUtenFeriepenger);
- assertThat(snStatus.getBruttoPrÅr()).isEmpty();
- }
-
- private FordelAndelModell lagSN(long andelsnrSN) {
- return FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.SN)
- .medInntektskategori(Inntektskategori.UDEFINERT)
- .medAndelNr(andelsnrSN)
- .build();
- }
-
- private FordelAndelModell lagFrilans(long andelsnrFrilans) {
- return FordelAndelModell.builder()
- .medInntektskategori(Inntektskategori.UDEFINERT)
- .medAktivitetStatus(AktivitetStatus.FL)
- .medArbeidsforhold(Arbeidsforhold.frilansArbeidsforhold())
- .medAndelNr(andelsnrFrilans)
- .build();
- }
-
-
- private FordelAndelModell lagBrukersAndel(BigDecimal inntekt, Inntektskategori arbeidstakerUtenFeriepenger, long andelsnrBrukersAndel) {
- return FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.BA)
- .medForeslåttPrÅr(inntekt)
- .medInntektskategori(arbeidstakerUtenFeriepenger)
- .medAndelNr(andelsnrBrukersAndel)
- .build();
- }
-
- private void kjørRegel(FordelModell modell) {
- new OmfordelFraBrukersAndel().evaluate(modell);
- }
-}
\ No newline at end of file
diff --git a/src/test/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/SkalOmfordeleFraBrukersAndelTilFLEllerSNTest.java b/src/test/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/SkalOmfordeleFraBrukersAndelTilFLEllerSNTest.java
deleted file mode 100644
index eeb28d77..00000000
--- a/src/test/java/no/nav/folketrygdloven/beregningsgrunnlag/fordel/SkalOmfordeleFraBrukersAndelTilFLEllerSNTest.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package no.nav.folketrygdloven.beregningsgrunnlag.fordel;
-
-import static no.nav.folketrygdloven.beregningsgrunnlag.util.DateUtil.TIDENES_ENDE;
-import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.util.Arrays;
-import java.util.Collections;
-
-
-import no.nav.folketrygdloven.beregningsgrunnlag.fordel.modell.FordelAndelModell;
-
-import no.nav.folketrygdloven.beregningsgrunnlag.fordel.modell.FordelModell;
-import no.nav.folketrygdloven.beregningsgrunnlag.fordel.modell.FordelPeriodeModell;
-
-import org.junit.jupiter.api.Test;
-
-import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.Aktivitet;
-import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatus;
-import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.Periode;
-import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.grunnlag.inntekt.Arbeidsforhold;
-import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.grunnlag.inntekt.Inntektskategori;
-import no.nav.fpsak.nare.evaluation.Evaluation;
-import no.nav.fpsak.nare.evaluation.Resultat;
-
-class SkalOmfordeleFraBrukersAndelTilFLEllerSNTest {
-
- @Test
- void skal_ikke_omfordele_fra_brukers_andel_uten_brukers_andel() {
- // Arrange
- var andel = FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.SN)
- .medInntektskategori(Inntektskategori.UDEFINERT)
- .medAndelNr(1L)
- .build();
- var periode = new FordelPeriodeModell(Periode.of(LocalDate.now(), TIDENES_ENDE), Collections.singletonList(andel));
-
- // Act
- Evaluation evaluation = new SkalOmfordeleFraBrukersAndelTilFLEllerSN().evaluate(new FordelModell(periode));
-
- // Assert
- assertThat(evaluation.result()).isEqualTo(Resultat.NEI);
- }
-
- @Test
- void skal_ikke_omfordele_fra_brukers_andel_uten_fl_eller_sn() {
- // Arrange
- var andel = FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.BA)
- .medForeslåttPrÅr(BigDecimal.valueOf(200_000))
- .medInntektskategori(Inntektskategori.ARBEIDSTAKER_UTEN_FERIEPENGER)
- .medAndelNr(1L)
- .build();
- var periode = new FordelPeriodeModell(Periode.of(LocalDate.now(), TIDENES_ENDE), Collections.singletonList(andel));
-
- // Act
- Evaluation evaluation = new SkalOmfordeleFraBrukersAndelTilFLEllerSN().evaluate(new FordelModell(periode));
-
- // Assert
- assertThat(evaluation.result()).isEqualTo(Resultat.NEI);
- }
-
- @Test
- void skal_omfordele_fra_brukers_andel_med_fl() {
- // Arrange
- var andel1 = FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.BA)
- .medForeslåttPrÅr(BigDecimal.valueOf(200_000))
- .medInntektskategori(Inntektskategori.ARBEIDSTAKER_UTEN_FERIEPENGER)
- .medAndelNr(1L)
- .build();
- var andel2 = FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.FL)
- .medInntektskategori(Inntektskategori.UDEFINERT)
- .medArbeidsforhold(Arbeidsforhold.frilansArbeidsforhold())
- .medAndelNr(2L)
- .build();
- var periode = new FordelPeriodeModell(Periode.of(LocalDate.now(), TIDENES_ENDE), Arrays.asList(andel1, andel2));
-
- // Act
- Evaluation evaluation = new SkalOmfordeleFraBrukersAndelTilFLEllerSN().evaluate(new FordelModell(periode));
-
- // Assert
- assertThat(evaluation.result()).isEqualTo(Resultat.JA);
- }
-
- @Test
- void skal_omfordele_fra_brukers_andel_med_sn() {
- // Arrange
- var andelBA = FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.BA)
- .medForeslåttPrÅr(BigDecimal.valueOf(200_000))
- .medInntektskategori(Inntektskategori.ARBEIDSTAKER_UTEN_FERIEPENGER)
- .medAndelNr(1L)
- .build();
- var andelSN = FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.SN)
- .medInntektskategori(Inntektskategori.UDEFINERT)
- .medAndelNr(2L)
- .build();
- var periode = new FordelPeriodeModell(Periode.of(LocalDate.now(), TIDENES_ENDE), Arrays.asList(andelBA, andelSN));
-
- // Act
- Evaluation evaluation = new SkalOmfordeleFraBrukersAndelTilFLEllerSN().evaluate(new FordelModell(periode));
-
- // Assert
- assertThat(evaluation.result()).isEqualTo(Resultat.JA);
- }
-
- @Test
- void skal_omfordele_fra_brukers_andel_med_fl_og_sn() {
- // Arrange
- var andelBA = FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.BA)
- .medForeslåttPrÅr(BigDecimal.valueOf(200_000))
- .medInntektskategori(Inntektskategori.ARBEIDSTAKER_UTEN_FERIEPENGER)
- .medAndelNr(1L)
- .build();
- var andelFL = FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.FL)
- .medInntektskategori(Inntektskategori.UDEFINERT)
- .medArbeidsforhold(Arbeidsforhold.frilansArbeidsforhold())
- .medAndelNr(2L)
- .build();
- var andelSN = FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.SN)
- .medInntektskategori(Inntektskategori.UDEFINERT)
- .medAndelNr(3L)
- .build();
- var periode = new FordelPeriodeModell(Periode.of(LocalDate.now(), TIDENES_ENDE), Arrays.asList(andelBA, andelSN, andelFL));
-
- // Act
- Evaluation evaluation = new SkalOmfordeleFraBrukersAndelTilFLEllerSN().evaluate(new FordelModell(periode));
-
- // Assert
- assertThat(evaluation.result()).isEqualTo(Resultat.JA);
- }
-
-
- @Test
- void skal_ikkje_omfordele_fra_brukers_andel_med_kun_arbeidstaker() {
- // Arrange
- var andelBA = FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.BA)
- .medForeslåttPrÅr(BigDecimal.valueOf(200_000))
- .medInntektskategori(Inntektskategori.ARBEIDSTAKER_UTEN_FERIEPENGER)
- .medAndelNr(1L)
- .build();
- var andelAT = FordelAndelModell.builder()
- .medAktivitetStatus(AktivitetStatus.AT)
- .medInntektskategori(Inntektskategori.UDEFINERT)
- .medArbeidsforhold(Arbeidsforhold.builder()
- .medAktivitet(Aktivitet.ARBEIDSTAKERINNTEKT)
- .medOrgnr("123423874")
- .build())
- .medAndelNr(2L)
- .build();
- var periode = new FordelPeriodeModell(Periode.of(LocalDate.now(), TIDENES_ENDE), Arrays.asList(andelBA, andelAT));
-
- // Act
- Evaluation evaluation = new SkalOmfordeleFraBrukersAndelTilFLEllerSN().evaluate(new FordelModell(periode));
-
- // Assert
- assertThat(evaluation.result()).isEqualTo(Resultat.NEI);
- }
-
-
-}
\ No newline at end of file
diff --git "a/src/test/java/no/nav/folketrygdloven/beregningsgrunnlag/ytelse/svp/RegelFullf\303\270reBeregningsgrunnlagTest.java" "b/src/test/java/no/nav/folketrygdloven/beregningsgrunnlag/ytelse/svp/RegelFullf\303\270reBeregningsgrunnlagTest.java"
index 37eddf46..b1dd9eba 100644
--- "a/src/test/java/no/nav/folketrygdloven/beregningsgrunnlag/ytelse/svp/RegelFullf\303\270reBeregningsgrunnlagTest.java"
+++ "b/src/test/java/no/nav/folketrygdloven/beregningsgrunnlag/ytelse/svp/RegelFullf\303\270reBeregningsgrunnlagTest.java"
@@ -27,757 +27,802 @@
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.grunnlag.inntekt.Arbeidsforhold;
class RegelFullføreBeregningsgrunnlagTest {
- public static final String ORGNR1 = "910";
- private static final String ORGNR2 = "974760673";
- private static final String ORGNR3 = "976967631";
- private static final String ARB_ID_1 = "arbeidsforholdId_1";
- private static final String ARB_ID_2 = "arbeidsforholdId_2";
- private static final String ARB_ID_3 = "arbeidsforholdId_3";
- private static final BigDecimal GRUNNBELØP = BigDecimal.valueOf(100_000);
-
- private static BeregningsgrunnlagPeriode PERIODE = BeregningsgrunnlagPeriode.builder()
- .medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
- .build();
-
-
-
- @BeforeEach
- void setup() {
- PERIODE = BeregningsgrunnlagPeriode.builder()
- .medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
- .build();
- Beregningsgrunnlag.builder()
- .medBeregningsgrunnlagPeriode(PERIODE)
- .medGrunnbeløp(GRUNNBELØP);
- }
-
- @Test
- void to_arbeidsforhold_hel_og_halv_utbetaling_kun_penger_til_refusjon() {
- //Arrange
- double bruttoEn = 624_000;
- double refusjonEn = 600_000;
- var utbetalingsgradEn = 50;
-
- double bruttoTo = 576_000;
- double refusjonTo = 480_000;
- var utbetalingsgradTo = 100;
-
- BeregningsgrunnlagPeriode periode = BeregningsgrunnlagPeriode.builder()
- .medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
- .build();
-
- var grunnbeløp = BigDecimal.valueOf(99_858L);
- Beregningsgrunnlag.builder()
- .medBeregningsgrunnlagPeriode(periode)
- .medGrunnbeløp(grunnbeløp);
-
- leggTilArbeidsforhold(periode, 1L, ORGNR1, bruttoEn, refusjonEn, utbetalingsgradEn);
- leggTilArbeidsforhold(periode, 2L, ORGNR2, bruttoTo, refusjonTo, utbetalingsgradTo);
-
- //Act
- kjørRegelFinnGrenseverdi(periode);
- kjørRegelFullførBeregningsgrunnlag(periode);
-
- assertThat(periode.getGrenseverdi()).isEqualByComparingTo(BigDecimal.valueOf(443369.52));
- List arbeidsforhold = periode.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
-
- verifiserArbfor(arbeidsforhold, ORGNR1, 0, 599);
- verifiserArbfor(arbeidsforhold, ORGNR2, 0, 1106);
- }
-
- @Test
- void to_arbeidsforhold_hel_og_halv_utbetaling_penger_til_bruker_og_refusjon() {
- //Arrange
- double bruttoEn = 624_000;
- double refusjonEn = 300_000;
-
- double bruttoTo = 576_000;
- double refusjonTo = 200_000;
-
- BeregningsgrunnlagPeriode periode = BeregningsgrunnlagPeriode.builder()
- .medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
- .build();
-
- Beregningsgrunnlag.builder()
- .medBeregningsgrunnlagPeriode(periode)
- .medGrunnbeløp(BigDecimal.valueOf(99_858L));
-
- leggTilArbeidsforhold(periode, 1L, ORGNR1, bruttoEn, refusjonEn, 50);
- leggTilArbeidsforhold(periode, 2L, ORGNR2, bruttoTo, refusjonTo, 100);
-
- //Act
- kjørRegelFinnGrenseverdi(periode);
- kjørRegelFullførBeregningsgrunnlag(periode);
-
- assertThat(periode.getGrenseverdi()).isEqualByComparingTo(BigDecimal.valueOf(443369.52));
- List arbeidsforhold = periode.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
-
- verifiserArbfor(arbeidsforhold, ORGNR1, 22, 577);
- verifiserArbfor(arbeidsforhold, ORGNR2, 337, 769);
- }
-
- @Test
- void tre_arbeidsforhold_halv_og_halv_og_ingen_utbetaling_penger_til_bruker_og_refusjon() {
- //Arrange
- double bruttoEn = 600_000;
- double refusjonEn = 560_000.04;
-
- double bruttoTo = 750_000;
- double refusjonTo = 333_333.36;
-
- double bruttoTre = 250_000;
- double refusjonTre = 0;
-
- BeregningsgrunnlagPeriode periode = BeregningsgrunnlagPeriode.builder()
- .medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
- .build();
-
- Beregningsgrunnlag.builder()
- .medBeregningsgrunnlagPeriode(periode)
- .medGrunnbeløp(BigDecimal.valueOf(99_858L));
-
- leggTilArbeidsforhold(periode, 1L, ORGNR1, bruttoEn, refusjonEn, 100);
- leggTilArbeidsforhold(periode, 2L, ORGNR2, bruttoTo, refusjonTo, 60);
- leggTilArbeidsforhold(periode, 3L, ORGNR3, bruttoTre, refusjonTre, 0);
-
- //Act
- kjørRegelFinnGrenseverdi(periode);
- kjørRegelFullførBeregningsgrunnlag(periode);
- assertThat(periode.getGrenseverdi()).isEqualByComparingTo(BigDecimal.valueOf(393190.875));
- List arbeidsforhold = periode.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
-
- verifiserArbfor(arbeidsforhold, ORGNR1, 0, 864);
- verifiserArbfor(arbeidsforhold, ORGNR2, 0, 648);
- verifiserArbfor(arbeidsforhold, ORGNR3, 0, 0);
- }
-
- @Test
- void skal_teste_et_arbeidsforhold_med_refusjon_over_6G() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 612_000, 612_000, 100);
-
- // Act
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertPeriode(612_000, PERIODE.getGrenseverdi(), PERIODE.getGrenseverdi());
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, PERIODE.getGrenseverdi(), PERIODE.getGrenseverdi());
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_to_arbeidsforhold_beregningsgrunnlag_under_6G_full_refusjon_gradert() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 200_000, 200_000, 100);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 300_000, 300_000, 50);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertPeriode(500_000, 350_000, 350_000);
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(200_000), BigDecimal.valueOf(200_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(150_000), BigDecimal.valueOf(150_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void næring_med_beregningsgrunnlag_under_6G() {
- // Arrange
- leggTilNæring(300_000, 100, 1L);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(300_000, 300_000, 300_000);
- assertAndel(BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void næring_med_beregningsgrunnlag_under_6G_ikke_søkt_ytelse() {
- // Arrange
- leggTilNæring(300_000, 0, 1L);
-
- // Act
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(300_000, 0, 0);
- assertAndel(BigDecimal.ZERO, BigDecimal.ZERO);
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void næring_med_beregningsgrunnlag_under_6G_delvis_søkt_ytelse() {
- // Arrange
- leggTilNæring(300_000, 50, 1L);
-
- // Act
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(300_000, 150_000, 150_000);
- assertAndel(BigDecimal.valueOf(150_000), BigDecimal.valueOf(150_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void næring_med_beregningsgrunnlag_over_6G_delvis_søkt_ytelse() {
- // Arrange
- leggTilNæring(800_000, 50, 1L);
-
- // Act
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- //assertPeriode(800_000, 299_574, 299_574);
- assertAndel(BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_to_arbeidsforhold_beregningsgrunnlag_over_6G_refusjon_under_6G_gradert() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 800_000, 200_000, 100);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 200_000, 200_000, 50);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertPeriode(1_000_000, 540_000, 540_000);
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(240_000), BigDecimal.valueOf(200_000), BigDecimal.valueOf(440_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.valueOf(0), BigDecimal.valueOf(100_000), BigDecimal.valueOf(100_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_to_arbeidsforhold_med_refusjon_over_6G() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 600_000, 560_000, 100);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 750_000, 200_000, 100);
- leggTilArbeidsforhold(PERIODE, 3L, ORGNR3, ARB_ID_3, 250_000, 0, 0);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertPeriode(1_600_000, 506_250, 506_250);
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(306_250), null);
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(200_000), null);
- assertArbeidsforhold(arbeidsforhold, ORGNR3, BigDecimal.ZERO, BigDecimal.ZERO, null);
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_to_arbeidsforhold_med_refusjon_under_6G() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 600_000, 150_000, 100);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 750_000, 200_000, 100);
- leggTilArbeidsforhold(PERIODE, 3L, ORGNR3, ARB_ID_3, 250_000, 0, 0);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertPeriode(1_600_000, 506_250, 506_250);
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(75_000), BigDecimal.valueOf(150_000), BigDecimal.valueOf(225_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.valueOf(81_250), BigDecimal.valueOf(200_000), BigDecimal.valueOf(281_250));
- assertArbeidsforhold(arbeidsforhold, ORGNR3, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_to_arbeidsforhold_med_refusjon_og_inntekt_under_6G() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 150_000, 100_000, 100);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 200_000, 200_000, 100);
- leggTilArbeidsforhold(PERIODE, 3L, ORGNR3, ARB_ID_3, 100_000, 0, 0);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertPeriode(450_000, 350_000, 350_000);
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(50_000), BigDecimal.valueOf(100_000), BigDecimal.valueOf(150_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(200_000), BigDecimal.valueOf(200_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR3, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_to_arbeidsforhold_med_refusjon_lik_6G_og_inntekt_over_6G_gradert() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 600_000, 600_000, 100);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 600_000, 0, 50);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertPeriode(1_200_000, 450_000, 450_000);
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(450_000), BigDecimal.valueOf(450_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_to_arbeidsforhold_med_refusjon_lik_6G_for_begge_og_inntekt_over_6G_gradert() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 600_000, 600_000, 100);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 600_000, 600_000, 50);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertPeriode(1_200_000, 450_000, 450_000);
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(150_000), BigDecimal.valueOf(150_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_to_arbeidsforhold_med_refusjon_lik_6G_og_1G_og_inntekt_over_6G_gradert() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 600_000, 600_000, 100);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 600_000, 100_000, 50);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertPeriode(1_200_000, 450_000, 450_000);
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(400_000), BigDecimal.valueOf(400_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(50_000), BigDecimal.valueOf(50_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_arbeidsforhold_med_refusjon_uten_tilrettelegging_og_tilrettelegging_uten_refusjon() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 300_000, 150_000, 100);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 210_000, 210_000, 0);
- leggTilArbeidsforhold(PERIODE, 3L, ORGNR3, ARB_ID_3, 240_000, 0, 100);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertPeriode(750000, 432_000, 432_000);
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(90_000), BigDecimal.valueOf(150_000), BigDecimal.valueOf(240_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
- assertArbeidsforhold(arbeidsforhold, ORGNR3, BigDecimal.valueOf(192_000), BigDecimal.ZERO, BigDecimal.valueOf(192_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_arbeidstaker_med_delvis_søkt_ytelse() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 300_000, 0, 45);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertPeriode(300_000, 135_000, 135_000);
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(135_000), BigDecimal.ZERO, BigDecimal.valueOf(135_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_frilans_med_beregningsgrunnlag_under_6G() {
- // Arrange
- leggTilFrilans(300_000, 100, 1L);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(300_000, 300_000, 300_000);
- assertFrilans(BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000), 1154L);
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_frilans_med_beregningsgrunnlag_under_6G_delvis_søkt_ytelse() {
- // Arrange
- leggTilFrilans(300_000, 50, 1L);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(300_000, 150_000, 150_000);
- assertFrilans(BigDecimal.valueOf(150_000), BigDecimal.valueOf(150_000), 577L);
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_frilans_med_beregningsgrunnlag_under_6G_ikke_søkt_ytelse() {
- // Arrange
- leggTilFrilans(300_000, 0, 1L);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(300_000, 0, 0);
- assertFrilans(BigDecimal.ZERO, BigDecimal.ZERO, 0L);
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_frilans_og_arbeid_med_beregningsgrunnlag_under_6G_søkt_ytelse_for_alle() {
- // Arrange
- leggTilFrilans(200_000, 100, 1L);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 200_000, 0, 100);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(400_000, 400_000, 400_000);
- assertFrilans(BigDecimal.valueOf(200_000), BigDecimal.valueOf(200_000), null);
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(200_000), BigDecimal.ZERO, BigDecimal.valueOf(200_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_frilans_og_arbeid_med_beregningsgrunnlag_over_6G_for_arbeid_søkt_ytelse_for_alle() {
- // Arrange
- leggTilFrilans(200_000, 100, 1L);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 800_000, 0, 100);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(1_000_000, 600_000, 600_000);
- assertFrilans(BigDecimal.ZERO, BigDecimal.ZERO, 0L);
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertArbeidsforhold(arbeidsforhold, ORGNR1, PERIODE.getGrenseverdi(), BigDecimal.ZERO, PERIODE.getGrenseverdi());
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_frilans_og_arbeid_med_beregningsgrunnlag_over_6G_for_arbeid_søkt_ytelse_for_frilans() {
- // Arrange
- leggTilFrilans(200_000, 100, 1L);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 800_000, 0, 0);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(1_000_000, 0, 0);
- assertFrilans(BigDecimal.ZERO, BigDecimal.ZERO, 0L);
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_frilans_og_arbeid_med_beregningsgrunnlag_over_6G_til_sammen_søkt_delvis_ytelse_for_frilans() {
- // Arrange
- leggTilFrilans(500_000, 50, 1L);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 500_000, 0, 0);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(1_000_000, 50_000, 50_000);
- assertFrilans(BigDecimal.valueOf(50_000), BigDecimal.valueOf(50_000), 192L);
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_frilans_og_to_arbeid_med_beregningsgrunnlag_over_6G_til_sammen_søkt_ytelse_for_alle_med_refusjonkrav_som_overstiger_total_avkortet_for_arbeid() {
- // Arrange
- leggTilFrilans(500_000, 100, 1L);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 500_000, 500_000, 100);
- leggTilArbeidsforhold(PERIODE, 3L, ORGNR2, ARB_ID_2, 500_000, 200_000, 100);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(1_500_000, 600_000, 600_000);
- assertFrilans(BigDecimal.ZERO, BigDecimal.ZERO, 0L);
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(400_000), BigDecimal.valueOf(400_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(200_000), BigDecimal.valueOf(200_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_frilans_og_to_arbeid_med_beregningsgrunnlag_over_6G_til_sammen_søkt_ytelse_for_alle_med_refusjonkrav_som_overstiger_total_avkortet_for_arbeid_med_fordeling_av_refusjonskrav() {
- // Arrange
- leggTilFrilans(500_000, 100, 1L);
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 500_000, 500_000, 100);
- leggTilArbeidsforhold(PERIODE, 3L, ORGNR2, ARB_ID_2, 500_000, 300_000, 100);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(1_500_000, 600_000, 600_000);
- assertFrilans(BigDecimal.ZERO, BigDecimal.ZERO, 0L);
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_to_arbeidsforhold_hos_en_arbeidsgiver_med_beregningsgrunnlag_over_6G() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 400_000, 300_000, 100);
- leggTilArbeidsforhold(PERIODE, 3L, ORGNR2, ARB_ID_2, 300_000, 300_000, 100);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(700_000, 600_000, 600_000);
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- @Test
- void skal_teste_to_arbeidsforhold_hos_en_arbeidsgiver_med_beregningsgrunnlag_over_6G_ikke_full_utbetaling() {
- // Arrange
- leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 624_000, 300_000, 50);
- leggTilArbeidsforhold(PERIODE, 3L, ORGNR2, ARB_ID_2, 576_000, 200_000, 100);
-
- // Assert
- var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
- var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
-
- // Assert
- assertPeriode(1_200_000, 444_000, 444_000);
- List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
- assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(6_000), BigDecimal.valueOf(150_000), BigDecimal.valueOf(156_000));
- assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.valueOf(88_000), BigDecimal.valueOf(200_000), BigDecimal.valueOf(288_000));
- assertThat(grenseverdiRegelesultat).isNotNull();
- assertThat(regelResultat).isNotNull();
- }
-
- private void assertPeriode(int brutto, int avkortet, int redusert) {
- assertPeriode(BigDecimal.valueOf(brutto), BigDecimal.valueOf(avkortet), BigDecimal.valueOf(redusert));
- }
-
- private void assertPeriode(int brutto, BigDecimal avkortet, BigDecimal redusert) {
- assertPeriode(BigDecimal.valueOf(brutto), avkortet, redusert);
- }
-
- private void assertPeriode(BigDecimal brutto, BigDecimal avkortet, BigDecimal redusert) {
- Assertions.assertThat(PERIODE.getBruttoPrÅr()).isEqualByComparingTo(brutto);
- Assertions.assertThat(PERIODE.getAvkortetPrÅr()).isEqualByComparingTo(avkortet);
- Assertions.assertThat(PERIODE.getRedusertPrÅr()).isEqualByComparingTo(redusert);
- }
-
- private void assertAndel(BigDecimal bruker, BigDecimal avkortet) {
- var andel = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.SN);
- BigDecimal total = bruker.add(BigDecimal.ZERO);
- Assertions.assertThat(andel.getAvkortetPrÅr()).isEqualByComparingTo(Objects.requireNonNullElse(avkortet, total));
- Assertions.assertThat(andel.getRedusertPrÅr()).isEqualByComparingTo(total);
- }
-
- private void assertFrilans(BigDecimal bruker, BigDecimal avkortet, Long dagsats) {
- var andel = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);
- BigDecimal total = bruker.add(BigDecimal.ZERO);
- Optional frilansOpt = andel.getArbeidsforhold().stream().filter(BeregningsgrunnlagPrArbeidsforhold::erFrilanser).findFirst();
- assertThat(frilansOpt).isPresent();
- BeregningsgrunnlagPrArbeidsforhold frilansAndel = frilansOpt.get();
- assertThat(frilansAndel.getAvkortetPrÅr()).isEqualByComparingTo(Objects.requireNonNullElse(avkortet, total));
- assertThat(frilansAndel.getRedusertPrÅr()).isEqualByComparingTo(total);
- if (dagsats != null) {
- assertThat(frilansAndel.getDagsats()).isEqualByComparingTo(dagsats);
- }
- }
-
- private void assertArbeidsforhold(List arbeidsforhold, String orgnr, BigDecimal bruker, BigDecimal refusjon, BigDecimal avkortet) {
- Function calcDagsats = a -> a.divide(BigDecimal.valueOf(260), 0, RoundingMode.HALF_UP).longValue();
- Optional arbforOpt = arbeidsforhold.stream().filter(a -> Objects.equals(a.getArbeidsgiverId(),orgnr)).findFirst();
- BigDecimal total = bruker.add(refusjon);
-
- assertThat(arbforOpt).isPresent();
- BeregningsgrunnlagPrArbeidsforhold arbfor = arbforOpt.get();
-
- Assertions.assertThat(arbfor.getAvkortetPrÅr()).isEqualByComparingTo(Objects.requireNonNullElse(avkortet, total));
- assertThat(arbfor.getRedusertPrÅr()).isEqualByComparingTo(total);
-
- Long dagsatsRefusjon = calcDagsats.apply(refusjon);
- Long dagsatsBruker = calcDagsats.apply(bruker);
- assertThat(arbfor.getDagsatsArbeidsgiver()).isEqualTo(dagsatsRefusjon);
- assertThat(arbfor.getDagsatsBruker()).isEqualTo(dagsatsBruker);
- assertThat(arbfor.getDagsats()).isEqualTo(dagsatsBruker + dagsatsRefusjon);
- }
-
- private void verifiserArbfor(List arbeidsforhold, String orgnr, int forventetDagsatsBrukersAndel, int forventetDagsatsRefusjon) {
- Optional arbforOpt = arbeidsforhold.stream().filter(a -> a.getArbeidsgiverId().equals(orgnr)).findFirst();
- assertThat(arbforOpt).isPresent();
- BeregningsgrunnlagPrArbeidsforhold arbfor = arbforOpt.get();
- assertThat(arbfor.getDagsatsArbeidsgiver()).isEqualTo(forventetDagsatsRefusjon);
- assertThat(arbfor.getDagsatsBruker()).isEqualTo(forventetDagsatsBrukersAndel);
- assertThat(arbfor.getDagsats()).isEqualTo(forventetDagsatsBrukersAndel + forventetDagsatsRefusjon);
- }
-
- private void leggTilNæring(int brutto, int utbetaingsgrad, Long andelsnr) {
- var andel = BeregningsgrunnlagPrStatus
- .builder()
- .medAktivitetStatus(AktivitetStatus.SN)
- .medBruttoPrÅr(BigDecimal.valueOf(brutto))
- .medUtbetalingsprosent(BigDecimal.valueOf(utbetaingsgrad))
- .medAndelNr(andelsnr)
- .build();
- andel.setErSøktYtelseFor( utbetaingsgrad != 0);
- BeregningsgrunnlagPeriode.oppdater(PERIODE)
- .medBeregningsgrunnlagPrStatus(andel);
- }
-
- private void leggTilArbeidsforhold(BeregningsgrunnlagPeriode periode,
- long andelsnr,
- String orgnr,
- double beregnetPrÅr,
- double refusjonPrÅr,
- double utbetalingsgrad) {
- leggTilArbeidsforhold(periode, andelsnr, orgnr, null, beregnetPrÅr, refusjonPrÅr, utbetalingsgrad);
- }
-
- private void leggTilFrilans(int brutto, int utbetaingsgrad, Long andelsnr) {
- Arbeidsforhold arbeidsforhold = Arbeidsforhold.frilansArbeidsforhold();
- BeregningsgrunnlagPrStatus atfl = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);
-
- if (atfl == null) {
- BeregningsgrunnlagPeriode.oppdater(PERIODE)
- .medBeregningsgrunnlagPrStatus(BeregningsgrunnlagPrStatus
- .builder()
- .medAktivitetStatus(AktivitetStatus.ATFL)
- .medArbeidsforhold(lagBeregningsgrunnlagPrArbeidsforhold(andelsnr, brutto, 0, utbetaingsgrad, arbeidsforhold))
- .build());
- } else {
- BeregningsgrunnlagPrStatus.builder(atfl)
- .medArbeidsforhold(lagBeregningsgrunnlagPrArbeidsforhold(andelsnr, brutto, 0, utbetaingsgrad, arbeidsforhold))
- .build();
- } }
-
- private void leggTilArbeidsforhold(BeregningsgrunnlagPeriode periode,
- long andelsnr,
- String orgnr,
- String arbeidsforholdId,
- double beregnetPrÅr,
- double refusjonPrÅr,
- double utbetalingsgrad) {
- Arbeidsforhold arbeidsforhold = Arbeidsforhold.nyttArbeidsforholdHosVirksomhet(orgnr, arbeidsforholdId);
- BeregningsgrunnlagPrStatus atfl = periode.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);
-
- if (atfl == null) {
- BeregningsgrunnlagPeriode.oppdater(periode)
- .medBeregningsgrunnlagPrStatus(BeregningsgrunnlagPrStatus
- .builder()
- .medAktivitetStatus(AktivitetStatus.ATFL)
- .medArbeidsforhold(lagBeregningsgrunnlagPrArbeidsforhold(andelsnr, beregnetPrÅr, refusjonPrÅr, utbetalingsgrad, arbeidsforhold))
- .build());
- } else {
- BeregningsgrunnlagPrStatus.builder(atfl)
- .medArbeidsforhold(lagBeregningsgrunnlagPrArbeidsforhold(andelsnr, beregnetPrÅr, refusjonPrÅr, utbetalingsgrad, arbeidsforhold))
- .build();
- }
- }
-
- private BeregningsgrunnlagPrArbeidsforhold lagBeregningsgrunnlagPrArbeidsforhold(long andelsnr,
- double beregnetPrÅr,
- double refusjonskrav,
- double utbetalingsgrad,
- Arbeidsforhold arbeidsforhold) {
- BeregningsgrunnlagPrArbeidsforhold arb = BeregningsgrunnlagPrArbeidsforhold.builder()
- .medAndelNr(andelsnr)
- .medArbeidsforhold(arbeidsforhold)
- .medBruttoPrÅr(BigDecimal.valueOf(beregnetPrÅr))
- .medRefusjonPrÅr(BigDecimal.valueOf(refusjonskrav))
- .medUtbetalingsprosent(BigDecimal.valueOf(utbetalingsgrad))
- .build();
- arb.setErSøktYtelseFor(utbetalingsgrad > 0);
- return arb;
- }
-
-
- private RegelResultat kjørRegelFinnGrenseverdi(BeregningsgrunnlagPeriode grunnlag) {
- return new RegelFinnGrenseverdiMedFordeling(grunnlag).evaluerRegel(grunnlag);
- }
-
- private RegelResultat kjørRegelFullførBeregningsgrunnlag(BeregningsgrunnlagPeriode grunnlag) {
- return new RegelFullføreBeregningsgrunnlag(grunnlag).evaluerRegel(grunnlag);
- }
+ public static final String ORGNR1 = "910";
+ private static final String ORGNR2 = "974760673";
+ private static final String ORGNR3 = "976967631";
+ private static final String ARB_ID_1 = "arbeidsforholdId_1";
+ private static final String ARB_ID_2 = "arbeidsforholdId_2";
+ private static final String ARB_ID_3 = "arbeidsforholdId_3";
+ private static final BigDecimal GRUNNBELØP = BigDecimal.valueOf(100_000);
+
+ private static BeregningsgrunnlagPeriode PERIODE = BeregningsgrunnlagPeriode.builder()
+ .medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
+ .build();
+
+
+ @BeforeEach
+ void setup() {
+ PERIODE = BeregningsgrunnlagPeriode.builder()
+ .medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
+ .build();
+ Beregningsgrunnlag.builder()
+ .medBeregningsgrunnlagPeriode(PERIODE)
+ .medGrunnbeløp(GRUNNBELØP);
+ }
+
+ @Test
+ void to_arbeidsforhold_hel_og_halv_utbetaling_kun_penger_til_refusjon() {
+ //Arrange
+ double bruttoEn = 624_000;
+ double refusjonEn = 600_000;
+ var utbetalingsgradEn = 50;
+
+ double bruttoTo = 576_000;
+ double refusjonTo = 480_000;
+ var utbetalingsgradTo = 100;
+
+ BeregningsgrunnlagPeriode periode = BeregningsgrunnlagPeriode.builder()
+ .medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
+ .build();
+
+ var grunnbeløp = BigDecimal.valueOf(99_858L);
+ Beregningsgrunnlag.builder()
+ .medBeregningsgrunnlagPeriode(periode)
+ .medGrunnbeløp(grunnbeløp);
+
+ leggTilArbeidsforhold(periode, 1L, ORGNR1, bruttoEn, refusjonEn, utbetalingsgradEn);
+ leggTilArbeidsforhold(periode, 2L, ORGNR2, bruttoTo, refusjonTo, utbetalingsgradTo);
+
+ //Act
+ kjørRegelFinnGrenseverdi(periode);
+ kjørRegelFullførBeregningsgrunnlag(periode);
+
+ assertThat(periode.getGrenseverdi()).isEqualByComparingTo(BigDecimal.valueOf(443369.52));
+ List arbeidsforhold = periode.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+
+ verifiserArbfor(arbeidsforhold, ORGNR1, 0, 599);
+ verifiserArbfor(arbeidsforhold, ORGNR2, 0, 1106);
+ }
+
+ @Test
+ void to_arbeidsforhold_hel_og_halv_utbetaling_penger_til_bruker_og_refusjon() {
+ //Arrange
+ double bruttoEn = 624_000;
+ double refusjonEn = 300_000;
+
+ double bruttoTo = 576_000;
+ double refusjonTo = 200_000;
+
+ BeregningsgrunnlagPeriode periode = BeregningsgrunnlagPeriode.builder()
+ .medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
+ .build();
+
+ Beregningsgrunnlag.builder()
+ .medBeregningsgrunnlagPeriode(periode)
+ .medGrunnbeløp(BigDecimal.valueOf(99_858L));
+
+ leggTilArbeidsforhold(periode, 1L, ORGNR1, bruttoEn, refusjonEn, 50);
+ leggTilArbeidsforhold(periode, 2L, ORGNR2, bruttoTo, refusjonTo, 100);
+
+ //Act
+ kjørRegelFinnGrenseverdi(periode);
+ kjørRegelFullførBeregningsgrunnlag(periode);
+
+ assertThat(periode.getGrenseverdi()).isEqualByComparingTo(BigDecimal.valueOf(443369.52));
+ List arbeidsforhold = periode.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+
+ verifiserArbfor(arbeidsforhold, ORGNR1, 22, 577);
+ verifiserArbfor(arbeidsforhold, ORGNR2, 337, 769);
+ }
+
+ @Test
+ void tre_arbeidsforhold_halv_og_halv_og_ingen_utbetaling_penger_til_bruker_og_refusjon() {
+ //Arrange
+ double bruttoEn = 600_000;
+ double refusjonEn = 560_000.04;
+
+ double bruttoTo = 750_000;
+ double refusjonTo = 333_333.36;
+
+ double bruttoTre = 250_000;
+ double refusjonTre = 0;
+
+ BeregningsgrunnlagPeriode periode = BeregningsgrunnlagPeriode.builder()
+ .medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
+ .build();
+
+ Beregningsgrunnlag.builder()
+ .medBeregningsgrunnlagPeriode(periode)
+ .medGrunnbeløp(BigDecimal.valueOf(99_858L));
+
+ leggTilArbeidsforhold(periode, 1L, ORGNR1, bruttoEn, refusjonEn, 100);
+ leggTilArbeidsforhold(periode, 2L, ORGNR2, bruttoTo, refusjonTo, 60);
+ leggTilArbeidsforhold(periode, 3L, ORGNR3, bruttoTre, refusjonTre, 0);
+
+ //Act
+ kjørRegelFinnGrenseverdi(periode);
+ kjørRegelFullførBeregningsgrunnlag(periode);
+ assertThat(periode.getGrenseverdi()).isEqualByComparingTo(BigDecimal.valueOf(393190.875));
+ List arbeidsforhold = periode.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+
+ verifiserArbfor(arbeidsforhold, ORGNR1, 0, 864);
+ verifiserArbfor(arbeidsforhold, ORGNR2, 0, 648);
+ verifiserArbfor(arbeidsforhold, ORGNR3, 0, 0);
+ }
+
+ @Test
+ void skal_teste_et_arbeidsforhold_med_refusjon_over_6G() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 612_000, 612_000, 100);
+
+ // Act
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertPeriode(612_000, PERIODE.getGrenseverdi(), PERIODE.getGrenseverdi());
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, PERIODE.getGrenseverdi(), PERIODE.getGrenseverdi());
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_to_arbeidsforhold_beregningsgrunnlag_under_6G_full_refusjon_gradert() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 200_000, 200_000, 100);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 300_000, 300_000, 50);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertPeriode(500_000, 350_000, 350_000);
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(200_000), BigDecimal.valueOf(200_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(150_000), BigDecimal.valueOf(150_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void næring_med_beregningsgrunnlag_under_6G() {
+ // Arrange
+ leggTilNæring(300_000, 100, 1L);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(300_000, 300_000, 300_000);
+ assertAndel(BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void næring_med_beregningsgrunnlag_under_6G_ikke_søkt_ytelse() {
+ // Arrange
+ leggTilNæring(300_000, 0, 1L);
+
+ // Act
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(300_000, 0, 0);
+ assertAndel(BigDecimal.ZERO, BigDecimal.ZERO);
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void næring_med_beregningsgrunnlag_under_6G_delvis_søkt_ytelse() {
+ // Arrange
+ leggTilNæring(300_000, 50, 1L);
+
+ // Act
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(300_000, 150_000, 150_000);
+ assertAndel(BigDecimal.valueOf(150_000), BigDecimal.valueOf(150_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void brukers_andel_med_tilkommet_næring_uten_fordeling() {
+ // Arrange
+ var andel = BeregningsgrunnlagPrStatus
+ .builder()
+ .medAktivitetStatus(AktivitetStatus.BA)
+ .medBruttoPrÅr(BigDecimal.valueOf(300_000))
+ .medUtbetalingsprosent(BigDecimal.valueOf(100))
+ .medAndelNr(1L)
+ .build();
+ andel.setErSøktYtelseFor(true);
+
+ BeregningsgrunnlagPeriode.oppdater(PERIODE)
+ .medBeregningsgrunnlagPrStatus(andel);
+
+ var snAndel = BeregningsgrunnlagPrStatus
+ .builder()
+ .medAktivitetStatus(AktivitetStatus.SN)
+ .medBruttoPrÅr(null)
+ .medUtbetalingsprosent(BigDecimal.valueOf(50))
+ .medAndelNr(2L)
+ .build();
+ snAndel.setErSøktYtelseFor(true);
+ BeregningsgrunnlagPeriode.oppdater(PERIODE)
+ .medBeregningsgrunnlagPrStatus(snAndel);
+
+
+ // Act
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(300_000, 300_000, 300_000);
+
+ Assertions.assertThat(snAndel.getAvkortetPrÅr().compareTo(BigDecimal.ZERO)).isEqualTo(0);
+ Assertions.assertThat(snAndel.getRedusertPrÅr().compareTo(BigDecimal.ZERO)).isEqualTo(0);
+
+ Assertions.assertThat(andel.getAvkortetPrÅr().compareTo(BigDecimal.valueOf(300000))).isEqualTo(0);
+ Assertions.assertThat(andel.getRedusertPrÅr().compareTo(BigDecimal.valueOf(300000))).isEqualTo(0);
+
+
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void næring_med_beregningsgrunnlag_over_6G_delvis_søkt_ytelse() {
+ // Arrange
+ leggTilNæring(800_000, 50, 1L);
+
+ // Act
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ //assertPeriode(800_000, 299_574, 299_574);
+ assertAndel(BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_to_arbeidsforhold_beregningsgrunnlag_over_6G_refusjon_under_6G_gradert() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 800_000, 200_000, 100);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 200_000, 200_000, 50);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertPeriode(1_000_000, 540_000, 540_000);
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(240_000), BigDecimal.valueOf(200_000), BigDecimal.valueOf(440_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.valueOf(0), BigDecimal.valueOf(100_000), BigDecimal.valueOf(100_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_to_arbeidsforhold_med_refusjon_over_6G() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 600_000, 560_000, 100);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 750_000, 200_000, 100);
+ leggTilArbeidsforhold(PERIODE, 3L, ORGNR3, ARB_ID_3, 250_000, 0, 0);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertPeriode(1_600_000, 506_250, 506_250);
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(306_250), null);
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(200_000), null);
+ assertArbeidsforhold(arbeidsforhold, ORGNR3, BigDecimal.ZERO, BigDecimal.ZERO, null);
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_to_arbeidsforhold_med_refusjon_under_6G() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 600_000, 150_000, 100);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 750_000, 200_000, 100);
+ leggTilArbeidsforhold(PERIODE, 3L, ORGNR3, ARB_ID_3, 250_000, 0, 0);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertPeriode(1_600_000, 506_250, 506_250);
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(75_000), BigDecimal.valueOf(150_000), BigDecimal.valueOf(225_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.valueOf(81_250), BigDecimal.valueOf(200_000), BigDecimal.valueOf(281_250));
+ assertArbeidsforhold(arbeidsforhold, ORGNR3, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_to_arbeidsforhold_med_refusjon_og_inntekt_under_6G() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 150_000, 100_000, 100);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 200_000, 200_000, 100);
+ leggTilArbeidsforhold(PERIODE, 3L, ORGNR3, ARB_ID_3, 100_000, 0, 0);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertPeriode(450_000, 350_000, 350_000);
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(50_000), BigDecimal.valueOf(100_000), BigDecimal.valueOf(150_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(200_000), BigDecimal.valueOf(200_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR3, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_to_arbeidsforhold_med_refusjon_lik_6G_og_inntekt_over_6G_gradert() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 600_000, 600_000, 100);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 600_000, 0, 50);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertPeriode(1_200_000, 450_000, 450_000);
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(450_000), BigDecimal.valueOf(450_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_to_arbeidsforhold_med_refusjon_lik_6G_for_begge_og_inntekt_over_6G_gradert() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 600_000, 600_000, 100);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 600_000, 600_000, 50);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertPeriode(1_200_000, 450_000, 450_000);
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(150_000), BigDecimal.valueOf(150_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_to_arbeidsforhold_med_refusjon_lik_6G_og_1G_og_inntekt_over_6G_gradert() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 600_000, 600_000, 100);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 600_000, 100_000, 50);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertPeriode(1_200_000, 450_000, 450_000);
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(400_000), BigDecimal.valueOf(400_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(50_000), BigDecimal.valueOf(50_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_arbeidsforhold_med_refusjon_uten_tilrettelegging_og_tilrettelegging_uten_refusjon() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 300_000, 150_000, 100);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR2, ARB_ID_2, 210_000, 210_000, 0);
+ leggTilArbeidsforhold(PERIODE, 3L, ORGNR3, ARB_ID_3, 240_000, 0, 100);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertPeriode(750000, 432_000, 432_000);
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(90_000), BigDecimal.valueOf(150_000), BigDecimal.valueOf(240_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
+ assertArbeidsforhold(arbeidsforhold, ORGNR3, BigDecimal.valueOf(192_000), BigDecimal.ZERO, BigDecimal.valueOf(192_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_arbeidstaker_med_delvis_søkt_ytelse() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 1L, ORGNR1, ARB_ID_1, 300_000, 0, 45);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertPeriode(300_000, 135_000, 135_000);
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(135_000), BigDecimal.ZERO, BigDecimal.valueOf(135_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_frilans_med_beregningsgrunnlag_under_6G() {
+ // Arrange
+ leggTilFrilans(300_000, 100, 1L);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(300_000, 300_000, 300_000);
+ assertFrilans(BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000), 1154L);
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_frilans_med_beregningsgrunnlag_under_6G_delvis_søkt_ytelse() {
+ // Arrange
+ leggTilFrilans(300_000, 50, 1L);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(300_000, 150_000, 150_000);
+ assertFrilans(BigDecimal.valueOf(150_000), BigDecimal.valueOf(150_000), 577L);
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_frilans_med_beregningsgrunnlag_under_6G_ikke_søkt_ytelse() {
+ // Arrange
+ leggTilFrilans(300_000, 0, 1L);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(300_000, 0, 0);
+ assertFrilans(BigDecimal.ZERO, BigDecimal.ZERO, 0L);
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_frilans_og_arbeid_med_beregningsgrunnlag_under_6G_søkt_ytelse_for_alle() {
+ // Arrange
+ leggTilFrilans(200_000, 100, 1L);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 200_000, 0, 100);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(400_000, 400_000, 400_000);
+ assertFrilans(BigDecimal.valueOf(200_000), BigDecimal.valueOf(200_000), null);
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(200_000), BigDecimal.ZERO, BigDecimal.valueOf(200_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_frilans_og_arbeid_med_beregningsgrunnlag_over_6G_for_arbeid_søkt_ytelse_for_alle() {
+ // Arrange
+ leggTilFrilans(200_000, 100, 1L);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 800_000, 0, 100);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(1_000_000, 600_000, 600_000);
+ assertFrilans(BigDecimal.ZERO, BigDecimal.ZERO, 0L);
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, PERIODE.getGrenseverdi(), BigDecimal.ZERO, PERIODE.getGrenseverdi());
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_frilans_og_arbeid_med_beregningsgrunnlag_over_6G_for_arbeid_søkt_ytelse_for_frilans() {
+ // Arrange
+ leggTilFrilans(200_000, 100, 1L);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 800_000, 0, 0);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(1_000_000, 0, 0);
+ assertFrilans(BigDecimal.ZERO, BigDecimal.ZERO, 0L);
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_frilans_og_arbeid_med_beregningsgrunnlag_over_6G_til_sammen_søkt_delvis_ytelse_for_frilans() {
+ // Arrange
+ leggTilFrilans(500_000, 50, 1L);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 500_000, 0, 0);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(1_000_000, 50_000, 50_000);
+ assertFrilans(BigDecimal.valueOf(50_000), BigDecimal.valueOf(50_000), 192L);
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_frilans_og_to_arbeid_med_beregningsgrunnlag_over_6G_til_sammen_søkt_ytelse_for_alle_med_refusjonkrav_som_overstiger_total_avkortet_for_arbeid() {
+ // Arrange
+ leggTilFrilans(500_000, 100, 1L);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 500_000, 500_000, 100);
+ leggTilArbeidsforhold(PERIODE, 3L, ORGNR2, ARB_ID_2, 500_000, 200_000, 100);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(1_500_000, 600_000, 600_000);
+ assertFrilans(BigDecimal.ZERO, BigDecimal.ZERO, 0L);
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(400_000), BigDecimal.valueOf(400_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(200_000), BigDecimal.valueOf(200_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_frilans_og_to_arbeid_med_beregningsgrunnlag_over_6G_til_sammen_søkt_ytelse_for_alle_med_refusjonkrav_som_overstiger_total_avkortet_for_arbeid_med_fordeling_av_refusjonskrav() {
+ // Arrange
+ leggTilFrilans(500_000, 100, 1L);
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 500_000, 500_000, 100);
+ leggTilArbeidsforhold(PERIODE, 3L, ORGNR2, ARB_ID_2, 500_000, 300_000, 100);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(1_500_000, 600_000, 600_000);
+ assertFrilans(BigDecimal.ZERO, BigDecimal.ZERO, 0L);
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_to_arbeidsforhold_hos_en_arbeidsgiver_med_beregningsgrunnlag_over_6G() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 400_000, 300_000, 100);
+ leggTilArbeidsforhold(PERIODE, 3L, ORGNR2, ARB_ID_2, 300_000, 300_000, 100);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(700_000, 600_000, 600_000);
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.ZERO, BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.ZERO, BigDecimal.valueOf(300_000), BigDecimal.valueOf(300_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ @Test
+ void skal_teste_to_arbeidsforhold_hos_en_arbeidsgiver_med_beregningsgrunnlag_over_6G_ikke_full_utbetaling() {
+ // Arrange
+ leggTilArbeidsforhold(PERIODE, 2L, ORGNR1, ARB_ID_1, 624_000, 300_000, 50);
+ leggTilArbeidsforhold(PERIODE, 3L, ORGNR2, ARB_ID_2, 576_000, 200_000, 100);
+
+ // Assert
+ var grenseverdiRegelesultat = kjørRegelFinnGrenseverdi(PERIODE);
+ var regelResultat = kjørRegelFullførBeregningsgrunnlag(PERIODE);
+
+ // Assert
+ assertPeriode(1_200_000, 444_000, 444_000);
+ List arbeidsforhold = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL).getArbeidsforhold();
+ assertArbeidsforhold(arbeidsforhold, ORGNR1, BigDecimal.valueOf(6_000), BigDecimal.valueOf(150_000), BigDecimal.valueOf(156_000));
+ assertArbeidsforhold(arbeidsforhold, ORGNR2, BigDecimal.valueOf(88_000), BigDecimal.valueOf(200_000), BigDecimal.valueOf(288_000));
+ assertThat(grenseverdiRegelesultat).isNotNull();
+ assertThat(regelResultat).isNotNull();
+ }
+
+ private void assertPeriode(int brutto, int avkortet, int redusert) {
+ assertPeriode(BigDecimal.valueOf(brutto), BigDecimal.valueOf(avkortet), BigDecimal.valueOf(redusert));
+ }
+
+ private void assertPeriode(int brutto, BigDecimal avkortet, BigDecimal redusert) {
+ assertPeriode(BigDecimal.valueOf(brutto), avkortet, redusert);
+ }
+
+ private void assertPeriode(BigDecimal brutto, BigDecimal avkortet, BigDecimal redusert) {
+ Assertions.assertThat(PERIODE.getBruttoPrÅr()).isEqualByComparingTo(brutto);
+ Assertions.assertThat(PERIODE.getAvkortetPrÅr()).isEqualByComparingTo(avkortet);
+ Assertions.assertThat(PERIODE.getRedusertPrÅr()).isEqualByComparingTo(redusert);
+ }
+
+ private void assertAndel(BigDecimal bruker, BigDecimal avkortet) {
+ var andel = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.SN);
+ BigDecimal total = bruker.add(BigDecimal.ZERO);
+ Assertions.assertThat(andel.getAvkortetPrÅr()).isEqualByComparingTo(Objects.requireNonNullElse(avkortet, total));
+ Assertions.assertThat(andel.getRedusertPrÅr()).isEqualByComparingTo(total);
+ }
+
+ private void assertFrilans(BigDecimal bruker, BigDecimal avkortet, Long dagsats) {
+ var andel = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);
+ BigDecimal total = bruker.add(BigDecimal.ZERO);
+ Optional frilansOpt = andel.getArbeidsforhold().stream().filter(BeregningsgrunnlagPrArbeidsforhold::erFrilanser).findFirst();
+ assertThat(frilansOpt).isPresent();
+ BeregningsgrunnlagPrArbeidsforhold frilansAndel = frilansOpt.get();
+ assertThat(frilansAndel.getAvkortetPrÅr()).isEqualByComparingTo(Objects.requireNonNullElse(avkortet, total));
+ assertThat(frilansAndel.getRedusertPrÅr()).isEqualByComparingTo(total);
+ if (dagsats != null) {
+ assertThat(frilansAndel.getDagsats()).isEqualByComparingTo(dagsats);
+ }
+ }
+
+ private void assertArbeidsforhold(List arbeidsforhold, String orgnr, BigDecimal bruker, BigDecimal refusjon, BigDecimal avkortet) {
+ Function calcDagsats = a -> a.divide(BigDecimal.valueOf(260), 0, RoundingMode.HALF_UP).longValue();
+ Optional arbforOpt = arbeidsforhold.stream().filter(a -> Objects.equals(a.getArbeidsgiverId(), orgnr)).findFirst();
+ BigDecimal total = bruker.add(refusjon);
+
+ assertThat(arbforOpt).isPresent();
+ BeregningsgrunnlagPrArbeidsforhold arbfor = arbforOpt.get();
+
+ Assertions.assertThat(arbfor.getAvkortetPrÅr()).isEqualByComparingTo(Objects.requireNonNullElse(avkortet, total));
+ assertThat(arbfor.getRedusertPrÅr()).isEqualByComparingTo(total);
+
+ Long dagsatsRefusjon = calcDagsats.apply(refusjon);
+ Long dagsatsBruker = calcDagsats.apply(bruker);
+ assertThat(arbfor.getDagsatsArbeidsgiver()).isEqualTo(dagsatsRefusjon);
+ assertThat(arbfor.getDagsatsBruker()).isEqualTo(dagsatsBruker);
+ assertThat(arbfor.getDagsats()).isEqualTo(dagsatsBruker + dagsatsRefusjon);
+ }
+
+ private void verifiserArbfor(List arbeidsforhold, String orgnr, int forventetDagsatsBrukersAndel, int forventetDagsatsRefusjon) {
+ Optional arbforOpt = arbeidsforhold.stream().filter(a -> a.getArbeidsgiverId().equals(orgnr)).findFirst();
+ assertThat(arbforOpt).isPresent();
+ BeregningsgrunnlagPrArbeidsforhold arbfor = arbforOpt.get();
+ assertThat(arbfor.getDagsatsArbeidsgiver()).isEqualTo(forventetDagsatsRefusjon);
+ assertThat(arbfor.getDagsatsBruker()).isEqualTo(forventetDagsatsBrukersAndel);
+ assertThat(arbfor.getDagsats()).isEqualTo(forventetDagsatsBrukersAndel + forventetDagsatsRefusjon);
+ }
+
+ private void leggTilNæring(int brutto, int utbetaingsgrad, Long andelsnr) {
+ var andel = BeregningsgrunnlagPrStatus
+ .builder()
+ .medAktivitetStatus(AktivitetStatus.SN)
+ .medBruttoPrÅr(BigDecimal.valueOf(brutto))
+ .medUtbetalingsprosent(BigDecimal.valueOf(utbetaingsgrad))
+ .medAndelNr(andelsnr)
+ .build();
+ andel.setErSøktYtelseFor(utbetaingsgrad != 0);
+ BeregningsgrunnlagPeriode.oppdater(PERIODE)
+ .medBeregningsgrunnlagPrStatus(andel);
+ }
+
+ private void leggTilArbeidsforhold(BeregningsgrunnlagPeriode periode,
+ long andelsnr,
+ String orgnr,
+ double beregnetPrÅr,
+ double refusjonPrÅr,
+ double utbetalingsgrad) {
+ leggTilArbeidsforhold(periode, andelsnr, orgnr, null, beregnetPrÅr, refusjonPrÅr, utbetalingsgrad);
+ }
+
+ private void leggTilFrilans(int brutto, int utbetaingsgrad, Long andelsnr) {
+ Arbeidsforhold arbeidsforhold = Arbeidsforhold.frilansArbeidsforhold();
+ BeregningsgrunnlagPrStatus atfl = PERIODE.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);
+
+ if (atfl == null) {
+ BeregningsgrunnlagPeriode.oppdater(PERIODE)
+ .medBeregningsgrunnlagPrStatus(BeregningsgrunnlagPrStatus
+ .builder()
+ .medAktivitetStatus(AktivitetStatus.ATFL)
+ .medArbeidsforhold(lagBeregningsgrunnlagPrArbeidsforhold(andelsnr, brutto, 0, utbetaingsgrad, arbeidsforhold))
+ .build());
+ } else {
+ BeregningsgrunnlagPrStatus.builder(atfl)
+ .medArbeidsforhold(lagBeregningsgrunnlagPrArbeidsforhold(andelsnr, brutto, 0, utbetaingsgrad, arbeidsforhold))
+ .build();
+ }
+ }
+
+ private void leggTilArbeidsforhold(BeregningsgrunnlagPeriode periode,
+ long andelsnr,
+ String orgnr,
+ String arbeidsforholdId,
+ double beregnetPrÅr,
+ double refusjonPrÅr,
+ double utbetalingsgrad) {
+ Arbeidsforhold arbeidsforhold = Arbeidsforhold.nyttArbeidsforholdHosVirksomhet(orgnr, arbeidsforholdId);
+ BeregningsgrunnlagPrStatus atfl = periode.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);
+
+ if (atfl == null) {
+ BeregningsgrunnlagPeriode.oppdater(periode)
+ .medBeregningsgrunnlagPrStatus(BeregningsgrunnlagPrStatus
+ .builder()
+ .medAktivitetStatus(AktivitetStatus.ATFL)
+ .medArbeidsforhold(lagBeregningsgrunnlagPrArbeidsforhold(andelsnr, beregnetPrÅr, refusjonPrÅr, utbetalingsgrad, arbeidsforhold))
+ .build());
+ } else {
+ BeregningsgrunnlagPrStatus.builder(atfl)
+ .medArbeidsforhold(lagBeregningsgrunnlagPrArbeidsforhold(andelsnr, beregnetPrÅr, refusjonPrÅr, utbetalingsgrad, arbeidsforhold))
+ .build();
+ }
+ }
+
+ private BeregningsgrunnlagPrArbeidsforhold lagBeregningsgrunnlagPrArbeidsforhold(long andelsnr,
+ double beregnetPrÅr,
+ double refusjonskrav,
+ double utbetalingsgrad,
+ Arbeidsforhold arbeidsforhold) {
+ BeregningsgrunnlagPrArbeidsforhold arb = BeregningsgrunnlagPrArbeidsforhold.builder()
+ .medAndelNr(andelsnr)
+ .medArbeidsforhold(arbeidsforhold)
+ .medBruttoPrÅr(BigDecimal.valueOf(beregnetPrÅr))
+ .medRefusjonPrÅr(BigDecimal.valueOf(refusjonskrav))
+ .medUtbetalingsprosent(BigDecimal.valueOf(utbetalingsgrad))
+ .build();
+ arb.setErSøktYtelseFor(utbetalingsgrad > 0);
+ return arb;
+ }
+
+
+ private RegelResultat kjørRegelFinnGrenseverdi(BeregningsgrunnlagPeriode grunnlag) {
+ return new RegelFinnGrenseverdiMedFordeling(grunnlag).evaluerRegel(grunnlag);
+ }
+
+ private RegelResultat kjørRegelFullførBeregningsgrunnlag(BeregningsgrunnlagPeriode grunnlag) {
+ return new RegelFullføreBeregningsgrunnlag(grunnlag).evaluerRegel(grunnlag);
+ }
}