28
28
import java .util .List ;
29
29
import java .util .Set ;
30
30
31
+ import static java .util .Objects .isNull ;
32
+ import static java .util .Objects .nonNull ;
31
33
import static no .nav .dolly .bestilling .pensjonforvalter .utils .PensjonforvalterUtils .IDENT ;
32
34
import static no .nav .dolly .bestilling .pensjonforvalter .utils .PensjonforvalterUtils .MILJOER ;
33
35
import static no .nav .dolly .bestilling .pensjonforvalter .utils .PensjonforvalterUtils .NAV_ENHET ;
36
38
import static no .nav .dolly .bestilling .pensjonforvalter .utils .PensjonforvalterUtils .PEN_UFORETRYGD ;
37
39
import static no .nav .dolly .bestilling .pensjonforvalter .utils .PensjonforvalterUtils .getStatus ;
38
40
import static no .nav .dolly .bestilling .pensjonforvalter .utils .PensjonforvalterUtils .hasVedtak ;
39
- import static no .nav .dolly .domain .resultset .SystemTyper .PEN_AP ;
40
- import static no .nav .dolly .domain .resultset .SystemTyper .PEN_UT ;
41
41
import static org .apache .commons .lang3 .BooleanUtils .isTrue ;
42
42
43
43
@ Slf4j
@@ -119,8 +119,9 @@ private Flux<PensjonforvalterResponse> lagreAlderspensjon(PensjonData pensjonDat
119
119
Flux .fromIterable (response .getStatus ())
120
120
.filter (status -> status .getResponse ().isResponse2xx ())
121
121
.flatMap (status ->
122
- pensjonforvalterHelper .saveAPTransaksjonId (ident , status .getMiljo (), bestillingId ,
123
- PEN_AP , pensjonRequest ))
122
+ pensjonforvalterHelper .saveAPTransaksjonId (ident ,
123
+ status .getMiljo (), bestillingId ,
124
+ pensjonRequest ))
124
125
.then (Mono .just (response )));
125
126
126
127
} else {
@@ -151,8 +152,9 @@ private Flux<PensjonforvalterResponse> lagreUforetrygd(PensjonData pensjondata,
151
152
.flatMap (response -> Flux .fromIterable (response .getStatus ())
152
153
.filter (status -> status .getResponse ().isResponse2xx ())
153
154
.flatMap (status ->
154
- pensjonforvalterHelper .saveAPTransaksjonId (ident , status .getMiljo (), bestillingId ,
155
- PEN_UT , request ))
155
+ pensjonforvalterHelper .saveUTTransaksjonId (ident ,
156
+ status .getMiljo (), bestillingId ,
157
+ request ))
156
158
.then (Mono .just (response ))));
157
159
158
160
} else {
@@ -169,7 +171,8 @@ private Flux<PensjonforvalterResponse> lagreNyVurdering(PensjonData pensjondata,
169
171
}
170
172
171
173
return Flux .fromIterable (miljoer )
172
- .flatMap (miljoe -> pensjonforvalterHelper .hentSisteVedtakAP (ident , miljoe )
174
+ .flatMap (miljoe -> pensjonforvalterHelper .hentForrigeVedtakAP (ident , miljoe ,
175
+ pensjondata .getAlderspensjonNyUtaksgrad ().getFom ())
173
176
.flatMap (vedtak -> {
174
177
var context = new MappingContext .Factory ().getContext ();
175
178
context .setProperty (ALDERSPENSJON_VEDTAK , vedtak );
@@ -178,37 +181,55 @@ private Flux<PensjonforvalterResponse> lagreNyVurdering(PensjonData pensjondata,
178
181
AlderspensjonNyUtaksgradRequest .class , context ))
179
182
.zipWith (Mono .just (vedtak ));
180
183
})
181
- .flatMapMany (tuple ->
182
- isValid (tuple .getT1 (), tuple .getT2 ()) ?
183
- pensjonforvalterConsumer .lagreAPNyUttaksgrad (tuple .getT1 ())
184
- . zipWith ( Mono . just ( tuple . getT1 () ))
185
- .flatMap ( tuple2 -> Flux . fromIterable ( tuple2 . getT1 (). getStatus ())
186
- . filter (status -> status . getResponse (). isResponse2xx ())
187
- . flatMap ( status ->
184
+ .flatMapMany (tuple -> {
185
+ if ( isValid (tuple .getT1 (), tuple .getT2 ())) {
186
+ return pensjonforvalterConsumer .lagreAPNyUttaksgrad (tuple .getT1 ())
187
+ . flatMap ( response -> Flux . fromIterable ( response . getStatus ( ))
188
+ .filter ( status -> status . getResponse (). isResponse2xx ())
189
+ . flatMap (status ->
190
+ isNoMatch ( tuple . getT2 (), tuple . getT1 ()) ?
188
191
pensjonforvalterHelper .saveTransaksjonId (ident , status .getMiljo (), bestilling .getId (),
189
- SystemTyper .PEN_AP_NY_UTTAKSGRAD , tuple2 .getT2 ())
190
- .thenReturn (tuple2 .getT1 ()))) :
191
- miscRevurderingResponse (tuple .getT1 (), tuple .getT2 (), miljoe , isUpdateEndre )));
192
+ SystemTyper .PEN_AP_NY_UTTAKSGRAD , tuple .getT1 ())
193
+ .thenReturn (response ) :
194
+ Mono .just (response )));
195
+ } else {
196
+ return miscRevurderingResponse (tuple .getT1 (), tuple .getT2 (), miljoe , isUpdateEndre );
197
+ }
198
+ }));
199
+ }
200
+
201
+ private static boolean isNoMatch (AlderspensjonVedtakDTO response , AlderspensjonNyUtaksgradRequest request ) {
202
+
203
+ return !(response .getFom ().equals (request .getFom ()) &&
204
+ response .getUttaksgrad ().equals (request .getNyUttaksgrad ())) &&
205
+ response .getHistorikk ().stream ()
206
+ .noneMatch (historikk ->
207
+ historikk .getFom ().equals (request .getFom ()) &&
208
+ historikk .getUttaksgrad ().equals (request .getNyUttaksgrad ()));
192
209
}
193
210
194
211
private static boolean isValid (AlderspensjonNyUtaksgradRequest request , AlderspensjonVedtakDTO response ) {
195
212
196
- return request .getFom ().isAfter (response .getFom ()) &&
213
+ return nonNull (response .getFom ()) &&
214
+ request .getFom ().isAfter (response .getFom ()) &&
197
215
(request .getNyUttaksgrad ().equals (0 ) || request .getNyUttaksgrad ().equals (100 ) ||
198
216
Period .between (response .getDatoForrigeGraderteUttak (), request .getFom ()).getYears () >= 1 );
199
217
}
200
218
201
219
private static Mono <PensjonforvalterResponse > miscRevurderingResponse (AlderspensjonNyUtaksgradRequest request ,
202
- AlderspensjonVedtakDTO response , String miljoe ,
220
+ AlderspensjonVedtakDTO response , String miljoe ,
203
221
boolean isUpdateEndre ) {
204
222
205
223
String message ;
206
- if (isUpdateEndre && request .getFom ().isBefore (response .getFom ())) {
207
- message = "Automatisk vedtak av ny uttaksgrad ikke mulig for dato tidligere enn dato på forrige vedtak." ;
224
+ if (isNull (response .getFom ())) {
225
+ message = "Uttaksgrad kan ikke endres da vedtak for alderspensjon mangler." ;
226
+
227
+ }else if (isUpdateEndre && request .getFom ().isBefore (response .getFom ())) {
228
+ message = "Automatisk vedtak av ny uttaksgrad ikke mulig for dato tidligere enn dato på forrige vedtak." ;
208
229
209
- } else if (isUpdateEndre && !request .getNyUttaksgrad ().equals (0 ) && !request .getNyUttaksgrad ().equals (100 ) &&
210
- Period .between (response .getDatoForrigeGraderteUttak (), request .getFom ()).getYears () < 1 ) {
211
- message = "Automatisk vedtak med gradert uttak ikke mulig oftere enn hver 12 måned." ;
230
+ } else if (isUpdateEndre && !request .getNyUttaksgrad ().equals (0 ) && !request .getNyUttaksgrad ().equals (100 ) &&
231
+ Period .between (response .getDatoForrigeGraderteUttak (), request .getFom ()).getYears () < 1 ) {
232
+ message = "Automatisk vedtak med gradert uttak ikke mulig oftere enn hver 12 måned." ;
212
233
213
234
} else {
214
235
return Mono .empty ();
@@ -222,7 +243,7 @@ private static Mono<PensjonforvalterResponse> miscRevurderingResponse(Alderspens
222
243
.build ())
223
244
.message (message )
224
245
.build ())
225
- .miljo (miljoe )
246
+ .miljo (miljoe )
226
247
.build ()))
227
248
.build ());
228
249
}
0 commit comments