From 08243299c305f2ad3a964206ca52c28de66a1290 Mon Sep 17 00:00:00 2001 From: Ugur Alpay Cenar Date: Fri, 20 Sep 2024 09:37:52 +0200 Subject: [PATCH] =?UTF-8?q?Maks=20godkjent=20bel=C3=B8p=20validering=20(#4?= =?UTF-8?q?97)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Maks godkjent beløp validering * Legg til test --- .nais/feature.yaml | 2 +- .../behandling/service/UtgiftService.kt | 10 ++++ .../behandling/transformers/Validering.kt | 7 +++ .../behandling/service/UtgiftserviceTest.kt | 50 +++++++++++++++++++ .../OppdaterUtgiftRequestValideringTest.kt | 38 ++++++++++++++ .../behandling/utils/testdata/Testdata.kt | 26 +++++----- 6 files changed, 120 insertions(+), 13 deletions(-) diff --git a/.nais/feature.yaml b/.nais/feature.yaml index 15b164012..38979b30e 100644 --- a/.nais/feature.yaml +++ b/.nais/feature.yaml @@ -19,7 +19,7 @@ env: BIDRAG_SAK_URL: https://bidrag-sak-feature.dev-fss-pub.nais.io/bidrag-sak BIDRAG_SAK_SCOPE: dev-fss.bidrag.bidrag-sak-feature TOPIC_VEDTAK: bidrag.vedtak-feature - BIDRAG_ORGANISASJON_SCOPE: dev-fss.bidrag.bidrag-organisasjon + BIDRAG_ORGANISASJON_SCOPE: dev-fss.bidrag.bidrag-organisasjon-feature BIDRAG_ORGANISASJON_URL: https://bidrag-organisasjon-feature.dev-fss-pub.nais.io/bidrag-organisasjon BIDRAG_SJABLON_URL: https://bidrag-sjablon.dev-fss-pub.nais.io/bidrag-sjablon ARBEID_OG_INNTEKT_URL: https://arbeid-og-inntekt-q1.dev-fss-pub.nais.io/api/v2 diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/UtgiftService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/UtgiftService.kt index 63561c423..2ec9b9c86 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/UtgiftService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/UtgiftService.kt @@ -86,6 +86,10 @@ class UtgiftService( secureLogger.info { "Sletter utgift $it fra behandling $behandlingsid" } utgift.utgiftsposter.remove(it) } + if (utgift.utgiftsposter.isEmpty()) { + log.info { "Alle utgifter er slettet. Sletter utgift maks godkjent beløp" } + utgift.slettMaksGodkjentBeløp() + } } else if (request.angreSisteEndring == true) { log.info { "Angrer siste endring i utgiftsposter for behandling $behandlingsid" } behandling.utgift = utgift.gjenopprettHistorikk() @@ -105,6 +109,12 @@ class UtgiftService( } } + private fun Utgift.slettMaksGodkjentBeløp() { + maksGodkjentBeløpTaMed = false + maksGodkjentBeløp = null + maksGodkjentBeløpBegrunnelse = null + } + private fun Utgift.lagreHistorikk() { forrigeUtgiftsposterHistorikk = commonObjectmapper.writeValueAsString(utgiftsposter) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Validering.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Validering.kt index 2dfbd8702..7e81d258c 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Validering.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Validering.kt @@ -141,6 +141,13 @@ fun OppdatereUtgiftRequest.valider(behandling: Behandling) { } if (maksGodkjentBeløp != null && utgift != null) { + if (behandling.kategori != Særbidragskategori.KONFIRMASJON.name) { + feilliste.add("Kan ikke sette maks godkjent beløp for behandling som ikke er av kategori ${Særbidragskategori.KONFIRMASJON}") + } + if (utgift.utgiftsposter.isEmpty()) { + feilliste.add("Kan ikke sette maks godkjent beløp for behandling uten utgiftsposter") + } + val maksGodkjentBeløpVerdi = maksGodkjentBeløp.beløp ?: BigDecimal.ZERO if (maksGodkjentBeløpVerdi < BigDecimal.ZERO) { feilliste.add("Maks godkjent beløp kan ikke være negativ") diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/UtgiftserviceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/UtgiftserviceTest.kt index 0fe258eb4..377b26eb8 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/UtgiftserviceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/UtgiftserviceTest.kt @@ -722,6 +722,56 @@ class UtgiftserviceTest : TestContainerRunner() { behandlingEtter!!.utgift!!.maksGodkjentBeløpBegrunnelse shouldBe "Dette er kommentar" } + @Test + @Transactional + fun `skal slette maks godkjent beløp hvis ingen utgiftsposter`() { + val behandling = oppretteBehandlingForSærbidrag() + + behandling.utgift = + Utgift( + behandling = behandling, + beløpDirekteBetaltAvBp = BigDecimal(0), + ) + behandling.utgift!!.maksGodkjentBeløpTaMed = true + behandling.utgift!!.maksGodkjentBeløp = BigDecimal(100) + behandling.utgift!!.maksGodkjentBeløpBegrunnelse = "DEtte er test" + behandling.utgift!!.utgiftsposter = + mutableSetOf( + Utgiftspost( + dato = LocalDate.now().minusMonths(3), + type = Utgiftstype.KONFIRMASJONSLEIR.name, + kravbeløp = BigDecimal(2000), + godkjentBeløp = BigDecimal(1600), + kommentar = "Test", + utgift = behandling.utgift!!, + ), + ) + testdataManager.lagreBehandlingNewTransaction(behandling) + val utgiftspostSlettId = + behandling.utgift!! + .utgiftsposter + .first() + .id + val forespørsel = + OppdatereUtgiftRequest( + sletteUtgift = utgiftspostSlettId, + ) + val response = utgiftService.oppdatereUtgift(behandling.id!!, forespørsel) + + response.utgiftposter shouldHaveSize 0 + response.maksGodkjentBeløp!!.beløp shouldBe null + response.maksGodkjentBeløp!!.taMed shouldBe false + response.maksGodkjentBeløp!!.begrunnelse shouldBe null + + response.avslag shouldBe null + + val behandlingEtter = testdataManager.hentBehandling(behandling.id!!) + behandlingEtter!!.utgift!!.utgiftsposter shouldHaveSize 0 + behandlingEtter!!.utgift!!.maksGodkjentBeløp shouldBe null + behandlingEtter!!.utgift!!.maksGodkjentBeløpBegrunnelse shouldBe null + behandlingEtter!!.utgift!!.maksGodkjentBeløpTaMed shouldBe false + } + @Test @Transactional fun `skal slette utgiftspost`() { diff --git a/src/test/kotlin/no/nav/bidrag/behandling/transformers/OppdaterUtgiftRequestValideringTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/transformers/OppdaterUtgiftRequestValideringTest.kt index f3d34fa30..e343b160f 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/OppdaterUtgiftRequestValideringTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/OppdaterUtgiftRequestValideringTest.kt @@ -9,6 +9,7 @@ import no.nav.bidrag.behandling.database.datamodell.Utgiftspost import no.nav.bidrag.behandling.dto.v2.utgift.MaksGodkjentBeløpDto import no.nav.bidrag.behandling.dto.v2.utgift.OppdatereUtgift import no.nav.bidrag.behandling.dto.v2.utgift.OppdatereUtgiftRequest +import no.nav.bidrag.behandling.utils.testdata.opprettUtgifstpost import no.nav.bidrag.behandling.utils.testdata.oppretteBehandling import no.nav.bidrag.domene.enums.beregning.Resultatkode import no.nav.bidrag.domene.enums.særbidrag.Særbidragskategori @@ -119,6 +120,43 @@ class OppdaterUtgiftRequestValideringTest { exception.message shouldContain "Type kan ikke settes hvis behandling har kategori OPTIKK" } + @Test + fun `skal validere at maks godkjent beløp ikke kan settes hvis utgiftsposter er tom`() { + val behandling = opprettBehandlingSærligeUtgifter() + behandling.kategori = Særbidragskategori.KONFIRMASJON.name + behandling.utgift = Utgift(behandling) + val request = + OppdatereUtgiftRequest( + maksGodkjentBeløp = + MaksGodkjentBeløpDto( + beløp = BigDecimal(2000), + begrunnelse = "Test", + ), + ) + val exception = shouldThrow { request.valider(behandling) } + + exception.message shouldContain "Kan ikke sette maks godkjent beløp for behandling uten utgiftsposter" + } + + @Test + fun `skal validere at maks godkjent beløp ikke kan settes for kategori OPTIKK`() { + val behandling = opprettBehandlingSærligeUtgifter() + behandling.kategori = Særbidragskategori.OPTIKK.name + behandling.utgift = Utgift(behandling) + behandling.utgift!!.utgiftsposter.add(behandling.utgift!!.opprettUtgifstpost(Utgiftstype.KONFIRMASJONSLEIR.name)) + val request = + OppdatereUtgiftRequest( + maksGodkjentBeløp = + MaksGodkjentBeløpDto( + beløp = BigDecimal(2000), + begrunnelse = "Test", + ), + ) + val exception = shouldThrow { request.valider(behandling) } + + exception.message shouldContain "Kan ikke sette maks godkjent beløp for behandling som ikke er av kategori KONFIRMASJON" + } + @Test fun `skal validere at utgiftstype er ikke kan settes for kategori TANNREGULERING`() { val behandling = opprettBehandlingSærligeUtgifter() diff --git a/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt b/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt index 9340a080b..c952fea3f 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt @@ -988,21 +988,23 @@ fun oppretteUtgift( behandling = behandling, beløpDirekteBetaltAvBp = BigDecimal(0), ) - utgift.utgiftsposter = - mutableSetOf( - Utgiftspost( - id = if (medId) 1 else null, - dato = LocalDate.now().minusDays(3), - type = utgiftstype, - kravbeløp = BigDecimal(3000), - godkjentBeløp = BigDecimal(2500), - kommentar = "Trekker fra alkohol", - utgift = utgift, - ), - ) + utgift.utgiftsposter.add(utgift.opprettUtgifstpost(utgiftstype, medId)) return utgift } +fun Utgift.opprettUtgifstpost( + utgiftstype: String, + medId: Boolean = false, +) = Utgiftspost( + id = if (medId) 1 else null, + dato = LocalDate.now().minusDays(3), + type = utgiftstype, + kravbeløp = BigDecimal(3000), + godkjentBeløp = BigDecimal(2500), + kommentar = "Trekker fra alkohol", + utgift = this, +) + fun oppretteBehandling( inkludereInntekter: Boolean = false, inkludereSivilstand: Boolean = true,