diff --git a/initEnv.sh b/initEnv.sh index 176a5ff5a..a62975988 100755 --- a/initEnv.sh +++ b/initEnv.sh @@ -1,2 +1,2 @@ kubectx dev-gcp -kubectl exec --tty deployment/bidrag-behandling-feature 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' > src/test/resources/application-lokal-nais-secrets.properties \ No newline at end of file +kubectl exec --tty deployment/bidrag-behandling-feature 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_BBM_URL' > src/test/resources/application-lokal-nais-secrets.properties \ No newline at end of file diff --git a/pom.xml b/pom.xml index fcaacab3b..8243f8def 100644 --- a/pom.xml +++ b/pom.xml @@ -16,8 +16,8 @@ 21 2.0.20 - 2024.09.24.192807 - 2024.09.30.124555 + 2024.10.02.070120 + 2024.10.02.074523 2.3.232 8.0 3.2.0 diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/BehandlingControllerV2.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/BehandlingControllerV2.kt index 229792d5d..a1f2a2b2a 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/BehandlingControllerV2.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/BehandlingControllerV2.kt @@ -7,7 +7,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses import io.swagger.v3.oas.annotations.security.SecurityRequirement import jakarta.validation.Valid import no.nav.bidrag.behandling.Ressurstype -import no.nav.bidrag.behandling.database.datamodell.hentSisteAktiv import no.nav.bidrag.behandling.dto.v1.behandling.OppdaterRollerRequest import no.nav.bidrag.behandling.dto.v1.behandling.OppdatereVirkningstidspunkt import no.nav.bidrag.behandling.dto.v1.behandling.OpprettBehandlingFraVedtakRequest @@ -26,11 +25,10 @@ import no.nav.bidrag.behandling.dto.v2.utgift.OppdatereUtgiftResponse import no.nav.bidrag.behandling.requestManglerDataException import no.nav.bidrag.behandling.service.BehandlingService import no.nav.bidrag.behandling.service.BoforholdService -import no.nav.bidrag.behandling.service.GrunnlagService import no.nav.bidrag.behandling.service.InntektService import no.nav.bidrag.behandling.service.UtgiftService import no.nav.bidrag.behandling.service.VedtakService -import no.nav.bidrag.behandling.transformers.behandling.tilBehandlingDtoV2 +import no.nav.bidrag.behandling.transformers.Dtomapper import no.nav.bidrag.commons.util.secureLogger import org.springframework.web.bind.annotation.DeleteMapping import org.springframework.web.bind.annotation.GetMapping @@ -47,9 +45,9 @@ class BehandlingControllerV2( private val vedtakService: VedtakService, private val behandlingService: BehandlingService, private val boforholdService: BoforholdService, - private val grunnlagService: GrunnlagService, private val inntektService: InntektService, private val utgiftService: UtgiftService, + private val dtomapper: Dtomapper, ) { @Suppress("unused") @GetMapping("/behandling/vedtak/{vedtakId}") @@ -73,7 +71,7 @@ class BehandlingControllerV2( val resultat = vedtakService.konverterVedtakTilBehandlingForLesemodus(vedtakId) ?: throw RuntimeException("Fant ikke vedtak for vedtakid $vedtakId") - return resultat.tilBehandlingDtoV2(resultat.grunnlagListe, inkluderHistoriskeInntekter = inkluderHistoriskeInntekter) + return dtomapper.tilDto(resultat, inkluderHistoriskeInntekter) } @PutMapping("/behandling/{behandlingsid}/inntekt") @@ -164,10 +162,7 @@ class BehandlingControllerV2( val behandling = behandlingService.oppdatereVirkningstidspunkt(behandlingsid, request) - return behandling.tilBehandlingDtoV2( - behandling.grunnlag.hentSisteAktiv(), - grunnlagService.henteNyeGrunnlagsdataMedEndringsdiff(behandling), - ) + return dtomapper.tilDto(behandling) } @PutMapping("/behandling/{behandlingsid}/boforhold") 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 b774c764b..53d2045a9 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 @@ -294,6 +294,7 @@ data class SivilstandIkkeAktivGrunnlagDto( data class HusstandsmedlemGrunnlagDto( val perioder: Set, + // TODO: bd-1958 val ident: String? = null, val innhentetTidspunkt: LocalDateTime, ) { @@ -332,12 +333,14 @@ data class PeriodeAndreVoksneIHusstanden( val husstandsmedlemmer: List = emptyList(), ) +// TODO: bd-1958 data class AndreVoksneIHusstandenDetaljerDto( val navn: String, val fødselsdato: LocalDate?, val harRelasjonTilBp: Boolean, @Schema(description = "Relasjon til BP. Brukes for debugging", deprecated = true) val relasjon: Familierelasjon, + val erBeskyttet: Boolean = false, ) @Schema(enumAsRef = true, name = "OpplysningerType") diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/boforhold/BoforholdDtoV2.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/boforhold/BoforholdDtoV2.kt index c0d262e2c..c65ba1e13 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/boforhold/BoforholdDtoV2.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/boforhold/BoforholdDtoV2.kt @@ -44,6 +44,7 @@ data class BoforholdDtoV2( val notat: BegrunnelseDto = begrunnelse } +// TODO: bd-1958 data class HusstandsmedlemDtoV2( val id: Long?, @Schema(required = true) @@ -55,5 +56,5 @@ data class HusstandsmedlemDtoV2( val navn: String? = null, @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") - val fødselsdato: LocalDate, + val fødselsdato: LocalDate?, ) 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 ec77c005d..66035cbb7 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt @@ -4,7 +4,6 @@ import io.github.oshai.kotlinlogging.KotlinLogging import no.nav.bidrag.behandling.behandlingNotFoundException import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.database.datamodell.Utgift -import no.nav.bidrag.behandling.database.datamodell.hentSisteAktiv import no.nav.bidrag.behandling.database.datamodell.tilBehandlingstype import no.nav.bidrag.behandling.database.repository.BehandlingRepository import no.nav.bidrag.behandling.dto.v1.behandling.OppdaterRollerResponse @@ -19,11 +18,8 @@ import no.nav.bidrag.behandling.dto.v2.behandling.AktivereGrunnlagRequestV2 import no.nav.bidrag.behandling.dto.v2.behandling.AktivereGrunnlagResponseV2 import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDetaljerDtoV2 import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDtoV2 -import no.nav.bidrag.behandling.transformers.behandling.tilAktiveGrunnlagsdata +import no.nav.bidrag.behandling.transformers.Dtomapper import no.nav.bidrag.behandling.transformers.behandling.tilBehandlingDetaljerDtoV2 -import no.nav.bidrag.behandling.transformers.behandling.tilBehandlingDtoV2 -import no.nav.bidrag.behandling.transformers.behandling.tilBoforholdV2 -import no.nav.bidrag.behandling.transformers.behandling.tilInntektDtoV2 import no.nav.bidrag.behandling.transformers.tilForsendelseRolleDto import no.nav.bidrag.behandling.transformers.tilType import no.nav.bidrag.behandling.transformers.toHusstandsmedlem @@ -58,6 +54,7 @@ class BehandlingService( private val tilgangskontrollService: TilgangskontrollService, private val grunnlagService: GrunnlagService, private val inntektService: InntektService, + private val mapper: Dtomapper, ) { @Transactional fun slettBehandling(behandlingId: Long) { @@ -221,14 +218,7 @@ class BehandlingService( "for person ${request.personident}: $request" } grunnlagService.aktivereGrunnlag(it, request) - val gjeldendeAktiveGrunnlagsdata = it.grunnlagListe.toSet().hentSisteAktiv() - val ikkeAktiverteEndringerIGrunnlagsdata = grunnlagService.henteNyeGrunnlagsdataMedEndringsdiff(it) - return AktivereGrunnlagResponseV2( - boforhold = it.tilBoforholdV2(), - inntekter = it.tilInntektDtoV2(gjeldendeAktiveGrunnlagsdata), - aktiveGrunnlagsdata = gjeldendeAktiveGrunnlagsdata.tilAktiveGrunnlagsdata(), - ikkeAktiverteEndringerIGrunnlagsdata = ikkeAktiverteEndringerIGrunnlagsdata, - ) + return mapper.tilAktivereGrunnlagResponseV2(it) } } @@ -363,14 +353,8 @@ class BehandlingService( grunnlagService.oppdatereGrunnlagForBehandling(behandling) behandling.oppdatereVirkningstidspunktSærbidrag() - val grunnlagsdataEndretEtterAktivering = - grunnlagService.henteNyeGrunnlagsdataMedEndringsdiff(behandling) - return behandling.tilBehandlingDtoV2( - behandling.grunnlagListe.toSet().hentSisteAktiv(), - grunnlagsdataEndretEtterAktivering, - inkluderHistoriskeInntekter, - ) + return mapper.tilDto(behandling, true) } @Transactional 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 332b216fd..5ba3823f5 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/BoforholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/BoforholdService.kt @@ -35,6 +35,7 @@ import no.nav.bidrag.behandling.dto.v2.boforhold.OppdatereSivilstand import no.nav.bidrag.behandling.dto.v2.boforhold.Sivilstandsperiode import no.nav.bidrag.behandling.oppdateringAvBoforholdFeilet import no.nav.bidrag.behandling.oppdateringAvBoforholdFeiletException +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 import no.nav.bidrag.behandling.transformers.boforhold.overskriveAndreVoksneIHusstandMedBearbeidaPerioder @@ -90,6 +91,7 @@ class BoforholdService( private val husstandsmedlemRepository: HusstandsmedlemRepository, private val notatService: NotatService, private val sivilstandRepository: SivilstandRepository, + private val dtomapper: Dtomapper, ) { @Transactional fun oppdatereNotat( @@ -285,7 +287,7 @@ class BoforholdService( if (Kilde.MANUELL == husstandsmedlemSomSkalSlettes?.kilde) { behandling.husstandsmedlem.remove(husstandsmedlemSomSkalSlettes) loggeEndringHusstandsmedlem(behandling, oppdatereHusstandsmedlem, husstandsmedlemSomSkalSlettes) - return husstandsmedlemSomSkalSlettes.tilOppdatereBoforholdResponse(behandling) + return dtomapper.tilOppdatereBoforholdResponse(husstandsmedlemSomSkalSlettes) } } @@ -331,7 +333,7 @@ class BoforholdService( } behandling.husstandsmedlem.add(husstandsmedlem) loggeEndringHusstandsmedlem(behandling, oppdatereHusstandsmedlem, husstandsmedlem) - return husstandsmedlemRepository.save(husstandsmedlem).tilOppdatereBoforholdResponse(behandling) + return dtomapper.tilOppdatereBoforholdResponse(husstandsmedlemRepository.save(husstandsmedlem)) } oppdatereHusstandsmedlem.slettPeriode?.let { idHusstansmedlemsperiode -> @@ -342,7 +344,7 @@ class BoforholdService( husstandsmedlem.oppdaterePerioder(sletteHusstandsmedlemsperiode = idHusstansmedlemsperiode) loggeEndringHusstandsmedlem(behandling, oppdatereHusstandsmedlem, husstandsmedlem) - return husstandsmedlemRepository.save(husstandsmedlem).tilOppdatereBoforholdResponse(behandling) + return dtomapper.tilOppdatereBoforholdResponse(husstandsmedlemRepository.save(husstandsmedlem)) } oppdatereHusstandsmedlem.oppdaterPeriode?.let { bostatusperiode -> @@ -366,7 +368,9 @@ class BoforholdService( ) loggeEndringHusstandsmedlem(behandling, oppdatereHusstandsmedlem, eksisterendeHusstandsmedlem) - return husstandsmedlemRepository.save(eksisterendeHusstandsmedlem).tilOppdatereBoforholdResponse(behandling) + return dtomapper.tilOppdatereBoforholdResponse( + husstandsmedlemRepository.save(eksisterendeHusstandsmedlem), + ) } oppdatereHusstandsmedlem.tilbakestillPerioderForHusstandsmedlem?.let { husstandsmedlemId -> @@ -376,7 +380,7 @@ class BoforholdService( husstandsmedlem.lagreEksisterendePerioder() husstandsmedlem.resetTilOffentligePerioder() loggeEndringHusstandsmedlem(behandling, oppdatereHusstandsmedlem, husstandsmedlem) - return husstandsmedlemRepository.save(husstandsmedlem).tilOppdatereBoforholdResponse(behandling) + return dtomapper.tilOppdatereBoforholdResponse(husstandsmedlemRepository.save(husstandsmedlem)) } oppdatereHusstandsmedlem.angreSisteStegForHusstandsmedlem?.let { husstandsmedlemId -> @@ -385,7 +389,7 @@ class BoforholdService( ?: oppdateringAvBoforholdFeiletException(behandlingsid) husstandsmedlem.oppdaterTilForrigeLagredePerioder() loggeEndringHusstandsmedlem(behandling, oppdatereHusstandsmedlem, husstandsmedlem) - return husstandsmedlemRepository.save(husstandsmedlem).tilOppdatereBoforholdResponse(behandling) + return dtomapper.tilOppdatereBoforholdResponse(husstandsmedlemRepository.save(husstandsmedlem)) } oppdateringAvBoforholdFeilet("Oppdatering av boforhold feilet. Forespørsel mangler informasjon om hva som skal oppdateres") } @@ -419,9 +423,9 @@ class BoforholdService( oppdatereAndreVoksneIHusstanden, husstandsmedlemSomSkalOppdateres, ) - return husstandsmedlemRepository - .save(husstandsmedlemSomSkalOppdateres) - .tilOppdatereBoforholdResponse(behandling) + return dtomapper.tilOppdatereBoforholdResponse( + husstandsmedlemRepository.save(husstandsmedlemSomSkalOppdateres), + ) } oppdatereAndreVoksneIHusstanden.oppdaterePeriode?.let { oppdatereStatus -> @@ -453,9 +457,9 @@ class BoforholdService( oppdatereAndreVoksneIHusstanden, husstandsmedlemSomSkalOppdateres, ) - return husstandsmedlemRepository - .save(husstandsmedlemSomSkalOppdateres) - .tilOppdatereBoforholdResponse(behandling) + return dtomapper.tilOppdatereBoforholdResponse( + husstandsmedlemRepository.save(husstandsmedlemSomSkalOppdateres), + ) } if (oppdatereAndreVoksneIHusstanden.angreSisteEndring) { @@ -465,9 +469,9 @@ class BoforholdService( oppdatereAndreVoksneIHusstanden, husstandsmedlemSomSkalOppdateres, ) - return husstandsmedlemRepository - .save(husstandsmedlemSomSkalOppdateres) - .tilOppdatereBoforholdResponse(behandling) + return dtomapper.tilOppdatereBoforholdResponse( + husstandsmedlemRepository.save(husstandsmedlemSomSkalOppdateres), + ) } if (oppdatereAndreVoksneIHusstanden.tilbakestilleHistorikk) { @@ -479,9 +483,9 @@ class BoforholdService( husstandsmedlemSomSkalOppdateres, ) - return husstandsmedlemRepository - .save(husstandsmedlemSomSkalOppdateres) - .tilOppdatereBoforholdResponse(behandling) + return dtomapper.tilOppdatereBoforholdResponse( + husstandsmedlemRepository.save(husstandsmedlemSomSkalOppdateres), + ) } oppdateringAvBoforholdFeilet("Oppdatering av boforhold andre-voksne-i-husstanden feilet.") 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 23c569bcf..70bf5b18f 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GrunnlagService.kt @@ -24,12 +24,11 @@ import no.nav.bidrag.behandling.database.repository.GrunnlagRepository 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.IkkeAktiveGrunnlagsdata -import no.nav.bidrag.behandling.dto.v2.behandling.IkkeAktiveInntekter import no.nav.bidrag.behandling.dto.v2.behandling.getOrMigrate import no.nav.bidrag.behandling.lagringAvGrunnlagFeiletException import no.nav.bidrag.behandling.objectmapper import no.nav.bidrag.behandling.ressursIkkeFunnetException +import no.nav.bidrag.behandling.transformers.Dtomapper import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.jsonListeTilObjekt import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.jsonTilObjekt import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.tilJson @@ -39,8 +38,6 @@ 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.henteEndringerIAndreVoksneIBpsHusstand -import no.nav.bidrag.behandling.transformers.behandling.henteEndringerIArbeidsforhold import no.nav.bidrag.behandling.transformers.behandling.henteEndringerIBoforhold import no.nav.bidrag.behandling.transformers.boforhold.tilBoforholdBarnRequest import no.nav.bidrag.behandling.transformers.boforhold.tilBoforholdVoksneRequest @@ -94,6 +91,7 @@ class GrunnlagService( private val grunnlagRepository: GrunnlagRepository, private val inntektApi: InntektApi, private val inntektService: InntektService, + private val mapper: Dtomapper, ) { @Value("\${egenskaper.grunnlag.min-antall-minutter-siden-forrige-innhenting}") private lateinit var grenseInnhenting: String @@ -413,80 +411,6 @@ class GrunnlagService( grunnlagstype.erBearbeidet, ) - fun henteNyeGrunnlagsdataMedEndringsdiff(behandling: Behandling): IkkeAktiveGrunnlagsdata { - val roller = behandling.roller.sortedBy { if (it.rolletype == Rolletype.BARN) 1 else -1 } - val inntekter = behandling.inntekter - val sisteInnhentedeIkkeAktiveGrunnlag = behandling.grunnlagListe.toSet().hentSisteIkkeAktiv() - 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(), - ), - arbeidsforhold = sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIArbeidsforhold(aktiveGrunnlag), - husstandsmedlem = - sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIBoforhold( - aktiveGrunnlag, - behandling.virkningstidspunktEllerSøktFomDato, - behandling.husstandsmedlem, - behandling.rolleGrunnlagSkalHentesFor!!, - ), - andreVoksneIHusstanden = - sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIAndreVoksneIBpsHusstand( - aktiveGrunnlag, - ), - sivilstand = - sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerSivilstand( - aktiveGrunnlag, - behandling.virkningstidspunktEllerSøktFomDato, - ), - ) - } - private fun aktivereYtelserOgInntekter( behandling: Behandling, grunnlagstype: Grunnlagsdatatype, @@ -860,7 +784,7 @@ class GrunnlagService( val aktiveGrunnlag = behandling.grunnlag.hentAlleAktiv() if (ikkeAktiveGrunnlag.isEmpty()) return - val endringerSomMåBekreftes = ikkeAktiveGrunnlag.henteEndringerIAndreVoksneIBpsHusstand(aktiveGrunnlag) + val endringerSomMåBekreftes = mapper.endringerIAndreVoksneIBpsHusstand(ikkeAktiveGrunnlag, aktiveGrunnlag) if (endringerSomMåBekreftes == null || endringerSomMåBekreftes.perioder.isEmpty()) { log.info { @@ -880,17 +804,11 @@ class GrunnlagService( } fun aktiverGrunnlagForBoforholdHvisIngenEndringerMåAksepteres(behandling: Behandling) { - val rolleInhentetFor = behandling.rolleGrunnlagSkalHentesFor + val rolleInhentetFor = behandling.rolleGrunnlagSkalHentesFor!! val ikkeAktiveGrunnlag = behandling.grunnlag.hentAlleIkkeAktiv() val aktiveGrunnlag = behandling.grunnlag.hentAlleAktiv() if (ikkeAktiveGrunnlag.isEmpty()) return - val endringerSomMåBekreftes = - ikkeAktiveGrunnlag.henteEndringerIBoforhold( - aktiveGrunnlag, - behandling.virkningstidspunktEllerSøktFomDato, - behandling.husstandsmedlem, - rolleInhentetFor!!, - ) + val endringerSomMåBekreftes = ikkeAktiveGrunnlag.henteEndringerIBoforhold(aktiveGrunnlag, behandling) behandling.husstandsmedlem .barn 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 260ee7b8b..2a6a81072 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatOpplysningerService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatOpplysningerService.kt @@ -4,14 +4,12 @@ import io.github.oshai.kotlinlogging.KotlinLogging import no.nav.bidrag.behandling.consumer.BidragDokumentConsumer import no.nav.bidrag.behandling.consumer.BidragDokumentProduksjonConsumer import no.nav.bidrag.behandling.database.datamodell.Behandling -import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem import no.nav.bidrag.behandling.database.datamodell.Inntekt import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.database.datamodell.Sivilstand import no.nav.bidrag.behandling.database.datamodell.barn import no.nav.bidrag.behandling.database.datamodell.hentSisteAktiv import no.nav.bidrag.behandling.database.datamodell.konvertereData -import no.nav.bidrag.behandling.database.datamodell.voksneIHusstanden import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.SærbidragKategoriDto import no.nav.bidrag.behandling.dto.v2.behandling.SærbidragUtgifterDto @@ -20,10 +18,9 @@ import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftBeregningDto import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftspostDto 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 import no.nav.bidrag.behandling.transformers.behandling.filtrerSivilstandGrunnlagEtterVirkningstidspunkt -import no.nav.bidrag.behandling.transformers.behandling.hentAlleAndreVoksneHusstandForPeriode import no.nav.bidrag.behandling.transformers.behandling.hentAlleBearbeidaBoforhold -import no.nav.bidrag.behandling.transformers.behandling.hentBegrensetAndreVoksneHusstandForPeriode import no.nav.bidrag.behandling.transformers.behandling.hentBeregnetInntekterForRolle import no.nav.bidrag.behandling.transformers.behandling.notatTittel import no.nav.bidrag.behandling.transformers.behandling.tilReferanseId @@ -39,8 +36,6 @@ import no.nav.bidrag.behandling.transformers.utgift.tilSærbidragKategoriDto import no.nav.bidrag.behandling.transformers.utgift.tilUtgiftDto import no.nav.bidrag.behandling.transformers.vedtak.ifTrue import no.nav.bidrag.behandling.transformers.årsinntekterSortert -import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 -import no.nav.bidrag.boforhold.dto.Bostatus import no.nav.bidrag.commons.security.utils.TokenUtils import no.nav.bidrag.commons.service.finnVisningsnavn import no.nav.bidrag.commons.service.organisasjon.SaksbehandlernavnProvider @@ -58,11 +53,8 @@ import no.nav.bidrag.transport.behandling.grunnlag.response.SivilstandGrunnlagDt import no.nav.bidrag.transport.dokument.JournalpostType import no.nav.bidrag.transport.dokument.OpprettDokumentDto import no.nav.bidrag.transport.dokument.OpprettJournalpostRequest -import no.nav.bidrag.transport.notat.AndreVoksneIHusstandenDetaljerDto import no.nav.bidrag.transport.notat.Arbeidsforhold -import no.nav.bidrag.transport.notat.BoforholdBarn import no.nav.bidrag.transport.notat.InntekterPerRolle -import no.nav.bidrag.transport.notat.NotatAndreVoksneIHusstanden import no.nav.bidrag.transport.notat.NotatBegrunnelseDto import no.nav.bidrag.transport.notat.NotatBehandlingDetaljerDto import no.nav.bidrag.transport.notat.NotatBeregnetInntektDto @@ -85,9 +77,7 @@ import no.nav.bidrag.transport.notat.NotatVedtakDetaljerDto import no.nav.bidrag.transport.notat.NotatVirkningstidspunktDto import no.nav.bidrag.transport.notat.OpplysningerBruktTilBeregning import no.nav.bidrag.transport.notat.OpplysningerFraFolkeregisteret -import no.nav.bidrag.transport.notat.OpplysningerFraFolkeregisteretMedDetaljer import no.nav.bidrag.transport.notat.VedtakNotatDto -import no.nav.bidrag.transport.notat.VoksenIHusstandenDetaljerDto import org.springframework.retry.annotation.Backoff import org.springframework.retry.annotation.Retryable import org.springframework.stereotype.Service @@ -104,6 +94,7 @@ class NotatOpplysningerService( private val beregningService: BeregningService, private val bidragDokumentProduksjonConsumer: BidragDokumentProduksjonConsumer, private val bidragDokumentConsumer: BidragDokumentConsumer, + private val mapper: Dtomapper, ) { @Retryable( value = [Exception::class], @@ -209,12 +200,12 @@ class NotatOpplysningerService( NotatBoforholdDto( begrunnelse = behandling.tilNotatBoforhold(), sivilstand = behandling.tilSivilstand(opplysningerSivilstand), - andreVoksneIHusstanden = behandling.tilAndreVoksneIHusstanden(), + andreVoksneIHusstanden = mapper.tilAndreVoksneIHusstanden(behandling), barn = behandling.husstandsmedlem.barn .toSet() .sortert() - .map { it.tilBoforholdBarn(opplysningerBoforhold) }, + .map { mapper.tilBoforholdBarn(it, opplysningerBoforhold) }, ), roller = behandling.roller.map(Rolle::tilNotatRolle), inntekter = @@ -244,50 +235,6 @@ class NotatOpplysningerService( ) } - private fun Behandling.tilAndreVoksneIHusstanden() = - 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 = - AndreVoksneIHusstandenDetaljerDto( - totalAntallHusstandsmedlemmer = - grunnlag - .hentAlleAndreVoksneHusstandForPeriode( - periode, - true, - ).size, - husstandsmedlemmer = - grunnlag.hentBegrensetAndreVoksneHusstandForPeriode(periode, true).map { hm -> - VoksenIHusstandenDetaljerDto( - navn = hm.navn, - fødselsdato = hm.fødselsdato, - harRelasjonTilBp = hm.harRelasjonTilBp, - ) - }, - ), - ) - }?.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.hentBeregning(): NotatVedtakDetaljerDto { val resultat = try { @@ -403,7 +350,7 @@ private fun Sivilstand.tilSivilstandsperiode() = OpplysningerBruktTilBeregning( periode = ÅrMånedsperiode( - datoFom!!, + datoFom, datoTom, ), status = sivilstand, @@ -490,45 +437,6 @@ private fun Behandling.tilVirkningstidspunkt() = begrunnelse = tilNotatVirkningstidspunkt(), ) -private fun Husstandsmedlem.tilBoforholdBarn(opplysningerBoforhold: List) = - BoforholdBarn( - gjelder = - NotatRolleDto( - rolle = null, - navn = hentPersonVisningsnavn(ident) ?: navn, - fødselsdato = fødselsdato, - ident = ident?.let { Personident(it) }, - ), - 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( - periode = - ÅrMånedsperiode( - periode.datoFom!!, - periode.datoTom, - ), - status = periode.bostatus, - kilde = periode.kilde, - ) - }, - ) - private fun Rolle.tilNotatRolle() = NotatRolleDto( rolle = rolletype, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/TilgangskontrollService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/TilgangskontrollService.kt index 9b62bb1b2..0e505a046 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/TilgangskontrollService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/TilgangskontrollService.kt @@ -7,6 +7,7 @@ import no.nav.bidrag.commons.security.SikkerhetsKontekst import no.nav.bidrag.domene.ident.Personident import no.nav.bidrag.domene.sak.Saksnummer import org.springframework.stereotype.Service +import org.springframework.web.client.HttpClientErrorException @Service class TilgangskontrollService( @@ -31,4 +32,15 @@ class TilgangskontrollService( sjekkTilgangPersonISak(Personident(it.ident!!), Saksnummer(behandling.saksnummer)) } } + + fun harTilgang( + personident: Personident, + saksnummer: Saksnummer, + ): Boolean = + try { + sjekkTilgangPersonISak(personident, saksnummer) + true + } catch (hcee: HttpClientErrorException) { + false + } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/BakoverkompatibilitetDtoVersjon2Til1.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/BakoverkompatibilitetDtoVersjon2Til1.kt deleted file mode 100644 index 66a949d67..000000000 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/BakoverkompatibilitetDtoVersjon2Til1.kt +++ /dev/null @@ -1,50 +0,0 @@ -package no.nav.bidrag.behandling.transformers - -import no.nav.bidrag.behandling.database.datamodell.Behandling -import no.nav.bidrag.behandling.database.datamodell.Bostatusperiode -import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem -import no.nav.bidrag.behandling.database.datamodell.Sivilstand -import no.nav.bidrag.behandling.dto.v1.behandling.SivilstandDto -import no.nav.bidrag.behandling.dto.v2.boforhold.BostatusperiodeDto -import no.nav.bidrag.behandling.dto.v2.boforhold.HusstandsmedlemDtoV2 - -/** - * Inneholder omgjøringer som kreves for å støtte bakoverkompatibilitet. Fila skal kunne slettes når migrering til API V2 er fullført. - */ - -@Deprecated("Utgår når manuell oppdatering av sivilstand kun gjøres via endepunktet for oppdatering av boforhold (boforhold v2) ") -fun Set.toSivilstandDomain(behandling: Behandling) = - this - .map { - Sivilstand(behandling, it.datoFom, it.datoTom, it.sivilstand, it.kilde, it.id) - }.toMutableSet() - -@Deprecated("Utgår når manuell oppdatering av husstandsmedlem kun gjøres via endepunktet for oppdatering av boforhold (boforhold v2) ") -fun Set.toDomain(behandling: Behandling) = - this - .map { - val barn = - Husstandsmedlem( - behandling, - it.kilde, - it.id, - it.ident, - it.navn, - it.fødselsdato, - ) - barn.perioder = it.perioder.toDomain(barn).toMutableSet() - barn - }.toMutableSet() - -@Deprecated("Utgår når manuell oppdatering av husstandsmedlem kun gjøres via endepunktet for oppdatering av boforhold (boforhold v2) ") -fun Set.toDomain(husstandsmedlem: Husstandsmedlem) = - this - .map { - Bostatusperiode( - husstandsmedlem, - it.datoFom, - it.datoTom, - it.bostatus, - it.kilde, - ) - }.toSet() diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt index 85544ec92..82102f45b 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt @@ -213,15 +213,21 @@ fun List.finnBorMedAndreVoksne(grunnlagsreferanseListe: List.finnDelberegningUtgift(grunnlagsreferanseListe: List): DelberegningUtgift? { val sluttberegning = finnSluttberegningIReferanser(grunnlagsreferanseListe) ?: return null - - val delberegningBidragspliktigesAndel = + val delberegningBidragspliktigesAndelReferanser = find { - it.type == Grunnlagstype.DELBEREGNING_UTGIFT && + it.type == Grunnlagstype.DELBEREGNING_BIDRAGSPLIKTIGES_ANDEL_SÆRBIDRAG && sluttberegning.grunnlagsreferanseListe.contains( it.referanse, ) } ?: return null - return delberegningBidragspliktigesAndel.innholdTilObjekt() + val delberegningUtgift = + find { + it.type == Grunnlagstype.DELBEREGNING_UTGIFT && + delberegningBidragspliktigesAndelReferanser.grunnlagsreferanseListe.contains( + it.referanse, + ) + } ?: return null + return delberegningUtgift.innholdTilObjekt() } fun List.finnDelberegningBidragsevne(grunnlagsreferanseListe: List): DelberegningBidragsevne? { diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/DtoExtensions.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/DtoExtensions.kt index 3afc34d10..3365fb7c8 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/DtoExtensions.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/DtoExtensions.kt @@ -13,17 +13,7 @@ import no.nav.bidrag.domene.enums.rolle.Rolletype import no.nav.bidrag.domene.ident.Personident fun Set.toSivilstandDto() = - this - .map { - SivilstandDto( - it.id, - it.datoFom, - it.datoTom, - it.sivilstand, - it.kilde, - ) - }.sortedBy { it.datoFom } - .toSet() + this.map { SivilstandDto(it.id, it.datoFom, it.datoTom, it.sivilstand, it.kilde) }.sortedBy { it.datoFom }.toSet() fun Behandling.tilForsendelseRolleDto() = roller.filter { r -> !(r.rolletype == Rolletype.BARN && r.ident == null) }.map { diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt new file mode 100644 index 000000000..f26f207f0 --- /dev/null +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt @@ -0,0 +1,580 @@ +package no.nav.bidrag.behandling.transformers + +import com.fasterxml.jackson.core.type.TypeReference +import no.nav.bidrag.behandling.database.datamodell.Behandling +import no.nav.bidrag.behandling.database.datamodell.Grunnlag +import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem +import no.nav.bidrag.behandling.database.datamodell.barn +import no.nav.bidrag.behandling.database.datamodell.hentSisteAktiv +import no.nav.bidrag.behandling.database.datamodell.hentSisteIkkeAktiv +import no.nav.bidrag.behandling.database.datamodell.konvertereData +import no.nav.bidrag.behandling.database.datamodell.voksneIHusstanden +import no.nav.bidrag.behandling.dto.v1.behandling.BegrunnelseDto +import no.nav.bidrag.behandling.dto.v1.behandling.BoforholdValideringsfeil +import no.nav.bidrag.behandling.dto.v1.behandling.VirkningstidspunktDto +import no.nav.bidrag.behandling.dto.v2.behandling.AktiveGrunnlagsdata +import no.nav.bidrag.behandling.dto.v2.behandling.AktivereGrunnlagResponseV2 +import no.nav.bidrag.behandling.dto.v2.behandling.AndreVoksneIHusstandenDetaljerDto +import no.nav.bidrag.behandling.dto.v2.behandling.AndreVoksneIHusstandenGrunnlagDto +import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDtoV2 +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.IkkeAktiveGrunnlagsdata +import no.nav.bidrag.behandling.dto.v2.behandling.IkkeAktiveInntekter +import no.nav.bidrag.behandling.dto.v2.behandling.PeriodeAndreVoksneIHusstanden +import no.nav.bidrag.behandling.dto.v2.boforhold.BoforholdDtoV2 +import no.nav.bidrag.behandling.dto.v2.boforhold.HusstandsmedlemDtoV2 +import no.nav.bidrag.behandling.dto.v2.boforhold.OppdatereBoforholdResponse +import no.nav.bidrag.behandling.dto.v2.boforhold.egetBarnErEnesteVoksenIHusstanden +import no.nav.bidrag.behandling.objectmapper +import no.nav.bidrag.behandling.service.NotatService +import no.nav.bidrag.behandling.service.TilgangskontrollService +import no.nav.bidrag.behandling.service.hentPersonVisningsnavn +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.henteEndringerIBoforhold +import no.nav.bidrag.behandling.transformers.behandling.henteRolleForNotat +import no.nav.bidrag.behandling.transformers.behandling.tilDto +import no.nav.bidrag.behandling.transformers.behandling.tilGrunnlagsinnhentingsfeil +import no.nav.bidrag.behandling.transformers.behandling.tilInntektDtoV2 +import no.nav.bidrag.behandling.transformers.behandling.toSivilstand +import no.nav.bidrag.behandling.transformers.boforhold.tilBostatusperiode +import no.nav.bidrag.behandling.transformers.utgift.tilUtgiftDto +import no.nav.bidrag.behandling.transformers.vedtak.ifTrue +import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 +import no.nav.bidrag.boforhold.dto.Bostatus +import no.nav.bidrag.domene.enums.person.Familierelasjon +import no.nav.bidrag.domene.enums.rolle.Rolletype +import no.nav.bidrag.domene.ident.Personident +import no.nav.bidrag.domene.sak.Saksnummer +import no.nav.bidrag.domene.tid.ÅrMånedsperiode +import no.nav.bidrag.transport.behandling.felles.grunnlag.NotatGrunnlag.NotatType +import no.nav.bidrag.transport.behandling.grunnlag.response.ArbeidsforholdGrunnlagDto +import no.nav.bidrag.transport.behandling.grunnlag.response.FeilrapporteringDto +import no.nav.bidrag.transport.behandling.grunnlag.response.RelatertPersonGrunnlagDto +import no.nav.bidrag.transport.notat.BoforholdBarn +import no.nav.bidrag.transport.notat.NotatAndreVoksneIHusstanden +import no.nav.bidrag.transport.notat.NotatAndreVoksneIHusstandenDetaljerDto +import no.nav.bidrag.transport.notat.NotatRolleDto +import no.nav.bidrag.transport.notat.NotatVoksenIHusstandenDetaljerDto +import no.nav.bidrag.transport.notat.OpplysningerBruktTilBeregning +import no.nav.bidrag.transport.notat.OpplysningerFraFolkeregisteret +import no.nav.bidrag.transport.notat.OpplysningerFraFolkeregisteretMedDetaljer +import org.springframework.stereotype.Component +import java.time.LocalDate +import java.time.LocalDateTime + +@Component +class Dtomapper( + val tilgangskontrollService: TilgangskontrollService, +) { + fun tilDto( + behandling: Behandling, + inkluderHistoriskeInntekter: Boolean = false, + ): BehandlingDtoV2 = behandling.dto(behandling.ikkeAktiveGrunnlagsdata(), inkluderHistoriskeInntekter) + + fun tilAktivereGrunnlagResponseV2(behandling: Behandling) = + AktivereGrunnlagResponseV2( + boforhold = behandling.tilBoforholdV2(), + inntekter = behandling.tilInntektDtoV2(behandling.grunnlagListe.toSet().hentSisteAktiv(), true), + aktiveGrunnlagsdata = + behandling.grunnlagListe + .toSet() + .hentSisteAktiv() + .tilAktiveGrunnlagsdata(), + ikkeAktiverteEndringerIGrunnlagsdata = behandling.ikkeAktiveGrunnlagsdata(), + ) + + fun tilOppdatereBoforholdResponse(husstandsmedlem: Husstandsmedlem): OppdatereBoforholdResponse = + husstandsmedlem.mapTilOppdatereBoforholdResponse() + + fun henteAndreVoksneIHusstanden( + grunnlag: Set, + periode: ÅrMånedsperiode, + erAktivert: Boolean = true, + ) = grunnlag.hentAlleAndreVoksneHusstandForPeriode(periode, erAktivert) + + fun tilAndreVoksneIHusstanden(behandling: Behandling) = behandling.andreVoksneIHusstanden() + + fun tilBoforholdBarn( + husstandsmedlem: Husstandsmedlem, + boforhold: List, + ) = husstandsmedlem.boforholdBarn(boforhold) + + fun henteBegrensetAntallAndreVoksne( + grunnlag: Set, + periode: ÅrMånedsperiode, + erAktivert: Boolean = true, + ) = grunnlag.hentBegrensetAndreVoksneHusstandForPeriode(periode, erAktivert) + + fun endringerIAndreVoksneIBpsHusstand( + ikkeAktiveGrunnlag: List, + aktiveGrunnlag: List, + ) = ikkeAktiveGrunnlag.henteEndringerIAndreVoksneIBpsHusstand(aktiveGrunnlag) + + private fun tilgangskontrollerePersoninfo( + personinfo: Personinfo, + saksnummer: Saksnummer, + skjuleIdentitietHvisBeskyttet: Boolean = false, + ): Personinfo { + personinfo.ident?.let { + if (!tilgangskontrollService.harTilgang(it, saksnummer) || skjuleIdentitietHvisBeskyttet) { + return Personinfo( + null, + "Person skjermet, født ${personinfo.fødselsdato?.year}", + null, + erBeskyttet = true, + ) + } + } + + return Personinfo( + personinfo.ident, + personinfo.navn ?: hentPersonVisningsnavn(personinfo.ident?.verdi), + personinfo.fødselsdato, + ) + } + + private fun Husstandsmedlem.boforholdBarn(opplysningerBoforhold: List): BoforholdBarn { + val tilgangskontrollertPersoninfo = + tilgangskontrollerePersoninfo( + this.tilPersoninfo(), + Saksnummer(this.behandling.saksnummer), + ) + return BoforholdBarn( + gjelder = + 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( + 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 { voksne -> + NotatVoksenIHusstandenDetaljerDto( + navn = voksne.navn!!, + fødselsdato = voksne.fødselsdato, + harRelasjonTilBp = voksne.harRelasjonTilBp, + erBeskyttet = voksne.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(), + ) + + private fun Behandling.ikkeAktiveGrunnlagsdata(): IkkeAktiveGrunnlagsdata { + val behandling = this + val roller = behandling.roller.sortedBy { if (it.rolletype == Rolletype.BARN) 1 else -1 } + val inntekter = behandling.inntekter + val sisteInnhentedeIkkeAktiveGrunnlag = behandling.grunnlagListe.toSet().hentSisteIkkeAktiv() + 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(), + ), + arbeidsforhold = sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIArbeidsforhold(aktiveGrunnlag), + husstandsmedlem = + sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIBoforhold(aktiveGrunnlag, behandling), + andreVoksneIHusstanden = + sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIAndreVoksneIBpsHusstand(aktiveGrunnlag), + sivilstand = + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerSivilstand( + aktiveGrunnlag, + behandling.virkningstidspunktEllerSøktFomDato, + ), + ) + } + + private fun List.henteEndringerIAndreVoksneIBpsHusstand(aktiveGrunnlag: List): AndreVoksneIHusstandenGrunnlagDto? { + val aktivtGrunnlag = + aktiveGrunnlag.find { Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN == it.type && it.erBearbeidet } + val nyttGrunnlag = find { Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN == it.type && it.erBearbeidet } + val aktiveData = aktivtGrunnlag.konvertereData>()?.toSet() + val nyeData = nyttGrunnlag.konvertereData>()?.toSet() + 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(), + innhentet = nyttGrunnlag?.innhentet ?: LocalDateTime.now(), + ) + } + return null + } + + // TODO: Endre navn til BehandlingDto når v2-migreringen er ferdigstilt + @Suppress("ktlint:standard:value-argument-comment") + private fun Behandling.dto( + ikkeAktiverteEndringerIGrunnlagsdata: IkkeAktiveGrunnlagsdata, + inkluderHistoriskeInntekter: Boolean, + ) = BehandlingDtoV2( + id = id!!, + type = tilType(), + vedtakstype = vedtakstype, + opprinneligVedtakstype = opprinneligVedtakstype, + stønadstype = stonadstype, + engangsbeløptype = engangsbeloptype, + erKlageEllerOmgjøring = erKlageEllerOmgjøring, + opprettetTidspunkt = opprettetTidspunkt, + erVedtakFattet = vedtaksid != null, + søktFomDato = søktFomDato, + mottattdato = mottattdato, + klageMottattdato = klageMottattdato, + søktAv = soknadFra, + saksnummer = saksnummer, + søknadsid = soknadsid, + behandlerenhet = behandlerEnhet, + roller = + roller.map { it.tilDto() }.toSet(), + søknadRefId = soknadRefId, + vedtakRefId = refVedtaksid, + virkningstidspunkt = + VirkningstidspunktDto( + virkningstidspunkt = virkningstidspunkt, + opprinneligVirkningstidspunkt = opprinneligVirkningstidspunkt, + årsak = årsak, + avslag = avslag, + begrunnelse = BegrunnelseDto(NotatService.henteNotatinnhold(this, NotatType.VIRKNINGSTIDSPUNKT)), + ), + boforhold = tilBoforholdV2(), + inntekter = + tilInntektDtoV2( + grunnlag.hentSisteAktiv(), + inkluderHistoriskeInntekter = inkluderHistoriskeInntekter, + ), + aktiveGrunnlagsdata = grunnlag.hentSisteAktiv().tilAktiveGrunnlagsdata(), + utgift = tilUtgiftDto(), + ikkeAktiverteEndringerIGrunnlagsdata = ikkeAktiverteEndringerIGrunnlagsdata, + feilOppståttVedSisteGrunnlagsinnhenting = + grunnlagsinnhentingFeilet?.let { + val typeRef: TypeReference> = + object : TypeReference>() {} + + objectmapper.readValue(it, typeRef).tilGrunnlagsinnhentingsfeil(this) + }, + ) + + private fun Husstandsmedlem.mapTilOppdatereBoforholdResponse() = + OppdatereBoforholdResponse( + oppdatertePerioderMedAndreVoksne = + (rolle?.rolletype == Rolletype.BIDRAGSPLIKTIG).ifTrue { perioder.tilBostatusperiode() } ?: emptySet(), + oppdatertHusstandsmedlem = + (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 }, + ), + ) + + private fun Behandling.tilBoforholdV2() = + BoforholdDtoV2( + husstandsmedlem = + husstandsmedlem.barn + .toSet() + .sortert() + .map { it.tilBostatusperiode() } + .toSet(), + andreVoksneIHusstanden = husstandsmedlem.voksneIHusstanden?.perioder?.tilBostatusperiode() ?: emptySet(), + sivilstand = sivilstand.toSivilstandDto(), + begrunnelse = + BegrunnelseDto( + innhold = NotatService.henteNotatinnhold(this, NotatType.BOFORHOLD), + gjelder = this.henteRolleForNotat(NotatType.BOFORHOLD, null).tilDto(), + ), + egetBarnErEnesteVoksenIHusstanden = egetBarnErEnesteVoksenIHusstanden, + 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 }, + ), + ) + + private fun Husstandsmedlem.tilBostatusperiode(): HusstandsmedlemDtoV2 { + val tilgangskontrollertPersoninfo = + tilgangskontrollerePersoninfo(this.tilPersoninfo(), Saksnummer(this.behandling.saksnummer)) + + return HusstandsmedlemDtoV2( + id = this.id, + kilde = this.kilde, + medIBehandling = + !this.ident.isNullOrBlank() && + behandling.søknadsbarn + .map { it.ident } + .contains(this.ident), + perioder = + this.perioder + .sortedBy { it.datoFom } + .toSet() + .tilBostatusperiode(), + ident = tilgangskontrollertPersoninfo.ident?.verdi, + navn = tilgangskontrollertPersoninfo.navn, + fødselsdato = tilgangskontrollertPersoninfo.fødselsdato, + ) + } + + private fun Set.hentAlleAndreVoksneHusstandForPeriode( + periode: ÅrMånedsperiode, + erAktivert: Boolean = true, + ): List { + val grunnlag = if (erAktivert) hentSisteAktiv() else hentSisteIkkeAktiv() + + val boforholdAndreVoksneIHusstanden = + grunnlag.find { it.type == Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN && !it.erBearbeidet } + + return boforholdAndreVoksneIHusstanden + .konvertereData>() + ?.filter { it.relasjon != Familierelasjon.BARN } + ?.filter { + it.borISammeHusstandDtoListe.any { p -> + 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!!)) } + ?.sorter() ?: emptyList() + } + + private fun RelatertPersonGrunnlagDto.tilAndreVoksneIHusstandenDetaljerDto(saksnummer: Saksnummer): AndreVoksneIHusstandenDetaljerDto { + val tilgangskontrollPersoninfo = tilgangskontrollerePersoninfo(this.tilPersoninfo(), saksnummer) + return AndreVoksneIHusstandenDetaljerDto( + tilgangskontrollPersoninfo.navn!!, + tilgangskontrollPersoninfo.fødselsdato, + this.relasjon != Familierelasjon.INGEN && this.relasjon != Familierelasjon.UKJENT, + relasjon = this.relasjon, + erBeskyttet = tilgangskontrollPersoninfo.erBeskyttet, + ) + } + + private fun Set.hentBegrensetAndreVoksneHusstandForPeriode( + periode: ÅrMånedsperiode, + erAktivert: Boolean = true, + ): List = hentAlleAndreVoksneHusstandForPeriode(periode, erAktivert).begrensAntallPersoner() + + private fun List.tilAktiveGrunnlagsdata() = + AktiveGrunnlagsdata( + arbeidsforhold = + filter { it.type == Grunnlagsdatatype.ARBEIDSFORHOLD && !it.erBearbeidet } + .mapNotNull { it.konvertereData>() } + .flatten() + .toSet(), + husstandsmedlem = + filter { it.type == Grunnlagsdatatype.BOFORHOLD && it.erBearbeidet }.tilHusstandsmedlem(), + andreVoksneIHusstanden = tilAndreVoksneIHusstanden(true), + sivilstand = + find { it.type == Grunnlagsdatatype.SIVILSTAND && !it.erBearbeidet }.toSivilstand(), + ) + + private fun List.tilAndreVoksneIHusstanden(erAktivert: Boolean) = + AndreVoksneIHusstandenGrunnlagDto( + perioder = tilPeriodeAndreVoksneIHusstanden(erAktivert), + innhentet = LocalDateTime.now(), + ) + + private fun List.tilPeriodeAndreVoksneIHusstanden(erAktivert: Boolean = true): Set = + find { Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN == it.type && it.erBearbeidet } + .konvertereData>() + ?.map { + val periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom) + PeriodeAndreVoksneIHusstanden( + periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), + status = it.bostatus!!, + totalAntallHusstandsmedlemmer = + toSet() + .hentAlleAndreVoksneHusstandForPeriode( + periode, + erAktivert, + ).size, + husstandsmedlemmer = toSet().hentBegrensetAndreVoksneHusstandForPeriode(periode, erAktivert), + ) + }?.toSet() ?: emptySet() +} + +private fun List.tilHusstandsmedlem() = + this + .map { + HusstandsmedlemGrunnlagDto( + innhentetTidspunkt = it.innhentet, + ident = it.gjelder, + perioder = + it + .konvertereData>() + ?.map { boforholdrespons -> + HusstandsmedlemGrunnlagDto.BostatusperiodeGrunnlagDto( + boforholdrespons.periodeFom, + boforholdrespons.periodeTom, + boforholdrespons.bostatus, + ) + }?.toSet() ?: emptySet(), + ) + }.toSet() + +private fun AndreVoksneIHusstandenDetaljerDto.tilPersoninfo() = + Personinfo( + null, + this.navn, + this.fødselsdato, + ) + +private fun Husstandsmedlem.tilPersoninfo() = + Personinfo( + this.ident?.let { Personident(it) }, + this.navn, + this.fødselsdato ?: rolle?.fødselsdato, + ) + +private fun RelatertPersonGrunnlagDto.tilPersoninfo() = + Personinfo( + this.gjelderPersonId?.let { Personident(it) }, + this.navn, + this.fødselsdato, + ) + +data class Personinfo( + val ident: Personident?, + val navn: String?, + val fødselsdato: LocalDate?, + val erBeskyttet: Boolean = false, +) 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 4810fcf4a..6985293ed 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 @@ -1,20 +1,18 @@ package no.nav.bidrag.behandling.transformers.behandling +import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.database.datamodell.Grunnlag -import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem 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.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.AndreVoksneIHusstandenGrunnlagDto 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.PeriodeAndreVoksneIHusstanden import no.nav.bidrag.behandling.dto.v2.behandling.SivilstandIkkeAktivGrunnlagDto import no.nav.bidrag.behandling.transformers.ainntekt12Og3Måneder import no.nav.bidrag.behandling.transformers.ainntekt12Og3MånederFraOpprinneligVedtakstidspunkt @@ -28,7 +26,6 @@ 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.tid.ÅrMånedsperiode import no.nav.bidrag.sivilstand.dto.Sivilstand import no.nav.bidrag.transport.behandling.grunnlag.response.ArbeidsforholdGrunnlagDto import no.nav.bidrag.transport.behandling.grunnlag.response.SivilstandGrunnlagDto @@ -87,42 +84,6 @@ fun mapTilInntektspostEndringer( fun InntektPost.erDetSammeSom(inntektPost: Inntektspost): Boolean = kode == inntektPost.kode && inntekstype == inntektPost.inntektstype -fun List.henteEndringerIAndreVoksneIBpsHusstand(aktiveGrunnlag: List): AndreVoksneIHusstandenGrunnlagDto? { - val aktivtGrunnlag = - aktiveGrunnlag.find { Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN == it.type && it.erBearbeidet } - val nyttGrunnlag = find { Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN == it.type && it.erBearbeidet } - val aktiveData = aktivtGrunnlag.konvertereData>()?.toSet() - val nyeData = nyttGrunnlag.konvertereData>()?.toSet() - 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(), - innhentet = nyttGrunnlag?.innhentet ?: LocalDateTime.now(), - ) - } - return null -} - fun Set.erLik(detAndreSettet: Set): Boolean { if (size != detAndreSettet.size) return false return asSequence().sortedBy { it.periodeFom }.all { gjeldendeData -> @@ -159,15 +120,17 @@ fun List.henteEndringerIArbeidsforhold(alleAktiveGrunnlag: List.henteEndringerIBoforhold( aktiveGrunnlag: List, - virkniningstidspunkt: LocalDate, - husstandsmedlem: Set, - rolle: Rolle, + behandling: Behandling, ): Set { + val virkniningstidspunkt = behandling.virkningstidspunktEllerSøktFomDato + val husstandsmedlemmer = behandling.husstandsmedlem + val rolle = behandling.rolleGrunnlagSkalHentesFor!! + val aktiveBoforholdsdata = - aktiveGrunnlag.hentAlleBearbeidaBoforhold(virkniningstidspunkt, husstandsmedlem, rolle).toSet() + aktiveGrunnlag.hentAlleBearbeidaBoforhold(virkniningstidspunkt, husstandsmedlemmer, rolle).toSet() // Hent første for å finne innhentet tidspunkt val nyeBoforholdsgrunnlag = find { it.type == Grunnlagsdatatype.BOFORHOLD && it.erBearbeidet } - val nyeBoforholdsdata = hentAlleBearbeidaBoforhold(virkniningstidspunkt, husstandsmedlem, rolle).toSet() + val nyeBoforholdsdata = hentAlleBearbeidaBoforhold(virkniningstidspunkt, husstandsmedlemmer, rolle).toSet() return nyeBoforholdsdata.finnEndringerBoforhold( virkniningstidspunkt, 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 639b4e245..e3e9c9567 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 @@ -1,6 +1,5 @@ package no.nav.bidrag.behandling.transformers.behandling -import com.fasterxml.jackson.core.type.TypeReference import io.github.oshai.kotlinlogging.KotlinLogging import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.database.datamodell.Grunnlag @@ -8,41 +7,23 @@ import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem import no.nav.bidrag.behandling.database.datamodell.Inntekt import no.nav.bidrag.behandling.database.datamodell.Notat import no.nav.bidrag.behandling.database.datamodell.Rolle -import no.nav.bidrag.behandling.database.datamodell.barn -import no.nav.bidrag.behandling.database.datamodell.hentSisteAktiv -import no.nav.bidrag.behandling.database.datamodell.hentSisteIkkeAktiv import no.nav.bidrag.behandling.database.datamodell.konvertereData import no.nav.bidrag.behandling.database.datamodell.tilPersonident -import no.nav.bidrag.behandling.database.datamodell.voksneIHusstanden 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.BoforholdValideringsfeil import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto -import no.nav.bidrag.behandling.dto.v1.behandling.VirkningstidspunktDto -import no.nav.bidrag.behandling.dto.v2.behandling.AktiveGrunnlagsdata -import no.nav.bidrag.behandling.dto.v2.behandling.AndreVoksneIHusstandenDetaljerDto -import no.nav.bidrag.behandling.dto.v2.behandling.AndreVoksneIHusstandenGrunnlagDto import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDetaljerDtoV2 -import no.nav.bidrag.behandling.dto.v2.behandling.BehandlingDtoV2 import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsinnhentingsfeil -import no.nav.bidrag.behandling.dto.v2.behandling.HusstandsmedlemGrunnlagDto -import no.nav.bidrag.behandling.dto.v2.behandling.IkkeAktiveGrunnlagsdata -import no.nav.bidrag.behandling.dto.v2.behandling.PeriodeAndreVoksneIHusstanden import no.nav.bidrag.behandling.dto.v2.behandling.SivilstandAktivGrunnlagDto -import no.nav.bidrag.behandling.dto.v2.boforhold.BoforholdDtoV2 -import no.nav.bidrag.behandling.dto.v2.boforhold.egetBarnErEnesteVoksenIHusstanden 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 import no.nav.bidrag.behandling.dto.v2.validering.InntektValideringsfeilDto -import no.nav.bidrag.behandling.objectmapper import no.nav.bidrag.behandling.service.NotatService import no.nav.bidrag.behandling.service.hentPersonVisningsnavn -import no.nav.bidrag.behandling.transformers.begrensAntallPersoner import no.nav.bidrag.behandling.transformers.bestemRollerSomKanHaInntekter import no.nav.bidrag.behandling.transformers.bestemRollerSomMåHaMinstEnInntekt -import no.nav.bidrag.behandling.transformers.boforhold.tilBostatusperiode import no.nav.bidrag.behandling.transformers.ekskluderYtelserFørVirkningstidspunkt import no.nav.bidrag.behandling.transformers.eksplisitteYtelser import no.nav.bidrag.behandling.transformers.finnCutoffDatoFom @@ -51,42 +32,29 @@ import no.nav.bidrag.behandling.transformers.finnOverlappendePerioder import no.nav.bidrag.behandling.transformers.inntekstrapporteringerSomKreverGjelderBarn import no.nav.bidrag.behandling.transformers.inntekt.tilInntektDtoV2 import no.nav.bidrag.behandling.transformers.nærmesteHeltall -import no.nav.bidrag.behandling.transformers.sorter import no.nav.bidrag.behandling.transformers.sorterEtterDato import no.nav.bidrag.behandling.transformers.sorterEtterDatoOgBarn -import no.nav.bidrag.behandling.transformers.sortert import no.nav.bidrag.behandling.transformers.tilInntektberegningDto import no.nav.bidrag.behandling.transformers.tilType -import no.nav.bidrag.behandling.transformers.toSivilstandDto import no.nav.bidrag.behandling.transformers.utgift.tilSærbidragKategoriDto -import no.nav.bidrag.behandling.transformers.utgift.tilUtgiftDto -import no.nav.bidrag.behandling.transformers.validerBoforhold -import no.nav.bidrag.behandling.transformers.validereAndreVoksneIHusstanden -import no.nav.bidrag.behandling.transformers.validereSivilstand import no.nav.bidrag.behandling.transformers.vedtak.ifTrue import no.nav.bidrag.behandling.transformers.årsinntekterSortert import no.nav.bidrag.beregn.core.BeregnApi import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 -import no.nav.bidrag.boforhold.dto.Bostatus import no.nav.bidrag.domene.enums.behandling.TypeBehandling import no.nav.bidrag.domene.enums.inntekt.Inntektsrapportering -import no.nav.bidrag.domene.enums.person.Familierelasjon import no.nav.bidrag.domene.enums.person.Sivilstandskode import no.nav.bidrag.domene.enums.rolle.Rolletype import no.nav.bidrag.domene.enums.vedtak.Engangsbeløptype import no.nav.bidrag.domene.enums.vedtak.Stønadstype import no.nav.bidrag.domene.tid.Datoperiode -import no.nav.bidrag.domene.tid.ÅrMånedsperiode 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.ArbeidsforholdGrunnlagDto import no.nav.bidrag.transport.behandling.grunnlag.response.FeilrapporteringDto -import no.nav.bidrag.transport.behandling.grunnlag.response.RelatertPersonGrunnlagDto import no.nav.bidrag.transport.behandling.grunnlag.response.SivilstandGrunnlagDto import no.nav.bidrag.transport.behandling.inntekt.response.SummertMånedsinntekt import java.time.LocalDate -import java.time.LocalDateTime import java.time.ZoneOffset import no.nav.bidrag.transport.behandling.felles.grunnlag.NotatGrunnlag.NotatType as Notattype @@ -137,71 +105,9 @@ fun Behandling.tilBehandlingDetaljerDtoV2() = }, ) -// TODO: Endre navn til BehandlingDto når v2-migreringen er ferdigstilt -@Suppress("ktlint:standard:value-argument-comment") -fun Behandling.tilBehandlingDtoV2( - gjeldendeAktiveGrunnlagsdata: List, - ikkeAktiverteEndringerIGrunnlagsdata: IkkeAktiveGrunnlagsdata? = null, - inkluderHistoriskeInntekter: Boolean = false, -) = BehandlingDtoV2( - id = id!!, - type = tilType(), - vedtakstype = vedtakstype, - opprinneligVedtakstype = opprinneligVedtakstype, - stønadstype = stonadstype, - engangsbeløptype = engangsbeloptype, - erKlageEllerOmgjøring = erKlageEllerOmgjøring, - opprettetTidspunkt = opprettetTidspunkt, - erVedtakFattet = vedtaksid != null, - søktFomDato = søktFomDato, - mottattdato = mottattdato, - klageMottattdato = klageMottattdato, - søktAv = soknadFra, - saksnummer = saksnummer, - søknadsid = soknadsid, - behandlerenhet = behandlerEnhet, - roller = - roller.map { it.tilDto() }.toSet(), - søknadRefId = soknadRefId, - vedtakRefId = refVedtaksid, - virkningstidspunkt = - VirkningstidspunktDto( - virkningstidspunkt = virkningstidspunkt, - opprinneligVirkningstidspunkt = opprinneligVirkningstidspunkt, - årsak = årsak, - avslag = avslag, - begrunnelse = BegrunnelseDto(NotatService.henteNotatinnhold(this, Notattype.VIRKNINGSTIDSPUNKT) ?: ""), - ), - boforhold = tilBoforholdV2(), - inntekter = - tilInntektDtoV2( - gjeldendeAktiveGrunnlagsdata, - inkluderHistoriskeInntekter = inkluderHistoriskeInntekter, - ), - aktiveGrunnlagsdata = gjeldendeAktiveGrunnlagsdata.tilAktiveGrunnlagsdata(), - utgift = tilUtgiftDto(), - ikkeAktiverteEndringerIGrunnlagsdata = - ikkeAktiverteEndringerIGrunnlagsdata - ?: IkkeAktiveGrunnlagsdata(), - feilOppståttVedSisteGrunnlagsinnhenting = - grunnlagsinnhentingFeilet?.let { - val typeRef: TypeReference> = - object : TypeReference>() {} - - objectmapper.readValue(it, typeRef).tilGrunnlagsinnhentingsfeil(this) - }, -) +fun Rolle.tilDto() = RolleDto(id!!, rolletype, ident, navn ?: hentPersonVisningsnavn(ident), fødselsdato) -fun Rolle.tilDto() = - RolleDto( - id!!, - rolletype, - ident, - navn ?: hentPersonVisningsnavn(ident), - fødselsdato, - ) - -private fun Map.tilGrunnlagsinnhentingsfeil(behandling: Behandling) = +fun Map.tilGrunnlagsinnhentingsfeil(behandling: Behandling) = this .map { feil -> Grunnlagsinnhentingsfeil( @@ -227,111 +133,6 @@ fun Grunnlag?.toSivilstand(): SivilstandAktivGrunnlagDto? { ) } -fun List.tilHusstandsmedlem() = - this - .map { - HusstandsmedlemGrunnlagDto( - innhentetTidspunkt = it.innhentet, - ident = it.gjelder, - perioder = - it - .konvertereData>() - ?.map { boforholdrespons -> - HusstandsmedlemGrunnlagDto.BostatusperiodeGrunnlagDto( - boforholdrespons.periodeFom, - boforholdrespons.periodeTom, - boforholdrespons.bostatus, - ) - }?.toSet() ?: emptySet(), - ) - }.toSet() - -fun List.tilAndreVoksneIHusstanden(erAktivert: Boolean) = - AndreVoksneIHusstandenGrunnlagDto( - perioder = tilPeriodeAndreVoksneIHusstanden(erAktivert), - innhentet = LocalDateTime.now(), - ) - -private fun List.tilPeriodeAndreVoksneIHusstanden(erAktivert: Boolean = true): Set = - find { Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN == it.type && it.erBearbeidet } - .konvertereData>() - ?.map { - val periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom) - PeriodeAndreVoksneIHusstanden( - periode = ÅrMånedsperiode(it.periodeFom!!, it.periodeTom), - status = it.bostatus!!, - totalAntallHusstandsmedlemmer = toSet().hentAlleAndreVoksneHusstandForPeriode(periode, erAktivert).size, - husstandsmedlemmer = toSet().hentBegrensetAndreVoksneHusstandForPeriode(periode, erAktivert), - ) - }?.toSet() ?: emptySet() - -fun Set.hentAlleAndreVoksneHusstandForPeriode( - periode: ÅrMånedsperiode, - erAktivert: Boolean = true, -): List { - val grunnlag = if (erAktivert) hentSisteAktiv() else hentSisteIkkeAktiv() - - return grunnlag - .find { it.type == Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN && !it.erBearbeidet } - .konvertereData>() - ?.filter { it.relasjon != Familierelasjon.BARN } - ?.filter { - it.borISammeHusstandDtoListe.any { p -> - val periodeBorHosBP = ÅrMånedsperiode(p.periodeFra!!, p.periodeTil?.plusMonths(1)) - periodeBorHosBP.fom <= periode.fom && periodeBorHosBP.tilEllerMax() <= periode.tilEllerMax() - } - }?.map { - AndreVoksneIHusstandenDetaljerDto( - it.navn!!, - it.fødselsdato, - it.relasjon != Familierelasjon.INGEN && it.relasjon != Familierelasjon.UKJENT, - relasjon = it.relasjon, - ) - }?.sorter() ?: emptyList() -} - -fun Set.hentBegrensetAndreVoksneHusstandForPeriode( - periode: ÅrMånedsperiode, - erAktivert: Boolean = true, -): List = hentAlleAndreVoksneHusstandForPeriode(periode, erAktivert).begrensAntallPersoner() - -fun Behandling.tilBoforholdV2() = - BoforholdDtoV2( - husstandsmedlem = - husstandsmedlem - .barn - .toSet() - .sortert() - .map { it.tilBostatusperiode() } - .toSet(), - andreVoksneIHusstanden = - husstandsmedlem - .voksneIHusstanden - ?.perioder - ?.tilBostatusperiode() ?: emptySet(), - sivilstand = sivilstand.toSivilstandDto(), - begrunnelse = - BegrunnelseDto( - innhold = NotatService.henteNotatinnhold(this, Notattype.BOFORHOLD), - gjelder = this.henteRolleForNotat(Notattype.BOFORHOLD, null).tilDto(), - ), - egetBarnErEnesteVoksenIHusstanden = egetBarnErEnesteVoksenIHusstanden, - 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 }, - ), - ) - fun Behandling.tilInntektDtoV2( gjeldendeAktiveGrunnlagsdata: List = emptyList(), inkluderHistoriskeInntekter: Boolean = false, @@ -402,20 +203,6 @@ fun Behandling.tilInntektDtoV2( valideringsfeil = hentInntekterValideringsfeil(), ) -fun List.tilAktiveGrunnlagsdata() = - AktiveGrunnlagsdata( - arbeidsforhold = - filter { it.type == Grunnlagsdatatype.ARBEIDSFORHOLD && !it.erBearbeidet } - .mapNotNull { it.konvertereData>() } - .flatten() - .toSet(), - husstandsmedlem = - filter { it.type == Grunnlagsdatatype.BOFORHOLD && it.erBearbeidet }.tilHusstandsmedlem(), - andreVoksneIHusstanden = tilAndreVoksneIHusstanden(true), - sivilstand = - find { it.type == Grunnlagsdatatype.SIVILSTAND && !it.erBearbeidet }.toSivilstand(), - ) - fun Behandling.hentInntekterValideringsfeil(): InntektValideringsfeilDto = InntektValideringsfeilDto( årsinntekter = diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/boforhold/Boforholdsmappinger.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/boforhold/Boforholdsmappinger.kt index 5ea8369dc..5a399b6ee 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/boforhold/Boforholdsmappinger.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/boforhold/Boforholdsmappinger.kt @@ -2,22 +2,12 @@ package no.nav.bidrag.behandling.transformers.boforhold import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.database.datamodell.Bostatusperiode -import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem import no.nav.bidrag.behandling.database.datamodell.Sivilstand -import no.nav.bidrag.behandling.database.datamodell.barn -import no.nav.bidrag.behandling.database.datamodell.voksneIHusstanden import no.nav.bidrag.behandling.dto.v1.behandling.BoforholdValideringsfeil import no.nav.bidrag.behandling.dto.v1.behandling.SivilstandDto import no.nav.bidrag.behandling.dto.v2.boforhold.BostatusperiodeDto -import no.nav.bidrag.behandling.dto.v2.boforhold.HusstandsmedlemDtoV2 import no.nav.bidrag.behandling.dto.v2.boforhold.OppdatereBoforholdResponse -import no.nav.bidrag.behandling.dto.v2.boforhold.egetBarnErEnesteVoksenIHusstanden -import no.nav.bidrag.behandling.service.hentPersonVisningsnavn -import no.nav.bidrag.behandling.transformers.validerBoforhold -import no.nav.bidrag.behandling.transformers.validereAndreVoksneIHusstanden import no.nav.bidrag.behandling.transformers.validereSivilstand -import no.nav.bidrag.behandling.transformers.vedtak.ifTrue -import no.nav.bidrag.domene.enums.rolle.Rolletype fun Set.tilBostatusperiode() = this @@ -32,39 +22,6 @@ fun Set.tilBostatusperiode() = }.sortedBy { it.datoFom } .toSet() -fun Husstandsmedlem.tilBostatusperiode() = - HusstandsmedlemDtoV2( - this.id, - this.kilde, - !this.ident.isNullOrBlank() && behandling.søknadsbarn.map { it.ident }.contains(this.ident), - this.perioder - .sortedBy { it.datoFom } - .toSet() - .tilBostatusperiode(), - this.ident, - this.navn ?: hentPersonVisningsnavn(this.ident), - this.fødselsdato ?: this.rolle!!.fødselsdato, - ) - -fun Husstandsmedlem.tilOppdatereBoforholdResponse(behandling: Behandling) = - OppdatereBoforholdResponse( - oppdatertePerioderMedAndreVoksne = - (rolle?.rolletype == Rolletype.BIDRAGSPLIKTIG).ifTrue { perioder.tilBostatusperiode() } ?: emptySet(), - oppdatertHusstandsmedlem = (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 }, - ), - ) - fun Sivilstand.tilBostatusperiode() = SivilstandDto(this.id, this.datoFom, datoTom = this.datoTom, this.sivilstand, this.kilde) fun Set.tilSivilstandDto() = this.map { it.tilBostatusperiode() }.toSet() diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/BoforholdControllerTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/BoforholdControllerTest.kt index dae63c40f..135da362e 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/BoforholdControllerTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/BoforholdControllerTest.kt @@ -1,5 +1,6 @@ package no.nav.bidrag.behandling.controller +import com.ninjasquad.springmockk.MockkBean import io.kotest.assertions.assertSoftly import io.kotest.matchers.collections.shouldBeEmpty import io.kotest.matchers.collections.shouldHaveSize @@ -8,6 +9,8 @@ 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 no.nav.bidrag.behandling.consumer.BidragTilgangskontrollConsumer import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.database.datamodell.Bostatusperiode import no.nav.bidrag.behandling.database.repository.BehandlingRepository @@ -25,6 +28,7 @@ import no.nav.bidrag.domene.enums.diverse.Kilde import no.nav.bidrag.domene.enums.person.Bostatuskode import no.nav.bidrag.domene.ident.Personident import org.junit.experimental.runners.Enclosed +import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.junit.runner.RunWith @@ -39,71 +43,71 @@ class BoforholdControllerTest : KontrollerTestRunner() { @Autowired lateinit var behandlingRepository: BehandlingRepository + private fun opprettBehandling(): Behandling { + val behandling = testdataManager.oppretteBehandling() + behandling.virkningstidspunkt = LocalDate.parse("2023-01-01") + behandling.husstandsmedlem.clear() + behandling.husstandsmedlem.addAll( + setOf( + oppretteHusstandsmedlem(behandling, testdataBarn1).let { + it.perioder = + mutableSetOf( + Bostatusperiode( + datoFom = LocalDate.parse("2023-01-01"), + datoTom = LocalDate.parse("2023-05-31"), + bostatus = Bostatuskode.MED_FORELDER, + kilde = Kilde.OFFENTLIG, + husstandsmedlem = it, + ), + Bostatusperiode( + datoFom = LocalDate.parse("2023-06-01"), + datoTom = null, + bostatus = Bostatuskode.IKKE_MED_FORELDER, + kilde = Kilde.OFFENTLIG, + husstandsmedlem = it, + ), + ) + it + }, + oppretteHusstandsmedlem(behandling, testdataBarn2).let { + it.perioder = + mutableSetOf( + Bostatusperiode( + datoFom = LocalDate.parse("2023-01-01"), + datoTom = LocalDate.parse("2023-10-31"), + bostatus = Bostatuskode.MED_FORELDER, + kilde = Kilde.OFFENTLIG, + husstandsmedlem = it, + ), + Bostatusperiode( + datoFom = LocalDate.parse("2023-11-01"), + datoTom = LocalDate.parse("2023-12-31"), + bostatus = Bostatuskode.IKKE_MED_FORELDER, + kilde = Kilde.OFFENTLIG, + husstandsmedlem = it, + ), + Bostatusperiode( + datoFom = LocalDate.parse("2024-01-01"), + datoTom = null, + bostatus = Bostatuskode.MED_FORELDER, + kilde = Kilde.MANUELL, + husstandsmedlem = it, + ), + ) + it + }, + ), + ) + behandling.grunnlag.addAll( + oppretteBoforholdBearbeidetGrunnlagForhusstandsmedlem( + oppretteHusstandsmedlemMedOffentligePerioder(behandling), + ), + ) + return testdataManager.lagreBehandlingNewTransaction(behandling) + } + @Nested open inner class OppdatereBoforhold { - private fun opprettBehandling(): Behandling { - val behandling = testdataManager.oppretteBehandling() - behandling.virkningstidspunkt = LocalDate.parse("2023-01-01") - behandling.husstandsmedlem.clear() - behandling.husstandsmedlem.addAll( - setOf( - oppretteHusstandsmedlem(behandling, testdataBarn1).let { - it.perioder = - mutableSetOf( - Bostatusperiode( - datoFom = LocalDate.parse("2023-01-01"), - datoTom = LocalDate.parse("2023-05-31"), - bostatus = Bostatuskode.MED_FORELDER, - kilde = Kilde.OFFENTLIG, - husstandsmedlem = it, - ), - Bostatusperiode( - datoFom = LocalDate.parse("2023-06-01"), - datoTom = null, - bostatus = Bostatuskode.IKKE_MED_FORELDER, - kilde = Kilde.OFFENTLIG, - husstandsmedlem = it, - ), - ) - it - }, - oppretteHusstandsmedlem(behandling, testdataBarn2).let { - it.perioder = - mutableSetOf( - Bostatusperiode( - datoFom = LocalDate.parse("2023-01-01"), - datoTom = LocalDate.parse("2023-10-31"), - bostatus = Bostatuskode.MED_FORELDER, - kilde = Kilde.OFFENTLIG, - husstandsmedlem = it, - ), - Bostatusperiode( - datoFom = LocalDate.parse("2023-11-01"), - datoTom = LocalDate.parse("2023-12-31"), - bostatus = Bostatuskode.IKKE_MED_FORELDER, - kilde = Kilde.OFFENTLIG, - husstandsmedlem = it, - ), - Bostatusperiode( - datoFom = LocalDate.parse("2024-01-01"), - datoTom = null, - bostatus = Bostatuskode.MED_FORELDER, - kilde = Kilde.MANUELL, - husstandsmedlem = it, - ), - ) - it - }, - ), - ) - behandling.grunnlag.addAll( - oppretteBoforholdBearbeidetGrunnlagForhusstandsmedlem( - oppretteHusstandsmedlemMedOffentligePerioder(behandling), - ), - ) - return testdataManager.lagreBehandlingNewTransaction(behandling) - } - @Test fun `skal kunne legge til ny manuell periode`() { // gitt @@ -268,7 +272,7 @@ class BoforholdControllerTest : KontrollerTestRunner() { } @Test - open fun `skal kunne legge til et nytt husstandsmedlem`() { + open fun `skal kunne legge til et nytt husstandsmedlem som saksbehandler har tilgang til`() { // gitt val behandling = opprettBehandling() behandling.husstandsmedlem.shouldHaveSize(2) @@ -312,7 +316,8 @@ class BoforholdControllerTest : KontrollerTestRunner() { .opprettHusstandsmedlem!! .personident!! .verdi - oppdatertHusstandsmedlem.navn shouldBe request.oppdatereHusstandsmedlem!!.opprettHusstandsmedlem!!.navn + oppdatertHusstandsmedlem.navn shouldBe + request.oppdatereHusstandsmedlem.opprettHusstandsmedlem!!.navn oppdatertHusstandsmedlem.perioder.shouldHaveSize(1) oppdatertHusstandsmedlem.perioder.first().kilde shouldBe Kilde.MANUELL oppdatertHusstandsmedlem.perioder.first().datoFom shouldBe behandling.virkningstidspunktEllerSøktFomDato @@ -554,4 +559,79 @@ class BoforholdControllerTest : KontrollerTestRunner() { } } } + + @Nested + open inner class OppdatereBoforholdVerifisereTilgangskontroll { + @MockkBean + lateinit var bidragTilgangskontrollConsumer: BidragTilgangskontrollConsumer + + @BeforeEach + fun setup() { + every { bidragTilgangskontrollConsumer.sjekkTilgangPersonISak(any(), any()) } returns false + } + + @Test + open fun `skal kunne legge til et nytt husstandsmedlem som saksbehandler ikke har tilgang til`() { + // gitts + val behandling = opprettBehandling() + behandling.husstandsmedlem.shouldHaveSize(2) + val request = + OppdatereBoforholdRequestV2( + oppdatereHusstandsmedlem = + OppdatereHusstandsmedlem( + opprettHusstandsmedlem = + OpprettHusstandsstandsmedlem( + personident = Personident("1234"), + fødselsdato = LocalDate.now().minusMonths(156), + navn = "Per Spelemann", + ), + ), + ) + + // hvis + val boforholdResponse = + httpHeaderTestRestTemplate.exchange( + "${rootUriV2()}/behandling/${behandling.id}/boforhold", + HttpMethod.PUT, + HttpEntity(request), + OppdatereBoforholdResponse::class.java, + ) + + // så + assertSoftly(boforholdResponse) { + it.statusCode shouldBe HttpStatus.OK + it.body shouldNotBe null + it.body + ?.valideringsfeil + ?.husstandsmedlem + .shouldBeEmpty() + it.body?.oppdatertHusstandsmedlem shouldNotBe null + } + + assertSoftly(boforholdResponse.body!!.oppdatertHusstandsmedlem) { oppdatertHusstandsmedlem -> + oppdatertHusstandsmedlem!!.kilde shouldBe Kilde.MANUELL + oppdatertHusstandsmedlem.ident shouldBe null + oppdatertHusstandsmedlem.navn shouldBe + "Person skjermet, født ${request.oppdatereHusstandsmedlem!!.opprettHusstandsmedlem!!.fødselsdato.year}" + oppdatertHusstandsmedlem.perioder.shouldHaveSize(1) + oppdatertHusstandsmedlem.perioder.first().kilde shouldBe Kilde.MANUELL + oppdatertHusstandsmedlem.perioder.first().datoFom shouldBe behandling.virkningstidspunktEllerSøktFomDato + oppdatertHusstandsmedlem.perioder + .first() + .datoTom + .shouldBeNull() + } + + assertSoftly(behandlingRepository.findBehandlingById(behandling.id!!).get().husstandsmedlem) { + it.size shouldBe 3 + it.find { nyttBarn -> + nyttBarn.ident == + request.oppdatereHusstandsmedlem!! + .opprettHusstandsmedlem!! + .personident!! + .verdi + } shouldNotBe null + } + } + } } 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 534fc9836..da3c79bc7 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt @@ -17,6 +17,8 @@ import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem import no.nav.bidrag.behandling.database.datamodell.Inntekt import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.database.datamodell.barn +import no.nav.bidrag.behandling.database.datamodell.hentSisteAktiv +import no.nav.bidrag.behandling.database.datamodell.hentSisteIkkeAktiv import no.nav.bidrag.behandling.database.datamodell.konvertereData import no.nav.bidrag.behandling.database.datamodell.særbidragKategori import no.nav.bidrag.behandling.database.datamodell.voksneIHusstanden @@ -30,6 +32,8 @@ import no.nav.bidrag.behandling.dto.v2.behandling.AktivereGrunnlagRequestV2 import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.jsonListeTilObjekt import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.tilJson +import no.nav.bidrag.behandling.transformers.behandling.hentEndringerSivilstand +import no.nav.bidrag.behandling.transformers.behandling.henteEndringerIBoforhold import no.nav.bidrag.behandling.transformers.boforhold.tilBoforholdBarnRequest import no.nav.bidrag.behandling.transformers.boforhold.tilBoforholdVoksneRequest import no.nav.bidrag.behandling.transformers.boforhold.tilSivilstandRequest @@ -883,9 +887,15 @@ class BehandlingServiceTest : TestContainerRunner() { ), ) - val ikkeAktiverteEndringerIGrunnlagsdata = grunnlagService.henteNyeGrunnlagsdataMedEndringsdiff(b) + val sisteInnhentedeIkkeAktiveGrunnlag = b.grunnlagListe.toSet().hentSisteIkkeAktiv() + val aktiveGrunnlag = b.grunnlagListe.toSet().hentSisteAktiv() - assertSoftly(ikkeAktiverteEndringerIGrunnlagsdata.sivilstand) { + assertSoftly( + sisteInnhentedeIkkeAktiveGrunnlag.hentEndringerSivilstand( + aktiveGrunnlag, + b.virkningstidspunktEllerSøktFomDato, + ), + ) { it shouldNotBe null it!!.grunnlag shouldHaveSize 1 it.sivilstand shouldHaveSize 1 @@ -987,9 +997,12 @@ class BehandlingServiceTest : TestContainerRunner() { ) } - val ikkeAktiverteEndringerIGrunnlagsdata = grunnlagService.henteNyeGrunnlagsdataMedEndringsdiff(b) + val sisteInnhentedeIkkeAktiveGrunnlag = b.grunnlagListe.toSet().hentSisteIkkeAktiv() + val aktiveGrunnlag = b.grunnlagListe.toSet().hentSisteAktiv() - assertSoftly(ikkeAktiverteEndringerIGrunnlagsdata.husstandsmedlem) { + assertSoftly( + sisteInnhentedeIkkeAktiveGrunnlag.henteEndringerIBoforhold(aktiveGrunnlag, b), + ) { it shouldHaveSize 1 it.first().perioder shouldHaveSize 3 } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/BoforholdServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/BoforholdServiceTest.kt index 0a7ab0918..557d4c141 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/BoforholdServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/BoforholdServiceTest.kt @@ -57,6 +57,7 @@ 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 import org.junit.experimental.runners.Enclosed +import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test @@ -87,6 +88,11 @@ class BoforholdServiceTest : TestContainerRunner() { @Autowired lateinit var entityManager: EntityManager + @BeforeEach + fun initStubs() { + stubUtils.stubTilgangskontrollPersonISak() + } + @Nested open inner class AndreVoksneIHusstandentester { @Nested 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 7249311ed..f28450aad 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GrunnlagServiceTest.kt @@ -3495,190 +3495,6 @@ class GrunnlagServiceTest : TestContainerRunner() { } } - @Nested - @DisplayName("Teste differensiering av nytt mot gammelt grunnlag") - open inner class Diffing { - @Test - open fun `skal returnere diff for arbeidsforhold`() { - // gitt - val b = oppretteBehandling(inkludereBp = true, inkludereArbeidsforhold = true) - 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) - - // hvis - val ikkeAktivereGrunnlagsdata = grunnlagService.henteNyeGrunnlagsdataMedEndringsdiff(b) - - // så - assertSoftly(ikkeAktivereGrunnlagsdata) { resultat -> - resultat.arbeidsforhold shouldNotBe null - resultat.arbeidsforhold shouldHaveSize 1 - } - } - - @Test - open fun `skal returnere diff for sivilstand`() { - // gitt - val behandling = testdataManager.oppretteBehandling(false) - behandling.virkningstidspunkt = LocalDate.parse("2023-01-01") - - // gjeldende sivilstand - behandling.grunnlag.add( - Grunnlag( - aktiv = LocalDateTime.now().minusDays(5), - behandling = behandling, - innhentet = LocalDateTime.now(), - erBearbeidet = true, - 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, - ), - ), - ), - ), - ) - - // ny sivilstand - behandling.grunnlag.add( - Grunnlag( - behandling = behandling, - innhentet = LocalDateTime.now(), - erBearbeidet = true, - 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, - ), - ), - ), - ), - ) - - // hvis - val ikkeAktivereGrunnlagsdata = grunnlagService.henteNyeGrunnlagsdataMedEndringsdiff(behandling) - - // så - assertSoftly(ikkeAktivereGrunnlagsdata) { resultat -> - resultat.sivilstand shouldNotBe null - } - } - - @Test - @Transactional - open fun `skal returnere diff for boforhold`() { - // gitt - val behandling = testdataManager.oppretteBehandling(false) - behandling.virkningstidspunkt = LocalDate.parse("2023-01-01") - val nyFomdato = LocalDate.now().minusYears(10) - - // gjeldende boforhold - behandling.grunnlag.add( - Grunnlag( - aktiv = LocalDateTime.now().minusDays(5), - behandling = behandling, - innhentet = LocalDateTime.now(), - gjelder = testdataBarn1.ident, - erBearbeidet = true, - 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, - ), - ), - ), - ), - ) - - // nytt boforhold - behandling.grunnlag.add( - Grunnlag( - aktiv = null, - behandling = behandling, - innhentet = LocalDateTime.now(), - gjelder = testdataBarn1.ident, - erBearbeidet = true, - 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, - ), - ), - ), - ), - ) - - // hvis - val ikkeAktivereGrunnlagsdata = grunnlagService.henteNyeGrunnlagsdataMedEndringsdiff(behandling) - - // så - assertSoftly(ikkeAktivereGrunnlagsdata) { resultat -> - resultat.husstandsmedlem shouldNotBe null - resultat.husstandsmedlem shouldHaveSize 1 - resultat.husstandsmedlem.find { testdataBarn1.ident == it.ident } shouldNotBe null - resultat.husstandsmedlem - .find { testdataBarn1.ident == it.ident } - ?.perioder - ?.shouldHaveSize(1) - resultat.husstandsmedlem - .find { - testdataBarn1.ident == it.ident - }?.perioder - ?.maxBy { it.datoFom!! }!! - .datoFom shouldBe behandling.virkningstidspunktEllerSøktFomDato - resultat.husstandsmedlem - .find { - testdataBarn1.ident == it.ident - }?.perioder - ?.maxBy { it.datoFom!! }!! - .bostatus shouldBe Bostatuskode.IKKE_MED_FORELDER - } - } - } - @Nested @DisplayName("Teste feilhåndtering") open inner class Feilhåndtering { diff --git a/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt new file mode 100644 index 000000000..5ba1b8a8b --- /dev/null +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperTest.kt @@ -0,0 +1,227 @@ +package no.nav.bidrag.behandling.transformers + +import io.kotest.assertions.assertSoftly +import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.shouldBe +import io.kotest.matchers.shouldNotBe +import no.nav.bidrag.behandling.TestContainerRunner +import no.nav.bidrag.behandling.database.datamodell.Grunnlag +import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype +import no.nav.bidrag.behandling.utils.testdata.TestdataManager +import no.nav.bidrag.behandling.utils.testdata.oppretteArbeidsforhold +import no.nav.bidrag.behandling.utils.testdata.oppretteBehandling +import no.nav.bidrag.behandling.utils.testdata.testdataBarn1 +import no.nav.bidrag.boforhold.dto.BoforholdResponseV2 +import no.nav.bidrag.domene.enums.diverse.Kilde +import no.nav.bidrag.domene.enums.person.Bostatuskode +import no.nav.bidrag.domene.enums.person.Sivilstandskode +import no.nav.bidrag.sivilstand.dto.Sivilstand +import no.nav.bidrag.transport.felles.commonObjectmapper +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.springframework.beans.factory.annotation.Autowired +import org.springframework.transaction.annotation.Transactional +import java.time.LocalDate +import java.time.LocalDateTime + +class DtoMapperTest : TestContainerRunner() { + @Autowired + lateinit var testdataManager: TestdataManager + + @Autowired + lateinit var dtomapper: Dtomapper + + @BeforeEach + fun initMocks() { + stubUtils.stubTilgangskontrollPersonISak() + } + + @Nested + @DisplayName("Teste differensiering av nytt mot gammelt grunnlag") + open inner class Diffing { + @Test + @Transactional + fun `skal returnere diff for boforhold`() { + // gitt + val behandling = testdataManager.oppretteBehandling(false) + behandling.virkningstidspunkt = LocalDate.parse("2023-01-01") + val nyFomdato = LocalDate.now().minusYears(10) + + // gjeldende boforhold + behandling.grunnlag.add( + Grunnlag( + aktiv = LocalDateTime.now().minusDays(5), + behandling = behandling, + innhentet = LocalDateTime.now(), + gjelder = testdataBarn1.ident, + erBearbeidet = true, + 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, + ), + ), + ), + ), + ) + + // nytt boforhold + behandling.grunnlag.add( + Grunnlag( + aktiv = null, + behandling = behandling, + innhentet = LocalDateTime.now(), + gjelder = testdataBarn1.ident, + erBearbeidet = true, + 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, + ), + ), + ), + ), + ) + + // hvis + val ikkeAktivereGrunnlagsdata = + dtomapper.tilAktivereGrunnlagResponseV2(behandling).ikkeAktiverteEndringerIGrunnlagsdata + + // så + assertSoftly(ikkeAktivereGrunnlagsdata) { resultat -> + resultat.husstandsmedlem shouldNotBe null + resultat.husstandsmedlem shouldHaveSize 1 + resultat.husstandsmedlem.find { testdataBarn1.ident == it.ident } shouldNotBe null + resultat.husstandsmedlem + .find { testdataBarn1.ident == it.ident } + ?.perioder + ?.shouldHaveSize(1) + resultat.husstandsmedlem + .find { + testdataBarn1.ident == it.ident + }?.perioder + ?.maxBy { it.datoFom!! }!! + .datoFom shouldBe behandling.virkningstidspunktEllerSøktFomDato + resultat.husstandsmedlem + .find { + testdataBarn1.ident == it.ident + }?.perioder + ?.maxBy { it.datoFom!! }!! + .bostatus shouldBe Bostatuskode.IKKE_MED_FORELDER + } + } + + @Test + fun `skal returnere diff for arbeidsforhold`() { + // gitt + val b = oppretteBehandling(inkludereBp = true, inkludereArbeidsforhold = true) + 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) + + // hvis + val ikkeAktivereGrunnlagsdata = + dtomapper.tilAktivereGrunnlagResponseV2(b).ikkeAktiverteEndringerIGrunnlagsdata + + // så + assertSoftly(ikkeAktivereGrunnlagsdata) { resultat -> + resultat.arbeidsforhold shouldNotBe null + resultat.arbeidsforhold shouldHaveSize 1 + } + } + + @Test + open fun `skal returnere diff for sivilstand`() { + // gitt + val behandling = testdataManager.oppretteBehandling(false) + behandling.virkningstidspunkt = LocalDate.parse("2023-01-01") + + // gjeldende sivilstand + behandling.grunnlag.add( + Grunnlag( + aktiv = LocalDateTime.now().minusDays(5), + behandling = behandling, + innhentet = LocalDateTime.now(), + erBearbeidet = true, + 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, + ), + ), + ), + ), + ) + + // ny sivilstand + behandling.grunnlag.add( + Grunnlag( + behandling = behandling, + innhentet = LocalDateTime.now(), + erBearbeidet = true, + 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, + ), + ), + ), + ), + ) + + // hvis + val ikkeAktivereGrunnlagsdata = + dtomapper.tilAktivereGrunnlagResponseV2(behandling).ikkeAktiverteEndringerIGrunnlagsdata + + // så + assertSoftly(ikkeAktivereGrunnlagsdata) { resultat -> + resultat.sivilstand shouldNotBe null + } + } + } +} diff --git a/src/test/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivBoforholdSivilstandGrunnlagMappingTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivBoforholdSivilstandGrunnlagMappingTest.kt index a6d25a83c..de30e0bc9 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivBoforholdSivilstandGrunnlagMappingTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/behandling/AktivBoforholdSivilstandGrunnlagMappingTest.kt @@ -46,7 +46,7 @@ class AktivBoforholdSivilstandGrunnlagMappingTest : AktivGrunnlagTestFelles() { gjelderPersonId = testdataBarn1.ident, ), ) - val aktivBoforholdGrunnlagListe2 = + val aktivtBoforholdGrunnlagListe2 = listOf( BoforholdResponseV2( bostatus = Bostatuskode.IKKE_MED_FORELDER, @@ -56,7 +56,7 @@ class AktivBoforholdSivilstandGrunnlagMappingTest : AktivGrunnlagTestFelles() { gjelderPersonId = testdataBarn2.ident, ), ) - val aktivGrunnlagBoforhold = + val aktivtGrunnlagBoforhold = listOf( Grunnlag( erBearbeidet = true, @@ -71,7 +71,7 @@ class AktivBoforholdSivilstandGrunnlagMappingTest : AktivGrunnlagTestFelles() { erBearbeidet = true, rolle = behandling.bidragsmottaker!!, type = Grunnlagsdatatype.BOFORHOLD, - data = commonObjectmapper.writeValueAsString(aktivBoforholdGrunnlagListe2), + data = commonObjectmapper.writeValueAsString(aktivtBoforholdGrunnlagListe2), behandling = behandling, gjelder = testdataBarn2.ident, innhentet = LocalDateTime.now(), @@ -98,7 +98,7 @@ class AktivBoforholdSivilstandGrunnlagMappingTest : AktivGrunnlagTestFelles() { gjelderPersonId = testdataBarn2.ident, ), ) - val nyGrunnlagBoforhold = + val nyttGrunnlagBoforhold = listOf( Grunnlag( erBearbeidet = true, @@ -120,18 +120,12 @@ class AktivBoforholdSivilstandGrunnlagMappingTest : AktivGrunnlagTestFelles() { ), ) - val resultat = - nyGrunnlagBoforhold.henteEndringerIBoforhold( - aktivGrunnlagBoforhold, - LocalDate.parse("2020-01-01"), - opprettHusstandsmedlemmer(behandling), - behandling.bidragsmottaker!!, - ) + val resultat = nyttGrunnlagBoforhold.henteEndringerIBoforhold(aktivtGrunnlagBoforhold, behandling) resultat shouldHaveSize 2 val resultatBarn1 = resultat.find { it.ident == testdataBarn1.ident } resultatBarn1!!.perioder shouldHaveSize 1 - resultatBarn1.perioder.toList()[0].datoFom shouldBe LocalDate.parse("2020-01-01") + resultatBarn1.perioder.toList()[0].datoFom shouldBe behandling.virkningstidspunkt resultatBarn1.perioder.toList()[0].datoTom shouldBe null resultatBarn1.perioder.toList()[0].bostatus shouldBe Bostatuskode.MED_FORELDER @@ -208,17 +202,12 @@ class AktivBoforholdSivilstandGrunnlagMappingTest : AktivGrunnlagTestFelles() { val resultat = listOf( nyGrunnlagBoforhold, - ).henteEndringerIBoforhold( - listOf(aktivGrunnlagBoforhold), - LocalDate.parse("2020-01-01"), - opprettHusstandsmedlemmer(behandling), - behandling.bidragsmottaker!!, - ) + ).henteEndringerIBoforhold(listOf(aktivGrunnlagBoforhold), behandling) resultat shouldHaveSize 1 val resultatBarn1 = resultat.find { it.ident == testdataBarn1.ident } resultatBarn1!!.perioder shouldHaveSize 3 - resultatBarn1.perioder.toList()[0].datoFom shouldBe LocalDate.parse("2020-01-01") + resultatBarn1.perioder.toList()[0].datoFom shouldBe behandling.virkningstidspunkt resultatBarn1.perioder.toList()[0].datoTom shouldBe LocalDate.parse("2023-11-30") resultatBarn1.perioder.toList()[0].bostatus shouldBe Bostatuskode.IKKE_MED_FORELDER } @@ -294,14 +283,7 @@ class AktivBoforholdSivilstandGrunnlagMappingTest : AktivGrunnlagTestFelles() { ) val resultat = - listOf( - nyttGrunnlagBoforhold, - ).henteEndringerIBoforhold( - listOf(aktivGrunnlagBoforhold), - LocalDate.parse("2022-12-01"), - opprettHusstandsmedlemmer(behandling), - behandling.bidragsmottaker!!, - ) + listOf(nyttGrunnlagBoforhold).henteEndringerIBoforhold(listOf(aktivGrunnlagBoforhold), behandling) resultat shouldHaveSize 0 } @@ -380,13 +362,7 @@ class AktivBoforholdSivilstandGrunnlagMappingTest : AktivGrunnlagTestFelles() { ), ) - val resultat = - nyGrunnlagBoforhold.henteEndringerIBoforhold( - aktivGrunnlagBoforhold, - LocalDate.parse("2020-01-01"), - opprettHusstandsmedlemmer(behandling), - behandling.bidragsmottaker!!, - ) + val resultat = nyGrunnlagBoforhold.henteEndringerIBoforhold(aktivGrunnlagBoforhold, behandling) resultat shouldHaveSize 0 } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/transformers/behandling/BehandlingDtoMappingTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/transformers/behandling/BehandlingDtoMappingTest.kt index 6f29e2ffb..85b7212f7 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/behandling/BehandlingDtoMappingTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/behandling/BehandlingDtoMappingTest.kt @@ -3,14 +3,14 @@ package no.nav.bidrag.behandling.transformers.behandling import io.kotest.assertions.assertSoftly import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.shouldBe +import no.nav.bidrag.behandling.TestContainerRunner import no.nav.bidrag.behandling.database.datamodell.Grunnlag import no.nav.bidrag.behandling.database.datamodell.Notat import no.nav.bidrag.behandling.database.datamodell.Utgiftspost -import no.nav.bidrag.behandling.database.datamodell.hentSisteAktiv -import no.nav.bidrag.behandling.database.datamodell.hentSisteIkkeAktiv 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.IkkeAktiveGrunnlagsdata +import no.nav.bidrag.behandling.service.TilgangskontrollService +import no.nav.bidrag.behandling.transformers.Dtomapper import no.nav.bidrag.behandling.transformers.boforhold.tilBoforholdVoksneRequest import no.nav.bidrag.behandling.transformers.utgift.tilUtgiftDto import no.nav.bidrag.behandling.utils.testdata.opprettGyldigBehandlingForBeregningOgVedtak @@ -32,19 +32,26 @@ import no.nav.bidrag.transport.behandling.grunnlag.response.RelatertPersonGrunnl import no.nav.bidrag.transport.felles.commonObjectmapper import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired import stubPersonConsumer import stubSaksbehandlernavnProvider import java.math.BigDecimal import java.time.LocalDate import java.time.LocalDateTime -class BehandlingDtoMappingTest { +class BehandlingDtoMappingTest : TestContainerRunner() { + @Autowired + lateinit var tilgangskontrollService: TilgangskontrollService + + lateinit var mapper: Dtomapper + @BeforeEach fun initMocks() { stubPersonConsumer() stubKodeverkProvider() stubSjablonProvider() stubSaksbehandlernavnProvider() + mapper = Dtomapper(tilgangskontrollService) } @Test @@ -285,13 +292,7 @@ class BehandlingDtoMappingTest { ) // hvis - val behandlingDto = - behandling.tilBehandlingDtoV2( - behandling.grunnlag.hentSisteAktiv(), - IkkeAktiveGrunnlagsdata( - andreVoksneIHusstanden = behandling.grunnlag.hentSisteIkkeAktiv().tilAndreVoksneIHusstanden(false), - ), - ) + val behandlingDto = mapper.tilDto(behandling, true) // så assertSoftly(behandlingDto) { b -> diff --git a/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/TestdataManager.kt b/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/TestdataManager.kt index b20eedfdb..35d0a5580 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/TestdataManager.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/utils/testdata/TestdataManager.kt @@ -10,7 +10,6 @@ import no.nav.bidrag.behandling.database.repository.BehandlingRepository 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.service.GrunnlagService import no.nav.bidrag.behandling.transformers.Jsonoperasjoner.Companion.tilJson import no.nav.bidrag.domene.enums.behandling.TypeBehandling import no.nav.bidrag.domene.enums.rolle.Rolletype @@ -23,7 +22,6 @@ import java.time.LocalDateTime @Component class TestdataManager( private val behandlingRepository: BehandlingRepository, - private val grunnlagService: GrunnlagService, private val entityManager: EntityManager, ) { @Transactional @@ -32,9 +30,6 @@ class TestdataManager( @Transactional(Transactional.TxType.REQUIRES_NEW) fun lagreBehandlingNewTransaction(behandling: Behandling): Behandling = behandlingRepository.save(behandling) - @Transactional(Transactional.TxType.REQUIRES_NEW) - fun oppdatereGrunnlagForBehandling(behandling: Behandling) = grunnlagService.oppdatereGrunnlagForBehandling(behandling) - @Transactional(Transactional.TxType.REQUIRES_NEW) fun oppretteBehandlingINyTransaksjon( inkluderInntekter: Boolean = false,