@@ -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,89 @@ fun Route.uklassifisertInntekt(
354
359
}
355
360
}
356
361
362
+ fun kombinerInntektFraInntektskomponentenOgStoredInntekt (
363
+ inntektKomponentFraAInntekt : InntektkomponentResponse ,
364
+ inntektKomponentFraDB : InntektkomponentResponse ,
365
+ ): InntektkomponentResponse {
366
+ logger.info { " Kombinerer data fra A-Inntekt og fra databasen" }
367
+ var inntektMånederFraAInntekt = inntektKomponentFraAInntekt.arbeidsInntektMaaned ? : emptyList()
368
+
369
+ logger.info(" Antall fra A-Inntekt: ${inntektMånederFraAInntekt.size} " )
370
+ logger.info(" Antall fra Db: ${inntektKomponentFraDB.arbeidsInntektMaaned?.size ? : 0 } " )
371
+
372
+ inntektKomponentFraDB.arbeidsInntektMaaned?.map { storedInntektMåned ->
373
+ val inntektKomponentMåned = inntektMånederFraAInntekt.find { it.aarMaaned == storedInntektMåned.aarMaaned }
374
+ if (inntektKomponentMåned != null ) {
375
+ inntektKomponentMåned.arbeidsInntektInformasjon?.inntektListe.orEmpty().forEach { inntekt ->
376
+ val matchIndex =
377
+ storedInntektMåned.arbeidsInntektInformasjon
378
+ ?.inntektListe
379
+ ?.indexOfFirst {
380
+ it.virksomhet?.identifikator == inntekt.virksomhet?.identifikator &&
381
+ it.utbetaltIMaaned == inntekt.utbetaltIMaaned &&
382
+ it.beskrivelse == inntekt.beskrivelse
383
+ }
384
+ if (matchIndex != null && matchIndex >= 0 ) {
385
+ storedInntektMåned.arbeidsInntektInformasjon.inntektListe.let {
386
+ it.toMutableList()[matchIndex] = inntekt
387
+ }
388
+ }
389
+ }
390
+ inntektMånederFraAInntekt = inntektMånederFraAInntekt.filter { it.aarMaaned != storedInntektMåned.aarMaaned }
391
+ }
392
+ }
393
+
394
+ inntektKomponentFraDB.copy(
395
+ arbeidsInntektMaaned =
396
+ (inntektKomponentFraDB.arbeidsInntektMaaned ? : emptyList()) +
397
+ inntektMånederFraAInntekt.map {
398
+ it.copy(
399
+ arbeidsInntektInformasjon = it.arbeidsInntektInformasjon?.copy(inntektListe = emptyList()),
400
+ )
401
+ },
402
+ )
403
+ logger.info(" Total antall inntektsmåneder etter kombinasjon: ${inntektKomponentFraDB.arbeidsInntektMaaned?.size ? : 0 } " )
404
+
405
+ logger.info {
406
+ inntektKomponentFraDB.arbeidsInntektMaaned?.joinToString(
407
+ separator = " \n " ,
408
+ prefix = " Kombinert inntekt:\n " ,
409
+ ) { it.toString() } ? : " Ingen inntekter funnet"
410
+ }
411
+
412
+ return inntektKomponentFraDB
413
+ }
414
+
415
+ fun kombinerInntektFraInntektskomponentenOgStoredInntekt2 (
416
+ inntektKomponentFraAInntekt : InntektkomponentResponse ,
417
+ inntektKomponentFraDB : InntektkomponentResponse ,
418
+ ): InntektkomponentResponse {
419
+ val inntektMånederFraAInntekt = inntektKomponentFraAInntekt.arbeidsInntektMaaned ? : emptyList()
420
+
421
+ inntektMånederFraAInntekt.forEach {
422
+ inntektKomponentFraDB.arbeidsInntektMaaned
423
+ ?.find { inntektFraDb ->
424
+ inntektFraDb.aarMaaned == it.aarMaaned
425
+ }?.let { storedInntektMåned ->
426
+ it.arbeidsInntektInformasjon?.inntektListe?.forEach { inntekt ->
427
+ val matchIndex =
428
+ storedInntektMåned.arbeidsInntektInformasjon
429
+ ?.inntektListe
430
+ ?.indexOfFirst {
431
+ it.virksomhet?.identifikator == inntekt.virksomhet?.identifikator &&
432
+ it.utbetaltIMaaned == inntekt.utbetaltIMaaned &&
433
+ it.beskrivelse == inntekt.beskrivelse
434
+ }
435
+ if (matchIndex != null && matchIndex >= 0 ) {
436
+ storedInntektMåned.arbeidsInntektInformasjon.inntektListe.toMutableList()[matchIndex] = inntekt
437
+ }
438
+ }
439
+ }
440
+ }
441
+
442
+ return inntektKomponentFraDB
443
+ }
444
+
357
445
private suspend fun hentOrganisasjoner (
358
446
enhetsregisterClient : EnhetsregisterClient ,
359
447
organisasjonsNummerListe : List <String >? ,
0 commit comments