Skip to content

Commit 2535c93

Browse files
Legg til endepunkt for å kunne hente uncached inntekt
1 parent d05e92d commit 2535c93

File tree

1 file changed

+98
-34
lines changed

1 file changed

+98
-34
lines changed

dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/api/v1/UklassifisertInntektRoute.kt

Lines changed: 98 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import no.nav.dagpenger.inntekt.db.StoreInntektCommand
3232
import no.nav.dagpenger.inntekt.db.StoredInntektMedMetadata
3333
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.AktoerType
3434
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentRequest
35+
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentResponse
3536
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektskomponentClient
3637
import no.nav.dagpenger.inntekt.mapping.GUIInntekt
3738
import no.nav.dagpenger.inntekt.mapping.Inntektsmottaker
@@ -294,55 +295,71 @@ fun Route.uklassifisertInntekt(
294295
val inntektId = InntektId(call.parameters["inntektId"]!!)
295296
logger.info { "Henter nye inntekt for $inntektId" }
296297

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)
304304

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+
)
325325

326+
val kombinerFraInntektskomponentenOgStoredInntekt =
327+
kombinerInntektFraInntektskomponentenOgStoredInntekt(
328+
it,
329+
storedInntektMedMetadata.inntekt,
330+
)
331+
332+
logger.info {
333+
kombinerFraInntektskomponentenOgStoredInntekt.arbeidsInntektMaaned?.joinToString(
334+
separator = "\n",
335+
prefix = "Kombinert inntekt before mapping:\n",
336+
) { it.toString() } ?: "Ingen inntekter funnet"
337+
}
338+
339+
val mapToFrontend =
326340
it.mapToFrontend(
327341
person = inntektsmottaker,
328342
organisasjoner = organisasjoner,
329343
storedInntektMedMetadata =
330344
StoredInntektMedMetadata(
331345
inntektId = inntektId,
332346
fødselsnummer = storedInntektMedMetadata.fødselsnummer,
333-
inntekt = it,
347+
inntekt = kombinerFraInntektskomponentenOgStoredInntekt,
334348
manueltRedigert = false,
335349
timestamp = storedInntektMedMetadata.timestamp,
336350
beregningsdato = storedInntektMedMetadata.beregningsdato,
337351
storedInntektPeriode = storedInntektMedMetadata.storedInntektPeriode,
338-
begrunnelse = "",
352+
begrunnelse = storedInntektMedMetadata.begrunnelse,
339353
),
340354
)
341-
}.let {
342-
call.respond(HttpStatusCode.OK, it)
343-
}.also { inntektOppfriskingCounter.inc() }
344-
} ?: throw InntektNotFoundException("Inntekt with id $inntektId not found.")
345-
}
355+
356+
logger.info { "Kombinert inntekt after mapping: $mapToFrontend" }
357+
358+
mapToFrontend
359+
}.let {
360+
call.respond(HttpStatusCode.OK, it)
361+
}.also { inntektOppfriskingCounter.inc() }
362+
} ?: throw InntektNotFoundException("Inntekt with id $inntektId not found.")
346363
}
347364
}
348365
}
@@ -354,6 +371,53 @@ fun Route.uklassifisertInntekt(
354371
}
355372
}
356373

374+
fun kombinerInntektFraInntektskomponentenOgStoredInntekt(
375+
inntektKomponentFraAInntekt: InntektkomponentResponse,
376+
inntektKomponentFraDB: InntektkomponentResponse,
377+
): InntektkomponentResponse {
378+
logger.info { "Kombinerer data fra A-Inntekt og fra databasen" }
379+
var inntektMånederFraAInntekt = inntektKomponentFraAInntekt.arbeidsInntektMaaned ?: emptyList()
380+
381+
logger.info("Antall fra A-Inntekt: ${inntektMånederFraAInntekt.size}")
382+
logger.info("Antall fra Db: ${inntektKomponentFraDB.arbeidsInntektMaaned?.size ?: 0}")
383+
384+
inntektKomponentFraDB.arbeidsInntektMaaned?.map { storedInntektMåned ->
385+
val inntektKomponentMåned = inntektMånederFraAInntekt.find { it.aarMaaned == storedInntektMåned.aarMaaned }
386+
if (inntektKomponentMåned != null) {
387+
inntektKomponentMåned.arbeidsInntektInformasjon?.inntektListe.orEmpty().forEach { inntekt ->
388+
val matchIndex =
389+
storedInntektMåned.arbeidsInntektInformasjon
390+
?.inntektListe
391+
?.indexOfFirst {
392+
it.virksomhet?.identifikator == inntekt.virksomhet?.identifikator &&
393+
it.utbetaltIMaaned == inntekt.utbetaltIMaaned &&
394+
it.beskrivelse == inntekt.beskrivelse
395+
}
396+
if (matchIndex != null && matchIndex >= 0) {
397+
storedInntektMåned.arbeidsInntektInformasjon.inntektListe.let {
398+
it.toMutableList()[matchIndex] = inntekt
399+
}
400+
}
401+
}
402+
inntektMånederFraAInntekt =
403+
inntektMånederFraAInntekt.filter { it.aarMaaned != storedInntektMåned.aarMaaned }
404+
}
405+
}
406+
407+
inntektKomponentFraDB.copy(
408+
arbeidsInntektMaaned =
409+
(inntektKomponentFraDB.arbeidsInntektMaaned ?: emptyList()) +
410+
inntektMånederFraAInntekt.map {
411+
it.copy(
412+
arbeidsInntektInformasjon = it.arbeidsInntektInformasjon?.copy(inntektListe = emptyList()),
413+
)
414+
},
415+
)
416+
logger.info("Total antall inntektsmåneder etter kombinasjon: ${inntektKomponentFraDB.arbeidsInntektMaaned?.size ?: 0}")
417+
418+
return inntektKomponentFraDB
419+
}
420+
357421
private suspend fun hentOrganisasjoner(
358422
enhetsregisterClient: EnhetsregisterClient,
359423
organisasjonsNummerListe: List<String>?,

0 commit comments

Comments
 (0)