Skip to content

Commit

Permalink
TFP-4657 endringer i bruk av undermaler i fp innvilgelse
Browse files Browse the repository at this point in the history
  • Loading branch information
palfi committed Oct 17, 2023
1 parent 759bd56 commit 3b49112
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 390 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@
import static no.nav.foreldrepenger.fpformidling.brevproduksjon.mapper.innvilgelsefp.StønadskontoMapper.kontoEksisterer;
import static no.nav.foreldrepenger.fpformidling.brevproduksjon.mapper.innvilgelsefp.UndermalInkluderingMapper.skalInkludereAvslag;
import static no.nav.foreldrepenger.fpformidling.brevproduksjon.mapper.innvilgelsefp.UndermalInkluderingMapper.skalInkludereInnvilget;
import static no.nav.foreldrepenger.fpformidling.brevproduksjon.mapper.innvilgelsefp.UndermalInkluderingMapper.skalInkludereNyeOpplysningerUtbet;
import static no.nav.foreldrepenger.fpformidling.brevproduksjon.mapper.innvilgelsefp.UndermalInkluderingMapper.skalInkludereUtbetNårGradering;
import static no.nav.foreldrepenger.fpformidling.brevproduksjon.mapper.innvilgelsefp.UndermalInkluderingMapper.skalInkludereUtbetaling;
import static no.nav.foreldrepenger.fpformidling.brevproduksjon.mapper.innvilgelsefp.UtbetalingsperiodeMapper.finnAntallAvslåttePerioder;
import static no.nav.foreldrepenger.fpformidling.brevproduksjon.mapper.innvilgelsefp.UtbetalingsperiodeMapper.finnAntallInnvilgedePerioder;
import static no.nav.foreldrepenger.fpformidling.brevproduksjon.mapper.innvilgelsefp.UtbetalingsperiodeMapper.finnAntallPerioder;
Expand Down Expand Up @@ -117,6 +114,7 @@ public ForeldrepengerInnvilgelseDokumentdata mapTilDokumentdata(DokumentFelles d

var utbetalingsperioder = UtbetalingsperiodeMapper.mapUtbetalingsperioder(tilkjentYtelseForeldrepenger.getPerioder(), uttakResultatPerioder,
beregningsgrunnlag.getBeregningsgrunnlagPerioder(), språkkode);
guardBareUtsettelser(utbetalingsperioder);
var konsekvensForInnvilgetYtelse = mapKonsekvensForInnvilgetYtelse(behandling.getBehandlingsresultat().getKonsekvenserForYtelsen());
var erInnvilgetRevurdering = erInnvilgetRevurdering(behandling);
var dagsats = finnDagsats(tilkjentYtelseForeldrepenger);
Expand Down Expand Up @@ -172,12 +170,8 @@ public ForeldrepengerInnvilgelseDokumentdata mapTilDokumentdata(DokumentFelles d
.medLovhjemlerBeregning(
FellesMapper.formaterLovhjemlerForBeregning(beregningsgrunnlag.getHjemmel().getNavn(), konsekvensForInnvilgetYtelse,
erInnvilgetRevurdering, behandling))

.medInkludereUtbetaling(skalInkludereUtbetaling(behandling, utbetalingsperioder))
.medInkludereUtbetNårGradering(skalInkludereUtbetNårGradering(behandling, utbetalingsperioder))
.medInkludereInnvilget(skalInkludereInnvilget(behandling, utbetalingsperioder, konsekvensForInnvilgetYtelse))
.medInkludereInnvilget(skalInkludereInnvilget(utbetalingsperioder, konsekvensForInnvilgetYtelse))
.medInkludereAvslag(skalInkludereAvslag(utbetalingsperioder, konsekvensForInnvilgetYtelse))
.medInkludereNyeOpplysningerUtbet(skalInkludereNyeOpplysningerUtbet(behandling, utbetalingsperioder, dagsats))
.medUtenMinsterett(utenMinsterett)
.medØnskerJustertVedFødsel(ytelseFordeling.ønskerJustertVedFødsel())
.medGraderingOgFulltUttak(
Expand All @@ -186,6 +180,7 @@ public ForeldrepengerInnvilgelseDokumentdata mapTilDokumentdata(DokumentFelles d

finnSisteDagAvSistePeriode(uttakResultatPerioder).ifPresent(
dato -> dokumentdataBuilder.medSisteDagAvSistePeriode(formaterDato(dato, språkkode)));
dokumentdataBuilder.medUtbetalingFom(formaterDato(finnUtbetalingFom(utbetalingsperioder), språkkode));
finnStønadsperiodeFom(utbetalingsperioder).ifPresent(dato -> dokumentdataBuilder.medStønadsperiodeFom(formaterDato(dato, språkkode)));
finnStønadsperiodeTom(utbetalingsperioder).ifPresent(dato -> dokumentdataBuilder.medStønadsperiodeTom(formaterDato(dato, språkkode)));

Expand All @@ -204,6 +199,20 @@ public ForeldrepengerInnvilgelseDokumentdata mapTilDokumentdata(DokumentFelles d
return dokumentdataBuilder.build();
}

private LocalDate finnUtbetalingFom(List<Utbetalingsperiode> utbetalingsperioder) {
return utbetalingsperioder.stream()
.filter(p -> p.getPeriodeDagsats() > 0)
.map(Utbetalingsperiode::getPeriodeFom)
.min(LocalDate::compareTo)
.orElseThrow();
}

private void guardBareUtsettelser(List<Utbetalingsperiode> utbetalingsperioder) {
if (utbetalingsperioder.stream().allMatch(p -> p.getÅrsak().erUtsettelseÅrsak())) {
throw new IllegalStateException("Innvilgelsebrev støtter ikke bare utsettelser");
}
}

private static int disponibleDagerUtenAktivitetskrav(Saldoer saldoer) {
if (kontoEksisterer(saldoer, UTEN_AKTIVITETSKRAV)) {
return finnSaldo(saldoer, UTEN_AKTIVITETSKRAV);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,9 @@

import java.util.List;

import no.nav.foreldrepenger.fpformidling.behandling.Behandling;
import no.nav.foreldrepenger.fpformidling.behandling.BehandlingType;
import no.nav.foreldrepenger.fpformidling.behandling.KonsekvensForYtelsen;
import no.nav.foreldrepenger.fpformidling.integrasjon.dokgen.dto.felles.Årsak;
import no.nav.foreldrepenger.fpformidling.integrasjon.dokgen.dto.innvilgelsefp.AnnenAktivitet;
import no.nav.foreldrepenger.fpformidling.integrasjon.dokgen.dto.innvilgelsefp.Arbeidsforhold;
import no.nav.foreldrepenger.fpformidling.integrasjon.dokgen.dto.innvilgelsefp.Utbetalingsperiode;
import no.nav.foreldrepenger.fpformidling.kodeverk.kodeverdi.BehandlingResultatType;
import no.nav.foreldrepenger.fpformidling.uttak.fp.PeriodeResultatÅrsak;

/**
Expand All @@ -20,20 +15,14 @@ public final class UndermalInkluderingMapper {
private UndermalInkluderingMapper() {
}

public static boolean skalInkludereUtbetaling(Behandling behandling, List<Utbetalingsperiode> utbetalingsperioder) {
return behandling.getBehandlingsresultat().erInnvilget() && (utbetalingsperioder.size() > 1
|| harKunEnPeriodeUtenGraderingOgUtenUtbetalingÅrsak(utbetalingsperioder));
}

public static boolean skalInkludereUtbetNårGradering(Behandling behandling, List<Utbetalingsperiode> utbetalingsperioder) {
return behandling.getBehandlingsresultat().erInnvilget() && utbetalingsperioder.size() == 1 && periodeHarUtbetalingÅrsakEllerGradering(
utbetalingsperioder.get(0));
}

public static boolean skalInkludereInnvilget(Behandling behandling, List<Utbetalingsperiode> utbetalingsperioder, String konsekvens) {
return !KonsekvensForYtelsen.ENDRING_I_BEREGNING.getKode().equals(konsekvens) && (harMerEnnEnPeriodeOgMinstEnInnvilget(utbetalingsperioder)
|| erRevurderingMedEndring(konsekvens, behandling) || utbetalingsperioder.stream()
.anyMatch(UndermalInkluderingMapper::periodeHarUtbetalingÅrsakEllerGradering));
public static boolean skalInkludereInnvilget(List<Utbetalingsperiode> utbetalingsperioder, String konsekvens) {
if (KonsekvensForYtelsen.ENDRING_I_BEREGNING.getKode().equals(konsekvens)) {
return false;
}
return utbetalingsperioder.stream().filter(Utbetalingsperiode::isInnvilget).count() > 1
|| erRevurderingMedEndringIUttak(konsekvens)
|| harKunEnPeriodeMedGradering(utbetalingsperioder)
|| harKunEnPeriodeMedOverføring(utbetalingsperioder);
}

public static boolean skalInkludereAvslag(List<Utbetalingsperiode> utbetalingsperioder, String konsekvens) {
Expand All @@ -45,49 +34,16 @@ private static boolean periodeMed4102UtenTapteDager(Utbetalingsperiode periode)
return Årsak.of(PeriodeResultatÅrsak.BARE_FAR_RETT_IKKE_SØKT.getKode()).equals(periode.getÅrsak()) && periode.getAntallTapteDager() == 0;
}

public static boolean skalInkludereNyeOpplysningerUtbet(Behandling behandling, List<Utbetalingsperiode> utbetalingsperioder, long dagsats) {
return dagsats > 0 && behandling.getBehandlingsresultat().erInnvilget() && utbetalingsperioder.size() == 1
&& periodeHarGyldigUtsettelseÅrsakEllerGradering(utbetalingsperioder.get(0));
}

private static boolean harKunEnPeriodeUtenGraderingOgUtenUtbetalingÅrsak(List<Utbetalingsperiode> utbetalingsperioder) {
return utbetalingsperioder.size() == 1 && !utbetalingsperioder.get(0).getÅrsak().erUtbetalingÅrsak() && ikkeHarGradering(
utbetalingsperioder.get(0));
}

private static boolean ikkeHarGradering(Utbetalingsperiode utbetalingsperiode) {
return utbetalingsperiode.getArbeidsforholdsliste().stream().noneMatch(Arbeidsforhold::isGradering) && (utbetalingsperiode.getNæring() == null
|| !utbetalingsperiode.getNæring().isGradering()) && utbetalingsperiode.getAnnenAktivitetsliste()
.stream()
.noneMatch(AnnenAktivitet::isGradering);
private static boolean harKunEnPeriodeMedGradering(List<Utbetalingsperiode> utbetalingsperioder) {
return utbetalingsperioder.size() == 1 && utbetalingsperioder.get(0).getÅrsak().erGraderingÅrsak();
}

private static boolean harMerEnnEnPeriodeOgMinstEnInnvilget(List<Utbetalingsperiode> utbetalingsperioder) {
return utbetalingsperioder.stream().anyMatch(Utbetalingsperiode::isInnvilget) && utbetalingsperioder.size() > 1;
private static boolean harKunEnPeriodeMedOverføring(List<Utbetalingsperiode> utbetalingsperioder) {
return utbetalingsperioder.size() == 1 && utbetalingsperioder.get(0).getÅrsak().erOverføring();
}

private static boolean erRevurderingMedEndring(String konsekvens, Behandling behandling) {
return !BehandlingType.FØRSTEGANGSSØKNAD.equals(behandling.getBehandlingType()) && BehandlingResultatType.FORELDREPENGER_ENDRET.equals(
behandling.getBehandlingsresultat().getBehandlingResultatType()) && erEndringIUttak(konsekvens);
}

private static boolean erEndringIUttak(String konsekvens) {
private static boolean erRevurderingMedEndringIUttak(String konsekvens) {
return KonsekvensForYtelsen.ENDRING_I_UTTAK.getKode().equals(konsekvens) || KonsekvensForYtelsen.ENDRING_I_BEREGNING_OG_UTTAK.getKode()
.equals(konsekvens);
}

private static boolean periodeHarUtbetalingÅrsakEllerGradering(Utbetalingsperiode utbetalingsperiode) {
return utbetalingsperiode.getÅrsak().erUtbetalingÅrsak() || harGradering(utbetalingsperiode);
}

private static boolean periodeHarGyldigUtsettelseÅrsakEllerGradering(Utbetalingsperiode utbetalingsperiode) {
return utbetalingsperiode.getÅrsak().erGyldigUtsettelseÅrsak() || harGradering(utbetalingsperiode);
}

private static boolean harGradering(Utbetalingsperiode utbetalingsperiode) {
return utbetalingsperiode.getArbeidsforholdsliste().stream().anyMatch(Arbeidsforhold::isGradering) || (utbetalingsperiode.getNæring() != null
&& utbetalingsperiode.getNæring().isGradering()) || utbetalingsperiode.getAnnenAktivitetsliste()
.stream()
.anyMatch(AnnenAktivitet::isGradering);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,15 @@ public class Årsak {
List.of("4058", "4059"), List.of("4061", "4062", "4063", "4064", "4065", "4115", "4116", "4117"),
List.of("4066", "4067", "4068", "4069", "4070", "4088", "4089"), List.of("4080", "4501"), List.of("4084", "4085"), List.of("4094", "4502"));

private static final List<String> UTBETALING_ÅRSAKER = List.of("2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019",
"2020", "2021", "2022", "2023", "2030", "2031", "2032", "2033", "2034", "2035", "2038");

private static final List<String> GYLDIG_UTSETTELSE_ÅRSAKER = List.of("2010", "2011", "2012", "2013", "2014");
private static final List<String> UTSETTELSE_ÅRSAKER = List.of("2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019");
private static final List<String> GRADERING_ÅRSAKER = List.of("2030", "2031", "2032", "2033", "2034", "2035", "2038");
private static final List<String> OVERFØRING_ÅRSAKER = List.of("2020", "2021", "2022", "2023");

@JsonValue
private String kode;

private Årsak(String kode) {
if (kode == null || "".equals(kode)) {
if (kode == null || kode.isEmpty()) {
throw new IllegalStateException("Ugyldig årsak: " + (kode == null ? "null" : "tom string"));
}
this.kode = kode;
Expand Down Expand Up @@ -63,11 +62,15 @@ public static boolean erRegnetSomLike(Årsak årsak1, Årsak årsak2) {
return NON_EQUAL_KODER_SOM_LIKEVEL_OPPFYLLER_MERGE.stream().anyMatch(k -> k.containsAll(Set.of(årsak1.getKode(), årsak2.getKode())));
}

public boolean erUtbetalingÅrsak() {
return UTBETALING_ÅRSAKER.contains(kode);
public boolean erUtsettelseÅrsak() {
return UTSETTELSE_ÅRSAKER.contains(kode);
}

public boolean erGraderingÅrsak() {
return GRADERING_ÅRSAKER.contains(kode);
}

public boolean erGyldigUtsettelseÅrsak() {
return GYLDIG_UTSETTELSE_ÅRSAKER.contains(kode);
public boolean erOverføring() {
return OVERFØRING_ÅRSAKER.contains(kode);
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package no.nav.foreldrepenger.fpformidling.integrasjon.dokgen.dto.innvilgelsefp;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import com.fasterxml.jackson.annotation.JsonAutoDetect;

import no.nav.foreldrepenger.fpformidling.integrasjon.dokgen.dto.felles.Beløp;
import no.nav.foreldrepenger.fpformidling.integrasjon.dokgen.dto.felles.Dokumentdata;
import no.nav.foreldrepenger.fpformidling.integrasjon.dokgen.dto.felles.FellesDokumentdata;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class ForeldrepengerInnvilgelseDokumentdata extends Dokumentdata {
private String behandlingType;
Expand Down Expand Up @@ -53,6 +53,7 @@ public class ForeldrepengerInnvilgelseDokumentdata extends Dokumentdata {
private String sisteDagAvSistePeriode;
private String stønadsperiodeFom;
private String stønadsperiodeTom;
private String utbetalingFom;
private int foreldrepengeperiodenUtvidetUker;
private int antallBarn;
private int prematurDager;
Expand All @@ -71,11 +72,8 @@ public class ForeldrepengerInnvilgelseDokumentdata extends Dokumentdata {
private String lovhjemlerUttak;
private String lovhjemlerBeregning;

private boolean inkludereUtbetaling;
private boolean inkludereUtbetNårGradering;
private boolean inkludereInnvilget;
private boolean inkludereAvslag;
private boolean inkludereNyeOpplysningerUtbet;

private boolean utenMinsterett;
private boolean ønskerJustertVedFødsel;
Expand Down Expand Up @@ -106,6 +104,10 @@ public boolean getHarUtbetaling() {
return harUtbetaling;
}

public String getUtbetalingFom() {
return utbetalingFom;
}

public long getDagsats() {
return dagsats;
}
Expand Down Expand Up @@ -298,14 +300,6 @@ public String getLovhjemlerBeregning() {
return lovhjemlerBeregning;
}

public boolean getInkludereUtbetaling() {
return inkludereUtbetaling;
}

public boolean getInkludereUtbetNårGradering() {
return inkludereUtbetNårGradering;
}

public boolean getInkludereInnvilget() {
return inkludereInnvilget;
}
Expand All @@ -314,10 +308,6 @@ public boolean getInkludereAvslag() {
return inkludereAvslag;
}

public boolean getInkludereNyeOpplysningerUtbet() {
return inkludereNyeOpplysningerUtbet;
}

/**
* Leverer tilbake "true" for behandlinger "før" WLB eller "false" etter WLB
* WLB - Work Life Balance = FAB - Familie Arbeid Balanse
Expand Down Expand Up @@ -369,9 +359,8 @@ public boolean equals(Object object) {
bruttoBeregningsgrunnlag, that.bruttoBeregningsgrunnlag) && Objects.equals(harBruktBruttoBeregningsgrunnlag,
that.harBruktBruttoBeregningsgrunnlag) && Objects.equals(beregningsgrunnlagregler, that.beregningsgrunnlagregler) && Objects.equals(
klagefristUker, that.klagefristUker) && Objects.equals(lovhjemlerUttak, that.lovhjemlerUttak) && Objects.equals(lovhjemlerBeregning,
that.lovhjemlerBeregning) && Objects.equals(inkludereUtbetaling, that.inkludereUtbetaling) && Objects.equals(inkludereUtbetNårGradering,
that.inkludereUtbetNårGradering) && Objects.equals(inkludereInnvilget, that.inkludereInnvilget) && Objects.equals(inkludereAvslag,
that.inkludereAvslag) && Objects.equals(inkludereNyeOpplysningerUtbet, that.inkludereNyeOpplysningerUtbet) && Objects.equals(
that.lovhjemlerBeregning) && Objects.equals(inkludereInnvilget, that.inkludereInnvilget) && Objects.equals(inkludereAvslag,
that.inkludereAvslag) && Objects.equals(
utenMinsterett, that.utenMinsterett) && Objects.equals(ønskerJustertVedFødsel, that.ønskerJustertVedFødsel) && Objects.equals(
graderingOgFulltUttakIAnnenAktivitet, that.graderingOgFulltUttakIAnnenAktivitet);

Expand All @@ -386,8 +375,8 @@ public int hashCode() {
antallInnvilgedePerioder, antallAvslåttePerioder, antallArbeidsgivere, dagerTaptFørTermin, disponibleDager, disponibleFellesDager,
sisteDagAvSistePeriode, stønadsperiodeFom, stønadsperiodeTom, foreldrepengeperiodenUtvidetUker, antallBarn, prematurDager, antallDødeBarn,
dødsdato, kreverSammenhengendeUttak, morKanSøkeOmDagerFørFødsel, perioder, bruttoBeregningsgrunnlag, harBruktBruttoBeregningsgrunnlag,
beregningsgrunnlagregler, klagefristUker, lovhjemlerUttak, lovhjemlerBeregning, inkludereUtbetaling, inkludereUtbetNårGradering,
inkludereInnvilget, inkludereAvslag, inkludereNyeOpplysningerUtbet, disponibleDagerUtenAktivitetskrav, disponibleDagerMedAktivitetskrav,
beregningsgrunnlagregler, klagefristUker, lovhjemlerUttak, lovhjemlerBeregning,
inkludereInnvilget, inkludereAvslag, disponibleDagerUtenAktivitetskrav, disponibleDagerMedAktivitetskrav,
utenMinsterett, ønskerJustertVedFødsel, graderingOgFulltUttakIAnnenAktivitet);
}

Expand Down Expand Up @@ -676,16 +665,6 @@ public Builder medLovhjemlerBeregning(String lovhjemlerBeregning) {
return this;
}

public Builder medInkludereUtbetaling(boolean inkludereUtbetaling) {
this.kladd.inkludereUtbetaling = inkludereUtbetaling;
return this;
}

public Builder medInkludereUtbetNårGradering(boolean inkludereUtbetNårGradering) {
this.kladd.inkludereUtbetNårGradering = inkludereUtbetNårGradering;
return this;
}

public Builder medInkludereInnvilget(boolean inkludereInnvilget) {
this.kladd.inkludereInnvilget = inkludereInnvilget;
return this;
Expand All @@ -696,11 +675,6 @@ public Builder medInkludereAvslag(boolean inkludereAvslag) {
return this;
}

public Builder medInkludereNyeOpplysningerUtbet(boolean inkludereNyeOpplysningerUtbet) {
this.kladd.inkludereNyeOpplysningerUtbet = inkludereNyeOpplysningerUtbet;
return this;
}

public Builder medUtenMinsterett(boolean utenMinsterett) {
this.kladd.utenMinsterett = utenMinsterett;
return this;
Expand All @@ -716,6 +690,11 @@ public Builder medGraderingOgFulltUttak(boolean graderingOgFulltUttakIAnnenAktiv
return this;
}

public Builder medUtbetalingFom(String utbetalingFom) {
this.kladd.utbetalingFom = utbetalingFom;
return this;
}

public ForeldrepengerInnvilgelseDokumentdata build() {
return this.kladd;
}
Expand Down
Loading

0 comments on commit 3b49112

Please sign in to comment.