Skip to content

Commit 20113f2

Browse files
Legg til endepunkt for å kunne hente uncached inntekt
1 parent d05e92d commit 20113f2

File tree

1 file changed

+147
-46
lines changed

1 file changed

+147
-46
lines changed

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

Lines changed: 147 additions & 46 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,59 @@ 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-
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,
340330
)
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 = "",
345+
),
346+
)
347+
}.let {
348+
call.respond(HttpStatusCode.OK, it)
349+
}.also { inntektOppfriskingCounter.inc() }
350+
} ?: throw InntektNotFoundException("Inntekt with id $inntektId not found.")
346351
}
347352
}
348353
}
@@ -354,6 +359,102 @@ fun Route.uklassifisertInntekt(
354359
}
355360
}
356361

362+
fun kombinerInntektFraInntektskomponentenOgStoredInntekt1(
363+
inntektKomponentFraAInntekt: InntektkomponentResponse,
364+
inntektKomponentFraDB: InntektkomponentResponse,
365+
): InntektkomponentResponse {
366+
val inntektMånederFraAInntekt = inntektKomponentFraAInntekt.arbeidsInntektMaaned ?: emptyList()
367+
368+
inntektKomponentFraDB.arbeidsInntektMaaned?.map { storedInntektMåned ->
369+
val inntektKomponentMåned = inntektMånederFraAInntekt.find { it.aarMaaned == storedInntektMåned.aarMaaned }
370+
if (inntektKomponentMåned != null) {
371+
inntektKomponentMåned.arbeidsInntektInformasjon?.inntektListe.orEmpty().forEach { inntekt ->
372+
val matchIndex =
373+
storedInntektMåned.arbeidsInntektInformasjon
374+
?.inntektListe
375+
?.indexOfFirst {
376+
it.virksomhet?.identifikator == inntekt.virksomhet?.identifikator &&
377+
it.utbetaltIMaaned == inntekt.utbetaltIMaaned &&
378+
it.beskrivelse == inntekt.beskrivelse
379+
}
380+
if (matchIndex != null && matchIndex >= 0) {
381+
storedInntektMåned.arbeidsInntektInformasjon.inntektListe.let {
382+
it.toMutableList()[matchIndex] = inntekt
383+
}
384+
}
385+
}
386+
}
387+
}
388+
389+
return inntektKomponentFraDB
390+
}
391+
392+
fun kombinerInntektFraInntektskomponentenOgStoredInntekt2(
393+
inntektKomponentFraAInntekt: InntektkomponentResponse,
394+
inntektKomponentFraDB: InntektkomponentResponse,
395+
): InntektkomponentResponse {
396+
val inntektMånederFraAInntekt = inntektKomponentFraAInntekt.arbeidsInntektMaaned ?: emptyList()
397+
398+
inntektMånederFraAInntekt.forEach {
399+
inntektKomponentFraDB.arbeidsInntektMaaned
400+
?.find { inntektFraDb ->
401+
inntektFraDb.aarMaaned == it.aarMaaned
402+
}?.let { storedInntektMåned ->
403+
it.arbeidsInntektInformasjon?.inntektListe?.forEach { inntekt ->
404+
val matchIndex =
405+
storedInntektMåned.arbeidsInntektInformasjon
406+
?.inntektListe
407+
?.indexOfFirst {
408+
it.virksomhet?.identifikator == inntekt.virksomhet?.identifikator &&
409+
it.utbetaltIMaaned == inntekt.utbetaltIMaaned &&
410+
it.beskrivelse == inntekt.beskrivelse
411+
}
412+
if (matchIndex != null && matchIndex >= 0) {
413+
storedInntektMåned.arbeidsInntektInformasjon.inntektListe.toMutableList()[matchIndex] = inntekt
414+
}
415+
}
416+
}
417+
}
418+
419+
return inntektKomponentFraDB
420+
}
421+
422+
fun kombinerInntektFraInntektskomponentenOgStoredInntekt(
423+
inntektKomponentFraAInntekt: InntektkomponentResponse,
424+
inntektKomponentFraDB: InntektkomponentResponse,
425+
): InntektkomponentResponse {
426+
val alleMånder =
427+
(
428+
(inntektKomponentFraAInntekt.arbeidsInntektMaaned ?: emptyList()) +
429+
(inntektKomponentFraDB.arbeidsInntektMaaned ?: emptyList())
430+
).distinctBy { it.aarMaaned }
431+
432+
val mergedMaaneder =
433+
alleMånder.map { maaned ->
434+
val aMåned = inntektKomponentFraAInntekt.arbeidsInntektMaaned?.find { it.aarMaaned == maaned.aarMaaned }
435+
val dbMåned = inntektKomponentFraDB.arbeidsInntektMaaned?.find { it.aarMaaned == maaned.aarMaaned }
436+
437+
val aList = aMåned?.arbeidsInntektInformasjon?.inntektListe.orEmpty()
438+
val dbList = dbMåned?.arbeidsInntektInformasjon?.inntektListe.orEmpty()
439+
440+
val mergedInntektListe =
441+
(aList + dbList)
442+
.groupBy { Triple(it.beskrivelse, it.utbetaltIMaaned, it.virksomhet?.identifikator) }
443+
.mapValues { (_, values) -> values.find { it in aList } ?: values.first() }
444+
.values
445+
.toList()
446+
447+
maaned.copy(
448+
arbeidsInntektInformasjon =
449+
maaned.arbeidsInntektInformasjon?.copy(
450+
inntektListe = mergedInntektListe,
451+
),
452+
)
453+
}
454+
455+
return inntektKomponentFraAInntekt.copy(arbeidsInntektMaaned = mergedMaaneder)
456+
}
457+
357458
private suspend fun hentOrganisasjoner(
358459
enhetsregisterClient: EnhetsregisterClient,
359460
organisasjonsNummerListe: List<String>?,

0 commit comments

Comments
 (0)