Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PEK-769 korriger simulert alderspensjon i inneværende år #166

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from
Draft
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 @@ -71,7 +71,8 @@ class SimuleringController(
service::simulerAlderspensjon,
fromIngressSimuleringSpecV7(spec),
"alderspensjon/simulering"
)
),
spec.foedselsdato
).also {
log.debug { "Simulering V7 respons: $it" }
Metrics.countType(eventName = SIMULERING_TYPE_METRIC_NAME, type = spec.simuleringstype.name)
Expand All @@ -82,7 +83,8 @@ class SimuleringController(
service::simulerAlderspensjon,
fromIngressSimuleringSpecV7(spec),
"alderspensjon/simulering"
)
),
spec.foedselsdato
).also {
log.debug { "Simulering V7 respons: $it" }
Metrics.countType(eventName = SIMULERING_TYPE_METRIC_NAME, type = spec.simuleringstype.name)
Expand Down Expand Up @@ -128,7 +130,8 @@ class SimuleringController(
function = service::simulerAlderspensjon,
argument = fromSpecV8(spec),
functionName = "alderspensjon/simulering"
)
),
spec.foedselsdato
).also {
log.debug { "Simulering V8 respons: $it" }
Metrics.countType(eventName = SIMULERING_TYPE_METRIC_NAME, type = spec.simuleringstype.name)
Expand All @@ -139,7 +142,8 @@ class SimuleringController(
function = service::simulerAlderspensjon,
argument = fromSpecV8(spec),
functionName = "alderspensjon/simulering"
)
),
spec.foedselsdato
).also {
log.debug { "Simulering V8 respons: $it" }
Metrics.countType(eventName = SIMULERING_TYPE_METRIC_NAME, type = spec.simuleringstype.name)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,18 @@ import no.nav.pensjon.kalkulator.general.Alder
import no.nav.pensjon.kalkulator.general.Uttaksgrad
import no.nav.pensjon.kalkulator.simulering.*
import no.nav.pensjon.kalkulator.simulering.api.dto.*
import no.nav.pensjon.kalkulator.simulering.api.map.PersonligSimuleringResultMapperV8.justerAlderspensjonIInnevaerendeAarV8
import java.time.LocalDate

/**
* Maps between data transfer objects (DTOs) and domain objects related to simulering.
* The DTOs are specified by version 6 of the API offered to clients.
*/
object PersonligSimuleringExtendedResultMapperV8 {

fun extendedResultV8(source: SimuleringResult) =
fun extendedResultV8(source: SimuleringResult, foedselsdato: LocalDate) =
PersonligSimuleringResultV8(
alderspensjon = source.alderspensjon.map(::alderspensjon),
alderspensjon = source.alderspensjon.map(::alderspensjon).let { justerAlderspensjonIInnevaerendeAarV8(it, foedselsdato) },
alderspensjonMaanedligVedEndring = maanedligPensjon(source.alderspensjonMaanedsbeloep),
afpPrivat = source.afpPrivat.map(::privatAfp),
afpOffentlig = source.afpOffentlig.map(::offentligAfp),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@ import no.nav.pensjon.kalkulator.general.Alder
import no.nav.pensjon.kalkulator.general.Uttaksgrad
import no.nav.pensjon.kalkulator.simulering.*
import no.nav.pensjon.kalkulator.simulering.api.dto.*
import java.time.LocalDate

/**
* Maps between data transfer objects (DTOs) and domain objects related to simulering.
* The DTOs are specified by version 6 of the API offered to clients.
*/
object PersonligSimuleringResultMapperV8 {

fun resultV8(source: SimuleringResult) =
fun resultV8(source: SimuleringResult, foedselsdato: LocalDate) =
PersonligSimuleringResultV8(
alderspensjon = source.alderspensjon.map(::alderspensjon),
alderspensjon = source.alderspensjon.map(::alderspensjon).let { justerAlderspensjonIInnevaerendeAarV8(it, foedselsdato) },
alderspensjonMaanedligVedEndring = maanedligPensjon(source.alderspensjonMaanedsbeloep),
afpPrivat = source.afpPrivat.map(::privatAfp),
afpOffentlig = source.afpOffentlig.map(::offentligAfp),
Expand All @@ -27,6 +28,37 @@ object PersonligSimuleringResultMapperV8 {
beloep = source.beloep
)

/**
* When list contains alderspensjon with age 0,
* replace it with age of current year and add it back to the list,
* if alderspensjon for current year already exists, replace it.
*/
fun justerAlderspensjonIInnevaerendeAarV8(
alderspensjonList: List<PersonligSimuleringAlderspensjonResultV8>,
foedselsdato: LocalDate
): List<PersonligSimuleringAlderspensjonResultV8> {
alderspensjonList
.firstOrNull { it.alder == 0 }
?.let {
val innevaerendeAarAlder = Alder.from(foedselsdato, LocalDate.now()).aar
val oppdatertAlderspensjonList = alderspensjonList
.filter { it.alder != 0 }
.filter { it.alder != innevaerendeAarAlder}
.toMutableList()
oppdatertAlderspensjonList.add(
PersonligSimuleringAlderspensjonResultV8(
innevaerendeAarAlder,
it.beloep,
it.inntektspensjonBeloep,
it.garantipensjonBeloep,
it.delingstall,
it.pensjonBeholdningFoerUttakBeloep
)
)
return oppdatertAlderspensjonList.sortedBy { it.alder }
} ?: return alderspensjonList
}

private fun maanedligPensjon(source: AlderspensjonMaanedsbeloep?) =
PersonligSimuleringMaanedligPensjonResultV8(
gradertUttakMaanedligBeloep = source?.gradertUttak,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,18 @@ import no.nav.pensjon.kalkulator.general.Alder
import no.nav.pensjon.kalkulator.general.Uttaksgrad
import no.nav.pensjon.kalkulator.simulering.*
import no.nav.pensjon.kalkulator.simulering.api.dto.*
import no.nav.pensjon.kalkulator.simulering.api.map.SimuleringResultMapperV7.justerAlderspensjonIInnevaerendeAarV7
import java.time.LocalDate

/**
* Maps between data transfer objects (DTOs) and domain objects related to simulering.
* The DTOs are specified by version 6 of the API offered to clients.
*/
object SimuleringExtendedResultMapperV7 {

fun extendedResultV7(source: SimuleringResult) =
fun extendedResultV7(source: SimuleringResult, foedselsdato: LocalDate) =
SimuleringResultatV7(
alderspensjon = source.alderspensjon.map(::alderspensjon),
alderspensjon = source.alderspensjon.map(::alderspensjon).let { justerAlderspensjonIInnevaerendeAarV7(it, foedselsdato) },
alderspensjonMaanedligVedEndring = AlderspensjonsMaanedligV7(
gradertUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.gradertUttak,
heltUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.heltUttak ?: 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,19 @@ import no.nav.pensjon.kalkulator.general.Alder
import no.nav.pensjon.kalkulator.general.Uttaksgrad
import no.nav.pensjon.kalkulator.simulering.*
import no.nav.pensjon.kalkulator.simulering.api.dto.*
import java.time.LocalDate

/**
* Maps between data transfer objects (DTOs) and domain objects related to simulering.
* The DTOs are specified by version 6 of the API offered to clients.
* Rearranges alderspensjon for current year, when applicable.
* The DTOs are specified by version 7 of the API offered to clients.
*/
object SimuleringResultMapperV7 {

fun resultatV7(source: SimuleringResult) =
fun resultatV7(source: SimuleringResult, foedselsdato: LocalDate) =
SimuleringResultatV7(
alderspensjon = source.alderspensjon.map(::alderspensjon),
alderspensjon = source.alderspensjon.map(::alderspensjon)
.let { justerAlderspensjonIInnevaerendeAarV7(it, foedselsdato) },
alderspensjonMaanedligVedEndring = AlderspensjonsMaanedligV7(
gradertUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.gradertUttak,
heltUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.heltUttak ?: 0,
Expand All @@ -30,6 +33,37 @@ object SimuleringResultMapperV7 {
source.beloep
)

/**
* When list contains alderspensjon with age 0,
* replace it with age of current year and add it back to the list,
* if alderspensjon for current year already exists, replace it.
*/
fun justerAlderspensjonIInnevaerendeAarV7(
alderspensjonList: List<AlderspensjonsberegningV7>,
foedselsdato: LocalDate
): List<AlderspensjonsberegningV7> {
alderspensjonList
.firstOrNull { it.alder == 0 }
?.let {
val innevaerendeAarAlder = Alder.from(foedselsdato, LocalDate.now()).aar
val oppdatertAlderspensjonList = alderspensjonList
.filter { it.alder != 0 }
.filter { it.alder != innevaerendeAarAlder}
.toMutableList()
oppdatertAlderspensjonList.add(
AlderspensjonsberegningV7(
innevaerendeAarAlder,
it.beloep,
it.inntektspensjonBeloep,
it.garantipensjonBeloep,
it.delingstall,
it.pensjonBeholdningFoerUttakBeloep
)
)
return oppdatertAlderspensjonList.sortedBy { it.alder }
} ?: return alderspensjonList
}

private fun offentligAfp(source: SimulertAfpOffentlig) =
PensjonsberegningAfpOffentligV7(source.alder, source.beloep)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ object PenSimuleringResultMapper {

fun fromDto(dto: PenSimuleringResultDto) =
SimuleringResult(
alderspensjon = dto.alderspensjon.map(::alderspensjon).let { bytt0AlderMedAlderIInnevaerendeAar(it) },
alderspensjon = dto.alderspensjon.map(::alderspensjon),
alderspensjonMaanedsbeloep = alderspensjonMaanedsbeloep(dto.alderspensjonMaanedsbeloep),
afpPrivat = dto.afpPrivat.map(::afpPrivat),
afpOffentlig = dto.afpOffentliglivsvarig.map(::afpOffentlig),
Expand All @@ -20,21 +20,6 @@ object PenSimuleringResultMapper {
opptjeningGrunnlagListe = dto.opptjeningGrunnlagListe.orEmpty().map(::opptjeningGrunnlag)
)

/*
* Pesys returnerer inneværende års alderspensjon med alder 0. Vi setter den til det faktiske alderen.
* */
private fun bytt0AlderMedAlderIInnevaerendeAar(alderspensjonList: List<SimulertAlderspensjon>): List<SimulertAlderspensjon> {
return alderspensjonList
.filterNot { it.alder == 0 }
.let { filteredList ->
alderspensjonList
.firstOrNull { it.alder == 0 }
?.let { filteredList + it.copy(alder = filteredList.minOf { it.alder } - 1) }
?: filteredList
}
.sortedBy { it.alder }
}

private fun opptjeningGrunnlag(dto: PenOpptjeningGrunnlag) =
SimulertOpptjeningGrunnlag(dto.aar, dto.pensjonsgivendeInntekt)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package no.nav.pensjon.kalkulator.simulering.api.map

import io.kotest.matchers.shouldBe
import no.nav.pensjon.kalkulator.simulering.*
import no.nav.pensjon.kalkulator.simulering.api.dto.*
import org.junit.jupiter.api.Test
import java.time.LocalDate

class PersonligSimuleringExtendedResultMapperV8Test{
@Test
fun `extendedResultV8 maps domain to V8 DTO`() {
PersonligSimuleringExtendedResultMapperV8.extendedResultV8(
SimuleringResult(
alderspensjon = listOf(
SimulertAlderspensjon(
alder = 67,
beloep = 123456,
inntektspensjonBeloep = 1,
garantipensjonBeloep = 2,
delingstall = 3.4,
pensjonBeholdningFoerUttak = 5
)
),
alderspensjonMaanedsbeloep = AlderspensjonMaanedsbeloep(gradertUttak = 6, heltUttak = 7),
afpPrivat = listOf(SimulertAfpPrivat(alder = 67, beloep = 12000)),
afpOffentlig = listOf(SimulertAfpOffentlig(alder = 67, beloep = 12000)),
vilkaarsproeving = Vilkaarsproeving(innvilget = true, alternativ = null),
harForLiteTrygdetid = true,
trygdetid = 10,
opptjeningGrunnlagListe = listOf(
SimulertOpptjeningGrunnlag(aar = 2001, pensjonsgivendeInntektBeloep = 501000),
SimulertOpptjeningGrunnlag(aar = 2002, pensjonsgivendeInntektBeloep = 502000)
)
), LocalDate.now().minusYears(67).minusMonths(1)
) shouldBe PersonligSimuleringResultV8(
alderspensjon = listOf(
PersonligSimuleringAlderspensjonResultV8(
alder = 67,
beloep = 123456,
inntektspensjonBeloep = 1,
garantipensjonBeloep = 2,
delingstall = 3.4,
pensjonBeholdningFoerUttakBeloep = 5
)
),
alderspensjonMaanedligVedEndring = PersonligSimuleringMaanedligPensjonResultV8(
gradertUttakMaanedligBeloep = 6,
heltUttakMaanedligBeloep = 7
),
afpPrivat = listOf(PersonligSimuleringAarligPensjonResultV8(alder = 67, beloep = 12000)),
afpOffentlig = listOf(PersonligSimuleringAarligPensjonResultV8(alder = 67, beloep = 12000)),
vilkaarsproeving = PersonligSimuleringVilkaarsproevingResultV8(vilkaarErOppfylt = true, alternativ = null),
harForLiteTrygdetid = true,
trygdetid = 10,
opptjeningGrunnlagListe = listOf(
PersonligSimuleringAarligInntektResultV8(aar = 2001, pensjonsgivendeInntektBeloep = 501000),
PersonligSimuleringAarligInntektResultV8(aar = 2002, pensjonsgivendeInntektBeloep = 502000)
)
)
}
}
Loading
Loading