Skip to content

Commit

Permalink
TFP-5185 legge til støtte for annenpart stillingsprosent (#352)
Browse files Browse the repository at this point in the history
  • Loading branch information
sirimykland authored Jul 2, 2024
1 parent 4783069 commit 42fcd53
Show file tree
Hide file tree
Showing 38 changed files with 460 additions and 154 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.aktkrav;

import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.DokumentasjonVurdering.MORS_AKTIVITET_IKKE_GODKJENT;

import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag;
import no.nav.fpsak.nare.doc.RuleDocumentation;
import no.nav.fpsak.nare.evaluation.Evaluation;
import no.nav.fpsak.nare.specification.LeafSpecification;

import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.DokumentasjonVurdering.MORS_AKTIVITET_IKKE_GODKJENT;

@RuleDocumentation(SjekkOmAktivitetErDokumentert.ID)
public class SjekkOmAktivitetErDokumentert extends LeafSpecification<FastsettePeriodeGrunnlag> {
public static final String ID = "AVSLAG_AKT_8";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.aktkrav;

import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.MorsAktivitet;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode;
import no.nav.fpsak.nare.doc.RuleDocumentation;
import no.nav.fpsak.nare.evaluation.Evaluation;
import no.nav.fpsak.nare.specification.LeafSpecification;

@RuleDocumentation(SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent.ID)
public class SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent extends LeafSpecification<FastsettePeriodeGrunnlag> {

public static final String ID = "AKT_ARBEID_1";
public static final String BESKRIVELSE = "Er mor i arbeid og har en stillingsprosent under 75 prosent";

public SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent() {
super(ID);
}

@Override
public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) {
var aktuellPeriode = grunnlag.getAktuellPeriode();
if (erMorIArbeidOgHarEnStillingsprosentMindreEnn75Prosent(aktuellPeriode)) {
return ja();
}
return nei();
}

private static boolean erMorIArbeidOgHarEnStillingsprosentMindreEnn75Prosent(OppgittPeriode aktuellPeriode) {
return MorsAktivitet.ARBEID.equals(aktuellPeriode.getMorsAktivitet()) && aktuellPeriode.getMorsStillingsprosent() != null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Objects;

public class MorsStillingsprosent implements Comparable<MorsStillingsprosent> {

private final BigDecimal verdi;

public MorsStillingsprosent(BigDecimal verdi) {
Objects.requireNonNull(verdi, "Morsstillingssprosent må ha verdi hvis satt!");
this.verdi = scale(verdi);
if (this.verdi.compareTo(BigDecimal.valueOf(75)) >= 0 || this.verdi.compareTo(BigDecimal.ZERO) <= 0) {
throw new IllegalArgumentException("Mors stillingsprosent har en ugyldig verdi: " + this.verdi);
}
}

public MorsStillingsprosent(int verdi) {
this(BigDecimal.valueOf(verdi));
}

public BigDecimal decimalValue() {
return scale(verdi);
}

private BigDecimal scale(BigDecimal verdi) {
return verdi.setScale(2, RoundingMode.UP);
}

@Override
public String toString() {
return verdi.toString();
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
var that = (MorsStillingsprosent) o;
return Objects.equals(decimalValue(), that.decimalValue());
}

@Override
public int hashCode() {
return Objects.hash(decimalValue());
}

@Override
public int compareTo(MorsStillingsprosent morsStillingsprosent) {
return decimalValue().compareTo(morsStillingsprosent.decimalValue());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ public final class OppgittPeriode extends LukketPeriode {
private final LocalDate senestMottattDato;
private final LocalDate tidligstMottattDato;
private final MorsAktivitet morsAktivitet;
private final DokumentasjonVurdering dokumentasjonVurdering;
private final MorsStillingsprosent morsStillingsprosent; // Satt hvis saksbehandler har vurdert
private final DokumentasjonVurdering dokumentasjonVurdering; // Satt hvis saksbehandler har vurdert
private Set<AktivitetIdentifikator> aktiviteter = Set.of();

private OppgittPeriode(Stønadskontotype stønadskontotype,
Expand All @@ -37,6 +38,7 @@ private OppgittPeriode(Stønadskontotype stønadskontotype,
LocalDate senestMottattDato,
LocalDate tidligstMottattDato,
MorsAktivitet morsAktivitet,
MorsStillingsprosent morsStillingsprosent,
DokumentasjonVurdering dokumentasjonVurdering) {
super(fom, tom);
this.arbeidsprosent = arbeidsprosent;
Expand All @@ -51,13 +53,14 @@ private OppgittPeriode(Stønadskontotype stønadskontotype,
this.senestMottattDato = senestMottattDato;
this.tidligstMottattDato = tidligstMottattDato;
this.morsAktivitet = morsAktivitet;
this.morsStillingsprosent = morsStillingsprosent;
this.dokumentasjonVurdering = dokumentasjonVurdering;
}

public OppgittPeriode kopiMedNyPeriode(LocalDate nyFom, LocalDate nyTom) {
var kopi = new OppgittPeriode(stønadskontotype, nyFom, nyTom, manglendeSøktPeriode, arbeidsprosent, gradertAktiviteter, overføringÅrsak,
samtidigUttaksprosent, flerbarnsdager, utsettelseÅrsak, oppholdÅrsak, senestMottattDato, tidligstMottattDato, morsAktivitet,
dokumentasjonVurdering);
morsStillingsprosent, dokumentasjonVurdering);
kopi.aktiviteter = aktiviteter;
return kopi;
}
Expand Down Expand Up @@ -171,7 +174,7 @@ public DokumentasjonVurdering getDokumentasjonVurdering() {
}

public static OppgittPeriode forManglendeSøkt(Stønadskontotype type, LocalDate fom, LocalDate tom) {
return new OppgittPeriode(type, fom, tom, true, null, Set.of(), null, null, false, null, null, null, null, null, null);
return new OppgittPeriode(type, fom, tom, true, null, Set.of(), null, null, false, null, null, null, null, null, null, null);
}

public static OppgittPeriode forUtsettelse(LocalDate fom,
Expand All @@ -182,7 +185,7 @@ public static OppgittPeriode forUtsettelse(LocalDate fom,
MorsAktivitet morsAktivitet,
DokumentasjonVurdering dokumentasjonVurdering) {
return new OppgittPeriode(null, fom, tom, false, null, Set.of(), null, null, false, utsettelseÅrsak, null, senestMottattDato,
tidligstMottattDato, morsAktivitet, dokumentasjonVurdering);
tidligstMottattDato, morsAktivitet, null, dokumentasjonVurdering);
}

public static OppgittPeriode forOverføring(Stønadskontotype stønadskontotype,
Expand All @@ -193,7 +196,7 @@ public static OppgittPeriode forUtsettelse(LocalDate fom,
LocalDate tidligstMottattDato,
DokumentasjonVurdering dokumentasjonVurdering) {
return new OppgittPeriode(stønadskontotype, fom, tom, false, null, Set.of(), overføringÅrsak, null, false, null, null, senestMottattDato,
tidligstMottattDato, null, dokumentasjonVurdering);
tidligstMottattDato, null, null, dokumentasjonVurdering);
}

public static OppgittPeriode forOpphold(LocalDate fom,
Expand All @@ -202,7 +205,7 @@ public static OppgittPeriode forOpphold(LocalDate fom,
LocalDate senestMottattDato,
LocalDate tidligstMottattDato) {
return new OppgittPeriode(OppholdÅrsak.map(oppholdÅrsak), fom, tom, false, null, Set.of(), null, null, false, null, oppholdÅrsak,
senestMottattDato, tidligstMottattDato, null, null);
senestMottattDato, tidligstMottattDato, null, null, null);
}

public static OppgittPeriode forGradering(Stønadskontotype stønadskontotype,
Expand All @@ -215,9 +218,10 @@ public static OppgittPeriode forGradering(Stønadskontotype stønadskontotype,
LocalDate senestMottattDato,
LocalDate tidligstMottattDato,
MorsAktivitet morsAktivitet,
MorsStillingsprosent morsStillingsprosent,
DokumentasjonVurdering dokumentasjonVurdering) {
return new OppgittPeriode(stønadskontotype, fom, tom, false, arbeidsprosent, gradertAktiviteter, null, samtidigUttaksprosent, flerbarnsdager,
null, null, senestMottattDato, tidligstMottattDato, morsAktivitet, dokumentasjonVurdering);
null, null, senestMottattDato, tidligstMottattDato, morsAktivitet, morsStillingsprosent, dokumentasjonVurdering);
}

public static OppgittPeriode forVanligPeriode(Stønadskontotype stønadskontotype,
Expand All @@ -228,9 +232,10 @@ public static OppgittPeriode forVanligPeriode(Stønadskontotype stønadskontotyp
LocalDate senestMottattDato,
LocalDate tidligstMottattDato,
MorsAktivitet morsAktivitet,
MorsStillingsprosent morsStillingsprosent,
DokumentasjonVurdering dokumentasjonVurdering) {
return new OppgittPeriode(stønadskontotype, fom, tom, false, null, Set.of(), null, samtidigUttaksprosent, flerbarnsdager, null, null,
senestMottattDato, tidligstMottattDato, morsAktivitet, dokumentasjonVurdering);
senestMottattDato, tidligstMottattDato, morsAktivitet, morsStillingsprosent, dokumentasjonVurdering);
}

@Override
Expand Down Expand Up @@ -263,4 +268,9 @@ public String toString() {
+ utsettelseÅrsak + ", oppholdÅrsak=" + oppholdÅrsak + ", senestMottattDato=" + senestMottattDato + ", tidligstMottattDato="
+ tidligstMottattDato + ", aktiviteter=" + aktiviteter + ", dokumentasjonVurdering=" + dokumentasjonVurdering + '}';
}

public MorsStillingsprosent getMorsStillingsprosent() {
return morsStillingsprosent;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.SjekkOmUttakSkjerEtterDeFørsteUkene;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.aktkrav.SjekkOmMorErIAktivitet;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.aktkrav.SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.GraderingIkkeInnvilgetÅrsak;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfylt;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak;
Expand Down Expand Up @@ -205,14 +206,23 @@ private Specification<FastsettePeriodeGrunnlag> sjekkOmGradertePeriodenGjelderFl

private Specification<FastsettePeriodeGrunnlag> sjekkOmMorErIAktivitetIGradertPeriodeUtenFlerbarnsdager() {
return rs.hvisRegel(SjekkOmMorErIAktivitet.ID, SjekkOmMorErIAktivitet.BESKRIVELSE)
.hvis(new SjekkOmMorErIAktivitet(), Oppfylt.opprett("UT1272", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, true))
.hvis(new SjekkOmMorErIAktivitet(), sjekkOmMorErIArbeidMedStillingprosentUnder75Prosent())
.ellers(new AvslagAktivitetskravDelregel().getSpecification());
}

private Specification<FastsettePeriodeGrunnlag> sjekkOmMorErIArbeidMedStillingprosentUnder75Prosent() {
return rs.hvisRegel(SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent.ID, SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent.BESKRIVELSE)
.hvis(new SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent(), Manuellbehandling.opprett("UT1326", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, Manuellbehandlingårsak.AKTIVITETSKRAV_DELVIS_ARBEID, true, true))
.ellers(Oppfylt.opprett("UT1272", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, true));
}

private Specification<FastsettePeriodeGrunnlag> delFlytForVanligUttak() {
var sjekkOmMorErIArbeidMedStillingprosentUnder75Prosent = rs.hvisRegel(SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent.ID, SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent.BESKRIVELSE)
.hvis(new SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent(), Manuellbehandling.opprett("UT1327", InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, Manuellbehandlingårsak.AKTIVITETSKRAV_DELVIS_ARBEID, true, true))
.ellers(Oppfylt.opprett("UT1258", InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, true));

var sjekkOmMorErIAktivitetIPerioden = rs.hvisRegel(SjekkOmMorErIAktivitet.ID, SjekkOmMorErIAktivitet.BESKRIVELSE)
.hvis(new SjekkOmMorErIAktivitet(), Oppfylt.opprett("UT1258", InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, true))
.hvis(new SjekkOmMorErIAktivitet(), sjekkOmMorErIArbeidMedStillingprosentUnder75Prosent)
.ellers(new AvslagAktivitetskravDelregel().getSpecification());

var sjekkOmPeriodenGjelderFlerbarnsdager = rs.hvisRegel(SjekkOmPeriodenGjelderFlerbarnsdager.ID,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.SjekkOmUttakSkjerEtterDeFørsteUkene;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.SjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.aktkrav.SjekkOmMorErIAktivitet;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.aktkrav.SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.FastsettePeriodeUtfall;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.GraderingIkkeInnvilgetÅrsak;
import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfylt;
Expand Down Expand Up @@ -294,7 +295,19 @@ private Specification<FastsettePeriodeGrunnlag> sjekkOmAktivitetskravErOppfylt()

private Specification<FastsettePeriodeGrunnlag> sjekkGraderingVedKunFarMedmorRett() {
return rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE)
.hvis(new SjekkOmGradertPeriode(), Oppfylt.opprett("UT1315", InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT, true))
.hvis(new SjekkOmGradertPeriode(), sjekkOmMorErIArbeidMedStillingprosentUnder75ProsentMedGradering())
.ellers(sjekkOmMorErIArbeidMedStillingprosentUnder75Prosent());
}

private Specification<FastsettePeriodeGrunnlag> sjekkOmMorErIArbeidMedStillingprosentUnder75ProsentMedGradering() {
return rs.hvisRegel(SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent.ID, SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent.BESKRIVELSE)
.hvis(new SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent(), Manuellbehandling.opprett("UT1329", InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT, Manuellbehandlingårsak.AKTIVITETSKRAV_DELVIS_ARBEID, true, true))
.ellers(Oppfylt.opprett("UT1315", InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT, true));
}

private Specification<FastsettePeriodeGrunnlag> sjekkOmMorErIArbeidMedStillingprosentUnder75Prosent() {
return rs.hvisRegel(SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent.ID, SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent.BESKRIVELSE)
.hvis(new SjekkOmMorErIArbeidMedStillingprosentUnder75Prosent(), Manuellbehandling.opprett("UT1328", InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT, Manuellbehandlingårsak.AKTIVITETSKRAV_DELVIS_ARBEID, true, true))
.ellers(Oppfylt.opprett("UT1316", InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT, true));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public enum Manuellbehandlingårsak {
OVERLAPPENDE_PLEIEPENGER_UTEN_INNLEGGELSE(5029, "Innvilget pleiepenger uten innleggelse, vurder riktig ytelse"),
FAR_SØKER_FØR_FØDSEL(5030, "Far/medmor periode før fødsel/omsorg"),
VURDER_OM_UTSETTELSE(5031, "Vurder om det skal være utsettelse i perioden"),
;
AKTIVITETSKRAV_DELVIS_ARBEID(5032, "Mor jobber under 75 prosent");

private final int id;
private final String beskrivelse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas
//Mottatt mer enn 3 mnd etter start
.oppgittPeriode(
OppgittPeriode.forVanligPeriode(FORELDREPENGER, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(1).minusDays(1), null,
false, omsorgsovertakelseDato.plusMonths(4), omsorgsovertakelseDato.plusMonths(4), null, null)))
false, omsorgsovertakelseDato.plusMonths(4), omsorgsovertakelseDato.plusMonths(4), null, null, null)))
.adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelseDato))
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ void kun_far_har_rett() {
var fødselsdato = LocalDate.of(2018, 1, 1);
var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 100));
var oppgittPeriode = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10), null, false,
fødselsdato, fødselsdato, UTDANNING, MORS_AKTIVITET_IKKE_DOKUMENTERT);
fødselsdato, fødselsdato, UTDANNING, null, MORS_AKTIVITET_IKKE_DOKUMENTERT);
var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode);

var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling())
Expand Down Expand Up @@ -339,12 +339,12 @@ private Kontoer.Builder kontoerMedFellesperiode() {

private OppgittPeriode foreldrepenger(LocalDate fødselsdato, MorsAktivitet morsAktivitet) {
return OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(15).minusDays(1), null, false,
fødselsdato, fødselsdato, morsAktivitet, null);
fødselsdato, fødselsdato, morsAktivitet, null, null);
}

private OppgittPeriode fellesperiode(LocalDate fødselsdato, MorsAktivitet morsAktivitet, DokumentasjonVurdering dokumentasjonVurdering) {
return OppgittPeriode.forVanligPeriode(FELLESPERIODE, fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(15).minusDays(1), null, false,
fødselsdato, fødselsdato, morsAktivitet, dokumentasjonVurdering);
fødselsdato, fødselsdato, morsAktivitet, null, dokumentasjonVurdering);
}

private static Stream<Arguments> dokumentasjonOgAvslagKombinasjoner() {
Expand Down
Loading

0 comments on commit 42fcd53

Please sign in to comment.