From 740377f6f6b4e512c3383ee04a8ff2669520cbd4 Mon Sep 17 00:00:00 2001 From: s148719 Date: Thu, 5 Dec 2024 16:12:02 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Hente=20inn=20grunnlag=20for=20tilleggsst?= =?UTF-8?q?=C3=B8nad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../consumer/Grunnlagsobjektvelger.kt | 8 +-- .../controller/VisningsnavnController.kt | 1 + .../database/datamodell/Enumtyper.kt | 1 + .../database/datamodell/Underholdskostnad.kt | 1 + .../dto/v2/behandling/BehandlingDtoV2.kt | 3 + .../behandling/service/BeregningService.kt | 1 + .../behandling/service/GrunnlagService.kt | 40 +++++++++-- .../behandling/transformers/Sortering.kt | 1 + .../behandling/transformers/Validering.kt | 1 + .../transformers/grunnlag/Grunnlagsmapping.kt | 2 + ...d_add_column_har_tillegsst\303\270nad.sql" | 1 + .../behandling/service/GrunnlagServiceTest.kt | 67 +++++++++++++++++++ ...pons-bidrag-tilleggsst\303\270nad-bm.json" | 24 +++++++ 13 files changed, 141 insertions(+), 10 deletions(-) create mode 100644 "src/main/resources/db/migration/V2.35.0__alter_table_underholdskostnad_add_column_har_tillegsst\303\270nad.sql" create mode 100644 "src/test/resources/__files/hente-grunnlagrespons-bidrag-tilleggsst\303\270nad-bm.json" diff --git a/src/main/kotlin/no/nav/bidrag/behandling/consumer/Grunnlagsobjektvelger.kt b/src/main/kotlin/no/nav/bidrag/behandling/consumer/Grunnlagsobjektvelger.kt index 77fd99216..621946f5f 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/consumer/Grunnlagsobjektvelger.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/consumer/Grunnlagsobjektvelger.kt @@ -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), @@ -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), @@ -81,6 +78,7 @@ enum class Grunnlagsobjektvelger( ; companion object { + @OptIn(ExperimentalStdlibApi::class) fun requestobjekter( behandlingstype: TypeBehandling, rolletype: Rolletype, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/VisningsnavnController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/VisningsnavnController.kt index 7e590285e..0092d17f2 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/VisningsnavnController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/VisningsnavnController.kt @@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.GetMapping @BehandlingRestControllerV1 class VisningsnavnController { + @OptIn(ExperimentalStdlibApi::class) @Suppress("unused") @GetMapping("/visningsnavn") fun hentVisningsnavn(): Map = diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Enumtyper.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Enumtyper.kt index 727b152c5..f8dd1a4c6 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Enumtyper.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Enumtyper.kt @@ -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) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt index 6d2efdea7..7014154b5 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt @@ -25,6 +25,7 @@ open class Underholdskostnad( @JoinColumn(name = "person_id", nullable = false) open val person: Person, open var harTilsynsordning: Boolean? = null, + open var harTilleggsstønad: Boolean? = null, @OneToMany( fetch = FetchType.EAGER, mappedBy = "underholdskostnad", diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/behandling/BehandlingDtoV2.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/behandling/BehandlingDtoV2.kt index 75a749513..fe6ec4049 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/behandling/BehandlingDtoV2.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/behandling/BehandlingDtoV2.kt @@ -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) @@ -506,6 +507,7 @@ enum class Grunnlagsdatatype( ; companion object { + @OptIn(ExperimentalStdlibApi::class) fun grunnlagsdatatypeobjekter( behandlingstype: TypeBehandling, rolletype: Rolletype? = null, @@ -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 } } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/BeregningService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/BeregningService.kt index b5ccb4edf..6c642331d 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/BeregningService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/BeregningService.kt @@ -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() diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt index a4b65a645..501d5af6e 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt @@ -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 + } } - } } } @@ -738,6 +740,23 @@ class GrunnlagService( } } + // Oppdatere tilleggsstønad + innhentetGrunnlag.hentGrunnlagDto?.let { grunnlag -> + if (grunnlag.tilleggsstønadBarnetilsynListe.isNotEmpty() && + feilrapporteringer.filter { Grunnlagsdatatype.BARNETILSYN == it.key }.isEmpty() + ) { + val uSøknadsbarn = + behandling.underholdskostnader.filter { + it.barnetsRolleIBehandlingen != null && + it.barnetsRolleIBehandlingen!!.personident != null + } + grunnlag.tilleggsstønadBarnetilsynListe.forEach { ts -> + val u = uSøknadsbarn.find { it.barnetsRolleIBehandlingen!!.personident!!.verdi == ts.partPersonId } + u?.harTilsynsordning = ts.harInnvilgetVedtak + } + } + } + return feilrapporteringer } @@ -1655,6 +1674,17 @@ class GrunnlagService( ) } + Grunnlagsdatatype.TILLEGGSSTØNAD -> { + lagreGrunnlagHvisEndret( + behandling, + rolleInhentetFor, + Grunnlagstype(grunnlagsdatatype, false), + innhentetGrunnlag.tilleggsstønadBarnetilsynListe + .filter { harBarnRolleIBehandling(it.partPersonId, behandling) } + .toSet(), + ) + } + Grunnlagsdatatype.UTVIDET_BARNETRYGD -> { lagreGrunnlagHvisEndret( behandling, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Sortering.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Sortering.kt index cf44287ac..23deed812 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Sortering.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Sortering.kt @@ -38,6 +38,7 @@ val årsinntekterPrioriteringsliste = Inntektsrapportering.LIGNINGSINNTEKT, ) +@OptIn(ExperimentalStdlibApi::class) val manuelleInntekter = Inntektsrapportering.entries.filter { it.kanLeggesInnManuelt } val ligningsinntekter = listOf( diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Validering.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Validering.kt index b029e1389..58a694c80 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Validering.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Validering.kt @@ -91,6 +91,7 @@ fun Behandling.validerKanOppdatere() { } } +@OptIn(ExperimentalStdlibApi::class) fun OpprettBehandlingRequest.valider() { val feilliste = mutableListOf() (stønadstype == null && engangsbeløpstype == null).ifTrue { diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/Grunnlagsmapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/Grunnlagsmapping.kt index f8870db81..72748f5ad 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/Grunnlagsmapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/Grunnlagsmapping.kt @@ -33,6 +33,8 @@ val summertYtelsetyper = Inntektsrapportering.SMÅBARNSTILLEGG, Inntektsrapportering.UTVIDET_BARNETRYGD, ) + +@OptIn(ExperimentalStdlibApi::class) val summertSkattegrunnlagstyper = Inntektsrapportering.entries .filter { !it.kanLeggesInnManuelt && it.hentesAutomatisk } diff --git "a/src/main/resources/db/migration/V2.35.0__alter_table_underholdskostnad_add_column_har_tillegsst\303\270nad.sql" "b/src/main/resources/db/migration/V2.35.0__alter_table_underholdskostnad_add_column_har_tillegsst\303\270nad.sql" new file mode 100644 index 000000000..e53d233a5 --- /dev/null +++ "b/src/main/resources/db/migration/V2.35.0__alter_table_underholdskostnad_add_column_har_tillegsst\303\270nad.sql" @@ -0,0 +1 @@ +alter table underholdskostnad add column if not exists har_tilleggsstønad boolean; diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt index 02b26d5e5..2c1846d7a 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt @@ -535,6 +535,72 @@ 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.underholdskostnader shouldHaveSize 2 + behandling.underholdskostnader.flatMap { it.barnetilsyn } shouldHaveSize 0 + + // hvis + grunnlagService.oppdatereGrunnlagForBehandling(behandling) + + // så + behandling.grunnlagSistInnhentet?.toLocalDate() shouldBe LocalDate.now() + + behandling.grunnlag.filter { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype } shouldHaveSize 1 + + val uTestbarn1 = + behandling.underholdskostnader.find { + it.person.rolle + .first() + .personident + ?.verdi == testdataBarn1.ident + } + + assertSoftly(uTestbarn1) { + shouldNotBeNull() + harTilsynsordning shouldBe true + } + + val uTestbarn2 = + behandling.underholdskostnader.find { + it.person.rolle + .first() + .personident + ?.verdi == testdataBarn2.ident + } + + assertSoftly(uTestbarn2) { + shouldNotBeNull() + harTilsynsordning shouldBe false + } + } } @Nested @@ -4871,6 +4937,7 @@ fun oppretteFeilrapporteringerForPerson( feiltype: HentGrunnlagFeiltype = HentGrunnlagFeiltype.TEKNISK_FEIL, ): List = oppretteFeilrapporteringer(setOf(personident), feiltype) +@OptIn(ExperimentalStdlibApi::class) fun oppretteFeilrapporteringer( personidenter: Set, feiltype: HentGrunnlagFeiltype = HentGrunnlagFeiltype.TEKNISK_FEIL, diff --git "a/src/test/resources/__files/hente-grunnlagrespons-bidrag-tilleggsst\303\270nad-bm.json" "b/src/test/resources/__files/hente-grunnlagrespons-bidrag-tilleggsst\303\270nad-bm.json" new file mode 100644 index 000000000..c8022f3a3 --- /dev/null +++ "b/src/test/resources/__files/hente-grunnlagrespons-bidrag-tilleggsst\303\270nad-bm.json" @@ -0,0 +1,24 @@ +{ + "ainntektListe": [], + "arbeidsforholdListe": [], + "barnetilleggListe": [], + "barnetilsynListe": [], + "hentetTidspunkt": "2024-01-16T15:10:44.003848261", + "husstandsmedlemmerOgEgneBarnListe": [], + "kontantstøtteListe": [], + "sivilstandListe": [], + "skattegrunnlagListe": [], + "småbarnstilleggListe": [], + "tilleggsstønadBarnetilsynListe": [ + { + "partPersonId": "1344124", + "harInnvilgetVedtak": true + }, + { + "partPersonId": "54545454545", + "harInnvilgetVedtak": false + } + ], + "utvidetBarnetrygdListe": [], + "feilrapporteringListe": [] +} \ No newline at end of file From f09da7c62eb9af1c7ce1eec6a24ca11f4f2277f9 Mon Sep 17 00:00:00 2001 From: s148719 Date: Thu, 5 Dec 2024 17:14:08 +0100 Subject: [PATCH 2/3] Update BehandlingServiceTest.kt --- .../no/nav/bidrag/behandling/service/BehandlingServiceTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt index c2238df73..033494a7c 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt @@ -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) } } From 57d76cc064206c4523cb20d86dc600e31f156a62 Mon Sep 17 00:00:00 2001 From: s148719 Date: Fri, 6 Dec 2024 14:08:40 +0100 Subject: [PATCH 3/3] Endre datastruktur --- .../database/datamodell/Underholdskostnad.kt | 1 - .../behandling/dto/v1/behandling/RolleDto.kt | 1 + .../behandling/service/GrunnlagService.kt | 21 +---- .../transformers/BeregningDtoMapping.kt | 28 ------- .../behandling/transformers/Dtomapper.kt | 10 ++- .../behandling/BehandlingDtoMapping.kt | 27 ++++++- ...d_add_column_har_tillegsst\303\270nad.sql" | 1 - .../behandling/service/GrunnlagServiceTest.kt | 47 +++-------- .../transformers/DtoMapperMockTest.kt | 44 ++++++++++ .../behandling/transformers/DtoMapperTest.kt | 81 ++++++++++++++++++- ...pons-bidrag-tilleggsst\303\270nad-bm.json" | 6 +- 11 files changed, 172 insertions(+), 95 deletions(-) delete mode 100644 "src/main/resources/db/migration/V2.35.0__alter_table_underholdskostnad_add_column_har_tillegsst\303\270nad.sql" diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt index 7014154b5..6d2efdea7 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt @@ -25,7 +25,6 @@ open class Underholdskostnad( @JoinColumn(name = "person_id", nullable = false) open val person: Person, open var harTilsynsordning: Boolean? = null, - open var harTilleggsstønad: Boolean? = null, @OneToMany( fetch = FetchType.EAGER, mappedBy = "underholdskostnad", diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/v1/behandling/RolleDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/v1/behandling/RolleDto.kt index 487463906..e020e53ac 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/v1/behandling/RolleDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/v1/behandling/RolleDto.kt @@ -9,4 +9,5 @@ data class RolleDto( val ident: String? = null, val navn: String? = null, val fødselsdato: LocalDate? = null, + val harInnvilgetTilleggsstønad: Boolean? = null, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt index 501d5af6e..e9e4c0419 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt @@ -740,23 +740,6 @@ class GrunnlagService( } } - // Oppdatere tilleggsstønad - innhentetGrunnlag.hentGrunnlagDto?.let { grunnlag -> - if (grunnlag.tilleggsstønadBarnetilsynListe.isNotEmpty() && - feilrapporteringer.filter { Grunnlagsdatatype.BARNETILSYN == it.key }.isEmpty() - ) { - val uSøknadsbarn = - behandling.underholdskostnader.filter { - it.barnetsRolleIBehandlingen != null && - it.barnetsRolleIBehandlingen!!.personident != null - } - grunnlag.tilleggsstønadBarnetilsynListe.forEach { ts -> - val u = uSøknadsbarn.find { it.barnetsRolleIBehandlingen!!.personident!!.verdi == ts.partPersonId } - u?.harTilsynsordning = ts.harInnvilgetVedtak - } - } - } - return feilrapporteringer } @@ -1679,9 +1662,7 @@ class GrunnlagService( behandling, rolleInhentetFor, Grunnlagstype(grunnlagsdatatype, false), - innhentetGrunnlag.tilleggsstønadBarnetilsynListe - .filter { harBarnRolleIBehandling(it.partPersonId, behandling) } - .toSet(), + innhentetGrunnlag.tilleggsstønadBarnetilsynListe.toSet(), ) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt index 222345ada..df7a63758 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt @@ -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 @@ -454,33 +453,6 @@ fun List.tilUnderholdskostnadDto() = ) }.toSet() -fun List.finneFaktiskTilsynsutgiftsperioder(): List = - this - .filtrerBasertPåEgenReferanse( - Grunnlagstype.FAKTISK_UTGIFT_PERIODE, - ).innholdTilObjekt() - .sortedBy { - it.periode.fom - } - -fun List.finneTilleggsstønadsperioder(): List = - this - .filtrerBasertPåEgenReferanse( - Grunnlagstype.TILLEGGSSTØNAD_PERIODE, - ).innholdTilObjekt() - .sortedBy { - it.periode.fom - } - -fun List.finneBarnetilleggsperioder(): List = - this - .filtrerBasertPåEgenReferanse( - Grunnlagstype.BARNETILLEGG_PERIODE, - ).innholdTilObjekt() - .sortedBy { - it.periode.fom - } - fun List.finnAlleDelberegningUnderholdskostnad(): List = this .filtrerBasertPåEgenReferanse( diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt index f94e1aea8..58c0b381e 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt @@ -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 = @@ -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 && diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/BehandlingDtoMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/BehandlingDtoMapping.kt index 0af2e1183..9e24789b0 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/BehandlingDtoMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/BehandlingDtoMapping.kt @@ -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 @@ -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>() + ?.first() + ?.harInnvilgetVedtak + } + return null +} fun Map.tilGrunnlagsinnhentingsfeil(behandling: Behandling) = this diff --git "a/src/main/resources/db/migration/V2.35.0__alter_table_underholdskostnad_add_column_har_tillegsst\303\270nad.sql" "b/src/main/resources/db/migration/V2.35.0__alter_table_underholdskostnad_add_column_har_tillegsst\303\270nad.sql" deleted file mode 100644 index e53d233a5..000000000 --- "a/src/main/resources/db/migration/V2.35.0__alter_table_underholdskostnad_add_column_har_tillegsst\303\270nad.sql" +++ /dev/null @@ -1 +0,0 @@ -alter table underholdskostnad add column if not exists har_tilleggsstønad boolean; diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt index 2c1846d7a..64c853f83 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt @@ -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 @@ -564,8 +562,9 @@ class GrunnlagServiceTest : TestContainerRunner() { } } - behandling.underholdskostnader shouldHaveSize 2 - behandling.underholdskostnader.flatMap { it.barnetilsyn } shouldHaveSize 0 + behandling.grunnlag + .filter { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype } + .filter { Grunnlagsdatatype.TILLEGGSSTØNAD == it.type && !it.erBearbeidet } shouldHaveSize 0 // hvis grunnlagService.oppdatereGrunnlagForBehandling(behandling) @@ -573,33 +572,9 @@ class GrunnlagServiceTest : TestContainerRunner() { // så behandling.grunnlagSistInnhentet?.toLocalDate() shouldBe LocalDate.now() - behandling.grunnlag.filter { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype } shouldHaveSize 1 - - val uTestbarn1 = - behandling.underholdskostnader.find { - it.person.rolle - .first() - .personident - ?.verdi == testdataBarn1.ident - } - - assertSoftly(uTestbarn1) { - shouldNotBeNull() - harTilsynsordning shouldBe true - } - - val uTestbarn2 = - behandling.underholdskostnader.find { - it.person.rolle - .first() - .personident - ?.verdi == testdataBarn2.ident - } - - assertSoftly(uTestbarn2) { - shouldNotBeNull() - harTilsynsordning shouldBe false - } + behandling.grunnlag + .filter { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype } + .filter { Grunnlagsdatatype.TILLEGGSSTØNAD == it.type && !it.erBearbeidet } shouldHaveSize 1 } } @@ -1238,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 = @@ -4413,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 @@ -4560,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 diff --git a/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperMockTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperMockTest.kt index fa0fce3b4..012d8c2b7 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperMockTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperMockTest.kt @@ -5,11 +5,14 @@ import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.nulls.shouldBeNull import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe +import io.kotest.matchers.shouldNotBe import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.junit5.MockKExtension +import no.nav.bidrag.behandling.database.datamodell.Grunnlag import no.nav.bidrag.behandling.database.datamodell.Inntekt import no.nav.bidrag.behandling.database.datamodell.RolleManueltOverstyrtGebyr +import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.service.BeregningEvnevurderingService import no.nav.bidrag.behandling.service.PersonService import no.nav.bidrag.behandling.service.TilgangskontrollService @@ -18,6 +21,7 @@ import no.nav.bidrag.behandling.transformers.beregning.ValiderBeregning 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.opprettGyldigBehandlingForBeregningOgVedtak +import no.nav.bidrag.behandling.utils.testdata.oppretteTestbehandling import no.nav.bidrag.beregn.barnebidrag.BeregnBarnebidragApi import no.nav.bidrag.beregn.barnebidrag.BeregnGebyrApi import no.nav.bidrag.beregn.barnebidrag.BeregnSamværsklasseApi @@ -28,11 +32,15 @@ import no.nav.bidrag.domene.enums.beregning.Resultatkode import no.nav.bidrag.domene.enums.diverse.Kilde import no.nav.bidrag.domene.enums.inntekt.Inntektsrapportering import no.nav.bidrag.domene.enums.rolle.Rolletype +import no.nav.bidrag.transport.behandling.grunnlag.response.TilleggsstønadGrunnlagDto +import no.nav.bidrag.transport.felles.commonObjectmapper +import org.assertj.core.error.ShouldNotBeNull import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import stubPersonConsumer import java.math.BigDecimal +import java.time.LocalDateTime @ExtendWith(MockKExtension::class) class DtoMapperMockTest { @@ -277,4 +285,40 @@ class DtoMapperMockTest { it.begrunnelse shouldBe null } } + + @Test + fun `skal legge til informasjon om tilleggsstønad`() { + // gitt + val behandling = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + val innhentetForRolle = behandling.bidragsmottaker!! + val tilleggsstønadsgrunnlag = TilleggsstønadGrunnlagDto(innhentetForRolle.personident!!.verdi, true) + val innhentetGrunnlag = + Grunnlag( + behandling, + Grunnlagsdatatype.TILLEGGSSTØNAD, + false, + commonObjectmapper.writeValueAsString(setOf(tilleggsstønadsgrunnlag)), + LocalDateTime.now(), + rolle = innhentetForRolle, + ) + behandling.grunnlag.add(innhentetGrunnlag) + + every { validerBehandlingService.kanBehandlesINyLøsning(any()) } returns null + + // hvis + val dto = dtomapper.tilDto(behandling) + + // så + assertSoftly(dto.roller.find { Rolletype.BIDRAGSMOTTAKER == it.rolletype }) { + ShouldNotBeNull.shouldNotBeNull() + it!!.harInnvilgetTilleggsstønad shouldNotBe null + it.harInnvilgetTilleggsstønad shouldBe true + } + } } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt index c7389542a..6bde35b38 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt @@ -27,7 +27,10 @@ import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.VedtakGrun import no.nav.bidrag.behandling.utils.testdata.TestdataManager import no.nav.bidrag.behandling.utils.testdata.oppretteArbeidsforhold import no.nav.bidrag.behandling.utils.testdata.oppretteTestbehandling +import no.nav.bidrag.behandling.utils.testdata.testdataBM +import no.nav.bidrag.behandling.utils.testdata.testdataBP import no.nav.bidrag.behandling.utils.testdata.testdataBarn1 +import no.nav.bidrag.behandling.utils.testdata.testdataBarn2 import no.nav.bidrag.beregn.barnebidrag.BeregnBarnebidragApi import no.nav.bidrag.beregn.barnebidrag.BeregnGebyrApi import no.nav.bidrag.beregn.barnebidrag.BeregnSamværsklasseApi @@ -45,8 +48,10 @@ import no.nav.bidrag.domene.ident.Personident import no.nav.bidrag.sivilstand.dto.Sivilstand import no.nav.bidrag.transport.behandling.felles.grunnlag.NotatGrunnlag import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilsynGrunnlagDto +import no.nav.bidrag.transport.behandling.grunnlag.response.TilleggsstønadGrunnlagDto import no.nav.bidrag.transport.felles.commonObjectmapper import no.nav.bidrag.transport.person.PersonDto +import org.assertj.core.error.ShouldNotBeNull.shouldNotBeNull import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Nested @@ -301,7 +306,8 @@ class DtoMapperTest : TestContainerRunner() { ikkeAktivereGrunnlagsdata.stønadTilBarnetilsyn.stønadTilBarnetilsyn.shouldHaveSize(1) - val nyttBarnetilsyn = ikkeAktivereGrunnlagsdata.stønadTilBarnetilsyn.stønadTilBarnetilsyn[Personident(testdataBarn1.ident)] + val nyttBarnetilsyn = + ikkeAktivereGrunnlagsdata.stønadTilBarnetilsyn.stønadTilBarnetilsyn[Personident(testdataBarn1.ident)] nyttBarnetilsyn?.shouldHaveSize(3) assertSoftly(nyttBarnetilsyn!!.elementAt(0)) { @@ -474,6 +480,7 @@ class DtoMapperTest : TestContainerRunner() { @Test fun `skal mappe ident, navn, og begrunnelse til annet barn`() { + // gitt val behandling = oppretteTestbehandling( setteDatabaseider = true, @@ -514,5 +521,77 @@ class DtoMapperTest : TestContainerRunner() { dto.gjelderBarn.ident.shouldBeNull() dto.begrunnelse shouldBe "Underholdskostnad for Bms andre barn" } + + @Test + fun `skal legge til informasjon om tilleggsstønad`() { + // gitt + val behandling = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + val innhentetForRolle = behandling.bidragsmottaker!! + val tilleggsstønadsgrunnlag = TilleggsstønadGrunnlagDto(innhentetForRolle.personident!!.verdi, true) + val innhentetGrunnlag = + Grunnlag( + behandling, + Grunnlagsdatatype.TILLEGGSSTØNAD, + false, + commonObjectmapper.writeValueAsString(setOf(tilleggsstønadsgrunnlag)), + LocalDateTime.now(), + rolle = innhentetForRolle, + ) + behandling.grunnlag.add(innhentetGrunnlag) + + every { validerBehandlingService.kanBehandlesINyLøsning(any()) } returns null + + every { personService.hentPerson(innhentetForRolle.personident!!.verdi) } returns + PersonDto( + ident = innhentetForRolle.personident!!, + navn = testdataBM.navn, + fødselsdato = testdataBM.fødselsdato, + ) + + every { personService.hentNyesteIdent(testdataBP.ident) } returns Personident(testdataBP.ident) + + every { personService.hentPerson(innhentetForRolle.personident!!.verdi) } returns + PersonDto( + ident = innhentetForRolle.personident!!, + navn = testdataBP.navn, + fødselsdato = testdataBP.fødselsdato, + ) + + every { personService.hentNyesteIdent(testdataBM.ident) } returns Personident(testdataBM.ident) + + every { personService.hentPerson(testdataBarn1.ident) } returns + PersonDto( + ident = Personident(testdataBarn1.ident), + navn = testdataBarn1.navn, + fødselsdato = testdataBarn1.fødselsdato, + ) + + every { personService.hentNyesteIdent(testdataBarn1.ident) } returns Personident(testdataBarn1.ident) + + every { personService.hentPerson(testdataBarn2.ident) } returns + PersonDto( + ident = Personident(testdataBarn1.ident), + navn = testdataBarn1.navn, + fødselsdato = testdataBarn1.fødselsdato, + ) + + every { personService.hentNyesteIdent(testdataBarn2.ident) } returns Personident(testdataBarn2.ident) + + // hvis + val dto = dtomapper.tilDto(behandling) + + // så + assertSoftly(dto.roller.find { Rolletype.BIDRAGSMOTTAKER == it.rolletype }) { + shouldNotBeNull() + it!!.harInnvilgetTilleggsstønad shouldNotBe null + it.harInnvilgetTilleggsstønad shouldBe true + } + } } } diff --git "a/src/test/resources/__files/hente-grunnlagrespons-bidrag-tilleggsst\303\270nad-bm.json" "b/src/test/resources/__files/hente-grunnlagrespons-bidrag-tilleggsst\303\270nad-bm.json" index c8022f3a3..00e1dfc37 100644 --- "a/src/test/resources/__files/hente-grunnlagrespons-bidrag-tilleggsst\303\270nad-bm.json" +++ "b/src/test/resources/__files/hente-grunnlagrespons-bidrag-tilleggsst\303\270nad-bm.json" @@ -11,12 +11,8 @@ "småbarnstilleggListe": [], "tilleggsstønadBarnetilsynListe": [ { - "partPersonId": "1344124", + "partPersonId": "313213213", "harInnvilgetVedtak": true - }, - { - "partPersonId": "54545454545", - "harInnvilgetVedtak": false } ], "utvidetBarnetrygdListe": [],