Skip to content

Commit

Permalink
Fikse aktivering av barnetilsyn (#643)
Browse files Browse the repository at this point in the history
* Fikse aktivering av barnetilsyn

* Fikse oppdatering av barnetilsynstabell etter endring i virkningsdato

* Sikre at manuelle barnetilsynsperioder ikke fjernes om de ikke må i forbindelse med endring av virkningsdato
  • Loading branch information
s148719 authored Dec 13, 2024
1 parent 79c77a0 commit 149f4e5
Show file tree
Hide file tree
Showing 7 changed files with 205 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import no.nav.bidrag.behandling.dto.v2.behandling.AktivereGrunnlagResponseV2
import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDetaljerDtoV2
import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDtoV2
import no.nav.bidrag.behandling.dto.v2.behandling.KanBehandlesINyLøsningRequest
import no.nav.bidrag.behandling.dto.v2.behandling.tilType
import no.nav.bidrag.behandling.dto.v2.boforhold.OppdatereBoforholdRequestV2
import no.nav.bidrag.behandling.dto.v2.boforhold.OppdatereBoforholdResponse
import no.nav.bidrag.behandling.dto.v2.inntekt.OppdatereInntektRequest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ import no.nav.bidrag.behandling.fantIkkeFødselsdatoTilPerson
import no.nav.bidrag.behandling.transformers.Dtomapper
import no.nav.bidrag.behandling.transformers.behandling.hentAlleBearbeidaBarnetilsyn
import no.nav.bidrag.behandling.transformers.underhold.aktivereBarnetilsynHvisIngenEndringerMåAksepteres
import no.nav.bidrag.behandling.transformers.underhold.erstatteOffentligePerioderIBarnetilsynstabellMedOppdatertGrunnlag
import no.nav.bidrag.behandling.transformers.underhold.harAndreBarnIUnderhold
import no.nav.bidrag.behandling.transformers.underhold.henteOgValidereUnderholdskostnad
import no.nav.bidrag.behandling.transformers.underhold.justerePerioderEtterVirkningsdato
import no.nav.bidrag.behandling.transformers.underhold.justerePerioder
import no.nav.bidrag.behandling.transformers.underhold.justerePerioderForBearbeidaBarnetilsynEtterVirkningstidspunkt
import no.nav.bidrag.behandling.transformers.underhold.tilBarnetilsyn
import no.nav.bidrag.behandling.transformers.underhold.tilStønadTilBarnetilsynDto
Expand Down Expand Up @@ -282,8 +283,8 @@ class UnderholdService(
fun tilpasseUnderholdEtterVirkningsdato(behandling: Behandling) {
tilpasseAktiveBarnetilsynsgrunnlagEtterVirkningsdato(behandling)
tilpasseIkkeaktiveBarnetilsynsgrunnlagEtterVirkningsdato(behandling)
oppdatereUnderholdsperioderEtterEndretVirkningsdato(behandling)
behandling.aktivereBarnetilsynHvisIngenEndringerMåAksepteres()
behandling.underholdskostnader.justerePerioderEtterVirkningsdato()
}

@Transactional
Expand Down Expand Up @@ -447,6 +448,13 @@ class UnderholdService(
return u
}

private fun oppdatereUnderholdsperioderEtterEndretVirkningsdato(b: Behandling) {
b.underholdskostnader.forEach {
it.erstatteOffentligePerioderIBarnetilsynstabellMedOppdatertGrunnlag()
it.justerePerioder()
}
}

private fun tilpasseIkkeaktiveBarnetilsynsgrunnlagEtterVirkningsdato(behandling: Behandling) {
val grunnlagsdatatype = Grunnlagsdatatype.BARNETILSYN
val sisteAktiveGrunnlag =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import no.nav.bidrag.behandling.database.datamodell.Underholdskostnad
import no.nav.bidrag.behandling.database.datamodell.hentAlleAktiv
import no.nav.bidrag.behandling.database.datamodell.hentAlleIkkeAktiv
import no.nav.bidrag.behandling.database.datamodell.hentGrunnlagForType
import no.nav.bidrag.behandling.database.datamodell.hentSisteAktiv
import no.nav.bidrag.behandling.database.datamodell.konvertereData
import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype
import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagstype
Expand Down Expand Up @@ -81,8 +82,6 @@ fun BarnetilsynGrunnlagDto.tilBarnetilsyn(u: Underholdskostnad): Barnetilsyn {
)
}

fun Set<Underholdskostnad>.justerePerioderEtterVirkningsdato() = forEach { it.justerePerioder() }

fun Grunnlag.justerePerioderForBearbeidaBarnetilsynEtterVirkningstidspunkt(overskriveAktiverte: Boolean = true) {
val barnetilsyn = konvertereData<MutableSet<BarnetilsynGrunnlagDto>>()!!

Expand All @@ -106,7 +105,21 @@ fun Grunnlag.justerePerioderForBearbeidaBarnetilsynEtterVirkningstidspunkt(overs
}
}

private fun Underholdskostnad.justerePerioder() {
fun Underholdskostnad.erstatteOffentligePerioderIBarnetilsynstabellMedOppdatertGrunnlag() {
val barnetilsynFraGrunnlag =
behandling.grunnlag
.hentSisteAktiv()
.find { Grunnlagsdatatype.BARNETILSYN == it.type && it.erBearbeidet }
.konvertereData<Set<BarnetilsynGrunnlagDto>>()
?.filter { this.person.ident == it.barnPersonId }

barnetilsynFraGrunnlag?.let { g ->
barnetilsyn.removeAll(barnetilsyn.filter { Kilde.OFFENTLIG == it.kilde })
g.forEach { barnetilsyn.add(it.tilBarnetilsyn(this)) }
}
}

fun Underholdskostnad.justerePerioder() {
val virkningsdato = behandling.virkningstidspunktEllerSøktFomDato

barnetilsyn.filter { it.fom < virkningsdato }.forEach { periode ->
Expand Down Expand Up @@ -156,9 +169,7 @@ private fun Behandling.overskriveBearbeidaBarnetilsynsgrunnlag(

grunnlagSomSkalOverskrives.find { it.gjelder == gjelder }?.let {
it.data = tilJson(perioder)
if (overskriveAktiverte) {
it.aktiv = LocalDateTime.now()
}
it.aktiv = it.aktiv?.let { LocalDateTime.now() }
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package no.nav.bidrag.behandling.service

import io.kotest.assertions.assertSoftly
import io.kotest.matchers.collections.shouldHaveSize
import io.kotest.matchers.comparables.shouldBeLessThan
import io.kotest.matchers.equals.shouldBeEqual
import io.kotest.matchers.nulls.shouldBeNull
import io.kotest.matchers.nulls.shouldNotBeNull
Expand Down Expand Up @@ -42,7 +43,7 @@ import no.nav.bidrag.behandling.transformers.boforhold.tilSivilstandRequest
import no.nav.bidrag.behandling.transformers.tilType
import no.nav.bidrag.behandling.utils.hentInntektForBarn
import no.nav.bidrag.behandling.utils.testdata.TestdataManager
import no.nav.bidrag.behandling.utils.testdata.leggeTilGjeldendeBarnetillegg
import no.nav.bidrag.behandling.utils.testdata.leggeTilGjeldendeBarnetilsyn
import no.nav.bidrag.behandling.utils.testdata.leggeTilNyttBarnetilsyn
import no.nav.bidrag.behandling.utils.testdata.oppretteArbeidsforhold
import no.nav.bidrag.behandling.utils.testdata.oppretteBehandlingRoller
Expand Down Expand Up @@ -1288,7 +1289,7 @@ class BehandlingServiceTest : TestContainerRunner() {
val innhentet = LocalDateTime.now()

// gjeldende barnetilsyn
b.leggeTilGjeldendeBarnetillegg()
b.leggeTilGjeldendeBarnetilsyn()

// nytt barnetilsyn
b.leggeTilNyttBarnetilsyn()
Expand Down Expand Up @@ -1619,7 +1620,7 @@ class BehandlingServiceTest : TestContainerRunner() {

@Test
@Transactional
open fun `skal oppdatere ikke aktivert barnetilsyn ved endring av virkningsdato fremover i tid`() {
open fun `skal oppdatere barnetilsyn ved endring av virkningsdato fremover i tid`() {
// gitt
val b =
testdataManager.oppretteBehandling(
Expand All @@ -1636,16 +1637,33 @@ class BehandlingServiceTest : TestContainerRunner() {
stubPersonConsumer()
grunnlagService.oppdatereGrunnlagForBehandling(b)

b.leggeTilGjeldendeBarnetillegg()
b.leggeTilGjeldendeBarnetilsyn()
b.leggeTilNyttBarnetilsyn()

assertSoftly(b.grunnlag.filter { Grunnlagsdatatype.BARNETILSYN == it.type }) { g ->
g shouldHaveSize 5
g.filter { it.aktiv == null } shouldHaveSize 3
g
.filter { it.aktiv != null }
.maxBy { it.aktiv!! }
.aktiv!!
.toLocalDate() shouldBeLessThan LocalDate.now()
}

val ikkeAktive = b.grunnlag.hentSisteIkkeAktiv().filter { Grunnlagsdatatype.BARNETILSYN == it.type }

val aktivtIkkebearbeidaGrunnlag =
b.grunnlag
.hentSisteAktiv()
.find { Grunnlagsdatatype.BARNETILSYN == it.type && !it.erBearbeidet }

val fraDatoAktivtIkkebearbeidaGrunnlag =
aktivtIkkebearbeidaGrunnlag
.konvertereData<Set<BarnetilsynGrunnlagDto>>()!!
.minBy { it.periodeFra }
.periodeFra
aktivtIkkebearbeidaGrunnlag shouldNotBe null

val nyVirkningsdato =
ikkeAktive
.flatMap { it.konvertereData<Set<BarnetilsynGrunnlagDto>>()!! }
Expand All @@ -1662,12 +1680,43 @@ class BehandlingServiceTest : TestContainerRunner() {
//
entityManager.flush()
entityManager.refresh(b)

val alleBarnetilsynsgrunnlag = b.grunnlag.filter { Grunnlagsdatatype.BARNETILSYN == it.type }
alleBarnetilsynsgrunnlag shouldHaveSize 5

assertSoftly(b.grunnlag.filter { Grunnlagsdatatype.BARNETILSYN == it.type }) { s ->
s shouldHaveSize 5
jsonListeTilObjekt<BarnetilsynGrunnlagDto>(
s.first { it.erBearbeidet && it.aktiv == null }.data,
).minByOrNull { it.periodeFra }!!.periodeFra shouldBeEqual nyVirkningsdato
}

// Verifisere ikke-bearbeida grunnlag
assertSoftly(
alleBarnetilsynsgrunnlag.filter { !it.erBearbeidet },
) { g ->
g.shouldHaveSize(2)
g.filter { it.aktiv != null } shouldHaveSize 1
jsonListeTilObjekt<BarnetilsynGrunnlagDto>(g.find { it.aktiv != null }!!.data).minByOrNull { it.periodeFra }!!.periodeFra shouldBeEqual fraDatoAktivtIkkebearbeidaGrunnlag
g.find { it.aktiv != null }!!.aktiv!!.toLocalDate() shouldBe aktivtIkkebearbeidaGrunnlag!!.aktiv!!.toLocalDate()
}

// Verifisere aktiverte bearbeida grunnlag
assertSoftly(
alleBarnetilsynsgrunnlag.filter { it.erBearbeidet && it.aktiv != null },
) { aktive ->
aktive.shouldHaveSize(2)
jsonListeTilObjekt<BarnetilsynGrunnlagDto>(aktive.first().data).minByOrNull { it.periodeFra }!!.periodeFra shouldBeEqual nyVirkningsdato
aktive.forEach { it.aktiv!!.toLocalDate() shouldBe LocalDate.now() }
}

// Verifisere ikke-aktiverte bearbeida grunnlag
assertSoftly(
alleBarnetilsynsgrunnlag.filter { it.erBearbeidet && it.aktiv == null },
) { ikkeAktive ->
ikkeAktive.shouldHaveSize(1)
jsonListeTilObjekt<BarnetilsynGrunnlagDto>(ikkeAktive.first().data).minByOrNull { it.periodeFra }!!.periodeFra shouldBeEqual nyVirkningsdato
}
}

@Test
Expand Down
116 changes: 106 additions & 10 deletions src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import no.nav.bidrag.behandling.database.datamodell.Tilleggsstønad
import no.nav.bidrag.behandling.database.datamodell.Underholdskostnad
import no.nav.bidrag.behandling.database.datamodell.hentAlleAktiv
import no.nav.bidrag.behandling.database.datamodell.hentAlleIkkeAktiv
import no.nav.bidrag.behandling.database.datamodell.hentSisteAktiv
import no.nav.bidrag.behandling.database.datamodell.henteNyesteAktiveGrunnlag
import no.nav.bidrag.behandling.database.datamodell.henteNyesteIkkeAktiveGrunnlag
import no.nav.bidrag.behandling.database.datamodell.konvertereData
Expand All @@ -44,8 +45,9 @@ import no.nav.bidrag.behandling.transformers.beregning.ValiderBeregning
import no.nav.bidrag.behandling.transformers.underhold.aktivereBarnetilsynHvisIngenEndringerMåAksepteres
import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.BehandlingTilGrunnlagMappingV2
import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.VedtakGrunnlagMapper
import no.nav.bidrag.behandling.utils.testdata.leggeTilGjeldendeBarnetillegg
import no.nav.bidrag.behandling.utils.testdata.leggeTilGjeldendeBarnetilsyn
import no.nav.bidrag.behandling.utils.testdata.leggeTilNyttBarnetilsyn
import no.nav.bidrag.behandling.utils.testdata.oppretteBarnetilsynGrunnlagDto
import no.nav.bidrag.behandling.utils.testdata.oppretteTestbehandling
import no.nav.bidrag.behandling.utils.testdata.testdataBarn1
import no.nav.bidrag.behandling.utils.testdata.testdataBarn2
Expand Down Expand Up @@ -1026,7 +1028,7 @@ class UnderholdServiceTest {
behandlingstype = TypeBehandling.BIDRAG,
)

b.leggeTilGjeldendeBarnetillegg()
b.leggeTilGjeldendeBarnetilsyn()

val nyVirkningsdato =
b
Expand Down Expand Up @@ -1085,7 +1087,13 @@ class UnderholdServiceTest {
behandlingstype = TypeBehandling.BIDRAG,
)

b.leggeTilGjeldendeBarnetillegg()
b.leggeTilGjeldendeBarnetilsyn(
oppretteBarnetilsynGrunnlagDto(
b,
skolealder = Skolealder.UNDER,
tilsynstype = Tilsynstype.DELTID,
),
)
b.leggeTilNyttBarnetilsyn()

val nyVirkningsdato =
Expand Down Expand Up @@ -1152,7 +1160,7 @@ class UnderholdServiceTest {
behandlingstype = TypeBehandling.BIDRAG,
)

b.leggeTilGjeldendeBarnetillegg()
b.leggeTilGjeldendeBarnetilsyn()
val u =
b.underholdskostnader.find { it.barnetsRolleIBehandlingen?.personident?.verdi == testdataBarn1.ident }!!

Expand Down Expand Up @@ -1181,10 +1189,94 @@ class UnderholdServiceTest {
underholdService.tilpasseUnderholdEtterVirkningsdato(b)

//
u.barnetilsyn.first().fom shouldBe b.virkningstidspunkt
u.barnetilsyn.first().fom shouldBe
b.grunnlag
.hentSisteAktiv()
.find { Grunnlagsdatatype.BARNETILSYN == it.type }
.konvertereData<Set<BarnetilsynGrunnlagDto>>()!!
.minBy { it.periodeFra }
.periodeFra
u.faktiskeTilsynsutgifter.first().fom shouldBe b.virkningstidspunkt
u.tilleggsstønad.first().fom shouldBe b.virkningstidspunkt
}

@Test
open fun `skal aktivere grunnlag og justere perioder for barnetilsyn etter endring av virkningsdato`() {
// gitt
val b =
oppretteTestbehandling(
setteDatabaseider = true,
inkludereBp = true,
behandlingstype = TypeBehandling.BIDRAG,
)

b.leggeTilGjeldendeBarnetilsyn(
oppretteBarnetilsynGrunnlagDto(
b,
periodeFraAntallMndTilbake = 13,
periodeTilAntallMndTilbake = 1,
),
)

val originaltGrunnlag =
b.grunnlag
.hentAlleAktiv()
.find { Grunnlagsdatatype.BARNETILSYN == it.type && !it.erBearbeidet }

originaltGrunnlag.shouldNotBeNull()
originaltGrunnlag.aktiv.shouldNotBeNull()

val dataOriginaltGrunnlag = originaltGrunnlag.konvertereData<Set<BarnetilsynGrunnlagDto>>()

val u =
b.underholdskostnader.find { it.barnetsRolleIBehandlingen?.personident?.verdi == testdataBarn1.ident }!!

u.barnetilsyn.add(
Barnetilsyn(
underholdskostnad = u,
fom = b.virkningstidspunktEllerSøktFomDato,
kilde = Kilde.MANUELL,
omfang = Tilsynstype.HELTID,
under_skolealder = false,
),
)

b.virkningstidspunkt = LocalDate.now()

// hvis
underholdService.tilpasseUnderholdEtterVirkningsdato(b)

//
assertSoftly(b.grunnlag.hentAlleAktiv().filter { Grunnlagsdatatype.BARNETILSYN == it.type }) {
shouldHaveSize(2)

val ikkeBearbeida = find { !it.erBearbeidet }
val bearbeida = find { it.erBearbeidet }

ikkeBearbeida.shouldNotBeNull()
bearbeida.shouldNotBeNull()

ikkeBearbeida.aktiv?.toLocalDate() shouldBe originaltGrunnlag.aktiv!!.toLocalDate()
bearbeida.aktiv?.toLocalDate() shouldBe LocalDate.now()

val perioderIkkeBearbeida = ikkeBearbeida.konvertereData<Set<BarnetilsynGrunnlagDto>>()
val perioderBearbeida = bearbeida.konvertereData<Set<BarnetilsynGrunnlagDto>>()

perioderIkkeBearbeida.shouldNotBeNull()
perioderIkkeBearbeida.shouldHaveSize(1)
perioderIkkeBearbeida.first().periodeFra shouldBe dataOriginaltGrunnlag!!.first().periodeFra
perioderIkkeBearbeida.first().periodeTil shouldBe dataOriginaltGrunnlag.first().periodeTil

perioderBearbeida.shouldBeEmpty()
}

assertSoftly(u.barnetilsyn) {
shouldHaveSize(1)
first().kilde shouldBe Kilde.MANUELL
first().fom shouldBe b.virkningstidspunkt
first().tom shouldBe null
}
}
}

@Nested
Expand All @@ -1200,7 +1292,7 @@ class UnderholdServiceTest {
behandlingstype = TypeBehandling.BIDRAG,
)

b.leggeTilGjeldendeBarnetillegg()
b.leggeTilGjeldendeBarnetilsyn()
b.leggeTilNyttBarnetilsyn()

// hvis
Expand All @@ -1221,7 +1313,8 @@ class UnderholdServiceTest {
.konvertereData<Set<BarnetilsynGrunnlagDto>>()
?.shouldHaveSize(3)

val aktiveBearbeidaBarnetilsyn = b.grunnlag.hentAlleAktiv().filter { Grunnlagsdatatype.BARNETILSYN == it.type && it.erBearbeidet }
val aktiveBearbeidaBarnetilsyn =
b.grunnlag.hentAlleAktiv().filter { Grunnlagsdatatype.BARNETILSYN == it.type && it.erBearbeidet }
aktiveBearbeidaBarnetilsyn shouldHaveSize 2

aktiveBearbeidaBarnetilsyn.filter { it.gjelder == testdataBarn2.ident } shouldHaveSize 1
Expand All @@ -1231,16 +1324,19 @@ class UnderholdServiceTest {
it?.erBearbeidet shouldBe true
}

val dataTestbarn2 = aktiveBearbeidaBarnetilsyn.find { it.gjelder == testdataBarn2.ident }.konvertereData<Set<BarnetilsynGrunnlagDto>>()!!
val dataTestbarn2 =
aktiveBearbeidaBarnetilsyn
.find { it.gjelder == testdataBarn2.ident }
.konvertereData<Set<BarnetilsynGrunnlagDto>>()!!
dataTestbarn2 shouldHaveSize 1

assertSoftly(dataTestbarn2.first()) {
beløp shouldBe 4000
barnPersonId shouldBe testdataBarn2.ident
periodeFra shouldBeGreaterThan b.virkningstidspunktEllerSøktFomDato
periodeTil shouldBe null
tilsynstype shouldBe null
skolealder shouldBe null
tilsynstype shouldBe Tilsynstype.HELTID
skolealder shouldBe Skolealder.OVER
}
}
}
Expand Down
Loading

0 comments on commit 149f4e5

Please sign in to comment.