Skip to content

Commit

Permalink
Bruker aktivitetsgrad til å bestemme fordeling mellom arbeidsgivere o…
Browse files Browse the repository at this point in the history
…g bruker/arbeidsgiver
  • Loading branch information
espenjv committed Sep 8, 2023
1 parent e4fc088 commit 84105af
Show file tree
Hide file tree
Showing 12 changed files with 67 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
for (BeregningsgrunnlagPrStatus beregningsgrunnlagPrStatus : grunnlag.getBeregningsgrunnlagPrStatusSomSkalBrukes()) {
if (AktivitetStatus.erArbeidstaker(beregningsgrunnlagPrStatus.getAktivitetStatus())) {
for (BeregningsgrunnlagPrArbeidsforhold af : beregningsgrunnlagPrStatus.getArbeidsforholdSomSkalBrukes()) {
BigDecimal bruttoInkludertNaturalytelsePrÅr = af.getGradertBruttoInkludertNaturalytelsePrÅr()
BigDecimal bruttoInkludertNaturalytelsePrÅr = af.getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr()
.orElseThrow(() -> new IllegalStateException("Brutto er ikke satt for arbeidsforhold " + af.toString()));
BeregningsgrunnlagPrArbeidsforhold.builder(af)
.medAvkortetPrÅr(bruttoInkludertNaturalytelsePrÅr)
Expand All @@ -35,7 +35,7 @@ public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
.build();
}
} else {
BigDecimal avkortetPrStatus = beregningsgrunnlagPrStatus.getGradertBruttoPrÅr();
BigDecimal avkortetPrStatus = beregningsgrunnlagPrStatus.getAktivitetsgradertBruttoPrÅr();
BeregningsgrunnlagPrStatus.builder(beregningsgrunnlagPrStatus).medAvkortetPrÅr(avkortetPrStatus).build();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
return ja(); // Andre statuser har alltid brukers andel lik brutto/avkortet/redusert BG
}

// Kva skjer her?
for (BeregningsgrunnlagPrArbeidsforhold arbeidsforhold : bgps.getArbeidsforholdSomSkalBrukes()) {
BigDecimal arbeidsgiversAndel = arbeidsforhold.getMaksimalRefusjonPrÅr();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
BeregningsgrunnlagPrStatus atfl = grunnlag.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);
BigDecimal sumBeregningsgrunnlagArbeidsforhold = atfl == null ? BigDecimal.ZERO : atfl.getArbeidsforholdSomSkalBrukesIkkeFrilans()
.stream()
.map(BeregningsgrunnlagPrArbeidsforhold::getGradertBruttoInkludertNaturalytelsePrÅr)
.map(BeregningsgrunnlagPrArbeidsforhold::getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr)
.filter(Optional::isPresent)
.map(Optional::get)
.reduce(BigDecimal.ZERO, BigDecimal::add);
Expand All @@ -44,7 +44,7 @@ public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
Optional<BeregningsgrunnlagPrArbeidsforhold> frilansArbeidsforholdOpt = atfl.getFrilansArbeidsforholdSomSkalBrukes();
if (frilansArbeidsforholdOpt.isPresent()) {
BeregningsgrunnlagPrArbeidsforhold af = frilansArbeidsforholdOpt.get();
BigDecimal bruttoBeregningsgrunnlagForAndelen = af.getGradertBruttoInkludertNaturalytelsePrÅr()
BigDecimal bruttoBeregningsgrunnlagForAndelen = af.getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr()
.orElseThrow(() -> new IllegalStateException("Brutto er ikke satt for arbeidsforhold " + af.toString()));
BigDecimal avkortetBrukersAndel;
if (bruttoBeregningsgrunnlagForAndelen.compareTo(bGUtenArbeidsforholdTilFordeling) >= 0) {
Expand All @@ -67,7 +67,7 @@ public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
Iterator<BeregningsgrunnlagPrStatus> bgpsIter = bgpsSorted.iterator();
while (bgpsIter.hasNext()) {
BeregningsgrunnlagPrStatus bgps = bgpsIter.next();
BigDecimal bruttoBeregningsgrunnlagForAndelen = bgps.getGradertBruttoInkludertNaturalytelsePrÅr();
BigDecimal bruttoBeregningsgrunnlagForAndelen = bgps.getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr();
BigDecimal avkortetBrukersAndel;
if (bruttoBeregningsgrunnlagForAndelen.compareTo(bGUtenArbeidsforholdTilFordeling) >= 0) {
avkortetBrukersAndel = bGUtenArbeidsforholdTilFordeling;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,16 +90,16 @@ private void forberedNesteIterasjon(SingleEvaluation resultat, List<Beregningsgr
private void forsøkÅFastsetteBrukersAndeler(List<BeregningsgrunnlagPrArbeidsforhold> ikkeFastsattAf, Map<String, Object> resultater,
BigDecimal sumFastsattAvkortetRefusjon, BigDecimal ikkeFordelt) {
BigDecimal sumBruttoBG = ikkeFastsattAf.stream()
.map(af -> af.getGradertBruttoInkludertNaturalytelsePrÅr().orElse(BigDecimal.ZERO))
.map(af -> af.getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr().orElse(BigDecimal.ZERO))
.reduce(BigDecimal.ZERO, BigDecimal::add);
resultater.put("tidligereFastsattRefusjon", sumFastsattAvkortetRefusjon);
resultater.put("gjenstårÅFastsetteRefusjon", ikkeFordelt);
ikkeFastsattAf.forEach(af -> {
BigDecimal prosentandel = BigDecimal.valueOf(100)
.multiply(af.getGradertBruttoInkludertNaturalytelsePrÅr().orElse(BigDecimal.ZERO))
.multiply(af.getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr().orElse(BigDecimal.ZERO))
.divide(sumBruttoBG, 10, RoundingMode.HALF_EVEN);
resultater.put("gjenstårÅFastsetteRefusjon.prosentandel." + af.getArbeidsgiverId(), prosentandel);
BigDecimal andel = ikkeFordelt.multiply(af.getGradertBruttoInkludertNaturalytelsePrÅr().orElse(BigDecimal.ZERO))
BigDecimal andel = ikkeFordelt.multiply(af.getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr().orElse(BigDecimal.ZERO))
.divide(sumBruttoBG, 10, RoundingMode.HALF_EVEN)
.subtract(af.getMaksimalRefusjonPrÅr());
BeregningsgrunnlagPrArbeidsforhold.builder(af)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
resultat.setEvaluationProperties(resultater);
atfl.getArbeidsforholdSomSkalBrukesIkkeFrilans().forEach(arbeidsforhold -> {
BigDecimal avkortetRefusjonPrÅr = arbeidsforhold.getMaksimalRefusjonPrÅr() == null ? BigDecimal.ZERO : arbeidsforhold.getMaksimalRefusjonPrÅr();
BigDecimal avkortetBrukersAndel = arbeidsforhold.getGradertBruttoInkludertNaturalytelsePrÅr().orElse(BigDecimal.ZERO).subtract(avkortetRefusjonPrÅr);
BigDecimal avkortetBrukersAndel = arbeidsforhold.getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr().orElse(BigDecimal.ZERO).subtract(avkortetRefusjonPrÅr);
BeregningsgrunnlagPrArbeidsforhold.builder(arbeidsforhold)
.medAvkortetPrÅr(avkortetRefusjonPrÅr.add(avkortetBrukersAndel))
.medAvkortetRefusjonPrÅr(avkortetRefusjonPrÅr)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
BigDecimal grenseverdi = grunnlag.getGrenseverdi();
BeregningsgrunnlagPrStatus atfl = grunnlag.getBeregningsgrunnlagPrStatus(AktivitetStatus.ATFL);
BigDecimal totaltBG = atfl == null ? BigDecimal.ZERO : atfl.getArbeidsforholdSomSkalBrukesIkkeFrilans().stream()
.map(af -> af.getGradertBruttoInkludertNaturalytelsePrÅr().orElse(BigDecimal.ZERO))
.map(af -> af.getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr().orElse(BigDecimal.ZERO))
.reduce(BigDecimal.ZERO, BigDecimal::add);
SingleEvaluation resultat = totaltBG.compareTo(grenseverdi) > 0 ? ja() : nei();
resultat.setEvaluationProperty("totaltBeregningsgrunnlagFraArbeidsforhold", totaltBG);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class SjekkGradertBeregningsgrunnlagStørreEnnGrenseverdi extends LeafSpe
@Override
public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {

BigDecimal bruttoInklBortfaltNaturalytelsePrÅr = grunnlag.getGradertBruttoPrÅrInkludertNaturalytelser();
BigDecimal bruttoInklBortfaltNaturalytelsePrÅr = grunnlag.getAktivitetsgradertBruttoPrÅrInkludertNaturalytelser();
BigDecimal grenseverdi = grunnlag.getGrenseverdi();
SingleEvaluation resultat = bruttoInklBortfaltNaturalytelsePrÅr.compareTo(grenseverdi) > 0 ? ja() : nei();
resultat.setEvaluationProperty("bruttoPrÅr", bruttoInklBortfaltNaturalytelsePrÅr);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
grunnlag.getBeregningsgrunnlagPrStatusSomSkalBrukes().stream()
.flatMap(bgs -> bgs.getArbeidsforholdSomSkalBrukes().stream())
.forEach(af -> {
BigDecimal refusjonskravPrArbeidsforholdPrÅr = af.getGradertRefusjonskravPrÅr().orElse(BigDecimal.ZERO);
BigDecimal refusjonskravPrArbeidsforholdPrÅr = af.getAktivitetsgradertRefusjonskravPrÅr().orElse(BigDecimal.ZERO);

if (af.getMaksimalRefusjonPrÅr() == null) {
BeregningsgrunnlagPrArbeidsforhold.Builder bgArbeidsforholdBuilder = BeregningsgrunnlagPrArbeidsforhold.builder(af);
BigDecimal maksimalRefusjon = af.getGradertBruttoPrÅr().min(refusjonskravPrArbeidsforholdPrÅr);
BigDecimal maksimalRefusjon = af.getAktivitetsgradertBruttoPrÅr().min(refusjonskravPrArbeidsforholdPrÅr);
bgArbeidsforholdBuilder.medMaksimalRefusjonPrÅr(maksimalRefusjon);
bgArbeidsforholdBuilder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,12 @@ public Evaluation evaluate(BeregningsgrunnlagPeriode grunnlag) {
.orElse(BigDecimal.ZERO));

// Forsøk å tildele avkortede andeler til alle
BigDecimal gradertBruttoSum = ikkeFastsatt.stream().map(BeregningsgrunnlagPrArbeidsforhold::getGradertBruttoPrÅr)
BigDecimal gradertBruttoSum = ikkeFastsatt.stream().map(BeregningsgrunnlagPrArbeidsforhold::getAktivitetsgradertBruttoPrÅr)
.filter(Objects::nonNull)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
resultater.put(REFUSJON_TIL_FORDELING, refusjonTilFordeling);
ikkeFastsatt.forEach(af -> {
var gradertBruttoPrÅr = af.getGradertBruttoPrÅr() == null ? BigDecimal.ZERO : af.getGradertBruttoPrÅr();
var gradertBruttoPrÅr = af.getAktivitetsgradertBruttoPrÅr() == null ? BigDecimal.ZERO : af.getAktivitetsgradertBruttoPrÅr();
BigDecimal andel = refusjonTilFordeling.multiply(gradertBruttoPrÅr)
.divide(gradertBruttoSum, 10, RoundingMode.HALF_EVEN);
BeregningsgrunnlagPrArbeidsforhold.builder(af)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,10 @@ void addBeregningsgrunnlagPrStatus(BeregningsgrunnlagPrStatus beregningsgrunnlag
return brutto.add(naturalytelser);
}

public BigDecimal getGradertBruttoPrÅrInkludertNaturalytelser() {
BigDecimal naturalytelser = getGradertNaturalytelserBortfaltMinusTilkommetPrÅr();
BigDecimal brutto = getGradertBruttoPrÅr();
return brutto.add(naturalytelser);
public BigDecimal getAktivitetsgradertBruttoPrÅrInkludertNaturalytelser() {
return getBeregningsgrunnlagPrStatus().stream()
.map(BeregningsgrunnlagPrStatus::getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}

private BigDecimal getNaturalytelserBortfaltMinusTilkommetPrÅr() {
Expand All @@ -118,12 +118,6 @@ void addBeregningsgrunnlagPrStatus(BeregningsgrunnlagPrStatus beregningsgrunnlag
.reduce(BigDecimal.ZERO, BigDecimal::add);
}

private BigDecimal getGradertNaturalytelserBortfaltMinusTilkommetPrÅr() {
return beregningsgrunnlagPrStatus.stream()
.map(BeregningsgrunnlagPrStatus::samletGradertNaturalytelseBortfaltMinusTilkommetPrÅr)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}

public Periode getBeregningsgrunnlagPeriode() {
return bgPeriode;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,11 @@ public boolean erFrilanser() {
return Optional.ofNullable(naturalytelseBortfaltPrÅr);
}

public Optional<BigDecimal> getGradertNaturalytelseBortfaltPrÅr() {
return Optional.ofNullable(finnGradert(naturalytelseBortfaltPrÅr));
}

public Optional<BigDecimal> getNaturalytelseTilkommetPrÅr() {
return Optional.ofNullable(naturalytelseTilkommetPrÅr);
}

public Optional<BigDecimal> getGradertNaturalytelseTilkommetPrÅr() {
return Optional.ofNullable(finnGradert(naturalytelseTilkommetPrÅr));
}

public String getBeskrivelse() {
return (erFrilanser() ? "FL:" : "AT:") + getArbeidsgiverId();
}
Expand All @@ -72,6 +65,11 @@ public String getBeskrivelse() {
return finnGradert(getBruttoPrÅr().orElse(null));
}

public BigDecimal getAktivitetsgradertBruttoPrÅr() {
return finnAktivitetsgradert(getBruttoPrÅr().orElse(null));
}


public BigDecimal getInntektsgrunnlagPrÅr() {
return inntektsgrunnlagPrÅr != null ? inntektsgrunnlagPrÅr : BigDecimal.ZERO;
}
Expand Down Expand Up @@ -112,15 +110,20 @@ public Arbeidsforhold getArbeidsforhold() {
return arbeidsforhold;
}

public Optional<BigDecimal> getGradertRefusjonskravPrÅr() {
return Optional.ofNullable(finnGradert(refusjonPrÅr));
public Optional<BigDecimal> getAktivitetsgradertRefusjonskravPrÅr() {
return Optional.ofNullable(finnAktivitetsgradert(refusjonPrÅr));
}

public Optional<BigDecimal> getGradertBruttoInkludertNaturalytelsePrÅr() {
Optional<BigDecimal> brutto = getBruttoInkludertNaturalytelsePrÅr();
return brutto.map(this::finnGradert);
}

public Optional<BigDecimal> getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr() {
Optional<BigDecimal> brutto = getBruttoInkludertNaturalytelsePrÅr();
return brutto.map(this::finnAktivitetsgradert);
}

public BigDecimal getMaksimalRefusjonPrÅr() {
return maksimalRefusjonPrÅr;
}
Expand Down Expand Up @@ -188,6 +191,16 @@ private BigDecimal finnGradert(BigDecimal verdi) {
return verdi == null ? null : verdi.multiply(utbetalingsprosent.scaleByPowerOfTen(-2));
}

private BigDecimal finnAktivitetsgradert(BigDecimal verdi) {
if (verdi == null) {
return null;
}
if (aktivitetsgrad == null) {
return finnGradert(verdi);
}
return verdi.multiply(BigDecimal.valueOf(100).subtract(aktivitetsgrad).scaleByPowerOfTen(-2));
}

public static Builder builder() {
return new Builder();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,20 +94,6 @@ public boolean erArbeidstakerEllerFrilanser() {
return sumBortfaltNaturalYtelse.subtract(sumTilkommetNaturalYtelse);
}

public BigDecimal samletGradertNaturalytelseBortfaltMinusTilkommetPrÅr() {
BigDecimal sumBortfaltNaturalYtelse = getArbeidsforhold().stream()
.map(BeregningsgrunnlagPrArbeidsforhold::getGradertNaturalytelseBortfaltPrÅr)
.filter(Optional::isPresent)
.map(Optional::get)
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal sumTilkommetNaturalYtelse = getArbeidsforhold().stream()
.map(BeregningsgrunnlagPrArbeidsforhold::getGradertNaturalytelseTilkommetPrÅr)
.filter(Optional::isPresent)
.map(Optional::get)
.reduce(BigDecimal.ZERO, BigDecimal::add);
return sumBortfaltNaturalYtelse.subtract(sumTilkommetNaturalYtelse);
}

public BigDecimal getBruttoPrÅr() {
return bruttoPrÅr != null ? bruttoPrÅr : getArbeidsforhold().stream()
.map(BeregningsgrunnlagPrArbeidsforhold::getBruttoPrÅr)
Expand All @@ -123,10 +109,28 @@ public boolean erArbeidstakerEllerFrilanser() {
.reduce(BigDecimal.ZERO, BigDecimal::add);
}

public BigDecimal getAktivitetsgradertBruttoPrÅr() {
return bruttoPrÅr != null ? finnAktivitetsgradert(bruttoPrÅr) : getArbeidsforhold().stream()
.map(BeregningsgrunnlagPrArbeidsforhold::getAktivitetsgradertBruttoPrÅr)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}

private BigDecimal finnGradert(BigDecimal verdi) {
return verdi == null ? null : verdi.multiply(utbetalingsprosent.scaleByPowerOfTen(-2));
}

private BigDecimal finnAktivitetsgradert(BigDecimal verdi) {
if (verdi == null) {
return null;
}
if (aktivitetsgrad == null) {
return finnGradert(verdi);
}
return verdi.multiply(BigDecimal.valueOf(100).subtract(aktivitetsgrad).scaleByPowerOfTen(-2));
}


public BigDecimal getBruttoInkludertNaturalytelsePrÅr() {
BigDecimal brutto = getBruttoPrÅr();
BigDecimal samletNaturalytelse = samletNaturalytelseBortfaltMinusTilkommetPrÅr();
Expand All @@ -147,6 +151,13 @@ private BigDecimal finnGradert(BigDecimal verdi) {
.reduce(BigDecimal.ZERO, BigDecimal::add);
}

public BigDecimal getAktivitetsgradertBruttoInkludertNaturalytelsePrÅr() {
return bruttoPrÅr != null ? finnAktivitetsgradert(getBruttoInkludertNaturalytelsePrÅr()) : getArbeidsforhold().stream()
.map(BeregningsgrunnlagPrArbeidsforhold::getGradertBruttoInkludertNaturalytelsePrÅr)
.filter(Optional::isPresent)
.map(Optional::get)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}

public List<BeregningsgrunnlagPrArbeidsforhold> getArbeidsforhold() {
return Collections.unmodifiableList(arbeidsforhold);
Expand Down

0 comments on commit 84105af

Please sign in to comment.