Skip to content

Commit

Permalink
Endring gebyr api
Browse files Browse the repository at this point in the history
  • Loading branch information
ugur93 committed Dec 3, 2024
1 parent 0a3249b commit f9949a2
Show file tree
Hide file tree
Showing 9 changed files with 62 additions and 69 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ class GebyrController(
return behandling.roller.find { it.id == rolleId }!!.let { rolle ->
OppdaterGebyrResponsDto(
rolle.tilDto(),
rolle.manueltOverstyrtGebyr?.tilDto(),
overstyrGebyr = rolle.manueltOverstyrtGebyr?.overstyrGebyr == true,
begrunnelse = if (rolle.manueltOverstyrtGebyr?.overstyrGebyr == true) rolle.manueltOverstyrtGebyr?.begrunnelse else null,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ data class GebyrRolleDto(
val beløpGebyrsats: BigDecimal,
val manueltOverstyrtGebyr: ManueltOverstyrGebyrDto? = null,
val beregnetIlagtGebyr: Boolean,
val endeligIlagtGebyr: Boolean,
val begrunnelse: String? = null,
val rolle: RolleDto,
) {
data class GebyrInntektDto(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ fun Behandling.validerGebyr() =
.map {
GebyrValideringsfeilDto(
gjelder = it.tilDto(),
BestemmeGebyr = avslag != null && it.manueltOverstyrtGebyr?.ilagtGebyr == null,
manglerBegrunnelse =
if (it.manueltOverstyrtGebyr?.overstyrGebyr == true) {
it.manueltOverstyrtGebyr?.begrunnelse.isNullOrEmpty()
Expand All @@ -23,10 +22,9 @@ fun Behandling.validerGebyr() =

data class GebyrValideringsfeilDto(
val gjelder: RolleDto,
valBestemmeGebyr: Boolean,
val manglerBegrunnelse: Boolean,
) {
@get:JsonIgnore
val harFeil
get() = manglerBegrunnelse ||BestemmeGebyr
get() = manglerBegrunnelse
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@ import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto

data class OppdaterManueltGebyrDto(
val rolleId: Long,
val overstyrtGebyr: ManueltOverstyrGebyrDto?,
val overstyrGebyr: Boolean = false,
val begrunnelse: String? = null,
@Deprecated("Bruk begrunnelse")
val overstyrtGebyr: ManueltOverstyrGebyrDto? = null,
)

data class OppdaterGebyrResponsDto(
val rolle: RolleDto,
val overstyrtGebyr: ManueltOverstyrGebyrDto?,
val overstyrGebyr: Boolean = false,
val begrunnelse: String? = null,
)

data class ManueltOverstyrGebyrDto(
Expand Down
42 changes: 21 additions & 21 deletions src/main/kotlin/no/nav/bidrag/behandling/service/GebyrService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ import no.nav.bidrag.behandling.transformers.validerSann
import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.VedtakGrunnlagMapper
import no.nav.bidrag.behandling.ugyldigForespørsel
import no.nav.bidrag.domene.enums.behandling.TypeBehandling
import no.nav.bidrag.transport.felles.ifTrue
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional

val defaultIlagtGebyrVedAvslag = false

@Service
class GebyrService(
private val vedtakGrunnlagMapper: VedtakGrunnlagMapper,
Expand All @@ -23,16 +24,16 @@ class GebyrService(
.filter { it.harGebyrsøknad }
.forEach { rolle ->
rolle.manueltOverstyrtGebyr =
(rolle.manueltOverstyrtGebyr ?: RolleManueltOverstyrtGebyr()).let {
it.copy(
overstyrGebyr = behandling.avslag != null,
ilagtGebyr =
(behandling.avslag == null).ifTrue {
val beregning = vedtakGrunnlagMapper.beregnGebyr(behandling, rolle)
!beregning.ilagtGebyr
},
)
}
(rolle.manueltOverstyrtGebyr ?: RolleManueltOverstyrtGebyr()).copy(
overstyrGebyr = false,
ilagtGebyr =
if (behandling.avslag == null) {
val beregning = vedtakGrunnlagMapper.beregnGebyr(behandling, rolle)
!beregning.ilagtGebyr
} else {
defaultIlagtGebyrVedAvslag
},
)
}
}

Expand All @@ -49,9 +50,15 @@ class GebyrService(
rolle.manueltOverstyrtGebyr =
(rolle.manueltOverstyrtGebyr ?: RolleManueltOverstyrtGebyr()).let {
it.copy(
overstyrGebyr = request.overstyrtGebyr != null,
ilagtGebyr = request.overstyrtGebyr?.ilagtGebyr ?: (behandling.avslag == null).ifTrue { !beregning.ilagtGebyr },
begrunnelse = request.overstyrtGebyr?.begrunnelse ?: it.begrunnelse,
overstyrGebyr = request.overstyrGebyr,
ilagtGebyr =
if (behandling.avslag == null) {
request.overstyrGebyr != beregning.ilagtGebyr
} else {
// Default så er det fritatt ved avslag
request.overstyrGebyr != defaultIlagtGebyrVedAvslag
},
begrunnelse = request.begrunnelse ?: it.begrunnelse,
)
}
}
Expand All @@ -70,13 +77,6 @@ class GebyrService(
"Kan ikke endre gebyr på en rolle som ikke har gebyrsøknad",
)

if (avslag == null) {
feilListe.validerSann(
request.overstyrtGebyr?.ilagtGebyr == null,
"Kan ikke sette gebyr til samme som beregnet gebyr når det ikke er avslag",
)
}

if (feilListe.isNotEmpty()) {
ugyldigForespørsel(feilListe.toSet().joinToString("\n"))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftBeregningDto
import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftspostDto
import no.nav.bidrag.behandling.dto.v2.underhold.DatoperiodeDto
import no.nav.bidrag.behandling.dto.v2.underhold.UnderholdskostnadDto
import no.nav.bidrag.behandling.service.defaultIlagtGebyrVedAvslag
import no.nav.bidrag.behandling.transformers.behandling.tilDto
import no.nav.bidrag.behandling.transformers.gebyr.tilDto
import no.nav.bidrag.behandling.transformers.utgift.tilBeregningDto
Expand Down Expand Up @@ -83,7 +84,9 @@ fun BeregnGebyrResultat.tilDto(rolle: Rolle) =
maksBarnetillegg = maksBarnetillegg,
),
manueltOverstyrtGebyr = rolle.manueltOverstyrtGebyr?.tilDto(),
beregnetIlagtGebyr = ilagtGebyr,
beregnetIlagtGebyr = if (rolle.behandling.avslag == null) ilagtGebyr else defaultIlagtGebyrVedAvslag,
begrunnelse = rolle.manueltOverstyrtGebyr?.begrunnelse,
endeligIlagtGebyr = rolle.manueltOverstyrtGebyr?.ilagtGebyr == true,
beløpGebyrsats = beløpGebyrsats,
rolle = rolle.tilDto(),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ class GebyrValideringsfeilTest {
val resultat = behandling.validerGebyr()
resultat.shouldHaveSize(1)
resultat.first().manglerBegrunnelse shouldBe true
resultat.first().måBestemmeGebyr shouldBe false
}

@Test
Expand All @@ -33,7 +32,6 @@ class GebyrValideringsfeilTest {
val resultat = behandling.validerGebyr()
resultat.shouldHaveSize(1)
resultat.first().manglerBegrunnelse shouldBe true
resultat.first().måBestemmeGebyr shouldBe true
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import io.mockk.junit5.MockKExtension
import no.nav.bidrag.behandling.database.datamodell.Behandling
import no.nav.bidrag.behandling.database.datamodell.Inntekt
import no.nav.bidrag.behandling.database.datamodell.RolleManueltOverstyrtGebyr
import no.nav.bidrag.behandling.dto.v2.gebyr.ManueltOverstyrGebyrDto
import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterManueltGebyrDto
import no.nav.bidrag.behandling.transformers.beregning.ValiderBeregning
import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.BehandlingTilGrunnlagMappingV2
Expand Down Expand Up @@ -60,7 +59,8 @@ class GebyrServiceTest {
behandling,
OppdaterManueltGebyrDto(
rolleId = bm.id!!,
overstyrtGebyr = ManueltOverstyrGebyrDto(begrunnelse = "Begrunnelse"),
overstyrGebyr = true,
begrunnelse = "Begrunnelse",
),
)

Expand All @@ -70,23 +70,6 @@ class GebyrServiceTest {
bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse"
}

@Test
fun `skal feile hvis det settes gebyr for en rolle som ikke har gebyrsøknad`() {
val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100))
val bm = behandling.bidragsmottaker!!
val exception =
assertThrows<HttpClientErrorException> {
gebyrService.oppdaterManueltOverstyrtGebyr(
behandling,
OppdaterManueltGebyrDto(
rolleId = bm.id!!,
overstyrtGebyr = ManueltOverstyrGebyrDto(ilagtGebyr = false, begrunnelse = "Begrunnelse"),
),
)
}
exception.message shouldContain "Kan ikke sette gebyr til samme som beregnet gebyr når det ikke er avslag"
}

@Test
fun `skal feile hvis gebyrvalg blir satt hvis ikke avslag`() {
val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100))
Expand All @@ -98,7 +81,7 @@ class GebyrServiceTest {
behandling,
OppdaterManueltGebyrDto(
rolleId = bm.id!!,
overstyrtGebyr = ManueltOverstyrGebyrDto(begrunnelse = "Begrunnelse"),
overstyrGebyr = true,
),
)
}
Expand All @@ -113,7 +96,8 @@ class GebyrServiceTest {
behandling,
OppdaterManueltGebyrDto(
rolleId = bm.id!!,
overstyrtGebyr = ManueltOverstyrGebyrDto(begrunnelse = "Begrunnelse"),
overstyrGebyr = true,
begrunnelse = "Begrunnelse",
),
)

Expand All @@ -132,64 +116,67 @@ class GebyrServiceTest {
behandling,
OppdaterManueltGebyrDto(
rolleId = bm.id!!,
overstyrtGebyr = null,
overstyrGebyr = false,
begrunnelse = "Begrunnelse",
),
)

bm.manueltOverstyrtGebyr.shouldNotBeNull()
bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe true
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse"
}

@Test
fun `skal oppdatere uten gebyrvalg ved avslag`() {
fun `skal oppdatere til defaultverdi fritatt ved avslag når ikke overstyr gebyr`() {
val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100))
val bm = behandling.bidragsmottaker!!
behandling.avslag = Resultatkode.BIDRAGSPLIKTIG_ER_DØD
gebyrService.oppdaterManueltOverstyrtGebyr(
behandling,
OppdaterManueltGebyrDto(
rolleId = bm.id!!,
overstyrtGebyr = ManueltOverstyrGebyrDto(ilagtGebyr = null, begrunnelse = "Begrunnelse"),
overstyrGebyr = false,
begrunnelse = "Begrunnelse",
),
)

bm.manueltOverstyrtGebyr.shouldNotBeNull()
bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe true
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe null
bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse"
}

@Test
fun `skal sette gebyrvalg og begrunnelse ved avslag`() {
fun `skal sette gebyrvalg og begrunnelse ved avslag til innvilget`() {
val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100))
val bm = behandling.bidragsmottaker!!
behandling.avslag = Resultatkode.BIDRAGSPLIKTIG_ER_DØD
gebyrService.oppdaterManueltOverstyrtGebyr(
behandling,
OppdaterManueltGebyrDto(
rolleId = bm.id!!,
overstyrtGebyr = ManueltOverstyrGebyrDto(ilagtGebyr = false, begrunnelse = "Begrunnelse"),
overstyrGebyr = true,
begrunnelse = "Begrunnelse",
),
)

bm.manueltOverstyrtGebyr.shouldNotBeNull()
bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe true
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe true
bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse"
}

@Test
fun `skal oppdatere gebyr når det endres til avslag`() {
fun `skal oppdatere gebyr til fritatt når det endres til avslag`() {
val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100))
val bm = behandling.bidragsmottaker!!
behandling.avslag = Resultatkode.BIDRAGSPLIKTIG_ER_DØD
gebyrService.oppdaterGebyrEtterEndringÅrsakAvslag(behandling)

bm.manueltOverstyrtGebyr.shouldNotBeNull()
bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe true
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe null
bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe null
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ class DtoMapperMockTest {
)

behandling.bidragsmottaker!!.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, false, "Begrunnelse")
behandling.bidragspliktig!!.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, true, null)
val behandlingDto = dtomapper.tilDto(behandling)

behandlingDto.shouldNotBeNull()
Expand All @@ -259,25 +260,24 @@ class DtoMapperMockTest {
gebyr.valideringsfeil!!.shouldHaveSize(1)
assertSoftly(gebyr.valideringsfeil.first()) {
it.gjelder.rolletype shouldBe Rolletype.BIDRAGSPLIKTIG
it.måBestemmeGebyr shouldBe true
it.manglerBegrunnelse shouldBe false
it.manglerBegrunnelse shouldBe true
it.harFeil shouldBe true
}
assertSoftly(gebyr.gebyrRoller.find { it.rolle.rolletype == Rolletype.BIDRAGSMOTTAKER }!!) {
it.inntekt.skattepliktigInntekt shouldBe BigDecimal(90000)
it.inntekt.maksBarnetillegg shouldBe null
it.inntekt.totalInntekt shouldBe BigDecimal(90000)
it.endeligIlagtGebyr shouldBe false
it.beregnetIlagtGebyr shouldBe false
it.manueltOverstyrtGebyr.shouldNotBeNull()
it.manueltOverstyrtGebyr.ilagtGebyr shouldBe false
it.manueltOverstyrtGebyr.begrunnelse shouldBe "Begrunnelse"
it.begrunnelse shouldBe "Begrunnelse"
}
assertSoftly(gebyr.gebyrRoller.find { it.rolle.rolletype == Rolletype.BIDRAGSPLIKTIG }!!) {
it.inntekt.skattepliktigInntekt shouldBe BigDecimal(0)
it.inntekt.maksBarnetillegg shouldBe null
it.inntekt.totalInntekt shouldBe BigDecimal(0)
it.beregnetIlagtGebyr shouldBe false
it.manueltOverstyrtGebyr.shouldBeNull()
it.endeligIlagtGebyr shouldBe true
it.begrunnelse shouldBe null
}
}
}

0 comments on commit f9949a2

Please sign in to comment.