Skip to content

Commit

Permalink
Rydder litt jes jes todo
Browse files Browse the repository at this point in the history
  • Loading branch information
espenwaaga committed Jul 5, 2024
1 parent 7b80263 commit aff1dd4
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -201,12 +201,18 @@ private RegelResultatBehandlerResultat behandleRegelresultat(Evaluation evalueri
regelGrunnlag) ? SamtidigUttakUtil.uttaksprosentAnnenpart(fastsettePeriodeGrunnlag) : SamtidigUttaksprosent.ZERO;

return switch (utfallType) {
case AVSLÅTT -> behandler.avslåAktuellPeriode(aktuellPeriode, regelresultat, knekkpunktOpt);
case AVSLÅTT -> behandler.avslåAktuellPeriode(aktuellPeriode, regelresultat, knekkpunktOpt,
overlapperMedInnvilgetAnnenpartsPeriode(aktuellPeriode, annenpartUttaksperioder(regelGrunnlag)));
case INNVILGET -> behandler.innvilgAktuellPeriode(aktuellPeriode, knekkpunktOpt, regelresultat, annenpartSamtidigUttaksprosent);
case MANUELL_BEHANDLING -> behandler.manuellBehandling(aktuellPeriode, regelresultat);
};
}

private boolean overlapperMedInnvilgetAnnenpartsPeriode(OppgittPeriode aktuellPeriode, List<AnnenpartUttakPeriode> annenPartUttaksperioder) {
return annenPartUttaksperioder.stream()
.anyMatch(annenpartsPeriode -> annenpartsPeriode.overlapper(aktuellPeriode) && annenpartsPeriode.isInnvilget());
}

private List<AnnenpartUttakPeriode> annenpartUttaksperioder(RegelGrunnlag regelGrunnlag) {
return regelGrunnlag.getAnnenPart() == null ? Collections.emptyList() : regelGrunnlag.getAnnenPart().getUttaksperioder();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,11 @@

import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.ValgAvStønadskontoTjeneste.velgStønadskonto;

import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Perioderesultattype;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.RegelGrunnlag;
Expand Down Expand Up @@ -56,8 +52,8 @@ RegelResultatBehandlerResultat innvilgAktuellPeriode(OppgittPeriode oppgittPerio

RegelResultatBehandlerResultat avslåAktuellPeriode(OppgittPeriode oppgittPeriode,
FastsettePerioderRegelresultat regelresultat,
Optional<TomKontoKnekkpunkt> knekkpunktOpt) {
var overlapperInnvilgetAnnenpartsPeriode = overlapperMedInnvilgetAnnenpartsPeriode(oppgittPeriode, annenpartUttaksperioder(regelGrunnlag));
Optional<TomKontoKnekkpunkt> knekkpunktOpt,
boolean overlapperInnvilgetAnnenpartsPeriode) {
var avslåPeriode = knekkpunktOpt.map(TomKontoKnekkpunkt::dato)
.filter(d -> !overlapperInnvilgetAnnenpartsPeriode)
.map(knekkdato -> oppgittPeriode.kopiMedNyPeriode(oppgittPeriode.getFom(), knekkdato.minusDays(1)))
Expand Down Expand Up @@ -143,45 +139,24 @@ private PeriodeAktivitetResultat finnPeriodeAktivitetResultat(OppgittPeriode opp
return new PeriodeAktivitetResultat(Utbetalingsgrad.ZERO, Trekkdager.ZERO);
}

var skalRedusereUtbetalingsgradMedFulleTrekkdagerPgaDelvisGodkjentArbeid = skalRedusereUtbetalingsgradMedFulleTrekkdagerPgaDelvisGodkjentArbeid(oppgittPeriode, aktivitet);
var graderingInnvilget = regelresultat.getGraderingIkkeInnvilgetÅrsak() == null && oppgittPeriode.erSøktGradering(aktivitet);
var utbetalingsgrad = Utbetalingsgrad.ZERO;
if (regelresultat.skalUtbetale()) {
var utbetalingsgradUtregning = bestemUtbetalingsgradUtregning(oppgittPeriode, aktivitet, skalRedusereUtbetalingsgradMedFulleTrekkdagerPgaDelvisGodkjentArbeid, annenpartSamtidigUttaksprosent);
var utbetalingsgradUtregning = bestemUtbetalingsgradUtregning(oppgittPeriode, aktivitet, annenpartSamtidigUttaksprosent, graderingInnvilget);
utbetalingsgrad = utbetalingsgradUtregning.resultat();
}
var trekkdager = Trekkdager.ZERO;
if (regelresultat.trekkDagerFraSaldo()) {
if (manuellBehandling && stønadskonto.isEmpty()) {
trekkdager = Trekkdager.ZERO;
} else {
var graderingInnvilget = regelresultat.getGraderingIkkeInnvilgetÅrsak() == null && oppgittPeriode.erSøktGradering(aktivitet);
trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(oppgittPeriode, graderingInnvilget, oppgittPeriode.getArbeidsprosent(),
regnSamtidigUttaksprosentMotGradering(oppgittPeriode, annenpartSamtidigUttaksprosent), skalRedusereUtbetalingsgradMedFulleTrekkdagerPgaDelvisGodkjentArbeid);
regnSamtidigUttaksprosentMotGradering(oppgittPeriode, annenpartSamtidigUttaksprosent));
}
}
return new PeriodeAktivitetResultat(utbetalingsgrad, trekkdager);
}

private boolean skalRedusereUtbetalingsgradMedFulleTrekkdagerPgaDelvisGodkjentArbeid(OppgittPeriode oppgittPeriode, AktivitetIdentifikator aktivitet) {
if (oppgittPeriode.getMorsStillingsprosent() == null) {
return false;
}

if (oppgittPeriode.erSøktSamtidigUttak() || overlapperMedInnvilgetAnnenpartsPeriode(oppgittPeriode, annenpartUttaksperioder(regelGrunnlag))) {
return false;
}

if (oppgittPeriode.erSøktGradering(aktivitet) && gradertUttakMindreEnnMorsStillingsprosent(oppgittPeriode)) {
return false;
}
return true;
}

private static boolean gradertUttakMindreEnnMorsStillingsprosent(OppgittPeriode oppgittPeriode) {
return BigDecimal.valueOf(100).subtract(oppgittPeriode.getArbeidsprosent())
.compareTo(oppgittPeriode.getMorsStillingsprosent().decimalValue()) < 0;
}

private boolean isHarIgjenTrekkdager(OppgittPeriode oppgittPeriode,
AktivitetIdentifikator aktivitet,
FastsettePerioderRegelresultat regelresultat,
Expand All @@ -207,31 +182,22 @@ private void validerKnekkpunkt(OppgittPeriode uttakPeriode, TomKontoKnekkpunkt k

private UtbetalingsgradUtregning bestemUtbetalingsgradUtregning(OppgittPeriode oppgittPeriode,
AktivitetIdentifikator aktivitet,
boolean skalRedusereUtbetalingsgradMedFulleTrekkdagerPgaDelvisGodkjentArbeid,
SamtidigUttaksprosent annenpartSamtidigUttaksprosent) {
if (skalRedusereUtbetalingsgradMedFulleTrekkdagerPgaDelvisGodkjentArbeid) {
return new UtbetalingsgradMorsStillingsprosentUtregning(oppgittPeriode.getMorsStillingsprosent(), annenpartSamtidigUttaksprosent);
}
if (oppgittPeriode.erSøktGradering(aktivitet)) {
SamtidigUttaksprosent annenpartSamtidigUttaksprosent,
boolean graderingInnvilget) {
if (graderingInnvilget) {
return new UtbetalingsgradMedGraderingUtregning(oppgittPeriode, aktivitet, annenpartSamtidigUttaksprosent);
}
var samtidigUttaksprosent = regnSamtidigUttaksprosentMotGradering(oppgittPeriode, annenpartSamtidigUttaksprosent);
if (samtidigUttaksprosent != null) {
return new UtbetalingsgradSamtidigUttakUtregning(samtidigUttaksprosent, oppgittPeriode.getArbeidsprosent(), annenpartSamtidigUttaksprosent);
}
if (oppgittPeriode.getMorsStillingsprosent() != null) {
return new UtbetalingsgradMorsStillingsprosentUtregning(oppgittPeriode.getMorsStillingsprosent(), annenpartSamtidigUttaksprosent);
}
return new UtbetalingsgradUtenGraderingUtregning(annenpartSamtidigUttaksprosent);

}

private static List<AnnenpartUttakPeriode> annenpartUttaksperioder(RegelGrunnlag regelGrunnlag) {
return regelGrunnlag.getAnnenPart() == null ? Collections.emptyList() : regelGrunnlag.getAnnenPart().getUttaksperioder();
}

private static boolean overlapperMedInnvilgetAnnenpartsPeriode(OppgittPeriode aktuellPeriode, List<AnnenpartUttakPeriode> annenPartUttaksperioder) {
return annenPartUttaksperioder.stream()
.anyMatch(annenpartsPeriode -> annenpartsPeriode.overlapper(aktuellPeriode) && annenpartsPeriode.isInnvilget());
}

private record PeriodeAktivitetResultat(Utbetalingsgrad utbetalingsgrad, Trekkdager trekkdager) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,11 @@ private TrekkdagerUtregningUtil() {
}

public static Trekkdager trekkdagerFor(Periode periode,
boolean gradert,
boolean graderingInnvilget,
BigDecimal gradertArbeidstidsprosent,
SamtidigUttaksprosent samtidigUttaksprosent,
boolean skalRedusereUtbetalingsgradMedFulleTrekkdagerPgaDelvisGodkjentArbeid) {
SamtidigUttaksprosent samtidigUttaksprosent) {
var trekkdagerUtenGradering = Virkedager.beregnAntallVirkedager(periode);
if (skalRedusereUtbetalingsgradMedFulleTrekkdagerPgaDelvisGodkjentArbeid) {
return new Trekkdager(trekkdagerUtenGradering);
}
if (gradert) {
if (graderingInnvilget) {
return trekkdagerMedGradering(trekkdagerUtenGradering, gradertArbeidstidsprosent);
}
if (samtidigUttaksprosent != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,8 @@ private Specification<FastsettePeriodeGrunnlag> sjekkOmMorErIArbeidMedStillingpr

private Specification<FastsettePeriodeGrunnlag> sjekkOmSøktUttaksprosentErStørreEllerLikMorsStillingsprosent() {
return rs.hvisRegel(SjekkOmSøktUttaksprosentErStørreEllerLikMorsStillingsprosent.ID, SjekkOmSøktUttaksprosentErStørreEllerLikMorsStillingsprosent.BESKRIVELSE)
.hvis(new SjekkOmSøktUttaksprosentErStørreEllerLikMorsStillingsprosent(), Oppfylt.opprett("UT1272", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, true)) // TODO
.ellers(Manuellbehandling.opprett("UT1330", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, Manuellbehandlingårsak.AKTIVITETSKRAV_DELVIS_ARBEID, true, true));
.hvis(new SjekkOmSøktUttaksprosentErStørreEllerLikMorsStillingsprosent(), Oppfylt.opprettMedAvslåttGradering("UT1330", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, GraderingIkkeInnvilgetÅrsak.MOR_OPPFYLLER_IKKE_AKTIVITETSKRAV, true))
.ellers(Manuellbehandling.opprett("UT1326", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, Manuellbehandlingårsak.AKTIVITETSKRAV_DELVIS_ARBEID, true, true));
}

private Specification<FastsettePeriodeGrunnlag> delFlytForVanligUttak() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ private Specification<FastsettePeriodeGrunnlag> sjekkOmMorErIArbeidMedStillingpr

private Specification<FastsettePeriodeGrunnlag> sjekkOmSøktUttaksprosentErStørreEllerLikMorsStillingsprosent() {
return rs.hvisRegel(SjekkOmSøktUttaksprosentErStørreEllerLikMorsStillingsprosent.ID, SjekkOmSøktUttaksprosentErStørreEllerLikMorsStillingsprosent.BESKRIVELSE)
.hvis(new SjekkOmSøktUttaksprosentErStørreEllerLikMorsStillingsprosent(), Oppfylt.opprett("UT1331", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, true)) // TODO
.hvis(new SjekkOmSøktUttaksprosentErStørreEllerLikMorsStillingsprosent(), Oppfylt.opprettMedAvslåttGradering("UT1331", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, GraderingIkkeInnvilgetÅrsak.MOR_OPPFYLLER_IKKE_AKTIVITETSKRAV, true))
.ellers(Manuellbehandling.opprett("UT1329", InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT, Manuellbehandlingårsak.AKTIVITETSKRAV_DELVIS_ARBEID, true, true));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

public enum GraderingIkkeInnvilgetÅrsak {

AVSLAG_PGA_FOR_TIDLIG_GRADERING(4504, "Gradering før uke 7");
AVSLAG_PGA_FOR_TIDLIG_GRADERING(4504, "Gradering før uke 7"),
MOR_OPPFYLLER_IKKE_AKTIVITETSKRAV(4503, "Avslag gradering – ikke rett til gradert uttak pga. redusert oppfylt aktivitetskrav på mor");

private final int id;
private final String beskrivelse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ void skal_runde_ned_ved_gradering() {
var arbeidstidsprosent = BigDecimal.valueOf(1);
var periode = OppgittPeriode.forGradering(Stønadskontotype.FORELDREPENGER, fom, tom, arbeidstidsprosent, null, false, Set.of(), null, null,
null, null, null);
var trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(periode, true, arbeidstidsprosent, null, false);
var trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(periode, true, arbeidstidsprosent, null);

assertThat(trekkdager).isEqualTo(new Trekkdager(1.9));
}
Expand All @@ -38,7 +38,7 @@ void skal_redusere_trekkdager_ved_samtidig_uttak_uten_gradering() {
var samtidigUttaksprosent = new SamtidigUttaksprosent(50);
var periode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FORELDREPENGER, fom, tom, samtidigUttaksprosent, false, null, null, null,
null, null);
var trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(periode, false, null, samtidigUttaksprosent, false);
var trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(periode, false, null, samtidigUttaksprosent);

assertThat(trekkdager).isEqualTo(new Trekkdager(5));
}
Expand Down

0 comments on commit aff1dd4

Please sign in to comment.