Skip to content

Commit

Permalink
Lagt til flere tester
Browse files Browse the repository at this point in the history
  • Loading branch information
ugur93 committed Nov 28, 2024
1 parent 888d532 commit 38c5738
Show file tree
Hide file tree
Showing 9 changed files with 413 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto
import no.nav.bidrag.behandling.dto.v1.behandling.SivilstandDto
import no.nav.bidrag.behandling.dto.v1.behandling.VirkningstidspunktDto
import no.nav.bidrag.behandling.dto.v2.boforhold.BoforholdDtoV2
import no.nav.bidrag.behandling.dto.v2.gebyr.GebyrValideringsfeilDto
import no.nav.bidrag.behandling.dto.v2.gebyr.ManueltOverstyrGebyrDto
import no.nav.bidrag.behandling.dto.v2.inntekt.InntekterDtoV2
import no.nav.bidrag.behandling.dto.v2.inntekt.InntektspostDtoV2
Expand Down Expand Up @@ -113,7 +114,7 @@ data class BehandlingDtoV2(
val virkningstidspunkt: VirkningstidspunktDto,
val inntekter: InntekterDtoV2,
val boforhold: BoforholdDtoV2,
val gebyr: List<GebyrRolleDto>? = null,
val gebyr: GebyrDto? = null,
val aktiveGrunnlagsdata: AktiveGrunnlagsdata,
val ikkeAktiverteEndringerIGrunnlagsdata: IkkeAktiveGrunnlagsdata,
val feilOppståttVedSisteGrunnlagsinnhenting: Set<Grunnlagsinnhentingsfeil>? = null,
Expand All @@ -126,6 +127,11 @@ data class BehandlingDtoV2(
val vedtakstypeVisningsnavn get() = vedtakstype.visningsnavnIntern(opprinneligVedtakstype)
}

data class GebyrDto(
val gebyrRoller: List<GebyrRolleDto>,
val valideringsfeil: List<GebyrValideringsfeilDto>? = null,
)

data class GebyrRolleDto(
val inntekt: GebyrInntektDto,
val manueltOverstyrtGebyr: ManueltOverstyrGebyrDto? = null,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package no.nav.bidrag.behandling.dto.v2.gebyr

import com.fasterxml.jackson.annotation.JsonIgnore
import no.nav.bidrag.behandling.database.datamodell.Behandling
import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto
import no.nav.bidrag.behandling.transformers.behandling.tilDto

fun Behandling.validerGebyr() =
roller
.filter { it.harGebyrsøknad }
.map {
GebyrValideringsfeilDto(
gjelder = it.tilDto(),
BestemmeGebyr = avslag != null && it.manueltOverstyrtGebyr?.ilagtGebyr == null,
manglerBegrunnelse =
if (it.manueltOverstyrtGebyr?.overstyrGebyr == true) {
it.manueltOverstyrtGebyr?.begrunnelse.isNullOrEmpty()
} else {
false
},
)
}.filter { it.harFeil }

data class GebyrValideringsfeilDto(
val gjelder: RolleDto,
valBestemmeGebyr: Boolean,
val manglerBegrunnelse: Boolean,
) {
@get:JsonIgnore
val harFeil
get() = manglerBegrunnelse ||BestemmeGebyr
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema
import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem
import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto
import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype
import no.nav.bidrag.behandling.dto.v2.gebyr.GebyrValideringsfeilDto
import no.nav.bidrag.behandling.dto.v2.samvær.SamværValideringsfeilDto
import no.nav.bidrag.behandling.dto.v2.underhold.ValideringsfeilUnderhold
import no.nav.bidrag.behandling.service.hentPersonVisningsnavn
Expand Down Expand Up @@ -217,6 +218,7 @@ data class BeregningValideringsfeil(
val andreVoksneIHusstanden: AndreVoksneIHusstandenPeriodeseringsfeil? = null,
val sivilstand: SivilstandPeriodeseringsfeil? = null,
val samvær: Set<SamværValideringsfeilDto>? = null,
val gebyr: Set<GebyrValideringsfeilDto>? = null,
val underholdskostnad: Set<ValideringsfeilUnderhold>? = null,
valBekrefteNyeOpplysninger: Set<MåBekrefteNyeOpplysninger> = emptySet(),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,8 +275,8 @@ class BehandlingService(
request: OppdatereVirkningstidspunkt,
) {
fun oppdaterGebyr() {
log.info { "Årsak/Avaslag er endret. Oppdaterer gebyr detaljer ${behandling.id}" }
gebyrService.oppdaterGebyrEtterEndringVirkningstidspunkt(behandling)
log.info { "Virkningstidspunkt årsak/avslag er endret. Oppdaterer gebyr detaljer ${behandling.id}" }
gebyrService.oppdaterGebyrEtterEndringÅrsakAvslag(behandling)
}
val erAvslagÅrsakEndret = request.årsak != behandling.årsak || request.avslag != behandling.avslag

Expand Down
15 changes: 14 additions & 1 deletion src/main/kotlin/no/nav/bidrag/behandling/service/GebyrService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ package no.nav.bidrag.behandling.service
import no.nav.bidrag.behandling.database.datamodell.Behandling
import no.nav.bidrag.behandling.database.datamodell.RolleManueltOverstyrtGebyr
import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterManueltGebyrDto
import no.nav.bidrag.behandling.transformers.tilType
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
Expand All @@ -15,7 +17,7 @@ class GebyrService(
private val vedtakGrunnlagMapper: VedtakGrunnlagMapper,
) {
@Transactional
fun oppdaterGebyrEtterEndringVirkningstidspunkt(behandling: Behandling) {
fun oppdaterGebyrEtterEndringÅrsakAvslag(behandling: Behandling) {
behandling
.roller
.filter { it.harGebyrsøknad }
Expand Down Expand Up @@ -57,6 +59,17 @@ class GebyrService(
private fun Behandling.validerOppdatering(request: OppdaterManueltGebyrDto) {
val feilListe = mutableSetOf<String>()

feilListe.validerSann(tilType() == TypeBehandling.BIDRAG, "Kan bare oppdatere gebyr på en bidragsbehandling")

val rolle =
roller.find { it.id == request.rolleId }
?: ugyldigForespørsel("Fant ikke rolle ${request.rolleId} i behandling $id")

feilListe.validerSann(
rolle.harGebyrsøknad,
"Kan ikke endre gebyr på en rolle som ikke har gebyrsøknad",
)

if (avslag == null) {
feilListe.validerSann(
request.overstyrtGebyr?.ilagtGebyr == null,
Expand Down
38 changes: 22 additions & 16 deletions src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import no.nav.bidrag.behandling.dto.v2.behandling.AktivereGrunnlagResponseV2
import no.nav.bidrag.behandling.dto.v2.behandling.AndreVoksneIHusstandenDetaljerDto
import no.nav.bidrag.behandling.dto.v2.behandling.AndreVoksneIHusstandenGrunnlagDto
import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDtoV2
import no.nav.bidrag.behandling.dto.v2.behandling.GebyrDto
import no.nav.bidrag.behandling.dto.v2.behandling.GebyrRolleDto
import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype
import no.nav.bidrag.behandling.dto.v2.behandling.HusstandsmedlemGrunnlagDto
Expand All @@ -36,6 +37,7 @@ import no.nav.bidrag.behandling.dto.v2.boforhold.BoforholdDtoV2
import no.nav.bidrag.behandling.dto.v2.boforhold.HusstandsmedlemDtoV2
import no.nav.bidrag.behandling.dto.v2.boforhold.OppdatereBoforholdResponse
import no.nav.bidrag.behandling.dto.v2.boforhold.egetBarnErEnesteVoksenIHusstanden
import no.nav.bidrag.behandling.dto.v2.gebyr.validerGebyr
import no.nav.bidrag.behandling.dto.v2.underhold.DatoperiodeDto
import no.nav.bidrag.behandling.dto.v2.underhold.FaktiskTilsynsutgiftDto
import no.nav.bidrag.behandling.dto.v2.underhold.TilleggsstønadDto
Expand Down Expand Up @@ -568,22 +570,26 @@ class Dtomapper(
søknadsid = soknadsid,
behandlerenhet = behandlerEnhet,
gebyr =
roller.filter { it.harGebyrsøknad }.map { rolle ->
vedtakGrunnlagMapper
.beregnGebyr(this, rolle)
.let {
GebyrRolleDto(
inntekt =
GebyrRolleDto.GebyrInntektDto(
skattepliktigInntekt = it.skattepliktigInntekt,
maksBarnetillegg = it.maksBarnetillegg,
),
manueltOverstyrtGebyr = rolle.manueltOverstyrtGebyr?.tilDto(),
beregnetIlagtGebyr = it.ilagtGebyr,
rolle = rolle.tilDto(),
)
}
},
GebyrDto(
gebyrRoller =
roller.filter { it.harGebyrsøknad }.map { rolle ->
vedtakGrunnlagMapper
.beregnGebyr(this, rolle)
.let {
GebyrRolleDto(
inntekt =
GebyrRolleDto.GebyrInntektDto(
skattepliktigInntekt = it.skattepliktigInntekt,
maksBarnetillegg = it.maksBarnetillegg,
),
manueltOverstyrtGebyr = rolle.manueltOverstyrtGebyr?.tilDto(),
beregnetIlagtGebyr = it.ilagtGebyr,
rolle = rolle.tilDto(),
)
}
},
valideringsfeil = validerGebyr().takeIf { it.isNotEmpty() },
),
roller =
roller.map { it.tilDto() }.toSet(),
søknadRefId = soknadRefId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem
import no.nav.bidrag.behandling.database.datamodell.barn
import no.nav.bidrag.behandling.database.datamodell.voksneIHusstanden
import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype
import no.nav.bidrag.behandling.dto.v2.gebyr.validerGebyr
import no.nav.bidrag.behandling.dto.v2.samvær.mapValideringsfeil
import no.nav.bidrag.behandling.dto.v2.validering.BeregningValideringsfeil
import no.nav.bidrag.behandling.dto.v2.validering.BoforholdPeriodeseringsfeil
Expand Down Expand Up @@ -165,6 +166,17 @@ class ValiderBeregning(
}

fun Behandling.validerForBeregningBidrag() {
val gebyrValideringsfeil = validerGebyr()
val erVirkningstidspunktSenereEnnOpprinnerligVirknignstidspunkt =
erKlageEllerOmgjøring &&
opprinneligVirkningstidspunkt != null &&
virkningstidspunkt?.isAfter(opprinneligVirkningstidspunkt) == true
val virkningstidspunktFeil =
VirkningstidspunktFeilDto(
manglerÅrsakEllerAvslag = avslag == null && årsak == null,
manglerVirkningstidspunkt = virkningstidspunkt == null,
virkningstidspunktKanIkkeVæreSenereEnnOpprinnelig = erVirkningstidspunktSenereEnnOpprinnerligVirknignstidspunkt,
).takeIf { it.harFeil }
val feil =
if (avslag == null) {
val inntekterFeil = hentInntekterValideringsfeil().takeIf { it.harFeil }
Expand Down Expand Up @@ -215,21 +227,31 @@ class ValiderBeregning(
val harFeil =
inntekterFeil != null ||
husstandsmedlemsfeil.isNotEmpty() ||
virkningstidspunktFeil != null ||
andreVoksneIHusstandenFeil != null ||
samværValideringsfeil.isNotEmpty() ||
gebyrValideringsfeil.isNotEmpty() ||
BekrefteOpplysninger.isNotEmpty()
harFeil.ifTrue {
BeregningValideringsfeil(
inntekter = inntekterFeil,
husstandsmedlem = husstandsmedlemsfeil.takeIf { it.isNotEmpty() },
andreVoksneIHusstanden = andreVoksneIHusstandenFeil,
BekrefteNyeOpplysninger =BekrefteOpplysninger,
virkningstidspunkt = virkningstidspunktFeil,
gebyr = gebyrValideringsfeil.takeIf { it.isNotEmpty() }?.toSet(),
samvær = samværValideringsfeil.takeIf { it.isNotEmpty() },
underholdskostnad = null, // TODO: Legg til validering av underholdskostnad
)
}
} else {
null
val harFeil = virkningstidspunktFeil != null || gebyrValideringsfeil.isNotEmpty()
harFeil.ifTrue {
BeregningValideringsfeil(
virkningstidspunkt = virkningstidspunktFeil,
gebyr = gebyrValideringsfeil.takeIf { it.isNotEmpty() }?.toSet(),
)
}
}

if (feil != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package no.nav.bidrag.behandling.dto.v2.gebyr

import io.kotest.matchers.collections.shouldHaveSize
import io.kotest.matchers.shouldBe
import no.nav.bidrag.behandling.database.datamodell.RolleManueltOverstyrtGebyr
import no.nav.bidrag.behandling.utils.testdata.opprettGyldigBehandlingForBeregningOgVedtak
import no.nav.bidrag.domene.enums.behandling.TypeBehandling
import no.nav.bidrag.domene.enums.beregning.Resultatkode
import org.junit.jupiter.api.Test

class GebyrValideringsfeilTest {
@Test
fun `skal feile validering hvis ingen begrunnelse for manuelt overstyrt gebyr`() {
val behandling = opprettGyldigBehandlingForBeregningOgVedtak(true, typeBehandling = TypeBehandling.BIDRAG)
behandling.bidragspliktig!!.harGebyrsøknad = false
val bm = behandling.bidragsmottaker!!
bm.harGebyrsøknad = true
bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, false, null)
val resultat = behandling.validerGebyr()
resultat.shouldHaveSize(1)
resultat.first().manglerBegrunnelse shouldBe true
resultat.first().måBestemmeGebyr shouldBe false
}

@Test
fun `skal feile validering hvis gebyr ikke satt ved avslag`() {
val behandling = opprettGyldigBehandlingForBeregningOgVedtak(true, typeBehandling = TypeBehandling.BIDRAG)
behandling.avslag = Resultatkode.BIDRAGSPLIKTIG_ER_DØD
behandling.bidragspliktig!!.harGebyrsøknad = false
val bm = behandling.bidragsmottaker!!
bm.harGebyrsøknad = true
bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, null, null)
val resultat = behandling.validerGebyr()
resultat.shouldHaveSize(1)
resultat.first().manglerBegrunnelse shouldBe true
resultat.first().måBestemmeGebyr shouldBe true
}

@Test
fun `skal ikke feile validering hvis gebyr og begrunnelse er satt ved avslag`() {
val behandling = opprettGyldigBehandlingForBeregningOgVedtak(true, typeBehandling = TypeBehandling.BIDRAG)
behandling.avslag = Resultatkode.BIDRAGSPLIKTIG_ER_DØD
behandling.bidragspliktig!!.harGebyrsøknad = false
val bm = behandling.bidragsmottaker!!
bm.harGebyrsøknad = true
bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, true, "Begrunnelse")
val resultat = behandling.validerGebyr()
resultat.shouldHaveSize(0)
}

@Test
fun `skal ikke feile validering hvis gebyr og begrunnelse er satt`() {
val behandling = opprettGyldigBehandlingForBeregningOgVedtak(true, typeBehandling = TypeBehandling.BIDRAG)
behandling.bidragspliktig!!.harGebyrsøknad = false
val bm = behandling.bidragsmottaker!!
bm.harGebyrsøknad = true
bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, true, "Begrunnelse")
val resultat = behandling.validerGebyr()
resultat.shouldHaveSize(0)
}

@Test
fun `skal ikke feile validering hvis ikke manuelt overstyrt`() {
val behandling = opprettGyldigBehandlingForBeregningOgVedtak(true, typeBehandling = TypeBehandling.BIDRAG)
behandling.bidragspliktig!!.harGebyrsøknad = false
val bm = behandling.bidragsmottaker!!
bm.harGebyrsøknad = true
bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(false, null, null)
val resultat = behandling.validerGebyr()
resultat.shouldHaveSize(0)
}
}
Loading

0 comments on commit 38c5738

Please sign in to comment.