@@ -32,6 +32,7 @@ import no.nav.dagpenger.inntekt.db.StoreInntektCommand
32
32
import no.nav.dagpenger.inntekt.db.StoredInntektMedMetadata
33
33
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.AktoerType
34
34
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentRequest
35
+ import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentResponse
35
36
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektskomponentClient
36
37
import no.nav.dagpenger.inntekt.mapping.GUIInntekt
37
38
import no.nav.dagpenger.inntekt.mapping.Inntektsmottaker
@@ -294,55 +295,59 @@ fun Route.uklassifisertInntekt(
294
295
val inntektId = InntektId (call.parameters[" inntektId" ]!! )
295
296
logger.info { " Henter nye inntekt for $inntektId " }
296
297
297
- call.withInntektRequest(" GET /uklassifisert/uncached/" ) {
298
- inntektStore
299
- .getStoredInntektMedMetadata(inntektId)
300
- .let { storedInntektMedMetadata ->
301
- logger.info { " Henter stored inntekt: ${storedInntektMedMetadata.inntektId} " }
302
- val person = personOppslag.hentPerson(storedInntektMedMetadata.fødselsnummer)
303
- val opptjeningsperiode = Opptjeningsperiode (storedInntektMedMetadata.beregningsdato)
298
+ inntektStore
299
+ .getStoredInntektMedMetadata(inntektId)
300
+ .let { storedInntektMedMetadata ->
301
+ logger.info { " Henter stored inntekt: ${storedInntektMedMetadata.inntektId} " }
302
+ val person = personOppslag.hentPerson(storedInntektMedMetadata.fødselsnummer)
303
+ val opptjeningsperiode = Opptjeningsperiode (storedInntektMedMetadata.beregningsdato)
304
304
305
- toInntektskomponentRequest(person, opptjeningsperiode)
306
- .let {
307
- logger.info { " Henter nye inntekter fra inntektskomponenten" }
308
- inntektskomponentClient.getInntekt(it, callId = callId)
309
- }.let {
310
- logger.info { " Fikk nye inntekter fra inntektskomponenten" }
311
- val inntektsmottaker =
312
- Inntektsmottaker (person.fødselsnummer, person.sammensattNavn())
313
- val organisasjoner =
314
- hentOrganisasjoner(
315
- enhetsregisterClient,
316
- it.arbeidsInntektMaaned
317
- ?.flatMap { it.arbeidsInntektInformasjon?.inntektListe.orEmpty() }
318
- ?.filter { inntekt ->
319
- inntekt.virksomhet?.aktoerType == AktoerType .ORGANISASJON &&
320
- (inntekt.opptjeningsland == " NO" || inntekt.opptjeningsland == null )
321
- }?.mapNotNull { it.virksomhet?.identifikator }
322
- ?.toTypedArray()
323
- ?.toList() ? : emptyList(),
324
- )
305
+ toInntektskomponentRequest(person, opptjeningsperiode)
306
+ .let {
307
+ logger.info { " Henter nye inntekter fra inntektskomponenten" }
308
+ inntektskomponentClient.getInntekt(it, callId = callId)
309
+ }.let {
310
+ logger.info { " Fikk nye inntekter fra inntektskomponenten" }
311
+ val inntektsmottaker =
312
+ Inntektsmottaker (person.fødselsnummer, person.sammensattNavn())
313
+ val organisasjoner =
314
+ hentOrganisasjoner(
315
+ enhetsregisterClient,
316
+ it.arbeidsInntektMaaned
317
+ ?.flatMap { it.arbeidsInntektInformasjon?.inntektListe.orEmpty() }
318
+ ?.filter { inntekt ->
319
+ inntekt.virksomhet?.aktoerType == AktoerType .ORGANISASJON &&
320
+ (inntekt.opptjeningsland == " NO" || inntekt.opptjeningsland == null )
321
+ }?.mapNotNull { it.virksomhet?.identifikator }
322
+ ?.toTypedArray()
323
+ ?.toList() ? : emptyList(),
324
+ )
325
325
326
- it.mapToFrontend(
327
- person = inntektsmottaker,
328
- organisasjoner = organisasjoner,
329
- storedInntektMedMetadata =
330
- StoredInntektMedMetadata (
331
- inntektId = inntektId,
332
- fødselsnummer = storedInntektMedMetadata.fødselsnummer,
333
- inntekt = it,
334
- manueltRedigert = false ,
335
- timestamp = storedInntektMedMetadata.timestamp,
336
- beregningsdato = storedInntektMedMetadata.beregningsdato,
337
- storedInntektPeriode = storedInntektMedMetadata.storedInntektPeriode,
338
- begrunnelse = " " ,
339
- ),
326
+ val kombinerFraInntektskomponentenOgStoredInntekt =
327
+ kombinerInntektFraInntektskomponentenOgStoredInntekt(
328
+ it,
329
+ storedInntektMedMetadata.inntekt,
340
330
)
341
- }.let {
342
- call.respond(HttpStatusCode .OK , it)
343
- }.also { inntektOppfriskingCounter.inc() }
344
- } ? : throw InntektNotFoundException (" Inntekt with id $inntektId not found." )
345
- }
331
+
332
+ it.mapToFrontend(
333
+ person = inntektsmottaker,
334
+ organisasjoner = organisasjoner,
335
+ storedInntektMedMetadata =
336
+ StoredInntektMedMetadata (
337
+ inntektId = inntektId,
338
+ fødselsnummer = storedInntektMedMetadata.fødselsnummer,
339
+ inntekt = kombinerFraInntektskomponentenOgStoredInntekt,
340
+ manueltRedigert = false ,
341
+ timestamp = storedInntektMedMetadata.timestamp,
342
+ beregningsdato = storedInntektMedMetadata.beregningsdato,
343
+ storedInntektPeriode = storedInntektMedMetadata.storedInntektPeriode,
344
+ begrunnelse = storedInntektMedMetadata.begrunnelse,
345
+ ),
346
+ )
347
+ }.let {
348
+ call.respond(HttpStatusCode .OK , it)
349
+ }.also { inntektOppfriskingCounter.inc() }
350
+ } ? : throw InntektNotFoundException (" Inntekt with id $inntektId not found." )
346
351
}
347
352
}
348
353
}
@@ -354,6 +359,77 @@ fun Route.uklassifisertInntekt(
354
359
}
355
360
}
356
361
362
+ fun kombinerInntektFraInntektskomponentenOgStoredInntekt (
363
+ inntektKomponentFraAInntekt : InntektkomponentResponse ,
364
+ inntektKomponentFraDB : InntektkomponentResponse ,
365
+ ): InntektkomponentResponse {
366
+ var inntektMånederFraAInntekt = inntektKomponentFraAInntekt.arbeidsInntektMaaned ? : emptyList()
367
+
368
+ inntektKomponentFraDB.arbeidsInntektMaaned?.map { storedInntektMåned ->
369
+ val inntektKomponentMåned = inntektMånederFraAInntekt.find { it.aarMaaned == storedInntektMåned.aarMaaned }
370
+ if (inntektKomponentMåned != null ) {
371
+ inntektKomponentMåned.arbeidsInntektInformasjon?.inntektListe.orEmpty().forEach { inntekt ->
372
+ val matchIndex =
373
+ storedInntektMåned.arbeidsInntektInformasjon
374
+ ?.inntektListe
375
+ ?.indexOfFirst {
376
+ it.virksomhet?.identifikator == inntekt.virksomhet?.identifikator &&
377
+ it.utbetaltIMaaned == inntekt.utbetaltIMaaned &&
378
+ it.beskrivelse == inntekt.beskrivelse
379
+ }
380
+ if (matchIndex != null && matchIndex >= 0 ) {
381
+ storedInntektMåned.arbeidsInntektInformasjon.inntektListe.let {
382
+ it.toMutableList()[matchIndex] = inntekt
383
+ }
384
+ }
385
+ }
386
+ inntektMånederFraAInntekt = inntektMånederFraAInntekt.filter { it.aarMaaned != storedInntektMåned.aarMaaned }
387
+ }
388
+ }
389
+
390
+ inntektKomponentFraDB.copy(
391
+ arbeidsInntektMaaned =
392
+ (inntektKomponentFraDB.arbeidsInntektMaaned ? : emptyList()) +
393
+ inntektMånederFraAInntekt.map {
394
+ it.copy(
395
+ arbeidsInntektInformasjon = it.arbeidsInntektInformasjon?.copy(inntektListe = emptyList()),
396
+ )
397
+ },
398
+ )
399
+
400
+ return inntektKomponentFraDB
401
+ }
402
+
403
+ fun kombinerInntektFraInntektskomponentenOgStoredInntekt2 (
404
+ inntektKomponentFraAInntekt : InntektkomponentResponse ,
405
+ inntektKomponentFraDB : InntektkomponentResponse ,
406
+ ): InntektkomponentResponse {
407
+ val inntektMånederFraAInntekt = inntektKomponentFraAInntekt.arbeidsInntektMaaned ? : emptyList()
408
+
409
+ inntektMånederFraAInntekt.forEach {
410
+ inntektKomponentFraDB.arbeidsInntektMaaned
411
+ ?.find { inntektFraDb ->
412
+ inntektFraDb.aarMaaned == it.aarMaaned
413
+ }?.let { storedInntektMåned ->
414
+ it.arbeidsInntektInformasjon?.inntektListe?.forEach { inntekt ->
415
+ val matchIndex =
416
+ storedInntektMåned.arbeidsInntektInformasjon
417
+ ?.inntektListe
418
+ ?.indexOfFirst {
419
+ it.virksomhet?.identifikator == inntekt.virksomhet?.identifikator &&
420
+ it.utbetaltIMaaned == inntekt.utbetaltIMaaned &&
421
+ it.beskrivelse == inntekt.beskrivelse
422
+ }
423
+ if (matchIndex != null && matchIndex >= 0 ) {
424
+ storedInntektMåned.arbeidsInntektInformasjon.inntektListe.toMutableList()[matchIndex] = inntekt
425
+ }
426
+ }
427
+ }
428
+ }
429
+
430
+ return inntektKomponentFraDB
431
+ }
432
+
357
433
private suspend fun hentOrganisasjoner (
358
434
enhetsregisterClient : EnhetsregisterClient ,
359
435
organisasjonsNummerListe : List <String >? ,
0 commit comments