3
3
import static java .time .temporal .ChronoUnit .YEARS ;
4
4
5
5
import java .math .BigDecimal ;
6
+ import java .time .LocalDate ;
6
7
import java .time .Month ;
7
8
import java .time .MonthDay ;
8
9
import java .time .Year ;
@@ -48,23 +49,26 @@ public Map<IntervallEntitet, Map<InntektspostType, BigDecimal>> hentPensjonsgive
48
49
}
49
50
50
51
private List <PgiFolketrygdenResponse > pensjonsgivendeInntektForFolketrygden (String fnr , IntervallEntitet opplysningsperiode ) {
51
- var senesteÅr = utledSenesteÅr (opplysningsperiode );
52
+ var senesteDato = utledSeneste (opplysningsperiode );
52
53
List <PgiFolketrygdenResponse > svarene = new ArrayList <>();
53
- var svarSenesteÅr = svarForSenesteÅr (fnr , senesteÅr );
54
+ var svarSenesteÅr = svarForSenesteÅr (fnr , Year . from ( senesteDato ) );
54
55
svarSenesteÅr .ifPresent (svarene ::add );
55
- utledTidligereÅr (opplysningsperiode , senesteÅr , svarSenesteÅr .isPresent ())
56
+ utledTidligereÅr (opplysningsperiode , senesteDato , svarSenesteÅr .isPresent ())
56
57
.forEach (år -> sigrunConsumer .hentPensjonsgivendeInntektForFolketrygden (fnr , år ).ifPresent (svarene ::add ));
57
58
return svarene ;
58
59
}
59
60
60
- private Year utledSenesteÅr (IntervallEntitet opplysningsperiode ) {
61
- var ifjor = Year .now ().minusYears (1 );
62
- var oppgitt = opplysningsperiode != null ? Year .from (opplysningsperiode .getTomDato ()) : ifjor ;
63
- return oppgitt .isAfter (ifjor ) ? ifjor : oppgitt ;
61
+ private LocalDate utledSeneste (IntervallEntitet opplysningsperiode ) {
62
+ var ifjor = LocalDate .now ().minusYears (1 );
63
+ var oppgitt = opplysningsperiode != null ? opplysningsperiode .getTomDato () : ifjor ;
64
+ // Ikke senere år enn i fjor
65
+ return oppgitt .getYear () > ifjor .getYear () ? ifjor : oppgitt ;
64
66
}
65
67
66
68
public Optional <PgiFolketrygdenResponse > svarForSenesteÅr (String fnr , Year senesteÅr ) {
67
- if (Year .now ().minusYears (1 ).equals (senesteÅr ) && MonthDay .now ().isBefore (TIDLIGSTE_SJEKK_FJOR )) {
69
+ // Venter ikke svar før i fjor og ikke før etter TIDLIGSTE_SJEKK_FJOR
70
+ var ifjor = Year .now ().minusYears (1 );
71
+ if (senesteÅr .isAfter (ifjor ) || (ifjor .equals (senesteÅr ) && MonthDay .now ().isBefore (TIDLIGSTE_SJEKK_FJOR ))) {
68
72
return Optional .empty ();
69
73
}
70
74
try {
@@ -74,8 +78,9 @@ private List<PgiFolketrygdenResponse> pensjonsgivendeInntektForFolketrygden(Stri
74
78
}
75
79
}
76
80
77
- private List <Year > utledTidligereÅr (IntervallEntitet opplysningsperiode , Year senesteÅr , boolean harDataSenesteÅr ) {
78
- long periodeLengde = opplysningsperiode != null ? YEARS .between (opplysningsperiode .getFomDato (), opplysningsperiode .getTomDato ()) : 2L ;
81
+ private List <Year > utledTidligereÅr (IntervallEntitet opplysningsperiode , LocalDate senesteDato , boolean harDataSenesteÅr ) {
82
+ var senesteÅr = Year .from (senesteDato );
83
+ long periodeLengde = opplysningsperiode != null ? periodeLengde (opplysningsperiode , senesteDato ) : 2L ;
79
84
var tidligsteÅr = opplysningsperiode != null ? Year .from (opplysningsperiode .getFomDato ()) : senesteÅr .minusYears (2 );
80
85
var fraTidligsteÅr = harDataSenesteÅr || periodeLengde > 2L ? tidligsteÅr : tidligsteÅr .minusYears (1 );
81
86
if (fraTidligsteÅr .isBefore (FØRSTE_PGI )) {
@@ -89,4 +94,9 @@ private List<PgiFolketrygdenResponse> pensjonsgivendeInntektForFolketrygden(Stri
89
94
return årene .stream ().sorted (Comparator .reverseOrder ()).toList ();
90
95
}
91
96
97
+ private long periodeLengde (IntervallEntitet opplysningsperiode , LocalDate senesteDato ) {
98
+ var lengde = YEARS .between (opplysningsperiode .getFomDato (), senesteDato );
99
+ return lengde >= 2 ? lengde : 2 ;
100
+ }
101
+
92
102
}
0 commit comments