@@ -29,9 +29,9 @@ import no.nav.dagpenger.inntekt.db.Inntektparametre
2929import no.nav.dagpenger.inntekt.db.ManueltRedigert
3030import no.nav.dagpenger.inntekt.db.RegelKontekst
3131import no.nav.dagpenger.inntekt.db.StoreInntektCommand
32- import no.nav.dagpenger.inntekt.db.StoredInntektMedMetadata
3332import no.nav.dagpenger.inntekt.inntektskomponenten.v1.AktoerType
3433import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentRequest
34+ import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentResponse
3535import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektskomponentClient
3636import no.nav.dagpenger.inntekt.mapping.GUIInntekt
3737import no.nav.dagpenger.inntekt.mapping.Inntektsmottaker
@@ -294,55 +294,68 @@ fun Route.uklassifisertInntekt(
294294 val inntektId = InntektId (call.parameters[" inntektId" ]!! )
295295 logger.info { " Henter nye inntekt for $inntektId " }
296296
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)
304303
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+ )
325324
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 =
326346 it.mapToFrontend(
327347 person = inntektsmottaker,
328348 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,
340350 )
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." )
346359 }
347360 }
348361 }
@@ -354,6 +367,53 @@ fun Route.uklassifisertInntekt(
354367 }
355368}
356369
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+
357417private suspend fun hentOrganisasjoner (
358418 enhetsregisterClient : EnhetsregisterClient ,
359419 organisasjonsNummerListe : List <String >? ,
0 commit comments