Skip to content

Commit

Permalink
Lagt til logikk for å ikke telle med barn som barnUnderTolvÅr før fød…
Browse files Browse the repository at this point in the history
…selsmåned - netto tilsynsutgift (#434)

* Lagt til logikk for å ikke telle med barn som barnUnderTolvÅr før fødselsmåned - netto tilsynsutgift

* Fikser feil i en test
  • Loading branch information
rinnan17 authored Dec 23, 2024
1 parent 0fdc8dd commit 9f51a3b
Show file tree
Hide file tree
Showing 13 changed files with 329 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ data class BarnetilleggSkattesatsBeregningResultat(
val trinnskatt: BigDecimal,
val sumSkatt: BigDecimal,
val sumInntekt: BigDecimal,
val grunnlagsreferanseListe: List<String>
val grunnlagsreferanseListe: List<String>,
)
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ internal object BidragsevneMapper : CoreMapper() {
fun mapBidragsevneGrunnlag(
mottattGrunnlag: BeregnGrunnlag,
sjablonGrunnlag: List<GrunnlagDto>,
åpenSluttperiode: Boolean
åpenSluttperiode: Boolean,
): BidragsevnePeriodeGrunnlag {
val referanseTilBP = finnReferanseTilRolle(
grunnlagListe = mottattGrunnlag.grunnlagListe,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ class BeregnBarnebidragService : BeregnService() {

val delberegningNettoTilsynsutgiftResultat = delberegningNettoTilsynsutgift(
mottattGrunnlag = utvidetGrunnlag,
åpenSluttperiode = åpenSluttperiode
åpenSluttperiode = åpenSluttperiode,
)

val delberegningUnderholdskostnadResultat = delberegningUnderholdskostnad(
Expand All @@ -159,7 +159,7 @@ class BeregnBarnebidragService : BeregnService() {
søknadsbarnReferanse = utvidetGrunnlag.søknadsbarnReferanse,
grunnlagListe = (utvidetGrunnlag.grunnlagListe + delberegningNettoTilsynsutgiftResultat).distinctBy { it.referanse },
),
åpenSluttperiode = åpenSluttperiode
åpenSluttperiode = åpenSluttperiode,
)

return (delberegningNettoTilsynsutgiftResultat + delberegningUnderholdskostnadResultat).distinctBy { it.referanse }
Expand Down Expand Up @@ -277,9 +277,9 @@ class BeregnBarnebidragService : BeregnService() {
return if (periodeSøknadsbarnetFyller18År.isBefore(mottattGrunnlag.periode.til)) {
BeregnGrunnlagJustert(
beregnGrunnlag = mottattGrunnlag.copy(
periode = mottattGrunnlag.periode.copy(til = periodeSøknadsbarnetFyller18År.plusMonths(1))
periode = mottattGrunnlag.periode.copy(til = periodeSøknadsbarnetFyller18År.plusMonths(1)),
),
åpenSluttperiode = false
åpenSluttperiode = false,
)
} else {
BeregnGrunnlagJustert(beregnGrunnlag = mottattGrunnlag, åpenSluttperiode = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ internal object BeregnBarnetilleggSkattesatsService : BeregnService() {
fun delberegningBarnetilleggSkattesats(
mottattGrunnlag: BeregnGrunnlag,
rolle: Grunnlagstype,
åpenSluttperiode: Boolean = true
åpenSluttperiode: Boolean = true,
): List<GrunnlagDto> {
val referanseTilRolle = finnReferanseTilRolle(
grunnlagListe = mottattGrunnlag.grunnlagListe,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,11 +121,21 @@ internal object BeregnNettoTilsynsutgiftService : BeregnService() {
grunnlagListe: NettoTilsynsutgiftPeriodeGrunnlag,
beregningsperiode: ÅrMånedsperiode,
): List<ÅrMånedsperiode> {
// Barn som er født etter beregningsperiodens start skal ikke regnes med i antall barn under 12 år, det må lages en bruddperiode i disse
// barnenes fødselsmåned
val fødselsmånederForBarnFødtEtterberegningsperiodeFra = grunnlagListe.barnBMListe
.filter {
it.fødselsdato.withDayOfMonth(1).isAfter(LocalDate.of(beregningsperiode.fom.year, beregningsperiode.fom.month, 1).minusDays(1))
}
.map { ÅrMånedsperiode(YearMonth.from(it.fødselsdato), YearMonth.from(it.fødselsdato)) }
.distinct()

val periodeListe = sequenceOf(grunnlagListe.beregningsperiode)
.plus(grunnlagListe.faktiskUtgiftPeriodeCoreListe.asSequence().map { ÅrMånedsperiode(it.periode.datoFom, it.periode.datoTil) })
.plus(grunnlagListe.tilleggsstønadPeriodeCoreListe.asSequence().map { ÅrMånedsperiode(it.periode.datoFom, it.periode.datoTil) })
.plus(grunnlagListe.sjablonMaksTilsynsbeløpPeriodeGrunnlagListe.asSequence().map { it.sjablonMaksTilsynsbeløpPeriode.periode })
.plus(grunnlagListe.sjablonMaksFradragsbeløpPeriodeGrunnlagListe.asSequence().map { it.sjablonMaksFradragsbeløpPeriode.periode })
.plus(fødselsmånederForBarnFødtEtterberegningsperiodeFra.asSequence())

return lagBruddPeriodeListe(periodeListe, beregningsperiode)
}
Expand Down Expand Up @@ -400,12 +410,15 @@ internal object BeregnNettoTilsynsutgiftService : BeregnService() {
}
}

private fun barnUnderTolvÅr(barnBMListe: List<BarnBM>, fom: YearMonth): List<BarnBM> = barnBMListe.filter {
it.fødselsdato.let { fødselsdato ->
Period.between(
fødselsdato.withMonth(7).withDayOfMonth(1),
LocalDate.of(fom.year, fom.month, 1),
).years < 12
private fun barnUnderTolvÅr(barnBMListe: List<BarnBM>, fom: YearMonth): List<BarnBM> = barnBMListe
// Filtrer først bort barn som er født etter periodens start
.filter { YearMonth.from(it.fødselsdato).isBefore(fom.plusMonths(1)) }
.filter {
it.fødselsdato.let { fødselsdato ->
Period.between(
fødselsdato.withMonth(7).withDayOfMonth(1),
LocalDate.of(fom.year, fom.month, 1),
).years < 12
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ internal class BeregnNettoBarnetilleggApiTest {
assertAll(
{ assertThat(resultatBM).hasSize(0) },

)
)
}

@Test
Expand All @@ -123,7 +123,7 @@ internal class BeregnNettoBarnetilleggApiTest {
{ assertThat(resultat[2].periode).isEqualTo(ÅrMånedsperiode("2024-06", "2024-07")) },
{ assertEquals(0, resultat[2].summertBruttoBarnetillegg.compareTo(BigDecimal.valueOf(500.00))) },

)
)
}

private fun utførBeregningerOgEvaluerResultatNettoBarnetillegg(rolle: Grunnlagstype): List<DelberegningNettoBarnetillegg> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,29 @@ internal class BeregnNettoTilsynsutgiftApiTest {
assertThat(responseFaktiskUtgift2).isEqualByComparingTo(BigDecimal.valueOf(458.33))
}

@Test
@DisplayName("Test at antall barn under 12 år ikke tar med barn født før beregning start, skal lage brudd på faktisk fødemåned for disse")
fun testBortfiltreringAvBarnSomIkkeErFødtFørBeregningStart() {
filnavn = "src/test/resources/testfiler/nettotilsynsutgift/nettotilsynsutgift_barnoverogundertolvår.json"
val resultat = utførBeregningerOgEvaluerResultatNettoTilsynsutgift()

// Bms barn nummer to er født 2024-10-17. Det skal lages bruddperiode fra oktober -24 og antall barn under tolv år skal da gå fra 1 til 2.
assertAll(
{ assertThat(resultat).hasSize(3) },

// Resultat
{ assertThat(resultat[0].periode).isEqualTo(ÅrMånedsperiode(YearMonth.parse("2024-01"), YearMonth.parse("2024-07"))) },
{ assertThat(resultat[0].antallBarnBMUnderTolvÅr).isEqualTo(1) },

{ assertThat(resultat[1].periode).isEqualTo(ÅrMånedsperiode(YearMonth.parse("2024-07"), YearMonth.parse("2024-10"))) },
{ assertThat(resultat[1].antallBarnBMUnderTolvÅr).isEqualTo(1) },

{ assertThat(resultat[2].periode).isEqualTo(ÅrMånedsperiode(YearMonth.parse("2024-10"), null)) },
{ assertThat(resultat[2].antallBarnBMUnderTolvÅr).isEqualTo(2) },

)
}

private fun utførBeregningerOgEvaluerResultatNettoTilsynsutgift(): List<DelberegningNettoTilsynsutgift> {
val request = lesFilOgByggRequest(filnavn)
val nettoTilsynsutgiftResultat = api.beregnNettoTilsynsutgift(request)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,30 @@ internal class BeregnNettoTilsynsutgiftOgUnderholdskostnadApiTest {
{ assertThat(resultat[3].periode).isEqualTo(ÅrMånedsperiode(YearMonth.parse("2024-07"), null)) },
{ assertNull(resultat[3].nettoTilsynsutgift) },

)
)
}

@Test
@DisplayName("Underholdskostnad - eksempel 5")
fun test_netto_tilsynsugift_og_underholdskostnad_alle_barn_refereres_i_resultatet() {
filnavn =
"src/test/resources/testfiler/nettobarnetilsynogunderholdskostnad/nettotilsynsutgift_og_underholdskostnad_flere_barn.json"
val resultat = utførBeregningerOgEvaluerResultatNettoTilsynsutgiftOgUnderholdskostnad()

assertAll(
// Resultat
{ assertThat(resultat).hasSize(3) },

{ assertThat(resultat[0].periode).isEqualTo(ÅrMånedsperiode("2024-01", "2024-02")) },
{ assertNotNull(resultat[0].nettoTilsynsutgift) },

{ assertThat(resultat[1].periode).isEqualTo(ÅrMånedsperiode("2024-02", "2024-07")) },
{ assertNotNull(resultat[1].nettoTilsynsutgift) },

{ assertThat(resultat[2].periode).isEqualTo(ÅrMånedsperiode(YearMonth.parse("2024-07"), null)) },
{ assertNotNull(resultat[2].nettoTilsynsutgift) },

)
}

private fun utførBeregningerOgEvaluerResultatNettoTilsynsutgiftOgUnderholdskostnad(): List<DelberegningUnderholdskostnad> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ internal class BeregnUnderholdskostnadApiTest {
{ assertThat(resultat[1].periode).isEqualTo(ÅrMånedsperiode(YearMonth.parse("2021-07"), null)) },
{ assertEquals(0, resultat[1].barnetrygd.compareTo(BigDecimal.valueOf(1354))) },

)
)
}

@Test
Expand All @@ -239,7 +239,7 @@ internal class BeregnUnderholdskostnadApiTest {
{ assertThat(resultat[1].periode).isEqualTo(ÅrMånedsperiode(YearMonth.parse("2024-07"), null)) },
{ assertEquals(0, resultat[1].barnetrygd.compareTo(BigDecimal.valueOf(1510))) },

)
)
}

private fun utførBeregningerOgEvaluerResultatUnderholdskostnad(): List<DelberegningUnderholdskostnad> {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
{
"periode": {
"fom": "2024-01",
"til": "2024-09"
},
"søknadsbarnReferanse": "Person_Søknadsbarn",
"grunnlagListe": [
{
"referanse": "Person_Søknadsbarn",
"type": "PERSON_SØKNADSBARN",
"innhold": {
"ident": "11111111110",
"navn": "Trengende Søknadsbarn",
"fødselsdato": "2017-09-13"
},
"grunnlagsreferanseListe": [],
"gjelderReferanse": null
},
{
"referanse": "Person_Bidragsmottaker",
"type": "PERSON_BIDRAGSMOTTAKER",
"innhold": {
"ident": "22222222222",
"navn": "Søkende Bidragsmottaker",
"fødselsdato": "1982-05-05"
},
"grunnlagsreferanseListe": [],
"gjelderReferanse": null
},
{
"referanse": "Person_Bidragspliktig",
"type": "PERSON_BIDRAGSPLIKTIG",
"innhold": {
"ident": "33333333333",
"navn": "Motvillig Bidragspliktig",
"fødselsdato": "1981-07-13"
},
"grunnlagsreferanseListe": [],
"gjelderReferanse": null
},
{
"referanse" : "person_PERSON_BARN_BIDRAGSMOTTAKER_20201217_100",
"type" : "PERSON_BARN_BIDRAGSMOTTAKER",
"innhold" : {
"ident" : "12121250511",
"navn" : null,
"fødselsdato" : "2020-12-17"
},
"grunnlagsreferanseListe" : [],
"gjelderReferanse" : null
},
{
"referanse" : "person_PERSON_BARN_BIDRAGSMOTTAKER_20190317_101",
"type" : "PERSON_BARN_BIDRAGSMOTTAKER",
"innhold" : {
"ident" : "12121250511",
"navn" : null,
"fødselsdato" : "2019-12-17"
},
"grunnlagsreferanseListe" : [],
"gjelderReferanse" : null
},
{
"referanse": "Mottatt_FaktiskUtgift_202301_SB1",
"type": "FAKTISK_UTGIFT_PERIODE",
"innhold": {
"periode": {
"fom": "2024-01",
"til": null
},
"fødselsdatoBarn": "2017-09-13",
"faktiskUtgiftBeløp": 500.00,
"kostpengerBeløp": 100.00,
"manueltRegistrert": false
},
"grunnlagsreferanseListe": [],
"gjelderBarnReferanse": "Person_Søknadsbarn",
"gjelderReferanse": "Person_Bidragsmottaker"
},
{
"referanse": "Mottatt_FaktiskUtgift_202301_person_PERSON_BARN_BIDRAGSMOTTAKER_20201217_100",
"type": "FAKTISK_UTGIFT_PERIODE",
"innhold": {
"periode": {
"fom": "2024-01",
"til": null
},
"fødselsdatoBarn": "2020-12-17",
"faktiskUtgiftBeløp": 700.00,
"kostpengerBeløp": 300.00,
"manueltRegistrert": false
},
"grunnlagsreferanseListe": [],
"gjelderBarnReferanse": "person_PERSON_BARN_BIDRAGSMOTTAKER_20201217_100",
"gjelderReferanse": "Person_Bidragsmottaker"
},
{
"referanse": "Mottatt_FaktiskUtgift_202301_person_PERSON_BARN_BIDRAGSMOTTAKER_20190317_101",
"type": "FAKTISK_UTGIFT_PERIODE",
"innhold": {
"periode": {
"fom": "2024-01",
"til": null
},
"fødselsdatoBarn": "2020-12-17",
"faktiskUtgiftBeløp": 200.00,
"kostpengerBeløp": 300.00,
"manueltRegistrert": false
},
"grunnlagsreferanseListe": [],
"gjelderBarnReferanse": "person_PERSON_BARN_BIDRAGSMOTTAKER_20190317_101",
"gjelderReferanse": "Person_Bidragsmottaker"
},
{
"referanse": "Mottatt_Tilleggsstønad_202301_SB1",
"type": "TILLEGGSSTØNAD_PERIODE",
"innhold": {
"periode": {
"fom": "2024-02",
"til": null
},
"beløpDagsats": 10.00,
"manueltRegistrert": false
},
"grunnlagsreferanseListe": [],
"gjelderBarnReferanse": "Person_Søknadsbarn",
"gjelderReferanse": "Person_Bidragsmottaker"
},
{
"referanse": "Mottatt_Barnetilsyn_202407_Person_Søknadsbarn",
"type": "BARNETILSYN_MED_STØNAD_PERIODE",
"innhold": {
"periode": {
"fom": "2024-07",
"til": "2024-11"
},
"tilsynstype": "HELTID",
"skolealder": "UNDER",
"manueltRegistrert": false
},
"grunnlagsreferanseListe": [],
"gjelderBarnReferanse": "Person_Søknadsbarn",
"gjelderReferanse": "Person_Bidragsmottaker"
},
{
"referanse": "Mottatt_Netto_Tilsynsutgift_202402_Person_Bidragsmottaker",
"type": "DELBEREGNING_NETTO_TILSYNSUTGIFT",
"innhold": {
"periode": {
"fom": "2024-02",
"til": "2024-09"
},
"totalTilsynsutgift": 400.00,
"erBegrensetAvMaksTilsyn": false,
"bruttoTilsynsutgift": 400.00,
"justertBruttoTilsynsutgift": 400.00,
"andelTilsynsutgiftFaktor": 400.00,
"antallBarnBMUnderTolvÅr": 2,
"skattefradrag": 400.00,
"skattefradragPerBarn": 400.00,
"skattefradragTotalTilsynsutgift": 400.00,
"skattefradragMaksfradrag": 400.00,
"nettoTilsynsutgift": 58.83,
"tilsynsutgiftBarnListe": [
{
"gjelderBarn": "Person_Søknadsbarn",
"sumTilsynsutgifter": 400.00,
"endeligSumTilsynsutgifter": 366.67
}
],
"grunnlagsreferanseListe": [],
"gjelderBarnReferanse": "Person_Søknadsbarn",
"gjelderReferanse": "Person_Bidragsmottaker"
}
}
]
}
Loading

0 comments on commit 9f51a3b

Please sign in to comment.