Skip to content

Commit

Permalink
Merge pull request #78 from navikt/use-class-as-request-body-for-simu…
Browse files Browse the repository at this point in the history
…lering-endpoint

Use class as request body for simulering endpoint
  • Loading branch information
antonfofanov authored Jan 19, 2024
2 parents 0deac63 + eadbb3d commit e16c977
Show file tree
Hide file tree
Showing 19 changed files with 460 additions and 57 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package no.nav.tjenestepensjon.simulering.model.domain.pen

import java.util.*

data class InntektDto(
val datoFom: Date,
val inntekt: Double,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package no.nav.tjenestepensjon.simulering.model.domain.pen

import java.util.*

data class OpptjeningsperiodeDto(
val stillingsprosent: Int,
val datoFom: Date,
val datoTom: Date,
val faktiskHovedlonn: Int,
val stillingsuavhengigTilleggslonn: Int,
val aldersgrense: Int,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package no.nav.tjenestepensjon.simulering.model.domain.pen

import java.util.*

data class PensjonsbeholdningsperiodeDto (
val datoFom: Date,
val pensjonsbeholdning: Double,
val garantipensjonsbeholdning: Double,
val garantitilleggsbeholdning: Double,
)

Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package no.nav.tjenestepensjon.simulering.model.domain.pen

import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import no.nav.tjenestepensjon.simulering.v2.models.domain.SivilstandCodeEnum

@JsonIgnoreProperties(ignoreUnknown = true)
data class SimulerOffentligTjenestepensjonRequest(
val fnr: String,
val fodselsdato: String,
val sisteTpnr: String?,
val sprak: String?,
val simulertAFPOffentlig: SimulertAFPOffentligDto?,
val simulertAFPPrivat: SimulertAFPPrivatDto?,
val sivilstandkode: SivilstandCodeEnum,
val inntektListe: List<InntektDto> = emptyList(),
val pensjonsbeholdningsperiodeListe: List<PensjonsbeholdningsperiodeDto> = emptyList(),
val simuleringsperiodeListe: List<SimuleringsperiodeDto> = emptyList(),
val simuleringsdataListe: List<SimuleringsdataDto> = emptyList(),
val tpForholdListe: List<TpForholdDto>? = emptyList(),
){

override fun toString(): String {
return "SimulerOffentligTjenestepensjonRequest(fodselsdato='$fodselsdato', sisteTpnr=$sisteTpnr, sprak=$sprak, simulertAFPOffentlig=$simulertAFPOffentlig, simulertAFPPrivat=$simulertAFPPrivat, sivilstandkode=$sivilstandkode, inntektListe=$inntektListe, pensjonsbeholdningsperiodeListe=$pensjonsbeholdningsperiodeListe, simuleringsperiodeListe=$simuleringsperiodeListe, simuleringsdataListe=$simuleringsdataListe, tpForholdListe=$tpForholdListe)"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package no.nav.tjenestepensjon.simulering.model.domain.pen

import java.util.*

data class SimuleringsdataDto (
val datoFom: Date,
val andvendtTrygdetid: Int,
val poengArTom1991: Int,
val poengArFom1992: Int,
val uforegradVedOmregning: Int,
val basisgp: Double,
val basispt: Double,
val basistp: Double,
val delingstallUttak: Double,
val forholdstallUttak: Double,
val sluttpoengtall: Double,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package no.nav.tjenestepensjon.simulering.model.domain.pen

import java.util.*

data class SimuleringsperiodeDto (
val datoFom: Date,
val folketrygdUttaksgrad: Int,
val stillingsprosentOffentlig: Int,
val simulerAFPOffentligEtterfulgtAvAlder: Boolean,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package no.nav.tjenestepensjon.simulering.model.domain.pen

data class SimulertAFPOffentligDto (
val simulertAFPOffentligBrutto: Int,
val tpi: Int = 0,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package no.nav.tjenestepensjon.simulering.model.domain.pen

data class SimulertAFPPrivatDto (
val afpOpptjeningTotalbelop: Int,
val kompensasjonstillegg: Double,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package no.nav.tjenestepensjon.simulering.model.domain.pen

data class TpForholdDto (
val tpnr: String,
val opptjeningsperiodeListe: List<OpptjeningsperiodeDto> = emptyList(),
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package no.nav.tjenestepensjon.simulering.rest

import com.fasterxml.jackson.core.JsonParseException
import com.fasterxml.jackson.databind.JsonMappingException
import com.fasterxml.jackson.databind.ObjectMapper
import no.nav.tjenestepensjon.simulering.AppMetrics
import no.nav.tjenestepensjon.simulering.AppMetrics.Metrics.APP_NAME
import no.nav.tjenestepensjon.simulering.AppMetrics.Metrics.APP_TOTAL_SIMULERING_CALLS
Expand All @@ -17,20 +16,20 @@ import no.nav.tjenestepensjon.simulering.model.domain.FNR
import no.nav.tjenestepensjon.simulering.model.domain.TPOrdning
import no.nav.tjenestepensjon.simulering.model.domain.TpLeverandor
import no.nav.tjenestepensjon.simulering.model.domain.TpLeverandor.EndpointImpl.REST
import no.nav.tjenestepensjon.simulering.model.domain.pen.SimulerOffentligTjenestepensjonRequest
import no.nav.tjenestepensjon.simulering.service.TpClient
import no.nav.tjenestepensjon.simulering.v1.consumer.FindTpLeverandorCallable
import no.nav.tjenestepensjon.simulering.v1.models.request.SimulerPensjonRequestV1
import no.nav.tjenestepensjon.simulering.v1.models.DtoToV1DomainMapper.toSimulerPensjonRequestV1
import no.nav.tjenestepensjon.simulering.v1.service.SimuleringServiceV1
import no.nav.tjenestepensjon.simulering.v1.service.StillingsprosentService
import no.nav.tjenestepensjon.simulering.v2.exceptions.ConnectToIdPortenException
import no.nav.tjenestepensjon.simulering.v2.exceptions.ConnectToMaskinPortenException
import no.nav.tjenestepensjon.simulering.v2.models.request.SimulerPensjonRequestV2
import no.nav.tjenestepensjon.simulering.v2.models.DtoToV2DomainMapper.toSimulerPensjonRequestV2
import no.nav.tjenestepensjon.simulering.v2.service.SimuleringServiceV2
import org.json.JSONObject
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.http.HttpStatus.*
import org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR
import org.springframework.http.HttpStatus.OK
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
Expand All @@ -53,20 +52,17 @@ class SimuleringEndpoint(
) {
private val log = LoggerFactory.getLogger(javaClass)

@Autowired
lateinit var objectMapper: ObjectMapper

@PostMapping("/simulering")
fun simuler(
@RequestBody body: String, @RequestHeader(value = NAV_CALL_ID, required = false) navCallId: String?
@RequestBody body: SimulerOffentligTjenestepensjonRequest, @RequestHeader(value = NAV_CALL_ID, required = false) navCallId: String?
): ResponseEntity<Any> {
addHeaderToRequestContext(NAV_CALL_ID, navCallId)
log.info("Processing nav-call-id: ${getHeaderFromRequestContext(NAV_CALL_ID)}")
log.debug("Received request: ${filterFnr(body)}")
log.debug("Received request: $body")
metrics.incrementCounter(APP_NAME, APP_TOTAL_SIMULERING_CALLS)

return try {
val fnr = FNR(JSONObject(body).get("fnr").toString())
val fnr = FNR(body.fnr)
val tpOrdningAndLeverandorMap = tpClient.getTpOrdningerForPerson(fnr).let(::getTpLeverandorer)
val stillingsprosentResponse =
stillingsprosentService.getStillingsprosentListe(fnr, tpOrdningAndLeverandorMap)
Expand All @@ -79,7 +75,7 @@ class SimuleringEndpoint(
if (tpLeverandor.impl == REST) {
log.debug("Request simulation from ${tpLeverandor.name} using REST")
val response = service2.simulerOffentligTjenestepensjon(
objectMapper.readValue(body, SimulerPensjonRequestV2::class.java),
body.toSimulerPensjonRequestV2(),
stillingsprosentResponse,
tpOrdning,
tpLeverandor
Expand All @@ -90,7 +86,7 @@ class SimuleringEndpoint(
} else {
log.debug("Request simulation from ${tpLeverandor.name} using SOAP")
val response = service.simulerOffentligTjenestepensjon(
objectMapper.readValue(body, SimulerPensjonRequestV1::class.java),
body.toSimulerPensjonRequestV1(),
stillingsprosentResponse,
tpOrdning,
tpLeverandor
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package no.nav.tjenestepensjon.simulering.v1.models

import no.nav.tjenestepensjon.simulering.model.domain.FNR
import no.nav.tjenestepensjon.simulering.model.domain.Pensjonsbeholdningsperiode
import no.nav.tjenestepensjon.simulering.model.domain.pen.*
import no.nav.tjenestepensjon.simulering.v1.models.domain.Inntekt
import no.nav.tjenestepensjon.simulering.v1.models.domain.Simuleringsperiode
import no.nav.tjenestepensjon.simulering.v1.models.request.SimulerPensjonRequestV1
import no.nav.tjenestepensjon.simulering.v1.models.request.SimulertAFPPrivat
import java.time.LocalDate
import java.time.ZoneId
import java.util.Date

object DtoToV1DomainMapper {

fun SimulerOffentligTjenestepensjonRequest.toSimulerPensjonRequestV1() = SimulerPensjonRequestV1(
fnr = FNR(fnr),
sivilstandkode = this.sivilstandkode.toString(),
sprak = this.sprak ?: "norsk",
simuleringsperioder = simuleringsperiodeListe.map { it.toSimuleringsperiode() },
simulertAFPOffentlig = this.simulertAFPOffentlig?.simulertAFPOffentligBrutto,
simulertAFPPrivat = this.simulertAFPPrivat?.toSimulertAFPPrivat(),
pensjonsbeholdningsperioder = this.pensjonsbeholdningsperiodeListe.map { it.toPensjonsbeholdningsperiode() },
inntekter = this.inntektListe.map { it.toInntekt() }
)

private fun SimuleringsperiodeDto.toSimuleringsperiode() =
Simuleringsperiode(
datoFom = convertToLocalDate(datoFom),
utg = this.folketrygdUttaksgrad,
stillingsprosentOffentlig = this.stillingsprosentOffentlig,
//Følgende felt er ikke med i v1
// poengArTom1991 = this.poengArTom1991,
// poengArFom1992 = this.poengArFom1992,
// sluttpoengtall = this.sluttpoengtall,
// anvendtTrygdetid = this.anvendtTrygdetid,
// forholdstall = this.forholdstall,
// delingstall = this.delingstall,
// uforegradVedOmregning = this.uforegradVedOmregning,
// delytelser = this.delytelser,
)

private fun SimulertAFPPrivatDto.toSimulertAFPPrivat() =
SimulertAFPPrivat(afpOpptjeningTotalbelop, kompensasjonstillegg)

private fun PensjonsbeholdningsperiodeDto.toPensjonsbeholdningsperiode() = Pensjonsbeholdningsperiode(
datoFom = LocalDate.from(datoFom.toInstant().atZone(ZoneId.systemDefault())),
pensjonsbeholdning = this.pensjonsbeholdning.toInt(),
garantipensjonsbeholdning = this.garantipensjonsbeholdning.toInt(),
garantitilleggsbeholdning = this.garantitilleggsbeholdning.toInt(),
)

private fun InntektDto.toInntekt() = Inntekt(convertToLocalDate(datoFom), inntekt)

private fun convertToLocalDate(dato: Date): LocalDate =
LocalDate.from(dato.toInstant().atZone(ZoneId.systemDefault()))
}


Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ data class Simuleringsperiode(
override var datoFom: LocalDate,
var utg: Int,
var stillingsprosentOffentlig: Int,
var poengArTom1991: Int,
var poengArFom1992: Int,
var sluttpoengtall: Double,
var anvendtTrygdetid: Int,
var forholdstall: Double,
var delingstall: Double,
var uforegradVedOmregning: Int,
var delytelser: List<Delytelse>
) : Dateable {
var poengArTom1991: Int? = null
var poengArFom1992: Int? = null
var sluttpoengtall: Double? = null
var anvendtTrygdetid: Int? = null
var forholdstall: Double? = null
var delingstall: Double? = null
var uforegradVedOmregning: Int? = null
var delytelser: List<Delytelse> = emptyList()
@JsonIgnore
fun isGradert() = utg < 100

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ data class Simuleringsdata(
val uforegradVedOmregning: Int
) {
constructor(periode: Simuleringsperiode) : this(
poengArTom1991 = periode.poengArTom1991,
poengArFom1992 = periode.poengArFom1992,
sluttpoengtall = periode.sluttpoengtall,
forholdstall_uttak = periode.forholdstall,
anvendtTrygdetid = periode.anvendtTrygdetid,
uforegradVedOmregning = periode.uforegradVedOmregning,
poengArTom1991 = periode.poengArTom1991!!,
poengArFom1992 = periode.poengArFom1992!!,
sluttpoengtall = periode.sluttpoengtall!!,
forholdstall_uttak = periode.forholdstall!!,
anvendtTrygdetid = periode.anvendtTrygdetid!!,
uforegradVedOmregning = periode.uforegradVedOmregning!!,
basisgp = periode.getDelytelseBelop(DelytelseType.BASISGP),
basispt = periode.getDelytelseBelop(DelytelseType.BASISPT),
basistp = periode.getDelytelseBelop(DelytelseType.BASISTP),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package no.nav.tjenestepensjon.simulering.v2.models

import no.nav.tjenestepensjon.simulering.model.domain.FNR
import no.nav.tjenestepensjon.simulering.model.domain.Pensjonsbeholdningsperiode
import no.nav.tjenestepensjon.simulering.model.domain.pen.*
import no.nav.tjenestepensjon.simulering.v2.models.DtoToV2DomainMapper.convertToLocalDate
import no.nav.tjenestepensjon.simulering.v2.models.domain.Opptjeningsperiode
import no.nav.tjenestepensjon.simulering.v2.models.request.*
import java.time.LocalDate
import java.time.ZoneId
import java.util.Date

object DtoToV2DomainMapper {

fun SimulerOffentligTjenestepensjonRequest.toSimulerPensjonRequestV2() = SimulerPensjonRequestV2(
fnr = FNR(fnr),
fodselsdato = this.fodselsdato,
sisteTpnr = this.sisteTpnr!!,
sprak = this.sprak ?: "norsk",
simulertAFPOffentlig = this.simulertAFPOffentlig?.let {
SimulertAFPOffentlig(
it.simulertAFPOffentligBrutto,
it.tpi
)
},
simulertAFPPrivat = this.simulertAFPPrivat?.toSimulertAFPPrivat(),
sivilstandkode = this.sivilstandkode,
inntektListe = this.inntektListe.map { it.toInntekt() },
pensjonsbeholdningsperiodeListe = this.pensjonsbeholdningsperiodeListe.map { it.toPensjonsbeholdningsperiode() },
simuleringsperiodeListe = simuleringsperiodeListe.map { it.toSimuleringsperiode() },
simuleringsdataListe = this.simuleringsdataListe.map { it.toSimuleringsdata() },
tpForholdListe = this.tpForholdListe?.map { it.toTpForhold() } ?: emptyList(),
)

private fun SimuleringsperiodeDto.toSimuleringsperiode() =
Simuleringsperiode(
datoFom = datoFom.convertToLocalDate(),
folketrygdUttaksgrad = this.folketrygdUttaksgrad,
stillingsprosentOffentlig = this.stillingsprosentOffentlig,
simulerAFPOffentligEtterfulgtAvAlder = this.simulerAFPOffentligEtterfulgtAvAlder,
)

private fun SimulertAFPPrivatDto.toSimulertAFPPrivat() =
SimulertAFPPrivat(afpOpptjeningTotalbelop, kompensasjonstillegg)

private fun PensjonsbeholdningsperiodeDto.toPensjonsbeholdningsperiode() = Pensjonsbeholdningsperiode(
datoFom = LocalDate.from(datoFom.toInstant().atZone(ZoneId.systemDefault())),
pensjonsbeholdning = this.pensjonsbeholdning.toInt(),
garantipensjonsbeholdning = this.garantipensjonsbeholdning.toInt(),
garantitilleggsbeholdning = this.garantitilleggsbeholdning.toInt(),
)

private fun InntektDto.toInntekt() = Inntekt(datoFom.convertToLocalDate(), inntekt)

fun Date.convertToLocalDate(): LocalDate =
LocalDate.from(this.toInstant().atZone(ZoneId.systemDefault()))

private fun SimuleringsdataDto.toSimuleringsdata() = Simuleringsdata(
datoFom = datoFom.convertToLocalDate(),
andvendtTrygdetid = this.andvendtTrygdetid,
poengArTom1991 = poengArTom1991,
poengArFom1992 = poengArFom1992,
uforegradVedOmregning = uforegradVedOmregning,
basisgp = this.basisgp,
basispt = this.basispt,
basistp = this.basistp,
delingstallUttak = this.delingstallUttak,
forholdstallUttak = this.forholdstallUttak,
sluttpoengtall = this.sluttpoengtall,
)

private fun TpForholdDto.toTpForhold() = TpForhold(this.tpnr, this.opptjeningsperiodeListe.map {
Opptjeningsperiode(
datoFom = it.datoFom.convertToLocalDate(),
datoTom = it.datoTom.convertToLocalDate(),
stillingsprosent = it.stillingsprosent.toDouble(),
aldersgrense = it.aldersgrense,
faktiskHovedlonn = it.faktiskHovedlonn,
stillingsuavhengigTilleggslonn = it.stillingsuavhengigTilleggslonn,
)
})
}




Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ data class SimulerPensjonRequestV2(
var pensjonsbeholdningsperiodeListe: List<Pensjonsbeholdningsperiode> = emptyList(),
var simuleringsperiodeListe: List<Simuleringsperiode>,
var simuleringsdataListe: List<Simuleringsdata>,
var tpForholdListe: List<TpForhold>? = emptyList()
var tpForholdListe: List<TpForhold> = emptyList()
)
Loading

0 comments on commit e16c977

Please sign in to comment.