@@ -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,64 @@ 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
+ val kombinerFraInntektskomponentenOgStoredInntekt =
327
+ kombinerInntektFraInntektskomponentenOgStoredInntekt(
328
+ it,
329
+ storedInntektMedMetadata.inntekt,
330
+ )
331
+
332
+ val mapToFrontend =
326
333
it.mapToFrontend(
327
334
person = inntektsmottaker,
328
335
organisasjoner = organisasjoner,
329
336
storedInntektMedMetadata =
330
337
StoredInntektMedMetadata (
331
338
inntektId = inntektId,
332
339
fødselsnummer = storedInntektMedMetadata.fødselsnummer,
333
- inntekt = it ,
340
+ inntekt = kombinerFraInntektskomponentenOgStoredInntekt ,
334
341
manueltRedigert = false ,
335
342
timestamp = storedInntektMedMetadata.timestamp,
336
343
beregningsdato = storedInntektMedMetadata.beregningsdato,
337
344
storedInntektPeriode = storedInntektMedMetadata.storedInntektPeriode,
338
- begrunnelse = " " ,
345
+ begrunnelse = storedInntektMedMetadata.begrunnelse ,
339
346
),
340
347
)
341
- }.let {
342
- call.respond(HttpStatusCode .OK , it)
343
- }.also { inntektOppfriskingCounter.inc() }
344
- } ? : throw InntektNotFoundException (" Inntekt with id $inntektId not found." )
345
- }
348
+
349
+ logger.info { " Kombinert inntekt: $mapToFrontend " }
350
+
351
+ mapToFrontend
352
+ }.let {
353
+ call.respond(HttpStatusCode .OK , it)
354
+ }.also { inntektOppfriskingCounter.inc() }
355
+ } ? : throw InntektNotFoundException (" Inntekt with id $inntektId not found." )
346
356
}
347
357
}
348
358
}
@@ -354,6 +364,60 @@ fun Route.uklassifisertInntekt(
354
364
}
355
365
}
356
366
367
+ fun kombinerInntektFraInntektskomponentenOgStoredInntekt (
368
+ inntektKomponentFraAInntekt : InntektkomponentResponse ,
369
+ inntektKomponentFraDB : InntektkomponentResponse ,
370
+ ): InntektkomponentResponse {
371
+ logger.info { " Kombinerer data fra A-Inntekt og fra databasen" }
372
+ var inntektMånederFraAInntekt = inntektKomponentFraAInntekt.arbeidsInntektMaaned ? : emptyList()
373
+
374
+ logger.info(" Antall fra A-Inntekt: ${inntektMånederFraAInntekt.size} " )
375
+ logger.info(" Antall fra Db: ${inntektKomponentFraDB.arbeidsInntektMaaned?.size ? : 0 } " )
376
+
377
+ inntektKomponentFraDB.arbeidsInntektMaaned?.map { storedInntektMåned ->
378
+ val inntektKomponentMåned = inntektMånederFraAInntekt.find { it.aarMaaned == storedInntektMåned.aarMaaned }
379
+ if (inntektKomponentMåned != null ) {
380
+ inntektKomponentMåned.arbeidsInntektInformasjon?.inntektListe.orEmpty().forEach { inntekt ->
381
+ val matchIndex =
382
+ storedInntektMåned.arbeidsInntektInformasjon
383
+ ?.inntektListe
384
+ ?.indexOfFirst {
385
+ it.virksomhet?.identifikator == inntekt.virksomhet?.identifikator &&
386
+ it.utbetaltIMaaned == inntekt.utbetaltIMaaned &&
387
+ it.beskrivelse == inntekt.beskrivelse
388
+ }
389
+ if (matchIndex != null && matchIndex >= 0 ) {
390
+ storedInntektMåned.arbeidsInntektInformasjon.inntektListe.let {
391
+ it.toMutableList()[matchIndex] = inntekt
392
+ }
393
+ }
394
+ }
395
+ inntektMånederFraAInntekt =
396
+ inntektMånederFraAInntekt.filter { it.aarMaaned != storedInntektMåned.aarMaaned }
397
+ }
398
+ }
399
+
400
+ inntektKomponentFraDB.copy(
401
+ arbeidsInntektMaaned =
402
+ (inntektKomponentFraDB.arbeidsInntektMaaned ? : emptyList()) +
403
+ inntektMånederFraAInntekt.map {
404
+ it.copy(
405
+ arbeidsInntektInformasjon = it.arbeidsInntektInformasjon?.copy(inntektListe = emptyList()),
406
+ )
407
+ },
408
+ )
409
+ logger.info(" Total antall inntektsmåneder etter kombinasjon: ${inntektKomponentFraDB.arbeidsInntektMaaned?.size ? : 0 } " )
410
+
411
+ logger.info {
412
+ inntektKomponentFraDB.arbeidsInntektMaaned?.joinToString(
413
+ separator = " \n " ,
414
+ prefix = " Kombinert inntekt:\n " ,
415
+ ) { it.toString() } ? : " Ingen inntekter funnet"
416
+ }
417
+
418
+ return inntektKomponentFraDB
419
+ }
420
+
357
421
private suspend fun hentOrganisasjoner (
358
422
enhetsregisterClient : EnhetsregisterClient ,
359
423
organisasjonsNummerListe : List <String >? ,
0 commit comments