From 4e5510608cce9d541a04f483a4727a3245da910e Mon Sep 17 00:00:00 2001 From: s148719 Date: Wed, 20 Nov 2024 08:55:15 +0100 Subject: [PATCH 01/21] Oppgradere til nyeste BeregnBarnebidragApi. Fikse barn medIBehandlingen. --- initEnv.sh | 4 ++-- pom.xml | 4 ++-- .../bidrag/behandling/transformers/Dtomapper.kt | 17 +++++------------ 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/initEnv.sh b/initEnv.sh index 7a0213696..b23e4d49e 100755 --- a/initEnv.sh +++ b/initEnv.sh @@ -1,7 +1,7 @@ #!/bin/bash kubectx dev-gcp -deployment="deployment/bidrag-behandling" -[ "$1" == "q1" ] && deployment="deployment/bidrag-behandling-feature" +deployment="deployment/bidrag-behandling-q2" +[ "$1" == "q2" ] && deployment="deployment/bidrag-behandling" echo "Henter miljøparametere fra deployment: $deployment" kubectl exec --tty $deployment printenv | grep -E 'AZURE_|_URL|SCOPE|UNLEASH' | grep -v -e 'BIDRAG_FORSENDELSE_URL' -e 'BIDRAG_TILGANGSKONTROLL_URL' -e 'BIDRAG_GRUNNLAG_URL' -e 'BIDRAG_VEDTAK_SCOPE' -e 'BIDRAG_VEDTAK_URL' -e 'BIDRAG_STONAD_URL' > src/test/resources/application-lokal-nais-secrets.properties \ No newline at end of file diff --git a/pom.xml b/pom.xml index 860423f0b..03977a778 100644 --- a/pom.xml +++ b/pom.xml @@ -16,8 +16,8 @@ 21 2.0.21 - 2024.11.19.085337 - 2024.11.19.164128 + 2024.11.19.144735 + 2024.11.20.083200 2.3.232 8.0 3.2.0 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 9c11ffc21..cdabe445d 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt @@ -6,6 +6,7 @@ import no.nav.bidrag.behandling.database.datamodell.FaktiskTilsynsutgift import no.nav.bidrag.behandling.database.datamodell.Grunnlag import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem import no.nav.bidrag.behandling.database.datamodell.Person +import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.database.datamodell.Tilleggsstønad import no.nav.bidrag.behandling.database.datamodell.Underholdskostnad import no.nav.bidrag.behandling.database.datamodell.Utgift @@ -166,7 +167,7 @@ class Dtomapper( return UnderholdDto( id = this.id!!, harTilsynsordning = this.harTilsynsordning, - gjelderBarn = this.person.tilPersoninfoDto(this.behandling), + gjelderBarn = this.person.tilPersoninfoDto(rolleSøknadsbarn), faktiskTilsynsutgift = this.faktiskeTilsynsutgifter.tilFaktiskeTilsynsutgiftDtos(), stønadTilBarnetilsyn = rolleSøknadsbarn?.let { this.barnetilsyn.tilStønadTilBarnetilsynDtos() } @@ -195,15 +196,7 @@ class Dtomapper( .tilUnderholdskostnadDto() } - private fun Person.tilPersoninfoDto(behandling: Behandling): PersoninfoDto { - val rolle = - behandling.roller.find { r -> - this.rolle - .map { it.id } - .toSet() - .contains(r.id) - } - + private fun Person.tilPersoninfoDto(rolle: Rolle?): PersoninfoDto { val personinfo = this.ident?.let { vedtakGrunnlagMapper.mapper.personService.hentPerson(it) } ?: rolle?.ident?.let { vedtakGrunnlagMapper.mapper.personService.hentPerson(it) } @@ -318,7 +311,7 @@ class Dtomapper( id = this.id!!, periode = DatoperiodeDto(this.fom, this.tom), dagsats = this.dagsats, - total = beregnBarnebidragApi.beregnMånedsbeløpTilleggsstønad(this.dagsats) ?: BigDecimal.ZERO, + total = beregnBarnebidragApi.beregnMånedsbeløpTilleggsstønad(this.dagsats), ) fun Set.tilTilleggsstønadDtos() = this.map { it.tilDto() }.toSet() @@ -333,7 +326,7 @@ class Dtomapper( total = beregnBarnebidragApi.beregnMånedsbeløpFaktiskeUtgifter( faktiskUtgift = this.tilsynsutgift, - kostpenger = this.kostpenger, + kostpenger = this.kostpenger ?: BigDecimal.ZERO, ) ?: BigDecimal.ZERO, ) From 701294d22d70a2a935be1f81b8bf082808d1e106 Mon Sep 17 00:00:00 2001 From: s148719 Date: Wed, 20 Nov 2024 11:53:47 +0100 Subject: [PATCH 02/21] WIP - begrunnelse --- .../kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt index 98e0a7bee..1cb93ffa0 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt @@ -259,6 +259,7 @@ class UnderholdService( behandling: Behandling, underholdskostnad: Underholdskostnad, ): UnderholdDto? { + //TODO: Slette begrunnelse til andre barn behandling.underholdskostnader.remove(underholdskostnad) personRepository.deleteById(underholdskostnad.person.id!!) underholdskostnadRepository.deleteById(underholdskostnad.id!!) From 1387e906b0b6d36c5445c273d3a682f617abd851 Mon Sep 17 00:00:00 2001 From: s148719 Date: Wed, 20 Nov 2024 14:00:16 +0100 Subject: [PATCH 03/21] Fikse oppdatering av underhold --- .../bidrag/behandling/service/NotatService.kt | 15 ++++++ .../behandling/service/UnderholdService.kt | 20 +++++-- .../service/UnderholdServiceTest.kt | 52 +++++++++++++++++++ 3 files changed, 82 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt index a34d21738..ea50373db 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt @@ -38,6 +38,21 @@ class NotatService { } } + @Transactional + fun sletteNotat( + behandling: Behandling, + notattype: Notattype, + rolle: Rolle, + ) { + val notat = behandling.notater.find { it.rolle == rolle && it.type == notattype } + notat?.let { + log.info { "Sletter notat av type $notattype for rolle med id ${rolle.id} i behandling ${behandling.id}" } + behandling.notater.remove(notat) + } ?: { + log.info { "Fant ingen notat av type $notattype for rolle med id ${rolle.id} i behandling ${behandling.id}" } + } + } + companion object { fun henteNotatinnhold( behandling: Behandling, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt index 1cb93ffa0..4ecb967d6 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt @@ -66,14 +66,21 @@ class UnderholdService( ): Underholdskostnad { gjelderBarn.validere() gjelderBarn.personident?.let { personidentBarn -> - val rolle = behandling.søknadsbarn.find { it.ident == personidentBarn.verdi } + val rolleSøknadsbarn = behandling.søknadsbarn.find { it.ident == personidentBarn.verdi } val eksisterendePerson = personRepository.findFirstByIdent(personidentBarn.verdi) if (eksisterendePerson == null) { - val roller = rolle?.let { mutableSetOf(it) } ?: mutableSetOf() - val person = personRepository.save(Person(ident = personidentBarn.verdi, rolle = roller)) + val person = + personRepository.save( + Person( + ident = personidentBarn.verdi, + rolle = rolleSøknadsbarn?.let { mutableSetOf(it) } ?: mutableSetOf(), + ), + ) person.rolle.forEach { it.person = person } return lagreUnderholdskostnad(behandling, person) } else { + rolleSøknadsbarn?.let { eksisterendePerson.rolle.add(it) } + rolleSøknadsbarn?.person = eksisterendePerson return lagreUnderholdskostnad(behandling, eksisterendePerson) } } ?: run { @@ -259,9 +266,12 @@ class UnderholdService( behandling: Behandling, underholdskostnad: Underholdskostnad, ): UnderholdDto? { - //TODO: Slette begrunnelse til andre barn behandling.underholdskostnader.remove(underholdskostnad) - personRepository.deleteById(underholdskostnad.person.id!!) + underholdskostnad.person.underholdskostnad.remove(underholdskostnad) + if (underholdskostnad.person.underholdskostnad.isEmpty() && underholdskostnad.person.rolle.isEmpty()) { + personRepository.deleteById(underholdskostnad.person.id!!) + notatService.sletteNotat(behandling, Notattype.UNDERHOLDSKOSTNAD, behandling.bidragsmottaker!!) + } underholdskostnadRepository.deleteById(underholdskostnad.id!!) return null } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt index c9f3cf26c..4d17dda59 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt @@ -5,6 +5,7 @@ import io.kotest.assertions.assertSoftly import io.kotest.matchers.collections.shouldBeEmpty import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.collections.shouldNotBeEmpty +import io.kotest.matchers.nulls.shouldBeNull import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe import io.mockk.every @@ -42,6 +43,7 @@ import no.nav.bidrag.domene.enums.barnetilsyn.Skolealder import no.nav.bidrag.domene.enums.barnetilsyn.Tilsynstype import no.nav.bidrag.domene.enums.behandling.TypeBehandling import no.nav.bidrag.domene.enums.diverse.Kilde +import no.nav.bidrag.transport.behandling.felles.grunnlag.NotatGrunnlag import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Nested @@ -171,6 +173,56 @@ class UnderholdServiceTest { u.shouldNotBeNull() u.tilleggsstønad.shouldBeEmpty() } + + @Test + open fun `skal slette andre barn`() { + // gitt + val universalid = 1L + val behandling = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + val barn = Person(id = 10, navn = "Generalen", fødselsdato = LocalDate.now()) + val underholdskostnadTilBarnSomSlettes = Underholdskostnad(id = 100, behandling = behandling, person = barn) + behandling.underholdskostnader.add(underholdskostnadTilBarnSomSlettes) + + notatService.oppdatereNotat( + behandling, + NotatGrunnlag.NotatType.UNDERHOLDSKOSTNAD, + "Begrunnelse for andre barn", + behandling.bidragsmottaker!!, + ) + + val request = SletteUnderholdselement(idUnderhold = 100, idElement = 10, Underholdselement.BARN) + + every { underholdskostnadRepository.deleteById(underholdskostnadTilBarnSomSlettes.id!!) } returns Unit + every { personRepository.deleteById(barn.id!!) } returns Unit + + assertSoftly(behandling.underholdskostnader.find { it.id == underholdskostnadTilBarnSomSlettes.id!! }) { + shouldNotBeNull() + person.id shouldBe barn.id + } + + assertSoftly(behandling.notater.find { it.rolle == behandling.bidragsmottaker }) { + shouldNotBeNull() + innhold shouldBe "Begrunnelse for andre barn" + } + + // hvis + underholdService.sletteFraUnderhold(behandling, request) + + // så + val u = behandling.underholdskostnader.find { it.id == universalid } + u.shouldNotBeNull() + u.tilleggsstønad.shouldBeEmpty() + + behandling.underholdskostnader.find { it.id == underholdskostnadTilBarnSomSlettes.id!! }.shouldBeNull() + + behandling.notater.find { it.rolle == behandling.bidragsmottaker }.shouldBeNull() + } } @Nested From eec5b8317fb08518369c8eeef43522d2a7df03d9 Mon Sep 17 00:00:00 2001 From: s148719 Date: Wed, 20 Nov 2024 14:17:45 +0100 Subject: [PATCH 04/21] Fikse sletting av notat i fbm sletting av andre barn --- src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt index ea50373db..c7cb7f86d 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt @@ -47,6 +47,7 @@ class NotatService { val notat = behandling.notater.find { it.rolle == rolle && it.type == notattype } notat?.let { log.info { "Sletter notat av type $notattype for rolle med id ${rolle.id} i behandling ${behandling.id}" } + rolle.notat.remove(notat) behandling.notater.remove(notat) } ?: { log.info { "Fant ingen notat av type $notattype for rolle med id ${rolle.id} i behandling ${behandling.id}" } From 9a47b4a3f641847a64d14b41144a39039c5e8691 Mon Sep 17 00:00:00 2001 From: s148719 Date: Thu, 21 Nov 2024 09:57:43 +0100 Subject: [PATCH 05/21] Endre API for oppdatering av begrunnelse og tilsynsordning i underhold --- .../controller/v2/UnderholdController.kt | 58 +++++++++++++++++ .../behandling/dto/v2/underhold/Underhold.kt | 6 ++ .../behandling/service/UnderholdService.kt | 63 ++++++++++++++++--- 3 files changed, 117 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/UnderholdController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/UnderholdController.kt index 7ffa44278..4e71e1ac6 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/UnderholdController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/UnderholdController.kt @@ -9,6 +9,7 @@ import jakarta.validation.Valid import no.nav.bidrag.behandling.behandlingNotFoundException import no.nav.bidrag.behandling.database.repository.BehandlingRepository import no.nav.bidrag.behandling.dto.v2.underhold.BarnDto +import no.nav.bidrag.behandling.dto.v2.underhold.OppdatereBegrunnelseRequest import no.nav.bidrag.behandling.dto.v2.underhold.OppdatereFaktiskTilsynsutgiftRequest import no.nav.bidrag.behandling.dto.v2.underhold.OppdatereTilleggsstønadRequest import no.nav.bidrag.behandling.dto.v2.underhold.OppdatereUnderholdRequest @@ -27,6 +28,7 @@ import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.PutMapping import org.springframework.web.bind.annotation.RequestBody +import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.ResponseStatus private val log = KotlinLogging.logger {} @@ -179,6 +181,7 @@ class UnderholdController( return underholdService.oppdatereTilleggsstønad(underholdskostnad, request) } + @Deprecated("Erstattes av oppdatereBegrunnelse og angiTilsynsordning") @ResponseStatus(HttpStatus.CREATED) @PutMapping("/behandling/{behandlingsid}/underhold/{underholdsid}/oppdatere") @Operation( @@ -208,6 +211,61 @@ class UnderholdController( return underholdService.oppdatereUnderhold(underholdskostnad, request) } + @ResponseStatus(HttpStatus.CREATED) + @PutMapping("/behandling/{behandlingsid}/underhold/begrunnelse") + @Operation( + description = "Oppdatere begrunnelse for underhold relatert til søknadsbarn eller andre barn.", + security = [SecurityRequirement(name = "bearer-key")], + ) + @ApiResponses( + value = [ + ApiResponse( + responseCode = "201", + description = "Forespørsel oppdatert uten feil", + ), + ], + ) + fun oppdatereBegrunnelse( + @PathVariable behandlingsid: Long, + @RequestBody(required = true) request: OppdatereBegrunnelseRequest, + ) { + val behandling = + behandlingRepository + .findBehandlingById(behandlingsid) + .orElseThrow { behandlingNotFoundException(behandlingsid) } + + underholdService.oppdatereBegrunnelse(behandling, request) + } + + @ResponseStatus(HttpStatus.CREATED) + @PutMapping("/behandling/{behandlingsid}/underhold/{underholdsid}/tilsynsordning") + @Operation( + description = "Angir om søknadsbarn har tilsynsordning.", + security = [SecurityRequirement(name = "bearer-key")], + ) + @ApiResponses( + value = [ + ApiResponse( + responseCode = "201", + description = "Forespørsel oppdatert uten feil", + ), + ], + ) + fun oppdatereTilsynsordning( + @PathVariable behandlingsid: Long, + @PathVariable underholdsid: Long, + @RequestParam(required = true) harTilsynsordning: Boolean, + ) { + val behandling = + behandlingRepository + .findBehandlingById(behandlingsid) + .orElseThrow { behandlingNotFoundException(behandlingsid) } + + val underholdskostnad = henteOgValidereUnderholdskostnad(behandling, underholdsid) + + underholdService.oppdatereTilsynsordning(underholdskostnad, harTilsynsordning) + } + @ResponseStatus(HttpStatus.CREATED) @PostMapping("/behandling/{behandlingsid}/underhold/opprette") @Operation( diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt index 2f6d1a597..2d0d4ff49 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt @@ -57,6 +57,12 @@ data class OppdatereUnderholdRequest( val begrunnelse: String? = null, ) +data class OppdatereBegrunnelseRequest( + @Schema(description = "Id til underhold begrunnelsen gjelder for hvis søknadsbarn. Null for andre barn.") + val underholdsid: Long? = null, + val begrunnelse: String, +) + data class ValideringsfeilUnderhold( @JsonIgnore val underholdskostnad: Underholdskostnad?, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt index 4ecb967d6..7088a5034 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt @@ -12,6 +12,7 @@ import no.nav.bidrag.behandling.database.repository.PersonRepository import no.nav.bidrag.behandling.database.repository.TilleggsstønadRepository import no.nav.bidrag.behandling.database.repository.UnderholdskostnadRepository import no.nav.bidrag.behandling.dto.v2.underhold.BarnDto +import no.nav.bidrag.behandling.dto.v2.underhold.OppdatereBegrunnelseRequest import no.nav.bidrag.behandling.dto.v2.underhold.OppdatereFaktiskTilsynsutgiftRequest import no.nav.bidrag.behandling.dto.v2.underhold.OppdatereTilleggsstønadRequest import no.nav.bidrag.behandling.dto.v2.underhold.OppdatereUnderholdRequest @@ -21,13 +22,16 @@ import no.nav.bidrag.behandling.dto.v2.underhold.StønadTilBarnetilsynDto import no.nav.bidrag.behandling.dto.v2.underhold.UnderholdDto import no.nav.bidrag.behandling.dto.v2.underhold.Underholdselement import no.nav.bidrag.behandling.transformers.Dtomapper +import no.nav.bidrag.behandling.transformers.underhold.henteOgValidereUnderholdskostnad import no.nav.bidrag.behandling.transformers.underhold.tilStønadTilBarnetilsynDto import no.nav.bidrag.behandling.transformers.underhold.validere import no.nav.bidrag.behandling.transformers.underhold.validerePerioder import no.nav.bidrag.domene.enums.barnetilsyn.Skolealder import no.nav.bidrag.domene.enums.diverse.Kilde +import org.springframework.http.HttpStatus import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional +import org.springframework.web.client.HttpClientErrorException import no.nav.bidrag.transport.behandling.felles.grunnlag.NotatGrunnlag.NotatType as Notattype @Service @@ -40,6 +44,45 @@ class UnderholdService( private val notatService: NotatService, private val dtomapper: Dtomapper, ) { + fun oppdatereBegrunnelse( + behandling: Behandling, + request: OppdatereBegrunnelseRequest, + ) { + val rolleSøknadsbarn = + request.underholdsid?.let { + henteOgValidereUnderholdskostnad(behandling, it).person.rolle.firstOrNull() + } + + notatService.oppdatereNotat( + behandling, + Notattype.UNDERHOLDSKOSTNAD, + request.begrunnelse, + rolleSøknadsbarn ?: behandling.bidragsmottaker!!, + ) + } + + @Transactional + fun oppdatereTilsynsordning( + underholdskostnad: Underholdskostnad, + harTilsynsordning: Boolean, + ) { + if (!harTilsynsordning && + ( + underholdskostnad.barnetilsyn.isNotEmpty() || + underholdskostnad.tilleggsstønad.isNotEmpty() || + underholdskostnad.faktiskeTilsynsutgifter.isNotEmpty() + ) + ) { + throw HttpClientErrorException( + HttpStatus.BAD_REQUEST, + "Kan ikke sette harTilsynsordning til usann så lenge barnet er registrert med stønad til barnetilstyn, tilleggsstønad, eller faktiske tilsynsutgift", + ) + } + + underholdskostnad.harTilsynsordning = harTilsynsordning + } + + @Deprecated("Erstattes av oppdatereBegrunnelse og oppdatereTilsynsordning") @Transactional fun oppdatereUnderhold( underholdskostnad: Underholdskostnad, @@ -119,11 +162,11 @@ class UnderholdService( fom = request.periode.fom, tom = request.periode.tom, under_skolealder = - when (request.skolealder) { - Skolealder.UNDER -> true - Skolealder.OVER -> false - else -> null - }, + when (request.skolealder) { + Skolealder.UNDER -> true + Skolealder.OVER -> false + else -> null + }, omfang = request.tilsynstype, kilde = Kilde.MANUELL, underholdskostnad = underholdskostnad, @@ -136,7 +179,7 @@ class UnderholdService( return OppdatereUnderholdResponse( stønadTilBarnetilsyn = oppdatertBarnetilsyn.tilStønadTilBarnetilsynDto(), underholdskostnad = - dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(underholdskostnad.behandling), + dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(underholdskostnad.behandling), valideringsfeil = underholdskostnad.barnetilsyn.validerePerioder(), ) } @@ -176,9 +219,9 @@ class UnderholdService( return OppdatereUnderholdResponse( faktiskTilsynsutgift = dtomapper.tilFaktiskTilsynsutgiftDto(oppdatertFaktiskTilsynsutgift), underholdskostnad = - dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn( - underholdskostnad.behandling, - ), + dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn( + underholdskostnad.behandling, + ), valideringsfeil = underholdskostnad.barnetilsyn.validerePerioder(), ) } @@ -215,7 +258,7 @@ class UnderholdService( return OppdatereUnderholdResponse( tilleggsstønad = dtomapper.tilTilleggsstønadDto(oppdatertTilleggsstønad), underholdskostnad = - dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(underholdskostnad.behandling), + dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(underholdskostnad.behandling), valideringsfeil = underholdskostnad.barnetilsyn.validerePerioder(), ) } From 51dff2dc482b412e363441ae274cc7e298fa33dc Mon Sep 17 00:00:00 2001 From: s148719 Date: Fri, 22 Nov 2024 08:57:11 +0100 Subject: [PATCH 06/21] WIP - grunnlag barnetilsyn --- .../behandling/service/GrunnlagService.kt | 12 +- .../behandling/service/GrunnlagServiceTest.kt | 982 ++++++++++-------- ...grunnlagrespons-bidrag-barnetilsyn-bm.json | 32 + 3 files changed, 561 insertions(+), 465 deletions(-) create mode 100644 src/test/resources/__files/hente-grunnlagrespons-bidrag-barnetilsyn-bm.json 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 12df226a5..22d096659 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt @@ -1562,9 +1562,15 @@ class GrunnlagService( } Grunnlagsdatatype.BARNETILSYN -> { - if (innhentetGrunnlag.barnetilsynListe.isNotEmpty()) { - log.info { "Barnetilsyn er ikke relevant for forskudd." } - } + lagreGrunnlagHvisEndret( + behandling, + rolleInhentetFor, + Grunnlagstype(grunnlagsdatatype, false), + innhentetGrunnlag.barnetilsynListe + .filter { + harBarnRolleIBehandling(it.barnPersonId, behandling) + }.toSet(), + ) } Grunnlagsdatatype.KONTANTSTØTTE -> { 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 b6846111d..7a045dbd6 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt @@ -4,6 +4,7 @@ import com.ninjasquad.springmockk.MockkBean import io.kotest.assertions.assertSoftly import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.collections.shouldNotBeEmpty +import io.kotest.matchers.nulls.shouldBeNull import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe @@ -45,6 +46,8 @@ import no.nav.bidrag.behandling.utils.testdata.tilTransformerInntekterRequest import no.nav.bidrag.behandling.utils.testdata.voksenPersonIBpsHusstand import no.nav.bidrag.boforhold.BoforholdApi import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 +import no.nav.bidrag.domene.enums.barnetilsyn.Skolealder +import no.nav.bidrag.domene.enums.barnetilsyn.Tilsynstype import no.nav.bidrag.domene.enums.behandling.TypeBehandling import no.nav.bidrag.domene.enums.diverse.Kilde import no.nav.bidrag.domene.enums.grunnlag.GrunnlagRequestType @@ -232,6 +235,61 @@ class GrunnlagServiceTest : TestContainerRunner() { } } + @Test + @Transactional + open fun `skal hente og lagre barnetilsyn`() { + // 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-barnetilsyn-bm.json", + ) + else -> stubUtils.stubHenteGrunnlag(rolle = it, tomRespons = true) + } + } + + // hvis + grunnlagService.oppdatereGrunnlagForBehandling(behandling) + + // så + behandling.grunnlagSistInnhentet?.toLocalDate() shouldBe LocalDate.now() + + behandling.grunnlag.filter { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype } shouldHaveSize 1 + val barnetilsyn = + behandling.grunnlag.find { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype && Grunnlagsdatatype.BARNETILSYN == it.type } + assertSoftly(barnetilsyn) { + it.shouldNotBeNull() + it.aktiv.shouldNotBeNull() + it.innhentet.shouldNotBeNull() + it.data.shouldNotBeNull() + } + + assertSoftly(jsonListeTilObjekt(barnetilsyn?.data!!).sortedBy { it.periodeFra }) { + shouldHaveSize(2) + it.elementAt(0).beløp shouldBe 4000 + it.elementAt(0).periodeFra shouldBe LocalDate.of(2023,1,1) + it.elementAt(0).periodeTil shouldBe LocalDate.of(2024,1,1) + it.elementAt(0).skolealder shouldBe Skolealder.OVER + it.elementAt(0).tilsynstype shouldBe Tilsynstype.HELTID + it.elementAt(0).partPersonId shouldBe "313213213" + it.elementAt(0).barnPersonId shouldBe "1344124" + } + } + @Test @Transactional open fun `skal lagre arbeidsforhold`() { @@ -263,15 +321,15 @@ class GrunnlagServiceTest : TestContainerRunner() { arbeidsforhold .filter { a -> a.partPersonId == behandling.bidragsmottaker!!.ident!! && - a.sluttdato == null && - a.startdato == - LocalDate.of( - 2002, - 11, - 3, - ) && - a.arbeidsgiverNavn == "SAUEFABRIKK" && - a.arbeidsgiverOrgnummer == "896929119" + a.sluttdato == null && + a.startdato == + LocalDate.of( + 2002, + 11, + 3, + ) && + a.arbeidsgiverNavn == "SAUEFABRIKK" && + a.arbeidsgiverOrgnummer == "896929119" }.toSet() .size shouldBe 1 } @@ -645,22 +703,22 @@ class GrunnlagServiceTest : TestContainerRunner() { val skattegrunnlag = SkattegrunnlagGrunnlagDto( periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), personId = behandling.bidragsmottaker!!.ident!!, skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - beløp = BigDecimal(450000), - belop = BigDecimal(450000), - inntektType = "renteinntektAvObligasjon", - skattegrunnlagType = "ORINÆR", - ), + listOf( + SkattegrunnlagspostDto( + beløp = BigDecimal(450000), + belop = BigDecimal(450000), + inntektType = "renteinntektAvObligasjon", + skattegrunnlagType = "ORINÆR", ), + ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -676,12 +734,12 @@ class GrunnlagServiceTest : TestContainerRunner() { stubUtils.stubHenteGrunnlag( rolle = it, responsobjekt = - tilHentGrunnlagDto( - skattegrunnlag = - listOf( - skattegrunnlag, - ), + tilHentGrunnlagDto( + skattegrunnlag = + listOf( + skattegrunnlag, ), + ), ) else -> stubUtils.stubHenteGrunnlag(rolle = it, tomRespons = true) @@ -736,42 +794,42 @@ class GrunnlagServiceTest : TestContainerRunner() { val skattegrunnlag = SkattegrunnlagGrunnlagDto( periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), personId = behandling.bidragsmottaker!!.ident!!, skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - beløp = BigDecimal(450000), - belop = BigDecimal(450000), - inntektType = "renteinntektAvObligasjon", - skattegrunnlagType = "ORINÆR", - ), + listOf( + SkattegrunnlagspostDto( + beløp = BigDecimal(450000), + belop = BigDecimal(450000), + inntektType = "renteinntektAvObligasjon", + skattegrunnlagType = "ORINÆR", ), + ), ) val skattegrunnlagNy = SkattegrunnlagGrunnlagDto( periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), personId = behandling.bidragsmottaker!!.ident!!, skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - beløp = BigDecimal(450000), - belop = BigDecimal(450000), - inntektType = "renteinntektAvObligasjon", - skattegrunnlagType = "Something else", - ), + listOf( + SkattegrunnlagspostDto( + beløp = BigDecimal(450000), + belop = BigDecimal(450000), + inntektType = "renteinntektAvObligasjon", + skattegrunnlagType = "Something else", ), + ), ) testdataManager.oppretteOgLagreGrunnlag( behandling, @@ -786,10 +844,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentingstidspunkt, innhentingstidspunkt, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - skattegrunnlagListe = listOf(skattegrunnlag), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + skattegrunnlagListe = listOf(skattegrunnlag), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) behandling.roller.forEach { when (it.rolletype) { @@ -797,12 +855,12 @@ class GrunnlagServiceTest : TestContainerRunner() { stubUtils.stubHenteGrunnlag( rolle = it, responsobjekt = - tilHentGrunnlagDto( - skattegrunnlag = - listOf( - skattegrunnlagNy, - ), + tilHentGrunnlagDto( + skattegrunnlag = + listOf( + skattegrunnlagNy, ), + ), ) else -> stubUtils.stubHenteGrunnlag(rolle = it, tomRespons = true) @@ -836,48 +894,48 @@ class GrunnlagServiceTest : TestContainerRunner() { val skattegrunnlag = SkattegrunnlagGrunnlagDto( periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), personId = behandling.bidragsmottaker!!.ident!!, skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - beløp = BigDecimal(450000), - belop = BigDecimal(450000), - inntektType = "renteinntektAvObligasjon", - skattegrunnlagType = "ORINÆR", - ), + listOf( + SkattegrunnlagspostDto( + beløp = BigDecimal(450000), + belop = BigDecimal(450000), + inntektType = "renteinntektAvObligasjon", + skattegrunnlagType = "ORINÆR", ), + ), ) val skattegrunnlagNy = SkattegrunnlagGrunnlagDto( periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), personId = behandling.bidragsmottaker!!.ident!!, skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - beløp = BigDecimal(450000), - belop = BigDecimal(450000), - inntektType = "renteinntektAvObligasjon", - skattegrunnlagType = "Something else", - ), - SkattegrunnlagspostDto( - beløp = BigDecimal(100000), - belop = BigDecimal(100000), - inntektType = "gevinstVedRealisasjonAvAksje", - skattegrunnlagType = "Something else", - ), + listOf( + SkattegrunnlagspostDto( + beløp = BigDecimal(450000), + belop = BigDecimal(450000), + inntektType = "renteinntektAvObligasjon", + skattegrunnlagType = "Something else", ), + SkattegrunnlagspostDto( + beløp = BigDecimal(100000), + belop = BigDecimal(100000), + inntektType = "gevinstVedRealisasjonAvAksje", + skattegrunnlagType = "Something else", + ), + ), ) testdataManager.oppretteOgLagreGrunnlag( behandling, @@ -892,10 +950,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentingstidspunkt, innhentingstidspunkt, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - skattegrunnlagListe = listOf(skattegrunnlag), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + skattegrunnlagListe = listOf(skattegrunnlag), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) behandling.roller.forEach { when (it.rolletype) { @@ -903,12 +961,12 @@ class GrunnlagServiceTest : TestContainerRunner() { stubUtils.stubHenteGrunnlag( rolle = it, responsobjekt = - tilHentGrunnlagDto( - skattegrunnlag = - listOf( - skattegrunnlagNy, - ), + tilHentGrunnlagDto( + skattegrunnlag = + listOf( + skattegrunnlagNy, ), + ), ) else -> stubUtils.stubHenteGrunnlag(rolle = it, tomRespons = true) @@ -962,12 +1020,12 @@ class GrunnlagServiceTest : TestContainerRunner() { stubUtils.stubHenteGrunnlag( it, responsobjekt = - tilHentGrunnlagDto( - småbarnstillegg = - listOf( - småbarnstillegg, - ), + tilHentGrunnlagDto( + småbarnstillegg = + listOf( + småbarnstillegg, ), + ), ) Rolletype.BARN -> stubUtils.stubHenteGrunnlag(it, tomRespons = true) @@ -1432,13 +1490,13 @@ class GrunnlagServiceTest : TestContainerRunner() { husstandsmedlemmer .filter { h -> h.navn == "Småstein Nilsen" && - h.fødselsdato == - LocalDate.of( - 2020, - 1, - 24, - ) && - h.erBarn + h.fødselsdato == + LocalDate.of( + 2020, + 1, + 24, + ) && + h.erBarn }.toSet() .size shouldBe 1 } @@ -1507,26 +1565,26 @@ class GrunnlagServiceTest : TestContainerRunner() { sivilstand .filter { s -> s.personId == testdataBM.ident && - s.bekreftelsesdato == - LocalDate.of( - 2021, - 1, - 1, - ) && - s.gyldigFom == - LocalDate.of( - 2021, - 1, - 1, - ) && - s.master == "FREG" && - s.historisk == true && - s.registrert == - LocalDateTime.parse( - "2022-01-01T10:03:57.285", - DateTimeFormatter.ISO_LOCAL_DATE_TIME, - ) && - s.type == SivilstandskodePDL.GIFT + s.bekreftelsesdato == + LocalDate.of( + 2021, + 1, + 1, + ) && + s.gyldigFom == + LocalDate.of( + 2021, + 1, + 1, + ) && + s.master == "FREG" && + s.historisk == true && + s.registrert == + LocalDateTime.parse( + "2022-01-01T10:03:57.285", + DateTimeFormatter.ISO_LOCAL_DATE_TIME, + ) && + s.type == SivilstandskodePDL.GIFT }.toSet() .size shouldBe 1 } @@ -1672,15 +1730,15 @@ class GrunnlagServiceTest : TestContainerRunner() { arbeidsforhold .filter { a -> a.partPersonId == behandling.bidragsmottaker!!.ident!! && - a.sluttdato == null && - a.startdato == - LocalDate.of( - 2002, - 11, - 3, - ) && - a.arbeidsgiverNavn == "SAUEFABRIKK" && - a.arbeidsgiverOrgnummer == "896929119" + a.sluttdato == null && + a.startdato == + LocalDate.of( + 2002, + 11, + 3, + ) && + a.arbeidsgiverNavn == "SAUEFABRIKK" && + a.arbeidsgiverOrgnummer == "896929119" }.toSet() .size shouldBe 1 } @@ -1729,7 +1787,7 @@ class GrunnlagServiceTest : TestContainerRunner() { .filter { it.type == Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER && !it.erBearbeidet } .filter { it.rolle == - behandling.bidragspliktig!! + behandling.bidragspliktig!! }.toSet(), ) { g -> g shouldHaveSize 1 @@ -2054,22 +2112,22 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - setOf( - RelatertPersonGrunnlagDto( - relatertPersonPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - erBarnAvBmBp = true, - navn = null, - partPersonId = behandling.bidragspliktig!!.ident!!, - borISammeHusstandDtoListe = - listOf( - BorISammeHusstandDto( - testdataHusstandsmedlem1.fødselsdato, - periodeTil = null, - ), - ), + setOf( + RelatertPersonGrunnlagDto( + relatertPersonPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + erBarnAvBmBp = true, + navn = null, + partPersonId = behandling.bidragspliktig!!.ident!!, + borISammeHusstandDtoListe = + listOf( + BorISammeHusstandDto( + testdataHusstandsmedlem1.fødselsdato, + periodeTil = null, + ), ), ), + ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -2080,16 +2138,16 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = null, gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - BoforholdResponseV2( - bostatus = Bostatuskode.MED_FORELDER, - gjelderPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, - ), + setOf( + BoforholdResponseV2( + bostatus = Bostatuskode.MED_FORELDER, + gjelderPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, ), + ), ) val aktivereGrunnlagRequest = @@ -2287,11 +2345,11 @@ class GrunnlagServiceTest : TestContainerRunner() { partPersonId = behandling.bidragspliktig!!.ident!!, barnPersonId = behandling.søknadsbarn.first().ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløpBrutto = BigDecimal(40000), barnetilleggType = "Cash", @@ -2314,10 +2372,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - barnetilleggListe = barnetilleggGrunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragspliktig!!), + opprettHentGrunnlagDto() + .copy( + barnetilleggListe = barnetilleggGrunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragspliktig!!), ) val aktivereGrunnlagRequest = @@ -2367,22 +2425,22 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - setOf( - RelatertPersonGrunnlagDto( - relatertPersonPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - erBarnAvBmBp = true, - navn = null, - partPersonId = behandling.bidragspliktig!!.ident!!, - borISammeHusstandDtoListe = - listOf( - BorISammeHusstandDto( - testdataHusstandsmedlem1.fødselsdato, - periodeTil = null, - ), - ), + setOf( + RelatertPersonGrunnlagDto( + relatertPersonPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + erBarnAvBmBp = true, + navn = null, + partPersonId = behandling.bidragspliktig!!.ident!!, + borISammeHusstandDtoListe = + listOf( + BorISammeHusstandDto( + testdataHusstandsmedlem1.fødselsdato, + periodeTil = null, + ), ), ), + ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -2393,16 +2451,16 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = null, gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - BoforholdResponseV2( - bostatus = Bostatuskode.MED_FORELDER, - gjelderPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, - ), + setOf( + BoforholdResponseV2( + bostatus = Bostatuskode.MED_FORELDER, + gjelderPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, ), + ), ) val aktivereGrunnlagRequest = @@ -2811,11 +2869,11 @@ class GrunnlagServiceTest : TestContainerRunner() { UtvidetBarnetrygdGrunnlagDto( personId = behandling.bidragspliktig!!.ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløp = BigDecimal(37500), manueltBeregnet = false, @@ -2834,10 +2892,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - utvidetBarnetrygdListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragspliktig!!), + opprettHentGrunnlagDto() + .copy( + utvidetBarnetrygdListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragspliktig!!), ) val aktivereGrunnlagRequest = @@ -2876,11 +2934,11 @@ class GrunnlagServiceTest : TestContainerRunner() { SmåbarnstilleggGrunnlagDto( personId = behandling.bidragspliktig!!.ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløp = BigDecimal(35000), manueltBeregnet = false, @@ -2899,10 +2957,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - småbarnstilleggListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragspliktig!!), + opprettHentGrunnlagDto() + .copy( + småbarnstilleggListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragspliktig!!), ) val aktivereGrunnlagRequest = @@ -2958,10 +3016,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - kontantstøtteListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragspliktig!!), + opprettHentGrunnlagDto() + .copy( + kontantstøtteListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragspliktig!!), ) val aktivereGrunnlagRequest = @@ -3003,17 +3061,17 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - setOf( - SivilstandGrunnlagDto( - personId = behandling.bidragspliktig!!.ident!!, - type = SivilstandskodePDL.SKILT, - gyldigFom = LocalDate.now().minusMonths(29), - master = "FREG", - historisk = false, - registrert = LocalDateTime.now().minusMonths(29), - bekreftelsesdato = null, - ), + setOf( + SivilstandGrunnlagDto( + personId = behandling.bidragspliktig!!.ident!!, + type = SivilstandskodePDL.SKILT, + gyldigFom = LocalDate.now().minusMonths(29), + master = "FREG", + historisk = false, + registrert = LocalDateTime.now().minusMonths(29), + bekreftelsesdato = null, ), + ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -3023,14 +3081,14 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = null, gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - Sivilstand( - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, - sivilstandskode = Sivilstandskode.BOR_ALENE_MED_BARN, - ), + setOf( + Sivilstand( + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, + sivilstandskode = Sivilstandskode.BOR_ALENE_MED_BARN, ), + ), ) val aktivereGrunnlagRequest = @@ -3071,16 +3129,16 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = LocalDateTime.now(), gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - BoforholdResponseV2( - bostatus = Bostatuskode.MED_FORELDER, - gjelderPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, - ), + setOf( + BoforholdResponseV2( + bostatus = Bostatuskode.MED_FORELDER, + gjelderPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, ), + ), ) entityManager.flush() @@ -3127,59 +3185,59 @@ class GrunnlagServiceTest : TestContainerRunner() { val skattepliktigeInntekter = SkattepliktigeInntekter( ainntekter = - listOf( - AinntektGrunnlagDto( - personId = behandling.bidragsmottaker!!.ident!!, - periodeFra = YearMonth.now().minusMonths(2).atDay(1), - periodeTil = YearMonth.now().minusMonths(1).atDay(1), - ainntektspostListe = - listOf( - tilAinntektspostDto( - beskrivelse = "fastloenn", - beløp = BigDecimal(368000), - inntektstype = "FASTLOENN", - utbetalingsperiode = - YearMonth - .now() - .minusMonths(2) - .format(DateTimeFormatter.ofPattern("yyyy-MM")), - ), - ), + listOf( + AinntektGrunnlagDto( + personId = behandling.bidragsmottaker!!.ident!!, + periodeFra = YearMonth.now().minusMonths(2).atDay(1), + periodeTil = YearMonth.now().minusMonths(1).atDay(1), + ainntektspostListe = + listOf( + tilAinntektspostDto( + beskrivelse = "fastloenn", + beløp = BigDecimal(368000), + inntektstype = "FASTLOENN", + utbetalingsperiode = + YearMonth + .now() + .minusMonths(2) + .format(DateTimeFormatter.ofPattern("yyyy-MM")), + ), ), ), + ), skattegrunnlag = - listOf( - SkattegrunnlagGrunnlagDto( - personId = behandling.bidragsmottaker!!.ident!!, - periodeFra = skattegrunlagFraDato, - periodeTil = skattegrunlagFraDato.plusYears(1), - skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - skattegrunnlagType = "ORDINÆR", - beløp = BigDecimal(368000), - belop = BigDecimal(368000), - inntektType = "andelIFellesTapVedSalgAvAndelISDF", - kode = "andelIFellesTapVedSalgAvAndelISDF", - ), - ), + listOf( + SkattegrunnlagGrunnlagDto( + personId = behandling.bidragsmottaker!!.ident!!, + periodeFra = skattegrunlagFraDato, + periodeTil = skattegrunlagFraDato.plusYears(1), + skattegrunnlagspostListe = + listOf( + SkattegrunnlagspostDto( + skattegrunnlagType = "ORDINÆR", + beløp = BigDecimal(368000), + belop = BigDecimal(368000), + inntektType = "andelIFellesTapVedSalgAvAndelISDF", + kode = "andelIFellesTapVedSalgAvAndelISDF", + ), ), - SkattegrunnlagGrunnlagDto( - personId = behandling.bidragsmottaker!!.ident!!, - periodeFra = skattegrunlagFraDato, - periodeTil = skattegrunlagFraDato.plusYears(1), - skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - skattegrunnlagType = "ORDINÆR", - beløp = BigDecimal(1368000), - belop = BigDecimal(1368000), - inntektType = "samletLoennsinntekt", - kode = "samletLoennsinntekt", - ), - ), + ), + SkattegrunnlagGrunnlagDto( + personId = behandling.bidragsmottaker!!.ident!!, + periodeFra = skattegrunlagFraDato, + periodeTil = skattegrunlagFraDato.plusYears(1), + skattegrunnlagspostListe = + listOf( + SkattegrunnlagspostDto( + skattegrunnlagType = "ORDINÆR", + beløp = BigDecimal(1368000), + belop = BigDecimal(1368000), + inntektType = "samletLoennsinntekt", + kode = "samletLoennsinntekt", + ), ), ), + ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -3250,11 +3308,11 @@ class GrunnlagServiceTest : TestContainerRunner() { partPersonId = behandling.bidragsmottaker!!.ident!!, barnPersonId = behandling.søknadsbarn.first().ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløpBrutto = BigDecimal(40000), barnetilleggType = "Cash", @@ -3275,10 +3333,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - barnetilleggListe = barnetilleggGrunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + barnetilleggListe = barnetilleggGrunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) val aktivereGrunnlagRequest = @@ -3342,10 +3400,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - kontantstøtteListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + kontantstøtteListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) val aktivereGrunnlagRequest = @@ -3390,11 +3448,11 @@ class GrunnlagServiceTest : TestContainerRunner() { SmåbarnstilleggGrunnlagDto( personId = behandling.bidragsmottaker!!.ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløp = BigDecimal(35000), manueltBeregnet = false, @@ -3413,10 +3471,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - småbarnstilleggListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + småbarnstilleggListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) val aktivereGrunnlagRequest = @@ -3457,11 +3515,11 @@ class GrunnlagServiceTest : TestContainerRunner() { UtvidetBarnetrygdGrunnlagDto( personId = behandling.bidragsmottaker!!.ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløp = BigDecimal(37500), manueltBeregnet = false, @@ -3480,10 +3538,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - utvidetBarnetrygdListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + utvidetBarnetrygdListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) val aktivereGrunnlagRequest = AktivereGrunnlagRequestV2( @@ -3530,22 +3588,22 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - setOf( - RelatertPersonGrunnlagDto( - relatertPersonPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - erBarnAvBmBp = true, - navn = null, - partPersonId = behandling.bidragsmottaker!!.ident!!, - borISammeHusstandDtoListe = - listOf( - BorISammeHusstandDto( - testdataHusstandsmedlem1.fødselsdato, - periodeTil = null, - ), - ), + setOf( + RelatertPersonGrunnlagDto( + relatertPersonPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + erBarnAvBmBp = true, + navn = null, + partPersonId = behandling.bidragsmottaker!!.ident!!, + borISammeHusstandDtoListe = + listOf( + BorISammeHusstandDto( + testdataHusstandsmedlem1.fødselsdato, + periodeTil = null, + ), ), ), + ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -3555,16 +3613,16 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = null, gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - BoforholdResponseV2( - bostatus = Bostatuskode.MED_FORELDER, - gjelderPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, - ), + setOf( + BoforholdResponseV2( + bostatus = Bostatuskode.MED_FORELDER, + gjelderPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, ), + ), ) val aktivereGrunnlagRequest = @@ -3608,17 +3666,17 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - setOf( - SivilstandGrunnlagDto( - personId = behandling.bidragsmottaker!!.ident!!, - type = SivilstandskodePDL.SKILT, - gyldigFom = LocalDate.now().minusMonths(29), - master = "FREG", - historisk = false, - registrert = LocalDateTime.now().minusMonths(29), - bekreftelsesdato = null, - ), + setOf( + SivilstandGrunnlagDto( + personId = behandling.bidragsmottaker!!.ident!!, + type = SivilstandskodePDL.SKILT, + gyldigFom = LocalDate.now().minusMonths(29), + master = "FREG", + historisk = false, + registrert = LocalDateTime.now().minusMonths(29), + bekreftelsesdato = null, ), + ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -3628,14 +3686,14 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = null, gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - Sivilstand( - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, - sivilstandskode = Sivilstandskode.BOR_ALENE_MED_BARN, - ), + setOf( + Sivilstand( + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, + sivilstandskode = Sivilstandskode.BOR_ALENE_MED_BARN, ), + ), ) val aktivereGrunnlagRequest = @@ -3895,16 +3953,16 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = LocalDateTime.now(), gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - BoforholdResponseV2( - bostatus = Bostatuskode.MED_FORELDER, - gjelderPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, - ), + setOf( + BoforholdResponseV2( + bostatus = Bostatuskode.MED_FORELDER, + gjelderPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, ), + ), ) entityManager.flush() @@ -3987,8 +4045,8 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling.grunnlag shouldBe emptySet() every { bidragGrunnlagConsumerMock.henteGrunnlag(any()) } returns ( - HentetGrunnlag(null, "Teknisk feil ved henting av grunnlag") - ) + HentetGrunnlag(null, "Teknisk feil ved henting av grunnlag") + ) // hvis grunnlagServiceMock.oppdatereGrunnlagForBehandling(behandling) @@ -4075,15 +4133,15 @@ class GrunnlagServiceTest : TestContainerRunner() { val innhentingUtenFeil = opprettHentGrunnlagDto().copy( ainntektListe = - oppretteSkattepliktigeInntekter( - behandling, - behandling.bidragsmottaker!!, - ).ainntekter, + oppretteSkattepliktigeInntekter( + behandling, + behandling.bidragsmottaker!!, + ).ainntekter, skattegrunnlagListe = - oppretteSkattepliktigeInntekter( - behandling, - behandling.bidragsmottaker!!, - ).skattegrunnlag, + oppretteSkattepliktigeInntekter( + behandling, + behandling.bidragsmottaker!!, + ).skattegrunnlag, ) every { @@ -4206,10 +4264,10 @@ class GrunnlagServiceTest : TestContainerRunner() { opprettHentGrunnlagDto().copy( arbeidsforholdListe = listOf(nyttArbeidsforhold!!), feilrapporteringListe = - oppretteFeilrapporteringerForPerson( - behandling.bidragsmottaker!!.ident!!, - HentGrunnlagFeiltype.FUNKSJONELL_FEIL, - ), + oppretteFeilrapporteringerForPerson( + behandling.bidragsmottaker!!.ident!!, + HentGrunnlagFeiltype.FUNKSJONELL_FEIL, + ), ) innhentingMedFeil.feilrapporteringListe shouldHaveSize 10 @@ -4330,14 +4388,14 @@ class GrunnlagServiceTest : TestContainerRunner() { opprettHentGrunnlagDto().copy( skattegrunnlagListe = listOf(nyttSkattegrunnlagselement), feilrapporteringListe = - oppretteFeilrapporteringer( - setOf( - behandling.bidragsmottaker!!.ident!!, - behandling.bidragspliktig!!.ident!!, - behandling.søknadsbarn.first().ident!!, - ), - HentGrunnlagFeiltype.FUNKSJONELL_FEIL, + oppretteFeilrapporteringer( + setOf( + behandling.bidragsmottaker!!.ident!!, + behandling.bidragspliktig!!.ident!!, + behandling.søknadsbarn.first().ident!!, ), + HentGrunnlagFeiltype.FUNKSJONELL_FEIL, + ), ) innhentingMedFeil.feilrapporteringListe shouldHaveSize 30 @@ -4431,7 +4489,7 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling.grunnlagsinnhentingFeilet = "{\"SKATTEPLIKTIGE_INNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"},\n" + - "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" + "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" // hvis grunnlagServiceMock.oppdatereGrunnlagForBehandling(behandling) @@ -4482,10 +4540,10 @@ class GrunnlagServiceTest : TestContainerRunner() { opprettHentGrunnlagDto().copy( skattegrunnlagListe = listOf(nyttSkattegrunnlagselement), feilrapporteringListe = - oppretteFeilrapporteringerForPerson( - behandling.bidragsmottaker!!.ident!!, - HentGrunnlagFeiltype.FUNKSJONELL_FEIL, - ), + oppretteFeilrapporteringerForPerson( + behandling.bidragsmottaker!!.ident!!, + HentGrunnlagFeiltype.FUNKSJONELL_FEIL, + ), ) innhentingMedFeil.feilrapporteringListe shouldHaveSize 10 @@ -4511,7 +4569,7 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling.grunnlagsinnhentingFeilet = "{\"SKATTEPLIKTIGE_INNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"},\n" + - "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" + "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" // hvis grunnlagServiceMock.oppdatereGrunnlagForBehandling(behandling) @@ -4561,14 +4619,14 @@ class GrunnlagServiceTest : TestContainerRunner() { opprettHentGrunnlagDto().copy( skattegrunnlagListe = listOf(nyttSkattegrunnlagselement), feilrapporteringListe = - oppretteFeilrapporteringer( - setOf( - behandling.bidragsmottaker!!.ident!!, - behandling.bidragspliktig!!.ident!!, - behandling.søknadsbarn.first().ident!!, - ), - HentGrunnlagFeiltype.FUNKSJONELL_FEIL, + oppretteFeilrapporteringer( + setOf( + behandling.bidragsmottaker!!.ident!!, + behandling.bidragspliktig!!.ident!!, + behandling.søknadsbarn.first().ident!!, ), + HentGrunnlagFeiltype.FUNKSJONELL_FEIL, + ), ) innhentingMedFeil.feilrapporteringListe shouldHaveSize 30 @@ -4594,7 +4652,7 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling.grunnlagsinnhentingFeilet = "{\"SKATTEPLIKTIGE_INNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"},\n" + - "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" + "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" // hvis grunnlagServiceMock.oppdatereGrunnlagForBehandling(behandling) @@ -4778,17 +4836,17 @@ fun oppretteFeilrapporteringer( grunnlagstype = it, feiltype = feiltype, periodeFra = - LocalDate - .now() - .minusYears(1) - .withMonth(1) - .withDayOfMonth(1), + LocalDate + .now() + .minusYears(1) + .withMonth(1) + .withDayOfMonth(1), periodeTil = - LocalDate - .now() - .minusYears(1) - .withMonth(12) - .withDayOfMonth(31), + LocalDate + .now() + .minusYears(1) + .withMonth(12) + .withDayOfMonth(31), personId = personident, ) } @@ -4815,57 +4873,57 @@ fun oppretteSkattepliktigeInntekter( .withDayOfMonth(1), ) = SkattepliktigeInntekter( ainntekter = - listOf( - AinntektGrunnlagDto( - personId = forRolle.ident!!, - periodeFra = YearMonth.now().minusMonths(2).atDay(1), - periodeTil = YearMonth.now().minusMonths(1).atDay(1), - ainntektspostListe = - listOf( - tilAinntektspostDto( - beskrivelse = "fastloenn", - beløp = BigDecimal(368000), - inntektstype = "FASTLOENN", - utbetalingsperiode = - YearMonth - .now() - .minusMonths(2) - .format(DateTimeFormatter.ofPattern("yyyy-MM")), - ), - ), + listOf( + AinntektGrunnlagDto( + personId = forRolle.ident!!, + periodeFra = YearMonth.now().minusMonths(2).atDay(1), + periodeTil = YearMonth.now().minusMonths(1).atDay(1), + ainntektspostListe = + listOf( + tilAinntektspostDto( + beskrivelse = "fastloenn", + beløp = BigDecimal(368000), + inntektstype = "FASTLOENN", + utbetalingsperiode = + YearMonth + .now() + .minusMonths(2) + .format(DateTimeFormatter.ofPattern("yyyy-MM")), + ), ), ), + ), skattegrunnlag = - listOf( - SkattegrunnlagGrunnlagDto( - personId = forRolle.ident!!, - periodeFra = skattegrunnlagFraDato, - periodeTil = skattegrunnlagFraDato.plusYears(1), - skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - skattegrunnlagType = "ORDINÆR", - beløp = BigDecimal(368000), - belop = BigDecimal(368000), - inntektType = "andelIFellesTapVedSalgAvAndelISDF", - kode = "andelIFellesTapVedSalgAvAndelISDF", - ), - ), + listOf( + SkattegrunnlagGrunnlagDto( + personId = forRolle.ident!!, + periodeFra = skattegrunnlagFraDato, + periodeTil = skattegrunnlagFraDato.plusYears(1), + skattegrunnlagspostListe = + listOf( + SkattegrunnlagspostDto( + skattegrunnlagType = "ORDINÆR", + beløp = BigDecimal(368000), + belop = BigDecimal(368000), + inntektType = "andelIFellesTapVedSalgAvAndelISDF", + kode = "andelIFellesTapVedSalgAvAndelISDF", + ), ), - SkattegrunnlagGrunnlagDto( - personId = forRolle.ident!!, - periodeFra = skattegrunnlagFraDato, - periodeTil = skattegrunnlagFraDato.plusYears(1), - skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - skattegrunnlagType = "ORDINÆR", - beløp = BigDecimal(1368000), - belop = BigDecimal(1368000), - inntektType = "samletLoennsinntekt", - kode = "samletLoennsinntekt", - ), - ), + ), + SkattegrunnlagGrunnlagDto( + personId = forRolle.ident!!, + periodeFra = skattegrunnlagFraDato, + periodeTil = skattegrunnlagFraDato.plusYears(1), + skattegrunnlagspostListe = + listOf( + SkattegrunnlagspostDto( + skattegrunnlagType = "ORDINÆR", + beløp = BigDecimal(1368000), + belop = BigDecimal(1368000), + inntektType = "samletLoennsinntekt", + kode = "samletLoennsinntekt", + ), ), ), + ), ) diff --git a/src/test/resources/__files/hente-grunnlagrespons-bidrag-barnetilsyn-bm.json b/src/test/resources/__files/hente-grunnlagrespons-bidrag-barnetilsyn-bm.json new file mode 100644 index 000000000..5125280dc --- /dev/null +++ b/src/test/resources/__files/hente-grunnlagrespons-bidrag-barnetilsyn-bm.json @@ -0,0 +1,32 @@ +{ + "ainntektListe": [], + "arbeidsforholdListe": [], + "barnetilleggListe": [], + "barnetilsynListe": [ + { + "barnPersonId": "1344124", + "beløp": 4000, + "partPersonId": "313213213", + "periodeFra": "2023-01-01", + "periodeTil": "2024-01-01", + "skolealder": "OVER", + "tilsynstype": "HELTID" + }, + { + "barnPersonId": "1344124", + "beløp": 5000, + "partPersonId": "313213213", + "periodeFra": "2024-01-01", + "skolealder": "OVER", + "tilsynstype": "HELTID" + } + ], + "hentetTidspunkt": "2024-01-16T15:10:44.003848261", + "husstandsmedlemmerOgEgneBarnListe": [], + "kontantstøtteListe": [], + "sivilstandListe": [], + "skattegrunnlagListe": [], + "småbarnstilleggListe": [], + "utvidetBarnetrygdListe": [], + "feilrapporteringListe": [] +} \ No newline at end of file From c4d3a9b434212b0099695f57b8bc6b19b2b1bc31 Mon Sep 17 00:00:00 2001 From: s148719 Date: Fri, 22 Nov 2024 15:08:05 +0100 Subject: [PATCH 07/21] Update UnderholdControllerTest.kt --- .../nav/bidrag/behandling/controller/UnderholdControllerTest.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/UnderholdControllerTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/UnderholdControllerTest.kt index 86aaa0ea2..87dd9fba5 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/UnderholdControllerTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/UnderholdControllerTest.kt @@ -204,6 +204,7 @@ class UnderholdControllerTest : KontrollerTestRunner() { } @Test + @Transactional open fun `skal oppdatere faktiske tilsynsutgifter`() { // gitt val behandling = From b61312cd652bfeec3084401f095d65b2e5cc966b Mon Sep 17 00:00:00 2001 From: s148719 Date: Wed, 27 Nov 2024 16:01:58 +0100 Subject: [PATCH 08/21] Innhenting av barnetilsyn --- .../database/datamodell/Behandling.kt | 1 - .../behandling/database/datamodell/Person.kt | 3 + .../behandling/database/datamodell/Rolle.kt | 4 +- .../dto/v2/behandling/BehandlingDtoV2.kt | 51 +- .../behandling/service/BoforholdService.kt | 5 +- .../behandling/service/GrunnlagService.kt | 271 +++++---- .../service/NotatOpplysningerService.kt | 5 +- .../bidrag/behandling/service/NotatService.kt | 10 +- .../behandling/service/UnderholdService.kt | 10 +- .../behandling/transformers/Dtomapper.kt | 530 +++++++++--------- .../behandling/AktivGrunnlagMapping.kt | 98 +++- .../behandling/BehandlingDtoMapping.kt | 53 +- .../boforhold/Husstandsmedlemmer.kt | 4 +- .../grunnlag/InnhentetGrunnlagMapping.kt | 5 +- .../transformers/underhold/Utvidelser.kt | 28 + .../behandling/service/GrunnlagServiceTest.kt | 12 +- .../behandling/utils/testdata/Testdata.kt | 17 +- 17 files changed, 712 insertions(+), 395 deletions(-) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt index 2e8d96234..c621a2917 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt @@ -164,7 +164,6 @@ open class Behandling( val søknadsbarn get() = roller.filter { it.rolletype == Rolletype.BARN } val bidragsmottaker get() = roller.find { it.rolletype == Rolletype.BIDRAGSMOTTAKER } val bidragspliktig get() = roller.find { it.rolletype == Rolletype.BIDRAGSPLIKTIG } - val rolleGrunnlagSkalHentesFor get() = if (stonadstype == Stønadstype.FORSKUDD) bidragsmottaker else bidragspliktig val erVedtakFattet get() = vedtaksid != null val virkningstidspunktEllerSøktFomDato get() = virkningstidspunkt ?: søktFomDato diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt index e0f8d1828..aea7d6797 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt @@ -7,6 +7,7 @@ import jakarta.persistence.GeneratedValue import jakarta.persistence.GenerationType import jakarta.persistence.Id import jakarta.persistence.OneToMany +import no.nav.bidrag.domene.ident.Personident import java.time.LocalDate import java.time.LocalDateTime @@ -34,5 +35,7 @@ open class Person( ) open val rolle: MutableSet = mutableSetOf(), ) { + val personident get() = ident?.let { Personident(it) } ?: rolle.first().ident?.let { Personident(it) } + override fun toString(): String = "Person(id=$id, ident=$ident, navn=$navn, fødselsdato=$fødselsdato, opprettet=$opprettet)" } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt index 5041ca0dd..f68d82173 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt @@ -82,7 +82,9 @@ open class Rolle( nullable = true, ) open var person: Person? = null, -) +) { + val personident get() = person?.ident?.let { Personident(it) } ?: this.ident?.let { Personident(it) } +} fun Rolle.tilPersonident() = ident?.let { Personident(it) } 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 ea7efdc8a..9bfae6322 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 @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonFormat import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.databind.annotation.JsonDeserialize import io.swagger.v3.oas.annotations.media.Schema +import no.nav.bidrag.behandling.database.datamodell.Barnetilsyn +import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.dto.v1.behandling.BegrunnelseDto import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto import no.nav.bidrag.behandling.dto.v1.behandling.SivilstandDto @@ -16,6 +18,7 @@ import no.nav.bidrag.behandling.dto.v2.underhold.UnderholdDto import no.nav.bidrag.behandling.dto.v2.utgift.MaksGodkjentBeløpDto import no.nav.bidrag.behandling.dto.v2.validering.UtgiftValideringsfeilDto import no.nav.bidrag.behandling.transformers.PeriodeDeserialiserer +import no.nav.bidrag.behandling.transformers.tilType import no.nav.bidrag.domene.enums.behandling.TypeBehandling import no.nav.bidrag.domene.enums.beregning.Resultatkode import no.nav.bidrag.domene.enums.diverse.Kilde @@ -39,6 +42,7 @@ import no.nav.bidrag.domene.util.visningsnavn import no.nav.bidrag.domene.util.visningsnavnIntern import no.nav.bidrag.organisasjon.dto.SaksbehandlerDto import no.nav.bidrag.transport.behandling.grunnlag.response.ArbeidsforholdGrunnlagDto +import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilsynGrunnlagDto import no.nav.bidrag.transport.behandling.grunnlag.response.SivilstandGrunnlagDto import java.math.BigDecimal import java.time.LocalDate @@ -221,6 +225,7 @@ data class AktiveGrunnlagsdata( val husstandsmedlem: Set, val andreVoksneIHusstanden: AndreVoksneIHusstandenGrunnlagDto? = null, val sivilstand: SivilstandAktivGrunnlagDto? = null, + val barnetilsyn: BarnetilsynAktiveGrunnlagDto? = null, ) { @Deprecated("Erstattes av husstandsmedlem") @Schema(description = "Erstattes av husstandsmedlem", deprecated = true) @@ -233,6 +238,7 @@ data class IkkeAktiveGrunnlagsdata( val arbeidsforhold: Set = emptySet(), val andreVoksneIHusstanden: AndreVoksneIHusstandenGrunnlagDto? = null, val sivilstand: SivilstandIkkeAktivGrunnlagDto? = null, + val barnetilsyn: BarnetilsynIkkeAktiveGrunnlagDto? = null, ) { @Deprecated("Erstattes av husstandsmedlem") @Schema(description = "Erstattes av husstandsmedlem", deprecated = true) @@ -251,10 +257,10 @@ data class IkkeAktiveInntekter( val ingenEndringer get() = barnetillegg.isEmpty() && - utvidetBarnetrygd.isEmpty() && - kontantstøtte.isEmpty() && - småbarnstillegg.isEmpty() && - årsinntekter.isEmpty() + utvidetBarnetrygd.isEmpty() && + kontantstøtte.isEmpty() && + småbarnstillegg.isEmpty() && + årsinntekter.isEmpty() } data class Grunnlagsinnhentingsfeil( @@ -310,6 +316,17 @@ data class SivilstandIkkeAktivGrunnlagDto( val innhentetTidspunkt: LocalDateTime = LocalDateTime.now(), ) +data class BarnetilsynAktiveGrunnlagDto( + val grunnlag: Map> = emptyMap(), + val innhentetTidspunkt: LocalDateTime = LocalDateTime.now(), +) + +data class BarnetilsynIkkeAktiveGrunnlagDto( + val barnetilsyn: Map> = emptyMap(), + val grunnlag: Map> = emptyMap(), + val innhentetTidspunkt: LocalDateTime = LocalDateTime.now(), +) + data class HusstandsmedlemGrunnlagDto( val perioder: Set, val ident: String? = null, @@ -344,7 +361,7 @@ data class PeriodeAndreVoksneIHusstanden( val totalAntallHusstandsmedlemmer: Int, @Schema( description = - "Detaljer om husstandsmedlemmer som bor hos BP for gjeldende periode. " + + "Detaljer om husstandsmedlemmer som bor hos BP for gjeldende periode. " + "Antall hustandsmedlemmer er begrenset til maks 10 personer", ) val husstandsmedlemmer: List = emptyList(), @@ -501,3 +518,27 @@ fun Grunnlagsdatatype.tilInntektrapporteringYtelse() = Grunnlagsdatatype.KONTANTSTØTTE -> Inntektsrapportering.KONTANTSTØTTE else -> null } + +fun Grunnlagsdatatype.innhentesForRolle(behandling: Behandling) = + when (this) { + + Grunnlagsdatatype.BARNETILSYN -> when (this.behandlinstypeMotRolletyper[behandling.tilType()]!!.first()) { + Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker + Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig + else -> null + } + + Grunnlagsdatatype.BOFORHOLD -> when (this.behandlinstypeMotRolletyper[behandling.tilType()]!!.first()) { + Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker + Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig + else -> null + } + + Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> when (this.behandlinstypeMotRolletyper[behandling.tilType()]!!.first()) { + Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker + Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig + else -> null + } + + else -> null + } \ No newline at end of file diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/BoforholdService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/BoforholdService.kt index c7f61085e..0cf00fe49 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/BoforholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/BoforholdService.kt @@ -28,6 +28,7 @@ import no.nav.bidrag.behandling.dto.v1.behandling.BoforholdValideringsfeil import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagstype import no.nav.bidrag.behandling.dto.v2.behandling.OppdatereBegrunnelse +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.dto.v2.boforhold.OppdatereAndreVoksneIHusstanden import no.nav.bidrag.behandling.dto.v2.boforhold.OppdatereBoforholdResponse import no.nav.bidrag.behandling.dto.v2.boforhold.OppdatereHusstandsmedlem @@ -107,7 +108,7 @@ class BoforholdService( behandling = behandling, notattype = Notattype.BOFORHOLD, notattekst = request.henteNyttNotat() ?: "", - rolle = behandling.rolleGrunnlagSkalHentesFor!!, + rolle = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!, ) return OppdatereBoforholdResponse( @@ -1187,7 +1188,7 @@ class BoforholdService( data = tilJson(boforholdrespons), innhentet = LocalDateTime.now(), aktiv = LocalDateTime.now(), - rolle = behandling.rolleGrunnlagSkalHentesFor!!, + rolle = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!, gjelder = personidentBarn.verdi, ), ) 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 22d096659..6730f76f9 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt @@ -25,6 +25,7 @@ import no.nav.bidrag.behandling.dto.v2.behandling.AktivereGrunnlagRequestV2 import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagstype import no.nav.bidrag.behandling.dto.v2.behandling.getOrMigrate +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.lagringAvGrunnlagFeiletException import no.nav.bidrag.behandling.objectmapper import no.nav.bidrag.behandling.ressursIkkeFunnetException @@ -47,6 +48,7 @@ import no.nav.bidrag.behandling.transformers.grunnlag.summertAinntektstyper import no.nav.bidrag.behandling.transformers.grunnlag.summertSkattegrunnlagstyper import no.nav.bidrag.behandling.transformers.inntekt.opprettTransformerInntekterRequest import no.nav.bidrag.behandling.transformers.tilType +import no.nav.bidrag.behandling.transformers.underhold.tilBarnetilsyn import no.nav.bidrag.boforhold.BoforholdApi import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 import no.nav.bidrag.boforhold.dto.Bostatus @@ -64,6 +66,7 @@ import no.nav.bidrag.inntekt.InntektApi import no.nav.bidrag.sivilstand.SivilstandApi import no.nav.bidrag.sivilstand.dto.Sivilstand import no.nav.bidrag.transport.behandling.grunnlag.request.GrunnlagRequestDto +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.HentGrunnlagDto import no.nav.bidrag.transport.behandling.grunnlag.response.RelatertPersonGrunnlagDto @@ -119,13 +122,13 @@ class GrunnlagService( behandling.grunnlagsinnhentingFeilet = objectmapper.writeValueAsString(feilrapporteringer) secureLogger.error { "Det oppstod feil i fbm. innhenting av grunnlag for behandling ${behandling.id}. " + - "Innhentingen ble derfor ikke gjort for følgende grunnlag: " + - "${feilrapporteringer.map { "${it.key}: ${it.value}" }}" + "Innhentingen ble derfor ikke gjort for følgende grunnlag: " + + "${feilrapporteringer.map { "${it.key}: ${it.value}" }}" } log.error { "Det oppstod feil i fbm. innhenting av grunnlag for behandling ${behandling.id}. " + - "Innhentingen ble derfor ikke gjort for følgende grunnlagstyper: " + - "${feilrapporteringer.map { it.key }}" + "Innhentingen ble derfor ikke gjort for følgende grunnlagstyper: " + + "${feilrapporteringer.map { it.key }}" } } } else { @@ -133,7 +136,7 @@ class GrunnlagService( log.info { "Grunnlag for behandling ${behandling.id} ble sist innhentet ${behandling.grunnlagSistInnhentet}. " + - "Ny innhenting vil tidligst blir foretatt $nesteInnhenting." + "Ny innhenting vil tidligst blir foretatt $nesteInnhenting." } } } @@ -145,11 +148,13 @@ class GrunnlagService( ) { val rolleGrunnlagErInnhentetFor = when (request.grunnlagstype) { - Grunnlagsdatatype.BOFORHOLD -> behandling.rolleGrunnlagSkalHentesFor - Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> behandling.rolleGrunnlagSkalHentesFor + Grunnlagsdatatype.BOFORHOLD, Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> request.grunnlagstype.innhentesForRolle( + behandling + ) + else -> behandling.roller.find { request.personident?.verdi == it.ident } - ?: behandling.rolleGrunnlagSkalHentesFor + ?: request.grunnlagstype.innhentesForRolle(behandling) } if (Grunnlagsdatatype.BOFORHOLD != request.grunnlagstype) { @@ -168,11 +173,11 @@ class GrunnlagService( if (!harIkkeaktivertGrunnlag) { log.warn { "Fant ingen grunnlag med type ${request.grunnlagstype} å aktivere for i behandling ${behandling.id} " + - " for oppgitt person." + " for oppgitt person." } ressursIkkeFunnetException( "Fant ikke grunnlag av type ${request.grunnlagstype} å aktivere i behandling ${behandling.id} " + - "for oppgitt personident.", + "for oppgitt personident.", ) } @@ -201,7 +206,7 @@ class GrunnlagService( } else { log.error { "Grunnlagstype ${request.grunnlagstype} ikke støttet ved aktivering av grunnlag. Aktivering feilet " + - "for behandling ${behandling.id} " + "for behandling ${behandling.id} " } aktiveringAvGrunnlagstypeIkkeStøttetException(behandling.id!!) } @@ -209,9 +214,10 @@ class GrunnlagService( @Transactional fun oppdatereAktivSivilstandEtterEndretVirkningstidspunkt(behandling: Behandling) { + val grunnlagsdatatype = Grunnlagsdatatype.SIVILSTAND val sisteAktiveGrunnlag = behandling.henteNyesteAktiveGrunnlag( - Grunnlagstype(Grunnlagsdatatype.SIVILSTAND, false), + Grunnlagstype(grunnlagsdatatype, false), behandling.bidragsmottaker!!, ) ?: run { log.warn { "Fant ingen aktive sivilstandsgrunnlag. Gjør ingen endring etter oppdatert virkningstidspunkt" } @@ -225,7 +231,7 @@ class GrunnlagService( ) behandling .henteNyesteAktiveGrunnlag( - Grunnlagstype(Grunnlagsdatatype.SIVILSTAND, true), + Grunnlagstype(grunnlagsdatatype, true), behandling.bidragsmottaker!!, )?.let { it.data = commonObjectmapper.writeValueAsString(sivilstandPeriodisert) @@ -234,9 +240,10 @@ class GrunnlagService( @Transactional fun oppdatereIkkeAktivSivilstandEtterEndretVirkningsdato(behandling: Behandling) { + val grunnlagsdatatype = Grunnlagsdatatype.SIVILSTAND val sisteIkkeAktiveGrunnlag = behandling.henteNyesteIkkeAktiveGrunnlag( - Grunnlagstype(Grunnlagsdatatype.SIVILSTAND, false), + Grunnlagstype(grunnlagsdatatype, false), behandling.bidragsmottaker!!, ) ?: run { log.debug { "Fant ingen ikke-aktive sivilstandsgrunnlag. Gjør ingen endringer" } @@ -252,7 +259,7 @@ class GrunnlagService( behandling .henteNyesteIkkeAktiveGrunnlag( - Grunnlagstype(Grunnlagsdatatype.SIVILSTAND, true), + Grunnlagstype(grunnlagsdatatype, true), behandling.bidragsmottaker!!, )?.let { it.data = commonObjectmapper.writeValueAsString(periodisertHistorikk) @@ -261,10 +268,10 @@ class GrunnlagService( @Transactional fun oppdaterIkkeAktiveBoforholdEtterEndretVirkningstidspunkt(behandling: Behandling) { + val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD val sisteIkkeAktiveGrunnlag = behandling.henteNyesteIkkeAktiveGrunnlag( - Grunnlagstype(Grunnlagsdatatype.BOFORHOLD, false), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagstype(grunnlagsdatatype, false), grunnlagsdatatype.innhentesForRolle(behandling)!!, ) ?: run { log.debug { "Fant ingen ikke-aktive boforholdsgrunnlag. Gjør ingen endringer" } return @@ -277,7 +284,7 @@ class GrunnlagService( val sisteAktiveGrunnlag = behandling.henteNyesteAktiveGrunnlag( Grunnlagstype(Grunnlagsdatatype.BOFORHOLD, false), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!, ) ?: run { log.warn { "Fant ingen aktive boforholdsgrunnlag. Oppdaterer ikke boforhold beregnet etter virkningstidspunkt ble endret" } return @@ -287,10 +294,10 @@ class GrunnlagService( @Transactional fun oppdatereAktiveBoforholdAndreVoksneIHusstandenEtterEndretVirkningstidspunkt(behandling: Behandling) { + val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN val sisteAktiveGrunnlag = behandling.henteNyesteAktiveGrunnlag( - Grunnlagstype(Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, false), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagstype(grunnlagsdatatype, false), grunnlagsdatatype.innhentesForRolle(behandling)!!, ) ?: run { log.warn { "Fant ingen aktive andre voksne i husstanden. Oppdaterer ikke andre voksne i husstanden beregnet etter virkningstidspunkt ble endret" @@ -302,10 +309,10 @@ class GrunnlagService( @Transactional fun oppdatereIkkeAktiveBoforholdAndreVoksneIHusstandenEtterEndretVirkningstidspunkt(behandling: Behandling) { + val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN val sisteIkkeAktiveGrunnlag = behandling.henteNyesteIkkeAktiveGrunnlag( - Grunnlagstype(Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, false), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagstype(grunnlagsdatatype, false), grunnlagsdatatype.innhentesForRolle(behandling)!!, ) ?: run { log.debug { "Fant ingen ikke-aktive andre voksne i husstanden grunnlag. Gjør ingen endringer" } return @@ -358,16 +365,18 @@ class GrunnlagService( perioder: List, rekalkulerOgOverskriveAktiverte: Boolean = true, ) { + val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN + val grunnlagSomSkalOverskrives = if (rekalkulerOgOverskriveAktiverte) { behandling.henteAktiverteGrunnlag( - Grunnlagstype(Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, true), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagstype(grunnlagsdatatype, true), + grunnlagsdatatype.innhentesForRolle(behandling)!!, ) } else { behandling.henteUaktiverteGrunnlag( - Grunnlagstype(Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, true), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagstype(grunnlagsdatatype, true), + grunnlagsdatatype.innhentesForRolle(behandling)!!, ) } grunnlagSomSkalOverskrives.forEach { @@ -381,16 +390,18 @@ class GrunnlagService( perioder: List, rekalkulerOgOverskriveAktiverte: Boolean = true, ) { + val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD + val grunnlagSomSkalOverskrives = if (rekalkulerOgOverskriveAktiverte) { behandling.henteAktiverteGrunnlag( - Grunnlagstype(Grunnlagsdatatype.BOFORHOLD, true), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagstype(grunnlagsdatatype, true), + grunnlagsdatatype.innhentesForRolle(behandling)!!, ) } else { behandling.henteUaktiverteGrunnlag( - Grunnlagstype(Grunnlagsdatatype.BOFORHOLD, true), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagstype(grunnlagsdatatype, true), + grunnlagsdatatype.innhentesForRolle(behandling)!!, ) } grunnlagSomSkalOverskrives.find { it.gjelder == gjelder }?.let { @@ -447,7 +458,7 @@ class GrunnlagService( throw HttpClientErrorException( HttpStatus.NOT_FOUND, "Fant ingen grunnlag av type ${Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN} " + - "å aktivere for BP i behandling ${behandling.id}", + "å aktivere for BP i behandling ${behandling.id}", ) } @@ -469,6 +480,7 @@ class GrunnlagService( gjelderHusstandsmedlem: Personident, overskriveManuelleOpplysninger: Boolean, ) { + val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD val nyesteIkkeAktiverteBoforholdForHusstandsmedlem = behandling.grunnlag .hentSisteIkkeAktiv() @@ -479,25 +491,28 @@ class GrunnlagService( throw HttpClientErrorException( HttpStatus.NOT_FOUND, "Fant ingen grunnlag av type $grunnlagstype å aktivere for oppgitt husstandsmeldem i behandling " + - behandling.id, + behandling.id, ) } val bmsEgneBarnIHusstandenFraNyesteGrunnlagsinnhenting = behandling.grunnlag.hentIdenterForEgneBarnIHusstandFraGrunnlagForRolle( - behandling.rolleGrunnlagSkalHentesFor!!, + grunnlagsdatatype.innhentesForRolle(behandling) ?: throw HttpClientErrorException( + HttpStatus.INTERNAL_SERVER_ERROR, + "Det oppstod en feil ved aktivering av boforhold i behandling ${behandling.id}", + ), ) // TOOD: Vurdere å trigge ny grunnlagsinnhenting if (bmsEgneBarnIHusstandenFraNyesteGrunnlagsinnhenting.isNullOrEmpty()) { log.error { - "Fant ingen husstandsmedlemmer som er barn av ${behandling.rolleGrunnlagSkalHentesFor!!.rolletype} i " + - "nyeste boforholdsgrunnlag i behandling ${behandling.id}" + "Fant ingen husstandsmedlemmer som er barn av ${grunnlagsdatatype.innhentesForRolle(behandling)!!.rolletype} i " + + "nyeste boforholdsgrunnlag i behandling ${behandling.id}" } throw HttpClientErrorException( HttpStatus.INTERNAL_SERVER_ERROR, - "Fant ingen husstandsmedlemmer som er barn av ${behandling.rolleGrunnlagSkalHentesFor!!.rolletype} " + - "i nyeste boforholdsgrunnlag i behandling ${behandling.id}", + "Fant ingen husstandsmedlemmer som er barn av ${grunnlagsdatatype.innhentesForRolle(behandling)!!.rolletype} " + + "i nyeste boforholdsgrunnlag i behandling ${behandling.id}", ) } @@ -514,10 +529,11 @@ class GrunnlagService( } private fun aktivereInnhentetBoforholdsgrunnlagHvisBearbeidetGrunnlagErAktivertForAlleHusstandsmedlemmene(behandling: Behandling) { + val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD val nyesteIkkeBearbeidaBoforholdsgrunnlag = behandling.henteNyesteGrunnlag( - Grunnlagstype(Grunnlagsdatatype.BOFORHOLD, false), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagstype(grunnlagsdatatype, false), + grunnlagsdatatype.innhentesForRolle(behandling)!!, ) nyesteIkkeBearbeidaBoforholdsgrunnlag?.let { @@ -536,6 +552,7 @@ class GrunnlagService( bmsNyesteIkkeBearbeidaBoforholdsgrunnlag: Grunnlag, behandling: Behandling, ): Boolean { + val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD jsonListeTilObjekt(bmsNyesteIkkeBearbeidaBoforholdsgrunnlag.data) .filter { it.gjelderPersonId != null && it.erBarn @@ -544,8 +561,8 @@ class GrunnlagService( }.forEach { val nyesteGrunnlagForHusstandsmedlem = behandling.henteNyesteGrunnlag( - Grunnlagstype(Grunnlagsdatatype.BOFORHOLD, true), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagstype(grunnlagsdatatype, true), + grunnlagsdatatype.innhentesForRolle(behandling)!!, Personident(it.key!!), ) if (nyesteGrunnlagForHusstandsmedlem?.aktiv == null) { @@ -563,10 +580,10 @@ class GrunnlagService( private fun foretaNyGrunnlagsinnhenting(behandling: Behandling): Boolean = behandling.grunnlagSistInnhentet == null || - behandling.grunnlagsinnhentingFeilet != null || - LocalDateTime - .now() - .minusMinutes(grenseInnhenting.toLong()) > behandling.grunnlagSistInnhentet + behandling.grunnlagsinnhentingFeilet != null || + LocalDateTime + .now() + .minusMinutes(grenseInnhenting.toLong()) > behandling.grunnlagSistInnhentet private fun henteOglagreGrunnlag( behandling: Behandling, @@ -606,8 +623,8 @@ class GrunnlagService( if (tekniskFeilVedHentingAvInntekter) { log.warn { "Innhenting av ${Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER} for rolle ${rolleInnhentetFor.rolletype} " + - "i behandling ${behandling.id} feilet for type ${feilVedHentingAvInntekter!!.feiltype} " + - "med begrunnelse ${feilVedHentingAvInntekter.feilmelding}." + "i behandling ${behandling.id} feilet for type ${feilVedHentingAvInntekter!!.feiltype} " + + "med begrunnelse ${feilVedHentingAvInntekter.feilmelding}." } } @@ -630,7 +647,7 @@ class GrunnlagService( // Husstandsmedlem og bostedsperiode innhentetGrunnlag.hentGrunnlagDto?.let { if (behandling.søknadsbarn.isNotEmpty() && - behandling.rolleGrunnlagSkalHentesFor?.ident == grunnlagsrequest.key.verdi && + Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)?.ident == grunnlagsrequest.key.verdi && !innhentingAvBoforholdFeilet ) { periodisereOgLagreBoforhold( @@ -660,6 +677,52 @@ class GrunnlagService( } } + val innhentingAvBarnetilsynFeilet = + feilrapporteringer.filter { Grunnlagsdatatype.BARNETILSYN == it.key }.isNotEmpty() + + // Oppdatere barnetilsyn + innhentetGrunnlag.hentGrunnlagDto?.let { grunnlag -> + if (grunnlag.barnetilsynListe.isNotEmpty() && !innhentingAvBarnetilsynFeilet) { + val nyesteBearbeidaBarnetilsynFørLagring = + sistAktiverteGrunnlag( + behandling, + Grunnlagstype(Grunnlagsdatatype.BARNETILSYN, true), + rolleInnhentetFor, + ) + + // Lagrer barnetilsyn per barn som bearbeida grunnlag + grunnlag.barnetilsynListe.groupBy { it.barnPersonId }.forEach { barnetilsyn -> + lagreGrunnlagHvisEndret( + behandling, + rolleInnhentetFor, + Grunnlagstype(Grunnlagsdatatype.BARNETILSYN, true), + barnetilsyn.value.toSet(), + null, + Personident(barnetilsyn.key), + ) + } + + val nyesteBearbeidaBarnetilsynEtterLagring = + sistAktiverteGrunnlag( + behandling, + Grunnlagstype(Grunnlagsdatatype.BARNETILSYN, true), + rolleInnhentetFor, + ) + + if (nyesteBearbeidaBarnetilsynFørLagring.isEmpty() && nyesteBearbeidaBarnetilsynEtterLagring.isNotEmpty()) { + grunnlag.barnetilsynListe.groupBy { it.barnPersonId }.forEach { barnetilsyn -> + behandling.underholdskostnader.find { it.person.personident?.verdi == barnetilsyn.key }?.let { + if (it.barnetilsyn.isEmpty()) { + it.barnetilsyn.addAll(barnetilsyn.value.toSet().tilBarnetilsyn(it)) + } + } + } + } + + aktivereSivilstandHvisEndringIkkeKreverGodkjenning(behandling) + } + } + return feilrapporteringer } @@ -746,6 +809,7 @@ class GrunnlagService( behandling: Behandling, husstandsmedlemmerOgEgneBarn: Set, ) { + val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD val boforholdPeriodisert = BoforholdApi.beregnBoforholdBarnV3( behandling.virkningstidspunktEllerSøktFomDato, @@ -756,8 +820,8 @@ class GrunnlagService( val nyesteBearbeidaBoforholdFørLagring = sistAktiverteGrunnlag( behandling, - Grunnlagstype(Grunnlagsdatatype.BOFORHOLD, true), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagstype(grunnlagsdatatype, true), + grunnlagsdatatype.innhentesForRolle(behandling)!!, ) // lagre bearbeidet grunnlag per husstandsmedlem i grunnlagstabellen @@ -767,8 +831,8 @@ class GrunnlagService( .forEach { lagreGrunnlagHvisEndret( behandling = behandling, - innhentetForRolle = behandling.rolleGrunnlagSkalHentesFor!!, - grunnlagstype = Grunnlagstype(Grunnlagsdatatype.BOFORHOLD, true), + innhentetForRolle = grunnlagsdatatype.innhentesForRolle(behandling)!!, + grunnlagstype = Grunnlagstype(grunnlagsdatatype, true), innhentetGrunnlag = it.value.toSet(), gjelderPerson = Personident(it.key!!), ) @@ -777,8 +841,8 @@ class GrunnlagService( val innhentetRollesNyesteBearbeidaBoforholdEtterLagring = sistAktiverteGrunnlag( behandling, - Grunnlagstype(Grunnlagsdatatype.BOFORHOLD, true), - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagstype(grunnlagsdatatype, true), + grunnlagsdatatype.innhentesForRolle(behandling)!!, ) // oppdatere husstandsmedlem og bostatusperiode-tabellene hvis førstegangslagring @@ -799,9 +863,9 @@ class GrunnlagService( if (endringerSomMåBekreftes == null || endringerSomMåBekreftes.perioder.isEmpty()) { log.info { "Bps ikke aktive boforholdsgrunnlag med type " + - "${Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN} i behandling ${behandling.id} har " + - "ingen endringer som må bekreftes av saksbehandler. Automatisk aktiverer ny innhentet " + - "grunnlag." + "${Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN} i behandling ${behandling.id} har " + + "ingen endringer som må bekreftes av saksbehandler. Automatisk aktiverer ny innhentet " + + "grunnlag." } ikkeAktiveGrunnlag .hentGrunnlagForType( @@ -813,8 +877,15 @@ class GrunnlagService( } } + fun aktivereBarnetilsynHvisIngenEndringerMåAksepteres(behandling: Behandling) { + val ikkeAktiveGrunnlag = behandling.grunnlag.hentAlleIkkeAktiv() + val aktiveGrunnlag = behandling.grunnlag.hentAlleAktiv() + if (ikkeAktiveGrunnlag.isEmpty()) return + val endringerSomMåBekreftes = ikkeAktiveGrunnlag.henteEndringerIBoforhold(aktiveGrunnlag, behandling) + } + fun aktiverGrunnlagForBoforholdHvisIngenEndringerMåAksepteres(behandling: Behandling) { - val rolleInhentetFor = behandling.rolleGrunnlagSkalHentesFor!! + val rolleInhentetFor = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!! val ikkeAktiveGrunnlag = behandling.grunnlag.hentAlleIkkeAktiv() val aktiveGrunnlag = behandling.grunnlag.hentAlleAktiv() if (ikkeAktiveGrunnlag.isEmpty()) return @@ -831,9 +902,9 @@ class GrunnlagService( .find { it.gjelder != null && it.gjelder == hb.ident } ?: return@forEach log.info { "Ikke aktive boforhold grunnlag ${ikkeAktivGrunnlag.id} med type ${Grunnlagsdatatype.BOFORHOLD}" + - " for rolle ${rolleInhentetFor.rolletype}" + - " i behandling ${behandling.id} har ingen endringer som må bekreftes av saksbehandler. " + - "Automatisk aktiverer ny innhentet grunnlag." + " for rolle ${rolleInhentetFor.rolletype}" + + " i behandling ${behandling.id} har ingen endringer som må bekreftes av saksbehandler. " + + "Automatisk aktiverer ny innhentet grunnlag." } ikkeAktivGrunnlag.aktiv = LocalDateTime.now() } @@ -872,11 +943,11 @@ class GrunnlagService( private fun innhentetGrunnlagInneholderInntekterEllerYtelser(innhentetGrunnlag: HentGrunnlagDto): Boolean = innhentetGrunnlag.ainntektListe.size > 0 || - innhentetGrunnlag.skattegrunnlagListe.size > 0 || - innhentetGrunnlag.barnetilleggListe.size > 0 || - innhentetGrunnlag.kontantstøtteListe.size > 0 || - innhentetGrunnlag.småbarnstilleggListe.size > 0 || - innhentetGrunnlag.utvidetBarnetrygdListe.size > 0 + innhentetGrunnlag.skattegrunnlagListe.size > 0 || + innhentetGrunnlag.barnetilleggListe.size > 0 || + innhentetGrunnlag.kontantstøtteListe.size > 0 || + innhentetGrunnlag.småbarnstilleggListe.size > 0 || + innhentetGrunnlag.utvidetBarnetrygdListe.size > 0 private fun sammenstilleOgLagreInntekter( behandling: Behandling, @@ -906,15 +977,15 @@ class GrunnlagService( ) { log.warn { "Feil ved innhenting av grunnlagstype $type for rolle ${rolleInhentetFor.rolletype} " + - "i behandling ${behandling.id}. Lagrer ikke sammenstilte inntekter. Feilmelding: " + - feilrapportering.feilmelding + "i behandling ${behandling.id}. Lagrer ikke sammenstilte inntekter. Feilmelding: " + + feilrapportering.feilmelding } return@forEach } log.info { "Ignorerer funksjonell feil ved grunnlagsinnhenting av grunnlag $type for rolle " + - "${rolleInhentetFor.rolletype} i behandling ${behandling.id}. Feilmelding: " + - feilrapportering.feilmelding + "${rolleInhentetFor.rolletype} i behandling ${behandling.id}. Feilmelding: " + + feilrapportering.feilmelding } } @@ -942,7 +1013,7 @@ class GrunnlagService( } else { log.error { "Grunnlagsdatatype $type skal ikke lagres som inntektsgrunnlag i behandling " + - rolleInhentetFor.behandling.id!! + rolleInhentetFor.behandling.id!! } lagringAvGrunnlagFeiletException(rolleInhentetFor.behandling.id!!) } @@ -968,8 +1039,8 @@ class GrunnlagService( if (!inneholderEndringerSomMåBekreftes) { log.info { "Ikke aktive grunnlag med type $type for rolle ${rolleInhentetFor.rolletype}" + - " i behandling ${behandling.id} har ingen endringer som må bekreftes av saksbehandler. " + - "Automatisk aktiverer ny innhentet grunnlag." + " i behandling ${behandling.id} har ingen endringer som må bekreftes av saksbehandler. " + + "Automatisk aktiverer ny innhentet grunnlag." } ikkeAktiveGrunnlag .hentGrunnlagForType(type, rolleInhentetFor.ident!!) @@ -992,7 +1063,7 @@ class GrunnlagService( SummerteInntekter( versjon = sammenstilteInntekter.versjon, inntekter = - sammenstilteInntekter.summertÅrsinntektListe.filter { summertAinntektstyper.contains(it.inntektRapportering) } + + sammenstilteInntekter.summertÅrsinntektListe.filter { summertAinntektstyper.contains(it.inntektRapportering) } + sammenstilteInntekter.summertÅrsinntektListe.filter { summertSkattegrunnlagstyper.contains(it.inntektRapportering) }, @@ -1081,7 +1152,7 @@ class GrunnlagService( } catch (exception: Exception) { log.warn { "Exception oppstod ved parsing av nyeste bearbeida sivilstandsgrunnlag: ${exception.message}. " + - "Dette skyldes mest sannsynlig gamle data." + "Dette skyldes mest sannsynlig gamle data." } return emptySet() } @@ -1119,10 +1190,10 @@ class GrunnlagService( val skalLagres = innhentetGrunnlag.isNotEmpty() || - Grunnlagstype( - Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, - false, - ) == grunnlagstype + Grunnlagstype( + Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, + false, + ) == grunnlagstype if (erFørstegangsinnhenting && skalLagres || erGrunnlagEndret && nyesteGrunnlag?.aktiv != null) { val aktivert = @@ -1152,7 +1223,7 @@ class GrunnlagService( log.info { "Oppdaterer uaktivert grunnlag ${grunnlagSomSkalOppdateres.id} " + - "i behandling ${behandling.id} med ny innhentet grunnlagsdata" + "i behandling ${behandling.id} med ny innhentet grunnlagsdata" } grunnlagSomSkalOppdateres.data = tilJson(innhentetGrunnlag) grunnlagSomSkalOppdateres.innhentet = LocalDateTime.now() @@ -1161,11 +1232,11 @@ class GrunnlagService( uaktiverteGrunnlag.filter { it.id != grunnlagSomSkalOppdateres.id }.forEach { log.info { "Sletter grunnlag ${it.id} fra behandling ${behandling.id} " + - "fordi den er duplikat av grunnlag ${grunnlagSomSkalOppdateres.id}" + "fordi den er duplikat av grunnlag ${grunnlagSomSkalOppdateres.id}" } secureLogger.info { "Sletter grunnlag ${it.id} fra behandling ${behandling.id} " + - "fordi den er duplikat av grunnlag ${grunnlagSomSkalOppdateres.id}: $it" + "fordi den er duplikat av grunnlag ${grunnlagSomSkalOppdateres.id}: $it" } behandling.grunnlag.remove(it) grunnlagRepository.deleteById(it.id!!) @@ -1306,13 +1377,13 @@ class GrunnlagService( innhentet = hentetTidspunkt, // Summerte månedsinntekter settes alltid til aktiv aktiv = - if (nyesteGrunnlag?.aktiv != null && - Grunnlagsdatatype.SUMMERTE_MÅNEDSINNTEKTER != grunnlagstype.type.getOrMigrate() - ) { - aktiveringstidspunkt - } else { - LocalDateTime.now() - }, + if (nyesteGrunnlag?.aktiv != null && + Grunnlagsdatatype.SUMMERTE_MÅNEDSINNTEKTER != grunnlagstype.type.getOrMigrate() + ) { + aktiveringstidspunkt + } else { + LocalDateTime.now() + }, idTilRolleInnhentetFor = rolle.id!!, ) if (grunnlagstype.erBearbeidet && aktiveringstidspunkt != null) { @@ -1388,9 +1459,9 @@ class GrunnlagService( grunnlag .filter { it.type == grunnlagstype.type && - it.rolle.id == rolle.id && - grunnlagstype.erBearbeidet == it.erBearbeidet && - it.gjelder == gjelder?.verdi + it.rolle.id == rolle.id && + grunnlagstype.erBearbeidet == it.erBearbeidet && + it.gjelder == gjelder?.verdi }.toSet() .maxByOrNull { it.innhentet } @@ -1413,9 +1484,9 @@ class GrunnlagService( .hentSisteAktiv() .find { it.type == grunnlagstype.type && - it.rolle.id == rolle.id && - it.gjelder == gjelderPerson?.verdi && - grunnlagstype.erBearbeidet == it.erBearbeidet + it.rolle.id == rolle.id && + it.gjelder == gjelderPerson?.verdi && + grunnlagstype.erBearbeidet == it.erBearbeidet }?.let { commonObjectmapper.readValue>(it.data) } ?.toSet() ?: emptySet() @@ -1427,8 +1498,8 @@ class GrunnlagService( .hentSisteAktiv() .find { it.rolle.id == rolle.id && - it.type == grunnlagstype.type.getOrMigrate() && - it.erBearbeidet == grunnlagstype.erBearbeidet + it.type == grunnlagstype.type.getOrMigrate() && + it.erBearbeidet == grunnlagstype.erBearbeidet }?.let { commonObjectmapper.readValue(it.data) } private fun lagreGrunnlagHvisEndret( @@ -1454,8 +1525,8 @@ class GrunnlagService( } else { log.warn { "Innhenting av $it for rolle ${rolleInhentetFor.rolletype} " + "i behandling ${behandling.id} " + - "feilet for type ${feilrapportering.grunnlagstype} med begrunnelse " + - "${feilrapportering.feilmelding}. Lagrer ikke grunnlag" + "feilet for type ${feilrapportering.grunnlagstype} med begrunnelse " + + "${feilrapportering.feilmelding}. Lagrer ikke grunnlag" } } } @@ -1633,7 +1704,7 @@ class GrunnlagService( else -> { log.warn { "Forsøkte å lagre grunnlag av type $grunnlagsdatatype for rolle ${rolleInhentetFor.rolletype} " + - "i behandling ${behandling.id}" + "i behandling ${behandling.id}" } lagringAvGrunnlagFeiletException(behandling.id!!) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatOpplysningerService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatOpplysningerService.kt index 4dd27e092..7bbf74670 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatOpplysningerService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatOpplysningerService.kt @@ -16,6 +16,7 @@ import no.nav.bidrag.behandling.dto.v2.behandling.SærbidragUtgifterDto import no.nav.bidrag.behandling.dto.v2.behandling.TotalBeregningUtgifterDto import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftBeregningDto import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftspostDto +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.service.NotatService.Companion.henteInntektsnotat import no.nav.bidrag.behandling.service.NotatService.Companion.henteNotatinnhold import no.nav.bidrag.behandling.transformers.Dtomapper @@ -165,7 +166,7 @@ class NotatOpplysningerService( .hentAlleBearbeidaBoforhold( behandling.virkningstidspunktEllerSøktFomDato, behandling.husstandsmedlem, - behandling.rolleGrunnlagSkalHentesFor!!, + Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!, ) val opplysningerSivilstand = @@ -358,7 +359,7 @@ class NotatOpplysningerService( private fun Behandling.tilNotatBoforhold(): NotatBegrunnelseDto = NotatBegrunnelseDto( innhold = henteNotatinnhold(this, NotatType.BOFORHOLD), - gjelder = this.rolleGrunnlagSkalHentesFor!!.tilNotatRolle(), + gjelder = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(this)!!.tilNotatRolle(), ) private fun Behandling.tilNotatVirkningstidspunkt() = diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt index c7cb7f86d..de076f5ec 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt @@ -28,12 +28,7 @@ class NotatService { } ?: run { log.info { "Legger til notat av type $notattype for rolle med id ${rolle.id} i behandling ${behandling.id}" } behandling.notater.add( - Notat( - behandling = behandling, - rolle = rolle ?: behandling.rolleGrunnlagSkalHentesFor!!, - innhold = notattekst, - type = notattype, - ), + Notat(behandling = behandling, rolle = rolle, innhold = notattekst, type = notattype), ) } } @@ -79,7 +74,8 @@ class NotatService { fun henteUnderholdsnotat( behandling: Behandling, rolle: Rolle, - ): String? = behandling.notater.find { it.rolle.id == rolle.id!! && Notattype.UNDERHOLDSKOSTNAD == it.type }?.innhold + ): String? = + behandling.notater.find { it.rolle.id == rolle.id!! && Notattype.UNDERHOLDSKOSTNAD == it.type }?.innhold fun henteInntektsnotat( behandling: Behandling, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt index 5e8d8d38a..ae6ee3991 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt @@ -181,7 +181,7 @@ class UnderholdService( return OppdatereUnderholdResponse( stønadTilBarnetilsyn = oppdatertBarnetilsyn.tilStønadTilBarnetilsynDto(), underholdskostnad = - dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(underholdskostnad.behandling), + dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(underholdskostnad.behandling), valideringsfeil = underholdskostnad.barnetilsyn.validerePerioder(), ) } @@ -219,9 +219,9 @@ class UnderholdService( return OppdatereUnderholdResponse( faktiskTilsynsutgift = dtomapper.tilFaktiskTilsynsutgiftDto(oppdatertFaktiskTilsynsutgift), underholdskostnad = - dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn( - underholdskostnad.behandling, - ), + dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn( + underholdskostnad.behandling, + ), valideringsfeil = underholdskostnad.barnetilsyn.validerePerioder(), ) } @@ -256,7 +256,7 @@ class UnderholdService( return OppdatereUnderholdResponse( tilleggsstønad = dtomapper.tilTilleggsstønadDto(oppdatertTilleggsstønad), underholdskostnad = - dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(underholdskostnad.behandling), + dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(underholdskostnad.behandling), valideringsfeil = underholdskostnad.barnetilsyn.validerePerioder(), ) } 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 2e7f53157..637438b9b 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt @@ -50,8 +50,10 @@ import no.nav.bidrag.behandling.transformers.behandling.erLik import no.nav.bidrag.behandling.transformers.behandling.hentEndringerInntekter import no.nav.bidrag.behandling.transformers.behandling.hentEndringerSivilstand import no.nav.bidrag.behandling.transformers.behandling.henteEndringerIArbeidsforhold +import no.nav.bidrag.behandling.transformers.behandling.henteEndringerIBarnetilsyn import no.nav.bidrag.behandling.transformers.behandling.henteEndringerIBoforhold import no.nav.bidrag.behandling.transformers.behandling.henteRolleForNotat +import no.nav.bidrag.behandling.transformers.behandling.tilBarnetilsynAktiveGrunnlagDto import no.nav.bidrag.behandling.transformers.behandling.tilDto import no.nav.bidrag.behandling.transformers.behandling.tilGrunnlagsinnhentingsfeil import no.nav.bidrag.behandling.transformers.behandling.tilInntektDtoV2 @@ -114,7 +116,8 @@ class Dtomapper( fun tilUnderholdDto(underholdskostnad: Underholdskostnad) = underholdskostnad.tilDto() - fun tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(behandling: Behandling) = behandling.tilBeregnetUnderholdskostnad() + fun tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(behandling: Behandling) = + behandling.tilBeregnetUnderholdskostnad() fun tilFaktiskTilsynsutgiftDto(faktiskTilsynsutgift: FaktiskTilsynsutgift) = faktiskTilsynsutgift.tilDto() @@ -125,10 +128,10 @@ class Dtomapper( boforhold = behandling.tilBoforholdV2(), inntekter = behandling.tilInntektDtoV2(behandling.grunnlagListe.toSet().hentSisteAktiv(), true), aktiveGrunnlagsdata = - behandling.grunnlagListe - .toSet() - .hentSisteAktiv() - .tilAktiveGrunnlagsdata(), + behandling.grunnlagListe + .toSet() + .hentSisteAktiv() + .tilAktiveGrunnlagsdata(), ikkeAktiverteEndringerIGrunnlagsdata = behandling.ikkeAktiveGrunnlagsdata(), ) @@ -170,15 +173,15 @@ class Dtomapper( gjelderBarn = this.person.tilPersoninfoDto(rolleSøknadsbarn), faktiskTilsynsutgift = this.faktiskeTilsynsutgifter.tilFaktiskeTilsynsutgiftDtos(), stønadTilBarnetilsyn = - rolleSøknadsbarn?.let { this.barnetilsyn.tilStønadTilBarnetilsynDtos() } - ?: emptySet(), + rolleSøknadsbarn?.let { this.barnetilsyn.tilStønadTilBarnetilsynDtos() } + ?: emptySet(), tilleggsstønad = rolleSøknadsbarn?.let { this.tilleggsstønad.tilTilleggsstønadDtos() } ?: emptySet(), underholdskostnad = rolleSøknadsbarn?.let { this.behandling.tilBeregnetUnderholdskostnad() } ?: emptySet(), begrunnelse = - NotatService.henteUnderholdsnotat( - this.behandling, - rolleSøknadsbarn ?: this.behandling.bidragsmottaker!!, - ), + NotatService.henteUnderholdsnotat( + this.behandling, + rolleSøknadsbarn ?: this.behandling.bidragsmottaker!!, + ), ) } @@ -190,6 +193,14 @@ class Dtomapper( this.søknadsbarn.first(), ) + try { + val t1 = beregnBarnebidragApi.beregnNettoTilsynsutgiftOgUnderholdskostnad(grunnlag) + val t2 = t1.finnAlleDelberegningUnderholdskostnad() + val t3 = t2.tilUnderholdskostnadDto() + } catch (e: Exception) { + e.printStackTrace() + } + return beregnBarnebidragApi .beregnNettoTilsynsutgiftOgUnderholdskostnad(grunnlag) .finnAlleDelberegningUnderholdskostnad() @@ -256,10 +267,10 @@ class Dtomapper( kategori = tilSærbidragKategoriDto(), maksGodkjentBeløp = utgift.tilMaksGodkjentBeløpDto(), begrunnelse = - BegrunnelseDto( - innhold = henteNotatinnhold(this, NotatType.UTGIFTER), - gjelder = this.henteRolleForNotat(NotatType.UTGIFTER, null).tilDto(), - ), + BegrunnelseDto( + innhold = henteNotatinnhold(this, NotatType.UTGIFTER), + gjelder = this.henteRolleForNotat(NotatType.UTGIFTER, null).tilDto(), + ), utgifter = utgift.utgiftsposter.sorter().map { it.tilDto() }, valideringsfeil = valideringsfeil, totalBeregning = utgift.tilTotalBeregningDto(), @@ -270,10 +281,10 @@ class Dtomapper( avslag = avslag, kategori = tilSærbidragKategoriDto(), begrunnelse = - BegrunnelseDto( - innhold = henteNotatinnhold(this, NotatType.UTGIFTER), - gjelder = this.henteRolleForNotat(NotatType.UTGIFTER, null).tilDto(), - ), + BegrunnelseDto( + innhold = henteNotatinnhold(this, NotatType.UTGIFTER), + gjelder = this.henteRolleForNotat(NotatType.UTGIFTER, null).tilDto(), + ), valideringsfeil = utgift.hentValideringsfeil(), ) } else { @@ -324,10 +335,10 @@ class Dtomapper( kostpenger = this.kostpenger ?: BigDecimal.ZERO, kommentar = this.kommentar, total = - beregnBarnebidragApi.beregnMånedsbeløpFaktiskeUtgifter( - faktiskUtgift = this.tilsynsutgift, - kostpenger = this.kostpenger ?: BigDecimal.ZERO, - ) ?: BigDecimal.ZERO, + beregnBarnebidragApi.beregnMånedsbeløpFaktiskeUtgifter( + faktiskUtgift = this.tilsynsutgift, + kostpenger = this.kostpenger ?: BigDecimal.ZERO, + ) ?: BigDecimal.ZERO, ) fun Set.tilFaktiskeTilsynsutgiftDtos() = this.map { it.tilDto() }.toSet() @@ -341,92 +352,92 @@ class Dtomapper( ) return BoforholdBarn( gjelder = - NotatRolleDto( - rolle = null, - navn = tilgangskontrollertPersoninfo.navn, - fødselsdato = tilgangskontrollertPersoninfo.fødselsdato, - ident = tilgangskontrollertPersoninfo.ident, - erBeskyttet = tilgangskontrollertPersoninfo.erBeskyttet, - ), + NotatRolleDto( + rolle = null, + navn = tilgangskontrollertPersoninfo.navn, + fødselsdato = tilgangskontrollertPersoninfo.fødselsdato, + ident = tilgangskontrollertPersoninfo.ident, + erBeskyttet = tilgangskontrollertPersoninfo.erBeskyttet, + ), kilde = kilde, medIBehandling = behandling.roller.any { it.ident == this.ident }, opplysningerFraFolkeregisteret = - opplysningerBoforhold - .filter { - it.gjelderPersonId == this.ident - }.map { - OpplysningerFraFolkeregisteret( - periode = - ÅrMånedsperiode( - it.periodeFom, - it.periodeTom, - ), - status = it.bostatus, - ) - }, - opplysningerBruktTilBeregning = - perioder.sortedBy { it.datoFom }.map { periode -> - OpplysningerBruktTilBeregning( + opplysningerBoforhold + .filter { + it.gjelderPersonId == this.ident + }.map { + OpplysningerFraFolkeregisteret( periode = - ÅrMånedsperiode( - periode.datoFom!!, - periode.datoTom, - ), - status = periode.bostatus, - kilde = periode.kilde, + ÅrMånedsperiode( + it.periodeFom, + it.periodeTom, + ), + status = it.bostatus, ) }, + opplysningerBruktTilBeregning = + perioder.sortedBy { it.datoFom }.map { periode -> + OpplysningerBruktTilBeregning( + periode = + ÅrMånedsperiode( + periode.datoFom!!, + periode.datoTom, + ), + status = periode.bostatus, + kilde = periode.kilde, + ) + }, ) } private fun Behandling.andreVoksneIHusstanden(): NotatAndreVoksneIHusstanden = NotatAndreVoksneIHusstanden( opplysningerFraFolkeregisteret = - grunnlag - .find { Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN == it.type && it.erBearbeidet } - .konvertereData>() - ?.map { - val periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom) - OpplysningerFraFolkeregisteretMedDetaljer( - periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), - status = it.bostatus!!, - detaljer = - NotatAndreVoksneIHusstandenDetaljerDto( - henteAndreVoksneIHusstanden(grunnlag, periode, true).size, - husstandsmedlemmer = - henteBegrensetAntallAndreVoksne(grunnlag, periode, true).map { voksen -> - - val navn = - if (voksen.erBeskyttet) { - val fødselssår = - voksen.fødselsdato?.let { ", født ${voksen.fødselsdato.year}" } ?: "" - "Person skjermet$fødselssår" - } else { - voksen.navn - } - - NotatVoksenIHusstandenDetaljerDto( - navn = navn, - fødselsdato = if (voksen.erBeskyttet) null else voksen.fødselsdato, - harRelasjonTilBp = voksen.harRelasjonTilBp, - erBeskyttet = voksen.erBeskyttet, - ) - }, - ), - ) - }?.toList() ?: emptyList(), - opplysningerBruktTilBeregning = - husstandsmedlem.voksneIHusstanden?.perioder?.sortedBy { it.datoFom }?.map { periode -> - OpplysningerBruktTilBeregning( - periode = - ÅrMånedsperiode( - periode.datoFom!!, - periode.datoTom, - ), - status = periode.bostatus, - kilde = periode.kilde, + grunnlag + .find { Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN == it.type && it.erBearbeidet } + .konvertereData>() + ?.map { + val periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom) + OpplysningerFraFolkeregisteretMedDetaljer( + periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), + status = it.bostatus!!, + detaljer = + NotatAndreVoksneIHusstandenDetaljerDto( + henteAndreVoksneIHusstanden(grunnlag, periode, true).size, + husstandsmedlemmer = + henteBegrensetAntallAndreVoksne(grunnlag, periode, true).map { voksen -> + + val navn = + if (voksen.erBeskyttet) { + val fødselssår = + voksen.fødselsdato?.let { ", født ${voksen.fødselsdato.year}" } ?: "" + "Person skjermet$fødselssår" + } else { + voksen.navn + } + + NotatVoksenIHusstandenDetaljerDto( + navn = navn, + fødselsdato = if (voksen.erBeskyttet) null else voksen.fødselsdato, + harRelasjonTilBp = voksen.harRelasjonTilBp, + erBeskyttet = voksen.erBeskyttet, + ) + }, + ), ) - } ?: emptyList(), + }?.toList() ?: emptyList(), + opplysningerBruktTilBeregning = + husstandsmedlem.voksneIHusstanden?.perioder?.sortedBy { it.datoFom }?.map { periode -> + OpplysningerBruktTilBeregning( + periode = + ÅrMånedsperiode( + periode.datoFom!!, + periode.datoTom, + ), + status = periode.bostatus, + kilde = periode.kilde, + ) + } ?: emptyList(), ) private fun Behandling.ikkeAktiveGrunnlagsdata(): IkkeAktiveGrunnlagsdata { @@ -437,63 +448,68 @@ class Dtomapper( val aktiveGrunnlag = behandling.grunnlagListe.toSet().hentSisteAktiv() return IkkeAktiveGrunnlagsdata( inntekter = - IkkeAktiveInntekter( - årsinntekter = - roller - .flatMap { - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( - it, - inntekter, - Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER, - ) - }.toSet(), - småbarnstillegg = - roller - .flatMap { - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( - it, - inntekter, - Grunnlagsdatatype.SMÅBARNSTILLEGG, - ) - }.toSet(), - utvidetBarnetrygd = - roller - .flatMap { - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( - it, - inntekter, - Grunnlagsdatatype.UTVIDET_BARNETRYGD, - ) - }.toSet(), - kontantstøtte = - roller - .flatMap { - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( - it, - inntekter, - Grunnlagsdatatype.KONTANTSTØTTE, - ) - }.toSet(), - barnetillegg = - roller - .flatMap { - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( - it, - inntekter, - Grunnlagsdatatype.BARNETILLEGG, - ) - }.toSet(), - ), + IkkeAktiveInntekter( + årsinntekter = + roller + .flatMap { + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( + it, + inntekter, + Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER, + ) + }.toSet(), + småbarnstillegg = + roller + .flatMap { + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( + it, + inntekter, + Grunnlagsdatatype.SMÅBARNSTILLEGG, + ) + }.toSet(), + utvidetBarnetrygd = + roller + .flatMap { + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( + it, + inntekter, + Grunnlagsdatatype.UTVIDET_BARNETRYGD, + ) + }.toSet(), + kontantstøtte = + roller + .flatMap { + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( + it, + inntekter, + Grunnlagsdatatype.KONTANTSTØTTE, + ) + }.toSet(), + barnetillegg = + roller + .flatMap { + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( + it, + inntekter, + Grunnlagsdatatype.BARNETILLEGG, + ) + }.toSet(), + ), arbeidsforhold = sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIArbeidsforhold(aktiveGrunnlag), husstandsmedlem = - sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIBoforhold(aktiveGrunnlag, behandling), + sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIBoforhold(aktiveGrunnlag, behandling), andreVoksneIHusstanden = - sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIAndreVoksneIBpsHusstand(aktiveGrunnlag), + sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIAndreVoksneIBpsHusstand(aktiveGrunnlag), sivilstand = - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerSivilstand( - aktiveGrunnlag, - behandling.virkningstidspunktEllerSøktFomDato, - ), + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerSivilstand( + aktiveGrunnlag, + behandling.virkningstidspunktEllerSøktFomDato, + ), + barnetilsyn = + sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIBarnetilsyn( + aktiveGrunnlag.toSet(), + behandling, + ), ) } @@ -506,27 +522,27 @@ class Dtomapper( if (aktiveData != null && nyeData != null && !nyeData.erLik(aktiveData)) { return AndreVoksneIHusstandenGrunnlagDto( perioder = - nyeData - .asSequence() - .filter { it.bostatus != null } - .map { - PeriodeAndreVoksneIHusstanden( - periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), - status = it.bostatus!!, - totalAntallHusstandsmedlemmer = - toSet() - .hentAlleAndreVoksneHusstandForPeriode( - ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), - false, - ).size, - husstandsmedlemmer = - toSet() - .hentBegrensetAndreVoksneHusstandForPeriode( - ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), - false, - ), - ) - }.toSet(), + nyeData + .asSequence() + .filter { it.bostatus != null } + .map { + PeriodeAndreVoksneIHusstanden( + periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), + status = it.bostatus!!, + totalAntallHusstandsmedlemmer = + toSet() + .hentAlleAndreVoksneHusstandForPeriode( + ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), + false, + ).size, + husstandsmedlemmer = + toSet() + .hentBegrensetAndreVoksneHusstandForPeriode( + ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), + false, + ), + ) + }.toSet(), innhentet = nyttGrunnlag?.innhentet ?: LocalDateTime.now(), ) } @@ -562,35 +578,35 @@ class Dtomapper( søknadsid = soknadsid, behandlerenhet = behandlerEnhet, roller = - roller.map { it.tilDto() }.toSet(), + roller.map { it.tilDto() }.toSet(), søknadRefId = soknadRefId, vedtakRefId = refVedtaksid, virkningstidspunkt = - VirkningstidspunktDto( - virkningstidspunkt = virkningstidspunkt, - opprinneligVirkningstidspunkt = opprinneligVirkningstidspunkt, - årsak = årsak, - avslag = avslag, - begrunnelse = BegrunnelseDto(henteNotatinnhold(this, NotatType.VIRKNINGSTIDSPUNKT)), - ), + VirkningstidspunktDto( + virkningstidspunkt = virkningstidspunkt, + opprinneligVirkningstidspunkt = opprinneligVirkningstidspunkt, + årsak = årsak, + avslag = avslag, + begrunnelse = BegrunnelseDto(henteNotatinnhold(this, NotatType.VIRKNINGSTIDSPUNKT)), + ), boforhold = tilBoforholdV2(), inntekter = - tilInntektDtoV2( - grunnlag.hentSisteAktiv(), - inkluderHistoriskeInntekter = inkluderHistoriskeInntekter, - ), + tilInntektDtoV2( + grunnlag.hentSisteAktiv(), + inkluderHistoriskeInntekter = inkluderHistoriskeInntekter, + ), underholdskostnader = underholdskostnader.tilDtos(), aktiveGrunnlagsdata = grunnlag.hentSisteAktiv().tilAktiveGrunnlagsdata(), utgift = tilUtgiftDto(), samvær = tilSamværDto(), ikkeAktiverteEndringerIGrunnlagsdata = if (kanBehandles) ikkeAktiverteEndringerIGrunnlagsdata else IkkeAktiveGrunnlagsdata(), feilOppståttVedSisteGrunnlagsinnhenting = - grunnlagsinnhentingFeilet?.let { - val typeRef: TypeReference> = - object : TypeReference>() {} + grunnlagsinnhentingFeilet?.let { + val typeRef: TypeReference> = + object : TypeReference>() {} - objectmapper.readValue(it, typeRef).tilGrunnlagsinnhentingsfeil(this) - }, + objectmapper.readValue(it, typeRef).tilGrunnlagsinnhentingsfeil(this) + }, kanBehandlesINyLøsning = kanBehandles, kanIkkeBehandlesBegrunnelse = kanIkkeBehandlesBegrunnelse, ) @@ -599,57 +615,57 @@ class Dtomapper( private fun Husstandsmedlem.mapTilOppdatereBoforholdResponse() = OppdatereBoforholdResponse( oppdatertePerioderMedAndreVoksne = - (rolle?.rolletype == Rolletype.BIDRAGSPLIKTIG).ifTrue { perioder.tilBostatusperiode() } ?: emptySet(), + (rolle?.rolletype == Rolletype.BIDRAGSPLIKTIG).ifTrue { perioder.tilBostatusperiode() } ?: emptySet(), oppdatertHusstandsmedlem = - (rolle?.rolletype != Rolletype.BIDRAGSPLIKTIG).ifTrue { - tilBostatusperiode() - }, + (rolle?.rolletype != Rolletype.BIDRAGSPLIKTIG).ifTrue { + tilBostatusperiode() + }, egetBarnErEnesteVoksenIHusstanden = behandling.egetBarnErEnesteVoksenIHusstanden, valideringsfeil = - BoforholdValideringsfeil( - andreVoksneIHusstanden = - behandling.husstandsmedlem.voksneIHusstanden - ?.validereAndreVoksneIHusstanden(behandling.virkningstidspunktEllerSøktFomDato), - husstandsmedlem = - behandling.husstandsmedlem.barn - .toSet() - .validerBoforhold(behandling.virkningstidspunktEllerSøktFomDato) - .filter { it.harFeil }, - ), + BoforholdValideringsfeil( + andreVoksneIHusstanden = + behandling.husstandsmedlem.voksneIHusstanden + ?.validereAndreVoksneIHusstanden(behandling.virkningstidspunktEllerSøktFomDato), + husstandsmedlem = + behandling.husstandsmedlem.barn + .toSet() + .validerBoforhold(behandling.virkningstidspunktEllerSøktFomDato) + .filter { it.harFeil }, + ), beregnetBoforhold = behandling.tilBeregnetBoforhold(), ) private fun Behandling.tilBoforholdV2() = BoforholdDtoV2( husstandsmedlem = - husstandsmedlem.barn - .toSet() - .sortert() - .map { it.tilBostatusperiode() } - .toSet(), + husstandsmedlem.barn + .toSet() + .sortert() + .map { it.tilBostatusperiode() } + .toSet(), andreVoksneIHusstanden = husstandsmedlem.voksneIHusstanden?.perioder?.tilBostatusperiode() ?: emptySet(), sivilstand = sivilstand.toSivilstandDto(), begrunnelse = - BegrunnelseDto( - innhold = henteNotatinnhold(this, NotatType.BOFORHOLD), - gjelder = this.henteRolleForNotat(NotatType.BOFORHOLD, null).tilDto(), - ), + BegrunnelseDto( + innhold = henteNotatinnhold(this, NotatType.BOFORHOLD), + gjelder = this.henteRolleForNotat(NotatType.BOFORHOLD, null).tilDto(), + ), egetBarnErEnesteVoksenIHusstanden = egetBarnErEnesteVoksenIHusstanden, beregnetBoforhold = tilBeregnetBoforhold(), valideringsfeil = - BoforholdValideringsfeil( - andreVoksneIHusstanden = - husstandsmedlem.voksneIHusstanden - ?.validereAndreVoksneIHusstanden( - virkningstidspunkt!!, - )?.takeIf { it.harFeil }, - husstandsmedlem = - husstandsmedlem.barn - .toSet() - .validerBoforhold(virkningstidspunktEllerSøktFomDato) - .filter { it.harFeil }, - sivilstand = sivilstand.validereSivilstand(virkningstidspunktEllerSøktFomDato).takeIf { it.harFeil }, - ), + BoforholdValideringsfeil( + andreVoksneIHusstanden = + husstandsmedlem.voksneIHusstanden + ?.validereAndreVoksneIHusstanden( + virkningstidspunkt!!, + )?.takeIf { it.harFeil }, + husstandsmedlem = + husstandsmedlem.barn + .toSet() + .validerBoforhold(virkningstidspunktEllerSøktFomDato) + .filter { it.harFeil }, + sivilstand = sivilstand.validereSivilstand(virkningstidspunktEllerSøktFomDato).takeIf { it.harFeil }, + ), ) private fun Behandling.tilBeregnetBoforhold() = @@ -658,10 +674,10 @@ class Dtomapper( BeregnApi().beregnBoforhold( BeregnGrunnlag( grunnlagListe = - vedtakGrunnlagMapper.mapper - .run { - tilGrunnlagBostatus() + tilPersonobjekter() - }.toList(), + vedtakGrunnlagMapper.mapper + .run { + tilGrunnlagBostatus() + tilPersonobjekter() + }.toList(), periode = ÅrMånedsperiode(virkningstidspunkt!!, null), søknadsbarnReferanse = "", ), @@ -681,15 +697,15 @@ class Dtomapper( id = this.id, kilde = this.kilde, medIBehandling = - !this.ident.isNullOrBlank() && + !this.ident.isNullOrBlank() && behandling.søknadsbarn .map { it.ident } .contains(this.ident), perioder = - this.perioder - .sortedBy { it.datoFom } - .toSet() - .tilBostatusperiode(), + this.perioder + .sortedBy { it.datoFom } + .toSet() + .tilBostatusperiode(), ident = tilgangskontrollertPersoninfo.ident?.verdi, navn = tilgangskontrollertPersoninfo.navn, fødselsdato = tilgangskontrollertPersoninfo.fødselsdato, @@ -713,7 +729,8 @@ class Dtomapper( val periodeBorHosBP = ÅrMånedsperiode(p.periodeFra!!, p.periodeTil?.plusMonths(1)) periodeBorHosBP.fom <= periode.fom && periodeBorHosBP.tilEllerMax() <= periode.tilEllerMax() } - }?.map { it.tilAndreVoksneIHusstandenDetaljerDto(Saksnummer(boforholdAndreVoksneIHusstanden?.behandling?.saksnummer!!)) } + } + ?.map { it.tilAndreVoksneIHusstandenDetaljerDto(Saksnummer(boforholdAndreVoksneIHusstanden?.behandling?.saksnummer!!)) } ?.sorter() ?: emptyList() } @@ -731,20 +748,25 @@ class Dtomapper( private fun Set.hentBegrensetAndreVoksneHusstandForPeriode( periode: ÅrMånedsperiode, erAktivert: Boolean = true, - ): List = hentAlleAndreVoksneHusstandForPeriode(periode, erAktivert).begrensAntallPersoner() + ): List = + hentAlleAndreVoksneHusstandForPeriode(periode, erAktivert).begrensAntallPersoner() private fun List.tilAktiveGrunnlagsdata() = AktiveGrunnlagsdata( arbeidsforhold = - filter { it.type == Grunnlagsdatatype.ARBEIDSFORHOLD && !it.erBearbeidet } - .mapNotNull { it.konvertereData>() } - .flatten() - .toSet(), + filter { it.type == Grunnlagsdatatype.ARBEIDSFORHOLD && !it.erBearbeidet } + .mapNotNull { it.konvertereData>() } + .flatten() + .toSet(), husstandsmedlem = - filter { it.type == Grunnlagsdatatype.BOFORHOLD && it.erBearbeidet }.tilHusstandsmedlem(), + filter { it.type == Grunnlagsdatatype.BOFORHOLD && it.erBearbeidet }.tilHusstandsmedlem(), andreVoksneIHusstanden = tilAndreVoksneIHusstanden(true), sivilstand = - find { it.type == Grunnlagsdatatype.SIVILSTAND && !it.erBearbeidet }.toSivilstand(), + find { it.type == Grunnlagsdatatype.SIVILSTAND && !it.erBearbeidet }.toSivilstand(), + barnetilsyn = + filter { it.type == Grunnlagsdatatype.BARNETILSYN && it.erBearbeidet } + .toSet() + .tilBarnetilsynAktiveGrunnlagDto(), ) private fun List.tilAndreVoksneIHusstanden(erAktivert: Boolean) = @@ -762,11 +784,11 @@ class Dtomapper( periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), status = it.bostatus!!, totalAntallHusstandsmedlemmer = - toSet() - .hentAlleAndreVoksneHusstandForPeriode( - periode, - erAktivert, - ).size, + toSet() + .hentAlleAndreVoksneHusstandForPeriode( + periode, + erAktivert, + ).size, husstandsmedlemmer = toSet().hentBegrensetAndreVoksneHusstandForPeriode(periode, erAktivert), ) }?.toSet() ?: emptySet() @@ -779,15 +801,15 @@ private fun List.tilHusstandsmedlem() = innhentetTidspunkt = it.innhentet, ident = it.gjelder, perioder = - it - .konvertereData>() - ?.map { boforholdrespons -> - HusstandsmedlemGrunnlagDto.BostatusperiodeGrunnlagDto( - boforholdrespons.periodeFom, - boforholdrespons.periodeTom, - boforholdrespons.bostatus, - ) - }?.toSet() ?: emptySet(), + it + .konvertereData>() + ?.map { boforholdrespons -> + HusstandsmedlemGrunnlagDto.BostatusperiodeGrunnlagDto( + boforholdrespons.periodeFom, + boforholdrespons.periodeTom, + boforholdrespons.bostatus, + ) + }?.toSet() ?: emptySet(), ) }.toSet() diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt index df6e3edf8..b1674ea04 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt @@ -8,25 +8,30 @@ import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.database.datamodell.henteBearbeidaInntekterForType import no.nav.bidrag.behandling.database.datamodell.konvertereData import no.nav.bidrag.behandling.dto.v1.behandling.SivilstandDto +import no.nav.bidrag.behandling.dto.v2.behandling.BarnetilsynIkkeAktiveGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.GrunnlagInntektEndringstype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.HusstandsmedlemGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.IkkeAktivInntektDto import no.nav.bidrag.behandling.dto.v2.behandling.InntektspostEndringDto import no.nav.bidrag.behandling.dto.v2.behandling.SivilstandIkkeAktivGrunnlagDto +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.transformers.ainntekt12Og3Måneder import no.nav.bidrag.behandling.transformers.ainntekt12Og3MånederFraOpprinneligVedtakstidspunkt import no.nav.bidrag.behandling.transformers.eksplisitteYtelser import no.nav.bidrag.behandling.transformers.inntekt.tilIkkeAktivInntektDto import no.nav.bidrag.behandling.transformers.inntekt.tilInntektspostEndring import no.nav.bidrag.behandling.transformers.nærmesteHeltall +import no.nav.bidrag.behandling.transformers.underhold.tilBarnetilsyn import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 import no.nav.bidrag.boforhold.dto.Bostatus import no.nav.bidrag.commons.util.secureLogger import no.nav.bidrag.domene.enums.diverse.Kilde import no.nav.bidrag.domene.enums.inntekt.Inntektsrapportering +import no.nav.bidrag.domene.ident.Personident import no.nav.bidrag.sivilstand.dto.Sivilstand import no.nav.bidrag.transport.behandling.grunnlag.response.ArbeidsforholdGrunnlagDto +import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilsynGrunnlagDto import no.nav.bidrag.transport.behandling.grunnlag.response.SivilstandGrunnlagDto import no.nav.bidrag.transport.behandling.inntekt.response.InntektPost import no.nav.bidrag.transport.behandling.inntekt.response.SummertÅrsinntekt @@ -117,13 +122,81 @@ fun List.henteEndringerIArbeidsforhold(alleAktiveGrunnlag: List.henteEndringerIBarnetilsyn( + aktiveGrunnlag: Set, + behandling: Behandling, +): BarnetilsynIkkeAktiveGrunnlagDto? { + fun Personident.erSøknadsbarn() = behandling.søknadsbarn.find { it.personident == this } != null + + fun Behandling.henteUnderholdskostnadPersonident(personident: Personident) = + this.underholdskostnader.find { + it.person.rolle + .first() + .personident == personident + } + + val innhentaForRolle = behandling.bidragsmottaker!! + + val virkningsdato = behandling.virkningstidspunktEllerSøktFomDato + val aktiveBarnetilsyn = aktiveGrunnlag.hentAlleBearbeidaBarnetilsyn(virkningsdato, innhentaForRolle) + val nyeBarnetilsyn = + toSet() + .hentAlleBearbeidaBarnetilsyn(virkningsdato, innhentaForRolle) + .filter { Personident(it.barnPersonId).erSøknadsbarn() } + .toSet() + + val aktiveBarnetilsynsdata = + aktiveBarnetilsyn + .filtrerePerioderEtterVirkningstidspunkt(virkningsdato) + .groupBy { it.barnPersonId } + .map { (personidentBarn, barnetilsyn) -> + Personident(personidentBarn) to barnetilsyn + }.toMap() + + val nyeBarnetilsynsdata: Map> = + nyeBarnetilsyn + .filtrerePerioderEtterVirkningstidspunkt(virkningsdato) + .groupBy { it.barnPersonId } + .map { (personidentBarn, barnetilsyn) -> + Personident(personidentBarn) to barnetilsyn.toSet() + }.toMap() + + val nyeBarnetilsynsdataTilknyttetSøknadsbarn = + nyeBarnetilsynsdata.filter { (k, v) -> + k.erSøknadsbarn() && + v.isNotEmpty() && + !aktiveBarnetilsynsdata[k].isNullOrEmpty() && + !v.toSet().erLik(aktiveBarnetilsynsdata[k]!!.toSet(), virkningsdato) + } + + if (aktiveBarnetilsynsdata.values.isNotEmpty() && nyeBarnetilsynsdataTilknyttetSøknadsbarn.values.isNotEmpty()) { + return BarnetilsynIkkeAktiveGrunnlagDto( + barnetilsyn = + nyeBarnetilsynsdataTilknyttetSøknadsbarn + .map { + it.key to it.value.tilBarnetilsyn(behandling.henteUnderholdskostnadPersonident(it.key)!!) + }.toMap(), + grunnlag = + nyeBarnetilsyn + .groupBy { it.barnPersonId } + .map { (personidentBarn, barnetilsyn) -> + Personident(personidentBarn) to barnetilsyn.toSet() + }.toMap(), + innhentetTidspunkt = + find { Grunnlagsdatatype.BARNETILSYN == it.type && it.erBearbeidet }?.innhentet + ?: LocalDateTime.now(), + ) + } + return null +} + fun List.henteEndringerIBoforhold( aktiveGrunnlag: List, behandling: Behandling, ): Set { val virkniningstidspunkt = behandling.virkningstidspunktEllerSøktFomDato val husstandsmedlemmer = behandling.husstandsmedlem - val rolle = behandling.rolleGrunnlagSkalHentesFor!! + val rolle = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!! val aktiveBoforholdsdata = aktiveGrunnlag.hentAlleBearbeidaBoforhold(virkniningstidspunkt, husstandsmedlemmer, rolle).toSet() @@ -245,6 +318,29 @@ fun Set.erDetSammeSom(settB: Set.erLik( + detAndreSettet: Set, + virkningsdato: LocalDate, +): Boolean { + if (this.size != detAndreSettet.size) return false + + fun BarnetilsynGrunnlagDto.justereFradato() = + if (virkningsdato.isAfter(LocalDate.now())) { + maxOf(virkningsdato.withDayOfMonth(1)) + } else { + maxOf(virkningsdato.withDayOfMonth(1), periodeFra) + } + return this.all { barnetilsyn -> + detAndreSettet.any { + it.justereFradato() == barnetilsyn.justereFradato() && + it.periodeTil == barnetilsyn.periodeTil && + it.barnPersonId == barnetilsyn.barnPersonId && + it.skolealder == barnetilsyn.skolealder && + it.tilsynstype == barnetilsyn.tilsynstype + } + } +} + fun List.erDetSammeSom( other: List, virkniningstidspunkt: LocalDate, 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 d68a4b4c6..8bcd40dac 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 @@ -12,12 +12,14 @@ import no.nav.bidrag.behandling.database.datamodell.tilPersonident import no.nav.bidrag.behandling.database.grunnlag.SummerteInntekter import no.nav.bidrag.behandling.dto.v1.behandling.BegrunnelseDto import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto +import no.nav.bidrag.behandling.dto.v2.behandling.BarnetilsynAktiveGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDetaljerDtoV2 import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsinnhentingsfeil import no.nav.bidrag.behandling.dto.v2.behandling.KanBehandlesINyLøsningRequest import no.nav.bidrag.behandling.dto.v2.behandling.SivilstandAktivGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.SjekkRolleDto +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.dto.v2.inntekt.BeregnetInntekterDto import no.nav.bidrag.behandling.dto.v2.inntekt.InntekterDtoV2 import no.nav.bidrag.behandling.dto.v2.validering.InntektValideringsfeil @@ -53,6 +55,7 @@ import no.nav.bidrag.domene.tid.Datoperiode import no.nav.bidrag.organisasjon.dto.SaksbehandlerDto import no.nav.bidrag.sivilstand.dto.Sivilstand 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.inntekt.response.SummertMånedsinntekt @@ -138,6 +141,21 @@ fun Grunnlag?.toSivilstand(): SivilstandAktivGrunnlagDto? { ) } +fun Set.tilBarnetilsynAktiveGrunnlagDto(): BarnetilsynAktiveGrunnlagDto? { + if (this.isEmpty()) return null + return BarnetilsynAktiveGrunnlagDto( + grunnlag = + this + .flatMap { it.konvertereData>() ?: emptySet() } + .toSet() + .groupBy { it.barnPersonId } + .map { (personidentBarn, barnetilsyn) -> + Personident(personidentBarn) to barnetilsyn.toSet() + }.toMap(), + innhentetTidspunkt = first().innhentet, + ) +} + fun Behandling.tilInntektDtoV2( gjeldendeAktiveGrunnlagsdata: List = emptyList(), inkluderHistoriskeInntekter: Boolean = false, @@ -366,7 +384,7 @@ fun Behandling.henteRolleForNotat( notattype: Notattype, forRolle: Rolle?, ) = when (notattype) { - Notattype.BOFORHOLD -> this.rolleGrunnlagSkalHentesFor!! + Notattype.BOFORHOLD -> Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(this)!! Notattype.UTGIFTER -> this.bidragsmottaker!! Notattype.VIRKNINGSTIDSPUNKT -> this.bidragsmottaker!! Notattype.INNTEKT -> { @@ -377,6 +395,7 @@ fun Behandling.henteRolleForNotat( forRolle } } + Notattype.UNDERHOLDSKOSTNAD -> if (forRolle == null) { log.warn { "Notattype $notattype krever spesifisering av hvilken rolle notatet gjelder." } @@ -384,6 +403,7 @@ fun Behandling.henteRolleForNotat( } else { forRolle } + Notattype.SAMVÆR -> forRolle!! } @@ -411,6 +431,23 @@ fun Behandling.notatTittel(): String { return "${prefiks?.let { "$prefiks, " }}Saksbehandlingsnotat" } +fun Set.filtrerePerioderEtterVirkningstidspunkt(virkningstidspunkt: LocalDate): Set = + groupBy { it.barnPersonId } + .flatMap { (personident, perioder) -> + val perioderFiltrert = + perioder.sortedBy { it.periodeFra }.slice( + perioder + .map { it.periodeFra } + .hentIndekserEtterVirkningstidspunkt(virkningstidspunkt, null), + ) + val cutoffPeriodeFom = finnCutoffDatoFom(virkningstidspunkt, null) + perioderFiltrert.map { periode -> + periode + .takeIf { it == perioderFiltrert.first() } + ?.copy(periodeFra = maxOf(periode.periodeFra, cutoffPeriodeFom)) ?: periode + } + }.toSet() + fun List.filtrerPerioderEtterVirkningstidspunkt( husstandsmedlemListe: Set, virkningstidspunkt: LocalDate, @@ -496,6 +533,20 @@ fun List.hentAlleBearbeidaBoforhold( virkniningstidspunkt, ).sortedBy { it.periodeFom } +fun Set.hentAlleBearbeidaBarnetilsyn( + virkniningstidspunkt: LocalDate, + rolle: Rolle, +) = asSequence() + .filter { (it.rolle.id == rolle.id) && it.type == Grunnlagsdatatype.BARNETILSYN && it.erBearbeidet } + .mapNotNull { it.konvertereData>() } + .flatten() + .distinct() + .toSet() + .filtrerePerioderEtterVirkningstidspunkt( + virkniningstidspunkt, + ).sortedBy { it.periodeFra } + .toSet() + fun Behandling.tilKanBehandlesINyLøsningRequest() = KanBehandlesINyLøsningRequest( engangsbeløpstype = engangsbeloptype, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/boforhold/Husstandsmedlemmer.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/boforhold/Husstandsmedlemmer.kt index e0e0d2519..cb9a0901a 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/boforhold/Husstandsmedlemmer.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/boforhold/Husstandsmedlemmer.kt @@ -7,6 +7,8 @@ import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.database.datamodell.hentSisteBearbeidetBoforhold import no.nav.bidrag.behandling.database.datamodell.henteGjeldendeBoforholdsgrunnlagForAndreVoksneIHusstanden +import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.dto.v2.boforhold.BostatusperiodeDto import no.nav.bidrag.behandling.service.BoforholdService.Companion.opprettDefaultPeriodeForAndreVoksneIHusstand import no.nav.bidrag.behandling.transformers.grunnlag.finnFødselsdato @@ -56,7 +58,7 @@ private fun Behandling.leggeInnManglendeSøknadsbarnSomHusstandsbarn( if (!grunnlag.map { it.gjelderPersonId }.contains(identSøknadsbarn)) { grunnlag.add( RelatertPersonGrunnlagDto( - partPersonId = this.rolleGrunnlagSkalHentesFor?.ident, + partPersonId = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(this)?.ident, gjelderPersonId = identSøknadsbarn, borISammeHusstandDtoListe = emptyList(), fødselsdato = søknadsbarn.fødselsdato, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/InnhentetGrunnlagMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/InnhentetGrunnlagMapping.kt index bfc5a1e0f..aa0a304ec 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/InnhentetGrunnlagMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/InnhentetGrunnlagMapping.kt @@ -8,6 +8,7 @@ import no.nav.bidrag.behandling.database.datamodell.konvertereData import no.nav.bidrag.behandling.database.grunnlag.SkattepliktigeInntekter import no.nav.bidrag.behandling.database.grunnlag.SummerteInntekter import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.service.hentNyesteIdent import no.nav.bidrag.behandling.transformers.vedtak.hentPersonNyesteIdent import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.tilGrunnlagsobjekt @@ -152,13 +153,13 @@ fun List.opprettInnhentetHusstandsmedlemGrunnlagForSøknadsbarnHvisMan RelatertPersonGrunnlagDto( fødselsdato = it.fødselsdato, gjelderPersonId = it.ident, - partPersonId = behandling.rolleGrunnlagSkalHentesFor!!.ident, + partPersonId = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!.ident, navn = it.navn, relasjon = Familierelasjon.BARN, borISammeHusstandDtoListe = emptyList(), ).tilGrunnlagsobjekt( LocalDateTime.now(), - personobjekter.hentPersonNyesteIdent(behandling.rolleGrunnlagSkalHentesFor!!.ident)!!.referanse, + personobjekter.hentPersonNyesteIdent(Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!.ident)!!.referanse, personobjekter.hentPersonNyesteIdent(it.ident)!!.referanse, ) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt index f7211e9ec..6e001dc08 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt @@ -2,10 +2,14 @@ package no.nav.bidrag.behandling.transformers.underhold import no.nav.bidrag.behandling.database.datamodell.Barnetilsyn import no.nav.bidrag.behandling.database.datamodell.Behandling +import no.nav.bidrag.behandling.database.datamodell.Underholdskostnad import no.nav.bidrag.behandling.dto.v2.underhold.BarnDto import no.nav.bidrag.behandling.dto.v2.underhold.DatoperiodeDto import no.nav.bidrag.behandling.dto.v2.underhold.StønadTilBarnetilsynDto import no.nav.bidrag.domene.enums.barnetilsyn.Skolealder +import no.nav.bidrag.domene.enums.barnetilsyn.Tilsynstype +import no.nav.bidrag.domene.enums.diverse.Kilde +import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilsynGrunnlagDto fun Barnetilsyn.tilStønadTilBarnetilsynDto(): StønadTilBarnetilsynDto = StønadTilBarnetilsynDto( @@ -25,6 +29,13 @@ fun Set.tilStønadTilBarnetilsynDtos() = map { it.tilStønadTilBarn fun Behandling.harAndreBarnIUnderhold() = this.underholdskostnader.find { it.person.rolle.isEmpty() } != null +fun Underholdskostnad.harIkkeBarnetilsynITabellFraFør(personident: String) = + person.rolle + .first() + .personident + ?.verdi == personident && + this.barnetilsyn.isEmpty() + fun BarnDto.annetBarnMedSammeNavnOgFødselsdatoEksistererFraFør(behandling: Behandling) = behandling.underholdskostnader .filter { it.person.ident == null } @@ -34,3 +45,20 @@ fun BarnDto.annetBarnMedSammePersonidentEksistererFraFør(behandling: Behandling behandling.underholdskostnader .filter { it.person.ident != null } .find { it.person.ident == this.personident?.verdi } != null + +fun Set.tilBarnetilsyn(u: Underholdskostnad) = this.map { it.tilBarnetilsyn(u) }.toSet() + +fun BarnetilsynGrunnlagDto.tilBarnetilsyn(u: Underholdskostnad) = + Barnetilsyn( + underholdskostnad = u, + fom = this.periodeFra, + tom = this.periodeTil?.minusDays(1), + kilde = Kilde.OFFENTLIG, + omfang = this.tilsynstype ?: Tilsynstype.IKKE_ANGITT, + under_skolealder = + when (this.skolealder) { + Skolealder.OVER -> false + Skolealder.UNDER -> true + else -> null + }, + ) 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 7a045dbd6..a13eff2aa 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt @@ -4,7 +4,6 @@ import com.ninjasquad.springmockk.MockkBean import io.kotest.assertions.assertSoftly import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.collections.shouldNotBeEmpty -import io.kotest.matchers.nulls.shouldBeNull import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe @@ -26,6 +25,7 @@ import no.nav.bidrag.behandling.database.repository.SivilstandRepository import no.nav.bidrag.behandling.dto.v2.behandling.AktivereGrunnlagRequestV2 import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagstype +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.service.GrunnlagServiceTest.Companion.tilAinntektspostDto import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.jsonListeTilObjekt import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.jsonTilObjekt @@ -258,6 +258,7 @@ class GrunnlagServiceTest : TestContainerRunner() { rolle = it, navnResponsfil = "hente-grunnlagrespons-bidrag-barnetilsyn-bm.json", ) + else -> stubUtils.stubHenteGrunnlag(rolle = it, tomRespons = true) } } @@ -281,8 +282,8 @@ class GrunnlagServiceTest : TestContainerRunner() { assertSoftly(jsonListeTilObjekt(barnetilsyn?.data!!).sortedBy { it.periodeFra }) { shouldHaveSize(2) it.elementAt(0).beløp shouldBe 4000 - it.elementAt(0).periodeFra shouldBe LocalDate.of(2023,1,1) - it.elementAt(0).periodeTil shouldBe LocalDate.of(2024,1,1) + it.elementAt(0).periodeFra shouldBe LocalDate.of(2023, 1, 1) + it.elementAt(0).periodeTil shouldBe LocalDate.of(2024, 1, 1) it.elementAt(0).skolealder shouldBe Skolealder.OVER it.elementAt(0).tilsynstype shouldBe Tilsynstype.HELTID it.elementAt(0).partPersonId shouldBe "313213213" @@ -2085,6 +2086,7 @@ class GrunnlagServiceTest : TestContainerRunner() { @Test @Transactional open fun `skal aktivere grunnlag av type boforhold for barn av BP i behandling av bidrag, og oppdatere husstandsmedlemtabell`() { + // gitt val behandling = oppretteTestbehandling( @@ -2803,7 +2805,7 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling = behandling, innhentet = LocalDateTime.now().minusDays(3), data = commonObjectmapper.writeValueAsString(voksneIBpsHusstand), - rolle = behandling.rolleGrunnlagSkalHentesFor!!, + rolle = Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN.innhentesForRolle(behandling)!!, type = Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, erBearbeidet = true, ), @@ -2815,7 +2817,7 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling = behandling, innhentet = LocalDateTime.now().minusDays(3), data = bfg!!.data, - rolle = behandling.rolleGrunnlagSkalHentesFor!!, + rolle = Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN.innhentesForRolle(behandling)!!, type = Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, erBearbeidet = false, ), diff --git a/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt b/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt index 0b1c52c22..8c891b79d 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt @@ -28,6 +28,7 @@ import no.nav.bidrag.behandling.database.grunnlag.SkattepliktigeInntekter import no.nav.bidrag.behandling.database.grunnlag.SummerteInntekter import no.nav.bidrag.behandling.dto.v1.forsendelse.ForsendelseRolleDto import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.dto.v2.inntekt.OppdatereManuellInntekt import no.nav.bidrag.behandling.service.tilSummerteInntekter import no.nav.bidrag.behandling.transformers.behandling.henteRolleForNotat @@ -1243,7 +1244,7 @@ fun oppretteTestbehandling( } if (inkludereArbeidsforhold) { - oppretteArbeidsforhold(behandling, behandling.rolleGrunnlagSkalHentesFor!!.ident!!) + oppretteArbeidsforhold(behandling, Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!.ident!!) } return behandling @@ -1287,7 +1288,7 @@ fun oppretteArbeidsforhold( behandling = behandling, innhentet = LocalDateTime.now().minusDays(3), data = commonObjectmapper.writeValueAsString(setOf(arbeidsforhold)), - rolle = behandling.rolleGrunnlagSkalHentesFor!!, + rolle = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!, type = Grunnlagsdatatype.ARBEIDSFORHOLD, erBearbeidet = false, ), @@ -1312,7 +1313,7 @@ private fun oppretteBoforhold( erBarnAvBmBp = true, relasjon = Familierelasjon.BARN, navn = "Lyrisk Sopp", - partPersonId = behandling.rolleGrunnlagSkalHentesFor!!.ident, + partPersonId = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!.ident, borISammeHusstandDtoListe = listOf( BorISammeHusstandDto( @@ -1327,7 +1328,7 @@ private fun oppretteBoforhold( erBarnAvBmBp = true, relasjon = Familierelasjon.BARN, navn = "Lyrisk Sopp", - partPersonId = behandling.rolleGrunnlagSkalHentesFor!!.ident, + partPersonId = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!.ident, borISammeHusstandDtoListe = listOf( BorISammeHusstandDto( @@ -1346,7 +1347,7 @@ private fun oppretteBoforhold( erBarnAvBmBp = false, relasjon = Familierelasjon.INGEN, navn = voksenPersonIBpsHusstand.navn, - partPersonId = behandling.rolleGrunnlagSkalHentesFor!!.ident, + partPersonId = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!.ident, borISammeHusstandDtoListe = listOf( BorISammeHusstandDto( @@ -1367,7 +1368,7 @@ private fun oppretteBoforhold( behandling = behandling, innhentet = LocalDateTime.now().minusDays(3), data = commonObjectmapper.writeValueAsString(grunnlagHusstandsmedlemmer), - rolle = behandling.rolleGrunnlagSkalHentesFor!!, + rolle = Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN.innhentesForRolle(behandling)!!, type = Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, erBearbeidet = false, ), @@ -1399,7 +1400,7 @@ private fun oppretteBoforhold( behandling = behandling, innhentet = LocalDateTime.now().minusDays(3), data = commonObjectmapper.writeValueAsString(grunnlagHusstandsmedlemmer), - rolle = behandling.rolleGrunnlagSkalHentesFor!!, + rolle = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!, type = Grunnlagsdatatype.BOFORHOLD, erBearbeidet = false, ), @@ -1422,7 +1423,7 @@ private fun oppretteBoforhold( behandling = behandling, innhentet = LocalDateTime.now().minusDays(3), data = commonObjectmapper.writeValueAsString(it.value), - rolle = behandling.rolleGrunnlagSkalHentesFor!!, + rolle = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!, type = Grunnlagsdatatype.BOFORHOLD, gjelder = it.key, erBearbeidet = true, From ddafe119d9bff637e4e8cf4cbe7e5a7e6f6448af Mon Sep 17 00:00:00 2001 From: s148719 Date: Thu, 28 Nov 2024 15:18:38 +0100 Subject: [PATCH 09/21] Oppdatere tester og diverse --- .../dto/v2/behandling/BehandlingDtoV2.kt | 27 +- .../behandling/dto/v2/underhold/Underhold.kt | 4 +- .../behandling/service/GrunnlagService.kt | 23 +- .../behandling/service/UnderholdService.kt | 5 +- .../behandling/transformers/Dtomapper.kt | 4 +- .../behandling/AktivGrunnlagMapping.kt | 11 +- .../behandling/BehandlingDtoMapping.kt | 6 +- .../transformers/underhold/Utvidelser.kt | 7 +- .../behandling/service/GrunnlagServiceTest.kt | 31 ++- .../service/UnderholdServiceTest.kt | 2 +- .../behandling/transformers/DtoMapperTest.kt | 242 ++++++++++++++---- ...grunnlagrespons-bidrag-barnetilsyn-bm.json | 8 + 12 files changed, 281 insertions(+), 89 deletions(-) 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 9bfae6322..95f77575a 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 @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonFormat import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.databind.annotation.JsonDeserialize import io.swagger.v3.oas.annotations.media.Schema -import no.nav.bidrag.behandling.database.datamodell.Barnetilsyn import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.dto.v1.behandling.BegrunnelseDto import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto @@ -14,6 +13,7 @@ import no.nav.bidrag.behandling.dto.v2.boforhold.BoforholdDtoV2 import no.nav.bidrag.behandling.dto.v2.inntekt.InntekterDtoV2 import no.nav.bidrag.behandling.dto.v2.inntekt.InntektspostDtoV2 import no.nav.bidrag.behandling.dto.v2.samvær.SamværDto +import no.nav.bidrag.behandling.dto.v2.underhold.StønadTilBarnetilsynDto import no.nav.bidrag.behandling.dto.v2.underhold.UnderholdDto import no.nav.bidrag.behandling.dto.v2.utgift.MaksGodkjentBeløpDto import no.nav.bidrag.behandling.dto.v2.validering.UtgiftValideringsfeilDto @@ -225,7 +225,7 @@ data class AktiveGrunnlagsdata( val husstandsmedlem: Set, val andreVoksneIHusstanden: AndreVoksneIHusstandenGrunnlagDto? = null, val sivilstand: SivilstandAktivGrunnlagDto? = null, - val barnetilsyn: BarnetilsynAktiveGrunnlagDto? = null, + val stønadTilBarnetilsyn: StønadTilBarnetilsynAktiveGrunnlagDto? = null, ) { @Deprecated("Erstattes av husstandsmedlem") @Schema(description = "Erstattes av husstandsmedlem", deprecated = true) @@ -238,7 +238,7 @@ data class IkkeAktiveGrunnlagsdata( val arbeidsforhold: Set = emptySet(), val andreVoksneIHusstanden: AndreVoksneIHusstandenGrunnlagDto? = null, val sivilstand: SivilstandIkkeAktivGrunnlagDto? = null, - val barnetilsyn: BarnetilsynIkkeAktiveGrunnlagDto? = null, + val stønadTilBarnetilsyn: StønadTilBarnetilsynIkkeAktiveGrunnlagDto? = null, ) { @Deprecated("Erstattes av husstandsmedlem") @Schema(description = "Erstattes av husstandsmedlem", deprecated = true) @@ -316,13 +316,13 @@ data class SivilstandIkkeAktivGrunnlagDto( val innhentetTidspunkt: LocalDateTime = LocalDateTime.now(), ) -data class BarnetilsynAktiveGrunnlagDto( +data class StønadTilBarnetilsynAktiveGrunnlagDto( val grunnlag: Map> = emptyMap(), val innhentetTidspunkt: LocalDateTime = LocalDateTime.now(), ) -data class BarnetilsynIkkeAktiveGrunnlagDto( - val barnetilsyn: Map> = emptyMap(), +data class StønadTilBarnetilsynIkkeAktiveGrunnlagDto( + val stønadTilBarnetilsyn: Map> = emptyMap(), val grunnlag: Map> = emptyMap(), val innhentetTidspunkt: LocalDateTime = LocalDateTime.now(), ) @@ -378,7 +378,7 @@ data class AndreVoksneIHusstandenDetaljerDto( @Schema(enumAsRef = true, name = "OpplysningerType") enum class Grunnlagsdatatype( - val behandlinstypeMotRolletyper: Map> = emptyMap(), + val behandlingstypeMotRolletyper: Map> = emptyMap(), val erGjeldende: Boolean = true, ) { ARBEIDSFORHOLD( @@ -488,11 +488,11 @@ enum class Grunnlagsdatatype( when (rolletype != null) { true -> entries - .filter { it.behandlinstypeMotRolletyper.keys.contains(behandlingstype) } - .filter { it.behandlinstypeMotRolletyper.values.any { roller -> roller.contains(rolletype) } } + .filter { it.behandlingstypeMotRolletyper.keys.contains(behandlingstype) } + .filter { it.behandlingstypeMotRolletyper.values.any { roller -> roller.contains(rolletype) } } .toSet() - false -> entries.filter { it.behandlinstypeMotRolletyper.keys.contains(behandlingstype) }.toSet() + false -> entries.filter { it.behandlingstypeMotRolletyper.keys.contains(behandlingstype) }.toSet() } fun gjeldende() = Grunnlagsdatatype.entries.filter { it.erGjeldende } @@ -521,20 +521,19 @@ fun Grunnlagsdatatype.tilInntektrapporteringYtelse() = fun Grunnlagsdatatype.innhentesForRolle(behandling: Behandling) = when (this) { - - Grunnlagsdatatype.BARNETILSYN -> when (this.behandlinstypeMotRolletyper[behandling.tilType()]!!.first()) { + Grunnlagsdatatype.BARNETILSYN -> when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig else -> null } - Grunnlagsdatatype.BOFORHOLD -> when (this.behandlinstypeMotRolletyper[behandling.tilType()]!!.first()) { + Grunnlagsdatatype.BOFORHOLD -> when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig else -> null } - Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> when (this.behandlinstypeMotRolletyper[behandling.tilType()]!!.first()) { + Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig else -> null diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt index 2d0d4ff49..f54c2823d 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt @@ -144,8 +144,8 @@ data class FaktiskTilsynsutgiftDto( data class StønadTilBarnetilsynDto( val id: Long? = null, val periode: DatoperiodeDto, - val skolealder: Skolealder, - val tilsynstype: Tilsynstype, + val skolealder: Skolealder? = null, + val tilsynstype: Tilsynstype? = null, val kilde: Kilde = Kilde.MANUELL, ) 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 6730f76f9..e1fc7388e 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt @@ -655,7 +655,7 @@ class GrunnlagService( it.husstandsmedlemmerOgEgneBarnListe.toSet(), ) - if (Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN.behandlinstypeMotRolletyper[behandling.tilType()]?.contains( + if (Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN.behandlingstypeMotRolletyper[behandling.tilType()]?.contains( rolleInnhentetFor.rolletype, ) == true ) { @@ -690,16 +690,19 @@ class GrunnlagService( rolleInnhentetFor, ) - // Lagrer barnetilsyn per barn som bearbeida grunnlag + // Lagrer barnetilsyn per søknadsbarn som bearbeida grunnlag grunnlag.barnetilsynListe.groupBy { it.barnPersonId }.forEach { barnetilsyn -> - lagreGrunnlagHvisEndret( - behandling, - rolleInnhentetFor, - Grunnlagstype(Grunnlagsdatatype.BARNETILSYN, true), - barnetilsyn.value.toSet(), - null, - Personident(barnetilsyn.key), - ) + + if (behandling.søknadsbarn.find { it.personident?.verdi == barnetilsyn.key } != null) { + lagreGrunnlagHvisEndret( + behandling, + rolleInnhentetFor, + Grunnlagstype(Grunnlagsdatatype.BARNETILSYN, true), + barnetilsyn.value.toSet(), + null, + Personident(barnetilsyn.key), + ) + } } val nyesteBearbeidaBarnetilsynEtterLagring = diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt index ae6ee3991..b2086d3c1 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt @@ -25,6 +25,7 @@ import no.nav.bidrag.behandling.transformers.underhold.tilStønadTilBarnetilsynD import no.nav.bidrag.behandling.transformers.underhold.validere import no.nav.bidrag.behandling.transformers.underhold.validerePerioder import no.nav.bidrag.domene.enums.barnetilsyn.Skolealder +import no.nav.bidrag.domene.enums.barnetilsyn.Tilsynstype import no.nav.bidrag.domene.enums.diverse.Kilde import org.springframework.http.HttpStatus import org.springframework.stereotype.Service @@ -156,7 +157,7 @@ class UnderholdService( Skolealder.OVER -> false else -> null } - barnetilsyn.omfang = request.tilsynstype + barnetilsyn.omfang = request.tilsynstype ?: Tilsynstype.IKKE_ANGITT barnetilsyn.kilde = Kilde.MANUELL barnetilsyn } ?: run { @@ -170,7 +171,7 @@ class UnderholdService( Skolealder.OVER -> false else -> null }, - omfang = request.tilsynstype, + omfang = request.tilsynstype ?: Tilsynstype.IKKE_ANGITT, kilde = Kilde.MANUELL, underholdskostnad = underholdskostnad, ) 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 637438b9b..c30c16353 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt @@ -505,7 +505,7 @@ class Dtomapper( aktiveGrunnlag, behandling.virkningstidspunktEllerSøktFomDato, ), - barnetilsyn = + stønadTilBarnetilsyn = sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIBarnetilsyn( aktiveGrunnlag.toSet(), behandling, @@ -763,7 +763,7 @@ class Dtomapper( andreVoksneIHusstanden = tilAndreVoksneIHusstanden(true), sivilstand = find { it.type == Grunnlagsdatatype.SIVILSTAND && !it.erBearbeidet }.toSivilstand(), - barnetilsyn = + stønadTilBarnetilsyn = filter { it.type == Grunnlagsdatatype.BARNETILSYN && it.erBearbeidet } .toSet() .tilBarnetilsynAktiveGrunnlagDto(), diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt index b1674ea04..0504e6d4a 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt @@ -8,7 +8,7 @@ import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.database.datamodell.henteBearbeidaInntekterForType import no.nav.bidrag.behandling.database.datamodell.konvertereData import no.nav.bidrag.behandling.dto.v1.behandling.SivilstandDto -import no.nav.bidrag.behandling.dto.v2.behandling.BarnetilsynIkkeAktiveGrunnlagDto +import no.nav.bidrag.behandling.dto.v2.behandling.StønadTilBarnetilsynIkkeAktiveGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.GrunnlagInntektEndringstype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.HusstandsmedlemGrunnlagDto @@ -23,6 +23,7 @@ import no.nav.bidrag.behandling.transformers.inntekt.tilIkkeAktivInntektDto import no.nav.bidrag.behandling.transformers.inntekt.tilInntektspostEndring import no.nav.bidrag.behandling.transformers.nærmesteHeltall import no.nav.bidrag.behandling.transformers.underhold.tilBarnetilsyn +import no.nav.bidrag.behandling.transformers.underhold.tilStønadTilBarnetilsynDtos import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 import no.nav.bidrag.boforhold.dto.Bostatus import no.nav.bidrag.commons.util.secureLogger @@ -125,7 +126,7 @@ fun List.henteEndringerIArbeidsforhold(alleAktiveGrunnlag: List.henteEndringerIBarnetilsyn( aktiveGrunnlag: Set, behandling: Behandling, -): BarnetilsynIkkeAktiveGrunnlagDto? { +): StønadTilBarnetilsynIkkeAktiveGrunnlagDto? { fun Personident.erSøknadsbarn() = behandling.søknadsbarn.find { it.personident == this } != null fun Behandling.henteUnderholdskostnadPersonident(personident: Personident) = @@ -170,11 +171,11 @@ fun List.henteEndringerIBarnetilsyn( } if (aktiveBarnetilsynsdata.values.isNotEmpty() && nyeBarnetilsynsdataTilknyttetSøknadsbarn.values.isNotEmpty()) { - return BarnetilsynIkkeAktiveGrunnlagDto( - barnetilsyn = + return StønadTilBarnetilsynIkkeAktiveGrunnlagDto( + stønadTilBarnetilsyn = nyeBarnetilsynsdataTilknyttetSøknadsbarn .map { - it.key to it.value.tilBarnetilsyn(behandling.henteUnderholdskostnadPersonident(it.key)!!) + it.key to it.value.tilBarnetilsyn(behandling.henteUnderholdskostnadPersonident(it.key)!!).tilStønadTilBarnetilsynDtos() }.toMap(), grunnlag = nyeBarnetilsyn 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 8bcd40dac..ecf9cf73c 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 @@ -12,7 +12,7 @@ import no.nav.bidrag.behandling.database.datamodell.tilPersonident import no.nav.bidrag.behandling.database.grunnlag.SummerteInntekter import no.nav.bidrag.behandling.dto.v1.behandling.BegrunnelseDto import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto -import no.nav.bidrag.behandling.dto.v2.behandling.BarnetilsynAktiveGrunnlagDto +import no.nav.bidrag.behandling.dto.v2.behandling.StønadTilBarnetilsynAktiveGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDetaljerDtoV2 import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsinnhentingsfeil @@ -141,9 +141,9 @@ fun Grunnlag?.toSivilstand(): SivilstandAktivGrunnlagDto? { ) } -fun Set.tilBarnetilsynAktiveGrunnlagDto(): BarnetilsynAktiveGrunnlagDto? { +fun Set.tilBarnetilsynAktiveGrunnlagDto(): StønadTilBarnetilsynAktiveGrunnlagDto? { if (this.isEmpty()) return null - return BarnetilsynAktiveGrunnlagDto( + return StønadTilBarnetilsynAktiveGrunnlagDto( grunnlag = this .flatMap { it.konvertereData>() ?: emptySet() } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt index 6e001dc08..2d5c960c7 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt @@ -19,9 +19,12 @@ fun Barnetilsyn.tilStønadTilBarnetilsynDto(): StønadTilBarnetilsynDto = when (this.under_skolealder) { true -> Skolealder.UNDER false -> Skolealder.OVER - else -> Skolealder.IKKE_ANGITT + else -> null }, - tilsynstype = this.omfang, + tilsynstype = when(this.omfang) { + Tilsynstype.IKKE_ANGITT -> null + else -> this.omfang + }, kilde = this.kilde, ) 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 a13eff2aa..d0b6c4014 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt @@ -80,6 +80,8 @@ 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 @@ -263,13 +265,19 @@ class GrunnlagServiceTest : TestContainerRunner() { } } + 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 + behandling.grunnlag.filter { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype } shouldHaveSize 2 + behandling.grunnlag.filter { !it.erBearbeidet && it.type == Grunnlagsdatatype.BARNETILSYN } shouldHaveSize 1 + behandling.grunnlag.filter { it.erBearbeidet && it.type == Grunnlagsdatatype.BARNETILSYN } shouldHaveSize 1 + val barnetilsyn = behandling.grunnlag.find { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype && Grunnlagsdatatype.BARNETILSYN == it.type } assertSoftly(barnetilsyn) { @@ -289,6 +297,27 @@ class GrunnlagServiceTest : TestContainerRunner() { it.elementAt(0).partPersonId shouldBe "313213213" it.elementAt(0).barnPersonId shouldBe "1344124" } + + behandling.underholdskostnader.flatMap { it.barnetilsyn } shouldHaveSize 2 + + val stønadTilBarnetilsyn = behandling.underholdskostnader.find { it.person.rolle.first().personident?.verdi == testdataBarn1.ident }!!.barnetilsyn.sortedBy { it.fom } + stønadTilBarnetilsyn shouldHaveSize 2 + + assertSoftly(stønadTilBarnetilsyn.elementAt(0)) { + it.omfang shouldBe Tilsynstype.HELTID + it.under_skolealder shouldBe false + it.fom shouldBe LocalDate.of(2023,1,1) + it.tom shouldBe LocalDate.of(2023, 12,31) + it.kilde shouldBe Kilde.OFFENTLIG + } + + assertSoftly(stønadTilBarnetilsyn.elementAt(1)) { + it.omfang shouldBe Tilsynstype.HELTID + it.under_skolealder shouldBe false + it.fom shouldBe LocalDate.of(2024,1,1) + it.tom shouldBe null + it.kilde shouldBe Kilde.OFFENTLIG + } } @Test diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt index 8d65ba5c3..3bc8aee94 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt @@ -569,7 +569,7 @@ class UnderholdServiceTest { Skolealder.UNDER -> true else -> null }, - request.tilsynstype, + request.tilsynstype!!, kilde = Kilde.OFFENTLIG, ), ) 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 c104a0331..a1dcc0994 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt @@ -3,7 +3,9 @@ package no.nav.bidrag.behandling.transformers import com.ninjasquad.springmockk.MockkBean import io.kotest.assertions.assertSoftly import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.maps.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 @@ -13,6 +15,8 @@ import no.nav.bidrag.behandling.database.datamodell.Grunnlag import no.nav.bidrag.behandling.database.datamodell.Notat import no.nav.bidrag.behandling.database.datamodell.Person import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle +import no.nav.bidrag.behandling.dto.v2.underhold.DatoperiodeDto import no.nav.bidrag.behandling.service.BeregningEvnevurderingService import no.nav.bidrag.behandling.service.PersonService import no.nav.bidrag.behandling.service.TilgangskontrollService @@ -29,6 +33,8 @@ import no.nav.bidrag.beregn.barnebidrag.BeregnSamværsklasseApi import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 import no.nav.bidrag.commons.web.mock.stubSjablonProvider import no.nav.bidrag.commons.web.mock.stubSjablonService +import no.nav.bidrag.domene.enums.barnetilsyn.Skolealder +import no.nav.bidrag.domene.enums.barnetilsyn.Tilsynstype import no.nav.bidrag.domene.enums.behandling.TypeBehandling import no.nav.bidrag.domene.enums.diverse.Kilde import no.nav.bidrag.domene.enums.person.Bostatuskode @@ -37,6 +43,7 @@ import no.nav.bidrag.domene.enums.rolle.Rolletype 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.felles.commonObjectmapper import no.nav.bidrag.transport.person.PersonDto import org.junit.jupiter.api.BeforeEach @@ -82,7 +89,13 @@ class DtoMapperTest : TestContainerRunner() { evnevurderingService, personService, ) - dtomapper = Dtomapper(tilgangskontrollService, validering, validerBehandlingService, vedtakGrunnlagsmapper, BeregnBarnebidragApi()) + dtomapper = Dtomapper( + tilgangskontrollService, + validering, + validerBehandlingService, + vedtakGrunnlagsmapper, + BeregnBarnebidragApi() + ) stubUtils.stubTilgangskontrollPersonISak() every { tilgangskontrollService.harBeskyttelse(any()) } returns false every { tilgangskontrollService.harTilgang(any(), any()) } returns true @@ -109,18 +122,18 @@ class DtoMapperTest : TestContainerRunner() { rolle = behandling.bidragsmottaker!!, type = Grunnlagsdatatype.BOFORHOLD, data = - commonObjectmapper.writeValueAsString( - setOf( - BoforholdResponseV2( - kilde = Kilde.OFFENTLIG, - periodeFom = LocalDate.now().minusYears(13), - periodeTom = null, - bostatus = Bostatuskode.MED_FORELDER, - fødselsdato = LocalDate.now().minusYears(13), - gjelderPersonId = testdataBarn1.ident, - ), + commonObjectmapper.writeValueAsString( + setOf( + BoforholdResponseV2( + kilde = Kilde.OFFENTLIG, + periodeFom = LocalDate.now().minusYears(13), + periodeTom = null, + bostatus = Bostatuskode.MED_FORELDER, + fødselsdato = LocalDate.now().minusYears(13), + gjelderPersonId = testdataBarn1.ident, ), ), + ), ), ) @@ -135,18 +148,18 @@ class DtoMapperTest : TestContainerRunner() { rolle = behandling.bidragsmottaker!!, type = Grunnlagsdatatype.BOFORHOLD, data = - commonObjectmapper.writeValueAsString( - setOf( - BoforholdResponseV2( - kilde = Kilde.OFFENTLIG, - periodeFom = nyFomdato, - periodeTom = null, - bostatus = Bostatuskode.IKKE_MED_FORELDER, - fødselsdato = LocalDate.now().minusYears(13), - gjelderPersonId = testdataBarn1.ident, - ), + commonObjectmapper.writeValueAsString( + setOf( + BoforholdResponseV2( + kilde = Kilde.OFFENTLIG, + periodeFom = nyFomdato, + periodeTom = null, + bostatus = Bostatuskode.IKKE_MED_FORELDER, + fødselsdato = LocalDate.now().minusYears(13), + gjelderPersonId = testdataBarn1.ident, ), ), + ), ), ) @@ -178,6 +191,141 @@ class DtoMapperTest : TestContainerRunner() { } } + @Test + fun `skal returnere diff for Barnetilsyn`() { + // gitt + val behandling = + oppretteTestbehandling( + false, + false, + false, + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + val barnetilsynInnhentesForRolle = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(behandling)!! + barnetilsynInnhentesForRolle shouldBe behandling.bidragsmottaker!! + val innhentet = LocalDateTime.now() + + // gjeldende barnetilsyn + behandling.grunnlag.add( + Grunnlag( + aktiv = LocalDateTime.now().minusDays(5), + behandling = behandling, + innhentet = LocalDateTime.now().minusDays(5), + gjelder = testdataBarn1.ident, + erBearbeidet = true, + rolle = barnetilsynInnhentesForRolle, + type = Grunnlagsdatatype.BARNETILSYN, + data = + commonObjectmapper.writeValueAsString( + setOf( + BarnetilsynGrunnlagDto( + beløp = 4000, + periodeFra = LocalDate.now().minusYears(13), + periodeTil = null, + skolealder = null, + tilsynstype = null, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!! + ), + ), + ), + ), + ) + + // nytt barnetilsyn + behandling.grunnlag.add( + Grunnlag( + aktiv = null, + behandling = behandling, + innhentet = innhentet, + gjelder = testdataBarn1.ident, + erBearbeidet = true, + rolle = barnetilsynInnhentesForRolle, + type = Grunnlagsdatatype.BARNETILSYN, + data = + commonObjectmapper.writeValueAsString( + setOf( + BarnetilsynGrunnlagDto( + beløp = 4500, + periodeFra = LocalDate.now().minusYears(1), + periodeTil = LocalDate.now().minusMonths(6), + skolealder = Skolealder.IKKE_ANGITT, + tilsynstype = Tilsynstype.IKKE_ANGITT, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!! + ), + BarnetilsynGrunnlagDto( + beløp = 4600, + periodeFra = LocalDate.now().minusMonths(6), + periodeTil = LocalDate.now().minusMonths(4), + skolealder = Skolealder.OVER, + tilsynstype = Tilsynstype.HELTID, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!! + ), + BarnetilsynGrunnlagDto( + beløp = 4700, + periodeFra = LocalDate.now().minusMonths(4), + periodeTil = null, + skolealder = null, + tilsynstype = null, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!! + ), + ), + ), + ), + ) + + // hvis + val ikkeAktivereGrunnlagsdata = + dtomapper.tilAktivereGrunnlagResponseV2(behandling).ikkeAktiverteEndringerIGrunnlagsdata + + // så + ikkeAktivereGrunnlagsdata.stønadTilBarnetilsyn shouldNotBe null + + assertSoftly(ikkeAktivereGrunnlagsdata.stønadTilBarnetilsyn!!) { + stønadTilBarnetilsyn shouldNotBe null + grunnlag shouldNotBe null + innhentetTidspunkt shouldBe innhentet + } + + ikkeAktivereGrunnlagsdata.stønadTilBarnetilsyn.stønadTilBarnetilsyn.shouldHaveSize(1) + + val nyttBarnetilsyn = ikkeAktivereGrunnlagsdata.stønadTilBarnetilsyn.stønadTilBarnetilsyn[Personident(testdataBarn1.ident)] + nyttBarnetilsyn?.shouldHaveSize(3) + + assertSoftly(nyttBarnetilsyn!!.elementAt(0)) { + periode shouldBe DatoperiodeDto( + LocalDate.now().minusYears(1), + LocalDate.now().minusMonths(6).minusDays(1) + ) + tilsynstype shouldBe null + skolealder shouldBe null + kilde shouldBe Kilde.OFFENTLIG + } + + assertSoftly(nyttBarnetilsyn.elementAt(1)) { + skolealder shouldBe Skolealder.OVER + tilsynstype shouldBe Tilsynstype.HELTID + periode shouldBe DatoperiodeDto( + LocalDate.now().minusMonths(6), + LocalDate.now().minusMonths(4).minusDays(1) + ) + kilde shouldBe Kilde.OFFENTLIG + } + + assertSoftly(nyttBarnetilsyn.elementAt(2)) { + skolealder shouldBe null + tilsynstype shouldBe null + periode shouldBe DatoperiodeDto(LocalDate.now().minusMonths(4), null) + kilde shouldBe Kilde.OFFENTLIG + } + } + @Test fun `skal returnere diff for arbeidsforhold`() { // gitt @@ -228,16 +376,16 @@ class DtoMapperTest : TestContainerRunner() { rolle = behandling.bidragsmottaker!!, type = Grunnlagsdatatype.SIVILSTAND, data = - commonObjectmapper.writeValueAsString( - setOf( - Sivilstand( - kilde = Kilde.OFFENTLIG, - periodeFom = LocalDate.now().minusYears(13), - periodeTom = null, - sivilstandskode = Sivilstandskode.GIFT_SAMBOER, - ), + commonObjectmapper.writeValueAsString( + setOf( + Sivilstand( + kilde = Kilde.OFFENTLIG, + periodeFom = LocalDate.now().minusYears(13), + periodeTom = null, + sivilstandskode = Sivilstandskode.GIFT_SAMBOER, ), ), + ), ), ) @@ -250,16 +398,16 @@ class DtoMapperTest : TestContainerRunner() { rolle = behandling.bidragsmottaker!!, type = Grunnlagsdatatype.SIVILSTAND, data = - commonObjectmapper.writeValueAsString( - setOf( - Sivilstand( - kilde = Kilde.OFFENTLIG, - periodeFom = LocalDate.now().minusYears(15), - periodeTom = null, - sivilstandskode = Sivilstandskode.GIFT_SAMBOER, - ), + commonObjectmapper.writeValueAsString( + setOf( + Sivilstand( + kilde = Kilde.OFFENTLIG, + periodeFom = LocalDate.now().minusYears(15), + periodeTom = null, + sivilstandskode = Sivilstandskode.GIFT_SAMBOER, ), ), + ), ), ) @@ -299,11 +447,11 @@ class DtoMapperTest : TestContainerRunner() { ) every { personService.hentPerson(testdataBarn1.ident) } returns - PersonDto( - ident = Personident(testdataBarn1.ident), - navn = testdataBarn1.navn, - fødselsdato = testdataBarn1.fødselsdato, - ) + PersonDto( + ident = Personident(testdataBarn1.ident), + navn = testdataBarn1.navn, + fødselsdato = testdataBarn1.fødselsdato, + ) every { personService.hentNyesteIdent(any()) } returns Personident(testdataBarn1.ident) @@ -344,11 +492,11 @@ class DtoMapperTest : TestContainerRunner() { ) every { personService.hentPerson(testdataBarn1.ident) } returns - PersonDto( - ident = Personident(testdataBarn1.ident), - navn = testdataBarn1.navn, - fødselsdato = testdataBarn1.fødselsdato, - ) + PersonDto( + ident = Personident(testdataBarn1.ident), + navn = testdataBarn1.navn, + fødselsdato = testdataBarn1.fødselsdato, + ) // hvis val dto = dtomapper.tilUnderholdDto(behandling.underholdskostnader.find { it.person.id == 10L }!!) diff --git a/src/test/resources/__files/hente-grunnlagrespons-bidrag-barnetilsyn-bm.json b/src/test/resources/__files/hente-grunnlagrespons-bidrag-barnetilsyn-bm.json index 5125280dc..dbd14cffe 100644 --- a/src/test/resources/__files/hente-grunnlagrespons-bidrag-barnetilsyn-bm.json +++ b/src/test/resources/__files/hente-grunnlagrespons-bidrag-barnetilsyn-bm.json @@ -19,6 +19,14 @@ "periodeFra": "2024-01-01", "skolealder": "OVER", "tilsynstype": "HELTID" + }, + { + "barnPersonId": "15043215", + "beløp": 3500, + "partPersonId": "313213213", + "periodeFra": "2024-01-01", + "skolealder": "OVER", + "tilsynstype": "DELTID" } ], "hentetTidspunkt": "2024-01-16T15:10:44.003848261", From 14f03be5477d0b6f89c7ad3b667ba9b3ee871f50 Mon Sep 17 00:00:00 2001 From: s148719 Date: Thu, 28 Nov 2024 15:37:34 +0100 Subject: [PATCH 10/21] Update Person.kt --- .../no/nav/bidrag/behandling/database/datamodell/Person.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt index 2088859b7..35c7a1eab 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt @@ -35,12 +35,8 @@ open class Person( ) open val rolle: MutableSet = mutableSetOf(), ) { -<<<<<<< HEAD val personident get() = ident?.let { Personident(it) } ?: rolle.first().ident?.let { Personident(it) } - override fun toString(): String = "Person(id=$id, ident=$ident, navn=$navn, fødselsdato=$fødselsdato, opprettet=$opprettet)" -======= override fun toString(): String = "Person(id=$id, ident=$ident, navn=$navn, fødselsdato=$fødselsdato, opprettet=$opprettet, roller=$rolle)" ->>>>>>> main } From ba39e16db88a2b311fe5d3bd2a5f78eada6b49af Mon Sep 17 00:00:00 2001 From: s148719 Date: Thu, 28 Nov 2024 16:04:30 +0100 Subject: [PATCH 11/21] merge + ktlinting --- .../behandling/database/datamodell/Rolle.kt | 3 +- .../dto/v2/behandling/BehandlingDtoV2.kt | 49 +- .../behandling/service/GrunnlagService.kt | 142 +-- .../service/NotatOpplysningerService.kt | 2 +- .../bidrag/behandling/service/NotatService.kt | 5 +- .../behandling/transformers/Dtomapper.kt | 535 +++++----- .../behandling/AktivGrunnlagMapping.kt | 8 +- .../behandling/BehandlingDtoMapping.kt | 2 +- .../transformers/underhold/Utvidelser.kt | 11 +- .../behandling/service/GrunnlagServiceTest.kt | 944 +++++++++--------- .../behandling/transformers/DtoMapperTest.kt | 206 ++-- 11 files changed, 966 insertions(+), 941 deletions(-) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt index 7ac9dada4..afc367601 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt @@ -84,6 +84,7 @@ open class Rolle( open var person: Person? = null, ) { val personident get() = person?.ident?.let { Personident(it) } ?: this.ident?.let { Personident(it) } + override fun toString(): String = "Rolle(id=$id, behandling=${behandling.id}, rolletype=$rolletype, ident=$ident, fødselsdato=$fødselsdato, opprettet=$opprettet, navn=$navn, deleted=$deleted, innbetaltBeløp=$innbetaltBeløp)" } @@ -113,7 +114,7 @@ fun Rolle.henteLagretSivilstandshistorikk(behandling: Behandling): Set( forrigeSivilstandshistorikk ?: oppdateringAvBoforholdFeilet( "Fant ikke tidligere lagret sivilstandshistorikk for " + - "bidragsmottaker i behandling ${behandling.id}", + "bidragsmottaker i behandling ${behandling.id}", ), ) 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 95f77575a..d5c1cd693 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 @@ -257,10 +257,10 @@ data class IkkeAktiveInntekter( val ingenEndringer get() = barnetillegg.isEmpty() && - utvidetBarnetrygd.isEmpty() && - kontantstøtte.isEmpty() && - småbarnstillegg.isEmpty() && - årsinntekter.isEmpty() + utvidetBarnetrygd.isEmpty() && + kontantstøtte.isEmpty() && + småbarnstillegg.isEmpty() && + årsinntekter.isEmpty() } data class Grunnlagsinnhentingsfeil( @@ -361,7 +361,7 @@ data class PeriodeAndreVoksneIHusstanden( val totalAntallHusstandsmedlemmer: Int, @Schema( description = - "Detaljer om husstandsmedlemmer som bor hos BP for gjeldende periode. " + + "Detaljer om husstandsmedlemmer som bor hos BP for gjeldende periode. " + "Antall hustandsmedlemmer er begrenset til maks 10 personer", ) val husstandsmedlemmer: List = emptyList(), @@ -521,23 +521,26 @@ fun Grunnlagsdatatype.tilInntektrapporteringYtelse() = fun Grunnlagsdatatype.innhentesForRolle(behandling: Behandling) = when (this) { - Grunnlagsdatatype.BARNETILSYN -> when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { - Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker - Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig - else -> null - } - - Grunnlagsdatatype.BOFORHOLD -> when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { - Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker - Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig - else -> null - } - - Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { - Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker - Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig - else -> null - } + Grunnlagsdatatype.BARNETILSYN -> + when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { + Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker + Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig + else -> null + } + + Grunnlagsdatatype.BOFORHOLD -> + when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { + Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker + Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig + else -> null + } + + Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> + when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { + Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker + Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig + else -> null + } else -> null - } \ No newline at end of file + } 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 e1fc7388e..a4f57258e 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt @@ -122,13 +122,13 @@ class GrunnlagService( behandling.grunnlagsinnhentingFeilet = objectmapper.writeValueAsString(feilrapporteringer) secureLogger.error { "Det oppstod feil i fbm. innhenting av grunnlag for behandling ${behandling.id}. " + - "Innhentingen ble derfor ikke gjort for følgende grunnlag: " + - "${feilrapporteringer.map { "${it.key}: ${it.value}" }}" + "Innhentingen ble derfor ikke gjort for følgende grunnlag: " + + "${feilrapporteringer.map { "${it.key}: ${it.value}" }}" } log.error { "Det oppstod feil i fbm. innhenting av grunnlag for behandling ${behandling.id}. " + - "Innhentingen ble derfor ikke gjort for følgende grunnlagstyper: " + - "${feilrapporteringer.map { it.key }}" + "Innhentingen ble derfor ikke gjort for følgende grunnlagstyper: " + + "${feilrapporteringer.map { it.key }}" } } } else { @@ -136,7 +136,7 @@ class GrunnlagService( log.info { "Grunnlag for behandling ${behandling.id} ble sist innhentet ${behandling.grunnlagSistInnhentet}. " + - "Ny innhenting vil tidligst blir foretatt $nesteInnhenting." + "Ny innhenting vil tidligst blir foretatt $nesteInnhenting." } } } @@ -148,9 +148,10 @@ class GrunnlagService( ) { val rolleGrunnlagErInnhentetFor = when (request.grunnlagstype) { - Grunnlagsdatatype.BOFORHOLD, Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> request.grunnlagstype.innhentesForRolle( - behandling - ) + Grunnlagsdatatype.BOFORHOLD, Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> + request.grunnlagstype.innhentesForRolle( + behandling, + ) else -> behandling.roller.find { request.personident?.verdi == it.ident } @@ -173,11 +174,11 @@ class GrunnlagService( if (!harIkkeaktivertGrunnlag) { log.warn { "Fant ingen grunnlag med type ${request.grunnlagstype} å aktivere for i behandling ${behandling.id} " + - " for oppgitt person." + " for oppgitt person." } ressursIkkeFunnetException( "Fant ikke grunnlag av type ${request.grunnlagstype} å aktivere i behandling ${behandling.id} " + - "for oppgitt personident.", + "for oppgitt personident.", ) } @@ -206,7 +207,7 @@ class GrunnlagService( } else { log.error { "Grunnlagstype ${request.grunnlagstype} ikke støttet ved aktivering av grunnlag. Aktivering feilet " + - "for behandling ${behandling.id} " + "for behandling ${behandling.id} " } aktiveringAvGrunnlagstypeIkkeStøttetException(behandling.id!!) } @@ -271,7 +272,8 @@ class GrunnlagService( val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD val sisteIkkeAktiveGrunnlag = behandling.henteNyesteIkkeAktiveGrunnlag( - Grunnlagstype(grunnlagsdatatype, false), grunnlagsdatatype.innhentesForRolle(behandling)!!, + Grunnlagstype(grunnlagsdatatype, false), + grunnlagsdatatype.innhentesForRolle(behandling)!!, ) ?: run { log.debug { "Fant ingen ikke-aktive boforholdsgrunnlag. Gjør ingen endringer" } return @@ -297,7 +299,8 @@ class GrunnlagService( val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN val sisteAktiveGrunnlag = behandling.henteNyesteAktiveGrunnlag( - Grunnlagstype(grunnlagsdatatype, false), grunnlagsdatatype.innhentesForRolle(behandling)!!, + Grunnlagstype(grunnlagsdatatype, false), + grunnlagsdatatype.innhentesForRolle(behandling)!!, ) ?: run { log.warn { "Fant ingen aktive andre voksne i husstanden. Oppdaterer ikke andre voksne i husstanden beregnet etter virkningstidspunkt ble endret" @@ -312,7 +315,8 @@ class GrunnlagService( val grunnlagsdatatype = Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN val sisteIkkeAktiveGrunnlag = behandling.henteNyesteIkkeAktiveGrunnlag( - Grunnlagstype(grunnlagsdatatype, false), grunnlagsdatatype.innhentesForRolle(behandling)!!, + Grunnlagstype(grunnlagsdatatype, false), + grunnlagsdatatype.innhentesForRolle(behandling)!!, ) ?: run { log.debug { "Fant ingen ikke-aktive andre voksne i husstanden grunnlag. Gjør ingen endringer" } return @@ -458,7 +462,7 @@ class GrunnlagService( throw HttpClientErrorException( HttpStatus.NOT_FOUND, "Fant ingen grunnlag av type ${Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN} " + - "å aktivere for BP i behandling ${behandling.id}", + "å aktivere for BP i behandling ${behandling.id}", ) } @@ -491,7 +495,7 @@ class GrunnlagService( throw HttpClientErrorException( HttpStatus.NOT_FOUND, "Fant ingen grunnlag av type $grunnlagstype å aktivere for oppgitt husstandsmeldem i behandling " + - behandling.id, + behandling.id, ) } @@ -507,12 +511,12 @@ class GrunnlagService( if (bmsEgneBarnIHusstandenFraNyesteGrunnlagsinnhenting.isNullOrEmpty()) { log.error { "Fant ingen husstandsmedlemmer som er barn av ${grunnlagsdatatype.innhentesForRolle(behandling)!!.rolletype} i " + - "nyeste boforholdsgrunnlag i behandling ${behandling.id}" + "nyeste boforholdsgrunnlag i behandling ${behandling.id}" } throw HttpClientErrorException( HttpStatus.INTERNAL_SERVER_ERROR, "Fant ingen husstandsmedlemmer som er barn av ${grunnlagsdatatype.innhentesForRolle(behandling)!!.rolletype} " + - "i nyeste boforholdsgrunnlag i behandling ${behandling.id}", + "i nyeste boforholdsgrunnlag i behandling ${behandling.id}", ) } @@ -580,10 +584,10 @@ class GrunnlagService( private fun foretaNyGrunnlagsinnhenting(behandling: Behandling): Boolean = behandling.grunnlagSistInnhentet == null || - behandling.grunnlagsinnhentingFeilet != null || - LocalDateTime - .now() - .minusMinutes(grenseInnhenting.toLong()) > behandling.grunnlagSistInnhentet + behandling.grunnlagsinnhentingFeilet != null || + LocalDateTime + .now() + .minusMinutes(grenseInnhenting.toLong()) > behandling.grunnlagSistInnhentet private fun henteOglagreGrunnlag( behandling: Behandling, @@ -623,8 +627,8 @@ class GrunnlagService( if (tekniskFeilVedHentingAvInntekter) { log.warn { "Innhenting av ${Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER} for rolle ${rolleInnhentetFor.rolletype} " + - "i behandling ${behandling.id} feilet for type ${feilVedHentingAvInntekter!!.feiltype} " + - "med begrunnelse ${feilVedHentingAvInntekter.feilmelding}." + "i behandling ${behandling.id} feilet for type ${feilVedHentingAvInntekter!!.feiltype} " + + "med begrunnelse ${feilVedHentingAvInntekter.feilmelding}." } } @@ -866,9 +870,9 @@ class GrunnlagService( if (endringerSomMåBekreftes == null || endringerSomMåBekreftes.perioder.isEmpty()) { log.info { "Bps ikke aktive boforholdsgrunnlag med type " + - "${Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN} i behandling ${behandling.id} har " + - "ingen endringer som må bekreftes av saksbehandler. Automatisk aktiverer ny innhentet " + - "grunnlag." + "${Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN} i behandling ${behandling.id} har " + + "ingen endringer som må bekreftes av saksbehandler. Automatisk aktiverer ny innhentet " + + "grunnlag." } ikkeAktiveGrunnlag .hentGrunnlagForType( @@ -905,9 +909,9 @@ class GrunnlagService( .find { it.gjelder != null && it.gjelder == hb.ident } ?: return@forEach log.info { "Ikke aktive boforhold grunnlag ${ikkeAktivGrunnlag.id} med type ${Grunnlagsdatatype.BOFORHOLD}" + - " for rolle ${rolleInhentetFor.rolletype}" + - " i behandling ${behandling.id} har ingen endringer som må bekreftes av saksbehandler. " + - "Automatisk aktiverer ny innhentet grunnlag." + " for rolle ${rolleInhentetFor.rolletype}" + + " i behandling ${behandling.id} har ingen endringer som må bekreftes av saksbehandler. " + + "Automatisk aktiverer ny innhentet grunnlag." } ikkeAktivGrunnlag.aktiv = LocalDateTime.now() } @@ -946,11 +950,11 @@ class GrunnlagService( private fun innhentetGrunnlagInneholderInntekterEllerYtelser(innhentetGrunnlag: HentGrunnlagDto): Boolean = innhentetGrunnlag.ainntektListe.size > 0 || - innhentetGrunnlag.skattegrunnlagListe.size > 0 || - innhentetGrunnlag.barnetilleggListe.size > 0 || - innhentetGrunnlag.kontantstøtteListe.size > 0 || - innhentetGrunnlag.småbarnstilleggListe.size > 0 || - innhentetGrunnlag.utvidetBarnetrygdListe.size > 0 + innhentetGrunnlag.skattegrunnlagListe.size > 0 || + innhentetGrunnlag.barnetilleggListe.size > 0 || + innhentetGrunnlag.kontantstøtteListe.size > 0 || + innhentetGrunnlag.småbarnstilleggListe.size > 0 || + innhentetGrunnlag.utvidetBarnetrygdListe.size > 0 private fun sammenstilleOgLagreInntekter( behandling: Behandling, @@ -980,15 +984,15 @@ class GrunnlagService( ) { log.warn { "Feil ved innhenting av grunnlagstype $type for rolle ${rolleInhentetFor.rolletype} " + - "i behandling ${behandling.id}. Lagrer ikke sammenstilte inntekter. Feilmelding: " + - feilrapportering.feilmelding + "i behandling ${behandling.id}. Lagrer ikke sammenstilte inntekter. Feilmelding: " + + feilrapportering.feilmelding } return@forEach } log.info { "Ignorerer funksjonell feil ved grunnlagsinnhenting av grunnlag $type for rolle " + - "${rolleInhentetFor.rolletype} i behandling ${behandling.id}. Feilmelding: " + - feilrapportering.feilmelding + "${rolleInhentetFor.rolletype} i behandling ${behandling.id}. Feilmelding: " + + feilrapportering.feilmelding } } @@ -1016,7 +1020,7 @@ class GrunnlagService( } else { log.error { "Grunnlagsdatatype $type skal ikke lagres som inntektsgrunnlag i behandling " + - rolleInhentetFor.behandling.id!! + rolleInhentetFor.behandling.id!! } lagringAvGrunnlagFeiletException(rolleInhentetFor.behandling.id!!) } @@ -1042,8 +1046,8 @@ class GrunnlagService( if (!inneholderEndringerSomMåBekreftes) { log.info { "Ikke aktive grunnlag med type $type for rolle ${rolleInhentetFor.rolletype}" + - " i behandling ${behandling.id} har ingen endringer som må bekreftes av saksbehandler. " + - "Automatisk aktiverer ny innhentet grunnlag." + " i behandling ${behandling.id} har ingen endringer som må bekreftes av saksbehandler. " + + "Automatisk aktiverer ny innhentet grunnlag." } ikkeAktiveGrunnlag .hentGrunnlagForType(type, rolleInhentetFor.ident!!) @@ -1066,7 +1070,7 @@ class GrunnlagService( SummerteInntekter( versjon = sammenstilteInntekter.versjon, inntekter = - sammenstilteInntekter.summertÅrsinntektListe.filter { summertAinntektstyper.contains(it.inntektRapportering) } + + sammenstilteInntekter.summertÅrsinntektListe.filter { summertAinntektstyper.contains(it.inntektRapportering) } + sammenstilteInntekter.summertÅrsinntektListe.filter { summertSkattegrunnlagstyper.contains(it.inntektRapportering) }, @@ -1155,7 +1159,7 @@ class GrunnlagService( } catch (exception: Exception) { log.warn { "Exception oppstod ved parsing av nyeste bearbeida sivilstandsgrunnlag: ${exception.message}. " + - "Dette skyldes mest sannsynlig gamle data." + "Dette skyldes mest sannsynlig gamle data." } return emptySet() } @@ -1193,10 +1197,10 @@ class GrunnlagService( val skalLagres = innhentetGrunnlag.isNotEmpty() || - Grunnlagstype( - Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, - false, - ) == grunnlagstype + Grunnlagstype( + Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, + false, + ) == grunnlagstype if (erFørstegangsinnhenting && skalLagres || erGrunnlagEndret && nyesteGrunnlag?.aktiv != null) { val aktivert = @@ -1226,7 +1230,7 @@ class GrunnlagService( log.info { "Oppdaterer uaktivert grunnlag ${grunnlagSomSkalOppdateres.id} " + - "i behandling ${behandling.id} med ny innhentet grunnlagsdata" + "i behandling ${behandling.id} med ny innhentet grunnlagsdata" } grunnlagSomSkalOppdateres.data = tilJson(innhentetGrunnlag) grunnlagSomSkalOppdateres.innhentet = LocalDateTime.now() @@ -1235,11 +1239,11 @@ class GrunnlagService( uaktiverteGrunnlag.filter { it.id != grunnlagSomSkalOppdateres.id }.forEach { log.info { "Sletter grunnlag ${it.id} fra behandling ${behandling.id} " + - "fordi den er duplikat av grunnlag ${grunnlagSomSkalOppdateres.id}" + "fordi den er duplikat av grunnlag ${grunnlagSomSkalOppdateres.id}" } secureLogger.info { "Sletter grunnlag ${it.id} fra behandling ${behandling.id} " + - "fordi den er duplikat av grunnlag ${grunnlagSomSkalOppdateres.id}: $it" + "fordi den er duplikat av grunnlag ${grunnlagSomSkalOppdateres.id}: $it" } behandling.grunnlag.remove(it) grunnlagRepository.deleteById(it.id!!) @@ -1380,13 +1384,13 @@ class GrunnlagService( innhentet = hentetTidspunkt, // Summerte månedsinntekter settes alltid til aktiv aktiv = - if (nyesteGrunnlag?.aktiv != null && - Grunnlagsdatatype.SUMMERTE_MÅNEDSINNTEKTER != grunnlagstype.type.getOrMigrate() - ) { - aktiveringstidspunkt - } else { - LocalDateTime.now() - }, + if (nyesteGrunnlag?.aktiv != null && + Grunnlagsdatatype.SUMMERTE_MÅNEDSINNTEKTER != grunnlagstype.type.getOrMigrate() + ) { + aktiveringstidspunkt + } else { + LocalDateTime.now() + }, idTilRolleInnhentetFor = rolle.id!!, ) if (grunnlagstype.erBearbeidet && aktiveringstidspunkt != null) { @@ -1462,9 +1466,9 @@ class GrunnlagService( grunnlag .filter { it.type == grunnlagstype.type && - it.rolle.id == rolle.id && - grunnlagstype.erBearbeidet == it.erBearbeidet && - it.gjelder == gjelder?.verdi + it.rolle.id == rolle.id && + grunnlagstype.erBearbeidet == it.erBearbeidet && + it.gjelder == gjelder?.verdi }.toSet() .maxByOrNull { it.innhentet } @@ -1487,9 +1491,9 @@ class GrunnlagService( .hentSisteAktiv() .find { it.type == grunnlagstype.type && - it.rolle.id == rolle.id && - it.gjelder == gjelderPerson?.verdi && - grunnlagstype.erBearbeidet == it.erBearbeidet + it.rolle.id == rolle.id && + it.gjelder == gjelderPerson?.verdi && + grunnlagstype.erBearbeidet == it.erBearbeidet }?.let { commonObjectmapper.readValue>(it.data) } ?.toSet() ?: emptySet() @@ -1501,8 +1505,8 @@ class GrunnlagService( .hentSisteAktiv() .find { it.rolle.id == rolle.id && - it.type == grunnlagstype.type.getOrMigrate() && - it.erBearbeidet == grunnlagstype.erBearbeidet + it.type == grunnlagstype.type.getOrMigrate() && + it.erBearbeidet == grunnlagstype.erBearbeidet }?.let { commonObjectmapper.readValue(it.data) } private fun lagreGrunnlagHvisEndret( @@ -1528,8 +1532,8 @@ class GrunnlagService( } else { log.warn { "Innhenting av $it for rolle ${rolleInhentetFor.rolletype} " + "i behandling ${behandling.id} " + - "feilet for type ${feilrapportering.grunnlagstype} med begrunnelse " + - "${feilrapportering.feilmelding}. Lagrer ikke grunnlag" + "feilet for type ${feilrapportering.grunnlagstype} med begrunnelse " + + "${feilrapportering.feilmelding}. Lagrer ikke grunnlag" } } } @@ -1707,7 +1711,7 @@ class GrunnlagService( else -> { log.warn { "Forsøkte å lagre grunnlag av type $grunnlagsdatatype for rolle ${rolleInhentetFor.rolletype} " + - "i behandling ${behandling.id}" + "i behandling ${behandling.id}" } lagringAvGrunnlagFeiletException(behandling.id!!) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatOpplysningerService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatOpplysningerService.kt index d8a671221..6adde8028 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatOpplysningerService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatOpplysningerService.kt @@ -186,7 +186,7 @@ class NotatOpplysningerService( .hentAlleBearbeidaBoforhold( behandling.virkningstidspunktEllerSøktFomDato, behandling.husstandsmedlem, - Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!, + Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!!, ) val opplysningerSivilstand = diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt index cbe6d9c4b..6cce5d503 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt @@ -32,7 +32,7 @@ class NotatService { behandling = behandling, rolle = rolle, innhold = notattekst, - type = notattype + type = notattype, ), ) } @@ -79,8 +79,7 @@ class NotatService { fun henteUnderholdsnotat( behandling: Behandling, rolle: Rolle, - ): String? = - behandling.notater.find { it.rolle.id == rolle.id!! && Notattype.UNDERHOLDSKOSTNAD == it.type }?.innhold + ): String? = behandling.notater.find { it.rolle.id == rolle.id!! && Notattype.UNDERHOLDSKOSTNAD == it.type }?.innhold fun henteInntektsnotat( behandling: Behandling, 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 37e8fc144..67417997b 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt @@ -116,8 +116,7 @@ class Dtomapper( fun tilUnderholdDto(underholdskostnad: Underholdskostnad) = underholdskostnad.tilDto() - fun tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(behandling: Behandling) = - behandling.tilBeregnetUnderholdskostnad() + fun tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(behandling: Behandling) = behandling.tilBeregnetUnderholdskostnad() fun tilFaktiskTilsynsutgiftDto(faktiskTilsynsutgift: FaktiskTilsynsutgift) = faktiskTilsynsutgift.tilDto() @@ -128,10 +127,10 @@ class Dtomapper( boforhold = behandling.tilBoforholdV2(), inntekter = behandling.tilInntektDtoV2(behandling.grunnlagListe.toSet().hentSisteAktiv(), true), aktiveGrunnlagsdata = - behandling.grunnlagListe - .toSet() - .hentSisteAktiv() - .tilAktiveGrunnlagsdata(), + behandling.grunnlagListe + .toSet() + .hentSisteAktiv() + .tilAktiveGrunnlagsdata(), ikkeAktiverteEndringerIGrunnlagsdata = behandling.ikkeAktiveGrunnlagsdata(), ) @@ -173,16 +172,22 @@ class Dtomapper( gjelderBarn = this.person.tilPersoninfoDto(rolleSøknadsbarn), faktiskTilsynsutgift = this.faktiskeTilsynsutgifter.sortedBy { it.fom }.tilFaktiskeTilsynsutgiftDtos(), stønadTilBarnetilsyn = - rolleSøknadsbarn?.let { this.barnetilsyn.sortedBy { it.fom }.tilStønadTilBarnetilsynDtos() } - ?: emptySet(), - tilleggsstønad = rolleSøknadsbarn?.let { this.tilleggsstønad.sortedBy { it.fom }.tilTilleggsstønadDtos() } - ?: emptySet(), + rolleSøknadsbarn?.let { + this.barnetilsyn + .sortedBy { it.fom } + .toSet() + .tilStønadTilBarnetilsynDtos() + } + ?: emptySet(), + tilleggsstønad = + rolleSøknadsbarn?.let { this.tilleggsstønad.sortedBy { it.fom }.tilTilleggsstønadDtos() } + ?: emptySet(), underholdskostnad = rolleSøknadsbarn?.let { this.behandling.tilBeregnetUnderholdskostnad() } ?: emptySet(), begrunnelse = - NotatService.henteUnderholdsnotat( - this.behandling, - rolleSøknadsbarn ?: this.behandling.bidragsmottaker!!, - ), + NotatService.henteUnderholdsnotat( + this.behandling, + rolleSøknadsbarn ?: this.behandling.bidragsmottaker!!, + ), ) } @@ -268,10 +273,10 @@ class Dtomapper( kategori = tilSærbidragKategoriDto(), maksGodkjentBeløp = utgift.tilMaksGodkjentBeløpDto(), begrunnelse = - BegrunnelseDto( - innhold = henteNotatinnhold(this, NotatType.UTGIFTER), - gjelder = this.henteRolleForNotat(NotatType.UTGIFTER, null).tilDto(), - ), + BegrunnelseDto( + innhold = henteNotatinnhold(this, NotatType.UTGIFTER), + gjelder = this.henteRolleForNotat(NotatType.UTGIFTER, null).tilDto(), + ), utgifter = utgift.utgiftsposter.sorter().map { it.tilDto() }, valideringsfeil = valideringsfeil, totalBeregning = utgift.tilTotalBeregningDto(), @@ -282,10 +287,10 @@ class Dtomapper( avslag = avslag, kategori = tilSærbidragKategoriDto(), begrunnelse = - BegrunnelseDto( - innhold = henteNotatinnhold(this, NotatType.UTGIFTER), - gjelder = this.henteRolleForNotat(NotatType.UTGIFTER, null).tilDto(), - ), + BegrunnelseDto( + innhold = henteNotatinnhold(this, NotatType.UTGIFTER), + gjelder = this.henteRolleForNotat(NotatType.UTGIFTER, null).tilDto(), + ), valideringsfeil = utgift.hentValideringsfeil(), ) } else { @@ -336,10 +341,10 @@ class Dtomapper( kostpenger = this.kostpenger ?: BigDecimal.ZERO, kommentar = this.kommentar, total = - beregnBarnebidragApi.beregnMånedsbeløpFaktiskeUtgifter( - faktiskUtgift = this.tilsynsutgift, - kostpenger = this.kostpenger ?: BigDecimal.ZERO, - ) ?: BigDecimal.ZERO, + beregnBarnebidragApi.beregnMånedsbeløpFaktiskeUtgifter( + faktiskUtgift = this.tilsynsutgift, + kostpenger = this.kostpenger ?: BigDecimal.ZERO, + ) ?: BigDecimal.ZERO, ) fun List.tilFaktiskeTilsynsutgiftDtos() = this.map { it.tilDto() }.toSet() @@ -353,92 +358,92 @@ class Dtomapper( ) return BoforholdBarn( gjelder = - NotatPersonDto( - rolle = null, - navn = tilgangskontrollertPersoninfo.navn, - fødselsdato = tilgangskontrollertPersoninfo.fødselsdato, - ident = tilgangskontrollertPersoninfo.ident, - erBeskyttet = tilgangskontrollertPersoninfo.erBeskyttet, - ), + NotatPersonDto( + rolle = null, + navn = tilgangskontrollertPersoninfo.navn, + fødselsdato = tilgangskontrollertPersoninfo.fødselsdato, + ident = tilgangskontrollertPersoninfo.ident, + erBeskyttet = tilgangskontrollertPersoninfo.erBeskyttet, + ), kilde = kilde, medIBehandling = behandling.roller.any { it.ident == this.ident }, opplysningerFraFolkeregisteret = - opplysningerBoforhold - .filter { - it.gjelderPersonId == this.ident - }.map { - OpplysningerFraFolkeregisteret( + opplysningerBoforhold + .filter { + it.gjelderPersonId == this.ident + }.map { + OpplysningerFraFolkeregisteret( + periode = + ÅrMånedsperiode( + it.periodeFom, + it.periodeTom, + ), + status = it.bostatus, + ) + }, + opplysningerBruktTilBeregning = + perioder.sortedBy { it.datoFom }.map { periode -> + OpplysningerBruktTilBeregning( periode = - ÅrMånedsperiode( - it.periodeFom, - it.periodeTom, - ), - status = it.bostatus, + ÅrMånedsperiode( + periode.datoFom!!, + periode.datoTom, + ), + status = periode.bostatus, + kilde = periode.kilde, ) }, - opplysningerBruktTilBeregning = - perioder.sortedBy { it.datoFom }.map { periode -> - OpplysningerBruktTilBeregning( - periode = - ÅrMånedsperiode( - periode.datoFom!!, - periode.datoTom, - ), - status = periode.bostatus, - kilde = periode.kilde, - ) - }, ) } private fun Behandling.andreVoksneIHusstanden(): NotatAndreVoksneIHusstanden = NotatAndreVoksneIHusstanden( opplysningerFraFolkeregisteret = - grunnlag - .find { Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN == it.type && it.erBearbeidet } - .konvertereData>() - ?.map { - val periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom) - OpplysningerFraFolkeregisteretMedDetaljer( - periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), - status = it.bostatus!!, - detaljer = - NotatAndreVoksneIHusstandenDetaljerDto( - henteAndreVoksneIHusstanden(grunnlag, periode, true).size, - husstandsmedlemmer = - henteBegrensetAntallAndreVoksne(grunnlag, periode, true).map { voksen -> - - val navn = - if (voksen.erBeskyttet) { - val fødselssår = - voksen.fødselsdato?.let { ", født ${voksen.fødselsdato.year}" } ?: "" - "Person skjermet$fødselssår" - } else { - voksen.navn - } - - NotatVoksenIHusstandenDetaljerDto( - navn = navn, - fødselsdato = if (voksen.erBeskyttet) null else voksen.fødselsdato, - harRelasjonTilBp = voksen.harRelasjonTilBp, - erBeskyttet = voksen.erBeskyttet, - ) - }, - ), - ) - }?.toList() ?: emptyList(), + grunnlag + .find { Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN == it.type && it.erBearbeidet } + .konvertereData>() + ?.map { + val periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom) + OpplysningerFraFolkeregisteretMedDetaljer( + periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), + status = it.bostatus!!, + detaljer = + NotatAndreVoksneIHusstandenDetaljerDto( + henteAndreVoksneIHusstanden(grunnlag, periode, true).size, + husstandsmedlemmer = + henteBegrensetAntallAndreVoksne(grunnlag, periode, true).map { voksen -> + + val navn = + if (voksen.erBeskyttet) { + val fødselssår = + voksen.fødselsdato?.let { ", født ${voksen.fødselsdato.year}" } ?: "" + "Person skjermet$fødselssår" + } else { + voksen.navn + } + + NotatVoksenIHusstandenDetaljerDto( + navn = navn, + fødselsdato = if (voksen.erBeskyttet) null else voksen.fødselsdato, + harRelasjonTilBp = voksen.harRelasjonTilBp, + erBeskyttet = voksen.erBeskyttet, + ) + }, + ), + ) + }?.toList() ?: emptyList(), opplysningerBruktTilBeregning = - husstandsmedlem.voksneIHusstanden?.perioder?.sortedBy { it.datoFom }?.map { periode -> - OpplysningerBruktTilBeregning( - periode = - ÅrMånedsperiode( - periode.datoFom!!, - periode.datoTom, - ), - status = periode.bostatus, - kilde = periode.kilde, - ) - } ?: emptyList(), + husstandsmedlem.voksneIHusstanden?.perioder?.sortedBy { it.datoFom }?.map { periode -> + OpplysningerBruktTilBeregning( + periode = + ÅrMånedsperiode( + periode.datoFom!!, + periode.datoTom, + ), + status = periode.bostatus, + kilde = periode.kilde, + ) + } ?: emptyList(), ) private fun Behandling.ikkeAktiveGrunnlagsdata(): IkkeAktiveGrunnlagsdata { @@ -449,68 +454,68 @@ class Dtomapper( val aktiveGrunnlag = behandling.grunnlagListe.toSet().hentSisteAktiv() return IkkeAktiveGrunnlagsdata( inntekter = - IkkeAktiveInntekter( - årsinntekter = - roller - .flatMap { - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( - it, - inntekter, - Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER, - ) - }.toSet(), - småbarnstillegg = - roller - .flatMap { - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( - it, - inntekter, - Grunnlagsdatatype.SMÅBARNSTILLEGG, - ) - }.toSet(), - utvidetBarnetrygd = - roller - .flatMap { - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( - it, - inntekter, - Grunnlagsdatatype.UTVIDET_BARNETRYGD, - ) - }.toSet(), - kontantstøtte = - roller - .flatMap { - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( - it, - inntekter, - Grunnlagsdatatype.KONTANTSTØTTE, - ) - }.toSet(), - barnetillegg = - roller - .flatMap { - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( - it, - inntekter, - Grunnlagsdatatype.BARNETILLEGG, - ) - }.toSet(), - ), + IkkeAktiveInntekter( + årsinntekter = + roller + .flatMap { + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( + it, + inntekter, + Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER, + ) + }.toSet(), + småbarnstillegg = + roller + .flatMap { + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( + it, + inntekter, + Grunnlagsdatatype.SMÅBARNSTILLEGG, + ) + }.toSet(), + utvidetBarnetrygd = + roller + .flatMap { + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( + it, + inntekter, + Grunnlagsdatatype.UTVIDET_BARNETRYGD, + ) + }.toSet(), + kontantstøtte = + roller + .flatMap { + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( + it, + inntekter, + Grunnlagsdatatype.KONTANTSTØTTE, + ) + }.toSet(), + barnetillegg = + roller + .flatMap { + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerInntekter( + it, + inntekter, + Grunnlagsdatatype.BARNETILLEGG, + ) + }.toSet(), + ), arbeidsforhold = sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIArbeidsforhold(aktiveGrunnlag), husstandsmedlem = - sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIBoforhold(aktiveGrunnlag, behandling), + sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIBoforhold(aktiveGrunnlag, behandling), andreVoksneIHusstanden = - sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIAndreVoksneIBpsHusstand(aktiveGrunnlag), + sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIAndreVoksneIBpsHusstand(aktiveGrunnlag), sivilstand = - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerSivilstand( - aktiveGrunnlag, - behandling.virkningstidspunktEllerSøktFomDato, - ), + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerSivilstand( + aktiveGrunnlag, + behandling.virkningstidspunktEllerSøktFomDato, + ), stønadTilBarnetilsyn = - sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIBarnetilsyn( - aktiveGrunnlag.toSet(), - behandling, - ), + sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIBarnetilsyn( + aktiveGrunnlag.toSet(), + behandling, + ), ) } @@ -523,27 +528,27 @@ class Dtomapper( if (aktiveData != null && nyeData != null && !nyeData.erLik(aktiveData)) { return AndreVoksneIHusstandenGrunnlagDto( perioder = - nyeData - .asSequence() - .filter { it.bostatus != null } - .map { - PeriodeAndreVoksneIHusstanden( - periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), - status = it.bostatus!!, - totalAntallHusstandsmedlemmer = - toSet() - .hentAlleAndreVoksneHusstandForPeriode( - ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), - false, - ).size, - husstandsmedlemmer = - toSet() - .hentBegrensetAndreVoksneHusstandForPeriode( - ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), - false, - ), - ) - }.toSet(), + nyeData + .asSequence() + .filter { it.bostatus != null } + .map { + PeriodeAndreVoksneIHusstanden( + periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), + status = it.bostatus!!, + totalAntallHusstandsmedlemmer = + toSet() + .hentAlleAndreVoksneHusstandForPeriode( + ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), + false, + ).size, + husstandsmedlemmer = + toSet() + .hentBegrensetAndreVoksneHusstandForPeriode( + ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), + false, + ), + ) + }.toSet(), innhentet = nyttGrunnlag?.innhentet ?: LocalDateTime.now(), ) } @@ -579,35 +584,35 @@ class Dtomapper( søknadsid = soknadsid, behandlerenhet = behandlerEnhet, roller = - roller.map { it.tilDto() }.toSet(), + roller.map { it.tilDto() }.toSet(), søknadRefId = soknadRefId, vedtakRefId = refVedtaksid, virkningstidspunkt = - VirkningstidspunktDto( - virkningstidspunkt = virkningstidspunkt, - opprinneligVirkningstidspunkt = opprinneligVirkningstidspunkt, - årsak = årsak, - avslag = avslag, - begrunnelse = BegrunnelseDto(henteNotatinnhold(this, NotatType.VIRKNINGSTIDSPUNKT)), - ), + VirkningstidspunktDto( + virkningstidspunkt = virkningstidspunkt, + opprinneligVirkningstidspunkt = opprinneligVirkningstidspunkt, + årsak = årsak, + avslag = avslag, + begrunnelse = BegrunnelseDto(henteNotatinnhold(this, NotatType.VIRKNINGSTIDSPUNKT)), + ), boforhold = tilBoforholdV2(), inntekter = - tilInntektDtoV2( - grunnlag.hentSisteAktiv(), - inkluderHistoriskeInntekter = inkluderHistoriskeInntekter, - ), + tilInntektDtoV2( + grunnlag.hentSisteAktiv(), + inkluderHistoriskeInntekter = inkluderHistoriskeInntekter, + ), underholdskostnader = underholdskostnader.tilDtos(), aktiveGrunnlagsdata = grunnlag.hentSisteAktiv().tilAktiveGrunnlagsdata(), utgift = tilUtgiftDto(), samvær = tilSamværDto(), ikkeAktiverteEndringerIGrunnlagsdata = if (kanBehandles) ikkeAktiverteEndringerIGrunnlagsdata else IkkeAktiveGrunnlagsdata(), feilOppståttVedSisteGrunnlagsinnhenting = - grunnlagsinnhentingFeilet?.let { - val typeRef: TypeReference> = - object : TypeReference>() {} + grunnlagsinnhentingFeilet?.let { + val typeRef: TypeReference> = + object : TypeReference>() {} - objectmapper.readValue(it, typeRef).tilGrunnlagsinnhentingsfeil(this) - }, + objectmapper.readValue(it, typeRef).tilGrunnlagsinnhentingsfeil(this) + }, kanBehandlesINyLøsning = kanBehandles, kanIkkeBehandlesBegrunnelse = kanIkkeBehandlesBegrunnelse, ) @@ -616,57 +621,57 @@ class Dtomapper( private fun Husstandsmedlem.mapTilOppdatereBoforholdResponse() = OppdatereBoforholdResponse( oppdatertePerioderMedAndreVoksne = - (rolle?.rolletype == Rolletype.BIDRAGSPLIKTIG).ifTrue { perioder.tilBostatusperiode() } ?: emptySet(), + (rolle?.rolletype == Rolletype.BIDRAGSPLIKTIG).ifTrue { perioder.tilBostatusperiode() } ?: emptySet(), oppdatertHusstandsmedlem = - (rolle?.rolletype != Rolletype.BIDRAGSPLIKTIG).ifTrue { - tilBostatusperiode() - }, + (rolle?.rolletype != Rolletype.BIDRAGSPLIKTIG).ifTrue { + tilBostatusperiode() + }, egetBarnErEnesteVoksenIHusstanden = behandling.egetBarnErEnesteVoksenIHusstanden, valideringsfeil = - BoforholdValideringsfeil( - andreVoksneIHusstanden = - behandling.husstandsmedlem.voksneIHusstanden - ?.validereAndreVoksneIHusstanden(behandling.virkningstidspunktEllerSøktFomDato), - husstandsmedlem = - behandling.husstandsmedlem.barn - .toSet() - .validerBoforhold(behandling.virkningstidspunktEllerSøktFomDato) - .filter { it.harFeil }, - ), + BoforholdValideringsfeil( + andreVoksneIHusstanden = + behandling.husstandsmedlem.voksneIHusstanden + ?.validereAndreVoksneIHusstanden(behandling.virkningstidspunktEllerSøktFomDato), + husstandsmedlem = + behandling.husstandsmedlem.barn + .toSet() + .validerBoforhold(behandling.virkningstidspunktEllerSøktFomDato) + .filter { it.harFeil }, + ), beregnetBoforhold = behandling.tilBeregnetBoforhold(), ) private fun Behandling.tilBoforholdV2() = BoforholdDtoV2( husstandsmedlem = - husstandsmedlem.barn - .toSet() - .sortert() - .map { it.tilBostatusperiode() } - .toSet(), + husstandsmedlem.barn + .toSet() + .sortert() + .map { it.tilBostatusperiode() } + .toSet(), andreVoksneIHusstanden = husstandsmedlem.voksneIHusstanden?.perioder?.tilBostatusperiode() ?: emptySet(), sivilstand = sivilstand.toSivilstandDto(), begrunnelse = - BegrunnelseDto( - innhold = henteNotatinnhold(this, NotatType.BOFORHOLD), - gjelder = this.henteRolleForNotat(NotatType.BOFORHOLD, null).tilDto(), - ), + BegrunnelseDto( + innhold = henteNotatinnhold(this, NotatType.BOFORHOLD), + gjelder = this.henteRolleForNotat(NotatType.BOFORHOLD, null).tilDto(), + ), egetBarnErEnesteVoksenIHusstanden = egetBarnErEnesteVoksenIHusstanden, beregnetBoforhold = tilBeregnetBoforhold(), valideringsfeil = - BoforholdValideringsfeil( - andreVoksneIHusstanden = - husstandsmedlem.voksneIHusstanden - ?.validereAndreVoksneIHusstanden( - virkningstidspunkt!!, - )?.takeIf { it.harFeil }, - husstandsmedlem = - husstandsmedlem.barn - .toSet() - .validerBoforhold(virkningstidspunktEllerSøktFomDato) - .filter { it.harFeil }, - sivilstand = sivilstand.validereSivilstand(virkningstidspunktEllerSøktFomDato).takeIf { it.harFeil }, - ), + BoforholdValideringsfeil( + andreVoksneIHusstanden = + husstandsmedlem.voksneIHusstanden + ?.validereAndreVoksneIHusstanden( + virkningstidspunkt!!, + )?.takeIf { it.harFeil }, + husstandsmedlem = + husstandsmedlem.barn + .toSet() + .validerBoforhold(virkningstidspunktEllerSøktFomDato) + .filter { it.harFeil }, + sivilstand = sivilstand.validereSivilstand(virkningstidspunktEllerSøktFomDato).takeIf { it.harFeil }, + ), ) private fun Behandling.tilBeregnetBoforhold() = @@ -675,10 +680,10 @@ class Dtomapper( BeregnApi().beregnBoforhold( BeregnGrunnlag( grunnlagListe = - vedtakGrunnlagMapper.mapper - .run { - tilGrunnlagBostatus() + tilPersonobjekter() - }.toList(), + vedtakGrunnlagMapper.mapper + .run { + tilGrunnlagBostatus() + tilPersonobjekter() + }.toList(), periode = ÅrMånedsperiode(virkningstidspunkt!!, null), søknadsbarnReferanse = "", ), @@ -698,15 +703,15 @@ class Dtomapper( id = this.id, kilde = this.kilde, medIBehandling = - !this.ident.isNullOrBlank() && + !this.ident.isNullOrBlank() && behandling.søknadsbarn .map { it.ident } .contains(this.ident), perioder = - this.perioder - .sortedBy { it.datoFom } - .toSet() - .tilBostatusperiode(), + this.perioder + .sortedBy { it.datoFom } + .toSet() + .tilBostatusperiode(), ident = tilgangskontrollertPersoninfo.ident?.verdi, navn = tilgangskontrollertPersoninfo.navn, fødselsdato = tilgangskontrollertPersoninfo.fødselsdato, @@ -730,8 +735,7 @@ class Dtomapper( val periodeBorHosBP = ÅrMånedsperiode(p.periodeFra!!, p.periodeTil?.plusMonths(1)) periodeBorHosBP.fom <= periode.fom && periodeBorHosBP.tilEllerMax() <= periode.tilEllerMax() } - } - ?.map { it.tilAndreVoksneIHusstandenDetaljerDto(Saksnummer(boforholdAndreVoksneIHusstanden?.behandling?.saksnummer!!)) } + }?.map { it.tilAndreVoksneIHusstandenDetaljerDto(Saksnummer(boforholdAndreVoksneIHusstanden?.behandling?.saksnummer!!)) } ?.sorter() ?: emptyList() } @@ -749,25 +753,24 @@ class Dtomapper( private fun Set.hentBegrensetAndreVoksneHusstandForPeriode( periode: ÅrMånedsperiode, erAktivert: Boolean = true, - ): List = - hentAlleAndreVoksneHusstandForPeriode(periode, erAktivert).begrensAntallPersoner() + ): List = hentAlleAndreVoksneHusstandForPeriode(periode, erAktivert).begrensAntallPersoner() private fun List.tilAktiveGrunnlagsdata() = AktiveGrunnlagsdata( arbeidsforhold = - filter { it.type == Grunnlagsdatatype.ARBEIDSFORHOLD && !it.erBearbeidet } - .mapNotNull { it.konvertereData>() } - .flatten() - .toSet(), + filter { it.type == Grunnlagsdatatype.ARBEIDSFORHOLD && !it.erBearbeidet } + .mapNotNull { it.konvertereData>() } + .flatten() + .toSet(), husstandsmedlem = - filter { it.type == Grunnlagsdatatype.BOFORHOLD && it.erBearbeidet }.tilHusstandsmedlem(), + filter { it.type == Grunnlagsdatatype.BOFORHOLD && it.erBearbeidet }.tilHusstandsmedlem(), andreVoksneIHusstanden = tilAndreVoksneIHusstanden(true), sivilstand = - find { it.type == Grunnlagsdatatype.SIVILSTAND && !it.erBearbeidet }.toSivilstand(), + find { it.type == Grunnlagsdatatype.SIVILSTAND && !it.erBearbeidet }.toSivilstand(), stønadTilBarnetilsyn = - filter { it.type == Grunnlagsdatatype.BARNETILSYN && it.erBearbeidet } - .toSet() - .tilBarnetilsynAktiveGrunnlagDto(), + filter { it.type == Grunnlagsdatatype.BARNETILSYN && it.erBearbeidet } + .toSet() + .tilBarnetilsynAktiveGrunnlagDto(), ) private fun List.tilAndreVoksneIHusstanden(erAktivert: Boolean) = @@ -785,11 +788,11 @@ class Dtomapper( periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), status = it.bostatus!!, totalAntallHusstandsmedlemmer = - toSet() - .hentAlleAndreVoksneHusstandForPeriode( - periode, - erAktivert, - ).size, + toSet() + .hentAlleAndreVoksneHusstandForPeriode( + periode, + erAktivert, + ).size, husstandsmedlemmer = toSet().hentBegrensetAndreVoksneHusstandForPeriode(periode, erAktivert), ) }?.toSet() ?: emptySet() @@ -802,15 +805,15 @@ private fun List.tilHusstandsmedlem() = innhentetTidspunkt = it.innhentet, ident = it.gjelder, perioder = - it - .konvertereData>() - ?.map { boforholdrespons -> - HusstandsmedlemGrunnlagDto.BostatusperiodeGrunnlagDto( - boforholdrespons.periodeFom, - boforholdrespons.periodeTom, - boforholdrespons.bostatus, - ) - }?.toSet() ?: emptySet(), + it + .konvertereData>() + ?.map { boforholdrespons -> + HusstandsmedlemGrunnlagDto.BostatusperiodeGrunnlagDto( + boforholdrespons.periodeFom, + boforholdrespons.periodeTom, + boforholdrespons.bostatus, + ) + }?.toSet() ?: emptySet(), ) }.toSet() diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt index 0504e6d4a..7ef77dd06 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt @@ -8,13 +8,13 @@ import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.database.datamodell.henteBearbeidaInntekterForType import no.nav.bidrag.behandling.database.datamodell.konvertereData import no.nav.bidrag.behandling.dto.v1.behandling.SivilstandDto -import no.nav.bidrag.behandling.dto.v2.behandling.StønadTilBarnetilsynIkkeAktiveGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.GrunnlagInntektEndringstype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.HusstandsmedlemGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.IkkeAktivInntektDto import no.nav.bidrag.behandling.dto.v2.behandling.InntektspostEndringDto import no.nav.bidrag.behandling.dto.v2.behandling.SivilstandIkkeAktivGrunnlagDto +import no.nav.bidrag.behandling.dto.v2.behandling.StønadTilBarnetilsynIkkeAktiveGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.transformers.ainntekt12Og3Måneder import no.nav.bidrag.behandling.transformers.ainntekt12Og3MånederFraOpprinneligVedtakstidspunkt @@ -175,7 +175,11 @@ fun List.henteEndringerIBarnetilsyn( stønadTilBarnetilsyn = nyeBarnetilsynsdataTilknyttetSøknadsbarn .map { - it.key to it.value.tilBarnetilsyn(behandling.henteUnderholdskostnadPersonident(it.key)!!).tilStønadTilBarnetilsynDtos() + it.key to + it.value + .tilBarnetilsyn(behandling.henteUnderholdskostnadPersonident(it.key)!!) + .toSet() + .tilStønadTilBarnetilsynDtos() }.toMap(), grunnlag = nyeBarnetilsyn 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 ecf9cf73c..0af2e1183 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 @@ -12,13 +12,13 @@ import no.nav.bidrag.behandling.database.datamodell.tilPersonident import no.nav.bidrag.behandling.database.grunnlag.SummerteInntekter import no.nav.bidrag.behandling.dto.v1.behandling.BegrunnelseDto import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto -import no.nav.bidrag.behandling.dto.v2.behandling.StønadTilBarnetilsynAktiveGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDetaljerDtoV2 import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsinnhentingsfeil import no.nav.bidrag.behandling.dto.v2.behandling.KanBehandlesINyLøsningRequest import no.nav.bidrag.behandling.dto.v2.behandling.SivilstandAktivGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.SjekkRolleDto +import no.nav.bidrag.behandling.dto.v2.behandling.StønadTilBarnetilsynAktiveGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.dto.v2.inntekt.BeregnetInntekterDto import no.nav.bidrag.behandling.dto.v2.inntekt.InntekterDtoV2 diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt index 1ac5a1385..dd67a2e2b 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt @@ -21,14 +21,15 @@ fun Barnetilsyn.tilStønadTilBarnetilsynDto(): StønadTilBarnetilsynDto = false -> Skolealder.OVER else -> null }, - tilsynstype = when(this.omfang) { - Tilsynstype.IKKE_ANGITT -> null - else -> this.omfang - }, + tilsynstype = + when (this.omfang) { + Tilsynstype.IKKE_ANGITT -> null + else -> this.omfang + }, kilde = this.kilde, ) -fun List.tilStønadTilBarnetilsynDtos() = map { it.tilStønadTilBarnetilsynDto() }.toSet() +fun Set.tilStønadTilBarnetilsynDtos() = map { it.tilStønadTilBarnetilsynDto() }.toSet() fun Behandling.harAndreBarnIUnderhold() = this.underholdskostnader.find { it.person.rolle.isEmpty() } != null 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 d0b6c4014..93c48d45e 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt @@ -300,21 +300,30 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling.underholdskostnader.flatMap { it.barnetilsyn } shouldHaveSize 2 - val stønadTilBarnetilsyn = behandling.underholdskostnader.find { it.person.rolle.first().personident?.verdi == testdataBarn1.ident }!!.barnetilsyn.sortedBy { it.fom } + val stønadTilBarnetilsyn = + behandling.underholdskostnader + .find { + it.person.rolle + .first() + .personident + ?.verdi == testdataBarn1.ident + }!! + .barnetilsyn + .sortedBy { it.fom } stønadTilBarnetilsyn shouldHaveSize 2 assertSoftly(stønadTilBarnetilsyn.elementAt(0)) { it.omfang shouldBe Tilsynstype.HELTID it.under_skolealder shouldBe false - it.fom shouldBe LocalDate.of(2023,1,1) - it.tom shouldBe LocalDate.of(2023, 12,31) + it.fom shouldBe LocalDate.of(2023, 1, 1) + it.tom shouldBe LocalDate.of(2023, 12, 31) it.kilde shouldBe Kilde.OFFENTLIG } assertSoftly(stønadTilBarnetilsyn.elementAt(1)) { it.omfang shouldBe Tilsynstype.HELTID it.under_skolealder shouldBe false - it.fom shouldBe LocalDate.of(2024,1,1) + it.fom shouldBe LocalDate.of(2024, 1, 1) it.tom shouldBe null it.kilde shouldBe Kilde.OFFENTLIG } @@ -351,15 +360,15 @@ class GrunnlagServiceTest : TestContainerRunner() { arbeidsforhold .filter { a -> a.partPersonId == behandling.bidragsmottaker!!.ident!! && - a.sluttdato == null && - a.startdato == - LocalDate.of( - 2002, - 11, - 3, - ) && - a.arbeidsgiverNavn == "SAUEFABRIKK" && - a.arbeidsgiverOrgnummer == "896929119" + a.sluttdato == null && + a.startdato == + LocalDate.of( + 2002, + 11, + 3, + ) && + a.arbeidsgiverNavn == "SAUEFABRIKK" && + a.arbeidsgiverOrgnummer == "896929119" }.toSet() .size shouldBe 1 } @@ -733,22 +742,22 @@ class GrunnlagServiceTest : TestContainerRunner() { val skattegrunnlag = SkattegrunnlagGrunnlagDto( periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), personId = behandling.bidragsmottaker!!.ident!!, skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - beløp = BigDecimal(450000), - belop = BigDecimal(450000), - inntektType = "renteinntektAvObligasjon", - skattegrunnlagType = "ORINÆR", + listOf( + SkattegrunnlagspostDto( + beløp = BigDecimal(450000), + belop = BigDecimal(450000), + inntektType = "renteinntektAvObligasjon", + skattegrunnlagType = "ORINÆR", + ), ), - ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -764,12 +773,12 @@ class GrunnlagServiceTest : TestContainerRunner() { stubUtils.stubHenteGrunnlag( rolle = it, responsobjekt = - tilHentGrunnlagDto( - skattegrunnlag = - listOf( - skattegrunnlag, + tilHentGrunnlagDto( + skattegrunnlag = + listOf( + skattegrunnlag, + ), ), - ), ) else -> stubUtils.stubHenteGrunnlag(rolle = it, tomRespons = true) @@ -824,42 +833,42 @@ class GrunnlagServiceTest : TestContainerRunner() { val skattegrunnlag = SkattegrunnlagGrunnlagDto( periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), personId = behandling.bidragsmottaker!!.ident!!, skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - beløp = BigDecimal(450000), - belop = BigDecimal(450000), - inntektType = "renteinntektAvObligasjon", - skattegrunnlagType = "ORINÆR", + listOf( + SkattegrunnlagspostDto( + beløp = BigDecimal(450000), + belop = BigDecimal(450000), + inntektType = "renteinntektAvObligasjon", + skattegrunnlagType = "ORINÆR", + ), ), - ), ) val skattegrunnlagNy = SkattegrunnlagGrunnlagDto( periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), personId = behandling.bidragsmottaker!!.ident!!, skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - beløp = BigDecimal(450000), - belop = BigDecimal(450000), - inntektType = "renteinntektAvObligasjon", - skattegrunnlagType = "Something else", + listOf( + SkattegrunnlagspostDto( + beløp = BigDecimal(450000), + belop = BigDecimal(450000), + inntektType = "renteinntektAvObligasjon", + skattegrunnlagType = "Something else", + ), ), - ), ) testdataManager.oppretteOgLagreGrunnlag( behandling, @@ -874,10 +883,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentingstidspunkt, innhentingstidspunkt, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - skattegrunnlagListe = listOf(skattegrunnlag), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + skattegrunnlagListe = listOf(skattegrunnlag), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) behandling.roller.forEach { when (it.rolletype) { @@ -885,12 +894,12 @@ class GrunnlagServiceTest : TestContainerRunner() { stubUtils.stubHenteGrunnlag( rolle = it, responsobjekt = - tilHentGrunnlagDto( - skattegrunnlag = - listOf( - skattegrunnlagNy, + tilHentGrunnlagDto( + skattegrunnlag = + listOf( + skattegrunnlagNy, + ), ), - ), ) else -> stubUtils.stubHenteGrunnlag(rolle = it, tomRespons = true) @@ -924,48 +933,48 @@ class GrunnlagServiceTest : TestContainerRunner() { val skattegrunnlag = SkattegrunnlagGrunnlagDto( periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), personId = behandling.bidragsmottaker!!.ident!!, skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - beløp = BigDecimal(450000), - belop = BigDecimal(450000), - inntektType = "renteinntektAvObligasjon", - skattegrunnlagType = "ORINÆR", + listOf( + SkattegrunnlagspostDto( + beløp = BigDecimal(450000), + belop = BigDecimal(450000), + inntektType = "renteinntektAvObligasjon", + skattegrunnlagType = "ORINÆR", + ), ), - ), ) val skattegrunnlagNy = SkattegrunnlagGrunnlagDto( periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), personId = behandling.bidragsmottaker!!.ident!!, skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - beløp = BigDecimal(450000), - belop = BigDecimal(450000), - inntektType = "renteinntektAvObligasjon", - skattegrunnlagType = "Something else", - ), - SkattegrunnlagspostDto( - beløp = BigDecimal(100000), - belop = BigDecimal(100000), - inntektType = "gevinstVedRealisasjonAvAksje", - skattegrunnlagType = "Something else", + listOf( + SkattegrunnlagspostDto( + beløp = BigDecimal(450000), + belop = BigDecimal(450000), + inntektType = "renteinntektAvObligasjon", + skattegrunnlagType = "Something else", + ), + SkattegrunnlagspostDto( + beløp = BigDecimal(100000), + belop = BigDecimal(100000), + inntektType = "gevinstVedRealisasjonAvAksje", + skattegrunnlagType = "Something else", + ), ), - ), ) testdataManager.oppretteOgLagreGrunnlag( behandling, @@ -980,10 +989,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentingstidspunkt, innhentingstidspunkt, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - skattegrunnlagListe = listOf(skattegrunnlag), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + skattegrunnlagListe = listOf(skattegrunnlag), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) behandling.roller.forEach { when (it.rolletype) { @@ -991,12 +1000,12 @@ class GrunnlagServiceTest : TestContainerRunner() { stubUtils.stubHenteGrunnlag( rolle = it, responsobjekt = - tilHentGrunnlagDto( - skattegrunnlag = - listOf( - skattegrunnlagNy, + tilHentGrunnlagDto( + skattegrunnlag = + listOf( + skattegrunnlagNy, + ), ), - ), ) else -> stubUtils.stubHenteGrunnlag(rolle = it, tomRespons = true) @@ -1050,12 +1059,12 @@ class GrunnlagServiceTest : TestContainerRunner() { stubUtils.stubHenteGrunnlag( it, responsobjekt = - tilHentGrunnlagDto( - småbarnstillegg = - listOf( - småbarnstillegg, + tilHentGrunnlagDto( + småbarnstillegg = + listOf( + småbarnstillegg, + ), ), - ), ) Rolletype.BARN -> stubUtils.stubHenteGrunnlag(it, tomRespons = true) @@ -1520,13 +1529,13 @@ class GrunnlagServiceTest : TestContainerRunner() { husstandsmedlemmer .filter { h -> h.navn == "Småstein Nilsen" && - h.fødselsdato == - LocalDate.of( - 2020, - 1, - 24, - ) && - h.erBarn + h.fødselsdato == + LocalDate.of( + 2020, + 1, + 24, + ) && + h.erBarn }.toSet() .size shouldBe 1 } @@ -1595,26 +1604,26 @@ class GrunnlagServiceTest : TestContainerRunner() { sivilstand .filter { s -> s.personId == testdataBM.ident && - s.bekreftelsesdato == - LocalDate.of( - 2021, - 1, - 1, - ) && - s.gyldigFom == - LocalDate.of( - 2021, - 1, - 1, - ) && - s.master == "FREG" && - s.historisk == true && - s.registrert == - LocalDateTime.parse( - "2022-01-01T10:03:57.285", - DateTimeFormatter.ISO_LOCAL_DATE_TIME, - ) && - s.type == SivilstandskodePDL.GIFT + s.bekreftelsesdato == + LocalDate.of( + 2021, + 1, + 1, + ) && + s.gyldigFom == + LocalDate.of( + 2021, + 1, + 1, + ) && + s.master == "FREG" && + s.historisk == true && + s.registrert == + LocalDateTime.parse( + "2022-01-01T10:03:57.285", + DateTimeFormatter.ISO_LOCAL_DATE_TIME, + ) && + s.type == SivilstandskodePDL.GIFT }.toSet() .size shouldBe 1 } @@ -1649,7 +1658,7 @@ class GrunnlagServiceTest : TestContainerRunner() { grunnlagService.oppdatereGrunnlagForBehandling(behandling) // så - behandling.grunnlag.size shouldBe totaltAntallGrunnlag + 1 + behandling.grunnlag.size shouldBe totaltAntallGrunnlag + 2 val grunnlagBarnetillegg = behandling.grunnlag @@ -1760,15 +1769,15 @@ class GrunnlagServiceTest : TestContainerRunner() { arbeidsforhold .filter { a -> a.partPersonId == behandling.bidragsmottaker!!.ident!! && - a.sluttdato == null && - a.startdato == - LocalDate.of( - 2002, - 11, - 3, - ) && - a.arbeidsgiverNavn == "SAUEFABRIKK" && - a.arbeidsgiverOrgnummer == "896929119" + a.sluttdato == null && + a.startdato == + LocalDate.of( + 2002, + 11, + 3, + ) && + a.arbeidsgiverNavn == "SAUEFABRIKK" && + a.arbeidsgiverOrgnummer == "896929119" }.toSet() .size shouldBe 1 } @@ -1817,7 +1826,7 @@ class GrunnlagServiceTest : TestContainerRunner() { .filter { it.type == Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER && !it.erBearbeidet } .filter { it.rolle == - behandling.bidragspliktig!! + behandling.bidragspliktig!! }.toSet(), ) { g -> g shouldHaveSize 1 @@ -2115,7 +2124,6 @@ class GrunnlagServiceTest : TestContainerRunner() { @Test @Transactional open fun `skal aktivere grunnlag av type boforhold for barn av BP i behandling av bidrag, og oppdatere husstandsmedlemtabell`() { - // gitt val behandling = oppretteTestbehandling( @@ -2143,22 +2151,22 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - setOf( - RelatertPersonGrunnlagDto( - relatertPersonPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - erBarnAvBmBp = true, - navn = null, - partPersonId = behandling.bidragspliktig!!.ident!!, - borISammeHusstandDtoListe = - listOf( - BorISammeHusstandDto( - testdataHusstandsmedlem1.fødselsdato, - periodeTil = null, - ), + setOf( + RelatertPersonGrunnlagDto( + relatertPersonPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + erBarnAvBmBp = true, + navn = null, + partPersonId = behandling.bidragspliktig!!.ident!!, + borISammeHusstandDtoListe = + listOf( + BorISammeHusstandDto( + testdataHusstandsmedlem1.fødselsdato, + periodeTil = null, + ), + ), ), ), - ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -2169,16 +2177,16 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = null, gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - BoforholdResponseV2( - bostatus = Bostatuskode.MED_FORELDER, - gjelderPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, + setOf( + BoforholdResponseV2( + bostatus = Bostatuskode.MED_FORELDER, + gjelderPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, + ), ), - ), ) val aktivereGrunnlagRequest = @@ -2376,11 +2384,11 @@ class GrunnlagServiceTest : TestContainerRunner() { partPersonId = behandling.bidragspliktig!!.ident!!, barnPersonId = behandling.søknadsbarn.first().ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløpBrutto = BigDecimal(40000), barnetilleggType = "Cash", @@ -2403,10 +2411,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - barnetilleggListe = barnetilleggGrunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragspliktig!!), + opprettHentGrunnlagDto() + .copy( + barnetilleggListe = barnetilleggGrunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragspliktig!!), ) val aktivereGrunnlagRequest = @@ -2456,22 +2464,22 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - setOf( - RelatertPersonGrunnlagDto( - relatertPersonPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - erBarnAvBmBp = true, - navn = null, - partPersonId = behandling.bidragspliktig!!.ident!!, - borISammeHusstandDtoListe = - listOf( - BorISammeHusstandDto( - testdataHusstandsmedlem1.fødselsdato, - periodeTil = null, - ), + setOf( + RelatertPersonGrunnlagDto( + relatertPersonPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + erBarnAvBmBp = true, + navn = null, + partPersonId = behandling.bidragspliktig!!.ident!!, + borISammeHusstandDtoListe = + listOf( + BorISammeHusstandDto( + testdataHusstandsmedlem1.fødselsdato, + periodeTil = null, + ), + ), ), ), - ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -2482,16 +2490,16 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = null, gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - BoforholdResponseV2( - bostatus = Bostatuskode.MED_FORELDER, - gjelderPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, + setOf( + BoforholdResponseV2( + bostatus = Bostatuskode.MED_FORELDER, + gjelderPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, + ), ), - ), ) val aktivereGrunnlagRequest = @@ -2900,11 +2908,11 @@ class GrunnlagServiceTest : TestContainerRunner() { UtvidetBarnetrygdGrunnlagDto( personId = behandling.bidragspliktig!!.ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløp = BigDecimal(37500), manueltBeregnet = false, @@ -2923,10 +2931,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - utvidetBarnetrygdListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragspliktig!!), + opprettHentGrunnlagDto() + .copy( + utvidetBarnetrygdListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragspliktig!!), ) val aktivereGrunnlagRequest = @@ -2965,11 +2973,11 @@ class GrunnlagServiceTest : TestContainerRunner() { SmåbarnstilleggGrunnlagDto( personId = behandling.bidragspliktig!!.ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløp = BigDecimal(35000), manueltBeregnet = false, @@ -2988,10 +2996,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - småbarnstilleggListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragspliktig!!), + opprettHentGrunnlagDto() + .copy( + småbarnstilleggListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragspliktig!!), ) val aktivereGrunnlagRequest = @@ -3047,10 +3055,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - kontantstøtteListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragspliktig!!), + opprettHentGrunnlagDto() + .copy( + kontantstøtteListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragspliktig!!), ) val aktivereGrunnlagRequest = @@ -3092,17 +3100,17 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - setOf( - SivilstandGrunnlagDto( - personId = behandling.bidragspliktig!!.ident!!, - type = SivilstandskodePDL.SKILT, - gyldigFom = LocalDate.now().minusMonths(29), - master = "FREG", - historisk = false, - registrert = LocalDateTime.now().minusMonths(29), - bekreftelsesdato = null, + setOf( + SivilstandGrunnlagDto( + personId = behandling.bidragspliktig!!.ident!!, + type = SivilstandskodePDL.SKILT, + gyldigFom = LocalDate.now().minusMonths(29), + master = "FREG", + historisk = false, + registrert = LocalDateTime.now().minusMonths(29), + bekreftelsesdato = null, + ), ), - ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -3112,14 +3120,14 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = null, gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - Sivilstand( - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, - sivilstandskode = Sivilstandskode.BOR_ALENE_MED_BARN, + setOf( + Sivilstand( + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, + sivilstandskode = Sivilstandskode.BOR_ALENE_MED_BARN, + ), ), - ), ) val aktivereGrunnlagRequest = @@ -3160,16 +3168,16 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = LocalDateTime.now(), gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - BoforholdResponseV2( - bostatus = Bostatuskode.MED_FORELDER, - gjelderPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, + setOf( + BoforholdResponseV2( + bostatus = Bostatuskode.MED_FORELDER, + gjelderPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, + ), ), - ), ) entityManager.flush() @@ -3216,59 +3224,59 @@ class GrunnlagServiceTest : TestContainerRunner() { val skattepliktigeInntekter = SkattepliktigeInntekter( ainntekter = - listOf( - AinntektGrunnlagDto( - personId = behandling.bidragsmottaker!!.ident!!, - periodeFra = YearMonth.now().minusMonths(2).atDay(1), - periodeTil = YearMonth.now().minusMonths(1).atDay(1), - ainntektspostListe = - listOf( - tilAinntektspostDto( - beskrivelse = "fastloenn", - beløp = BigDecimal(368000), - inntektstype = "FASTLOENN", - utbetalingsperiode = - YearMonth - .now() - .minusMonths(2) - .format(DateTimeFormatter.ofPattern("yyyy-MM")), - ), + listOf( + AinntektGrunnlagDto( + personId = behandling.bidragsmottaker!!.ident!!, + periodeFra = YearMonth.now().minusMonths(2).atDay(1), + periodeTil = YearMonth.now().minusMonths(1).atDay(1), + ainntektspostListe = + listOf( + tilAinntektspostDto( + beskrivelse = "fastloenn", + beløp = BigDecimal(368000), + inntektstype = "FASTLOENN", + utbetalingsperiode = + YearMonth + .now() + .minusMonths(2) + .format(DateTimeFormatter.ofPattern("yyyy-MM")), + ), + ), ), ), - ), skattegrunnlag = - listOf( - SkattegrunnlagGrunnlagDto( - personId = behandling.bidragsmottaker!!.ident!!, - periodeFra = skattegrunlagFraDato, - periodeTil = skattegrunlagFraDato.plusYears(1), - skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - skattegrunnlagType = "ORDINÆR", - beløp = BigDecimal(368000), - belop = BigDecimal(368000), - inntektType = "andelIFellesTapVedSalgAvAndelISDF", - kode = "andelIFellesTapVedSalgAvAndelISDF", - ), + listOf( + SkattegrunnlagGrunnlagDto( + personId = behandling.bidragsmottaker!!.ident!!, + periodeFra = skattegrunlagFraDato, + periodeTil = skattegrunlagFraDato.plusYears(1), + skattegrunnlagspostListe = + listOf( + SkattegrunnlagspostDto( + skattegrunnlagType = "ORDINÆR", + beløp = BigDecimal(368000), + belop = BigDecimal(368000), + inntektType = "andelIFellesTapVedSalgAvAndelISDF", + kode = "andelIFellesTapVedSalgAvAndelISDF", + ), + ), ), - ), - SkattegrunnlagGrunnlagDto( - personId = behandling.bidragsmottaker!!.ident!!, - periodeFra = skattegrunlagFraDato, - periodeTil = skattegrunlagFraDato.plusYears(1), - skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - skattegrunnlagType = "ORDINÆR", - beløp = BigDecimal(1368000), - belop = BigDecimal(1368000), - inntektType = "samletLoennsinntekt", - kode = "samletLoennsinntekt", - ), + SkattegrunnlagGrunnlagDto( + personId = behandling.bidragsmottaker!!.ident!!, + periodeFra = skattegrunlagFraDato, + periodeTil = skattegrunlagFraDato.plusYears(1), + skattegrunnlagspostListe = + listOf( + SkattegrunnlagspostDto( + skattegrunnlagType = "ORDINÆR", + beløp = BigDecimal(1368000), + belop = BigDecimal(1368000), + inntektType = "samletLoennsinntekt", + kode = "samletLoennsinntekt", + ), + ), ), ), - ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -3339,11 +3347,11 @@ class GrunnlagServiceTest : TestContainerRunner() { partPersonId = behandling.bidragsmottaker!!.ident!!, barnPersonId = behandling.søknadsbarn.first().ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløpBrutto = BigDecimal(40000), barnetilleggType = "Cash", @@ -3364,10 +3372,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - barnetilleggListe = barnetilleggGrunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + barnetilleggListe = barnetilleggGrunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) val aktivereGrunnlagRequest = @@ -3431,10 +3439,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - kontantstøtteListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + kontantstøtteListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) val aktivereGrunnlagRequest = @@ -3479,11 +3487,11 @@ class GrunnlagServiceTest : TestContainerRunner() { SmåbarnstilleggGrunnlagDto( personId = behandling.bidragsmottaker!!.ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløp = BigDecimal(35000), manueltBeregnet = false, @@ -3502,10 +3510,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - småbarnstilleggListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + småbarnstilleggListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) val aktivereGrunnlagRequest = @@ -3546,11 +3554,11 @@ class GrunnlagServiceTest : TestContainerRunner() { UtvidetBarnetrygdGrunnlagDto( personId = behandling.bidragsmottaker!!.ident!!, periodeFra = - YearMonth - .now() - .minusYears(1) - .withMonth(1) - .atDay(1), + YearMonth + .now() + .minusYears(1) + .withMonth(1) + .atDay(1), periodeTil = YearMonth.now().withMonth(1).atDay(1), beløp = BigDecimal(37500), manueltBeregnet = false, @@ -3569,10 +3577,10 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - opprettHentGrunnlagDto() - .copy( - utvidetBarnetrygdListe = grunnlag.toList(), - ).tilSummerteInntekter(behandling.bidragsmottaker!!), + opprettHentGrunnlagDto() + .copy( + utvidetBarnetrygdListe = grunnlag.toList(), + ).tilSummerteInntekter(behandling.bidragsmottaker!!), ) val aktivereGrunnlagRequest = AktivereGrunnlagRequestV2( @@ -3619,22 +3627,22 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - setOf( - RelatertPersonGrunnlagDto( - relatertPersonPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - erBarnAvBmBp = true, - navn = null, - partPersonId = behandling.bidragsmottaker!!.ident!!, - borISammeHusstandDtoListe = - listOf( - BorISammeHusstandDto( - testdataHusstandsmedlem1.fødselsdato, - periodeTil = null, - ), + setOf( + RelatertPersonGrunnlagDto( + relatertPersonPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + erBarnAvBmBp = true, + navn = null, + partPersonId = behandling.bidragsmottaker!!.ident!!, + borISammeHusstandDtoListe = + listOf( + BorISammeHusstandDto( + testdataHusstandsmedlem1.fødselsdato, + periodeTil = null, + ), + ), ), ), - ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -3644,16 +3652,16 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = null, gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - BoforholdResponseV2( - bostatus = Bostatuskode.MED_FORELDER, - gjelderPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, + setOf( + BoforholdResponseV2( + bostatus = Bostatuskode.MED_FORELDER, + gjelderPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, + ), ), - ), ) val aktivereGrunnlagRequest = @@ -3697,17 +3705,17 @@ class GrunnlagServiceTest : TestContainerRunner() { innhentet = LocalDate.of(2024, 1, 1).atStartOfDay(), aktiv = null, grunnlagsdata = - setOf( - SivilstandGrunnlagDto( - personId = behandling.bidragsmottaker!!.ident!!, - type = SivilstandskodePDL.SKILT, - gyldigFom = LocalDate.now().minusMonths(29), - master = "FREG", - historisk = false, - registrert = LocalDateTime.now().minusMonths(29), - bekreftelsesdato = null, + setOf( + SivilstandGrunnlagDto( + personId = behandling.bidragsmottaker!!.ident!!, + type = SivilstandskodePDL.SKILT, + gyldigFom = LocalDate.now().minusMonths(29), + master = "FREG", + historisk = false, + registrert = LocalDateTime.now().minusMonths(29), + bekreftelsesdato = null, + ), ), - ), ) testdataManager.oppretteOgLagreGrunnlag( @@ -3717,14 +3725,14 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = null, gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - Sivilstand( - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, - sivilstandskode = Sivilstandskode.BOR_ALENE_MED_BARN, + setOf( + Sivilstand( + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, + sivilstandskode = Sivilstandskode.BOR_ALENE_MED_BARN, + ), ), - ), ) val aktivereGrunnlagRequest = @@ -3984,16 +3992,16 @@ class GrunnlagServiceTest : TestContainerRunner() { aktiv = LocalDateTime.now(), gjelderIdent = testdataHusstandsmedlem1.ident, grunnlagsdata = - setOf( - BoforholdResponseV2( - bostatus = Bostatuskode.MED_FORELDER, - gjelderPersonId = testdataHusstandsmedlem1.ident, - fødselsdato = testdataHusstandsmedlem1.fødselsdato, - kilde = Kilde.OFFENTLIG, - periodeFom = testdataHusstandsmedlem1.fødselsdato, - periodeTom = null, + setOf( + BoforholdResponseV2( + bostatus = Bostatuskode.MED_FORELDER, + gjelderPersonId = testdataHusstandsmedlem1.ident, + fødselsdato = testdataHusstandsmedlem1.fødselsdato, + kilde = Kilde.OFFENTLIG, + periodeFom = testdataHusstandsmedlem1.fødselsdato, + periodeTom = null, + ), ), - ), ) entityManager.flush() @@ -4076,8 +4084,8 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling.grunnlag shouldBe emptySet() every { bidragGrunnlagConsumerMock.henteGrunnlag(any()) } returns ( - HentetGrunnlag(null, "Teknisk feil ved henting av grunnlag") - ) + HentetGrunnlag(null, "Teknisk feil ved henting av grunnlag") + ) // hvis grunnlagServiceMock.oppdatereGrunnlagForBehandling(behandling) @@ -4164,15 +4172,15 @@ class GrunnlagServiceTest : TestContainerRunner() { val innhentingUtenFeil = opprettHentGrunnlagDto().copy( ainntektListe = - oppretteSkattepliktigeInntekter( - behandling, - behandling.bidragsmottaker!!, - ).ainntekter, + oppretteSkattepliktigeInntekter( + behandling, + behandling.bidragsmottaker!!, + ).ainntekter, skattegrunnlagListe = - oppretteSkattepliktigeInntekter( - behandling, - behandling.bidragsmottaker!!, - ).skattegrunnlag, + oppretteSkattepliktigeInntekter( + behandling, + behandling.bidragsmottaker!!, + ).skattegrunnlag, ) every { @@ -4295,10 +4303,10 @@ class GrunnlagServiceTest : TestContainerRunner() { opprettHentGrunnlagDto().copy( arbeidsforholdListe = listOf(nyttArbeidsforhold!!), feilrapporteringListe = - oppretteFeilrapporteringerForPerson( - behandling.bidragsmottaker!!.ident!!, - HentGrunnlagFeiltype.FUNKSJONELL_FEIL, - ), + oppretteFeilrapporteringerForPerson( + behandling.bidragsmottaker!!.ident!!, + HentGrunnlagFeiltype.FUNKSJONELL_FEIL, + ), ) innhentingMedFeil.feilrapporteringListe shouldHaveSize 10 @@ -4419,14 +4427,14 @@ class GrunnlagServiceTest : TestContainerRunner() { opprettHentGrunnlagDto().copy( skattegrunnlagListe = listOf(nyttSkattegrunnlagselement), feilrapporteringListe = - oppretteFeilrapporteringer( - setOf( - behandling.bidragsmottaker!!.ident!!, - behandling.bidragspliktig!!.ident!!, - behandling.søknadsbarn.first().ident!!, + oppretteFeilrapporteringer( + setOf( + behandling.bidragsmottaker!!.ident!!, + behandling.bidragspliktig!!.ident!!, + behandling.søknadsbarn.first().ident!!, + ), + HentGrunnlagFeiltype.FUNKSJONELL_FEIL, ), - HentGrunnlagFeiltype.FUNKSJONELL_FEIL, - ), ) innhentingMedFeil.feilrapporteringListe shouldHaveSize 30 @@ -4520,7 +4528,7 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling.grunnlagsinnhentingFeilet = "{\"SKATTEPLIKTIGE_INNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"},\n" + - "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" + "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" // hvis grunnlagServiceMock.oppdatereGrunnlagForBehandling(behandling) @@ -4571,10 +4579,10 @@ class GrunnlagServiceTest : TestContainerRunner() { opprettHentGrunnlagDto().copy( skattegrunnlagListe = listOf(nyttSkattegrunnlagselement), feilrapporteringListe = - oppretteFeilrapporteringerForPerson( - behandling.bidragsmottaker!!.ident!!, - HentGrunnlagFeiltype.FUNKSJONELL_FEIL, - ), + oppretteFeilrapporteringerForPerson( + behandling.bidragsmottaker!!.ident!!, + HentGrunnlagFeiltype.FUNKSJONELL_FEIL, + ), ) innhentingMedFeil.feilrapporteringListe shouldHaveSize 10 @@ -4600,7 +4608,7 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling.grunnlagsinnhentingFeilet = "{\"SKATTEPLIKTIGE_INNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"},\n" + - "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" + "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" // hvis grunnlagServiceMock.oppdatereGrunnlagForBehandling(behandling) @@ -4650,14 +4658,14 @@ class GrunnlagServiceTest : TestContainerRunner() { opprettHentGrunnlagDto().copy( skattegrunnlagListe = listOf(nyttSkattegrunnlagselement), feilrapporteringListe = - oppretteFeilrapporteringer( - setOf( - behandling.bidragsmottaker!!.ident!!, - behandling.bidragspliktig!!.ident!!, - behandling.søknadsbarn.first().ident!!, + oppretteFeilrapporteringer( + setOf( + behandling.bidragsmottaker!!.ident!!, + behandling.bidragspliktig!!.ident!!, + behandling.søknadsbarn.first().ident!!, + ), + HentGrunnlagFeiltype.FUNKSJONELL_FEIL, ), - HentGrunnlagFeiltype.FUNKSJONELL_FEIL, - ), ) innhentingMedFeil.feilrapporteringListe shouldHaveSize 30 @@ -4683,7 +4691,7 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling.grunnlagsinnhentingFeilet = "{\"SKATTEPLIKTIGE_INNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"},\n" + - "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" + "\"SUMMERTE_MÅNEDSINNTEKTER\":{\"grunnlagstype\":\"SKATTEGRUNNLAG\",\"personId\":\"313213213\",\"periodeFra\":[2023,1,1],\"periodeTil\":[2023,12,31],\"feiltype\":\"TEKNISK_FEIL\",\"feilmelding\":\"Ouups!\"}}" // hvis grunnlagServiceMock.oppdatereGrunnlagForBehandling(behandling) @@ -4867,17 +4875,17 @@ fun oppretteFeilrapporteringer( grunnlagstype = it, feiltype = feiltype, periodeFra = - LocalDate - .now() - .minusYears(1) - .withMonth(1) - .withDayOfMonth(1), + LocalDate + .now() + .minusYears(1) + .withMonth(1) + .withDayOfMonth(1), periodeTil = - LocalDate - .now() - .minusYears(1) - .withMonth(12) - .withDayOfMonth(31), + LocalDate + .now() + .minusYears(1) + .withMonth(12) + .withDayOfMonth(31), personId = personident, ) } @@ -4904,57 +4912,57 @@ fun oppretteSkattepliktigeInntekter( .withDayOfMonth(1), ) = SkattepliktigeInntekter( ainntekter = - listOf( - AinntektGrunnlagDto( - personId = forRolle.ident!!, - periodeFra = YearMonth.now().minusMonths(2).atDay(1), - periodeTil = YearMonth.now().minusMonths(1).atDay(1), - ainntektspostListe = - listOf( - tilAinntektspostDto( - beskrivelse = "fastloenn", - beløp = BigDecimal(368000), - inntektstype = "FASTLOENN", - utbetalingsperiode = - YearMonth - .now() - .minusMonths(2) - .format(DateTimeFormatter.ofPattern("yyyy-MM")), - ), + listOf( + AinntektGrunnlagDto( + personId = forRolle.ident!!, + periodeFra = YearMonth.now().minusMonths(2).atDay(1), + periodeTil = YearMonth.now().minusMonths(1).atDay(1), + ainntektspostListe = + listOf( + tilAinntektspostDto( + beskrivelse = "fastloenn", + beløp = BigDecimal(368000), + inntektstype = "FASTLOENN", + utbetalingsperiode = + YearMonth + .now() + .minusMonths(2) + .format(DateTimeFormatter.ofPattern("yyyy-MM")), + ), + ), ), ), - ), skattegrunnlag = - listOf( - SkattegrunnlagGrunnlagDto( - personId = forRolle.ident!!, - periodeFra = skattegrunnlagFraDato, - periodeTil = skattegrunnlagFraDato.plusYears(1), - skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - skattegrunnlagType = "ORDINÆR", - beløp = BigDecimal(368000), - belop = BigDecimal(368000), - inntektType = "andelIFellesTapVedSalgAvAndelISDF", - kode = "andelIFellesTapVedSalgAvAndelISDF", - ), + listOf( + SkattegrunnlagGrunnlagDto( + personId = forRolle.ident!!, + periodeFra = skattegrunnlagFraDato, + periodeTil = skattegrunnlagFraDato.plusYears(1), + skattegrunnlagspostListe = + listOf( + SkattegrunnlagspostDto( + skattegrunnlagType = "ORDINÆR", + beløp = BigDecimal(368000), + belop = BigDecimal(368000), + inntektType = "andelIFellesTapVedSalgAvAndelISDF", + kode = "andelIFellesTapVedSalgAvAndelISDF", + ), + ), ), - ), - SkattegrunnlagGrunnlagDto( - personId = forRolle.ident!!, - periodeFra = skattegrunnlagFraDato, - periodeTil = skattegrunnlagFraDato.plusYears(1), - skattegrunnlagspostListe = - listOf( - SkattegrunnlagspostDto( - skattegrunnlagType = "ORDINÆR", - beløp = BigDecimal(1368000), - belop = BigDecimal(1368000), - inntektType = "samletLoennsinntekt", - kode = "samletLoennsinntekt", - ), + SkattegrunnlagGrunnlagDto( + personId = forRolle.ident!!, + periodeFra = skattegrunnlagFraDato, + periodeTil = skattegrunnlagFraDato.plusYears(1), + skattegrunnlagspostListe = + listOf( + SkattegrunnlagspostDto( + skattegrunnlagType = "ORDINÆR", + beløp = BigDecimal(1368000), + belop = BigDecimal(1368000), + inntektType = "samletLoennsinntekt", + kode = "samletLoennsinntekt", + ), + ), ), ), - ), ) 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 a1dcc0994..0df1c3f6a 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt @@ -5,7 +5,6 @@ import io.kotest.assertions.assertSoftly import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.maps.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 @@ -89,13 +88,14 @@ class DtoMapperTest : TestContainerRunner() { evnevurderingService, personService, ) - dtomapper = Dtomapper( - tilgangskontrollService, - validering, - validerBehandlingService, - vedtakGrunnlagsmapper, - BeregnBarnebidragApi() - ) + dtomapper = + Dtomapper( + tilgangskontrollService, + validering, + validerBehandlingService, + vedtakGrunnlagsmapper, + BeregnBarnebidragApi(), + ) stubUtils.stubTilgangskontrollPersonISak() every { tilgangskontrollService.harBeskyttelse(any()) } returns false every { tilgangskontrollService.harTilgang(any(), any()) } returns true @@ -122,18 +122,18 @@ class DtoMapperTest : TestContainerRunner() { rolle = behandling.bidragsmottaker!!, type = Grunnlagsdatatype.BOFORHOLD, data = - commonObjectmapper.writeValueAsString( - setOf( - BoforholdResponseV2( - kilde = Kilde.OFFENTLIG, - periodeFom = LocalDate.now().minusYears(13), - periodeTom = null, - bostatus = Bostatuskode.MED_FORELDER, - fødselsdato = LocalDate.now().minusYears(13), - gjelderPersonId = testdataBarn1.ident, + commonObjectmapper.writeValueAsString( + setOf( + BoforholdResponseV2( + kilde = Kilde.OFFENTLIG, + periodeFom = LocalDate.now().minusYears(13), + periodeTom = null, + bostatus = Bostatuskode.MED_FORELDER, + fødselsdato = LocalDate.now().minusYears(13), + gjelderPersonId = testdataBarn1.ident, + ), ), ), - ), ), ) @@ -148,18 +148,18 @@ class DtoMapperTest : TestContainerRunner() { rolle = behandling.bidragsmottaker!!, type = Grunnlagsdatatype.BOFORHOLD, data = - commonObjectmapper.writeValueAsString( - setOf( - BoforholdResponseV2( - kilde = Kilde.OFFENTLIG, - periodeFom = nyFomdato, - periodeTom = null, - bostatus = Bostatuskode.IKKE_MED_FORELDER, - fødselsdato = LocalDate.now().minusYears(13), - gjelderPersonId = testdataBarn1.ident, + commonObjectmapper.writeValueAsString( + setOf( + BoforholdResponseV2( + kilde = Kilde.OFFENTLIG, + periodeFom = nyFomdato, + periodeTom = null, + bostatus = Bostatuskode.IKKE_MED_FORELDER, + fødselsdato = LocalDate.now().minusYears(13), + gjelderPersonId = testdataBarn1.ident, + ), ), ), - ), ), ) @@ -219,19 +219,19 @@ class DtoMapperTest : TestContainerRunner() { rolle = barnetilsynInnhentesForRolle, type = Grunnlagsdatatype.BARNETILSYN, data = - commonObjectmapper.writeValueAsString( - setOf( - BarnetilsynGrunnlagDto( - beløp = 4000, - periodeFra = LocalDate.now().minusYears(13), - periodeTil = null, - skolealder = null, - tilsynstype = null, - barnPersonId = testdataBarn1.ident, - partPersonId = barnetilsynInnhentesForRolle.ident!! + commonObjectmapper.writeValueAsString( + setOf( + BarnetilsynGrunnlagDto( + beløp = 4000, + periodeFra = LocalDate.now().minusYears(13), + periodeTil = null, + skolealder = null, + tilsynstype = null, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!!, + ), ), ), - ), ), ) @@ -246,37 +246,37 @@ class DtoMapperTest : TestContainerRunner() { rolle = barnetilsynInnhentesForRolle, type = Grunnlagsdatatype.BARNETILSYN, data = - commonObjectmapper.writeValueAsString( - setOf( - BarnetilsynGrunnlagDto( - beløp = 4500, - periodeFra = LocalDate.now().minusYears(1), - periodeTil = LocalDate.now().minusMonths(6), - skolealder = Skolealder.IKKE_ANGITT, - tilsynstype = Tilsynstype.IKKE_ANGITT, - barnPersonId = testdataBarn1.ident, - partPersonId = barnetilsynInnhentesForRolle.ident!! - ), - BarnetilsynGrunnlagDto( - beløp = 4600, - periodeFra = LocalDate.now().minusMonths(6), - periodeTil = LocalDate.now().minusMonths(4), - skolealder = Skolealder.OVER, - tilsynstype = Tilsynstype.HELTID, - barnPersonId = testdataBarn1.ident, - partPersonId = barnetilsynInnhentesForRolle.ident!! - ), - BarnetilsynGrunnlagDto( - beløp = 4700, - periodeFra = LocalDate.now().minusMonths(4), - periodeTil = null, - skolealder = null, - tilsynstype = null, - barnPersonId = testdataBarn1.ident, - partPersonId = barnetilsynInnhentesForRolle.ident!! + commonObjectmapper.writeValueAsString( + setOf( + BarnetilsynGrunnlagDto( + beløp = 4500, + periodeFra = LocalDate.now().minusYears(1), + periodeTil = LocalDate.now().minusMonths(6), + skolealder = Skolealder.IKKE_ANGITT, + tilsynstype = Tilsynstype.IKKE_ANGITT, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!!, + ), + BarnetilsynGrunnlagDto( + beløp = 4600, + periodeFra = LocalDate.now().minusMonths(6), + periodeTil = LocalDate.now().minusMonths(4), + skolealder = Skolealder.OVER, + tilsynstype = Tilsynstype.HELTID, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!!, + ), + BarnetilsynGrunnlagDto( + beløp = 4700, + periodeFra = LocalDate.now().minusMonths(4), + periodeTil = null, + skolealder = null, + tilsynstype = null, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!!, + ), ), ), - ), ), ) @@ -299,10 +299,11 @@ class DtoMapperTest : TestContainerRunner() { nyttBarnetilsyn?.shouldHaveSize(3) assertSoftly(nyttBarnetilsyn!!.elementAt(0)) { - periode shouldBe DatoperiodeDto( - LocalDate.now().minusYears(1), - LocalDate.now().minusMonths(6).minusDays(1) - ) + periode shouldBe + DatoperiodeDto( + LocalDate.now().minusYears(1), + LocalDate.now().minusMonths(6).minusDays(1), + ) tilsynstype shouldBe null skolealder shouldBe null kilde shouldBe Kilde.OFFENTLIG @@ -311,10 +312,11 @@ class DtoMapperTest : TestContainerRunner() { assertSoftly(nyttBarnetilsyn.elementAt(1)) { skolealder shouldBe Skolealder.OVER tilsynstype shouldBe Tilsynstype.HELTID - periode shouldBe DatoperiodeDto( - LocalDate.now().minusMonths(6), - LocalDate.now().minusMonths(4).minusDays(1) - ) + periode shouldBe + DatoperiodeDto( + LocalDate.now().minusMonths(6), + LocalDate.now().minusMonths(4).minusDays(1), + ) kilde shouldBe Kilde.OFFENTLIG } @@ -376,16 +378,16 @@ class DtoMapperTest : TestContainerRunner() { rolle = behandling.bidragsmottaker!!, type = Grunnlagsdatatype.SIVILSTAND, data = - commonObjectmapper.writeValueAsString( - setOf( - Sivilstand( - kilde = Kilde.OFFENTLIG, - periodeFom = LocalDate.now().minusYears(13), - periodeTom = null, - sivilstandskode = Sivilstandskode.GIFT_SAMBOER, + commonObjectmapper.writeValueAsString( + setOf( + Sivilstand( + kilde = Kilde.OFFENTLIG, + periodeFom = LocalDate.now().minusYears(13), + periodeTom = null, + sivilstandskode = Sivilstandskode.GIFT_SAMBOER, + ), ), ), - ), ), ) @@ -398,16 +400,16 @@ class DtoMapperTest : TestContainerRunner() { rolle = behandling.bidragsmottaker!!, type = Grunnlagsdatatype.SIVILSTAND, data = - commonObjectmapper.writeValueAsString( - setOf( - Sivilstand( - kilde = Kilde.OFFENTLIG, - periodeFom = LocalDate.now().minusYears(15), - periodeTom = null, - sivilstandskode = Sivilstandskode.GIFT_SAMBOER, + commonObjectmapper.writeValueAsString( + setOf( + Sivilstand( + kilde = Kilde.OFFENTLIG, + periodeFom = LocalDate.now().minusYears(15), + periodeTom = null, + sivilstandskode = Sivilstandskode.GIFT_SAMBOER, + ), ), ), - ), ), ) @@ -447,11 +449,11 @@ class DtoMapperTest : TestContainerRunner() { ) every { personService.hentPerson(testdataBarn1.ident) } returns - PersonDto( - ident = Personident(testdataBarn1.ident), - navn = testdataBarn1.navn, - fødselsdato = testdataBarn1.fødselsdato, - ) + PersonDto( + ident = Personident(testdataBarn1.ident), + navn = testdataBarn1.navn, + fødselsdato = testdataBarn1.fødselsdato, + ) every { personService.hentNyesteIdent(any()) } returns Personident(testdataBarn1.ident) @@ -492,11 +494,11 @@ class DtoMapperTest : TestContainerRunner() { ) every { personService.hentPerson(testdataBarn1.ident) } returns - PersonDto( - ident = Personident(testdataBarn1.ident), - navn = testdataBarn1.navn, - fødselsdato = testdataBarn1.fødselsdato, - ) + PersonDto( + ident = Personident(testdataBarn1.ident), + navn = testdataBarn1.navn, + fødselsdato = testdataBarn1.fødselsdato, + ) // hvis val dto = dtomapper.tilUnderholdDto(behandling.underholdskostnader.find { it.person.id == 10L }!!) From 6945ae6a99a271b9f4331d5d0e2ec1900c020e87 Mon Sep 17 00:00:00 2001 From: s148719 Date: Fri, 29 Nov 2024 12:19:39 +0100 Subject: [PATCH 12/21] Fikse vedtak-til-grunnlagsmapping for barnetilsyn --- .../transformers/grunnlag/Grunnlagsmapping.kt | 1 - .../VedtakGrunnlagTilGrunnlagMapping.kt | 7 +-- .../VedtakTilBehandlingMappingFelles.kt | 43 ++++++++++---- .../behandling/LesBehandlingTest.kt | 2 + .../service/BehandlingServiceTest.kt | 57 +++++++++++++++++++ .../resources/__files/vedtak_response.json | 10 ++++ 6 files changed, 102 insertions(+), 18 deletions(-) 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 2c53e271a..99d498be8 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 @@ -27,7 +27,6 @@ val summertYtelsetyper = setOf( Inntektsrapportering.BARNETILLEGG, Inntektsrapportering.KONTANTSTØTTE, - Inntektsrapportering.BARNETILSYN, Inntektsrapportering.SMÅBARNSTILLEGG, Inntektsrapportering.UTVIDET_BARNETRYGD, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakGrunnlagTilGrunnlagMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakGrunnlagTilGrunnlagMapping.kt index 0d19bb14c..cfa863d70 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakGrunnlagTilGrunnlagMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakGrunnlagTilGrunnlagMapping.kt @@ -143,7 +143,7 @@ fun List.hentInnhentetSivilstand() = } } -fun List.hentBarnetilsynListe() = +fun List.henteGrunnlagBarnetilsyn() = filtrerBasertPåEgenReferanse(grunnlagType = Grunnlagstype.INNHENTET_INNTEKT_BARNETILSYN) .flatMap { val gjelder = hentPersonMedReferanse(it.gjelderReferanse)!! @@ -389,11 +389,6 @@ fun List.hentInnntekterBearbeidet( Inntektsrapportering.BARNETILLEGG, innhentetTidspunkt(Grunnlagstype.INNHENTET_INNTEKT_BARNETILLEGG), ), - opprettGrunnlagBearbeidet( - Grunnlagsdatatype.BARNETILSYN, - Inntektsrapportering.BARNETILSYN, - innhentetTidspunkt(Grunnlagstype.INNHENTET_INNTEKT_BARNETILSYN), - ), opprettGrunnlagBearbeidet( Grunnlagsdatatype.UTVIDET_BARNETRYGD, Inntektsrapportering.UTVIDET_BARNETRYGD, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt index 69dc40340..0b3ca0882 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt @@ -135,6 +135,7 @@ internal fun List.mapGrunnlag( ): MutableSet = ( hentGrunnlagIkkeInntekt(behandling, lesemodus) + + hentGrunnlagBarnetilsyn(behandling, lesemodus) + hentGrunnlagInntekt( behandling, lesemodus, @@ -341,6 +342,37 @@ fun List.hentGrunnlagIkkeInntekt( }, ).flatten() +private fun List.hentGrunnlagBarnetilsyn( + behandling: Behandling, + lesemodus: Boolean, +) = henteGrunnlagBarnetilsyn() + .groupBy { it.partPersonId } + .map { (gjelderIdent, grunnlag) -> + + val ikkebearbeida = + behandling.opprettGrunnlag( + Grunnlagsdatatype.BARNETILSYN, + grunnlag, + gjelderIdent, + innhentetTidspunkt(Grunnlagstype.INNHENTET_INNTEKT_BARNETILSYN), + lesemodus, + ) + + val bearbeida = + grunnlag.groupBy { it.barnPersonId }.map { (personidentBarn, barnetsGrunnlag) -> + behandling.opprettGrunnlag( + Grunnlagsdatatype.BARNETILSYN, + barnetsGrunnlag, + gjelderIdent, + innhentetTidspunkt(Grunnlagstype.INNHENTET_INNTEKT_BARNETILSYN), + lesemodus, + true, + personidentBarn, + ) + } + listOf(ikkebearbeida) + bearbeida + }.flatten() + private fun List.hentGrunnlagInntekt( behandling: Behandling, lesemodus: Boolean, @@ -389,17 +421,6 @@ private fun List.hentGrunnlagInntekt( lesemodus, ) }, - hentBarnetilsynListe() - .groupBy { it.partPersonId } - .map { (gjelderIdent, grunnlag) -> - behandling.opprettGrunnlag( - Grunnlagsdatatype.BARNETILSYN, - grunnlag, - gjelderIdent, - innhentetTidspunkt(Grunnlagstype.INNHENTET_INNTEKT_BARNETILSYN), - lesemodus, - ) - }, hentKontantstøtteListe() .groupBy { it.partPersonId } .map { (gjelderIdent, grunnlag) -> diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/behandling/LesBehandlingTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/behandling/LesBehandlingTest.kt index 2714b38c2..8ca7bfe6c 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/behandling/LesBehandlingTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/behandling/LesBehandlingTest.kt @@ -3,6 +3,7 @@ package no.nav.bidrag.behandling.controller.behandling import io.kotest.assertions.assertSoftly import io.kotest.matchers.collections.shouldBeEmpty import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.maps.shouldHaveSize import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDtoV2 @@ -79,6 +80,7 @@ class LesBehandlingTest : BehandlingControllerTest() { aktiveGrunnlagsdata.arbeidsforhold shouldHaveSize 3 aktiveGrunnlagsdata.husstandsmedlem shouldHaveSize 5 aktiveGrunnlagsdata.sivilstand!!.grunnlag shouldHaveSize 2 + aktiveGrunnlagsdata.stønadTilBarnetilsyn!!.grunnlag shouldHaveSize 2 } @Test 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 baaede521..1f4b95094 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt @@ -1266,6 +1266,63 @@ class BehandlingServiceTest : TestContainerRunner() { open fun `skal aktivere andre voksne i husstan`() { } } + + @Nested + open inner class Bidrag { + @Test + @Transactional + open fun `skal aktivere barnetilsyn`() { + // gitt + val b = oppretteTestbehandling(inkludereBp = true, inkludereArbeidsforhold = true) + kjøreStubber(b) + val nyttArbeidsforhold = + oppretteArbeidsforhold(b.bidragspliktig!!.ident!!).copy( + startdato = LocalDate.now(), + arbeidsgiverNavn = "Skruer og mutrer AS", + ) + b.grunnlag.add( + Grunnlag( + b, + Grunnlagsdatatype.ARBEIDSFORHOLD, + false, + commonObjectmapper.writeValueAsString(setOf(nyttArbeidsforhold)), + LocalDateTime.now(), + null, + b.bidragspliktig!!, + ), + ) + + testdataManager.lagreBehandlingNewTransaction(b) + + assertSoftly(b.grunnlag.filter { Grunnlagsdatatype.ARBEIDSFORHOLD == it.type }) { g -> + g shouldHaveSize 2 + g.filter { it.aktiv == null } shouldHaveSize 1 + } + + // hvis + val svar = + behandlingService.aktivereGrunnlag( + b.id!!, + AktivereGrunnlagRequestV2( + Personident(b.bidragspliktig!!.ident!!), + Grunnlagsdatatype.ARBEIDSFORHOLD, + ), + ) + + // så + assertSoftly(svar.aktiveGrunnlagsdata.arbeidsforhold) { a -> + a shouldHaveSize 2 + a.filter { b.bidragsmottaker!!.ident == it.partPersonId } shouldHaveSize 1 + a.filter { b.bidragspliktig!!.ident == it.partPersonId } shouldHaveSize 1 + } + + val oppdatertBehandling = behandlingRepository.findBehandlingById(b.id!!).get() + assertSoftly(oppdatertBehandling.grunnlag.filter { Grunnlagsdatatype.ARBEIDSFORHOLD == it.type }) { a -> + a shouldHaveSize 2 + a.filter { it.aktiv != null } shouldHaveSize 2 + } + } + } } @Nested diff --git a/src/test/resources/__files/vedtak_response.json b/src/test/resources/__files/vedtak_response.json index 486cabf27..7713fe5f2 100644 --- a/src/test/resources/__files/vedtak_response.json +++ b/src/test/resources/__files/vedtak_response.json @@ -68,6 +68,16 @@ "skolealder": "IKKE_ANGITT", "beløp": 2000.0, "tilsynstype": "HELTID" + }, + { + "periode": { + "fom": "2023-01-01", + "til": "2024-01-01" + }, + "gjelderBarn": "person_PERSON_SØKNADSBARN_20050623_68", + "skolealder": "OVER", + "beløp": 3000.0, + "tilsynstype": "HELTID" } ] }, From 37a2c39387d12c8af30c077f1937c3cb071ca5c4 Mon Sep 17 00:00:00 2001 From: s148719 Date: Tue, 3 Dec 2024 12:06:54 +0100 Subject: [PATCH 13/21] Justere underholdsperioder etter virkningstidspunkt --- .../behandling/service/BehandlingService.kt | 6 + .../behandling/service/GrunnlagService.kt | 57 ++---- .../behandling/service/UnderholdService.kt | 139 +++++++++++++ .../behandling/AktivGrunnlagMapping.kt | 23 +++ .../transformers/underhold/Utvidelser.kt | 84 ++++++++ .../service/BehandlingServiceTest.kt | 136 +++++++++---- .../service/UnderholdServiceTest.kt | 15 ++ .../behandling/utils/testdata/Testdata.kt | 186 +++++++++++++++++- 8 files changed, 567 insertions(+), 79 deletions(-) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt index 7d661f6dc..00e16404a 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt @@ -275,6 +275,11 @@ class BehandlingService( ) { val erVirkningstidspunktEndret = request.virkningstidspunkt != behandling.virkningstidspunkt + fun oppdatereUnderhold() { + log.info { "Tilpasse perioder for underhold til ny virkningsdato i behandling ${behandling.id}" } + underholdService.tilpasseUnderholdEtterVirkningsdato(behandling) + } + fun oppdaterBoforhold() { log.info { "Virkningstidspunkt er endret. Beregner husstandsmedlemsperioder på ny for behandling ${behandling.id}" } grunnlagService.oppdaterAktiveBoforholdEtterEndretVirkningstidspunkt(behandling) @@ -329,6 +334,7 @@ class BehandlingService( oppdaterBoforhold() oppdaterAndreVoksneIHusstanden() oppdaterInntekter() + oppdatereUnderhold() oppdaterSamvær() // TODO Underholdskostnad } 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 a4f57258e..1aa36f9e5 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt @@ -39,7 +39,9 @@ import no.nav.bidrag.behandling.transformers.behandling.filtrerSivilstandBeregne import no.nav.bidrag.behandling.transformers.behandling.finnEndringerBoforhold import no.nav.bidrag.behandling.transformers.behandling.hentEndringerInntekter import no.nav.bidrag.behandling.transformers.behandling.hentEndringerSivilstand +import no.nav.bidrag.behandling.transformers.behandling.henteAktiverteGrunnlag import no.nav.bidrag.behandling.transformers.behandling.henteEndringerIBoforhold +import no.nav.bidrag.behandling.transformers.behandling.henteUaktiverteGrunnlag import no.nav.bidrag.behandling.transformers.boforhold.tilBoforholdBarnRequest import no.nav.bidrag.behandling.transformers.boforhold.tilBoforholdVoksneRequest import no.nav.bidrag.behandling.transformers.boforhold.tilSivilstandRequest @@ -94,6 +96,7 @@ class GrunnlagService( private val inntektApi: InntektApi, private val inntektService: InntektService, private val mapper: Dtomapper, + private val underholdService: UnderholdService, ) { @Value("\${egenskaper.grunnlag.min-antall-minutter-siden-forrige-innhenting}") private lateinit var grenseInnhenting: String @@ -148,17 +151,17 @@ class GrunnlagService( ) { val rolleGrunnlagErInnhentetFor = when (request.grunnlagstype) { - Grunnlagsdatatype.BOFORHOLD, Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> + Grunnlagsdatatype.BARNETILSYN, Grunnlagsdatatype.BOFORHOLD, Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> request.grunnlagstype.innhentesForRolle( behandling, ) else -> - behandling.roller.find { request.personident?.verdi == it.ident } + behandling.roller.find { request.personident == it.personident } ?: request.grunnlagstype.innhentesForRolle(behandling) } - if (Grunnlagsdatatype.BOFORHOLD != request.grunnlagstype) { + if (!listOf(Grunnlagsdatatype.BARNETILSYN, Grunnlagsdatatype.BOFORHOLD).contains(request.grunnlagstype)) { Validate.notNull( rolleGrunnlagErInnhentetFor, "Personident oppgitt i AktivereGrunnlagRequest har ikke rolle i behandling ${behandling.id}", @@ -184,10 +187,15 @@ class GrunnlagService( if (inntekterOgYtelser.contains(request.grunnlagstype)) { aktivereYtelserOgInntekter(behandling, request.grunnlagstype, rolleGrunnlagErInnhentetFor!!) + } else if (Grunnlagsdatatype.BARNETILSYN == request.grunnlagstype) { + underholdService.oppdatereAutomatiskInnhentaStønadTilBarnetilsyn( + behandling, + request.gjelderIdent!!, + request.overskriveManuelleOpplysninger, + ) } else if (Grunnlagsdatatype.BOFORHOLD == request.grunnlagstype) { aktivereBoforhold( behandling, - request.grunnlagstype, request.gjelderIdent!!, request.overskriveManuelleOpplysninger, ) @@ -408,9 +416,7 @@ class GrunnlagService( grunnlagsdatatype.innhentesForRolle(behandling)!!, ) } - grunnlagSomSkalOverskrives.find { it.gjelder == gjelder }?.let { - it.data = tilJson(perioder) - } + grunnlagSomSkalOverskrives.find { it.gjelder == gjelder }?.let { it.data = tilJson(perioder) } } fun hentSistInnhentet( @@ -480,7 +486,6 @@ class GrunnlagService( private fun aktivereBoforhold( behandling: Behandling, - grunnlagstype: Grunnlagsdatatype, gjelderHusstandsmedlem: Personident, overskriveManuelleOpplysninger: Boolean, ) { @@ -488,13 +493,13 @@ class GrunnlagService( val nyesteIkkeAktiverteBoforholdForHusstandsmedlem = behandling.grunnlag .hentSisteIkkeAktiv() - .filter { gjelderHusstandsmedlem.verdi == it.gjelder && grunnlagstype == it.type } + .filter { gjelderHusstandsmedlem.verdi == it.gjelder && grunnlagsdatatype == it.type } .firstOrNull { it.erBearbeidet } if (nyesteIkkeAktiverteBoforholdForHusstandsmedlem == null) { throw HttpClientErrorException( HttpStatus.NOT_FOUND, - "Fant ingen grunnlag av type $grunnlagstype å aktivere for oppgitt husstandsmeldem i behandling " + + "Fant ingen grunnlag av type $grunnlagsdatatype å aktivere for oppgitt husstandsmeldem i behandling " + behandling.id, ) } @@ -884,13 +889,6 @@ class GrunnlagService( } } - fun aktivereBarnetilsynHvisIngenEndringerMåAksepteres(behandling: Behandling) { - val ikkeAktiveGrunnlag = behandling.grunnlag.hentAlleIkkeAktiv() - val aktiveGrunnlag = behandling.grunnlag.hentAlleAktiv() - if (ikkeAktiveGrunnlag.isEmpty()) return - val endringerSomMåBekreftes = ikkeAktiveGrunnlag.henteEndringerIBoforhold(aktiveGrunnlag, behandling) - } - fun aktiverGrunnlagForBoforholdHvisIngenEndringerMåAksepteres(behandling: Behandling) { val rolleInhentetFor = Grunnlagsdatatype.BOFORHOLD.innhentesForRolle(behandling)!! val ikkeAktiveGrunnlag = behandling.grunnlag.hentAlleIkkeAktiv() @@ -898,8 +896,7 @@ class GrunnlagService( if (ikkeAktiveGrunnlag.isEmpty()) return val endringerSomMåBekreftes = ikkeAktiveGrunnlag.henteEndringerIBoforhold(aktiveGrunnlag, behandling) - behandling.husstandsmedlem - .barn + behandling.husstandsmedlem.barn .filter { it.kilde == Kilde.OFFENTLIG } .filter { hb -> endringerSomMåBekreftes.none { it.ident == hb.ident } } .forEach { hb -> @@ -1341,7 +1338,7 @@ class GrunnlagService( innhentetForRolle: Rolle, ): Boolean { val nyesteRådata = jsonTilObjekt>(sisteInnhentedeIkkeBearbeidaGrunnlag!!.data) - nyesteRådata.mapNotNull { it.relatertPersonPersonId }.forEach { + nyesteRådata.mapNotNull { it.gjelderPersonId }.forEach { val nyesteBearbeidaDataForHusstandsmedlem = behandling.henteNyesteGrunnlag( Grunnlagstype( @@ -1438,26 +1435,6 @@ class GrunnlagService( else -> false } - private fun Behandling.henteUaktiverteGrunnlag( - grunnlagstype: Grunnlagstype, - rolle: Rolle, - ): Set = - grunnlag - .hentAlleIkkeAktiv() - .filter { - it.type == grunnlagstype.type && it.rolle.id == rolle.id && grunnlagstype.erBearbeidet == it.erBearbeidet - }.toSet() - - private fun Behandling.henteAktiverteGrunnlag( - grunnlagstype: Grunnlagstype, - rolle: Rolle, - ): Set = - grunnlag - .hentAlleAktiv() - .filter { - it.type == grunnlagstype.type && it.rolle.id == rolle.id && grunnlagstype.erBearbeidet == it.erBearbeidet - }.toSet() - private fun Behandling.henteNyesteGrunnlag( grunnlagstype: Grunnlagstype, rolle: Rolle, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt index b2086d3c1..5a3734eb5 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt @@ -1,13 +1,22 @@ package no.nav.bidrag.behandling.service +import io.github.oshai.kotlinlogging.KotlinLogging import no.nav.bidrag.behandling.database.datamodell.Barnetilsyn import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.database.datamodell.FaktiskTilsynsutgift import no.nav.bidrag.behandling.database.datamodell.Person 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.hentGrunnlagForType +import no.nav.bidrag.behandling.database.datamodell.henteNyesteAktiveGrunnlag +import no.nav.bidrag.behandling.database.datamodell.henteNyesteIkkeAktiveGrunnlag import no.nav.bidrag.behandling.database.repository.PersonRepository import no.nav.bidrag.behandling.database.repository.UnderholdskostnadRepository +import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype +import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagstype +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.dto.v2.underhold.BarnDto import no.nav.bidrag.behandling.dto.v2.underhold.OppdatereBegrunnelseRequest import no.nav.bidrag.behandling.dto.v2.underhold.OppdatereFaktiskTilsynsutgiftRequest @@ -19,20 +28,29 @@ import no.nav.bidrag.behandling.dto.v2.underhold.StønadTilBarnetilsynDto import no.nav.bidrag.behandling.dto.v2.underhold.UnderholdDto import no.nav.bidrag.behandling.dto.v2.underhold.Underholdselement import no.nav.bidrag.behandling.transformers.Dtomapper +import no.nav.bidrag.behandling.transformers.behandling.hentAlleBearbeidaBarnetilsyn +import no.nav.bidrag.behandling.transformers.behandling.henteEndringerIBarnetilsyn 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.justerePerioderForBearbeidaBarnetilsynEtterVirkningstidspunkt +import no.nav.bidrag.behandling.transformers.underhold.tilBarnetilsyn import no.nav.bidrag.behandling.transformers.underhold.tilStønadTilBarnetilsynDto import no.nav.bidrag.behandling.transformers.underhold.validere import no.nav.bidrag.behandling.transformers.underhold.validerePerioder import no.nav.bidrag.domene.enums.barnetilsyn.Skolealder import no.nav.bidrag.domene.enums.barnetilsyn.Tilsynstype import no.nav.bidrag.domene.enums.diverse.Kilde +import no.nav.bidrag.domene.ident.Personident import org.springframework.http.HttpStatus import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import org.springframework.web.client.HttpClientErrorException +import java.time.LocalDateTime import no.nav.bidrag.transport.behandling.felles.grunnlag.NotatGrunnlag.NotatType as Notattype +private val log = KotlinLogging.logger {} + @Service class UnderholdService( private val underholdskostnadRepository: UnderholdskostnadRepository, @@ -187,6 +205,72 @@ class UnderholdService( ) } + fun oppdatereAutomatiskInnhentaStønadTilBarnetilsyn( + behandling: Behandling, + gjelderSøknadsbarn: Personident, + overskriveManuelleOpplysninger: Boolean, + ) { + val ikkeAktiverteGrunnlag = + behandling.grunnlag.hentAlleIkkeAktiv().filter { Grunnlagsdatatype.BARNETILSYN == it.type } + + val nyesteIkkeaktiverteGrunnlag = + ikkeAktiverteGrunnlag + .filter { !it.erBearbeidet } + .maxByOrNull { it.innhentet } + + val ikkeaktivertBearbeidaGrunnlagForSøknadsbarn = + ikkeAktiverteGrunnlag + .filter { it.erBearbeidet } + .find { it.gjelder == gjelderSøknadsbarn.verdi } + + if (nyesteIkkeaktiverteGrunnlag == null || ikkeaktivertBearbeidaGrunnlagForSøknadsbarn == null) { + throw HttpClientErrorException( + HttpStatus.NOT_FOUND, + "Fant ingen grunnlag av type BARNETILSYN å aktivere for søknadsbarn i behandling $behandling.id", + ) + } + + val data = + behandling.grunnlag + .hentAlleIkkeAktiv() + .filter { it.gjelder == gjelderSøknadsbarn.verdi } + .toSet() + .hentAlleBearbeidaBarnetilsyn( + behandling.virkningstidspunktEllerSøktFomDato, + behandling.bidragsmottaker!!, + ) + + val u = behandling.underholdskostnader.find { it.person.personident == gjelderSøknadsbarn } + if (u == null) { + throw HttpClientErrorException( + HttpStatus.NOT_FOUND, + "Fant ingen underholdskostnad tilknyttet søknadsbarn i behandling $behandling.id i forbindelse med aktivering av BARNETILSYN.", + ) + } + + if (overskriveManuelleOpplysninger) { + u.barnetilsyn.clear() + u.barnetilsyn.addAll(data.tilBarnetilsyn(u)) + } else { + val gamleOffentligeBarnetilsyn = u.barnetilsyn.filter { it.kilde == Kilde.OFFENTLIG } + u.barnetilsyn.removeAll(gamleOffentligeBarnetilsyn) + u.barnetilsyn.addAll(data.tilBarnetilsyn(u)) + } + + ikkeaktivertBearbeidaGrunnlagForSøknadsbarn.aktiv = LocalDateTime.now() + if (ikkeAktiverteGrunnlag.filter { it.erBearbeidet }.find { it.gjelder != gjelderSøknadsbarn.verdi } == null) { + nyesteIkkeaktiverteGrunnlag.aktiv = LocalDateTime.now() + } + } + + @Transactional + fun tilpasseUnderholdEtterVirkningsdato(behandling: Behandling) { + tilpasseAktiveBarnetilsynsgrunnlagEtterVirkningsdato(behandling) + tilpasseIkkeaktiveBarnetilsynsgrunnlagEtterVirkningsdato(behandling) + aktivereBarnetilsynHvisIngenEndringerMåAksepteres(behandling) + behandling.underholdskostnader.justerePerioderEtterVirkningsdato() + } + @Transactional fun oppdatereFaktiskeTilsynsutgifter( underholdskostnad: Underholdskostnad, @@ -337,4 +421,59 @@ class UnderholdService( behandling.underholdskostnader.add(u) return u } + + private fun tilpasseIkkeaktiveBarnetilsynsgrunnlagEtterVirkningsdato(behandling: Behandling) { + val grunnlagsdatatype = Grunnlagsdatatype.BARNETILSYN + val sisteAktiveGrunnlag = + behandling.henteNyesteIkkeAktiveGrunnlag( + Grunnlagstype(grunnlagsdatatype, false), + grunnlagsdatatype.innhentesForRolle(behandling)!!, + ) ?: run { + log.warn { "Fant ingen aktive barnetilsynsgrunnlag som må tilpasses nytt virkingstidspunkt." } + return + } + sisteAktiveGrunnlag.justerePerioderForBearbeidaBarnetilsynEtterVirkningstidspunkt(false) + } + + private fun tilpasseAktiveBarnetilsynsgrunnlagEtterVirkningsdato(behandling: Behandling) { + val grunnlagsdatatype = Grunnlagsdatatype.BARNETILSYN + val sisteAktiveGrunnlag = + behandling.henteNyesteAktiveGrunnlag( + Grunnlagstype(grunnlagsdatatype, false), + grunnlagsdatatype.innhentesForRolle(behandling)!!, + ) ?: run { + log.warn { "Fant ingen aktive barnetilsynsgrunnlag som må tilpasses nytt virkingstidspunkt." } + return + } + sisteAktiveGrunnlag.justerePerioderForBearbeidaBarnetilsynEtterVirkningstidspunkt(true) + } + + private fun aktivereBarnetilsynHvisIngenEndringerMåAksepteres(behandling: Behandling) { + val ikkeAktiveGrunnlag = behandling.grunnlag.hentAlleIkkeAktiv() + val aktiveGrunnlag = behandling.grunnlag.hentAlleAktiv().toSet() + if (ikkeAktiveGrunnlag.isEmpty()) return + val endringerSomMåBekreftes = ikkeAktiveGrunnlag.henteEndringerIBarnetilsyn(aktiveGrunnlag, behandling) + val rolleInnhentetFor = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(behandling)!! + + behandling.underholdskostnader + .filter { it.person.rolle.isNotEmpty() } + .filter { u -> + endringerSomMåBekreftes?.stønadTilBarnetilsyn?.none { it.key == u.person.personident } ?: true + }.forEach { u -> + val ikkeaktivtGrunnlag = + ikkeAktiveGrunnlag + .hentGrunnlagForType( + Grunnlagsdatatype.BARNETILSYN, + rolleInnhentetFor.personident!!.verdi, + ).find { it.gjelder != null && it.gjelder == u.person.personident!!.verdi } ?: return@forEach + + log.info { + "Ikke-aktive grunnlag type ${Grunnlagsdatatype.BOFORHOLD} med id ${ikkeaktivtGrunnlag.id} " + + " for rolle ${rolleInnhentetFor.rolletype} i behandling ${behandling.id} har ingen " + + "endringer som må aksepteres av saksbehandler. Aktiverer automatisk det nyinnhenta grunnlaget." + } + + ikkeaktivtGrunnlag.aktiv = LocalDateTime.now() + } + } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt index 7ef77dd06..9cfbdcacf 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivGrunnlagMapping.kt @@ -5,11 +5,14 @@ import no.nav.bidrag.behandling.database.datamodell.Grunnlag import no.nav.bidrag.behandling.database.datamodell.Inntekt import no.nav.bidrag.behandling.database.datamodell.Inntektspost import no.nav.bidrag.behandling.database.datamodell.Rolle +import no.nav.bidrag.behandling.database.datamodell.hentAlleAktiv +import no.nav.bidrag.behandling.database.datamodell.hentAlleIkkeAktiv import no.nav.bidrag.behandling.database.datamodell.henteBearbeidaInntekterForType import no.nav.bidrag.behandling.database.datamodell.konvertereData import no.nav.bidrag.behandling.dto.v1.behandling.SivilstandDto import no.nav.bidrag.behandling.dto.v2.behandling.GrunnlagInntektEndringstype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype +import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagstype import no.nav.bidrag.behandling.dto.v2.behandling.HusstandsmedlemGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.IkkeAktivInntektDto import no.nav.bidrag.behandling.dto.v2.behandling.InntektspostEndringDto @@ -454,3 +457,23 @@ fun Inntekt.erDetSammeSom(grunnlag: SummertÅrsinntekt): Boolean { opprinneligPeriode!! == grunnlag.periode } } + +fun Behandling.henteUaktiverteGrunnlag( + grunnlagstype: Grunnlagstype, + rolle: Rolle, +): Set = + grunnlag + .hentAlleIkkeAktiv() + .filter { + it.type == grunnlagstype.type && it.rolle.id == rolle.id && grunnlagstype.erBearbeidet == it.erBearbeidet + }.toSet() + +fun Behandling.henteAktiverteGrunnlag( + grunnlagstype: Grunnlagstype, + rolle: Rolle, +): Set = + grunnlag + .hentAlleAktiv() + .filter { + it.type == grunnlagstype.type && it.rolle.id == rolle.id && grunnlagstype.erBearbeidet == it.erBearbeidet + }.toSet() diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt index dd67a2e2b..100035e4f 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt @@ -2,10 +2,18 @@ package no.nav.bidrag.behandling.transformers.underhold import no.nav.bidrag.behandling.database.datamodell.Barnetilsyn import no.nav.bidrag.behandling.database.datamodell.Behandling +import no.nav.bidrag.behandling.database.datamodell.Grunnlag import no.nav.bidrag.behandling.database.datamodell.Underholdskostnad +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 +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.dto.v2.underhold.BarnDto import no.nav.bidrag.behandling.dto.v2.underhold.DatoperiodeDto import no.nav.bidrag.behandling.dto.v2.underhold.StønadTilBarnetilsynDto +import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.tilJson +import no.nav.bidrag.behandling.transformers.behandling.henteAktiverteGrunnlag +import no.nav.bidrag.behandling.transformers.behandling.henteUaktiverteGrunnlag import no.nav.bidrag.domene.enums.barnetilsyn.Skolealder import no.nav.bidrag.domene.enums.barnetilsyn.Tilsynstype import no.nav.bidrag.domene.enums.diverse.Kilde @@ -66,3 +74,79 @@ fun BarnetilsynGrunnlagDto.tilBarnetilsyn(u: Underholdskostnad) = else -> null }, ) + +fun Set.justerePerioderEtterVirkningsdato() = forEach { it.justerePerioder() } + +fun Grunnlag.justerePerioderForBearbeidaBarnetilsynEtterVirkningstidspunkt(overskriveAktiverte: Boolean = true) { + val barnetilsyn = konvertereData>()!! + + val virkningstidspunkt = behandling.virkningstidspunktEllerSøktFomDato + + barnetilsyn + .groupBy { it.barnPersonId } + .forEach { (gjelder, perioder) -> + perioder + .filter { it.periodeFra < virkningstidspunkt } + .forEach { periode -> + if (virkningstidspunkt >= periode.periodeTil) { + barnetilsyn.remove(periode) + } else { + barnetilsyn.add(periode.copy(periodeFra = virkningstidspunkt)) + barnetilsyn.remove(periode) + } + } + + behandling.overskriveBearbeidaBarnetilsynsgrunnlag(gjelder, perioder, overskriveAktiverte) + } +} + +private fun Underholdskostnad.justerePerioder() { + val virkningstidspunkt = behandling.virkningstidspunktEllerSøktFomDato + + barnetilsyn.filter { it.fom < virkningstidspunkt }.forEach { periode -> + if (periode.tom != null && virkningstidspunkt >= periode.tom) { + barnetilsyn.remove(periode) + } else { + periode.fom = virkningstidspunkt + } + } + + faktiskeTilsynsutgifter.filter { it.fom < virkningstidspunkt }.forEach { periode -> + if (periode.tom != null && virkningstidspunkt >= periode.tom) { + faktiskeTilsynsutgifter.remove(periode) + } else { + periode.fom = virkningstidspunkt + } + } + + tilleggsstønad.filter { it.fom < virkningstidspunkt }.forEach { periode -> + if (periode.tom != null && virkningstidspunkt >= periode.tom) { + tilleggsstønad.remove(periode) + } else { + periode.fom = virkningstidspunkt + } + } +} + +private fun Behandling.overskriveBearbeidaBarnetilsynsgrunnlag( + gjelder: String?, + perioder: List, + overskriveAktiverte: Boolean = true, +) { + val grunnlagsdatatype = Grunnlagsdatatype.BARNETILSYN + + val grunnlagSomSkalOverskrives = + if (overskriveAktiverte) { + henteAktiverteGrunnlag( + Grunnlagstype(grunnlagsdatatype, true), + grunnlagsdatatype.innhentesForRolle(this)!!, + ) + } else { + henteUaktiverteGrunnlag( + Grunnlagstype(grunnlagsdatatype, true), + grunnlagsdatatype.innhentesForRolle(this)!!, + ) + } + + grunnlagSomSkalOverskrives.find { it.gjelder == gjelder }?.let { it.data = tilJson(perioder) } +} 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 1f4b95094..44fed4d57 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt @@ -30,6 +30,7 @@ import no.nav.bidrag.behandling.dto.v1.behandling.OpprettKategoriRequestDto import no.nav.bidrag.behandling.dto.v1.behandling.OpprettRolleDto import no.nav.bidrag.behandling.dto.v2.behandling.AktivereGrunnlagRequestV2 import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.transformers.Dtomapper import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.jsonListeTilObjekt import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.tilJson @@ -41,6 +42,8 @@ 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.leggeTilNyttBarnetilsyn import no.nav.bidrag.behandling.utils.testdata.oppretteArbeidsforhold import no.nav.bidrag.behandling.utils.testdata.oppretteBehandlingRoller import no.nav.bidrag.behandling.utils.testdata.oppretteTestbehandling @@ -70,6 +73,7 @@ import no.nav.bidrag.domene.enums.vedtak.VirkningstidspunktÅrsakstype import no.nav.bidrag.domene.ident.Personident import no.nav.bidrag.sivilstand.SivilstandApi import no.nav.bidrag.sivilstand.dto.Sivilstand +import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilsynGrunnlagDto import no.nav.bidrag.transport.behandling.grunnlag.response.BorISammeHusstandDto import no.nav.bidrag.transport.behandling.grunnlag.response.RelatertPersonGrunnlagDto import no.nav.bidrag.transport.behandling.grunnlag.response.SivilstandGrunnlagDto @@ -1263,7 +1267,7 @@ class BehandlingServiceTest : TestContainerRunner() { } @Test - open fun `skal aktivere andre voksne i husstan`() { + open fun `skal aktivere andre voksne i husstanden`() { } } @@ -1273,53 +1277,65 @@ class BehandlingServiceTest : TestContainerRunner() { @Transactional open fun `skal aktivere barnetilsyn`() { // gitt - val b = oppretteTestbehandling(inkludereBp = true, inkludereArbeidsforhold = true) - kjøreStubber(b) - val nyttArbeidsforhold = - oppretteArbeidsforhold(b.bidragspliktig!!.ident!!).copy( - startdato = LocalDate.now(), - arbeidsgiverNavn = "Skruer og mutrer AS", - ) - b.grunnlag.add( - Grunnlag( - b, - Grunnlagsdatatype.ARBEIDSFORHOLD, + val b = + oppretteTestbehandling( false, - commonObjectmapper.writeValueAsString(setOf(nyttArbeidsforhold)), - LocalDateTime.now(), - null, - b.bidragspliktig!!, - ), - ) + false, + false, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + kjøreStubber(b) + val barnetilsynInnhentesForRolle = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(b)!! + barnetilsynInnhentesForRolle shouldBe b.bidragsmottaker!! + val innhentet = LocalDateTime.now() + + // gjeldende barnetilsyn + b.leggeTilGjeldendeBarnetillegg() + + // nytt barnetilsyn + b.leggeTilNyttBarnetilsyn() testdataManager.lagreBehandlingNewTransaction(b) - assertSoftly(b.grunnlag.filter { Grunnlagsdatatype.ARBEIDSFORHOLD == it.type }) { g -> - g shouldHaveSize 2 - g.filter { it.aktiv == null } shouldHaveSize 1 + assertSoftly(b.grunnlag.filter { Grunnlagsdatatype.BARNETILSYN == it.type }) { g -> + g shouldHaveSize 5 + g.filter { it.aktiv == null } shouldHaveSize 3 } // hvis - val svar = - behandlingService.aktivereGrunnlag( - b.id!!, - AktivereGrunnlagRequestV2( - Personident(b.bidragspliktig!!.ident!!), - Grunnlagsdatatype.ARBEIDSFORHOLD, - ), - ) + behandlingService.aktivereGrunnlag( + b.id!!, + AktivereGrunnlagRequestV2( + b.bidragsmottaker!!.personident!!, + Grunnlagsdatatype.BARNETILSYN, + true, + Personident(testdataBarn1.ident), + ), + ) // så - assertSoftly(svar.aktiveGrunnlagsdata.arbeidsforhold) { a -> - a shouldHaveSize 2 - a.filter { b.bidragsmottaker!!.ident == it.partPersonId } shouldHaveSize 1 - a.filter { b.bidragspliktig!!.ident == it.partPersonId } shouldHaveSize 1 + var oppdatertBehandling = behandlingRepository.findBehandlingById(b.id!!).get() + assertSoftly(oppdatertBehandling.grunnlag.filter { Grunnlagsdatatype.BARNETILSYN == it.type }) { a -> + a shouldHaveSize 5 + a.filter { it.aktiv != null } shouldHaveSize 3 } - val oppdatertBehandling = behandlingRepository.findBehandlingById(b.id!!).get() - assertSoftly(oppdatertBehandling.grunnlag.filter { Grunnlagsdatatype.ARBEIDSFORHOLD == it.type }) { a -> - a shouldHaveSize 2 - a.filter { it.aktiv != null } shouldHaveSize 2 + // hvis + behandlingService.aktivereGrunnlag( + b.id!!, + AktivereGrunnlagRequestV2( + b.bidragsmottaker!!.personident!!, + Grunnlagsdatatype.BARNETILSYN, + true, + Personident(testdataBarn2.ident), + ), + ) + + oppdatertBehandling = behandlingRepository.findBehandlingById(b.id!!).get() + assertSoftly(oppdatertBehandling.grunnlag.filter { Grunnlagsdatatype.BARNETILSYN == it.type }) { a -> + a shouldHaveSize 5 + a.filter { it.aktiv != null } shouldHaveSize 5 } } } @@ -1571,6 +1587,52 @@ class BehandlingServiceTest : TestContainerRunner() { } } + @Test + @Transactional + open fun `skal oppdatere ikke aktivert barnetilsyn ved endring av virkningsdato fremover i tid`() { + // gitt + val b = + testdataManager.oppretteBehandling( + false, + false, + false, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + kjøreStubber(b) + val barnetilsynInnhentesForRolle = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(b)!! + barnetilsynInnhentesForRolle shouldBe b.bidragsmottaker!! + stubUtils.stubbeGrunnlagsinnhentingForBehandling(b) + stubPersonConsumer() + grunnlagService.oppdatereGrunnlagForBehandling(b) + + b.leggeTilGjeldendeBarnetillegg() + b.leggeTilNyttBarnetilsyn() + + assertSoftly(b.grunnlag.filter { Grunnlagsdatatype.BARNETILSYN == it.type }) { g -> + g shouldHaveSize 5 + g.filter { it.aktiv == null } shouldHaveSize 3 + } + + val nyVirkningsdato = b.virkningstidspunkt!!.plusMonths(5) + + // hvis + behandlingService.oppdatereVirkningstidspunkt( + b.id!!, + OppdatereVirkningstidspunkt(virkningstidspunkt = nyVirkningsdato), + ) + + // så + entityManager.flush() + entityManager.refresh(b) + assertSoftly(b.grunnlag.filter { Grunnlagsdatatype.BARNETILSYN == it.type }) { s -> + s shouldHaveSize 5 + jsonListeTilObjekt( + s.first { it.erBearbeidet && it.aktiv == null }.data, + ).minByOrNull { it.periodeFra }!!.periodeFra shouldBeEqual nyVirkningsdato + } + } + @Test @Transactional open fun `skal oppdatere perioder på andre voksne i husstand boforhold og inntekter når virkningstidspunkt på særbidrag endres`() { diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt index 95981bb91..9660d9660 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt @@ -49,6 +49,7 @@ import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.springframework.http.HttpStatus +import org.springframework.transaction.annotation.Transactional import org.springframework.web.client.HttpClientErrorException import stubPersonConsumer import stubUnderholdskostnadRepository @@ -863,4 +864,18 @@ class UnderholdServiceTest { } } } + + @Nested + @DisplayName("Tester justering av perioder i fbm endring av virkningsdato") + open inner class OppdatereVirkningsdato { + @Test + @Transactional + open fun `skal justere perioder etter virkningsdato`() { + // gitt + + // hvis + + // så + } + } } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt b/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt index 8c891b79d..263a8c93b 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt @@ -47,6 +47,7 @@ import no.nav.bidrag.beregn.barnebidrag.BeregnSamværsklasseApi import no.nav.bidrag.boforhold.BoforholdApi import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 import no.nav.bidrag.commons.web.mock.stubSjablonService +import no.nav.bidrag.domene.enums.barnetilsyn.Skolealder import no.nav.bidrag.domene.enums.barnetilsyn.Tilsynstype import no.nav.bidrag.domene.enums.behandling.TypeBehandling import no.nav.bidrag.domene.enums.beregning.Samværsklasse @@ -86,6 +87,7 @@ import no.nav.bidrag.transport.behandling.felles.grunnlag.delberegningSamværskl import no.nav.bidrag.transport.behandling.grunnlag.response.AinntektspostDto import no.nav.bidrag.transport.behandling.grunnlag.response.Ansettelsesdetaljer import no.nav.bidrag.transport.behandling.grunnlag.response.ArbeidsforholdGrunnlagDto +import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilsynGrunnlagDto import no.nav.bidrag.transport.behandling.grunnlag.response.BorISammeHusstandDto import no.nav.bidrag.transport.behandling.grunnlag.response.HentGrunnlagDto import no.nav.bidrag.transport.behandling.grunnlag.response.RelatertPersonGrunnlagDto @@ -721,6 +723,7 @@ fun opprettGyldigBehandlingForBeregningOgVedtak( behandling.inntekter.addAll(inntekterBp) behandling.inntekter.addAll(inntekterBm) } + else -> {} } @@ -838,7 +841,11 @@ fun opprettAlleAktiveGrunnlagFraFil( grunnlagListe.addAll( listOf( opprettBeregnetInntektFraGrunnlag(behandling, filJsonString, testdataBP), - opprettGrunnlagFraFil(behandling, filJsonString, Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN), + opprettGrunnlagFraFil( + behandling, + filJsonString, + Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, + ), ).flatten(), ) } @@ -1618,6 +1625,28 @@ fun lagVedtaksdata(filnavn: String): VedtakDto { return grunnlag } +fun oppretteBarnetilsynGrunnlagDto( + behandling: Behandling, + beløp: Int = 4000, + periodeFra: LocalDate? = null, + periodeFraAntallMndTilbake: Long = 1, + periodeTil: LocalDate? = null, + periodeTilAntallMndTilbake: Long? = null, + barnPersonId: String = + behandling.søknadsbarn + .first() + .personident!! + .verdi, +) = BarnetilsynGrunnlagDto( + beløp = beløp, + periodeFra = periodeFra ?: LocalDate.now().minusMonths(periodeFraAntallMndTilbake), + periodeTil = periodeTil ?: periodeTilAntallMndTilbake?.let { LocalDate.now().minusMonths(it) }, + skolealder = null, + tilsynstype = null, + barnPersonId = barnPersonId, + partPersonId = behandling.bidragsmottaker!!.personident!!.verdi, +) + fun opprettLøpendeBidragGrunnlag( gjelderBarn: TestDataPerson, stønadstype: Stønadstype, @@ -1788,7 +1817,11 @@ fun Behandling.leggTilSamvær( samvær = samværBarn, fom = periode.fom.atDay(1), tom = periode.til?.minusMonths(1)?.atEndOfMonth(), - samværsklasse = samværsklasse ?: BeregnSamværsklasseApi(stubSjablonService()).beregnSamværsklasse(samværsklasseDetaljer).delberegningSamværsklasse.samværsklasse, + samværsklasse = + samværsklasse ?: BeregnSamværsklasseApi(stubSjablonService()) + .beregnSamværsklasse( + samværsklasseDetaljer, + ).delberegningSamværsklasse.samværsklasse, beregningJson = if (medBeregning) commonObjectmapper.writeValueAsString(samværsklasseDetaljer) else null, ), ) @@ -1822,3 +1855,152 @@ fun Behandling.leggTilBarnetillegg( ) inntekter.add(inntekt) } + +fun Behandling.leggeTilGjeldendeBarnetillegg() { + this.grunnlag.add( + Grunnlag( + aktiv = LocalDateTime.now().minusDays(5), + behandling = this, + innhentet = LocalDateTime.now().minusDays(5), + erBearbeidet = false, + rolle = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(this)!!, + type = Grunnlagsdatatype.BARNETILSYN, + data = + commonObjectmapper.writeValueAsString( + setOf( + oppretteBarnetilsynGrunnlagDto(this, periodeFraAntallMndTilbake = 13), + ), + ), + ), + ) + + this.grunnlag.add( + Grunnlag( + aktiv = LocalDateTime.now().minusDays(5), + behandling = this, + innhentet = LocalDateTime.now().minusDays(5), + gjelder = testdataBarn1.ident, + erBearbeidet = true, + rolle = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(this)!!, + type = Grunnlagsdatatype.BARNETILSYN, + data = + commonObjectmapper.writeValueAsString( + setOf( + oppretteBarnetilsynGrunnlagDto(this, periodeFraAntallMndTilbake = 13), + ), + ), + ), + ) +} + +fun Behandling.leggeTilNyttBarnetilsyn( + innhentet: LocalDateTime = LocalDateTime.now(), +) { + val barnetilsynInnhentesForRolle = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(this)!! + + this.grunnlag.add( + Grunnlag( + aktiv = null, + behandling = this, + innhentet = innhentet, + erBearbeidet = false, + rolle = barnetilsynInnhentesForRolle, + type = Grunnlagsdatatype.BARNETILSYN, + data = + commonObjectmapper.writeValueAsString( + setOf( + oppretteBarnetilsynGrunnlagDto(this, barnPersonId = testdataBarn2.ident), + BarnetilsynGrunnlagDto( + beløp = 4500, + periodeFra = LocalDate.now().minusYears(1), + periodeTil = LocalDate.now().minusMonths(6), + skolealder = Skolealder.IKKE_ANGITT, + tilsynstype = Tilsynstype.IKKE_ANGITT, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!!, + ), + BarnetilsynGrunnlagDto( + beløp = 4600, + periodeFra = LocalDate.now().minusMonths(6), + periodeTil = LocalDate.now().minusMonths(4), + skolealder = Skolealder.OVER, + tilsynstype = Tilsynstype.HELTID, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!!, + ), + BarnetilsynGrunnlagDto( + beløp = 4700, + periodeFra = LocalDate.now().minusMonths(4), + periodeTil = null, + skolealder = null, + tilsynstype = null, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!!, + ), + ), + ), + ), + ) + + this.grunnlag.add( + Grunnlag( + aktiv = null, + behandling = this, + innhentet = innhentet, + gjelder = testdataBarn1.ident, + erBearbeidet = true, + rolle = barnetilsynInnhentesForRolle, + type = Grunnlagsdatatype.BARNETILSYN, + data = + commonObjectmapper.writeValueAsString( + setOf( + BarnetilsynGrunnlagDto( + beløp = 4500, + periodeFra = LocalDate.now().minusYears(1), + periodeTil = LocalDate.now().minusMonths(6), + skolealder = Skolealder.IKKE_ANGITT, + tilsynstype = Tilsynstype.IKKE_ANGITT, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!!, + ), + BarnetilsynGrunnlagDto( + beløp = 4600, + periodeFra = LocalDate.now().minusMonths(6), + periodeTil = LocalDate.now().minusMonths(4), + skolealder = Skolealder.OVER, + tilsynstype = Tilsynstype.HELTID, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!!, + ), + BarnetilsynGrunnlagDto( + beløp = 4700, + periodeFra = LocalDate.now().minusMonths(4), + periodeTil = null, + skolealder = null, + tilsynstype = null, + barnPersonId = testdataBarn1.ident, + partPersonId = barnetilsynInnhentesForRolle.ident!!, + ), + ), + ), + ), + ) + + this.grunnlag.add( + Grunnlag( + aktiv = null, + behandling = this, + innhentet = innhentet, + gjelder = testdataBarn2.ident, + erBearbeidet = true, + rolle = barnetilsynInnhentesForRolle, + type = Grunnlagsdatatype.BARNETILSYN, + data = + commonObjectmapper.writeValueAsString( + setOf( + oppretteBarnetilsynGrunnlagDto(this, barnPersonId = testdataBarn2.ident), + ), + ), + ), + ) +} From d91690836d18f04148a8203de113d551f98138a0 Mon Sep 17 00:00:00 2001 From: s148719 Date: Wed, 4 Dec 2024 14:26:49 +0100 Subject: [PATCH 14/21] Oppdatere tester --- .../behandling/service/BehandlingService.kt | 3 +- .../behandling/service/GrunnlagService.kt | 30 +-- .../behandling/service/UnderholdService.kt | 35 +-- .../transformers/grunnlag/Grunnlagsmapping.kt | 27 ++ .../transformers/underhold/Utvidelser.kt | 105 +++++++- .../service/BehandlingServiceTest.kt | 9 +- .../behandling/service/GrunnlagServiceTest.kt | 9 +- .../service/UnderholdServiceTest.kt | 242 +++++++++++++++++- .../behandling/utils/testdata/Testdata.kt | 30 ++- 9 files changed, 400 insertions(+), 90 deletions(-) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt index ab8cc8520..9ddff5de9 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt @@ -360,7 +360,6 @@ class BehandlingService( oppdaterInntekter() oppdatereUnderhold() oppdaterSamvær() - // TODO Underholdskostnad } } } @@ -488,7 +487,7 @@ class BehandlingService( oppdatereHusstandsmedlemmerForRoller(behandling, rollerSomLeggesTil) oppdatereSamværForRoller(behandling, rollerSomLeggesTil) - // TODO oppdater underholdskostnader ( legge til når ny barn legges til ) + // TODO: Underholdskostnad versjon 3: Opprette underholdskostnad for nytt søknadsbarn behandlingRepository.save(behandling) 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 1aa36f9e5..487896b43 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt @@ -45,11 +45,13 @@ import no.nav.bidrag.behandling.transformers.behandling.henteUaktiverteGrunnlag import no.nav.bidrag.behandling.transformers.boforhold.tilBoforholdBarnRequest import no.nav.bidrag.behandling.transformers.boforhold.tilBoforholdVoksneRequest import no.nav.bidrag.behandling.transformers.boforhold.tilSivilstandRequest +import no.nav.bidrag.behandling.transformers.grunnlag.henteNyesteGrunnlag import no.nav.bidrag.behandling.transformers.grunnlag.inntekterOgYtelser import no.nav.bidrag.behandling.transformers.grunnlag.summertAinntektstyper import no.nav.bidrag.behandling.transformers.grunnlag.summertSkattegrunnlagstyper import no.nav.bidrag.behandling.transformers.inntekt.opprettTransformerInntekterRequest import no.nav.bidrag.behandling.transformers.tilType +import no.nav.bidrag.behandling.transformers.underhold.aktivereBarnetilsynHvisIngenEndringerMåAksepteres import no.nav.bidrag.behandling.transformers.underhold.tilBarnetilsyn import no.nav.bidrag.boforhold.BoforholdApi import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 @@ -723,7 +725,7 @@ class GrunnlagService( if (nyesteBearbeidaBarnetilsynFørLagring.isEmpty() && nyesteBearbeidaBarnetilsynEtterLagring.isNotEmpty()) { grunnlag.barnetilsynListe.groupBy { it.barnPersonId }.forEach { barnetilsyn -> - behandling.underholdskostnader.find { it.person.personident?.verdi == barnetilsyn.key }?.let { + behandling.underholdskostnader.find { it.barnetsRolleIBehandlingen?.personident?.verdi == barnetilsyn.key }?.let { if (it.barnetilsyn.isEmpty()) { it.barnetilsyn.addAll(barnetilsyn.value.toSet().tilBarnetilsyn(it)) } @@ -731,7 +733,7 @@ class GrunnlagService( } } - aktivereSivilstandHvisEndringIkkeKreverGodkjenning(behandling) + behandling.aktivereBarnetilsynHvisIngenEndringerMåAksepteres() } } @@ -1435,30 +1437,6 @@ class GrunnlagService( else -> false } - private fun Behandling.henteNyesteGrunnlag( - grunnlagstype: Grunnlagstype, - rolle: Rolle, - gjelder: Personident?, - ): Grunnlag? = - grunnlag - .filter { - it.type == grunnlagstype.type && - it.rolle.id == rolle.id && - grunnlagstype.erBearbeidet == it.erBearbeidet && - it.gjelder == gjelder?.verdi - }.toSet() - .maxByOrNull { it.innhentet } - - private fun Behandling.henteNyesteGrunnlag( - grunnlagstype: Grunnlagstype, - rolleInnhentetFor: Rolle, - ): Grunnlag? = - grunnlag - .filter { - it.type == grunnlagstype.type && it.rolle.id == rolleInnhentetFor.id && grunnlagstype.erBearbeidet == it.erBearbeidet - }.toSet() - .maxByOrNull { it.innhentet } - private inline fun Behandling.hentSisteInnhentetGrunnlagSet( grunnlagstype: Grunnlagstype, rolle: Rolle, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt index c538e7116..8935a9ca6 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt @@ -7,9 +7,7 @@ import no.nav.bidrag.behandling.database.datamodell.FaktiskTilsynsutgift import no.nav.bidrag.behandling.database.datamodell.Person 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.hentGrunnlagForType import no.nav.bidrag.behandling.database.datamodell.henteNyesteAktiveGrunnlag import no.nav.bidrag.behandling.database.datamodell.henteNyesteIkkeAktiveGrunnlag import no.nav.bidrag.behandling.database.repository.PersonRepository @@ -29,7 +27,7 @@ import no.nav.bidrag.behandling.dto.v2.underhold.UnderholdDto import no.nav.bidrag.behandling.dto.v2.underhold.Underholdselement import no.nav.bidrag.behandling.transformers.Dtomapper import no.nav.bidrag.behandling.transformers.behandling.hentAlleBearbeidaBarnetilsyn -import no.nav.bidrag.behandling.transformers.behandling.henteEndringerIBarnetilsyn +import no.nav.bidrag.behandling.transformers.underhold.aktivereBarnetilsynHvisIngenEndringerMåAksepteres import no.nav.bidrag.behandling.transformers.underhold.harAndreBarnIUnderhold import no.nav.bidrag.behandling.transformers.underhold.henteOgValidereUnderholdskostnad import no.nav.bidrag.behandling.transformers.underhold.justerePerioderEtterVirkningsdato @@ -269,7 +267,7 @@ class UnderholdService( fun tilpasseUnderholdEtterVirkningsdato(behandling: Behandling) { tilpasseAktiveBarnetilsynsgrunnlagEtterVirkningsdato(behandling) tilpasseIkkeaktiveBarnetilsynsgrunnlagEtterVirkningsdato(behandling) - aktivereBarnetilsynHvisIngenEndringerMåAksepteres(behandling) + behandling.aktivereBarnetilsynHvisIngenEndringerMåAksepteres() behandling.underholdskostnader.justerePerioderEtterVirkningsdato() } @@ -449,33 +447,4 @@ class UnderholdService( } sisteAktiveGrunnlag.justerePerioderForBearbeidaBarnetilsynEtterVirkningstidspunkt(true) } - - private fun aktivereBarnetilsynHvisIngenEndringerMåAksepteres(behandling: Behandling) { - val ikkeAktiveGrunnlag = behandling.grunnlag.hentAlleIkkeAktiv() - val aktiveGrunnlag = behandling.grunnlag.hentAlleAktiv().toSet() - if (ikkeAktiveGrunnlag.isEmpty()) return - val endringerSomMåBekreftes = ikkeAktiveGrunnlag.henteEndringerIBarnetilsyn(aktiveGrunnlag, behandling) - val rolleInnhentetFor = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(behandling)!! - - behandling.underholdskostnader - .filter { it.person.rolle.isNotEmpty() } - .filter { u -> - endringerSomMåBekreftes?.stønadTilBarnetilsyn?.none { it.key == u.person.personident } ?: true - }.forEach { u -> - val ikkeaktivtGrunnlag = - ikkeAktiveGrunnlag - .hentGrunnlagForType( - Grunnlagsdatatype.BARNETILSYN, - rolleInnhentetFor.personident!!.verdi, - ).find { it.gjelder != null && it.gjelder == u.person.personident!!.verdi } ?: return@forEach - - log.info { - "Ikke-aktive grunnlag type ${Grunnlagsdatatype.BOFORHOLD} med id ${ikkeaktivtGrunnlag.id} " + - " for rolle ${rolleInnhentetFor.rolletype} i behandling ${behandling.id} har ingen " + - "endringer som må aksepteres av saksbehandler. Aktiverer automatisk det nyinnhenta grunnlaget." - } - - ikkeaktivtGrunnlag.aktiv = LocalDateTime.now() - } - } } 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 99d498be8..f8870db81 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 @@ -1,9 +1,12 @@ package no.nav.bidrag.behandling.transformers.grunnlag import no.nav.bidrag.behandling.database.datamodell.Behandling +import no.nav.bidrag.behandling.database.datamodell.Grunnlag import no.nav.bidrag.behandling.database.datamodell.Inntekt import no.nav.bidrag.behandling.database.datamodell.Inntektspost +import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype +import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagstype import no.nav.bidrag.behandling.transformers.nærmesteHeltall import no.nav.bidrag.domene.enums.diverse.Kilde import no.nav.bidrag.domene.enums.inntekt.Inntektsrapportering @@ -127,3 +130,27 @@ operator fun BeregnGrunnlag.plus(grunnlag: List) = copy( grunnlagListe = (grunnlagListe + grunnlag).toSet().toList(), ) + +fun Behandling.henteNyesteGrunnlag( + grunnlagstype: Grunnlagstype, + rolleInnhentetFor: Rolle, +): Grunnlag? = + grunnlag + .filter { + it.type == grunnlagstype.type && it.rolle.id == rolleInnhentetFor.id && grunnlagstype.erBearbeidet == it.erBearbeidet + }.toSet() + .maxByOrNull { it.innhentet } + +fun Behandling.henteNyesteGrunnlag( + grunnlagstype: Grunnlagstype, + rolle: Rolle, + gjelder: Personident?, +): Grunnlag? = + grunnlag + .filter { + it.type == grunnlagstype.type && + it.rolle.id == rolle.id && + grunnlagstype.erBearbeidet == it.erBearbeidet && + it.gjelder == gjelder?.verdi + }.toSet() + .maxByOrNull { it.innhentet } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt index bd0ee80e5..1149f25fb 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt @@ -1,9 +1,13 @@ package no.nav.bidrag.behandling.transformers.underhold +import io.github.oshai.kotlinlogging.KotlinLogging import no.nav.bidrag.behandling.database.datamodell.Barnetilsyn import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.database.datamodell.Grunnlag 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.konvertereData import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagstype @@ -13,11 +17,17 @@ import no.nav.bidrag.behandling.dto.v2.underhold.DatoperiodeDto import no.nav.bidrag.behandling.dto.v2.underhold.StønadTilBarnetilsynDto import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.tilJson import no.nav.bidrag.behandling.transformers.behandling.henteAktiverteGrunnlag +import no.nav.bidrag.behandling.transformers.behandling.henteEndringerIBarnetilsyn import no.nav.bidrag.behandling.transformers.behandling.henteUaktiverteGrunnlag +import no.nav.bidrag.behandling.transformers.grunnlag.henteNyesteGrunnlag import no.nav.bidrag.domene.enums.barnetilsyn.Skolealder import no.nav.bidrag.domene.enums.barnetilsyn.Tilsynstype import no.nav.bidrag.domene.enums.diverse.Kilde +import no.nav.bidrag.domene.ident.Personident import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilsynGrunnlagDto +import java.time.LocalDateTime + +private val log = KotlinLogging.logger {} fun Barnetilsyn.tilStønadTilBarnetilsynDto(): StønadTilBarnetilsynDto = StønadTilBarnetilsynDto( @@ -88,7 +98,7 @@ fun Grunnlag.justerePerioderForBearbeidaBarnetilsynEtterVirkningstidspunkt(overs perioder .filter { it.periodeFra < virkningstidspunkt } .forEach { periode -> - if (virkningstidspunkt >= periode.periodeTil) { + if (periode.periodeTil != null && virkningstidspunkt >= periode.periodeTil) { barnetilsyn.remove(periode) } else { barnetilsyn.add(periode.copy(periodeFra = virkningstidspunkt)) @@ -96,41 +106,41 @@ fun Grunnlag.justerePerioderForBearbeidaBarnetilsynEtterVirkningstidspunkt(overs } } - behandling.overskriveBearbeidaBarnetilsynsgrunnlag(gjelder, perioder, overskriveAktiverte) + behandling.overskriveBearbeidaBarnetilsynsgrunnlag(gjelder, barnetilsyn, overskriveAktiverte) } } private fun Underholdskostnad.justerePerioder() { - val virkningstidspunkt = behandling.virkningstidspunktEllerSøktFomDato + val virkningsdato = behandling.virkningstidspunktEllerSøktFomDato - barnetilsyn.filter { it.fom < virkningstidspunkt }.forEach { periode -> - if (periode.tom != null && virkningstidspunkt >= periode.tom) { + barnetilsyn.filter { it.fom < virkningsdato }.forEach { periode -> + if (periode.tom != null && virkningsdato >= periode.tom) { barnetilsyn.remove(periode) } else { - periode.fom = virkningstidspunkt + periode.fom = virkningsdato } } - faktiskeTilsynsutgifter.filter { it.fom < virkningstidspunkt }.forEach { periode -> - if (periode.tom != null && virkningstidspunkt >= periode.tom) { + faktiskeTilsynsutgifter.filter { it.fom < virkningsdato }.forEach { periode -> + if (periode.tom != null && virkningsdato >= periode.tom) { faktiskeTilsynsutgifter.remove(periode) } else { - periode.fom = virkningstidspunkt + periode.fom = virkningsdato } } - tilleggsstønad.filter { it.fom < virkningstidspunkt }.forEach { periode -> - if (periode.tom != null && virkningstidspunkt >= periode.tom) { + tilleggsstønad.filter { it.fom < virkningsdato }.forEach { periode -> + if (periode.tom != null && virkningsdato >= periode.tom) { tilleggsstønad.remove(periode) } else { - periode.fom = virkningstidspunkt + periode.fom = virkningsdato } } } private fun Behandling.overskriveBearbeidaBarnetilsynsgrunnlag( gjelder: String?, - perioder: List, + perioder: Set, overskriveAktiverte: Boolean = true, ) { val grunnlagsdatatype = Grunnlagsdatatype.BARNETILSYN @@ -150,3 +160,72 @@ private fun Behandling.overskriveBearbeidaBarnetilsynsgrunnlag( grunnlagSomSkalOverskrives.find { it.gjelder == gjelder }?.let { it.data = tilJson(perioder) } } + +fun Behandling.aktivereBarnetilsynHvisIngenEndringerMåAksepteres() { + val ikkeAktiveGrunnlag = grunnlag.hentAlleIkkeAktiv() + val aktiveGrunnlag = grunnlag.hentAlleAktiv().toSet() + if (ikkeAktiveGrunnlag.isEmpty()) return + val endringerSomMåBekreftes = ikkeAktiveGrunnlag.henteEndringerIBarnetilsyn(aktiveGrunnlag, this) + val rolleInnhentetFor = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(this)!! + + underholdskostnader + .filter { it.person.rolle.isNotEmpty() } + .filter { u -> + endringerSomMåBekreftes?.stønadTilBarnetilsyn?.none { it.key == u.person.personident } ?: true + }.forEach { u -> + val ikkeaktivtGrunnlag = + ikkeAktiveGrunnlag + .hentGrunnlagForType( + Grunnlagsdatatype.BARNETILSYN, + rolleInnhentetFor.personident!!.verdi, + ).find { it.gjelder != null && it.gjelder == u.person.personident!!.verdi } ?: return@forEach + + log.info { + "Ikke-aktive grunnlag type ${Grunnlagsdatatype.BOFORHOLD} med id ${ikkeaktivtGrunnlag.id} " + + " for rolle ${rolleInnhentetFor.rolletype} i behandling ${this.id} har ingen " + + "endringer som må aksepteres av saksbehandler. Aktiverer automatisk det nyinnhenta grunnlaget." + } + + ikkeaktivtGrunnlag.aktiv = LocalDateTime.now() + } + + aktivereOriginaltBarnetilsynsgrunnlagHvisAktivertForAlleBarn() +} + +private fun Behandling.aktivereOriginaltBarnetilsynsgrunnlagHvisAktivertForAlleBarn() { + val grunnlagsdatatype = Grunnlagsdatatype.BARNETILSYN + val nyesteOriginaleBarnetilsynsgrunnlag = + this.henteNyesteGrunnlag( + Grunnlagstype(grunnlagsdatatype, false), + grunnlagsdatatype.innhentesForRolle(this)!!, + ) + + nyesteOriginaleBarnetilsynsgrunnlag?.let { + if (nyesteOriginaleBarnetilsynsgrunnlag.aktiv == null && + this.erSamtligeBearbeidaBarnetilsynsgrunnlagAktivert(it) + ) { + nyesteOriginaleBarnetilsynsgrunnlag.aktiv = LocalDateTime.now() + } + } +} + +private fun Behandling.erSamtligeBearbeidaBarnetilsynsgrunnlagAktivert(bmsNyesteOriginaleBarnetilsynsgrunnlag: Grunnlag): Boolean { + val grunnlagsdatatype = Grunnlagsdatatype.BARNETILSYN + bmsNyesteOriginaleBarnetilsynsgrunnlag + .konvertereData>() + ?.groupBy { + it.barnPersonId + }?.forEach { + val nyesteBearbeidaBarnetilsynForBarn = + this.henteNyesteGrunnlag( + Grunnlagstype(grunnlagsdatatype, true), + grunnlagsdatatype.innhentesForRolle(this)!!, + Personident(it.key), + ) + + if (nyesteBearbeidaBarnetilsynForBarn?.aktiv == null) { + return false + } + } + return true +} 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 193170067..c2238df73 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt @@ -1644,7 +1644,14 @@ class BehandlingServiceTest : TestContainerRunner() { g.filter { it.aktiv == null } shouldHaveSize 3 } - val nyVirkningsdato = b.virkningstidspunkt!!.plusMonths(5) + val ikkeAktive = b.grunnlag.hentSisteIkkeAktiv().filter { Grunnlagsdatatype.BARNETILSYN == it.type } + + val nyVirkningsdato = + ikkeAktive + .flatMap { it.konvertereData>()!! } + .minBy { it.periodeFra } + .periodeFra + .plusMonths(6) // hvis behandlingService.oppdatereVirkningstidspunkt( 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 93c48d45e..e4b5756a7 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt @@ -274,9 +274,14 @@ class GrunnlagServiceTest : TestContainerRunner() { // så behandling.grunnlagSistInnhentet?.toLocalDate() shouldBe LocalDate.now() + assertSoftly(behandling.grunnlag.filter { Grunnlagsdatatype.BARNETILSYN == it.type }) { + filter { it.aktiv == null } shouldHaveSize 0 + filter { it.aktiv != null } shouldHaveSize 2 + filter { it.aktiv != null && it.erBearbeidet } shouldHaveSize 1 + filter { it.aktiv != null && !it.erBearbeidet } shouldHaveSize 1 + } + behandling.grunnlag.filter { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype } shouldHaveSize 2 - behandling.grunnlag.filter { !it.erBearbeidet && it.type == Grunnlagsdatatype.BARNETILSYN } shouldHaveSize 1 - behandling.grunnlag.filter { it.erBearbeidet && it.type == Grunnlagsdatatype.BARNETILSYN } shouldHaveSize 1 val barnetilsyn = behandling.grunnlag.find { Rolletype.BIDRAGSMOTTAKER == it.rolle.rolletype && Grunnlagsdatatype.BARNETILSYN == it.type } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt index 73e36550e..1519f55c3 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt @@ -5,9 +5,12 @@ import io.kotest.assertions.assertSoftly import io.kotest.matchers.collections.shouldBeEmpty import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.collections.shouldNotBeEmpty +import io.kotest.matchers.comparables.shouldBeGreaterThan +import io.kotest.matchers.date.shouldBeBefore 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 @@ -17,8 +20,16 @@ import no.nav.bidrag.behandling.database.datamodell.FaktiskTilsynsutgift import no.nav.bidrag.behandling.database.datamodell.Person 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.henteNyesteAktiveGrunnlag +import no.nav.bidrag.behandling.database.datamodell.henteNyesteIkkeAktiveGrunnlag +import no.nav.bidrag.behandling.database.datamodell.konvertereData import no.nav.bidrag.behandling.database.repository.PersonRepository import no.nav.bidrag.behandling.database.repository.UnderholdskostnadRepository +import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype +import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagstype +import no.nav.bidrag.behandling.dto.v2.behandling.innhentesForRolle import no.nav.bidrag.behandling.dto.v2.underhold.BarnDto import no.nav.bidrag.behandling.dto.v2.underhold.DatoperiodeDto import no.nav.bidrag.behandling.dto.v2.underhold.OppdatereBegrunnelseRequest @@ -30,9 +41,14 @@ import no.nav.bidrag.behandling.dto.v2.underhold.StønadTilBarnetilsynDto import no.nav.bidrag.behandling.dto.v2.underhold.Underholdselement import no.nav.bidrag.behandling.transformers.Dtomapper 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.leggeTilNyttBarnetilsyn import no.nav.bidrag.behandling.utils.testdata.oppretteTestbehandling +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 @@ -44,13 +60,13 @@ import no.nav.bidrag.domene.enums.behandling.TypeBehandling import no.nav.bidrag.domene.enums.diverse.Kilde import no.nav.bidrag.domene.ident.Personident import no.nav.bidrag.transport.behandling.felles.grunnlag.NotatGrunnlag +import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilsynGrunnlagDto import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.springframework.http.HttpStatus -import org.springframework.transaction.annotation.Transactional import org.springframework.web.client.HttpClientErrorException import stubPersonConsumer import stubUnderholdskostnadRepository @@ -875,13 +891,233 @@ class UnderholdServiceTest { @DisplayName("Tester justering av perioder i fbm endring av virkningsdato") open inner class OppdatereVirkningsdato { @Test - @Transactional - open fun `skal justere perioder etter virkningsdato`() { + open fun `skal tilpasse perioder for aktive bearbeida barnetilsynsgrunnlag etter virkningstidspunkt`() { // gitt + val grunnlagsdatatype = Grunnlagsdatatype.BARNETILSYN + + val b = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + b.leggeTilGjeldendeBarnetillegg() + + val nyVirkningsdato = + b + .henteNyesteAktiveGrunnlag( + Grunnlagstype(grunnlagsdatatype, false), + grunnlagsdatatype.innhentesForRolle(b)!!, + ).konvertereData>() + ?.minBy { it.periodeFra } + ?.periodeFra + ?.plusMonths(4) + + nyVirkningsdato shouldNotBe null + + b.grunnlag + .filter { Grunnlagsdatatype.BARNETILSYN == it.type && it.erBearbeidet && it.aktiv != null } + .maxBy { it.innhentet } + .konvertereData>() + ?.minBy { it.periodeFra } + ?.periodeFra + ?.shouldBeBefore(nyVirkningsdato!!) + b.virkningstidspunkt = nyVirkningsdato + + // hvis + underholdService.tilpasseUnderholdEtterVirkningsdato(b) + + // så + val aktiveBearbeidaBarnetilsyn = + b.grunnlag.hentAlleAktiv().filter { Grunnlagsdatatype.BARNETILSYN == it.type && it.erBearbeidet } + aktiveBearbeidaBarnetilsyn shouldHaveSize 1 + assertSoftly(aktiveBearbeidaBarnetilsyn.first()) { + gjelder.shouldNotBeNull() + aktiv.shouldNotBeNull() + erBearbeidet shouldBe true + } + + aktiveBearbeidaBarnetilsyn.first().konvertereData>()?.shouldHaveSize(1) + + assertSoftly(aktiveBearbeidaBarnetilsyn.first().konvertereData>()?.first()) { + it?.periodeFra.shouldNotBeNull() + it!!.periodeFra shouldBe nyVirkningsdato + it.periodeTil shouldBe null + it.beløp shouldBe 4000 + it.barnPersonId shouldBe testdataBarn1.ident + } + } + + @Test + open fun `skal tilpasse perioder for ikke-aktive bearbeida barnetilsynsgrunnlag etter virkningstidspunkt`() { + // gitt + val grunnlagsdatatype = Grunnlagsdatatype.BARNETILSYN + + val b = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + b.leggeTilGjeldendeBarnetillegg() + b.leggeTilNyttBarnetilsyn() + + val nyVirkningsdato = + b + .henteNyesteIkkeAktiveGrunnlag( + Grunnlagstype(grunnlagsdatatype, false), + grunnlagsdatatype.innhentesForRolle(b)!!, + ).konvertereData>() + ?.filter { it.barnPersonId == testdataBarn1.ident } + ?.minBy { it.periodeFra } + ?.periodeFra + ?.plusMonths(1) + + nyVirkningsdato shouldNotBe null + + b.grunnlag + .filter { Grunnlagsdatatype.BARNETILSYN == it.type && it.erBearbeidet && it.aktiv == null } + .maxBy { it.innhentet } + .konvertereData>() + ?.minBy { it.periodeFra } + ?.periodeFra + ?.shouldBeBefore(nyVirkningsdato!!) + b.virkningstidspunkt = nyVirkningsdato // hvis + underholdService.tilpasseUnderholdEtterVirkningsdato(b) // så + val ikkeaktiveBearbeidaBarnetilsyn = + b.grunnlag.hentAlleIkkeAktiv().filter { Grunnlagsdatatype.BARNETILSYN == it.type && it.erBearbeidet } + ikkeaktiveBearbeidaBarnetilsyn shouldHaveSize 1 + assertSoftly(ikkeaktiveBearbeidaBarnetilsyn.find { it.gjelder == testdataBarn1.ident }!!) { + gjelder.shouldNotBeNull() + aktiv.shouldBeNull() + erBearbeidet shouldBe true + } + + ikkeaktiveBearbeidaBarnetilsyn + .find { it.gjelder == testdataBarn1.ident }!! + .konvertereData>() + ?.shouldHaveSize(4) + + assertSoftly( + ikkeaktiveBearbeidaBarnetilsyn + .find { it.gjelder == testdataBarn1.ident }!! + .konvertereData>() + ?.minBy { it.periodeFra }, + ) { + it?.periodeFra.shouldNotBeNull() + it!!.periodeFra shouldBe nyVirkningsdato + it.periodeTil shouldNotBe null + it.beløp shouldBe 4500 + it.barnPersonId shouldBe testdataBarn1.ident + } + } + + @Test + open fun `skal tilpasse perioder etter virkningsdato for alle tabeller i underholdskostnad`() { + // gitt + val b = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + b.leggeTilGjeldendeBarnetillegg() + val u = + b.underholdskostnader.find { it.barnetsRolleIBehandlingen?.personident?.verdi == testdataBarn1.ident }!! + + u.barnetilsyn.first().fom = b.virkningstidspunktEllerSøktFomDato.minusMonths(2) + + u.faktiskeTilsynsutgifter.add( + FaktiskTilsynsutgift( + underholdskostnad = u, + fom = b.virkningstidspunktEllerSøktFomDato.minusMonths(2), + tilsynsutgift = BigDecimal(5000), + kostpenger = BigDecimal(900), + ), + ) + + u.tilleggsstønad.add( + Tilleggsstønad( + underholdskostnad = u, + dagsats = BigDecimal(120), + fom = b.virkningstidspunktEllerSøktFomDato.minusMonths(2), + ), + ) + + b.virkningstidspunkt = b.virkningstidspunkt?.plusMonths(1) + + // hvis + underholdService.tilpasseUnderholdEtterVirkningsdato(b) + + // så + u.barnetilsyn.first().fom shouldBe b.virkningstidspunkt + u.faktiskeTilsynsutgifter.first().fom shouldBe b.virkningstidspunkt + u.tilleggsstønad.first().fom shouldBe b.virkningstidspunkt + } + } + + @Nested + @DisplayName("Tester automatisk aktivering av barnetilsyn") + open inner class Aktivere { + @Test + open fun `skal aktivere nytt barnetilsynsgrunnlag dersom det ikke inneholder endringer som må godkjennes`() { + // gitt + val b = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + b.leggeTilGjeldendeBarnetillegg() + b.leggeTilNyttBarnetilsyn() + + // hvis + b.aktivereBarnetilsynHvisIngenEndringerMåAksepteres() + + // så + val ikkeaktiveBearbeidaBarnetilsyn = + b.grunnlag.hentAlleIkkeAktiv().filter { Grunnlagsdatatype.BARNETILSYN == it.type && it.erBearbeidet } + ikkeaktiveBearbeidaBarnetilsyn shouldHaveSize 1 + assertSoftly(ikkeaktiveBearbeidaBarnetilsyn.find { it.gjelder == testdataBarn1.ident }!!) { + gjelder.shouldNotBeNull() + aktiv.shouldBeNull() + erBearbeidet shouldBe true + } + + ikkeaktiveBearbeidaBarnetilsyn + .find { it.gjelder == testdataBarn1.ident }!! + .konvertereData>() + ?.shouldHaveSize(3) + + val aktiveBearbeidaBarnetilsyn = b.grunnlag.hentAlleAktiv().filter { Grunnlagsdatatype.BARNETILSYN == it.type && it.erBearbeidet } + aktiveBearbeidaBarnetilsyn shouldHaveSize 2 + + aktiveBearbeidaBarnetilsyn.filter { it.gjelder == testdataBarn2.ident } shouldHaveSize 1 + + assertSoftly(aktiveBearbeidaBarnetilsyn.find { it.gjelder == testdataBarn2.ident }) { + it?.aktiv.shouldNotBeNull() + it?.erBearbeidet shouldBe true + } + + val dataTestbarn2 = aktiveBearbeidaBarnetilsyn.find { it.gjelder == testdataBarn2.ident }.konvertereData>()!! + 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 + } } } } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt b/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt index 7d7dbd859..e5f3009c4 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/Testdata.kt @@ -24,6 +24,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.Utgift import no.nav.bidrag.behandling.database.datamodell.Utgiftspost +import no.nav.bidrag.behandling.database.datamodell.konvertereData import no.nav.bidrag.behandling.database.grunnlag.SkattepliktigeInntekter import no.nav.bidrag.behandling.database.grunnlag.SummerteInntekter import no.nav.bidrag.behandling.dto.v1.forsendelse.ForsendelseRolleDto @@ -43,6 +44,7 @@ import no.nav.bidrag.behandling.transformers.grunnlag.skattegrunnlagListe import no.nav.bidrag.behandling.transformers.grunnlag.tilGrunnlagPerson import no.nav.bidrag.behandling.transformers.grunnlag.tilInntekt import no.nav.bidrag.behandling.transformers.tilType +import no.nav.bidrag.behandling.transformers.underhold.tilBarnetilsyn import no.nav.bidrag.beregn.barnebidrag.BeregnSamværsklasseApi import no.nav.bidrag.boforhold.BoforholdApi import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 @@ -1893,10 +1895,18 @@ fun Behandling.leggeTilGjeldendeBarnetillegg() { ), ), ) + + this.grunnlag + .filter { Grunnlagsdatatype.BARNETILSYN == it.type && it.erBearbeidet && it.aktiv != null } + .forEach { g -> + val u = this.underholdskostnader.find { it.person.ident == g.gjelder } + g.konvertereData>()?.tilBarnetilsyn(u!!)?.let { u.barnetilsyn.addAll(it) } + } } fun Behandling.leggeTilNyttBarnetilsyn( innhentet: LocalDateTime = LocalDateTime.now(), + fraDato: LocalDate = LocalDate.now().minusYears(1), ) { val barnetilsynInnhentesForRolle = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(this)!! @@ -1914,8 +1924,8 @@ fun Behandling.leggeTilNyttBarnetilsyn( oppretteBarnetilsynGrunnlagDto(this, barnPersonId = testdataBarn2.ident), BarnetilsynGrunnlagDto( beløp = 4500, - periodeFra = LocalDate.now().minusYears(1), - periodeTil = LocalDate.now().minusMonths(6), + periodeFra = fraDato, + periodeTil = fraDato.plusMonths(6), skolealder = Skolealder.IKKE_ANGITT, tilsynstype = Tilsynstype.IKKE_ANGITT, barnPersonId = testdataBarn1.ident, @@ -1923,8 +1933,8 @@ fun Behandling.leggeTilNyttBarnetilsyn( ), BarnetilsynGrunnlagDto( beløp = 4600, - periodeFra = LocalDate.now().minusMonths(6), - periodeTil = LocalDate.now().minusMonths(4), + periodeFra = fraDato.plusMonths(6), + periodeTil = fraDato.plusMonths(8), skolealder = Skolealder.OVER, tilsynstype = Tilsynstype.HELTID, barnPersonId = testdataBarn1.ident, @@ -1932,7 +1942,7 @@ fun Behandling.leggeTilNyttBarnetilsyn( ), BarnetilsynGrunnlagDto( beløp = 4700, - periodeFra = LocalDate.now().minusMonths(4), + periodeFra = fraDato.plusMonths(8), periodeTil = null, skolealder = null, tilsynstype = null, @@ -1958,8 +1968,8 @@ fun Behandling.leggeTilNyttBarnetilsyn( setOf( BarnetilsynGrunnlagDto( beløp = 4500, - periodeFra = LocalDate.now().minusYears(1), - periodeTil = LocalDate.now().minusMonths(6), + periodeFra = fraDato, + periodeTil = fraDato.plusMonths(6), skolealder = Skolealder.IKKE_ANGITT, tilsynstype = Tilsynstype.IKKE_ANGITT, barnPersonId = testdataBarn1.ident, @@ -1967,8 +1977,8 @@ fun Behandling.leggeTilNyttBarnetilsyn( ), BarnetilsynGrunnlagDto( beløp = 4600, - periodeFra = LocalDate.now().minusMonths(6), - periodeTil = LocalDate.now().minusMonths(4), + periodeFra = fraDato.plusMonths(6), + periodeTil = fraDato.plusMonths(8), skolealder = Skolealder.OVER, tilsynstype = Tilsynstype.HELTID, barnPersonId = testdataBarn1.ident, @@ -1976,7 +1986,7 @@ fun Behandling.leggeTilNyttBarnetilsyn( ), BarnetilsynGrunnlagDto( beløp = 4700, - periodeFra = LocalDate.now().minusMonths(4), + periodeFra = fraDato.plusMonths(8), periodeTil = null, skolealder = null, tilsynstype = null, From e8dc9bbdc110d9888ac4c093f29f03c7f9b0a23b Mon Sep 17 00:00:00 2001 From: s148719 Date: Wed, 4 Dec 2024 16:53:54 +0100 Subject: [PATCH 15/21] Fikse tester --- .../dto/v2/behandling/BehandlingDtoV2.kt | 38 ++++++--------- .../transformers/underhold/Utvidelser.kt | 46 +++++++++---------- .../OppretteBehandlingFraVedtakTest.kt | 2 +- .../VedtakTilBehandlingForskuddTest.kt | 8 ++-- 4 files changed, 41 insertions(+), 53 deletions(-) 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 0973e3456..f80a34b3d 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 @@ -280,10 +280,10 @@ data class IkkeAktiveInntekter( val ingenEndringer get() = barnetillegg.isEmpty() && - utvidetBarnetrygd.isEmpty() && - kontantstøtte.isEmpty() && - småbarnstillegg.isEmpty() && - årsinntekter.isEmpty() + utvidetBarnetrygd.isEmpty() && + kontantstøtte.isEmpty() && + småbarnstillegg.isEmpty() && + årsinntekter.isEmpty() } data class Grunnlagsinnhentingsfeil( @@ -384,7 +384,7 @@ data class PeriodeAndreVoksneIHusstanden( val totalAntallHusstandsmedlemmer: Int, @Schema( description = - "Detaljer om husstandsmedlemmer som bor hos BP for gjeldende periode. " + + "Detaljer om husstandsmedlemmer som bor hos BP for gjeldende periode. " + "Antall hustandsmedlemmer er begrenset til maks 10 personer", ) val husstandsmedlemmer: List = emptyList(), @@ -544,26 +544,16 @@ fun Grunnlagsdatatype.tilInntektrapporteringYtelse() = fun Grunnlagsdatatype.innhentesForRolle(behandling: Behandling) = when (this) { - Grunnlagsdatatype.BARNETILSYN -> - when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { - Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker - Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig - else -> null - } - - Grunnlagsdatatype.BOFORHOLD -> - when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { - Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker - Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig - else -> null - } - - Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> - when (this.behandlingstypeMotRolletyper[behandling.tilType()]!!.first()) { - Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker - Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig - else -> null + Grunnlagsdatatype.BARNETILSYN, Grunnlagsdatatype.BOFORHOLD, Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN -> { + val t = this.behandlingstypeMotRolletyper[behandling.tilType()] + t?.let { + when (it.first()) { + Rolletype.BIDRAGSMOTTAKER -> behandling.bidragsmottaker + Rolletype.BIDRAGSPLIKTIG -> behandling.bidragspliktig + else -> null + } } + } else -> null } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt index 1149f25fb..a2c1cfb94 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt @@ -34,16 +34,16 @@ fun Barnetilsyn.tilStønadTilBarnetilsynDto(): StønadTilBarnetilsynDto = id = this.id, periode = DatoperiodeDto(this.fom, this.tom), skolealder = - when (this.under_skolealder) { - true -> Skolealder.UNDER - false -> Skolealder.OVER - else -> null - }, + when (this.under_skolealder) { + true -> Skolealder.UNDER + false -> Skolealder.OVER + else -> null + }, tilsynstype = - when (this.omfang) { - Tilsynstype.IKKE_ANGITT -> null - else -> this.omfang - }, + when (this.omfang) { + Tilsynstype.IKKE_ANGITT -> null + else -> this.omfang + }, kilde = this.kilde, ) @@ -56,7 +56,7 @@ fun Underholdskostnad.harIkkeBarnetilsynITabellFraFør(personident: String) = .first() .personident ?.verdi == personident && - this.barnetilsyn.isEmpty() + this.barnetilsyn.isEmpty() fun BarnDto.annetBarnMedSammeNavnOgFødselsdatoEksistererFraFør(behandling: Behandling) = behandling.underholdskostnader @@ -78,11 +78,11 @@ fun BarnetilsynGrunnlagDto.tilBarnetilsyn(u: Underholdskostnad) = kilde = Kilde.OFFENTLIG, omfang = this.tilsynstype ?: Tilsynstype.IKKE_ANGITT, under_skolealder = - when (this.skolealder) { - Skolealder.OVER -> false - Skolealder.UNDER -> true - else -> null - }, + when (this.skolealder) { + Skolealder.OVER -> false + Skolealder.UNDER -> true + else -> null + }, ) fun Set.justerePerioderEtterVirkningsdato() = forEach { it.justerePerioder() } @@ -166,7 +166,7 @@ fun Behandling.aktivereBarnetilsynHvisIngenEndringerMåAksepteres() { val aktiveGrunnlag = grunnlag.hentAlleAktiv().toSet() if (ikkeAktiveGrunnlag.isEmpty()) return val endringerSomMåBekreftes = ikkeAktiveGrunnlag.henteEndringerIBarnetilsyn(aktiveGrunnlag, this) - val rolleInnhentetFor = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(this)!! + val rolleInnhentetFor = Grunnlagsdatatype.BARNETILSYN.innhentesForRolle(this) underholdskostnader .filter { it.person.rolle.isNotEmpty() } @@ -177,13 +177,13 @@ fun Behandling.aktivereBarnetilsynHvisIngenEndringerMåAksepteres() { ikkeAktiveGrunnlag .hentGrunnlagForType( Grunnlagsdatatype.BARNETILSYN, - rolleInnhentetFor.personident!!.verdi, + rolleInnhentetFor?.personident!!.verdi, ).find { it.gjelder != null && it.gjelder == u.person.personident!!.verdi } ?: return@forEach log.info { "Ikke-aktive grunnlag type ${Grunnlagsdatatype.BOFORHOLD} med id ${ikkeaktivtGrunnlag.id} " + - " for rolle ${rolleInnhentetFor.rolletype} i behandling ${this.id} har ingen " + - "endringer som må aksepteres av saksbehandler. Aktiverer automatisk det nyinnhenta grunnlaget." + " for rolle ${rolleInnhentetFor.rolletype} i behandling ${this.id} har ingen " + + "endringer som må aksepteres av saksbehandler. Aktiverer automatisk det nyinnhenta grunnlaget." } ikkeaktivtGrunnlag.aktiv = LocalDateTime.now() @@ -194,11 +194,9 @@ fun Behandling.aktivereBarnetilsynHvisIngenEndringerMåAksepteres() { private fun Behandling.aktivereOriginaltBarnetilsynsgrunnlagHvisAktivertForAlleBarn() { val grunnlagsdatatype = Grunnlagsdatatype.BARNETILSYN - val nyesteOriginaleBarnetilsynsgrunnlag = - this.henteNyesteGrunnlag( - Grunnlagstype(grunnlagsdatatype, false), - grunnlagsdatatype.innhentesForRolle(this)!!, - ) + val nyesteOriginaleBarnetilsynsgrunnlag = grunnlagsdatatype.innhentesForRolle(this)?.let { + this.henteNyesteGrunnlag(Grunnlagstype(grunnlagsdatatype, false), it) + } nyesteOriginaleBarnetilsynsgrunnlag?.let { if (nyesteOriginaleBarnetilsynsgrunnlag.aktiv == null && diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/behandling/OppretteBehandlingFraVedtakTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/behandling/OppretteBehandlingFraVedtakTest.kt index 418207aa7..42f87aba7 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/behandling/OppretteBehandlingFraVedtakTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/behandling/OppretteBehandlingFraVedtakTest.kt @@ -71,7 +71,7 @@ class OppretteBehandlingFraVedtakTest : BehandlingControllerTest() { assertSoftly(behandling) { roller shouldHaveSize 3 inntekter shouldHaveSize 15 - grunnlag shouldHaveSize 36 + grunnlag shouldHaveSize 37 innkrevingstype shouldBe Innkrevingstype.MED_INNKREVING opprinneligVedtakstidspunkt shouldHaveSize 1 opprinneligVedtakstidspunkt shouldContain LocalDateTime.parse("2024-02-23T15:34:27.275019") diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingForskuddTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingForskuddTest.kt index ef41977f0..7cee266b6 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingForskuddTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingForskuddTest.kt @@ -325,9 +325,9 @@ class VedtakTilBehandlingForskuddTest : CommonVedtakTilBehandlingTest() { } assertSoftly(behandling.grunnlag) { - this shouldHaveSize 24 + this shouldHaveSize 25 filter { it.erBearbeidet && it.rolle.rolletype == Rolletype.BIDRAGSMOTTAKER }.shouldHaveSize( - 13, + 14, ) filter { it.erBearbeidet && it.rolle.rolletype == Rolletype.BARN }.shouldHaveSize(1) filter { !it.erBearbeidet && it.rolle.rolletype == Rolletype.BIDRAGSMOTTAKER }.shouldHaveSize( @@ -591,7 +591,7 @@ class VedtakTilBehandlingForskuddTest : CommonVedtakTilBehandlingTest() { private fun Behandling.validerGrunnlag() { assertSoftly(grunnlagListe) { - size shouldBe 24 + size shouldBe 25 filtrerEtterTypeOgIdent( Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER, testdataBarn2.ident, @@ -653,7 +653,7 @@ class VedtakTilBehandlingForskuddTest : CommonVedtakTilBehandlingTest() { Grunnlagsdatatype.BARNETILSYN, testdataBM.ident, true, - ) shouldHaveSize 1 + ) shouldHaveSize 2 filtrerEtterTypeOgIdent( Grunnlagsdatatype.SMÅBARNSTILLEGG, testdataBM.ident, From 33104f0aff07f56d183e8e3ca5e67ef1ffdf1e1b Mon Sep 17 00:00:00 2001 From: s148719 Date: Wed, 4 Dec 2024 17:45:23 +0100 Subject: [PATCH 16/21] Mer testfix --- .../dto/v2/behandling/BehandlingDtoV2.kt | 10 ++--- .../transformers/underhold/Utvidelser.kt | 41 ++++++++++--------- .../service/VedtakTilBehandlingBidragTest.kt | 2 +- 3 files changed, 27 insertions(+), 26 deletions(-) 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 f80a34b3d..0dcdfe1ae 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 @@ -280,10 +280,10 @@ data class IkkeAktiveInntekter( val ingenEndringer get() = barnetillegg.isEmpty() && - utvidetBarnetrygd.isEmpty() && - kontantstøtte.isEmpty() && - småbarnstillegg.isEmpty() && - årsinntekter.isEmpty() + utvidetBarnetrygd.isEmpty() && + kontantstøtte.isEmpty() && + småbarnstillegg.isEmpty() && + årsinntekter.isEmpty() } data class Grunnlagsinnhentingsfeil( @@ -384,7 +384,7 @@ data class PeriodeAndreVoksneIHusstanden( val totalAntallHusstandsmedlemmer: Int, @Schema( description = - "Detaljer om husstandsmedlemmer som bor hos BP for gjeldende periode. " + + "Detaljer om husstandsmedlemmer som bor hos BP for gjeldende periode. " + "Antall hustandsmedlemmer er begrenset til maks 10 personer", ) val husstandsmedlemmer: List = emptyList(), diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt index a2c1cfb94..6a5c950ca 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt @@ -34,16 +34,16 @@ fun Barnetilsyn.tilStønadTilBarnetilsynDto(): StønadTilBarnetilsynDto = id = this.id, periode = DatoperiodeDto(this.fom, this.tom), skolealder = - when (this.under_skolealder) { - true -> Skolealder.UNDER - false -> Skolealder.OVER - else -> null - }, + when (this.under_skolealder) { + true -> Skolealder.UNDER + false -> Skolealder.OVER + else -> null + }, tilsynstype = - when (this.omfang) { - Tilsynstype.IKKE_ANGITT -> null - else -> this.omfang - }, + when (this.omfang) { + Tilsynstype.IKKE_ANGITT -> null + else -> this.omfang + }, kilde = this.kilde, ) @@ -56,7 +56,7 @@ fun Underholdskostnad.harIkkeBarnetilsynITabellFraFør(personident: String) = .first() .personident ?.verdi == personident && - this.barnetilsyn.isEmpty() + this.barnetilsyn.isEmpty() fun BarnDto.annetBarnMedSammeNavnOgFødselsdatoEksistererFraFør(behandling: Behandling) = behandling.underholdskostnader @@ -78,11 +78,11 @@ fun BarnetilsynGrunnlagDto.tilBarnetilsyn(u: Underholdskostnad) = kilde = Kilde.OFFENTLIG, omfang = this.tilsynstype ?: Tilsynstype.IKKE_ANGITT, under_skolealder = - when (this.skolealder) { - Skolealder.OVER -> false - Skolealder.UNDER -> true - else -> null - }, + when (this.skolealder) { + Skolealder.OVER -> false + Skolealder.UNDER -> true + else -> null + }, ) fun Set.justerePerioderEtterVirkningsdato() = forEach { it.justerePerioder() } @@ -182,8 +182,8 @@ fun Behandling.aktivereBarnetilsynHvisIngenEndringerMåAksepteres() { log.info { "Ikke-aktive grunnlag type ${Grunnlagsdatatype.BOFORHOLD} med id ${ikkeaktivtGrunnlag.id} " + - " for rolle ${rolleInnhentetFor.rolletype} i behandling ${this.id} har ingen " + - "endringer som må aksepteres av saksbehandler. Aktiverer automatisk det nyinnhenta grunnlaget." + " for rolle ${rolleInnhentetFor.rolletype} i behandling ${this.id} har ingen " + + "endringer som må aksepteres av saksbehandler. Aktiverer automatisk det nyinnhenta grunnlaget." } ikkeaktivtGrunnlag.aktiv = LocalDateTime.now() @@ -194,9 +194,10 @@ fun Behandling.aktivereBarnetilsynHvisIngenEndringerMåAksepteres() { private fun Behandling.aktivereOriginaltBarnetilsynsgrunnlagHvisAktivertForAlleBarn() { val grunnlagsdatatype = Grunnlagsdatatype.BARNETILSYN - val nyesteOriginaleBarnetilsynsgrunnlag = grunnlagsdatatype.innhentesForRolle(this)?.let { - this.henteNyesteGrunnlag(Grunnlagstype(grunnlagsdatatype, false), it) - } + val nyesteOriginaleBarnetilsynsgrunnlag = + grunnlagsdatatype.innhentesForRolle(this)?.let { + this.henteNyesteGrunnlag(Grunnlagstype(grunnlagsdatatype, false), it) + } nyesteOriginaleBarnetilsynsgrunnlag?.let { if (nyesteOriginaleBarnetilsynsgrunnlag.aktiv == null && diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt index 08312e801..6cd4c02f1 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt @@ -426,7 +426,7 @@ class VedtakTilBehandlingBidragTest : CommonVedtakTilBehandlingTest() { private fun Behandling.validerGrunnlag() { assertSoftly(grunnlagListe) { - size shouldBe 16 + size shouldBe 15 filtrerEtterTypeOgIdent( Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER, testdataBM.ident, From 767499c1a1417da6908396af50afe74d3c76d19e Mon Sep 17 00:00:00 2001 From: s148719 Date: Wed, 4 Dec 2024 18:01:14 +0100 Subject: [PATCH 17/21] =?UTF-8?q?Update=20VedtakTilBehandlingS=C3=A6rbidra?= =?UTF-8?q?gTest.kt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/VedtakTilBehandlingS\303\246rbidragTest.kt" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingS\303\246rbidragTest.kt" "b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingS\303\246rbidragTest.kt" index a4397bf46..0cd6bb485 100644 --- "a/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingS\303\246rbidragTest.kt" +++ "b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingS\303\246rbidragTest.kt" @@ -559,7 +559,7 @@ class VedtakTilBehandlingSærbidragTest : CommonVedtakTilBehandlingTest() { private fun Behandling.validerGrunnlag() { assertSoftly(grunnlagListe) { - size shouldBe 17 + size shouldBe 16 filtrerEtterTypeOgIdent( Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER, testdataBM.ident, From 80e34401e38316322c83411cc8149c253d185f25 Mon Sep 17 00:00:00 2001 From: s148719 Date: Thu, 5 Dec 2024 08:26:01 +0100 Subject: [PATCH 18/21] =?UTF-8?q?Sette=20harTilsynsordning=20til=20sann=20?= =?UTF-8?q?n=C3=A5r=20tilsynstabeller=20oppdateres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bidrag/behandling/service/GrunnlagService.kt | 1 + .../bidrag/behandling/service/UnderholdService.kt | 3 +++ .../behandling/service/GrunnlagServiceTest.kt | 13 +++++++++---- 3 files changed, 13 insertions(+), 4 deletions(-) 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 487896b43..a4b65a645 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt @@ -728,6 +728,7 @@ class GrunnlagService( 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 } } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt index fb7af7944..e3099ed59 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt @@ -194,6 +194,7 @@ class UnderholdService( underholdskostnad = underholdskostnad, ) underholdskostnad.barnetilsyn.add(barnetilsyn) + underholdskostnad.harTilsynsordning = true underholdskostnadRepository .save(underholdskostnad) .barnetilsyn @@ -303,6 +304,7 @@ class UnderholdService( underholdskostnad = underholdskostnad, ) underholdskostnad.faktiskeTilsynsutgifter.add(faktiskTilsynsutgift) + underholdskostnad.harTilsynsordning = true underholdskostnadRepository .save(underholdskostnad) .faktiskeTilsynsutgifter @@ -343,6 +345,7 @@ class UnderholdService( underholdskostnad = underholdskostnad, ) underholdskostnad.tilleggsstønad.add(tilleggsstønad) + underholdskostnad.harTilsynsordning = true underholdskostnadRepository .save(underholdskostnad) .tilleggsstønad 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 e4b5756a7..39fea17af 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt @@ -305,16 +305,21 @@ class GrunnlagServiceTest : TestContainerRunner() { behandling.underholdskostnader.flatMap { it.barnetilsyn } shouldHaveSize 2 - val stønadTilBarnetilsyn = + val uTestbarn1 = behandling.underholdskostnader .find { it.person.rolle .first() .personident ?.verdi == testdataBarn1.ident - }!! - .barnetilsyn - .sortedBy { it.fom } + } + + assertSoftly(uTestbarn1) { + shouldNotBeNull() + harTilsynsordning shouldBe true + } + + val stønadTilBarnetilsyn = uTestbarn1!!.barnetilsyn.sortedBy { it.fom } stønadTilBarnetilsyn shouldHaveSize 2 assertSoftly(stønadTilBarnetilsyn.elementAt(0)) { From f4ac86c7ee203bd32ad915ff240676eb6f78138b Mon Sep 17 00:00:00 2001 From: s148719 Date: Thu, 5 Dec 2024 11:29:31 +0100 Subject: [PATCH 19/21] Sette skolealder automatisk for innhenta barnetilsyn. Bevare kilde offentlig for endringer som ikke endrer periode. --- .../behandling/database/datamodell/Person.kt | 2 + .../behandling/database/datamodell/Rolle.kt | 2 + .../behandling/service/UnderholdService.kt | 8 +- .../transformers/underhold/Utvidelser.kt | 24 ++-- .../service/UnderholdServiceTest.kt | 124 ++++++++++++++++++ .../transformers/underhold/UtvidelserTest.kt | 115 ++++++++++++++++ 6 files changed, 259 insertions(+), 16 deletions(-) create mode 100644 src/test/kotlin/no/nav/bidrag/behandling/transformers/underhold/UtvidelserTest.kt diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt index 35c7a1eab..894a98fc9 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Person.kt @@ -37,6 +37,8 @@ open class Person( ) { val personident get() = ident?.let { Personident(it) } ?: rolle.first().ident?.let { Personident(it) } + val henteFødselsdato get() = fødselsdato ?: rolle.first().fødselsdato + override fun toString(): String = "Person(id=$id, ident=$ident, navn=$navn, fødselsdato=$fødselsdato, opprettet=$opprettet, roller=$rolle)" } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt index 268697877..40c38ee8f 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt @@ -92,6 +92,8 @@ open class Rolle( ) { val personident get() = person?.ident?.let { Personident(it) } ?: this.ident?.let { Personident(it) } + val henteFødselsdato get() = person?.fødselsdato ?: this.fødselsdato + override fun toString(): String = "Rolle(id=$id, behandling=${behandling.id}, rolletype=$rolletype, ident=$ident, fødselsdato=$fødselsdato, opprettet=$opprettet, navn=$navn, deleted=$deleted, innbetaltBeløp=$innbetaltBeløp)" } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt index e3099ed59..11e8ac39e 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt @@ -167,6 +167,12 @@ class UnderholdService( val oppdatertBarnetilsyn: Barnetilsyn = request.id?.let { id -> val barnetilsyn = underholdskostnad.barnetilsyn.find { id == it.id }!! + + // dersom periode endres skal kilde alltid være manuell + if (barnetilsyn.fom != request.periode.fom || barnetilsyn.tom != request.periode.tom) { + barnetilsyn.kilde = Kilde.MANUELL + } + barnetilsyn.fom = request.periode.fom barnetilsyn.tom = request.periode.tom barnetilsyn.under_skolealder = @@ -176,7 +182,7 @@ class UnderholdService( else -> null } barnetilsyn.omfang = request.tilsynstype ?: Tilsynstype.IKKE_ANGITT - barnetilsyn.kilde = Kilde.MANUELL + barnetilsyn } ?: run { val barnetilsyn = diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt index 6a5c950ca..f50c14e63 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/underhold/Utvidelser.kt @@ -25,10 +25,13 @@ import no.nav.bidrag.domene.enums.barnetilsyn.Tilsynstype import no.nav.bidrag.domene.enums.diverse.Kilde import no.nav.bidrag.domene.ident.Personident import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilsynGrunnlagDto +import java.time.LocalDate import java.time.LocalDateTime private val log = KotlinLogging.logger {} +const val ALDER_VED_SKOLESTART = 6L + fun Barnetilsyn.tilStønadTilBarnetilsynDto(): StønadTilBarnetilsynDto = StønadTilBarnetilsynDto( id = this.id, @@ -51,13 +54,6 @@ fun Set.tilStønadTilBarnetilsynDtos() = map { it.tilStønadTilBarn fun Behandling.harAndreBarnIUnderhold() = this.underholdskostnader.find { it.barnetsRolleIBehandlingen == null } != null -fun Underholdskostnad.harIkkeBarnetilsynITabellFraFør(personident: String) = - person.rolle - .first() - .personident - ?.verdi == personident && - this.barnetilsyn.isEmpty() - fun BarnDto.annetBarnMedSammeNavnOgFødselsdatoEksistererFraFør(behandling: Behandling) = behandling.underholdskostnader .filter { it.person.ident == null } @@ -70,20 +66,18 @@ fun BarnDto.annetBarnMedSammePersonidentEksistererFraFør(behandling: Behandling fun Set.tilBarnetilsyn(u: Underholdskostnad) = this.map { it.tilBarnetilsyn(u) }.toSet() -fun BarnetilsynGrunnlagDto.tilBarnetilsyn(u: Underholdskostnad) = - Barnetilsyn( +fun BarnetilsynGrunnlagDto.tilBarnetilsyn(u: Underholdskostnad): Barnetilsyn { + fun erUnderSkolealder(fødselsdato: LocalDate) = fødselsdato.plusYears(ALDER_VED_SKOLESTART).year > LocalDate.now().year + + return Barnetilsyn( underholdskostnad = u, fom = this.periodeFra, tom = this.periodeTil?.minusDays(1), kilde = Kilde.OFFENTLIG, omfang = this.tilsynstype ?: Tilsynstype.IKKE_ANGITT, - under_skolealder = - when (this.skolealder) { - Skolealder.OVER -> false - Skolealder.UNDER -> true - else -> null - }, + under_skolealder = erUnderSkolealder(u.person.henteFødselsdato), ) +} fun Set.justerePerioderEtterVirkningsdato() = forEach { it.justerePerioder() } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt index 1519f55c3..b435f34b5 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/UnderholdServiceTest.kt @@ -679,6 +679,130 @@ class UnderholdServiceTest { kilde shouldBe Kilde.MANUELL } } + + @Test + open fun `skal sette kilde til manuell dersom periode på offentlig barnetilsynsinnslag endres`() { + // gitt + val behandling = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + val barnIBehandling = behandling.søknadsbarn.first() + barnIBehandling.ident.shouldNotBeNull() + + val underholdskostnad = + behandling.underholdskostnader.find { + barnIBehandling.ident!! == it.barnetsRolleIBehandlingen?.ident + } + underholdskostnad.shouldNotBeNull() + + underholdskostnad.barnetilsyn.add( + Barnetilsyn( + id = 1, + underholdskostnad = underholdskostnad, + fom = LocalDate.now(), + under_skolealder = true, + kilde = Kilde.OFFENTLIG, + omfang = Tilsynstype.HELTID, + ), + ) + + underholdskostnad.barnetilsyn shouldHaveSize 1 + + val request = + StønadTilBarnetilsynDto( + id = 1, + periode = + DatoperiodeDto( + LocalDate.now().minusMonths(6).withDayOfMonth(1), + null, + ), + skolealder = Skolealder.OVER, + tilsynstype = Tilsynstype.DELTID, + ) + + // hvis + underholdService.oppdatereStønadTilBarnetilsynManuelt(underholdskostnad, request) + + // så + val u = behandling.underholdskostnader.first() + u.shouldNotBeNull() + u.barnetilsyn.shouldNotBeEmpty() + u.barnetilsyn shouldHaveSize 1 + + assertSoftly(u.barnetilsyn.first()) { + fom shouldBe request.periode.fom + tom shouldBe request.periode.tom + under_skolealder shouldBe false + omfang shouldBe request.tilsynstype + kilde shouldBe Kilde.MANUELL + } + } + + @Test + open fun `skal ikke endre kilde på offentlig innslag så lenge periode ikke endres`() { + // gitt + val behandling = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + val barnIBehandling = behandling.søknadsbarn.first() + barnIBehandling.ident.shouldNotBeNull() + + val underholdskostnad = + behandling.underholdskostnader.find { + barnIBehandling.ident!! == it.barnetsRolleIBehandlingen?.ident + } + underholdskostnad.shouldNotBeNull() + + underholdskostnad.barnetilsyn.add( + Barnetilsyn( + id = 1, + underholdskostnad = underholdskostnad, + fom = LocalDate.now(), + under_skolealder = true, + kilde = Kilde.OFFENTLIG, + omfang = Tilsynstype.HELTID, + ), + ) + + underholdskostnad.barnetilsyn shouldHaveSize 1 + + val request = + StønadTilBarnetilsynDto( + id = 1, + periode = + DatoperiodeDto( + LocalDate.now(), + null, + ), + skolealder = Skolealder.OVER, + tilsynstype = Tilsynstype.DELTID, + ) + + // hvis + underholdService.oppdatereStønadTilBarnetilsynManuelt(underholdskostnad, request) + + // så + val u = behandling.underholdskostnader.first() + u.shouldNotBeNull() + u.barnetilsyn.shouldNotBeEmpty() + u.barnetilsyn shouldHaveSize 1 + + assertSoftly(u.barnetilsyn.first()) { + fom shouldBe request.periode.fom + tom shouldBe request.periode.tom + under_skolealder shouldBe false + omfang shouldBe request.tilsynstype + kilde shouldBe Kilde.OFFENTLIG + } + } } @Nested diff --git a/src/test/kotlin/no/nav/bidrag/behandling/transformers/underhold/UtvidelserTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/transformers/underhold/UtvidelserTest.kt new file mode 100644 index 000000000..4a63f6788 --- /dev/null +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/underhold/UtvidelserTest.kt @@ -0,0 +1,115 @@ +package no.nav.bidrag.behandling.transformers.underhold + +import io.kotest.matchers.comparables.shouldBeGreaterThan +import io.kotest.matchers.comparables.shouldNotBeGreaterThan +import io.kotest.matchers.shouldBe +import no.nav.bidrag.behandling.database.datamodell.Person +import no.nav.bidrag.behandling.database.datamodell.Rolle +import no.nav.bidrag.behandling.database.datamodell.Underholdskostnad +import no.nav.bidrag.behandling.utils.testdata.oppretteBarnetilsynGrunnlagDto +import no.nav.bidrag.behandling.utils.testdata.oppretteTestbehandling +import no.nav.bidrag.domene.enums.behandling.TypeBehandling +import no.nav.bidrag.domene.enums.rolle.Rolletype +import java.time.LocalDate +import kotlin.test.Test + +class UtvidelserTest { + @Test + fun `barn som ikke har nådd skolealder ved inneværende år skal registreres som under skolealder`() { + // gitt + val b = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + val barnetilsynGrunnlagDto = oppretteBarnetilsynGrunnlagDto(b, periodeFraAntallMndTilbake = 13) + + val u = b.underholdskostnader.first() + + u.person.henteFødselsdato + .plusYears(ALDER_VED_SKOLESTART) + .year shouldBeGreaterThan LocalDate.now().year + + // hvis + val barnetilsyn = barnetilsynGrunnlagDto.tilBarnetilsyn(u) + + // så + barnetilsyn.under_skolealder shouldBe true + } + + @Test + fun `barn som når skolealder i inneværende år skal registreres som over skolealder`() { + // gitt + val b = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + val idUnderhold = 123L + val fødselsdato = LocalDate.now().withDayOfYear(365).minusYears(6) + val rolleBarnSomNårSkolealderIInneværendeÅr = Rolle(b, ident = null, rolletype = Rolletype.BARN, fødselsdato = fødselsdato) + + val personSøknadsbarn = Person(ident = "123", rolle = mutableSetOf(rolleBarnSomNårSkolealderIInneværendeÅr)) + b.underholdskostnader.add( + Underholdskostnad( + id = idUnderhold, + behandling = b, + person = personSøknadsbarn, + ), + ) + + val u = b.underholdskostnader.first { it.id == idUnderhold } + + u.person.henteFødselsdato + .plusYears(ALDER_VED_SKOLESTART) + .year shouldNotBeGreaterThan LocalDate.now().year + val barnetilsynGrunnlagDto = oppretteBarnetilsynGrunnlagDto(b, periodeFraAntallMndTilbake = 13) + + // hvis + val barnetilsyn = barnetilsynGrunnlagDto.tilBarnetilsyn(u) + + // så + barnetilsyn.under_skolealder shouldBe false + } + + @Test + fun `barn som når skolealder til neste år skal registreres som under skolealder`() { + // gitt + val b = + oppretteTestbehandling( + setteDatabaseider = true, + inkludereBp = true, + behandlingstype = TypeBehandling.BIDRAG, + ) + + val idUnderhold = 123L + val fødselsdato = LocalDate.now().withDayOfYear(365).minusYears(5) + val rolleBarnSomNårSkolealderIInneværendeÅr = Rolle(b, ident = null, rolletype = Rolletype.BARN, fødselsdato = fødselsdato) + + val personSøknadsbarn = Person(ident = "123", rolle = mutableSetOf(rolleBarnSomNårSkolealderIInneværendeÅr)) + b.underholdskostnader.add( + Underholdskostnad( + id = idUnderhold, + behandling = b, + person = personSøknadsbarn, + ), + ) + + val u = b.underholdskostnader.first { it.id == idUnderhold } + + u.person.henteFødselsdato + .plusYears(ALDER_VED_SKOLESTART) + .year shouldBeGreaterThan LocalDate.now().year + val barnetilsynGrunnlagDto = oppretteBarnetilsynGrunnlagDto(b, periodeFraAntallMndTilbake = 13) + + // hvis + val barnetilsyn = barnetilsynGrunnlagDto.tilBarnetilsyn(u) + + // så + barnetilsyn.under_skolealder shouldBe true + } +} From 638c7f7be290092d3f00da455ad6439649e71121 Mon Sep 17 00:00:00 2001 From: s148719 Date: Thu, 5 Dec 2024 11:43:47 +0100 Subject: [PATCH 20/21] Update GrunnlagServiceTest.kt --- .../no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 39fea17af..02b26d5e5 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt @@ -324,7 +324,7 @@ class GrunnlagServiceTest : TestContainerRunner() { assertSoftly(stønadTilBarnetilsyn.elementAt(0)) { it.omfang shouldBe Tilsynstype.HELTID - it.under_skolealder shouldBe false + it.under_skolealder shouldBe true it.fom shouldBe LocalDate.of(2023, 1, 1) it.tom shouldBe LocalDate.of(2023, 12, 31) it.kilde shouldBe Kilde.OFFENTLIG @@ -332,7 +332,7 @@ class GrunnlagServiceTest : TestContainerRunner() { assertSoftly(stønadTilBarnetilsyn.elementAt(1)) { it.omfang shouldBe Tilsynstype.HELTID - it.under_skolealder shouldBe false + it.under_skolealder shouldBe true it.fom shouldBe LocalDate.of(2024, 1, 1) it.tom shouldBe null it.kilde shouldBe Kilde.OFFENTLIG From d36f5eaca126ebe114fe8f94d49646d1d86abd23 Mon Sep 17 00:00:00 2001 From: s148719 Date: Thu, 5 Dec 2024 12:34:09 +0100 Subject: [PATCH 21/21] Fikse test --- .../no/nav/bidrag/behandling/transformers/Dtomapper.kt | 8 -------- .../nav/bidrag/behandling/transformers/DtoMapperTest.kt | 6 +++--- 2 files changed, 3 insertions(+), 11 deletions(-) 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 f7fc0c5ef..f94e1aea8 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt @@ -206,14 +206,6 @@ class Dtomapper( this.søknadsbarn.first(), ) - try { - val t1 = beregnBarnebidragApi.beregnNettoTilsynsutgiftOgUnderholdskostnad(grunnlag) - val t2 = t1.finnAlleDelberegningUnderholdskostnad() - val t3 = t2.tilUnderholdskostnadDto() - } catch (e: Exception) { - e.printStackTrace() - } - return beregnBarnebidragApi .beregnNettoTilsynsutgiftOgUnderholdskostnad(grunnlag) .finnAlleDelberegningUnderholdskostnad() 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 5c8f7f87f..c7389542a 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt @@ -311,12 +311,12 @@ class DtoMapperTest : TestContainerRunner() { LocalDate.now().minusMonths(6).minusDays(1), ) tilsynstype shouldBe null - skolealder shouldBe null + skolealder shouldBe Skolealder.UNDER kilde shouldBe Kilde.OFFENTLIG } assertSoftly(nyttBarnetilsyn.elementAt(1)) { - skolealder shouldBe Skolealder.OVER + skolealder shouldBe Skolealder.UNDER tilsynstype shouldBe Tilsynstype.HELTID periode shouldBe DatoperiodeDto( @@ -327,7 +327,7 @@ class DtoMapperTest : TestContainerRunner() { } assertSoftly(nyttBarnetilsyn.elementAt(2)) { - skolealder shouldBe null + skolealder shouldBe Skolealder.UNDER tilsynstype shouldBe null periode shouldBe DatoperiodeDto(LocalDate.now().minusMonths(4), null) kilde shouldBe Kilde.OFFENTLIG