Skip to content

Commit

Permalink
Gebyr api
Browse files Browse the repository at this point in the history
  • Loading branch information
ugur93 committed Nov 28, 2024
1 parent c391b49 commit f141f40
Show file tree
Hide file tree
Showing 11 changed files with 132 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement
import jakarta.validation.Valid
import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterGebyrResponsDto
import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterManueltGebyrDto
import no.nav.bidrag.behandling.service.BehandlingService
import no.nav.bidrag.behandling.service.GebyrService
import no.nav.bidrag.behandling.transformers.behandling.tilDto
import no.nav.bidrag.behandling.transformers.gebyr.tilDto
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PutMapping
import org.springframework.web.bind.annotation.RequestBody

@BehandlingRestControllerV2
class GebyrController(
private val gebyrService: GebyrService,
private val behandlingService: BehandlingService,
) {
@Suppress("unused")
@PutMapping("/behandling/{behandlingsid}/gebyr")
Expand All @@ -26,5 +30,21 @@ class GebyrController(
@Valid
@RequestBody(required = true)
request: OppdaterManueltGebyrDto,
): OppdaterGebyrResponsDto = gebyrService.oppdaterManueltGebyr(behandlingsid, request)
): OppdaterGebyrResponsDto {
gebyrService.oppdaterManueltOverstyrtGebyr(behandlingService.hentBehandlingById(behandlingsid), request)
return tilRespons(behandlingsid, request.rolleId)
}

private fun tilRespons(
behandlingsId: Long,
rolleId: Long,
): OppdaterGebyrResponsDto {
val behandling = behandlingService.hentBehandlingById(behandlingsId)
return behandling.roller.find { it.id == rolleId }!!.let { rolle ->
OppdaterGebyrResponsDto(
rolle.tilDto(),
rolle.manueltOverstyrtGebyr?.tilDto(),
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ open class Rolle(
}

data class RolleManueltOverstyrtGebyr(
val overstyrtGebyr: Boolean = false,
val ilagtGebyr: Boolean,
val overstyrGebyr: Boolean = true,
val ilagtGebyr: Boolean? = false,
val begrunnelse: String? = null,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import com.fasterxml.jackson.annotation.JsonFormat
import com.fasterxml.jackson.annotation.JsonIgnore
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import io.swagger.v3.oas.annotations.media.Schema
import no.nav.bidrag.behandling.database.datamodell.RolleManueltOverstyrtGebyr
import no.nav.bidrag.behandling.dto.v1.behandling.BegrunnelseDto
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.ManueltOverstyrGebyrDto
import no.nav.bidrag.behandling.dto.v2.inntekt.InntekterDtoV2
import no.nav.bidrag.behandling.dto.v2.inntekt.InntektspostDtoV2
import no.nav.bidrag.behandling.dto.v2.samvær.SamværDto
Expand Down Expand Up @@ -128,8 +128,8 @@ data class BehandlingDtoV2(

data class GebyrRolleDto(
val inntekt: GebyrInntektDto,
val manueltOverstyrtGebyr: RolleManueltOverstyrtGebyr? = null,
val ilagtGebyr: Boolean,
val manueltOverstyrtGebyr: ManueltOverstyrGebyrDto? = null,
val beregnetIlagtGebyr: Boolean,
val rolle: RolleDto,
) {
data class GebyrInntektDto(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto

data class OppdaterManueltGebyrDto(
val rolleId: Long,
val begrunnelse: String,
val overstyrtGebyr: ManueltOverstyrGebyrDto?,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class BehandlingService(
private val mapper: Dtomapper,
private val validerBehandlingService: ValiderBehandlingService,
private val underholdService: UnderholdService,
private val gebyrService: GebyrService,
) {
@Transactional
fun slettBehandling(behandlingId: Long) {
Expand Down Expand Up @@ -292,6 +293,11 @@ class BehandlingService(
grunnlagService.aktivereSivilstandHvisEndringIkkeKreverGodkjenning(behandling)
}

fun oppdaterGebyr() {
log.info { "Virkningstidspunkt er endret. Oppdaterer gebyr detaljer ${behandling.id}" }
gebyrService.oppdaterGebyrEtterEndringVirkningstidspunkt(behandling)
}

fun oppdaterSamvær() {
log.info { "Virkningstidspunkt er endret. Oppdaterer perioder på samvær for behandling ${behandling.id}" }
samværService.rekalkulerPerioderSamvær(behandling.id!!)
Expand Down Expand Up @@ -331,6 +337,7 @@ class BehandlingService(
oppdaterAndreVoksneIHusstanden()
oppdaterInntekter()
oppdaterSamvær()
oppdaterGebyr()
// TODO Underholdskostnad
}
}
Expand Down
74 changes: 64 additions & 10 deletions src/main/kotlin/no/nav/bidrag/behandling/service/GebyrService.kt
Original file line number Diff line number Diff line change
@@ -1,22 +1,76 @@
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.OppdaterGebyrResponsDto
import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterManueltGebyrDto
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.transport.felles.ifTrue
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional

@Service
class GebyrService(
private val behandlingService: BehandlingService,
private val vedtakGrunnlagMapper: VedtakGrunnlagMapper,
) {
fun oppdaterManueltGebyr(
behandlingsId: Long,
@Transactional
fun oppdaterGebyrEtterEndringVirkningstidspunkt(behandling: Behandling) {
behandling
.roller
.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
},
)
}
}
}

@Transactional
fun oppdaterManueltOverstyrtGebyr(
behandling: Behandling,
request: OppdaterManueltGebyrDto,
): OppdaterGebyrResponsDto {
val behandling = behandlingService.hentBehandlingById(behandlingsId)
val rolle = behandling.roller.find { it.id == request.rolleId } ?: ugyldigForespørsel("Fant ikke rolle ${request.rolleId}")
if (request.overstyrtGebyr != null) {
val manueltOverstyrtGebyr = rolle.manueltOverstyrtGebyr ?: RolleManueltOverstyrtGebyr(true)
) {
val rolle =
behandling.roller.find { it.id == request.rolleId }
?: ugyldigForespørsel("Fant ikke rolle ${request.rolleId} i behandling ${behandling.id}")
val beregning = vedtakGrunnlagMapper.beregnGebyr(behandling, rolle)
behandling.validerOppdatering(request)
rolle.manueltOverstyrtGebyr =
(rolle.manueltOverstyrtGebyr ?: RolleManueltOverstyrtGebyr()).let {
it.copy(
overstyrGebyr = request.overstyrtGebyr != null,
ilagtGebyr = request.overstyrtGebyr?.ilagtGebyr ?: !beregning.ilagtGebyr,
begrunnelse = request.overstyrtGebyr?.begrunnelse ?: it.begrunnelse,
)
}
}

private fun Behandling.validerOppdatering(request: OppdaterManueltGebyrDto) {
val feilListe = mutableSetOf<String>()

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

if (feilListe.isNotEmpty()) {
ugyldigForespørsel(feilListe.toSet().joinToString("\n"))
}
return OppdaterGebyrResponsDto(behandlingsId, gebyr)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ import no.nav.bidrag.behandling.transformers.behandling.tilKanBehandlesINyLøsni
import no.nav.bidrag.behandling.transformers.behandling.toSivilstand
import no.nav.bidrag.behandling.transformers.beregning.ValiderBeregning
import no.nav.bidrag.behandling.transformers.boforhold.tilBostatusperiode
import no.nav.bidrag.behandling.transformers.gebyr.tilDto
import no.nav.bidrag.behandling.transformers.grunnlag.tilGrunnlagsreferanse
import no.nav.bidrag.behandling.transformers.samvær.tilDto
import no.nav.bidrag.behandling.transformers.underhold.tilStønadTilBarnetilsynDtos
Expand Down Expand Up @@ -577,8 +578,8 @@ class Dtomapper(
skattepliktigInntekt = it.skattepliktigInntekt,
maksBarnetillegg = it.maksBarnetillegg,
),
manueltOverstyrtGebyr = rolle.manueltOverstyrtGebyr,
ilagtGebyr = it.ilagtGebyr,
manueltOverstyrtGebyr = rolle.manueltOverstyrtGebyr?.tilDto(),
beregnetIlagtGebyr = it.ilagtGebyr,
rolle = rolle.tilDto(),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,15 @@ import java.time.LocalDate

private val log = KotlinLogging.logger {}

fun MutableSet<String>.validerSann(
betingelse: Boolean,
melding: String,
) {
if (!betingelse) {
add(melding)
}
}

fun bestemRollerSomMåHaMinstEnInntekt(typeBehandling: TypeBehandling) =
when (typeBehandling) {
TypeBehandling.FORSKUDD -> listOf(Rolletype.BIDRAGSMOTTAKER)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package no.nav.bidrag.behandling.transformers.gebyr

import no.nav.bidrag.behandling.database.datamodell.RolleManueltOverstyrtGebyr
import no.nav.bidrag.behandling.dto.v2.gebyr.ManueltOverstyrGebyrDto

fun RolleManueltOverstyrtGebyr.tilDto() =
if (overstyrGebyr) {
ManueltOverstyrGebyrDto(begrunnelse, ilagtGebyr)
} else {
null
}
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,8 @@ fun Behandling.byggGrunnlagManueltOverstyrtGebyr() =
innhold =
POJONode(
ManueltOverstyrtGebyr(
begrunnelse = it.manueltOverstyrtGebyr!!.begrunnelse,
ilagtGebyr = it.manueltOverstyrtGebyr!!.ilagtGebyr,
begrunnelse = it.manueltOverstyrtGebyr!!.begrunnelse!!,
ilagtGebyr = it.manueltOverstyrtGebyr!!.ilagtGebyr!!,
),
),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,19 @@ class VedtakGrunnlagMapper(
)
}

private fun Behandling.gebyrGrunnlagslisteDefaultVerdi(rolle: Rolle) =
if (avslag ==
null
) {
emptyList()
} else {
beregnetInntekterGrunnlagForRolle(rolle)
}

fun beregnGebyr(
behandling: Behandling,
rolle: Rolle,
grunnlagsliste: List<GrunnlagDto> = behandling.beregnetInntekterGrunnlagForRolle(rolle),
grunnlagsliste: List<GrunnlagDto> = behandling.gebyrGrunnlagslisteDefaultVerdi(rolle),
): BeregnGebyrResultat {
val gebyrBeregning =
if (behandling.avslag != null) {
Expand Down

0 comments on commit f141f40

Please sign in to comment.