Skip to content

Commit

Permalink
Bruk inntekt v1 endepunkt (#540)
Browse files Browse the repository at this point in the history
* Gå vekk fra historikk-endepunktet og bruk vanlig inntekt-endepunkt.
  • Loading branch information
olekvernberg authored Aug 9, 2024
1 parent 81b5570 commit e5a5bcd
Show file tree
Hide file tree
Showing 25 changed files with 1,078 additions and 3,896 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,18 @@ class InntektsendringerService(
private val maxInntekt = Math.floor((grunnbeløp * 5.5) / 1000L) * 1000L // Ingen utbetaling av OS ved inntekt på over 5.5 rundet ned til nærmeste 1000

fun beregnEndretInntekt(
inntektshistorikkResponse: InntektshistorikkResponse,
inntektResponse: HentInntektListeResponse,
forventetInntektForPerson: ForventetInntektForPerson,
): Inntektsendring {
// hent alle registrerte vedtak som var på personen sist beregning
val nyesteRegistrerteInntekt =
inntektshistorikkResponse.inntektForMåned(YearMonth.now().minusMonths(1))
inntektResponse.arbeidsinntektMåned?.filter { it.årMåned == YearMonth.now().minusMonths(1) }
val nestNyesteRegistrerteInntekt =
inntektshistorikkResponse.inntektForMåned(YearMonth.now().minusMonths(2))
inntektResponse.arbeidsinntektMåned?.filter { it.årMåned == YearMonth.now().minusMonths(2) }
val inntektTreMånederTilbake =
inntektshistorikkResponse.inntektForMåned(YearMonth.now().minusMonths(3))
inntektResponse.arbeidsinntektMåned?.filter { it.årMåned == YearMonth.now().minusMonths(3) }
val inntektFireMånederTilbake =
inntektshistorikkResponse.inntektForMåned(YearMonth.now().minusMonths(4))
inntektResponse.arbeidsinntektMåned?.filter { it.årMåned == YearMonth.now().minusMonths(4) }

val inntektsendringFireMånederTilbake =
beregnInntektsendring(
Expand Down Expand Up @@ -65,24 +65,26 @@ class InntektsendringerService(
}

private fun beregnInntektsendring(
nyesteRegistrerteInntekt: List<InntektVersjon>?,
nyesteRegistrerteInntekt: List<ArbeidsinntektMåned>?,
ident: String,
forventetInntekt: Int?,
): BeregningResultat {
if (forventetInntekt == null || nyesteRegistrerteInntekt?.maxOfOrNull { it.versjon } == null) {
if (forventetInntekt == null ||
nyesteRegistrerteInntekt.isNullOrEmpty() ||
nyesteRegistrerteInntekt
.firstOrNull()
?.arbeidsInntektInformasjon
?.inntektListe
.isNullOrEmpty()
) {
secureLogger.warn("Ingen gjeldende inntekt funnet på person $ident har personen løpende stønad?")
return BeregningResultat(0, 0, 0)
}

if (forventetInntekt > maxInntekt) return BeregningResultat(0, 0, 0) // Ignorer alle med over 652000 i årsinntekt, da de har 0 i utbetaling.
val månedligForventetInntekt = (forventetInntekt / 12)

val orgNrToNyesteVersjonMap = nyesteRegistrerteInntekt.associate { it.opplysningspliktig to it.versjon }
val inntektListe =
nyesteRegistrerteInntekt
.filter {
it.versjon == orgNrToNyesteVersjonMap[it.opplysningspliktig] && it.arbeidsInntektInformasjon.inntektListe != null
}.flatMap { it.arbeidsInntektInformasjon.inntektListe!! }
val inntektListe = nyesteRegistrerteInntekt.firstOrNull()?.arbeidsInntektInformasjon?.inntektListe ?: emptyList()
val samletInntekt =
inntektListe
.filterNot {
Expand Down Expand Up @@ -118,7 +120,7 @@ data class Inntektsendring(
val forrigeMåned: BeregningResultat,
) {
fun harEndretInntekt() =
fireMånederTilbake.prosent >= 10 && treMånederTilbake.prosent >= 10 && toMånederTilbake.prosent >= 10 && forrigeMåned.prosent >= 10
treMånederTilbake.prosent >= 10 && toMånederTilbake.prosent >= 10 && forrigeMåned.prosent >= 10
}

data class BeregningResultat(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class VedtakendringerService(
var counter = 0
personerMedAktivStønad.chunked(500).forEach {
sakClient.hentForventetInntektForIdenter(it).forEach { forventetInntektForPerson ->
val response = hentInntektshistorikk(forventetInntektForPerson.personIdent)
val response = hentInntekt(forventetInntektForPerson.personIdent)
if (response != null &&
forventetInntektForPerson.forventetInntektForrigeMåned != null &&
forventetInntektForPerson.forventetInntektToMånederTilbake != null
Expand All @@ -63,11 +63,11 @@ class VedtakendringerService(
logger.info("Vedtak- og inntektsendringer ferdig")
}

fun harNyeVedtak(response: InntektshistorikkResponse) = nyeVedtak(response)?.isNotEmpty() ?: false
fun harNyeVedtak(response: HentInntektListeResponse) = nyeVedtak(response)?.isNotEmpty() ?: false

private fun lagreInntektsendringForPerson(
forventetInntektForPerson: ForventetInntektForPerson,
response: InntektshistorikkResponse,
response: HentInntektListeResponse,
) {
val nyeVedtak = nyeVedtak(response)
val endretInntekt = inntektsendringerService.beregnEndretInntekt(response, forventetInntektForPerson)
Expand Down Expand Up @@ -98,40 +98,37 @@ class VedtakendringerService(
}
}

fun nyeVedtak(inntektshistorikkResponse: InntektshistorikkResponse): List<String>? {
fun nyeVedtak(inntektResponse: HentInntektListeResponse): List<String>? {
// hent alle registrerte vedtak som var på personen sist beregning
val nyesteRegistrerteInntekt =
inntektshistorikkResponse.inntektForMåned(YearMonth.now().minusMonths(1))
inntektResponse.arbeidsinntektMåned?.filter { it.årMåned == YearMonth.now().minusMonths(1) }
val nestNyesteRegistrerteInntekt =
inntektshistorikkResponse.inntektForMåned(YearMonth.now().minusMonths(2))
inntektResponse.arbeidsinntektMåned?.filter { it.årMåned == YearMonth.now().minusMonths(2) }

val offentligeYtelserForNyesteMåned = offentligeYtelser(nyesteRegistrerteInntekt) ?: emptyList()
val offentligeYtelserForNestNyesteMåned = offentligeYtelser(nestNyesteRegistrerteInntekt) ?: emptyList()

return offentligeYtelserForNyesteMåned.minus(offentligeYtelserForNestNyesteMåned)
}

private fun offentligeYtelser(nyesteRegistrerteInntekt: List<InntektVersjon>?): List<String>? {
private fun offentligeYtelser(nyesteRegistrerteInntekt: List<ArbeidsinntektMåned>?): List<String>? {
val offentligYtelseInntekt =
nyesteRegistrerteInntekt?.filter {
it.arbeidsInntektInformasjon.inntektListe?.any { offentligYtelse ->
it.arbeidsInntektInformasjon?.inntektListe?.any { offentligYtelse ->
offentligYtelse.inntektType == InntektType.YTELSE_FRA_OFFENTLIGE &&
offentligYtelse.beskrivelse != "overgangsstoenadTilEnsligMorEllerFarSomBegynteAaLoepe1April2014EllerSenere"
}
?: false
}

val nyesteVersjon = offentligYtelseInntekt?.maxOfOrNull { it.versjon }

val inntektListe =
offentligYtelseInntekt?.firstOrNull { it.versjon == nyesteVersjon }?.arbeidsInntektInformasjon?.inntektListe
val inntektListe = offentligYtelseInntekt?.firstOrNull()?.arbeidsInntektInformasjon?.inntektListe
return inntektListe
?.filter {
it.inntektType == InntektType.YTELSE_FRA_OFFENTLIGE &&
it.beskrivelse != "overgangsstoenadTilEnsligMorEllerFarSomBegynteAaLoepe1April2014EllerSenere" &&
it.tilleggsinformasjon?.tilleggsinformasjonDetaljer?.detaljerType != "ETTERBETALINGSPERIODE"
}?.groupBy { it.beskrivelse }
?.map { it.key }
?.mapNotNull { it.key }
}

private fun hentInntektshistorikk(fnr: String): InntektshistorikkResponse? {
Expand All @@ -147,6 +144,19 @@ class VedtakendringerService(
return null
}

private fun hentInntekt(fnr: String): HentInntektListeResponse? {
try {
return inntektClient.hentInntekt(
fnr,
YearMonth.now().minusMonths(5),
YearMonth.now(),
)
} catch (e: Exception) {
secureLogger.warn("Feil ved kall mot inntektskomponenten ved kall mot person $fnr. Message: ${e.message} Cause: ${e.cause}")
}
return null
}

private fun opprettOppgaveForInntektsendring(
inntektOgVedtakEndring: InntektOgVedtakEndring,
beskrivelse: String,
Expand Down
Loading

0 comments on commit e5a5bcd

Please sign in to comment.