Skip to content

Commit b96a5a5

Browse files
authored
TFP-1891 Lage nye andeler for arbeidsforhold som søker ytelse etter skjæringstidspunktet (#18)
1 parent bbe04e7 commit b96a5a5

File tree

3 files changed

+120
-9
lines changed

3 files changed

+120
-9
lines changed

src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/perioder/FastsettPeriodeRegel.java

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,10 @@ private static List<SplittetPeriode> periodiserBeregningsgrunnlag(PeriodeModell
3838
// lag alle periodene, med riktige andeler
3939
Map<LocalDate, Set<PeriodeSplittData>> periodeMap = identifisertePeriodeÅrsaker.getPeriodeMap();
4040

41-
4241
List<Map.Entry<LocalDate, Set<PeriodeSplittData>>> entries = new ArrayList<>(periodeMap.entrySet());
4342

4443
ListIterator<Map.Entry<LocalDate, Set<PeriodeSplittData>>> listIterator = entries.listIterator();
4544

46-
4745
List<SplittetPeriode> list = new ArrayList<>();
4846
while (listIterator.hasNext()) {
4947
Map.Entry<LocalDate, Set<PeriodeSplittData>> entry = listIterator.next();
@@ -70,6 +68,12 @@ private static List<SplittetPeriode> periodiserBeregningsgrunnlag(PeriodeModell
7068
.map(FastsettPeriodeRegel::mapSplittetAndelFLSN)
7169
.collect(Collectors.toList()));
7270

71+
nyeAndeler.addAll(input.getEndringerISøktYtelse().stream()
72+
.filter(AndelGradering::erNyAktivitet)
73+
.filter(andel -> harUtbetalingIPeriode(andel, periodeFom))
74+
.map(gradering -> mapSplittetAndel(gradering, periodeFom))
75+
.collect(Collectors.toList()));
76+
7377
LocalDate tom = utledPeriodeTom(entries, listIterator);
7478
Periode periode = new Periode(periodeFom, tom);
7579
SplittetPeriode splittetPeriode = SplittetPeriode.builder()
@@ -83,6 +87,10 @@ private static List<SplittetPeriode> periodiserBeregningsgrunnlag(PeriodeModell
8387
return list;
8488
}
8589

90+
private static boolean harUtbetalingIPeriode(AndelGradering andel, LocalDate periodeFom) {
91+
return andel.getGraderinger().stream().anyMatch(g -> g.getPeriode().inneholder(periodeFom) & g.getUtbetalingsprosent().compareTo(BigDecimal.ZERO) > 0);
92+
}
93+
8694
private static LocalDate utledPeriodeTom(List<Map.Entry<LocalDate, Set<PeriodeSplittData>>> entries, ListIterator<Map.Entry<LocalDate, Set<PeriodeSplittData>>> listIterator) {
8795
return listIterator.hasNext() ?
8896
entries.get(listIterator.nextIndex()).getKey().minusDays(1) :
@@ -114,15 +122,33 @@ private static SplittetAndel mapSplittetAndel(ArbeidsforholdOgInntektsmelding im
114122

115123
Periode ansettelsesPeriode = im.getAnsettelsesperiode();
116124

117-
return SplittetAndel.builder()
118-
.medAktivitetstatus(im.getAktivitetStatus())
119-
.medArbeidsforhold(im.getArbeidsforhold())
120-
.medRefusjonskravPrÅr(refusjonPrÅr)
121-
.medArbeidsperiodeFom(ansettelsesPeriode.getFom())
122-
.medArbeidsperiodeTom(ansettelsesPeriode.getTom())
123-
.build();
125+
SplittetAndel.Builder builder = SplittetAndel.builder()
126+
.medAktivitetstatus(im.getAktivitetStatus())
127+
.medArbeidsforhold(im.getArbeidsforhold())
128+
.medRefusjonskravPrÅr(refusjonPrÅr);
129+
settAnsettelsesPeriodeHvisFinnes(ansettelsesPeriode, builder);
130+
return builder.build();
131+
}
132+
133+
private static SplittetAndel mapSplittetAndel(AndelGradering gradering, LocalDate periodeFom) {
134+
Periode ansettelsesPeriode = gradering.getArbeidsforhold().getAnsettelsesPeriode();
135+
136+
SplittetAndel.Builder builder = SplittetAndel.builder()
137+
.medAktivitetstatus(gradering.getAktivitetStatus())
138+
.medArbeidsforhold(gradering.getArbeidsforhold());
139+
settAnsettelsesPeriodeHvisFinnes(ansettelsesPeriode, builder);
140+
return builder.build();
124141
}
125142

143+
private static void settAnsettelsesPeriodeHvisFinnes(Periode ansettelsesPeriode, SplittetAndel.Builder builder) {
144+
if (ansettelsesPeriode != null) {
145+
builder
146+
.medArbeidsperiodeFom(ansettelsesPeriode.getFom())
147+
.medArbeidsperiodeTom(ansettelsesPeriode.getTom());
148+
}
149+
}
150+
151+
126152
private static BeregningsgrunnlagPrArbeidsforhold mapToArbeidsforhold(ArbeidsforholdOgInntektsmelding im, LocalDate fom) {
127153
Optional<BigDecimal> refusjonskravPrÅr = im.getGyldigeRefusjonskrav().stream()
128154
.filter(refusjon -> refusjon.getPeriode().inneholder(fom))

src/main/java/no/nav/folketrygdloven/beregningsgrunnlag/regelmodell/grunnlag/inntekt/Arbeidsforhold.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.grunnlag.inntekt;
22

33
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.Aktivitet;
4+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.Periode;
45

56
import java.util.Objects;
67

@@ -10,6 +11,7 @@ public class Arbeidsforhold {
1011
private String arbeidsforholdId;
1112
private String aktørId;
1213
private ReferanseType referanseType;
14+
private Periode ansettelsesPeriode;
1315

1416
private Arbeidsforhold() {
1517
}
@@ -38,6 +40,10 @@ public ReferanseType getReferanseType() {
3840
return referanseType;
3941
}
4042

43+
public Periode getAnsettelsesPeriode() {
44+
return ansettelsesPeriode;
45+
}
46+
4147
@Override
4248
public boolean equals(Object annet) {
4349
if (!(annet instanceof Arbeidsforhold)) {
@@ -69,13 +75,21 @@ public static Builder builder() {
6975
return new Builder();
7076
}
7177

78+
public static Builder builder(Arbeidsforhold arbeidsforhold) {
79+
return new Builder(arbeidsforhold);
80+
}
81+
7282
public static class Builder {
7383
private Arbeidsforhold arbeidsforhold;
7484

7585
private Builder() {
7686
arbeidsforhold = new Arbeidsforhold();
7787
}
7888

89+
private Builder(Arbeidsforhold arbeidsforhold) {
90+
this.arbeidsforhold = arbeidsforhold;
91+
}
92+
7993
public Builder medOrgnr(String orgnr) {
8094
verifiserReferanseType();
8195
arbeidsforhold.orgnr = orgnr;
@@ -100,6 +114,11 @@ public Builder medAktivitet(Aktivitet aktivitet) {
100114
return this;
101115
}
102116

117+
public Builder medAnsettelsesPeriode(Periode periode) {
118+
arbeidsforhold.ansettelsesPeriode = periode;
119+
return this;
120+
}
121+
103122
public Arbeidsforhold build() {
104123
verifyForBuild();
105124
return arbeidsforhold;
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package no.nav.folketrygdloven.beregningsgrunnlag.perioder;
2+
3+
4+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
5+
6+
import java.math.BigDecimal;
7+
import java.time.LocalDate;
8+
import java.util.List;
9+
10+
import org.junit.jupiter.api.Test;
11+
12+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.Aktivitet;
13+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatusV2;
14+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AndelGradering;
15+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AndelGraderingImpl;
16+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.BruttoBeregningsgrunnlag;
17+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.Gradering;
18+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.Periode;
19+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.PeriodeModell;
20+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.PeriodisertBruttoBeregningsgrunnlag;
21+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.grunnlag.inntekt.Arbeidsforhold;
22+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.resultat.BeregningsgrunnlagPrArbeidsforhold;
23+
import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.resultat.SplittetPeriode;
24+
25+
class FastsettPeriodeRegelTest {
26+
27+
private static final LocalDate SKJÆRINGSTIDSPUNKT = LocalDate.now();
28+
private static final String ORGNR = "1234657";
29+
private static final String ORGNR2 = "89729572935";
30+
31+
@Test
32+
void skalLageNyAndelForSVPForArbeidsforholdMedSøktYtelseFraSTP() {
33+
34+
Arbeidsforhold arbeidsforhold2 = Arbeidsforhold.builder().medAktivitet(Aktivitet.ARBEIDSTAKERINNTEKT).medOrgnr(ORGNR2)
35+
.medAnsettelsesPeriode(Periode.of(SKJÆRINGSTIDSPUNKT, SKJÆRINGSTIDSPUNKT.plusMonths(12))).build();
36+
PeriodeModell inputMedGraderingFraStartForNyttArbeid = lagPeriodeInputMedEnAndelFraStart()
37+
.medEndringISøktYtelse(lagGraderingFraSkjæringstidspunkt(arbeidsforhold2))
38+
.build();
39+
List<SplittetPeriode> perioder = FastsettPeriodeRegel.fastsett(inputMedGraderingFraStartForNyttArbeid);
40+
assertThat(perioder.size()).isEqualTo(1);
41+
assertThat(perioder.get(0).getNyeAndeler().size()).isEqualTo(1);
42+
}
43+
44+
private List<AndelGradering> lagGraderingFraSkjæringstidspunkt(Arbeidsforhold arbeidsforhold2) {
45+
return List.of(AndelGraderingImpl.builder().medAktivitetStatus(AktivitetStatusV2.AT).medArbeidsforhold(arbeidsforhold2).medGraderinger(List.of(new Gradering(Periode.of(SKJÆRINGSTIDSPUNKT, SKJÆRINGSTIDSPUNKT.plusMonths(1)), BigDecimal.valueOf(50)))).build());
46+
}
47+
48+
private PeriodeModell.Builder lagPeriodeInputMedEnAndelFraStart() {
49+
Arbeidsforhold arbeidsforhold = Arbeidsforhold.builder().medAktivitet(Aktivitet.ARBEIDSTAKERINNTEKT)
50+
.medAnsettelsesPeriode(Periode.of(SKJÆRINGSTIDSPUNKT.minusMonths(12), SKJÆRINGSTIDSPUNKT.plusMonths(12))).medOrgnr(ORGNR).build();
51+
BruttoBeregningsgrunnlag bruttoBeregningsgrunnlag = BruttoBeregningsgrunnlag.builder().medAktivitetStatus(AktivitetStatusV2.AT).medBruttoBeregningsgrunnlag(BigDecimal.valueOf(500_000)).medArbeidsforhold(arbeidsforhold).build();
52+
PeriodisertBruttoBeregningsgrunnlag periodisertBruttoBeregningsgrunnlag = PeriodisertBruttoBeregningsgrunnlag.builder()
53+
.medPeriode(Periode.of(SKJÆRINGSTIDSPUNKT, null))
54+
.leggTilBruttoBeregningsgrunnlag(bruttoBeregningsgrunnlag)
55+
.build();
56+
return PeriodeModell.builder()
57+
.medGrunnbeløp(BigDecimal.valueOf(90_000))
58+
.medSkjæringstidspunkt(SKJÆRINGSTIDSPUNKT)
59+
.medPeriodisertBruttoBeregningsgrunnlag(List.of(periodisertBruttoBeregningsgrunnlag))
60+
.medEksisterendePerioder(List.of(SplittetPeriode.builder()
61+
.medPeriodeÅrsaker(List.of())
62+
.medFørstePeriodeAndeler(List.of(BeregningsgrunnlagPrArbeidsforhold.builder().medArbeidsforhold(arbeidsforhold).medAndelNr(1L).build()))
63+
.medPeriode(Periode.of(SKJÆRINGSTIDSPUNKT, null))
64+
.build()));
65+
}
66+
}

0 commit comments

Comments
 (0)