From 3e36b78d3af65976094dd9164e180ab59f9f7aa7 Mon Sep 17 00:00:00 2001 From: Anton Fofanov Date: Tue, 7 Jan 2025 15:05:09 +0100 Subject: [PATCH 1/3] =?UTF-8?q?PEK-769=20bruk=200=20alder=20som=20alder=20?= =?UTF-8?q?for=20innev=C3=A6rende=20=C3=A5r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../simulering/api/SimuleringController.kt | 6 +- .../map/SimuleringExtendedResultMapperV7.kt | 6 +- .../api/map/SimuleringResultMapperV7.kt | 40 ++++- .../pen/map/PenSimuleringResultMapper.kt | 17 +- .../SimuleringExtendedResultMapperV7Test.kt | 3 +- .../api/map/SimuleringResultMapperV7Test.kt | 160 +++++++++++++++++- .../pen/map/PenSimuleringResultMapperTest.kt | 26 +-- 7 files changed, 220 insertions(+), 38 deletions(-) diff --git a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/SimuleringController.kt b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/SimuleringController.kt index e97ab15a..e17111a4 100644 --- a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/SimuleringController.kt +++ b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/SimuleringController.kt @@ -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) @@ -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) diff --git a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7.kt b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7.kt index f433ced7..366cc8f3 100644 --- a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7.kt +++ b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7.kt @@ -4,6 +4,8 @@ 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.justerAlderspensjonIInnevaerendeAar +import java.time.LocalDate /** * Maps between data transfer objects (DTOs) and domain objects related to simulering. @@ -11,9 +13,9 @@ import no.nav.pensjon.kalkulator.simulering.api.dto.* */ object SimuleringExtendedResultMapperV7 { - fun extendedResultV7(source: SimuleringResult) = + fun extendedResultV7(source: SimuleringResult, foedselsdato: LocalDate) = SimuleringResultatV7( - alderspensjon = source.alderspensjon.map(::alderspensjon), + alderspensjon = source.alderspensjon.map(::alderspensjon).let { justerAlderspensjonIInnevaerendeAar(it, foedselsdato) }, alderspensjonMaanedligVedEndring = AlderspensjonsMaanedligV7( gradertUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.gradertUttak, heltUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.heltUttak ?: 0, diff --git a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7.kt b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7.kt index af51a750..83748714 100644 --- a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7.kt +++ b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7.kt @@ -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 { justerAlderspensjonIInnevaerendeAar(it, foedselsdato) }, alderspensjonMaanedligVedEndring = AlderspensjonsMaanedligV7( gradertUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.gradertUttak, heltUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.heltUttak ?: 0, @@ -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 justerAlderspensjonIInnevaerendeAar( + alderspensjonList: List, + foedselsdato: LocalDate + ): List { + 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) diff --git a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/client/pen/map/PenSimuleringResultMapper.kt b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/client/pen/map/PenSimuleringResultMapper.kt index 969cb327..a581764b 100644 --- a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/client/pen/map/PenSimuleringResultMapper.kt +++ b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/client/pen/map/PenSimuleringResultMapper.kt @@ -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), @@ -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): List { - 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) diff --git a/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7Test.kt b/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7Test.kt index 12601920..452ef7ea 100644 --- a/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7Test.kt +++ b/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7Test.kt @@ -4,6 +4,7 @@ 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 SimuleringExtendedResultMapperV7Test { @@ -31,7 +32,7 @@ class SimuleringExtendedResultMapperV7Test { SimulertOpptjeningGrunnlag(aar = 2001, pensjonsgivendeInntektBeloep = 501000), SimulertOpptjeningGrunnlag(aar = 2002, pensjonsgivendeInntektBeloep = 502000) ) - ) + ), LocalDate.now().minusYears(67).minusMonths(1) ) shouldBe SimuleringResultatV7( alderspensjon = listOf( AlderspensjonsberegningV7( diff --git a/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7Test.kt b/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7Test.kt index ae298b8d..7d3ac708 100644 --- a/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7Test.kt +++ b/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7Test.kt @@ -4,6 +4,7 @@ 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 SimuleringResultMapperV7Test { @@ -31,7 +32,8 @@ class SimuleringResultMapperV7Test { SimulertOpptjeningGrunnlag(aar = 2001, pensjonsgivendeInntektBeloep = 501000), SimulertOpptjeningGrunnlag(aar = 2002, pensjonsgivendeInntektBeloep = 502000) ) - ) + ), + LocalDate.now().minusYears(67).minusMonths(1) ) shouldBe SimuleringResultatV7( alderspensjon = listOf( AlderspensjonsberegningV7( @@ -55,4 +57,160 @@ class SimuleringResultMapperV7Test { opptjeningGrunnlagListe = null ) } + + @Test + fun `resultatV7 assigns 0 age to current age, replacing existing alderspensjon at current age, when mapping domain to V7 DTO`() { + SimuleringResultMapperV7.resultatV7( + SimuleringResult( + alderspensjon = listOf( + SimulertAlderspensjon( + alder = 67, + beloep = 123456, + inntektspensjonBeloep = 1, + garantipensjonBeloep = 2, + delingstall = 3.4, + pensjonBeholdningFoerUttak = 5 + ), + SimulertAlderspensjon( + alder = 68, + beloep = 123456, + inntektspensjonBeloep = 1, + garantipensjonBeloep = 2, + delingstall = 3.4, + pensjonBeholdningFoerUttak = 5 + ), + SimulertAlderspensjon( + alder = 0, + beloep = 1, + inntektspensjonBeloep = 2, + garantipensjonBeloep = 3, + delingstall = 4.5, + pensjonBeholdningFoerUttak = 6 + ) + ), + 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 SimuleringResultatV7( + alderspensjon = listOf( + AlderspensjonsberegningV7( + alder = 67, + beloep = 1, + inntektspensjonBeloep = null, + garantipensjonBeloep = null, + delingstall = null, + pensjonBeholdningFoerUttakBeloep = null + ), + AlderspensjonsberegningV7( + alder = 68, + beloep = 123456, + inntektspensjonBeloep = null, + garantipensjonBeloep = null, + delingstall = null, + pensjonBeholdningFoerUttakBeloep = null + ) + ), + alderspensjonMaanedligVedEndring = AlderspensjonsMaanedligV7( + gradertUttakMaanedligBeloep = 6, + heltUttakMaanedligBeloep = 7 + ), + afpPrivat = listOf(PensjonsberegningV7(alder = 67, beloep = 12000)), + afpOffentlig = listOf(PensjonsberegningAfpOffentligV7(alder = 67, beloep = 12000)), + vilkaarsproeving = VilkaarsproevingV7(vilkaarErOppfylt = true, alternativ = null), + harForLiteTrygdetid = true, + trygdetid = null, + opptjeningGrunnlagListe = null + ) + } + + @Test + fun `resultatV7 assigns 0 age to current age and adds it to the list, when mapping domain to V7 DTO`() { + SimuleringResultMapperV7.resultatV7( + SimuleringResult( + alderspensjon = listOf( + SimulertAlderspensjon( + alder = 68, + beloep = 123456, + inntektspensjonBeloep = 1, + garantipensjonBeloep = 2, + delingstall = 3.4, + pensjonBeholdningFoerUttak = 5 + ), + SimulertAlderspensjon( + alder = 69, + beloep = 123456, + inntektspensjonBeloep = 1, + garantipensjonBeloep = 2, + delingstall = 3.4, + pensjonBeholdningFoerUttak = 5 + ), + SimulertAlderspensjon( + alder = 0, + beloep = 1, + inntektspensjonBeloep = 2, + garantipensjonBeloep = 3, + delingstall = 4.5, + pensjonBeholdningFoerUttak = 6 + ) + ), + 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 SimuleringResultatV7( + alderspensjon = listOf( + AlderspensjonsberegningV7( + alder = 67, + beloep = 1, + inntektspensjonBeloep = null, + garantipensjonBeloep = null, + delingstall = null, + pensjonBeholdningFoerUttakBeloep = null + ), + AlderspensjonsberegningV7( + alder = 68, + beloep = 123456, + inntektspensjonBeloep = null, + garantipensjonBeloep = null, + delingstall = null, + pensjonBeholdningFoerUttakBeloep = null + ), + AlderspensjonsberegningV7( + alder = 69, + beloep = 123456, + inntektspensjonBeloep = null, + garantipensjonBeloep = null, + delingstall = null, + pensjonBeholdningFoerUttakBeloep = null + ) + ), + alderspensjonMaanedligVedEndring = AlderspensjonsMaanedligV7( + gradertUttakMaanedligBeloep = 6, + heltUttakMaanedligBeloep = 7 + ), + afpPrivat = listOf(PensjonsberegningV7(alder = 67, beloep = 12000)), + afpOffentlig = listOf(PensjonsberegningAfpOffentligV7(alder = 67, beloep = 12000)), + vilkaarsproeving = VilkaarsproevingV7(vilkaarErOppfylt = true, alternativ = null), + harForLiteTrygdetid = true, + trygdetid = null, + opptjeningGrunnlagListe = null + ) + } } diff --git a/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/client/pen/map/PenSimuleringResultMapperTest.kt b/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/client/pen/map/PenSimuleringResultMapperTest.kt index d91828f0..0ed94cbf 100644 --- a/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/client/pen/map/PenSimuleringResultMapperTest.kt +++ b/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/client/pen/map/PenSimuleringResultMapperTest.kt @@ -58,7 +58,7 @@ class PenSimuleringResultMapperTest { } @Test - fun `0 alder byttes med alder ett aar lavere enn laveste alder i listen og sorterer listen`() { + fun `0 alder beholdes i listen`() { PenSimuleringResultMapper.fromDto( PenSimuleringResultDto( alderspensjon = listOf( @@ -118,15 +118,7 @@ class PenSimuleringResultMapperTest { ) shouldBe SimuleringResult( alderspensjon = listOf( SimulertAlderspensjon( - alder = 49, - beloep = 1, - inntektspensjonBeloep = 2, - garantipensjonBeloep = 3, - delingstall = 0.4, - pensjonBeholdningFoerUttak = 5 - ), - SimulertAlderspensjon( - alder = 50, + alder = 100, beloep = 1001, inntektspensjonBeloep = 2001, garantipensjonBeloep = 3001, @@ -134,7 +126,7 @@ class PenSimuleringResultMapperTest { pensjonBeholdningFoerUttak = 4001 ), SimulertAlderspensjon( - alder = 75, + alder = 50, beloep = 1001, inntektspensjonBeloep = 2001, garantipensjonBeloep = 3001, @@ -142,13 +134,21 @@ class PenSimuleringResultMapperTest { pensjonBeholdningFoerUttak = 4001 ), SimulertAlderspensjon( - alder = 100, + alder = 75, beloep = 1001, inntektspensjonBeloep = 2001, garantipensjonBeloep = 3001, delingstall = 0.51, pensjonBeholdningFoerUttak = 4001 - ) + ), + SimulertAlderspensjon( + alder = 0, + beloep = 1, + inntektspensjonBeloep = 2, + garantipensjonBeloep = 3, + delingstall = 0.4, + pensjonBeholdningFoerUttak = 5 + ), ), alderspensjonMaanedsbeloep = AlderspensjonMaanedsbeloep( gradertUttak = null, From f7c3db30bcb72d68956dd00d56ab63b101ce1390 Mon Sep 17 00:00:00 2001 From: Anton Fofanov Date: Tue, 7 Jan 2025 15:46:13 +0100 Subject: [PATCH 2/3] PEK-769 oppdater simulerAlderspensjon V8 --- .../simulering/api/SimuleringController.kt | 6 ++-- ...rsonligSimuleringExtendedResultMapperV8.kt | 6 ++-- .../map/PersonligSimuleringResultMapperV8.kt | 36 +++++++++++++++++-- .../map/SimuleringExtendedResultMapperV7.kt | 4 +-- .../api/map/SimuleringResultMapperV7.kt | 4 +-- 5 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/SimuleringController.kt b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/SimuleringController.kt index e17111a4..9a47d251 100644 --- a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/SimuleringController.kt +++ b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/SimuleringController.kt @@ -130,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) @@ -141,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) diff --git a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringExtendedResultMapperV8.kt b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringExtendedResultMapperV8.kt index 1e21bb09..6bdb3ced 100644 --- a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringExtendedResultMapperV8.kt +++ b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringExtendedResultMapperV8.kt @@ -4,6 +4,8 @@ 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. @@ -11,9 +13,9 @@ import no.nav.pensjon.kalkulator.simulering.api.dto.* */ 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), diff --git a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringResultMapperV8.kt b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringResultMapperV8.kt index 7938abb2..839bed57 100644 --- a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringResultMapperV8.kt +++ b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringResultMapperV8.kt @@ -4,6 +4,7 @@ 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. @@ -11,9 +12,9 @@ import no.nav.pensjon.kalkulator.simulering.api.dto.* */ 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), @@ -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, + foedselsdato: LocalDate + ): List { + 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, diff --git a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7.kt b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7.kt index 366cc8f3..a2025d24 100644 --- a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7.kt +++ b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringExtendedResultMapperV7.kt @@ -4,7 +4,7 @@ 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.justerAlderspensjonIInnevaerendeAar +import no.nav.pensjon.kalkulator.simulering.api.map.SimuleringResultMapperV7.justerAlderspensjonIInnevaerendeAarV7 import java.time.LocalDate /** @@ -15,7 +15,7 @@ object SimuleringExtendedResultMapperV7 { fun extendedResultV7(source: SimuleringResult, foedselsdato: LocalDate) = SimuleringResultatV7( - alderspensjon = source.alderspensjon.map(::alderspensjon).let { justerAlderspensjonIInnevaerendeAar(it, foedselsdato) }, + alderspensjon = source.alderspensjon.map(::alderspensjon).let { justerAlderspensjonIInnevaerendeAarV7(it, foedselsdato) }, alderspensjonMaanedligVedEndring = AlderspensjonsMaanedligV7( gradertUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.gradertUttak, heltUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.heltUttak ?: 0, diff --git a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7.kt b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7.kt index 83748714..63974299 100644 --- a/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7.kt +++ b/src/main/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/SimuleringResultMapperV7.kt @@ -16,7 +16,7 @@ object SimuleringResultMapperV7 { fun resultatV7(source: SimuleringResult, foedselsdato: LocalDate) = SimuleringResultatV7( alderspensjon = source.alderspensjon.map(::alderspensjon) - .let { justerAlderspensjonIInnevaerendeAar(it, foedselsdato) }, + .let { justerAlderspensjonIInnevaerendeAarV7(it, foedselsdato) }, alderspensjonMaanedligVedEndring = AlderspensjonsMaanedligV7( gradertUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.gradertUttak, heltUttakMaanedligBeloep = source.alderspensjonMaanedsbeloep?.heltUttak ?: 0, @@ -38,7 +38,7 @@ object SimuleringResultMapperV7 { * replace it with age of current year and add it back to the list, * if alderspensjon for current year already exists, replace it. */ - fun justerAlderspensjonIInnevaerendeAar( + fun justerAlderspensjonIInnevaerendeAarV7( alderspensjonList: List, foedselsdato: LocalDate ): List { From ab3f5fa6fa02a783d58460c6de374bff40f703a1 Mon Sep 17 00:00:00 2001 From: Anton Fofanov Date: Tue, 7 Jan 2025 16:30:27 +0100 Subject: [PATCH 3/3] PEK-769 legg til tester for v8-alderspensjon-simulering --- ...ligSimuleringExtendedResultMapperV8Test.kt | 61 +++++ .../PersonligSimuleringResultMapperV8Test.kt | 215 ++++++++++++++++++ 2 files changed, 276 insertions(+) create mode 100644 src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringExtendedResultMapperV8Test.kt create mode 100644 src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringResultMapperV8Test.kt diff --git a/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringExtendedResultMapperV8Test.kt b/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringExtendedResultMapperV8Test.kt new file mode 100644 index 00000000..2276db3a --- /dev/null +++ b/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringExtendedResultMapperV8Test.kt @@ -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) + ) + ) + } +} \ No newline at end of file diff --git a/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringResultMapperV8Test.kt b/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringResultMapperV8Test.kt new file mode 100644 index 00000000..d67a3222 --- /dev/null +++ b/src/test/kotlin/no/nav/pensjon/kalkulator/simulering/api/map/PersonligSimuleringResultMapperV8Test.kt @@ -0,0 +1,215 @@ +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 PersonligSimuleringResultMapperV8Test{ + @Test + fun `resultatV8 maps domain to V8 DTO`() { + PersonligSimuleringResultMapperV8.resultV8( + 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 = null, + garantipensjonBeloep = null, + delingstall = null, + pensjonBeholdningFoerUttakBeloep = null + ) + ), + 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 = null, + opptjeningGrunnlagListe = null + ) + } + + @Test + fun `resultatV8 assigns 0 age to current age, replacing existing alderspensjon at current age, when mapping domain to V8 DTO`() { + PersonligSimuleringResultMapperV8.resultV8( + SimuleringResult( + alderspensjon = listOf( + SimulertAlderspensjon( + alder = 67, + beloep = 123456, + inntektspensjonBeloep = 1, + garantipensjonBeloep = 2, + delingstall = 3.4, + pensjonBeholdningFoerUttak = 5 + ), + SimulertAlderspensjon( + alder = 68, + beloep = 123456, + inntektspensjonBeloep = 1, + garantipensjonBeloep = 2, + delingstall = 3.4, + pensjonBeholdningFoerUttak = 5 + ), + SimulertAlderspensjon( + alder = 0, + beloep = 1, + inntektspensjonBeloep = 2, + garantipensjonBeloep = 3, + delingstall = 4.5, + pensjonBeholdningFoerUttak = 6 + ) + ), + 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 = 1, + inntektspensjonBeloep = null, + garantipensjonBeloep = null, + delingstall = null, + pensjonBeholdningFoerUttakBeloep = null + ), + PersonligSimuleringAlderspensjonResultV8( + alder = 68, + beloep = 123456, + inntektspensjonBeloep = null, + garantipensjonBeloep = null, + delingstall = null, + pensjonBeholdningFoerUttakBeloep = null + ) + ), + 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 = null, + opptjeningGrunnlagListe = null + ) + } + + @Test + fun `resultatV8 assigns 0 age to current age and adds it to the list, when mapping domain to V8 DTO`() { + PersonligSimuleringResultMapperV8.resultV8( + SimuleringResult( + alderspensjon = listOf( + SimulertAlderspensjon( + alder = 68, + beloep = 123456, + inntektspensjonBeloep = 1, + garantipensjonBeloep = 2, + delingstall = 3.4, + pensjonBeholdningFoerUttak = 5 + ), + SimulertAlderspensjon( + alder = 69, + beloep = 123456, + inntektspensjonBeloep = 1, + garantipensjonBeloep = 2, + delingstall = 3.4, + pensjonBeholdningFoerUttak = 5 + ), + SimulertAlderspensjon( + alder = 0, + beloep = 1, + inntektspensjonBeloep = 2, + garantipensjonBeloep = 3, + delingstall = 4.5, + pensjonBeholdningFoerUttak = 6 + ) + ), + 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 = 1, + inntektspensjonBeloep = null, + garantipensjonBeloep = null, + delingstall = null, + pensjonBeholdningFoerUttakBeloep = null + ), + PersonligSimuleringAlderspensjonResultV8( + alder = 68, + beloep = 123456, + inntektspensjonBeloep = null, + garantipensjonBeloep = null, + delingstall = null, + pensjonBeholdningFoerUttakBeloep = null + ), + PersonligSimuleringAlderspensjonResultV8( + alder = 69, + beloep = 123456, + inntektspensjonBeloep = null, + garantipensjonBeloep = null, + delingstall = null, + pensjonBeholdningFoerUttakBeloep = null + ) + ), + 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 = null, + opptjeningGrunnlagListe = null + ) + } +} \ No newline at end of file