diff --git a/src/main/kotlin/no/nav/familie/oppdrag/rest/SimuleringController.kt b/src/main/kotlin/no/nav/familie/oppdrag/rest/SimuleringController.kt index 3b336d8b..f9eb4804 100644 --- a/src/main/kotlin/no/nav/familie/oppdrag/rest/SimuleringController.kt +++ b/src/main/kotlin/no/nav/familie/oppdrag/rest/SimuleringController.kt @@ -2,7 +2,6 @@ package no.nav.familie.oppdrag.rest import jakarta.validation.Valid import no.nav.familie.kontrakter.felles.Ressurs -import no.nav.familie.kontrakter.felles.oppdrag.RestSimulerResultat import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsoppdrag import no.nav.familie.kontrakter.felles.simulering.DetaljertSimuleringResultat import no.nav.familie.kontrakter.felles.simulering.FeilutbetalingerFraSimulering @@ -22,21 +21,16 @@ import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @RestController -@RequestMapping("/api/simulering", consumes = [MediaType.APPLICATION_JSON_VALUE], produces = [MediaType.APPLICATION_JSON_VALUE]) +@RequestMapping( + "/api/simulering", + consumes = [MediaType.APPLICATION_JSON_VALUE], + produces = [MediaType.APPLICATION_JSON_VALUE], +) @ProtectedWithClaims(issuer = "azuread") class SimuleringController(@Autowired val simuleringTjeneste: SimuleringTjeneste) { val logger: Logger = LoggerFactory.getLogger(SimuleringController::class.java) - @PostMapping(path = ["/etterbetalingsbelop"]) - fun hentEtterbetalingsbeløp( - @Valid @RequestBody - utbetalingsoppdrag: Utbetalingsoppdrag, - ): ResponseEntity> { - logger.info("Hente simulert etterbetaling for saksnr ${utbetalingsoppdrag.saksnummer}") - return ok(simuleringTjeneste.utførSimulering(utbetalingsoppdrag)) - } - @PostMapping(path = ["/v1"]) fun utførSimuleringOgHentResultat( @Valid @RequestBody diff --git a/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimulerBeregningResponseMapper.kt b/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimulerBeregningResponseMapper.kt deleted file mode 100644 index 07953914..00000000 --- a/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimulerBeregningResponseMapper.kt +++ /dev/null @@ -1,47 +0,0 @@ -package no.nav.familie.oppdrag.simulering - -import no.nav.familie.kontrakter.felles.oppdrag.RestSimulerResultat -import no.nav.system.os.entiteter.beregningskjema.BeregningsPeriode -import no.nav.system.os.tjenester.simulerfpservice.simulerfpservicegrensesnitt.SimulerBeregningResponse -import java.time.LocalDate -import java.time.format.DateTimeFormatter - -fun SimulerBeregningResponse.toRestSimulerResult( - dato: LocalDate = LocalDate.now(), -): RestSimulerResultat { - val totalEtterbetalingsBeløp = - this.response?.simulering?.beregningsPeriode?.sumOf { finnEtterbetalingPerPeriode(it, dato) } - ?: 0 - - return RestSimulerResultat(etterbetaling = totalEtterbetalingsBeløp) -} - -private fun finnEtterbetalingPerPeriode(beregningsPeriode: BeregningsPeriode, dato: LocalDate, kodeFagomraade: String = "BA"): Int { - // Fremtidige perioder gir ingen etterbetaling. - val datoFraPeriode = LocalDate.parse(beregningsPeriode.periodeFom, DateTimeFormatter.ISO_DATE) - if (datoFraPeriode > dato) return 0 - - val stoppNivaBA = - beregningsPeriode.beregningStoppnivaa.filter { it.kodeFagomraade?.trim() == kodeFagomraade } - - // Feilutbetaling medfører at etterbetaling er 0 - val inneholderFeilutbetalingType = - stoppNivaBA.any { stopNivå -> stopNivå.beregningStoppnivaaDetaljer.any { detaljer -> detaljer.typeKlasse?.trim() == TypeKlasse.FEIL.name } } - if (inneholderFeilutbetalingType) return 0 - - // Summer perioder av type YTEL og med forfallsdato bak i tiden. - val sum = stoppNivaBA.filter { forfallPassert(it.forfall, dato) } - .flatMap { it.beregningStoppnivaaDetaljer } - .filter { it.typeKlasse?.trim() == TypeKlasse.YTEL.name } - .sumOf { it.belop?.toInt() ?: 0 } - return sum -} - -private fun forfallPassert(forfall: String, dato: LocalDate): Boolean = - dato >= LocalDate.parse(forfall, DateTimeFormatter.ISO_DATE) - -// TODO: Er dette det same som PosteringType? -enum class TypeKlasse { - FEIL, - YTEL, -} diff --git a/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjeneste.kt b/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjeneste.kt index 0f40d411..3bb78cd3 100644 --- a/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjeneste.kt +++ b/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjeneste.kt @@ -1,6 +1,5 @@ package no.nav.familie.oppdrag.simulering -import no.nav.familie.kontrakter.felles.oppdrag.RestSimulerResultat import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsoppdrag import no.nav.familie.kontrakter.felles.simulering.DetaljertSimuleringResultat import no.nav.familie.kontrakter.felles.simulering.FeilutbetalingerFraSimulering @@ -9,7 +8,6 @@ import no.nav.system.os.tjenester.simulerfpservice.simulerfpservicegrensesnitt.S interface SimuleringTjeneste { - fun utførSimulering(utbetalingsoppdrag: Utbetalingsoppdrag): RestSimulerResultat fun utførSimuleringOghentDetaljertSimuleringResultat(utbetalingsoppdrag: Utbetalingsoppdrag): DetaljertSimuleringResultat fun hentSimulerBeregningResponse(utbetalingsoppdrag: Utbetalingsoppdrag): SimulerBeregningResponse fun hentFeilutbetalinger(request: HentFeilutbetalingerFraSimuleringRequest): FeilutbetalingerFraSimulering diff --git a/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjenesteE2E.kt b/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjenesteE2E.kt index a7c6679d..2a7a020c 100644 --- a/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjenesteE2E.kt +++ b/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjenesteE2E.kt @@ -1,6 +1,5 @@ package no.nav.familie.oppdrag.simulering -import no.nav.familie.kontrakter.felles.oppdrag.RestSimulerResultat import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsoppdrag import no.nav.familie.kontrakter.felles.simulering.DetaljertSimuleringResultat import no.nav.familie.kontrakter.felles.simulering.FeilutbetalingerFraSimulering @@ -14,8 +13,6 @@ import org.springframework.web.context.annotation.ApplicationScope @ApplicationScope @Profile("e2e") class SimuleringTjenesteE2E : SimuleringTjeneste { - - override fun utførSimulering(utbetalingsoppdrag: Utbetalingsoppdrag): RestSimulerResultat = RestSimulerResultat(0) override fun utførSimuleringOghentDetaljertSimuleringResultat(utbetalingsoppdrag: Utbetalingsoppdrag): DetaljertSimuleringResultat = DetaljertSimuleringResultat(simuleringMottaker = emptyList()) diff --git a/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjenesteImpl.kt b/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjenesteImpl.kt index e12158ef..5178c881 100644 --- a/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjenesteImpl.kt +++ b/src/main/kotlin/no/nav/familie/oppdrag/simulering/SimuleringTjenesteImpl.kt @@ -1,12 +1,12 @@ package no.nav.familie.oppdrag.simulering import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper -import no.nav.familie.kontrakter.felles.oppdrag.RestSimulerResultat import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsoppdrag import no.nav.familie.kontrakter.felles.simulering.DetaljertSimuleringResultat import no.nav.familie.kontrakter.felles.simulering.FeilutbetalingerFraSimulering import no.nav.familie.kontrakter.felles.simulering.FeilutbetaltPeriode import no.nav.familie.kontrakter.felles.simulering.HentFeilutbetalingerFraSimuleringRequest +import no.nav.familie.kontrakter.felles.simulering.PosteringType import no.nav.familie.oppdrag.common.logSoapFaultException import no.nav.familie.oppdrag.config.FinnesIkkeITps import no.nav.familie.oppdrag.config.IntegrasjonException @@ -41,10 +41,6 @@ class SimuleringTjenesteImpl( val mapper = jacksonObjectMapper() val simuleringResultatTransformer = SimuleringResultatTransformer() - override fun utførSimulering(utbetalingsoppdrag: Utbetalingsoppdrag): RestSimulerResultat { - return hentSimulerBeregningResponse(utbetalingsoppdrag).toRestSimulerResult() - } - override fun hentSimulerBeregningResponse(utbetalingsoppdrag: Utbetalingsoppdrag): SimulerBeregningResponse { val simulerBeregningRequest = simulerBeregningRequestMapper.tilSimulerBeregningRequest(utbetalingsoppdrag) @@ -130,7 +126,7 @@ class SimuleringTjenesteImpl( return simulering.beregningsPeriode.map { beregningsperiode -> beregningsperiode to beregningsperiode.beregningStoppnivaa.map { stoppNivå -> stoppNivå.beregningStoppnivaaDetaljer.filter { detalj -> - detalj.typeKlasse == TypeKlasse.FEIL.name && + detalj.typeKlasse == PosteringType.FEILUTBETALING.kode && detalj.belop > BigDecimal.ZERO } }.flatten() @@ -141,7 +137,7 @@ class SimuleringTjenesteImpl( return simulering.beregningsPeriode.associateWith { beregningsperiode -> beregningsperiode.beregningStoppnivaa.map { stoppNivå -> stoppNivå.beregningStoppnivaaDetaljer.filter { detalj -> - detalj.typeKlasse == TypeKlasse.YTEL.name + detalj.typeKlasse == PosteringType.YTELSE.kode } }.flatten() } diff --git a/src/test/kotlin/no/nav/familie/oppdrag/rest/SimuleringControllerIntegrationTest.kt b/src/test/kotlin/no/nav/familie/oppdrag/rest/SimuleringControllerIntegrationTest.kt deleted file mode 100644 index 8daaf3cd..00000000 --- a/src/test/kotlin/no/nav/familie/oppdrag/rest/SimuleringControllerIntegrationTest.kt +++ /dev/null @@ -1,28 +0,0 @@ -package no.nav.familie.oppdrag.rest - -import no.nav.familie.oppdrag.repository.SimuleringLagerTjenesteE2E -import no.nav.familie.oppdrag.simulering.SimulerBeregningRequestMapper -import no.nav.familie.oppdrag.simulering.SimuleringTjenesteImpl -import no.nav.familie.oppdrag.simulering.mock.SimuleringSenderMock -import no.nav.familie.oppdrag.simulering.util.lagTestUtbetalingsoppdragForFGBMedEttBarn -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.test.context.ActiveProfiles -import kotlin.test.assertTrue - -@ActiveProfiles("dev") -@SpringBootTest( - classes = [SimuleringController::class, SimuleringSenderMock::class, SimuleringTjenesteImpl::class, SimulerBeregningRequestMapper::class, SimuleringLagerTjenesteE2E::class], - properties = ["spring.cloud.vault.enabled=false"], -) -internal class SimuleringControllerIntegrationTest { - - @Autowired lateinit var simuleringController: SimuleringController - - @Test - fun test_etterbetalingsbelop() { - val response = simuleringController.hentEtterbetalingsbeløp(lagTestUtbetalingsoppdragForFGBMedEttBarn()) - assertTrue(1054 == response.body?.data?.etterbetaling || 3162 == response.body?.data?.etterbetaling) - } -} diff --git a/src/test/kotlin/no/nav/familie/oppdrag/simulering/SimulerBeregningResponseMapperTest.kt b/src/test/kotlin/no/nav/familie/oppdrag/simulering/SimulerBeregningResponseMapperTest.kt deleted file mode 100644 index 0ceb939a..00000000 --- a/src/test/kotlin/no/nav/familie/oppdrag/simulering/SimulerBeregningResponseMapperTest.kt +++ /dev/null @@ -1,126 +0,0 @@ -package no.nav.familie.oppdrag.simulering - -import no.nav.familie.oppdrag.simulering.util.lagBeregningStoppniva -import no.nav.familie.oppdrag.simulering.util.lagBeregningStoppnivaFeilUtbetaling -import no.nav.familie.oppdrag.simulering.util.lagBeregningStoppnivaRevurdering -import no.nav.familie.oppdrag.simulering.util.lagBeregningsPeriode -import no.nav.familie.oppdrag.simulering.util.lagSimulerBeregningResponse -import no.nav.system.os.entiteter.beregningskjema.BeregningsPeriode -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Test -import org.springframework.test.context.ActiveProfiles -import java.time.LocalDate -import java.time.Month - -@ActiveProfiles("dev") -class SimulerBeregningResponseMapperTest() { - - val dagensDato: LocalDate = LocalDate.of(2020, Month.SEPTEMBER, 15) - - @Test - fun beregn_etterbetaling_føregående_måned() { - val enTideligereMåned = dagensDato.minusMonths(1) - - val periodeNåværendeMåned = lagBeregningsPeriode( - listOf(lagBeregningStoppniva(dagensDato, 2)), - dagensDato, - ) - - val periodeTidligereMåned = lagBeregningsPeriode( - listOf(lagBeregningStoppniva(enTideligereMåned)), - enTideligereMåned, - ) - - val response = lagSimulerBeregningResponse(listOf(periodeNåværendeMåned, periodeTidligereMåned)) - val dto = response.toRestSimulerResult(dagensDato) - - assertEquals(1000, dto.etterbetaling) - } - - @Test - fun bergen_etterbetaling_nåværende_og_foregaende_maned() { - val enTideligereMåned = dagensDato.minusMonths(1) - val enSenereMåned = dagensDato.plusMonths(1) - - val periodeNesteMåned = lagBeregningsPeriode( - listOf(lagBeregningStoppniva(enSenereMåned)), - enSenereMåned, - ) - - val periodeNåværendeMåned = lagBeregningsPeriode( - listOf(lagBeregningStoppniva(dagensDato)), - dagensDato, - ) - - val periodeTidligereMåned = lagBeregningsPeriode( - listOf(lagBeregningStoppniva(enTideligereMåned)), - enTideligereMåned, - ) - - val response = lagSimulerBeregningResponse( - listOf( - periodeNesteMåned, - periodeNåværendeMåned, - periodeTidligereMåned, - ), - ) - val dto = response.toRestSimulerResult(dagensDato) - - assertEquals(2000, dto.etterbetaling) - } - - @Test - fun bergen_etterbetaling_med_revurdering() { - val enTideligereMåned = dagensDato.minusMonths(1) - - val periodeNåværendeMåned = lagBeregningsPeriode( - listOf(lagBeregningStoppniva(dagensDato, 2)), - dagensDato, - ) - - val periodeTidligereMåned = lagBeregningsPeriode( - listOf(lagBeregningStoppnivaRevurdering(enTideligereMåned)), - enTideligereMåned, - ) - - val response = lagSimulerBeregningResponse(listOf(periodeNåværendeMåned, periodeTidligereMåned)) - val dto = response.toRestSimulerResult(dagensDato) - - assertEquals(500, dto.etterbetaling) - } - - @Test - fun bergen_etterbetaling_med_feilutbetaling() { - val enTideligereMåned = dagensDato.minusMonths(1) - - val periodeNåværendeMåned = lagBeregningsPeriode( - listOf(lagBeregningStoppniva(dagensDato, 2)), - dagensDato, - ) - - val periodeTidligereMåned = lagBeregningsPeriode( - listOf(lagBeregningStoppnivaFeilUtbetaling(enTideligereMåned)), - enTideligereMåned, - ) - - val response = lagSimulerBeregningResponse(listOf(periodeNåværendeMåned, periodeTidligereMåned)) - val dto = response.toRestSimulerResult(dagensDato) - - assertEquals(0, dto.etterbetaling) - } - - @Test - fun bergen_et_år() { - val beregningsPerioder = mutableListOf() - - for (manedNr in 1L..12L) { - val maned = dagensDato.minusMonths(manedNr) - beregningsPerioder.add(lagBeregningsPeriode(listOf(lagBeregningStoppniva(maned)), maned)) - } - - val response = lagSimulerBeregningResponse(beregningsPerioder.toList()) - val dto = response.toRestSimulerResult(dagensDato) - - assertEquals(12000, dto.etterbetaling) - } -} diff --git a/src/test/kotlin/no/nav/familie/oppdrag/simulering/util/SimuleringTestUtils.kt b/src/test/kotlin/no/nav/familie/oppdrag/simulering/util/SimuleringTestUtils.kt index 1a14f4a9..abbaec67 100644 --- a/src/test/kotlin/no/nav/familie/oppdrag/simulering/util/SimuleringTestUtils.kt +++ b/src/test/kotlin/no/nav/familie/oppdrag/simulering/util/SimuleringTestUtils.kt @@ -3,7 +3,7 @@ package no.nav.familie.oppdrag.simulering.util import io.mockk.InternalPlatformDsl.toStr import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsoppdrag import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsperiode -import no.nav.familie.oppdrag.simulering.TypeKlasse +import no.nav.familie.kontrakter.felles.simulering.PosteringType import no.nav.system.os.entiteter.beregningskjema.Beregning import no.nav.system.os.entiteter.beregningskjema.BeregningStoppnivaa import no.nav.system.os.entiteter.beregningskjema.BeregningStoppnivaaDetaljer @@ -92,20 +92,6 @@ fun lagTestSimuleringResponse(): SimulerBeregningResponse { return lagSimulerBeregningResponse(listOf(periodeNåværendeMåned, periodeTidligereMåned)) } -fun lagBeregningStoppnivaFeilUtbetaling( - date: LocalDate, - forfall: Long = 0, - fagOmrade: String = "BA", -): BeregningStoppnivaa { - val beregningStoppnivaa = BeregningStoppnivaa() - beregningStoppnivaa.forfall = date.plusDays(forfall).toString() - beregningStoppnivaa.kodeFagomraade = fagOmrade - - beregningStoppnivaa.beregningStoppnivaaDetaljer.add(lagBeregningStoppnivaaDetaljer(TypeKlasse.FEIL.name)) - - return beregningStoppnivaa -} - fun lagBeregningStoppniva( date: LocalDate, forfall: Long = 0, @@ -121,28 +107,13 @@ fun lagBeregningStoppniva( return beregningStoppnivaa } -fun lagBeregningStoppnivaRevurdering( - date: LocalDate, - forfall: Long = 0, - fagOmrade: String = "BA", -): BeregningStoppnivaa { - val beregningStoppnivaa = BeregningStoppnivaa() - beregningStoppnivaa.forfall = date.plusDays(forfall).toString() - beregningStoppnivaa.kodeFagomraade = fagOmrade - - beregningStoppnivaa.beregningStoppnivaaDetaljer.add(lagBeregningStoppnivaaDetaljer(belop = BigDecimal(1000))) - beregningStoppnivaa.beregningStoppnivaaDetaljer.add(lagBeregningStoppnivaaDetaljer(belop = BigDecimal(-500))) - - return beregningStoppnivaa -} - private fun lagBeregningStoppnivaaDetaljer( - typeKlasse: String = TypeKlasse.YTEL.name, + posteringType: PosteringType = PosteringType.YTELSE, belop: BigDecimal = BigDecimal(1000), dato: LocalDate? = null, ): BeregningStoppnivaaDetaljer { val beregningStoppnivaaDetaljer = BeregningStoppnivaaDetaljer() - beregningStoppnivaaDetaljer.typeKlasse = typeKlasse + beregningStoppnivaaDetaljer.typeKlasse = posteringType.kode beregningStoppnivaaDetaljer.belop = belop beregningStoppnivaaDetaljer.faktiskFom = dato?.toStr() beregningStoppnivaaDetaljer.faktiskTom = dato?.plusMonths(1).toStr()