Skip to content

Commit 23beefb

Browse files
authored
Skille arbeidsprosent og utbetalingsprosent (#2545)
1 parent c9971a8 commit 23beefb

File tree

14 files changed

+71
-111
lines changed

14 files changed

+71
-111
lines changed

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/AktivitetsAvtaleBuilder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public AktivitetsAvtaleBuilder medProsentsats(Stillingsprosent prosentsats) {
3030
}
3131

3232
public AktivitetsAvtaleBuilder medProsentsats(BigDecimal prosentsats) {
33-
this.aktivitetsAvtaleEntitet.setProsentsats(prosentsats == null ? Stillingsprosent.nullProsent() : new Stillingsprosent(prosentsats));
33+
this.aktivitetsAvtaleEntitet.setProsentsats(prosentsats == null ? Stillingsprosent.nullProsent() : Stillingsprosent.arbeid(prosentsats));
3434
return this;
3535
}
3636

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/PermisjonBuilder.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package no.nav.foreldrepenger.abakus.domene.iay;
22

3-
import no.nav.abakus.iaygrunnlag.kodeverk.PermisjonsbeskrivelseType;
4-
import no.nav.foreldrepenger.abakus.typer.Stillingsprosent;
5-
63
import java.math.BigDecimal;
74
import java.time.LocalDate;
85

6+
import no.nav.abakus.iaygrunnlag.kodeverk.PermisjonsbeskrivelseType;
7+
import no.nav.foreldrepenger.abakus.typer.Stillingsprosent;
8+
99
public class PermisjonBuilder {
1010
private final Permisjon permisjon;
1111

@@ -23,7 +23,7 @@ public PermisjonBuilder medPermisjonsbeskrivelseType(PermisjonsbeskrivelseType p
2323
}
2424

2525
public PermisjonBuilder medProsentsats(BigDecimal prosentsats) {
26-
this.permisjon.setProsentsats(new Stillingsprosent(prosentsats));
26+
this.permisjon.setProsentsats(Stillingsprosent.arbeid(prosentsats));
2727
return this;
2828
}
2929

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistAndelBuilder.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package no.nav.foreldrepenger.abakus.domene.iay;
22

3+
import java.math.BigDecimal;
4+
35
import no.nav.abakus.iaygrunnlag.kodeverk.Inntektskategori;
46
import no.nav.foreldrepenger.abakus.typer.Beløp;
57
import no.nav.foreldrepenger.abakus.typer.InternArbeidsforholdRef;
68
import no.nav.foreldrepenger.abakus.typer.Stillingsprosent;
79

8-
import java.math.BigDecimal;
9-
1010
public class YtelseAnvistAndelBuilder {
1111
private final YtelseAnvistAndel ytelseAnvistAndel;
1212

@@ -27,14 +27,14 @@ public YtelseAnvistAndelBuilder medDagsats(BigDecimal dagsats) {
2727

2828
public YtelseAnvistAndelBuilder medUtbetalingsgrad(BigDecimal verdi) {
2929
if (verdi != null) {
30-
this.ytelseAnvistAndel.setUtbetalingsgradProsent(new Stillingsprosent(verdi));
30+
this.ytelseAnvistAndel.setUtbetalingsgradProsent(Stillingsprosent.utbetalingsgrad(verdi));
3131
}
3232
return this;
3333
}
3434

3535
public YtelseAnvistAndelBuilder medRefusjonsgrad(BigDecimal verdi) {
3636
if (verdi != null) {
37-
this.ytelseAnvistAndel.setRefusjonsgradProsent(new Stillingsprosent(verdi));
37+
this.ytelseAnvistAndel.setRefusjonsgradProsent(Stillingsprosent.utbetalingsgrad(verdi));
3838
}
3939
return this;
4040
}

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseAnvistBuilder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public YtelseAnvistBuilder medAnvistPeriode(IntervallEntitet intervallEntitet) {
3838

3939
public YtelseAnvistBuilder medUtbetalingsgradProsent(BigDecimal utbetalingsgradProsent) {
4040
if (utbetalingsgradProsent != null) {
41-
this.ytelseAnvist.setUtbetalingsgradProsent(new Stillingsprosent(utbetalingsgradProsent));
41+
this.ytelseAnvist.setUtbetalingsgradProsent(Stillingsprosent.utbetalingsgrad(utbetalingsgradProsent));
4242
}
4343
return this;
4444
}

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/YtelseGrunnlagBuilder.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,17 @@ public YtelseGrunnlagBuilder medArbeidskategori(Arbeidskategori arbeidskategori)
2424
}
2525

2626
public YtelseGrunnlagBuilder medDekningsgradProsent(BigDecimal prosent) {
27-
this.ytelseGrunnlag.setDekningsgradProsent(new Stillingsprosent(prosent));
27+
this.ytelseGrunnlag.setDekningsgradProsent(Stillingsprosent.utbetalingsgrad(prosent));
2828
return this;
2929
}
3030

3131
public YtelseGrunnlagBuilder medGraderingProsent(BigDecimal prosent) {
32-
this.ytelseGrunnlag.setGraderingProsent(new Stillingsprosent(prosent));
32+
this.ytelseGrunnlag.setGraderingProsent(Stillingsprosent.utbetalingsgrad(prosent));
3333
return this;
3434
}
3535

3636
public YtelseGrunnlagBuilder medInntektsgrunnlagProsent(BigDecimal prosent) {
37-
this.ytelseGrunnlag.setInntektsgrunnlagProsent(new Stillingsprosent(prosent));
37+
this.ytelseGrunnlag.setInntektsgrunnlagProsent(Stillingsprosent.utbetalingsgrad(prosent));
3838
return this;
3939
}
4040

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/domene/iay/inntektsmelding/Gradering.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import jakarta.persistence.ManyToOne;
1717
import jakarta.persistence.Table;
1818
import jakarta.persistence.Version;
19-
2019
import no.nav.abakus.iaygrunnlag.kodeverk.IndexKey;
2120
import no.nav.foreldrepenger.abakus.felles.diff.ChangeTracked;
2221
import no.nav.foreldrepenger.abakus.felles.diff.IndexKeyComposer;
@@ -58,7 +57,7 @@ private Gradering(IntervallEntitet periode, Stillingsprosent arbeidstidProsent)
5857
}
5958

6059
public Gradering(LocalDate fom, LocalDate tom, BigDecimal arbeidstidProsent) {
61-
this(tom == null ? IntervallEntitet.fraOgMed(fom) : IntervallEntitet.fraOgMedTilOgMed(fom, tom), new Stillingsprosent(arbeidstidProsent));
60+
this(tom == null ? IntervallEntitet.fraOgMed(fom) : IntervallEntitet.fraOgMedTilOgMed(fom, tom), Stillingsprosent.arbeid(arbeidstidProsent));
6261
}
6362

6463
Gradering(Gradering gradering) {

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/iay/tjeneste/dto/iay/MapArbeidsforholdInformasjon.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ private ArbeidsforholdOverstyringBuilder mapArbeidsforholdOverstyring(Arbeidsfor
8282
.medNyArbeidsforholdRef(nyArbeidsgiverRef)
8383
.medHandling(ov.getHandling())
8484
.medAngittArbeidsgiverNavn(ov.getAngittArbeidsgiverNavn())
85-
.medAngittStillingsprosent(new Stillingsprosent(ov.getStillingsprosent()));
85+
.medAngittStillingsprosent(Stillingsprosent.arbeid(ov.getStillingsprosent()));
8686

8787
ov.getBekreftetPermisjon().ifPresent(bp -> {
8888
BekreftetPermisjonStatus bekreftetPermisjonStatus = bp.getBekreftetPermisjonStatus();

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/arbeidsforhold/ArbeidsforholdTjeneste.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,11 @@
77
import java.util.UUID;
88
import java.util.stream.Collectors;
99

10-
import jakarta.enterprise.context.ApplicationScoped;
11-
import jakarta.inject.Inject;
12-
13-
import no.nav.foreldrepenger.abakus.typer.Stillingsprosent;
14-
1510
import org.slf4j.Logger;
1611
import org.slf4j.LoggerFactory;
1712

13+
import jakarta.enterprise.context.ApplicationScoped;
14+
import jakarta.inject.Inject;
1815
import no.nav.foreldrepenger.abakus.felles.jpa.IntervallEntitet;
1916
import no.nav.foreldrepenger.abakus.registerdata.arbeidsforhold.rest.AaregRestKlient;
2017
import no.nav.foreldrepenger.abakus.registerdata.arbeidsforhold.rest.ArbeidsavtaleRS;
@@ -25,6 +22,7 @@
2522
import no.nav.foreldrepenger.abakus.typer.AktørId;
2623
import no.nav.foreldrepenger.abakus.typer.EksternArbeidsforholdRef;
2724
import no.nav.foreldrepenger.abakus.typer.PersonIdent;
25+
import no.nav.foreldrepenger.abakus.typer.Stillingsprosent;
2826

2927
@ApplicationScoped
3028
public class ArbeidsforholdTjeneste {
@@ -126,7 +124,7 @@ private Arbeidsavtale byggAnsettelsesPeriodeRS(ArbeidsforholdRS arbeidsforhold)
126124
}
127125

128126
private Arbeidsavtale byggArbeidsavtaleRS(ArbeidsavtaleRS arbeidsavtale, ArbeidsforholdRS arbeidsforhold) {
129-
var stillingsprosent = Stillingsprosent.normaliserData(arbeidsavtale.stillingsprosent());
127+
var stillingsprosent = Stillingsprosent.normaliserStillingsprosentArbeid(arbeidsavtale.stillingsprosent());
130128
Arbeidsavtale.Builder builder = new Arbeidsavtale.Builder().medStillingsprosent(stillingsprosent)
131129
.medSisteLønnsendringsdato(arbeidsavtale.sistLoennsendring());
132130

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/infotrygd/InfotrygdgrunnlagAnvistAndelMapper.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ private static List<Mellomregninger> mapTilMellomregninger(List<InfotrygdYtelseA
260260
return utbetalinger.stream()
261261
.map(u -> new Mellomregninger(
262262
OrganisasjonsNummerValidator.erGyldig(u.getOrgnr()) ? Arbeidsgiver.virksomhet(new OrgNummer(u.getOrgnr())) : null,
263-
new Beløp(u.getDagsats()), new Stillingsprosent(u.getUtbetalingsgrad()), u.getErRefusjon() != null && u.getErRefusjon(), false,
263+
new Beløp(u.getDagsats()), Stillingsprosent.utbetalingsgrad(u.getUtbetalingsgrad()), u.getErRefusjon() != null && u.getErRefusjon(), false,
264264
u.getOrgnr() != null && Arrays.stream(Nødnummer.values()).anyMatch(n -> n.getOrgnummer().equals(u.getOrgnr()))))
265265
.toList();
266266
}

domenetjenester/kobling/src/main/java/no/nav/foreldrepenger/abakus/typer/Stillingsprosent.java

+32-9
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ public class Stillingsprosent implements Serializable, IndexKey, TraverseValue {
2424

2525
private static final RoundingMode AVRUNDINGSMODUS = RoundingMode.HALF_EVEN;
2626

27-
private static final BigDecimal MAX_VERDI = BigDecimal.valueOf(109.99d); // Bør være 100 men vil dobbelsjekke avrunding i noen tilfelle
27+
private static final BigDecimal UTBETALING_MAX_VERDI = BigDecimal.valueOf(499.99d); // Historisk absurd max
28+
29+
private static final BigDecimal ARBEID_MAX_VERDI = BigDecimal.valueOf(109.99d); // Bør være 100 men vil dobbelsjekke avrunding i noen tilfelle
2830

2931
private static final Stillingsprosent NULL_PROSENT = new Stillingsprosent(null);
3032

@@ -36,11 +38,20 @@ protected Stillingsprosent() {
3638
// for hibernate
3739
}
3840

39-
public Stillingsprosent(BigDecimal verdi) {
40-
this.verdi = normaliserData(verdi);
41+
Stillingsprosent(BigDecimal verdi) {
42+
this.verdi = absolutt(verdi);
4143
validerRange(this.verdi);
4244
}
4345

46+
public static Stillingsprosent arbeid(BigDecimal verdi) {
47+
return new Stillingsprosent(normaliserData(verdi, ARBEID_MAX_VERDI));
48+
}
49+
50+
public static Stillingsprosent utbetalingsgrad(BigDecimal verdi) {
51+
return new Stillingsprosent(normaliserData(verdi, UTBETALING_MAX_VERDI));
52+
}
53+
54+
4455
public static Stillingsprosent nullProsent() {
4556
return NULL_PROSENT;
4657
}
@@ -66,18 +77,30 @@ private BigDecimal skalertVerdi() {
6677
return verdi == null ? null : verdi.setScale(2, AVRUNDINGSMODUS);
6778
}
6879

69-
public static BigDecimal normaliserData(BigDecimal verdi) {
80+
public static BigDecimal normaliserStillingsprosentArbeid(BigDecimal verdi) {
81+
return normaliserData(verdi, ARBEID_MAX_VERDI);
82+
}
83+
84+
private static BigDecimal normaliserData(BigDecimal verdi, BigDecimal max) {
85+
verdi = absolutt(verdi);
86+
if (verdi == null) {
87+
return null;
88+
}
89+
while (verdi.compareTo(max) > 0) {
90+
LOG.info("[IAY] Prosent mer enn {}, justert verdi brukes isteden. Verdi fra AA-reg: {}", max, verdi);
91+
verdi = verdi.divide(BigDecimal.TEN, 2, AVRUNDINGSMODUS);
92+
}
93+
return verdi;
94+
}
95+
96+
private static BigDecimal absolutt(BigDecimal verdi) {
7097
if (verdi == null) {
7198
return null;
7299
}
73100
if (verdi.compareTo(BigDecimal.ZERO) < 0) {
74-
LOG.info("[IAY] Prosent (yrkesaktivitet, permisjon) mindre enn 0, absolutt verdi brukes isteden. Verdi fra AA-reg: {}", verdi);
101+
LOG.info("[IAY] Prosent mindre enn 0, absolutt verdi brukes isteden. Verdi fra AA-reg: {}", verdi);
75102
verdi = verdi.abs();
76103
}
77-
while (verdi.compareTo(MAX_VERDI) > 0) {
78-
LOG.info("[IAY] Prosent (yrkesaktivitet, permisjon) mer enn 109,99, justert verdi brukes isteden. Verdi fra AA-reg: {}", verdi);
79-
verdi = verdi.divide(BigDecimal.TEN, 2, AVRUNDINGSMODUS);
80-
}
81104
return verdi;
82105
}
83106

domenetjenester/kobling/src/test/java/no/nav/foreldrepenger/abakus/typer/StillingsprosentTest.java

+11-5
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import static org.assertj.core.api.Assertions.assertThat;
44

55
import java.math.BigDecimal;
6-
import java.math.RoundingMode;
76

87
import org.junit.jupiter.api.Test;
98

@@ -18,15 +17,22 @@ void skalReturnereAbsolutVerdiHvisMinus() {
1817
}
1918

2019
@Test
21-
void skalReturnereTidelVerdiHvisStørrereEn500() {
22-
Stillingsprosent minus = new Stillingsprosent(BigDecimal.valueOf(600));
20+
void skalReturnereTidelVerdiHvisStørrereEnn110() {
21+
Stillingsprosent minus = Stillingsprosent.arbeid(BigDecimal.valueOf(600));
2322

2423
assertThat(minus.getVerdi()).isEqualByComparingTo(BigDecimal.valueOf(60));
2524
}
2625

2726
@Test
28-
void skalReturnereTidelHvisMinusOgStørrereEn500() {
29-
Stillingsprosent minus = new Stillingsprosent(BigDecimal.valueOf(-600));
27+
void skalReturnereUtbetalingsgradVerdiHvisStørrereEnn100() {
28+
Stillingsprosent minus = Stillingsprosent.utbetalingsgrad(BigDecimal.valueOf(200));
29+
30+
assertThat(minus.getVerdi()).isEqualByComparingTo(BigDecimal.valueOf(200));
31+
}
32+
33+
@Test
34+
void skalReturnereTidelHvisMinusOgStørrereEnn110() {
35+
Stillingsprosent minus = Stillingsprosent.arbeid(BigDecimal.valueOf(-600));
3036

3137
assertThat(minus.getVerdi()).isEqualByComparingTo(BigDecimal.valueOf(60));
3238
}

domenetjenester/vedtak/src/main/java/no/nav/foreldrepenger/abakus/vedtak/domene/VedtakYtelseAndelBuilder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ public VedtakYtelseAndelBuilder medDagsats(BigDecimal dagsats) {
2626

2727
public VedtakYtelseAndelBuilder medUtbetalingsgrad(BigDecimal verdi) {
2828
if (verdi != null) {
29-
this.vedtakYtelseAndel.setUtbetalingsgradProsent(new Stillingsprosent(verdi));
29+
this.vedtakYtelseAndel.setUtbetalingsgradProsent(Stillingsprosent.utbetalingsgrad(verdi));
3030
}
3131
return this;
3232
}
3333

3434
public VedtakYtelseAndelBuilder medRefusjonsgrad(BigDecimal verdi) {
3535
if (verdi != null) {
36-
this.vedtakYtelseAndel.setRefusjonsgradProsent(new Stillingsprosent(verdi));
36+
this.vedtakYtelseAndel.setRefusjonsgradProsent(Stillingsprosent.utbetalingsgrad(verdi));
3737
}
3838
return this;
3939
}

domenetjenester/vedtak/src/main/java/no/nav/foreldrepenger/abakus/vedtak/domene/YtelseAnvistBuilder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public YtelseAnvistBuilder leggTilFordeling(VedtakYtelseAndelBuilder vedtakYtels
4343

4444
public YtelseAnvistBuilder medUtbetalingsgradProsent(BigDecimal utbetalingsgradProsent) {
4545
if (utbetalingsgradProsent != null) {
46-
this.ytelseAnvist.setUtbetalingsgradProsent(new Stillingsprosent(utbetalingsgradProsent));
46+
this.ytelseAnvist.setUtbetalingsgradProsent(Stillingsprosent.utbetalingsgrad(utbetalingsgradProsent));
4747
}
4848
return this;
4949
}

0 commit comments

Comments
 (0)