@@ -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,68 @@ 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
+ // logging it object
348
+ logger.info {
349
+ " Kombinert inntekt: ${
350
+ kombinerFraInntektskomponentenOgStoredInntekt.arbeidsInntektMaaned?.joinToString(
351
+ separator = " \n " ,
352
+ prefix = " Kombinert inntekt:\n " ,
353
+ ) { it.toString() } ? : " Ingen inntekter funnet"
354
+ } "
355
+ }
356
+ }.let {
357
+ call.respond(HttpStatusCode .OK , it)
358
+ }.also { inntektOppfriskingCounter.inc() }
359
+ } ? : throw InntektNotFoundException (" Inntekt with id $inntektId not found." )
346
360
}
347
361
}
348
362
}
@@ -354,6 +368,60 @@ fun Route.uklassifisertInntekt(
354
368
}
355
369
}
356
370
371
+ fun kombinerInntektFraInntektskomponentenOgStoredInntekt (
372
+ inntektKomponentFraAInntekt : InntektkomponentResponse ,
373
+ inntektKomponentFraDB : InntektkomponentResponse ,
374
+ ): InntektkomponentResponse {
375
+ logger.info { " Kombinerer data fra A-Inntekt og fra databasen" }
376
+ var inntektMånederFraAInntekt = inntektKomponentFraAInntekt.arbeidsInntektMaaned ? : emptyList()
377
+
378
+ logger.info(" Antall fra A-Inntekt: ${inntektMånederFraAInntekt.size} " )
379
+ logger.info(" Antall fra Db: ${inntektKomponentFraDB.arbeidsInntektMaaned?.size ? : 0 } " )
380
+
381
+ inntektKomponentFraDB.arbeidsInntektMaaned?.map { storedInntektMåned ->
382
+ val inntektKomponentMåned = inntektMånederFraAInntekt.find { it.aarMaaned == storedInntektMåned.aarMaaned }
383
+ if (inntektKomponentMåned != null ) {
384
+ inntektKomponentMåned.arbeidsInntektInformasjon?.inntektListe.orEmpty().forEach { inntekt ->
385
+ val matchIndex =
386
+ storedInntektMåned.arbeidsInntektInformasjon
387
+ ?.inntektListe
388
+ ?.indexOfFirst {
389
+ it.virksomhet?.identifikator == inntekt.virksomhet?.identifikator &&
390
+ it.utbetaltIMaaned == inntekt.utbetaltIMaaned &&
391
+ it.beskrivelse == inntekt.beskrivelse
392
+ }
393
+ if (matchIndex != null && matchIndex >= 0 ) {
394
+ storedInntektMåned.arbeidsInntektInformasjon.inntektListe.let {
395
+ it.toMutableList()[matchIndex] = inntekt
396
+ }
397
+ }
398
+ }
399
+ inntektMånederFraAInntekt =
400
+ inntektMånederFraAInntekt.filter { it.aarMaaned != storedInntektMåned.aarMaaned }
401
+ }
402
+ }
403
+
404
+ inntektKomponentFraDB.copy(
405
+ arbeidsInntektMaaned =
406
+ (inntektKomponentFraDB.arbeidsInntektMaaned ? : emptyList()) +
407
+ inntektMånederFraAInntekt.map {
408
+ it.copy(
409
+ arbeidsInntektInformasjon = it.arbeidsInntektInformasjon?.copy(inntektListe = emptyList()),
410
+ )
411
+ },
412
+ )
413
+ logger.info(" Total antall inntektsmåneder etter kombinasjon: ${inntektKomponentFraDB.arbeidsInntektMaaned?.size ? : 0 } " )
414
+
415
+ logger.info {
416
+ inntektKomponentFraDB.arbeidsInntektMaaned?.joinToString(
417
+ separator = " \n " ,
418
+ prefix = " Kombinert inntekt:\n " ,
419
+ ) { it.toString() } ? : " Ingen inntekter funnet"
420
+ }
421
+
422
+ return inntektKomponentFraDB
423
+ }
424
+
357
425
private suspend fun hentOrganisasjoner (
358
426
enhetsregisterClient : EnhetsregisterClient ,
359
427
organisasjonsNummerListe : List <String >? ,
0 commit comments