Skip to content

Commit

Permalink
Maks godkjent beløp validering (#497)
Browse files Browse the repository at this point in the history
* Maks godkjent beløp validering

* Legg til test
  • Loading branch information
ugur93 authored Sep 20, 2024
1 parent c0eb73b commit 0824329
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 13 deletions.
2 changes: 1 addition & 1 deletion .nais/feature.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 10 additions & 0 deletions src/main/kotlin/no/nav/bidrag/behandling/service/UtgiftService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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`() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<HttpClientErrorException> { 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<HttpClientErrorException> { 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()
Expand Down
26 changes: 14 additions & 12 deletions src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 0824329

Please sign in to comment.