Skip to content

Commit

Permalink
Legger splitt i logikk inne i regelrepo (#433)
Browse files Browse the repository at this point in the history
* Legger splitt i logikk inne i regelrepo

* Retter opp kommentar

* Bytter om rekkefølge på resultat for å unngå negering

* Tilpasser regel-id
  • Loading branch information
espenjv authored Sep 20, 2023
1 parent c822235 commit 2daa699
Show file tree
Hide file tree
Showing 27 changed files with 448 additions and 157 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.ytelse.svp;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

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

import java.math.BigDecimal;
import java.util.Comparator;
Expand All @@ -18,7 +18,7 @@

@RuleDocumentation(AvkortBGAndelerSomIkkeGjelderArbeidsforholdAndelsmessigUtenFordeling.ID)
public class AvkortBGAndelerSomIkkeGjelderArbeidsforholdAndelsmessigUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {
public static final String ID = "FP_BR 29.8.4";
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.";

AvkortBGAndelerSomIkkeGjelderArbeidsforholdAndelsmessigUtenFordeling() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.ytelse.svp;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

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.ytelse.svp;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

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.ytelse.svp;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

import java.math.BigDecimal;
import java.math.RoundingMode;
Expand All @@ -16,7 +16,7 @@

@RuleDocumentation(FastsettAndelForArbeidsforholdUtenFordeling.ID)
class FastsettAndelForArbeidsforholdUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {
static final String ID = "FP_BR 29.8.6";
static final String ID = "FP_BR 29.8.6_uten_fordeling";
static final String BESKRIVELSE = "Fastsett andeleler pr Arbeidsforhold";

FastsettAndelForArbeidsforholdUtenFordeling() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.ytelse.svp;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

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.ytelse.svp;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

import java.math.BigDecimal;
import java.util.HashMap;
Expand All @@ -15,7 +15,7 @@

@RuleDocumentation(FastsettAndelForBGAndelerSomGjelderArbeidsforholdUtenFordeling.ID)
class FastsettAndelForBGAndelerSomGjelderArbeidsforholdUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {
static final String ID = "FP_BR 29.8.10";
static final String ID = "FP_BR 29.8.10_uten_fordeling";
static final String BESKRIVELSE = "Fastsett brukers andel for alle beregningsgrunnlagsandeler som gjelder arbeidsforhold.";

FastsettAndelForBGAndelerSomGjelderArbeidsforholdUtenFordeling() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.ytelse.svp;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

import java.math.BigDecimal;

Expand All @@ -13,7 +13,7 @@
@RuleDocumentation(FastsettAndelLikBruttoBG.ID)
public class FastsettAndelLikBruttoBG extends LeafSpecification<BeregningsgrunnlagPeriode> {

static final String ID = "FP_BR 29.6.2";
static final String ID = "FP_BR 29.6.2_med_fordeling";
static final String BESKRIVELSE = "Fastsett andel lik brutto bg";

public FastsettAndelLikBruttoBG() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.ytelse.svp;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

import java.math.BigDecimal;

Expand All @@ -13,7 +13,7 @@
@RuleDocumentation(FastsettAndelLikBruttoBGUtenFordeling.ID)
public class FastsettAndelLikBruttoBGUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {

static final String ID = "FP_BR 29.6.2";
static final String ID = "FP_BR 29.6.2_uten_fordeling";
static final String BESKRIVELSE = "Fastsett andel lik brutto bg";

public FastsettAndelLikBruttoBGUtenFordeling() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.ytelse.svp;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

import java.math.BigDecimal;
import java.math.RoundingMode;
Expand All @@ -19,7 +19,7 @@
@RuleDocumentation(FinnGrenseverdi.ID)
public class FinnGrenseverdi extends LeafSpecification<BeregningsgrunnlagPeriode> {

public static final String ID = "FP_BR 6.2";
public static final String ID = "FP_BR 6.2_med_fordeling";
public static final String BESKRIVELSE = "Finn grenseverdi";

public FinnGrenseverdi() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.folketrygdloven.beregningsgrunnlag.ytelse.svp;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

import java.math.BigDecimal;
import java.math.RoundingMode;
Expand All @@ -19,8 +19,8 @@
@RuleDocumentation(FinnGrenseverdiUtenFordeling.ID)
public class FinnGrenseverdiUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {

public static final String ID = "FP_BR 6.2";
public static final String BESKRIVELSE = "Finn grenseverdi";
public static final String ID = "FP_BR 6.2_uten_fordeling";
public static final String BESKRIVELSE = "Finn grenseverdi uten fordeling";

public FinnGrenseverdiUtenFordeling() {
super(ID, BESKRIVELSE);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package no.nav.folketrygdloven.beregningsgrunnlag.ytelse.svp;
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatus;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.Fastsatt;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPrStatus;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.Fastsatt;
import no.nav.fpsak.nare.RuleService;
import no.nav.fpsak.nare.Ruleset;
import no.nav.fpsak.nare.specification.Specification;

public class RegelFastsettAndelBGOver6G implements RuleService<BeregningsgrunnlagPeriode> {
public static final String ID = "FP_BR_29.8";
public static final String ID = "FP_BR_29.8_med_fordeling";
public static final String BESKRIVELSE = "Fastsett avkortet BG over 6G når refusjon under 6G";
private BeregningsgrunnlagPeriode regelmodell;

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

import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatus;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPrStatus;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.Fastsatt;
import no.nav.fpsak.nare.RuleService;
import no.nav.fpsak.nare.Ruleset;
import no.nav.fpsak.nare.specification.Specification;

public 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;

public RegelFastsettAndelBGOver6GUtenFordeling(BeregningsgrunnlagPeriode regelmodell) {
super();
this.regelmodell = regelmodell;
}

@SuppressWarnings("unchecked")
@Override
public Specification<BeregningsgrunnlagPeriode> getSpecification() {
BeregningsgrunnlagPrStatus bgpsa = regelmodell.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);

Ruleset<BeregningsgrunnlagPeriode> rs = new Ruleset<>();

//FP_BR_29.8.10 For alle beregningsgrunnlagsandeler som gjelder arbeidsforhold, fastsett Brukers Andel
//FP_BR_29.8.4 Avkort alle beregningsgrunnlagsander som ikke gjelder arbeidsforhold andelsmessig
Specification<BeregningsgrunnlagPeriode> avkortAndelerAndelsmessigOgFastsettBrukersAndel = rs.beregningsRegel(
AvkortBGAndelerSomIkkeGjelderArbeidsforholdAndelsmessigUtenFordeling.ID,
AvkortBGAndelerSomIkkeGjelderArbeidsforholdAndelsmessigUtenFordeling.BESKRIVELSE,
new AvkortBGAndelerSomIkkeGjelderArbeidsforholdAndelsmessigUtenFordeling(),
new FastsettAndelForBGAndelerSomGjelderArbeidsforholdUtenFordeling());

Specification<BeregningsgrunnlagPeriode> avkortAndelerSomIkkegjelderAFtil0 = new Fastsatt();

if (bgpsa != null) {
Specification<BeregningsgrunnlagPeriode> fastsettAndelerForArbeidsforhold = rs.beregningsRegel(
FastsettAndelForArbeidsforholdUtenFordeling.ID,
FastsettAndelForArbeidsforholdUtenFordeling.BESKRIVELSE,
new FastsettAndelForArbeidsforholdUtenFordeling(),
new Fastsatt());

//FP_BR_29.8.3 Avkort alle beregningsgrunnlagsandeler som ikke gjelder arbeidsforhold til 0
avkortAndelerSomIkkegjelderAFtil0 = rs.beregningsRegel(
AvkortBGAndelerSomIkkeGjelderArbeidsforholdTil0.ID,
AvkortBGAndelerSomIkkeGjelderArbeidsforholdTil0.BESKRIVELSE,
new AvkortBGAndelerSomIkkeGjelderArbeidsforholdTil0(),
fastsettAndelerForArbeidsforhold);
}

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


return erTotaltBGFraArbeidforholdStørreEnn6G;
}

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

import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
import no.nav.folketrygdloven.regelmodelloversetter.EksportRegel;
import no.nav.fpsak.nare.Ruleset;
import no.nav.fpsak.nare.evaluation.Evaluation;
import no.nav.fpsak.nare.specification.Specification;

public class RegelFinnGrenseverdi implements EksportRegel<BeregningsgrunnlagPeriode> {

public static final String ID = "FP_BR_29";

private BeregningsgrunnlagPeriode regelmodell;

public RegelFinnGrenseverdi(BeregningsgrunnlagPeriode regelmodell) {
this.regelmodell = regelmodell;
}

@Override
public Evaluation evaluer(BeregningsgrunnlagPeriode regelmodell) {
return getSpecification().evaluate(regelmodell);
}

@SuppressWarnings("unchecked")
@Override
public Specification<BeregningsgrunnlagPeriode> getSpecification() {
Ruleset<BeregningsgrunnlagPeriode> rs = new Ruleset<>();


// FP_BR_29.1 Skal finne grenseverdi uten å ta hensyn til fordeling?
Specification<BeregningsgrunnlagPeriode> skalfinneGrenseverdiUtenFordeling = rs.beregningHvisRegel(
new SkalFinneGrenseverdiUtenFordeling(),
new RegelFinnGrenseverdiUtenFordeling(regelmodell).getSpecification(),
new RegelFinnGrenseverdiMedFordeling(regelmodell).getSpecification());

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

import no.nav.folketrygdloven.beregningsgrunnlag.fastsette.SjekkBeregningsgrunnlagStørreEnnGrenseverdi;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
Expand All @@ -8,13 +8,13 @@
import no.nav.fpsak.nare.evaluation.Evaluation;
import no.nav.fpsak.nare.specification.Specification;

public class RegelFinnGrenseverdi implements EksportRegel<BeregningsgrunnlagPeriode> {
public class RegelFinnGrenseverdiMedFordeling implements EksportRegel<BeregningsgrunnlagPeriode> {

public static final String ID = "FP_BR_29";
public static final String ID = "FP_BR_29_med_fordeling";

private BeregningsgrunnlagPeriode regelmodell;

public RegelFinnGrenseverdi(BeregningsgrunnlagPeriode regelmodell) {
public RegelFinnGrenseverdiMedFordeling(BeregningsgrunnlagPeriode regelmodell) {
this.regelmodell = regelmodell;
}

Expand All @@ -41,7 +41,7 @@ public Specification<BeregningsgrunnlagPeriode> getSpecification() {

// Fastsett uten avkorting
Specification<BeregningsgrunnlagPeriode> fastsettUtenAvkorting = rs.beregningsRegel(
"FP_BR_29.6",
"FP_BR_29.6_med_fordeling",
"Fastsett BG uten avkorting",
new FastsettAndelLikBruttoBG(),
fastsettGrenseverdi);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

import no.nav.folketrygdloven.beregningsgrunnlag.fastsette.SjekkBeregningsgrunnlagStørreEnnGrenseverdi;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.Fastsatt;
import no.nav.folketrygdloven.regelmodelloversetter.EksportRegel;
import no.nav.fpsak.nare.Ruleset;
import no.nav.fpsak.nare.evaluation.Evaluation;
import no.nav.fpsak.nare.specification.Specification;

public class RegelFinnGrenseverdiUtenFordeling implements EksportRegel<BeregningsgrunnlagPeriode> {

public static final String ID = "FP_BR_29_uten_fordeling";

private BeregningsgrunnlagPeriode regelmodell;

public RegelFinnGrenseverdiUtenFordeling(BeregningsgrunnlagPeriode regelmodell) {
this.regelmodell = regelmodell;
}

@Override
public Evaluation evaluer(BeregningsgrunnlagPeriode regelmodell) {
return getSpecification().evaluate(regelmodell);
}

@SuppressWarnings("unchecked")
@Override
public Specification<BeregningsgrunnlagPeriode> getSpecification() {
Ruleset<BeregningsgrunnlagPeriode> rs = new Ruleset<>();

// Fastsett grenseverdi for fastsetting av beregningsgrunnlag
Specification<BeregningsgrunnlagPeriode> fastsettGrenseverdi = rs.beregningsRegel(FinnGrenseverdiUtenFordeling.ID, FinnGrenseverdiUtenFordeling.BESKRIVELSE,
new FinnGrenseverdiUtenFordeling(), new Fastsatt());

// Fastsett avkortet BG
Specification<BeregningsgrunnlagPeriode> fastsettAvkortet = rs.beregningsRegel(
RegelFastsettAndelBGOver6GUtenFordeling.ID,
RegelFastsettAndelBGOver6GUtenFordeling.BESKRIVELSE,
new RegelFastsettAndelBGOver6GUtenFordeling(regelmodell).getSpecification(),
fastsettGrenseverdi);

// Fastsett uten avkorting
Specification<BeregningsgrunnlagPeriode> fastsettUtenAvkorting = rs.beregningsRegel(
"FP_BR_29.6_uten_fordeling",
"Fastsett BG uten avkorting",
new FastsettAndelLikBruttoBGUtenFordeling(),
fastsettGrenseverdi);

// FP_BR_29.4 4. Brutto beregnings-grunnlag totalt > 6G?
Specification<BeregningsgrunnlagPeriode> beregnEventuellAvkorting = rs.beregningHvisRegel(
new SjekkBeregningsgrunnlagStørreEnnGrenseverdi(),
fastsettAvkortet,
fastsettUtenAvkorting);

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


import java.math.BigDecimal;
Expand All @@ -25,7 +25,7 @@ class SjekkOmTotaltBGForArbeidsforholdStørreEnnGrenseverdi extends LeafSpecific
public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
BigDecimal grenseverdi = grunnlag.getGrenseverdi();
BeregningsgrunnlagPrStatus atfl = grunnlag.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);
BigDecimal totaltBG = atfl == null ? BigDecimal.ZERO : atfl.getArbeidsforholdIkkeFrilans().stream()
BigDecimal totaltBG = atfl == null ? BigDecimal.ZERO : atfl.getArbeidsforholdIkkeFrilans().stream()
.map(af -> af.getBruttoInkludertNaturalytelsePrÅr().orElse(BigDecimal.ZERO))
.reduce(BigDecimal.ZERO, BigDecimal::add);
SingleEvaluation resultat = totaltBG.compareTo(grenseverdi) > 0 ? ja() : nei();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package no.nav.folketrygdloven.beregningsgrunnlag.grenseverdi;

import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.fastsett.BeregningsgrunnlagPeriode;
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.ytelse.psb.PleiepengerGrunnlagFastsettGrenseverdi;
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(SkalFinneGrenseverdiUtenFordeling.ID)
public class SkalFinneGrenseverdiUtenFordeling extends LeafSpecification<BeregningsgrunnlagPeriode> {

public static final String ID = "FP_BR_29.1";
public static final String BESKRIVELSE = "Skal finne grenseverdi uten å ta hensyn til fordeling?";

public SkalFinneGrenseverdiUtenFordeling() {
super(ID, BESKRIVELSE);
}

@Override
public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {

if (!grunnlag.getBeregningsgrunnlag().getToggles().isEnabled("GRADERING_MOT_INNTEKT")) {
return nei();
}

var ytelsesSpesifiktGrunnlag = grunnlag.getBeregningsgrunnlag().getYtelsesSpesifiktGrunnlag();

if (ytelsesSpesifiktGrunnlag instanceof PleiepengerGrunnlagFastsettGrenseverdi pleiepengergrunnlag) {
var startdatoNyeGraderingsregler = pleiepengergrunnlag.getStartdatoNyeGraderingsregler();
SingleEvaluation resultat = startdatoNyeGraderingsregler == null || grunnlag.getPeriodeFom().isBefore(startdatoNyeGraderingsregler) ? nei() : ja();
resultat.setEvaluationProperty("startdatoNyeGraderingsregler", startdatoNyeGraderingsregler);
resultat.setEvaluationProperty("periodeFom", grunnlag.getPeriodeFom());
return resultat;
} else {
return nei();
}

}
}
Loading

0 comments on commit 2daa699

Please sign in to comment.