@@ -29,9 +29,9 @@ import no.nav.dagpenger.inntekt.db.Inntektparametre
29
29
import no.nav.dagpenger.inntekt.db.ManueltRedigert
30
30
import no.nav.dagpenger.inntekt.db.RegelKontekst
31
31
import no.nav.dagpenger.inntekt.db.StoreInntektCommand
32
- import no.nav.dagpenger.inntekt.db.StoredInntektMedMetadata
33
32
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.AktoerType
34
33
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentRequest
34
+ import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentResponse
35
35
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektskomponentClient
36
36
import no.nav.dagpenger.inntekt.mapping.GUIInntekt
37
37
import no.nav.dagpenger.inntekt.mapping.Inntektsmottaker
@@ -294,55 +294,68 @@ fun Route.uklassifisertInntekt(
294
294
val inntektId = InntektId (call.parameters[" inntektId" ]!! )
295
295
logger.info { " Henter nye inntekt for $inntektId " }
296
296
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)
297
+ inntektStore
298
+ .getStoredInntektMedMetadata(inntektId)
299
+ .let { storedInntektMedMetadata ->
300
+ logger.info { " Henter stored inntekt: ${storedInntektMedMetadata.inntektId} " }
301
+ val person = personOppslag.hentPerson(storedInntektMedMetadata.fødselsnummer)
302
+ val opptjeningsperiode = Opptjeningsperiode (storedInntektMedMetadata.beregningsdato)
304
303
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
- )
304
+ toInntektskomponentRequest(person, opptjeningsperiode)
305
+ .let {
306
+ logger.info { " Henter nye inntekter fra inntektskomponenten" }
307
+ inntektskomponentClient.getInntekt(it, callId = callId)
308
+ }.let {
309
+ logger.info { " Fikk nye inntekter fra inntektskomponenten" }
310
+ val inntektsmottaker =
311
+ Inntektsmottaker (person.fødselsnummer, person.sammensattNavn())
312
+ val organisasjoner =
313
+ hentOrganisasjoner(
314
+ enhetsregisterClient,
315
+ it.arbeidsInntektMaaned
316
+ ?.flatMap { it.arbeidsInntektInformasjon?.inntektListe.orEmpty() }
317
+ ?.filter { inntekt ->
318
+ inntekt.virksomhet?.aktoerType == AktoerType .ORGANISASJON &&
319
+ (inntekt.opptjeningsland == " NO" || inntekt.opptjeningsland == null )
320
+ }?.mapNotNull { it.virksomhet?.identifikator }
321
+ ?.toTypedArray()
322
+ ?.toList() ? : emptyList(),
323
+ )
325
324
325
+ val kombinerFraInntektskomponentenOgStoredInntekt =
326
+ kombinerInntektFraInntektskomponentenOgStoredInntekt(
327
+ it,
328
+ storedInntektMedMetadata.inntekt,
329
+ )
330
+
331
+ logger.info {
332
+ kombinerFraInntektskomponentenOgStoredInntekt.arbeidsInntektMaaned?.joinToString(
333
+ separator = " \n " ,
334
+ prefix = " Kombinert inntekt before mapping:\n " ,
335
+ ) { it.toString() } ? : " Ingen inntekter funnet"
336
+ }
337
+
338
+ val oppdatertInntekt =
339
+ storedInntektMedMetadata.copy(
340
+ inntekt = kombinerFraInntektskomponentenOgStoredInntekt,
341
+ )
342
+
343
+ logger.info(" UpdatedStoredInntekt: $oppdatertInntekt " )
344
+
345
+ val mapToFrontend =
326
346
it.mapToFrontend(
327
347
person = inntektsmottaker,
328
348
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
- ),
349
+ storedInntektMedMetadata = oppdatertInntekt,
340
350
)
341
- }.let {
342
- call.respond(HttpStatusCode .OK , it)
343
- }.also { inntektOppfriskingCounter.inc() }
344
- } ? : throw InntektNotFoundException (" Inntekt with id $inntektId not found." )
345
- }
351
+
352
+ logger.info { " Kombinert inntekt after mapping: $mapToFrontend " }
353
+
354
+ mapToFrontend
355
+ }.let {
356
+ call.respond(HttpStatusCode .OK , it)
357
+ }.also { inntektOppfriskingCounter.inc() }
358
+ } ? : throw InntektNotFoundException (" Inntekt with id $inntektId not found." )
346
359
}
347
360
}
348
361
}
@@ -354,6 +367,53 @@ fun Route.uklassifisertInntekt(
354
367
}
355
368
}
356
369
370
+ fun kombinerInntektFraInntektskomponentenOgStoredInntekt (
371
+ inntektKomponentFraAInntekt : InntektkomponentResponse ,
372
+ inntektKomponentFraDB : InntektkomponentResponse ,
373
+ ): InntektkomponentResponse {
374
+ logger.info { " Kombinerer data fra A-Inntekt og fra databasen" }
375
+ var inntektMånederFraAInntekt = inntektKomponentFraAInntekt.arbeidsInntektMaaned ? : emptyList()
376
+
377
+ logger.info(" Antall fra A-Inntekt: ${inntektMånederFraAInntekt.size} " )
378
+ logger.info(" Antall fra Db: ${inntektKomponentFraDB.arbeidsInntektMaaned?.size ? : 0 } " )
379
+
380
+ inntektKomponentFraDB.arbeidsInntektMaaned?.map { storedInntektMåned ->
381
+ val inntektKomponentMåned = inntektMånederFraAInntekt.find { it.aarMaaned == storedInntektMåned.aarMaaned }
382
+ if (inntektKomponentMåned != null ) {
383
+ inntektKomponentMåned.arbeidsInntektInformasjon?.inntektListe.orEmpty().forEach { inntekt ->
384
+ val matchIndex =
385
+ storedInntektMåned.arbeidsInntektInformasjon
386
+ ?.inntektListe
387
+ ?.indexOfFirst {
388
+ it.virksomhet?.identifikator == inntekt.virksomhet?.identifikator &&
389
+ it.utbetaltIMaaned == inntekt.utbetaltIMaaned &&
390
+ it.beskrivelse == inntekt.beskrivelse
391
+ }
392
+ if (matchIndex != null && matchIndex >= 0 ) {
393
+ storedInntektMåned.arbeidsInntektInformasjon.inntektListe.let {
394
+ it.toMutableList()[matchIndex] = inntekt
395
+ }
396
+ }
397
+ }
398
+ inntektMånederFraAInntekt =
399
+ inntektMånederFraAInntekt.filter { it.aarMaaned != storedInntektMåned.aarMaaned }
400
+ }
401
+ }
402
+
403
+ inntektKomponentFraDB.copy(
404
+ arbeidsInntektMaaned =
405
+ (inntektKomponentFraDB.arbeidsInntektMaaned ? : emptyList()) +
406
+ inntektMånederFraAInntekt.map {
407
+ it.copy(
408
+ arbeidsInntektInformasjon = it.arbeidsInntektInformasjon?.copy(inntektListe = emptyList()),
409
+ )
410
+ },
411
+ )
412
+ logger.info(" Total antall inntektsmåneder etter kombinasjon: ${inntektKomponentFraDB.arbeidsInntektMaaned?.size ? : 0 } " )
413
+
414
+ return inntektKomponentFraDB
415
+ }
416
+
357
417
private suspend fun hentOrganisasjoner (
358
418
enhetsregisterClient : EnhetsregisterClient ,
359
419
organisasjonsNummerListe : List <String >? ,
0 commit comments