From 8ac984b0afd1f1c89fdf43e71f44b100938ee0a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stig=20Helge=20Str=C3=B8m?= Date: Mon, 7 Oct 2024 10:37:41 +0200 Subject: [PATCH] Sletter kode brukt av slettet app familie-ba-skatteetaten-api --- .deploy/ba-sak-proxy/nais.yaml | 2 - .deploy/nais/app-preprod.yaml | 2 - .deploy/nais/app-prod.yaml | 2 - pom.xml | 6 - .../nav/familie/ba/sak/config/CacheConfig.kt | 17 - .../AndelTilkjentYtelsePeriode.kt | 19 - .../skatteetaten/SkatteetatenController.kt | 178 ---- .../skatteetaten/SkatteetatenService.kt | 208 ----- .../infotrygd/InfotrygdBarnetrygdClient.kt | 29 - .../domene/AndelTilkjentYtelseRepository.kt | 40 - .../ba/sak/kjerne/fagsak/FagsakRepository.kt | 25 - src/main/resources/application.yaml | 2 +- .../skatteetaten/SkatteetatenServiceTest.kt | 152 ---- .../SkatteetatenServiceIntegrationTest.kt | 854 ------------------ 14 files changed, 1 insertion(+), 1535 deletions(-) delete mode 100644 src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/AndelTilkjentYtelsePeriode.kt delete mode 100644 src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenController.kt delete mode 100644 src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenService.kt delete mode 100644 src/test/enhetstester/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenServiceTest.kt delete mode 100644 src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenServiceIntegrationTest.kt diff --git a/.deploy/ba-sak-proxy/nais.yaml b/.deploy/ba-sak-proxy/nais.yaml index 238fb4ead56..cb1f5e861d6 100644 --- a/.deploy/ba-sak-proxy/nais.yaml +++ b/.deploy/ba-sak-proxy/nais.yaml @@ -64,8 +64,6 @@ spec: cluster: dev-gcp - application: familie-prosessering cluster: dev-gcp - - application: familie-ba-skatteetaten-api - cluster: dev-gcp - application: familie-ba-migrering cluster: dev-gcp - application: bidrag-grunnlag-feature diff --git a/.deploy/nais/app-preprod.yaml b/.deploy/nais/app-preprod.yaml index df532ce75a7..f5ad1e5555f 100644 --- a/.deploy/nais/app-preprod.yaml +++ b/.deploy/nais/app-preprod.yaml @@ -73,8 +73,6 @@ spec: cluster: dev-gcp - application: familie-prosessering cluster: dev-gcp - - application: familie-ba-skatteetaten-api - cluster: dev-gcp - application: familie-klage cluster: dev-gcp - application: bidrag-grunnlag-feature diff --git a/.deploy/nais/app-prod.yaml b/.deploy/nais/app-prod.yaml index 0befd2db844..cf2ac166962 100644 --- a/.deploy/nais/app-prod.yaml +++ b/.deploy/nais/app-prod.yaml @@ -72,8 +72,6 @@ spec: cluster: prod-gcp - application: familie-prosessering cluster: prod-gcp - - application: familie-ba-skatteetaten-api - cluster: prod-gcp - application: familie-klage cluster: prod-gcp - application: bidrag-grunnlag-feature diff --git a/pom.xml b/pom.xml index 0e92abd5f09..422281ffc3d 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,6 @@ 2.0_20230214104704_706e9c0 2.0_20240311083956_0558f2a 1.0_20240902095239_88c7bc0 - 2.0_20230214104704_706e9c0 7.19.0 1.13.12 3.9.1 @@ -335,11 +334,6 @@ saksstatistikk ${familie.kontrakter.saksstatistikk} - - no.nav.familie.eksterne.kontrakter - skatteetaten - ${familie.kontrakter.skatteetaten} - no.nav.familie.felles familie-utbetalingsgenerator diff --git a/src/main/kotlin/no/nav/familie/ba/sak/config/CacheConfig.kt b/src/main/kotlin/no/nav/familie/ba/sak/config/CacheConfig.kt index c7778ed2da1..e0f6913f193 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/config/CacheConfig.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/config/CacheConfig.kt @@ -63,23 +63,6 @@ class CacheConfig { return ConcurrentMapCache(name, concurrentMap, true) } } - - @Bean("skattPersonerCache") - fun skattPersonerCache(): CacheManager = - object : ConcurrentMapCacheManager() { - override fun createConcurrentMapCache(name: String): Cache { - val concurrentMap = - Caffeine - .newBuilder() - .initialCapacity(100) - .maximumSize(1000) - .expireAfterWrite(1, TimeUnit.DAYS) - .recordStats() - .build() - .asMap() - return ConcurrentMapCache(name, concurrentMap, true) - } - } } fun CacheManager.getCacheOrThrow(cache: String) = this.getCache(cache) ?: error("Finner ikke cache=$cache") diff --git a/src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/AndelTilkjentYtelsePeriode.kt b/src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/AndelTilkjentYtelsePeriode.kt deleted file mode 100644 index 3ff9cf2c655..00000000000 --- a/src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/AndelTilkjentYtelsePeriode.kt +++ /dev/null @@ -1,19 +0,0 @@ -package no.nav.familie.ba.sak.ekstern.skatteetaten - -import java.time.LocalDateTime - -interface AndelTilkjentYtelsePeriode { - fun getId(): Long - - fun getIdent(): String - - fun getFom(): LocalDateTime - - fun getTom(): LocalDateTime - - fun getProsent(): String - - fun getEndretDato(): LocalDateTime - - fun getBehandlingId(): Long -} diff --git a/src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenController.kt b/src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenController.kt deleted file mode 100644 index 94f2e64f08a..00000000000 --- a/src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenController.kt +++ /dev/null @@ -1,178 +0,0 @@ -package no.nav.familie.ba.sak.ekstern.skatteetaten - -import jakarta.validation.Valid -import jakarta.validation.constraints.NotNull -import no.nav.familie.ba.sak.common.EnvService -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPeriode -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPeriode.Delingsprosent -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerioder -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerioderRequest -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerioderResponse -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerson -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPersonerResponse -import no.nav.familie.kontrakter.felles.Ressurs -import no.nav.security.token.support.core.api.ProtectedWithClaims -import org.slf4j.LoggerFactory -import org.springframework.http.HttpStatus -import org.springframework.http.ResponseEntity -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestBody -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RequestParam -import org.springframework.web.bind.annotation.RestController -import java.time.LocalDateTime - -@RestController -@RequestMapping("/api/skatt") -@ProtectedWithClaims(issuer = "azuread") -class SkatteetatenController( - private val skatteetatenService: SkatteetatenService, - private val envService: EnvService, -) { - @GetMapping( - value = ["/personer"], - produces = ["application/json;charset=UTF-8"], - ) - fun finnPersonerMedUtvidetBarnetrygd( - @NotNull - @RequestParam(value = "aar", required = true) - aar: String, - ): ResponseEntity> { - logger.info("Treff på finnPersonerMedUtvidetBarnetrygd") - val respons = - if (envService.erProd()) { - skatteetatenService.finnPersonerMedUtvidetBarnetrygd(aar) - } else { - SkatteetatenPersonerResponse( - listeMedTestdataPerioder() - .filter { it.sisteVedtakPaaIdent.year == aar.toInt() } - .map { SkatteetatenPerson(it.ident, it.sisteVedtakPaaIdent) }, - ) - } - return ResponseEntity(Ressurs.success(respons), HttpStatus.valueOf(200)) - } - - @GetMapping( - value = ["/personer/test"], - produces = ["application/json;charset=UTF-8"], - ) - fun finnPersonerMedUtvidetBarnetrygdTest( - @NotNull - @RequestParam(value = "aar", required = true) - aar: String, - ): ResponseEntity> { - logger.info("Treff på finnPersonerMedUtvidetBarnetrygdTest") - val respons = skatteetatenService.finnPersonerMedUtvidetBarnetrygd(aar) - return ResponseEntity(Ressurs.success(respons), HttpStatus.valueOf(200)) - } - - @PostMapping( - value = ["/perioder"], - produces = ["application/json;charset=UTF-8"], - consumes = ["application/json"], - ) - fun hentPerioderMedUtvidetBarnetrygd( - @Valid @RequestBody - perioderRequest: SkatteetatenPerioderRequest, - ): ResponseEntity> { - logger.info("Treff på hentPerioderMedUtvidetBarnetrygd") - val response = - if (envService.erProd()) { - skatteetatenService.finnPerioderMedUtvidetBarnetrygd(perioderRequest.identer, perioderRequest.aar) - } else { - SkatteetatenPerioderResponse(listeMedTestdataPerioder().filter { it.sisteVedtakPaaIdent.year == perioderRequest.aar.toInt() && it.ident in perioderRequest.identer }) - } - return ResponseEntity( - Ressurs.Companion.success(response), - HttpStatus.valueOf(200), - ) - } - - @PostMapping( - value = ["/perioder/test"], - produces = ["application/json;charset=UTF-8"], - consumes = ["application/json"], - ) - fun hentPerioderMedUtvidetBarnetrygdForMidlertidigTest( - @Valid @RequestBody - perioderRequest: SkatteetatenPerioderRequest, - ): ResponseEntity> { - logger.info("Treff på hentPerioderMedUtvidetBarnetrygdForMidlertidigTest") - val response = - skatteetatenService.finnPerioderMedUtvidetBarnetrygd(perioderRequest.identer, perioderRequest.aar) - - return ResponseEntity( - Ressurs.Companion.success(response), - HttpStatus.valueOf(200), - ) - } - - private fun listeMedTestdataPerioder(): List { - val fraMaaned = "2021-02" - return listOf( - SkatteetatenPerioder( - "01838398495", - LocalDateTime.of(2021, 1, 1, 0, 0), - perioder = - listOf( - SkatteetatenPeriode(fraMaaned, Delingsprosent._50, tomMaaned = "2022-12"), - ), - ), - SkatteetatenPerioder( - "09919094319", - LocalDateTime.of(2021, 1, 1, 0, 0), - perioder = - listOf( - SkatteetatenPeriode(fraMaaned, Delingsprosent._0, tomMaaned = "2024-12"), - ), - ), - SkatteetatenPerioder( - "15830699233", - LocalDateTime.of(2021, 1, 1, 0, 0), - perioder = - listOf( - SkatteetatenPeriode(fraMaaned, Delingsprosent.usikker, tomMaaned = "2024-12"), - ), - ), - SkatteetatenPerioder( - "01828499633", - LocalDateTime.of(2021, 2, 1, 0, 0), - perioder = - listOf( - SkatteetatenPeriode(fraMaaned, Delingsprosent._50, tomMaaned = null), - ), - ), - SkatteetatenPerioder( - "27903249671", - LocalDateTime.of(2021, 1, 1, 0, 0), - perioder = - listOf( - SkatteetatenPeriode("2021-01", Delingsprosent._50, tomMaaned = "2021-03"), - SkatteetatenPeriode("2021-04", Delingsprosent._0, tomMaaned = "2021-08"), - SkatteetatenPeriode("2021-09", Delingsprosent.usikker, tomMaaned = null), - ), - ), - SkatteetatenPerioder( - "24835498561", - LocalDateTime.of(2020, 1, 3, 0, 0), - perioder = - listOf( - SkatteetatenPeriode("2020-01", Delingsprosent._50, tomMaaned = "2020-12"), - ), - ), - SkatteetatenPerioder( - "02889197172", - LocalDateTime.of(2019, 2, 1, 0, 0), - perioder = - listOf( - SkatteetatenPeriode("2019-02", Delingsprosent._0, tomMaaned = "2019-09"), - ), - ), - ) - } - - companion object { - private val logger = LoggerFactory.getLogger(SkatteetatenController::class.java) - } -} diff --git a/src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenService.kt b/src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenService.kt deleted file mode 100644 index 7e1f8750ae7..00000000000 --- a/src/main/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenService.kt +++ /dev/null @@ -1,208 +0,0 @@ -package no.nav.familie.ba.sak.ekstern.skatteetaten - -import no.nav.familie.ba.sak.common.isSameOrAfter -import no.nav.familie.ba.sak.integrasjoner.infotrygd.InfotrygdBarnetrygdClient -import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService -import no.nav.familie.ba.sak.kjerne.behandling.Behandlingutils -import no.nav.familie.ba.sak.kjerne.beregning.domene.AndelTilkjentYtelseRepository -import no.nav.familie.ba.sak.kjerne.fagsak.FagsakRepository -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPeriode -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerioder -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerioderResponse -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerson -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPersonerResponse -import org.slf4j.LoggerFactory -import org.springframework.cache.annotation.Cacheable -import org.springframework.stereotype.Service -import java.math.BigDecimal -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.YearMonth -import java.time.format.DateTimeFormatter - -@Service -class SkatteetatenService( - private val infotrygdBarnetrygdClient: InfotrygdBarnetrygdClient, - private val fagsakRepository: FagsakRepository, - private val andelTilkjentYtelseRepository: AndelTilkjentYtelseRepository, - private val behandlingHentOgPersisterService: BehandlingHentOgPersisterService, -) { - @Cacheable("skatt_personer", cacheManager = "skattPersonerCache", unless = "#result == null") - fun finnPersonerMedUtvidetBarnetrygd(år: String): SkatteetatenPersonerResponse { - LOG.info("Kaller finnPersonerMedUtvidetBarnetrygd for år=$år") - val personerFraInfotrygd = infotrygdBarnetrygdClient.hentPersonerMedUtvidetBarnetrygd(år) - LOG.info("Hentet ${personerFraInfotrygd.brukere.size} saker med utvidet fra infotrygd i $år") - val personerFraBaSak = hentPersonerMedUtvidetBarnetrygd(år) - LOG.info("Hentet ${personerFraBaSak.size} saker med utvidet fra basak i $år") - - val personIdentSet = personerFraBaSak.map { it.ident }.toSet() - - // Assumes that vedtak in ba-sak is always newer than that in Infotrygd for the same person ident - val kombinertListe = - personerFraBaSak + personerFraInfotrygd.brukere.filter { !personIdentSet.contains(it.ident) } - - return SkatteetatenPersonerResponse(kombinertListe) - } - - fun finnPerioderMedUtvidetBarnetrygd( - personer: List, - år: String, - ): SkatteetatenPerioderResponse { - val unikePersoner = personer.distinct() - val perioderFraBaSak = hentPerioderMedUtvidetBarnetrygdFraBaSak(unikePersoner, år) - LOG.info("Fant ${perioderFraBaSak.size} skatteetatenperioder fra ba-sak") - val perioderFraInfotrygd = - infotrygdBarnetrygdClient.hentPerioderMedUtvidetBarnetrygdForPersoner(unikePersoner, år) - LOG.info("Fant ${perioderFraInfotrygd.size} skatteetatenperioder fra infotrygd") - - val samletPerioder = mutableListOf() - unikePersoner.forEach { personIdent -> - val resultatInfotrygdForPerson = - perioderFraInfotrygd.firstOrNull { perioder -> perioder.ident == personIdent } - val perioderFraInfotrygdForPerson = - resultatInfotrygdForPerson?.perioder ?: emptyList() - - val resultatBaSakForPerson = perioderFraBaSak.firstOrNull { perioder -> perioder.ident == personIdent } - - val perioderFraBasak = resultatBaSakForPerson?.perioder ?: emptyList() - - val perioder = - (perioderFraBasak + perioderFraInfotrygdForPerson) - .groupBy { periode -> periode.delingsprosent } - .values - .flatMap(::slåSammenSkatteetatenPeriode) - .toMutableList() - if (perioder.isNotEmpty()) { - samletPerioder.add( - SkatteetatenPerioder( - ident = personIdent, - perioder = perioder, - sisteVedtakPaaIdent = - resultatBaSakForPerson?.sisteVedtakPaaIdent - ?: resultatInfotrygdForPerson!!.sisteVedtakPaaIdent, - ), - ) - } - } - - // Assumes that vedtak in ba-sak is always newer than that in Infotrygd for the same person ident - return SkatteetatenPerioderResponse(samletPerioder) - } - - private fun hentPersonerMedUtvidetBarnetrygd(år: String): List = - fagsakRepository - .finnFagsakerMedUtvidetBarnetrygdInnenfor( - fom = LocalDate.of(år.toInt(), 1, 1).atStartOfDay(), - tom = LocalDate.of(år.toInt() + 1, 1, 1).atStartOfDay(), - ).map { SkatteetatenPerson(it.fnr, it.sisteVedtaksdato.atStartOfDay()) } - - private fun hentPerioderMedUtvidetBarnetrygdFraBaSak( - personer: List, - år: String, - ): List { - val stonadPerioder = hentUtvidetStonadPerioderForPersoner(personer, år) - val aktivAndelTilkjentYtelsePeriode = mutableListOf() - stonadPerioder.groupBy { it.getId() }.values.forEach { perioderGroupedByPerson -> - if (perioderGroupedByPerson.size > 1) { - val behandlinger = - perioderGroupedByPerson.map { behandlingHentOgPersisterService.hent(behandlingId = it.getBehandlingId()) } - val sisteIverksatteBehandling = Behandlingutils.hentSisteBehandlingSomErIverksatt(behandlinger) - if (sisteIverksatteBehandling != null) { - aktivAndelTilkjentYtelsePeriode.addAll(perioderGroupedByPerson.filter { it.getBehandlingId() == sisteIverksatteBehandling.id }) - } - } else { - aktivAndelTilkjentYtelsePeriode.add(perioderGroupedByPerson.first()) - } - } - - val skatteetatenPerioderMap = - stonadPerioder.fold(mutableMapOf()) { perioderMap, period -> - val ident = period.getIdent() - val nyList = - listOf( - SkatteetatenPeriode( - fraMaaned = period.getFom().format(DateTimeFormatter.ofPattern("yyyy-MM")), - delingsprosent = period.getProsent().tilDelingsprosent(), - tomMaaned = period.getTom().format(DateTimeFormatter.ofPattern("yyyy-MM")), - ), - ) - val samletPerioder = - if (perioderMap.containsKey(ident)) { - perioderMap[ident]!!.perioder + nyList - } else { - nyList - } - perioderMap[ident] = SkatteetatenPerioder(ident, period.getEndretDato(), samletPerioder) - perioderMap - } - - return skatteetatenPerioderMap.toList().map { - // Slå sammen perioder basert på delingsprosent - SkatteetatenPerioder( - ident = it.second.ident, - sisteVedtakPaaIdent = it.second.sisteVedtakPaaIdent, - perioder = - it.second.perioder - .groupBy { periode -> periode.delingsprosent } - .values - .flatMap(::slåSammenSkatteetatenPeriode) - .toMutableList(), - ) - } - } - - private fun hentUtvidetStonadPerioderForPersoner( - personIdenter: List, - år: String, - ): List { - val yearStart = LocalDateTime.of(år.toInt(), 1, 1, 0, 0, 0) - val yearEnd = LocalDateTime.of(år.toInt(), 12, 31, 23, 59, 59) - return andelTilkjentYtelseRepository.finnPerioderMedUtvidetBarnetrygdForPersoner( - personIdenter, - yearStart, - yearEnd, - ) - } - - private fun slåSammenSkatteetatenPeriode(perioderAvEtGittDelingsprosent: List): List = - perioderAvEtGittDelingsprosent - .sortedBy { it.fraMaaned } - .fold(mutableListOf()) { sammenslåttePerioder, nesteUtbetaling -> - val nesteUtbetalingFraMåned = YearMonth.parse(nesteUtbetaling.fraMaaned) - val forrigeUtbetalingTomMåned = - sammenslåttePerioder.lastOrNull()?.tomMaaned?.let { YearMonth.parse(it) } - - if (forrigeUtbetalingTomMåned?.isSameOrAfter(nesteUtbetalingFraMåned.minusMonths(1)) == true || (sammenslåttePerioder.isNotEmpty() && forrigeUtbetalingTomMåned == null)) { - val nySammenslåing = - sammenslåttePerioder.removeLast().copy(tomMaaned = nesteUtbetaling.tomMaaned) - sammenslåttePerioder.apply { add(nySammenslåing) } - } else { - sammenslåttePerioder.apply { add(nesteUtbetaling) } - } - } - - companion object { - val LOG = LoggerFactory.getLogger(SkatteetatenService::class.java) - } -} - -fun String.tilDelingsprosent(): SkatteetatenPeriode.Delingsprosent = - if (this == "100") { - SkatteetatenPeriode.Delingsprosent._0 - } else if (this == "50") { - SkatteetatenPeriode.Delingsprosent._50 - } else { - SkatteetatenPeriode.Delingsprosent.usikker - } - -fun SkatteetatenPeriode.Delingsprosent.tilBigDecimal(): BigDecimal = - when (this) { - SkatteetatenPeriode.Delingsprosent._0 -> BigDecimal.valueOf(100) - SkatteetatenPeriode.Delingsprosent._50 -> BigDecimal.valueOf(50) - else -> BigDecimal.valueOf(0) - } - -interface UtvidetSkatt { - val fnr: String - val sisteVedtaksdato: LocalDate -} diff --git a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/infotrygd/InfotrygdBarnetrygdClient.kt b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/infotrygd/InfotrygdBarnetrygdClient.kt index 9a7ac00b240..3a7c54195a1 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/infotrygd/InfotrygdBarnetrygdClient.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/infotrygd/InfotrygdBarnetrygdClient.kt @@ -6,10 +6,6 @@ import no.nav.familie.ba.sak.ekstern.bisys.BisysUtvidetBarnetrygdResponse import no.nav.familie.ba.sak.ekstern.pensjon.BarnetrygdTilPensjonRequest import no.nav.familie.ba.sak.ekstern.pensjon.BarnetrygdTilPensjonResponse import no.nav.familie.ba.sak.task.OpprettTaskService.Companion.RETRY_BACKOFF_5000MS -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerioder -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerioderRequest -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerioderResponse -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPersonerResponse import no.nav.familie.http.client.AbstractRestClient import no.nav.familie.kontrakter.ba.infotrygd.InfotrygdSøkRequest import no.nav.familie.kontrakter.ba.infotrygd.InfotrygdSøkResponse @@ -158,31 +154,6 @@ class InfotrygdBarnetrygdClient( } } - fun hentPersonerMedUtvidetBarnetrygd(år: String): SkatteetatenPersonerResponse { - val uri = URI.create("$clientUri/infotrygd/barnetrygd/utvidet?aar=$år") - return try { - getForEntity(uri) - } catch (ex: Exception) { - loggFeil(ex, uri) - throw RuntimeException("Henting av personer med utvidet barnetrygd feilet. Gav feil: ${ex.message}", ex) - } - } - - fun hentPerioderMedUtvidetBarnetrygdForPersoner( - identer: List, - år: String, - ): List { - val uri = URI.create("$clientUri/infotrygd/barnetrygd/utvidet/skatteetaten/perioder") - - val request = SkatteetatenPerioderRequest(identer = identer, aar = år) - return try { - postForEntity>(uri, request).flatMap { it.brukere } - } catch (ex: Exception) { - loggFeil(ex, uri) - throw RuntimeException("Henting av perioder med utvidet barnetrygd feilet. Gav feil: ${ex.message}", ex) - } - } - fun harNyligSendtBrevFor( søkersIdenter: List, brevkoder: List, diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/beregning/domene/AndelTilkjentYtelseRepository.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/beregning/domene/AndelTilkjentYtelseRepository.kt index db87be9c174..b294f6f0bdc 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/beregning/domene/AndelTilkjentYtelseRepository.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/beregning/domene/AndelTilkjentYtelseRepository.kt @@ -1,11 +1,9 @@ package no.nav.familie.ba.sak.kjerne.beregning.domene import io.micrometer.core.annotation.Timed -import no.nav.familie.ba.sak.ekstern.skatteetaten.AndelTilkjentYtelsePeriode import no.nav.familie.ba.sak.kjerne.personident.Aktør import org.springframework.data.jpa.repository.JpaRepository import org.springframework.data.jpa.repository.Query -import java.time.LocalDateTime import java.time.YearMonth interface AndelTilkjentYtelseRepository : JpaRepository { @@ -30,44 +28,6 @@ interface AndelTilkjentYtelseRepository : JpaRepository - @Query( - """ - SELECT aty.id AS id, - p.foedselsnummer AS ident, - aty.stonad_fom AS fom, - aty.stonad_tom AS tom, - aty.prosent AS prosent, - ty.endret_dato AS endretdato, - aty.fk_behandling_id AS behandlingid - FROM andel_tilkjent_ytelse aty - INNER JOIN - tilkjent_ytelse ty ON aty.tilkjent_ytelse_id = ty.id - INNER JOIN - personident p ON aty.fk_aktoer_id = p.fk_aktoer_id - WHERE aty.tilkjent_ytelse_id IN ( - SELECT MAX(ty.id) - FROM andel_tilkjent_ytelse aty - INNER JOIN - tilkjent_ytelse ty ON aty.tilkjent_ytelse_id = ty.id - INNER JOIN - personident p ON aty.fk_aktoer_id = p.fk_aktoer_id - WHERE p.foedselsnummer IN :personIdenter - AND ty.utbetalingsoppdrag IS NOT NULL - GROUP BY p.foedselsnummer - ) - AND aty.type = 'UTVIDET_BARNETRYGD' - AND aty.stonad_fom <= :tom - AND aty.stonad_tom >= :fom - """, - nativeQuery = true, - ) - @Timed - fun finnPerioderMedUtvidetBarnetrygdForPersoner( - personIdenter: List, - fom: LocalDateTime, - tom: LocalDateTime, - ): List - @Query( """ SELECT DISTINCT p.foedselsnummer AS ident diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/fagsak/FagsakRepository.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/fagsak/FagsakRepository.kt index 8ddc7705315..300fc608b36 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/fagsak/FagsakRepository.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/fagsak/FagsakRepository.kt @@ -1,8 +1,6 @@ package no.nav.familie.ba.sak.kjerne.fagsak -import io.micrometer.core.annotation.Timed import jakarta.persistence.LockModeType -import no.nav.familie.ba.sak.ekstern.skatteetaten.UtvidetSkatt import no.nav.familie.ba.sak.internal.FagsakMedFlereMigreringer import no.nav.familie.ba.sak.kjerne.personident.Aktør import org.springframework.data.domain.Page @@ -140,29 +138,6 @@ WHERE silp.stonad_tom < DATE_TRUNC('month', NOW()) @Query(value = "SELECT count(*) from Fagsak f where f.status='LØPENDE' and f.arkivert = false") fun finnAntallFagsakerLøpende(): Long - @Query( - value = """ - SELECT p.foedselsnummer AS fnr, - MAX(ty.endret_dato) AS sistevedtaksdato - FROM andel_tilkjent_ytelse aty - INNER JOIN - tilkjent_ytelse ty ON aty.tilkjent_ytelse_id = ty.id - INNER JOIN personident p ON aty.fk_aktoer_id = p.fk_aktoer_id - WHERE ty.utbetalingsoppdrag IS NOT NULL - AND aty.type = 'UTVIDET_BARNETRYGD' - AND aty.stonad_fom <= :tom - AND aty.stonad_tom >= :fom - AND p.aktiv = TRUE - GROUP BY p.foedselsnummer - """, - nativeQuery = true, - ) - @Timed - fun finnFagsakerMedUtvidetBarnetrygdInnenfor( - fom: LocalDateTime, - tom: LocalDateTime, - ): List - @Query( """ SELECT DISTINCT b.fagsak.id diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 47327bdc1ff..ff9c91e82d1 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -84,7 +84,7 @@ funksjonsbrytere: familie: tellAPIEndepunkterIBruk: enabled: true - ekskluder: /internal, /api/task, /api/forvalter, /api/skatt, /api/satsendring, /api/logg, /api/behandlinger, /api/konsistensavstemming, /api/klage, /api/feature, /api/bisys, /v3, /swagger-ui.html + ekskluder: /internal, /api/task, /api/forvalter, /api/satsendring, /api/logg, /api/behandlinger, /api/konsistensavstemming, /api/klage, /api/feature, /api/bisys, /v3, /swagger-ui.html management: endpoint: diff --git a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenServiceTest.kt b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenServiceTest.kt deleted file mode 100644 index 40b6d578dbe..00000000000 --- a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenServiceTest.kt +++ /dev/null @@ -1,152 +0,0 @@ -package no.nav.familie.ba.sak.ekstern.skatteetaten - -import io.mockk.every -import io.mockk.mockk -import no.nav.familie.ba.sak.common.defaultFagsak -import no.nav.familie.ba.sak.integrasjoner.infotrygd.InfotrygdBarnetrygdClient -import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService -import no.nav.familie.ba.sak.kjerne.beregning.domene.AndelTilkjentYtelseRepository -import no.nav.familie.ba.sak.kjerne.fagsak.FagsakRepository -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerson -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPersonerResponse -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Test -import java.time.LocalDate - -internal class SkatteetatenServiceTest { - private val infotrygdBarnetrygdClient: InfotrygdBarnetrygdClient = mockk() - private val fagsakRepository: FagsakRepository = mockk() - private val andelTilkjentYtelseRepository: AndelTilkjentYtelseRepository = mockk() - private val behandlingHentOgPersisterService: BehandlingHentOgPersisterService = mockk() - - @Test - fun `finnPersonerMedUtvidetBarnetrygd() skal returnere person fra fagsystem med nyeste vedtaksdato`() { - val fagsak = defaultFagsak() - val fagsak2 = defaultFagsak() - - val nyesteVedtaksdato = LocalDate.now() - every { fagsakRepository.finnFagsakerMedUtvidetBarnetrygdInnenfor(any(), any()) } returns - listOf( - TestUtvidetSkatt(fagsak.aktør.aktivFødselsnummer(), nyesteVedtaksdato), - TestUtvidetSkatt(fagsak2.aktør.aktivFødselsnummer(), nyesteVedtaksdato.plusDays(2)), - ) - - every { infotrygdBarnetrygdClient.hentPersonerMedUtvidetBarnetrygd(any()) } returns - SkatteetatenPersonerResponse( - listOf( - SkatteetatenPerson(fagsak.aktør.aktivFødselsnummer(), nyesteVedtaksdato.atStartOfDay().minusYears(1)), - ), - ) - - val skatteetatenService = - SkatteetatenService( - infotrygdBarnetrygdClient, - fagsakRepository, - andelTilkjentYtelseRepository, - behandlingHentOgPersisterService, - ) - - assertThat(skatteetatenService.finnPersonerMedUtvidetBarnetrygd(nyesteVedtaksdato.year.toString()).brukere).hasSize( - 2, - ) - - assertThat( - skatteetatenService - .finnPersonerMedUtvidetBarnetrygd(nyesteVedtaksdato.year.toString()) - .brukere - .find { it.ident == fagsak.aktør.aktivFødselsnummer() }!! - .sisteVedtakPaaIdent, - ).isEqualTo(nyesteVedtaksdato.atStartOfDay()) - - assertThat( - skatteetatenService - .finnPersonerMedUtvidetBarnetrygd(nyesteVedtaksdato.year.toString()) - .brukere - .find { it.ident == fagsak2.aktør.aktivFødselsnummer() }!! - .sisteVedtakPaaIdent, - ).isEqualTo(nyesteVedtaksdato.plusDays(2).atStartOfDay()) - } - - @Test - fun `finnPersonerMedUtvidetBarnetrygd() return kun resultat fra ba-sak når ingen treff i infotrygd`() { - every { infotrygdBarnetrygdClient.hentPersonerMedUtvidetBarnetrygd(any()) } returns - SkatteetatenPersonerResponse(brukere = emptyList()) - - val fagsak = defaultFagsak() - val fagsak2 = defaultFagsak() - - val vedtaksdato = LocalDate.now() - - every { fagsakRepository.finnFagsakerMedUtvidetBarnetrygdInnenfor(any(), any()) } returns - listOf( - TestUtvidetSkatt(fagsak.aktør.aktivFødselsnummer(), vedtaksdato), - TestUtvidetSkatt(fagsak2.aktør.aktivFødselsnummer(), vedtaksdato.plusDays(2)), - ) - - val skatteetatenService = - SkatteetatenService( - infotrygdBarnetrygdClient, - fagsakRepository, - andelTilkjentYtelseRepository, - behandlingHentOgPersisterService, - ) - val personerMedUtvidetBarnetrygd = - skatteetatenService.finnPersonerMedUtvidetBarnetrygd(vedtaksdato.year.toString()) - - assertThat(personerMedUtvidetBarnetrygd.brukere).hasSize(2) - - assertThat( - personerMedUtvidetBarnetrygd.brukere - .find { it.ident == fagsak.aktør.aktivFødselsnummer() }!! - .sisteVedtakPaaIdent, - ).isEqualTo(vedtaksdato.atStartOfDay()) - - assertThat( - personerMedUtvidetBarnetrygd.brukere - .find { it.ident == fagsak2.aktør.aktivFødselsnummer() }!! - .sisteVedtakPaaIdent, - ).isEqualTo(vedtaksdato.plusDays(2).atStartOfDay()) - } - - @Test - fun `finnPersonerMedUtvidetBarnetrygd() skal return kun resultat fra infotrygd når ingen treff i ba-sak`() { - every { fagsakRepository.finnFagsakerMedUtvidetBarnetrygdInnenfor(any(), any()) } returns emptyList() - - val fagsak = defaultFagsak() - val vedtaksdato = LocalDate.now() - - every { infotrygdBarnetrygdClient.hentPersonerMedUtvidetBarnetrygd(any()) } returns - SkatteetatenPersonerResponse( - brukere = - listOf( - SkatteetatenPerson( - fagsak.aktør.aktivFødselsnummer(), - vedtaksdato.atStartOfDay(), - ), - ), - ) - - val skatteetatenService = - SkatteetatenService( - infotrygdBarnetrygdClient, - fagsakRepository, - andelTilkjentYtelseRepository, - behandlingHentOgPersisterService, - ) - val personerMedUtvidetBarnetrygd = - skatteetatenService.finnPersonerMedUtvidetBarnetrygd(vedtaksdato.year.toString()) - - assertThat(personerMedUtvidetBarnetrygd.brukere).hasSize(1) - - assertThat( - personerMedUtvidetBarnetrygd.brukere - .find { it.ident == fagsak.aktør.aktivFødselsnummer() }!! - .sisteVedtakPaaIdent, - ).isEqualTo(vedtaksdato.atStartOfDay()) - } - - class TestUtvidetSkatt( - override val fnr: String, - override val sisteVedtaksdato: LocalDate, - ) : UtvidetSkatt -} diff --git a/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenServiceIntegrationTest.kt b/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenServiceIntegrationTest.kt deleted file mode 100644 index 7a933a489ce..00000000000 --- a/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/ekstern/skatteetaten/SkatteetatenServiceIntegrationTest.kt +++ /dev/null @@ -1,854 +0,0 @@ -package no.nav.familie.ba.sak.ekstern.skatteetaten - -import io.mockk.every -import io.mockk.mockk -import no.nav.familie.ba.sak.common.nesteBehandlingId -import no.nav.familie.ba.sak.common.nesteVedtakId -import no.nav.familie.ba.sak.config.AbstractSpringIntegrationTest -import no.nav.familie.ba.sak.config.DatabaseCleanupService -import no.nav.familie.ba.sak.config.tilAktør -import no.nav.familie.ba.sak.integrasjoner.infotrygd.InfotrygdBarnetrygdClient -import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService -import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandling -import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingKategori -import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingStatus -import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingType -import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingUnderkategori -import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingÅrsak -import no.nav.familie.ba.sak.kjerne.beregning.domene.AndelTilkjentYtelse -import no.nav.familie.ba.sak.kjerne.beregning.domene.AndelTilkjentYtelseRepository -import no.nav.familie.ba.sak.kjerne.beregning.domene.TilkjentYtelse -import no.nav.familie.ba.sak.kjerne.beregning.domene.TilkjentYtelseRepository -import no.nav.familie.ba.sak.kjerne.beregning.domene.YtelseType -import no.nav.familie.ba.sak.kjerne.fagsak.Fagsak -import no.nav.familie.ba.sak.kjerne.fagsak.FagsakRepository -import no.nav.familie.ba.sak.kjerne.personident.Aktør -import no.nav.familie.ba.sak.kjerne.personident.Personident -import no.nav.familie.ba.sak.kjerne.personident.PersonidentRepository -import no.nav.familie.ba.sak.kjerne.personident.PersonidentService -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPeriode -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPerioder -import no.nav.familie.eksterne.kontrakter.skatteetaten.SkatteetatenPersonerResponse -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.BeforeAll -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.YearMonth -import java.time.format.DateTimeFormatter - -class SkatteetatenServiceIntegrationTest : AbstractSpringIntegrationTest() { - @Autowired - lateinit var databaseCleanupService: DatabaseCleanupService - - @Autowired - lateinit var fagsakRepository: FagsakRepository - - @Autowired - lateinit var personidentService: PersonidentService - - @Autowired - lateinit var personidentRepository: PersonidentRepository - - @Autowired - lateinit var andelTilkjentYtelseRepository: AndelTilkjentYtelseRepository - - @Autowired - lateinit var tilkjentYtelseRepository: TilkjentYtelseRepository - - @Autowired - lateinit var behandlingHentOgPersisterService: BehandlingHentOgPersisterService - - val infotrygdBarnetrygdClientMock = mockk() - - lateinit var skatteetatenService: SkatteetatenService - - @BeforeEach - fun cleanUp() { - databaseCleanupService.truncate() - } - - @BeforeAll - fun init() { - skatteetatenService = - SkatteetatenService( - infotrygdBarnetrygdClientMock, - fagsakRepository, - andelTilkjentYtelseRepository, - behandlingHentOgPersisterService, - ) - } - - data class PerioderTestData( - val fnr: String, - val aktør: Aktør, - val endretDato: LocalDateTime, - val perioder: List>, - ) - - @Test - fun `finnPerioderMedUtvidetBarnetrygd() skal return riktig data`() { - val duplicatedFnr = "00000000001" - val excludedFnr = "10000000004" - val duplicatedAktørId = tilAktør(duplicatedFnr) - val excludedAktørId = tilAktør(excludedFnr) - - // Result from ba-sak - val testDataBaSak = - arrayOf( - // Excluded because of the vedtak is older - PerioderTestData( - fnr = duplicatedFnr, - aktør = duplicatedAktørId, - endretDato = LocalDateTime.of(2020, 11, 5, 12, 0), - perioder = - listOf( - Triple( - LocalDateTime.of(2020, 9, 1, 12, 0), - LocalDateTime.of(2020, 10, 8, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - // Included - PerioderTestData( - fnr = duplicatedFnr, - aktør = duplicatedAktørId, - endretDato = LocalDateTime.of(2020, 11, 6, 12, 0), - perioder = - listOf( - Triple( - LocalDateTime.of(2019, 9, 1, 12, 0), - LocalDateTime.of(2020, 7, 31, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - Triple( - LocalDateTime.of(2020, 8, 1, 12, 0), - LocalDateTime.of(2020, 12, 8, 12, 0), - SkatteetatenPeriode.Delingsprosent._50, - ), - ), - ), - // Excluded because the stonad period is earlier than the specified year - PerioderTestData( - fnr = "00000000002", - aktør = tilAktør("00000000002"), - endretDato = LocalDateTime.of(2020, 8, 5, 12, 0), - perioder = - listOf( - Triple( - LocalDateTime.of(2019, 3, 1, 12, 0), - LocalDateTime.of(2019, 12, 31, 23, 59), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - // Excluded because the stonad period is later than the specified year - PerioderTestData( - fnr = "00000000003", - aktør = tilAktør("00000000003"), - endretDato = LocalDateTime.of(2020, 8, 5, 12, 0), - perioder = - listOf( - Triple( - LocalDateTime.of(2021, 1, 1, 1, 0), - LocalDateTime.of(2022, 12, 31, 23, 59), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - // Excluded because the person ident is not in the provided list - PerioderTestData( - fnr = excludedFnr, - aktør = excludedAktørId, - endretDato = LocalDateTime.of(2020, 8, 5, 12, 0), - perioder = - listOf( - Triple( - LocalDateTime.of(2020, 1, 1, 1, 0), - LocalDateTime.of(2022, 12, 31, 23, 59), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - ) - - // result from Infotrygd - val testDataInfotrygd = - arrayOf( - // Excluded because the person ident can be found in ba-sak - PerioderTestData( - fnr = duplicatedFnr, - aktør = duplicatedAktørId, - endretDato = LocalDateTime.of(2020, 9, 5, 12, 0), - perioder = - listOf( - Triple( - LocalDateTime.of(2020, 8, 1, 12, 0), - LocalDateTime.of(2020, 9, 8, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - // Included - PerioderTestData( - fnr = "00000000010", - aktør = tilAktør("00000000010"), - endretDato = LocalDateTime.of(2020, 8, 5, 12, 0), - perioder = - listOf( - Triple( - LocalDateTime.of(2020, 3, 1, 12, 0), - LocalDateTime.of(2020, 4, 8, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - ) - - testDataBaSak.forEach { - lagerTilkjentYtelse(it) - } - - val result = - testDataInfotrygd.flatMap { - listOf( - SkatteetatenPerioder( - it.fnr, - it.endretDato, - it.perioder.map { p -> - SkatteetatenPeriode( - fraMaaned = p.first.tilMaaned(), - tomMaaned = p.second?.tilMaaned(), - delingsprosent = p.third, - ) - }, - ), - ) - } - - every { - infotrygdBarnetrygdClientMock.hentPerioderMedUtvidetBarnetrygdForPersoner( - eq(listOf("00000000001", "00000000002", "00000000003", "00000000010")), - any(), - ) - } returns result - - val samletResultat = - skatteetatenService.finnPerioderMedUtvidetBarnetrygd( - testDataBaSak - .filter { it.fnr != excludedFnr } - .map { it.fnr } + - testDataInfotrygd.map { it.fnr }, - "2020", - ) - - assertThat(samletResultat.brukere).hasSize(2) - assertThat(samletResultat.brukere.find { it.ident == duplicatedFnr }!!.perioder).hasSize(2) - assertThat( - samletResultat.brukere - .find { it.ident == duplicatedFnr }!! - .perioder - .find { - it.fraMaaned == "2020-08" - }!! - .delingsprosent, - ).isEqualTo( - SkatteetatenPeriode.Delingsprosent._50, - ) - assertThat( - samletResultat.brukere - .find { it.ident == duplicatedFnr }!! - .perioder - .find { - it.tomMaaned == "2020-09" - }!! - .delingsprosent, - ).isEqualTo( - SkatteetatenPeriode.Delingsprosent._0, - ) - assertThat(samletResultat.brukere.find { it.ident == testDataInfotrygd[1].fnr }!!.perioder).hasSize(1) - } - - @Test - fun `finnPerioderMedUtvidetBarnetrygd() skal slå sammen data fra infotrygd og ba-sak når overlappende periode`() { - val fnr = "00000000001" - val aktør = tilAktør(fnr) - - // Result from ba-sak - val testDataBaSak = - arrayOf( - // Included - PerioderTestData( - fnr = fnr, - aktør = aktør, - endretDato = LocalDate.of(2022, 2, 6).atStartOfDay(), - perioder = - listOf( - Triple( - LocalDateTime.of(2022, 3, 1, 12, 0), - LocalDateTime.of(2027, 7, 31, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - ) - - // result from Infotrygd - val testDataInfotrygd = - arrayOf( - // Excluded because the person ident can be found in ba-sak - PerioderTestData( - fnr = fnr, - aktør = aktør, - endretDato = LocalDate.of(2020, 9, 5).atStartOfDay(), - perioder = - listOf( - Triple( - LocalDateTime.of(2019, 9, 1, 12, 0), - LocalDateTime.of(2022, 2, 8, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - ) - - testDataBaSak.forEach { - lagerTilkjentYtelse(it) - } - - every { - infotrygdBarnetrygdClientMock.hentPerioderMedUtvidetBarnetrygdForPersoner( - eq(listOf("00000000001")), - any(), - ) - } returns - testDataInfotrygd.flatMap { - listOf( - SkatteetatenPerioder( - it.fnr, - it.endretDato, - it.perioder.map { p -> - SkatteetatenPeriode( - fraMaaned = p.first.tilMaaned(), - tomMaaned = p.second?.tilMaaned(), - delingsprosent = p.third, - ) - }, - ), - ) - } - - val resultat = skatteetatenService.finnPerioderMedUtvidetBarnetrygd(listOf((fnr)), "2022") - - assertThat(resultat.brukere).hasSize(1) - assertThat(resultat.brukere.first().perioder).hasSize(1) - assertThat( - resultat.brukere - .first() - .perioder - .first() - .fraMaaned, - ).isEqualTo("2019-09") - assertThat( - resultat.brukere - .first() - .perioder - .first() - .tomMaaned, - ).isEqualTo("2027-07") - assertThat( - resultat.brukere - .first() - .perioder - .first() - .delingsprosent, - ).isEqualTo(SkatteetatenPeriode.Delingsprosent._0) - assertThat(resultat.brukere.first().ident).isEqualTo(fnr) - assertThat(resultat.brukere.first().sisteVedtakPaaIdent).isEqualTo(LocalDate.of(2022, 2, 6).atStartOfDay()) - } - - @Test - fun `finnPerioderMedUtvidetBarnetrygd() skal slå sammen data fra infotrygd og ba-sak når infotrygdperioden slutter med null fordi den ikke er ferdig opphørt`() { - val fnr = "00000000001" - val aktør = tilAktør(fnr) - - // Result from ba-sak - val testDataBaSak = - arrayOf( - // Included - PerioderTestData( - fnr = fnr, - aktør = aktør, - endretDato = LocalDate.of(2022, 2, 6).atStartOfDay(), - perioder = - listOf( - Triple( - LocalDateTime.of(2022, 3, 1, 12, 0), - LocalDateTime.of(2027, 7, 31, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - ) - - // result from Infotrygd - val testDataInfotrygd = - arrayOf( - // Excluded because the person ident can be found in ba-sak - PerioderTestData( - fnr = fnr, - aktør = aktør, - endretDato = LocalDate.of(2020, 9, 5).atStartOfDay(), - perioder = - listOf( - Triple( - LocalDateTime.of(2019, 9, 1, 12, 0), - null, - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - ) - - testDataBaSak.forEach { - lagerTilkjentYtelse(it) - } - - every { - infotrygdBarnetrygdClientMock.hentPerioderMedUtvidetBarnetrygdForPersoner( - eq(listOf("00000000001")), - any(), - ) - } returns - testDataInfotrygd.flatMap { - listOf( - SkatteetatenPerioder( - it.fnr, - it.endretDato, - it.perioder.map { p -> - SkatteetatenPeriode( - fraMaaned = p.first.tilMaaned(), - tomMaaned = p.second?.tilMaaned(), - delingsprosent = p.third, - ) - }, - ), - ) - } - - val resultat = skatteetatenService.finnPerioderMedUtvidetBarnetrygd(listOf((fnr)), "2022") - - assertThat(resultat.brukere).hasSize(1) - assertThat(resultat.brukere.first().perioder).hasSize(1) - assertThat( - resultat.brukere - .first() - .perioder - .first() - .fraMaaned, - ).isEqualTo("2019-09") - assertThat( - resultat.brukere - .first() - .perioder - .first() - .tomMaaned, - ).isEqualTo("2027-07") - assertThat( - resultat.brukere - .first() - .perioder - .first() - .delingsprosent, - ).isEqualTo(SkatteetatenPeriode.Delingsprosent._0) - assertThat(resultat.brukere.first().ident).isEqualTo(fnr) - assertThat(resultat.brukere.first().sisteVedtakPaaIdent).isEqualTo(LocalDate.of(2022, 2, 6).atStartOfDay()) - } - - @Test - fun `finnPerioderMedUtvidetBarnetrygd() skal slå sammen data fra infotrygd og ba-sak når overlappende periode mellom ba-sak og infotrygd, noe som typisk skjer ved endret migreringsdato`() { - val fnr = "00000000001" - val aktør = tilAktør(fnr) - - // Result from ba-sak - val testDataBaSak = - arrayOf( - // Included - PerioderTestData( - fnr = fnr, - aktør = aktør, - endretDato = LocalDate.of(2022, 2, 6).atStartOfDay(), - perioder = - listOf( - Triple( - LocalDateTime.of(2021, 9, 1, 12, 0), - LocalDateTime.of(2027, 7, 31, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - ) - - // result from Infotrygd - val testDataInfotrygd = - arrayOf( - // Excluded because the person ident can be found in ba-sak - PerioderTestData( - fnr = fnr, - aktør = aktør, - endretDato = LocalDate.of(2020, 9, 5).atStartOfDay(), - perioder = - listOf( - Triple( - LocalDateTime.of(2019, 9, 1, 12, 0), - LocalDateTime.of(2022, 3, 1, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - ) - - testDataBaSak.forEach { - lagerTilkjentYtelse(it) - } - - every { - infotrygdBarnetrygdClientMock.hentPerioderMedUtvidetBarnetrygdForPersoner( - eq(listOf("00000000001")), - any(), - ) - } returns - testDataInfotrygd.flatMap { - listOf( - SkatteetatenPerioder( - it.fnr, - it.endretDato, - it.perioder.map { p -> - SkatteetatenPeriode( - fraMaaned = p.first.tilMaaned(), - tomMaaned = p.second?.tilMaaned(), - delingsprosent = p.third, - ) - }, - ), - ) - } - - val resultat = skatteetatenService.finnPerioderMedUtvidetBarnetrygd(listOf((fnr)), "2022") - - assertThat(resultat.brukere).hasSize(1) - assertThat(resultat.brukere.first().perioder).hasSize(1) - assertThat( - resultat.brukere - .first() - .perioder - .first() - .fraMaaned, - ).isEqualTo("2019-09") - assertThat( - resultat.brukere - .first() - .perioder - .first() - .tomMaaned, - ).isEqualTo("2027-07") - assertThat( - resultat.brukere - .first() - .perioder - .first() - .delingsprosent, - ).isEqualTo(SkatteetatenPeriode.Delingsprosent._0) - assertThat(resultat.brukere.first().ident).isEqualTo(fnr) - assertThat(resultat.brukere.first().sisteVedtakPaaIdent).isEqualTo(LocalDate.of(2022, 2, 6).atStartOfDay()) - } - - @Test - fun `finnPerioderMedUtvidetBarnetrygd() skal slå sammen perioder basert på prosent`() { - val fnr = "00000000001" - val aktørId = tilAktør("00000000001") - val excludedFnr = "10000000004" - - // Result from ba-sak - val testDataBaSak = - arrayOf( - PerioderTestData( - fnr = fnr, - aktør = aktørId, - endretDato = LocalDateTime.of(2020, 11, 6, 12, 0), - perioder = - listOf( - Triple( - LocalDateTime.of(2019, 9, 1, 12, 0), - LocalDateTime.of(2020, 2, 11, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - Triple( - LocalDateTime.of(2020, 3, 1, 12, 0), - LocalDateTime.of(2020, 4, 8, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - Triple( - LocalDateTime.of(2020, 5, 1, 12, 0), - LocalDateTime.of(2020, 6, 8, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - Triple( - LocalDateTime.of(2020, 7, 1, 12, 0), - LocalDateTime.of(2020, 8, 8, 12, 0), - SkatteetatenPeriode.Delingsprosent._50, - ), - Triple( - LocalDateTime.of(2020, 9, 1, 12, 0), - LocalDateTime.of(2020, 11, 8, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ), - ) - - testDataBaSak.forEach { - every { - infotrygdBarnetrygdClientMock.hentPerioderMedUtvidetBarnetrygdForPersoner( - eq(listOf(it.fnr)), - any(), - ) - } returns emptyList() - - lagerTilkjentYtelse(it) - } - - val samletResultat = - skatteetatenService.finnPerioderMedUtvidetBarnetrygd( - testDataBaSak - .filter { it.fnr != excludedFnr } - .map { it.fnr }, - "2020", - ) - - assertThat(samletResultat.brukere).hasSize(1) - assertThat(samletResultat.brukere.find { it.ident == fnr }!!.perioder).hasSize(3) - val sortertePerioder = - samletResultat.brukere - .find { it.ident == fnr }!! - .perioder - .sortedBy { it.fraMaaned } - assertThat(sortertePerioder[0].delingsprosent).isEqualTo( - SkatteetatenPeriode.Delingsprosent._0, - ) - assertThat(sortertePerioder[0].fraMaaned).isEqualTo( - "2019-09", - ) - assertThat(sortertePerioder[0].tomMaaned).isEqualTo( - "2020-06", - ) - - assertThat(sortertePerioder[1].delingsprosent).isEqualTo( - SkatteetatenPeriode.Delingsprosent._50, - ) - assertThat(sortertePerioder[1].fraMaaned).isEqualTo("2020-07") - assertThat(sortertePerioder[1].tomMaaned).isEqualTo( - "2020-08", - ) - - assertThat(sortertePerioder[2].delingsprosent).isEqualTo( - SkatteetatenPeriode.Delingsprosent._0, - ) - assertThat(sortertePerioder[2].fraMaaned).isEqualTo( - "2020-09", - ) - assertThat(sortertePerioder[2].tomMaaned).isEqualTo( - "2020-11", - ) - } - - @Test - fun `finnPerioderMedUtvidetBarnetrygd() skal IKKE finne perioder for år 2021 etter en revurdering med ny stønadTom 2020`() { - val fnr = "00000000001" - - // Result from ba-sak - val testDataBaSak = - PerioderTestData( - fnr = fnr, - aktør = tilAktør(fnr), - endretDato = LocalDateTime.of(2020, 11, 6, 12, 0), - perioder = - listOf( - Triple( - LocalDateTime.of(2019, 9, 1, 12, 0), - LocalDateTime.of(2029, 7, 31, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ) - - lagerTilkjentYtelse(testDataBaSak) - - every { - infotrygdBarnetrygdClientMock.hentPerioderMedUtvidetBarnetrygdForPersoner( - eq(listOf(fnr)), - any(), - ) - } returns emptyList() - - var resultat = - skatteetatenService.finnPerioderMedUtvidetBarnetrygd( - listOf(testDataBaSak.fnr), - "2021", - ) - - assertThat(resultat.brukere).hasSize(1) - - lagRevurderingMedNyStonadTom(testDataBaSak, YearMonth.of(2020, 12)) - - resultat = - skatteetatenService.finnPerioderMedUtvidetBarnetrygd( - listOf(testDataBaSak.fnr), - "2021", - ) - - assertThat(resultat.brukere).hasSize(0) - } - - @Test - fun `finnPersonerMedUtvidetBarnetrygd() skal IKKE ta med historisk ident som en ekstra person`() { - val fnr = "00000000002" - val historiskIdent = "00000000001" - - // Result from ba-sak - val testDataBaSak = - PerioderTestData( - fnr = fnr, - aktør = tilAktør(fnr).also { it.personidenter.add(Personident(historiskIdent, aktiv = false, aktør = it)) }, - endretDato = LocalDateTime.of(2020, 11, 6, 12, 0), - perioder = - listOf( - Triple( - LocalDateTime.of(2019, 9, 1, 12, 0), - LocalDateTime.of(2029, 7, 31, 12, 0), - SkatteetatenPeriode.Delingsprosent._0, - ), - ), - ) - - lagerTilkjentYtelse(testDataBaSak) - - every { - infotrygdBarnetrygdClientMock.hentPersonerMedUtvidetBarnetrygd( - any(), - ) - } returns SkatteetatenPersonerResponse() - - val resultat = - skatteetatenService.finnPersonerMedUtvidetBarnetrygd( - "2021", - ) - - assertThat(resultat.brukere).hasSize(1) - assertThat(resultat.brukere.first().ident == fnr) - } - - fun lagerTilkjentYtelse(perioderTestData: PerioderTestData) { - val fødselsnummer = perioderTestData.aktør.aktivFødselsnummer() - val aktør = perioderTestData.aktør - personidentService.hentOgLagreAktør(fødselsnummer, true).also { - personidentRepository.saveAll(aktør.personidenter.filter { !it.aktiv }) - } - - val fagsak = fagsakRepository.finnFagsakForAktør(aktør) ?: fagsakRepository.saveAndFlush(Fagsak(aktør = aktør)) - - val behandling = - Behandling( - fagsak = fagsak, - type = BehandlingType.FØRSTEGANGSBEHANDLING, - opprettetÅrsak = BehandlingÅrsak.MIGRERING, - kategori = BehandlingKategori.NASJONAL, - underkategori = BehandlingUnderkategori.UTVIDET, - status = BehandlingStatus.AVSLUTTET, - aktiv = false, - ) - behandlingHentOgPersisterService.lagreOgFlush(behandling) - - val ty = - TilkjentYtelse( - behandling = behandling, - opprettetDato = perioderTestData.endretDato.toLocalDate(), - endretDato = perioderTestData.endretDato.toLocalDate(), - utbetalingsoppdrag = "utbetalt", - ).also { - it.andelerTilkjentYtelse.addAll( - perioderTestData.perioder - .map { p -> - AndelTilkjentYtelse( - behandlingId = it.behandling.id, - tilkjentYtelse = it, - aktør = perioderTestData.aktør, - kalkulertUtbetalingsbeløp = 1000, - nasjonaltPeriodebeløp = 1000, - stønadFom = YearMonth.of(p.first.year, p.first.month), - stønadTom = YearMonth.of(p.second!!.year, p.second!!.month), - type = YtelseType.UTVIDET_BARNETRYGD, - sats = 1, - prosent = p.third.tilBigDecimal(), - ) - }.toMutableSet(), - ) - } - tilkjentYtelseRepository.saveAndFlush(ty) - } - - fun lagRevurderingMedNyStonadTom( - perioderTestData: PerioderTestData, - stønadTom: YearMonth, - ) { - val fødselsnummer = perioderTestData.aktør.aktivFødselsnummer() - val aktør = personidentService.hentOgLagreAktør(fødselsnummer, false) - - val fagsak = fagsakRepository.finnFagsakForAktør(aktør)!! - - val behandling = - behandlingHentOgPersisterService.lagreOgFlush( - Behandling( - id = nesteBehandlingId(), - fagsak = fagsak, - type = BehandlingType.REVURDERING, - opprettetÅrsak = BehandlingÅrsak.NYE_OPPLYSNINGER, - kategori = BehandlingKategori.NASJONAL, - underkategori = BehandlingUnderkategori.UTVIDET, - ), - ) - - val ty = - TilkjentYtelse( - id = nesteVedtakId(), - behandling = behandling, - opprettetDato = perioderTestData.endretDato.toLocalDate(), - endretDato = perioderTestData.endretDato.toLocalDate(), - utbetalingsoppdrag = "utbetalt", - ).also { - it.andelerTilkjentYtelse.addAll( - perioderTestData.perioder - .map { p -> - AndelTilkjentYtelse( - behandlingId = it.behandling.id, - tilkjentYtelse = it, - aktør = perioderTestData.aktør, - kalkulertUtbetalingsbeløp = 1000, - nasjonaltPeriodebeløp = 1000, - stønadFom = YearMonth.of(p.first.year, p.first.month), - stønadTom = stønadTom, - type = YtelseType.UTVIDET_BARNETRYGD, - sats = 1, - prosent = p.third.tilBigDecimal(), - ) - }.toMutableSet(), - ) - } - tilkjentYtelseRepository.saveAndFlush(ty) - } -} - -fun LocalDateTime.tilMaaned(): String = this.format(DateTimeFormatter.ofPattern("yyyy-MM"))