Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import no.nav.dagpenger.inntekt.db.Inntektparametre
import no.nav.dagpenger.inntekt.db.ManueltRedigert
import no.nav.dagpenger.inntekt.db.RegelKontekst
import no.nav.dagpenger.inntekt.db.StoreInntektCommand
import no.nav.dagpenger.inntekt.db.StoredInntektMedMetadata
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.AktoerType
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentRequest
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektskomponentClient
Expand Down Expand Up @@ -152,7 +153,8 @@ fun Route.uklassifisertInntekt(
.getStoredInntektMedMetadata(inntektId)
.let { storedInntektMedMetadata ->
val person = personOppslag.hentPerson(storedInntektMedMetadata.fødselsnummer)
val inntektsmottaker = Inntektsmottaker(storedInntektMedMetadata.fødselsnummer, person.sammensattNavn())
val inntektsmottaker =
Inntektsmottaker(storedInntektMedMetadata.fødselsnummer, person.sammensattNavn())
val organisasjoner =
hentOrganisasjoner(
enhetsregisterClient,
Expand Down Expand Up @@ -198,7 +200,8 @@ fun Route.uklassifisertInntekt(
beregningsdato = inntektPersonMapping.beregningsdato,
).apply {
this.opptjeningsperiode.førsteMåned = inntekterDto.periode.fraOgMed
this.opptjeningsperiode.sisteAvsluttendeKalenderMåned = inntekterDto.periode.tilOgMed
this.opptjeningsperiode.sisteAvsluttendeKalenderMåned =
inntekterDto.periode.tilOgMed
},
inntekt = it.inntekt,
manueltRedigert =
Expand Down Expand Up @@ -283,6 +286,64 @@ fun Route.uklassifisertInntekt(
}
}
}

route("/uklassifisert/uncached/{inntektId}") {
get {
val callId = call.callId
withContext(coroutineContext) {
val inntektId = InntektId(call.parameters["inntektId"]!!)
logger.info { "Henter nye inntekt for $inntektId" }

inntektStore
.getStoredInntektMedMetadata(inntektId)
.let { storedInntektMedMetadata ->
logger.info { "Henter stored inntekt: ${storedInntektMedMetadata.inntektId}" }
val person = personOppslag.hentPerson(storedInntektMedMetadata.fødselsnummer)
val opptjeningsperiode = Opptjeningsperiode(storedInntektMedMetadata.beregningsdato)

toInntektskomponentRequest(person, opptjeningsperiode)
.let {
logger.info { "Henter nye inntekter fra inntektskomponenten" }
inntektskomponentClient.getInntekt(it, callId = callId)
}.let {
logger.info { "Fikk nye inntekter fra inntektskomponenten" }
val inntektsmottaker =
Inntektsmottaker(person.fødselsnummer, person.sammensattNavn())
val organisasjoner =
hentOrganisasjoner(
enhetsregisterClient,
it.arbeidsInntektMaaned
?.flatMap { it.arbeidsInntektInformasjon?.inntektListe.orEmpty() }
?.filter { inntekt ->
inntekt.virksomhet?.aktoerType == AktoerType.ORGANISASJON &&
(inntekt.opptjeningsland == "NO" || inntekt.opptjeningsland == null)
}?.mapNotNull { it.virksomhet?.identifikator }
?.toTypedArray()
?.toList() ?: emptyList(),
)

it.mapToFrontend(
person = inntektsmottaker,
organisasjoner = organisasjoner,
storedInntektMedMetadata =
StoredInntektMedMetadata(
inntektId = inntektId,
fødselsnummer = storedInntektMedMetadata.fødselsnummer,
inntekt = it,
manueltRedigert = false,
timestamp = storedInntektMedMetadata.timestamp,
beregningsdato = storedInntektMedMetadata.beregningsdato,
storedInntektPeriode = storedInntektMedMetadata.storedInntektPeriode,
begrunnelse = "",
),
)
}.let {
call.respond(HttpStatusCode.OK, it)
}.also { inntektOppfriskingCounter.inc() }
} ?: throw InntektNotFoundException("Inntekt with id $inntektId not found.")
}
}
}
}
route("/verdikoder") {
get {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ import no.nav.dagpenger.inntekt.db.StoredInntektMedMetadata
import no.nav.dagpenger.inntekt.db.StoredInntektPeriode
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Aktoer
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.AktoerType
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.ArbeidsInntektInformasjon
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.ArbeidsInntektMaaned
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Inntekt
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektBeskrivelse
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektType
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentRequest
Expand Down Expand Up @@ -588,4 +591,154 @@ internal class UklassifisertInntektRouteTest {
storeInntektCommandSlot.captured.manueltRedigert!!.redigertAv shouldBe TEST_OAUTH_USER
storeInntektCommandSlot.captured.manueltRedigert!!.begrunnelse shouldBe "Dette er en begrunnelse."
}

@Test
fun `Get request for uncached uklassifisert inntekt skal returnere 200 OK og inntekt`() {
val enhetsregisterClientMock = mockk<EnhetsregisterClient>(relaxed = true)
val inntektKomponentClientMock = mockk<InntektskomponentClient>(relaxed = true)
return withMockAuthServerAndTestApplication(
mockInntektApi(
inntektskomponentClient = inntektKomponentClientMock,
inntektStore = inntektStoreMock,
personOppslag = personOppslagMock,
enhetsregisterClient = enhetsregisterClientMock,
),
) {
val body =
UklassifisertInntektRouteTest::class.java
.getResource("/test-data/example-inntekt-med-inntektId-payload.json")
?.readText()
every {
inntektStoreMock.getStoredInntektMedMetadata(inntektId)
} returns
StoredInntektMedMetadata(
inntektId,
inntekt = jacksonObjectMapper.readValue(body!!),
manueltRedigert = false,
timestamp = LocalDateTime.now(),
fødselsnummer = fødselsnummer,
beregningsdato = now(),
storedInntektPeriode =
StoredInntektPeriode(
fraOgMed = YearMonth.of(2023, 1),
tilOgMed = YearMonth.of(2025, 5),
),
)

val inntektKomponentResponseFraAInntekt =
InntektkomponentResponse(
arbeidsInntektMaaned =
listOf(
ArbeidsInntektMaaned(
aarMaaned = YearMonth.parse("2019-01"),
avvikListe = null,
arbeidsInntektInformasjon =
ArbeidsInntektInformasjon(
inntektListe =
listOf(
Inntekt(
inntektType = InntektType.NAERINGSINNTEKT,
beloep = BigDecimal(250000),
fordel = "kontantytelse",
inntektskilde = "A-ordningen",
inntektsperiodetype = "Maaned",
inntektsstatus = "LoependeInnrapportert",
leveringstidspunkt = YearMonth.parse("2019-02"),
utbetaltIMaaned = YearMonth.parse("2018-03"),
opplysningspliktig =
Aktoer(
aktoerType = AktoerType.ORGANISASJON,
identifikator = "1111111",
),
virksomhet =
Aktoer(
aktoerType = AktoerType.ORGANISASJON,
identifikator = "1111111",
),
inntektsmottaker =
Aktoer(
aktoerType = AktoerType.NATURLIG_IDENT,
identifikator = "99999999999",
),
inngaarIGrunnlagForTrekk = true,
utloeserArbeidsgiveravgift = true,
informasjonsstatus = "InngaarAlltid",
beskrivelse = InntektBeskrivelse.LOTT_KUN_TRYGDEAVGIFT,
),
),
),
),
ArbeidsInntektMaaned(
aarMaaned = YearMonth.parse("2018-03"),
avvikListe = null,
arbeidsInntektInformasjon =
ArbeidsInntektInformasjon(
inntektListe =
listOf(
Inntekt(
inntektType = InntektType.NAERINGSINNTEKT,
beloep = BigDecimal(250000),
fordel = "kontantytelse",
inntektskilde = "A-ordningen",
inntektsperiodetype = "Maaned",
inntektsstatus = "LoependeInnrapportert",
leveringstidspunkt = YearMonth.parse("2019-02"),
utbetaltIMaaned = YearMonth.parse("2018-03"),
opplysningspliktig =
Aktoer(
aktoerType = AktoerType.ORGANISASJON,
identifikator = "1111111",
),
virksomhet =
Aktoer(
aktoerType = AktoerType.ORGANISASJON,
identifikator = "1111111",
),
inntektsmottaker =
Aktoer(
aktoerType = AktoerType.NATURLIG_IDENT,
identifikator = "99999999999",
),
inngaarIGrunnlagForTrekk = true,
utloeserArbeidsgiveravgift = true,
informasjonsstatus = "InngaarAlltid",
beskrivelse = InntektBeskrivelse.LOTT_KUN_TRYGDEAVGIFT,
),
),
),
),
),
ident =
Aktoer(
aktoerType = AktoerType.NATURLIG_IDENT,
identifikator = "-1",
),
)
coEvery {
inntektKomponentClientMock.getInntekt(
request = any(),
callId = any(),
)
} returns inntektKomponentResponseFraAInntekt

val bodyFraEr =
FullVirksomhetsInformasjon::class.java
.getResource("/test-data/example-virksomhet-info.json")!!
.readText()
coEvery { enhetsregisterClientMock.hentEnhet("1111111") } returns bodyFraEr

val response =
autentisert(
httpMethod = HttpMethod.Get,
endepunkt = "$uklassifisertInntekt/uncached/${inntektId.id}",
)

assertEquals(OK, response.status)

val storedInntekt =
jacksonObjectMapper.readValue<InntekterDto>(response.bodyAsText())
storedInntekt.virksomheter shouldHaveSize 1
storedInntekt.virksomheter[0].inntekter?.shouldHaveSize((2))
}
}
}
Loading