-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Legg til ny løype for å lage eøs-begrunnelser som skal sendes til fam…
…ilie-brev (#3981) ### 💰 Hva skal gjøres, og hvorfor? [Favro](https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-15585) Legger til løype for å lage eøs-begrunnelser som skal sendes til familie-brev med det nye oppsettet ### ✅ 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
- Loading branch information
1 parent
197bde1
commit 165323b
Showing
14 changed files
with
343 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
124 changes: 124 additions & 0 deletions
124
...no/nav/familie/ba/sak/kjerne/brev/brevBegrunnelseProdusent/BrevEøsBegrunnelseProdusent.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
import no.nav.familie.ba.sak.common.Feil | ||
import no.nav.familie.ba.sak.common.Utils | ||
import no.nav.familie.ba.sak.common.Utils.storForbokstav | ||
import no.nav.familie.ba.sak.common.tilKortString | ||
import no.nav.familie.ba.sak.ekstern.restDomene.BarnMedOpplysninger | ||
import no.nav.familie.ba.sak.kjerne.brev.brevBegrunnelseProdusent.GrunnlagForBegrunnelse | ||
import no.nav.familie.ba.sak.kjerne.brev.brevBegrunnelseProdusent.hentSanityBegrunnelse | ||
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityPeriodeResultat | ||
import no.nav.familie.ba.sak.kjerne.brev.tilSammenslåttKortString | ||
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Person | ||
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonType | ||
import no.nav.familie.ba.sak.kjerne.personident.Aktør | ||
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.EØSStandardbegrunnelse | ||
import no.nav.familie.ba.sak.kjerne.vedtak.domene.EØSBegrunnelseData | ||
import no.nav.familie.ba.sak.kjerne.vedtak.domene.EØSBegrunnelseDataMedKompetanse | ||
import no.nav.familie.ba.sak.kjerne.vedtak.domene.EØSBegrunnelseDataUtenKompetanse | ||
import no.nav.familie.ba.sak.kjerne.vedtak.domene.VedtaksperiodeMedBegrunnelser | ||
import no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.vedtakBegrunnelseProdusent.finnBegrunnelseGrunnlagPerPerson | ||
import no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.vedtakBegrunnelseProdusent.hentGyldigeBegrunnelserPerPerson | ||
import java.time.LocalDate | ||
|
||
fun EØSStandardbegrunnelse.tilBrevBegrunnelse( | ||
vedtaksperiode: VedtaksperiodeMedBegrunnelser, | ||
grunnlag: GrunnlagForBegrunnelse, | ||
landkoder: Map<String, String>, | ||
): List<EØSBegrunnelseData> { | ||
val sanityBegrunnelse = hentSanityBegrunnelse(grunnlag) | ||
val personerGjeldeneForBegrunnelse = vedtaksperiode.hentGyldigeBegrunnelserPerPerson( | ||
grunnlag, | ||
).mapNotNull { (person, begrunnelserPåPerson) -> person.takeIf { this in begrunnelserPåPerson } } | ||
|
||
val begrunnelsesGrunnlagPerPerson = vedtaksperiode.finnBegrunnelseGrunnlagPerPerson(grunnlag) | ||
|
||
val periodegrunnlagForPersonerIBegrunnelse = | ||
begrunnelsesGrunnlagPerPerson.filter { (person, _) -> person in personerGjeldeneForBegrunnelse } | ||
|
||
val kompetanser = when (sanityBegrunnelse.periodeResultat) { | ||
SanityPeriodeResultat.INNVILGET_ELLER_ØKNING, | ||
SanityPeriodeResultat.INGEN_ENDRING, | ||
-> periodegrunnlagForPersonerIBegrunnelse.values.mapNotNull { it.dennePerioden.kompetanse } | ||
|
||
SanityPeriodeResultat.IKKE_INNVILGET, | ||
SanityPeriodeResultat.REDUKSJON, | ||
-> periodegrunnlagForPersonerIBegrunnelse.values.mapNotNull { it.forrigePeriode?.kompetanse } | ||
|
||
null -> error("Feltet 'periodeResultat' er ikke satt for begrunnelse fra sanity '${sanityBegrunnelse.apiNavn}'.") | ||
} | ||
|
||
return if (kompetanser.isEmpty() && sanityBegrunnelse.periodeResultat == SanityPeriodeResultat.IKKE_INNVILGET) { | ||
val personerIBegrunnelse = personerGjeldeneForBegrunnelse | ||
val barnPåBehandling = grunnlag.behandlingsGrunnlagForVedtaksperioder.persongrunnlag.barna | ||
val barnIBegrunnelse = personerGjeldeneForBegrunnelse.filter { it.type == PersonType.BARN } | ||
val gjelderSøker = personerIBegrunnelse.any { it.type == PersonType.SØKER } | ||
|
||
val barnasFødselsdatoer = hentBarnasFødselsdatoerForAvslagsbegrunnelse( | ||
barnIBegrunnelse = barnIBegrunnelse, | ||
barnPåBehandling = barnPåBehandling, | ||
uregistrerteBarn = grunnlag.behandlingsGrunnlagForVedtaksperioder.uregistrerteBarn, | ||
gjelderSøker = gjelderSøker, | ||
) | ||
|
||
listOf( | ||
EØSBegrunnelseDataUtenKompetanse( | ||
vedtakBegrunnelseType = this.vedtakBegrunnelseType, | ||
apiNavn = sanityBegrunnelse.apiNavn, | ||
barnasFodselsdatoer = barnasFødselsdatoer.tilSammenslåttKortString(), | ||
antallBarn = barnasFødselsdatoer.size, | ||
maalform = grunnlag.behandlingsGrunnlagForVedtaksperioder.persongrunnlag.søker.målform.tilSanityFormat(), | ||
gjelderSoker = gjelderSøker, | ||
), | ||
) | ||
} else { | ||
kompetanser.map { kompetanse -> | ||
EØSBegrunnelseDataMedKompetanse( | ||
vedtakBegrunnelseType = this.vedtakBegrunnelseType, | ||
apiNavn = sanityBegrunnelse.apiNavn, | ||
annenForeldersAktivitet = kompetanse.annenForeldersAktivitet, | ||
annenForeldersAktivitetsland = kompetanse.annenForeldersAktivitetsland?.tilLandNavn(landkoder)?.navn, | ||
barnetsBostedsland = kompetanse.barnetsBostedsland.tilLandNavn(landkoder).navn, | ||
barnasFodselsdatoer = Utils.slåSammen( | ||
kompetanse.barnAktører.map { aktør -> | ||
grunnlag.hent(aktør).fødselsdato.tilKortString() | ||
}, | ||
), | ||
antallBarn = kompetanse.barnAktører.size, | ||
maalform = grunnlag.behandlingsGrunnlagForVedtaksperioder.persongrunnlag.søker.målform.tilSanityFormat(), | ||
sokersAktivitet = kompetanse.søkersAktivitet, | ||
sokersAktivitetsland = kompetanse.søkersAktivitetsland.tilLandNavn(landkoder).navn, | ||
) | ||
} | ||
} | ||
} | ||
|
||
private fun GrunnlagForBegrunnelse.hent( | ||
aktør: Aktør, | ||
) = behandlingsGrunnlagForVedtaksperioder.persongrunnlag.personer.single { it.aktør == aktør } | ||
|
||
fun hentBarnasFødselsdatoerForAvslagsbegrunnelse( | ||
barnIBegrunnelse: List<Person>, | ||
barnPåBehandling: List<Person>, | ||
uregistrerteBarn: List<BarnMedOpplysninger>, | ||
gjelderSøker: Boolean, | ||
): List<LocalDate> { | ||
val registrerteBarnFødselsdatoer = | ||
if (gjelderSøker) barnPåBehandling.map { it.fødselsdato } else barnIBegrunnelse.map { it.fødselsdato } | ||
val uregistrerteBarnFødselsdatoer = | ||
uregistrerteBarn.mapNotNull { it.fødselsdato } | ||
val alleBarnaFødselsdatoer = registrerteBarnFødselsdatoer + uregistrerteBarnFødselsdatoer | ||
return alleBarnaFødselsdatoer | ||
} | ||
|
||
data class Landkode(val kode: String, val navn: String) { | ||
init { | ||
if (this.kode.length != 2) { | ||
throw Feil("Forventer landkode på 'ISO 3166-1 alpha-2'-format") | ||
} | ||
} | ||
} | ||
|
||
fun String.tilLandNavn(landkoderISO2: Map<String, String>): Landkode { | ||
val kode = landkoderISO2.entries.find { it.key == this } ?: throw Feil("Fant ikke navn for landkode $this.") | ||
|
||
return Landkode(kode.key, kode.value.storForbokstav()) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
src/test/enhetstester/kotlin/no/nav/familie/ba/sak/kjerne/brev/Landkoder.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package no.nav.familie.ba.sak.kjerne.brev | ||
|
||
import com.fasterxml.jackson.module.kotlin.readValue | ||
import no.nav.familie.kontrakter.felles.objectMapper | ||
import org.springframework.core.io.ClassPathResource | ||
import java.io.BufferedReader | ||
|
||
data class LandkodeISO2( | ||
val code: String, | ||
val name: String, | ||
) | ||
|
||
fun hentLandkoderISO2(): Map<String, String> { | ||
val landkoder = | ||
ClassPathResource("landkoder/landkoder.json").inputStream.bufferedReader().use(BufferedReader::readText) | ||
|
||
return objectMapper.readValue<List<LandkodeISO2>>(landkoder) | ||
.associate { it.code to it.name } | ||
} | ||
|
||
val LANDKODER = hentLandkoderISO2() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.