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"))