Skip to content

Commit

Permalink
NAV-22995: Splitter opp eksisterende logikk og skriver tester (#4862)
Browse files Browse the repository at this point in the history
### 💰 Hva skal gjøres, og hvorfor?
Favro:
https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-22995

Splitter opp eksisterende logikk for å gjøre det mer oversiktlig og
enklere å teste

### 🔎️ Er det noe spesielt du ønsker tilbakemelding om?
Nei

### ✅ Checklist
_Har du husket alle punktene i listen?_
- [ ] Jeg har testet mine endringer i henhold til akseptansekriteriene
🕵️
- [ ] Jeg har config- eller sql-endringer. I så fall, husk manuell
deploy til miljø for å verifisere endringene.
- [x] Jeg har skrevet tester. Hvis du ikke har skrevet tester, beskriv
hvorfor under 👇

### 💬 Ønsker du en muntlig gjennomgang?
- [ ] Ja
- [x] Nei
  • Loading branch information
thoalm authored Nov 4, 2024
1 parent e9ccae2 commit 21401ae
Show file tree
Hide file tree
Showing 13 changed files with 617 additions and 78 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package no.nav.familie.ba.sak.config

import no.nav.familie.felles.utbetalingsgenerator.Utbetalingsgenerator
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class UtbetalingsgeneratorConfig {
@Bean
fun utbetalingsgenerator(): Utbetalingsgenerator = Utbetalingsgenerator()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package no.nav.familie.ba.sak.integrasjoner.økonomi

import no.nav.familie.felles.utbetalingsgenerator.domain.Fagsystem

enum class FagsystemBA(
override val kode: String,
override val gyldigeSatstyper: Set<YtelsetypeBA>,
) : Fagsystem {
BARNETRYGD(
"BA",
setOf(
YtelsetypeBA.ORDINÆR_BARNETRYGD,
YtelsetypeBA.UTVIDET_BARNETRYGD,
YtelsetypeBA.SMÅBARNSTILLEGG,
),
),
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package no.nav.familie.ba.sak.integrasjoner.økonomi

import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandling
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingType
import no.nav.familie.felles.utbetalingsgenerator.domain.Utbetalingsoppdrag
import java.time.LocalDate

data class Opphør(
val erRentOpphør: Boolean,
val opphørsdato: LocalDate?,
) {
companion object Factory {
fun opprettFor(
utbetalingsoppdrag: Utbetalingsoppdrag,
behandling: Behandling,
): Opphør {
val erRentOpphør =
utbetalingsoppdrag.utbetalingsperiode.isNotEmpty() && utbetalingsoppdrag.utbetalingsperiode.all { it.opphør != null }
var opphørsdato: LocalDate? = null
if (erRentOpphør) {
opphørsdato = utbetalingsoppdrag.utbetalingsperiode.minOf { it.opphør!!.opphørDatoFom }
}
if (behandling.type == BehandlingType.REVURDERING) {
val opphørPåRevurdering = utbetalingsoppdrag.utbetalingsperiode.filter { it.opphør != null }
if (opphørPåRevurdering.isNotEmpty()) {
opphørsdato = opphørPåRevurdering.maxOfOrNull { it.opphør!!.opphørDatoFom }
}
}
return Opphør(erRentOpphør = erRentOpphør, opphørsdato = opphørsdato)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package no.nav.familie.ba.sak.integrasjoner.økonomi

import no.nav.familie.kontrakter.felles.oppdrag.Opphør
import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsoppdrag
import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsperiode

fun no.nav.familie.felles.utbetalingsgenerator.domain.Utbetalingsoppdrag.tilRestUtbetalingsoppdrag(): Utbetalingsoppdrag =
Utbetalingsoppdrag(
kodeEndring = Utbetalingsoppdrag.KodeEndring.valueOf(this.kodeEndring.name),
fagSystem = this.fagSystem,
saksnummer = this.saksnummer,
aktoer = this.aktoer,
saksbehandlerId = this.saksbehandlerId,
avstemmingTidspunkt = this.avstemmingTidspunkt,
utbetalingsperiode = this.utbetalingsperiode.map { it.tilRestUtbetalingsperiode() },
gOmregning = this.gOmregning,
)

private fun no.nav.familie.felles.utbetalingsgenerator.domain.Utbetalingsperiode.tilRestUtbetalingsperiode(): Utbetalingsperiode =
Utbetalingsperiode(
erEndringPåEksisterendePeriode = this.erEndringPåEksisterendePeriode,
opphør = this.opphør?.let { Opphør(it.opphørDatoFom) },
periodeId = this.periodeId,
forrigePeriodeId = this.forrigePeriodeId,
datoForVedtak = this.datoForVedtak,
klassifisering = this.klassifisering,
vedtakdatoFom = this.vedtakdatoFom,
vedtakdatoTom = this.vedtakdatoTom,
sats = this.sats,
satsType = Utbetalingsperiode.SatsType.valueOf(this.satsType.name),
utbetalesTil = this.utbetalesTil,
behandlingId = this.behandlingId,
utbetalingsgrad = this.utbetalingsgrad,
)
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,7 @@ import no.nav.familie.felles.utbetalingsgenerator.Utbetalingsgenerator
import no.nav.familie.felles.utbetalingsgenerator.domain.AndelDataLongId
import no.nav.familie.felles.utbetalingsgenerator.domain.Behandlingsinformasjon
import no.nav.familie.felles.utbetalingsgenerator.domain.BeregnetUtbetalingsoppdragLongId
import no.nav.familie.felles.utbetalingsgenerator.domain.Fagsystem
import no.nav.familie.felles.utbetalingsgenerator.domain.IdentOgType
import no.nav.familie.kontrakter.felles.oppdrag.Opphør
import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsoppdrag
import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsperiode
import org.springframework.stereotype.Component
import java.time.LocalDate
import java.time.YearMonth
Expand Down Expand Up @@ -94,51 +90,3 @@ class UtbetalingsoppdragGenerator {
}
}
}

enum class YtelsetypeBA(
override val klassifisering: String,
override val satsType: no.nav.familie.felles.utbetalingsgenerator.domain.Utbetalingsperiode.SatsType = no.nav.familie.felles.utbetalingsgenerator.domain.Utbetalingsperiode.SatsType.MND,
) : no.nav.familie.felles.utbetalingsgenerator.domain.Ytelsestype {
ORDINÆR_BARNETRYGD("BATR"),
UTVIDET_BARNETRYGD("BATR"),
SMÅBARNSTILLEGG("BATRSMA"),
}

enum class FagsystemBA(
override val kode: String,
override val gyldigeSatstyper: Set<YtelsetypeBA>,
) : Fagsystem {
BARNETRYGD(
"BA",
setOf(YtelsetypeBA.ORDINÆR_BARNETRYGD, YtelsetypeBA.UTVIDET_BARNETRYGD, YtelsetypeBA.SMÅBARNSTILLEGG),
),
}

fun no.nav.familie.felles.utbetalingsgenerator.domain.Utbetalingsoppdrag.tilRestUtbetalingsoppdrag(): Utbetalingsoppdrag =
Utbetalingsoppdrag(
kodeEndring = Utbetalingsoppdrag.KodeEndring.valueOf(this.kodeEndring.name),
fagSystem = this.fagSystem,
saksnummer = this.saksnummer,
aktoer = this.aktoer,
saksbehandlerId = this.saksbehandlerId,
avstemmingTidspunkt = this.avstemmingTidspunkt,
utbetalingsperiode = this.utbetalingsperiode.map { it.tilRestUtbetalingsperiode() },
gOmregning = this.gOmregning,
)

fun no.nav.familie.felles.utbetalingsgenerator.domain.Utbetalingsperiode.tilRestUtbetalingsperiode(): Utbetalingsperiode =
Utbetalingsperiode(
erEndringPåEksisterendePeriode = this.erEndringPåEksisterendePeriode,
opphør = this.opphør?.let { Opphør(it.opphørDatoFom) },
periodeId = this.periodeId,
forrigePeriodeId = this.forrigePeriodeId,
datoForVedtak = this.datoForVedtak,
klassifisering = this.klassifisering,
vedtakdatoFom = this.vedtakdatoFom,
vedtakdatoTom = this.vedtakdatoTom,
sats = this.sats,
satsType = Utbetalingsperiode.SatsType.valueOf(this.satsType.name),
utbetalesTil = this.utbetalesTil,
behandlingId = this.behandlingId,
utbetalingsgrad = this.utbetalingsgrad,
)
Original file line number Diff line number Diff line change
Expand Up @@ -126,25 +126,6 @@ class UtbetalingsoppdragGeneratorService(
}
}

private fun utledOpphør(
utbetalingsoppdrag: no.nav.familie.felles.utbetalingsgenerator.domain.Utbetalingsoppdrag,
behandling: Behandling,
): Opphør {
val erRentOpphør =
utbetalingsoppdrag.utbetalingsperiode.isNotEmpty() && utbetalingsoppdrag.utbetalingsperiode.all { it.opphør != null }
var opphørsdato: LocalDate? = null
if (erRentOpphør) {
opphørsdato = utbetalingsoppdrag.utbetalingsperiode.minOf { it.opphør!!.opphørDatoFom }
}
if (behandling.type == BehandlingType.REVURDERING) {
val opphørPåRevurdering = utbetalingsoppdrag.utbetalingsperiode.filter { it.opphør != null }
if (opphørPåRevurdering.isNotEmpty()) {
opphørsdato = opphørPåRevurdering.maxOfOrNull { it.opphør!!.opphørDatoFom }
}
}
return Opphør(erRentOpphør = erRentOpphør, opphørsdato = opphørsdato)
}

fun utledStønadTom(
andelerTilkjentYtelse: Set<AndelTilkjentYtelse>,
endretUtbetalingAndeler: List<EndretUtbetalingAndel>,
Expand All @@ -166,7 +147,7 @@ fun oppdaterTilkjentYtelseMedUtbetalingsoppdrag(
utbetalingsoppdrag: no.nav.familie.felles.utbetalingsgenerator.domain.Utbetalingsoppdrag,
endretUtbetalingAndeler: List<EndretUtbetalingAndel>,
) {
val opphør = utledOpphør(utbetalingsoppdrag, tilkjentYtelse.behandling)
val opphør = Opphør.opprettFor(utbetalingsoppdrag, tilkjentYtelse.behandling)

tilkjentYtelse.utbetalingsoppdrag = objectMapper.writeValueAsString(utbetalingsoppdrag)
tilkjentYtelse.stønadTom = utledStønadTom(tilkjentYtelse.andelerTilkjentYtelse, endretUtbetalingAndeler)
Expand Down Expand Up @@ -195,8 +176,3 @@ fun oppdaterAndelerMedPeriodeOffset(
andel.kildeBehandlingId = andelMedOffset.kildeBehandlingId
}
}

data class Opphør(
val erRentOpphør: Boolean,
val opphørsdato: LocalDate?,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package no.nav.familie.ba.sak.integrasjoner.økonomi

import no.nav.familie.felles.utbetalingsgenerator.domain.Utbetalingsperiode
import no.nav.familie.felles.utbetalingsgenerator.domain.Ytelsestype

enum class YtelsetypeBA(
override val klassifisering: String,
override val satsType: Utbetalingsperiode.SatsType = Utbetalingsperiode.SatsType.MND,
) : Ytelsestype {
ORDINÆR_BARNETRYGD("BATR"),
UTVIDET_BARNETRYGD("BATR"),
SMÅBARNSTILLEGG("BATRSMA"),
}
Original file line number Diff line number Diff line change
Expand Up @@ -1015,7 +1015,7 @@ fun lagUtbetalingsperiode(
periodeFom: LocalDate = LocalDate.now().withDayOfMonth(1),
periodeTom: LocalDate = LocalDate.now().let { it.withDayOfMonth(it.lengthOfMonth()) },
vedtaksperiodetype: Vedtaksperiodetype = Vedtaksperiodetype.UTBETALING,
utbetalingsperiodeDetaljer: List<UtbetalingsperiodeDetalj>,
utbetalingsperiodeDetaljer: List<UtbetalingsperiodeDetalj> = emptyList(),
ytelseTyper: List<YtelseType> = listOf(YtelseType.ORDINÆR_BARNETRYGD),
antallBarn: Int = 1,
utbetaltPerMnd: Int = sats(YtelseType.ORDINÆR_BARNETRYGD),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package no.nav.familie.ba.sak.integrasjoner.økonomi

import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test

class FagsystemBATest {
@Test
fun `BARNETRYGD skal ha riktig kode`() {
// Act
val kode = FagsystemBA.BARNETRYGD.kode

// Assert
assertThat(kode).isEqualTo("BA")
}

@Test
fun `BARNETRYGD skal ha riktige gyldige sats typer`() {
// Act
val gyldigeSatstyper = FagsystemBA.BARNETRYGD.gyldigeSatstyper

// Assert
assertThat(gyldigeSatstyper).containsOnly(
YtelsetypeBA.ORDINÆR_BARNETRYGD,
YtelsetypeBA.UTVIDET_BARNETRYGD,
YtelsetypeBA.SMÅBARNSTILLEGG,
)
}
}
Loading

0 comments on commit 21401ae

Please sign in to comment.