Skip to content

Commit

Permalink
FAGSYSTEM-363084: Sjekker inntektsgrunnlag og ikkje brutto pr år for …
Browse files Browse the repository at this point in the history
…å bestemme om grunnlag er over 6G ved beregning av grenseverdi uten fordeling
  • Loading branch information
espenjv committed Jan 10, 2025
1 parent 62ef652 commit 92ac2dd
Show file tree
Hide file tree
Showing 12 changed files with 228 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

import no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling.RegelFinnGrenseverdiUtenFordeling;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
import no.nav.folketrygdloven.regelmodelloversetter.EksportRegel;
import no.nav.fpsak.nare.Ruleset;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling;

import java.math.BigDecimal;
import java.util.Comparator;
Expand All @@ -17,7 +17,7 @@
import no.nav.fpsak.nare.specification.LeafSpecification;

@RuleDocumentation(AvkortBGAndelerSomIkkeGjelderArbeidsforholdAndelsmessigUtenFordeling.ID)
public class AvkortBGAndelerSomIkkeGjelderArbeidsforholdAndelsmessigUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {
class AvkortBGAndelerSomIkkeGjelderArbeidsforholdAndelsmessigUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {
public static final String ID = "FP_BR 29.8.4_uten_fordeling";
public static final String BESKRIVELSE = "Avkort alle beregningsgrunnlagsandeler som ikke gjelder arbeidsforhold andelsmessig.";

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatus;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPrArbeidsforhold;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPrStatus;
import no.nav.fpsak.nare.doc.RuleDocumentation;
import no.nav.fpsak.nare.evaluation.Evaluation;
import no.nav.fpsak.nare.specification.LeafSpecification;

@RuleDocumentation(AvkortBGAndelerSomIkkeGjelderArbeidsforholdTil0.ID)
class AvkortBGAndelerSomIkkeGjelderArbeidsforholdTil0 extends LeafSpecification<BeregningsgrunnlagPeriode> {
static final String ID = "FP_BR 29.8.3";
static final String BESKRIVELSE = "Avkort alle beregningsgrunnlagsandeler som ikke gjelder arbeidsforhold til 0.";

AvkortBGAndelerSomIkkeGjelderArbeidsforholdTil0() {
super(ID, BESKRIVELSE);
}

@Override
public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {

Map<String, Object> resultater = new HashMap<>();
grunnlag.getBeregningsgrunnlagPrStatus().stream()
.filter(bgps -> !bgps.erArbeidstakerEllerFrilanser())
.forEach(bgps -> {
BeregningsgrunnlagPrStatus.builder(bgps)
.medAndelsmessigFørGraderingPrAar(BigDecimal.ZERO)
.build();
resultater.put("avkortetPrÅr.status." + bgps.getAktivitetStatus().name(), bgps.getAvkortetPrÅr());
});

BeregningsgrunnlagPrStatus atfl = grunnlag.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);
if (atfl != null) {
atfl.getFrilansArbeidsforhold().ifPresent(af -> {
BeregningsgrunnlagPrArbeidsforhold.builder(af)
.medAndelsmessigFørGraderingPrAar(BigDecimal.ZERO)
.build();
resultater.put("avkortetPrÅr.status." + atfl.getAktivitetStatus().name() + "." + af.getArbeidsgiverId(), af.getAvkortetPrÅr());
});
}
return beregnet(resultater);

}



}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling;

import java.math.BigDecimal;
import java.math.RoundingMode;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling;

import java.math.BigDecimal;
import java.util.HashMap;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling;

import java.math.BigDecimal;

Expand All @@ -11,7 +11,7 @@
import no.nav.fpsak.nare.specification.LeafSpecification;

@RuleDocumentation(FastsettAndelLikBruttoBGUtenFordeling.ID)
public class FastsettAndelLikBruttoBGUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {
class FastsettAndelLikBruttoBGUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {

static final String ID = "FP_BR 29.6.2_uten_fordeling";
static final String BESKRIVELSE = "Fastsett andel lik brutto bg";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling;

import java.math.BigDecimal;
import java.math.RoundingMode;
Expand All @@ -17,7 +17,7 @@
import no.nav.fpsak.nare.specification.LeafSpecification;

@RuleDocumentation(FinnGrenseverdiUtenFordeling.ID)
public class FinnGrenseverdiUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {
class FinnGrenseverdiUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {

public static final String ID = "FP_BR 6.2_uten_fordeling";
public static final String BESKRIVELSE = "Finn grenseverdi uten fordeling";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling;

import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatus;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
Expand All @@ -8,7 +8,7 @@
import no.nav.fpsak.nare.Ruleset;
import no.nav.fpsak.nare.specification.Specification;

public class RegelFastsettAndelBGOver6GUtenFordeling implements RuleService<BeregningsgrunnlagPeriode> {
class RegelFastsettAndelBGOver6GUtenFordeling implements RuleService<BeregningsgrunnlagPeriode> {
public static final String ID = "FP_BR_29.8_uten_fordeling";
public static final String BESKRIVELSE = "Fastsett avkortet BG over 6G når refusjon under 6G";
private BeregningsgrunnlagPeriode regelmodell;
Expand Down Expand Up @@ -51,7 +51,7 @@ public Specification<BeregningsgrunnlagPeriode> getSpecification() {
}

//FP_BR_29.8.2 Er totalt BG for beregningsgrunnlagsandeler fra arbeidsforhold > 6G?
Specification<BeregningsgrunnlagPeriode> erTotaltBGFraArbeidforholdStørreEnn6G = rs.beregningHvisRegel(new SjekkOmTotaltBGForArbeidsforholdStørreEnnGrenseverdi(),
Specification<BeregningsgrunnlagPeriode> erTotaltBGFraArbeidforholdStørreEnn6G = rs.beregningHvisRegel(new SjekkOmTotaltBGForArbeidsforholdStørreEnnGrenseverdiUtenFordeling(),
avkortAndelerSomIkkegjelderAFtil0, avkortAndelerAndelsmessigOgFastsettBrukersAndel);


Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling;

import no.nav.folketrygdloven.beregningsgrunnlag.fastsette.SjekkBeregningsgrunnlagStørreEnnGrenseverdi;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling;


import java.math.BigDecimal;

import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatus;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPrArbeidsforhold;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPrStatus;
import no.nav.fpsak.nare.doc.RuleDocumentation;
import no.nav.fpsak.nare.evaluation.Evaluation;
import no.nav.fpsak.nare.evaluation.node.SingleEvaluation;
import no.nav.fpsak.nare.specification.LeafSpecification;

@RuleDocumentation(SjekkOmTotaltBGForArbeidsforholdStørreEnnGrenseverdiUtenFordeling.ID)
class SjekkOmTotaltBGForArbeidsforholdStørreEnnGrenseverdiUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {

static final String ID = "FP_BR_29.8.2_uten_fordeling";
static final String BESKRIVELSE = "Er totalt intektsgrunnlag for andeler fra arbeidsforhold større enn 6G?";

SjekkOmTotaltBGForArbeidsforholdStørreEnnGrenseverdiUtenFordeling() {
super(ID, BESKRIVELSE);
}

@Override
public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
BigDecimal grenseverdi = grunnlag.getGrenseverdi();
BeregningsgrunnlagPrStatus atfl = grunnlag.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);
BigDecimal totaltBG = atfl == null ? BigDecimal.ZERO : atfl.getArbeidsforholdIkkeFrilans().stream()
.map(BeregningsgrunnlagPrArbeidsforhold::getInntektsgrunnlagInkludertNaturalytelsePrÅr)
.reduce(BigDecimal.ZERO, BigDecimal::add);
SingleEvaluation resultat = totaltBG.compareTo(grenseverdi) > 0 ? ja() : nei();
resultat.setEvaluationProperty("totaltBeregningsgrunnlagFraArbeidsforhold", totaltBG);
resultat.setEvaluationProperty("grunnbeløp", grunnlag.getGrunnbeløp());
resultat.setEvaluationProperty("grenseverdi", grenseverdi);
return resultat;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling;

import static no.nav.folketrygdloven.beregningsgrunnlag.util.DateUtil.TIDENES_ENDE;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.*;

import java.math.BigDecimal;
import java.time.LocalDate;

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.fastsett.Beregningsgrunnlag;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPrArbeidsforhold;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPrStatus;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.grunnlag.inntekt.Arbeidsforhold;
import no.nav.fpsak.nare.evaluation.Evaluation;
import no.nav.fpsak.nare.evaluation.Resultat;

class SjekkOmTotaltBGForArbeidsforholdStørreEnnGrenseverdiUtenFordelingTest {

@Test
void skal_gi_resultat_JA_for_inntektsgrunnlag_over_grenseverdi() {
BeregningsgrunnlagPeriode periode = BeregningsgrunnlagPeriode.builder()
.medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
.medBeregningsgrunnlagPrStatus(BeregningsgrunnlagPrStatus
.builder()
.medAktivitetStatus(AktivitetStatus.ATFL)
.medArbeidsforhold(BeregningsgrunnlagPrArbeidsforhold.builder()
.medAndelNr(1L)
.medBruttoPrÅr(BigDecimal.valueOf(100_000))
.medInntektsgrunnlagPrÅr(BigDecimal.valueOf(1_000_000))
.medArbeidsforhold(Arbeidsforhold.builder()
.medOrgnr("999999999")
.medAktivitet(Aktivitet.ARBEIDSTAKERINNTEKT).build()).build())
.build()).build();

Beregningsgrunnlag.builder()
.medBeregningsgrunnlagPeriode(periode)
.medGrunnbeløp(BigDecimal.valueOf(100_000));

var evaluate = new SjekkOmTotaltBGForArbeidsforholdStørreEnnGrenseverdiUtenFordeling().evaluate(periode);

assertThat(evaluate.result()).isEqualTo(Resultat.JA);
}

@Test
void skal_gi_resultat_NEI_for_inntektsgrunnlag_under_grenseverdi() {
BeregningsgrunnlagPeriode periode = BeregningsgrunnlagPeriode.builder()
.medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
.medBeregningsgrunnlagPrStatus(BeregningsgrunnlagPrStatus
.builder()
.medAktivitetStatus(AktivitetStatus.ATFL)
.medArbeidsforhold(BeregningsgrunnlagPrArbeidsforhold.builder()
.medAndelNr(1L)
.medBruttoPrÅr(BigDecimal.valueOf(800_000))
.medInntektsgrunnlagPrÅr(BigDecimal.valueOf(500_000))
.medArbeidsforhold(Arbeidsforhold.builder()
.medOrgnr("999999999")
.medAktivitet(Aktivitet.ARBEIDSTAKERINNTEKT).build()).build())
.build()).build();

Beregningsgrunnlag.builder()
.medBeregningsgrunnlagPeriode(periode)
.medGrunnbeløp(BigDecimal.valueOf(100_000));

var evaluate = new SjekkOmTotaltBGForArbeidsforholdStørreEnnGrenseverdiUtenFordeling().evaluate(periode);

assertThat(evaluate.result()).isEqualTo(Resultat.NEI);
}

@Test
void skal_gi_resultat_NEI_for_inntektsgrunnlag_ikke_satt() {
BeregningsgrunnlagPeriode periode = BeregningsgrunnlagPeriode.builder()
.medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
.medBeregningsgrunnlagPrStatus(BeregningsgrunnlagPrStatus
.builder()
.medAktivitetStatus(AktivitetStatus.ATFL)
.medArbeidsforhold(BeregningsgrunnlagPrArbeidsforhold.builder()
.medAndelNr(1L)
.medBruttoPrÅr(BigDecimal.valueOf(800_000))
.medArbeidsforhold(Arbeidsforhold.builder()
.medOrgnr("999999999")
.medAktivitet(Aktivitet.ARBEIDSTAKERINNTEKT).build()).build())
.build()).build();

Beregningsgrunnlag.builder()
.medBeregningsgrunnlagPeriode(periode)
.medGrunnbeløp(BigDecimal.valueOf(100_000));

var evaluate = new SjekkOmTotaltBGForArbeidsforholdStørreEnnGrenseverdiUtenFordeling().evaluate(periode);

assertThat(evaluate.result()).isEqualTo(Resultat.NEI);
}

@Test
void skal_gi_resultat_NEI_for_inntektsgrunnlag_lik_grenseverdi() {
BeregningsgrunnlagPeriode periode = BeregningsgrunnlagPeriode.builder()
.medPeriode(Periode.of(LocalDate.now(), TIDENES_ENDE))
.medBeregningsgrunnlagPrStatus(BeregningsgrunnlagPrStatus
.builder()
.medAktivitetStatus(AktivitetStatus.ATFL)
.medArbeidsforhold(BeregningsgrunnlagPrArbeidsforhold.builder()
.medAndelNr(1L)
.medBruttoPrÅr(BigDecimal.valueOf(800_000))
.medInntektsgrunnlagPrÅr(BigDecimal.valueOf(600_000))
.medArbeidsforhold(Arbeidsforhold.builder()
.medOrgnr("999999999")
.medAktivitet(Aktivitet.ARBEIDSTAKERINNTEKT).build()).build())
.build()).build();

Beregningsgrunnlag.builder()
.medBeregningsgrunnlagPeriode(periode)
.medGrunnbeløp(BigDecimal.valueOf(100_000));

var evaluate = new SjekkOmTotaltBGForArbeidsforholdStørreEnnGrenseverdiUtenFordeling().evaluate(periode);

assertThat(evaluate.result()).isEqualTo(Resultat.NEI);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

import org.junit.jupiter.api.Test;

import no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.RegelFinnGrenseverdiUtenFordeling;
import no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi.utenfordeling.RegelFinnGrenseverdiUtenFordeling;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatus;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.MidlertidigInaktivType;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.Periode;
Expand Down

0 comments on commit 92ac2dd

Please sign in to comment.