Skip to content

Commit

Permalink
Hente inn grunnlag for tilleggsstønad (#630)
Browse files Browse the repository at this point in the history
* Hente inn grunnlag for tilleggsstønad
  • Loading branch information
s148719 authored Dec 6, 2024
1 parent 8f132d4 commit e200316
Show file tree
Hide file tree
Showing 18 changed files with 258 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,7 @@ enum class Grunnlagsobjektvelger(
TypeBehandling.SÆRBIDRAG to setOf(Rolletype.BIDRAGSPLIKTIG),
),
),
SIVILSTAND(
mapOf(
TypeBehandling.FORSKUDD to setOf(Rolletype.BIDRAGSMOTTAKER),
),
),
SIVILSTAND(mapOf(TypeBehandling.FORSKUDD to setOf(Rolletype.BIDRAGSMOTTAKER))),
SKATTEGRUNNLAG(
mapOf(
TypeBehandling.BIDRAG to setOf(Rolletype.BIDRAGSMOTTAKER, Rolletype.BIDRAGSPLIKTIG, Rolletype.BARN),
Expand All @@ -71,6 +67,7 @@ enum class Grunnlagsobjektvelger(
),
),
),
TILLEGGSSTØNAD(mapOf(TypeBehandling.BIDRAG to setOf(Rolletype.BIDRAGSMOTTAKER))),
UTVIDET_BARNETRYGD_OG_SMÅBARNSTILLEGG(
mapOf(
TypeBehandling.BIDRAG to setOf(Rolletype.BIDRAGSMOTTAKER),
Expand All @@ -81,6 +78,7 @@ enum class Grunnlagsobjektvelger(
;

companion object {
@OptIn(ExperimentalStdlibApi::class)
fun requestobjekter(
behandlingstype: TypeBehandling,
rolletype: Rolletype,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.GetMapping

@BehandlingRestControllerV1
class VisningsnavnController {
@OptIn(ExperimentalStdlibApi::class)
@Suppress("unused")
@GetMapping("/visningsnavn")
fun hentVisningsnavn(): Map<String, String> =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package no.nav.bidrag.behandling.database.datamodell

import no.nav.bidrag.domene.enums.vedtak.VirkningstidspunktÅrsakstype

@OptIn(ExperimentalStdlibApi::class)
fun String.tilÅrsakstype(): VirkningstidspunktÅrsakstype? {
return try {
VirkningstidspunktÅrsakstype.valueOf(this)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ data class RolleDto(
val ident: String? = null,
val navn: String? = null,
valdselsdato: LocalDate? = null,
val harInnvilgetTilleggsstønad: Boolean? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,7 @@ enum class Grunnlagsdatatype(
TypeBehandling.SÆRBIDRAG to setOf(Rolletype.BIDRAGSMOTTAKER, Rolletype.BIDRAGSPLIKTIG, Rolletype.BARN),
),
),
TILLEGGSSTØNAD(mapOf(TypeBehandling.BIDRAG to setOf(Rolletype.BIDRAGSMOTTAKER))),

@Deprecated("Erstattes av SKATTEPLIKTIGE_INNTEKTER")
@Schema(deprecated = true)
Expand Down Expand Up @@ -506,6 +507,7 @@ enum class Grunnlagsdatatype(
;

companion object {
@OptIn(ExperimentalStdlibApi::class)
fun grunnlagsdatatypeobjekter(
behandlingstype: TypeBehandling,
rolletype: Rolletype? = null,
Expand All @@ -520,6 +522,7 @@ enum class Grunnlagsdatatype(
false -> entries.filter { it.behandlingstypeMotRolletyper.keys.contains(behandlingstype) }.toSet()
}

@OptIn(ExperimentalStdlibApi::class)
fun gjeldende() = Grunnlagsdatatype.entries.filter { it.erGjeldende }
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ class BeregningService(
)

// TODO: For testing av evnevurdering. Skal fjernes når testing er ferdig
@OptIn(ExperimentalStdlibApi::class)
fun beregnBPsLavesteInntektForEvne(behandling: Behandling): BigDecimal {
val bidragsevneBeregning = BidragsevneBeregning()
val sjablonListe = hentSjabloner()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -725,12 +725,14 @@ class GrunnlagService(

if (nyesteBearbeidaBarnetilsynFørLagring.isEmpty() && nyesteBearbeidaBarnetilsynEtterLagring.isNotEmpty()) {
grunnlag.barnetilsynListe.groupBy { it.barnPersonId }.forEach { barnetilsyn ->
behandling.underholdskostnader.find { it.barnetsRolleIBehandlingen?.personident?.verdi == barnetilsyn.key }?.let {
if (it.barnetilsyn.isEmpty()) {
it.barnetilsyn.addAll(barnetilsyn.value.toSet().tilBarnetilsyn(it))
it.harTilsynsordning = true
behandling.underholdskostnader
.find { it.barnetsRolleIBehandlingen?.personident?.verdi == barnetilsyn.key }
?.let {
if (it.barnetilsyn.isEmpty()) {
it.barnetilsyn.addAll(barnetilsyn.value.toSet().tilBarnetilsyn(it))
it.harTilsynsordning = true
}
}
}
}
}

Expand Down Expand Up @@ -1655,6 +1657,15 @@ class GrunnlagService(
)
}

Grunnlagsdatatype.TILLEGGSSTØNAD -> {
lagreGrunnlagHvisEndret(
behandling,
rolleInhentetFor,
Grunnlagstype(grunnlagsdatatype, false),
innhentetGrunnlag.tilleggsstønadBarnetilsynListe.toSet(),
)
}

Grunnlagsdatatype.UTVIDET_BARNETRYGD -> {
lagreGrunnlagHvisEndret(
behandling,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ 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.transformers.behandling.tilDto
import no.nav.bidrag.behandling.transformers.gebyr.tilDto
import no.nav.bidrag.behandling.transformers.utgift.tilBeregningDto
import no.nav.bidrag.behandling.transformers.utgift.tilDto
import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.BeregnGebyrResultat
Expand Down Expand Up @@ -454,33 +453,6 @@ fun List<DelberegningUnderholdskostnad>.tilUnderholdskostnadDto() =
)
}.toSet()

fun List<GrunnlagDto>.finneFaktiskTilsynsutgiftsperioder(): List<DelberegningUnderholdskostnad> =
this
.filtrerBasertPåEgenReferanse(
Grunnlagstype.FAKTISK_UTGIFT_PERIODE,
).innholdTilObjekt<DelberegningUnderholdskostnad>()
.sortedBy {
it.periode.fom
}

fun List<GrunnlagDto>.finneTilleggsstønadsperioder(): List<DelberegningUnderholdskostnad> =
this
.filtrerBasertPåEgenReferanse(
Grunnlagstype.TILLEGGSSTØNAD_PERIODE,
).innholdTilObjekt<DelberegningUnderholdskostnad>()
.sortedBy {
it.periode.fom
}

fun List<GrunnlagDto>.finneBarnetilleggsperioder(): List<DelberegningUnderholdskostnad> =
this
.filtrerBasertPåEgenReferanse(
Grunnlagstype.BARNETILLEGG_PERIODE,
).innholdTilObjekt<DelberegningUnderholdskostnad>()
.sortedBy {
it.periode.fom
}

fun List<GrunnlagDto>.finnAlleDelberegningUnderholdskostnad(): List<DelberegningUnderholdskostnad> =
this
.filtrerBasertPåEgenReferanse(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -585,8 +585,7 @@ class Dtomapper(
søknadsid = soknadsid,
behandlerenhet = behandlerEnhet,
gebyr = mapGebyr(),
roller =
roller.map { it.tilDto() }.toSet(),
roller = roller.map { it.tilDto() }.toSet(),
søknadRefId = soknadRefId,
vedtakRefId = refVedtaksid,
virkningstidspunkt =
Expand Down Expand Up @@ -767,10 +766,13 @@ class Dtomapper(
?.filter { it.relasjon != Familierelasjon.BARN }
?.filter {
it.fødselsdato == null ||
it.fødselsdato!!.withDayOfMonth(1).isBefore(behandling.virkningstidspunktEllerSøktFomDato.minusYears(18))
it.fødselsdato!!
.withDayOfMonth(1)
.isBefore(behandling.virkningstidspunktEllerSøktFomDato.minusYears(18))
}?.filter {
it.borISammeHusstandDtoListe.any { p ->
val periodeBorHosBP = ÅrMånedsperiode(p.periodeFra!!.withDayOfMonth(1), p.periodeTil?.withDayOfMonth(1)?.minusDays(1))
val periodeBorHosBP =
ÅrMånedsperiode(p.periodeFra!!.withDayOfMonth(1), p.periodeTil?.withDayOfMonth(1)?.minusDays(1))
val periodeBPErInnenfor =
periodeBorHosBP.fom >= periode.fom &&
periodeBorHosBP.til != null &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ val årsinntekterPrioriteringsliste =
Inntektsrapportering.LIGNINGSINNTEKT,
)

@OptIn(ExperimentalStdlibApi::class)
val manuelleInntekter = Inntektsrapportering.entries.filter { it.kanLeggesInnManuelt }
val ligningsinntekter =
listOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ fun Behandling.validerKanOppdatere() {
}
}

@OptIn(ExperimentalStdlibApi::class)
fun OpprettBehandlingRequest.valider() {
val feilliste = mutableListOf<String>()
(stønadstype == null && engangsbeløpstype == null).ifTrue {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ import no.nav.bidrag.sivilstand.response.SivilstandBeregnet
import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilsynGrunnlagDto
import no.nav.bidrag.transport.behandling.grunnlag.response.FeilrapporteringDto
import no.nav.bidrag.transport.behandling.grunnlag.response.SivilstandGrunnlagDto
import no.nav.bidrag.transport.behandling.grunnlag.response.TilleggsstønadGrunnlagDto
import no.nav.bidrag.transport.behandling.inntekt.response.SummertMånedsinntekt
import no.nav.bidrag.transport.felles.ifTrue
import java.time.LocalDate
Expand Down Expand Up @@ -111,7 +112,31 @@ fun Behandling.tilBehandlingDetaljerDtoV2() =
},
)

fun Rolle.tilDto() = RolleDto(id!!, rolletype, ident, navn ?: hentPersonVisningsnavn(ident), fødselsdato)
fun Rolle.tilDto() =
RolleDto(
id!!,
rolletype,
ident,
navn ?: hentPersonVisningsnavn(ident),
fødselsdato,
this.harInnvilgetTilleggsstønad(),
)

fun Rolle.harInnvilgetTilleggsstønad(): Boolean? {
val tilleggsstønad =
this.behandling.grunnlag
.filter { Grunnlagsdatatype.TILLEGGSSTØNAD == it.type && !it.erBearbeidet }
.filter { this == it.rolle }

if (tilleggsstønad.isNotEmpty()) {
return tilleggsstønad
.maxBy { it.innhentet }
.konvertereData<Set<TilleggsstønadGrunnlagDto>>()
?.first()
?.harInnvilgetVedtak
}
return null
}

fun Map<Grunnlagsdatatype, FeilrapporteringDto?>.tilGrunnlagsinnhentingsfeil(behandling: Behandling) =
this
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ val summertYtelsetyper =
Inntektsrapportering.SMÅBARNSTILLEGG,
Inntektsrapportering.UTVIDET_BARNETRYGD,
)

@OptIn(ExperimentalStdlibApi::class)
val summertSkattegrunnlagstyper =
Inntektsrapportering.entries
.filter { !it.kanLeggesInnManuelt && it.hentesAutomatisk }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ class BehandlingServiceTest : TestContainerRunner() {
.filter { Inntektsrapportering.AINNTEKT_BEREGNET_3MND == it.rapporteringstype }
.size shouldBe
1
behandlingDto.feilOppståttVedSisteGrunnlagsinnhenting?.shouldHaveSize(11)
behandlingDto.feilOppståttVedSisteGrunnlagsinnhenting?.shouldHaveSize(12)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,6 @@ import no.nav.bidrag.transport.behandling.grunnlag.response.UtvidetBarnetrygdGru
import no.nav.bidrag.transport.behandling.inntekt.response.SummertÅrsinntekt
import no.nav.bidrag.transport.felles.commonObjectmapper
import org.assertj.core.api.Assertions.assertThat
import org.assertj.core.error.ShouldHaveDimensions.shouldHaveSize
import org.assertj.core.error.ShouldHaveSize.shouldHaveSize
import org.junit.experimental.runners.Enclosed
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.DisplayName
Expand Down Expand Up @@ -535,6 +533,49 @@ class GrunnlagServiceTest : TestContainerRunner() {
gbp.filter { it.erBearbeidet } shouldHaveSize 5
}
}

@Test
@Transactional
open fun `skal hente og lagre informasjon om tillegsstønad`() {
// gitt
val behandling =
oppretteTestbehandling(
false,
false,
false,
inkludereBp = true,
behandlingstype = TypeBehandling.BIDRAG,
)
testdataManager.lagreBehandlingNewTransaction(behandling)

stubbeHentingAvPersoninfoForTestpersoner()
stubUtils.stubHentePersoninfo(personident = behandling.bidragsmottaker!!.ident!!)
behandling.roller.forEach {
when (it.rolletype) {
Rolletype.BIDRAGSMOTTAKER ->
stubUtils.stubHenteGrunnlag(
rolle = it,
navnResponsfil = "hente-grunnlagrespons-bidrag-tilleggsstønad-bm.json",
)

else -> stubUtils.stubHenteGrunnlag(rolle = it, tomRespons = true)
}
}

behandling.grunnlag
.filter { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype }
.filter { Grunnlagsdatatype.TILLEGGSSTØNAD == it.type && !it.erBearbeidet } shouldHaveSize 0

// hvis
grunnlagService.oppdatereGrunnlagForBehandling(behandling)

//
behandling.grunnlagSistInnhentet?.toLocalDate() shouldBe LocalDate.now()

behandling.grunnlag
.filter { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype }
.filter { Grunnlagsdatatype.TILLEGGSSTØNAD == it.type && !it.erBearbeidet } shouldHaveSize 1
}
}

@Nested
Expand Down Expand Up @@ -1172,7 +1213,9 @@ class GrunnlagServiceTest : TestContainerRunner() {
val alleAktiveGrunnlag = behandling.grunnlag.filter { it.aktiv != null }
alleAktiveGrunnlag.size shouldBe 3
val sistInnhentaSmåbarnstillegg =
behandling.grunnlag.filter { Grunnlagsdatatype.SMÅBARNSTILLEGG == it.type }.maxBy { it.innhentet }
behandling.grunnlag
.filter { Grunnlagsdatatype.SMÅBARNSTILLEGG == it.type }
.maxBy { it.innhentet }
sistInnhentaSmåbarnstillegg.aktiv shouldBe null

val gjeldendeSmåbarnstillegg =
Expand Down Expand Up @@ -4347,7 +4390,8 @@ class GrunnlagServiceTest : TestContainerRunner() {
@Transactional
open fun `skal ikke lagre ny innhenting av skattegrunnlag med teknisk feil dersom forrige innhenting var OK`() {
// gitt
val behandling = oppretteTestbehandling(true, setteDatabaseider = true, inkludereInntektsgrunnlag = true)
val behandling =
oppretteTestbehandling(true, setteDatabaseider = true, inkludereInntektsgrunnlag = true)

val skattegrunnlag =
behandling.grunnlag
Expand Down Expand Up @@ -4494,7 +4538,8 @@ class GrunnlagServiceTest : TestContainerRunner() {
@Transactional
open fun `skal lagre endret skattegrunnlag med teknisk feil dersom forrige innhenting hadde teknisk feil`() {
// gitt
val behandling = oppretteTestbehandling(true, setteDatabaseider = true, inkludereInntektsgrunnlag = true)
val behandling =
oppretteTestbehandling(true, setteDatabaseider = true, inkludereInntektsgrunnlag = true)

val skattegrunnlag =
behandling.grunnlag
Expand Down Expand Up @@ -4871,6 +4916,7 @@ fun oppretteFeilrapporteringerForPerson(
feiltype: HentGrunnlagFeiltype = HentGrunnlagFeiltype.TEKNISK_FEIL,
): List<FeilrapporteringDto> = oppretteFeilrapporteringer(setOf(personident), feiltype)

@OptIn(ExperimentalStdlibApi::class)
fun oppretteFeilrapporteringer(
personidenter: Set<String>,
feiltype: HentGrunnlagFeiltype = HentGrunnlagFeiltype.TEKNISK_FEIL,
Expand Down
Loading

0 comments on commit e200316

Please sign in to comment.