Skip to content

Commit 967df76

Browse files
authored
Merge pull request #491 from navikt/debug/boforhold
Debug/boforhold
2 parents 1fc5351 + 13091ba commit 967df76

File tree

4 files changed

+186
-13
lines changed

4 files changed

+186
-13
lines changed

bidrag-boforhold/src/main/kotlin/no/nav/bidrag/boforhold/service/BoforholdBarnServiceV3.kt

+20-12
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ internal class BoforholdBarnServiceV3 {
131131
val offentligePerioderJustertMotAttenårsdag =
132132
justerMotAttenårsdag(attenårFraDato, typeBehandling, komplettOffentligTidslinje)
133133
val sammenslåtteBehandledeOgOffentligePerioder =
134-
slåSammenPrimærOgSekundærperioder(behandledeOpplysninger, offentligePerioderJustertMotAttenårsdag)
134+
slåSammenPrimærOgSekundærperioder(behandledeOpplysninger, offentligePerioderJustertMotAttenårsdag, true)
135135

136136
// Slår sammen sammenhengende perioder med lik Bostatuskode
137137
val sammenslåttListe = slåSammenPerioderOgJusterPeriodeTom(sammenslåtteBehandledeOgOffentligePerioder)
@@ -185,7 +185,7 @@ internal class BoforholdBarnServiceV3 {
185185
return emptyList()
186186
}
187187

188-
return slåSammenPrimærOgSekundærperioder(oppdaterteBehandledeOpplysninger, justerteOffentligePerioder)
188+
return slåSammenPrimærOgSekundærperioder(oppdaterteBehandledeOpplysninger, justerteOffentligePerioder, true)
189189
}
190190

191191
// Det finnes både behandlede og endrede perioder
@@ -196,7 +196,7 @@ internal class BoforholdBarnServiceV3 {
196196
val offentligePerioderJustertMotAttenårsdag = justerMotAttenårsdag(attenårFraDato, typeBehandling, komplettOffentligTidslinje)
197197

198198
val sammenslåtteBehandledeOgOffentligePerioder =
199-
slåSammenPrimærOgSekundærperioder(oppdaterteBehandledeOpplysninger, offentligePerioderJustertMotAttenårsdag)
199+
slåSammenPrimærOgSekundærperioder(oppdaterteBehandledeOpplysninger, offentligePerioderJustertMotAttenårsdag, false)
200200

201201
return sammenslåtteBehandledeOgOffentligePerioder.map {
202202
BoforholdResponseV2(
@@ -447,6 +447,7 @@ internal class BoforholdBarnServiceV3 {
447447
private fun slåSammenPrimærOgSekundærperioder(
448448
primærperioder: List<BoforholdResponseV2>,
449449
sekundærperioder: List<BoforholdResponseV2>,
450+
slåSammenPerioderMedLikBostatus: Boolean,
450451
): List<BoforholdResponseV2> {
451452
val resultatliste = mutableListOf<BoforholdResponseV2>()
452453

@@ -518,7 +519,8 @@ internal class BoforholdBarnServiceV3 {
518519
}
519520
}
520521

521-
val justertSekundærperiode = justerSekundærperiode(sekundærperiode, sammenslåttListeOverlappendePerioder)
522+
val justertSekundærperiode =
523+
justerSekundærperiode(sekundærperiode, sammenslåttListeOverlappendePerioder, slåSammenPerioderMedLikBostatus)
522524
if (justertSekundærperiode != null) {
523525
resultatliste.addAll(justertSekundærperiode)
524526
}
@@ -534,6 +536,7 @@ internal class BoforholdBarnServiceV3 {
534536
private fun justerSekundærperiode(
535537
sekundærperiode: BoforholdResponseV2,
536538
overlappendePerioder: List<BoforholdResponseV2>,
539+
slåSammenPerioderMedLikBostatus: Boolean,
537540
): List<BoforholdResponseV2>? {
538541
var periodeFom: LocalDate? = null
539542
var periodeTom: LocalDate? = null
@@ -569,8 +572,8 @@ internal class BoforholdBarnServiceV3 {
569572
}
570573
if (periodeTom != null &&
571574
(
572-
overlappendePerioder[indeks].kilde != sekundærperiode.kilde ||
573-
overlappendePerioder[indeks].bostatus != sekundærperiode.bostatus
575+
overlappendePerioder[indeks].bostatus != sekundærperiode.bostatus ||
576+
slåSammenPerioderMedLikBostatus
574577
)
575578
) {
576579
// Første primære periode starter etter sekundær periode. Den sekundære perioden skrives med justert tomdato. Senere i logikken
@@ -592,8 +595,8 @@ internal class BoforholdBarnServiceV3 {
592595
if (indeks < overlappendePerioder.size - 1) {
593596
if (overlappendePerioder[indeks + 1].periodeFom.isAfter(overlappendePerioder[indeks].periodeTom!!.plusDays(1)) &&
594597
(
595-
overlappendePerioder[indeks].kilde != sekundærperiode.kilde ||
596-
overlappendePerioder[indeks].bostatus != sekundærperiode.bostatus
598+
overlappendePerioder[indeks].bostatus != sekundærperiode.bostatus ||
599+
slåSammenPerioderMedLikBostatus
597600
)
598601
) {
599602
// Det er en åpen tidsperiode mellom to primære perioder, og den sekundære perioden skal fylle denne tidsperioden
@@ -616,7 +619,12 @@ internal class BoforholdBarnServiceV3 {
616619
}
617620
} else {
618621
// Siste sekundærperiode
619-
if (overlappendePerioder[indeks].periodeTom != null) {
622+
if (overlappendePerioder[indeks].periodeTom != null &&
623+
(
624+
overlappendePerioder[indeks].bostatus != sekundærperiode.bostatus ||
625+
slåSammenPerioderMedLikBostatus
626+
)
627+
) {
620628
if (sekundærperiode.periodeTom == null || sekundærperiode.periodeTom.isAfter(overlappendePerioder[indeks].periodeTom)) {
621629
justertSekundærPeriodeListe.add(
622630
BoforholdResponseV2(
@@ -707,7 +715,7 @@ internal class BoforholdBarnServiceV3 {
707715

708716
TypeEndring.NY -> {
709717
if (nyBostatus == null) {
710-
// Hvis det ikke finnes en ny bostatus så kan det ikke leges til ny periode
718+
// Hvis det ikke finnes en ny bostatus så kan det ikke legges til ny periode
711719
secureLogger.info {
712720
"Periode som skal legges til må være angitt som nyBostatus i input. endreBostatus: " +
713721
"${boforholdRequest.endreBostatus} "
@@ -726,7 +734,7 @@ internal class BoforholdBarnServiceV3 {
726734
)
727735
// Justerer perioder mot 18årsdag
728736
val nyBostatusJustertMotAttenårsdag = justerMotAttenårsdag(attenårFraDato, typeBehandling, endredePerioder)
729-
val sammenslåttListe = slåSammenPrimærOgSekundærperioder(nyBostatusJustertMotAttenårsdag, behandledeOpplysninger)
737+
val sammenslåttListe = slåSammenPrimærOgSekundærperioder(nyBostatusJustertMotAttenårsdag, behandledeOpplysninger, true)
730738
return slåSammenPerioderOgJusterPeriodeTom(sammenslåttListe)
731739
}
732740

@@ -801,7 +809,7 @@ internal class BoforholdBarnServiceV3 {
801809
// Justerer perioder mot 18årsdag
802810
val nyPeriodeJustertMotAttenårsdag = justerMotAttenårsdag(attenårFraDato, typeBehandling, nyPeriode)
803811
// Gjør en sammenslåing av perioder med lik bostatuskode og justerer periodeTom
804-
val sammenslåttListe = slåSammenPrimærOgSekundærperioder(nyPeriodeJustertMotAttenårsdag, endredePerioder)
812+
val sammenslåttListe = slåSammenPrimærOgSekundærperioder(nyPeriodeJustertMotAttenårsdag, endredePerioder, true)
805813
return slåSammenPerioderOgJusterPeriodeTom(sammenslåttListe)
806814
}
807815

bidrag-boforhold/src/test/kotlin/no/nav/bidrag/boforhold/TestUtil.kt

+92
Original file line numberDiff line numberDiff line change
@@ -4746,5 +4746,97 @@ class TestUtil {
47464746
),
47474747
),
47484748
)
4749+
4750+
fun justerVirkningstidspunktTilbakeITid() = BoforholdBarnRequestV3(
4751+
gjelderPersonId = "98765432109",
4752+
fødselsdato = LocalDate.of(2006, 10, 31),
4753+
relasjon = Familierelasjon.BARN,
4754+
innhentedeOffentligeOpplysninger = listOf(
4755+
Bostatus(
4756+
periodeFom = LocalDate.of(2025, 5, 1),
4757+
periodeTom = null,
4758+
bostatus = Bostatuskode.REGNES_IKKE_SOM_BARN,
4759+
kilde = Kilde.OFFENTLIG,
4760+
),
4761+
),
4762+
behandledeBostatusopplysninger = listOf(
4763+
Bostatus(
4764+
periodeFom = LocalDate.of(2025, 7, 1),
4765+
periodeTom = null,
4766+
bostatus = Bostatuskode.IKKE_MED_FORELDER,
4767+
kilde = Kilde.OFFENTLIG,
4768+
),
4769+
),
4770+
endreBostatus = null,
4771+
)
4772+
4773+
fun byggEndreVirkningstidspunktVoksne() = listOf(
4774+
BoforholdVoksneRequest(
4775+
innhentedeOffentligeOpplysninger = emptyList(),
4776+
behandledeBostatusopplysninger = emptyList(),
4777+
endreBostatus = null,
4778+
),
4779+
BoforholdVoksneRequest(
4780+
innhentedeOffentligeOpplysninger = emptyList(),
4781+
behandledeBostatusopplysninger = listOf(
4782+
Bostatus(
4783+
periodeFom = LocalDate.of(2024, 3, 1),
4784+
periodeTom = null,
4785+
bostatus = Bostatuskode.BOR_IKKE_MED_ANDRE_VOKSNE,
4786+
kilde = Kilde.OFFENTLIG,
4787+
),
4788+
),
4789+
endreBostatus = null,
4790+
),
4791+
)
4792+
4793+
fun justerTildatoSistePeriodeTilbakeITid() = BoforholdBarnRequestV3(
4794+
gjelderPersonId = "98765432109",
4795+
fødselsdato = LocalDate.of(2014, 5, 13),
4796+
relasjon = Familierelasjon.BARN,
4797+
innhentedeOffentligeOpplysninger = listOf(
4798+
Bostatus(
4799+
periodeFom = LocalDate.of(2024, 1, 1),
4800+
periodeTom = null,
4801+
bostatus = Bostatuskode.MED_FORELDER,
4802+
kilde = Kilde.OFFENTLIG,
4803+
),
4804+
),
4805+
behandledeBostatusopplysninger = listOf(
4806+
Bostatus(
4807+
periodeFom = LocalDate.of(2024, 1, 1),
4808+
periodeTom = LocalDate.of(2024, 6, 30),
4809+
bostatus = Bostatuskode.MED_FORELDER,
4810+
kilde = Kilde.OFFENTLIG,
4811+
),
4812+
Bostatus(
4813+
periodeFom = LocalDate.of(2024, 7, 1),
4814+
periodeTom = LocalDate.of(2024, 8, 31),
4815+
bostatus = Bostatuskode.IKKE_MED_FORELDER,
4816+
kilde = Kilde.MANUELL,
4817+
),
4818+
Bostatus(
4819+
periodeFom = LocalDate.of(2024, 9, 1),
4820+
periodeTom = null,
4821+
bostatus = Bostatuskode.MED_FORELDER,
4822+
kilde = Kilde.OFFENTLIG,
4823+
),
4824+
),
4825+
endreBostatus = EndreBostatus(
4826+
typeEndring = TypeEndring.ENDRET,
4827+
nyBostatus = Bostatus(
4828+
periodeFom = LocalDate.of(2024, 9, 1),
4829+
periodeTom = LocalDate.of(2024, 11, 30),
4830+
bostatus = Bostatuskode.MED_FORELDER,
4831+
kilde = Kilde.MANUELL,
4832+
),
4833+
originalBostatus = Bostatus(
4834+
periodeFom = LocalDate.of(2024, 9, 1),
4835+
periodeTom = null,
4836+
bostatus = Bostatuskode.MED_FORELDER,
4837+
kilde = Kilde.OFFENTLIG,
4838+
),
4839+
),
4840+
)
47494841
}
47504842
}

bidrag-boforhold/src/test/kotlin/no/nav/bidrag/boforhold/service/BoforholdAndreVoksneServiceTest.kt

+27
Original file line numberDiff line numberDiff line change
@@ -204,4 +204,31 @@ internal class BoforholdAndreVoksneServiceTest {
204204
resultat[0].kilde shouldBe Kilde.OFFENTLIG
205205
}
206206
}
207+
208+
@Test
209+
fun `Test endre virkningsidspunkt`() {
210+
boforholdAndreVoksneService = BoforholdAndreVoksneService()
211+
val grunnlag1 = TestUtil.byggEndreVirkningstidspunktVoksne()[0]
212+
var virkningstidspunkt = LocalDate.of(2024, 3, 1)
213+
val resultat1 = boforholdAndreVoksneService.beregnBoforholdAndreVoksne(virkningstidspunkt, grunnlag1)
214+
215+
val grunnlag2 = TestUtil.byggEndreVirkningstidspunktVoksne()[0]
216+
virkningstidspunkt = LocalDate.of(2024, 1, 1)
217+
val resultat2 = boforholdAndreVoksneService.beregnBoforholdAndreVoksne(virkningstidspunkt, grunnlag2)
218+
219+
assertSoftly {
220+
Assertions.assertNotNull(resultat1)
221+
// resultat1.size shouldBe 1
222+
223+
resultat1[0].periodeFom shouldBe LocalDate.of(2024, 3, 1)
224+
resultat1[0].periodeTom shouldBe null
225+
resultat1[0].bostatus shouldBe Bostatuskode.BOR_IKKE_MED_ANDRE_VOKSNE
226+
resultat1[0].kilde shouldBe Kilde.OFFENTLIG
227+
228+
resultat2[0].periodeFom shouldBe LocalDate.of(2024, 1, 1)
229+
resultat2[0].periodeTom shouldBe null
230+
resultat2[0].bostatus shouldBe Bostatuskode.BOR_IKKE_MED_ANDRE_VOKSNE
231+
resultat2[0].kilde shouldBe Kilde.OFFENTLIG
232+
}
233+
}
207234
}

bidrag-boforhold/src/test/kotlin/no/nav/bidrag/boforhold/service/BoforholdBarnServiceV3Test.kt

+47-1
Original file line numberDiff line numberDiff line change
@@ -1298,7 +1298,7 @@ internal class BoforholdBarnServiceV3Test {
12981298
}
12991299

13001300
@Test
1301-
fun `Test utvid periodeforbi neste periode `() {
1301+
fun `Test utvid periode forbi neste periode `() {
13021302
boforholdBarnServiceV3 = BoforholdBarnServiceV3()
13031303
val mottatteBoforhold = TestUtil.barnUtvidPeriodeForbiNestePeriode()
13041304
val virkningstidspunkt = LocalDate.of(2024, 1, 1)
@@ -1325,4 +1325,50 @@ internal class BoforholdBarnServiceV3Test {
13251325
resultat[2].kilde shouldBe Kilde.OFFENTLIG
13261326
}
13271327
}
1328+
1329+
@Test
1330+
fun `Test juster virkningstidspunkt tilbake i tid `() {
1331+
boforholdBarnServiceV3 = BoforholdBarnServiceV3()
1332+
val mottatteBoforhold = TestUtil.justerVirkningstidspunktTilbakeITid()
1333+
val virkningstidspunkt = LocalDate.of(2025, 5, 1)
1334+
val resultat = boforholdBarnServiceV3.beregnBoforholdBarn(virkningstidspunkt, TypeBehandling.BIDRAG, listOf(mottatteBoforhold))
1335+
1336+
assertSoftly {
1337+
Assertions.assertNotNull(resultat)
1338+
resultat.size shouldBe 1
1339+
1340+
resultat[0].periodeFom shouldBe LocalDate.of(2025, 5, 1)
1341+
resultat[0].periodeTom shouldBe null
1342+
resultat[0].bostatus shouldBe Bostatuskode.IKKE_MED_FORELDER
1343+
resultat[0].kilde shouldBe Kilde.OFFENTLIG
1344+
}
1345+
}
1346+
1347+
@Test
1348+
fun `Test endre tildato siste periode tilbake i tid `() {
1349+
boforholdBarnServiceV3 = BoforholdBarnServiceV3()
1350+
val mottatteBoforhold = TestUtil.justerTildatoSistePeriodeTilbakeITid()
1351+
val virkningstidspunkt = LocalDate.of(2024, 1, 1)
1352+
val resultat = boforholdBarnServiceV3.beregnBoforholdBarn(virkningstidspunkt, TypeBehandling.BIDRAG, listOf(mottatteBoforhold))
1353+
1354+
assertSoftly {
1355+
Assertions.assertNotNull(resultat)
1356+
resultat.size shouldBe 3
1357+
1358+
resultat[0].periodeFom shouldBe LocalDate.of(2024, 1, 1)
1359+
resultat[0].periodeTom shouldBe LocalDate.of(2024, 6, 30)
1360+
resultat[0].bostatus shouldBe Bostatuskode.MED_FORELDER
1361+
resultat[0].kilde shouldBe Kilde.OFFENTLIG
1362+
1363+
resultat[1].periodeFom shouldBe LocalDate.of(2024, 7, 1)
1364+
resultat[1].periodeTom shouldBe LocalDate.of(2024, 8, 31)
1365+
resultat[1].bostatus shouldBe Bostatuskode.IKKE_MED_FORELDER
1366+
resultat[1].kilde shouldBe Kilde.MANUELL
1367+
1368+
resultat[2].periodeFom shouldBe LocalDate.of(2024, 9, 1)
1369+
resultat[2].periodeTom shouldBe LocalDate.of(2024, 11, 30)
1370+
resultat[2].bostatus shouldBe Bostatuskode.MED_FORELDER
1371+
resultat[2].kilde shouldBe Kilde.OFFENTLIG
1372+
}
1373+
}
13281374
}

0 commit comments

Comments
 (0)