Skip to content

Commit

Permalink
Feature forespørsel ang. sending av relaterte saker i infotrygd også (#…
Browse files Browse the repository at this point in the history
…413)

Sender med barnetrygdperioder fra relaterte saker på ca. samme måte som vi gjør i ba-sak, etter feature request fra pensjon
  • Loading branch information
tnarland authored Nov 8, 2023
1 parent e745db5 commit 33dd5c2
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,16 @@ interface StønadRepository : JpaRepository<Stønad, Long> {
INNER JOIN Person p
ON (s.personKey = p.personKey and
s.region = p.region)
WHERE p.fnr IN :fnr
WHERE p.fnr = :fnr
AND s.antallBarn > 0
AND EXISTS (SELECT u FROM Utbetaling u
WHERE u.personKey = s.personKey
AND u.startUtbetalingMåned = s.iverksattFom
AND u.virksomFom = s.virkningFom
AND u.utbetalingstype = 'M'
AND (u.utbetalingTom = '000000' or CAST(substring(u.utbetalingTom, 3, 4) as integer) >= :år))
""")
fun findTrunkertStønadByFnr(fnr: List<FoedselsNr>): List<TrunkertStønad>
fun findTrunkertStønadMedUtbetalingÅrByFnr(fnr: FoedselsNr, år: Int): List<TrunkertStønad>

@Query("SELECT new no.nav.familie.ba.infotrygd.model.dl1.TrunkertStønad(s.id, s.personKey, s.fnr, s.sakNr, s.saksblokk, s.status, s.region, s.virkningFom, s.opphørtFom, s.iverksattFom, s.antallBarn, '') FROM Stønad s " +
"WHERE (s.opphørtFom='000000' or CAST(substring(s.opphørtFom, 3, 4) as integer) >= :år) " +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,7 @@ class BarnetrygdService(
opphørtIver = stønad.opphørtIver,
opphørtFom = stønad.opphørtFom,
opphørsgrunn = stønad.opphørsgrunn,
barn = barnRepository.findBarnByPersonkey(stønad.personKey).filter { it.stønadstype.isNullOrBlank() || it.stønadstype?.trim() !in listOf("N", "FJ", "IN") }
.map { it.toBarnDto() },
barn = hentBarnMedGyldigStønadstypeTilknyttetPerson(stønad.personKey).map { it.toBarnDto() },
delytelse = vedtakRepository.hentVedtak(stønad.fnr.asString, stønad.sakNr.trim().toLong(), stønad.saksblokk)
.sortedBy { it.vedtakId }
.lastOrNull()?.delytelse?.sortedBy { it.id.linjeId }?.map { it.toDelytelseDto() } ?: emptyList(),
Expand All @@ -113,6 +112,14 @@ class BarnetrygdService(
)
}

private fun hentBarnMedGyldigStønadstypeTilknyttetPerson(personKey: Long) =
barnRepository.findBarnByPersonkey(personKey).filter { it.harGyldigStønadstype }

private val Barn.harGyldigStønadstype
get() =
stønadstype.isNullOrBlank() || stønadstype?.trim() !in listOf("N", "FJ", "IN")


private fun hentMottakerNummer(stønad: Stønad): Long? {
val mottakerNummer = personRepository.findMottakerNummerByPersonkey(stønad.personKey)
return if (mottakerNummer == 0L) null else mottakerNummer
Expand Down Expand Up @@ -162,19 +169,37 @@ class BarnetrygdService(
brukerFnr: FoedselsNr,
fraDato: YearMonth
): List<BarnetrygdTilPensjon> {
val barnetrygdStønader = stonadRepository.findTrunkertStønadByFnr(listOf(brukerFnr))
val barnetrygdStønader = stonadRepository.findTrunkertStønadMedUtbetalingÅrByFnr(brukerFnr, fraDato.year)
.filter { erRelevantStønadForPensjon(it) }
.filter { filtrerStønaderSomErFeilregistrert(it) }

val perioder = konverterTilDtoForPensjon(barnetrygdStønader, fraDato.year).filter {
it.stønadTom.isSameOrAfter(fraDato)
}
val perioder = konverterTilDtoForPensjon(barnetrygdStønader, fraDato)

if (perioder.isEmpty()) {
return emptyList()
}

return listOf(
// Sjekk om det finnes relaterte saker, dvs om barna finnes i andre stønader
val barna = barnetrygdStønader.flatMap {
hentBarnMedGyldigStønadstypeTilknyttetPerson(it.personKey)
}

val barnetrygdFraRelaterteSaker = barnRepository.findBarnByFnrList(barna.map { it.barnFnr })
.filter { it.fnr != brukerFnr && it.harGyldigStønadstype }
.map { it.fnr }.distinct()
.mapNotNull { relatertBrukerFnr ->
BarnetrygdTilPensjon(
fnr = relatertBrukerFnr.asString,
barnetrygdPerioder = stonadRepository.findTrunkertStønadMedUtbetalingÅrByFnr(relatertBrukerFnr, fraDato.year)
.filter { erRelevantStønadForPensjon(it) }
.filter { filtrerStønaderSomErFeilregistrert(it) }
.let { relaterteBarnetrygdStønader ->
konverterTilDtoForPensjon(relaterteBarnetrygdStønader, fraDato)
}
).takeIf { it.barnetrygdPerioder.isNotEmpty() }
}

return barnetrygdFraRelaterteSaker.plus(
BarnetrygdTilPensjon(
fnr = brukerFnr.asString,
barnetrygdPerioder = perioder
Expand Down Expand Up @@ -441,7 +466,7 @@ class BarnetrygdService(

private fun konverterTilDtoForPensjon(
barnetrygdStønader: List<TrunkertStønad>,
år: Int
fraDato: YearMonth
): List<BarnetrygdPeriode> {
if (barnetrygdStønader.isEmpty()) {
return emptyList()
Expand All @@ -464,7 +489,7 @@ class BarnetrygdService(
stønadFom = utbetaling.fom()!!,
stønadTom = utbetaling.tom() ?: YearMonth.from(LocalDate.MAX),
personIdent = utbetaling.fnr.asString,
delingsprosentYtelse = ytelseProsent(it, undervalg, år),
delingsprosentYtelse = ytelseProsent(it, undervalg, fraDato.year),
sakstypeEkstern = when (undervalg) {
"EU", "ME" -> EØS
else -> NASJONAL
Expand Down Expand Up @@ -493,7 +518,7 @@ class BarnetrygdService(
.flatMap(::slåSammenSammenhengende)
)

return perioder
return perioder.filter { it.stønadTom.isSameOrAfter(fraDato) }
}

private fun delingsprosent(stønad: TrunkertStønad, år: Int): SkatteetatenPeriode.Delingsprosent {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ internal class BarnetrygdServiceTest {
@Test
fun `finn barnetrygd for pensjon - finner løpende småbarnstillegg, og løpende utvidet fra og med dato gitt av foregående periode`() {
val person = settOppLøpendeUtvidetBarnetrygd(MANUELT_BEREGNET_STATUS)
leggTilUtgåttUtvidetBarnetrygdSak(person) //2019-05 - 2020-04
leggTilUtgåttUtvidetBarnetrygdSak(person, opphørtFom = YearMonth.now().format(DateTimeFormatter.ofPattern("MMyyyy")))


val response = barnetrygdService.finnBarnetrygdForPensjon(person.fnr, YearMonth.now()).single()
Expand Down Expand Up @@ -788,12 +788,13 @@ internal class BarnetrygdServiceTest {
beløp: Double? = null,
stønadStatus: String = "0",
iverksattFom: String = (999999 - 201905).toString(),
virkningFom: String = iverksattFom) {
virkningFom: String = iverksattFom,
opphørtFom: String = "042020") {
val opphørtStønad = stonadRepository.save(
TestData.stønad(
person,
status = stønadStatus,
opphørtFom = "042020",
opphørtFom = opphørtFom,
iverksattFom = iverksattFom,
virkningFom = virkningFom
)
Expand Down

0 comments on commit 33dd5c2

Please sign in to comment.