diff --git a/LICENSE.md b/LICENSE.md index d2e1b746..8497bee3 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -18,4 +18,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index b98b59c1..8b3d24dd 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ fp-uttak -================ +======== + [![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=navikt_fp-uttak&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=navikt_fp-uttak) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=navikt_fp-uttak&metric=coverage)](https://sonarcloud.io/summary/new_code?id=navikt_fp-uttak) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=navikt_fp-uttak&metric=alert_status)](https://sonarcloud.io/dashboard?id=navikt_fp-uttak) diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/UttakParametre.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/UttakParametre.java index f8cac23a..cdd14fb1 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/UttakParametre.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/UttakParametre.java @@ -2,51 +2,46 @@ import java.time.LocalDate; import java.util.Optional; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.FarUttakRundtFødsel; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.Konfigurasjon; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.Parametertype; public class UttakParametre { - private UttakParametre() { - } + private UttakParametre() {} - /** - * Grenser for mors uttak og periode forbeholdt mor - */ + /** Grenser for mors uttak og periode forbeholdt mor */ public static int ukerFørTerminTidligstUttak(LocalDate dato) { - return Konfigurasjon.STANDARD.getParameter(Parametertype.TIDLIGST_UTTAK_FØR_TERMIN_UKER, dato); + return Konfigurasjon.STANDARD.getParameter( + Parametertype.TIDLIGST_UTTAK_FØR_TERMIN_UKER, dato); } public static int ukerFørTerminSenestUttak(LocalDate dato) { - return Konfigurasjon.STANDARD.getParameter(Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, dato); + return Konfigurasjon.STANDARD.getParameter( + Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, dato); } public static int ukerReservertMorEtterFødsel(LocalDate dato) { - return Konfigurasjon.STANDARD.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, dato); + return Konfigurasjon.STANDARD.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, dato); } - /** - * Grenser for fars/medmors uttak i forbindelse med fødsel. - */ - public static Optional utledFarsPeriodeRundtFødsel(boolean utenFarUttakRundtFødsel, - boolean gjelderFødsel, - LocalDate familieHendelseDato, - LocalDate terminDato) { - return FarUttakRundtFødsel.utledFarsPeriodeRundtFødsel(utenFarUttakRundtFødsel, gjelderFødsel, familieHendelseDato, terminDato); + /** Grenser for fars/medmors uttak i forbindelse med fødsel. */ + public static Optional utledFarsPeriodeRundtFødsel( + boolean utenFarUttakRundtFødsel, + boolean gjelderFødsel, + LocalDate familieHendelseDato, + LocalDate terminDato) { + return FarUttakRundtFødsel.utledFarsPeriodeRundtFødsel( + utenFarUttakRundtFødsel, gjelderFødsel, familieHendelseDato, terminDato); } - /** - * Dødsfall - */ + /** Dødsfall */ public static int ukerTilgjengeligEtterDødsfall(LocalDate dato) { return Konfigurasjon.STANDARD.getParameter(Parametertype.UTTAK_ETTER_BARN_DØDT_UKER, dato); } - /** - * Stønadsperiode - */ + /** Stønadsperiode */ public static int ukerMellomTetteFødsler(LocalDate dato) { return Konfigurasjon.STANDARD.getParameter(Parametertype.TETTE_SAKER_MELLOMROM_UKER, dato); } @@ -54,6 +49,4 @@ private UttakParametre() { public static int årMaksimalStønadsperiode(LocalDate dato) { return Konfigurasjon.STANDARD.getParameter(Parametertype.GRENSE_ETTER_FØDSELSDATO_ÅR, dato); } - - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeGrunnlag.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeGrunnlag.java index 8ef1249b..ca14fa3b 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeGrunnlag.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeGrunnlag.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.Optional; import java.util.Set; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Adopsjon; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; @@ -20,7 +19,8 @@ import no.nav.fpsak.nare.doc.RuleDocumentationGrunnlag; /** - * Interface for fastsette periode grunnlaget. Det er kun dette interfacet som skal brukes i selve regelen. + * Interface for fastsette periode grunnlaget. Det er kun dette interfacet som skal brukes i selve + * regelen. */ @RuleDocumentationGrunnlag public interface FastsettePeriodeGrunnlag { @@ -45,7 +45,8 @@ public interface FastsettePeriodeGrunnlag { Søknadstype getSøknadstype(); /** - * Finner dato for familiehendelsen som søknaden gjelder. Kan være dato for termin, fødsel eller omsorgsovertakelse. + * Finner dato for familiehendelsen som søknaden gjelder. Kan være dato for termin, fødsel eller + * omsorgsovertakelse. * * @return dato for familiehendelse. */ @@ -86,7 +87,6 @@ public interface FastsettePeriodeGrunnlag { * * @return true dersom rett. */ - boolean isMorRett(); /** @@ -104,16 +104,15 @@ public interface FastsettePeriodeGrunnlag { boolean isBareFarHarRettMorUføretrygd(); /** - * Har saken perioder uten aktivitetskrav iht 14-14 tredje ledd - * Slike saker skal ikke ha minsterett. + * Har saken perioder uten aktivitetskrav iht 14-14 tredje ledd Slike saker skal ikke ha + * minsterett. * * @return true dersom saken tilsier dager uten aktivitetskrav. */ boolean isSakMedDagerUtenAktivitetskrav(); /** - * Har saken en minsterett for uttak. - * Slike saker skal ikke ha dager uten aktivitetskrav. + * Har saken en minsterett for uttak. Slike saker skal ikke ha dager uten aktivitetskrav. * * @return true dersom saken tilsier en minsterett for uttak. */ @@ -139,54 +138,34 @@ public interface FastsettePeriodeGrunnlag { boolean harAleneomsorg(); - /** - * Om det finnes en opphørsdato der søker ikke lengre oppfyller medlemskapsvilkåret - */ + /** Om det finnes en opphørsdato der søker ikke lengre oppfyller medlemskapsvilkåret */ LocalDate getOpphørsdatoForMedlemskap(); - /** - * Om det finnes en dødsdato for søker - */ + /** Om det finnes en dødsdato for søker */ LocalDate getDødsdatoForSøker(); - /** - * Om det finnes en dødsdato for barn - */ + /** Om det finnes en dødsdato for barn */ LocalDate getDødsdatoForBarn(); - /** - * Om alle barn er døde eller ikke - */ + /** Om alle barn er døde eller ikke */ boolean erAlleBarnDøde(); - /** - * Aktuell periode begyunner på eller etter startdato neste stønadsperiode - */ + /** Aktuell periode begyunner på eller etter startdato neste stønadsperiode */ boolean erAktuellPeriodeEtterStartNesteStønadsperiode(); - /** - * Inngangsvilkår - */ + /** Inngangsvilkår */ Inngangsvilkår getInngangsvilkår(); - /** - * Adopsjon - */ + /** Adopsjon */ Adopsjon getAdopsjon(); - /** - * Søkers stønadskontotyper - */ + /** Søkers stønadskontotyper */ Set getGyldigeStønadskontotyper(); - /** - * Fødselsdato - */ + /** Fødselsdato */ LocalDate getFødselsdato(); - /** - * Termindato - */ + /** Termindato */ LocalDate getTermindato(); boolean isBerørtBehandling(); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeGrunnlagImpl.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeGrunnlagImpl.java index 4090fdf7..1fb28f1c 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeGrunnlagImpl.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeGrunnlagImpl.java @@ -7,7 +7,6 @@ import java.util.List; import java.util.Optional; import java.util.Set; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Adopsjon; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; @@ -33,10 +32,11 @@ public class FastsettePeriodeGrunnlagImpl implements FastsettePeriodeGrunnlag { private final LukketPeriode farRundtFødselIntervall; - public FastsettePeriodeGrunnlagImpl(RegelGrunnlag regelGrunnlag, - LukketPeriode farRundtFødselIntervall, - SaldoUtregning saldoUtregning, - OppgittPeriode aktuellPeriode) { + public FastsettePeriodeGrunnlagImpl( + RegelGrunnlag regelGrunnlag, + LukketPeriode farRundtFødselIntervall, + SaldoUtregning saldoUtregning, + OppgittPeriode aktuellPeriode) { this.regelGrunnlag = regelGrunnlag; this.saldoUtregning = saldoUtregning; this.aktuellPeriode = aktuellPeriode; @@ -55,12 +55,13 @@ public Arbeid getArbeid() { @Override public List getPleiepengerInnleggelse() { - return regelGrunnlag.getYtelser() - .pleiepenger() - .map(pleiepengerMedInnleggelse -> pleiepengerMedInnleggelse.innleggelser()) - .orElse(List.of()) - .stream() - .toList(); + return regelGrunnlag + .getYtelser() + .pleiepenger() + .map(pleiepengerMedInnleggelse -> pleiepengerMedInnleggelse.innleggelser()) + .orElse(List.of()) + .stream() + .toList(); } @Override @@ -111,19 +112,28 @@ public boolean isMorRett() { @Override public boolean isSakMedMinsterett() { return regelGrunnlag.getKontoer().harSpesialkonto(Spesialkontotype.BARE_FAR_MINSTERETT) - && regelGrunnlag.getKontoer().getSpesialkontoTrekkdager(Spesialkontotype.BARE_FAR_MINSTERETT) > 0; + && regelGrunnlag + .getKontoer() + .getSpesialkontoTrekkdager(Spesialkontotype.BARE_FAR_MINSTERETT) + > 0; } @Override public boolean isSakMedDagerUtenAktivitetskrav() { return regelGrunnlag.getKontoer().harSpesialkonto(Spesialkontotype.UTEN_AKTIVITETSKRAV) - && regelGrunnlag.getKontoer().getSpesialkontoTrekkdager(Spesialkontotype.UTEN_AKTIVITETSKRAV) > 0; + && regelGrunnlag + .getKontoer() + .getSpesialkontoTrekkdager(Spesialkontotype.UTEN_AKTIVITETSKRAV) + > 0; } @Override public boolean isSakMedRettEtterStartNesteStønadsperiode() { return regelGrunnlag.getKontoer().harSpesialkonto(Spesialkontotype.TETTE_FØDSLER) - && regelGrunnlag.getKontoer().getSpesialkontoTrekkdager(Spesialkontotype.TETTE_FØDSLER) > 0; + && regelGrunnlag + .getKontoer() + .getSpesialkontoTrekkdager(Spesialkontotype.TETTE_FØDSLER) + > 0; } @Override @@ -133,12 +143,16 @@ public SaldoUtregning getSaldoUtregning() { @Override public List getAnnenPartUttaksperioder() { - return regelGrunnlag.getAnnenPart() != null ? regelGrunnlag.getAnnenPart().getUttaksperioder() : Collections.emptyList(); + return regelGrunnlag.getAnnenPart() != null + ? regelGrunnlag.getAnnenPart().getUttaksperioder() + : Collections.emptyList(); } @Override public LocalDateTime getAnnenPartSisteSøknadMottattTidspunkt() { - return Optional.ofNullable(regelGrunnlag.getAnnenPart()).map(AnnenPart::getSisteSøknadMottattTidspunkt).orElse(null); + return Optional.ofNullable(regelGrunnlag.getAnnenPart()) + .map(AnnenPart::getSisteSøknadMottattTidspunkt) + .orElse(null); } @Override @@ -148,28 +162,39 @@ public boolean harAleneomsorg() { @Override public LocalDate getOpphørsdatoForMedlemskap() { - return regelGrunnlag.getMedlemskap() == null ? null : regelGrunnlag.getMedlemskap().getOpphørsdato(); + return regelGrunnlag.getMedlemskap() == null + ? null + : regelGrunnlag.getMedlemskap().getOpphørsdato(); } @Override public LocalDate getDødsdatoForSøker() { - return regelGrunnlag.getDatoer().getDødsdatoer() == null ? null : regelGrunnlag.getDatoer().getDødsdatoer().getSøkersDødsdato(); + return regelGrunnlag.getDatoer().getDødsdatoer() == null + ? null + : regelGrunnlag.getDatoer().getDødsdatoer().getSøkersDødsdato(); } @Override public LocalDate getDødsdatoForBarn() { - return regelGrunnlag.getDatoer().getDødsdatoer() == null ? null : regelGrunnlag.getDatoer().getDødsdatoer().getBarnsDødsdato(); + return regelGrunnlag.getDatoer().getDødsdatoer() == null + ? null + : regelGrunnlag.getDatoer().getDødsdatoer().getBarnsDødsdato(); } @Override public boolean erAlleBarnDøde() { - return regelGrunnlag.getDatoer().getDødsdatoer() != null && regelGrunnlag.getDatoer().getDødsdatoer().erAlleBarnDøde(); + return regelGrunnlag.getDatoer().getDødsdatoer() != null + && regelGrunnlag.getDatoer().getDødsdatoer().erAlleBarnDøde(); } @Override public boolean erAktuellPeriodeEtterStartNesteStønadsperiode() { var fom = aktuellPeriode.getFom(); - return regelGrunnlag.getDatoer().getStartdatoNesteStønadsperiode().filter(d -> !fom.isBefore(d)).isPresent(); + return regelGrunnlag + .getDatoer() + .getStartdatoNesteStønadsperiode() + .filter(d -> !fom.isBefore(d)) + .isPresent(); } @Override @@ -204,7 +229,9 @@ public LocalDate getTermindato() { @Override public LocalDateTime getSisteSøknadMottattTidspunkt() { - return Optional.ofNullable(regelGrunnlag.getSøknad()).map(Søknad::getMottattTidspunkt).orElse(null); + return Optional.ofNullable(regelGrunnlag.getSøknad()) + .map(Søknad::getMottattTidspunkt) + .orElse(null); } @Override diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeResultat.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeResultat.java index 3301544e..62e4e0ad 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeResultat.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeResultat.java @@ -1,24 +1,37 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode; import java.util.Objects; - 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.UttakPeriode; -public record FastsettePeriodeResultat(UttakPeriode uttakPeriode, String evalueringResultat, String innsendtGrunnlag, - OppgittPeriode periodeEtterKnekk, String versjon) { +public record FastsettePeriodeResultat( + UttakPeriode uttakPeriode, + String evalueringResultat, + String innsendtGrunnlag, + OppgittPeriode periodeEtterKnekk, + String versjon) { public FastsettePeriodeResultat { Objects.requireNonNull(uttakPeriode); } - public FastsettePeriodeResultat(UttakPeriode uttakPeriode, String evalueringResultat, String innsendtGrunnlag, OppgittPeriode periodeEtterKnekk) { - this(uttakPeriode, evalueringResultat, innsendtGrunnlag, periodeEtterKnekk, UttakVersion.UTTAK_VERSION.version()); + public FastsettePeriodeResultat( + UttakPeriode uttakPeriode, + String evalueringResultat, + String innsendtGrunnlag, + OppgittPeriode periodeEtterKnekk) { + this( + uttakPeriode, + evalueringResultat, + innsendtGrunnlag, + periodeEtterKnekk, + UttakVersion.UTTAK_VERSION.version()); } public boolean isManuellBehandling() { - return Perioderesultattype.MANUELL_BEHANDLING.equals(uttakPeriode().getPerioderesultattype()); + return Perioderesultattype.MANUELL_BEHANDLING.equals( + uttakPeriode().getPerioderesultattype()); } boolean harFørtTilKnekk() { diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelOrkestrering.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelOrkestrering.java index 4a1a7328..7edd4ba7 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelOrkestrering.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelOrkestrering.java @@ -10,7 +10,6 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; - import no.nav.foreldrepenger.regler.feil.UttakRegelFeil; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; @@ -49,27 +48,46 @@ public class FastsettePerioderRegelOrkestrering { public List fastsettePerioder(RegelGrunnlag grunnlag) { - var fastsettePeriodeRegel = new FastsettePeriodeRegel(); var orkestreringTillegg = lagOrkestreringTillegg(grunnlag); - var allePerioderSomSkalFastsettes = samletUttaksperioder(grunnlag, orkestreringTillegg).stream() - .filter(periode -> !erHelg(periode)) - .filter(periode -> !oppholdSomFyllesAvAnnenpart(periode, annenpartUttaksperioder(grunnlag))) - .filter(periode -> grunnlag.getBehandling().isKreverSammenhengendeUttak() || !periode.isOpphold()) - .map(periode -> oppdaterMedAktiviteter(periode, grunnlag.getArbeid())) - .toList(); + var allePerioderSomSkalFastsettes = + samletUttaksperioder(grunnlag, orkestreringTillegg).stream() + .filter(periode -> !erHelg(periode)) + .filter( + periode -> + !oppholdSomFyllesAvAnnenpart( + periode, annenpartUttaksperioder(grunnlag))) + .filter( + periode -> + grunnlag.getBehandling().isKreverSammenhengendeUttak() + || !periode.isOpphold()) + .map(periode -> oppdaterMedAktiviteter(periode, grunnlag.getArbeid())) + .toList(); validerOverlapp(map(allePerioderSomSkalFastsettes)); - var farRundtFødselIntervall = FarUttakRundtFødsel.utledFarsPeriodeRundtFødsel(grunnlag).orElse(null); + var farRundtFødselIntervall = + FarUttakRundtFødsel.utledFarsPeriodeRundtFødsel(grunnlag).orElse(null); var resultatPerioder = new ArrayList(); for (var aktuellPeriode : allePerioderSomSkalFastsettes) { FastsettePeriodeResultat resultat; + do { - var saldoUtregningGrunnlag = saldoGrunnlag(grunnlag, resultatPerioder, aktuellPeriode, allePerioderSomSkalFastsettes); + var saldoUtregningGrunnlag = + saldoGrunnlag( + grunnlag, + resultatPerioder, + aktuellPeriode, + allePerioderSomSkalFastsettes); var saldoUtregning = lagUtregning(saldoUtregningGrunnlag); - resultat = fastsettPeriode(fastsettePeriodeRegel, grunnlag, aktuellPeriode, saldoUtregning, farRundtFødselIntervall); + resultat = + fastsettPeriode( + fastsettePeriodeRegel, + grunnlag, + aktuellPeriode, + saldoUtregning, + farRundtFødselIntervall); resultatPerioder.add(resultat); validerOverlapp(map(resultatPerioder)); if (resultat.harFørtTilKnekk()) { @@ -78,7 +96,7 @@ public List fastsettePerioder(RegelGrunnlag grunnlag) } while (resultat.harFørtTilKnekk()); } - //Bare for å sikre rekkefølge + // Bare for å sikre rekkefølge return sortByFom(resultatPerioder); } @@ -89,18 +107,23 @@ private OppgittPeriode oppdaterMedAktiviteter(OppgittPeriode periode, Arbeid arb } private Set aktiviteterIPeriode(OppgittPeriode periode, Arbeid arbeid) { - var aktiviteter = arbeid.getArbeidsforhold() - .stream() - .filter(arbeidsforhold -> arbeid.getArbeidsforhold().size() == 1 || arbeidsforhold.erAktivtPåDato(periode.getFom())) - .map(Arbeidsforhold::identifikator) - .collect(Collectors.toSet()); - //Vi kan opprette manglende søkt i en periode som ikke har noe arbeid. Typisk bare far rett og søker ikke fra uke 7 + var aktiviteter = + arbeid.getArbeidsforhold().stream() + .filter( + arbeidsforhold -> + arbeid.getArbeidsforhold().size() == 1 + || arbeidsforhold.erAktivtPåDato(periode.getFom())) + .map(Arbeidsforhold::identifikator) + .collect(Collectors.toSet()); + // Vi kan opprette manglende søkt i en periode som ikke har noe arbeid. Typisk bare far rett + // og + // søker ikke fra uke 7 if (aktiviteter.isEmpty()) { - var aktivitetMedTidligstStartdato = arbeid.getArbeidsforhold() - .stream() - .min(Comparator.comparing(Arbeidsforhold::startdato)) - .map(a -> a.identifikator()) - .orElseThrow(); + var aktivitetMedTidligstStartdato = + arbeid.getArbeidsforhold().stream() + .min(Comparator.comparing(Arbeidsforhold::startdato)) + .map(a -> a.identifikator()) + .orElseThrow(); aktiviteter.add(aktivitetMedTidligstStartdato); } return aktiviteter; @@ -110,11 +133,14 @@ private boolean erHelg(OppgittPeriode periode) { return periode.virkedager() == 0; } - private boolean oppholdSomFyllesAvAnnenpart(OppgittPeriode periode, List annenpartUttak) { + private boolean oppholdSomFyllesAvAnnenpart( + OppgittPeriode periode, List annenpartUttak) { if (!periode.isOpphold()) { return false; } - return annenpartUttak.stream().filter(ap -> ap.overlapper(periode)).anyMatch(ap -> harTrekkdager(ap) || innvilgetUtsettelse(ap)); + return annenpartUttak.stream() + .filter(ap -> ap.overlapper(periode)) + .anyMatch(ap -> harTrekkdager(ap) || innvilgetUtsettelse(ap)); } private boolean innvilgetUtsettelse(AnnenpartUttakPeriode ap) { @@ -125,29 +151,46 @@ private boolean harTrekkdager(AnnenpartUttakPeriode ap) { return ap.getAktiviteter().stream().anyMatch(a -> a.getTrekkdager().merEnn0()); } - private List sortByFom(List resultatPerioder) { - return resultatPerioder.stream().sorted(Comparator.comparing(res -> res.uttakPeriode().getFom())).toList(); + private List sortByFom( + List resultatPerioder) { + return resultatPerioder.stream() + .sorted(Comparator.comparing(res -> res.uttakPeriode().getFom())) + .toList(); } - private FastsettePeriodeResultat fastsettPeriode(FastsettePeriodeRegel fastsettePeriodeRegel, - RegelGrunnlag grunnlag, - OppgittPeriode aktuellPeriode, - SaldoUtregning saldoUtregning, - LukketPeriode farRundtFødselIntervall) { - var fastsettePeriodeGrunnlag = new FastsettePeriodeGrunnlagImpl(grunnlag, farRundtFødselIntervall, saldoUtregning, aktuellPeriode); + private FastsettePeriodeResultat fastsettPeriode( + FastsettePeriodeRegel fastsettePeriodeRegel, + RegelGrunnlag grunnlag, + OppgittPeriode aktuellPeriode, + SaldoUtregning saldoUtregning, + LukketPeriode farRundtFødselIntervall) { + var fastsettePeriodeGrunnlag = + new FastsettePeriodeGrunnlagImpl( + grunnlag, farRundtFødselIntervall, saldoUtregning, aktuellPeriode); var regelResultatBehandler = new RegelResultatBehandler(saldoUtregning, grunnlag); var evaluering = fastsettePeriodeRegel.evaluer(fastsettePeriodeGrunnlag); var inputJson = toJson(fastsettePeriodeGrunnlag); - var regelJson = EvaluationSerializer.asJson(evaluering, UttakVersion.UTTAK_VERSION, NareVersion.NARE_VERSION); - var regelResultatBehandlerResultat = behandleRegelresultat(evaluering, fastsettePeriodeGrunnlag, regelResultatBehandler, grunnlag, - saldoUtregning); - - return new FastsettePeriodeResultat(regelResultatBehandlerResultat.getPeriode(), regelJson, inputJson, - regelResultatBehandlerResultat.getEtterKnekkPeriode()); + var regelJson = + EvaluationSerializer.asJson( + evaluering, UttakVersion.UTTAK_VERSION, NareVersion.NARE_VERSION); + var regelResultatBehandlerResultat = + behandleRegelresultat( + evaluering, + fastsettePeriodeGrunnlag, + regelResultatBehandler, + grunnlag, + saldoUtregning); + + return new FastsettePeriodeResultat( + regelResultatBehandlerResultat.getPeriode(), + regelJson, + inputJson, + regelResultatBehandlerResultat.getEtterKnekkPeriode()); } - private List samletUttaksperioder(RegelGrunnlag grunnlag, OrkestreringTillegg orkestreringTillegg) { + private List samletUttaksperioder( + RegelGrunnlag grunnlag, OrkestreringTillegg orkestreringTillegg) { List samlet = new ArrayList<>(grunnlag.getSøknad().getOppgittePerioder()); samlet.addAll(orkestreringTillegg.getManglendeSøktPerioder()); @@ -161,9 +204,13 @@ private List samletUttaksperioder(RegelGrunnlag grunnlag, Orkest private List knekk(List førKnekk, LocalDate knekkpunkt) { List etterKnekk = new ArrayList<>(); for (var oppgittPeriode : førKnekk) { - if (oppgittPeriode.overlapper(knekkpunkt) && !oppgittPeriode.getFom().equals(knekkpunkt)) { - etterKnekk.add(oppgittPeriode.kopiMedNyPeriode(oppgittPeriode.getFom(), knekkpunkt.minusDays(1))); - etterKnekk.add(oppgittPeriode.kopiMedNyPeriode(knekkpunkt, oppgittPeriode.getTom())); + if (oppgittPeriode.overlapper(knekkpunkt) + && !oppgittPeriode.getFom().equals(knekkpunkt)) { + etterKnekk.add( + oppgittPeriode.kopiMedNyPeriode( + oppgittPeriode.getFom(), knekkpunkt.minusDays(1))); + etterKnekk.add( + oppgittPeriode.kopiMedNyPeriode(knekkpunkt, oppgittPeriode.getTom())); } else { etterKnekk.add(oppgittPeriode); } @@ -180,108 +227,162 @@ private OrkestreringTillegg lagOrkestreringTillegg(RegelGrunnlag grunnlag) { private List finnManglendeSøktePerioder(RegelGrunnlag grunnlag) { if (grunnlag.getBehandling().isKreverSammenhengendeUttak()) { - return ManglendeSøktePerioderForSammenhengendeUttakTjeneste.finnManglendeSøktePerioder(grunnlag); + return ManglendeSøktePerioderForSammenhengendeUttakTjeneste.finnManglendeSøktePerioder( + grunnlag); } return ManglendeSøktePerioderTjeneste.finnManglendeSøktePerioder(grunnlag); } - private RegelResultatBehandlerResultat behandleRegelresultat(Evaluation evaluering, - FastsettePeriodeGrunnlag fastsettePeriodeGrunnlag, - RegelResultatBehandler behandler, - RegelGrunnlag regelGrunnlag, - SaldoUtregning saldoUtregning) { + private RegelResultatBehandlerResultat behandleRegelresultat( + Evaluation evaluering, + FastsettePeriodeGrunnlag fastsettePeriodeGrunnlag, + RegelResultatBehandler behandler, + RegelGrunnlag regelGrunnlag, + SaldoUtregning saldoUtregning) { var aktuellPeriode = fastsettePeriodeGrunnlag.getAktuellPeriode(); var regelresultat = new FastsettePerioderRegelresultat(evaluering); var utfallType = regelresultat.getUtfallType(); - var knekkpunktOpt = finnKnekkpunkt(aktuellPeriode, regelGrunnlag, saldoUtregning, regelresultat, - fastsettePeriodeGrunnlag.periodeFarRundtFødsel().orElse(null)); + var knekkpunktOpt = + finnKnekkpunkt( + aktuellPeriode, + regelGrunnlag, + saldoUtregning, + regelresultat, + fastsettePeriodeGrunnlag.periodeFarRundtFødsel().orElse(null)); - var annenpartSamtidigUttaksprosent = SamtidigUttakUtil.kanRedusereUtbetalingsgradForTapende(fastsettePeriodeGrunnlag, - regelGrunnlag) ? SamtidigUttakUtil.uttaksprosentAnnenpart(fastsettePeriodeGrunnlag) : SamtidigUttaksprosent.ZERO; + var annenpartSamtidigUttaksprosent = + SamtidigUttakUtil.kanRedusereUtbetalingsgradForTapende( + fastsettePeriodeGrunnlag, regelGrunnlag) + ? SamtidigUttakUtil.uttaksprosentAnnenpart(fastsettePeriodeGrunnlag) + : SamtidigUttaksprosent.ZERO; return switch (utfallType) { - case AVSLÅTT -> behandler.avslåAktuellPeriode(aktuellPeriode, regelresultat, knekkpunktOpt, - overlapperMedInnvilgetAnnenpartsPeriode(aktuellPeriode, annenpartUttaksperioder(regelGrunnlag))); - case INNVILGET -> behandler.innvilgAktuellPeriode(aktuellPeriode, knekkpunktOpt, regelresultat, annenpartSamtidigUttaksprosent); + 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 List annenpartUttaksperioder(RegelGrunnlag regelGrunnlag) { - return regelGrunnlag.getAnnenPart() == null ? Collections.emptyList() : regelGrunnlag.getAnnenPart().getUttaksperioder(); + return regelGrunnlag.getAnnenPart() == null + ? Collections.emptyList() + : regelGrunnlag.getAnnenPart().getUttaksperioder(); } - private boolean overlapperMedInnvilgetAnnenpartsPeriode(OppgittPeriode aktuellPeriode, List annenPartUttaksperioder) { + private boolean overlapperMedInnvilgetAnnenpartsPeriode( + OppgittPeriode aktuellPeriode, List annenPartUttaksperioder) { return annenPartUttaksperioder.stream() - .anyMatch(annenpartsPeriode -> annenpartsPeriode.overlapper(aktuellPeriode) && annenpartsPeriode.isInnvilget()); + .anyMatch( + annenpartsPeriode -> + annenpartsPeriode.overlapper(aktuellPeriode) + && annenpartsPeriode.isInnvilget()); } - private Optional finnKnekkpunkt(OppgittPeriode aktuellPeriode, - RegelGrunnlag regelGrunnlag, - SaldoUtregning saldoUtregning, - FastsettePerioderRegelresultat regelresultat, - LukketPeriode farRundtFødselIntervall) { + private Optional finnKnekkpunkt( + OppgittPeriode aktuellPeriode, + RegelGrunnlag regelGrunnlag, + SaldoUtregning saldoUtregning, + FastsettePerioderRegelresultat regelresultat, + LukketPeriode farRundtFødselIntervall) { if (erFPFF(aktuellPeriode)) { return Optional.empty(); } var stønadskontotype = utledKonto(aktuellPeriode, regelGrunnlag, saldoUtregning); - var startdatoNesteStønadsperiode = regelGrunnlag.getDatoer().getStartdatoNesteStønadsperiode().orElse(null); - return TomKontoIdentifiserer.identifiser(aktuellPeriode, new ArrayList<>(aktuellPeriode.getAktiviteter()), saldoUtregning, - stønadskontotype.orElse(null), farRundtFødselIntervall, startdatoNesteStønadsperiode, regelresultat.trekkDagerFraSaldo(), - regelresultat.getAvklaringÅrsak(), regelresultat.getUtfallType()); + var startdatoNesteStønadsperiode = + regelGrunnlag.getDatoer().getStartdatoNesteStønadsperiode().orElse(null); + return TomKontoIdentifiserer.identifiser( + aktuellPeriode, + new ArrayList<>(aktuellPeriode.getAktiviteter()), + saldoUtregning, + stønadskontotype.orElse(null), + farRundtFødselIntervall, + startdatoNesteStønadsperiode, + regelresultat.trekkDagerFraSaldo(), + regelresultat.getAvklaringÅrsak(), + regelresultat.getUtfallType()); } - private Optional utledKonto(OppgittPeriode aktuellPeriode, RegelGrunnlag regelGrunnlag, SaldoUtregning saldoUtregning) { + private Optional utledKonto( + OppgittPeriode aktuellPeriode, + RegelGrunnlag regelGrunnlag, + SaldoUtregning saldoUtregning) { return Optional.ofNullable(aktuellPeriode.getStønadskontotype()) - .or(() -> ValgAvStønadskontoTjeneste.velgStønadskonto(aktuellPeriode, regelGrunnlag, saldoUtregning)); + .or( + () -> + ValgAvStønadskontoTjeneste.velgStønadskonto( + aktuellPeriode, regelGrunnlag, saldoUtregning)); } private boolean erFPFF(OppgittPeriode aktuellPeriode) { - return Stønadskontotype.FORELDREPENGER_FØR_FØDSEL.equals(aktuellPeriode.getStønadskontotype()); + return Stønadskontotype.FORELDREPENGER_FØR_FØDSEL.equals( + aktuellPeriode.getStønadskontotype()); } private String toJson(FastsettePeriodeGrunnlag grunnlag) { try { return JsonOutput.asJson(grunnlag); } catch (NareJsonException e) { - throw new UttakRegelFeil("Kunne ikke serialisere regelinput for avklaring av uttaksperioder.", e); + throw new UttakRegelFeil( + "Kunne ikke serialisere regelinput for avklaring av uttaksperioder.", e); } } - private SaldoUtregningGrunnlag saldoGrunnlag(RegelGrunnlag grunnlag, - List resultatPerioder, - OppgittPeriode aktuellPeriode, - List allePerioderSomSkalFastsettes) { - List annenpartPerioder = Optional.ofNullable(grunnlag.getAnnenPart()) - .map(AnnenPart::getUttaksperioder) - .orElse(List.of()); + private SaldoUtregningGrunnlag saldoGrunnlag( + RegelGrunnlag grunnlag, + List resultatPerioder, + OppgittPeriode aktuellPeriode, + List allePerioderSomSkalFastsettes) { + List annenpartPerioder = + Optional.ofNullable(grunnlag.getAnnenPart()) + .map(AnnenPart::getUttaksperioder) + .orElse(List.of()); var vedtaksperioder = vedtaksperioder(grunnlag); var søkersFastsattePerioder = map(resultatPerioder, vedtaksperioder); var utregningsdato = aktuellPeriode.getFom(); if (grunnlag.getBehandling().isBerørtBehandling()) { var søktePerioder = new ArrayList(allePerioderSomSkalFastsettes); - return SaldoUtregningGrunnlag.forUtregningAvDelerAvUttakBerørtBehandling(søkersFastsattePerioder, annenpartPerioder, grunnlag, - utregningsdato, søktePerioder); + return SaldoUtregningGrunnlag.forUtregningAvDelerAvUttakBerørtBehandling( + søkersFastsattePerioder, + annenpartPerioder, + grunnlag, + utregningsdato, + søktePerioder); } - return SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(søkersFastsattePerioder, annenpartPerioder, grunnlag, utregningsdato); + return SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + søkersFastsattePerioder, annenpartPerioder, grunnlag, utregningsdato); } private List vedtaksperioder(RegelGrunnlag grunnlag) { - return Optional.ofNullable(grunnlag.getRevurdering()).map(Revurdering::getGjeldendeVedtak).map(Vedtak::getPerioder).orElse(List.of()); + return Optional.ofNullable(grunnlag.getRevurdering()) + .map(Revurdering::getGjeldendeVedtak) + .map(Vedtak::getPerioder) + .orElse(List.of()); } private FastsattUttakPeriode map(UttakPeriode periode) { - return new FastsattUttakPeriode.Builder().tidsperiode(periode.getFom(), periode.getTom()) - .aktiviteter(mapAktiviteter(periode)) - .flerbarnsdager(periode.isFlerbarnsdager()) - .resultatÅrsak(mapTilÅrsak(periode.getPeriodeResultatÅrsak())) - .utsettelse(periode.getUtsettelseÅrsak() != null) - .oppholdÅrsak(periode.getOppholdÅrsak()) - .samtidigUttak(periode.erSamtidigUttak()) - .periodeResultatType(periode.getPerioderesultattype()) - .build(); + return new FastsattUttakPeriode.Builder() + .tidsperiode(periode.getFom(), periode.getTom()) + .aktiviteter(mapAktiviteter(periode)) + .flerbarnsdager(periode.isFlerbarnsdager()) + .resultatÅrsak(mapTilÅrsak(periode.getPeriodeResultatÅrsak())) + .utsettelse(periode.getUtsettelseÅrsak() != null) + .oppholdÅrsak(periode.getOppholdÅrsak()) + .samtidigUttak(periode.erSamtidigUttak()) + .periodeResultatType(periode.getPerioderesultattype()) + .build(); } public static FastsattUttakPeriode.ResultatÅrsak mapTilÅrsak(PeriodeResultatÅrsak årsak) { @@ -289,7 +390,8 @@ private FastsattUttakPeriode map(UttakPeriode periode) { return FastsattUttakPeriode.ResultatÅrsak.INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT; } if (InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT.equals(årsak)) { - return FastsattUttakPeriode.ResultatÅrsak.INNVILGET_GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT; + return FastsattUttakPeriode.ResultatÅrsak + .INNVILGET_GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT; } if (InnvilgetÅrsak.UTSETTELSE_GYLDIG.equals(årsak)) { return FastsattUttakPeriode.ResultatÅrsak.UTSETTELSE_GYLDIG; @@ -300,7 +402,9 @@ private FastsattUttakPeriode map(UttakPeriode periode) { return FastsattUttakPeriode.ResultatÅrsak.ANNET; } - private List map(List resultatPerioder, List vedtaksperioder) { + private List map( + List resultatPerioder, + List vedtaksperioder) { var fastsattePerioder = new ArrayList<>(vedtaksperioder); var mapped = resultatPerioder.stream().map(this::map).toList(); fastsattePerioder.addAll(mapped); @@ -317,7 +421,8 @@ private void validerOverlapp(List perioder) { for (var j = i + 1; j < perioder.size(); j++) { var p2 = perioder.get(j); if (p1.overlapper(p2)) { - throw new IllegalStateException("Funnet overlapp i perioder " + p1 + " - " + p2); + throw new IllegalStateException( + "Funnet overlapp i perioder " + p1 + " - " + p2); } } } @@ -329,11 +434,14 @@ private FastsattUttakPeriode map(FastsettePeriodeResultat fastsattPeriode) { } private List mapAktiviteter(UttakPeriode periode) { - return periode.getAktiviteter() - .stream() - .map(aktivitet -> new FastsattUttakPeriodeAktivitet(aktivitet.getTrekkdager(), periode.getStønadskontotype(), - aktivitet.getIdentifikator())) - .toList(); + return periode.getAktiviteter().stream() + .map( + aktivitet -> + new FastsattUttakPeriodeAktivitet( + aktivitet.getTrekkdager(), + periode.getStønadskontotype(), + aktivitet.getIdentifikator())) + .toList(); } private List map(ArrayList resultatPerioder) { diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelresultat.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelresultat.java index 54427669..1a636c9b 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelresultat.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelresultat.java @@ -16,12 +16,12 @@ class FastsettePerioderRegelresultat { FastsettePerioderRegelresultat(Evaluation evaluation) { this.evaluationSummary = new EvaluationSummary(evaluation); - this.utfall = evaluationSummary.allOutcomes() - .stream() - .filter(UttakOutcome.class::isInstance) - .map(UttakOutcome.class::cast) - .findFirst() - .orElseThrow(); + this.utfall = + evaluationSummary.allOutcomes().stream() + .filter(UttakOutcome.class::isInstance) + .map(UttakOutcome.class::cast) + .findFirst() + .orElseThrow(); } public FastsettePerioderRegelresultat(Evaluation evaluation, UttakOutcome utfall) { @@ -58,12 +58,10 @@ boolean skalUtbetale() { } public String sluttpunktId() { - return evaluationSummary.leafEvaluations() - .stream() - .filter(e -> e.ruleIdentification() != null) - .findFirst() - .map(Evaluation::ruleIdentification) - .orElse(null); + return evaluationSummary.leafEvaluations().stream() + .filter(e -> e.ruleIdentification() != null) + .findFirst() + .map(Evaluation::ruleIdentification) + .orElse(null); } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktIdentifiserer.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktIdentifiserer.java index da63826b..992cc8e2 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktIdentifiserer.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktIdentifiserer.java @@ -7,7 +7,6 @@ import java.util.TreeSet; import java.util.stream.Collectors; import java.util.stream.Stream; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.SjekkOmPeriodenErEtterMaksgrenseForUttak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; @@ -28,7 +27,7 @@ class KnekkpunktIdentifiserer { private KnekkpunktIdentifiserer() { - //hindrer instansiering + // hindrer instansiering } static Set finnKnekkpunkter(RegelGrunnlag grunnlag) { @@ -43,7 +42,8 @@ static Set finnKnekkpunkter(RegelGrunnlag grunnlag) { knekkpunkter.add(maksimumsgrenseForLovligeUttak); grunnlag.getDatoer().getStartdatoNesteStønadsperiode().ifPresent(knekkpunkter::add); - if (PrematurukerUtil.oppfyllerKravTilPrematuruker(grunnlag.getDatoer().getFødsel(), grunnlag.getDatoer().getTermin())) { + if (PrematurukerUtil.oppfyllerKravTilPrematuruker( + grunnlag.getDatoer().getFødsel(), grunnlag.getDatoer().getTermin())) { knekkpunkter.add(grunnlag.getDatoer().getTermin()); } @@ -52,10 +52,14 @@ static Set finnKnekkpunkter(RegelGrunnlag grunnlag) { } if (barnsDødsdatoFinnes(grunnlag)) { - knekkpunkter.add(grunnlag.getDatoer() - .getDødsdatoer() - .getBarnsDødsdato() - .plusWeeks(Konfigurasjon.STANDARD.getParameter(Parametertype.UTTAK_ETTER_BARN_DØDT_UKER, familiehendelseDato))); + knekkpunkter.add( + grunnlag.getDatoer() + .getDødsdatoer() + .getBarnsDødsdato() + .plusWeeks( + Konfigurasjon.STANDARD.getParameter( + Parametertype.UTTAK_ETTER_BARN_DØDT_UKER, + familiehendelseDato))); } if (medlemskapOpphørsdatoFinnes(grunnlag)) { @@ -63,24 +67,41 @@ static Set finnKnekkpunkter(RegelGrunnlag grunnlag) { } knekkpunkter.addAll(knekkpunkterPåArbeid(grunnlag.getArbeid())); - leggTilKnekkpunkterForUtsettelsePgaFerie(grunnlag, minimumsgrenseForLovligUttak, maksimumsgrenseForLovligeUttak, knekkpunkter); + leggTilKnekkpunkterForUtsettelsePgaFerie( + grunnlag, + minimumsgrenseForLovligUttak, + maksimumsgrenseForLovligeUttak, + knekkpunkter); leggTilKnekkpunkter(knekkpunkter, grunnlag.getSøknad().getOppgittePerioder()); if (grunnlag.getSøknad().getType().gjelderTerminFødsel()) { // Før Prop 15L 21/22: Første 6 uker forbeholdt mor, unntatt flerbarn og aleneomsorg - // Etter Prop 15L 21/22: Første 6 uker forbeholdt mor kun for kvoter. Far har opptil 10 dager samtidig uttak ifm fødsel + // Etter Prop 15L 21/22: Første 6 uker forbeholdt mor kun for kvoter. Far har opptil 10 + // dager samtidig uttak ifm fødsel knekkpunkter.add( - familiehendelseDato.minusWeeks(Konfigurasjon.STANDARD.getParameter(Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, familiehendelseDato))); - var hjemletFarUttakRundtFødsel = grunnlag.getKontoer().harSpesialkonto(Spesialkontotype.FAR_RUNDT_FØDSEL) - && grunnlag.getKontoer().getSpesialkontoTrekkdager(Spesialkontotype.FAR_RUNDT_FØDSEL) > 0; - var sakUtenKvoter = grunnlag.getKontoer().harStønadskonto(Stønadskontotype.FORELDREPENGER); + familiehendelseDato.minusWeeks( + Konfigurasjon.STANDARD.getParameter( + Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, + familiehendelseDato))); + var hjemletFarUttakRundtFødsel = + grunnlag.getKontoer().harSpesialkonto(Spesialkontotype.FAR_RUNDT_FØDSEL) + && grunnlag.getKontoer() + .getSpesialkontoTrekkdager( + Spesialkontotype.FAR_RUNDT_FØDSEL) + > 0; + var sakUtenKvoter = + grunnlag.getKontoer().harStønadskonto(Stønadskontotype.FORELDREPENGER); var erMor = grunnlag.getBehandling().isSøkerMor(); if (!hjemletFarUttakRundtFødsel || !sakUtenKvoter || erMor) { - knekkpunkter.add(familiehendelseDato.plusWeeks( - Konfigurasjon.STANDARD.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, familiehendelseDato))); + knekkpunkter.add( + familiehendelseDato.plusWeeks( + Konfigurasjon.STANDARD.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, + familiehendelseDato))); } if (hjemletFarUttakRundtFødsel && !erMor) { - knekkpunkter.addAll(finnKnekkpunkterFarsPeriodeRundtFødsel(grunnlag, sakUtenKvoter)); + knekkpunkter.addAll( + finnKnekkpunkterFarsPeriodeRundtFødsel(grunnlag, sakUtenKvoter)); } } knekkpunkter.addAll(knekkBasertPåYtelser(grunnlag)); @@ -90,82 +111,115 @@ static Set finnKnekkpunkter(RegelGrunnlag grunnlag) { } return knekkpunkter.stream() - .filter(k -> !k.isBefore(minimumsgrenseForLovligUttak)) - .filter(k -> !k.isAfter(maksimumsgrenseForLovligeUttak)) - .collect(Collectors.toSet()); + .filter(k -> !k.isBefore(minimumsgrenseForLovligUttak)) + .filter(k -> !k.isAfter(maksimumsgrenseForLovligeUttak)) + .collect(Collectors.toSet()); } private static Set knekkBasertPåYtelser(RegelGrunnlag grunnlag) { var ytelser = grunnlag.getYtelser(); var pleiepenger = ytelser.pleiepenger(); - return pleiepenger.map( - p -> p.perioder().stream().flatMap(per -> Stream.of(per.getFom(), per.getTom().plusDays(1))).collect(Collectors.toSet())) - .orElseGet(Set::of); + return pleiepenger + .map( + p -> + p.perioder().stream() + .flatMap( + per -> + Stream.of( + per.getFom(), + per.getTom().plusDays(1))) + .collect(Collectors.toSet())) + .orElseGet(Set::of); } - private static Set knekkPunkterBaserPåFørsteLovligeUttaksdag(RegelGrunnlag grunnlag) { - return grunnlag.getSøknad() - .getOppgittePerioder() - .stream() - .filter(p -> p.getTidligstMottattDato().isPresent()) - .filter(p -> p.overlapper(SøknadsfristUtil.finnFørsteLoveligeUttaksdag(p.getTidligstMottattDato().get()))) - .map(p -> SøknadsfristUtil.finnFørsteLoveligeUttaksdag(p.getTidligstMottattDato().get())) - .collect(Collectors.toSet()); + private static Set knekkPunkterBaserPåFørsteLovligeUttaksdag( + RegelGrunnlag grunnlag) { + return grunnlag.getSøknad().getOppgittePerioder().stream() + .filter(p -> p.getTidligstMottattDato().isPresent()) + .filter( + p -> + p.overlapper( + SøknadsfristUtil.finnFørsteLoveligeUttaksdag( + p.getTidligstMottattDato().get()))) + .map( + p -> + SøknadsfristUtil.finnFørsteLoveligeUttaksdag( + p.getTidligstMottattDato().get())) + .collect(Collectors.toSet()); } private static LocalDate finnMinimumgrenseLovligUttak(RegelGrunnlag grunnlag) { if (grunnlag.getSøknad().getType() == Søknadstype.TERMIN) { var termin = grunnlag.getDatoer().getTermin(); - return termin.minusWeeks(Konfigurasjon.STANDARD.getParameter(Parametertype.TIDLIGST_UTTAK_FØR_TERMIN_UKER, termin)); + return termin.minusWeeks( + Konfigurasjon.STANDARD.getParameter( + Parametertype.TIDLIGST_UTTAK_FØR_TERMIN_UKER, termin)); } var familiehendelseDato = grunnlag.getDatoer().getFamiliehendelse(); - return familiehendelseDato.minusWeeks(Konfigurasjon.STANDARD.getParameter(Parametertype.TIDLIGST_UTTAK_FØR_TERMIN_UKER, familiehendelseDato)); + return familiehendelseDato.minusWeeks( + Konfigurasjon.STANDARD.getParameter( + Parametertype.TIDLIGST_UTTAK_FØR_TERMIN_UKER, familiehendelseDato)); } private static Set knekkpunkterPåArbeid(Arbeid arbeid) { if (arbeid.getArbeidsforhold().size() == 1) { return Set.of(); } - return arbeid.getArbeidsforhold().stream().map(a -> a.startdato()).collect(Collectors.toSet()); + return arbeid.getArbeidsforhold().stream() + .map(a -> a.startdato()) + .collect(Collectors.toSet()); } private static boolean medlemskapOpphørsdatoFinnes(RegelGrunnlag grunnlag) { - return grunnlag.getMedlemskap() != null && grunnlag.getMedlemskap().getOpphørsdato() != null; + return grunnlag.getMedlemskap() != null + && grunnlag.getMedlemskap().getOpphørsdato() != null; } private static boolean barnsDødsdatoFinnes(RegelGrunnlag grunnlag) { - return grunnlag.getDatoer().getDødsdatoer() != null && grunnlag.getDatoer().getDødsdatoer().getBarnsDødsdato() != null; + return grunnlag.getDatoer().getDødsdatoer() != null + && grunnlag.getDatoer().getDødsdatoer().getBarnsDødsdato() != null; } private static boolean søkersDødsdatoFinnes(RegelGrunnlag grunnlag) { - return grunnlag.getDatoer().getDødsdatoer() != null && grunnlag.getDatoer().getDødsdatoer().getSøkersDødsdato() != null; + return grunnlag.getDatoer().getDødsdatoer() != null + && grunnlag.getDatoer().getDødsdatoer().getSøkersDødsdato() != null; } - private static void leggTilKnekkpunkterForUtsettelsePgaFerie(RegelGrunnlag grunnlag, - LocalDate minimumsgrenseForLovligUttak, - LocalDate maksimumsgrenseForLovligeUttak, - Set knekkpunkter) { - var bevegeligeHelligdager = finnKnekkpunktPåBevegeligeHelligdagerI( - new LukketPeriode(minimumsgrenseForLovligUttak, maksimumsgrenseForLovligeUttak)); + private static void leggTilKnekkpunkterForUtsettelsePgaFerie( + RegelGrunnlag grunnlag, + LocalDate minimumsgrenseForLovligUttak, + LocalDate maksimumsgrenseForLovligeUttak, + Set knekkpunkter) { + var bevegeligeHelligdager = + finnKnekkpunktPåBevegeligeHelligdagerI( + new LukketPeriode( + minimumsgrenseForLovligUttak, maksimumsgrenseForLovligeUttak)); var perioderMedFerie = perioderMedFerie(grunnlag); - knekkpunkter.addAll(knekkpunkterForUtsettelsePgaFerie(bevegeligeHelligdager, perioderMedFerie)); + knekkpunkter.addAll( + knekkpunkterForUtsettelsePgaFerie(bevegeligeHelligdager, perioderMedFerie)); } private static List perioderMedFerie(RegelGrunnlag grunnlag) { - return grunnlag.getSøknad().getOppgittePerioder().stream().filter(p -> p.isUtsettelsePga(UtsettelseÅrsak.FERIE)).toList(); + return grunnlag.getSøknad().getOppgittePerioder().stream() + .filter(p -> p.isUtsettelsePga(UtsettelseÅrsak.FERIE)) + .toList(); } - private static void knekkBasertPåAnnenPart(RegelGrunnlag grunnlag, Set knekkpunkter) { + private static void knekkBasertPåAnnenPart( + RegelGrunnlag grunnlag, Set knekkpunkter) { leggTilKnekkpunkter(knekkpunkter, grunnlag.getAnnenPart().getUttaksperioder()); } private static LocalDate finnMaksgrenseForLovligUttak(RegelGrunnlag grunnlag) { - return SjekkOmPeriodenErEtterMaksgrenseForUttak.regnUtMaksgrenseForLovligeUttaksdag(grunnlag.getDatoer().getFamiliehendelse()); + return SjekkOmPeriodenErEtterMaksgrenseForUttak.regnUtMaksgrenseForLovligeUttaksdag( + grunnlag.getDatoer().getFamiliehendelse()); } - private static List finnKnekkpunktPåBevegeligeHelligdagerI(LukketPeriode uttaksperiode) { + private static List finnKnekkpunktPåBevegeligeHelligdagerI( + LukketPeriode uttaksperiode) { List knekkpunkt = new ArrayList<>(); - for (var knekkpunktet : BevegeligeHelligdagerUtil.finnBevegeligeHelligdagerUtenHelg(uttaksperiode)) { + for (var knekkpunktet : + BevegeligeHelligdagerUtil.finnBevegeligeHelligdagerUtenHelg(uttaksperiode)) { knekkpunkt.add(knekkpunktet); knekkpunkt.add(knekkpunktet.plusDays(1)); } @@ -173,7 +227,8 @@ private static LocalDate finnMaksgrenseForLovligUttak(RegelGrunnlag grunnlag) { return knekkpunkt; } - private static List knekkpunkterForUtsettelsePgaFerie(List bevegeligeHelligdager, List utsettelsePerioder) { + private static List knekkpunkterForUtsettelsePgaFerie( + List bevegeligeHelligdager, List utsettelsePerioder) { List knekkpunkter = new ArrayList<>(); for (Periode periode : utsettelsePerioder) { for (var helligdag : bevegeligeHelligdager) { @@ -185,14 +240,15 @@ private static List knekkpunkterForUtsettelsePgaFerie(List return knekkpunkter; } - - private static Set finnKnekkpunkterFarsPeriodeRundtFødsel(RegelGrunnlag grunnlag, boolean medTom) { + private static Set finnKnekkpunkterFarsPeriodeRundtFødsel( + RegelGrunnlag grunnlag, boolean medTom) { return FarUttakRundtFødsel.utledFarsPeriodeRundtFødsel(grunnlag) - .map(p -> medTom ? Set.of(p.getFom(), p.getTom().plusDays(1)) : Set.of(p.getFom())) - .orElse(Set.of()); + .map(p -> medTom ? Set.of(p.getFom(), p.getTom().plusDays(1)) : Set.of(p.getFom())) + .orElse(Set.of()); } - private static void leggTilKnekkpunkter(Set knekkpunkter, List perioder) { + private static void leggTilKnekkpunkter( + Set knekkpunkter, List perioder) { for (Periode periode : perioder) { knekkpunkter.add(periode.getFom()); knekkpunkter.add(periode.getTom().plusDays(1)); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/OrkestreringTillegg.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/OrkestreringTillegg.java index 7fafaad8..03172332 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/OrkestreringTillegg.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/OrkestreringTillegg.java @@ -3,7 +3,6 @@ import java.time.LocalDate; import java.util.List; import java.util.Set; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; public class OrkestreringTillegg { @@ -11,7 +10,8 @@ public class OrkestreringTillegg { private final List manglendeSøktPerioder; private final Set knekkpunkter; - public OrkestreringTillegg(List manglendeSøktPerioder, Set knekkpunkter) { + public OrkestreringTillegg( + List manglendeSøktPerioder, Set knekkpunkter) { this.manglendeSøktPerioder = manglendeSøktPerioder; this.knekkpunkter = knekkpunkter; } @@ -27,6 +27,11 @@ public Set getKnekkpunkter() { @Override public String toString() { var msp = manglendeSøktPerioder.stream().map(p -> p.getFom() + " - " + p.getTom()).toList(); - return "OrkestreringTillegg{" + "manglendeSøktPerioder=" + msp + ", knekkpunkter=" + knekkpunkter + '}'; + return "OrkestreringTillegg{" + + "manglendeSøktPerioder=" + + msp + + ", knekkpunkter=" + + knekkpunkter + + '}'; } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandler.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandler.java index a985c463..2a087f1e 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandler.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandler.java @@ -1,3 +1,4 @@ +/* (C)2024 */ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode; import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.ValgAvStønadskontoTjeneste.velgStønadskonto; @@ -5,16 +6,7 @@ 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.OppgittPeriode; -import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Perioderesultattype; -import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.RegelGrunnlag; -import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent; -import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype; -import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; -import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UttakPeriode; -import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UttakPeriodeAktivitet; +import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.*; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.saldo.SaldoUtregning; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.TomKontoKnekkpunkt; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.UtfallType; @@ -29,72 +21,123 @@ class RegelResultatBehandler { this.regelGrunnlag = regelGrunnlag; } - RegelResultatBehandlerResultat innvilgAktuellPeriode(OppgittPeriode oppgittPeriode, - Optional knekkpunktOpt, - FastsettePerioderRegelresultat regelresultat, - SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { - var innvilgPeriode = knekkpunktOpt.map(TomKontoKnekkpunkt::dato) - .map(k -> oppgittPeriode.kopiMedNyPeriode(oppgittPeriode.getFom(), k.minusDays(1))) - .orElse(oppgittPeriode); + RegelResultatBehandlerResultat innvilgAktuellPeriode( + OppgittPeriode oppgittPeriode, + Optional knekkpunktOpt, + FastsettePerioderRegelresultat regelresultat, + SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { + var innvilgPeriode = + knekkpunktOpt + .map(TomKontoKnekkpunkt::dato) + .map( + k -> + oppgittPeriode.kopiMedNyPeriode( + oppgittPeriode.getFom(), k.minusDays(1))) + .orElse(oppgittPeriode); - var innvilget = new UttakPeriode(innvilgPeriode, Perioderesultattype.INNVILGET, null, regelresultat.getAvklaringÅrsak(), - regelresultat.getGraderingIkkeInnvilgetÅrsak(), lagAktiviteter(innvilgPeriode, regelresultat, false, annenpartSamtidigUttaksprosent), - regnSamtidigUttaksprosentMotGradering(innvilgPeriode, annenpartSamtidigUttaksprosent), innvilgPeriode.getStønadskontotype()); + var innvilget = + new UttakPeriode( + innvilgPeriode, + Perioderesultattype.INNVILGET, + null, + regelresultat.getAvklaringÅrsak(), + regelresultat.getGraderingIkkeInnvilgetÅrsak(), + lagAktiviteter( + innvilgPeriode, + regelresultat, + false, + annenpartSamtidigUttaksprosent), + regnSamtidigUttaksprosentMotGradering( + innvilgPeriode, annenpartSamtidigUttaksprosent), + innvilgPeriode.getStønadskontotype()); if (knekkpunktOpt.isEmpty()) { return RegelResultatBehandlerResultat.utenKnekk(innvilget); } else { validerKnekkpunkt(oppgittPeriode, knekkpunktOpt.get()); - var etterKnekk = oppgittPeriode.kopiMedNyPeriode(knekkpunktOpt.get().dato(), oppgittPeriode.getTom()); + var etterKnekk = + oppgittPeriode.kopiMedNyPeriode( + knekkpunktOpt.get().dato(), oppgittPeriode.getTom()); return RegelResultatBehandlerResultat.medKnekk(innvilget, etterKnekk); } } - RegelResultatBehandlerResultat avslåAktuellPeriode(OppgittPeriode oppgittPeriode, - FastsettePerioderRegelresultat regelresultat, - Optional knekkpunktOpt, - boolean overlapperInnvilgetAnnenpartsPeriode) { - var avslåPeriode = knekkpunktOpt.map(TomKontoKnekkpunkt::dato) - .filter(d -> !overlapperInnvilgetAnnenpartsPeriode) - .map(knekkdato -> oppgittPeriode.kopiMedNyPeriode(oppgittPeriode.getFom(), knekkdato.minusDays(1))) - .orElse(oppgittPeriode); + RegelResultatBehandlerResultat avslåAktuellPeriode( + OppgittPeriode oppgittPeriode, + FastsettePerioderRegelresultat regelresultat, + Optional knekkpunktOpt, + boolean overlapperInnvilgetAnnenpartsPeriode) { + var avslåPeriode = + knekkpunktOpt + .map(TomKontoKnekkpunkt::dato) + .filter(d -> !overlapperInnvilgetAnnenpartsPeriode) + .map( + knekkdato -> + oppgittPeriode.kopiMedNyPeriode( + oppgittPeriode.getFom(), knekkdato.minusDays(1))) + .orElse(oppgittPeriode); - var avslått = new UttakPeriode(avslåPeriode, Perioderesultattype.AVSLÅTT, null, regelresultat.getAvklaringÅrsak(), - regelresultat.getGraderingIkkeInnvilgetÅrsak(), - lagAktiviteter(avslåPeriode, regelresultat, overlapperInnvilgetAnnenpartsPeriode, SamtidigUttaksprosent.ZERO), - regnSamtidigUttaksprosentMotGradering(avslåPeriode, SamtidigUttaksprosent.ZERO), konto(avslåPeriode).orElse(null)); + var avslått = + new UttakPeriode( + avslåPeriode, + Perioderesultattype.AVSLÅTT, + null, + regelresultat.getAvklaringÅrsak(), + regelresultat.getGraderingIkkeInnvilgetÅrsak(), + lagAktiviteter( + avslåPeriode, + regelresultat, + overlapperInnvilgetAnnenpartsPeriode, + SamtidigUttaksprosent.ZERO), + regnSamtidigUttaksprosentMotGradering( + avslåPeriode, SamtidigUttaksprosent.ZERO), + konto(avslåPeriode).orElse(null)); if (!overlapperInnvilgetAnnenpartsPeriode && knekkpunktOpt.isPresent()) { validerKnekkpunkt(oppgittPeriode, knekkpunktOpt.get()); - var etterKnekk = oppgittPeriode.kopiMedNyPeriode(knekkpunktOpt.get().dato(), oppgittPeriode.getTom()); + var etterKnekk = + oppgittPeriode.kopiMedNyPeriode( + knekkpunktOpt.get().dato(), oppgittPeriode.getTom()); return RegelResultatBehandlerResultat.medKnekk(avslått, etterKnekk); } else { return RegelResultatBehandlerResultat.utenKnekk(avslått); } } - private static SamtidigUttaksprosent regnSamtidigUttaksprosentMotGradering(OppgittPeriode oppgittPeriode, - SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { + private static SamtidigUttaksprosent regnSamtidigUttaksprosentMotGradering( + OppgittPeriode oppgittPeriode, SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { if (!oppgittPeriode.erSøktSamtidigUttak() && !annenpartSamtidigUttaksprosent.merEnn0()) { return null; } if (annenpartSamtidigUttaksprosent.merEnn0()) { return SamtidigUttaksprosent.HUNDRED.subtract(annenpartSamtidigUttaksprosent); } - return oppgittPeriode.erSøktGradering() ? SamtidigUttaksprosent.HUNDRED.subtract( - oppgittPeriode.getArbeidsprosent()) : oppgittPeriode.getSamtidigUttaksprosent(); + return oppgittPeriode.erSøktGradering() + ? SamtidigUttaksprosent.HUNDRED.subtract(oppgittPeriode.getArbeidsprosent()) + : oppgittPeriode.getSamtidigUttaksprosent(); } private Optional konto(OppgittPeriode oppgittPeriode) { - return oppgittPeriode.getStønadskontotype() != null ? Optional.of(oppgittPeriode.getStønadskontotype()) : utledKonto(oppgittPeriode); + return oppgittPeriode.getStønadskontotype() != null + ? Optional.of(oppgittPeriode.getStønadskontotype()) + : utledKonto(oppgittPeriode); } - RegelResultatBehandlerResultat manuellBehandling(OppgittPeriode oppgittPeriode, FastsettePerioderRegelresultat regelresultat) { + RegelResultatBehandlerResultat manuellBehandling( + OppgittPeriode oppgittPeriode, FastsettePerioderRegelresultat regelresultat) { var stønadskontotype = konto(oppgittPeriode); - var resultat = new UttakPeriode(oppgittPeriode, Perioderesultattype.MANUELL_BEHANDLING, regelresultat.getManuellbehandlingårsak(), - regelresultat.getAvklaringÅrsak(), regelresultat.getGraderingIkkeInnvilgetÅrsak(), - lagAktiviteter(oppgittPeriode, regelresultat, false, SamtidigUttaksprosent.ZERO), - regnSamtidigUttaksprosentMotGradering(oppgittPeriode, SamtidigUttaksprosent.ZERO), stønadskontotype.orElse(null)); + var resultat = + new UttakPeriode( + oppgittPeriode, + Perioderesultattype.MANUELL_BEHANDLING, + regelresultat.getManuellbehandlingårsak(), + regelresultat.getAvklaringÅrsak(), + regelresultat.getGraderingIkkeInnvilgetÅrsak(), + lagAktiviteter( + oppgittPeriode, regelresultat, false, SamtidigUttaksprosent.ZERO), + regnSamtidigUttaksprosentMotGradering( + oppgittPeriode, SamtidigUttaksprosent.ZERO), + stønadskontotype.orElse(null)); return RegelResultatBehandlerResultat.utenKnekk(resultat); } @@ -102,46 +145,69 @@ RegelResultatBehandlerResultat manuellBehandling(OppgittPeriode oppgittPeriode, return velgStønadskonto(oppgittPeriode, regelGrunnlag, saldoUtregning); } - private Set lagAktiviteter(OppgittPeriode oppgittPeriode, - FastsettePerioderRegelresultat regelresultat, - boolean overlapperMedInnvilgetPeriodeHosAnnenpart, - SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { - return oppgittPeriode.getAktiviteter() - .stream() - .map(a -> lagAktivitet(a, regelresultat, overlapperMedInnvilgetPeriodeHosAnnenpart, oppgittPeriode, annenpartSamtidigUttaksprosent)) - .collect(Collectors.toSet()); + private Set lagAktiviteter( + OppgittPeriode oppgittPeriode, + FastsettePerioderRegelresultat regelresultat, + boolean overlapperMedInnvilgetPeriodeHosAnnenpart, + SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { + return oppgittPeriode.getAktiviteter().stream() + .map( + a -> + lagAktivitet( + a, + regelresultat, + overlapperMedInnvilgetPeriodeHosAnnenpart, + oppgittPeriode, + annenpartSamtidigUttaksprosent)) + .collect(Collectors.toSet()); } - private UttakPeriodeAktivitet lagAktivitet(AktivitetIdentifikator identifikator, - FastsettePerioderRegelresultat regelresultat, - boolean overlapperMedInnvilgetPeriodeHosAnnenpart, - OppgittPeriode oppgittPeriode, - SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { + private UttakPeriodeAktivitet lagAktivitet( + AktivitetIdentifikator identifikator, + FastsettePerioderRegelresultat regelresultat, + boolean overlapperMedInnvilgetPeriodeHosAnnenpart, + OppgittPeriode oppgittPeriode, + SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { var søktGradering = oppgittPeriode.erSøktGradering(identifikator); - var periodeAktivitetResultat = finnPeriodeAktivitetResultat(oppgittPeriode, overlapperMedInnvilgetPeriodeHosAnnenpart, identifikator, - regelresultat, annenpartSamtidigUttaksprosent); - return new UttakPeriodeAktivitet(identifikator, periodeAktivitetResultat.utbetalingsgrad(), periodeAktivitetResultat.trekkdager(), - søktGradering); + var periodeAktivitetResultat = + finnPeriodeAktivitetResultat( + oppgittPeriode, + overlapperMedInnvilgetPeriodeHosAnnenpart, + identifikator, + regelresultat, + annenpartSamtidigUttaksprosent); + return new UttakPeriodeAktivitet( + identifikator, + periodeAktivitetResultat.utbetalingsgrad(), + periodeAktivitetResultat.trekkdager(), + søktGradering); } - private PeriodeAktivitetResultat finnPeriodeAktivitetResultat(OppgittPeriode oppgittPeriode, - boolean overlapperMedInnvilgetPeriodeHosAnnenpart, - AktivitetIdentifikator aktivitet, - FastsettePerioderRegelresultat regelresultat, - SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { - //Må sjekke saldo her, ved flere arbeidsforhold kan det reglene ha gått til sluttpunkt som trekkes dager selv om ett av arbeidsforholdene er tom - //På arbeidsforholdet som er tom på konto skal det settes 0 trekkdager + private PeriodeAktivitetResultat finnPeriodeAktivitetResultat( + OppgittPeriode oppgittPeriode, + boolean overlapperMedInnvilgetPeriodeHosAnnenpart, + AktivitetIdentifikator aktivitet, + FastsettePerioderRegelresultat regelresultat, + SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { + // Må sjekke saldo her, ved flere arbeidsforhold kan det reglene ha gått til sluttpunkt som + // trekkes dager selv om ett av arbeidsforholdene er tom + // På arbeidsforholdet som er tom på konto skal det settes 0 trekkdager var stønadskonto = konto(oppgittPeriode); - var harIgjenTrekkdager = isHarIgjenTrekkdager(oppgittPeriode, aktivitet, regelresultat, stønadskonto.orElse(null)); + var harIgjenTrekkdager = + isHarIgjenTrekkdager( + oppgittPeriode, aktivitet, regelresultat, stønadskonto.orElse(null)); var manuellBehandling = manuellBehandling(regelresultat); - if (overlapperMedInnvilgetPeriodeHosAnnenpart || (!manuellBehandling && !harIgjenTrekkdager)) { + if (overlapperMedInnvilgetPeriodeHosAnnenpart + || (!manuellBehandling && !harIgjenTrekkdager)) { return new PeriodeAktivitetResultat(Utbetalingsgrad.ZERO, Trekkdager.ZERO); } var utbetalingsgrad = Utbetalingsgrad.ZERO; if (regelresultat.skalUtbetale()) { - var utbetalingsgradUtregning = bestemUtbetalingsgradUtregning(oppgittPeriode, aktivitet, annenpartSamtidigUttaksprosent); + var utbetalingsgradUtregning = + bestemUtbetalingsgradUtregning( + oppgittPeriode, aktivitet, annenpartSamtidigUttaksprosent); utbetalingsgrad = utbetalingsgradUtregning.resultat(); } var trekkdager = Trekkdager.ZERO; @@ -149,23 +215,35 @@ private PeriodeAktivitetResultat finnPeriodeAktivitetResultat(OppgittPeriode opp 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)); + var graderingInnvilget = + regelresultat.getGraderingIkkeInnvilgetÅrsak() == null + && oppgittPeriode.erSøktGradering(aktivitet); + trekkdager = + TrekkdagerUtregningUtil.trekkdagerFor( + oppgittPeriode, + graderingInnvilget, + oppgittPeriode.getArbeidsprosent(), + regnSamtidigUttaksprosentMotGradering( + oppgittPeriode, annenpartSamtidigUttaksprosent)); } } return new PeriodeAktivitetResultat(utbetalingsgrad, trekkdager); } - private boolean isHarIgjenTrekkdager(OppgittPeriode oppgittPeriode, - AktivitetIdentifikator aktivitet, - FastsettePerioderRegelresultat regelresultat, - Stønadskontotype stønadskonto) { - var nettosaldo = saldoUtregning.nettoSaldoJustertForMinsterett(stønadskonto, aktivitet, oppgittPeriode.kanTrekkeAvMinsterett()); - if (regelresultat.getAvklaringÅrsak() != null && regelresultat.getAvklaringÅrsak().trekkerMinsterett()) { + private boolean isHarIgjenTrekkdager( + OppgittPeriode oppgittPeriode, + AktivitetIdentifikator aktivitet, + FastsettePerioderRegelresultat regelresultat, + Stønadskontotype stønadskonto) { + var nettosaldo = + saldoUtregning.nettoSaldoJustertForMinsterett( + stønadskonto, aktivitet, oppgittPeriode.kanTrekkeAvMinsterett()); + if (regelresultat.getAvklaringÅrsak() != null + && regelresultat.getAvklaringÅrsak().trekkerMinsterett()) { var minsterettSaldo = saldoUtregning.restSaldoMinsterett(aktivitet); var utenAktivitetskravSaldo = saldoUtregning.restSaldoDagerUtenAktivitetskrav(); - return nettosaldo.merEnn0() && (minsterettSaldo.merEnn0() || utenAktivitetskravSaldo.merEnn0()); + return (nettosaldo.merEnn0() + && (minsterettSaldo.merEnn0() || utenAktivitetskravSaldo.merEnn0())); } return nettosaldo.merEnn0(); } @@ -176,24 +254,31 @@ private boolean manuellBehandling(FastsettePerioderRegelresultat regelresultat) private void validerKnekkpunkt(OppgittPeriode uttakPeriode, TomKontoKnekkpunkt knekkpunkt) { if (!uttakPeriode.overlapper(knekkpunkt.dato())) { - throw new IllegalArgumentException("Knekkpunkt må være i periode. " + knekkpunkt.dato() + " - " + uttakPeriode); + throw new IllegalArgumentException( + "Knekkpunkt må være i periode. " + knekkpunkt.dato() + " - " + uttakPeriode); } } - private UtbetalingsgradUtregning bestemUtbetalingsgradUtregning(OppgittPeriode oppgittPeriode, - AktivitetIdentifikator aktivitet, - SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { + private UtbetalingsgradUtregning bestemUtbetalingsgradUtregning( + OppgittPeriode oppgittPeriode, + AktivitetIdentifikator aktivitet, + SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { if (oppgittPeriode.erSøktGradering(aktivitet)) { - return new UtbetalingsgradMedGraderingUtregning(oppgittPeriode, aktivitet, annenpartSamtidigUttaksprosent); + return new UtbetalingsgradMedGraderingUtregning( + oppgittPeriode, aktivitet, annenpartSamtidigUttaksprosent); } - var samtidigUttaksprosent = regnSamtidigUttaksprosentMotGradering(oppgittPeriode, annenpartSamtidigUttaksprosent); + var samtidigUttaksprosent = + regnSamtidigUttaksprosentMotGradering( + oppgittPeriode, annenpartSamtidigUttaksprosent); if (samtidigUttaksprosent != null) { - return new UtbetalingsgradSamtidigUttakUtregning(samtidigUttaksprosent, oppgittPeriode.getArbeidsprosent(), - annenpartSamtidigUttaksprosent); + return new UtbetalingsgradSamtidigUttakUtregning( + samtidigUttaksprosent, + oppgittPeriode.getArbeidsprosent(), + annenpartSamtidigUttaksprosent); } return new UtbetalingsgradUtenGraderingUtregning(annenpartSamtidigUttaksprosent); } - private record PeriodeAktivitetResultat(Utbetalingsgrad utbetalingsgrad, Trekkdager trekkdager) { - } + private record PeriodeAktivitetResultat( + Utbetalingsgrad utbetalingsgrad, Trekkdager trekkdager) {} } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandlerResultat.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandlerResultat.java index f796eb3c..9b652b0f 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandlerResultat.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandlerResultat.java @@ -17,7 +17,8 @@ public static RegelResultatBehandlerResultat utenKnekk(UttakPeriode utenKnekk) { return new RegelResultatBehandlerResultat(utenKnekk, null); } - public static RegelResultatBehandlerResultat medKnekk(UttakPeriode førKnekk, OppgittPeriode etterKnekk) { + public static RegelResultatBehandlerResultat medKnekk( + UttakPeriode førKnekk, OppgittPeriode etterKnekk) { return new RegelResultatBehandlerResultat(førKnekk, etterKnekk); } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Trekkdager.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Trekkdager.java index 0f84591a..38ee6f9a 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Trekkdager.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Trekkdager.java @@ -51,7 +51,11 @@ public int rundOpp() { } public boolean gårAkkuratOppIHeleVirkedager(BigDecimal uttaksprosent) { - return decimalValue().remainder(uttaksprosent).setScale(0, RoundingMode.UP).compareTo(BigDecimal.ZERO) == 0; + return decimalValue() + .remainder(uttaksprosent) + .setScale(0, RoundingMode.UP) + .compareTo(BigDecimal.ZERO) + == 0; } @Override diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TrekkdagerUtregningUtil.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TrekkdagerUtregningUtil.java index acfc176a..7682306e 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TrekkdagerUtregningUtil.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TrekkdagerUtregningUtil.java @@ -2,38 +2,40 @@ import java.math.BigDecimal; import java.math.RoundingMode; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Periode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent; public final class TrekkdagerUtregningUtil { - private TrekkdagerUtregningUtil() { - } + private TrekkdagerUtregningUtil() {} - public static Trekkdager trekkdagerFor(Periode periode, - boolean gradert, - BigDecimal gradertArbeidstidsprosent, - SamtidigUttaksprosent samtidigUttaksprosent) { + public static Trekkdager trekkdagerFor( + Periode periode, + boolean gradert, + BigDecimal gradertArbeidstidsprosent, + SamtidigUttaksprosent samtidigUttaksprosent) { var trekkdagerUtenGradering = Virkedager.beregnAntallVirkedager(periode); if (gradert) { return trekkdagerMedGradering(trekkdagerUtenGradering, gradertArbeidstidsprosent); } if (samtidigUttaksprosent != null) { - //Samme utregning som med gradering - return trekkdagerMedGradering(trekkdagerUtenGradering, BigDecimal.valueOf(100).subtract(samtidigUttaksprosent.decimalValue())); + // Samme utregning som med gradering + return trekkdagerMedGradering( + trekkdagerUtenGradering, + BigDecimal.valueOf(100).subtract(samtidigUttaksprosent.decimalValue())); } return new Trekkdager(trekkdagerUtenGradering); } - private static Trekkdager trekkdagerMedGradering(int trekkdagerUtenGradering, BigDecimal gradertArbeidstidsprosent) { + private static Trekkdager trekkdagerMedGradering( + int trekkdagerUtenGradering, BigDecimal gradertArbeidstidsprosent) { if (gradertArbeidstidsprosent.compareTo(BigDecimal.valueOf(100)) >= 0) { return Trekkdager.ZERO; } - var trekkdager = BigDecimal.valueOf(trekkdagerUtenGradering) - .multiply(BigDecimal.valueOf(100).subtract(gradertArbeidstidsprosent)) - .divide(BigDecimal.valueOf(100), 1, RoundingMode.DOWN); + var trekkdager = + BigDecimal.valueOf(trekkdagerUtenGradering) + .multiply(BigDecimal.valueOf(100).subtract(gradertArbeidstidsprosent)) + .divide(BigDecimal.valueOf(100), 1, RoundingMode.DOWN); return new Trekkdager(trekkdager); } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradMedGraderingUtregning.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradMedGraderingUtregning.java index d859db7d..aaca695f 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradMedGraderingUtregning.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradMedGraderingUtregning.java @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode; import java.util.Optional; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent; @@ -13,9 +12,10 @@ class UtbetalingsgradMedGraderingUtregning implements UtbetalingsgradUtregning { private final AktivitetIdentifikator aktivitet; private final SamtidigUttaksprosent annenpartSamtidigUttaksprosent; - UtbetalingsgradMedGraderingUtregning(OppgittPeriode uttakPeriode, - AktivitetIdentifikator aktivitet, - SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { + UtbetalingsgradMedGraderingUtregning( + OppgittPeriode uttakPeriode, + AktivitetIdentifikator aktivitet, + SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { this.uttakPeriode = uttakPeriode; this.aktivitet = aktivitet; this.annenpartSamtidigUttaksprosent = annenpartSamtidigUttaksprosent; @@ -24,10 +24,17 @@ class UtbetalingsgradMedGraderingUtregning implements UtbetalingsgradUtregning { @Override public Utbetalingsgrad resultat() { // Samtidiguttaksprosent med mindre gradering på noen aktiviteter i perioden - var lokalSamtidigUttaksprosent = uttakPeriode.erSøktGradering(aktivitet) ? Optional.ofNullable(uttakPeriode.getArbeidsprosent()) - .map(SamtidigUttaksprosent.HUNDRED::subtract) - .orElseThrow(() -> new IllegalArgumentException("arbeidstidsprosent kan ikke være null")) : SamtidigUttaksprosent.HUNDRED; - var maksSamtidigUttakUtFraAnnenpart = SamtidigUttaksprosent.HUNDRED.subtract(annenpartSamtidigUttaksprosent); + var lokalSamtidigUttaksprosent = + uttakPeriode.erSøktGradering(aktivitet) + ? Optional.ofNullable(uttakPeriode.getArbeidsprosent()) + .map(SamtidigUttaksprosent.HUNDRED::subtract) + .orElseThrow( + () -> + new IllegalArgumentException( + "arbeidstidsprosent kan ikke være null")) + : SamtidigUttaksprosent.HUNDRED; + var maksSamtidigUttakUtFraAnnenpart = + SamtidigUttaksprosent.HUNDRED.subtract(annenpartSamtidigUttaksprosent); // Reduser utbetaling dersom annenpart > 0 og det ligger an til mer enn 100 prosent if (lokalSamtidigUttaksprosent.subtract(maksSamtidigUttakUtFraAnnenpart).merEnn0()) { return new Utbetalingsgrad(maksSamtidigUttakUtFraAnnenpart.decimalValue()); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradSamtidigUttakUtregning.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradSamtidigUttakUtregning.java index 3de83505..bbdffda7 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradSamtidigUttakUtregning.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradSamtidigUttakUtregning.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.util.Objects; import java.util.Optional; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; @@ -13,9 +12,10 @@ class UtbetalingsgradSamtidigUttakUtregning implements UtbetalingsgradUtregning private final BigDecimal graderingArbeidstidsprosent; private final SamtidigUttaksprosent annenpartSamtidigUttaksprosent; - UtbetalingsgradSamtidigUttakUtregning(SamtidigUttaksprosent samtidigUttaksprosent, - BigDecimal graderingArbeidstidsprosent, - SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { + UtbetalingsgradSamtidigUttakUtregning( + SamtidigUttaksprosent samtidigUttaksprosent, + BigDecimal graderingArbeidstidsprosent, + SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { Objects.requireNonNull(samtidigUttaksprosent); Objects.requireNonNull(annenpartSamtidigUttaksprosent); this.graderingArbeidstidsprosent = graderingArbeidstidsprosent; @@ -26,10 +26,12 @@ class UtbetalingsgradSamtidigUttakUtregning implements UtbetalingsgradUtregning @Override public Utbetalingsgrad resultat() { // Samtidiguttaksprosent med mindre gradering på noen aktiviteter i perioden - var lokalSamtidigUttaksprosent = Optional.ofNullable(graderingArbeidstidsprosent) - .map(SamtidigUttaksprosent.HUNDRED::subtract) - .orElse(samtidigUttaksprosent); - var maksSamtidigUttakUtFraAnnenpart = SamtidigUttaksprosent.HUNDRED.subtract(annenpartSamtidigUttaksprosent); + var lokalSamtidigUttaksprosent = + Optional.ofNullable(graderingArbeidstidsprosent) + .map(SamtidigUttaksprosent.HUNDRED::subtract) + .orElse(samtidigUttaksprosent); + var maksSamtidigUttakUtFraAnnenpart = + SamtidigUttaksprosent.HUNDRED.subtract(annenpartSamtidigUttaksprosent); // Reduser utbetaling dersom annenpart > 0 og det ligger an til mer enn 100 prosent if (lokalSamtidigUttaksprosent.subtract(maksSamtidigUttakUtFraAnnenpart).merEnn0()) { return new Utbetalingsgrad(maksSamtidigUttakUtFraAnnenpart.decimalValue()); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradUtenGraderingUtregning.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradUtenGraderingUtregning.java index 04425d82..9a88fd49 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradUtenGraderingUtregning.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradUtenGraderingUtregning.java @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode; import java.util.Objects; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; @@ -9,7 +8,8 @@ class UtbetalingsgradUtenGraderingUtregning implements UtbetalingsgradUtregning private final SamtidigUttaksprosent annenpartSamtidigUttaksprosent; - public UtbetalingsgradUtenGraderingUtregning(SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { + public UtbetalingsgradUtenGraderingUtregning( + SamtidigUttaksprosent annenpartSamtidigUttaksprosent) { Objects.requireNonNull(annenpartSamtidigUttaksprosent); this.annenpartSamtidigUttaksprosent = annenpartSamtidigUttaksprosent; } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UttakVersion.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UttakVersion.java index b229655d..cf95596e 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UttakVersion.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UttakVersion.java @@ -5,9 +5,8 @@ public class UttakVersion { - private UttakVersion() { - } - - public static final EvaluationVersion UTTAK_VERSION = NareVersion.readVersionPropertyFor("fp-uttak", "nare/fp-uttak-version.properties"); + private UttakVersion() {} + public static final EvaluationVersion UTTAK_VERSION = + NareVersion.readVersionPropertyFor("fp-uttak", "nare/fp-uttak-version.properties"); } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ValgAvSt\303\270nadskontoTjeneste.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ValgAvSt\303\270nadskontoTjeneste.java" index 2415bae8..069d95d8 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ValgAvSt\303\270nadskontoTjeneste.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ValgAvSt\303\270nadskontoTjeneste.java" @@ -3,7 +3,6 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.RegelGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype; @@ -11,15 +10,13 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.PrematurukerUtil; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.saldo.SaldoUtregning; -/** - * Brukes ved når det skal trekkes dager fra periode uten stønadskontotype - */ +/** Brukes ved når det skal trekkes dager fra periode uten stønadskontotype */ final class ValgAvStønadskontoTjeneste { - private ValgAvStønadskontoTjeneste() { - } + private ValgAvStønadskontoTjeneste() {} - static Optional velgStønadskonto(OppgittPeriode periode, RegelGrunnlag regelGrunnlag, SaldoUtregning saldoUtregning) { + static Optional velgStønadskonto( + OppgittPeriode periode, RegelGrunnlag regelGrunnlag, SaldoUtregning saldoUtregning) { if (periode.getStønadskontotype() != null) { throw new IllegalArgumentException("Forventet periode uten stønadskontotype"); } @@ -29,22 +26,21 @@ final class ValgAvStønadskontoTjeneste { return velgStønadskontoVanligPeriode(periode, regelGrunnlag, saldoUtregning); } - private static Optional velgStønadskontoVanligPeriode(OppgittPeriode periode, - RegelGrunnlag regelGrunnlag, - SaldoUtregning saldoUtregning) { + private static Optional velgStønadskontoVanligPeriode( + OppgittPeriode periode, RegelGrunnlag regelGrunnlag, SaldoUtregning saldoUtregning) { return velg(periode, regelGrunnlag, saldoUtregning); } - private static Optional velgStønadskontoForUtsettelse(OppgittPeriode periode, - RegelGrunnlag regelGrunnlag, - SaldoUtregning saldoUtregning) { + private static Optional velgStønadskontoForUtsettelse( + OppgittPeriode periode, RegelGrunnlag regelGrunnlag, SaldoUtregning saldoUtregning) { if (periodeErPleiepenger(periode, regelGrunnlag)) { return stønadskontoVedPleiepenger(regelGrunnlag); } return velg(periode, regelGrunnlag, saldoUtregning); } - private static Optional velg(OppgittPeriode periode, RegelGrunnlag regelGrunnlag, SaldoUtregning saldoUtregning) { + private static Optional velg( + OppgittPeriode periode, RegelGrunnlag regelGrunnlag, SaldoUtregning saldoUtregning) { for (var stønadskontotype : hentSøkerSineKontoer(regelGrunnlag)) { if (!erTomForKonto(periode, stønadskontotype, saldoUtregning)) { return Optional.of(stønadskontotype); @@ -53,17 +49,23 @@ final class ValgAvStønadskontoTjeneste { return Optional.empty(); } - private static boolean periodeErPleiepenger(OppgittPeriode periode, RegelGrunnlag regelGrunnlag) { - return PrematurukerUtil.oppfyllerKravTilPrematuruker(regelGrunnlag.getDatoer().getFødsel(), regelGrunnlag.getDatoer().getTermin()) - && periodeErFørTermin(periode, regelGrunnlag) && periode.isUtsettelsePga(UtsettelseÅrsak.INNLAGT_BARN); + private static boolean periodeErPleiepenger( + OppgittPeriode periode, RegelGrunnlag regelGrunnlag) { + return PrematurukerUtil.oppfyllerKravTilPrematuruker( + regelGrunnlag.getDatoer().getFødsel(), + regelGrunnlag.getDatoer().getTermin()) + && periodeErFørTermin(periode, regelGrunnlag) + && periode.isUtsettelsePga(UtsettelseÅrsak.INNLAGT_BARN); } private static boolean periodeErFørTermin(OppgittPeriode periode, RegelGrunnlag regelGrunnlag) { - return regelGrunnlag.getDatoer().getTermin() != null && periode.getTom().isBefore(regelGrunnlag.getDatoer().getTermin()); + return regelGrunnlag.getDatoer().getTermin() != null + && periode.getTom().isBefore(regelGrunnlag.getDatoer().getTermin()); } - private static Optional stønadskontoVedPleiepenger(RegelGrunnlag regelGrunnlag) { - //Trenger ikke å sjekke om tom på konto, ettersom bruker ikke kan gå tom før termin + private static Optional stønadskontoVedPleiepenger( + RegelGrunnlag regelGrunnlag) { + // Trenger ikke å sjekke om tom på konto, ettersom bruker ikke kan gå tom før termin if (regelGrunnlag.getGyldigeStønadskontotyper().contains(Stønadskontotype.FELLESPERIODE)) { return Optional.of(Stønadskontotype.FELLESPERIODE); } @@ -71,26 +73,41 @@ private static boolean periodeErPleiepenger(OppgittPeriode periode, RegelGrunnla return Optional.of(Stønadskontotype.FORELDREPENGER); } throw new IllegalStateException( - "Trenger enten fellesperiode eller foreldrepenger konto. Kontotyper: " + regelGrunnlag.getGyldigeStønadskontotyper()); + "Trenger enten fellesperiode eller foreldrepenger konto. Kontotyper: " + + regelGrunnlag.getGyldigeStønadskontotyper()); } private static List hentSøkerSineKontoer(RegelGrunnlag regelGrunnlag) { final List søkerSineKonto; var gyldige = regelGrunnlag.getGyldigeStønadskontotyper(); - if (regelGrunnlag.getBehandling().isSøkerMor() && gyldige.contains(Stønadskontotype.MØDREKVOTE)) { - søkerSineKonto = Arrays.asList(Stønadskontotype.MØDREKVOTE, Stønadskontotype.FELLESPERIODE, Stønadskontotype.FORELDREPENGER); + if (regelGrunnlag.getBehandling().isSøkerMor() + && gyldige.contains(Stønadskontotype.MØDREKVOTE)) { + søkerSineKonto = + Arrays.asList( + Stønadskontotype.MØDREKVOTE, + Stønadskontotype.FELLESPERIODE, + Stønadskontotype.FORELDREPENGER); } else if (gyldige.contains(Stønadskontotype.FEDREKVOTE)) { - søkerSineKonto = Arrays.asList(Stønadskontotype.FEDREKVOTE, Stønadskontotype.FELLESPERIODE, Stønadskontotype.FORELDREPENGER); + søkerSineKonto = + Arrays.asList( + Stønadskontotype.FEDREKVOTE, + Stønadskontotype.FELLESPERIODE, + Stønadskontotype.FORELDREPENGER); } else { søkerSineKonto = List.of(Stønadskontotype.FORELDREPENGER); } return søkerSineKonto; } - private static boolean erTomForKonto(OppgittPeriode periode, Stønadskontotype stønadskontotype, SaldoUtregning saldoUtregning) { + private static boolean erTomForKonto( + OppgittPeriode periode, + Stønadskontotype stønadskontotype, + SaldoUtregning saldoUtregning) { var tomForKonto = true; for (var arbeidsforhold : periode.getAktiviteter()) { - var saldo = saldoUtregning.nettoSaldoJustertForMinsterett(stønadskontotype, arbeidsforhold, periode.kanTrekkeAvMinsterett()); + var saldo = + saldoUtregning.nettoSaldoJustertForMinsterett( + stønadskontotype, arbeidsforhold, periode.kanTrekkeAvMinsterett()); if (saldo.merEnn0()) { tomForKonto = false; } else { @@ -100,5 +117,4 @@ private static boolean erTomForKonto(OppgittPeriode periode, Stønadskontotype s } return tomForKonto; } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Virkedager.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Virkedager.java index 7dbb79a0..2be4999e 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Virkedager.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Virkedager.java @@ -8,7 +8,6 @@ import java.time.temporal.ChronoUnit; import java.util.Objects; import java.util.Set; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Periode; public class Virkedager { @@ -31,7 +30,8 @@ public static int beregnAntallVirkedager(LocalDate fom, LocalDate tom) { Objects.requireNonNull(fom); Objects.requireNonNull(tom); if (fom.isAfter(tom)) { - throw new IllegalArgumentException("Utviklerfeil: fom " + fom + " kan ikke være før tom " + tom); + throw new IllegalArgumentException( + "Utviklerfeil: fom " + fom + " kan ikke være før tom " + tom); } try { @@ -40,14 +40,21 @@ public static int beregnAntallVirkedager(LocalDate fom, LocalDate tom) { // Utvid til nærmeste søndag fram i tid fra og med slutt (tom) (0-6 dager) var padAfter = DayOfWeek.SUNDAY.getValue() - tom.getDayOfWeek().getValue(); // Antall virkedager i perioden utvidet til hele uker - var virkedagerPadded = toIntExact( - ChronoUnit.WEEKS.between(fom.minusDays(padBefore), tom.plusDays(padAfter).plusDays(1)) * VIRKEDAGER_PR_UKE); + var virkedagerPadded = + toIntExact( + ChronoUnit.WEEKS.between( + fom.minusDays(padBefore), + tom.plusDays(padAfter).plusDays(1)) + * VIRKEDAGER_PR_UKE); // Antall virkedager i utvidelse - var virkedagerPadding = Math.min(padBefore, VIRKEDAGER_PR_UKE) + Math.max(padAfter - HELGEDAGER_PR_UKE, 0); + var virkedagerPadding = + Math.min(padBefore, VIRKEDAGER_PR_UKE) + + Math.max(padAfter - HELGEDAGER_PR_UKE, 0); // Virkedager i perioden uten virkedagene fra utvidelse return virkedagerPadded - virkedagerPadding; } catch (ArithmeticException e) { - throw new UnsupportedOperationException("Perioden er for lang til å beregne virkedager.", e); + throw new UnsupportedOperationException( + "Perioden er for lang til å beregne virkedager.", e); } } @@ -65,7 +72,8 @@ public static LocalDate justerHelgTilMandag(LocalDate dato) { private static LocalDate plusVirkedag(LocalDate dato) { var plussen = dato.plusDays(1); - return WEEKEND.contains(plussen.getDayOfWeek()) ? dato.with(next(DayOfWeek.MONDAY)) : plussen; + return WEEKEND.contains(plussen.getDayOfWeek()) + ? dato.with(next(DayOfWeek.MONDAY)) + : plussen; } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkGyldigGrunnForTidligOppstartHelePerioden.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkGyldigGrunnForTidligOppstartHelePerioden.java index 1b11ec7b..bae5c38e 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkGyldigGrunnForTidligOppstartHelePerioden.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkGyldigGrunnForTidligOppstartHelePerioden.java @@ -6,7 +6,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkGyldigGrunnForTidligOppstartHelePerioden.ID) -public class SjekkGyldigGrunnForTidligOppstartHelePerioden extends LeafSpecification { +public class SjekkGyldigGrunnForTidligOppstartHelePerioden + extends LeafSpecification { public static final String ID = "FP_VK 13.5.1"; @@ -17,7 +18,11 @@ public SjekkGyldigGrunnForTidligOppstartHelePerioden() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var aktuellPeriode = grunnlag.getAktuellPeriode(); - return aktuellPeriode.getDokumentasjonVurdering() != null && aktuellPeriode.getDokumentasjonVurdering() - .erGyldigGrunnForTidligOppstart() ? ja() : nei(); + return aktuellPeriode.getDokumentasjonVurdering() != null + && aktuellPeriode + .getDokumentasjonVurdering() + .erGyldigGrunnForTidligOppstart() + ? ja() + : nei(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAkseptertSamtidigUttak.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAkseptertSamtidigUttak.java index f91b97cb..7e0cedd7 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAkseptertSamtidigUttak.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAkseptertSamtidigUttak.java @@ -19,7 +19,8 @@ public SjekkOmAkseptertSamtidigUttak() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { // Inntil 200% samtidig uttak ved flerbarnsdager eller perioden rundt fødsel - if (SamtidigUttakUtil.gjelderFlerbarnsdager(grunnlag) || SamtidigUttakUtil.gjelderFarRundtFødsel(grunnlag)) { + if (SamtidigUttakUtil.gjelderFlerbarnsdager(grunnlag) + || SamtidigUttakUtil.gjelderFarRundtFødsel(grunnlag)) { return ja(); } // Inntil 100% samtidig uttak er alltid OK @@ -37,5 +38,4 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { } return nei(); } - } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAlleBarnErD\303\270de.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAlleBarnErD\303\270de.java" index 27e163eb..5c07a3ab 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAlleBarnErD\303\270de.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAlleBarnErD\303\270de.java" @@ -1,6 +1,5 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; import no.nav.fpsak.nare.doc.RuleDocumentation; import no.nav.fpsak.nare.evaluation.Evaluation; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse.java index 5531e025..08589d71 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse.java @@ -7,7 +7,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse.ID) -public class SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse extends LeafSpecification { +public class SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse + extends LeafSpecification { public static final String ID = "FP_VK 30.0.4"; @@ -18,10 +19,13 @@ public SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var aktuellPeriode = grunnlag.getAktuellPeriode(); - var overlappErUtsettelse = grunnlag.getAnnenPartUttaksperioder() - .stream() - .filter(app -> PerioderUtenHelgUtil.perioderUtenHelgOverlapper(aktuellPeriode, app)) - .anyMatch(app -> app.isUtsettelse() && app.isInnvilget()); + var overlappErUtsettelse = + grunnlag.getAnnenPartUttaksperioder().stream() + .filter( + app -> + PerioderUtenHelgUtil.perioderUtenHelgOverlapper( + aktuellPeriode, app)) + .anyMatch(app -> app.isUtsettelse() && app.isInnvilget()); return overlappErUtsettelse ? ja() : nei(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAnnenPartsPeriodeHarUtbetalingsgrad.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAnnenPartsPeriodeHarUtbetalingsgrad.java index 29230691..57b664b3 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAnnenPartsPeriodeHarUtbetalingsgrad.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmAnnenPartsPeriodeHarUtbetalingsgrad.java @@ -7,7 +7,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmAnnenPartsPeriodeHarUtbetalingsgrad.ID) -public class SjekkOmAnnenPartsPeriodeHarUtbetalingsgrad extends LeafSpecification { +public class SjekkOmAnnenPartsPeriodeHarUtbetalingsgrad + extends LeafSpecification { public static final String ID = "FP_VK 30.0.5"; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmBareFarHarRett.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmBareFarHarRett.java index 888528d3..c3a7a64d 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmBareFarHarRett.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmBareFarHarRett.java @@ -10,7 +10,6 @@ public class SjekkOmBareFarHarRett extends LeafSpecification { +public class SjekkOmBehandlingKreverSammenhengendeUttak + extends LeafSpecification { public static final String ID = "SHU.1"; public static final String BESKRIVELSE = "Krever behandlingen sammenhengende uttak?"; @@ -19,6 +20,3 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { return grunnlag.kreverBehandlingSammenhengendeUttak() ? ja() : nei(); } } - - - diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDagerIgjenP\303\245AlleAktiviteter.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDagerIgjenP\303\245AlleAktiviteter.java" index 0007ea40..f26e36eb 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDagerIgjenP\303\245AlleAktiviteter.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDagerIgjenP\303\245AlleAktiviteter.java" @@ -9,10 +9,12 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmDagerIgjenPåAlleAktiviteter.ID) -public class SjekkOmDagerIgjenPåAlleAktiviteter extends LeafSpecification { +public class SjekkOmDagerIgjenPåAlleAktiviteter + extends LeafSpecification { public static final String ID = "FP_VK 10.5.3"; - public static final String BESKRIVELSE = "Er det dager igjen på alle aktiviteter for minst en av bruker sine stønadskonto?"; + public static final String BESKRIVELSE = + "Er det dager igjen på alle aktiviteter for minst en av bruker sine stønadskonto?"; public SjekkOmDagerIgjenPåAlleAktiviteter() { super(ID); @@ -28,7 +30,8 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { return nei(); } - private boolean dagerIgjenPåKonto(FastsettePeriodeGrunnlag grunnlag, Stønadskontotype stønadskontotype) { + private boolean dagerIgjenPåKonto( + FastsettePeriodeGrunnlag grunnlag, Stønadskontotype stønadskontotype) { for (var aktivitet : grunnlag.getAktuellPeriode().getAktiviteter()) { var saldo = grunnlag.getSaldoUtregning().saldoITrekkdager(stønadskontotype, aktivitet); if (!saldo.merEnn0()) { diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDokumentertHV.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDokumentertHV.java index 87052be2..82263dbe 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDokumentertHV.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDokumentertHV.java @@ -18,6 +18,8 @@ public SjekkOmDokumentertHV() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { - return HV_OVELSE_GODKJENT.equals(grunnlag.getAktuellPeriode().getDokumentasjonVurdering()) ? ja() : nei(); + return HV_OVELSE_GODKJENT.equals(grunnlag.getAktuellPeriode().getDokumentasjonVurdering()) + ? ja() + : nei(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDokumentertTiltakViaNav.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDokumentertTiltakViaNav.java index 994197f8..9b81c685 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDokumentertTiltakViaNav.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmDokumentertTiltakViaNav.java @@ -10,7 +10,8 @@ @RuleDocumentation(SjekkOmDokumentertTiltakViaNav.ID) public class SjekkOmDokumentertTiltakViaNav extends LeafSpecification { public static final String ID = "FP_VK 18.3.7"; - public static final String BESKRIVELSE = "Er det dokumentert at søker er i tiltak i regi av nav i perioden?"; + public static final String BESKRIVELSE = + "Er det dokumentert at søker er i tiltak i regi av nav i perioden?"; public SjekkOmDokumentertTiltakViaNav() { super(ID); @@ -18,6 +19,8 @@ public SjekkOmDokumentertTiltakViaNav() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { - return NAV_TILTAK_GODKJENT.equals(grunnlag.getAktuellPeriode().getDokumentasjonVurdering()) ? ja() : nei(); + return NAV_TILTAK_GODKJENT.equals(grunnlag.getAktuellPeriode().getDokumentasjonVurdering()) + ? ja() + : nei(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmErAlleDisponibleDagerIgjenMinsterett.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmErAlleDisponibleDagerIgjenMinsterett.java index 4af2644a..6009f18a 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmErAlleDisponibleDagerIgjenMinsterett.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmErAlleDisponibleDagerIgjenMinsterett.java @@ -1,6 +1,5 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser; - import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.SjekkOmTomForAlleSineKontoer.hentSøkerSineKontoer; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; @@ -10,7 +9,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmErAlleDisponibleDagerIgjenMinsterett.ID) -public class SjekkOmErAlleDisponibleDagerIgjenMinsterett extends LeafSpecification { +public class SjekkOmErAlleDisponibleDagerIgjenMinsterett + extends LeafSpecification { public static final String ID = "FP_VK 10.5.6"; public static final String BESKRIVELSE = "Er alle disponible dager minsterett?"; @@ -22,9 +22,11 @@ public SjekkOmErAlleDisponibleDagerIgjenMinsterett() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { if (!hentSøkerSineKontoer(grunnlag).contains(Stønadskontotype.FORELDREPENGER)) { - throw new IllegalStateException("Støtter bare stønadskonto " + Stønadskontotype.FORELDREPENGER); + throw new IllegalStateException( + "Støtter bare stønadskonto " + Stønadskontotype.FORELDREPENGER); } - var foreldrepenger = grunnlag.getSaldoUtregning().saldoITrekkdager(Stønadskontotype.FORELDREPENGER); + var foreldrepenger = + grunnlag.getSaldoUtregning().saldoITrekkdager(Stønadskontotype.FORELDREPENGER); if (!foreldrepenger.merEnn0()) { return nei(); } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmEtterNesteSt\303\270nadsperiodeHarDisponibleDager.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmEtterNesteSt\303\270nadsperiodeHarDisponibleDager.java" index 55a633d2..a3547d68 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmEtterNesteSt\303\270nadsperiodeHarDisponibleDager.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmEtterNesteSt\303\270nadsperiodeHarDisponibleDager.java" @@ -1,16 +1,17 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser; - 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; @RuleDocumentation(SjekkOmEtterNesteStønadsperiodeHarDisponibleDager.ID) -public class SjekkOmEtterNesteStønadsperiodeHarDisponibleDager extends LeafSpecification { +public class SjekkOmEtterNesteStønadsperiodeHarDisponibleDager + extends LeafSpecification { public static final String ID = "FP_VK 10.5.7"; - public static final String BESKRIVELSE = "Er det disponible minsterettdager etter start av neste stønadsperiode?"; + public static final String BESKRIVELSE = + "Er det disponible minsterettdager etter start av neste stønadsperiode?"; public SjekkOmEtterNesteStønadsperiodeHarDisponibleDager() { super(ID); @@ -18,7 +19,8 @@ public class SjekkOmEtterNesteStønadsperiodeHarDisponibleDager extends LeafSpec @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { - if (!grunnlag.isSakMedRettEtterStartNesteStønadsperiode() || !grunnlag.erAktuellPeriodeEtterStartNesteStønadsperiode()) { + if (!grunnlag.isSakMedRettEtterStartNesteStønadsperiode() + || !grunnlag.erAktuellPeriodeEtterStartNesteStønadsperiode()) { return nei(); } if (grunnlag.getAktuellPeriode().isUtsettelse()) { @@ -27,7 +29,10 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { if (grunnlag.getAktuellPeriode().gjelderPeriodeMinsterett()) { for (var aktivitet : grunnlag.getAktuellPeriode().getAktiviteter()) { var saldoUtregning = grunnlag.getSaldoUtregning(); - if (saldoUtregning.saldoITrekkdager(grunnlag.getAktuellPeriode().getStønadskontotype(), aktivitet).merEnn0()) { + if (saldoUtregning + .saldoITrekkdager( + grunnlag.getAktuellPeriode().getStønadskontotype(), aktivitet) + .merEnn0()) { var saldo = saldoUtregning.restSaldoEtterNesteStønadsperiode(aktivitet); if (saldo.merEnn0()) { return ja(); diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFarsUttakRundtF\303\270dselTilgjengeligeDager.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFarsUttakRundtF\303\270dselTilgjengeligeDager.java" index 336e5830..9040d2b0 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFarsUttakRundtF\303\270dselTilgjengeligeDager.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFarsUttakRundtF\303\270dselTilgjengeligeDager.java" @@ -7,7 +7,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmFarsUttakRundtFødselTilgjengeligeDager.ID) -public class SjekkOmFarsUttakRundtFødselTilgjengeligeDager extends LeafSpecification { +public class SjekkOmFarsUttakRundtFødselTilgjengeligeDager + extends LeafSpecification { public static final String ID = "FP_VK 13.9"; @@ -17,15 +18,21 @@ public class SjekkOmFarsUttakRundtFødselTilgjengeligeDager extends LeafSpecific @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { - if (grunnlag.isSøkerMor() || grunnlag.getSaldoUtregning().getFarUttakRundtFødselDager().equals(Trekkdager.ZERO) - || grunnlag.periodeFarRundtFødsel().isEmpty()) { + if (grunnlag.isSøkerMor() + || grunnlag.getSaldoUtregning() + .getFarUttakRundtFødselDager() + .equals(Trekkdager.ZERO) + || grunnlag.periodeFarRundtFødsel().isEmpty()) { return nei(); } var periodeForUttakRundtFødsel = grunnlag.periodeFarRundtFødsel().orElseThrow(); var aktuellPeriode = grunnlag.getAktuellPeriode(); if (aktuellPeriode.erOmsluttetAv(periodeForUttakRundtFødsel)) { for (var aktivitet : aktuellPeriode.getAktiviteter()) { - var saldo = grunnlag.getSaldoUtregning().restSaldoFarUttakRundtFødsel(aktivitet, periodeForUttakRundtFødsel); + var saldo = + grunnlag.getSaldoUtregning() + .restSaldoFarUttakRundtFødsel( + aktivitet, periodeForUttakRundtFødsel); if (saldo.merEnn0()) { return ja(); } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFerieP\303\245BevegeligHelligdag.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFerieP\303\245BevegeligHelligdag.java" index bde08fa0..eac1369c 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFerieP\303\245BevegeligHelligdag.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFerieP\303\245BevegeligHelligdag.java" @@ -16,12 +16,12 @@ public class SjekkOmFeriePåBevegeligHelligdag extends LeafSpecification { +public class SjekkOmForeldreansvarsvilkåretErOppfylt + extends LeafSpecification { public static final String ID = "FP_VK 8"; diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmForeldrepengerF\303\270rF\303\270dselStarterForTidligEllerSlutterForSent.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmForeldrepengerF\303\270rF\303\270dselStarterForTidligEllerSlutterForSent.java" index bbe140fb..f38de92f 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmForeldrepengerF\303\270rF\303\270dselStarterForTidligEllerSlutterForSent.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmForeldrepengerF\303\270rF\303\270dselStarterForTidligEllerSlutterForSent.java" @@ -8,7 +8,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmForeldrepengerFørFødselStarterForTidligEllerSlutterForSent.ID) -public class SjekkOmForeldrepengerFørFødselStarterForTidligEllerSlutterForSent extends LeafSpecification { +public class SjekkOmForeldrepengerFørFødselStarterForTidligEllerSlutterForSent + extends LeafSpecification { public static final String ID = "FP_VK 27.3.2"; @@ -22,16 +23,18 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var familiehendelse = grunnlag.getFamiliehendelse(); - var ukerFørFødsel = Konfigurasjon.STANDARD.getParameter(Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, familiehendelse); + var ukerFørFødsel = + Konfigurasjon.STANDARD.getParameter( + Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, familiehendelse); var førsteLovligeDag = familiehendelse.minusWeeks(ukerFørFødsel); var sisteLovligeDag = familiehendelse.minusDays(1); - if (aktuellPeriode.getFom().isBefore(førsteLovligeDag) || aktuellPeriode.getTom().isAfter(sisteLovligeDag)) { + if (aktuellPeriode.getFom().isBefore(førsteLovligeDag) + || aktuellPeriode.getTom().isAfter(sisteLovligeDag)) { return ja(); } return nei(); - } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFulltArbeidForUtsettelse.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFulltArbeidForUtsettelse.java index b35f95fa..ea4f8352 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFulltArbeidForUtsettelse.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmFulltArbeidForUtsettelse.java @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser; import java.math.BigDecimal; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; import no.nav.fpsak.nare.evaluation.Evaluation; import no.nav.fpsak.nare.specification.LeafSpecification; diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmGyldigOverf\303\270ringPgaAleneomsorg.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmGyldigOverf\303\270ringPgaAleneomsorg.java" index 958e9326..4a0b3cc3 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmGyldigOverf\303\270ringPgaAleneomsorg.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmGyldigOverf\303\270ringPgaAleneomsorg.java" @@ -9,7 +9,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmGyldigOverføringPgaAleneomsorg.ID) -public class SjekkOmGyldigOverføringPgaAleneomsorg extends LeafSpecification { +public class SjekkOmGyldigOverføringPgaAleneomsorg + extends LeafSpecification { public static final String ID = "FP_VK 9.3"; @@ -20,7 +21,10 @@ public class SjekkOmGyldigOverføringPgaAleneomsorg extends LeafSpecification { +public class SjekkOmGyldigOverføringPgaIkkeRett + extends LeafSpecification { public static final String ID = "FP_VK 9.3"; @@ -20,7 +21,10 @@ public class SjekkOmGyldigOverføringPgaIkkeRett extends LeafSpecification { +public class SjekkOmGyldigOverføringPgaInnleggelse + extends LeafSpecification { public static final String ID = "FP_VK 9.1"; @@ -18,6 +19,9 @@ public class SjekkOmGyldigOverføringPgaInnleggelse extends LeafSpecification { +public class SjekkOmGyldigOverføringPgaSykdomSkade + extends LeafSpecification { public static final String ID = "FP_VK 9.3"; @@ -20,6 +21,9 @@ public class SjekkOmGyldigOverføringPgaSykdomSkade extends LeafSpecification { +public class SjekkOmHvisOverlapperSåSamtykkeMellomParter + extends LeafSpecification { public static final String ID = "FP_VK 30.0.2"; @@ -22,10 +23,9 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { private boolean ingenOverlapp(FastsettePeriodeGrunnlag grunnlag) { var aktuellPeriode = grunnlag.getAktuellPeriode(); - return grunnlag.getAnnenPartUttaksperioder() - .stream() - .filter(app -> PerioderUtenHelgUtil.perioderUtenHelgOverlapper(aktuellPeriode, app)) - .findFirst() - .isEmpty(); + return grunnlag.getAnnenPartUttaksperioder().stream() + .filter(app -> PerioderUtenHelgUtil.perioderUtenHelgOverlapper(aktuellPeriode, app)) + .findFirst() + .isEmpty(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmMinsterettHarDisponibleDager.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmMinsterettHarDisponibleDager.java index a4d6f4bd..d2c2736a 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmMinsterettHarDisponibleDager.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmMinsterettHarDisponibleDager.java @@ -1,13 +1,13 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser; - 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; @RuleDocumentation(SjekkOmMinsterettHarDisponibleDager.ID) -public class SjekkOmMinsterettHarDisponibleDager extends LeafSpecification { +public class SjekkOmMinsterettHarDisponibleDager + extends LeafSpecification { public static final String ID = "FP_VK 10.5.4"; public static final String BESKRIVELSE = "Er det disponible minsterettdager?"; @@ -18,11 +18,15 @@ public SjekkOmMinsterettHarDisponibleDager() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { - if (grunnlag.isSakMedMinsterett() && grunnlag.getAktuellPeriode().gjelderPeriodeMinsterett() - && !grunnlag.erAktuellPeriodeEtterStartNesteStønadsperiode()) { + if (grunnlag.isSakMedMinsterett() + && grunnlag.getAktuellPeriode().gjelderPeriodeMinsterett() + && !grunnlag.erAktuellPeriodeEtterStartNesteStønadsperiode()) { for (var aktivitet : grunnlag.getAktuellPeriode().getAktiviteter()) { var saldoUtregning = grunnlag.getSaldoUtregning(); - if (saldoUtregning.saldoITrekkdager(grunnlag.getAktuellPeriode().getStønadskontotype(), aktivitet).merEnn0()) { + if (saldoUtregning + .saldoITrekkdager( + grunnlag.getAktuellPeriode().getStønadskontotype(), aktivitet) + .merEnn0()) { var saldo = saldoUtregning.restSaldoMinsterett(aktivitet); if (saldo.merEnn0()) { return ja(); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOppholdFellesperiodeAnnenForelder.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOppholdFellesperiodeAnnenForelder.java index 88911131..f2522772 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOppholdFellesperiodeAnnenForelder.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOppholdFellesperiodeAnnenForelder.java @@ -5,7 +5,8 @@ import no.nav.fpsak.nare.evaluation.Evaluation; import no.nav.fpsak.nare.specification.LeafSpecification; -public class SjekkOmOppholdFellesperiodeAnnenForelder extends LeafSpecification { +public class SjekkOmOppholdFellesperiodeAnnenForelder + extends LeafSpecification { public static final String ID = "FP_VK 9.0.0.1"; @@ -16,6 +17,8 @@ public SjekkOmOppholdFellesperiodeAnnenForelder() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var oppgittPeriode = grunnlag.getAktuellPeriode(); - return oppgittPeriode.isOppholdPga(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) ? ja() : nei(); + return oppgittPeriode.isOppholdPga(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + ? ja() + : nei(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOppholdKvoteAnnenForelder.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOppholdKvoteAnnenForelder.java index ff48a54e..46a89022 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOppholdKvoteAnnenForelder.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOppholdKvoteAnnenForelder.java @@ -16,8 +16,10 @@ public SjekkOmOppholdKvoteAnnenForelder() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var oppgittPeriode = grunnlag.getAktuellPeriode(); - var erOppholdKvote = oppgittPeriode.isOppholdPga(OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER) || oppgittPeriode.isOppholdPga( - OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) || oppgittPeriode.isOppholdPga(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER); + var erOppholdKvote = + oppgittPeriode.isOppholdPga(OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER) + || oppgittPeriode.isOppholdPga(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + || oppgittPeriode.isOppholdPga(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER); return erOppholdKvote ? ja() : nei(); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOpph\303\270rsdatoTrefferPerioden.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOpph\303\270rsdatoTrefferPerioden.java" index b89c63ec..932143c8 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOpph\303\270rsdatoTrefferPerioden.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOpph\303\270rsdatoTrefferPerioden.java" @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser; import java.time.LocalDate; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; import no.nav.fpsak.nare.evaluation.Evaluation; @@ -24,11 +23,14 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { return nei(); } - return erOpphørsdatoIEllerFørPerioden(oppgittPeriode, opphørsdatoForMedlemskap) ? ja() : nei(); + return erOpphørsdatoIEllerFørPerioden(oppgittPeriode, opphørsdatoForMedlemskap) + ? ja() + : nei(); } - - private boolean erOpphørsdatoIEllerFørPerioden(OppgittPeriode oppgittPeriode, LocalDate opphørsdato) { - return oppgittPeriode.overlapper(opphørsdato) || oppgittPeriode.getFom().isAfter(opphørsdato); + private boolean erOpphørsdatoIEllerFørPerioden( + OppgittPeriode oppgittPeriode, LocalDate opphørsdato) { + return oppgittPeriode.overlapper(opphørsdato) + || oppgittPeriode.getFom().isAfter(opphørsdato); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOpptjeningsvilk\303\245retErOppfylt.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOpptjeningsvilk\303\245retErOppfylt.java" index 8d220d32..ee31794a 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOpptjeningsvilk\303\245retErOppfylt.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOpptjeningsvilk\303\245retErOppfylt.java" @@ -4,7 +4,8 @@ import no.nav.fpsak.nare.evaluation.Evaluation; import no.nav.fpsak.nare.specification.LeafSpecification; -public class SjekkOmOpptjeningsvilkåretErOppfylt extends LeafSpecification { +public class SjekkOmOpptjeningsvilkåretErOppfylt + extends LeafSpecification { public static final String ID = "FP_VK 23"; diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOverf\303\270ringPgaAleneomsorg.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOverf\303\270ringPgaAleneomsorg.java" index 9193a0ea..2c7653ba 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOverf\303\270ringPgaAleneomsorg.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmOverf\303\270ringPgaAleneomsorg.java" @@ -18,6 +18,8 @@ public class SjekkOmOverføringPgaAleneomsorg extends LeafSpecification { +public class SjekkOmPeriodeErForeldrepengerFørFødsel + extends LeafSpecification { public static final String ID = "FP_VK 27"; @@ -15,7 +16,6 @@ public class SjekkOmPeriodeErForeldrepengerFørFødsel extends LeafSpecification super(ID); } - @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var stønadskontotype = grunnlag.getAktuellPeriode().getStønadskontotype(); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodeErUtsettelse.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodeErUtsettelse.java index ab851b28..e452b75b 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodeErUtsettelse.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodeErUtsettelse.java @@ -19,8 +19,4 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var oppgittPeriode = grunnlag.getAktuellPeriode(); return oppgittPeriode.isUtsettelse() ? ja() : nei(); } - } - - - diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErEtterMaksgrenseForUttak.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErEtterMaksgrenseForUttak.java index 7c38c888..bac063b4 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErEtterMaksgrenseForUttak.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErEtterMaksgrenseForUttak.java @@ -2,7 +2,6 @@ import java.time.LocalDate; import java.time.Period; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.Konfigurasjon; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.Parametertype; @@ -11,10 +10,12 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmPeriodenErEtterMaksgrenseForUttak.ID) -public class SjekkOmPeriodenErEtterMaksgrenseForUttak extends LeafSpecification { +public class SjekkOmPeriodenErEtterMaksgrenseForUttak + extends LeafSpecification { public static final String ID = "FP_VK 15.6"; - public static final String BESKRIVELSE = "Er hele perioden innenfor maksimalgrense for foreldrepenger?"; + public static final String BESKRIVELSE = + "Er hele perioden innenfor maksimalgrense for foreldrepenger?"; public SjekkOmPeriodenErEtterMaksgrenseForUttak() { super(ID); @@ -31,8 +32,10 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { } public static LocalDate regnUtMaksgrenseForLovligeUttaksdag(LocalDate familiehendelse) { - var maksGrenseRelativTilFamiliehendelse = Period.ofYears( - Konfigurasjon.STANDARD.getParameter(Parametertype.GRENSE_ETTER_FØDSELSDATO_ÅR, familiehendelse)); + var maksGrenseRelativTilFamiliehendelse = + Period.ofYears( + Konfigurasjon.STANDARD.getParameter( + Parametertype.GRENSE_ETTER_FØDSELSDATO_ÅR, familiehendelse)); return familiehendelse.plus(maksGrenseRelativTilFamiliehendelse); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErEtterNesteSt\303\270nadsperiode.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErEtterNesteSt\303\270nadsperiode.java" index 9abcfc92..bda7483c 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErEtterNesteSt\303\270nadsperiode.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErEtterNesteSt\303\270nadsperiode.java" @@ -6,10 +6,12 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmPeriodenErEtterNesteStønadsperiode.ID) -public class SjekkOmPeriodenErEtterNesteStønadsperiode extends LeafSpecification { +public class SjekkOmPeriodenErEtterNesteStønadsperiode + extends LeafSpecification { public static final String ID = "FP_VK 15.7"; - public static final String BESKRIVELSE = "Er uttaksperioden etter start av neste stønadsperiode??"; + public static final String BESKRIVELSE = + "Er uttaksperioden etter start av neste stønadsperiode??"; public SjekkOmPeriodenErEtterNesteStønadsperiode() { super(ID); diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErF\303\270rGyldigDato.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErF\303\270rGyldigDato.java" index 422c0c3e..ded0fd6e 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErF\303\270rGyldigDato.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenErF\303\270rGyldigDato.java" @@ -22,7 +22,10 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { if (tidligstMottattDato.isEmpty()) { return nei(); } - if (oppgittPeriode.getTom().isBefore(SøknadsfristUtil.finnFørsteLoveligeUttaksdag(tidligstMottattDato.get()))) { + if (oppgittPeriode + .getTom() + .isBefore( + SøknadsfristUtil.finnFørsteLoveligeUttaksdag(tidligstMottattDato.get()))) { return ja(); } return nei(); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenGjelderFlerbarnsdager.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenGjelderFlerbarnsdager.java index 577900b1..b13bfac6 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenGjelderFlerbarnsdager.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenGjelderFlerbarnsdager.java @@ -6,7 +6,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmPeriodenGjelderFlerbarnsdager.ID) -public class SjekkOmPeriodenGjelderFlerbarnsdager extends LeafSpecification { +public class SjekkOmPeriodenGjelderFlerbarnsdager + extends LeafSpecification { public static final String ID = "FP_VK 13.4"; public static final String BESKRIVELSE = "Gjelder perioden flerbarnsdager?"; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenInnenforUkerReservertMor.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenInnenforUkerReservertMor.java index 43a42b1b..5edbd9ff 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenInnenforUkerReservertMor.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenInnenforUkerReservertMor.java @@ -9,7 +9,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmPeriodenInnenforUkerReservertMor.ID) -public class SjekkOmPeriodenInnenforUkerReservertMor extends LeafSpecification { +public class SjekkOmPeriodenInnenforUkerReservertMor + extends LeafSpecification { public static final String ID = "FP_VK 10.3"; @@ -23,15 +24,23 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var familiehendelse = grunnlag.getFamiliehendelse(); - var antallUkerEtterFødsel = Konfigurasjon.STANDARD.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, familiehendelse); + var antallUkerEtterFødsel = + Konfigurasjon.STANDARD.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, familiehendelse); - var periodeEtterFødselNormaltReservertMor = new LukketPeriode(familiehendelse, familiehendelse.plusWeeks(antallUkerEtterFødsel).minusDays(1)); + var periodeEtterFødselNormaltReservertMor = + new LukketPeriode( + familiehendelse, + familiehendelse.plusWeeks(antallUkerEtterFødsel).minusDays(1)); if (periodeEtterFødselNormaltReservertMor.overlapper(aktuellPeriode)) { if (aktuellPeriode.erOmsluttetAv(periodeEtterFødselNormaltReservertMor)) { return ja(); } throw new IllegalArgumentException( - "Utvikler-feil: periode er ikke knekt riktig fom=" + aktuellPeriode.getFom() + " tom=" + aktuellPeriode.getTom()); + "Utvikler-feil: periode er ikke knekt riktig fom=" + + aktuellPeriode.getFom() + + " tom=" + + aktuellPeriode.getTom()); } return nei(); } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenOpprettetAvF\303\270dselshendelse.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenOpprettetAvF\303\270dselshendelse.java" index defd5ce2..c68d0428 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenOpprettetAvF\303\270dselshendelse.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenOpprettetAvF\303\270dselshendelse.java" @@ -4,7 +4,6 @@ import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.PerioderUtenHelgUtil.helgBlirFredag; import java.time.LocalDate; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.Konfigurasjon; @@ -14,10 +13,12 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmPeriodenOpprettetAvFødselshendelse.ID) -public class SjekkOmPeriodenOpprettetAvFødselshendelse extends LeafSpecification { +public class SjekkOmPeriodenOpprettetAvFødselshendelse + extends LeafSpecification { public static final String ID = "FP_VK 10.4"; - public static final String BESKRIVELSE = "Er perioden opprettet pga justering ved fødselshendelse?"; + public static final String BESKRIVELSE = + "Er perioden opprettet pga justering ved fødselshendelse?"; public SjekkOmPeriodenOpprettetAvFødselshendelse() { super(ID); @@ -35,17 +36,22 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { return nei(); } - //Ved fødsel etter termin vil det ligge en periode fellesperiode som første periode i uttaket. Sjekker dette for - //å ikke innvilge msp hvis det ikke har vært noe justering. Best effort + // Ved fødsel etter termin vil det ligge en periode fellesperiode som første periode i + // uttaket. Sjekker dette for + // å ikke innvilge msp hvis det ikke har vært noe justering. Best effort if (!forbruktFellesperiode(grunnlag)) { return nei(); } - var antallUkerEtterFødsel = Konfigurasjon.STANDARD.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, fødselsdato); + var antallUkerEtterFødsel = + Konfigurasjon.STANDARD.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, fødselsdato); var aktuellPeriode = grunnlag.getAktuellPeriode(); - //Noen caser vil vi innvilge msp selv om bruker bestemt har søkt om å ikke ha uttak i perioden. Burde være veldig få saker - if (erPeriodeISisteDelAvFørsteUkeneForbeholdtMor(fødselsdato, antallUkerEtterFødsel, aktuellPeriode)) { + // Noen caser vil vi innvilge msp selv om bruker bestemt har søkt om å ikke ha uttak i + // perioden. Burde være veldig få saker + if (erPeriodeISisteDelAvFørsteUkeneForbeholdtMor( + fødselsdato, antallUkerEtterFødsel, aktuellPeriode)) { return ja(); } return nei(); @@ -56,9 +62,10 @@ private boolean forbruktFellesperiode(FastsettePeriodeGrunnlag grunnlag) { return saldoUtregning.getMaxDager(FELLESPERIODE) > saldoUtregning.saldo(FELLESPERIODE); } - private static boolean erPeriodeISisteDelAvFørsteUkeneForbeholdtMor(LocalDate fødselsdato, - Integer antallUkerEtterFødsel, - OppgittPeriode aktuellPeriode) { - return aktuellPeriode.getTom().isEqual(helgBlirFredag(fødselsdato.plusWeeks(antallUkerEtterFødsel).minusDays(1))); + private static boolean erPeriodeISisteDelAvFørsteUkeneForbeholdtMor( + LocalDate fødselsdato, Integer antallUkerEtterFødsel, OppgittPeriode aktuellPeriode) { + return aktuellPeriode + .getTom() + .isEqual(helgBlirFredag(fødselsdato.plusWeeks(antallUkerEtterFødsel).minusDays(1))); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenSlutterF\303\270rFamiliehendelse.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenSlutterF\303\270rFamiliehendelse.java" index 21b23cfe..c6e58165 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenSlutterF\303\270rFamiliehendelse.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenSlutterF\303\270rFamiliehendelse.java" @@ -6,7 +6,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmPeriodenSlutterFørFamiliehendelse.ID) -public class SjekkOmPeriodenSlutterFørFamiliehendelse extends LeafSpecification { +public class SjekkOmPeriodenSlutterFørFamiliehendelse + extends LeafSpecification { public static final String ID = "FP_VK 11.5"; @@ -23,6 +24,4 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { } return nei(); } - - } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rFamiliehendelse.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rFamiliehendelse.java" index c4984b3c..64738319 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rFamiliehendelse.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rFamiliehendelse.java" @@ -6,7 +6,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmPeriodenStarterFørFamiliehendelse.ID) -public class SjekkOmPeriodenStarterFørFamiliehendelse extends LeafSpecification { +public class SjekkOmPeriodenStarterFørFamiliehendelse + extends LeafSpecification { public static final String ID = "FP_VK 10.2"; public static final String BESKRIVELSE = "Starter perioden før familiehendelsen?"; @@ -24,5 +25,4 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { } return nei(); } - } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rLovligUttakF\303\270rF\303\270dselTermin.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rLovligUttakF\303\270rF\303\270dselTermin.java" index 1220e638..89448fcb 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rLovligUttakF\303\270rF\303\270dselTermin.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rLovligUttakF\303\270rF\303\270dselTermin.java" @@ -4,7 +4,6 @@ import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype.TERMIN; import java.time.LocalDate; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.Konfigurasjon; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.Parametertype; @@ -13,10 +12,12 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.ID) -public class SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin extends LeafSpecification { +public class SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin + extends LeafSpecification { public static final String ID = "FP_VK 27.2"; - public static final String BESKRIVELSE = "Starter uttaket tidligere enn 12 uker før fødsel/termin"; + public static final String BESKRIVELSE = + "Starter uttaket tidligere enn 12 uker før fødsel/termin"; public SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin() { super(ID); @@ -27,7 +28,9 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var hendelseDato = hendelseDato(grunnlag); var aktuellPeriode = grunnlag.getAktuellPeriode(); var startDatoUttak = aktuellPeriode.getFom(); - var ukerFørFamiliehendelseUttaksgrense = Konfigurasjon.STANDARD.getParameter(Parametertype.TIDLIGST_UTTAK_FØR_TERMIN_UKER, hendelseDato); + var ukerFørFamiliehendelseUttaksgrense = + Konfigurasjon.STANDARD.getParameter( + Parametertype.TIDLIGST_UTTAK_FØR_TERMIN_UKER, hendelseDato); if (startDatoUttak.isBefore(hendelseDato.minusWeeks(ukerFørFamiliehendelseUttaksgrense))) { return ja(); } @@ -37,9 +40,11 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { private LocalDate hendelseDato(FastsettePeriodeGrunnlag grunnlag) { var søknadType = grunnlag.getSøknadstype(); if (søknadType != TERMIN && søknadType != FØDSEL) { - throw new IllegalArgumentException("Forventer Søknadstype termin eller fødsel, fikk " + søknadType); + throw new IllegalArgumentException( + "Forventer Søknadstype termin eller fødsel, fikk " + søknadType); } - return søknadType == TERMIN ? grunnlag.getTermindato() // søknadsfrist regnes fra termindato ved terminsøknad - : grunnlag.getFødselsdato(); + return søknadType == TERMIN + ? grunnlag.getTermindato() // søknadsfrist regnes fra termindato ved terminsøknad + : grunnlag.getFødselsdato(); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rUke7.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rUke7.java" index b2b43f92..2f5ab662 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rUke7.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmPeriodenStarterF\303\270rUke7.java" @@ -18,8 +18,13 @@ public class SjekkOmPeriodenStarterFørUke7 extends LeafSpecification pp.overlapper(periode)) ? ja() : nei(); + // Regner med at søknadsperiode er knekt etter perioder med pleiepenger + return perioderMedPleiepenger.stream().anyMatch(pp -> pp.overlapper(periode)) + ? ja() + : nei(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmSykdomSkade.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmSykdomSkade.java index 777610f0..54262db7 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmSykdomSkade.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmSykdomSkade.java @@ -10,7 +10,8 @@ @RuleDocumentation(SjekkOmSykdomSkade.ID) public class SjekkOmSykdomSkade extends LeafSpecification { public static final String ID = "FP_VK 18.3.2"; - public static final String BESKRIVELSE = "Er søker vurdert til ute av stand til å ta seg av barnet i perioden?"; + public static final String BESKRIVELSE = + "Er søker vurdert til ute av stand til å ta seg av barnet i perioden?"; public SjekkOmSykdomSkade() { super(ID); @@ -18,6 +19,9 @@ public SjekkOmSykdomSkade() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { - return SYKDOM_SØKER_GODKJENT.equals(grunnlag.getAktuellPeriode().getDokumentasjonVurdering()) ? ja() : nei(); + return SYKDOM_SØKER_GODKJENT.equals( + grunnlag.getAktuellPeriode().getDokumentasjonVurdering()) + ? ja() + : nei(); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmS\303\270kerErMor.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmS\303\270kerErMor.java" index 5afc53c2..240e1bc6 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmS\303\270kerErMor.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmS\303\270kerErMor.java" @@ -11,7 +11,6 @@ public class SjekkOmSøkerErMor extends LeafSpecification { +public class SjekkOmSøknadGjelderTerminEllerFødsel + extends LeafSpecification { public static final String ID = "FP_VK 10.1"; public static final String BESKRIVELSE = "Er søknaden en terminsøknad/fødselsøknad?"; @@ -19,5 +20,4 @@ public class SjekkOmSøknadGjelderTerminEllerFødsel extends LeafSpecification { +public class SjekkOmSøktGraderingHundreProsentEllerMer + extends LeafSpecification { public static final String ID = "FP_VK 26.1.8.3"; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTapendePeriode.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTapendePeriode.java index ce553fcf..dc6e950a 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTapendePeriode.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTapendePeriode.java @@ -10,7 +10,8 @@ public class SjekkOmTapendePeriode extends LeafSpecification { public static final String ID = "FP_VK 30.0.7"; - public static final String BESKRIVELSE = "Har annen part senere søkt om uttak/utsettelse i samme tidsperiode?"; + public static final String BESKRIVELSE = + "Har annen part senere søkt om uttak/utsettelse i samme tidsperiode?"; public SjekkOmTapendePeriode() { super(ID); @@ -24,5 +25,4 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { private boolean harAnnenpartSenereMottattDato(FastsettePeriodeGrunnlag grunnlag) { return SamtidigUttakUtil.erTapendePeriodeRegel(grunnlag); } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTidsperiodeForbeholdtMor.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTidsperiodeForbeholdtMor.java index e82ad4cc..c2e856ee 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTidsperiodeForbeholdtMor.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTidsperiodeForbeholdtMor.java @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser; import java.time.LocalDate; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.Konfigurasjon; @@ -28,17 +27,23 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var fomDatoForbeholdtMor = fomDatoForbeholdtMor(familiehendelse); var tomDatoForbeholdtMor = tomDatoForbeholdtMor(familiehendelse); - //Regner med at oppgitte perioder er knekk riktig - return periode.overlapper(new LukketPeriode(fomDatoForbeholdtMor, tomDatoForbeholdtMor)) ? ja() : nei(); + // Regner med at oppgitte perioder er knekk riktig + return periode.overlapper(new LukketPeriode(fomDatoForbeholdtMor, tomDatoForbeholdtMor)) + ? ja() + : nei(); } private LocalDate fomDatoForbeholdtMor(LocalDate familiehendelse) { - var antallUkerFør = Konfigurasjon.STANDARD.getParameter(Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, familiehendelse); + var antallUkerFør = + Konfigurasjon.STANDARD.getParameter( + Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, familiehendelse); return familiehendelse.minusWeeks(antallUkerFør); } private LocalDate tomDatoForbeholdtMor(LocalDate familiehendelse) { - var antallUkerEtter = Konfigurasjon.STANDARD.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, familiehendelse); + var antallUkerEtter = + Konfigurasjon.STANDARD.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, familiehendelse); return familiehendelse.plusWeeks(antallUkerEtter).minusDays(1); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTilgjengeligeDagerP\303\245NoenAktiviteteneForS\303\270ktSt\303\270nadskonto.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTilgjengeligeDagerP\303\245NoenAktiviteteneForS\303\270ktSt\303\270nadskonto.java" index ba3c8433..105bc07d 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTilgjengeligeDagerP\303\245NoenAktiviteteneForS\303\270ktSt\303\270nadskonto.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTilgjengeligeDagerP\303\245NoenAktiviteteneForS\303\270ktSt\303\270nadskonto.java" @@ -6,10 +6,12 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID) -public class SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto extends LeafSpecification { +public class SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto + extends LeafSpecification { public static final String ID = "FP_VK 10.5"; - public static final String BESKRIVELSE = "Har noen aktiviteter disponible stønadsdager på kvoten?"; + public static final String BESKRIVELSE = + "Har noen aktiviteter disponible stønadsdager på kvoten?"; public SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto() { super(ID); @@ -24,7 +26,8 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var saldo = grunnlag.getSaldoUtregning().saldoITrekkdager(stønadskontotype, aktivitet); if (saldo.merEnn0()) { if (aktuellPeriode.isFlerbarnsdager()) { - var saldoFlerbarnsdager = grunnlag.getSaldoUtregning().restSaldoFlerbarnsdager(aktivitet); + var saldoFlerbarnsdager = + grunnlag.getSaldoUtregning().restSaldoFlerbarnsdager(aktivitet); if (saldoFlerbarnsdager.merEnn0()) { return ja(); } @@ -35,5 +38,4 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { } return nei(); } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTomForAlleSineKontoer.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTomForAlleSineKontoer.java index e715d4bd..f218d4c5 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTomForAlleSineKontoer.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTomForAlleSineKontoer.java @@ -3,7 +3,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype; import no.nav.fpsak.nare.doc.RuleDocumentation; @@ -26,9 +25,14 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var tomForAlleSineKontoer = true; for (var stønadskontotype : hentSøkerSineKontoer(grunnlag)) { for (var aktivitet : grunnlag.getAktuellPeriode().getAktiviteter()) { - var nettosaldo = grunnlag.getSaldoUtregning() - .nettoSaldoJustertForMinsterett(stønadskontotype, aktivitet, - !sakMedMinsterett || grunnlag.getAktuellPeriode().kanTrekkeAvMinsterett()); + var nettosaldo = + grunnlag.getSaldoUtregning() + .nettoSaldoJustertForMinsterett( + stønadskontotype, + aktivitet, + !sakMedMinsterett + || grunnlag.getAktuellPeriode() + .kanTrekkeAvMinsterett()); if (nettosaldo.merEnn0()) { tomForAlleSineKontoer = false; } @@ -41,11 +45,17 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { final List søkerSineKonto; if (!søkerOgAnnenForelderSineKontoer(grunnlag).contains(Stønadskontotype.FORELDREPENGER)) { if (grunnlag.isSøkerMor()) { - søkerSineKonto = Arrays.asList(Stønadskontotype.MØDREKVOTE, Stønadskontotype.FELLESPERIODE, - Stønadskontotype.FORELDREPENGER); // 1 og 5 + søkerSineKonto = + Arrays.asList( + Stønadskontotype.MØDREKVOTE, + Stønadskontotype.FELLESPERIODE, + Stønadskontotype.FORELDREPENGER); // 1 og 5 } else { - søkerSineKonto = Arrays.asList(Stønadskontotype.FEDREKVOTE, Stønadskontotype.FELLESPERIODE, - Stønadskontotype.FORELDREPENGER); // 3 og 7 + søkerSineKonto = + Arrays.asList( + Stønadskontotype.FEDREKVOTE, + Stønadskontotype.FELLESPERIODE, + Stønadskontotype.FORELDREPENGER); // 3 og 7 } } else { // en har rett søkerSineKonto = List.of(Stønadskontotype.FORELDREPENGER); // 2 4 6 og 8 @@ -53,7 +63,8 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { return søkerSineKonto; } - private static List søkerOgAnnenForelderSineKontoer(FastsettePeriodeGrunnlag grunnlag) { + private static List søkerOgAnnenForelderSineKontoer( + FastsettePeriodeGrunnlag grunnlag) { return new ArrayList<>(grunnlag.getGyldigeStønadskontotyper()); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUf\303\270reUtenAktivitetskravHarDisponibleDager.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUf\303\270reUtenAktivitetskravHarDisponibleDager.java" index f450d6aa..a42c8796 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUf\303\270reUtenAktivitetskravHarDisponibleDager.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUf\303\270reUtenAktivitetskravHarDisponibleDager.java" @@ -1,13 +1,13 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser; - 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; @RuleDocumentation(SjekkOmUføreUtenAktivitetskravHarDisponibleDager.ID) -public class SjekkOmUføreUtenAktivitetskravHarDisponibleDager extends LeafSpecification { +public class SjekkOmUføreUtenAktivitetskravHarDisponibleDager + extends LeafSpecification { public static final String ID = "FP_VK 10.5.5"; public static final String BESKRIVELSE = "Er det disponible dager uten aktivitetskrav?"; @@ -18,10 +18,14 @@ public class SjekkOmUføreUtenAktivitetskravHarDisponibleDager extends LeafSpeci @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { - if (grunnlag.isSakMedDagerUtenAktivitetskrav() && grunnlag.getAktuellPeriode().gjelderPeriodeMinsterett()) { + if (grunnlag.isSakMedDagerUtenAktivitetskrav() + && grunnlag.getAktuellPeriode().gjelderPeriodeMinsterett()) { for (var aktivitet : grunnlag.getAktuellPeriode().getAktiviteter()) { var saldoUtregning = grunnlag.getSaldoUtregning(); - if (saldoUtregning.saldoITrekkdager(grunnlag.getAktuellPeriode().getStønadskontotype(), aktivitet).merEnn0()) { + if (saldoUtregning + .saldoITrekkdager( + grunnlag.getAktuellPeriode().getStønadskontotype(), aktivitet) + .merEnn0()) { var saldo = saldoUtregning.restSaldoDagerUtenAktivitetskrav(aktivitet); if (saldo.merEnn0()) { return ja(); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaBarnetsInnleggelse.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaBarnetsInnleggelse.java index 72b2aa88..6920d79e 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaBarnetsInnleggelse.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaBarnetsInnleggelse.java @@ -7,9 +7,11 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmUtsettelsePgaBarnetsInnleggelse.ID) -public class SjekkOmUtsettelsePgaBarnetsInnleggelse extends LeafSpecification { +public class SjekkOmUtsettelsePgaBarnetsInnleggelse + extends LeafSpecification { public static final String ID = "FP_VK 18.3.9"; - public static final String BESKRIVELSE = "Er det utsettelse pga barnet innlagt i helseinstitusjon?"; + public static final String BESKRIVELSE = + "Er det utsettelse pga barnet innlagt i helseinstitusjon?"; public SjekkOmUtsettelsePgaBarnetsInnleggelse() { super(ID); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaSykdomSkade.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaSykdomSkade.java index 0d21da33..885f39ef 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaSykdomSkade.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaSykdomSkade.java @@ -15,7 +15,6 @@ public SjekkOmUtsettelsePgaSykdomSkade() { super(ID); } - @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var oppgittPeriode = grunnlag.getAktuellPeriode(); diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaS\303\270kerInnleggelse.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaS\303\270kerInnleggelse.java" index c39f2471..ad96b312 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaS\303\270kerInnleggelse.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUtsettelsePgaS\303\270kerInnleggelse.java" @@ -7,9 +7,11 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmUtsettelsePgaSøkerInnleggelse.ID) -public class SjekkOmUtsettelsePgaSøkerInnleggelse extends LeafSpecification { +public class SjekkOmUtsettelsePgaSøkerInnleggelse + extends LeafSpecification { public static final String ID = "FP_VK 18.3.3"; - public static final String BESKRIVELSE = "Er det utsettelse pga søkers innleggelse i helseinstitusjon?"; + public static final String BESKRIVELSE = + "Er det utsettelse pga søkers innleggelse i helseinstitusjon?"; public SjekkOmUtsettelsePgaSøkerInnleggelse() { super(ID); diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttakSkjerEtterDeF\303\270rsteUkene.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttakSkjerEtterDeF\303\270rsteUkene.java" index 70ddd86e..99b058e5 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttakSkjerEtterDeF\303\270rsteUkene.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttakSkjerEtterDeF\303\270rsteUkene.java" @@ -8,7 +8,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmUttakSkjerEtterDeFørsteUkene.ID) -public class SjekkOmUttakSkjerEtterDeFørsteUkene extends LeafSpecification { +public class SjekkOmUttakSkjerEtterDeFørsteUkene + extends LeafSpecification { public static final String ID = "FP_VK 19.2"; public static final String BESKRIVELSE = "Er perioden etter uke 6 etter termin/fødsel?"; @@ -20,9 +21,12 @@ public class SjekkOmUttakSkjerEtterDeFørsteUkene extends LeafSpecification { +public class SjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel + extends LeafSpecification { public static final String ID = "FP_VK 27.5"; @@ -20,12 +21,14 @@ public class SjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel extends Le public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { var aktuellPeriode = grunnlag.getAktuellPeriode(); var startDatoUttak = aktuellPeriode.getFom(); - var ukerFørFødselUttaksgrenseForeldrepenger = Konfigurasjon.STANDARD.getParameter(Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, - grunnlag.getFamiliehendelse()); - if (startDatoUttak.isBefore(grunnlag.getFamiliehendelse().minusWeeks(ukerFørFødselUttaksgrenseForeldrepenger))) { + var ukerFørFødselUttaksgrenseForeldrepenger = + Konfigurasjon.STANDARD.getParameter( + Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, grunnlag.getFamiliehendelse()); + if (startDatoUttak.isBefore( + grunnlag.getFamiliehendelse() + .minusWeeks(ukerFørFødselUttaksgrenseForeldrepenger))) { return ja(); } return nei(); } - } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttaksperiodenEtter6UkerEtterBarnsD\303\270dsdato.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttaksperiodenEtter6UkerEtterBarnsD\303\270dsdato.java" index 7c80cdef..84db787b 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttaksperiodenEtter6UkerEtterBarnsD\303\270dsdato.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttaksperiodenEtter6UkerEtterBarnsD\303\270dsdato.java" @@ -8,7 +8,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato.ID) -public class SjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato extends LeafSpecification { +public class SjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato + extends LeafSpecification { public static final String ID = "FP_VK 17.1.1.1"; @@ -18,13 +19,16 @@ public class SjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato extends LeafSpec @Override public Evaluation evaluate(FastsettePeriodeGrunnlag fastsettePeriodeGrunnlag) { - var antallUkerUttakEtterBarnDødt = Konfigurasjon.STANDARD.getParameter(Parametertype.UTTAK_ETTER_BARN_DØDT_UKER, - fastsettePeriodeGrunnlag.getFamiliehendelse()); + var antallUkerUttakEtterBarnDødt = + Konfigurasjon.STANDARD.getParameter( + Parametertype.UTTAK_ETTER_BARN_DØDT_UKER, + fastsettePeriodeGrunnlag.getFamiliehendelse()); if (fastsettePeriodeGrunnlag.getDødsdatoForBarn() != null) { var dødsdatoForBarn = fastsettePeriodeGrunnlag.getDødsdatoForBarn(); var oppgittPeriode = fastsettePeriodeGrunnlag.getAktuellPeriode(); var ukerEtterBarnDødt = dødsdatoForBarn.plusWeeks(antallUkerUttakEtterBarnDødt); - if (oppgittPeriode.getFom().isAfter(ukerEtterBarnDødt) || oppgittPeriode.getFom().equals(ukerEtterBarnDødt)) { + if (oppgittPeriode.getFom().isAfter(ukerEtterBarnDødt) + || oppgittPeriode.getFom().equals(ukerEtterBarnDødt)) { return ja(); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttaksperiodenEtterS\303\270kersD\303\270dsdato.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttaksperiodenEtterS\303\270kersD\303\270dsdato.java" index bd175793..6f8b731e 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttaksperiodenEtterS\303\270kersD\303\270dsdato.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmUttaksperiodenEtterS\303\270kersD\303\270dsdato.java" @@ -6,7 +6,8 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmUttaksperiodenEtterSøkersDødsdato.ID) -public class SjekkOmUttaksperiodenEtterSøkersDødsdato extends LeafSpecification { +public class SjekkOmUttaksperiodenEtterSøkersDødsdato + extends LeafSpecification { public static final String ID = "FP_VK 17.0"; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmAktivitetErDokumentert.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmAktivitetErDokumentert.java index 7e15aa6b..72abb008 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmAktivitetErDokumentert.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmAktivitetErDokumentert.java @@ -18,6 +18,9 @@ public SjekkOmAktivitetErDokumentert() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag fastsettePeriodeGrunnlag) { - return MORS_AKTIVITET_IKKE_GODKJENT.equals(fastsettePeriodeGrunnlag.getAktuellPeriode().getDokumentasjonVurdering()) ? ja() : nei(); + return MORS_AKTIVITET_IKKE_GODKJENT.equals( + fastsettePeriodeGrunnlag.getAktuellPeriode().getDokumentasjonVurdering()) + ? ja() + : nei(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmFriUtsettelse.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmFriUtsettelse.java index cb0cada0..3f1a5f49 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmFriUtsettelse.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmFriUtsettelse.java @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.aktkrav; import java.util.Objects; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UtsettelseÅrsak; import no.nav.fpsak.nare.doc.RuleDocumentation; @@ -19,6 +18,10 @@ public SjekkOmFriUtsettelse() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag fastsettePeriodeGrunnlag) { - return Objects.equals(UtsettelseÅrsak.FRI, fastsettePeriodeGrunnlag.getAktuellPeriode().getUtsettelseÅrsak()) ? ja() : nei(); + return Objects.equals( + UtsettelseÅrsak.FRI, + fastsettePeriodeGrunnlag.getAktuellPeriode().getUtsettelseÅrsak()) + ? ja() + : nei(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorArbeid.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorArbeid.java index 4115d9e9..0ad1b5bc 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorArbeid.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorArbeid.java @@ -21,7 +21,8 @@ public Evaluation evaluate(FastsettePeriodeGrunnlag fastsettePeriodeGrunnlag) { return sjekk(fastsettePeriodeGrunnlag, MorsAktivitet.ARBEID) ? ja() : nei(); } - static boolean sjekk(FastsettePeriodeGrunnlag fastsettePeriodeGrunnlag, MorsAktivitet morsAktivitet) { + static boolean sjekk( + FastsettePeriodeGrunnlag fastsettePeriodeGrunnlag, MorsAktivitet morsAktivitet) { var morsAktivitetIPeriode = fastsettePeriodeGrunnlag.getAktuellPeriode().getMorsAktivitet(); if (morsAktivitetIPeriode == null) { throw new IllegalStateException("Forventer mors aktivitet"); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorErIAktivitet.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorErIAktivitet.java index b5235785..a5888e2d 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorErIAktivitet.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorErIAktivitet.java @@ -1,6 +1,5 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser.aktkrav; - import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.DokumentasjonVurdering.MORS_AKTIVITET_GODKJENT; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; @@ -20,6 +19,9 @@ public SjekkOmMorErIAktivitet() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag grunnlag) { - return MORS_AKTIVITET_GODKJENT.equals(grunnlag.getAktuellPeriode().getDokumentasjonVurdering()) ? ja() : nei(); + return MORS_AKTIVITET_GODKJENT.equals( + grunnlag.getAktuellPeriode().getDokumentasjonVurdering()) + ? ja() + : nei(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorIntroduksjonsprogram.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorIntroduksjonsprogram.java index c5e64d0f..e6a41f6b 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorIntroduksjonsprogram.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorIntroduksjonsprogram.java @@ -12,7 +12,8 @@ public class SjekkOmMorIntroduksjonsprogram extends LeafSpecification { public static final String ID = "AVSLAG_AKT_3"; - public static final String BESKRIVELSE = "Har søker oppgitt at mor er deltaker i introduksjonsprogrammet?"; + public static final String BESKRIVELSE = + "Har søker oppgitt at mor er deltaker i introduksjonsprogrammet?"; public SjekkOmMorIntroduksjonsprogram() { super(ID); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorKombinasjonArbeidUtdanning.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorKombinasjonArbeidUtdanning.java index 7ec7ee45..f4c20d88 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorKombinasjonArbeidUtdanning.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorKombinasjonArbeidUtdanning.java @@ -9,10 +9,12 @@ import no.nav.fpsak.nare.specification.LeafSpecification; @RuleDocumentation(SjekkOmMorKombinasjonArbeidUtdanning.ID) -public class SjekkOmMorKombinasjonArbeidUtdanning extends LeafSpecification { +public class SjekkOmMorKombinasjonArbeidUtdanning + extends LeafSpecification { public static final String ID = "AVSLAG_AKT_4"; - public static final String BESKRIVELSE = "Har søker oppgitt at mor er i arbeid kombinert med utdanning?"; + public static final String BESKRIVELSE = + "Har søker oppgitt at mor er i arbeid kombinert med utdanning?"; public SjekkOmMorKombinasjonArbeidUtdanning() { super(ID); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorKvalifiseringsprogram.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorKvalifiseringsprogram.java index 7626c2ba..fe30084e 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorKvalifiseringsprogram.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorKvalifiseringsprogram.java @@ -12,7 +12,8 @@ public class SjekkOmMorKvalifiseringsprogram extends LeafSpecification { public static final String ID = "AVSLAG_AKT_5"; - public static final String BESKRIVELSE = "Har søker oppgitt at mor er deltaker i kvalifiseringsprogrammet?"; + public static final String BESKRIVELSE = + "Har søker oppgitt at mor er deltaker i kvalifiseringsprogrammet?"; public SjekkOmMorKvalifiseringsprogram() { super(ID); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorsAktivitetErKjent.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorsAktivitetErKjent.java index 401f6aec..466a1da4 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorsAktivitetErKjent.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmMorsAktivitetErKjent.java @@ -17,6 +17,8 @@ public SjekkOmMorsAktivitetErKjent() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag fastsettePeriodeGrunnlag) { - return fastsettePeriodeGrunnlag.getAktuellPeriode().getMorsAktivitet() == null ? nei() : ja(); + return fastsettePeriodeGrunnlag.getAktuellPeriode().getMorsAktivitet() == null + ? nei() + : ja(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmSkalTrekkeDagerFraKonto.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmSkalTrekkeDagerFraKonto.java index 95656f1d..7126b8b7 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmSkalTrekkeDagerFraKonto.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmSkalTrekkeDagerFraKonto.java @@ -17,7 +17,8 @@ public SjekkOmSkalTrekkeDagerFraKonto() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag fastsettePeriodeGrunnlag) { var sammenhengendeUttak = fastsettePeriodeGrunnlag.kreverBehandlingSammenhengendeUttak(); - var bareFarRett = fastsettePeriodeGrunnlag.isFarRett() && !fastsettePeriodeGrunnlag.isMorRett(); + var bareFarRett = + fastsettePeriodeGrunnlag.isFarRett() && !fastsettePeriodeGrunnlag.isMorRett(); return sammenhengendeUttak || bareFarRett ? ja() : nei(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmUttakOgUtenAktivitetskrav.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmUttakOgUtenAktivitetskrav.java index df8ef931..4ff3fdcd 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmUttakOgUtenAktivitetskrav.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/aktkrav/SjekkOmUttakOgUtenAktivitetskrav.java @@ -8,7 +8,8 @@ @RuleDocumentation(SjekkOmUttakOgUtenAktivitetskrav.ID) public class SjekkOmUttakOgUtenAktivitetskrav extends LeafSpecification { public static final String ID = "AVSLAG_AKT_13"; - public static final String BESKRIVELSE = "Er perioden uttak og finnes dager uten aktivitetskrav?"; + public static final String BESKRIVELSE = + "Er perioden uttak og finnes dager uten aktivitetskrav?"; public SjekkOmUttakOgUtenAktivitetskrav() { super(ID); @@ -16,8 +17,13 @@ public SjekkOmUttakOgUtenAktivitetskrav() { @Override public Evaluation evaluate(FastsettePeriodeGrunnlag fastsettePeriodeGrunnlag) { - var erUttak = !(fastsettePeriodeGrunnlag.getAktuellPeriode().isUtsettelse() || fastsettePeriodeGrunnlag.getAktuellPeriode().isOpphold()); - return - erUttak && (fastsettePeriodeGrunnlag.isSakMedDagerUtenAktivitetskrav() || fastsettePeriodeGrunnlag.isSakMedMinsterett()) ? ja() : nei(); + var erUttak = + !(fastsettePeriodeGrunnlag.getAktuellPeriode().isUtsettelse() + || fastsettePeriodeGrunnlag.getAktuellPeriode().isOpphold()); + return erUttak + && (fastsettePeriodeGrunnlag.isSakMedDagerUtenAktivitetskrav() + || fastsettePeriodeGrunnlag.isSakMedMinsterett()) + ? ja() + : nei(); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Adopsjon.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Adopsjon.java index a068934e..9fe87312 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Adopsjon.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Adopsjon.java @@ -7,8 +7,7 @@ public final class Adopsjon { private LocalDate ankomstNorge; private boolean stebarnsadopsjon; - private Adopsjon() { - } + private Adopsjon() {} public LocalDate getAnkomstNorgeDato() { return ankomstNorge; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AktivitetIdentifikator.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AktivitetIdentifikator.java index 77dd9ab1..016aa607 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AktivitetIdentifikator.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AktivitetIdentifikator.java @@ -8,7 +8,10 @@ public class AktivitetIdentifikator { private final String arbeidsforholdId; private final ArbeidsgiverIdentifikator arbeidsgiverIdentifikator; - private AktivitetIdentifikator(AktivitetType aktivitetType, ArbeidsgiverIdentifikator arbeidsgiverIdentifikator, String arbeidsforholdId) { + private AktivitetIdentifikator( + AktivitetType aktivitetType, + ArbeidsgiverIdentifikator arbeidsgiverIdentifikator, + String arbeidsforholdId) { this.aktivitetType = aktivitetType; this.arbeidsforholdId = arbeidsforholdId; this.arbeidsgiverIdentifikator = arbeidsgiverIdentifikator; @@ -18,8 +21,10 @@ private AktivitetIdentifikator(AktivitetType aktivitetType) { this(aktivitetType, null, null); } - public static AktivitetIdentifikator forArbeid(ArbeidsgiverIdentifikator arbeidsgiverIdentifikator, String arbeidsforholdId) { - return new AktivitetIdentifikator(AktivitetType.ARBEID, arbeidsgiverIdentifikator, arbeidsforholdId); + public static AktivitetIdentifikator forArbeid( + ArbeidsgiverIdentifikator arbeidsgiverIdentifikator, String arbeidsforholdId) { + return new AktivitetIdentifikator( + AktivitetType.ARBEID, arbeidsgiverIdentifikator, arbeidsforholdId); } public static AktivitetIdentifikator forSelvstendigNæringsdrivende() { @@ -55,8 +60,9 @@ public boolean equals(Object o) { return false; } var that = (AktivitetIdentifikator) o; - return aktivitetType == that.aktivitetType && Objects.equals(arbeidsgiverIdentifikator, that.arbeidsgiverIdentifikator) && Objects.equals( - arbeidsforholdId, that.arbeidsforholdId); + return aktivitetType == that.aktivitetType + && Objects.equals(arbeidsgiverIdentifikator, that.arbeidsgiverIdentifikator) + && Objects.equals(arbeidsforholdId, that.arbeidsforholdId); } @Override @@ -66,7 +72,14 @@ public int hashCode() { @Override public String toString() { - return "AktivitetIdentifikator{" + "aktivitetType=" + aktivitetType + ", arbeidsforholdId='" + arbeidsforholdId + '\'' - + ", arbeidsgiverIdentifikator=" + arbeidsgiverIdentifikator + '}'; + return "AktivitetIdentifikator{" + + "aktivitetType=" + + aktivitetType + + ", arbeidsforholdId='" + + arbeidsforholdId + + '\'' + + ", arbeidsgiverIdentifikator=" + + arbeidsgiverIdentifikator + + '}'; } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenPart.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenPart.java index d70d2f3e..71652697 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenPart.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenPart.java @@ -13,9 +13,7 @@ public final class AnnenPart { private List uttaksperioder = new ArrayList<>(); private LocalDateTime sisteSøknadMottattTidspunkt; - - private AnnenPart() { - } + private AnnenPart() {} public List getUttaksperioder() { return uttaksperioder; @@ -23,15 +21,16 @@ public List getUttaksperioder() { public Set getAktiviteter() { return uttaksperioder.stream() - .flatMap(periode -> periode.getAktiviteter().stream()) - .map(AnnenpartUttakPeriodeAktivitet::getAktivitetIdentifikator) - .collect(Collectors.toSet()); + .flatMap(periode -> periode.getAktiviteter().stream()) + .map(AnnenpartUttakPeriodeAktivitet::getAktivitetIdentifikator) + .collect(Collectors.toSet()); } public Optional sisteUttaksdag() { - var sisteInnvilgetPeriode = uttaksperioder.stream() - .filter(p -> p.isInnvilget() || p.harTrekkdager() || p.harUtbetaling()) - .min((o1, o2) -> o2.getTom().compareTo(o1.getTom())); + var sisteInnvilgetPeriode = + uttaksperioder.stream() + .filter(p -> p.isInnvilget() || p.harTrekkdager() || p.harUtbetaling()) + .min((o1, o2) -> o2.getTom().compareTo(o1.getTom())); return sisteInnvilgetPeriode.map(Periode::getTom); } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenpartUttakPeriode.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenpartUttakPeriode.java index db2d2c33..3a5ba069 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenpartUttakPeriode.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenpartUttakPeriode.java @@ -50,18 +50,19 @@ public boolean isOppholdsperiode() { return oppholdÅrsak; } - public AnnenpartUttakPeriode kopiMedNyPeriode(LocalDate fom, - LocalDate tom, - List annenpartUttakPeriodeAktiviteter) { + public AnnenpartUttakPeriode kopiMedNyPeriode( + LocalDate fom, + LocalDate tom, + List annenpartUttakPeriodeAktiviteter) { return Builder.uttak(fom, tom) - .samtidigUttak(this.samtidigUttak) - .flerbarnsdager(this.flerbarnsdager) - .utsettelse(this.innvilget) - .innvilget(this.innvilget) - .oppholdsårsak(this.oppholdÅrsak) - .uttakPeriodeAktiviteter(annenpartUttakPeriodeAktiviteter) - .senestMottattDato(this.senestMottattDato) - .build(); + .samtidigUttak(this.samtidigUttak) + .flerbarnsdager(this.flerbarnsdager) + .utsettelse(this.innvilget) + .innvilget(this.innvilget) + .oppholdsårsak(this.oppholdÅrsak) + .uttakPeriodeAktiviteter(annenpartUttakPeriodeAktiviteter) + .senestMottattDato(this.senestMottattDato) + .build(); } public boolean harTrekkdager() { @@ -88,14 +89,26 @@ public boolean equals(Object o) { return false; } var that = (AnnenpartUttakPeriode) o; - return samtidigUttak == that.samtidigUttak && flerbarnsdager == that.flerbarnsdager && utsettelse == that.utsettelse - && innvilget == that.innvilget && Objects.equals(aktiviteter, that.aktiviteter) && oppholdÅrsak == that.oppholdÅrsak && Objects.equals( - senestMottattDato, that.senestMottattDato); + return samtidigUttak == that.samtidigUttak + && flerbarnsdager == that.flerbarnsdager + && utsettelse == that.utsettelse + && innvilget == that.innvilget + && Objects.equals(aktiviteter, that.aktiviteter) + && oppholdÅrsak == that.oppholdÅrsak + && Objects.equals(senestMottattDato, that.senestMottattDato); } @Override public int hashCode() { - return Objects.hash(super.hashCode(), aktiviteter, samtidigUttak, flerbarnsdager, utsettelse, oppholdÅrsak, innvilget, senestMottattDato); + return Objects.hash( + super.hashCode(), + aktiviteter, + samtidigUttak, + flerbarnsdager, + utsettelse, + oppholdÅrsak, + innvilget, + senestMottattDato); } public static class Builder { @@ -118,12 +131,14 @@ private Builder(LocalDate fom, LocalDate tom) { kladd.innvilget = true; } - public Builder uttakPeriodeAktivitet(AnnenpartUttakPeriodeAktivitet annenpartUttakPeriodeAktivitet) { + public Builder uttakPeriodeAktivitet( + AnnenpartUttakPeriodeAktivitet annenpartUttakPeriodeAktivitet) { kladd.aktiviteter.add(annenpartUttakPeriodeAktivitet); return this; } - public Builder uttakPeriodeAktiviteter(List annenpartUttakPeriodeAktiviteter) { + public Builder uttakPeriodeAktiviteter( + List annenpartUttakPeriodeAktiviteter) { kladd.aktiviteter.addAll(annenpartUttakPeriodeAktiviteter); return this; } @@ -161,6 +176,5 @@ public Builder senestMottattDato(LocalDate senestMottattDato) { public AnnenpartUttakPeriode build() { return kladd; } - } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenpartUttakPeriodeAktivitet.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenpartUttakPeriodeAktivitet.java index 2180cdf0..7c82c79a 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenpartUttakPeriodeAktivitet.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/AnnenpartUttakPeriodeAktivitet.java @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag; import java.util.Objects; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; public class AnnenpartUttakPeriodeAktivitet { @@ -10,10 +9,11 @@ public class AnnenpartUttakPeriodeAktivitet { private final Trekkdager trekkdager; private final Utbetalingsgrad utbetalingsgrad; - public AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator aktivitetIdentifikator, - Stønadskontotype stønadskontotype, - Trekkdager trekkdager, - Utbetalingsgrad utbetalingsgrad) { + public AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator aktivitetIdentifikator, + Stønadskontotype stønadskontotype, + Trekkdager trekkdager, + Utbetalingsgrad utbetalingsgrad) { Objects.requireNonNull(aktivitetIdentifikator); Objects.requireNonNull(utbetalingsgrad); this.aktivitetIdentifikator = aktivitetIdentifikator; @@ -37,5 +37,4 @@ public Trekkdager getTrekkdager() { public Utbetalingsgrad getUtbetalingsgrad() { return utbetalingsgrad; } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Arbeid.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Arbeid.java index 1c1fe291..6374aa4f 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Arbeid.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Arbeid.java @@ -9,25 +9,30 @@ public final class Arbeid { - private final Set arbeidsforholdListe = new HashSet<>(); // Arbeidsforhold brukt i beregning, tilkommet dersom gradering eller refusjon - private final Set endringAvStillingListe = new HashSet<>(); // Tidslinje for sum stillingsprosent fra AAregister + private final Set arbeidsforholdListe = + new HashSet<>(); // Arbeidsforhold brukt i beregning, tilkommet dersom gradering eller + // refusjon + private final Set endringAvStillingListe = + new HashSet<>(); // Tidslinje for sum stillingsprosent fra AAregister - private Arbeid() { - } + private Arbeid() {} public BigDecimal getStillingsprosent(LocalDate dato) { return endringAvStillingListe.stream() - .filter(eas -> !eas.dato().isAfter(dato)) - .max(Comparator.comparing(EndringAvStilling::dato)) - .map(EndringAvStilling::summertStillingsprosent) - .orElseGet(() -> BigDecimal.valueOf(100)); + .filter(eas -> !eas.dato().isAfter(dato)) + .max(Comparator.comparing(EndringAvStilling::dato)) + .map(EndringAvStilling::summertStillingsprosent) + .orElseGet(() -> BigDecimal.valueOf(100)); } /** - * ALLE aktiviteter, som regel burde aktivitene hentes fra {@link OppgittPeriode ()} mtp at alle perioder ikke har samme aktivieter + * ALLE aktiviteter, som regel burde aktivitene hentes fra {@link OppgittPeriode ()} mtp at alle + * perioder ikke har samme aktivieter */ public Set getAktiviteter() { - return arbeidsforholdListe.stream().map(Arbeidsforhold::identifikator).collect(Collectors.toSet()); + return arbeidsforholdListe.stream() + .map(Arbeidsforhold::identifikator) + .collect(Collectors.toSet()); } public Set getArbeidsforhold() { diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Arbeidsforhold.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Arbeidsforhold.java index 3b9f424d..29bdba38 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Arbeidsforhold.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Arbeidsforhold.java @@ -7,7 +7,8 @@ public record Arbeidsforhold(AktivitetIdentifikator identifikator, LocalDate sta private static final LocalDate DEFAULT_STARTDATO = LocalDate.MIN; - public static Arbeidsforhold opprett(AktivitetIdentifikator identifikator, LocalDate startdato) { + public static Arbeidsforhold opprett( + AktivitetIdentifikator identifikator, LocalDate startdato) { return new Arbeidsforhold(identifikator, startdato == null ? DEFAULT_STARTDATO : startdato); } @@ -24,7 +25,8 @@ public boolean equals(Object o) { if (this == o) { return true; } - return o instanceof Arbeidsforhold that && Objects.equals(identifikator, that.identifikator); + return o instanceof Arbeidsforhold that + && Objects.equals(identifikator, that.identifikator); } @Override diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Behandling.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Behandling.java index 5b9b3215..8612b13c 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Behandling.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Behandling.java @@ -6,8 +6,7 @@ public final class Behandling { private boolean berørtBehandling; private boolean kreverSammenhengendeUttak; - private Behandling() { - } + private Behandling() {} public boolean isSøkerMor() { return søkerMor; @@ -29,7 +28,6 @@ public static class Builder { private final Behandling kladd = new Behandling(); - public Builder søkerErMor(boolean søkerErMor) { kladd.søkerMor = søkerErMor; return this; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Datoer.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Datoer.java index 16b482f9..521d6b03 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Datoer.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Datoer.java @@ -9,17 +9,16 @@ public final class Datoer { private LocalDate termin; private LocalDate fødsel; private Dødsdatoer dødsdatoer; - //Ikke sleng inn flere datoer her uten å prøve å plassere i andre mer passende klasser - private LocalDate startdatoNesteStønadsperiode; // Solo-dato + // Ikke sleng inn flere datoer her uten å prøve å plassere i andre mer passende klasser + private LocalDate startdatoNesteStønadsperiode; // Solo-dato - private Datoer() { - } + private Datoer() {} public LocalDate getFamiliehendelse() { return Optional.ofNullable(omsorgsovertakelse) - .or(() -> Optional.ofNullable(fødsel)) - .or(() -> Optional.ofNullable(termin)) - .orElseThrow(() -> new IllegalStateException("Ingen familiehendelse")); + .or(() -> Optional.ofNullable(fødsel)) + .or(() -> Optional.ofNullable(termin)) + .orElseThrow(() -> new IllegalStateException("Ingen familiehendelse")); } public LocalDate getTermin() { diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/DokumentasjonVurdering.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/DokumentasjonVurdering.java index b2c2e8bc..862399ee 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/DokumentasjonVurdering.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/DokumentasjonVurdering.java @@ -18,7 +18,13 @@ public enum DokumentasjonVurdering { TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT; public boolean erGyldigGrunnForTidligOppstart() { - return Set.of(SYKDOM_ANNEN_FORELDER_GODKJENT, INNLEGGELSE_ANNEN_FORELDER_GODKJENT, MORS_AKTIVITET_GODKJENT, ER_ALENEOMSORG_GODKJENT, - ER_BARE_SØKER_RETT_GODKJENT, TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT).contains(this); + return Set.of( + SYKDOM_ANNEN_FORELDER_GODKJENT, + INNLEGGELSE_ANNEN_FORELDER_GODKJENT, + MORS_AKTIVITET_GODKJENT, + ER_ALENEOMSORG_GODKJENT, + ER_BARE_SØKER_RETT_GODKJENT, + TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT) + .contains(this); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/D\303\270dsdatoer.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/D\303\270dsdatoer.java" index 60c4ff20..714b2e4c 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/D\303\270dsdatoer.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/D\303\270dsdatoer.java" @@ -8,8 +8,7 @@ public final class Dødsdatoer { private LocalDate barnsDødsdato; private boolean alleBarnDøde; - private Dødsdatoer() { - } + private Dødsdatoer() {} public LocalDate getSøkersDødsdato() { return søkersDødsdato; @@ -45,5 +44,4 @@ public static class Builder { return kladd; } } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/EndringAvStilling.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/EndringAvStilling.java index 873cc2c1..6d7f47b3 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/EndringAvStilling.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/EndringAvStilling.java @@ -3,6 +3,4 @@ import java.math.BigDecimal; import java.time.LocalDate; - -public record EndringAvStilling(LocalDate dato, BigDecimal summertStillingsprosent) { -} +public record EndringAvStilling(LocalDate dato, BigDecimal summertStillingsprosent) {} diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/FastsattUttakPeriode.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/FastsattUttakPeriode.java index 130c45fb..97ba42c7 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/FastsattUttakPeriode.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/FastsattUttakPeriode.java @@ -22,8 +22,7 @@ public class FastsattUttakPeriode { private FastsattUttakPeriode.ResultatÅrsak resultatÅrsak; private boolean utsettelse; - private FastsattUttakPeriode() { - } + private FastsattUttakPeriode() {} private FastsattUttakPeriode(FastsattUttakPeriode periode) { this.perioderesultattype = periode.perioderesultattype; @@ -70,19 +69,25 @@ public boolean isForbrukMinsterett() { return trekkerMinsterett(perioderesultattype, resultatÅrsak, utsettelse); } - public static boolean trekkerMinsterett(Perioderesultattype perioderesultattype, - FastsattUttakPeriode.ResultatÅrsak resultatÅrsak, - boolean utsettelse) { - return (Perioderesultattype.INNVILGET.equals(perioderesultattype) && !erPeriodeMedGodkjentAktivitet(resultatÅrsak)) || ( - Perioderesultattype.AVSLÅTT.equals(perioderesultattype) && IKKE_OPPFYLT_SØKNADSFRIST.equals(resultatÅrsak)) || ( - Perioderesultattype.MANUELL_BEHANDLING.equals(perioderesultattype) && !utsettelse); + public static boolean trekkerMinsterett( + Perioderesultattype perioderesultattype, + FastsattUttakPeriode.ResultatÅrsak resultatÅrsak, + boolean utsettelse) { + return (Perioderesultattype.INNVILGET.equals(perioderesultattype) + && !erPeriodeMedGodkjentAktivitet(resultatÅrsak)) + || (Perioderesultattype.AVSLÅTT.equals(perioderesultattype) + && IKKE_OPPFYLT_SØKNADSFRIST.equals(resultatÅrsak)) + || (Perioderesultattype.MANUELL_BEHANDLING.equals(perioderesultattype) + && !utsettelse); } - private static boolean erPeriodeMedGodkjentAktivitet(FastsattUttakPeriode.ResultatÅrsak resultatÅrsak) { - // Inntil videre: Perioder med godkjent aktivitet iht 14-14 første ledd skal ikke gå til fratrekk på rett etter tredje ledd + private static boolean erPeriodeMedGodkjentAktivitet( + FastsattUttakPeriode.ResultatÅrsak resultatÅrsak) { + // Inntil videre: Perioder med godkjent aktivitet iht 14-14 første ledd skal ikke gå til + // fratrekk på rett etter tredje ledd // Når logikken skal utvides til andre tilfelle - vær obs på flerbarnsdager - return INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT.equals(resultatÅrsak) || INNVILGET_GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT.equals( - resultatÅrsak); + return INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT.equals(resultatÅrsak) + || INNVILGET_GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT.equals(resultatÅrsak); } public Optional getMottattDato() { @@ -154,7 +159,8 @@ public Builder utsettelse(boolean utsettelse) { public Builder tidsperiode(LocalDate fom, LocalDate tom) { if (tom.isBefore(fom)) { - throw new IllegalArgumentException("Tom(" + tom + ") kan ikke ligge før fom(" + fom + ")"); + throw new IllegalArgumentException( + "Tom(" + tom + ") kan ikke ligge før fom(" + fom + ")"); } kladd.fom = fom; kladd.tom = tom; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/FastsattUttakPeriodeAktivitet.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/FastsattUttakPeriodeAktivitet.java index cddd4a14..8036f148 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/FastsattUttakPeriodeAktivitet.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/FastsattUttakPeriodeAktivitet.java @@ -7,7 +7,10 @@ public class FastsattUttakPeriodeAktivitet { private final Stønadskontotype stønadskontotype; private final AktivitetIdentifikator aktivitetIdentifikator; - public FastsattUttakPeriodeAktivitet(Trekkdager trekkdager, Stønadskontotype stønadskontotype, AktivitetIdentifikator aktivitetIdentifikator) { + public FastsattUttakPeriodeAktivitet( + Trekkdager trekkdager, + Stønadskontotype stønadskontotype, + AktivitetIdentifikator aktivitetIdentifikator) { this.trekkdager = trekkdager; this.stønadskontotype = stønadskontotype; this.aktivitetIdentifikator = aktivitetIdentifikator; diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Inngangsvilk\303\245r.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Inngangsvilk\303\245r.java" index 0c9812b3..2ec9f373 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Inngangsvilk\303\245r.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Inngangsvilk\303\245r.java" @@ -7,9 +7,7 @@ public final class Inngangsvilkår { private boolean fødselOppfylt; private boolean opptjeningOppfylt; - private Inngangsvilkår() { - - } + private Inngangsvilkår() {} public boolean erAdopsjonOppfylt() { return adopsjonOppfylt; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Konto.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Konto.java index b6c2b92e..681101a6 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Konto.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Konto.java @@ -5,8 +5,7 @@ public final class Konto { private Stønadskontotype type; private int trekkdager; - private Konto() { - } + private Konto() {} public Stønadskontotype getType() { return type; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Kontoer.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Kontoer.java index 37353feb..ec58d172 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Kontoer.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Kontoer.java @@ -1,6 +1,5 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag; - import java.util.EnumMap; import java.util.List; import java.util.Map; @@ -8,12 +7,12 @@ public final class Kontoer { - private final Map stønadskonti = new EnumMap<>(Stønadskontotype.class); - private final Map spesialkonti = new EnumMap<>(Spesialkontotype.class); - - private Kontoer() { + private final Map stønadskonti = + new EnumMap<>(Stønadskontotype.class); + private final Map spesialkonti = + new EnumMap<>(Spesialkontotype.class); - } + private Kontoer() {} public Set getStønadskontotyper() { return stønadskonti.keySet(); @@ -58,7 +57,9 @@ public Builder konto(Konto.Builder konto) { } public Builder kontoList(List kontoList) { - kontoList.stream().map(Konto.Builder::build).forEach(k -> kladd.stønadskonti.put(k.getType(), k.getTrekkdager())); + kontoList.stream() + .map(Konto.Builder::build) + .forEach(k -> kladd.stønadskonti.put(k.getType(), k.getTrekkdager())); return this; } @@ -96,7 +97,8 @@ public Builder flerbarnsdager(int flerbarnsdager) { public Kontoer build() { if (this.minsterettDager > 0 && this.utenAktivitetskravDager > 0) { - throw new IllegalArgumentException("Utviklerfeil: Sak med både minsterett og dager uten aktivitetskrav"); + throw new IllegalArgumentException( + "Utviklerfeil: Sak med både minsterett og dager uten aktivitetskrav"); } return kladd; } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/LukketPeriode.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/LukketPeriode.java index c1d61736..71b0b6ce 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/LukketPeriode.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/LukketPeriode.java @@ -2,12 +2,9 @@ import java.time.LocalDate; import java.util.Objects; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Virkedager; -/** - * En periode som har definert både start- og slutt-tidpunkt - */ +/** En periode som har definert både start- og slutt-tidpunkt */ public class LukketPeriode extends Periode { public LukketPeriode(LocalDate fom, LocalDate tom) { diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Medlemskap.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Medlemskap.java index 1ef8b647..07336da0 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Medlemskap.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Medlemskap.java @@ -6,9 +6,7 @@ public class Medlemskap { private LocalDate opphørsdato; - private Medlemskap() { - - } + private Medlemskap() {} public LocalDate getOpphørsdato() { return opphørsdato; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/MorsAktivitet.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/MorsAktivitet.java index 2fd6ba8b..8fda6163 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/MorsAktivitet.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/MorsAktivitet.java @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag; public enum MorsAktivitet { - ARBEID, SYK, INNLAGT, diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/OppgittPeriode.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/OppgittPeriode.java index 00de2843..a17efd09 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/OppgittPeriode.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/OppgittPeriode.java @@ -1,3 +1,4 @@ +/* (C)2024 */ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag; import java.math.BigDecimal; @@ -23,21 +24,22 @@ public final class OppgittPeriode extends LukketPeriode { private final DokumentasjonVurdering dokumentasjonVurdering; private Set aktiviteter = Set.of(); - private OppgittPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - boolean manglendeSøktPeriode, - BigDecimal arbeidsprosent, - Set gradertAktiviteter, - OverføringÅrsak overføringÅrsak, - SamtidigUttaksprosent samtidigUttaksprosent, - boolean flerbarnsdager, - UtsettelseÅrsak utsettelseÅrsak, - OppholdÅrsak oppholdÅrsak, - LocalDate senestMottattDato, - LocalDate tidligstMottattDato, - MorsAktivitet morsAktivitet, - DokumentasjonVurdering dokumentasjonVurdering) { + private OppgittPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + boolean manglendeSøktPeriode, + BigDecimal arbeidsprosent, + Set gradertAktiviteter, + OverføringÅrsak overføringÅrsak, + SamtidigUttaksprosent samtidigUttaksprosent, + boolean flerbarnsdager, + UtsettelseÅrsak utsettelseÅrsak, + OppholdÅrsak oppholdÅrsak, + LocalDate senestMottattDato, + LocalDate tidligstMottattDato, + MorsAktivitet morsAktivitet, + DokumentasjonVurdering dokumentasjonVurdering) { super(fom, tom); this.arbeidsprosent = arbeidsprosent; this.gradertAktiviteter = gradertAktiviteter; @@ -55,15 +57,29 @@ private OppgittPeriode(Stønadskontotype stønadskontotype, } 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); + 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); kopi.aktiviteter = aktiviteter; return kopi; } public boolean erSøktGradering() { - return arbeidsprosent != null && getArbeidsprosent().compareTo(BigDecimal.ZERO) > 0; + return (arbeidsprosent != null && getArbeidsprosent().compareTo(BigDecimal.ZERO) > 0); } public Optional getTidligstMottattDato() { @@ -159,7 +175,7 @@ public MorsAktivitet getMorsAktivitet() { } public boolean kanTrekkeAvMinsterett() { - return !manglendeSøktPeriode && oppholdÅrsak == null && utsettelseÅrsak == null; + return (!manglendeSøktPeriode && oppholdÅrsak == null && utsettelseÅrsak == null); } public boolean gjelderPeriodeMinsterett() { @@ -170,67 +186,145 @@ public DokumentasjonVurdering getDokumentasjonVurdering() { return dokumentasjonVurdering; } - 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); - } - - public static OppgittPeriode forUtsettelse(LocalDate fom, - LocalDate tom, - UtsettelseÅrsak utsettelseÅrsak, - LocalDate senestMottattDato, - LocalDate tidligstMottattDato, - MorsAktivitet morsAktivitet, - DokumentasjonVurdering dokumentasjonVurdering) { - return new OppgittPeriode(null, fom, tom, false, null, Set.of(), null, null, false, utsettelseÅrsak, null, senestMottattDato, - tidligstMottattDato, morsAktivitet, dokumentasjonVurdering); - } - - public static OppgittPeriode forOverføring(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - OverføringÅrsak overføringÅrsak, - LocalDate senestMottattDato, - 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); - } - - public static OppgittPeriode forOpphold(LocalDate fom, - LocalDate tom, - OppholdÅrsak oppholdÅrsak, - 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); - } - - public static OppgittPeriode forGradering(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - BigDecimal arbeidsprosent, - SamtidigUttaksprosent samtidigUttaksprosent, - boolean flerbarnsdager, - Set gradertAktiviteter, - LocalDate senestMottattDato, - LocalDate tidligstMottattDato, - MorsAktivitet morsAktivitet, - DokumentasjonVurdering dokumentasjonVurdering) { - return new OppgittPeriode(stønadskontotype, fom, tom, false, arbeidsprosent, gradertAktiviteter, null, samtidigUttaksprosent, flerbarnsdager, - null, null, senestMottattDato, tidligstMottattDato, morsAktivitet, dokumentasjonVurdering); - } - - public static OppgittPeriode forVanligPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - SamtidigUttaksprosent samtidigUttaksprosent, - boolean flerbarnsdager, - LocalDate senestMottattDato, - LocalDate tidligstMottattDato, - MorsAktivitet morsAktivitet, - DokumentasjonVurdering dokumentasjonVurdering) { - return new OppgittPeriode(stønadskontotype, fom, tom, false, null, Set.of(), null, samtidigUttaksprosent, flerbarnsdager, null, null, - senestMottattDato, tidligstMottattDato, morsAktivitet, dokumentasjonVurdering); + 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); + } + + public static OppgittPeriode forUtsettelse( + LocalDate fom, + LocalDate tom, + UtsettelseÅrsak utsettelseÅrsak, + LocalDate senestMottattDato, + LocalDate tidligstMottattDato, + MorsAktivitet morsAktivitet, + DokumentasjonVurdering dokumentasjonVurdering) { + return new OppgittPeriode( + null, + fom, + tom, + false, + null, + Set.of(), + null, + null, + false, + utsettelseÅrsak, + null, + senestMottattDato, + tidligstMottattDato, + morsAktivitet, + dokumentasjonVurdering); + } + + public static OppgittPeriode forOverføring( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + OverføringÅrsak overføringÅrsak, + LocalDate senestMottattDato, + 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); + } + + public static OppgittPeriode forOpphold( + LocalDate fom, + LocalDate tom, + OppholdÅrsak oppholdÅrsak, + 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); + } + + public static OppgittPeriode forGradering( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + BigDecimal arbeidsprosent, + SamtidigUttaksprosent samtidigUttaksprosent, + boolean flerbarnsdager, + Set gradertAktiviteter, + LocalDate senestMottattDato, + LocalDate tidligstMottattDato, + MorsAktivitet morsAktivitet, + DokumentasjonVurdering dokumentasjonVurdering) { + return new OppgittPeriode( + stønadskontotype, + fom, + tom, + false, + arbeidsprosent, + gradertAktiviteter, + null, + samtidigUttaksprosent, + flerbarnsdager, + null, + null, + senestMottattDato, + tidligstMottattDato, + morsAktivitet, + dokumentasjonVurdering); + } + + public static OppgittPeriode forVanligPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + SamtidigUttaksprosent samtidigUttaksprosent, + boolean flerbarnsdager, + LocalDate senestMottattDato, + LocalDate tidligstMottattDato, + MorsAktivitet morsAktivitet, + DokumentasjonVurdering dokumentasjonVurdering) { + return new OppgittPeriode( + stønadskontotype, + fom, + tom, + false, + null, + Set.of(), + null, + samtidigUttaksprosent, + flerbarnsdager, + null, + null, + senestMottattDato, + tidligstMottattDato, + morsAktivitet, + dokumentasjonVurdering); } @Override @@ -242,25 +336,70 @@ public boolean equals(Object o) { return false; } var that = (OppgittPeriode) o; - return flerbarnsdager == that.flerbarnsdager && manglendeSøktPeriode == that.manglendeSøktPeriode && stønadskontotype == that.stønadskontotype - && Objects.equals(arbeidsprosent, that.arbeidsprosent) && overføringÅrsak == that.overføringÅrsak && Objects.equals(samtidigUttaksprosent, - that.samtidigUttaksprosent) && utsettelseÅrsak == that.utsettelseÅrsak && oppholdÅrsak == that.oppholdÅrsak && Objects.equals( - senestMottattDato, that.senestMottattDato) && Objects.equals(tidligstMottattDato, that.tidligstMottattDato) - && morsAktivitet == that.morsAktivitet && dokumentasjonVurdering == that.dokumentasjonVurdering; + return (flerbarnsdager == that.flerbarnsdager + && manglendeSøktPeriode == that.manglendeSøktPeriode + && stønadskontotype == that.stønadskontotype + && Objects.equals(arbeidsprosent, that.arbeidsprosent) + && overføringÅrsak == that.overføringÅrsak + && Objects.equals(samtidigUttaksprosent, that.samtidigUttaksprosent) + && utsettelseÅrsak == that.utsettelseÅrsak + && oppholdÅrsak == that.oppholdÅrsak + && Objects.equals(senestMottattDato, that.senestMottattDato) + && Objects.equals(tidligstMottattDato, that.tidligstMottattDato) + && morsAktivitet == that.morsAktivitet + && dokumentasjonVurdering == that.dokumentasjonVurdering); } @Override public int hashCode() { - return Objects.hash(stønadskontotype, arbeidsprosent, overføringÅrsak, flerbarnsdager, samtidigUttaksprosent, utsettelseÅrsak, oppholdÅrsak, - manglendeSøktPeriode, senestMottattDato, tidligstMottattDato, morsAktivitet, dokumentasjonVurdering); + return Objects.hash( + stønadskontotype, + arbeidsprosent, + overføringÅrsak, + flerbarnsdager, + samtidigUttaksprosent, + utsettelseÅrsak, + oppholdÅrsak, + manglendeSøktPeriode, + senestMottattDato, + tidligstMottattDato, + morsAktivitet, + dokumentasjonVurdering); } @Override public String toString() { - return "OppgittPeriode{" + "stønadskontotype=" + stønadskontotype + ", fom=" + getFom() + ", tom=" + getTom() + ", arbeidsprosent=" - + arbeidsprosent + ", gradertAktiviteter=" + gradertAktiviteter + ", overføringÅrsak=" + overføringÅrsak + ", manglendeSøktPeriode=" - + manglendeSøktPeriode + ", flerbarnsdager=" + flerbarnsdager + ", samtidigUttak=" + samtidigUttaksprosent + ", utsettelseÅrsak=" - + utsettelseÅrsak + ", oppholdÅrsak=" + oppholdÅrsak + ", senestMottattDato=" + senestMottattDato + ", tidligstMottattDato=" - + tidligstMottattDato + ", aktiviteter=" + aktiviteter + ", dokumentasjonVurdering=" + dokumentasjonVurdering + '}'; + return ("OppgittPeriode{" + + "stønadskontotype=" + + stønadskontotype + + ", fom=" + + getFom() + + ", tom=" + + getTom() + + ", arbeidsprosent=" + + arbeidsprosent + + ", gradertAktiviteter=" + + gradertAktiviteter + + ", overføringÅrsak=" + + overføringÅrsak + + ", manglendeSøktPeriode=" + + manglendeSøktPeriode + + ", flerbarnsdager=" + + flerbarnsdager + + ", samtidigUttak=" + + samtidigUttaksprosent + + ", utsettelseÅrsak=" + + utsettelseÅrsak + + ", oppholdÅrsak=" + + oppholdÅrsak + + ", senestMottattDato=" + + senestMottattDato + + ", tidligstMottattDato=" + + tidligstMottattDato + + ", aktiviteter=" + + aktiviteter + + ", dokumentasjonVurdering=" + + dokumentasjonVurdering + + '}'); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Opphold\303\205rsak.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Opphold\303\205rsak.java" index 2a027216..aa78c84b 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Opphold\303\205rsak.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Opphold\303\205rsak.java" @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag; public enum OppholdÅrsak { - FELLESPERIODE_ANNEN_FORELDER, MØDREKVOTE_ANNEN_FORELDER, FEDREKVOTE_ANNEN_FORELDER, diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Opptjening.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Opptjening.java index 1f394ab4..36a18759 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Opptjening.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Opptjening.java @@ -7,14 +7,12 @@ public final class Opptjening { private LocalDate skjæringstidspunkt; - private Opptjening() { - } + private Opptjening() {} public LocalDate getSkjæringstidspunkt() { return skjæringstidspunkt; } - public static class Builder { private final Opptjening kladd = new Opptjening(); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Periode.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Periode.java index 494387f6..ea2afc92 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Periode.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Periode.java @@ -10,7 +10,8 @@ public class Periode { public Periode(LocalDate fom, LocalDate tom) { if (fom != null && tom != null && tom.isBefore(fom)) { - throw new IllegalArgumentException("Til og med dato før fra og med dato: " + fom + ">" + tom); + throw new IllegalArgumentException( + "Til og med dato før fra og med dato: " + fom + ">" + tom); } this.fom = fom == null ? LocalDate.MIN : fom; this.tom = tom == null ? LocalDate.MAX : tom; @@ -29,16 +30,19 @@ public boolean overlapper(LocalDate dato) { } public boolean overlapper(Periode periode) { - return overlapper(periode.getFom()) || overlapper(periode.getTom()) || erOmsluttetAv(periode); + return overlapper(periode.getFom()) + || overlapper(periode.getTom()) + || erOmsluttetAv(periode); } - //Også true hvis perioden er lik + // Også true hvis perioden er lik public boolean erOmsluttetAv(Periode periode) { return !periode.getFom().isAfter(fom) && !periode.getTom().isBefore(tom); } public boolean erLik(Periode periode) { - return Objects.equals(getFom(), periode.getFom()) && Objects.equals(getTom(), periode.getTom()); + return Objects.equals(getFom(), periode.getFom()) + && Objects.equals(getTom(), periode.getTom()); } @Override diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/RegelGrunnlag.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/RegelGrunnlag.java index 69365ed4..a7561094 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/RegelGrunnlag.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/RegelGrunnlag.java @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag; import java.util.Set; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.ytelser.Ytelser; public class RegelGrunnlag { @@ -20,9 +19,7 @@ public class RegelGrunnlag { private Kontoer kontoer; private Ytelser ytelser; - private RegelGrunnlag() { - - } + private RegelGrunnlag() {} public Søknad getSøknad() { return søknad; @@ -160,7 +157,7 @@ public RegelGrunnlag build() { if (kladd.ytelser == null) { kladd.ytelser = new Ytelser(null); } - //Hindre gjenbruk + // Hindre gjenbruk var regelGrunnlag = this.kladd; kladd = null; return regelGrunnlag; @@ -173,11 +170,15 @@ public RegelGrunnlag build() { if (type == Søknadstype.TERMIN && datoer.getTermin() == null) { throw new IllegalStateException("Forventer termindato ved terminsøknad"); } - if (type == Søknadstype.FØDSEL && datoer.getFødsel() == null && datoer.getTermin() == null) { - throw new IllegalStateException("Forventer fødselsdato eller termindato eller begge ved fødselsøknad"); + if (type == Søknadstype.FØDSEL + && datoer.getFødsel() == null + && datoer.getTermin() == null) { + throw new IllegalStateException( + "Forventer fødselsdato eller termindato eller begge ved fødselsøknad"); } if (type == Søknadstype.ADOPSJON && datoer.getOmsorgsovertakelse() == null) { - throw new IllegalStateException("Forventer omsorgsovertakelsesdato ved adopsjonssøknad"); + throw new IllegalStateException( + "Forventer omsorgsovertakelsesdato ved adopsjonssøknad"); } } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/RettOgOmsorg.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/RettOgOmsorg.java index fff4986f..a70171ee 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/RettOgOmsorg.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/RettOgOmsorg.java @@ -12,8 +12,7 @@ public final class RettOgOmsorg { private boolean morOppgittUføretrygd; private boolean harOmsorg = true; - private RettOgOmsorg() { - } + private RettOgOmsorg() {} public boolean getFarHarRett() { return farHarRett || farHarRettEØS; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Revurdering.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Revurdering.java index 08bf56aa..6e25a27a 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Revurdering.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Revurdering.java @@ -7,8 +7,7 @@ public final class Revurdering { private LocalDate endringsdato; private Vedtak gjeldendeVedtak; - private Revurdering() { - } + private Revurdering() {} public LocalDate getEndringsdato() { return endringsdato; diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/S\303\270knad.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/S\303\270knad.java" index ad84ce55..a3ab7946 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/S\303\270knad.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/S\303\270knad.java" @@ -11,11 +11,12 @@ public final class Søknad { private Søknadstype type = Søknadstype.FØDSEL; private LocalDateTime mottattTidspunkt; - private Søknad() { - } + private Søknad() {} public List getOppgittePerioder() { - return oppgittePerioder.stream().sorted(Comparator.comparing(OppgittPeriode::getFom)).toList(); + return oppgittePerioder.stream() + .sorted(Comparator.comparing(OppgittPeriode::getFom)) + .toList(); } public Søknadstype getType() { diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/UttakPeriode.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/UttakPeriode.java index 52fc5b1a..577c10b2 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/UttakPeriode.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/UttakPeriode.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.util.Objects; import java.util.Set; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.GraderingIkkeInnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; @@ -25,15 +24,16 @@ public final class UttakPeriode extends LukketPeriode { private final OverføringÅrsak overføringÅrsak; private final MorsAktivitet morsAktivitet; - public UttakPeriode(OppgittPeriode oppgittPeriode, - // NOSONAR - Perioderesultattype perioderesultattype, - Manuellbehandlingårsak manuellbehandlingårsak, - PeriodeResultatÅrsak periodeResultatÅrsak, - GraderingIkkeInnvilgetÅrsak graderingIkkeInnvilgetÅrsak, - Set aktiviteter, - SamtidigUttaksprosent samtidigUttaksprosent, - Stønadskontotype stønadskontotype) { + public UttakPeriode( + OppgittPeriode oppgittPeriode, + // NOSONAR + Perioderesultattype perioderesultattype, + Manuellbehandlingårsak manuellbehandlingårsak, + PeriodeResultatÅrsak periodeResultatÅrsak, + GraderingIkkeInnvilgetÅrsak graderingIkkeInnvilgetÅrsak, + Set aktiviteter, + SamtidigUttaksprosent samtidigUttaksprosent, + Stønadskontotype stønadskontotype) { super(oppgittPeriode.getFom(), oppgittPeriode.getTom()); this.perioderesultattype = perioderesultattype; this.manuellbehandlingårsak = manuellbehandlingårsak; @@ -52,7 +52,9 @@ public UttakPeriode(OppgittPeriode oppgittPeriode, } private void validerKontoVedTrekkdager() { - if (stønadskontotype == null && getAktiviteter().stream().anyMatch(a -> a.getTrekkdager().compareTo(Trekkdager.ZERO) > 0)) { + if (stønadskontotype == null + && getAktiviteter().stream() + .anyMatch(a -> a.getTrekkdager().compareTo(Trekkdager.ZERO) > 0)) { throw new IllegalStateException("Kan ikke trekke dager ved ukjent stønadskonto"); } } @@ -97,7 +99,10 @@ public Trekkdager getTrekkdager(AktivitetIdentifikator aktivitetIdentifikator) { } private UttakPeriodeAktivitet finnAktivitet(AktivitetIdentifikator aktivitetIdentifikator) { - return getAktiviteter().stream().filter(a -> a.getIdentifikator().equals(aktivitetIdentifikator)).findFirst().orElseThrow(); + return getAktiviteter().stream() + .filter(a -> a.getIdentifikator().equals(aktivitetIdentifikator)) + .findFirst() + .orElseThrow(); } public boolean isFlerbarnsdager() { @@ -145,25 +150,62 @@ public boolean equals(Object o) { return false; } var that = (UttakPeriode) o; - return flerbarnsdager == that.flerbarnsdager && perioderesultattype == that.perioderesultattype - && manuellbehandlingårsak == that.manuellbehandlingårsak && Objects.equals(periodeResultatÅrsak, that.periodeResultatÅrsak) - && graderingIkkeInnvilgetÅrsak == that.graderingIkkeInnvilgetÅrsak && Objects.equals(aktiviteter, that.aktiviteter) && Objects.equals( - samtidigUttaksprosent, that.samtidigUttaksprosent) && oppholdÅrsak == that.oppholdÅrsak && stønadskontotype == that.stønadskontotype - && Objects.equals(arbeidsprosent, that.arbeidsprosent) && Objects.equals(morsAktivitet, that.morsAktivitet); + return flerbarnsdager == that.flerbarnsdager + && perioderesultattype == that.perioderesultattype + && manuellbehandlingårsak == that.manuellbehandlingårsak + && Objects.equals(periodeResultatÅrsak, that.periodeResultatÅrsak) + && graderingIkkeInnvilgetÅrsak == that.graderingIkkeInnvilgetÅrsak + && Objects.equals(aktiviteter, that.aktiviteter) + && Objects.equals(samtidigUttaksprosent, that.samtidigUttaksprosent) + && oppholdÅrsak == that.oppholdÅrsak + && stønadskontotype == that.stønadskontotype + && Objects.equals(arbeidsprosent, that.arbeidsprosent) + && Objects.equals(morsAktivitet, that.morsAktivitet); } @Override public int hashCode() { - return Objects.hash(perioderesultattype, manuellbehandlingårsak, periodeResultatÅrsak, graderingIkkeInnvilgetÅrsak, aktiviteter, - flerbarnsdager, samtidigUttaksprosent, oppholdÅrsak, stønadskontotype, arbeidsprosent, morsAktivitet); + return Objects.hash( + perioderesultattype, + manuellbehandlingårsak, + periodeResultatÅrsak, + graderingIkkeInnvilgetÅrsak, + aktiviteter, + flerbarnsdager, + samtidigUttaksprosent, + oppholdÅrsak, + stønadskontotype, + arbeidsprosent, + morsAktivitet); } @Override public String toString() { - return "UttakPeriode{" + "perioderesultattype=" + perioderesultattype + ", fom=" + getFom() + ", tom=" + getTom() - + ", manuellbehandlingårsak=" + manuellbehandlingårsak + ", periodeResultatÅrsak=" + periodeResultatÅrsak - + ", graderingIkkeInnvilgetÅrsak=" + graderingIkkeInnvilgetÅrsak + ", aktiviteter=" + aktiviteter + ", flerbarnsdager=" + flerbarnsdager - + ", samtidigUttak=" + samtidigUttaksprosent + ", oppholdÅrsak=" + oppholdÅrsak + ", stønadskontotype=" + stønadskontotype - + ", arbeidsprosent=" + arbeidsprosent + '}'; + return "UttakPeriode{" + + "perioderesultattype=" + + perioderesultattype + + ", fom=" + + getFom() + + ", tom=" + + getTom() + + ", manuellbehandlingårsak=" + + manuellbehandlingårsak + + ", periodeResultatÅrsak=" + + periodeResultatÅrsak + + ", graderingIkkeInnvilgetÅrsak=" + + graderingIkkeInnvilgetÅrsak + + ", aktiviteter=" + + aktiviteter + + ", flerbarnsdager=" + + flerbarnsdager + + ", samtidigUttak=" + + samtidigUttaksprosent + + ", oppholdÅrsak=" + + oppholdÅrsak + + ", stønadskontotype=" + + stønadskontotype + + ", arbeidsprosent=" + + arbeidsprosent + + '}'; } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/UttakPeriodeAktivitet.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/UttakPeriodeAktivitet.java index 482dd09c..d0a4c4bf 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/UttakPeriodeAktivitet.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/UttakPeriodeAktivitet.java @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag; import java.util.Objects; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; public class UttakPeriodeAktivitet { @@ -11,10 +10,11 @@ public class UttakPeriodeAktivitet { private final Trekkdager trekkdager; private final boolean søktGradering; - public UttakPeriodeAktivitet(AktivitetIdentifikator identifikator, - Utbetalingsgrad utbetalingsgrad, - Trekkdager trekkdager, - boolean søktGradering) { + public UttakPeriodeAktivitet( + AktivitetIdentifikator identifikator, + Utbetalingsgrad utbetalingsgrad, + Trekkdager trekkdager, + boolean søktGradering) { this.identifikator = identifikator; this.utbetalingsgrad = utbetalingsgrad; this.trekkdager = trekkdager; @@ -46,8 +46,10 @@ public boolean equals(Object o) { return false; } var that = (UttakPeriodeAktivitet) o; - return søktGradering == that.søktGradering && Objects.equals(identifikator, that.identifikator) && Objects.equals(utbetalingsgrad, - that.utbetalingsgrad) && Objects.equals(trekkdager, that.trekkdager); + return søktGradering == that.søktGradering + && Objects.equals(identifikator, that.identifikator) + && Objects.equals(utbetalingsgrad, that.utbetalingsgrad) + && Objects.equals(trekkdager, that.trekkdager); } @Override @@ -57,7 +59,15 @@ public int hashCode() { @Override public String toString() { - return "UttakPeriodeAktivitet{" + "identifikator=" + identifikator + ", utbetalingsgrad=" + utbetalingsgrad + ", trekkdager=" + trekkdager - + ", gradering=" + søktGradering + '}'; + return "UttakPeriodeAktivitet{" + + "identifikator=" + + identifikator + + ", utbetalingsgrad=" + + utbetalingsgrad + + ", trekkdager=" + + trekkdager + + ", gradering=" + + søktGradering + + '}'; } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Vedtak.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Vedtak.java index e0fe6693..59462f34 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Vedtak.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/Vedtak.java @@ -7,8 +7,7 @@ public final class Vedtak { private final List perioder = new ArrayList<>(); - private Vedtak() { - } + private Vedtak() {} public List getPerioder() { return perioder; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/ytelser/PleiepengerPeriode.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/ytelser/PleiepengerPeriode.java index 3eed4ebb..548cce09 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/ytelser/PleiepengerPeriode.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/ytelser/PleiepengerPeriode.java @@ -2,7 +2,6 @@ import java.time.LocalDate; import java.util.Objects; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; public class PleiepengerPeriode extends LukketPeriode { @@ -20,7 +19,12 @@ public boolean isBarnInnlagt() { @Override public String toString() { - return "PleiepengerPeriode{" + "periode=" + super.toString() + ", barnInnlagt=" + barnInnlagt + '}'; + return "PleiepengerPeriode{" + + "periode=" + + super.toString() + + ", barnInnlagt=" + + barnInnlagt + + '}'; } @Override diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/BevegeligeHelligdagerUtil.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/BevegeligeHelligdagerUtil.java index c0383484..494705ea 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/BevegeligeHelligdagerUtil.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/BevegeligeHelligdagerUtil.java @@ -5,7 +5,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; public class BevegeligeHelligdagerUtil { @@ -13,7 +12,7 @@ public class BevegeligeHelligdagerUtil { private static final Set WEEKEND = Set.of(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY); private BevegeligeHelligdagerUtil() { - //Privat constructor for å hindre instanser. + // Privat constructor for å hindre instanser. } public static List finnBevegeligeHelligdagerUtenHelg(LukketPeriode uttaksperiode) { @@ -65,9 +64,11 @@ public static List finnBevegeligeHelligdagerUtenHelg(LukketPeriode ut return fjernHelg(bevegeligeHelligdager); } - private static List fjernHelg(List bevegeligeHelligdager) { - return bevegeligeHelligdager.stream().filter(hd -> !WEEKEND.contains(hd.getDayOfWeek())).sorted().toList(); + return bevegeligeHelligdager.stream() + .filter(hd -> !WEEKEND.contains(hd.getDayOfWeek())) + .sorted() + .toList(); } private static LocalDate utledPåskedag(int år) { @@ -89,7 +90,8 @@ private static List fjernHelg(List bevegeligeHelligdager) return LocalDate.of(år, n, p + 1); } - private static List utledÅreneDetSkalFinnesHelligdagerFor(LukketPeriode uttaksperiode) { + private static List utledÅreneDetSkalFinnesHelligdagerFor( + LukketPeriode uttaksperiode) { List årene = new ArrayList<>(); for (var i = uttaksperiode.getFom().getYear(); i <= uttaksperiode.getTom().getYear(); i++) { årene.add(i); diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/FarUttakRundtF\303\270dsel.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/FarUttakRundtF\303\270dsel.java" index 77dea053..46757e09 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/FarUttakRundtF\303\270dsel.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/FarUttakRundtF\303\270dsel.java" @@ -4,7 +4,6 @@ import java.time.Period; import java.util.Objects; import java.util.Optional; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Datoer; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Kontoer; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; @@ -16,51 +15,66 @@ public class FarUttakRundtFødsel { private FarUttakRundtFødsel() { - //hindrer instansiering + // hindrer instansiering } public static boolean erKontoRelevant(Stønadskontotype konto) { return Objects.equals(Stønadskontotype.FEDREKVOTE, konto); } - public static boolean erPeriodeRelevant(LukketPeriode farRundtFødselIntervall, LukketPeriode periode) { + public static boolean erPeriodeRelevant( + LukketPeriode farRundtFødselIntervall, LukketPeriode periode) { return farRundtFødselIntervall != null && periode.erOmsluttetAv(farRundtFødselIntervall); } public static Optional utledFarsPeriodeRundtFødsel(RegelGrunnlag grunnlag) { - return utledFarsPeriodeRundtFødsel(grunnlag.getDatoer(), grunnlag.getKontoer(), grunnlag.getSøknad().getType()); + return utledFarsPeriodeRundtFødsel( + grunnlag.getDatoer(), grunnlag.getKontoer(), grunnlag.getSøknad().getType()); } - public static Optional utledFarsPeriodeRundtFødsel(Datoer datoer, Kontoer kontoer, Søknadstype søknadstype) { - if (!kontoer.harSpesialkonto(Spesialkontotype.FAR_RUNDT_FØDSEL) || kontoer.getSpesialkontoTrekkdager(Spesialkontotype.FAR_RUNDT_FØDSEL) == 0 - || !søknadstype.gjelderTerminFødsel()) { + public static Optional utledFarsPeriodeRundtFødsel( + Datoer datoer, Kontoer kontoer, Søknadstype søknadstype) { + if (!kontoer.harSpesialkonto(Spesialkontotype.FAR_RUNDT_FØDSEL) + || kontoer.getSpesialkontoTrekkdager(Spesialkontotype.FAR_RUNDT_FØDSEL) == 0 + || !søknadstype.gjelderTerminFødsel()) { return Optional.empty(); } - return utledFarsPeriodeRundtFødsel(false, søknadstype.gjelderTerminFødsel(), datoer.getFamiliehendelse(), datoer.getTermin()); - + return utledFarsPeriodeRundtFødsel( + false, + søknadstype.gjelderTerminFødsel(), + datoer.getFamiliehendelse(), + datoer.getTermin()); } - public static Optional utledFarsPeriodeRundtFødsel(boolean utenFarUttakRundtFødsel, - boolean gjelderFødsel, - LocalDate familieHendelseDato, - LocalDate terminDato) { + public static Optional utledFarsPeriodeRundtFødsel( + boolean utenFarUttakRundtFødsel, + boolean gjelderFødsel, + LocalDate familieHendelseDato, + LocalDate terminDato) { if (utenFarUttakRundtFødsel || !gjelderFødsel || familieHendelseDato == null) { return Optional.empty(); } - var farFørTermin = Konfigurasjon.STANDARD.getParameterHvisAktivVed(Parametertype.FAR_UTTAK_FØR_TERMIN_UKER, familieHendelseDato) - .map(Period::ofWeeks) - .orElse(Period.ZERO); - var farEtterFødsel = Konfigurasjon.STANDARD.getParameterHvisAktivVed(Parametertype.FAR_UTTAK_ETTER_FØDSEL_UKER, familieHendelseDato) - .map(Period::ofWeeks) - .orElse(Period.ZERO); + var farFørTermin = + Konfigurasjon.STANDARD + .getParameterHvisAktivVed( + Parametertype.FAR_UTTAK_FØR_TERMIN_UKER, familieHendelseDato) + .map(Period::ofWeeks) + .orElse(Period.ZERO); + var farEtterFødsel = + Konfigurasjon.STANDARD + .getParameterHvisAktivVed( + Parametertype.FAR_UTTAK_ETTER_FØDSEL_UKER, familieHendelseDato) + .map(Period::ofWeeks) + .orElse(Period.ZERO); if (farFørTermin.equals(Period.ZERO) && farEtterFødsel.equals(Period.ZERO)) { return Optional.empty(); } // Bruker min(Termin-2uker, Fødsel) - var farUttakFom = Optional.ofNullable(terminDato) - .filter(d -> d.minus(farFørTermin).isBefore(familieHendelseDato)) - .map(d -> d.minus(farFørTermin)) - .orElse(familieHendelseDato); + var farUttakFom = + Optional.ofNullable(terminDato) + .filter(d -> d.minus(farFørTermin).isBefore(familieHendelseDato)) + .map(d -> d.minus(farFørTermin)) + .orElse(familieHendelseDato); // Bruker fødsel + 6uker var farUttakTom = familieHendelseDato.plus(farEtterFødsel).minusDays(1); return Optional.of(new LukketPeriode(farUttakFom, farUttakTom)); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Konfigurasjon.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Konfigurasjon.java index 61ccb1e4..4b5ac335 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Konfigurasjon.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Konfigurasjon.java @@ -18,45 +18,88 @@ public class Konfigurasjon { var d_2017_01_01 = LocalDate.of(2017, Month.JANUARY, 1); var d_2019_07_01 = LocalDate.of(2019, Month.JULY, 1); var d_2022_08_02 = LocalDate.of(2022, Month.AUGUST, 1); - STANDARD = KonfigurasjonBuilder.create() - // Uttaksperioder - .leggTilParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, d_2010_01_01, null, 6) - .leggTilParameter(Parametertype.TIDLIGST_UTTAK_FØR_TERMIN_UKER, d_2010_01_01, null, 12) - .leggTilParameter(Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, d_2010_01_01, null, 3) - .leggTilParameter(Parametertype.UTTAK_ETTER_BARN_DØDT_UKER, d_2017_01_01, null, 6) - .leggTilParameter(Parametertype.FAR_UTTAK_FØR_TERMIN_UKER, d_2017_01_01, null, 2) // TODO: endre til aug 2022 etter overgang - .leggTilParameter(Parametertype.FAR_UTTAK_ETTER_FØDSEL_UKER, d_2017_01_01, null, 6) // TODO: endre til aug 2022 etter overgang - - // Grenser - .leggTilParameter(Parametertype.GRENSE_ETTER_FØDSELSDATO_ÅR, d_2010_01_01, null, 3) - .leggTilParameter(Parametertype.TETTE_SAKER_MELLOMROM_UKER, d_2017_01_01, null, - 48) // TODO: endre til aug 2022 el 48 uker tidligere etter overgang - .leggTilParameter(Parametertype.PREMATURUKER_ANTALL_DAGER_FØR_TERMIN, d_2019_07_01, null, 52) - .build(); + STANDARD = + KonfigurasjonBuilder.create() + // Uttaksperioder + .leggTilParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, + d_2010_01_01, + null, + 6) + .leggTilParameter( + Parametertype.TIDLIGST_UTTAK_FØR_TERMIN_UKER, + d_2010_01_01, + null, + 12) + .leggTilParameter( + Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, d_2010_01_01, null, 3) + .leggTilParameter( + Parametertype.UTTAK_ETTER_BARN_DØDT_UKER, d_2017_01_01, null, 6) + .leggTilParameter( + Parametertype.FAR_UTTAK_FØR_TERMIN_UKER, + d_2017_01_01, + null, + 2) // TODO: endre til aug 2022 etter overgang + .leggTilParameter( + Parametertype.FAR_UTTAK_ETTER_FØDSEL_UKER, + d_2017_01_01, + null, + 6) // TODO: endre til aug 2022 etter overgang + + // Grenser + .leggTilParameter( + Parametertype.GRENSE_ETTER_FØDSELSDATO_ÅR, d_2010_01_01, null, 3) + .leggTilParameter( + Parametertype.TETTE_SAKER_MELLOMROM_UKER, + d_2017_01_01, + null, + 48) // TODO: endre til aug 2022 el 48 uker tidligere etter overgang + .leggTilParameter( + Parametertype.PREMATURUKER_ANTALL_DAGER_FØR_TERMIN, + d_2019_07_01, + null, + 52) + .build(); } - private final Map> parameterMap = new EnumMap<>(Parametertype.class); + private final Map> parameterMap = + new EnumMap<>(Parametertype.class); Konfigurasjon(Map> parameterMap) { this.parameterMap.putAll(parameterMap); } - public Optional getParameterHvisAktivVed(Parametertype parametertype, final LocalDate dato) { + public Optional getParameterHvisAktivVed( + Parametertype parametertype, final LocalDate dato) { return Optional.ofNullable(this.parameterMap.get(parametertype)) - .flatMap(param -> param.stream().filter(p -> p.overlapper(dato)).findFirst().map(Parameter::getVerdi)); + .flatMap( + param -> + param.stream() + .filter(p -> p.overlapper(dato)) + .findFirst() + .map(Parameter::getVerdi)); } public Integer getParameter(Parametertype parametertype, final LocalDate dato) { return getParameterVerdier(parametertype).stream() - .filter(p -> p.overlapper(dato)) - .findFirst() - .map(Parameter::getVerdi) - .orElseThrow(() -> new IllegalArgumentException("Ingen parameter funnet for " + parametertype.name() + " på dato " + dato)); + .filter(p -> p.overlapper(dato)) + .findFirst() + .map(Parameter::getVerdi) + .orElseThrow( + () -> + new IllegalArgumentException( + "Ingen parameter funnet for " + + parametertype.name() + + " på dato " + + dato)); } public Collection getParameterVerdier(Parametertype parametertype) { return Optional.ofNullable(this.parameterMap.get(parametertype)) - .orElseThrow(() -> new IllegalArgumentException("Konfigurasjon-feil/Utvikler-feil: mangler parameter av type " + parametertype)); + .orElseThrow( + () -> + new IllegalArgumentException( + "Konfigurasjon-feil/Utvikler-feil: mangler parameter av type " + + parametertype)); } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/KonfigurasjonBuilder.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/KonfigurasjonBuilder.java index bea00506..c425ecd1 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/KonfigurasjonBuilder.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/KonfigurasjonBuilder.java @@ -18,7 +18,8 @@ public static KonfigurasjonBuilder create() { return new KonfigurasjonBuilder(); } - KonfigurasjonBuilder leggTilParameter(Parametertype parametertype, LocalDate fom, LocalDate tom, Integer verdi) { + KonfigurasjonBuilder leggTilParameter( + Parametertype parametertype, LocalDate fom, LocalDate tom, Integer verdi) { var nyParameter = new Parameter(fom, tom, verdi); var parameterListe = parameterMap.get(parametertype); if (parameterListe == null) { @@ -28,7 +29,8 @@ KonfigurasjonBuilder leggTilParameter(Parametertype parametertype, LocalDate fom } else { var overlapp = parameterListe.stream().anyMatch(nyParameter::overlapper); if (overlapp) { - throw new IllegalArgumentException("Overlappende perioder kan ikke eksistere i konfigurasjon."); + throw new IllegalArgumentException( + "Overlappende perioder kan ikke eksistere i konfigurasjon."); } parameterListe.add(nyParameter); } @@ -38,5 +40,4 @@ KonfigurasjonBuilder leggTilParameter(Parametertype parametertype, LocalDate fom public Konfigurasjon build() { return new Konfigurasjon(parameterMap); } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Parameter.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Parameter.java index f5936008..db54ab4a 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Parameter.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Parameter.java @@ -2,7 +2,6 @@ import java.time.LocalDate; import java.util.Objects; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Periode; class Parameter extends Periode { diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Parametertype.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Parametertype.java index 0a3a1001..56e26af3 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Parametertype.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/Parametertype.java @@ -2,7 +2,7 @@ public enum Parametertype { - //Uttaksperidoer + // Uttaksperidoer FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, TIDLIGST_UTTAK_FØR_TERMIN_UKER, SENEST_UTTAK_FØR_TERMIN_UKER, @@ -10,9 +10,8 @@ public enum Parametertype { FAR_UTTAK_FØR_TERMIN_UKER, FAR_UTTAK_ETTER_FØDSEL_UKER, - //Grenser + // Grenser PREMATURUKER_ANTALL_DAGER_FØR_TERMIN, TETTE_SAKER_MELLOMROM_UKER, GRENSE_ETTER_FØDSELSDATO_ÅR - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PerioderUtenHelgUtil.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PerioderUtenHelgUtil.java index c9d3da8d..5c4d1755 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PerioderUtenHelgUtil.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PerioderUtenHelgUtil.java @@ -5,7 +5,6 @@ import java.time.DayOfWeek; import java.time.LocalDate; import java.util.Set; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; public final class PerioderUtenHelgUtil { @@ -13,10 +12,11 @@ public final class PerioderUtenHelgUtil { private static final Set WEEKEND = Set.of(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY); private PerioderUtenHelgUtil() { - //Privat constructor for å hindre instanser. + // Privat constructor for å hindre instanser. } - public static boolean periodeUtenHelgOmslutter(LukketPeriode omsluttendePeriode, LukketPeriode omsluttetPeriode) { + public static boolean periodeUtenHelgOmslutter( + LukketPeriode omsluttendePeriode, LukketPeriode omsluttetPeriode) { var fom1 = justerFom(omsluttendePeriode.getFom()); var tom1 = justerTom(omsluttendePeriode.getTom()); var fom2 = justerFom(omsluttetPeriode.getFom()); @@ -29,11 +29,14 @@ private static boolean periodeErTom(LocalDate fom1, LocalDate tom1) { return tom1.isBefore(fom1); } - public static boolean perioderUtenHelgOverlapper(LukketPeriode periode1, LukketPeriode periode2) { - return perioderUtenHelgOverlapper(periode1.getFom(), periode1.getTom(), periode2.getFom(), periode2.getTom()); + public static boolean perioderUtenHelgOverlapper( + LukketPeriode periode1, LukketPeriode periode2) { + return perioderUtenHelgOverlapper( + periode1.getFom(), periode1.getTom(), periode2.getFom(), periode2.getTom()); } - public static boolean perioderUtenHelgOverlapper(LocalDate fom1, LocalDate tom1, LocalDate fom2, LocalDate tom2) { + public static boolean perioderUtenHelgOverlapper( + LocalDate fom1, LocalDate tom1, LocalDate fom2, LocalDate tom2) { var justertFom1 = justerFom(fom1); var justertTom1 = justerTom(tom1); if (periodeErTom(justertFom1, justertTom1)) { @@ -47,7 +50,8 @@ public static boolean perioderUtenHelgOverlapper(LocalDate fom1, LocalDate tom1, return !justertFom2.isAfter(justertTom1) && !justertTom2.isBefore(justertFom1); } - public static boolean likNårHelgIgnoreres(LocalDate fom1, LocalDate tom1, LocalDate fom2, LocalDate tom2) { + public static boolean likNårHelgIgnoreres( + LocalDate fom1, LocalDate tom1, LocalDate fom2, LocalDate tom2) { return justerFom(fom1).equals(justerFom(fom2)) && justerTom(tom1).equals(justerTom(tom2)); } @@ -68,7 +72,8 @@ public static LocalDate helgBlirFredag(LocalDate dato) { } public static LocalDate fredagLørdagBlirSøndag(LocalDate dato) { - return WEEKEND.contains(dato.plusDays(1).getDayOfWeek()) ? dato.with(next(DayOfWeek.MONDAY)) : dato; + return WEEKEND.contains(dato.plusDays(1).getDayOfWeek()) + ? dato.with(next(DayOfWeek.MONDAY)) + : dato; } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PrematurukerUtil.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PrematurukerUtil.java index 0cf0aae2..59106f03 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PrematurukerUtil.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PrematurukerUtil.java @@ -6,15 +6,17 @@ public final class PrematurukerUtil { - private PrematurukerUtil() { - } + private PrematurukerUtil() {} - public static boolean oppfyllerKravTilPrematuruker(LocalDate fødselsdato, LocalDate termindato) { + public static boolean oppfyllerKravTilPrematuruker( + LocalDate fødselsdato, LocalDate termindato) { if (fødselsdato == null || termindato == null) { return false; } if (erEtterRegelendringStartdato(fødselsdato)) { - var antallDagerFørTermin = Konfigurasjon.STANDARD.getParameter(Parametertype.PREMATURUKER_ANTALL_DAGER_FØR_TERMIN, fødselsdato); + var antallDagerFørTermin = + Konfigurasjon.STANDARD.getParameter( + Parametertype.PREMATURUKER_ANTALL_DAGER_FØR_TERMIN, fødselsdato); return fødselsdato.plusDays(antallDagerFørTermin).isBefore(termindato); } return false; diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/S\303\270knadsfristUtil.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/S\303\270knadsfristUtil.java" index bb8cec9b..25629a2b 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/S\303\270knadsfristUtil.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/S\303\270knadsfristUtil.java" @@ -9,8 +9,7 @@ public final class SøknadsfristUtil { private static final long SØKNADSFRIST_MÅNEDER = 3; - private SøknadsfristUtil() { - } + private SøknadsfristUtil() {} public static LocalDate finnFørsteLoveligeUttaksdag(LocalDate søknadMottattDato) { return søknadMottattDato.withDayOfMonth(1).minusMonths(SØKNADSFRIST_MÅNEDER); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/AvslagAktivitetskravDelregel.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/AvslagAktivitetskravDelregel.java index 58cd6010..e7b1725e 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/AvslagAktivitetskravDelregel.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/AvslagAktivitetskravDelregel.java @@ -44,146 +44,228 @@ import no.nav.fpsak.nare.doc.RuleDocumentation; import no.nav.fpsak.nare.specification.Specification; -@RuleDocumentation(value = AvslagAktivitetskravDelregel.ID, specificationReference = "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") +@RuleDocumentation( + value = AvslagAktivitetskravDelregel.ID, + specificationReference = + "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") public class AvslagAktivitetskravDelregel implements RuleService { public static final String ID = "AVSLAG_AKT"; private final Ruleset rs = new Ruleset<>(); - @Override public Specification getSpecification() { - return rs.hvisRegel(SjekkOmTomForAlleSineKontoer.ID, SjekkOmTomForAlleSineKontoer.BESKRIVELSE) - //Går til manuell for at saksbehandler skal velge riktig hjemmel - .hvis(new SjekkOmTomForAlleSineKontoer(), IkkeOppfylt.opprett("UT1319", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, false, false)) - .ellers(sjekkOmKjentAktivitet()); + return rs.hvisRegel( + SjekkOmTomForAlleSineKontoer.ID, SjekkOmTomForAlleSineKontoer.BESKRIVELSE) + // Går til manuell for at saksbehandler skal velge riktig hjemmel + .hvis( + new SjekkOmTomForAlleSineKontoer(), + IkkeOppfylt.opprett( + "UT1319", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, false, false)) + .ellers(sjekkOmKjentAktivitet()); } private Specification sjekkOmKjentAktivitet() { return rs.hvisRegel(SjekkOmMorsAktivitetErKjent.ID, SjekkOmMorsAktivitetErKjent.BESKRIVELSE) - .hvis(new SjekkOmMorsAktivitetErKjent(), sjekkOmMorArbeid()) - .ellers(sjekkOmUkjentAktivitetErUttakUtenAktivitetskrav()); + .hvis(new SjekkOmMorsAktivitetErKjent(), sjekkOmMorArbeid()) + .ellers(sjekkOmUkjentAktivitetErUttakUtenAktivitetskrav()); } private Specification sjekkOmMorArbeid() { - return rs.hvisRegel(SjekkOmMorArbeid.ID, SjekkOmMorArbeid.BESKRIVELSE).hvis(new SjekkOmMorArbeid(), morArbeid()).ellers(sjekkOmMorSyk()); + return rs.hvisRegel(SjekkOmMorArbeid.ID, SjekkOmMorArbeid.BESKRIVELSE) + .hvis(new SjekkOmMorArbeid(), morArbeid()) + .ellers(sjekkOmMorSyk()); } private Specification sjekkOmMorSyk() { - return rs.hvisRegel(SjekkOmMorSyk.ID, SjekkOmMorSyk.BESKRIVELSE).hvis(new SjekkOmMorSyk(), morSyk()).ellers(sjekkOmMorInnlagt()); + return rs.hvisRegel(SjekkOmMorSyk.ID, SjekkOmMorSyk.BESKRIVELSE) + .hvis(new SjekkOmMorSyk(), morSyk()) + .ellers(sjekkOmMorInnlagt()); } private Specification sjekkOmMorInnlagt() { return rs.hvisRegel(SjekkOmMorInnlagt.ID, SjekkOmMorInnlagt.BESKRIVELSE) - .hvis(new SjekkOmMorInnlagt(), morInnlagt()) - .ellers(sjekkOmMorUtdanning()); + .hvis(new SjekkOmMorInnlagt(), morInnlagt()) + .ellers(sjekkOmMorUtdanning()); } private Specification sjekkOmMorUtdanning() { return rs.hvisRegel(SjekkOmMorUtdanning.ID, SjekkOmMorUtdanning.BESKRIVELSE) - .hvis(new SjekkOmMorUtdanning(), morUtdannning()) - .ellers(sjekkOmMorKvalifiseringsprogram()); + .hvis(new SjekkOmMorUtdanning(), morUtdannning()) + .ellers(sjekkOmMorKvalifiseringsprogram()); } private Specification sjekkOmMorKvalifiseringsprogram() { - return rs.hvisRegel(SjekkOmMorKvalifiseringsprogram.ID, SjekkOmMorKvalifiseringsprogram.BESKRIVELSE) - .hvis(new SjekkOmMorKvalifiseringsprogram(), morKvalifiseringsprogram()) - .ellers(sjekkOmMorIntroduksjonsprogram()); + return rs.hvisRegel( + SjekkOmMorKvalifiseringsprogram.ID, + SjekkOmMorKvalifiseringsprogram.BESKRIVELSE) + .hvis(new SjekkOmMorKvalifiseringsprogram(), morKvalifiseringsprogram()) + .ellers(sjekkOmMorIntroduksjonsprogram()); } private Specification sjekkOmMorIntroduksjonsprogram() { - return rs.hvisRegel(SjekkOmMorIntroduksjonsprogram.ID, SjekkOmMorIntroduksjonsprogram.BESKRIVELSE) - .hvis(new SjekkOmMorIntroduksjonsprogram(), morIntroduksjonsprogram()) - .ellers(sjekkOmMorKombinasjonArbeidUtdanning()); + return rs.hvisRegel( + SjekkOmMorIntroduksjonsprogram.ID, + SjekkOmMorIntroduksjonsprogram.BESKRIVELSE) + .hvis(new SjekkOmMorIntroduksjonsprogram(), morIntroduksjonsprogram()) + .ellers(sjekkOmMorKombinasjonArbeidUtdanning()); } private Specification sjekkOmMorKombinasjonArbeidUtdanning() { - return rs.hvisRegel(SjekkOmMorKombinasjonArbeidUtdanning.ID, SjekkOmMorKombinasjonArbeidUtdanning.BESKRIVELSE) - .hvis(new SjekkOmMorKombinasjonArbeidUtdanning(), morKombinasjonArbeidUtdanning()) - .ellers(sjekkOmMorOppgittUføretrygd()); + return rs.hvisRegel( + SjekkOmMorKombinasjonArbeidUtdanning.ID, + SjekkOmMorKombinasjonArbeidUtdanning.BESKRIVELSE) + .hvis(new SjekkOmMorKombinasjonArbeidUtdanning(), morKombinasjonArbeidUtdanning()) + .ellers(sjekkOmMorOppgittUføretrygd()); } private Specification sjekkOmMorOppgittUføretrygd() { return rs.hvisRegel(SjekkOmMorOppgittUføre.ID, SjekkOmMorOppgittUføre.BESKRIVELSE) - .hvis(new SjekkOmMorOppgittUføre(), sjekkOmMorBekreftetUføretrygd()) - .ellers(utfall1314AvklarAktivitetSituasjon()); + .hvis(new SjekkOmMorOppgittUføre(), sjekkOmMorBekreftetUføretrygd()) + .ellers(utfall1314AvklarAktivitetSituasjon()); } private Specification sjekkOmMorBekreftetUføretrygd() { return rs.hvisRegel(SjekkOmMorBekreftetUføre.ID, SjekkOmMorBekreftetUføre.BESKRIVELSE) - .hvis(new SjekkOmMorBekreftetUføre(), sjekkOmMorBekreftetUføretrygdErUttak()) - .ellers(avslåSjekkSkalTrekkeDager("UT1322", FORELDREPENGER_KUN_FAR_HAR_RETT_MOR_IKKE_UFØR)); + .hvis(new SjekkOmMorBekreftetUføre(), sjekkOmMorBekreftetUføretrygdErUttak()) + .ellers( + avslåSjekkSkalTrekkeDager( + "UT1322", FORELDREPENGER_KUN_FAR_HAR_RETT_MOR_IKKE_UFØR)); } private Specification sjekkOmMorBekreftetUføretrygdErUttak() { - return rs.hvisRegel(SjekkOmUttakOgUtenAktivitetskrav.ID, SjekkOmUttakOgUtenAktivitetskrav.BESKRIVELSE) - .hvis(new SjekkOmUttakOgUtenAktivitetskrav(), avslå("UT1324", AKTIVITET_UKJENT_UDOKUMENTERT)) - .ellers(utfall1314AvklarAktivitetSituasjon()); + return rs.hvisRegel( + SjekkOmUttakOgUtenAktivitetskrav.ID, + SjekkOmUttakOgUtenAktivitetskrav.BESKRIVELSE) + .hvis( + new SjekkOmUttakOgUtenAktivitetskrav(), + avslå("UT1324", AKTIVITET_UKJENT_UDOKUMENTERT)) + .ellers(utfall1314AvklarAktivitetSituasjon()); } - private Specification sjekkOmUkjentAktivitetErUttakUtenAktivitetskrav() { - return rs.hvisRegel(SjekkOmUttakOgUtenAktivitetskrav.ID, SjekkOmUttakOgUtenAktivitetskrav.BESKRIVELSE) - .hvis(new SjekkOmUttakOgUtenAktivitetskrav(), avslå("UT1323", AKTIVITET_UKJENT_UDOKUMENTERT)) - .ellers(sjekkOmUkjentAktivitetErFriUtsettelse()); + private Specification + sjekkOmUkjentAktivitetErUttakUtenAktivitetskrav() { + return rs.hvisRegel( + SjekkOmUttakOgUtenAktivitetskrav.ID, + SjekkOmUttakOgUtenAktivitetskrav.BESKRIVELSE) + .hvis( + new SjekkOmUttakOgUtenAktivitetskrav(), + avslå("UT1323", AKTIVITET_UKJENT_UDOKUMENTERT)) + .ellers(sjekkOmUkjentAktivitetErFriUtsettelse()); } private Specification sjekkOmUkjentAktivitetErFriUtsettelse() { // Pga praksis med tekniske perioder u/aktivitet fra søknader fram til første uttak. return rs.hvisRegel(SjekkOmFriUtsettelse.ID, SjekkOmFriUtsettelse.BESKRIVELSE) - .hvis(new SjekkOmFriUtsettelse(), avslåSjekkSkalTrekkeDager("UT1325", BARE_FAR_RETT_IKKE_SØKT)) - .ellers(Manuellbehandling.opprett("UT1315", null, Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT, true, false)); + .hvis( + new SjekkOmFriUtsettelse(), + avslåSjekkSkalTrekkeDager("UT1325", BARE_FAR_RETT_IKKE_SØKT)) + .ellers( + Manuellbehandling.opprett( + "UT1315", + null, + Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT, + true, + false)); } private Specification morArbeid() { - return rs.hvisRegel(SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) - .hvis(new SjekkOmAktivitetErDokumentert(), avslåSjekkSkalTrekkeDager("UT1300", AKTIVITETSKRAVET_ARBEID_IKKE_OPPFYLT)) - .ellers(avslåSjekkSkalTrekkeDager("UT1301", AKTIVITETSKRAVET_ARBEID_IKKE_DOKUMENTERT)); + return rs.hvisRegel( + SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) + .hvis( + new SjekkOmAktivitetErDokumentert(), + avslåSjekkSkalTrekkeDager("UT1300", AKTIVITETSKRAVET_ARBEID_IKKE_OPPFYLT)) + .ellers( + avslåSjekkSkalTrekkeDager( + "UT1301", AKTIVITETSKRAVET_ARBEID_IKKE_DOKUMENTERT)); } private Specification morSyk() { - return rs.hvisRegel(SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) - .hvis(new SjekkOmAktivitetErDokumentert(), avslåSjekkSkalTrekkeDager("UT1302", AKTIVITETSKRAVET_SYKDOM_IKKE_OPPFYLT)) - .ellers(avslåSjekkSkalTrekkeDager("UT1303", AKTIVITETSKRAVET_SYKDOM_IKKE_DOKUMENTERT)); + return rs.hvisRegel( + SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) + .hvis( + new SjekkOmAktivitetErDokumentert(), + avslåSjekkSkalTrekkeDager("UT1302", AKTIVITETSKRAVET_SYKDOM_IKKE_OPPFYLT)) + .ellers( + avslåSjekkSkalTrekkeDager( + "UT1303", AKTIVITETSKRAVET_SYKDOM_IKKE_DOKUMENTERT)); } private Specification morInnlagt() { - return rs.hvisRegel(SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) - .hvis(new SjekkOmAktivitetErDokumentert(), avslåSjekkSkalTrekkeDager("UT1304", AKTIVITETSKRAVET_INNLEGGELSE_IKKE_OPPFYLT)) - .ellers(avslåSjekkSkalTrekkeDager("UT1305", AKTIVITETSKRAVET_INNLEGGELSE_IKKE_DOKUMENTERT)); + return rs.hvisRegel( + SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) + .hvis( + new SjekkOmAktivitetErDokumentert(), + avslåSjekkSkalTrekkeDager( + "UT1304", AKTIVITETSKRAVET_INNLEGGELSE_IKKE_OPPFYLT)) + .ellers( + avslåSjekkSkalTrekkeDager( + "UT1305", AKTIVITETSKRAVET_INNLEGGELSE_IKKE_DOKUMENTERT)); } private Specification morUtdannning() { - return rs.hvisRegel(SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) - .hvis(new SjekkOmAktivitetErDokumentert(), avslåSjekkSkalTrekkeDager("UT1306", AKTIVITETSKRAVET_UTDANNING_IKKE_OPPFYLT)) - .ellers(avslåSjekkSkalTrekkeDager("UT1307", AKTIVITETSKRAVET_UTDANNING_IKKE_DOKUMENTERT)); + return rs.hvisRegel( + SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) + .hvis( + new SjekkOmAktivitetErDokumentert(), + avslåSjekkSkalTrekkeDager( + "UT1306", AKTIVITETSKRAVET_UTDANNING_IKKE_OPPFYLT)) + .ellers( + avslåSjekkSkalTrekkeDager( + "UT1307", AKTIVITETSKRAVET_UTDANNING_IKKE_DOKUMENTERT)); } private Specification morKvalifiseringsprogram() { - return rs.hvisRegel(SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) - .hvis(new SjekkOmAktivitetErDokumentert(), - avslåSjekkSkalTrekkeDager("UT1308", AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_OPPFYLT)) - .ellers(avslåSjekkSkalTrekkeDager("UT1309", AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_DOKUMENTERT)); + return rs.hvisRegel( + SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) + .hvis( + new SjekkOmAktivitetErDokumentert(), + avslåSjekkSkalTrekkeDager( + "UT1308", + AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_OPPFYLT)) + .ellers( + avslåSjekkSkalTrekkeDager( + "UT1309", + AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_DOKUMENTERT)); } private Specification morIntroduksjonsprogram() { - return rs.hvisRegel(SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) - .hvis(new SjekkOmAktivitetErDokumentert(), - avslåSjekkSkalTrekkeDager("UT1310", AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_OPPFYLT)) - .ellers(avslåSjekkSkalTrekkeDager("UT1311", AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_DOKUMENTERT)); + return rs.hvisRegel( + SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) + .hvis( + new SjekkOmAktivitetErDokumentert(), + avslåSjekkSkalTrekkeDager( + "UT1310", + AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_OPPFYLT)) + .ellers( + avslåSjekkSkalTrekkeDager( + "UT1311", + AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_DOKUMENTERT)); } private Specification morKombinasjonArbeidUtdanning() { - return rs.hvisRegel(SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) - .hvis(new SjekkOmAktivitetErDokumentert(), - avslåSjekkSkalTrekkeDager("UT1312", AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_OPPFYLT)) - .ellers(avslåSjekkSkalTrekkeDager("UT1313", AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_DOKUMENTERT)); + return rs.hvisRegel( + SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) + .hvis( + new SjekkOmAktivitetErDokumentert(), + avslåSjekkSkalTrekkeDager( + "UT1312", + AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_OPPFYLT)) + .ellers( + avslåSjekkSkalTrekkeDager( + "UT1313", + AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_DOKUMENTERT)); } - private Specification avslåSjekkSkalTrekkeDager(String sluttpunktId, IkkeOppfyltÅrsak årsak) { - return rs.hvisRegel(SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) - .hvis(new SjekkOmSkalTrekkeDagerFraKonto(), IkkeOppfylt.opprett(sluttpunktId, årsak, true, false)) - .ellers(IkkeOppfylt.opprett(sluttpunktId, årsak, false, false)); + private Specification avslåSjekkSkalTrekkeDager( + String sluttpunktId, IkkeOppfyltÅrsak årsak) { + return rs.hvisRegel( + SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) + .hvis( + new SjekkOmSkalTrekkeDagerFraKonto(), + IkkeOppfylt.opprett(sluttpunktId, årsak, true, false)) + .ellers(IkkeOppfylt.opprett(sluttpunktId, årsak, false, false)); } private FastsettePeriodeUtfall avslå(String sluttpunktId, IkkeOppfyltÅrsak årsak) { @@ -191,8 +273,14 @@ private Specification morKombinasjonArbeidUtdanning() } private Specification utfall1314AvklarAktivitetSituasjon() { - return rs.hvisRegel(SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) - .hvis(new SjekkOmSkalTrekkeDagerFraKonto(), Manuellbehandling.opprett("UT1314", null, Manuellbehandlingårsak.MOR_UFØR, true, true)) - .ellers(Manuellbehandling.opprett("UT1314", null, Manuellbehandlingårsak.MOR_UFØR, false, true)); + return rs.hvisRegel( + SjekkOmAktivitetErDokumentert.ID, SjekkOmAktivitetErDokumentert.BESKRIVELSE) + .hvis( + new SjekkOmSkalTrekkeDagerFraKonto(), + Manuellbehandling.opprett( + "UT1314", null, Manuellbehandlingårsak.MOR_UFØR, true, true)) + .ellers( + Manuellbehandling.opprett( + "UT1314", null, Manuellbehandlingårsak.MOR_UFØR, false, true)); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FastsettePeriodeRegel.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FastsettePeriodeRegel.java index 2ec03b8f..ff230e66 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FastsettePeriodeRegel.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FastsettePeriodeRegel.java @@ -54,15 +54,15 @@ import no.nav.fpsak.nare.evaluation.Evaluation; import no.nav.fpsak.nare.specification.Specification; -/** - * Regeltjeneste som fastsetter uttaksperioder som er søkt om for foreldrepenger. - */ +/** Regeltjeneste som fastsetter uttaksperioder som er søkt om for foreldrepenger. */ @RuleDocumentation(value = FastsettePeriodeRegel.ID) public class FastsettePeriodeRegel implements RuleService { public static final String ID = "FP_VK 14"; - private static final String GJELDER_FPFF_PERIODE_FØDSEL = "Gjelder foreldrepenger før fødsel periode fødsel?"; - private static final String ER_PERIODEN_FPFF = "Er det søkt om uttak av foreldrepenger før fødsel?"; + private static final String GJELDER_FPFF_PERIODE_FØDSEL = + "Gjelder foreldrepenger før fødsel periode fødsel?"; + private static final String ER_PERIODEN_FPFF = + "Er det søkt om uttak av foreldrepenger før fødsel?"; private final Ruleset rs = new Ruleset<>(); @@ -82,60 +82,95 @@ public Evaluation evaluer(FastsettePeriodeGrunnlag grunnlag) { @Override public Specification getSpecification() { return rs.hvisRegel(SjekkOmPeriodeErUtsettelse.ID, SjekkOmPeriodeErUtsettelse.BESKRIVELSE) - .hvis(new SjekkOmPeriodeErUtsettelse(), sjekkPeriodeInnenforMaksgrense()) - .ellers(sjekkOmPeriodenErFørGyldigDato()); + .hvis(new SjekkOmPeriodeErUtsettelse(), sjekkPeriodeInnenforMaksgrense()) + .ellers(sjekkOmPeriodenErFørGyldigDato()); } private Specification sjekkOmPeriodenErFørGyldigDato() { - return rs.hvisRegel(SjekkOmPeriodenErFørGyldigDato.ID, "Er uttaksperiode før \"gyldig dato\"?") - .hvis(new SjekkOmPeriodenErFørGyldigDato(), sjekkOmManglendePeriode()) - .ellers(sjekkPeriodeInnenforMaksgrense()); + return rs.hvisRegel( + SjekkOmPeriodenErFørGyldigDato.ID, "Er uttaksperiode før \"gyldig dato\"?") + .hvis(new SjekkOmPeriodenErFørGyldigDato(), sjekkOmManglendePeriode()) + .ellers(sjekkPeriodeInnenforMaksgrense()); } private Specification sjekkOmUttaksperiodenEtterSøkersDødsdato() { if (fomUttaksperiodenEtterSøkersDødsdato == null) { - fomUttaksperiodenEtterSøkersDødsdato = rs.hvisRegel(SjekkOmUttaksperiodenEtterSøkersDødsdato.ID, - "Er uttaksperioden etter søkers dødsdato?") - .hvis(new SjekkOmUttaksperiodenEtterSøkersDødsdato(), - Manuellbehandling.opprett("UT1275", IkkeOppfyltÅrsak.SØKER_DØD, Manuellbehandlingårsak.DØDSFALL, false, false)) - .ellers(sjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato()); + fomUttaksperiodenEtterSøkersDødsdato = + rs.hvisRegel( + SjekkOmUttaksperiodenEtterSøkersDødsdato.ID, + "Er uttaksperioden etter søkers dødsdato?") + .hvis( + new SjekkOmUttaksperiodenEtterSøkersDødsdato(), + Manuellbehandling.opprett( + "UT1275", + IkkeOppfyltÅrsak.SØKER_DØD, + Manuellbehandlingårsak.DØDSFALL, + false, + false)) + .ellers(sjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato()); } return fomUttaksperiodenEtterSøkersDødsdato; } - private Specification sjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato() { - return rs.hvisRegel(SjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato.ID, "Er uttaksperioden etter senere enn 6 uker etter barns dødsdato?") - .hvis(new SjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato(), sjekkOmAlleBarnErDøde()) - .ellers(sjekkOmOpphørsdatoTrefferPerioden()); + private Specification + sjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato() { + return rs.hvisRegel( + SjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato.ID, + "Er uttaksperioden etter senere enn 6 uker etter barns dødsdato?") + .hvis( + new SjekkOmUttaksperiodenEtter6UkerEtterBarnsDødsdato(), + sjekkOmAlleBarnErDøde()) + .ellers(sjekkOmOpphørsdatoTrefferPerioden()); } private Specification sjekkOmAlleBarnErDøde() { return rs.hvisRegel(SjekkOmAlleBarnErDøde.ID, "Er alle barn døde?") - .hvis(new SjekkOmAlleBarnErDøde(), - Manuellbehandling.opprett("UT1289", IkkeOppfyltÅrsak.BARN_DØD, Manuellbehandlingårsak.DØDSFALL, false, false)) - .ellers(sjekkOmOpphørsdatoTrefferPerioden()); + .hvis( + new SjekkOmAlleBarnErDøde(), + Manuellbehandling.opprett( + "UT1289", + IkkeOppfyltÅrsak.BARN_DØD, + Manuellbehandlingårsak.DØDSFALL, + false, + false)) + .ellers(sjekkOmOpphørsdatoTrefferPerioden()); } private Specification sjekkOmOpphørsdatoTrefferPerioden() { if (fomOpphørsdatoTrefferPerioden == null) { - fomOpphørsdatoTrefferPerioden = rs.hvisRegel(SjekkOmOpphørsdatoTrefferPerioden.ID, "Inneholder perioden opphørsdato for medlemskap") - .hvis(new SjekkOmOpphørsdatoTrefferPerioden(), IkkeOppfylt.opprett("UT1250", IkkeOppfyltÅrsak.SØKER_IKKE_MEDLEM, false, false)) - .ellers(sjekkOmFødselsvilkåretErOppfylt()); + fomOpphørsdatoTrefferPerioden = + rs.hvisRegel( + SjekkOmOpphørsdatoTrefferPerioden.ID, + "Inneholder perioden opphørsdato for medlemskap") + .hvis( + new SjekkOmOpphørsdatoTrefferPerioden(), + IkkeOppfylt.opprett( + "UT1250", + IkkeOppfyltÅrsak.SØKER_IKKE_MEDLEM, + false, + false)) + .ellers(sjekkOmFødselsvilkåretErOppfylt()); } return fomOpphørsdatoTrefferPerioden; } - private Specification sjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse() { - return rs.hvisRegel(SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse.ID, - "Sammenfaller uttaksperioden med en periode hos den andre parten som er en innvilget utsettelse?") - .hvis(new SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse(), sjekkOmBehandlingKreverSammenhengendeUttak()) - .ellers(sjekkOmAnnenPartsPeriodeHarUtbetalingsgrad()); + private Specification + sjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse() { + return rs.hvisRegel( + SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse.ID, + "Sammenfaller uttaksperioden med en periode hos den andre parten som er en innvilget utsettelse?") + .hvis( + new SjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse(), + sjekkOmBehandlingKreverSammenhengendeUttak()) + .ellers(sjekkOmAnnenPartsPeriodeHarUtbetalingsgrad()); } private Specification sjekkOmBehandlingKreverSammenhengendeUttak() { - return rs.hvisRegel(SjekkOmBehandlingKreverSammenhengendeUttak.ID, SjekkOmBehandlingKreverSammenhengendeUttak.BESKRIVELSE) - .hvis(new SjekkOmBehandlingKreverSammenhengendeUttak(), ikkeOppfyltUT1166()) - .ellers(sjekkOmFødselTermin()); + return rs.hvisRegel( + SjekkOmBehandlingKreverSammenhengendeUttak.ID, + SjekkOmBehandlingKreverSammenhengendeUttak.BESKRIVELSE) + .hvis(new SjekkOmBehandlingKreverSammenhengendeUttak(), ikkeOppfyltUT1166()) + .ellers(sjekkOmFødselTermin()); } private FastsettePeriodeUtfall ikkeOppfyltUT1166() { @@ -143,235 +178,388 @@ private FastsettePeriodeUtfall ikkeOppfyltUT1166() { } private Specification sjekkOmFødselTermin() { - return rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmTidsperiodeForbeholdtMor()) - .ellers(sjekkOmAnnenPartsPeriodeHarUtbetalingsgrad()); + return rs.hvisRegel( + SjekkOmSøknadGjelderTerminEllerFødsel.ID, + SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + sjekkOmTidsperiodeForbeholdtMor()) + .ellers(sjekkOmAnnenPartsPeriodeHarUtbetalingsgrad()); } private Specification sjekkOmTidsperiodeForbeholdtMor() { - return rs.hvisRegel(SjekkOmTidsperiodeForbeholdtMor.ID, SjekkOmTidsperiodeForbeholdtMor.BESKRIVELSE) - .hvis(new SjekkOmTidsperiodeForbeholdtMor().og(ikke(new SjekkOmFarHarDagerRundtFødsel())), ikkeOppfyltUT1166()) - .ellers(sjekkOmAnnenPartsPeriodeHarUtbetalingsgrad()); + return rs.hvisRegel( + SjekkOmTidsperiodeForbeholdtMor.ID, + SjekkOmTidsperiodeForbeholdtMor.BESKRIVELSE) + .hvis( + new SjekkOmTidsperiodeForbeholdtMor() + .og(ikke(new SjekkOmFarHarDagerRundtFødsel())), + ikkeOppfyltUT1166()) + .ellers(sjekkOmAnnenPartsPeriodeHarUtbetalingsgrad()); } private Specification sjekkOmAnnenPartsPeriodeHarUtbetalingsgrad() { - return rs.hvisRegel(SjekkOmAnnenPartsPeriodeHarUtbetalingsgrad.ID, - "Sammenfaller uttaksperioden med en periode hos den andre parten som har utbetaling > 0?") - .hvis(new SjekkOmAnnenPartsPeriodeHarUtbetalingsgrad(), sjekkOmSamtidigUttak()) - .ellers(sjekkOmPeriodeErUtsettelse()); + return rs.hvisRegel( + SjekkOmAnnenPartsPeriodeHarUtbetalingsgrad.ID, + "Sammenfaller uttaksperioden med en periode hos den andre parten som har utbetaling > 0?") + .hvis(new SjekkOmAnnenPartsPeriodeHarUtbetalingsgrad(), sjekkOmSamtidigUttak()) + .ellers(sjekkOmPeriodeErUtsettelse()); } private Specification sjekkOmAkseptertSamtidigUttak() { return rs.hvisRegel(SjekkOmAkseptertSamtidigUttak.ID, "Samtidig uttak er akseptert?") - .hvis(new SjekkOmAkseptertSamtidigUttak(), sjekkOmPeriodeErUtsettelse()) - .ellers(Manuellbehandling.opprett("UT1164", null, Manuellbehandlingårsak.VURDER_SAMTIDIG_UTTAK, true, false)); + .hvis(new SjekkOmAkseptertSamtidigUttak(), sjekkOmPeriodeErUtsettelse()) + .ellers( + Manuellbehandling.opprett( + "UT1164", + null, + Manuellbehandlingårsak.VURDER_SAMTIDIG_UTTAK, + true, + false)); } private Specification sjekkOmSamtidigUttak() { - return rs.hvisRegel(SjekkOmSamtidigUttak.ID, "Har en av foreldrene huket av for samtidig uttak?") - .hvis(new SjekkOmSamtidigUttak(), sjekkOmAkseptertSamtidigUttak()) - .ellers(IkkeOppfylt.opprett("UT1162", IkkeOppfyltÅrsak.OPPHOLD_IKKE_SAMTIDIG_UTTAK, false, false)); + return rs.hvisRegel( + SjekkOmSamtidigUttak.ID, + "Har en av foreldrene huket av for samtidig uttak?") + .hvis(new SjekkOmSamtidigUttak(), sjekkOmAkseptertSamtidigUttak()) + .ellers( + IkkeOppfylt.opprett( + "UT1162", + IkkeOppfyltÅrsak.OPPHOLD_IKKE_SAMTIDIG_UTTAK, + false, + false)); } private Specification sjekkOmManglendePeriode() { return rs.hvisRegel(SjekkOmManglendeSøktPeriode.ID, "Er det \"Manglende søkt periode\"?") - .hvis(new SjekkOmManglendeSøktPeriode(), new ManglendeSøktPeriodeDelregel().getSpecification()) - .ellers(sjekkOmSøknadGjelderTerminFødsel()); + .hvis( + new SjekkOmManglendeSøktPeriode(), + new ManglendeSøktPeriodeDelregel().getSpecification()) + .ellers(sjekkOmSøknadGjelderTerminFødsel()); } private Specification sjekkOmSøknadGjelderTerminFødsel() { - return rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmPeriodeErForTidlig()) - .ellers(sjekkOmAdopsjonPeriodeErForTidlig()); + return rs.hvisRegel( + SjekkOmSøknadGjelderTerminEllerFødsel.ID, + SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) + .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmPeriodeErForTidlig()) + .ellers(sjekkOmAdopsjonPeriodeErForTidlig()); } private Specification sjekkOmAdopsjonPeriodeErForTidlig() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, SjekkOmPeriodenStarterFørFamiliehendelse.BESKRIVELSE) - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), IkkeOppfylt.opprett("UT1080", IkkeOppfyltÅrsak.SØKNADSFRIST, false, false)) - .ellers(sjekkOmTomPåKontoVedSøktPeriode()); + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + SjekkOmPeriodenStarterFørFamiliehendelse.BESKRIVELSE) + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + IkkeOppfylt.opprett("UT1080", IkkeOppfyltÅrsak.SØKNADSFRIST, false, false)) + .ellers(sjekkOmTomPåKontoVedSøktPeriode()); } private Specification sjekkOmPeriodeErForTidlig() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.ID, SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.BESKRIVELSE) - .hvis(new SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin(), - IkkeOppfylt.opprett("UT1080", IkkeOppfyltÅrsak.SØKNADSFRIST, false, false)) - .ellers(sjekkOmTomPåKontoVedSøktPeriode()); + return rs.hvisRegel( + SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.ID, + SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.BESKRIVELSE) + .hvis( + new SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin(), + IkkeOppfylt.opprett("UT1080", IkkeOppfyltÅrsak.SØKNADSFRIST, false, false)) + .ellers(sjekkOmTomPåKontoVedSøktPeriode()); } private Specification sjekkOmTomPåKontoVedSøktPeriode() { - return rs.hvisRegel(SjekkOmTomForAlleSineKontoer.ID, SjekkOmTomForAlleSineKontoer.BESKRIVELSE) - .hvis(new SjekkOmTomForAlleSineKontoer(), IkkeOppfylt.opprett("UT1081", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, false, false)) - .ellers(IkkeOppfylt.opprett("UT1082", IkkeOppfyltÅrsak.SØKNADSFRIST, true, false)); + return rs.hvisRegel( + SjekkOmTomForAlleSineKontoer.ID, SjekkOmTomForAlleSineKontoer.BESKRIVELSE) + .hvis( + new SjekkOmTomForAlleSineKontoer(), + IkkeOppfylt.opprett( + "UT1081", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, false, false)) + .ellers(IkkeOppfylt.opprett("UT1082", IkkeOppfyltÅrsak.SØKNADSFRIST, true, false)); } private Specification sjekkPeriodeInnenforMaksgrense() { - return rs.hvisRegel(SjekkOmPeriodenErEtterMaksgrenseForUttak.ID, SjekkOmPeriodenErEtterMaksgrenseForUttak.BESKRIVELSE) - .hvis(new SjekkOmPeriodenErEtterMaksgrenseForUttak(), - IkkeOppfylt.opprett("UT1085", IkkeOppfyltÅrsak.UTTAK_ETTER_3_ÅRSGRENSE, false, false)) - .ellers(sjekkOmPeriodeEtterNesteStønadsperiode()); + return rs.hvisRegel( + SjekkOmPeriodenErEtterMaksgrenseForUttak.ID, + SjekkOmPeriodenErEtterMaksgrenseForUttak.BESKRIVELSE) + .hvis( + new SjekkOmPeriodenErEtterMaksgrenseForUttak(), + IkkeOppfylt.opprett( + "UT1085", IkkeOppfyltÅrsak.UTTAK_ETTER_3_ÅRSGRENSE, false, false)) + .ellers(sjekkOmPeriodeEtterNesteStønadsperiode()); } private Specification sjekkOmPeriodeEtterNesteStønadsperiode() { - return rs.hvisRegel(SjekkOmPeriodenErEtterNesteStønadsperiode.ID, SjekkOmPeriodenErEtterNesteStønadsperiode.BESKRIVELSE) - .hvis(new SjekkOmPeriodenErEtterNesteStønadsperiode(), sjekkOmGjenståendeDagerEtterNesteStønadsperiode()) - .ellers(sjekkOmUttaksperiodenEtterSøkersDødsdato()); + return rs.hvisRegel( + SjekkOmPeriodenErEtterNesteStønadsperiode.ID, + SjekkOmPeriodenErEtterNesteStønadsperiode.BESKRIVELSE) + .hvis( + new SjekkOmPeriodenErEtterNesteStønadsperiode(), + sjekkOmGjenståendeDagerEtterNesteStønadsperiode()) + .ellers(sjekkOmUttaksperiodenEtterSøkersDødsdato()); + } + + private Specification + sjekkOmGjenståendeDagerEtterNesteStønadsperiode() { + return rs.hvisRegel( + SjekkOmEtterNesteStønadsperiodeHarDisponibleDager.ID, + SjekkOmEtterNesteStønadsperiodeHarDisponibleDager.BESKRIVELSE) + .hvis( + new SjekkOmEtterNesteStønadsperiodeHarDisponibleDager(), + sjekkOmUttaksperiodenEtterSøkersDødsdato()) + .ellers( + IkkeOppfylt.opprett( + "UT1086", + IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE, + false, + false)); } - private Specification sjekkOmGjenståendeDagerEtterNesteStønadsperiode() { - return rs.hvisRegel(SjekkOmEtterNesteStønadsperiodeHarDisponibleDager.ID, SjekkOmEtterNesteStønadsperiodeHarDisponibleDager.BESKRIVELSE) - .hvis(new SjekkOmEtterNesteStønadsperiodeHarDisponibleDager(), sjekkOmUttaksperiodenEtterSøkersDødsdato()) - .ellers(IkkeOppfylt.opprett("UT1086", IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE, false, false)); - } - - private Specification sjekkOmFødselsvilkåretErOppfylt() { return rs.hvisRegel(SjekkOmFødselsvilkåretErOppfylt.ID, "Er fødselsvilkåret oppfylt?") - .hvis(new SjekkOmFødselsvilkåretErOppfylt(), sjekkOmAdopsjonsvilkåretErOppfylt()) - .ellers(IkkeOppfylt.opprett("UT1251", IkkeOppfyltÅrsak.FØDSELSVILKÅRET_IKKE_OPPFYLT, false, false)); + .hvis(new SjekkOmFødselsvilkåretErOppfylt(), sjekkOmAdopsjonsvilkåretErOppfylt()) + .ellers( + IkkeOppfylt.opprett( + "UT1251", + IkkeOppfyltÅrsak.FØDSELSVILKÅRET_IKKE_OPPFYLT, + false, + false)); } private Specification sjekkOmAdopsjonsvilkåretErOppfylt() { return rs.hvisRegel(SjekkOmAdopsjonsvilkåretErOppfylt.ID, "Er adopsjonsvilkåret oppfylt?") - .hvis(new SjekkOmAdopsjonsvilkåretErOppfylt(), sjekkOmForeldreansvarsvilkåretErOppfylt()) - .ellers(IkkeOppfylt.opprett("UT1252", IkkeOppfyltÅrsak.ADOPSJONSVILKÅRET_IKKE_OPPFYLT, false, false)); + .hvis( + new SjekkOmAdopsjonsvilkåretErOppfylt(), + sjekkOmForeldreansvarsvilkåretErOppfylt()) + .ellers( + IkkeOppfylt.opprett( + "UT1252", + IkkeOppfyltÅrsak.ADOPSJONSVILKÅRET_IKKE_OPPFYLT, + false, + false)); } private Specification sjekkOmForeldreansvarsvilkåretErOppfylt() { - return rs.hvisRegel(SjekkOmForeldreansvarsvilkåretErOppfylt.ID, "Er foreldreansvarsvilkåret oppfylt?") - .hvis(new SjekkOmForeldreansvarsvilkåretErOppfylt(), sjekkOmOpptjeningsvilkåretErOppfylt()) - .ellers(IkkeOppfylt.opprett("UT1253", IkkeOppfyltÅrsak.FORELDREANSVARSVILKÅRET_IKKE_OPPFYLT, false, false)); + return rs.hvisRegel( + SjekkOmForeldreansvarsvilkåretErOppfylt.ID, + "Er foreldreansvarsvilkåret oppfylt?") + .hvis( + new SjekkOmForeldreansvarsvilkåretErOppfylt(), + sjekkOmOpptjeningsvilkåretErOppfylt()) + .ellers( + IkkeOppfylt.opprett( + "UT1253", + IkkeOppfyltÅrsak.FORELDREANSVARSVILKÅRET_IKKE_OPPFYLT, + false, + false)); } private Specification sjekkOmOpptjeningsvilkåretErOppfylt() { - return rs.hvisRegel(SjekkOmOpptjeningsvilkåretErOppfylt.ID, "Er opptjeningsvilkåret oppfylt?") - .hvis(new SjekkOmOpptjeningsvilkåretErOppfylt(), sjekkOmPleiepenger()) - .ellers(IkkeOppfylt.opprett("UT1254", IkkeOppfyltÅrsak.OPPTJENINGSVILKÅRET_IKKE_OPPFYLT, false, false)); + return rs.hvisRegel( + SjekkOmOpptjeningsvilkåretErOppfylt.ID, "Er opptjeningsvilkåret oppfylt?") + .hvis(new SjekkOmOpptjeningsvilkåretErOppfylt(), sjekkOmPleiepenger()) + .ellers( + IkkeOppfylt.opprett( + "UT1254", + IkkeOppfyltÅrsak.OPPTJENINGSVILKÅRET_IKKE_OPPFYLT, + false, + false)); } private Specification sjekkOmPleiepenger() { return rs.hvisRegel(SjekkOmPleiepenger.ID, SjekkOmPleiepenger.BESKRIVELSE) - .hvis(new SjekkOmPleiepenger(), sjekkOmBarnetsInnleggelse()) - .ellers(sjekkOmSamtykke()); + .hvis(new SjekkOmPleiepenger(), sjekkOmBarnetsInnleggelse()) + .ellers(sjekkOmSamtykke()); } private Specification sjekkOmBarnetsInnleggelse() { - return rs.hvisRegel(SjekkOmUtsettelsePgaBarnetsInnleggelse.ID, SjekkOmUtsettelsePgaBarnetsInnleggelse.BESKRIVELSE) - .hvis(new SjekkOmUtsettelsePgaBarnetsInnleggelse(), sjekkOmSamtykke()) - .ellers(sjekkOmBarnInnlagt()); + return rs.hvisRegel( + SjekkOmUtsettelsePgaBarnetsInnleggelse.ID, + SjekkOmUtsettelsePgaBarnetsInnleggelse.BESKRIVELSE) + .hvis(new SjekkOmUtsettelsePgaBarnetsInnleggelse(), sjekkOmSamtykke()) + .ellers(sjekkOmBarnInnlagt()); } private Specification sjekkOmBarnInnlagt() { return rs.hvisRegel(SjekkOmBarnInnlagt.ID, SjekkOmBarnInnlagt.BESKRIVELSE) - .hvis(new SjekkOmBarnInnlagt(), - Manuellbehandling.opprett("UT1320", null, Manuellbehandlingårsak.OVERLAPPENDE_PLEIEPENGER_MED_INNLEGGELSE, false, false)) - .ellers(Manuellbehandling.opprett("UT1321", null, Manuellbehandlingårsak.OVERLAPPENDE_PLEIEPENGER_UTEN_INNLEGGELSE, false, false)); + .hvis( + new SjekkOmBarnInnlagt(), + Manuellbehandling.opprett( + "UT1320", + null, + Manuellbehandlingårsak.OVERLAPPENDE_PLEIEPENGER_MED_INNLEGGELSE, + false, + false)) + .ellers( + Manuellbehandling.opprett( + "UT1321", + null, + Manuellbehandlingårsak.OVERLAPPENDE_PLEIEPENGER_UTEN_INNLEGGELSE, + false, + false)); } private Specification sjekkOmSamtykke() { if (fomSamtykke == null) { - fomSamtykke = rs.hvisRegel(SjekkOmHvisOverlapperSåSamtykkeMellomParter.ID, "Er det samtykke og overlappende periode?") - .hvis(new SjekkOmHvisOverlapperSåSamtykkeMellomParter(), sjekkOmBerørtBehandling()) - .ellers(IkkeOppfylt.opprett("UT1063", IkkeOppfyltÅrsak.IKKE_SAMTYKKE, false, false)); + fomSamtykke = + rs.hvisRegel( + SjekkOmHvisOverlapperSåSamtykkeMellomParter.ID, + "Er det samtykke og overlappende periode?") + .hvis( + new SjekkOmHvisOverlapperSåSamtykkeMellomParter(), + sjekkOmBerørtBehandling()) + .ellers( + IkkeOppfylt.opprett( + "UT1063", + IkkeOppfyltÅrsak.IKKE_SAMTYKKE, + false, + false)); } return fomSamtykke; } private Specification sjekkOmBerørtBehandling() { return rs.hvisRegel(SjekkOmBerørtBehandling.ID, SjekkOmBerørtBehandling.BESKRIVELSE) - .hvis(new SjekkOmBerørtBehandling(), sjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse()) - .ellers(sjekkOmTapendePeriode()); + .hvis( + new SjekkOmBerørtBehandling(), + sjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse()) + .ellers(sjekkOmTapendePeriode()); } private Specification sjekkOmTapendePeriode() { return rs.hvisRegel(SjekkOmTapendePeriode.ID, SjekkOmTapendePeriode.BESKRIVELSE) - .hvis(new SjekkOmTapendePeriode(), sjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse()) - .ellers(sjekkOmPeriodeErUtsettelse()); + .hvis(new SjekkOmTapendePeriode(), sjekkOmAnnenPartsPeriodeErInnvilgetUtsettelse()) + .ellers(sjekkOmPeriodeErUtsettelse()); } private Specification sjekkOmPeriodeErUtsettelse() { return rs.hvisRegel(SjekkOmPeriodeErUtsettelse.ID, SjekkOmPeriodeErUtsettelse.BESKRIVELSE) - .hvis(new SjekkOmPeriodeErUtsettelse(), kreverBehandlingenSammenhengendeUttak()) - .ellers(sjekkOmManglendeSøktPeriode()); + .hvis(new SjekkOmPeriodeErUtsettelse(), kreverBehandlingenSammenhengendeUttak()) + .ellers(sjekkOmManglendeSøktPeriode()); } private Specification kreverBehandlingenSammenhengendeUttak() { - return rs.hvisRegel(SjekkOmBehandlingKreverSammenhengendeUttak.ID, SjekkOmBehandlingKreverSammenhengendeUttak.BESKRIVELSE) - .hvis(new SjekkOmBehandlingKreverSammenhengendeUttak(), new UtsettelseDelregelSammenhengendeUttak().getSpecification()) - .ellers(new UtsettelseDelregel().getSpecification()); + return rs.hvisRegel( + SjekkOmBehandlingKreverSammenhengendeUttak.ID, + SjekkOmBehandlingKreverSammenhengendeUttak.BESKRIVELSE) + .hvis( + new SjekkOmBehandlingKreverSammenhengendeUttak(), + new UtsettelseDelregelSammenhengendeUttak().getSpecification()) + .ellers(new UtsettelseDelregel().getSpecification()); } private Specification sjekkOmManglendeSøktPeriode() { - var sjekkOmSøktOverføringAvKvoteNode = rs.hvisRegel(SjekkOmSøktOmOverføringAvKvote.ID, "Er det søkt om overføring av kvote") - .hvis(new SjekkOmSøktOmOverføringAvKvote(), sjekkOmSøktGradering()) - .ellers(IkkeOppfylt.opprett("UT1160", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, false, false)); - - var sjekkOmTomForAlleSineKontoerNode = rs.hvisRegel(SjekkOmTomForAlleSineKontoer.ID, SjekkOmTomForAlleSineKontoer.BESKRIVELSE) - .hvis(new SjekkOmTomForAlleSineKontoer(), sjekkOmSøktOverføringAvKvoteNode) - .ellers(sjekkOmSøktGradering()); - - var sjekkOmForeldrepengerFørFødselNode = rs.hvisRegel(SjekkOmPeriodeErForeldrepengerFørFødsel.ID, ER_PERIODEN_FPFF) - .hvis(new SjekkOmPeriodeErForeldrepengerFørFødsel(), sjekkOmSøktGradering()) - .ellers(sjekkOmTomForAlleSineKontoerNode); - - var sjekkKontoErOpprettet = rs.hvisRegel(SjekkOmKontoErOpprettet.ID, - "Er det opprettet stønadskonto som tilsvarer stønadskonto i uttaksperioden?") - .hvis(new SjekkOmKontoErOpprettet(), sjekkOmForeldrepengerFørFødselNode) - .ellers(Manuellbehandling.opprett("UT1290", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, - false)); + var sjekkOmSøktOverføringAvKvoteNode = + rs.hvisRegel( + SjekkOmSøktOmOverføringAvKvote.ID, + "Er det søkt om overføring av kvote") + .hvis(new SjekkOmSøktOmOverføringAvKvote(), sjekkOmSøktGradering()) + .ellers( + IkkeOppfylt.opprett( + "UT1160", + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + false, + false)); + + var sjekkOmTomForAlleSineKontoerNode = + rs.hvisRegel( + SjekkOmTomForAlleSineKontoer.ID, + SjekkOmTomForAlleSineKontoer.BESKRIVELSE) + .hvis(new SjekkOmTomForAlleSineKontoer(), sjekkOmSøktOverføringAvKvoteNode) + .ellers(sjekkOmSøktGradering()); + + var sjekkOmForeldrepengerFørFødselNode = + rs.hvisRegel(SjekkOmPeriodeErForeldrepengerFørFødsel.ID, ER_PERIODEN_FPFF) + .hvis(new SjekkOmPeriodeErForeldrepengerFørFødsel(), sjekkOmSøktGradering()) + .ellers(sjekkOmTomForAlleSineKontoerNode); + + var sjekkKontoErOpprettet = + rs.hvisRegel( + SjekkOmKontoErOpprettet.ID, + "Er det opprettet stønadskonto som tilsvarer stønadskonto i uttaksperioden?") + .hvis(new SjekkOmKontoErOpprettet(), sjekkOmForeldrepengerFørFødselNode) + .ellers( + Manuellbehandling.opprett( + "UT1290", + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + true, + false)); return rs.hvisRegel(SjekkOmManglendeSøktPeriode.ID, "Er det \"Manglende søkt periode\"?") - .hvis(new SjekkOmManglendeSøktPeriode(), new ManglendeSøktPeriodeDelregel().getSpecification()) - .ellers(sjekkKontoErOpprettet); + .hvis( + new SjekkOmManglendeSøktPeriode(), + new ManglendeSøktPeriodeDelregel().getSpecification()) + .ellers(sjekkKontoErOpprettet); } private Specification sjekkOmSøktGradering() { return rs.hvisRegel(SjekkOmSøktGradering.ID, "Er det søkt om gradering?") - .hvis(new SjekkOmSøktGradering(), sjekkOmSøktGradering100ProsentEllerMer()) - .ellers(sjekkOmPeriodeErStebarnsadopsjon()); + .hvis(new SjekkOmSøktGradering(), sjekkOmSøktGradering100ProsentEllerMer()) + .ellers(sjekkOmPeriodeErStebarnsadopsjon()); } private Specification sjekkOmSøktGradering100ProsentEllerMer() { - return rs.hvisRegel(SjekkOmSøktGraderingHundreProsentEllerMer.ID, "Er søkt arbeid 100 prosent eller mer i perioden?") - .hvis(new SjekkOmSøktGraderingHundreProsentEllerMer(), - Manuellbehandling.opprett("UT1180", IkkeOppfyltÅrsak.ARBEID_HUNDRE_PROSENT_ELLER_MER, Manuellbehandlingårsak.AVKLAR_ARBEID, true, - false)) - .ellers(sjekkOmPeriodeErStebarnsadopsjon()); + return rs.hvisRegel( + SjekkOmSøktGraderingHundreProsentEllerMer.ID, + "Er søkt arbeid 100 prosent eller mer i perioden?") + .hvis( + new SjekkOmSøktGraderingHundreProsentEllerMer(), + Manuellbehandling.opprett( + "UT1180", + IkkeOppfyltÅrsak.ARBEID_HUNDRE_PROSENT_ELLER_MER, + Manuellbehandlingårsak.AVKLAR_ARBEID, + true, + false)) + .ellers(sjekkOmPeriodeErStebarnsadopsjon()); } private Specification sjekkOmPeriodeErStebarnsadopsjon() { return rs.hvisRegel(SjekkOmDetErAdopsjonAvStebarn.ID, "Er det adopsjon av stebarn?") - .hvis(new SjekkOmDetErAdopsjonAvStebarn(), new StebarnsadopsjonDelRegel().getSpecification()) - .ellers(sjekkOmPeriodeErMødrekvote()); + .hvis( + new SjekkOmDetErAdopsjonAvStebarn(), + new StebarnsadopsjonDelRegel().getSpecification()) + .ellers(sjekkOmPeriodeErMødrekvote()); } private Specification sjekkOmPeriodeErMødrekvote() { return rs.hvisRegel(SjekkOmPeriodeErMødrekvote.ID, "Er det søkt om uttak av mødrekvote?") - .hvis(new SjekkOmPeriodeErMødrekvote(), new MødrekvoteDelregel().getSpecification()) - .ellers(sjekkOmFedrekvote()); + .hvis(new SjekkOmPeriodeErMødrekvote(), new MødrekvoteDelregel().getSpecification()) + .ellers(sjekkOmFedrekvote()); } private Specification sjekkOmFedrekvote() { return rs.hvisRegel(SjekkOmPeriodeErFedrekvote.ID, "Er det søkt om uttak av fedrekvote?") - .hvis(new SjekkOmPeriodeErFedrekvote(), new FedrekvoteDelregel().getSpecification()) - .ellers(sjekkOmFellesperiode()); + .hvis(new SjekkOmPeriodeErFedrekvote(), new FedrekvoteDelregel().getSpecification()) + .ellers(sjekkOmFellesperiode()); } private Specification sjekkOmFellesperiode() { - return rs.hvisRegel(SjekkOmPeriodeErFellesperiode.ID, "Er det søkt om uttak av fellesperiode?") - .hvis(new SjekkOmPeriodeErFellesperiode(), new FellesperiodeDelregel().getSpecification()) - .ellers(sjekkOmPeriodeErForeldrepengerFørFødsel()); + return rs.hvisRegel( + SjekkOmPeriodeErFellesperiode.ID, "Er det søkt om uttak av fellesperiode?") + .hvis( + new SjekkOmPeriodeErFellesperiode(), + new FellesperiodeDelregel().getSpecification()) + .ellers(sjekkOmPeriodeErForeldrepengerFørFødsel()); } private Specification sjekkOmPeriodeErForeldrepengerFørFødsel() { return rs.hvisRegel(SjekkOmPeriodeErForeldrepengerFørFødsel.ID, ER_PERIODEN_FPFF) - .hvis(new SjekkOmPeriodeErForeldrepengerFørFødsel(), sjekkOmFPFFGjelderFødsel()) - .ellers(new ForeldrepengerDelregel().getSpecification()); + .hvis(new SjekkOmPeriodeErForeldrepengerFørFødsel(), sjekkOmFPFFGjelderFødsel()) + .ellers(new ForeldrepengerDelregel().getSpecification()); } private Specification sjekkOmFPFFGjelderFødsel() { return rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, GJELDER_FPFF_PERIODE_FØDSEL) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), new ForeldrepengerFørFødselDelregel().getSpecification()) - .ellers(Manuellbehandling.opprett("UT1092", null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, false, false)); + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + new ForeldrepengerFørFødselDelregel().getSpecification()) + .ellers( + Manuellbehandling.opprett( + "UT1092", + null, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + false, + false)); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FedrekvoteDelregel.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FedrekvoteDelregel.java index da5cb702..2e6aed4e 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FedrekvoteDelregel.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FedrekvoteDelregel.java @@ -34,29 +34,38 @@ import no.nav.fpsak.nare.specification.Specification; /** - * Delregel innenfor regeltjenesten FastsettePeriodeRegel som fastsetter uttaksperioder med fedrekvote. - *

- * Utfall definisjoner:
- *

- * Utfall AVSLÅTT:
+ * Delregel innenfor regeltjenesten FastsettePeriodeRegel som fastsetter uttaksperioder med + * fedrekvote. + * + *

Utfall definisjoner:
+ * + *

Utfall AVSLÅTT:
* - Det er ikke nok dager igjen på stønadskontoen for fedrekvote.
* - Perioden starter før familiehendelsen (termin/fødsel).
- * - Perioden starter i periode etter fødsel som er forbeholdt mor og har ikke gyldig grunn for dette.
- *

- * Utfall INNVILGET:
- * - Perioden er etter ukene etter fødsel som er forbeholdt mor og det er nok dager på stønadskontoen for fedrekvote.
- * - Perioden har gyldig grunn for å starte i ukene etter fødsel som er forbeholdt mor og det er nok dager på stønadskontoen for fedrekvote.
+ * - Perioden starter i periode etter fødsel som er forbeholdt mor og har ikke gyldig grunn for + * dette.
+ * + *

Utfall INNVILGET:
+ * - Perioden er etter ukene etter fødsel som er forbeholdt mor og det er nok dager på + * stønadskontoen for fedrekvote.
+ * - Perioden har gyldig grunn for å starte i ukene etter fødsel som er forbeholdt mor og det er nok + * dager på stønadskontoen for fedrekvote.
*/ - -@RuleDocumentation(value = FedrekvoteDelregel.ID, specificationReference = "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") +@RuleDocumentation( + value = FedrekvoteDelregel.ID, + specificationReference = + "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") public class FedrekvoteDelregel implements RuleService { public static final String ID = "FP_VK 13"; private static final String ER_SØKER_FAR = "Er søker far?"; - private static final String OVERFØRING_SYKDOM_SKADE = "Er det søkt om overføring som følge av sykdom/skade?"; - private static final String OVERFØRING_INNLEGGELSE = "Er det søkt om overføring som følge av innleggelse på institusjon?"; - private static final String OVERFØRING_ALENEOMSORG_ELLER_IKKE_RETT = "Er det søkt om overføring som følge av aleneomsorg eller annen forelder ikke har rett?"; + private static final String OVERFØRING_SYKDOM_SKADE = + "Er det søkt om overføring som følge av sykdom/skade?"; + private static final String OVERFØRING_INNLEGGELSE = + "Er det søkt om overføring som følge av innleggelse på institusjon?"; + private static final String OVERFØRING_ALENEOMSORG_ELLER_IKKE_RETT = + "Er det søkt om overføring som følge av aleneomsorg eller annen forelder ikke har rett?"; private final Ruleset rs = new Ruleset<>(); @@ -66,166 +75,284 @@ public class FedrekvoteDelregel implements RuleService @Override public Specification getSpecification() { - return rs.hvisRegel(SjekkOmOppholdKvoteAnnenForelder.ID, "Er det søkt om opphold av fedrekvoten?") - .hvis(new SjekkOmOppholdKvoteAnnenForelder(), sjekkOmNoenDisponibleDager()) - .ellers(sjekkOmSøkerErFar()); + return rs.hvisRegel( + SjekkOmOppholdKvoteAnnenForelder.ID, + "Er det søkt om opphold av fedrekvoten?") + .hvis(new SjekkOmOppholdKvoteAnnenForelder(), sjekkOmNoenDisponibleDager()) + .ellers(sjekkOmSøkerErFar()); } private Specification sjekkOmNoenDisponibleDager() { - return rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, "Er det noen disponible stønadsdager på fedrekvoten?") - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), Oppfylt.opprettForOppholds("UT1263", true, false)) - .ellers(Manuellbehandling.opprett("UT1262", null, Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER, true, false)); + return rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + "Er det noen disponible stønadsdager på fedrekvoten?") + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + Oppfylt.opprettForOppholds("UT1263", true, false)) + .ellers( + Manuellbehandling.opprett( + "UT1262", + null, + Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER, + true, + false)); } private Specification sjekkOmPeriodenStarterFørOmsorgsovertakelse() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, "Starter perioden før omsorgsovertakelse?") - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), - IkkeOppfylt.opprett("UT1231", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) - .ellers(delFlytForVanligUttak()); + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + "Starter perioden før omsorgsovertakelse?") + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + IkkeOppfylt.opprett( + "UT1231", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) + .ellers(delFlytForVanligUttak()); } private Specification sjekkOmDetErFødsel() { - return rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmPeriodeStarterFørUke7EtterFamiliehendelse()) - .ellers(sjekkOmPeriodenStarterFørOmsorgsovertakelse()); + return rs.hvisRegel( + SjekkOmSøknadGjelderTerminEllerFødsel.ID, + SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + sjekkOmPeriodeStarterFørUke7EtterFamiliehendelse()) + .ellers(sjekkOmPeriodenStarterFørOmsorgsovertakelse()); } private Specification sjekkOmSøkerErFar() { return rs.hvisRegel(SjekkOmSøkerErMor.ID, ER_SØKER_FAR) - .hvis(new SjekkOmSøkerErMor(), sjekkOmMorSøktOmOverføringAvFedrekvote()) - .ellers(sjekkOmMorHarRett()); + .hvis(new SjekkOmSøkerErMor(), sjekkOmMorSøktOmOverføringAvFedrekvote()) + .ellers(sjekkOmMorHarRett()); } private Specification sjekkOmMorHarRett() { return rs.hvisRegel(SjekkOmMorHarRett.ID, "Er det avklart at mor har rett?") - .hvis(new SjekkOmMorHarRett(), sjekkOmDetErFødsel()) - .ellers(IkkeOppfylt.opprett("UT1292", IkkeOppfyltÅrsak.MOR_IKKE_RETT_FK, true, false)); + .hvis(new SjekkOmMorHarRett(), sjekkOmDetErFødsel()) + .ellers( + IkkeOppfylt.opprett( + "UT1292", IkkeOppfyltÅrsak.MOR_IKKE_RETT_FK, true, false)); } private Specification sjekkOmOverføringPgaInnleggelse() { return rs.hvisRegel(SjekkOmOverføringPgaInnleggelse.ID, OVERFØRING_INNLEGGELSE) - .hvis(new SjekkOmOverføringPgaInnleggelse(), sjekkOmGyldigOverføringPgaInnleggelse()) - .ellers(sjekkOmOverføringPgaSykdomSkade()); + .hvis( + new SjekkOmOverføringPgaInnleggelse(), + sjekkOmGyldigOverføringPgaInnleggelse()) + .ellers(sjekkOmOverføringPgaSykdomSkade()); } private Specification sjekkOmOverføringPgaSykdomSkade() { return rs.hvisRegel(SjekkOmOverføringPgaSykdomSkade.ID, OVERFØRING_SYKDOM_SKADE) - .hvis(new SjekkOmOverføringPgaSykdomSkade(), sjekkOmGyldigOverføringPgaSykdomSkade()) - .ellers(sjekkOmOverføringPgaAleneomsorgEllerIkkeRett()); + .hvis( + new SjekkOmOverføringPgaSykdomSkade(), + sjekkOmGyldigOverføringPgaSykdomSkade()) + .ellers(sjekkOmOverføringPgaAleneomsorgEllerIkkeRett()); } private Specification sjekkOmOverføringPgaAleneomsorgEllerIkkeRett() { - return rs.hvisRegel(SjekkOmOverføringPgaAleneomsorg.ID, OVERFØRING_ALENEOMSORG_ELLER_IKKE_RETT) - .hvis(new SjekkOmOverføringPgaAleneomsorg(), sjekkOmGyldigOverføringPgaAleneomsorg()) - .ellers(sjekkOmGyldigOverføringPgaIkkeRett()); + return rs.hvisRegel( + SjekkOmOverføringPgaAleneomsorg.ID, OVERFØRING_ALENEOMSORG_ELLER_IKKE_RETT) + .hvis( + new SjekkOmOverføringPgaAleneomsorg(), + sjekkOmGyldigOverføringPgaAleneomsorg()) + .ellers(sjekkOmGyldigOverføringPgaIkkeRett()); } private Specification sjekkOmGyldigOverføringPgaInnleggelse() { - return rs.hvisRegel(SjekkOmGyldigOverføringPgaInnleggelse.ID, - "Er det avklart at overføring av kvoten er gyldig grunn av innleggelse på institusjon?") - .hvis(new SjekkOmGyldigOverføringPgaInnleggelse(), sjekkOmDetErFødsel()) - .ellers(IkkeOppfylt.opprett("UT1033", IkkeOppfyltÅrsak.DEN_ANDRE_PART_INNLEGGELSE_IKKE_OPPFYLT, false, false)); + return rs.hvisRegel( + SjekkOmGyldigOverføringPgaInnleggelse.ID, + "Er det avklart at overføring av kvoten er gyldig grunn av innleggelse på institusjon?") + .hvis(new SjekkOmGyldigOverføringPgaInnleggelse(), sjekkOmDetErFødsel()) + .ellers( + IkkeOppfylt.opprett( + "UT1033", + IkkeOppfyltÅrsak.DEN_ANDRE_PART_INNLEGGELSE_IKKE_OPPFYLT, + false, + false)); } private Specification sjekkOmGyldigOverføringPgaSykdomSkade() { - return rs.hvisRegel(SjekkOmGyldigOverføringPgaSykdomSkade.ID, "Er det avklart at overføring av kvoten er gyldig grunn av sykdom/skade?") - .hvis(new SjekkOmGyldigOverføringPgaSykdomSkade(), sjekkOmDetErFødsel()) - .ellers(IkkeOppfylt.opprett("UT1034", IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, false, false)); + return rs.hvisRegel( + SjekkOmGyldigOverføringPgaSykdomSkade.ID, + "Er det avklart at overføring av kvoten er gyldig grunn av sykdom/skade?") + .hvis(new SjekkOmGyldigOverføringPgaSykdomSkade(), sjekkOmDetErFødsel()) + .ellers( + IkkeOppfylt.opprett( + "UT1034", + IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, + false, + false)); } private Specification sjekkOmGyldigOverføringPgaAleneomsorg() { - return rs.hvisRegel(SjekkOmGyldigOverføringPgaAleneomsorg.ID, "Er det avklart at overføring av kvoten er gyldig på grunn av aleneomsorg?") - .hvis(new SjekkOmGyldigOverføringPgaAleneomsorg(), sjekkOmDetErFødsel()) - .ellers(IkkeOppfylt.opprett("UT1296", IkkeOppfyltÅrsak.ALENEOMSORG_IKKE_OPPFYLT, false, false)); + return rs.hvisRegel( + SjekkOmGyldigOverføringPgaAleneomsorg.ID, + "Er det avklart at overføring av kvoten er gyldig på grunn av aleneomsorg?") + .hvis(new SjekkOmGyldigOverføringPgaAleneomsorg(), sjekkOmDetErFødsel()) + .ellers( + IkkeOppfylt.opprett( + "UT1296", IkkeOppfyltÅrsak.ALENEOMSORG_IKKE_OPPFYLT, false, false)); } private Specification sjekkOmGyldigOverføringPgaIkkeRett() { - return rs.hvisRegel(SjekkOmGyldigOverføringPgaIkkeRett.ID, - "Er det avklart at overføring av kvoten er gyldig på grunn av annen forelder ikke har rett?") - .hvis(new SjekkOmGyldigOverføringPgaIkkeRett(), sjekkOmDetErFødsel()) - .ellers(IkkeOppfylt.opprett("UT1297", IkkeOppfyltÅrsak.DEN_ANDRE_PART_IKKE_RETT_IKKE_OPPFYLT, false, false)); + return rs.hvisRegel( + SjekkOmGyldigOverføringPgaIkkeRett.ID, + "Er det avklart at overføring av kvoten er gyldig på grunn av annen forelder ikke har rett?") + .hvis(new SjekkOmGyldigOverføringPgaIkkeRett(), sjekkOmDetErFødsel()) + .ellers( + IkkeOppfylt.opprett( + "UT1297", + IkkeOppfyltÅrsak.DEN_ANDRE_PART_IKKE_RETT_IKKE_OPPFYLT, + false, + false)); } private Specification sjekkOmMorSøktOmOverføringAvFedrekvote() { - return rs.hvisRegel(SjekkOmSøktOmOverføringAvKvote.ID, "Har mor søkt om overføring av fedrekvoten?") - .hvis(new SjekkOmSøktOmOverføringAvKvote(), sjekkOmOverføringPgaInnleggelse()) - .ellers(Manuellbehandling.opprett("UT1032", IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, - Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false)); + return rs.hvisRegel( + SjekkOmSøktOmOverføringAvKvote.ID, + "Har mor søkt om overføring av fedrekvoten?") + .hvis(new SjekkOmSøktOmOverføringAvKvote(), sjekkOmOverføringPgaInnleggelse()) + .ellers( + Manuellbehandling.opprett( + "UT1032", + IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + true, + false)); } - - public Specification sjekkOmPeriodeStarterFørUke7EtterFamiliehendelse() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørUke7.ID, "Starter perioden før uke 7 etter termin/fødsel?") - .hvis(new SjekkOmPeriodenStarterFørUke7(), sjekkOmFarsUttakRundtFødsel()) - .ellers(delFlytForVanligUttak()); + public Specification + sjekkOmPeriodeStarterFørUke7EtterFamiliehendelse() { + return rs.hvisRegel( + SjekkOmPeriodenStarterFørUke7.ID, + "Starter perioden før uke 7 etter termin/fødsel?") + .hvis(new SjekkOmPeriodenStarterFørUke7(), sjekkOmFarsUttakRundtFødsel()) + .ellers(delFlytForVanligUttak()); } public Specification sjekkOmFarsUttakRundtFødsel() { - return rs.hvisRegel(SjekkOmFarsUttakRundtFødselTilgjengeligeDager.ID, "Er det hjemlet fars uttak rundt fødsel?") - .hvis(new SjekkOmFarsUttakRundtFødselTilgjengeligeDager(), delFlytForTidligUttak()) - .ellers(uttakFørTerminFødsel()); + return rs.hvisRegel( + SjekkOmFarsUttakRundtFødselTilgjengeligeDager.ID, + "Er det hjemlet fars uttak rundt fødsel?") + .hvis(new SjekkOmFarsUttakRundtFødselTilgjengeligeDager(), delFlytForTidligUttak()) + .ellers(uttakFørTerminFødsel()); } public Specification sjekkOmPeriodenGjelderFlerbarnsdager() { - return rs.hvisRegel(SjekkOmPeriodenGjelderFlerbarnsdager.ID, "Gjelder perioden flerbarnsdager?") - .hvis(new SjekkOmPeriodenGjelderFlerbarnsdager(), delFlytForTidligUttak()) - .ellers(gyldigGrunnForTidligUttak()); + return rs.hvisRegel( + SjekkOmPeriodenGjelderFlerbarnsdager.ID, "Gjelder perioden flerbarnsdager?") + .hvis(new SjekkOmPeriodenGjelderFlerbarnsdager(), delFlytForTidligUttak()) + .ellers(gyldigGrunnForTidligUttak()); } private Specification uttakFørTerminFødsel() { - return rs.hvisRegel(SjekkOmPeriodenSlutterFørFamiliehendelse.ID, "Skal uttaksperioden være før termin/fødsel?") - .hvis(new SjekkOmPeriodenSlutterFørFamiliehendelse(), - Manuellbehandling.opprett("UT1020", IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL, false, - false)) - .ellers(sjekkOmPeriodenGjelderFlerbarnsdager()); + return rs.hvisRegel( + SjekkOmPeriodenSlutterFørFamiliehendelse.ID, + "Skal uttaksperioden være før termin/fødsel?") + .hvis( + new SjekkOmPeriodenSlutterFørFamiliehendelse(), + Manuellbehandling.opprett( + "UT1020", + IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, + Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL, + false, + false)) + .ellers(sjekkOmPeriodenGjelderFlerbarnsdager()); } private Specification gyldigGrunnForTidligUttak() { - return rs.hvisRegel(SjekkGyldigGrunnForTidligOppstartHelePerioden.ID, "Foreligger det gyldig grunn for hele perioden for tidlig oppstart?") - .hvis(new SjekkGyldigGrunnForTidligOppstartHelePerioden(), delFlytForTidligUttak()) - .ellers(Manuellbehandling.opprett("UT1021", IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, - Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, false, false)); + return rs.hvisRegel( + SjekkGyldigGrunnForTidligOppstartHelePerioden.ID, + "Foreligger det gyldig grunn for hele perioden for tidlig oppstart?") + .hvis(new SjekkGyldigGrunnForTidligOppstartHelePerioden(), delFlytForTidligUttak()) + .ellers( + Manuellbehandling.opprett( + "UT1021", + IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + false, + false)); } private Specification delFlytForTidligUttak() { - var graderingIPeriodenNode = rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), Oppfylt.opprett("UT1217", InnvilgetÅrsak.GRADERING_KVOTE_ELLER_OVERFØRT_KVOTE, true)) - .ellers(Oppfylt.opprett("UT1026", InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE, true)); - - var erSøkerFar = rs.hvisRegel(SjekkOmSøkerErMor.ID, ER_SØKER_FAR) - .hvis(new SjekkOmSøkerErMor(), new OverføringDelregel().getSpecification()) - .ellers(graderingIPeriodenNode); - - var noenDisponibleDagerNode = rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, - "Er det disponibelt antall stønadsdager på fedrekvoten?") - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), erSøkerFar) - .ellers( - Manuellbehandling.opprett("UT1022", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.STØNADSKONTO_TOM, true, false)); + var graderingIPeriodenNode = + rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprett( + "UT1217", + InnvilgetÅrsak.GRADERING_KVOTE_ELLER_OVERFØRT_KVOTE, + true)) + .ellers( + Oppfylt.opprett( + "UT1026", InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE, true)); + + var erSøkerFar = + rs.hvisRegel(SjekkOmSøkerErMor.ID, ER_SØKER_FAR) + .hvis(new SjekkOmSøkerErMor(), new OverføringDelregel().getSpecification()) + .ellers(graderingIPeriodenNode); + + var noenDisponibleDagerNode = + rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + "Er det disponibelt antall stønadsdager på fedrekvoten?") + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + erSøkerFar) + .ellers( + Manuellbehandling.opprett( + "UT1022", + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + true, + false)); return rs.hvisRegel(SjekkOmOmsorgHelePerioden.ID, SjekkOmOmsorgHelePerioden.BESKRIVELSE) - .hvis(new SjekkOmOmsorgHelePerioden(), noenDisponibleDagerNode) - .ellers(IkkeOppfylt.opprett("UT1025", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); + .hvis(new SjekkOmOmsorgHelePerioden(), noenDisponibleDagerNode) + .ellers( + IkkeOppfylt.opprett( + "UT1025", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); } private Specification delFlytForVanligUttak() { - var graderingIPeriodenNode = rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), Oppfylt.opprett("UT1218", InnvilgetÅrsak.GRADERING_KVOTE_ELLER_OVERFØRT_KVOTE, true)) - .ellers(Oppfylt.opprett("UT1031", InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE, true)); - - var erSøkerFar = rs.hvisRegel(SjekkOmSøkerErMor.ID, ER_SØKER_FAR) - .hvis(new SjekkOmSøkerErMor(), new OverføringDelregel().getSpecification()) - .ellers(graderingIPeriodenNode); - - var noenDisponibleDagerNode = rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, - "Er det disponibelt antall stønadsdager på fedrekvoten?") - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), erSøkerFar) - .ellers( - Manuellbehandling.opprett("UT1178", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.STØNADSKONTO_TOM, true, false)); + var graderingIPeriodenNode = + rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprett( + "UT1218", + InnvilgetÅrsak.GRADERING_KVOTE_ELLER_OVERFØRT_KVOTE, + true)) + .ellers( + Oppfylt.opprett( + "UT1031", InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE, true)); + + var erSøkerFar = + rs.hvisRegel(SjekkOmSøkerErMor.ID, ER_SØKER_FAR) + .hvis(new SjekkOmSøkerErMor(), new OverføringDelregel().getSpecification()) + .ellers(graderingIPeriodenNode); + + var noenDisponibleDagerNode = + rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + "Er det disponibelt antall stønadsdager på fedrekvoten?") + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + erSøkerFar) + .ellers( + Manuellbehandling.opprett( + "UT1178", + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + true, + false)); return rs.hvisRegel(SjekkOmOmsorgHelePerioden.ID, SjekkOmOmsorgHelePerioden.BESKRIVELSE) - .hvis(new SjekkOmOmsorgHelePerioden(), noenDisponibleDagerNode) - .ellers(IkkeOppfylt.opprett("UT1030", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); + .hvis(new SjekkOmOmsorgHelePerioden(), noenDisponibleDagerNode) + .ellers( + IkkeOppfylt.opprett( + "UT1030", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FellesperiodeDelregel.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FellesperiodeDelregel.java index a1fa3e8b..311f41c5 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FellesperiodeDelregel.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/FellesperiodeDelregel.java @@ -30,20 +30,23 @@ /** * Delregel innenfor regeltjenesten FastsettePeriodeRegel som fastsette uttak av fellesperiode. - *

- * Utfall definisjoner:
- *

- * Utfall AVSLÅTT:
+ * + *

Utfall definisjoner:
+ * + *

Utfall AVSLÅTT:
* - Det er ikke nok dager igjen på stønadskontoen for fellesperioden.
- * - Perioden starter for tidlig før familiehendelsen (termin/fødsel) - * - Perioden starter i periode etter fødsel som er forbeholdt mor.
- *

- * Utfall INNVILGET:
+ * - Perioden starter for tidlig før familiehendelsen (termin/fødsel) - Perioden starter i periode + * etter fødsel som er forbeholdt mor.
+ * + *

Utfall INNVILGET:
* - Perioden starter før fødsel og det er nok dager på stønadskonto for fellesperiode.
- * - Perioden er etter ukene etter fødsel som er forbeholdt mor og det er nok dager på stønadskontoen for fellesperiode.
+ * - Perioden er etter ukene etter fødsel som er forbeholdt mor og det er nok dager på + * stønadskontoen for fellesperiode.
*/ - -@RuleDocumentation(value = FellesperiodeDelregel.ID, specificationReference = "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") +@RuleDocumentation( + value = FellesperiodeDelregel.ID, + specificationReference = + "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") public class FellesperiodeDelregel implements RuleService { public static final String ID = "FP_VK 19"; @@ -56,187 +59,367 @@ public class FellesperiodeDelregel implements RuleService getSpecification() { - return rs.hvisRegel(SjekkOmOppholdFellesperiodeAnnenForelder.ID, "Er det søkt om opphold av fellesperioden?") - .hvis(new SjekkOmOppholdFellesperiodeAnnenForelder(), sjekkOmNoenDisponibleDager()) - .ellers(sjekkOmMor()); + return rs.hvisRegel( + SjekkOmOppholdFellesperiodeAnnenForelder.ID, + "Er det søkt om opphold av fellesperioden?") + .hvis(new SjekkOmOppholdFellesperiodeAnnenForelder(), sjekkOmNoenDisponibleDager()) + .ellers(sjekkOmMor()); } private Specification sjekkOmNoenDisponibleDager() { - return rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, - "Er det noen disponible stønadsdager på fellesperiode?") - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), Oppfylt.opprettForOppholds("UT1265", true, false)) - .ellers(Manuellbehandling.opprett("UT1264", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, - Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER, true, false)); + return rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + "Er det noen disponible stønadsdager på fellesperiode?") + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + Oppfylt.opprettForOppholds("UT1265", true, false)) + .ellers( + Manuellbehandling.opprett( + "UT1264", + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER, + true, + false)); } private Specification sjekkOmMor() { return rs.hvisRegel(SjekkOmSøkerErMor.ID, "Gjelder søknaden fellesperiode for mor") - .hvis(new SjekkOmSøkerErMor(), sjekkOmMorGjelderFødsel()) - .ellers(sjekkOmMorHarRett()); + .hvis(new SjekkOmSøkerErMor(), sjekkOmMorGjelderFødsel()) + .ellers(sjekkOmMorHarRett()); } private Specification sjekkOmMorHarRett() { return rs.hvisRegel(SjekkOmMorHarRett.ID, "Er det avklart at mor har rett?") - .hvis(new SjekkOmMorHarRett(), sjekkOmFarGjelderFødsel()) - .ellers(IkkeOppfylt.opprett("UT1293", IkkeOppfyltÅrsak.MOR_IKKE_RETT_FP, true, false)); + .hvis(new SjekkOmMorHarRett(), sjekkOmFarGjelderFødsel()) + .ellers( + IkkeOppfylt.opprett( + "UT1293", IkkeOppfyltÅrsak.MOR_IKKE_RETT_FP, true, false)); } private Specification sjekkOmFarGjelderFødsel() { - return rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmUttakSkjerFørDeFørsteUkene()) - .ellers(sjekkOmPeriodenStarterFørOmsorgsovertakelseFar()); + return rs.hvisRegel( + SjekkOmSøknadGjelderTerminEllerFødsel.ID, + SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + sjekkOmUttakSkjerFørDeFørsteUkene()) + .ellers(sjekkOmPeriodenStarterFørOmsorgsovertakelseFar()); } private Specification sjekkOmMorGjelderFødsel() { - return rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmPeriodenStarterFørLovligUttakFørFamiliehendelse()) - .ellers(sjekkOmPeriodenStarterFørOmsorgsovertakelseMor()); + return rs.hvisRegel( + SjekkOmSøknadGjelderTerminEllerFødsel.ID, + SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + sjekkOmPeriodenStarterFørLovligUttakFørFamiliehendelse()) + .ellers(sjekkOmPeriodenStarterFørOmsorgsovertakelseMor()); } - private Specification sjekkOmPeriodenStarterFørOmsorgsovertakelseFar() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, "Starter perioden før omsorgsovertakelse?") - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), - IkkeOppfylt.opprett("UT1232", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) - .ellers(delFlytForVanligUttak()); + private Specification + sjekkOmPeriodenStarterFørOmsorgsovertakelseFar() { + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + "Starter perioden før omsorgsovertakelse?") + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + IkkeOppfylt.opprett( + "UT1232", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) + .ellers(delFlytForVanligUttak()); } - private Specification sjekkOmPeriodenStarterFørOmsorgsovertakelseMor() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, "Starter perioden før omsorgsovertakelse?") - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), - IkkeOppfylt.opprett("UT1235", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) - .ellers(sjekkSaldoForMor()); + private Specification + sjekkOmPeriodenStarterFørOmsorgsovertakelseMor() { + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + "Starter perioden før omsorgsovertakelse?") + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + IkkeOppfylt.opprett( + "UT1235", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) + .ellers(sjekkSaldoForMor()); } - private Specification sjekkOmPeriodenStarterFørLovligUttakFørFamiliehendelse() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.ID, SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.BESKRIVELSE) - .hvis(new SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin(), - IkkeOppfylt.opprett("UT1040", IkkeOppfyltÅrsak.MOR_SØKER_FELLESPERIODE_FØR_12_UKER_FØR_TERMIN_FØDSEL, false, false)) - .ellers(sjekkOmPeriodenStarterFørFamilieHendelse()); + private Specification + sjekkOmPeriodenStarterFørLovligUttakFørFamiliehendelse() { + return rs.hvisRegel( + SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.ID, + SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.BESKRIVELSE) + .hvis( + new SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin(), + IkkeOppfylt.opprett( + "UT1040", + IkkeOppfyltÅrsak + .MOR_SØKER_FELLESPERIODE_FØR_12_UKER_FØR_TERMIN_FØDSEL, + false, + false)) + .ellers(sjekkOmPeriodenStarterFørFamilieHendelse()); } private Specification sjekkOmPeriodenStarterFørFamilieHendelse() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, SjekkOmPeriodenStarterFørFamiliehendelse.BESKRIVELSE) - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), sjekkOmGraderingIPerioden()) - .ellers(sjekkOmUttakSkjerEtterDeFørsteUkene()); + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + SjekkOmPeriodenStarterFørFamiliehendelse.BESKRIVELSE) + .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), sjekkOmGraderingIPerioden()) + .ellers(sjekkOmUttakSkjerEtterDeFørsteUkene()); } private Specification sjekkOmGraderingIPerioden() { return rs.hvisRegel(SjekkOmGradertPeriode.ID, "Er perioden gradert?") - .hvis(new SjekkOmGradertPeriode(), Oppfylt.opprettMedAvslåttGradering("UT1064", InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, - GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING, true)) - .ellers(Oppfylt.opprett("UT1041", InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, true)); + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprettMedAvslåttGradering( + "UT1064", + InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, + GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING, + true)) + .ellers( + Oppfylt.opprett( + "UT1041", InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, true)); } private Specification sjekkOmUttakSkjerEtterDeFørsteUkene() { - return rs.hvisRegel(SjekkOmUttakSkjerEtterDeFørsteUkene.ID, SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) - .hvis(new SjekkOmUttakSkjerEtterDeFørsteUkene(), sjekkSaldoForMor()) - .ellers(Manuellbehandling.opprett("UT1048", null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false)); + return rs.hvisRegel( + SjekkOmUttakSkjerEtterDeFørsteUkene.ID, + SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) + .hvis(new SjekkOmUttakSkjerEtterDeFørsteUkene(), sjekkSaldoForMor()) + .ellers( + Manuellbehandling.opprett( + "UT1048", + null, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + true, + false)); } private Specification sjekkSaldoForMor() { - var erDetGraderingIPeriodenMedDagerPåNoenAktiviteterNode = rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), Oppfylt.opprett("UT1219", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, true)) - .ellers(Oppfylt.opprett("UT1047", InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, true)); - - var noenTilgjengligeDagerNode = rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, - "Er det tilgjengelige dager på fellesperioden?") - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), erDetGraderingIPeriodenMedDagerPåNoenAktiviteterNode) - .ellers( - Manuellbehandling.opprett("UT1043", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.STØNADSKONTO_TOM, true, false)); - - var sjekkOmTrekkesDager = rs.hvisRegel(SjekkOmBehandlingKreverSammenhengendeUttak.ID, SjekkOmBehandlingKreverSammenhengendeUttak.BESKRIVELSE) - .hvis(new SjekkOmBehandlingKreverSammenhengendeUttak(), IkkeOppfylt.opprett("UT1046", IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG, true, false)) - .ellers(IkkeOppfylt.opprett("UT1046", IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG, false, false)); + var erDetGraderingIPeriodenMedDagerPåNoenAktiviteterNode = + rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprett( + "UT1219", + InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, + true)) + .ellers( + Oppfylt.opprett( + "UT1047", + InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, + true)); + + var noenTilgjengligeDagerNode = + rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + "Er det tilgjengelige dager på fellesperioden?") + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + erDetGraderingIPeriodenMedDagerPåNoenAktiviteterNode) + .ellers( + Manuellbehandling.opprett( + "UT1043", + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + true, + false)); + + var sjekkOmTrekkesDager = + rs.hvisRegel( + SjekkOmBehandlingKreverSammenhengendeUttak.ID, + SjekkOmBehandlingKreverSammenhengendeUttak.BESKRIVELSE) + .hvis( + new SjekkOmBehandlingKreverSammenhengendeUttak(), + IkkeOppfylt.opprett( + "UT1046", + IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG, + true, + false)) + .ellers( + IkkeOppfylt.opprett( + "UT1046", + IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG, + false, + false)); return rs.hvisRegel(SjekkOmOmsorgHelePerioden.ID, SjekkOmOmsorgHelePerioden.BESKRIVELSE) - .hvis(new SjekkOmOmsorgHelePerioden(), noenTilgjengligeDagerNode) - .ellers(sjekkOmTrekkesDager); + .hvis(new SjekkOmOmsorgHelePerioden(), noenTilgjengligeDagerNode) + .ellers(sjekkOmTrekkesDager); } private Specification sjekkOmUttakSkjerFørDeFørsteUkene() { - return rs.hvisRegel(SjekkOmUttakSkjerEtterDeFørsteUkene.ID, SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) - .hvis(new SjekkOmUttakSkjerEtterDeFørsteUkene(), delFlytForVanligUttak()) - .ellers(sjekkOmPeriodenSlutterFørFamiliehendelse()); + return rs.hvisRegel( + SjekkOmUttakSkjerEtterDeFørsteUkene.ID, + SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) + .hvis(new SjekkOmUttakSkjerEtterDeFørsteUkene(), delFlytForVanligUttak()) + .ellers(sjekkOmPeriodenSlutterFørFamiliehendelse()); } private Specification sjekkOmPeriodenGjelderFlerbarnsdager() { - return rs.hvisRegel(SjekkOmPeriodenGjelderFlerbarnsdager.ID, SjekkOmPeriodenGjelderFlerbarnsdager.BESKRIVELSE) - .hvis(new SjekkOmPeriodenGjelderFlerbarnsdager(), delFlytForTidligUttak()) - .ellers(sjekkGyldigGrunnForTidligOppstartHelePerioden()); + return rs.hvisRegel( + SjekkOmPeriodenGjelderFlerbarnsdager.ID, + SjekkOmPeriodenGjelderFlerbarnsdager.BESKRIVELSE) + .hvis(new SjekkOmPeriodenGjelderFlerbarnsdager(), delFlytForTidligUttak()) + .ellers(sjekkGyldigGrunnForTidligOppstartHelePerioden()); } private Specification sjekkOmPeriodenSlutterFørFamiliehendelse() { - return rs.hvisRegel(SjekkOmPeriodenSlutterFørFamiliehendelse.ID, "Skal uttaksperioden være før termin/fødsel?") - .hvis(new SjekkOmPeriodenSlutterFørFamiliehendelse(), - Manuellbehandling.opprett("UT1049", IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL, false, - false)) - .ellers(sjekkOmPeriodenGjelderFlerbarnsdager()); + return rs.hvisRegel( + SjekkOmPeriodenSlutterFørFamiliehendelse.ID, + "Skal uttaksperioden være før termin/fødsel?") + .hvis( + new SjekkOmPeriodenSlutterFørFamiliehendelse(), + Manuellbehandling.opprett( + "UT1049", + IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, + Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL, + false, + false)) + .ellers(sjekkOmPeriodenGjelderFlerbarnsdager()); } - private Specification sjekkGyldigGrunnForTidligOppstartHelePerioden() { - return rs.hvisRegel(SjekkGyldigGrunnForTidligOppstartHelePerioden.ID, "Foreligger det gyldig grunn for hele perioden for tidlig oppstart?") - .hvis(new SjekkGyldigGrunnForTidligOppstartHelePerioden(), delFlytForTidligUttak()) - .ellers(Manuellbehandling.opprett("UT1050", IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, - Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, false, false)); + private Specification + sjekkGyldigGrunnForTidligOppstartHelePerioden() { + return rs.hvisRegel( + SjekkGyldigGrunnForTidligOppstartHelePerioden.ID, + "Foreligger det gyldig grunn for hele perioden for tidlig oppstart?") + .hvis(new SjekkGyldigGrunnForTidligOppstartHelePerioden(), delFlytForTidligUttak()) + .ellers( + Manuellbehandling.opprett( + "UT1050", + IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + false, + false)); } private Specification delFlytForTidligUttak() { - var erDetGraderingIPeriodenMedDagerPåAlleAktiviteterNode = rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), Oppfylt.opprett("UT1255", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, true)) - .ellers(Oppfylt.opprett("UT1256", InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, true)); - - var noenDisponibleDagerNode = rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, - SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.BESKRIVELSE) - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), erDetGraderingIPeriodenMedDagerPåAlleAktiviteterNode) - .ellers( - Manuellbehandling.opprett("UT1257", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.STØNADSKONTO_TOM, true, false)); + var erDetGraderingIPeriodenMedDagerPåAlleAktiviteterNode = + rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprett( + "UT1255", + InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, + true)) + .ellers( + Oppfylt.opprett( + "UT1256", + InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, + true)); + + var noenDisponibleDagerNode = + rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto + .BESKRIVELSE) + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + erDetGraderingIPeriodenMedDagerPåAlleAktiviteterNode) + .ellers( + Manuellbehandling.opprett( + "UT1257", + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + true, + false)); return rs.hvisRegel(SjekkOmOmsorgHelePerioden.ID, SjekkOmOmsorgHelePerioden.BESKRIVELSE) - .hvis(new SjekkOmOmsorgHelePerioden(), noenDisponibleDagerNode) - .ellers(IkkeOppfylt.opprett("UT1054", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); + .hvis(new SjekkOmOmsorgHelePerioden(), noenDisponibleDagerNode) + .ellers( + IkkeOppfylt.opprett( + "UT1054", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); } private Specification sjekkOmGradertePeriodenGjelderFlerbarnsdager() { - return rs.hvisRegel(SjekkOmPeriodenGjelderFlerbarnsdager.ID, SjekkOmPeriodenGjelderFlerbarnsdager.BESKRIVELSE) - .hvis(new SjekkOmPeriodenGjelderFlerbarnsdager(), - Oppfylt.opprett("UT1270", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, true)) - .ellers(sjekkOmMorErIAktivitetIGradertPeriodeUtenFlerbarnsdager()); + return rs.hvisRegel( + SjekkOmPeriodenGjelderFlerbarnsdager.ID, + SjekkOmPeriodenGjelderFlerbarnsdager.BESKRIVELSE) + .hvis( + new SjekkOmPeriodenGjelderFlerbarnsdager(), + Oppfylt.opprett( + "UT1270", + InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, + true)) + .ellers(sjekkOmMorErIAktivitetIGradertPeriodeUtenFlerbarnsdager()); } - private Specification sjekkOmMorErIAktivitetIGradertPeriodeUtenFlerbarnsdager() { + private Specification + sjekkOmMorErIAktivitetIGradertPeriodeUtenFlerbarnsdager() { return rs.hvisRegel(SjekkOmMorErIAktivitet.ID, SjekkOmMorErIAktivitet.BESKRIVELSE) - .hvis(new SjekkOmMorErIAktivitet(), Oppfylt.opprett("UT1272", InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, true)) - .ellers(new AvslagAktivitetskravDelregel().getSpecification()); + .hvis( + new SjekkOmMorErIAktivitet(), + Oppfylt.opprett( + "UT1272", + InnvilgetÅrsak.GRADERING_FELLESPERIODE_ELLER_FORELDREPENGER, + true)) + .ellers(new AvslagAktivitetskravDelregel().getSpecification()); } private Specification delFlytForVanligUttak() { - var sjekkOmMorErIAktivitetIPerioden = rs.hvisRegel(SjekkOmMorErIAktivitet.ID, SjekkOmMorErIAktivitet.BESKRIVELSE) - .hvis(new SjekkOmMorErIAktivitet(), Oppfylt.opprett("UT1258", InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, true)) - .ellers(new AvslagAktivitetskravDelregel().getSpecification()); - - var sjekkOmPeriodenGjelderFlerbarnsdager = rs.hvisRegel(SjekkOmPeriodenGjelderFlerbarnsdager.ID, - SjekkOmPeriodenGjelderFlerbarnsdager.BESKRIVELSE) - .hvis(new SjekkOmPeriodenGjelderFlerbarnsdager(), Oppfylt.opprett("UT1271", InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, true)) - .ellers(sjekkOmMorErIAktivitetIPerioden); - - - var omGradertPeriodeNode = rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), sjekkOmGradertePeriodenGjelderFlerbarnsdager()) - .ellers(sjekkOmPeriodenGjelderFlerbarnsdager); - - var noenDisponibleDagerNode = rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, - "Er det disponibelt antall stønadsdager på fedrekvoten?") - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), omGradertPeriodeNode) - .ellers( - Manuellbehandling.opprett("UT1146", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.STØNADSKONTO_TOM, true, false)); - - var sjekkOmTrekkesDager = rs.hvisRegel(SjekkOmBehandlingKreverSammenhengendeUttak.ID, SjekkOmBehandlingKreverSammenhengendeUttak.BESKRIVELSE) - .hvis(new SjekkOmBehandlingKreverSammenhengendeUttak(), IkkeOppfylt.opprett("UT1060", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)) - .ellers(IkkeOppfylt.opprett("UT1060", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, false, false)); + var sjekkOmMorErIAktivitetIPerioden = + rs.hvisRegel(SjekkOmMorErIAktivitet.ID, SjekkOmMorErIAktivitet.BESKRIVELSE) + .hvis( + new SjekkOmMorErIAktivitet(), + Oppfylt.opprett( + "UT1258", + InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, + true)) + .ellers(new AvslagAktivitetskravDelregel().getSpecification()); + + var sjekkOmPeriodenGjelderFlerbarnsdager = + rs.hvisRegel( + SjekkOmPeriodenGjelderFlerbarnsdager.ID, + SjekkOmPeriodenGjelderFlerbarnsdager.BESKRIVELSE) + .hvis( + new SjekkOmPeriodenGjelderFlerbarnsdager(), + Oppfylt.opprett( + "UT1271", + InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, + true)) + .ellers(sjekkOmMorErIAktivitetIPerioden); + + var omGradertPeriodeNode = + rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) + .hvis( + new SjekkOmGradertPeriode(), + sjekkOmGradertePeriodenGjelderFlerbarnsdager()) + .ellers(sjekkOmPeriodenGjelderFlerbarnsdager); + + var noenDisponibleDagerNode = + rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + "Er det disponibelt antall stønadsdager på fedrekvoten?") + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + omGradertPeriodeNode) + .ellers( + Manuellbehandling.opprett( + "UT1146", + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + true, + false)); + + var sjekkOmTrekkesDager = + rs.hvisRegel( + SjekkOmBehandlingKreverSammenhengendeUttak.ID, + SjekkOmBehandlingKreverSammenhengendeUttak.BESKRIVELSE) + .hvis( + new SjekkOmBehandlingKreverSammenhengendeUttak(), + IkkeOppfylt.opprett( + "UT1060", + IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, + true, + false)) + .ellers( + IkkeOppfylt.opprett( + "UT1060", + IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, + false, + false)); return rs.hvisRegel(SjekkOmOmsorgHelePerioden.ID, SjekkOmOmsorgHelePerioden.BESKRIVELSE) - .hvis(new SjekkOmOmsorgHelePerioden(), noenDisponibleDagerNode) - .ellers(sjekkOmTrekkesDager); + .hvis(new SjekkOmOmsorgHelePerioden(), noenDisponibleDagerNode) + .ellers(sjekkOmTrekkesDager); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ForeldrepengerDelregel.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ForeldrepengerDelregel.java index fc9429ee..1efe89f3 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ForeldrepengerDelregel.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ForeldrepengerDelregel.java @@ -37,7 +37,10 @@ import no.nav.fpsak.nare.specification.ConditionalOrSpecification; import no.nav.fpsak.nare.specification.Specification; -@RuleDocumentation(value = ForeldrepengerDelregel.ID, specificationReference = "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") +@RuleDocumentation( + value = ForeldrepengerDelregel.ID, + specificationReference = + "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") public class ForeldrepengerDelregel implements RuleService { public static final String ID = "FP_VK XX10"; @@ -55,255 +58,476 @@ public class ForeldrepengerDelregel implements RuleService getSpecification() { return rs.hvisRegel(SjekkOmSøkerErMor.ID, SjekkOmSøkerErMor.BESKRIVELSE) - .hvis(new SjekkOmSøkerErMor(), sjekkOmDetErFødselMor()) - .ellers(sjekkOmDetErFødselFar()); + .hvis(new SjekkOmSøkerErMor(), sjekkOmDetErFødselMor()) + .ellers(sjekkOmDetErFødselFar()); } private Specification sjekkOmDetErFødselMor() { return rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, FØDSEL) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmUttaketStarterFørLovligUttakFørFamiliehendelse()) - .ellers(sjekkOmPeriodenStarterFørOmsorgsovertakelseMor()); + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + sjekkOmUttaketStarterFørLovligUttakFørFamiliehendelse()) + .ellers(sjekkOmPeriodenStarterFørOmsorgsovertakelseMor()); } - private Specification sjekkOmPeriodenStarterFørOmsorgsovertakelseMor() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, "Starter perioden før omsorgsovertakelse?") - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), - IkkeOppfylt.opprett("UT1236", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) - .ellers(sjekkOmMorHarOmsorgForBarnet()); + private Specification + sjekkOmPeriodenStarterFørOmsorgsovertakelseMor() { + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + "Starter perioden før omsorgsovertakelse?") + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + IkkeOppfylt.opprett( + "UT1236", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) + .ellers(sjekkOmMorHarOmsorgForBarnet()); } private Specification sjekkOmDetErFødselFar() { return rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, FØDSEL) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmUttakSkalVæreFørFamileHendelse()) - .ellers(sjekkOmPeriodenStarterFørOmsorgsovertakelseFar()); - } - - private Specification sjekkOmPeriodenStarterFørOmsorgsovertakelseFar() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, "Starter perioden før omsorgsovertakelse?") - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), - IkkeOppfylt.opprett("UT1234", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) - .ellers(sjekkErDetAleneomsorgFar()); - } - - - private Specification sjekkOmUttaketStarterFørLovligUttakFørFamiliehendelse() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.ID, SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.BESKRIVELSE) - .hvis(new SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin(), - IkkeOppfylt.opprett("UT1185", IkkeOppfyltÅrsak.MOR_SØKER_FELLESPERIODE_FØR_12_UKER_FØR_TERMIN_FØDSEL, false, false)) - .ellers(sjekkErDetAleneomsorgMor()); + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + sjekkOmUttakSkalVæreFørFamileHendelse()) + .ellers(sjekkOmPeriodenStarterFørOmsorgsovertakelseFar()); + } + + private Specification + sjekkOmPeriodenStarterFørOmsorgsovertakelseFar() { + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + "Starter perioden før omsorgsovertakelse?") + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + IkkeOppfylt.opprett( + "UT1234", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) + .ellers(sjekkErDetAleneomsorgFar()); + } + + private Specification + sjekkOmUttaketStarterFørLovligUttakFørFamiliehendelse() { + return rs.hvisRegel( + SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.ID, + SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin.BESKRIVELSE) + .hvis( + new SjekkOmPeriodenStarterFørLovligUttakFørFødselTermin(), + IkkeOppfylt.opprett( + "UT1185", + IkkeOppfyltÅrsak + .MOR_SØKER_FELLESPERIODE_FØR_12_UKER_FØR_TERMIN_FØDSEL, + false, + false)) + .ellers(sjekkErDetAleneomsorgMor()); } private Specification sjekkErDetAleneomsorgMor() { return rs.hvisRegel(SjekkOmErAleneomsorg.ID, SjekkOmErAleneomsorg.BESKRIVELSE) - .hvis(new SjekkOmErAleneomsorg(), sjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel()) - .ellers(sjekkErDetBareMorSomHarRett()); + .hvis( + new SjekkOmErAleneomsorg(), + sjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel()) + .ellers(sjekkErDetBareMorSomHarRett()); } private Specification sjekkErDetBareMorSomHarRett() { return rs.hvisRegel(SjekkOmBareMorHarRett.ID, "Er det bare mor som har rett?") - .hvis(new SjekkOmBareMorHarRett(), sjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel()) - .ellers(Manuellbehandling.opprett("UT1209", null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false)); - } - - private Specification sjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel() { - return rs.hvisRegel(SjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel.ID, "Starter perioden før 3 uker før termin/fødsel?") - .hvis(new SjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel(), sjekkErDetNoenDisponibleStønadsdagerPåKvotenMor()) - .ellers(sjekkOmPeriodenStarterFørFamilieHendelse()); - } - - private Specification sjekkErDetNoenDisponibleStønadsdagerPåKvotenMor() { - return rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, - SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.BESKRIVELSE) - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), sjekkOmGraderingIPeriodenFørXUkerEtterFamiliehendelseMor()) - .ellers( - Manuellbehandling.opprett("UT1205", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.STØNADSKONTO_TOM, true, false)); - } - - private Specification sjekkOmGraderingIPeriodenFørXUkerEtterFamiliehendelseMor() { - var erDetBareMorSomHarRettUtenGradering = erDetAleneomsorgSjekk(Oppfylt.opprett("UT1186", InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, true), - Oppfylt.opprett("UT1211", InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT, true)); - var erDetBareMorSomHarRettVedGradering = erDetAleneomsorgSjekk( - Oppfylt.opprettMedAvslåttGradering("UT1187", InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, - GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING, true), - Oppfylt.opprettMedAvslåttGradering("UT1212", InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT, - GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING, true)); + .hvis( + new SjekkOmBareMorHarRett(), + sjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel()) + .ellers( + Manuellbehandling.opprett( + "UT1209", + null, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + true, + false)); + } + + private Specification + sjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel() { + return rs.hvisRegel( + SjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel.ID, + "Starter perioden før 3 uker før termin/fødsel?") + .hvis( + new SjekkOmUttakStarterFørUttakForForeldrepengerFørFødsel(), + sjekkErDetNoenDisponibleStønadsdagerPåKvotenMor()) + .ellers(sjekkOmPeriodenStarterFørFamilieHendelse()); + } + + private Specification + sjekkErDetNoenDisponibleStønadsdagerPåKvotenMor() { + return rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.BESKRIVELSE) + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + sjekkOmGraderingIPeriodenFørXUkerEtterFamiliehendelseMor()) + .ellers( + Manuellbehandling.opprett( + "UT1205", + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + true, + false)); + } + + private Specification + sjekkOmGraderingIPeriodenFørXUkerEtterFamiliehendelseMor() { + var erDetBareMorSomHarRettUtenGradering = + erDetAleneomsorgSjekk( + Oppfylt.opprett("UT1186", InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, true), + Oppfylt.opprett( + "UT1211", InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT, true)); + var erDetBareMorSomHarRettVedGradering = + erDetAleneomsorgSjekk( + Oppfylt.opprettMedAvslåttGradering( + "UT1187", + InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, + GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING, + true), + Oppfylt.opprettMedAvslåttGradering( + "UT1212", + InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT, + GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING, + true)); return rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), erDetBareMorSomHarRettVedGradering) - .ellers(erDetBareMorSomHarRettUtenGradering); + .hvis(new SjekkOmGradertPeriode(), erDetBareMorSomHarRettVedGradering) + .ellers(erDetBareMorSomHarRettUtenGradering); } - private Specification erDetAleneomsorgSjekk(FastsettePeriodeUtfall utfallJa, FastsettePeriodeUtfall utfallNei) { - return rs.hvisRegel(SjekkOmErAleneomsorg.ID, SjekkOmErAleneomsorg.BESKRIVELSE).hvis(new SjekkOmErAleneomsorg(), utfallJa).ellers(utfallNei); + private Specification erDetAleneomsorgSjekk( + FastsettePeriodeUtfall utfallJa, FastsettePeriodeUtfall utfallNei) { + return rs.hvisRegel(SjekkOmErAleneomsorg.ID, SjekkOmErAleneomsorg.BESKRIVELSE) + .hvis(new SjekkOmErAleneomsorg(), utfallJa) + .ellers(utfallNei); } private Specification sjekkOmPeriodenStarterFørFamilieHendelse() { - var sjekkErDetAleneomsorg = erDetAleneomsorgSjekk(Oppfylt.opprett("UT1197", InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, true, true), - Oppfylt.opprett("UT1192", InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT, true, true)); - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, "Starter perioden før termin/fødsel?") - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), sjekkErDetAleneomsorg) - .ellers(sjekkErPeriodenInnenforUkerReservertMor()); + var sjekkErDetAleneomsorg = + erDetAleneomsorgSjekk( + Oppfylt.opprett( + "UT1197", InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, true, true), + Oppfylt.opprett( + "UT1192", + InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT, + true, + true)); + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + "Starter perioden før termin/fødsel?") + .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), sjekkErDetAleneomsorg) + .ellers(sjekkErPeriodenInnenforUkerReservertMor()); } private Specification sjekkErPeriodenInnenforUkerReservertMor() { - return rs.hvisRegel(SjekkOmPeriodenInnenforUkerReservertMor.ID, "Er perioden innenfor 6 uker etter fødsel?") - .hvis(new SjekkOmPeriodenInnenforUkerReservertMor(), sjekkErDetNoenDisponibleStønadsdagerPåKvotenMor()) - .ellers(sjekkOmMorHarOmsorgForBarnet()); + return rs.hvisRegel( + SjekkOmPeriodenInnenforUkerReservertMor.ID, + "Er perioden innenfor 6 uker etter fødsel?") + .hvis( + new SjekkOmPeriodenInnenforUkerReservertMor(), + sjekkErDetNoenDisponibleStønadsdagerPåKvotenMor()) + .ellers(sjekkOmMorHarOmsorgForBarnet()); } private Specification sjekkOmMorHarOmsorgForBarnet() { - var sjekkOmTilgjengeligeDager = rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, - SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.BESKRIVELSE) - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), sjekkOmGraderingIPeriodenXUkerEtterFamilieHendelseForMor()) - .ellers(Manuellbehandling.opprett("UT1188", null, Manuellbehandlingårsak.STØNADSKONTO_TOM, false, false)); + var sjekkOmTilgjengeligeDager = + rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto + .BESKRIVELSE) + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + sjekkOmGraderingIPeriodenXUkerEtterFamilieHendelseForMor()) + .ellers( + Manuellbehandling.opprett( + "UT1188", + null, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + false, + false)); return rs.hvisRegel(SjekkOmOmsorgHelePerioden.ID, SjekkOmOmsorgHelePerioden.BESKRIVELSE) - .hvis(new SjekkOmOmsorgHelePerioden(), sjekkOmTilgjengeligeDager) - .ellers(IkkeOppfylt.opprett("UT1191", IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG, true, false)); - } - - private Specification sjekkOmGraderingIPeriodenXUkerEtterFamilieHendelseForMor() { - var erDetBareMorSomHarRettSjekkIkkeGradering = erDetAleneomsorgSjekk( - Oppfylt.opprett("UT1190", InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, true), - Oppfylt.opprett("UT1214", InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT, true)); - var erDetBareMorSomHarRettSjekkGradering = erDetAleneomsorgSjekk(Oppfylt.opprett("UT1210", InnvilgetÅrsak.GRADERING_ALENEOMSORG, true), - Oppfylt.opprett("UT1213", InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_MOR_HAR_RETT, true)); + .hvis(new SjekkOmOmsorgHelePerioden(), sjekkOmTilgjengeligeDager) + .ellers( + IkkeOppfylt.opprett( + "UT1191", IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG, true, false)); + } + + private Specification + sjekkOmGraderingIPeriodenXUkerEtterFamilieHendelseForMor() { + var erDetBareMorSomHarRettSjekkIkkeGradering = + erDetAleneomsorgSjekk( + Oppfylt.opprett("UT1190", InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, true), + Oppfylt.opprett( + "UT1214", InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT, true)); + var erDetBareMorSomHarRettSjekkGradering = + erDetAleneomsorgSjekk( + Oppfylt.opprett("UT1210", InnvilgetÅrsak.GRADERING_ALENEOMSORG, true), + Oppfylt.opprett( + "UT1213", + InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_MOR_HAR_RETT, + true)); return rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), erDetBareMorSomHarRettSjekkGradering) - .ellers(erDetBareMorSomHarRettSjekkIkkeGradering); + .hvis(new SjekkOmGradertPeriode(), erDetBareMorSomHarRettSjekkGradering) + .ellers(erDetBareMorSomHarRettSjekkIkkeGradering); } private Specification sjekkOmUttakSkalVæreFørFamileHendelse() { - return rs.hvisRegel(SjekkOmPeriodenSlutterFørFamiliehendelse.ID, "Skal uttak være før termin/fødsel?") - .hvis(new SjekkOmPeriodenSlutterFørFamiliehendelse(), sjekkOmUttakFørFødselErFarRundtFødsel()) - .ellers(sjekkErDetAleneomsorgFar()); + return rs.hvisRegel( + SjekkOmPeriodenSlutterFørFamiliehendelse.ID, + "Skal uttak være før termin/fødsel?") + .hvis( + new SjekkOmPeriodenSlutterFørFamiliehendelse(), + sjekkOmUttakFørFødselErFarRundtFødsel()) + .ellers(sjekkErDetAleneomsorgFar()); } private Specification sjekkOmUttakFørFødselErFarRundtFødsel() { - return rs.hvisRegel(SjekkOmFarsUttakRundtFødselTilgjengeligeDager.ID, "Er det hjemlet fars uttak rundt fødsel?") - .hvis(new SjekkOmFarsUttakRundtFødselTilgjengeligeDager(), sjekkErDetAleneomsorgFar()) - .ellers(Manuellbehandling.opprett("UT1193", IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL, false, - false)); + return rs.hvisRegel( + SjekkOmFarsUttakRundtFødselTilgjengeligeDager.ID, + "Er det hjemlet fars uttak rundt fødsel?") + .hvis( + new SjekkOmFarsUttakRundtFødselTilgjengeligeDager(), + sjekkErDetAleneomsorgFar()) + .ellers( + Manuellbehandling.opprett( + "UT1193", + IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, + Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL, + false, + false)); } private Specification sjekkErDetAleneomsorgFar() { return rs.hvisRegel(SjekkOmErAleneomsorg.ID, SjekkOmErAleneomsorg.BESKRIVELSE) - .hvis(new SjekkOmErAleneomsorg(), sjekkOmFarMedAleneomsorgHarOmsorgForBarnet()) - .ellers(sjekkErDetBareFarMedmorSomHarRett()); + .hvis(new SjekkOmErAleneomsorg(), sjekkOmFarMedAleneomsorgHarOmsorgForBarnet()) + .ellers(sjekkErDetBareFarMedmorSomHarRett()); } - private ConditionalOrSpecification sjekkOmFarMedAleneomsorgHarOmsorgForBarnet() { + private ConditionalOrSpecification + sjekkOmFarMedAleneomsorgHarOmsorgForBarnet() { return rs.hvisRegel(SjekkOmOmsorgHelePerioden.ID, SjekkOmOmsorgHelePerioden.BESKRIVELSE) - .hvis(new SjekkOmOmsorgHelePerioden(), sjekkOmFarMedAleneomsorgHarDisponibleDager()) - .ellers(IkkeOppfylt.opprett("UT1194", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); - } - - private ConditionalOrSpecification sjekkOmFarMedAleneomsorgHarDisponibleDager() { - return rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, - SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.BESKRIVELSE) - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), sjekkOmFarMedAleneomsorgGraderingIPerioden()) - .ellers(Manuellbehandling.opprett("UT1195", null, Manuellbehandlingårsak.STØNADSKONTO_TOM, false, false)); - } - - private ConditionalOrSpecification sjekkOmFarMedAleneomsorgGraderingIPerioden() { + .hvis(new SjekkOmOmsorgHelePerioden(), sjekkOmFarMedAleneomsorgHarDisponibleDager()) + .ellers( + IkkeOppfylt.opprett( + "UT1194", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); + } + + private ConditionalOrSpecification + sjekkOmFarMedAleneomsorgHarDisponibleDager() { + return rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.BESKRIVELSE) + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + sjekkOmFarMedAleneomsorgGraderingIPerioden()) + .ellers( + Manuellbehandling.opprett( + "UT1195", + null, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + false, + false)); + } + + private ConditionalOrSpecification + sjekkOmFarMedAleneomsorgGraderingIPerioden() { return rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), Oppfylt.opprett("UT1196", InnvilgetÅrsak.GRADERING_ALENEOMSORG, true)) - .ellers(Oppfylt.opprett("UT1198", InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, true)); + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprett("UT1196", InnvilgetÅrsak.GRADERING_ALENEOMSORG, true)) + .ellers(Oppfylt.opprett("UT1198", InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, true)); } private Specification sjekkErDetBareFarMedmorSomHarRett() { return rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) - .hvis(new SjekkOmBareFarHarRett(), sjekkOmFarUtenAleneomsorgHarOmsorgForBarnet()) - .ellers(Manuellbehandling.opprett("UT1204", null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false)); + .hvis(new SjekkOmBareFarHarRett(), sjekkOmFarUtenAleneomsorgHarOmsorgForBarnet()) + .ellers( + Manuellbehandling.opprett( + "UT1204", + null, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + true, + false)); } private Specification sjekkOmFarUtenAleneomsorgHarOmsorgForBarnet() { return rs.hvisRegel(SjekkOmOmsorgHelePerioden.ID, SjekkOmOmsorgHelePerioden.BESKRIVELSE) - .hvis(new SjekkOmOmsorgHelePerioden(), sjekkOmPeriodenGjelderFlerbarnsdager()) - .ellers(IkkeOppfylt.opprett("UT1199", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); + .hvis(new SjekkOmOmsorgHelePerioden(), sjekkOmPeriodenGjelderFlerbarnsdager()) + .ellers( + IkkeOppfylt.opprett( + "UT1199", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); } private Specification sjekkOmPeriodenGjelderFlerbarnsdager() { - var sjekkOmGraderingIPerioden = rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), Oppfylt.opprett("UT1267", InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT, true)) - .ellers(Oppfylt.opprett("UT1266", InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT, true)); - - var sjekkOmTilgjengeligeDager = rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, - SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.BESKRIVELSE) - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), sjekkOmGraderingIPerioden) - .ellers(Manuellbehandling.opprett("UT1269", null, Manuellbehandlingårsak.STØNADSKONTO_TOM, false, false)); - - var minsterettBalansertUttak = rs.hvisRegel(SjekkOmMinsterettBalansertUttak.ID, SjekkOmMinsterettBalansertUttak.BESKRIVELSE) - .hvis(new SjekkOmMinsterettBalansertUttak(), sjekkOmDagerIgjenPåMinsterett()) - .ellers(sjekkOmTilgjengeligeDager); - - return rs.hvisRegel(SjekkOmPeriodenGjelderFlerbarnsdager.ID, "Gjelder perioden flerbarnsdager?") - .hvis(new SjekkOmPeriodenGjelderFlerbarnsdager(), minsterettBalansertUttak) - .ellers(sjekkOmDetErFødsel()); + var sjekkOmGraderingIPerioden = + rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprett( + "UT1267", + InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT, + true)) + .ellers( + Oppfylt.opprett( + "UT1266", + InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT, + true)); + + var sjekkOmTilgjengeligeDager = + rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto + .BESKRIVELSE) + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + sjekkOmGraderingIPerioden) + .ellers( + Manuellbehandling.opprett( + "UT1269", + null, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + false, + false)); + + var minsterettBalansertUttak = + rs.hvisRegel( + SjekkOmMinsterettBalansertUttak.ID, + SjekkOmMinsterettBalansertUttak.BESKRIVELSE) + .hvis( + new SjekkOmMinsterettBalansertUttak(), + sjekkOmDagerIgjenPåMinsterett()) + .ellers(sjekkOmTilgjengeligeDager); + + return rs.hvisRegel( + SjekkOmPeriodenGjelderFlerbarnsdager.ID, "Gjelder perioden flerbarnsdager?") + .hvis(new SjekkOmPeriodenGjelderFlerbarnsdager(), minsterettBalansertUttak) + .ellers(sjekkOmDetErFødsel()); } private Specification sjekkOmDetErFødsel() { return rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, FØDSEL) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmUttakSkjerFørDeFørsteUkene()) - .ellers(sjekkFarUtenAleneomsorgHarDisponibleDager()); + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + sjekkOmUttakSkjerFørDeFørsteUkene()) + .ellers(sjekkFarUtenAleneomsorgHarDisponibleDager()); } private Specification sjekkOmUttakSkjerFørDeFørsteUkene() { - return rs.hvisRegel(SjekkOmUttakSkjerEtterDeFørsteUkene.ID, SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) - .hvis(new SjekkOmUttakSkjerEtterDeFørsteUkene(), sjekkFarUtenAleneomsorgHarDisponibleDager()) - .ellers(sjekkOmUttakFørsteSeksUkerErFarMedFABalansertUttak()); - } - - private Specification sjekkOmUttakFørsteSeksUkerErFarMedFABalansertUttak() { - return rs.hvisRegel(SjekkOmMinsterettBalansertUttak.ID, SjekkOmMinsterettBalansertUttak.BESKRIVELSE) - .hvis(new SjekkOmMinsterettBalansertUttak(), sjekkFarUtenAleneomsorgHarDisponibleDager()) - .ellers(sjekkOmGyldigGrunnForTidligOppstart()); + return rs.hvisRegel( + SjekkOmUttakSkjerEtterDeFørsteUkene.ID, + SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) + .hvis( + new SjekkOmUttakSkjerEtterDeFørsteUkene(), + sjekkFarUtenAleneomsorgHarDisponibleDager()) + .ellers(sjekkOmUttakFørsteSeksUkerErFarMedFABalansertUttak()); + } + + private Specification + sjekkOmUttakFørsteSeksUkerErFarMedFABalansertUttak() { + return rs.hvisRegel( + SjekkOmMinsterettBalansertUttak.ID, + SjekkOmMinsterettBalansertUttak.BESKRIVELSE) + .hvis( + new SjekkOmMinsterettBalansertUttak(), + sjekkFarUtenAleneomsorgHarDisponibleDager()) + .ellers(sjekkOmGyldigGrunnForTidligOppstart()); } private Specification sjekkOmGyldigGrunnForTidligOppstart() { - return rs.hvisRegel(SjekkGyldigGrunnForTidligOppstartHelePerioden.ID, "Foreligger et gyldig grunn for hele perioden for tidlig oppstart?") - .hvis(new SjekkGyldigGrunnForTidligOppstartHelePerioden(), sjekkFarUtenAleneomsorgHarDisponibleDager()) - .ellers(Manuellbehandling.opprett("UT1200", null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, false, false)); + return rs.hvisRegel( + SjekkGyldigGrunnForTidligOppstartHelePerioden.ID, + "Foreligger et gyldig grunn for hele perioden for tidlig oppstart?") + .hvis( + new SjekkGyldigGrunnForTidligOppstartHelePerioden(), + sjekkFarUtenAleneomsorgHarDisponibleDager()) + .ellers( + Manuellbehandling.opprett( + "UT1200", + null, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + false, + false)); } private Specification sjekkOmDagerIgjenPåMinsterett() { if (dagerIgjenPåMinsterett == null) { - dagerIgjenPåMinsterett = rs.hvisRegel( - SjekkOmMinsterettHarDisponibleDager.ID + ELLER + SjekkOmEtterNesteStønadsperiodeHarDisponibleDager.ID + ELLER - + SjekkOmUføreUtenAktivitetskravHarDisponibleDager.ID, - SjekkOmMinsterettHarDisponibleDager.BESKRIVELSE + ELLER + SjekkOmEtterNesteStønadsperiodeHarDisponibleDager.BESKRIVELSE + ELLER - + SjekkOmUføreUtenAktivitetskravHarDisponibleDager.BESKRIVELSE) - .hvis(new SjekkOmMinsterettHarDisponibleDager().eller(new SjekkOmEtterNesteStønadsperiodeHarDisponibleDager()) - .eller(new SjekkOmUføreUtenAktivitetskravHarDisponibleDager()), sjekkGraderingVedKunFarMedmorRettMinsterett()) - .ellers(new AvslagAktivitetskravDelregel().getSpecification()); + dagerIgjenPåMinsterett = + rs.hvisRegel( + SjekkOmMinsterettHarDisponibleDager.ID + + ELLER + + SjekkOmEtterNesteStønadsperiodeHarDisponibleDager.ID + + ELLER + + SjekkOmUføreUtenAktivitetskravHarDisponibleDager.ID, + SjekkOmMinsterettHarDisponibleDager.BESKRIVELSE + + ELLER + + SjekkOmEtterNesteStønadsperiodeHarDisponibleDager + .BESKRIVELSE + + ELLER + + SjekkOmUføreUtenAktivitetskravHarDisponibleDager + .BESKRIVELSE) + .hvis( + new SjekkOmMinsterettHarDisponibleDager() + .eller( + new SjekkOmEtterNesteStønadsperiodeHarDisponibleDager()) + .eller( + new SjekkOmUføreUtenAktivitetskravHarDisponibleDager()), + sjekkGraderingVedKunFarMedmorRettMinsterett()) + .ellers(new AvslagAktivitetskravDelregel().getSpecification()); } return dagerIgjenPåMinsterett; } private Specification sjekkGraderingVedKunFarMedmorRettMinsterett() { return rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), - Oppfylt.opprett("UT1318", InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, true)) - .ellers(Oppfylt.opprett("UT1317", InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, true)); + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprett( + "UT1318", + InnvilgetÅrsak + .GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + true)) + .ellers( + Oppfylt.opprett( + "UT1317", + InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + true)); } private Specification sjekkOmAktivitetskravErOppfylt() { return rs.hvisRegel(SjekkOmMorErIAktivitet.ID, SjekkOmMorErIAktivitet.BESKRIVELSE) - .hvis(new SjekkOmMorErIAktivitet(), sjekkGraderingVedKunFarMedmorRett()) - .ellers(sjekkOmDagerIgjenPåMinsterett()); + .hvis(new SjekkOmMorErIAktivitet(), sjekkGraderingVedKunFarMedmorRett()) + .ellers(sjekkOmDagerIgjenPåMinsterett()); } private Specification sjekkGraderingVedKunFarMedmorRett() { return rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), Oppfylt.opprett("UT1315", InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT, true)) - .ellers(Oppfylt.opprett("UT1316", InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT, true)); + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprett( + "UT1315", + InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT, + true)) + .ellers( + Oppfylt.opprett( + "UT1316", InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT, true)); } private Specification sjekkFarUtenAleneomsorgHarDisponibleDager() { if (bareFarRettIkkeAleneomsorgHarDisponibleDager == null) { - bareFarRettIkkeAleneomsorgHarDisponibleDager = rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, - SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.BESKRIVELSE) - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), sjekkOmAktivitetskravErOppfylt()) - .ellers(Manuellbehandling.opprett("UT1203", null, Manuellbehandlingårsak.STØNADSKONTO_TOM, false, false)); + bareFarRettIkkeAleneomsorgHarDisponibleDager = + rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto + .ID, + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto + .BESKRIVELSE) + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + sjekkOmAktivitetskravErOppfylt()) + .ellers( + Manuellbehandling.opprett( + "UT1203", + null, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + false, + false)); } return bareFarRettIkkeAleneomsorgHarDisponibleDager; } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ForeldrepengerF\303\270rF\303\270dselDelregel.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ForeldrepengerF\303\270rF\303\270dselDelregel.java" index 2fa38687..8756cfff 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ForeldrepengerF\303\270rF\303\270dselDelregel.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ForeldrepengerF\303\270rF\303\270dselDelregel.java" @@ -16,20 +16,22 @@ import no.nav.fpsak.nare.specification.Specification; /** - * Delregel innenfor regeltjenesten FastsettePeriodeRegel som fastsetter uttak av foreldrepenger før fødsel. - *

- * Utfall definisjoner:
- *

- * Utfall AVSLÅTT:
- * - Far søker om perioden - * - Perioden starter før perioden forbeholdt mor før fødsel.
+ * Delregel innenfor regeltjenesten FastsettePeriodeRegel som fastsetter uttak av foreldrepenger før + * fødsel. + * + *

Utfall definisjoner:
+ * + *

Utfall AVSLÅTT:
+ * - Far søker om perioden - Perioden starter før perioden forbeholdt mor før fødsel.
* - Perioden starter etter termin/fødsel.
- *

- * Utfall INNVILGET:
+ * + *

Utfall INNVILGET:
* - Perioden dekker perioden forbeholdt mor før fødsel og det er mor som søker. */ - -@RuleDocumentation(value = ForeldrepengerFørFødselDelregel.ID, specificationReference = "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") +@RuleDocumentation( + value = ForeldrepengerFørFødselDelregel.ID, + specificationReference = + "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") public class ForeldrepengerFørFødselDelregel implements RuleService { public static final String ID = "FP_VK XX10"; @@ -43,25 +45,45 @@ public Specification getSpecification() { return sjekkOmSøkerErMorNode(new Ruleset<>()); } - private Specification sjekkOmSøkerErMorNode(Ruleset rs) { + private Specification sjekkOmSøkerErMorNode( + Ruleset rs) { return rs.hvisRegel(SjekkOmSøkerErMor.ID, SjekkOmSøkerErMor.BESKRIVELSE) - .hvis(new SjekkOmSøkerErMor(), sjekkOmPeriodenStarterForTidligNode(rs)) - .ellers(Manuellbehandling.opprett("UT1076", IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL, false, - false)); + .hvis(new SjekkOmSøkerErMor(), sjekkOmPeriodenStarterForTidligNode(rs)) + .ellers( + Manuellbehandling.opprett( + "UT1076", + IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, + Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL, + false, + false)); } - private Specification sjekkOmPeriodenStarterForTidligNode(Ruleset rs) { - return rs.hvisRegel(SjekkOmForeldrepengerFørFødselStarterForTidligEllerSlutterForSent.ID, "Starter perioden for tidlig?") - .hvis(new SjekkOmForeldrepengerFørFødselStarterForTidligEllerSlutterForSent(), - Manuellbehandling.opprett("UT1070", null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false)) - .ellers(sjekkOmGradering(rs)); + private Specification sjekkOmPeriodenStarterForTidligNode( + Ruleset rs) { + return rs.hvisRegel( + SjekkOmForeldrepengerFørFødselStarterForTidligEllerSlutterForSent.ID, + "Starter perioden for tidlig?") + .hvis( + new SjekkOmForeldrepengerFørFødselStarterForTidligEllerSlutterForSent(), + Manuellbehandling.opprett( + "UT1070", + null, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + true, + false)) + .ellers(sjekkOmGradering(rs)); } - private Specification sjekkOmGradering(Ruleset rs) { + private Specification sjekkOmGradering( + Ruleset rs) { return rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), Oppfylt.opprettMedAvslåttGradering("UT1072", InnvilgetÅrsak.FORELDREPENGER_FØR_FØDSEL, - GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING, true)) - .ellers(Oppfylt.opprett("UT1071", InnvilgetÅrsak.FORELDREPENGER_FØR_FØDSEL, true)); + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprettMedAvslåttGradering( + "UT1072", + InnvilgetÅrsak.FORELDREPENGER_FØR_FØDSEL, + GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING, + true)) + .ellers(Oppfylt.opprett("UT1071", InnvilgetÅrsak.FORELDREPENGER_FØR_FØDSEL, true)); } - } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ManglendeS\303\270ktPeriodeDelregel.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ManglendeS\303\270ktPeriodeDelregel.java" index 42f177b2..fd9a0f47 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ManglendeS\303\270ktPeriodeDelregel.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/ManglendeS\303\270ktPeriodeDelregel.java" @@ -22,11 +22,14 @@ import no.nav.fpsak.nare.specification.Specification; /** - * Delregel innenfor regeltjenesten FastsettePeriodeRegel som fastsetter perioder som ikke er søkt om. - * Disse er i hovedsak innenfor perioder som er reservert mor (14-9 sjette ledd) og tekniske trekkperioder for far (14-14 første ledd) + * Delregel innenfor regeltjenesten FastsettePeriodeRegel som fastsetter perioder som ikke er søkt + * om. Disse er i hovedsak innenfor perioder som er reservert mor (14-9 sjette ledd) og tekniske + * trekkperioder for far (14-14 første ledd) */ - -@RuleDocumentation(value = ManglendeSøktPeriodeDelregel.ID, specificationReference = "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") +@RuleDocumentation( + value = ManglendeSøktPeriodeDelregel.ID, + specificationReference = + "https://confluence.adeo.no/display/MODNAV/1.+Samleside+for+oppdaterte+regelflyter") public class ManglendeSøktPeriodeDelregel implements RuleService { public static final String ID = "FP_VK 10.7.FRI"; @@ -40,66 +43,123 @@ public Specification getSpecification() { return sjekkOmForeldrepengerFørFødsel(new Ruleset<>()); } - private Specification sjekkOmForeldrepengerFørFødsel(Ruleset rs) { - return rs.hvisRegel(SjekkOmPeriodeErForeldrepengerFørFødsel.ID, "Er det Foreldrepenger før fødsel?") - .hvis(new SjekkOmPeriodeErForeldrepengerFørFødsel(), - IkkeOppfylt.opprett("UT1073", IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_FØR_FØDSEL, true, false)) - .ellers(sjekkOmTomPåAlleSineKonto(rs)); + private Specification sjekkOmForeldrepengerFørFødsel( + Ruleset rs) { + return rs.hvisRegel( + SjekkOmPeriodeErForeldrepengerFørFødsel.ID, + "Er det Foreldrepenger før fødsel?") + .hvis( + new SjekkOmPeriodeErForeldrepengerFørFødsel(), + IkkeOppfylt.opprett( + "UT1073", + IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_FØR_FØDSEL, + true, + false)) + .ellers(sjekkOmTomPåAlleSineKonto(rs)); } - private Specification sjekkOmTomPåAlleSineKonto(Ruleset rs) { - return rs.hvisRegel(SjekkOmTomForAlleSineKontoer.ID, SjekkOmTomForAlleSineKontoer.BESKRIVELSE) - .hvis(new SjekkOmTomForAlleSineKontoer(), sjekkOmSakGjelderBareFarRettTomKonto(rs)) - .ellers(sjekkOmDagerIgjenPåAlleAktiviteter(rs)); + private Specification sjekkOmTomPåAlleSineKonto( + Ruleset rs) { + return rs.hvisRegel( + SjekkOmTomForAlleSineKontoer.ID, SjekkOmTomForAlleSineKontoer.BESKRIVELSE) + .hvis(new SjekkOmTomForAlleSineKontoer(), sjekkOmSakGjelderBareFarRettTomKonto(rs)) + .ellers(sjekkOmDagerIgjenPåAlleAktiviteter(rs)); } - private Specification sjekkOmSakGjelderBareFarRettTomKonto(Ruleset rs) { + private Specification sjekkOmSakGjelderBareFarRettTomKonto( + Ruleset rs) { return rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) - .hvis(new SjekkOmBareFarHarRett(), sjekkOmDagerIgjenPåMinsterett(rs)) - .ellers(ut1088()); + .hvis(new SjekkOmBareFarHarRett(), sjekkOmDagerIgjenPåMinsterett(rs)) + .ellers(ut1088()); } - private Specification sjekkOmDagerIgjenPåMinsterett(Ruleset rs) { - return rs.hvisRegel(SjekkOmErAlleDisponibleDagerIgjenMinsterett.ID, SjekkOmErAlleDisponibleDagerIgjenMinsterett.BESKRIVELSE) - .hvis(new SjekkOmErAlleDisponibleDagerIgjenMinsterett(), - IkkeOppfylt.opprett("UT1089", IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT, false, false)) - .ellers(ut1088()); + private Specification sjekkOmDagerIgjenPåMinsterett( + Ruleset rs) { + return rs.hvisRegel( + SjekkOmErAlleDisponibleDagerIgjenMinsterett.ID, + SjekkOmErAlleDisponibleDagerIgjenMinsterett.BESKRIVELSE) + .hvis( + new SjekkOmErAlleDisponibleDagerIgjenMinsterett(), + IkkeOppfylt.opprett( + "UT1089", IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT, false, false)) + .ellers(ut1088()); } private FastsettePeriodeUtfall ut1088() { - return IkkeOppfylt.opprett("UT1088", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, false, false); + return IkkeOppfylt.opprett( + "UT1088", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, false, false); } - private Specification sjekkOmDagerIgjenPåAlleAktiviteter(Ruleset rs) { - return rs.hvisRegel(SjekkOmDagerIgjenPåAlleAktiviteter.ID, SjekkOmDagerIgjenPåAlleAktiviteter.BESKRIVELSE) - .hvis(new SjekkOmDagerIgjenPåAlleAktiviteter(), sjekkOmSakGjelderBareFarRett(rs)) - .ellers(Manuellbehandling.opprett("UT1291", null, Manuellbehandlingårsak.STØNADSKONTO_TOM, false, false)); + private Specification sjekkOmDagerIgjenPåAlleAktiviteter( + Ruleset rs) { + return rs.hvisRegel( + SjekkOmDagerIgjenPåAlleAktiviteter.ID, + SjekkOmDagerIgjenPåAlleAktiviteter.BESKRIVELSE) + .hvis(new SjekkOmDagerIgjenPåAlleAktiviteter(), sjekkOmSakGjelderBareFarRett(rs)) + .ellers( + Manuellbehandling.opprett( + "UT1291", + null, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + false, + false)); } - private Specification sjekkOmBrukSammenhengendeUttakÅrsaker(Ruleset rs) { - return rs.hvisRegel(SjekkOmBehandlingKreverSammenhengendeUttak.ID, SjekkOmBehandlingKreverSammenhengendeUttak.BESKRIVELSE) - .hvis(new SjekkOmBehandlingKreverSammenhengendeUttak(), - Manuellbehandling.opprett("UT1096", IkkeOppfyltÅrsak.HULL_MELLOM_FORELDRENES_PERIODER, Manuellbehandlingårsak.VURDER_OM_UTSETTELSE, - true, false)) - .ellers(sjekkOmPeriodeGjelderMorsReserverteUker(rs)); + private Specification sjekkOmBrukSammenhengendeUttakÅrsaker( + Ruleset rs) { + return rs.hvisRegel( + SjekkOmBehandlingKreverSammenhengendeUttak.ID, + SjekkOmBehandlingKreverSammenhengendeUttak.BESKRIVELSE) + .hvis( + new SjekkOmBehandlingKreverSammenhengendeUttak(), + Manuellbehandling.opprett( + "UT1096", + IkkeOppfyltÅrsak.HULL_MELLOM_FORELDRENES_PERIODER, + Manuellbehandlingårsak.VURDER_OM_UTSETTELSE, + true, + false)) + .ellers(sjekkOmPeriodeGjelderMorsReserverteUker(rs)); } - private Specification sjekkOmSakGjelderBareFarRett(Ruleset rs) { + private Specification sjekkOmSakGjelderBareFarRett( + Ruleset rs) { return rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) - .hvis(new SjekkOmBareFarHarRett(), IkkeOppfylt.opprett("UT1093", IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT, true, false)) - .ellers(sjekkOmBrukSammenhengendeUttakÅrsaker(rs)); + .hvis( + new SjekkOmBareFarHarRett(), + IkkeOppfylt.opprett( + "UT1093", IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT, true, false)) + .ellers(sjekkOmBrukSammenhengendeUttakÅrsaker(rs)); } - private Specification sjekkOmPeriodeGjelderMorsReserverteUker(Ruleset rs) { - return rs.hvisRegel(SjekkOmPeriodenInnenforUkerReservertMor.ID, "Innenfor mors reserverte uker") - .hvis(new SjekkOmPeriodenInnenforUkerReservertMor(), sjekkOmPeriodeErOpprettetAvFødselshendelse(rs)) - .ellers(Manuellbehandling.opprett("UT1095", null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false)); + private Specification sjekkOmPeriodeGjelderMorsReserverteUker( + Ruleset rs) { + return rs.hvisRegel( + SjekkOmPeriodenInnenforUkerReservertMor.ID, "Innenfor mors reserverte uker") + .hvis( + new SjekkOmPeriodenInnenforUkerReservertMor(), + sjekkOmPeriodeErOpprettetAvFødselshendelse(rs)) + .ellers( + Manuellbehandling.opprett( + "UT1095", + null, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + true, + false)); } - private Specification sjekkOmPeriodeErOpprettetAvFødselshendelse(Ruleset rs) { - return rs.hvisRegel(SjekkOmPeriodenOpprettetAvFødselshendelse.ID, SjekkOmPeriodenOpprettetAvFødselshendelse.BESKRIVELSE) - .hvis(new SjekkOmPeriodenOpprettetAvFødselshendelse(), Oppfylt.opprett("UT1097", InnvilgetÅrsak.MSP_INNVILGET, true, true)) - .ellers(IkkeOppfylt.opprett("UT1094", IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL, true, false)); + private Specification sjekkOmPeriodeErOpprettetAvFødselshendelse( + Ruleset rs) { + return rs.hvisRegel( + SjekkOmPeriodenOpprettetAvFødselshendelse.ID, + SjekkOmPeriodenOpprettetAvFødselshendelse.BESKRIVELSE) + .hvis( + new SjekkOmPeriodenOpprettetAvFødselshendelse(), + Oppfylt.opprett("UT1097", InnvilgetÅrsak.MSP_INNVILGET, true, true)) + .ellers( + IkkeOppfylt.opprett( + "UT1094", + IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL, + true, + false)); } - } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/M\303\270drekvoteDelregel.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/M\303\270drekvoteDelregel.java" index 1bd0dcc6..e4204b45 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/M\303\270drekvoteDelregel.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/M\303\270drekvoteDelregel.java" @@ -31,29 +31,30 @@ import no.nav.fpsak.nare.specification.Specification; /** - * Delregel innenfor regeltjenesten FastsettePeriodeRegel som fastsetter uttakperioder med mødrekvote. - *

- * Utfall definisjoner:
- *

- * Utfall AVSLÅTT:
+ * Delregel innenfor regeltjenesten FastsettePeriodeRegel som fastsetter uttakperioder med + * mødrekvote. + * + *

Utfall definisjoner:
+ * + *

Utfall AVSLÅTT:
* - Det er ikke nok dager igjen på stønadskontoen for mødrekvote.
* - Perioden starter før familiehendelsen (termin/fødsel).
- *

- * Utfall INNVILGET:
+ * + *

Utfall INNVILGET:
* - Perioden er etter familiehendelse og det er nok dager på stønadskontoen for mødrekvote.
- *

- * UTFALL UGYLDIG_UTSETTELSE:
+ * + *

UTFALL UGYLDIG_UTSETTELSE:
* - Perioden forbeholdt mor etter fødsel er ikke søkt om og har ikke gyldig utsettelsesgrunn.
- *

- * UTFALL GYLDIG_UTSETTELSE:
+ * + *

UTFALL GYLDIG_UTSETTELSE:
* - Perioden forbeholdt mor etter fødsel er ikke søkt om men mor har gyldig utsettelsesgrunn.
*/ - @RuleDocumentation(value = MødrekvoteDelregel.ID) public class MødrekvoteDelregel implements RuleService { public static final String ID = "FP_VK 10"; - private static final String RESERVERT_MØDREKVOTE = "Er perioden innenfor dager reservert for mødrekvote etter fødsel?"; + private static final String RESERVERT_MØDREKVOTE = + "Er perioden innenfor dager reservert for mødrekvote etter fødsel?"; private final Ruleset rs = new Ruleset<>(); @@ -63,134 +64,225 @@ public class MødrekvoteDelregel implements RuleService getSpecification() { - return rs.hvisRegel(SjekkOmOppholdKvoteAnnenForelder.ID, "Er det søkt om opphold av mødrekvoten?") - .hvis(new SjekkOmOppholdKvoteAnnenForelder(), sjekkOmNoenDisponibleDagerNode()) - .ellers(sjekkOmMor()); + return rs.hvisRegel( + SjekkOmOppholdKvoteAnnenForelder.ID, + "Er det søkt om opphold av mødrekvoten?") + .hvis(new SjekkOmOppholdKvoteAnnenForelder(), sjekkOmNoenDisponibleDagerNode()) + .ellers(sjekkOmMor()); } private Specification sjekkOmNoenDisponibleDagerNode() { - return rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, "Er det noen disponible stønadsdager på mødrekvote?") - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), Oppfylt.opprettForOppholds("UT1261", true, false)) - .ellers(Manuellbehandling.opprett("UT1260", null, Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER, true, false)); + return rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + "Er det noen disponible stønadsdager på mødrekvote?") + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + Oppfylt.opprettForOppholds("UT1261", true, false)) + .ellers( + Manuellbehandling.opprett( + "UT1260", + null, + Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER, + true, + false)); } private Specification sjekkOmMor() { return rs.hvisRegel(SjekkOmSøkerErMor.ID, SjekkOmSøkerErMor.BESKRIVELSE) - .hvis(new SjekkOmSøkerErMor(), sjekkOmFødsel()) - .ellers(sjekkOmFarSøktOmOverføringAvMødrekvote()); + .hvis(new SjekkOmSøkerErMor(), sjekkOmFødsel()) + .ellers(sjekkOmFarSøktOmOverføringAvMødrekvote()); } private Specification sjekkOmFødsel() { - return rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmPeriodeStarterFørFamiliehendelse()) - .ellers(sjekkOmPeriodeStarterFørOmsorgsovertakelse()); + return rs.hvisRegel( + SjekkOmSøknadGjelderTerminEllerFødsel.ID, + SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + sjekkOmPeriodeStarterFørFamiliehendelse()) + .ellers(sjekkOmPeriodeStarterFørOmsorgsovertakelse()); } private Specification sjekkOmPeriodeStarterFørOmsorgsovertakelse() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, "Starter perioden før omsorgsovertakelse?") - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), - IkkeOppfylt.opprett("UT1230", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) - .ellers(sjekkOmSøkerHarOmsorgForBarnet()); + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + "Starter perioden før omsorgsovertakelse?") + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + IkkeOppfylt.opprett( + "UT1230", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) + .ellers(sjekkOmSøkerHarOmsorgForBarnet()); } private Specification sjekkOmOverføringPgaInnleggelse() { - return rs.hvisRegel(SjekkOmOverføringPgaInnleggelse.ID, "Er det søkt om overføring som følge av innleggelse på institusjon?") - .hvis(new SjekkOmOverføringPgaInnleggelse(), sjekkOmGyldigOverføringPgaInnleggelse()) - .ellers(sjekkOmOverføringPgaSykdomSkade()); + return rs.hvisRegel( + SjekkOmOverføringPgaInnleggelse.ID, + "Er det søkt om overføring som følge av innleggelse på institusjon?") + .hvis( + new SjekkOmOverføringPgaInnleggelse(), + sjekkOmGyldigOverføringPgaInnleggelse()) + .ellers(sjekkOmOverføringPgaSykdomSkade()); } private Specification sjekkOmOverføringPgaSykdomSkade() { - return rs.hvisRegel(SjekkOmOverføringPgaSykdomSkade.ID, "Er det søkt om overføring som følge av sykdom/skade?") - .hvis(new SjekkOmOverføringPgaSykdomSkade(), sjekkOmGyldigOverføringPgaSykdomSkade()) - .ellers(sjekkOmOverføringPgaAleneomsorgEllerIkkeRett()); + return rs.hvisRegel( + SjekkOmOverføringPgaSykdomSkade.ID, + "Er det søkt om overføring som følge av sykdom/skade?") + .hvis( + new SjekkOmOverføringPgaSykdomSkade(), + sjekkOmGyldigOverføringPgaSykdomSkade()) + .ellers(sjekkOmOverføringPgaAleneomsorgEllerIkkeRett()); } private Specification sjekkOmOverføringPgaAleneomsorgEllerIkkeRett() { - return rs.hvisRegel(SjekkOmOverføringPgaAleneomsorg.ID, - "Er det søkt om overføring som følge av aleneomsorg eller annen forelder ikke har rett?") - .hvis(new SjekkOmOverføringPgaAleneomsorg(), sjekkOmGyldigOverføringPgaAleneomsorg()) - .ellers(sjekkOmGyldigOverføringPgaIkkeRett()); + return rs.hvisRegel( + SjekkOmOverføringPgaAleneomsorg.ID, + "Er det søkt om overføring som følge av aleneomsorg eller annen forelder ikke har rett?") + .hvis( + new SjekkOmOverføringPgaAleneomsorg(), + sjekkOmGyldigOverføringPgaAleneomsorg()) + .ellers(sjekkOmGyldigOverføringPgaIkkeRett()); } private Specification sjekkOmGyldigOverføringPgaInnleggelse() { - return rs.hvisRegel(SjekkOmGyldigOverføringPgaInnleggelse.ID, - "Er det avklart at overføring av kvoten er gyldig grunn av innleggelse på institusjon?") - .hvis(new SjekkOmGyldigOverføringPgaInnleggelse(), sjekkOmFødsel()) - .ellers(IkkeOppfylt.opprett("UT1016", IkkeOppfyltÅrsak.DEN_ANDRE_PART_INNLEGGELSE_IKKE_OPPFYLT, false, false)); + return rs.hvisRegel( + SjekkOmGyldigOverføringPgaInnleggelse.ID, + "Er det avklart at overføring av kvoten er gyldig grunn av innleggelse på institusjon?") + .hvis(new SjekkOmGyldigOverføringPgaInnleggelse(), sjekkOmFødsel()) + .ellers( + IkkeOppfylt.opprett( + "UT1016", + IkkeOppfyltÅrsak.DEN_ANDRE_PART_INNLEGGELSE_IKKE_OPPFYLT, + false, + false)); } private Specification sjekkOmGyldigOverføringPgaSykdomSkade() { - return rs.hvisRegel(SjekkOmGyldigOverføringPgaSykdomSkade.ID, "Er det avklart at overføring av kvoten er gyldig grunn av sykdom/skade?") - .hvis(new SjekkOmGyldigOverføringPgaSykdomSkade(), sjekkOmFødsel()) - .ellers(IkkeOppfylt.opprett("UT1017", IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, false, false)); + return rs.hvisRegel( + SjekkOmGyldigOverføringPgaSykdomSkade.ID, + "Er det avklart at overføring av kvoten er gyldig grunn av sykdom/skade?") + .hvis(new SjekkOmGyldigOverføringPgaSykdomSkade(), sjekkOmFødsel()) + .ellers( + IkkeOppfylt.opprett( + "UT1017", + IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, + false, + false)); } private Specification sjekkOmGyldigOverføringPgaAleneomsorg() { - return rs.hvisRegel(SjekkOmGyldigOverføringPgaAleneomsorg.ID, "Er det avklart at overføring av kvoten er gyldig på grunn av aleneomsorg?") - .hvis(new SjekkOmGyldigOverføringPgaAleneomsorg(), sjekkOmFødsel()) - .ellers(IkkeOppfylt.opprett("UT1294", IkkeOppfyltÅrsak.ALENEOMSORG_IKKE_OPPFYLT, false, false)); + return rs.hvisRegel( + SjekkOmGyldigOverføringPgaAleneomsorg.ID, + "Er det avklart at overføring av kvoten er gyldig på grunn av aleneomsorg?") + .hvis(new SjekkOmGyldigOverføringPgaAleneomsorg(), sjekkOmFødsel()) + .ellers( + IkkeOppfylt.opprett( + "UT1294", IkkeOppfyltÅrsak.ALENEOMSORG_IKKE_OPPFYLT, false, false)); } private Specification sjekkOmGyldigOverføringPgaIkkeRett() { - return rs.hvisRegel(SjekkOmGyldigOverføringPgaIkkeRett.ID, - "Er det avklart at overføring av kvoten er gyldig på grunn av annen forelder ikke har rett?") - .hvis(new SjekkOmGyldigOverføringPgaIkkeRett(), sjekkOmFødsel()) - .ellers(IkkeOppfylt.opprett("UT1295", IkkeOppfyltÅrsak.DEN_ANDRE_PART_IKKE_RETT_IKKE_OPPFYLT, false, false)); + return rs.hvisRegel( + SjekkOmGyldigOverføringPgaIkkeRett.ID, + "Er det avklart at overføring av kvoten er gyldig på grunn av annen forelder ikke har rett?") + .hvis(new SjekkOmGyldigOverføringPgaIkkeRett(), sjekkOmFødsel()) + .ellers( + IkkeOppfylt.opprett( + "UT1295", + IkkeOppfyltÅrsak.DEN_ANDRE_PART_IKKE_RETT_IKKE_OPPFYLT, + false, + false)); } private Specification sjekkOmFarSøktOmOverføringAvMødrekvote() { - return rs.hvisRegel(SjekkOmSøktOmOverføringAvKvote.ID, "Har far søkt om overføring av mødrekvote?") - .hvis(new SjekkOmSøktOmOverføringAvKvote(), sjekkOmOverføringPgaInnleggelse()) - .ellers(Manuellbehandling.opprett("UT1015", IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, - Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false)); + return rs.hvisRegel( + SjekkOmSøktOmOverføringAvKvote.ID, + "Har far søkt om overføring av mødrekvote?") + .hvis(new SjekkOmSøktOmOverføringAvKvote(), sjekkOmOverføringPgaInnleggelse()) + .ellers( + Manuellbehandling.opprett( + "UT1015", + IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + true, + false)); } public Specification sjekkOmPeriodeStarterFørFamiliehendelse() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, "Starter perioden før familiehendelse?") - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), - Manuellbehandling.opprett("UT1001", null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false)) - .ellers(sjekkOmPeriodeInnenfor6ukerEtterFødsel()); + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + "Starter perioden før familiehendelse?") + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + Manuellbehandling.opprett( + "UT1001", + null, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, + true, + false)) + .ellers(sjekkOmPeriodeInnenfor6ukerEtterFødsel()); } private Specification sjekkOmPeriodeInnenfor6ukerEtterFødsel() { return rs.hvisRegel(SjekkOmPeriodenInnenforUkerReservertMor.ID, RESERVERT_MØDREKVOTE) - .hvis(new SjekkOmPeriodenInnenforUkerReservertMor(), sjekkOmSøkerErMor()) - .ellers(sjekkOmSøkerHarOmsorgForBarnet()); + .hvis(new SjekkOmPeriodenInnenforUkerReservertMor(), sjekkOmSøkerErMor()) + .ellers(sjekkOmSøkerHarOmsorgForBarnet()); } private Specification sjekkOmSøkerErMor() { return rs.hvisRegel(SjekkOmSøkerErMor.ID, SjekkOmSøkerErMor.BESKRIVELSE) - .hvis(new SjekkOmSøkerErMor(), sjekkOmGraderingIPerioden()) - .ellers(sjekkOmSøkerHarOmsorgForBarnet()); + .hvis(new SjekkOmSøkerErMor(), sjekkOmGraderingIPerioden()) + .ellers(sjekkOmSøkerHarOmsorgForBarnet()); } private Specification sjekkOmSøkerHarOmsorgForBarnet() { return rs.hvisRegel(SjekkOmOmsorgHelePerioden.ID, SjekkOmOmsorgHelePerioden.BESKRIVELSE) - .hvis(new SjekkOmOmsorgHelePerioden(), sjekkOmNoenDisponibleDager()) - .ellers(IkkeOppfylt.opprett("UT1006", IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG, true, false)); + .hvis(new SjekkOmOmsorgHelePerioden(), sjekkOmNoenDisponibleDager()) + .ellers( + IkkeOppfylt.opprett( + "UT1006", IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG, true, false)); } private Specification sjekkOmGraderingIPerioden() { return rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), Oppfylt.opprettMedAvslåttGradering("UT1008", InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE, - GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING, true)) - .ellers(sjekkOmNoenDisponibleDager()); + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprettMedAvslåttGradering( + "UT1008", + InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE, + GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING, + true)) + .ellers(sjekkOmNoenDisponibleDager()); } private Specification sjekkOmNoenDisponibleDager() { - var sjekkOmSøkerErMor = rs.hvisRegel(SjekkOmSøkerErMor.ID, SjekkOmSøkerErMor.BESKRIVELSE) - .hvis(new SjekkOmSøkerErMor(), erDetGraderingIPeriode2()) - .ellers(new OverføringDelregel().getSpecification()); + var sjekkOmSøkerErMor = + rs.hvisRegel(SjekkOmSøkerErMor.ID, SjekkOmSøkerErMor.BESKRIVELSE) + .hvis(new SjekkOmSøkerErMor(), erDetGraderingIPeriode2()) + .ellers(new OverføringDelregel().getSpecification()); - return rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, "Er det noen disponible stønadsdager på mødrekvote?") - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), sjekkOmSøkerErMor) - .ellers( - Manuellbehandling.opprett("UT1002", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.STØNADSKONTO_TOM, true, false)); + return rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + "Er det noen disponible stønadsdager på mødrekvote?") + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + sjekkOmSøkerErMor) + .ellers( + Manuellbehandling.opprett( + "UT1002", + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + true, + false)); } private ConditionalOrSpecification erDetGraderingIPeriode2() { return rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), Oppfylt.opprett("UT1221", InnvilgetÅrsak.GRADERING_KVOTE_ELLER_OVERFØRT_KVOTE, true)) - .ellers(Oppfylt.opprett("UT1007", InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE, true)); + .hvis( + new SjekkOmGradertPeriode(), + Oppfylt.opprett( + "UT1221", + InnvilgetÅrsak.GRADERING_KVOTE_ELLER_OVERFØRT_KVOTE, + true)) + .ellers(Oppfylt.opprett("UT1007", InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE, true)); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/Overf\303\270ringDelregel.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/Overf\303\270ringDelregel.java" index bfc7e1fa..5e1f3364 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/Overf\303\270ringDelregel.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/Overf\303\270ringDelregel.java" @@ -11,16 +11,16 @@ import no.nav.fpsak.nare.specification.Specification; /** - * Delregel innenfor regeltjenesten FastsettePeriodeRegel som fastsetter uttakperioder som inneholder delregelen for - * innvilgelse av overføring av mødrekvote og fedrekvote. - *

- * Utfall definisjoner:
- *

- * Utfall INNVILGET:
+ * Delregel innenfor regeltjenesten FastsettePeriodeRegel som fastsetter uttakperioder som + * inneholder delregelen for innvilgelse av overføring av mødrekvote og fedrekvote. + * + *

Utfall definisjoner:
+ * + *

Utfall INNVILGET:
* - Perioden er avklart at har gyldig grunn for overføring.
+ * *

*/ - public class OverføringDelregel implements RuleService { private final Ruleset rs = new Ruleset<>(); @@ -31,21 +31,36 @@ public class OverføringDelregel implements RuleService getSpecification() { - return rs.hvisRegel(SjekkOmOverføringPgaInnleggelse.ID, "Er det søkt om overføring som følge av innleggelse på institusjon?") - .hvis(new SjekkOmOverføringPgaInnleggelse(), Oppfylt.opprett("UT1173", InnvilgetÅrsak.OVERFØRING_ANNEN_PART_INNLAGT, true)) - .ellers(sjekkOmOverføringPgaSykdomSkade()); + return rs.hvisRegel( + SjekkOmOverføringPgaInnleggelse.ID, + "Er det søkt om overføring som følge av innleggelse på institusjon?") + .hvis( + new SjekkOmOverføringPgaInnleggelse(), + Oppfylt.opprett( + "UT1173", InnvilgetÅrsak.OVERFØRING_ANNEN_PART_INNLAGT, true)) + .ellers(sjekkOmOverføringPgaSykdomSkade()); } private Specification sjekkOmOverføringPgaSykdomSkade() { - return rs.hvisRegel(SjekkOmOverføringPgaSykdomSkade.ID, "Er det søkt om overføring som følge av sykdom/skade?") - .hvis(new SjekkOmOverføringPgaSykdomSkade(), Oppfylt.opprett("UT1172", InnvilgetÅrsak.OVERFØRING_ANNEN_PART_SYKDOM_SKADE, true)) - .ellers(sjekkOmOverføringPgaAleneomsorgEllerIkkeRett()); + return rs.hvisRegel( + SjekkOmOverføringPgaSykdomSkade.ID, + "Er det søkt om overføring som følge av sykdom/skade?") + .hvis( + new SjekkOmOverføringPgaSykdomSkade(), + Oppfylt.opprett( + "UT1172", InnvilgetÅrsak.OVERFØRING_ANNEN_PART_SYKDOM_SKADE, true)) + .ellers(sjekkOmOverføringPgaAleneomsorgEllerIkkeRett()); } private Specification sjekkOmOverføringPgaAleneomsorgEllerIkkeRett() { - return rs.hvisRegel(SjekkOmOverføringPgaAleneomsorg.ID, - "Er det søkt om overføring som følge av aleneomsorg eller annen forelder ikke har rett?") - .hvis(new SjekkOmOverføringPgaAleneomsorg(), Oppfylt.opprett("UT1174", InnvilgetÅrsak.OVERFØRING_ALENEOMSORG, true)) - .ellers(Oppfylt.opprett("UT1175", InnvilgetÅrsak.OVERFØRING_ANNEN_PART_IKKE_RETT, true)); + return rs.hvisRegel( + SjekkOmOverføringPgaAleneomsorg.ID, + "Er det søkt om overføring som følge av aleneomsorg eller annen forelder ikke har rett?") + .hvis( + new SjekkOmOverføringPgaAleneomsorg(), + Oppfylt.opprett("UT1174", InnvilgetÅrsak.OVERFØRING_ALENEOMSORG, true)) + .ellers( + Oppfylt.opprett( + "UT1175", InnvilgetÅrsak.OVERFØRING_ANNEN_PART_IKKE_RETT, true)); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/StebarnsadopsjonDelRegel.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/StebarnsadopsjonDelRegel.java index baf118bc..1363771c 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/StebarnsadopsjonDelRegel.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/StebarnsadopsjonDelRegel.java @@ -17,7 +17,6 @@ @RuleDocumentation(value = StebarnsadopsjonDelRegel.ID) public class StebarnsadopsjonDelRegel implements RuleService { - public static final String ID = "FP_VK 16.1"; private final Ruleset rs = new Ruleset<>(); @@ -28,29 +27,56 @@ public StebarnsadopsjonDelRegel() { @Override public Specification getSpecification() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, "Starter perioden før omsorgsovertakelse?") - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), - IkkeOppfylt.opprett("UT1285", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) - .ellers(sjekkOmSøkerHarOmsorg()); + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + "Starter perioden før omsorgsovertakelse?") + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + IkkeOppfylt.opprett( + "UT1285", IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE, false, false)) + .ellers(sjekkOmSøkerHarOmsorg()); } private Specification sjekkOmSøkerHarOmsorg() { return rs.hvisRegel(SjekkOmOmsorgHelePerioden.ID, "Har søker omsorg for barnet?") - .hvis(new SjekkOmOmsorgHelePerioden(), sjekkOmNoenDisponibleDager()) - .ellers(IkkeOppfylt.opprett("UT1240", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); + .hvis(new SjekkOmOmsorgHelePerioden(), sjekkOmNoenDisponibleDager()) + .ellers( + IkkeOppfylt.opprett( + "UT1240", IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG, true, false)); } - private Specification sjekkOmNoenDisponibleDager() { - return rs.hvisRegel(SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, "Er det noen disponible stønadsdager på mødrekvote?") - .hvis(new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), sjekkOmGraderingIPerioden()) - .ellers( - Manuellbehandling.opprett("UT1244", IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.STØNADSKONTO_TOM, true, false)); + return rs.hvisRegel( + SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto.ID, + "Er det noen disponible stønadsdager på mødrekvote?") + .hvis( + new SjekkOmTilgjengeligeDagerPåNoenAktiviteteneForSøktStønadskonto(), + sjekkOmGraderingIPerioden()) + .ellers( + Manuellbehandling.opprett( + "UT1244", + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.STØNADSKONTO_TOM, + true, + false)); } private Specification sjekkOmGraderingIPerioden() { return rs.hvisRegel(SjekkOmGradertPeriode.ID, SjekkOmGradertPeriode.BESKRIVELSE) - .hvis(new SjekkOmGradertPeriode(), Manuellbehandling.opprett("UT1242", null, Manuellbehandlingårsak.STEBARNSADOPSJON, true, false)) - .ellers(Manuellbehandling.opprett("UT1241", null, Manuellbehandlingårsak.STEBARNSADOPSJON, true, false)); + .hvis( + new SjekkOmGradertPeriode(), + Manuellbehandling.opprett( + "UT1242", + null, + Manuellbehandlingårsak.STEBARNSADOPSJON, + true, + false)) + .ellers( + Manuellbehandling.opprett( + "UT1241", + null, + Manuellbehandlingårsak.STEBARNSADOPSJON, + true, + false)); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/UtsettelseDelregel.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/UtsettelseDelregel.java index 83134949..70d31dd6 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/UtsettelseDelregel.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/UtsettelseDelregel.java @@ -42,22 +42,35 @@ public UtsettelseDelregel() { @Override public Specification getSpecification() { - return rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmUtsettelsePgaBarnInnlagtPrematur()) - .ellers(sjekkOmPeriodeErFørFamiliehendelseVedAdopsjon()); - } - - private Specification sjekkOmPeriodeErFørFamiliehendelseVedAdopsjon() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, SjekkOmPeriodenStarterFørFamiliehendelse.BESKRIVELSE) - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), Manuellbehandling.opprett("UT1350", IkkeOppfyltÅrsak.UTSETTELSE_FØR_TERMIN_FØDSEL, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, false, false)) - .ellers(sjekkOmBareFarHarRett()); + return rs.hvisRegel( + SjekkOmSøknadGjelderTerminEllerFødsel.ID, + SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + sjekkOmUtsettelsePgaBarnInnlagtPrematur()) + .ellers(sjekkOmPeriodeErFørFamiliehendelseVedAdopsjon()); + } + + private Specification + sjekkOmPeriodeErFørFamiliehendelseVedAdopsjon() { + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + SjekkOmPeriodenStarterFørFamiliehendelse.BESKRIVELSE) + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + Manuellbehandling.opprett( + "UT1350", + IkkeOppfyltÅrsak.UTSETTELSE_FØR_TERMIN_FØDSEL, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + false, + false)) + .ellers(sjekkOmBareFarHarRett()); } private Specification sjekkOmBareFarHarRett() { return rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) - .hvis(new SjekkOmBareFarHarRett(), sjekkOmMorErIAktivitet()) - .ellers(innvilgUT1351()); + .hvis(new SjekkOmBareFarHarRett(), sjekkOmMorErIAktivitet()) + .ellers(innvilgUT1351()); } private static FastsettePeriodeUtfall innvilgUT1351() { @@ -66,93 +79,156 @@ private static FastsettePeriodeUtfall innvilgUT1351() { private Specification sjekkOmMorErIAktivitet() { return rs.hvisRegel(SjekkOmMorErIAktivitet.ID, SjekkOmMorErIAktivitet.BESKRIVELSE) - .hvis(new SjekkOmMorErIAktivitet(), Oppfylt.opprett("UT1352", InnvilgetÅrsak.UTSETTELSE_GYLDIG_BFR_AKT_KRAV_OPPFYLT, false, false)) - .ellers(new AvslagAktivitetskravDelregel().getSpecification()); + .hvis( + new SjekkOmMorErIAktivitet(), + Oppfylt.opprett( + "UT1352", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_BFR_AKT_KRAV_OPPFYLT, + false, + false)) + .ellers(new AvslagAktivitetskravDelregel().getSpecification()); } private Specification sjekkOmTidsperiodeForbeholdtMor() { - return rs.hvisRegel(SjekkOmTidsperiodeForbeholdtMor.ID, SjekkOmTidsperiodeForbeholdtMor.BESKRIVELSE) - .hvis(new SjekkOmTidsperiodeForbeholdtMor(), sjekkOmSykdomSkade()) - .ellers(sjekkOmAleneomsorg()); + return rs.hvisRegel( + SjekkOmTidsperiodeForbeholdtMor.ID, + SjekkOmTidsperiodeForbeholdtMor.BESKRIVELSE) + .hvis(new SjekkOmTidsperiodeForbeholdtMor(), sjekkOmSykdomSkade()) + .ellers(sjekkOmAleneomsorg()); } private Specification sjekkOmAleneomsorg() { return rs.hvisRegel(SjekkOmErAleneomsorg.ID, SjekkOmErAleneomsorg.BESKRIVELSE) - .hvis(new SjekkOmErAleneomsorg(), innvilgUT1351()) - .ellers(sjekkOmBareFarHarRett()); + .hvis(new SjekkOmErAleneomsorg(), innvilgUT1351()) + .ellers(sjekkOmBareFarHarRett()); } private Specification sjekkOmSykdomSkade() { - var erSøkerSykErDokumentert = rs.hvisRegel(SjekkOmSykdomSkade.ID, SjekkOmSykdomSkade.BESKRIVELSE) - .hvis(new SjekkOmSykdomSkade(), Oppfylt.opprett("UT1353", InnvilgetÅrsak.UTSETTELSE_GYLDIG_SEKS_UKER_FRI_SYKDOM, false, false)) - .ellers(IkkeOppfylt.opprett("UT1354", IkkeOppfyltÅrsak.SØKERS_SYKDOM_SKADE_SEKS_UKER_IKKE_OPPFYLT, true, false)); - return rs.hvisRegel(SjekkOmUtsettelsePgaSykdomSkade.ID, SjekkOmUtsettelsePgaSykdomSkade.BESKRIVELSE) - .hvis(new SjekkOmUtsettelsePgaSykdomSkade(), erSøkerSykErDokumentert) - .ellers(sjekkOmSøkersInnleggelse()); + var erSøkerSykErDokumentert = + rs.hvisRegel(SjekkOmSykdomSkade.ID, SjekkOmSykdomSkade.BESKRIVELSE) + .hvis( + new SjekkOmSykdomSkade(), + Oppfylt.opprett( + "UT1353", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_SEKS_UKER_FRI_SYKDOM, + false, + false)) + .ellers( + IkkeOppfylt.opprett( + "UT1354", + IkkeOppfyltÅrsak.SØKERS_SYKDOM_SKADE_SEKS_UKER_IKKE_OPPFYLT, + true, + false)); + return rs.hvisRegel( + SjekkOmUtsettelsePgaSykdomSkade.ID, + SjekkOmUtsettelsePgaSykdomSkade.BESKRIVELSE) + .hvis(new SjekkOmUtsettelsePgaSykdomSkade(), erSøkerSykErDokumentert) + .ellers(sjekkOmSøkersInnleggelse()); } private Specification sjekkOmSøkersInnleggelse() { - var erSøkerInnlagtErDokumentert = rs.hvisRegel(SjekkOmSøkerInnlagt.ID, SjekkOmSøkerInnlagt.BESKRIVELSE) - .hvis(new SjekkOmSøkerInnlagt(), Oppfylt.opprett("UT1355", InnvilgetÅrsak.UTSETTELSE_GYLDIG_SEKS_UKER_INNLEGGELSE, false, false)) - .ellers(IkkeOppfylt.opprett("UT1356", IkkeOppfyltÅrsak.SØKERS_INNLEGGELSE_SEKS_UKER_IKKE_OPPFYLT, true, false)); - return rs.hvisRegel(SjekkOmUtsettelsePgaSøkerInnleggelse.ID, SjekkOmUtsettelsePgaSøkerInnleggelse.BESKRIVELSE) - .hvis(new SjekkOmUtsettelsePgaSøkerInnleggelse(), erSøkerInnlagtErDokumentert) - .ellers(sjekkOmUtsettelsePgaBarnInnlagt()); + var erSøkerInnlagtErDokumentert = + rs.hvisRegel(SjekkOmSøkerInnlagt.ID, SjekkOmSøkerInnlagt.BESKRIVELSE) + .hvis( + new SjekkOmSøkerInnlagt(), + Oppfylt.opprett( + "UT1355", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_SEKS_UKER_INNLEGGELSE, + false, + false)) + .ellers( + IkkeOppfylt.opprett( + "UT1356", + IkkeOppfyltÅrsak.SØKERS_INNLEGGELSE_SEKS_UKER_IKKE_OPPFYLT, + true, + false)); + return rs.hvisRegel( + SjekkOmUtsettelsePgaSøkerInnleggelse.ID, + SjekkOmUtsettelsePgaSøkerInnleggelse.BESKRIVELSE) + .hvis(new SjekkOmUtsettelsePgaSøkerInnleggelse(), erSøkerInnlagtErDokumentert) + .ellers(sjekkOmUtsettelsePgaBarnInnlagt()); } private Specification sjekkOmUtsettelsePgaBarnInnlagt() { - var varBarnetInnlagtSjekk = rs.hvisRegel(SjekkOmBarnInnlagt.ID, SjekkOmBarnInnlagt.BESKRIVELSE) - .hvis(new SjekkOmBarnInnlagt(), Oppfylt.opprett("UT1359", InnvilgetÅrsak.UTSETTELSE_GYLDIG_SEKS_UKER_FRI_BARN_INNLAGT, false, false)) - .ellers(IkkeOppfylt.opprett("UT1358", IkkeOppfyltÅrsak.BARNETS_INNLEGGELSE_SEKS_UKER_IKKE_OPPFYLT, true, false)); - - return rs.hvisRegel(SjekkOmUtsettelsePgaBarnetsInnleggelse.ID, SjekkOmUtsettelsePgaBarnetsInnleggelse.BESKRIVELSE) - .hvis(new SjekkOmUtsettelsePgaBarnetsInnleggelse(), varBarnetInnlagtSjekk) - .ellers(sjekkOmSøkerErMor()); + var varBarnetInnlagtSjekk = + rs.hvisRegel(SjekkOmBarnInnlagt.ID, SjekkOmBarnInnlagt.BESKRIVELSE) + .hvis( + new SjekkOmBarnInnlagt(), + Oppfylt.opprett( + "UT1359", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_SEKS_UKER_FRI_BARN_INNLAGT, + false, + false)) + .ellers( + IkkeOppfylt.opprett( + "UT1358", + IkkeOppfyltÅrsak.BARNETS_INNLEGGELSE_SEKS_UKER_IKKE_OPPFYLT, + true, + false)); + + return rs.hvisRegel( + SjekkOmUtsettelsePgaBarnetsInnleggelse.ID, + SjekkOmUtsettelsePgaBarnetsInnleggelse.BESKRIVELSE) + .hvis(new SjekkOmUtsettelsePgaBarnetsInnleggelse(), varBarnetInnlagtSjekk) + .ellers(sjekkOmSøkerErMor()); } private Specification sjekkOmSøkerErMor() { return rs.hvisRegel(SjekkOmSøkerErMor.ID, SjekkOmSøkerErMor.BESKRIVELSE) - .hvis(new SjekkOmSøkerErMor(), manuellUT1357()) - .ellers(sjekkOmFarHarDagerRundtFødsel()); + .hvis(new SjekkOmSøkerErMor(), manuellUT1357()) + .ellers(sjekkOmFarHarDagerRundtFødsel()); } private Specification sjekkOmFarHarDagerRundtFødsel() { - return rs.hvisRegel(SjekkOmFarHarDagerRundtFødsel.ID, SjekkOmFarHarDagerRundtFødsel.BESKRIVELSE) - .hvis(new SjekkOmFarHarDagerRundtFødsel(), sjekkOmFriUtsettelse()) - .ellers(manuellUT1357()); + return rs.hvisRegel( + SjekkOmFarHarDagerRundtFødsel.ID, SjekkOmFarHarDagerRundtFødsel.BESKRIVELSE) + .hvis(new SjekkOmFarHarDagerRundtFødsel(), sjekkOmFriUtsettelse()) + .ellers(manuellUT1357()); } private Specification sjekkOmFriUtsettelse() { return rs.hvisRegel(SjekkOmFriUtsettelse.ID, SjekkOmFriUtsettelse.BESKRIVELSE) - .hvis(new SjekkOmFriUtsettelse(), Oppfylt.opprett("UT1361", InnvilgetÅrsak.UTSETTELSE_GYLDIG, false, false)) - .ellers(manuellUT1357()); + .hvis( + new SjekkOmFriUtsettelse(), + Oppfylt.opprett("UT1361", InnvilgetÅrsak.UTSETTELSE_GYLDIG, false, false)) + .ellers(manuellUT1357()); } private FastsettePeriodeUtfall manuellUT1357() { - return Manuellbehandling.opprett("UT1357", null, Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, false); + return Manuellbehandling.opprett( + "UT1357", + null, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false); } private Specification sjekkOmUtsettelsePgaBarnInnlagtPrematur() { - return rs.hvisRegel(SjekkOmUtsettelsePgaBarnetsInnleggelse.ID, SjekkOmUtsettelsePgaBarnetsInnleggelse.BESKRIVELSE) - .hvis(new SjekkOmUtsettelsePgaBarnetsInnleggelse(), sjekkOmFødselFørUke33()) - .ellers(sjekkOmTidsperiodeForbeholdtMor()); + return rs.hvisRegel( + SjekkOmUtsettelsePgaBarnetsInnleggelse.ID, + SjekkOmUtsettelsePgaBarnetsInnleggelse.BESKRIVELSE) + .hvis(new SjekkOmUtsettelsePgaBarnetsInnleggelse(), sjekkOmFødselFørUke33()) + .ellers(sjekkOmTidsperiodeForbeholdtMor()); } private Specification sjekkOmFødselFørUke33() { return rs.hvisRegel(SjekkOmFødselErFørUke33.ID, SjekkOmFødselErFørUke33.BESKRIVELSE) - .hvis(new SjekkOmFødselErFørUke33(), sjekkOmPeriodenErFørTermin()) - .ellers(sjekkOmTidsperiodeForbeholdtMor()); + .hvis(new SjekkOmFødselErFørUke33(), sjekkOmPeriodenErFørTermin()) + .ellers(sjekkOmTidsperiodeForbeholdtMor()); } private Specification sjekkOmPeriodenErFørTermin() { return rs.hvisRegel(SjekkOmPeriodeErFørTermin.ID, SjekkOmPeriodeErFørTermin.BESKRIVELSE) - .hvis(new SjekkOmPeriodeErFørTermin(), sjekkOmBarnetVarInnlagtPrematur()) - .ellers(sjekkOmTidsperiodeForbeholdtMor()); + .hvis(new SjekkOmPeriodeErFørTermin(), sjekkOmBarnetVarInnlagtPrematur()) + .ellers(sjekkOmTidsperiodeForbeholdtMor()); } private Specification sjekkOmBarnetVarInnlagtPrematur() { return rs.hvisRegel(SjekkOmBarnInnlagt.ID, SjekkOmBarnInnlagt.BESKRIVELSE) - .hvis(new SjekkOmBarnInnlagt(), IkkeOppfylt.opprett("UT1360", IkkeOppfyltÅrsak.FRATREKK_PLEIEPENGER, true, false)) - .ellers(sjekkOmTidsperiodeForbeholdtMor()); + .hvis( + new SjekkOmBarnInnlagt(), + IkkeOppfylt.opprett( + "UT1360", IkkeOppfyltÅrsak.FRATREKK_PLEIEPENGER, true, false)) + .ellers(sjekkOmTidsperiodeForbeholdtMor()); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/UtsettelseDelregelSammenhengendeUttak.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/UtsettelseDelregelSammenhengendeUttak.java index 9b7bdd18..226f6530 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/UtsettelseDelregelSammenhengendeUttak.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/regelflyt/UtsettelseDelregelSammenhengendeUttak.java @@ -35,7 +35,8 @@ import no.nav.fpsak.nare.specification.Specification; @RuleDocumentation(value = UtsettelseDelregelSammenhengendeUttak.ID) -public class UtsettelseDelregelSammenhengendeUttak implements RuleService { +public class UtsettelseDelregelSammenhengendeUttak + implements RuleService { public static final String ID = "FP_VK 18"; private final Ruleset rs = new Ruleset<>(); @@ -46,183 +47,391 @@ public UtsettelseDelregelSammenhengendeUttak() { @Override public Specification getSpecification() { - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, SjekkOmPeriodenStarterFørFamiliehendelse.BESKRIVELSE) - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), Manuellbehandling.opprett("UT1151", IkkeOppfyltÅrsak.UTSETTELSE_FØR_TERMIN_FØDSEL, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, false)) - .ellers(sjekkOmTomPåKonto()); + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + SjekkOmPeriodenStarterFørFamiliehendelse.BESKRIVELSE) + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + Manuellbehandling.opprett( + "UT1151", + IkkeOppfyltÅrsak.UTSETTELSE_FØR_TERMIN_FØDSEL, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)) + .ellers(sjekkOmTomPåKonto()); } private Specification sjekkOmTomPåKonto() { - return rs.hvisRegel(SjekkOmTomForAlleSineKontoer.ID, SjekkOmTomForAlleSineKontoer.BESKRIVELSE) - .hvis(new SjekkOmTomForAlleSineKontoer(), - IkkeOppfylt.opprett("UT1125", IkkeOppfyltÅrsak.INGEN_STØNADSDAGER_IGJEN_FOR_AVSLÅTT_UTSETTELSE, false, false)) - .ellers(sjekkOmFerie()); + return rs.hvisRegel( + SjekkOmTomForAlleSineKontoer.ID, SjekkOmTomForAlleSineKontoer.BESKRIVELSE) + .hvis( + new SjekkOmTomForAlleSineKontoer(), + IkkeOppfylt.opprett( + "UT1125", + IkkeOppfyltÅrsak.INGEN_STØNADSDAGER_IGJEN_FOR_AVSLÅTT_UTSETTELSE, + false, + false)) + .ellers(sjekkOmFerie()); } private Specification sjekkOmFerie() { return rs.hvisRegel(SjekkOmUtsettelsePgaFerie.ID, "Er det utsettelse pga ferie?") - .hvis(new SjekkOmUtsettelsePgaFerie(), delRegelForFerie()) - .ellers(sjekkOmUtsettelsePgaArbeid()); + .hvis(new SjekkOmUtsettelsePgaFerie(), delRegelForFerie()) + .ellers(sjekkOmUtsettelsePgaArbeid()); } private Specification delRegelForFerie() { - var sjekkOmMorErIAktivitet = rs.hvisRegel(SjekkOmMorErIAktivitet.ID, SjekkOmMorErIAktivitet.BESKRIVELSE) - .hvis(new SjekkOmMorErIAktivitet(), Oppfylt.opprett("UT1108", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_FERIE, false, false)) - .ellers(new AvslagAktivitetskravDelregel().getSpecification()); - - var sjekkOmBareFarHarRettNode = rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) - .hvis(new SjekkOmBareFarHarRett(), sjekkOmMorErIAktivitet) - .ellers(Oppfylt.opprett("UT1108", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_FERIE, false, false)); - - var sjekkOmFeriePåBevegeligHelligdag = rs.hvisRegel(SjekkOmFeriePåBevegeligHelligdag.ID, "Er det ferie på bevegelig helligdag?") - .hvis(new SjekkOmFeriePåBevegeligHelligdag(), - Manuellbehandling.opprett("UT1104", IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, true)) - .ellers(sjekkOmBareFarHarRettNode); - - var sjekkOmSøkerErArbeidstaker = rs.hvisRegel(SjekkOmSøkerErArbeidstaker.ID, "Er søker arbeidstaker?") - .hvis(new SjekkOmSøkerErArbeidstaker(), sjekkOmFeriePåBevegeligHelligdag) - .ellers(Manuellbehandling.opprett("UT1102", IkkeOppfyltÅrsak.FERIE_SELVSTENDIG_NÆRINGSDRIVENDSE_FRILANSER, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, false)); - - var sjekkOmUtsettelseEtterUke6 = rs.hvisRegel(SjekkOmUttakSkjerEtterDeFørsteUkene.ID, SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) - .hvis(new SjekkOmUttakSkjerEtterDeFørsteUkene(), sjekkOmSøkerErArbeidstaker) - .ellers(IkkeOppfylt.opprett("UT1101", IkkeOppfyltÅrsak.UTSETTELSE_INNENFOR_DE_FØRSTE_6_UKENE, true, true)); - - var sjekkOmSøknadGjelderFødsel = rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmUtsettelseEtterUke6) - .ellers(sjekkOmSøkerErArbeidstaker); - - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, "Er utsettelsesperioden før termin/fødsel eller omsorgsovertakelse?") - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), Manuellbehandling.opprett("UT1100", IkkeOppfyltÅrsak.UTSETTELSE_FØR_TERMIN_FØDSEL, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, false)) - .ellers(sjekkOmSøknadGjelderFødsel); + var sjekkOmMorErIAktivitet = + rs.hvisRegel(SjekkOmMorErIAktivitet.ID, SjekkOmMorErIAktivitet.BESKRIVELSE) + .hvis( + new SjekkOmMorErIAktivitet(), + Oppfylt.opprett( + "UT1108", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_FERIE, + false, + false)) + .ellers(new AvslagAktivitetskravDelregel().getSpecification()); + + var sjekkOmBareFarHarRettNode = + rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) + .hvis(new SjekkOmBareFarHarRett(), sjekkOmMorErIAktivitet) + .ellers( + Oppfylt.opprett( + "UT1108", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_FERIE, + false, + false)); + + var sjekkOmFeriePåBevegeligHelligdag = + rs.hvisRegel( + SjekkOmFeriePåBevegeligHelligdag.ID, + "Er det ferie på bevegelig helligdag?") + .hvis( + new SjekkOmFeriePåBevegeligHelligdag(), + Manuellbehandling.opprett( + "UT1104", + IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + true)) + .ellers(sjekkOmBareFarHarRettNode); + + var sjekkOmSøkerErArbeidstaker = + rs.hvisRegel(SjekkOmSøkerErArbeidstaker.ID, "Er søker arbeidstaker?") + .hvis(new SjekkOmSøkerErArbeidstaker(), sjekkOmFeriePåBevegeligHelligdag) + .ellers( + Manuellbehandling.opprett( + "UT1102", + IkkeOppfyltÅrsak + .FERIE_SELVSTENDIG_NÆRINGSDRIVENDSE_FRILANSER, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)); + + var sjekkOmUtsettelseEtterUke6 = + rs.hvisRegel( + SjekkOmUttakSkjerEtterDeFørsteUkene.ID, + SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) + .hvis(new SjekkOmUttakSkjerEtterDeFørsteUkene(), sjekkOmSøkerErArbeidstaker) + .ellers( + IkkeOppfylt.opprett( + "UT1101", + IkkeOppfyltÅrsak.UTSETTELSE_INNENFOR_DE_FØRSTE_6_UKENE, + true, + true)); + + var sjekkOmSøknadGjelderFødsel = + rs.hvisRegel( + SjekkOmSøknadGjelderTerminEllerFødsel.ID, + SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + sjekkOmUtsettelseEtterUke6) + .ellers(sjekkOmSøkerErArbeidstaker); + + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + "Er utsettelsesperioden før termin/fødsel eller omsorgsovertakelse?") + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + Manuellbehandling.opprett( + "UT1100", + IkkeOppfyltÅrsak.UTSETTELSE_FØR_TERMIN_FØDSEL, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)) + .ellers(sjekkOmSøknadGjelderFødsel); } private Specification sjekkOmUtsettelsePgaArbeid() { return rs.hvisRegel(SjekkOmUtsettelsePgaArbeid.ID, "Er det utsettelse pga arbeid?") - .hvis(new SjekkOmUtsettelsePgaArbeid(), delregelForArbeid()) - .ellers(sjekkOmUtsettelsePgaSykdomSkade()); + .hvis(new SjekkOmUtsettelsePgaArbeid(), delregelForArbeid()) + .ellers(sjekkOmUtsettelsePgaSykdomSkade()); } private Specification delregelForArbeid() { - var sjekkOmMorErIAktivitet = rs.hvisRegel(SjekkOmMorErIAktivitet.ID, SjekkOmMorErIAktivitet.BESKRIVELSE) - .hvis(new SjekkOmMorErIAktivitet(), Oppfylt.opprett("UT1114", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_100_PROSENT_ARBEID, false, false)) - .ellers(new AvslagAktivitetskravDelregel().getSpecification()); - - var sjekkOmBareFarHarRettNode = rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) - .hvis(new SjekkOmBareFarHarRett(), sjekkOmMorErIAktivitet) - .ellers(Oppfylt.opprett("UT1114", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_100_PROSENT_ARBEID, false, false)); - - var sjekkOmUtsettelseEtterUke6 = rs.hvisRegel(SjekkOmUttakSkjerEtterDeFørsteUkene.ID, SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) - .hvis(new SjekkOmUttakSkjerEtterDeFørsteUkene(), sjekkOmBareFarHarRettNode) - .ellers(Manuellbehandling.opprett("UT1111", IkkeOppfyltÅrsak.UTSETTELSE_INNENFOR_DE_FØRSTE_6_UKENE, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, false)); - - var sjekkOmSøknadGjelderFødsel = rs.hvisRegel(SjekkOmSøknadGjelderTerminEllerFødsel.ID, SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) - .hvis(new SjekkOmSøknadGjelderTerminEllerFødsel(), sjekkOmUtsettelseEtterUke6) - .ellers(sjekkOmBareFarHarRettNode); - - var sjekkOmSøkerErIArbeidPåHeltid = rs.hvisRegel(SjekkOmFulltArbeidForUtsettelse.ID, - "Er søker i inntektsgivende arbeid på heltid i Norge i søknadsperioden for utsettelse?") - .hvis(new SjekkOmFulltArbeidForUtsettelse(), sjekkOmSøknadGjelderFødsel) - .ellers(Manuellbehandling.opprett("UT1110", IkkeOppfyltÅrsak.IKKE_HELTIDSARBEID, Manuellbehandlingårsak.IKKE_HELTIDSARBEID, true, false)); - - return rs.hvisRegel(SjekkOmPeriodenStarterFørFamiliehendelse.ID, "Er utsettelsesperioden før termin/fødsel eller omsorgsovertakelse?") - .hvis(new SjekkOmPeriodenStarterFørFamiliehendelse(), Manuellbehandling.opprett("UT1109", IkkeOppfyltÅrsak.UTSETTELSE_FØR_TERMIN_FØDSEL, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, false)) - .ellers(sjekkOmSøkerErIArbeidPåHeltid); + var sjekkOmMorErIAktivitet = + rs.hvisRegel(SjekkOmMorErIAktivitet.ID, SjekkOmMorErIAktivitet.BESKRIVELSE) + .hvis( + new SjekkOmMorErIAktivitet(), + Oppfylt.opprett( + "UT1114", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_100_PROSENT_ARBEID, + false, + false)) + .ellers(new AvslagAktivitetskravDelregel().getSpecification()); + + var sjekkOmBareFarHarRettNode = + rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) + .hvis(new SjekkOmBareFarHarRett(), sjekkOmMorErIAktivitet) + .ellers( + Oppfylt.opprett( + "UT1114", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_100_PROSENT_ARBEID, + false, + false)); + + var sjekkOmUtsettelseEtterUke6 = + rs.hvisRegel( + SjekkOmUttakSkjerEtterDeFørsteUkene.ID, + SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) + .hvis(new SjekkOmUttakSkjerEtterDeFørsteUkene(), sjekkOmBareFarHarRettNode) + .ellers( + Manuellbehandling.opprett( + "UT1111", + IkkeOppfyltÅrsak.UTSETTELSE_INNENFOR_DE_FØRSTE_6_UKENE, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)); + + var sjekkOmSøknadGjelderFødsel = + rs.hvisRegel( + SjekkOmSøknadGjelderTerminEllerFødsel.ID, + SjekkOmSøknadGjelderTerminEllerFødsel.BESKRIVELSE) + .hvis( + new SjekkOmSøknadGjelderTerminEllerFødsel(), + sjekkOmUtsettelseEtterUke6) + .ellers(sjekkOmBareFarHarRettNode); + + var sjekkOmSøkerErIArbeidPåHeltid = + rs.hvisRegel( + SjekkOmFulltArbeidForUtsettelse.ID, + "Er søker i inntektsgivende arbeid på heltid i Norge i søknadsperioden for utsettelse?") + .hvis(new SjekkOmFulltArbeidForUtsettelse(), sjekkOmSøknadGjelderFødsel) + .ellers( + Manuellbehandling.opprett( + "UT1110", + IkkeOppfyltÅrsak.IKKE_HELTIDSARBEID, + Manuellbehandlingårsak.IKKE_HELTIDSARBEID, + true, + false)); + + return rs.hvisRegel( + SjekkOmPeriodenStarterFørFamiliehendelse.ID, + "Er utsettelsesperioden før termin/fødsel eller omsorgsovertakelse?") + .hvis( + new SjekkOmPeriodenStarterFørFamiliehendelse(), + Manuellbehandling.opprett( + "UT1109", + IkkeOppfyltÅrsak.UTSETTELSE_FØR_TERMIN_FØDSEL, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)) + .ellers(sjekkOmSøkerErIArbeidPåHeltid); } private Specification sjekkOmUtsettelsePgaSykdomSkade() { - return rs.hvisRegel(SjekkOmUtsettelsePgaSykdomSkade.ID, SjekkOmUtsettelsePgaSykdomSkade.BESKRIVELSE) - .hvis(new SjekkOmUtsettelsePgaSykdomSkade(), delregelForSøkerSykdomEllerSkade()) - .ellers(sjekkOmUtsettelsePgaSøkerInnleggelse()); + return rs.hvisRegel( + SjekkOmUtsettelsePgaSykdomSkade.ID, + SjekkOmUtsettelsePgaSykdomSkade.BESKRIVELSE) + .hvis(new SjekkOmUtsettelsePgaSykdomSkade(), delregelForSøkerSykdomEllerSkade()) + .ellers(sjekkOmUtsettelsePgaSøkerInnleggelse()); } private Specification sjekkOmUtsettelsePgaSøkerInnleggelse() { - return rs.hvisRegel(SjekkOmUtsettelsePgaSøkerInnleggelse.ID, SjekkOmUtsettelsePgaSøkerInnleggelse.BESKRIVELSE) - .hvis(new SjekkOmUtsettelsePgaSøkerInnleggelse(), delregelForSøkerInnlagt()) - .ellers(sjekkOmUtsettelsePgaHV()); + return rs.hvisRegel( + SjekkOmUtsettelsePgaSøkerInnleggelse.ID, + SjekkOmUtsettelsePgaSøkerInnleggelse.BESKRIVELSE) + .hvis(new SjekkOmUtsettelsePgaSøkerInnleggelse(), delregelForSøkerInnlagt()) + .ellers(sjekkOmUtsettelsePgaHV()); } private Specification sjekkOmUtsettelsePgaHV() { return rs.hvisRegel(SjekkOmUtsettelsePgaHV.ID, SjekkOmUtsettelsePgaHV.BESKRIVELSE) - .hvis(new SjekkOmUtsettelsePgaHV(), delregelForHV()) - .ellers(sjekkOmUtsettelsePgaTiltakViaNav()); + .hvis(new SjekkOmUtsettelsePgaHV(), delregelForHV()) + .ellers(sjekkOmUtsettelsePgaTiltakViaNav()); } private Specification sjekkOmUtsettelsePgaTiltakViaNav() { - return rs.hvisRegel(SjekkOmUtsettelsePgaTiltakViaNav.ID, SjekkOmUtsettelsePgaTiltakViaNav.BESKRIVELSE) - .hvis(new SjekkOmUtsettelsePgaTiltakViaNav(), delregelForTiltakViaNav()) - .ellers(delregelForBarnInnlagt()); + return rs.hvisRegel( + SjekkOmUtsettelsePgaTiltakViaNav.ID, + SjekkOmUtsettelsePgaTiltakViaNav.BESKRIVELSE) + .hvis(new SjekkOmUtsettelsePgaTiltakViaNav(), delregelForTiltakViaNav()) + .ellers(delregelForBarnInnlagt()); } private Specification delregelForSøkerSykdomEllerSkade() { - var sjekkOmBareFarHarRettNode = rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) - .hvis(new SjekkOmBareFarHarRett(), Manuellbehandling.opprett("UT1138", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_SYKDOM, - Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT, false, false)) - .ellers(Oppfylt.opprett("UT1116", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_SYKDOM, false, false)); + var sjekkOmBareFarHarRettNode = + rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) + .hvis( + new SjekkOmBareFarHarRett(), + Manuellbehandling.opprett( + "UT1138", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_SYKDOM, + Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT, + false, + false)) + .ellers( + Oppfylt.opprett( + "UT1116", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_SYKDOM, + false, + false)); return rs.hvisRegel(SjekkOmSykdomSkade.ID, SjekkOmSykdomSkade.BESKRIVELSE) - .hvis(new SjekkOmSykdomSkade(), sjekkOmBareFarHarRettNode) - .ellers(Manuellbehandling.opprett("UT1115", IkkeOppfyltÅrsak.SØKERS_SYKDOM_SKADE_IKKE_OPPFYLT, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, false)); + .hvis(new SjekkOmSykdomSkade(), sjekkOmBareFarHarRettNode) + .ellers( + Manuellbehandling.opprett( + "UT1115", + IkkeOppfyltÅrsak.SØKERS_SYKDOM_SKADE_IKKE_OPPFYLT, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)); } private Specification delregelForSøkerInnlagt() { - var sjekkOmBareFarHarRettNode = rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) - .hvis(new SjekkOmBareFarHarRett(), Manuellbehandling.opprett("UT1137", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_INNLEGGELSE, - Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT, false, false)) - .ellers(Oppfylt.opprett("UT1118", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_INNLEGGELSE, false, false)); + var sjekkOmBareFarHarRettNode = + rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) + .hvis( + new SjekkOmBareFarHarRett(), + Manuellbehandling.opprett( + "UT1137", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_INNLEGGELSE, + Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT, + false, + false)) + .ellers( + Oppfylt.opprett( + "UT1118", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_INNLEGGELSE, + false, + false)); return rs.hvisRegel(SjekkOmSøkerInnlagt.ID, SjekkOmSøkerInnlagt.BESKRIVELSE) - .hvis(new SjekkOmSøkerInnlagt(), sjekkOmBareFarHarRettNode) - .ellers(Manuellbehandling.opprett("UT1117", IkkeOppfyltÅrsak.SØKERS_INNLEGGELSE_IKKE_OPPFYLT, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, false)); + .hvis(new SjekkOmSøkerInnlagt(), sjekkOmBareFarHarRettNode) + .ellers( + Manuellbehandling.opprett( + "UT1117", + IkkeOppfyltÅrsak.SØKERS_INNLEGGELSE_IKKE_OPPFYLT, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)); } private Specification delregelForBarnInnlagt() { - var sjekkOmBareFarHarRettNode = rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) - .hvis(new SjekkOmBareFarHarRett(), Manuellbehandling.opprett("1136", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_BARN_INNLAGT, - Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT, false, false)) - .ellers(Oppfylt.opprett("UT1120", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_BARN_INNLAGT, false, false)); - - var sjekkOmFørTermin = rs.hvisRegel(SjekkOmPeriodeErFørTermin.ID, SjekkOmPeriodeErFørTermin.BESKRIVELSE) - .hvis(new SjekkOmPeriodeErFørTermin(), IkkeOppfylt.opprett("UT1124", IkkeOppfyltÅrsak.FRATREKK_PLEIEPENGER, true, false)) - .ellers(sjekkOmBareFarHarRettNode); - - var sjekkOmUttakFørUke33 = rs.hvisRegel(SjekkOmFødselErFørUke33.ID, SjekkOmFødselErFørUke33.BESKRIVELSE) - .hvis(new SjekkOmFødselErFørUke33(), sjekkOmFørTermin) - .ellers(sjekkOmBareFarHarRettNode); + var sjekkOmBareFarHarRettNode = + rs.hvisRegel(SjekkOmBareFarHarRett.ID, SjekkOmBareFarHarRett.BESKRIVELSE) + .hvis( + new SjekkOmBareFarHarRett(), + Manuellbehandling.opprett( + "1136", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_BARN_INNLAGT, + Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT, + false, + false)) + .ellers( + Oppfylt.opprett( + "UT1120", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_BARN_INNLAGT, + false, + false)); + + var sjekkOmFørTermin = + rs.hvisRegel(SjekkOmPeriodeErFørTermin.ID, SjekkOmPeriodeErFørTermin.BESKRIVELSE) + .hvis( + new SjekkOmPeriodeErFørTermin(), + IkkeOppfylt.opprett( + "UT1124", + IkkeOppfyltÅrsak.FRATREKK_PLEIEPENGER, + true, + false)) + .ellers(sjekkOmBareFarHarRettNode); + + var sjekkOmUttakFørUke33 = + rs.hvisRegel(SjekkOmFødselErFørUke33.ID, SjekkOmFødselErFørUke33.BESKRIVELSE) + .hvis(new SjekkOmFødselErFørUke33(), sjekkOmFørTermin) + .ellers(sjekkOmBareFarHarRettNode); return rs.hvisRegel(SjekkOmBarnInnlagt.ID, SjekkOmBarnInnlagt.BESKRIVELSE) - .hvis(new SjekkOmBarnInnlagt(), sjekkOmUttakFørUke33) - .ellers(Manuellbehandling.opprett("UT1119", IkkeOppfyltÅrsak.BARNETS_INNLEGGELSE_IKKE_OPPFYLT, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, false)); + .hvis(new SjekkOmBarnInnlagt(), sjekkOmUttakFørUke33) + .ellers( + Manuellbehandling.opprett( + "UT1119", + IkkeOppfyltÅrsak.BARNETS_INNLEGGELSE_IKKE_OPPFYLT, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)); } private Specification delregelForHV() { - var sjekkOmUtsettelseEtterUke6 = rs.hvisRegel(SjekkOmUttakSkjerEtterDeFørsteUkene.ID, SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) - .hvis(new SjekkOmUttakSkjerEtterDeFørsteUkene(), - Oppfylt.opprett("UT1131", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_100_PROSENT_ARBEID, false, false)) - .ellers(Manuellbehandling.opprett("UT1130", IkkeOppfyltÅrsak.UTSETTELSE_INNENFOR_DE_FØRSTE_6_UKENE, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, false)); + var sjekkOmUtsettelseEtterUke6 = + rs.hvisRegel( + SjekkOmUttakSkjerEtterDeFørsteUkene.ID, + SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) + .hvis( + new SjekkOmUttakSkjerEtterDeFørsteUkene(), + Oppfylt.opprett( + "UT1131", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_100_PROSENT_ARBEID, + false, + false)) + .ellers( + Manuellbehandling.opprett( + "UT1130", + IkkeOppfyltÅrsak.UTSETTELSE_INNENFOR_DE_FØRSTE_6_UKENE, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)); return rs.hvisRegel(SjekkOmDokumentertHV.ID, SjekkOmDokumentertHV.BESKRIVELSE) - .hvis(new SjekkOmDokumentertHV(), sjekkOmUtsettelseEtterUke6) - .ellers(Manuellbehandling.opprett("UT1128", IkkeOppfyltÅrsak.IKKE_HELTIDSARBEID, Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, - true, false)); + .hvis(new SjekkOmDokumentertHV(), sjekkOmUtsettelseEtterUke6) + .ellers( + Manuellbehandling.opprett( + "UT1128", + IkkeOppfyltÅrsak.IKKE_HELTIDSARBEID, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)); } private Specification delregelForTiltakViaNav() { - var sjekkOmUtsettelseEtterUke6 = rs.hvisRegel(SjekkOmUttakSkjerEtterDeFørsteUkene.ID, SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) - .hvis(new SjekkOmUttakSkjerEtterDeFørsteUkene(), - Oppfylt.opprett("UT1135", InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_100_PROSENT_ARBEID, false, false)) - .ellers(Manuellbehandling.opprett("UT1134", IkkeOppfyltÅrsak.UTSETTELSE_INNENFOR_DE_FØRSTE_6_UKENE, - Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, true, false)); - return rs.hvisRegel(SjekkOmDokumentertTiltakViaNav.ID, SjekkOmDokumentertTiltakViaNav.BESKRIVELSE) - .hvis(new SjekkOmDokumentertTiltakViaNav(), sjekkOmUtsettelseEtterUke6) - .ellers(Manuellbehandling.opprett("UT1132", IkkeOppfyltÅrsak.IKKE_HELTIDSARBEID, Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, - true, false)); + var sjekkOmUtsettelseEtterUke6 = + rs.hvisRegel( + SjekkOmUttakSkjerEtterDeFørsteUkene.ID, + SjekkOmUttakSkjerEtterDeFørsteUkene.BESKRIVELSE) + .hvis( + new SjekkOmUttakSkjerEtterDeFørsteUkene(), + Oppfylt.opprett( + "UT1135", + InnvilgetÅrsak.UTSETTELSE_GYLDIG_PGA_100_PROSENT_ARBEID, + false, + false)) + .ellers( + Manuellbehandling.opprett( + "UT1134", + IkkeOppfyltÅrsak.UTSETTELSE_INNENFOR_DE_FØRSTE_6_UKENE, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)); + return rs.hvisRegel( + SjekkOmDokumentertTiltakViaNav.ID, + SjekkOmDokumentertTiltakViaNav.BESKRIVELSE) + .hvis(new SjekkOmDokumentertTiltakViaNav(), sjekkOmUtsettelseEtterUke6) + .ellers( + Manuellbehandling.opprett( + "UT1132", + IkkeOppfyltÅrsak.IKKE_HELTIDSARBEID, + Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE, + true, + false)); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/ForbruksTeller.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/ForbruksTeller.java index b089cf62..694ca6a4 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/ForbruksTeller.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/ForbruksTeller.java @@ -8,7 +8,6 @@ import java.util.function.BiFunction; import java.util.function.BiPredicate; import java.util.function.Predicate; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.FastsattUttakPeriode; @@ -17,51 +16,79 @@ final class ForbruksTeller { - private ForbruksTeller() { - } + private ForbruksTeller() {} - static Trekkdager forbruksTellerKontoKunForbruk(Stønadskontotype stønadskonto, - AktivitetIdentifikator aktivitet, - List søkersPerioder, - Predicate tellPeriode) { - return forbruksTeller(stønadskonto, aktivitet, søkersPerioder, tellPeriode, (s, p) -> Trekkdager.ZERO, - (p, a) -> Objects.equals(stønadskonto, a.getStønadskontotype())); + static Trekkdager forbruksTellerKontoKunForbruk( + Stønadskontotype stønadskonto, + AktivitetIdentifikator aktivitet, + List søkersPerioder, + Predicate tellPeriode) { + return forbruksTeller( + stønadskonto, + aktivitet, + søkersPerioder, + tellPeriode, + (s, p) -> Trekkdager.ZERO, + (p, a) -> Objects.equals(stønadskonto, a.getStønadskontotype())); } - static Trekkdager forbruksTellerKontoMedUnntak(Stønadskontotype stønadskonto, - AktivitetIdentifikator aktivitet, - List søkersPerioder, - Predicate tellPeriode, - BiFunction unntaksTeller) { - return forbruksTeller(stønadskonto, aktivitet, søkersPerioder, tellPeriode, unntaksTeller, - (p, a) -> Objects.equals(stønadskonto, a.getStønadskontotype())); + static Trekkdager forbruksTellerKontoMedUnntak( + Stønadskontotype stønadskonto, + AktivitetIdentifikator aktivitet, + List søkersPerioder, + Predicate tellPeriode, + BiFunction unntaksTeller) { + return forbruksTeller( + stønadskonto, + aktivitet, + søkersPerioder, + tellPeriode, + unntaksTeller, + (p, a) -> Objects.equals(stønadskonto, a.getStønadskontotype())); } - - static Trekkdager forbruksTeller(Stønadskontotype stønadskonto, - AktivitetIdentifikator aktivitet, - List søkersPerioder, - Predicate tellPeriode, - BiFunction unntaksTeller, - BiPredicate aktivitetsfilter) { + static Trekkdager forbruksTeller( + Stønadskontotype stønadskonto, + AktivitetIdentifikator aktivitet, + List søkersPerioder, + Predicate tellPeriode, + BiFunction unntaksTeller, + BiPredicate aktivitetsfilter) { var sum = Trekkdager.ZERO; var startindex = førstePeriodeSomTellesMedAktivitet(aktivitet, søkersPerioder, tellPeriode); - // Tilkommet aktivitet. Bruk minste forbruk inntil første forekomst - evt ZERO dersom ingen forekomster. + // Tilkommet aktivitet. Bruk minste forbruk inntil første forekomst - evt ZERO dersom ingen + // forekomster. if (startindex > 0) { var perioderTomPeriode = søkersPerioder.subList(0, startindex); - var minForbrukteDagerEksisterendeAktiviteter = aktiviteterIPerioder(perioderTomPeriode).stream() - .filter( - a -> førstePeriodeSomTellesMedAktivitet(a, perioderTomPeriode, tellPeriode) < startindex) // Tell aktiviteter begynner tidligere - .map(a -> forbruksTeller(stønadskonto, a, perioderTomPeriode, tellPeriode, unntaksTeller, aktivitetsfilter)) - .min(Trekkdager::compareTo) - .orElse(Trekkdager.ZERO); + var minForbrukteDagerEksisterendeAktiviteter = + aktiviteterIPerioder(perioderTomPeriode).stream() + .filter( + a -> + førstePeriodeSomTellesMedAktivitet( + a, perioderTomPeriode, tellPeriode) + < startindex) // Tell aktiviteter begynner + // tidligere + .map( + a -> + forbruksTeller( + stønadskonto, + a, + perioderTomPeriode, + tellPeriode, + unntaksTeller, + aktivitetsfilter)) + .min(Trekkdager::compareTo) + .orElse(Trekkdager.ZERO); sum = sum.add(minForbrukteDagerEksisterendeAktiviteter); } for (var i = startindex; i < søkersPerioder.size(); i++) { var periodeSøker = søkersPerioder.get(i); if (tellPeriode.test(periodeSøker)) { - sum = sum.add(trekkdagerForUttaksperiode(aktivitet, periodeSøker, aktivitetsfilter)); + sum = + sum.add( + trekkdagerForUttaksperiode( + aktivitet, periodeSøker, aktivitetsfilter)); } else { sum = sum.add(unntaksTeller.apply(stønadskonto, periodeSøker)); } @@ -70,10 +97,12 @@ static Trekkdager forbruksTeller(Stønadskontotype stønadskonto, return sum; } - // Index til første periode som inneholder aktivitet, 0 dersom finnes fra start, max dersom ikke funnet - private static int førstePeriodeSomTellesMedAktivitet(AktivitetIdentifikator aktivitet, - List perioder, - Predicate tellPeriode) { + // Index til første periode som inneholder aktivitet, 0 dersom finnes fra start, max dersom ikke + // funnet + private static int førstePeriodeSomTellesMedAktivitet( + AktivitetIdentifikator aktivitet, + List perioder, + Predicate tellPeriode) { var førstePeriodeSomTelles = -1; for (var i = 0; i < perioder.size(); i++) { var periode = perioder.get(i); @@ -89,15 +118,15 @@ static Trekkdager forbruksTeller(Stønadskontotype stønadskonto, return perioder.size(); } - private static Trekkdager trekkdagerForUttaksperiode(AktivitetIdentifikator aktivitet, - FastsattUttakPeriode periode, - BiPredicate aktivitetsvelger) { - return periode.getAktiviteter() - .stream() - .filter(a -> a.getAktivitetIdentifikator().equals(aktivitet)) - .filter(a -> aktivitetsvelger.test(periode, a)) - .findFirst() - .map(FastsattUttakPeriodeAktivitet::getTrekkdager) - .orElse(Trekkdager.ZERO); + private static Trekkdager trekkdagerForUttaksperiode( + AktivitetIdentifikator aktivitet, + FastsattUttakPeriode periode, + BiPredicate aktivitetsvelger) { + return periode.getAktiviteter().stream() + .filter(a -> a.getAktivitetIdentifikator().equals(aktivitet)) + .filter(a -> aktivitetsvelger.test(periode, a)) + .findFirst() + .map(FastsattUttakPeriodeAktivitet::getTrekkdager) + .orElse(Trekkdager.ZERO); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregning.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregning.java index 2962b299..9ca6de22 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregning.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregning.java @@ -22,7 +22,6 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Virkedager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; @@ -36,8 +35,10 @@ public class SaldoUtregning { - private final Map stønadskonti = new EnumMap<>(Stønadskontotype.class); - private final Map spesialkonti = new EnumMap<>(Spesialkontotype.class); + private final Map stønadskonti = + new EnumMap<>(Stønadskontotype.class); + private final Map spesialkonti = + new EnumMap<>(Spesialkontotype.class); private final List søkersPerioder; private final Set søkersAktiviteter; private final List annenpartsPerioder; @@ -46,41 +47,59 @@ public class SaldoUtregning { private final LocalDateTime sisteSøknadMottattTidspunktAnnenpart; private final SaldoUtregningFlerbarnsdager saldoUtregningFlerbarnsdager; - SaldoUtregning(Map stønadskontoer, // NOSONAR - List søkersPerioder, List annenpartsPerioder, SaldoUtregningGrunnlag grunnlag) { + SaldoUtregning( + Map stønadskontoer, // NOSONAR + List søkersPerioder, + List annenpartsPerioder, + SaldoUtregningGrunnlag grunnlag) { this.søkersPerioder = søkersPerioder; - this.annenpartsPerioder = fjernOppholdsperioderEtterSisteUttaksdato(søkersPerioder, annenpartsPerioder); + this.annenpartsPerioder = + fjernOppholdsperioderEtterSisteUttaksdato(søkersPerioder, annenpartsPerioder); this.søkersAktiviteter = grunnlag.getAktiviteter(); - this.sisteSøknadMottattTidspunktSøker = grunnlag.getSisteSøknadMottattTidspunktSøker().orElse(null); - this.sisteSøknadMottattTidspunktAnnenpart = grunnlag.getSisteSøknadMottattTidspunktAnnenpart().orElse(null); + this.sisteSøknadMottattTidspunktSøker = + grunnlag.getSisteSøknadMottattTidspunktSøker().orElse(null); + this.sisteSøknadMottattTidspunktAnnenpart = + grunnlag.getSisteSøknadMottattTidspunktAnnenpart().orElse(null); this.berørtBehandling = grunnlag.isBerørtBehandling(); - this.saldoUtregningFlerbarnsdager = new SaldoUtregningFlerbarnsdager(søkersPerioder, this.annenpartsPerioder, søkersAktiviteter, - grunnlag.getSpesialkontoTrekkdager(Spesialkontotype.FLERBARN), grunnlag.getSpesialkontoTrekkdager(Spesialkontotype.BARE_FAR_MINSTERETT)); + this.saldoUtregningFlerbarnsdager = + new SaldoUtregningFlerbarnsdager( + søkersPerioder, + this.annenpartsPerioder, + søkersAktiviteter, + grunnlag.getSpesialkontoTrekkdager(Spesialkontotype.FLERBARN), + grunnlag.getSpesialkontoTrekkdager(Spesialkontotype.BARE_FAR_MINSTERETT)); this.stønadskonti.putAll(stønadskontoer); - Arrays.stream(Spesialkontotype.values()).forEach(k -> this.spesialkonti.put(k, grunnlag.getSpesialkontoTrekkdager(k))); - } - - - SaldoUtregning(Map stønadskontoer, - // NOSONAR - List søkersPerioder, - List annenpartsPerioder, - boolean berørtBehandling, - Set søkersAktiviteter, - LocalDateTime sisteSøknadMottattTidspunktSøker, - LocalDateTime sisteSøknadMottattTidspunktAnnenpart, - Trekkdager minsterettDager, - Trekkdager utenAktivitetskravDager, - Trekkdager flerbarnsdager, - Trekkdager farUttakRundtFødselDager) { + Arrays.stream(Spesialkontotype.values()) + .forEach(k -> this.spesialkonti.put(k, grunnlag.getSpesialkontoTrekkdager(k))); + } + + SaldoUtregning( + Map stønadskontoer, + // NOSONAR + List søkersPerioder, + List annenpartsPerioder, + boolean berørtBehandling, + Set søkersAktiviteter, + LocalDateTime sisteSøknadMottattTidspunktSøker, + LocalDateTime sisteSøknadMottattTidspunktAnnenpart, + Trekkdager minsterettDager, + Trekkdager utenAktivitetskravDager, + Trekkdager flerbarnsdager, + Trekkdager farUttakRundtFødselDager) { this.søkersPerioder = søkersPerioder; this.søkersAktiviteter = søkersAktiviteter; this.sisteSøknadMottattTidspunktSøker = sisteSøknadMottattTidspunktSøker; this.sisteSøknadMottattTidspunktAnnenpart = sisteSøknadMottattTidspunktAnnenpart; - this.annenpartsPerioder = fjernOppholdsperioderEtterSisteUttaksdato(søkersPerioder, annenpartsPerioder); + this.annenpartsPerioder = + fjernOppholdsperioderEtterSisteUttaksdato(søkersPerioder, annenpartsPerioder); this.berørtBehandling = berørtBehandling; - this.saldoUtregningFlerbarnsdager = new SaldoUtregningFlerbarnsdager(søkersPerioder, this.annenpartsPerioder, søkersAktiviteter, - flerbarnsdager, minsterettDager); + this.saldoUtregningFlerbarnsdager = + new SaldoUtregningFlerbarnsdager( + søkersPerioder, + this.annenpartsPerioder, + søkersAktiviteter, + flerbarnsdager, + minsterettDager); this.stønadskonti.putAll(stønadskontoer); this.spesialkonti.put(Spesialkontotype.BARE_FAR_MINSTERETT, minsterettDager); this.spesialkonti.put(Spesialkontotype.UTEN_AKTIVITETSKRAV, utenAktivitetskravDager); @@ -88,22 +107,33 @@ public class SaldoUtregning { this.spesialkonti.put(Spesialkontotype.TETTE_FØDSLER, Trekkdager.ZERO); } - SaldoUtregning(Map stønadskontoer, - List søkersPerioder, - List annenpartsPerioder, - boolean berørtBehandling, - Set søkersAktiviteter, - LocalDateTime sisteSøknadMottattTidspunktSøker, - LocalDateTime sisteSøknadMottattTidspunktAnnenpart) { - this(stønadskontoer, søkersPerioder, annenpartsPerioder, berørtBehandling, søkersAktiviteter, sisteSøknadMottattTidspunktSøker, - sisteSøknadMottattTidspunktAnnenpart, Trekkdager.ZERO, Trekkdager.ZERO, Trekkdager.ZERO, Trekkdager.ZERO); + SaldoUtregning( + Map stønadskontoer, + List søkersPerioder, + List annenpartsPerioder, + boolean berørtBehandling, + Set søkersAktiviteter, + LocalDateTime sisteSøknadMottattTidspunktSøker, + LocalDateTime sisteSøknadMottattTidspunktAnnenpart) { + this( + stønadskontoer, + søkersPerioder, + annenpartsPerioder, + berørtBehandling, + søkersAktiviteter, + sisteSøknadMottattTidspunktSøker, + sisteSøknadMottattTidspunktAnnenpart, + Trekkdager.ZERO, + Trekkdager.ZERO, + Trekkdager.ZERO, + Trekkdager.ZERO); } /** * Saldo for angitt stønadskonto og aktivitet. * * @param stønadskonto angitt stønadskonto. - * @param aktivitet angitt aktivitet. + * @param aktivitet angitt aktivitet. * @return antall gjenstående dager for angitt stønadskonto og aktivitet. */ public int saldo(Stønadskontotype stønadskonto, AktivitetIdentifikator aktivitet) { @@ -118,25 +148,33 @@ public int saldo(Stønadskontotype stønadskonto, AktivitetIdentifikator aktivit * Saldo for angitt stønadskonto og aktivitet. * * @param stønadskonto angitt stønadskonto. - * @param aktivitet angitt aktivitet. + * @param aktivitet angitt aktivitet. * @return antall gjenstående dager for angitt stønadskonto og aktivitet. */ - public Trekkdager saldoITrekkdager(Stønadskontotype stønadskonto, AktivitetIdentifikator aktivitet) { + public Trekkdager saldoITrekkdager( + Stønadskontotype stønadskonto, AktivitetIdentifikator aktivitet) { var forbruktSøker = forbruktSøker(stønadskonto, aktivitet, søkersPerioder); var forbruktAnnenpart = minForbruktAvPerioder(stønadskonto, annenpartsPerioder); - //frigitte dager er dager fra annenpart som blir ledig når søker tar uttak i samme periode + // frigitte dager er dager fra annenpart som blir ledig når søker tar uttak i samme periode var frigitteDager = frigitteDager(stønadskonto); - return getMaxDagerITrekkdager(stønadskonto).subtract(forbruktSøker).subtract(forbruktAnnenpart).add(frigitteDager); + return getMaxDagerITrekkdager(stønadskonto) + .subtract(forbruktSøker) + .subtract(forbruktAnnenpart) + .add(frigitteDager); } /* * Skal sørge for at MSP + opphold/utsettelse ikke reduserer minsteretten */ - public Trekkdager nettoSaldoJustertForMinsterett(Stønadskontotype stønadskonto, AktivitetIdentifikator aktivitet, boolean kanTrekkeAvMinsterett) { + public Trekkdager nettoSaldoJustertForMinsterett( + Stønadskontotype stønadskonto, + AktivitetIdentifikator aktivitet, + boolean kanTrekkeAvMinsterett) { var brutto = saldoITrekkdager(stønadskonto, aktivitet); if (!kanTrekkeAvMinsterett) { var restSaldoMinsterett = restSaldoMinsterett(aktivitet); - var reduksjon = restSaldoMinsterett.mindreEnn0() ? Trekkdager.ZERO : restSaldoMinsterett; + var reduksjon = + restSaldoMinsterett.mindreEnn0() ? Trekkdager.ZERO : restSaldoMinsterett; return brutto.subtract(reduksjon); } return brutto; @@ -147,7 +185,10 @@ public Trekkdager restSaldoFlerbarnsdager() { } public Trekkdager restSaldoMinsterett() { - return aktiviteterForSøker().stream().map(this::restSaldoMinsterett).max(Trekkdager::compareTo).orElse(Trekkdager.ZERO); + return aktiviteterForSøker().stream() + .map(this::restSaldoMinsterett) + .max(Trekkdager::compareTo) + .orElse(Trekkdager.ZERO); } public Trekkdager restSaldoMinsterett(AktivitetIdentifikator aktivitet) { @@ -159,7 +200,10 @@ public Trekkdager restSaldoMinsterett(AktivitetIdentifikator aktivitet) { } public Trekkdager restSaldoEtterNesteStønadsperiode() { - return aktiviteterForSøker().stream().map(this::restSaldoEtterNesteStønadsperiode).max(Trekkdager::compareTo).orElse(Trekkdager.ZERO); + return aktiviteterForSøker().stream() + .map(this::restSaldoEtterNesteStønadsperiode) + .max(Trekkdager::compareTo) + .orElse(Trekkdager.ZERO); } public Trekkdager restSaldoEtterNesteStønadsperiode(AktivitetIdentifikator aktivitet) { @@ -170,13 +214,15 @@ public Trekkdager restSaldoMinsterett(AktivitetIdentifikator aktivitet) { return getMaxDagerEtterNesteStønadsperiode().subtract(forbruk); } - public Trekkdager restSaldoFlerbarnsdager(AktivitetIdentifikator aktivitet) { return saldoUtregningFlerbarnsdager.restSaldo(aktivitet); } public Trekkdager restSaldoDagerUtenAktivitetskrav() { - return aktiviteterForSøker().stream().map(this::restSaldoDagerUtenAktivitetskrav).max(Trekkdager::compareTo).orElse(Trekkdager.ZERO); + return aktiviteterForSøker().stream() + .map(this::restSaldoDagerUtenAktivitetskrav) + .max(Trekkdager::compareTo) + .orElse(Trekkdager.ZERO); } public Trekkdager restSaldoDagerUtenAktivitetskrav(AktivitetIdentifikator aktivitet) { @@ -188,7 +234,9 @@ public Trekkdager restSaldoDagerUtenAktivitetskrav(AktivitetIdentifikator aktivi } private Trekkdager forbruktAvMinsterett(AktivitetIdentifikator aktivitet) { - return stønadskontoer().stream().map(k -> forbruktSøkersMinsterett(k, aktivitet, søkersPerioder)).reduce(Trekkdager.ZERO, Trekkdager::add); + return stønadskontoer().stream() + .map(k -> forbruktSøkersMinsterett(k, aktivitet, søkersPerioder)) + .reduce(Trekkdager.ZERO, Trekkdager::add); } public Trekkdager getFarUttakRundtFødselDager() { @@ -196,66 +244,85 @@ private Trekkdager forbruktAvMinsterett(AktivitetIdentifikator aktivitet) { } public Trekkdager restSaldoFarUttakRundtFødsel(LukketPeriode farUttakRundtFødselPeriode) { - if (Trekkdager.ZERO.equals(getFarUttakRundtFødselDager()) || farUttakRundtFødselPeriode == null) { + if (Trekkdager.ZERO.equals(getFarUttakRundtFødselDager()) + || farUttakRundtFødselPeriode == null) { return Trekkdager.ZERO; } return aktiviteterForSøker().stream() - .map(a -> restSaldoFarUttakRundtFødsel(a, farUttakRundtFødselPeriode)) - .max(Trekkdager::compareTo) - .orElse(Trekkdager.ZERO); + .map(a -> restSaldoFarUttakRundtFødsel(a, farUttakRundtFødselPeriode)) + .max(Trekkdager::compareTo) + .orElse(Trekkdager.ZERO); } - public Trekkdager restSaldoFarUttakRundtFødsel(AktivitetIdentifikator aktivitet, LukketPeriode farUttakRundtFødselPeriode) { - if (Trekkdager.ZERO.equals(getFarUttakRundtFødselDager()) || farUttakRundtFødselPeriode == null) { + public Trekkdager restSaldoFarUttakRundtFødsel( + AktivitetIdentifikator aktivitet, LukketPeriode farUttakRundtFødselPeriode) { + if (Trekkdager.ZERO.equals(getFarUttakRundtFødselDager()) + || farUttakRundtFødselPeriode == null) { return Trekkdager.ZERO; } var forbruk = forbruktAvFarRundtFødsel(aktivitet, farUttakRundtFødselPeriode); return getFarUttakRundtFødselDager().subtract(forbruk); } - private Trekkdager forbruktAvFarRundtFødsel(AktivitetIdentifikator aktivitet, LukketPeriode rundtFødselIntervall) { + private Trekkdager forbruktAvFarRundtFødsel( + AktivitetIdentifikator aktivitet, LukketPeriode rundtFødselIntervall) { return stønadskontoer().stream() - .filter(FarUttakRundtFødsel::erKontoRelevant) - .map(k -> ForbruksTeller.forbruksTellerKontoKunForbruk(k, aktivitet, søkersPerioder, p -> erRundtFødsel(p, rundtFødselIntervall))) - .reduce(Trekkdager.ZERO, Trekkdager::add); - } - - private boolean erRundtFødsel(FastsattUttakPeriode periode, LukketPeriode farUttakRundtFødselPeriode) { + .filter(FarUttakRundtFødsel::erKontoRelevant) + .map( + k -> + ForbruksTeller.forbruksTellerKontoKunForbruk( + k, + aktivitet, + søkersPerioder, + p -> erRundtFødsel(p, rundtFødselIntervall))) + .reduce(Trekkdager.ZERO, Trekkdager::add); + } + + private boolean erRundtFødsel( + FastsattUttakPeriode periode, LukketPeriode farUttakRundtFødselPeriode) { var p = new LukketPeriode(periode.getFom(), periode.getTom()); return p.erOmsluttetAv(farUttakRundtFødselPeriode); } /** - * Saldo for angitt stønadskonto. Dersom saldo der forskjellige på aktivitetene, så blir største saldo valgt. + * Saldo for angitt stønadskonto. Dersom saldo der forskjellige på aktivitetene, så blir største + * saldo valgt. * * @param stønadskonto angitt stønadskonto. * @return antall gjenstående dager for angitt stønadskonto. */ public Trekkdager saldoITrekkdager(Stønadskontotype stønadskonto) { - return aktiviteterForSøker().stream().map(a -> saldoITrekkdager(stønadskonto, a)).max(Trekkdager::compareTo).orElse(Trekkdager.ZERO); + return aktiviteterForSøker().stream() + .map(a -> saldoITrekkdager(stønadskonto, a)) + .max(Trekkdager::compareTo) + .orElse(Trekkdager.ZERO); } /** - * Saldo for angitt stønadskonto. Dersom saldo der forskjellige på aktivitetene, så blir største saldo valgt. + * Saldo for angitt stønadskonto. Dersom saldo der forskjellige på aktivitetene, så blir største + * saldo valgt. * * @param stønadskonto angitt stønadskonto. * @return antall gjenstående dager for angitt stønadskonto. */ public int saldo(Stønadskontotype stønadskonto) { - return aktiviteterForSøker().stream().map(a -> saldo(stønadskonto, a)).max(Comparator.naturalOrder()).orElse(0); + return aktiviteterForSøker().stream() + .map(a -> saldo(stønadskonto, a)) + .max(Comparator.naturalOrder()) + .orElse(0); } /** - * Aktivitet med stønadskonto. Hvis flere aktiviteter har stønadskonto velges den med minst trekkdager + * Aktivitet med stønadskonto. Hvis flere aktiviteter har stønadskonto velges den med minst + * trekkdager */ - private Optional aktivitetMedStønadskonto(Stønadskontotype stønadskonto, FastsattUttakPeriode periode) { - return periode.getAktiviteter() - .stream() - .filter(a -> Objects.equals(a.getStønadskontotype(), stønadskonto)) - .min(Comparator.comparing(FastsattUttakPeriodeAktivitet::getTrekkdager)); + private Optional aktivitetMedStønadskonto( + Stønadskontotype stønadskonto, FastsattUttakPeriode periode) { + return periode.getAktiviteter().stream() + .filter(a -> Objects.equals(a.getStønadskontotype(), stønadskonto)) + .min(Comparator.comparing(FastsattUttakPeriodeAktivitet::getTrekkdager)); } - /** * Hvilke stønadskontoer er opprettet. * @@ -265,24 +332,26 @@ public int saldo(Stønadskontotype stønadskonto) { return stønadskonti.keySet(); } - /** - * Har konto negativ saldo, ser på laveste saldo ved flere arbeidsforhold - */ + /** Har konto negativ saldo, ser på laveste saldo ved flere arbeidsforhold */ public boolean negativSaldo(Stønadskontotype stønadskontoType) { return minSaldo(stønadskontoType) < 0; } - /** - * Forenklet implementasjon til bruk ifm berørt-vurderinger - */ - private boolean sjekkNegativSaldoKonservativ(Stønadskontotype stønadskontoType, - List eneparten, - Set aktiviteterEneparten, - List andreparten) { + /** Forenklet implementasjon til bruk ifm berørt-vurderinger */ + private boolean sjekkNegativSaldoKonservativ( + Stønadskontotype stønadskontoType, + List eneparten, + Set aktiviteterEneparten, + List andreparten) { var initSaldo = getMaxDagerITrekkdager(stønadskontoType); var forbruktAnnenpart = minForbruktAvPerioder(stønadskontoType, andreparten); var startSaldo = initSaldo.subtract(forbruktAnnenpart); - return aktiviteterEneparten.stream().anyMatch(a -> startSaldo.subtract(forbruktSøker(stønadskontoType, a, eneparten)).mindreEnn0()); + return aktiviteterEneparten.stream() + .anyMatch( + a -> + startSaldo + .subtract(forbruktSøker(stønadskontoType, a, eneparten)) + .mindreEnn0()); } public boolean nokDagerÅFrigiPåAnnenpart(Stønadskontotype stønadskontoType) { @@ -300,7 +369,9 @@ private boolean sjekkNegativSaldoKonservativ(Stønadskontotype stønadskontoType } public boolean søktSamtidigUttak(Stønadskontotype stønadskontoType) { - return søkersPerioder.stream().filter(p -> søktSamtidigUttak(stønadskontoType, p)).anyMatch(FastsattUttakPeriode::isSamtidigUttak); + return søkersPerioder.stream() + .filter(p -> søktSamtidigUttak(stønadskontoType, p)) + .anyMatch(FastsattUttakPeriode::isSamtidigUttak); } public boolean negativSaldoPåNoenKonto() { @@ -308,16 +379,26 @@ private boolean sjekkNegativSaldoKonservativ(Stønadskontotype stønadskontoType } public boolean negativSaldoPåNoenKontoKonservativ() { - return stønadskonti.keySet() - .stream() - .anyMatch(stønadskonto -> sjekkNegativSaldoKonservativ(stønadskonto, søkersPerioder, søkersAktiviteter, annenpartsPerioder)); + return stønadskonti.keySet().stream() + .anyMatch( + stønadskonto -> + sjekkNegativSaldoKonservativ( + stønadskonto, + søkersPerioder, + søkersAktiviteter, + annenpartsPerioder)); } public boolean negativSaldoPåNoenKontoByttParterKonservativ() { var aktiviteter = aktiviteterForAnnenpart(); - return stønadskonti.keySet() - .stream() - .anyMatch(stønadskonto -> sjekkNegativSaldoKonservativ(stønadskonto, annenpartsPerioder, aktiviteter, søkersPerioder)); + return stønadskonti.keySet().stream() + .anyMatch( + stønadskonto -> + sjekkNegativSaldoKonservativ( + stønadskonto, + annenpartsPerioder, + aktiviteter, + søkersPerioder)); } public int getMaxDager(Stønadskontotype stønadskontotype) { @@ -351,19 +432,37 @@ private Trekkdager frigitteDager(Stønadskontotype stønadskonto) { for (var overlappendePeriode : overlappendePerioder) { if (periode.isOpphold() && innvilgetMedTrekkdager(overlappendePeriode)) { sum = sum.add(trekkdagerForOppholdsperiode(stønadskonto, periode)); - } else if (!tapendePeriode(periode, overlappendePeriode) && innvilgetMedTrekkdager(periode)) { - sum = sum.add(frigitteDagerVanligeStønadskontoer(stønadskonto, periode, overlappendePeriode)); - } else if (tapendePeriode(periode, overlappendePeriode) && overlappendePeriode.isOpphold()) { - var delFom = overlappendePeriode.getFom().isBefore(periode.getFom()) ? periode.getFom() : overlappendePeriode.getFom(); - var delTom = overlappendePeriode.getTom().isBefore(periode.getTom()) ? overlappendePeriode.getTom() : periode.getTom(); - sum = sum.add(trekkdagerForOppholdsperiode(stønadskonto, overlappendePeriode.getOppholdÅrsak(), delFom, delTom)); + } else if (!tapendePeriode(periode, overlappendePeriode) + && innvilgetMedTrekkdager(periode)) { + sum = + sum.add( + frigitteDagerVanligeStønadskontoer( + stønadskonto, periode, overlappendePeriode)); + } else if (tapendePeriode(periode, overlappendePeriode) + && overlappendePeriode.isOpphold()) { + var delFom = + overlappendePeriode.getFom().isBefore(periode.getFom()) + ? periode.getFom() + : overlappendePeriode.getFom(); + var delTom = + overlappendePeriode.getTom().isBefore(periode.getTom()) + ? overlappendePeriode.getTom() + : periode.getTom(); + sum = + sum.add( + trekkdagerForOppholdsperiode( + stønadskonto, + overlappendePeriode.getOppholdÅrsak(), + delFom, + delTom)); } } } return sum; } - private boolean tapendePeriode(FastsattUttakPeriode periode, FastsattUttakPeriode overlappendePeriode) { + private boolean tapendePeriode( + FastsattUttakPeriode periode, FastsattUttakPeriode overlappendePeriode) { if (berørtBehandling) { return true; } @@ -378,30 +477,47 @@ private boolean tapendePeriode(FastsattUttakPeriode periode, FastsattUttakPeriod return periodeMottattDato.get().isBefore(overlappendePeriodeMottattDato.get()); } - private Trekkdager frigitteDagerVanligeStønadskontoer(Stønadskontotype stønadskonto, - FastsattUttakPeriode periode, - FastsattUttakPeriode overlappende) { + private Trekkdager frigitteDagerVanligeStønadskontoer( + Stønadskontotype stønadskonto, + FastsattUttakPeriode periode, + FastsattUttakPeriode overlappende) { if (overlappende.isSamtidigUttak()) { return Trekkdager.ZERO; } var frigitte = Trekkdager.ZERO; - var delFom = periode.getFom().isBefore(overlappende.getFom()) ? overlappende.getFom() : periode.getFom(); - var delTom = periode.getTom().isBefore(overlappende.getTom()) ? periode.getTom() : overlappende.getTom(); + var delFom = + periode.getFom().isBefore(overlappende.getFom()) + ? overlappende.getFom() + : periode.getFom(); + var delTom = + periode.getTom().isBefore(overlappende.getTom()) + ? periode.getTom() + : overlappende.getTom(); if (overlappende.isOpphold()) { - frigitte = trekkDagerFraDelAvPeriode(delFom, delTom, overlappende.getFom(), overlappende.getTom(), - trekkdagerForOppholdsperiode(stønadskonto, overlappende)); + frigitte = + trekkDagerFraDelAvPeriode( + delFom, + delTom, + overlappende.getFom(), + overlappende.getTom(), + trekkdagerForOppholdsperiode(stønadskonto, overlappende)); } else if (!periode.isSamtidigUttak()) { var annenPartAktivitetMedKonto = aktivitetMedStønadskonto(stønadskonto, overlappende); if (annenPartAktivitetMedKonto.isPresent()) { - frigitte = trekkDagerFraDelAvPeriode(delFom, delTom, overlappende.getFom(), overlappende.getTom(), - annenPartAktivitetMedKonto.get().getTrekkdager()); + frigitte = + trekkDagerFraDelAvPeriode( + delFom, + delTom, + overlappende.getFom(), + overlappende.getTom(), + annenPartAktivitetMedKonto.get().getTrekkdager()); } } return frigitte; } - - private Trekkdager minForbruktAvPerioder(Stønadskontotype stønadskonto, List perioder) { + private Trekkdager minForbruktAvPerioder( + Stønadskontotype stønadskonto, List perioder) { Map forbrukte = new HashMap<>(); for (var periode : perioder) { for (var annenpartAktivitet : aktiviteterIPerioder(perioder)) { @@ -412,37 +528,57 @@ private Trekkdager minForbruktAvPerioder(Stønadskontotype stønadskonto, List søkersPerioder) { - return ForbruksTeller.forbruksTellerKontoMedUnntak(stønadskonto, aktivitet, søkersPerioder, p -> !p.isOpphold(), - this::trekkdagerForOppholdsperiode); - } - - private Trekkdager forbruktSøkersMinsterett(Stønadskontotype stønadskonto, - AktivitetIdentifikator aktivitet, - List søkersPerioder) { - return ForbruksTeller.forbruksTellerKontoKunForbruk(stønadskonto, aktivitet, søkersPerioder, FastsattUttakPeriode::isForbrukMinsterett); - } - - - private Trekkdager trekkdagerForUttaksperiode(Stønadskontotype stønadskonto, AktivitetIdentifikator aktivitet, FastsattUttakPeriode periode) { - return periode.getAktiviteter() - .stream() - .filter(a -> a.getAktivitetIdentifikator().equals(aktivitet) && Objects.equals(a.getStønadskontotype(), stønadskonto)) - .findFirst() - .map(FastsattUttakPeriodeAktivitet::getTrekkdager) - .orElse(Trekkdager.ZERO); - } - - private Trekkdager trekkdagerForOppholdsperiode(Stønadskontotype stønadskonto, OppholdÅrsak årsak, LocalDate delFom, LocalDate delTom) { + private Trekkdager forbruktSøker( + Stønadskontotype stønadskonto, + AktivitetIdentifikator aktivitet, + List søkersPerioder) { + return ForbruksTeller.forbruksTellerKontoMedUnntak( + stønadskonto, + aktivitet, + søkersPerioder, + p -> !p.isOpphold(), + this::trekkdagerForOppholdsperiode); + } + + private Trekkdager forbruktSøkersMinsterett( + Stønadskontotype stønadskonto, + AktivitetIdentifikator aktivitet, + List søkersPerioder) { + return ForbruksTeller.forbruksTellerKontoKunForbruk( + stønadskonto, aktivitet, søkersPerioder, FastsattUttakPeriode::isForbrukMinsterett); + } + + private Trekkdager trekkdagerForUttaksperiode( + Stønadskontotype stønadskonto, + AktivitetIdentifikator aktivitet, + FastsattUttakPeriode periode) { + return periode.getAktiviteter().stream() + .filter( + a -> + a.getAktivitetIdentifikator().equals(aktivitet) + && Objects.equals(a.getStønadskontotype(), stønadskonto)) + .findFirst() + .map(FastsattUttakPeriodeAktivitet::getTrekkdager) + .orElse(Trekkdager.ZERO); + } + + private Trekkdager trekkdagerForOppholdsperiode( + Stønadskontotype stønadskonto, OppholdÅrsak årsak, LocalDate delFom, LocalDate delTom) { var stønadskontoFraOpphold = OppholdÅrsak.map(årsak); if (Objects.equals(stønadskontoFraOpphold, stønadskonto)) { return new Trekkdager(Virkedager.beregnAntallVirkedager(delFom, delTom)); @@ -450,8 +586,10 @@ private Trekkdager trekkdagerForOppholdsperiode(Stønadskontotype stønadskonto, return Trekkdager.ZERO; } - private Trekkdager trekkdagerForOppholdsperiode(Stønadskontotype stønadskonto, FastsattUttakPeriode periode) { - return trekkdagerForOppholdsperiode(stønadskonto, periode.getOppholdÅrsak(), periode.getFom(), periode.getTom()); + private Trekkdager trekkdagerForOppholdsperiode( + Stønadskontotype stønadskonto, FastsattUttakPeriode periode) { + return trekkdagerForOppholdsperiode( + stønadskonto, periode.getOppholdÅrsak(), periode.getFom(), periode.getTom()); } public Set aktiviteterForSøker() { @@ -460,67 +598,89 @@ private Trekkdager trekkdagerForOppholdsperiode(Stønadskontotype stønadskonto, public Set aktiviteterForAnnenpart() { return annenpartsPerioder.stream() - .flatMap(p -> p.getAktiviteter().stream()) - .map(FastsattUttakPeriodeAktivitet::getAktivitetIdentifikator) - .collect(Collectors.toSet()); + .flatMap(p -> p.getAktiviteter().stream()) + .map(FastsattUttakPeriodeAktivitet::getAktivitetIdentifikator) + .collect(Collectors.toSet()); } - private boolean søktSamtidigUttak(Stønadskontotype stønadskontoType, FastsattUttakPeriode periode) { - return periode.getAktiviteter().stream().anyMatch(a -> Objects.equals(a.getStønadskontotype(), stønadskontoType)); + private boolean søktSamtidigUttak( + Stønadskontotype stønadskontoType, FastsattUttakPeriode periode) { + return periode.getAktiviteter().stream() + .anyMatch(a -> Objects.equals(a.getStønadskontotype(), stønadskontoType)); } private Trekkdager antallDagerAnnenpartKanFrigi(Stønadskontotype stønadskontoType) { var søkersSistePeriodeMedTrekkdager = søkersSistePeriodeMedTrekkdagerSomIkkeOverlapper(); - var annenpartPerioderEtterSøkersSistePeriodeMedTrekkdager = finnAnnenpartPerioderEtterPeriode(søkersSistePeriodeMedTrekkdager); + var annenpartPerioderEtterSøkersSistePeriodeMedTrekkdager = + finnAnnenpartPerioderEtterPeriode(søkersSistePeriodeMedTrekkdager); return annenpartPerioderEtterSøkersSistePeriodeMedTrekkdager.stream() - .map(p -> antallDagerFrigitt(stønadskontoType, søkersSistePeriodeMedTrekkdager, p)) - .reduce(Trekkdager.ZERO, Trekkdager::add); + .map(p -> antallDagerFrigitt(stønadskontoType, søkersSistePeriodeMedTrekkdager, p)) + .reduce(Trekkdager.ZERO, Trekkdager::add); } - private Trekkdager antallDagerFrigitt(Stønadskontotype stønadskontoType, - FastsattUttakPeriode søkersSistePeriodeMedTrekkdager, - FastsattUttakPeriode annenpartPeriode) { + private Trekkdager antallDagerFrigitt( + Stønadskontotype stønadskontoType, + FastsattUttakPeriode søkersSistePeriodeMedTrekkdager, + FastsattUttakPeriode annenpartPeriode) { if (overlapper(søkersSistePeriodeMedTrekkdager, annenpartPeriode)) { - return forbruktFraDelAvAnnenpartsPeriode(stønadskontoType, søkersSistePeriodeMedTrekkdager, annenpartPeriode); + return forbruktFraDelAvAnnenpartsPeriode( + stønadskontoType, søkersSistePeriodeMedTrekkdager, annenpartPeriode); } else { return minForbrukteDager(annenpartPeriode, stønadskontoType); } } - private Trekkdager forbruktFraDelAvAnnenpartsPeriode(Stønadskontotype stønadskontoType, - FastsattUttakPeriode søkersSistePeriodeMedTrekkdager, - FastsattUttakPeriode annenpartPeriode) { - return aktivitetMedStønadskonto(stønadskontoType, annenpartPeriode).map(FastsattUttakPeriodeAktivitet::getTrekkdager) - .map(a -> trekkDagerFraDelAvPeriode(søkersSistePeriodeMedTrekkdager.getFom(), annenpartPeriode.getTom(), annenpartPeriode.getFom(), - annenpartPeriode.getTom(), a)) - .orElse(Trekkdager.ZERO); - } - - private Trekkdager minForbrukteDager(FastsattUttakPeriode periode, Stønadskontotype stønadskontoType) { + private Trekkdager forbruktFraDelAvAnnenpartsPeriode( + Stønadskontotype stønadskontoType, + FastsattUttakPeriode søkersSistePeriodeMedTrekkdager, + FastsattUttakPeriode annenpartPeriode) { + return aktivitetMedStønadskonto(stønadskontoType, annenpartPeriode) + .map(FastsattUttakPeriodeAktivitet::getTrekkdager) + .map( + a -> + trekkDagerFraDelAvPeriode( + søkersSistePeriodeMedTrekkdager.getFom(), + annenpartPeriode.getTom(), + annenpartPeriode.getFom(), + annenpartPeriode.getTom(), + a)) + .orElse(Trekkdager.ZERO); + } + + private Trekkdager minForbrukteDager( + FastsattUttakPeriode periode, Stønadskontotype stønadskontoType) { if (periode.isOpphold()) { return trekkdagerForOppholdsperiode(stønadskontoType, periode); } - return periode.getAktiviteter() - .stream() - .filter(a -> Objects.equals(stønadskontoType, a.getStønadskontotype())) - .map(FastsattUttakPeriodeAktivitet::getTrekkdager) - .min(Trekkdager::compareTo) - .orElse(Trekkdager.ZERO); + return periode.getAktiviteter().stream() + .filter(a -> Objects.equals(stønadskontoType, a.getStønadskontotype())) + .map(FastsattUttakPeriodeAktivitet::getTrekkdager) + .min(Trekkdager::compareTo) + .orElse(Trekkdager.ZERO); } - private List finnAnnenpartPerioderEtterPeriode(FastsattUttakPeriode periode) { - return annenpartsPerioder.stream().filter(p -> overlapper(periode, p) || periode.getTom().isBefore(p.getFom())).toList(); + private List finnAnnenpartPerioderEtterPeriode( + FastsattUttakPeriode periode) { + return annenpartsPerioder.stream() + .filter(p -> overlapper(periode, p) || periode.getTom().isBefore(p.getFom())) + .toList(); } private FastsattUttakPeriode søkersSistePeriodeMedTrekkdagerSomIkkeOverlapper() { var sorted = sortByReversedTom(søkersPerioder); - var periode = sorted.stream().filter(this::harTrekkdager).filter(p -> overlappendePeriode(p, annenpartsPerioder).isEmpty()).findFirst(); + var periode = + sorted.stream() + .filter(this::harTrekkdager) + .filter(p -> overlappendePeriode(p, annenpartsPerioder).isEmpty()) + .findFirst(); return periode.orElse(sorted.get(sorted.size() - 1)); } private boolean harTrekkdager(FastsattUttakPeriode periode) { - return periode.getAktiviteter().stream().map(FastsattUttakPeriodeAktivitet::getTrekkdager).anyMatch(Trekkdager::merEnn0); + return periode.getAktiviteter().stream() + .map(FastsattUttakPeriodeAktivitet::getTrekkdager) + .anyMatch(Trekkdager::merEnn0); } private List sortByReversedTom(List perioder) { @@ -528,26 +688,36 @@ private List sortByReversedTom(List } private int minSaldo(Stønadskontotype stønadskonto) { - return aktiviteterForSøker().stream().map(a -> saldo(stønadskonto, a)).min(Comparator.naturalOrder()).orElse(0); + return aktiviteterForSøker().stream() + .map(a -> saldo(stønadskonto, a)) + .min(Comparator.naturalOrder()) + .orElse(0); } - private List fjernOppholdsperioderEtterSisteUttaksdato(List perioderSøker, - List perioderAnnenpart) { + private List fjernOppholdsperioderEtterSisteUttaksdato( + List perioderSøker, + List perioderAnnenpart) { var sisteUttaksdatoSøker = sisteUttaksdato(perioderSøker); var sisteUttaksdatoAnnenpart = sisteUttaksdato(perioderAnnenpart); if (sisteUttaksdatoSøker.isEmpty() || sisteUttaksdatoAnnenpart.isEmpty()) { return perioderAnnenpart; } - var sisteUttaksdatoFelles = sisteUttaksdatoSøker.get() - .isAfter(sisteUttaksdatoAnnenpart.get()) ? sisteUttaksdatoSøker.get() : sisteUttaksdatoAnnenpart.get(); + var sisteUttaksdatoFelles = + sisteUttaksdatoSøker.get().isAfter(sisteUttaksdatoAnnenpart.get()) + ? sisteUttaksdatoSøker.get() + : sisteUttaksdatoAnnenpart.get(); var resultat = new ArrayList(); for (var periode : perioderAnnenpart) { if (periode.isOpphold()) { if (!periode.getFom().isAfter(sisteUttaksdatoFelles)) { var nyFom = periode.getFom(); - //Hvis oppholdsperioder delvis overlapper med annenpart skal deler av oppholdet brukes - var nyTom = periode.getTom().isAfter(sisteUttaksdatoFelles) ? sisteUttaksdatoFelles : periode.getTom(); + // Hvis oppholdsperioder delvis overlapper med annenpart skal deler av oppholdet + // brukes + var nyTom = + periode.getTom().isAfter(sisteUttaksdatoFelles) + ? sisteUttaksdatoFelles + : periode.getTom(); resultat.add(kopier(periode, nyFom, nyTom)); } } else { @@ -557,14 +727,15 @@ private List fjernOppholdsperioderEtterSisteUttaksdato(Lis return resultat; } - private FastsattUttakPeriode kopier(FastsattUttakPeriode periode, LocalDate nyFom, LocalDate nyTom) { + private FastsattUttakPeriode kopier( + FastsattUttakPeriode periode, LocalDate nyFom, LocalDate nyTom) { return new FastsattUttakPeriode.Builder(periode).tidsperiode(nyFom, nyTom).build(); } private Optional sisteUttaksdato(List perioder) { return perioder.stream() - .filter(periode -> !periode.isOpphold()) - .max(comparing(FastsattUttakPeriode::getTom)) - .map(FastsattUttakPeriode::getTom); + .filter(periode -> !periode.isOpphold()) + .max(comparing(FastsattUttakPeriode::getTom)) + .map(FastsattUttakPeriode::getTom); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningFlerbarnsdager.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningFlerbarnsdager.java index 659dface..c4bc3df0 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningFlerbarnsdager.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningFlerbarnsdager.java @@ -11,7 +11,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.FastsattUttakPeriode; @@ -25,11 +24,12 @@ class SaldoUtregningFlerbarnsdager { private final Trekkdager flerbarnsdager; private final Trekkdager minsterettDager; - public SaldoUtregningFlerbarnsdager(List søkersPerioder, - List annenpartsPerioder, - Set søkersAktiviteter, - Trekkdager flerbarnsdager, - Trekkdager minsterettDager) { + public SaldoUtregningFlerbarnsdager( + List søkersPerioder, + List annenpartsPerioder, + Set søkersAktiviteter, + Trekkdager flerbarnsdager, + Trekkdager minsterettDager) { this.søkersPerioder = søkersPerioder; this.annenpartsPerioder = annenpartsPerioder; @@ -39,32 +39,45 @@ public SaldoUtregningFlerbarnsdager(List søkersPerioder, } Trekkdager restSaldo() { - return søkersAktiviteter.stream().map(this::restSaldo).max(Trekkdager::compareTo).orElse(Trekkdager.ZERO); + return søkersAktiviteter.stream() + .map(this::restSaldo) + .max(Trekkdager::compareTo) + .orElse(Trekkdager.ZERO); } Trekkdager restSaldo(AktivitetIdentifikator aktivitet) { var forbruktSøker = forbruktSøker(aktivitet, søkersPerioder); var forbruktAnnenpart = minForbruktAnnenpart(); - //frigitte dager er dager fra annenpart som blir ledig når søker tar uttak i samme periode + // frigitte dager er dager fra annenpart som blir ledig når søker tar uttak i samme periode var frigitteDager = frigitteDager(); - return flerbarnsdager.subtract(forbruktSøker).subtract(forbruktAnnenpart).add(frigitteDager); + return flerbarnsdager + .subtract(forbruktSøker) + .subtract(forbruktAnnenpart) + .add(frigitteDager); } Trekkdager getMaxDagerFlerbarnsdager() { return Optional.ofNullable(flerbarnsdager).orElse(Trekkdager.ZERO); } - - private Trekkdager forbruktSøker(AktivitetIdentifikator aktivitet, List søkersPerioder) { - - var perioderMedFlerbarnsdager = søkersPerioder.stream().filter(this::trekkFlerbarnsdager).toList(); - return ForbruksTeller.forbruksTeller(null, aktivitet, perioderMedFlerbarnsdager, p -> !p.isOpphold(), (s, p) -> Trekkdager.ZERO, - (p, a) -> trekkFlerbarnsdager(p)); + private Trekkdager forbruktSøker( + AktivitetIdentifikator aktivitet, List søkersPerioder) { + + var perioderMedFlerbarnsdager = + søkersPerioder.stream().filter(this::trekkFlerbarnsdager).toList(); + return ForbruksTeller.forbruksTeller( + null, + aktivitet, + perioderMedFlerbarnsdager, + p -> !p.isOpphold(), + (s, p) -> Trekkdager.ZERO, + (p, a) -> trekkFlerbarnsdager(p)); } private Trekkdager minForbruktAnnenpart() { Map forbrukte = new HashMap<>(); - var annenpartsPerioderMedFlerbarnsdager = annenpartsPerioder.stream().filter(this::trekkFlerbarnsdager).toList(); + var annenpartsPerioderMedFlerbarnsdager = + annenpartsPerioder.stream().filter(this::trekkFlerbarnsdager).toList(); for (var periode : annenpartsPerioderMedFlerbarnsdager) { for (var annenpartAktivitet : aktiviteterIPerioder(annenpartsPerioder)) { final Trekkdager trekkdager; @@ -74,30 +87,39 @@ private Trekkdager minForbruktAnnenpart() { trekkdager = dagerForUttaksperiode(annenpartAktivitet, periode); } - forbrukte.put(annenpartAktivitet, forbrukte.getOrDefault(annenpartAktivitet, Trekkdager.ZERO).add(trekkdager)); + forbrukte.put( + annenpartAktivitet, + forbrukte + .getOrDefault(annenpartAktivitet, Trekkdager.ZERO) + .add(trekkdager)); } } return forbrukte.values().stream().min(Trekkdager::compareTo).orElse(Trekkdager.ZERO); } private boolean trekkFlerbarnsdager(FastsattUttakPeriode periode) { - return periode.isFlerbarnsdager() && (periode.isForbrukMinsterett() || minsterettDager.equals(Trekkdager.ZERO)); + return periode.isFlerbarnsdager() + && (periode.isForbrukMinsterett() || minsterettDager.equals(Trekkdager.ZERO)); } private Trekkdager minForbrukteDager(FastsattUttakPeriode periode) { if (!trekkFlerbarnsdager(periode)) { return Trekkdager.ZERO; } - return periode.getAktiviteter().stream().map(FastsattUttakPeriodeAktivitet::getTrekkdager).min(Trekkdager::compareTo).orElse(Trekkdager.ZERO); + return periode.getAktiviteter().stream() + .map(FastsattUttakPeriodeAktivitet::getTrekkdager) + .min(Trekkdager::compareTo) + .orElse(Trekkdager.ZERO); } private Trekkdager frigitteDager() { Trekkdager sum = Trekkdager.ZERO; for (var periode : søkersPerioder) { if (trekkFlerbarnsdager(periode)) { - var overlappendePerioderMedFlerbarnsdager = overlappendePeriode(periode, annenpartsPerioder).stream() - .filter(this::trekkFlerbarnsdager) - .toList(); + var overlappendePerioderMedFlerbarnsdager = + overlappendePeriode(periode, annenpartsPerioder).stream() + .filter(this::trekkFlerbarnsdager) + .toList(); for (var overlappendePeriode : overlappendePerioderMedFlerbarnsdager) { if (innvilgetMedTrekkdager(periode)) { sum = sum.add(frigitteDager(periode, overlappendePeriode)); @@ -108,20 +130,33 @@ private Trekkdager frigitteDager() { return sum; } - private Trekkdager dagerForUttaksperiode(AktivitetIdentifikator aktivitet, FastsattUttakPeriode periode) { - return periode.getAktiviteter() - .stream() - .filter(a -> a.getAktivitetIdentifikator().equals(aktivitet) && trekkFlerbarnsdager(periode)) - .map(FastsattUttakPeriodeAktivitet::getTrekkdager) - .findFirst() - .orElse(Trekkdager.ZERO); + private Trekkdager dagerForUttaksperiode( + AktivitetIdentifikator aktivitet, FastsattUttakPeriode periode) { + return periode.getAktiviteter().stream() + .filter( + a -> + a.getAktivitetIdentifikator().equals(aktivitet) + && trekkFlerbarnsdager(periode)) + .map(FastsattUttakPeriodeAktivitet::getTrekkdager) + .findFirst() + .orElse(Trekkdager.ZERO); } - private Trekkdager frigitteDager(FastsattUttakPeriode periode, FastsattUttakPeriode overlappende) { + private Trekkdager frigitteDager( + FastsattUttakPeriode periode, FastsattUttakPeriode overlappende) { var flerbarnsdagerOverlappendePeriode = minForbrukteDager(overlappende); var flerbarnsdagerPeriode = minForbrukteDager(periode); - //Forenkling: Mulig vi trenger utvidelse her, kan bli feil hvis begge graderer flerbarnsdager - var min = flerbarnsdagerPeriode.compareTo(flerbarnsdagerOverlappendePeriode) > 0 ? flerbarnsdagerPeriode : flerbarnsdagerOverlappendePeriode; - return trekkDagerFraDelAvPeriode(periode.getFom(), periode.getTom(), overlappende.getFom(), overlappende.getTom(), min); + // Forenkling: Mulig vi trenger utvidelse her, kan bli feil hvis begge graderer + // flerbarnsdager + var min = + flerbarnsdagerPeriode.compareTo(flerbarnsdagerOverlappendePeriode) > 0 + ? flerbarnsdagerPeriode + : flerbarnsdagerOverlappendePeriode; + return trekkDagerFraDelAvPeriode( + periode.getFom(), + periode.getTom(), + overlappende.getFom(), + overlappende.getTom(), + min); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningGrunnlag.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningGrunnlag.java index ce883a5e..de01c5af 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningGrunnlag.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningGrunnlag.java @@ -8,7 +8,6 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; @@ -26,23 +25,26 @@ public class SaldoUtregningGrunnlag { private final boolean berørtBehandling; private final List annenpartsPerioder; private final List søktePerioder; - private final Map stønadskonti = new EnumMap<>(Stønadskontotype.class); - private final Map spesialkonti = new EnumMap<>(Spesialkontotype.class); + private final Map stønadskonti = + new EnumMap<>(Stønadskontotype.class); + private final Map spesialkonti = + new EnumMap<>(Spesialkontotype.class); private final Set aktiviteter; private final LocalDateTime sisteSøknadMottattTidspunktSøker; private final LocalDateTime sisteSøknadMottattTidspunktAnnenpart; private final boolean kreverSammenhengendeUttak; - private SaldoUtregningGrunnlag(List søkersFastsattePerioder, - LocalDate utregningsdato, - boolean berørtBehandling, - List annenpartsPerioder, - List søktePerioder, - Kontoer kontoer, - Set aktiviteter, - LocalDateTime sisteSøknadMottattTidspunktSøker, - LocalDateTime sisteSøknadMottattTidspunktAnnenpart, - boolean kreverSammenhengendeUttak) { + private SaldoUtregningGrunnlag( + List søkersFastsattePerioder, + LocalDate utregningsdato, + boolean berørtBehandling, + List annenpartsPerioder, + List søktePerioder, + Kontoer kontoer, + Set aktiviteter, + LocalDateTime sisteSøknadMottattTidspunktSøker, + LocalDateTime sisteSøknadMottattTidspunktAnnenpart, + boolean kreverSammenhengendeUttak) { this.søkersFastsattePerioder = søkersFastsattePerioder; this.utregningsdato = utregningsdato; this.berørtBehandling = berørtBehandling; @@ -52,51 +54,93 @@ private SaldoUtregningGrunnlag(List søkersFastsattePeriod this.sisteSøknadMottattTidspunktSøker = sisteSøknadMottattTidspunktSøker; this.sisteSøknadMottattTidspunktAnnenpart = sisteSøknadMottattTidspunktAnnenpart; this.kreverSammenhengendeUttak = kreverSammenhengendeUttak; - kontoer.getStønadskontotyper().forEach(k -> this.stønadskonti.put(k, new Trekkdager(kontoer.getStønadskontoTrekkdager(k)))); - kontoer.getSpesialkontotyper().forEach(k -> this.spesialkonti.put(k, new Trekkdager(kontoer.getSpesialkontoTrekkdager(k)))); + kontoer.getStønadskontotyper() + .forEach( + k -> + this.stønadskonti.put( + k, new Trekkdager(kontoer.getStønadskontoTrekkdager(k)))); + kontoer.getSpesialkontotyper() + .forEach( + k -> + this.spesialkonti.put( + k, new Trekkdager(kontoer.getSpesialkontoTrekkdager(k)))); } // Brukes av fpsak til utregning av alt - public static SaldoUtregningGrunnlag forUtregningAvHeleUttaket(List søkersFastsattePerioder, - boolean berørtBehandling, - List annenpartsPerioder, - Kontoer kontoer, - LocalDateTime sisteSøknadMottattTidspunktSøker, - LocalDateTime sisteSøknadMottattTidspunktAnnenpart, - boolean kreverSammenhengendeUttak) { - var aktiviteter = søkersFastsattePerioder.stream() - .flatMap(p -> p.getAktiviteter().stream()) - .map(a -> a.getAktivitetIdentifikator()) - .collect(Collectors.toSet()); - return new SaldoUtregningGrunnlag(søkersFastsattePerioder, LocalDate.MAX, berørtBehandling, annenpartsPerioder, List.of(), kontoer, - aktiviteter, sisteSøknadMottattTidspunktSøker, sisteSøknadMottattTidspunktAnnenpart, kreverSammenhengendeUttak); + public static SaldoUtregningGrunnlag forUtregningAvHeleUttaket( + List søkersFastsattePerioder, + boolean berørtBehandling, + List annenpartsPerioder, + Kontoer kontoer, + LocalDateTime sisteSøknadMottattTidspunktSøker, + LocalDateTime sisteSøknadMottattTidspunktAnnenpart, + boolean kreverSammenhengendeUttak) { + var aktiviteter = + søkersFastsattePerioder.stream() + .flatMap(p -> p.getAktiviteter().stream()) + .map(a -> a.getAktivitetIdentifikator()) + .collect(Collectors.toSet()); + return new SaldoUtregningGrunnlag( + søkersFastsattePerioder, + LocalDate.MAX, + berørtBehandling, + annenpartsPerioder, + List.of(), + kontoer, + aktiviteter, + sisteSøknadMottattTidspunktSøker, + sisteSøknadMottattTidspunktAnnenpart, + kreverSammenhengendeUttak); } - // Brukes som input til fastsettingsregler - inneholder tidligere vedtatte før endringsdato + perioder opp til aktuell periode - public static SaldoUtregningGrunnlag forUtregningAvDelerAvUttak(List søkersFastsattePerioder, - List annenpartsPerioder, - RegelGrunnlag grunnlag, - LocalDate utregningsdato) { - var sisteSøknadMottattTidspunktAnnenpart = Optional.ofNullable(grunnlag.getAnnenPart()) - .map(AnnenPart::getSisteSøknadMottattTidspunkt) - .orElse(null); - return new SaldoUtregningGrunnlag(søkersFastsattePerioder, utregningsdato, false, annenpartsPerioder, List.of(), grunnlag.getKontoer(), - grunnlag.getArbeid().getAktiviteter(), grunnlag.getSøknad().getMottattTidspunkt(), sisteSøknadMottattTidspunktAnnenpart, - grunnlag.getBehandling().isKreverSammenhengendeUttak()); + // Brukes som input til fastsettingsregler - inneholder tidligere vedtatte før endringsdato + + // perioder opp til aktuell periode + public static SaldoUtregningGrunnlag forUtregningAvDelerAvUttak( + List søkersFastsattePerioder, + List annenpartsPerioder, + RegelGrunnlag grunnlag, + LocalDate utregningsdato) { + var sisteSøknadMottattTidspunktAnnenpart = + Optional.ofNullable(grunnlag.getAnnenPart()) + .map(AnnenPart::getSisteSøknadMottattTidspunkt) + .orElse(null); + return new SaldoUtregningGrunnlag( + søkersFastsattePerioder, + utregningsdato, + false, + annenpartsPerioder, + List.of(), + grunnlag.getKontoer(), + grunnlag.getArbeid().getAktiviteter(), + grunnlag.getSøknad().getMottattTidspunkt(), + sisteSøknadMottattTidspunktAnnenpart, + grunnlag.getBehandling().isKreverSammenhengendeUttak()); } // Brukes som input til fastsettingsregler for berørte behandlinger - public static SaldoUtregningGrunnlag forUtregningAvDelerAvUttakBerørtBehandling(List søkersFastsattePerioder, - List annenpartsPerioder, - RegelGrunnlag grunnlag, - LocalDate utregningsdato, - List søktePerioder) { - return new SaldoUtregningGrunnlag(søkersFastsattePerioder, utregningsdato, true, annenpartsPerioder, søktePerioder, grunnlag.getKontoer(), - grunnlag.getArbeid().getAktiviteter(), null, null, grunnlag.getBehandling().isKreverSammenhengendeUttak()); + public static SaldoUtregningGrunnlag forUtregningAvDelerAvUttakBerørtBehandling( + List søkersFastsattePerioder, + List annenpartsPerioder, + RegelGrunnlag grunnlag, + LocalDate utregningsdato, + List søktePerioder) { + return new SaldoUtregningGrunnlag( + søkersFastsattePerioder, + utregningsdato, + true, + annenpartsPerioder, + søktePerioder, + grunnlag.getKontoer(), + grunnlag.getArbeid().getAktiviteter(), + null, + null, + grunnlag.getBehandling().isKreverSammenhengendeUttak()); } List getSøkersFastsattePerioder() { - return søkersFastsattePerioder.stream().filter(p -> kreverSammenhengendeUttak || !p.isOpphold()).toList(); + return søkersFastsattePerioder.stream() + .filter(p -> kreverSammenhengendeUttak || !p.isOpphold()) + .toList(); } LocalDate getUtregningsdato() { @@ -108,7 +152,9 @@ LocalDate getUtregningsdato() { } List getAnnenpartsPerioder() { - return annenpartsPerioder.stream().filter(p -> kreverSammenhengendeUttak || !p.isOppholdsperiode()).toList(); + return annenpartsPerioder.stream() + .filter(p -> kreverSammenhengendeUttak || !p.isOppholdsperiode()) + .toList(); } public List getSøktePerioder() { diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningTjeneste.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningTjeneste.java index a39576f5..d32e8aef 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningTjeneste.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningTjeneste.java @@ -7,7 +7,6 @@ import java.util.Comparator; import java.util.List; import java.util.stream.Stream; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Virkedager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; @@ -19,72 +18,104 @@ public final class SaldoUtregningTjeneste { - private SaldoUtregningTjeneste() { - } + private SaldoUtregningTjeneste() {} public static SaldoUtregning lagUtregning(SaldoUtregningGrunnlag grunnlag) { - var annenpartsPerioder = finnRelevanteAnnenpartsPerioder(grunnlag.isBerørtBehandling(), grunnlag.getUtregningsdato(), - grunnlag.getAnnenpartsPerioder(), grunnlag.getSøktePerioder()); - - var søkersFastsattePerioder = knekkSøkersOppholdsperioder(annenpartsPerioder, grunnlag.getSøkersFastsattePerioder()).stream() - .filter(p -> !p.isInnvilgetGyldigUtsettelse()) - .toList(); - return new SaldoUtregning(grunnlag.getStønadskonti(), søkersFastsattePerioder, annenpartsPerioder, grunnlag); + var annenpartsPerioder = + finnRelevanteAnnenpartsPerioder( + grunnlag.isBerørtBehandling(), + grunnlag.getUtregningsdato(), + grunnlag.getAnnenpartsPerioder(), + grunnlag.getSøktePerioder()); + + var søkersFastsattePerioder = + knekkSøkersOppholdsperioder( + annenpartsPerioder, grunnlag.getSøkersFastsattePerioder()) + .stream() + .filter(p -> !p.isInnvilgetGyldigUtsettelse()) + .toList(); + return new SaldoUtregning( + grunnlag.getStønadskonti(), søkersFastsattePerioder, annenpartsPerioder, grunnlag); } - private static List knekkSøkersOppholdsperioder(List annenpartsPerioder, - List søkersFastsattePerioder1) { - var knekkpunkter = annenpartsPerioder.stream().flatMap(ap -> Stream.of(ap.getFom().minusDays(1), ap.getTom())).toList(); - return søkersFastsattePerioder1.stream().flatMap(p -> { - if (p.isOpphold()) { - return knekkOpphold(p, knekkpunkter).stream(); - } - return Stream.of(p); - }).toList(); + private static List knekkSøkersOppholdsperioder( + List annenpartsPerioder, + List søkersFastsattePerioder1) { + var knekkpunkter = + annenpartsPerioder.stream() + .flatMap(ap -> Stream.of(ap.getFom().minusDays(1), ap.getTom())) + .toList(); + return søkersFastsattePerioder1.stream() + .flatMap( + p -> { + if (p.isOpphold()) { + return knekkOpphold(p, knekkpunkter).stream(); + } + return Stream.of(p); + }) + .toList(); } - private static List knekkOpphold(FastsattUttakPeriode opphold, List knekkpunkter) { + private static List knekkOpphold( + FastsattUttakPeriode opphold, List knekkpunkter) { var etterKnekk = new ArrayList(); var sortedKnekk = knekkpunkter.stream().sorted(Comparator.naturalOrder()).toList(); var etterKnekkOpphold = opphold; for (var knekk : sortedKnekk) { - var tidsperiode = new LukketPeriode(etterKnekkOpphold.getFom(), etterKnekkOpphold.getTom()); + var tidsperiode = + new LukketPeriode(etterKnekkOpphold.getFom(), etterKnekkOpphold.getTom()); if (tidsperiode.overlapper(knekk) && !etterKnekkOpphold.getTom().isEqual(knekk)) { - var førKnekkOpphold = new FastsattUttakPeriode.Builder(etterKnekkOpphold).tidsperiode(etterKnekkOpphold.getFom(), knekk).build(); - etterKnekkOpphold = new FastsattUttakPeriode.Builder(etterKnekkOpphold).tidsperiode(knekk.plusDays(1), etterKnekkOpphold.getTom()) - .build(); + var førKnekkOpphold = + new FastsattUttakPeriode.Builder(etterKnekkOpphold) + .tidsperiode(etterKnekkOpphold.getFom(), knekk) + .build(); + etterKnekkOpphold = + new FastsattUttakPeriode.Builder(etterKnekkOpphold) + .tidsperiode(knekk.plusDays(1), etterKnekkOpphold.getTom()) + .build(); etterKnekk.add(førKnekkOpphold); } } etterKnekk.add(etterKnekkOpphold); return etterKnekk; - } - private static List finnRelevanteAnnenpartsPerioder(boolean isBerørtBehandling, - LocalDate utregningsdato, - List annenPartUttaksperioder, - List søktePerioder) { + private static List finnRelevanteAnnenpartsPerioder( + boolean isBerørtBehandling, + LocalDate utregningsdato, + List annenPartUttaksperioder, + List søktePerioder) { var annenpartsPerioder = annenPartUttaksperioder; if (isBerørtBehandling) { - annenpartsPerioder = annenpartsPerioder.stream().flatMap(ap -> finnDelerAvOppholdsperiode(søktePerioder, ap)).toList(); + annenpartsPerioder = + annenpartsPerioder.stream() + .flatMap(ap -> finnDelerAvOppholdsperiode(søktePerioder, ap)) + .toList(); } else { - annenpartsPerioder = annenpartsPerioder.stream().filter(ap -> ap.getFom().isBefore(utregningsdato)).map(ap -> { - if (ap.overlapper(utregningsdato)) { - return knekk(ap, ap.getFom(), utregningsdato.minusDays(1)); - } - return ap; - }).toList(); + annenpartsPerioder = + annenpartsPerioder.stream() + .filter(ap -> ap.getFom().isBefore(utregningsdato)) + .map( + ap -> { + if (ap.overlapper(utregningsdato)) { + return knekk( + ap, ap.getFom(), utregningsdato.minusDays(1)); + } + return ap; + }) + .toList(); } return annenpartsPerioder.stream().map(SaldoUtregningTjeneste::map).toList(); } - private static Stream finnDelerAvOppholdsperiode(List søktePerioder, AnnenpartUttakPeriode ap) { + private static Stream finnDelerAvOppholdsperiode( + List søktePerioder, AnnenpartUttakPeriode ap) { for (var søktPeriode : søktePerioder) { if (ap.isOppholdsperiode() && ap.overlapper(søktPeriode.getFom())) { - if (søktPeriode.getFom().isEqual(ap.getFom()) && søktPeriode.getTom().isEqual(ap.getTom())) { + if (søktPeriode.getFom().isEqual(ap.getFom()) + && søktPeriode.getTom().isEqual(ap.getTom())) { return Stream.of(); } var etterknekk = new ArrayList(); @@ -100,52 +131,63 @@ private static Stream finnDelerAvOppholdsperiode(List mapAktiviteter(AnnenpartUttakPeriode annenpartsPeriode) { - return annenpartsPeriode.getAktiviteter() - .stream() - .map(aktivitet -> new FastsattUttakPeriodeAktivitet(aktivitet.getTrekkdager(), aktivitet.getStønadskontotype(), - aktivitet.getAktivitetIdentifikator())) - .toList(); + private static List mapAktiviteter( + AnnenpartUttakPeriode annenpartsPeriode) { + return annenpartsPeriode.getAktiviteter().stream() + .map( + aktivitet -> + new FastsattUttakPeriodeAktivitet( + aktivitet.getTrekkdager(), + aktivitet.getStønadskontotype(), + aktivitet.getAktivitetIdentifikator())) + .toList(); } - private static List aktiviteterForPeriodeFørKnekkpunkt(AnnenpartUttakPeriode periode, - LocalDate nyFom, - LocalDate nyTom) { + private static List aktiviteterForPeriodeFørKnekkpunkt( + AnnenpartUttakPeriode periode, LocalDate nyFom, LocalDate nyTom) { var virkedagerInnenfor = Virkedager.beregnAntallVirkedager(nyFom, nyTom); var virkedagerHele = periode.virkedager(); - List annenpartUttakPeriodeAktivitetMedNyttTrekkDager = new ArrayList<>(); + List annenpartUttakPeriodeAktivitetMedNyttTrekkDager = + new ArrayList<>(); for (var annenpartUttakPeriodeAktivitet : periode.getAktiviteter()) { var opprinneligeTrekkdager = annenpartUttakPeriodeAktivitet.getTrekkdager(); if (virkedagerInnenfor > 0 && opprinneligeTrekkdager.merEnn0()) { - var vektetTrekkdager = opprinneligeTrekkdager.decimalValue() - .multiply(BigDecimal.valueOf(virkedagerInnenfor)) - .divide(BigDecimal.valueOf(virkedagerHele), 0, RoundingMode.DOWN); + var vektetTrekkdager = + opprinneligeTrekkdager + .decimalValue() + .multiply(BigDecimal.valueOf(virkedagerInnenfor)) + .divide(BigDecimal.valueOf(virkedagerHele), 0, RoundingMode.DOWN); annenpartUttakPeriodeAktivitetMedNyttTrekkDager.add( - new AnnenpartUttakPeriodeAktivitet(annenpartUttakPeriodeAktivitet.getAktivitetIdentifikator(), - annenpartUttakPeriodeAktivitet.getStønadskontotype(), new Trekkdager(vektetTrekkdager), - annenpartUttakPeriodeAktivitet.getUtbetalingsgrad())); + new AnnenpartUttakPeriodeAktivitet( + annenpartUttakPeriodeAktivitet.getAktivitetIdentifikator(), + annenpartUttakPeriodeAktivitet.getStønadskontotype(), + new Trekkdager(vektetTrekkdager), + annenpartUttakPeriodeAktivitet.getUtbetalingsgrad())); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningUtil.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningUtil.java index 353123c1..fc36754b 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningUtil.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningUtil.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Virkedager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; @@ -16,51 +15,54 @@ final class SaldoUtregningUtil { - private SaldoUtregningUtil() { - } + private SaldoUtregningUtil() {} - static boolean aktivitetIPeriode(FastsattUttakPeriode periode, AktivitetIdentifikator aktivitet) { - return periode.getAktiviteter() - .stream() - .map(FastsattUttakPeriodeAktivitet::getAktivitetIdentifikator) - .anyMatch(aktivitetIdentifikator -> aktivitetIdentifikator.equals(aktivitet)); + static boolean aktivitetIPeriode( + FastsattUttakPeriode periode, AktivitetIdentifikator aktivitet) { + return periode.getAktiviteter().stream() + .map(FastsattUttakPeriodeAktivitet::getAktivitetIdentifikator) + .anyMatch(aktivitetIdentifikator -> aktivitetIdentifikator.equals(aktivitet)); } static Set aktiviteterIPerioder(List perioder) { return perioder.stream() - .flatMap(p -> p.getAktiviteter().stream()) - .map(FastsattUttakPeriodeAktivitet::getAktivitetIdentifikator) - .collect(Collectors.toSet()); + .flatMap(p -> p.getAktiviteter().stream()) + .map(FastsattUttakPeriodeAktivitet::getAktivitetIdentifikator) + .collect(Collectors.toSet()); } - static List overlappendePeriode(FastsattUttakPeriode periode, List perioder) { + static List overlappendePeriode( + FastsattUttakPeriode periode, List perioder) { return perioder.stream().filter(p -> overlapper(periode, p)).toList(); } static boolean overlapper(FastsattUttakPeriode periode, FastsattUttakPeriode periode2) { - return !periode2.getFom().isAfter(periode.getTom()) && !periode2.getTom().isBefore(periode.getFom()); + return !periode2.getFom().isAfter(periode.getTom()) + && !periode2.getTom().isBefore(periode.getFom()); } static boolean innvilgetMedTrekkdager(FastsattUttakPeriode periode) { - return !periode.getPerioderesultattype().equals(Perioderesultattype.AVSLÅTT) || periode.getAktiviteter() - .stream() - .anyMatch(aktivitet -> aktivitet.getTrekkdager().merEnn0()); + return !periode.getPerioderesultattype().equals(Perioderesultattype.AVSLÅTT) + || periode.getAktiviteter().stream() + .anyMatch(aktivitet -> aktivitet.getTrekkdager().merEnn0()); } - static Trekkdager trekkDagerFraDelAvPeriode(LocalDate delFom, - LocalDate delTom, - LocalDate periodeFom, - LocalDate periodeTom, - Trekkdager periodeTrekkdager) { + static Trekkdager trekkDagerFraDelAvPeriode( + LocalDate delFom, + LocalDate delTom, + LocalDate periodeFom, + LocalDate periodeTom, + Trekkdager periodeTrekkdager) { var virkedagerInnenfor = Virkedager.beregnAntallVirkedager(delFom, delTom); var virkedagerHele = Virkedager.beregnAntallVirkedager(periodeFom, periodeTom); if (virkedagerHele == 0) { return Trekkdager.ZERO; } - var utregning = periodeTrekkdager.decimalValue() - .multiply(BigDecimal.valueOf(virkedagerInnenfor)) - .divide(BigDecimal.valueOf(virkedagerHele), 0, RoundingMode.DOWN); + var utregning = + periodeTrekkdager + .decimalValue() + .multiply(BigDecimal.valueOf(virkedagerInnenfor)) + .divide(BigDecimal.valueOf(virkedagerHele), 0, RoundingMode.DOWN); return new Trekkdager(utregning); } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/FastsettePeriodeUtfall.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/FastsettePeriodeUtfall.java index ff243946..d85b74a3 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/FastsettePeriodeUtfall.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/FastsettePeriodeUtfall.java @@ -3,7 +3,6 @@ import java.util.ArrayList; import java.util.List; import java.util.function.BiConsumer; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; import no.nav.fpsak.nare.evaluation.Evaluation; import no.nav.fpsak.nare.evaluation.node.SingleEvaluation; @@ -20,9 +19,10 @@ public class FastsettePeriodeUtfall extends LeafSpecification> utfallSpesifiserere; - private FastsettePeriodeUtfall(String id, - UttakOutcome uttakOutcome, - List> utfallSpesifiserere) { + private FastsettePeriodeUtfall( + String id, + UttakOutcome uttakOutcome, + List> utfallSpesifiserere) { super(id); if (uttakOutcome.getUtfallType() == null) { throw new IllegalArgumentException("UtfallType kan ikke være null."); @@ -42,7 +42,8 @@ private void spesifiserUtfall(SingleEvaluation utfall, FastsettePeriodeGrunnlag if (utfallSpesifiserere.isEmpty()) { return; } - utfallSpesifiserere.forEach(utfallSpesifiserer -> utfallSpesifiserer.accept(utfall, grunnlag)); + utfallSpesifiserere.forEach( + utfallSpesifiserer -> utfallSpesifiserer.accept(utfall, grunnlag)); } private SingleEvaluation getHovedUtfall(UttakOutcome uttakOutcome) { @@ -59,27 +60,29 @@ public static Builder builder() { public static class Builder { private UttakOutcome uttakOutcome; private String id; - private final List> utfallSpesifiserere = new ArrayList<>(); + private final List> + utfallSpesifiserere = new ArrayList<>(); public Builder ikkeOppfylt(IkkeOppfyltÅrsak årsak) { this.uttakOutcome = UttakOutcome.ikkeOppfylt(årsak); - this.utfallSpesifiserere.add((singleEvaluation, grunnlag) -> { - singleEvaluation.setEvaluationProperty(UTFALL, UtfallType.AVSLÅTT); - singleEvaluation.setEvaluationProperty(AVKLARING_ÅRSAK, årsak); - }); + this.utfallSpesifiserere.add( + (singleEvaluation, grunnlag) -> { + singleEvaluation.setEvaluationProperty(UTFALL, UtfallType.AVSLÅTT); + singleEvaluation.setEvaluationProperty(AVKLARING_ÅRSAK, årsak); + }); return this; } public Builder oppfylt(InnvilgetÅrsak innvilgetÅrsak) { this.uttakOutcome = UttakOutcome.oppfylt(innvilgetÅrsak); - this.utfallSpesifiserere.add((singleEvaluation, grunnlag) -> { - singleEvaluation.setEvaluationProperty(UTFALL, UtfallType.INNVILGET); - singleEvaluation.setEvaluationProperty(AVKLARING_ÅRSAK, innvilgetÅrsak); - }); + this.utfallSpesifiserere.add( + (singleEvaluation, grunnlag) -> { + singleEvaluation.setEvaluationProperty(UTFALL, UtfallType.INNVILGET); + singleEvaluation.setEvaluationProperty(AVKLARING_ÅRSAK, innvilgetÅrsak); + }); return this; } - public Builder medId(String id) { this.id = id; return this; @@ -88,24 +91,34 @@ public Builder medId(String id) { public Builder medTrekkDagerFraSaldo(boolean trekkDagerFraSaldo) { this.uttakOutcome = uttakOutcome.medTrekkDagerFraSaldo(trekkDagerFraSaldo); this.utfallSpesifiserere.add( - (singleEvaluation, grunnlag) -> singleEvaluation.setEvaluationProperty(TREKK_DAGER_FRA_SALDO, trekkDagerFraSaldo)); + (singleEvaluation, grunnlag) -> + singleEvaluation.setEvaluationProperty( + TREKK_DAGER_FRA_SALDO, trekkDagerFraSaldo)); return this; } public Builder medAvslåttGradering(GraderingIkkeInnvilgetÅrsak graderingAvslagÅrsak) { this.uttakOutcome = uttakOutcome.medGraderingIkkeInnvilgetÅrsak(graderingAvslagÅrsak); this.utfallSpesifiserere.add( - (singleEvaluation, grunnlag) -> singleEvaluation.setEvaluationProperty(GRADERING_IKKE_OPPFYLT_ÅRSAK, graderingAvslagÅrsak)); + (singleEvaluation, grunnlag) -> + singleEvaluation.setEvaluationProperty( + GRADERING_IKKE_OPPFYLT_ÅRSAK, graderingAvslagÅrsak)); return this; } - public Builder manuellBehandling(PeriodeResultatÅrsak periodeResultatÅrsak, Manuellbehandlingårsak manuellbehandlingårsak) { + public Builder manuellBehandling( + PeriodeResultatÅrsak periodeResultatÅrsak, + Manuellbehandlingårsak manuellbehandlingårsak) { this.uttakOutcome = UttakOutcome.manuell(periodeResultatÅrsak, manuellbehandlingårsak); - this.utfallSpesifiserere.add((singleEvaluation, grunnlag) -> { - singleEvaluation.setEvaluationProperty(UTFALL, UtfallType.MANUELL_BEHANDLING); - singleEvaluation.setEvaluationProperty(MANUELL_BEHANDLING_ÅRSAK, manuellbehandlingårsak); - singleEvaluation.setEvaluationProperty(AVKLARING_ÅRSAK, periodeResultatÅrsak); - }); + this.utfallSpesifiserere.add( + (singleEvaluation, grunnlag) -> { + singleEvaluation.setEvaluationProperty( + UTFALL, UtfallType.MANUELL_BEHANDLING); + singleEvaluation.setEvaluationProperty( + MANUELL_BEHANDLING_ÅRSAK, manuellbehandlingårsak); + singleEvaluation.setEvaluationProperty( + AVKLARING_ÅRSAK, periodeResultatÅrsak); + }); return this; } @@ -115,7 +128,9 @@ public FastsettePeriodeUtfall create() { public Builder utbetal(boolean utbetal) { this.uttakOutcome = uttakOutcome.medSkalUtbetale(utbetal); - this.utfallSpesifiserere.add((singleEvaluation, grunnlag) -> singleEvaluation.setEvaluationProperty(UTBETAL, utbetal)); + this.utfallSpesifiserere.add( + (singleEvaluation, grunnlag) -> + singleEvaluation.setEvaluationProperty(UTBETAL, utbetal)); return this; } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/GraderingIkkeInnvilget\303\205rsak.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/GraderingIkkeInnvilget\303\205rsak.java" index 836155a8..97ea0b53 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/GraderingIkkeInnvilget\303\205rsak.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/GraderingIkkeInnvilget\303\205rsak.java" @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall; public enum GraderingIkkeInnvilgetÅrsak { - AVSLAG_PGA_FOR_TIDLIG_GRADERING(4504, "Gradering før uke 7"); private final int id; @@ -20,4 +19,3 @@ public String getBeskrivelse() { return beskrivelse; } } - diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/IkkeOppfylt.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/IkkeOppfylt.java index 7bd69640..9e3ca405 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/IkkeOppfylt.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/IkkeOppfylt.java @@ -9,12 +9,17 @@ private IkkeOppfylt() { /** * Opprette endenode for ikke oppfylt periode. * - * @param id sluttnode id. + * @param id sluttnode id. * @param årsak årsak til at periode ble ikke oppfylt. * @return periode utfall. */ - public static FastsettePeriodeUtfall opprett(String id, IkkeOppfyltÅrsak årsak, boolean trekkDagerFraSaldo, boolean utbetal) { - return FastsettePeriodeUtfall.builder().ikkeOppfylt(årsak).utbetal(utbetal).medTrekkDagerFraSaldo(trekkDagerFraSaldo).medId(id).create(); + public static FastsettePeriodeUtfall opprett( + String id, IkkeOppfyltÅrsak årsak, boolean trekkDagerFraSaldo, boolean utbetal) { + return FastsettePeriodeUtfall.builder() + .ikkeOppfylt(årsak) + .utbetal(utbetal) + .medTrekkDagerFraSaldo(trekkDagerFraSaldo) + .medId(id) + .create(); } - } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/IkkeOppfylt\303\205rsak.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/IkkeOppfylt\303\205rsak.java" index 83da8c7e..39b6dd1b 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/IkkeOppfylt\303\205rsak.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/IkkeOppfylt\303\205rsak.java" @@ -7,7 +7,8 @@ public enum IkkeOppfyltÅrsak implements PeriodeResultatÅrsak { MOR_HAR_IKKE_OMSORG(4003, "Mor har ikke omsorg"), HULL_MELLOM_FORELDRENES_PERIODER(4005, "Hull mellom foreldrenes perioder"), FAR_HAR_IKKE_OMSORG(4012, "Far har ikke omsorg"), - MOR_SØKER_FELLESPERIODE_FØR_12_UKER_FØR_TERMIN_FØDSEL(4013, "Mor søker fellesperiode før 12 uker før termin/fødsel"), + MOR_SØKER_FELLESPERIODE_FØR_12_UKER_FØR_TERMIN_FØDSEL( + 4013, "Mor søker fellesperiode før 12 uker før termin/fødsel"), SØKNADSFRIST(4020, "Brudd på søknadsfrist"), UTTAK_ETTER_3_ÅRSGRENSE(4022, "Uttak etter 3 årsgrense"), ARBEID_HUNDRE_PROSENT_ELLER_MER(4025, "Arbeider 100 prosent eller mer"), @@ -20,7 +21,8 @@ public enum IkkeOppfyltÅrsak implements PeriodeResultatÅrsak { SØKER_DØD(4071, "Søker er død"), BARN_DØD(4072, "Barnet er dødt"), MOR_IKKE_RETT_FK(4073, "Ikke rett til kvote fordi mor ikke har rett til foreldrepenger"), - MOR_IKKE_RETT_FP(4075, "Ikke rett til fellesperiode fordi mor ikke har rett til foreldrepenger"), + MOR_IKKE_RETT_FP( + 4075, "Ikke rett til fellesperiode fordi mor ikke har rett til foreldrepenger"), UTTAK_ETTER_NY_STØNADSPERIODE(4104, "Uttak etter start av ny stønadsperiode"), FAR_PERIODE_FØR_FØDSEL(4105, "Far/medmor søker uttak før fødsel/omsorg"), AKTIVITET_UKJENT_UDOKUMENTERT(4107, "Aktivitetskravet ikke oppgitt eller ikke dokumentert"), @@ -37,54 +39,67 @@ public enum IkkeOppfyltÅrsak implements PeriodeResultatÅrsak { // Utsettelse årsaker UTSETTELSE_FØR_TERMIN_FØDSEL(4030, "Avslag utsettelse før termin/fødsel"), UTSETTELSE_INNENFOR_DE_FØRSTE_6_UKENE(4031, "Utsettelse innenfor de første 6 ukene"), - FERIE_SELVSTENDIG_NÆRINGSDRIVENDSE_FRILANSER(4032, "Ferie - selvstendig næringsdrivende/frilanser"), - INGEN_STØNADSDAGER_IGJEN_FOR_AVSLÅTT_UTSETTELSE(4034, "Avslag utsettelse - ingen stønadsdager igjen"), + FERIE_SELVSTENDIG_NÆRINGSDRIVENDSE_FRILANSER( + 4032, "Ferie - selvstendig næringsdrivende/frilanser"), + INGEN_STØNADSDAGER_IGJEN_FOR_AVSLÅTT_UTSETTELSE( + 4034, "Avslag utsettelse - ingen stønadsdager igjen"), IKKE_HELTIDSARBEID(4037, "Ikke heltidsarbeid"), SØKERS_SYKDOM_SKADE_IKKE_OPPFYLT(4038, "Søkers sykdom/skade ikke oppfylt"), SØKERS_INNLEGGELSE_IKKE_OPPFYLT(4039, "Søkers innleggelse ikke oppfylt"), BARNETS_INNLEGGELSE_IKKE_OPPFYLT(4040, "Barnets innleggelse ikke oppfylt"), UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG(4041, "Avslag utsettelse ferie på bevegelig helligdag"), - SØKERS_SYKDOM_SKADE_SEKS_UKER_IKKE_OPPFYLT(4110, "Søkers sykdom/skade første 6 uker ikke oppfylt"), - SØKERS_INNLEGGELSE_SEKS_UKER_IKKE_OPPFYLT(4111, "Søkers innleggelse første 6 uker ikke oppfylt"), - BARNETS_INNLEGGELSE_SEKS_UKER_IKKE_OPPFYLT(4112, "Barnets innleggelse første 6 uker ikke oppfylt"), + SØKERS_SYKDOM_SKADE_SEKS_UKER_IKKE_OPPFYLT( + 4110, "Søkers sykdom/skade første 6 uker ikke oppfylt"), + SØKERS_INNLEGGELSE_SEKS_UKER_IKKE_OPPFYLT( + 4111, "Søkers innleggelse første 6 uker ikke oppfylt"), + BARNETS_INNLEGGELSE_SEKS_UKER_IKKE_OPPFYLT( + 4112, "Barnets innleggelse første 6 uker ikke oppfylt"), - //Medlem + // Medlem SØKER_IKKE_MEDLEM(4087, "Søker ikke medlem"), - //Vilkår + // Vilkår FØDSELSVILKÅRET_IKKE_OPPFYLT(4096, "Fødselsvilkåret er ikke oppfylt"), ADOPSJONSVILKÅRET_IKKE_OPPFYLT(4097, "Adopsjonsvilkåret er ikke oppfylt"), FORELDREANSVARSVILKÅRET_IKKE_OPPFYLT(4098, "Foreldreansvarsvilkåret er ikke oppfylt"), OPPTJENINGSVILKÅRET_IKKE_OPPFYLT(4099, "Opptjeningsvilkåret er ikke oppfylt"), - //Prematur + // Prematur FRATREKK_PLEIEPENGER(4077, "Avslag utsettelse, fratrekk pleiepenger"), - //aktivitetskrav + // aktivitetskrav AKTIVITETSKRAVET_ARBEID_IKKE_OPPFYLT(4050, "Aktivitetskravet arbeid ikke oppfylt"), AKTIVITETSKRAVET_ARBEID_IKKE_DOKUMENTERT(4066, "Aktivitetskravet arbeid ikke dokumentert"), AKTIVITETSKRAVET_UTDANNING_IKKE_OPPFYLT(4051, "Aktivitetskravet utdanning ikke oppfylt"), - AKTIVITETSKRAVET_UTDANNING_IKKE_DOKUMENTERT(4067, "Aktivitetskravet utdanning ikke dokumentert"), + AKTIVITETSKRAVET_UTDANNING_IKKE_DOKUMENTERT( + 4067, "Aktivitetskravet utdanning ikke dokumentert"), - AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_OPPFYLT(4052, "Aktivitetskravet arbeid+utdanning ikke oppfylt"), - AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_DOKUMENTERT(4068, "Aktivitetskravet arbeid+utdanning ikke dokumentert"), + AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_OPPFYLT( + 4052, "Aktivitetskravet arbeid+utdanning ikke oppfylt"), + AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_DOKUMENTERT( + 4068, "Aktivitetskravet arbeid+utdanning ikke dokumentert"), AKTIVITETSKRAVET_SYKDOM_IKKE_OPPFYLT(4053, "Aktivitetskravet sykdom ikke oppfylt"), AKTIVITETSKRAVET_SYKDOM_IKKE_DOKUMENTERT(4069, "Aktivitetskravet sykdom ikke dokumentert"), AKTIVITETSKRAVET_INNLEGGELSE_IKKE_OPPFYLT(4054, "Aktivitetskravet innleggelse ikke oppfylt"), - AKTIVITETSKRAVET_INNLEGGELSE_IKKE_DOKUMENTERT(4070, "Aktivitetskravet innleggelse ikke dokumentert"), + AKTIVITETSKRAVET_INNLEGGELSE_IKKE_DOKUMENTERT( + 4070, "Aktivitetskravet innleggelse ikke dokumentert"), - AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_OPPFYLT(4055, "Aktivitetskravet introduksjonsprogrammet ikke oppfylt"), - AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_DOKUMENTERT(4088, "Aktivitetskravet introduksjonsprogrammet ikke dokumentert"), + AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_OPPFYLT( + 4055, "Aktivitetskravet introduksjonsprogrammet ikke oppfylt"), + AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_DOKUMENTERT( + 4088, "Aktivitetskravet introduksjonsprogrammet ikke dokumentert"), - AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_OPPFYLT(4056, "Aktivitetskravet kvalifiseringsprogrammet ikke oppfylt"), - AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_DOKUMENTERT(4089, "Aktivitetskravet kvalifiseringsprogrammet ikke dokumentert"), + AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_OPPFYLT( + 4056, "Aktivitetskravet kvalifiseringsprogrammet ikke oppfylt"), + AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_DOKUMENTERT( + 4089, "Aktivitetskravet kvalifiseringsprogrammet ikke dokumentert"), - - FORELDREPENGER_KUN_FAR_HAR_RETT_MOR_IKKE_UFØR(4057, "Foreldrepenger, kun far har rett mor er ikke ufør"); + FORELDREPENGER_KUN_FAR_HAR_RETT_MOR_IKKE_UFØR( + 4057, "Foreldrepenger, kun far har rett mor er ikke ufør"); private final int id; private final String beskrivelse; diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Innvilget\303\205rsak.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Innvilget\303\205rsak.java" index eb198fc6..2967ab38 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Innvilget\303\205rsak.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Innvilget\303\205rsak.java" @@ -14,8 +14,10 @@ public enum InnvilgetÅrsak implements PeriodeResultatÅrsak { GRADERING_ALENEOMSORG(2032, "Gradering ved aleneomsorg"), GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT(2033, "Gradering foreldrepenger, kun far har rett"), GRADERING_FORELDREPENGER_KUN_MOR_HAR_RETT(2034, "Gradering foreldrepenger, kun mor har rett"), - GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV(2035, "Gradering foreldrepenger, kun far har rett - dager uten aktivitetskrav"), - FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV(2036, "Innvilget foreldrepenger, kun far har rett - dager uten aktivitetskrav"), + GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV( + 2035, "Gradering foreldrepenger, kun far har rett - dager uten aktivitetskrav"), + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV( + 2036, "Innvilget foreldrepenger, kun far har rett - dager uten aktivitetskrav"), MSP_INNVILGET(2039, "Innvilger msp første 6 ukene"), // Overføring årsaker @@ -24,17 +26,18 @@ public enum InnvilgetÅrsak implements PeriodeResultatÅrsak { OVERFØRING_ANNEN_PART_INNLAGT(2022, "Overføring - annen part innlagt"), OVERFØRING_ALENEOMSORG(2023, "Overføring - aleneomsorg"), - //Utsettelse årsaker + // Utsettelse årsaker UTSETTELSE_GYLDIG_PGA_FERIE(2010, "Utsettelse pga ferie"), UTSETTELSE_GYLDIG_PGA_100_PROSENT_ARBEID(2011, "Utsettelse pga 100% arbeid"), UTSETTELSE_GYLDIG_PGA_INNLEGGELSE(2012, "Utsettelse pga innleggelse"), UTSETTELSE_GYLDIG_PGA_BARN_INNLAGT(2013, "Utsettelse pga innleggelse barn"), UTSETTELSE_GYLDIG_PGA_SYKDOM(2014, "Utsettelse pga sykdom"), - UTSETTELSE_GYLDIG(2024, "Gyldig utsettelse"), - UTSETTELSE_GYLDIG_SEKS_UKER_INNLEGGELSE(2025, "Gyldig utsettelse første 6 uker pga. innleggelse"), - UTSETTELSE_GYLDIG_SEKS_UKER_FRI_BARN_INNLAGT(2026, "Gyldig utsettelse første 6 uker pga. barn innlagt"), + UTSETTELSE_GYLDIG_SEKS_UKER_INNLEGGELSE( + 2025, "Gyldig utsettelse første 6 uker pga. innleggelse"), + UTSETTELSE_GYLDIG_SEKS_UKER_FRI_BARN_INNLAGT( + 2026, "Gyldig utsettelse første 6 uker pga. barn innlagt"), UTSETTELSE_GYLDIG_SEKS_UKER_FRI_SYKDOM(2027, "Gyldig utsettelse første 6 uker pga. sykdom"), UTSETTELSE_GYLDIG_BFR_AKT_KRAV_OPPFYLT(2028, "Gyldig utsettelse aktivitetskrav oppfylt "), ; @@ -59,7 +62,7 @@ public String getBeskrivelse() { @Override public boolean trekkerMinsterett() { - return this.equals(FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV) || this.equals( - GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); + return this.equals(FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV) + || this.equals(GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Manuellbehandling.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Manuellbehandling.java index c9c28a8b..f1f9025a 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Manuellbehandling.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Manuellbehandling.java @@ -8,27 +8,35 @@ private Manuellbehandling() { // For å hindre instanser } - public static FastsettePeriodeUtfall opprett(String id, - PeriodeResultatÅrsak periodeResultatÅrsak, - Manuellbehandlingårsak manuellbehandlingårsak, - boolean trekkDagerFraSaldo, - boolean utbetal) { - return opprett(id, periodeResultatÅrsak, manuellbehandlingårsak, trekkDagerFraSaldo, utbetal, Optional.empty()); + public static FastsettePeriodeUtfall opprett( + String id, + PeriodeResultatÅrsak periodeResultatÅrsak, + Manuellbehandlingårsak manuellbehandlingårsak, + boolean trekkDagerFraSaldo, + boolean utbetal) { + return opprett( + id, + periodeResultatÅrsak, + manuellbehandlingårsak, + trekkDagerFraSaldo, + utbetal, + Optional.empty()); } - public static FastsettePeriodeUtfall opprett(String id, - PeriodeResultatÅrsak periodeResultatÅrsak, - Manuellbehandlingårsak manuellbehandlingårsak, - boolean trekkDagerFraSaldo, - boolean utbetal, - Optional graderingIkkeInnvilgetÅrsak) { - var builder = FastsettePeriodeUtfall.builder() - .manuellBehandling(periodeResultatÅrsak, manuellbehandlingårsak) - .utbetal(utbetal) - .medTrekkDagerFraSaldo(trekkDagerFraSaldo) - .medId(id); + public static FastsettePeriodeUtfall opprett( + String id, + PeriodeResultatÅrsak periodeResultatÅrsak, + Manuellbehandlingårsak manuellbehandlingårsak, + boolean trekkDagerFraSaldo, + boolean utbetal, + Optional graderingIkkeInnvilgetÅrsak) { + var builder = + FastsettePeriodeUtfall.builder() + .manuellBehandling(periodeResultatÅrsak, manuellbehandlingårsak) + .utbetal(utbetal) + .medTrekkDagerFraSaldo(trekkDagerFraSaldo) + .medId(id); graderingIkkeInnvilgetÅrsak.ifPresent(builder::medAvslåttGradering); return builder.create(); } - } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Manuellbehandling\303\245rsak.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Manuellbehandling\303\245rsak.java" index 25dfea79..ba943483 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Manuellbehandling\303\245rsak.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Manuellbehandling\303\245rsak.java" @@ -13,8 +13,10 @@ public enum Manuellbehandlingårsak { IKKE_HELTIDSARBEID(5025, "Utsettelse ugyldig da søker ikke er i heltidsarbeid"), DØDSFALL(5026, "Vurder uttak med hensyn på dødsfall"), MOR_UFØR(5027, "Mor er ufør"), - OVERLAPPENDE_PLEIEPENGER_MED_INNLEGGELSE(5028, "Innvilget pleiepenger med innleggelse, vurder riktig ytelse"), - OVERLAPPENDE_PLEIEPENGER_UTEN_INNLEGGELSE(5029, "Innvilget pleiepenger uten innleggelse, vurder riktig ytelse"), + OVERLAPPENDE_PLEIEPENGER_MED_INNLEGGELSE( + 5028, "Innvilget pleiepenger med innleggelse, vurder riktig ytelse"), + 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"), ; diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Oppfylt.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Oppfylt.java index f7646d4c..cf4f364a 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Oppfylt.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/Oppfylt.java @@ -9,39 +9,47 @@ private Oppfylt() { /** * Opprette endenode for oppfylt periode. * - * @param id sluttnode id. + * @param id sluttnode id. * @param innvilgetÅrsak innvilget årsak - * @param utbetal skal det utbetales for denne perioden. + * @param utbetal skal det utbetales for denne perioden. * @return periode utfall. */ - public static FastsettePeriodeUtfall opprett(String id, InnvilgetÅrsak innvilgetÅrsak, boolean utbetal) { + public static FastsettePeriodeUtfall opprett( + String id, InnvilgetÅrsak innvilgetÅrsak, boolean utbetal) { return opprett(id, innvilgetÅrsak, true, utbetal); } /** * Opprette endenode for oppfylt periode. * - * @param id sluttnode id. + * @param id sluttnode id. * @param innvilgetÅrsak innvilget årsak - * @param trekkDager skal det trekkes dager for denne perioder. - * @param utbetal skal det utbetales for denne perioden. + * @param trekkDager skal det trekkes dager for denne perioder. + * @param utbetal skal det utbetales for denne perioden. * @return periode utfall. */ - public static FastsettePeriodeUtfall opprett(String id, InnvilgetÅrsak innvilgetÅrsak, boolean trekkDager, boolean utbetal) { - return FastsettePeriodeUtfall.builder().oppfylt(innvilgetÅrsak).utbetal(utbetal).medTrekkDagerFraSaldo(trekkDager).medId(id).create(); + public static FastsettePeriodeUtfall opprett( + String id, InnvilgetÅrsak innvilgetÅrsak, boolean trekkDager, boolean utbetal) { + return FastsettePeriodeUtfall.builder() + .oppfylt(innvilgetÅrsak) + .utbetal(utbetal) + .medTrekkDagerFraSaldo(trekkDager) + .medId(id) + .create(); } - public static FastsettePeriodeUtfall opprettMedAvslåttGradering(String id, - InnvilgetÅrsak innvilgetÅrsak, - GraderingIkkeInnvilgetÅrsak graderingAvslagÅrsak, - boolean utbetal) { + public static FastsettePeriodeUtfall opprettMedAvslåttGradering( + String id, + InnvilgetÅrsak innvilgetÅrsak, + GraderingIkkeInnvilgetÅrsak graderingAvslagÅrsak, + boolean utbetal) { return FastsettePeriodeUtfall.builder() - .oppfylt(innvilgetÅrsak) - .utbetal(utbetal) - .medTrekkDagerFraSaldo(true) - .medAvslåttGradering(graderingAvslagÅrsak) - .medId(id) - .create(); + .oppfylt(innvilgetÅrsak) + .utbetal(utbetal) + .medTrekkDagerFraSaldo(true) + .medAvslåttGradering(graderingAvslagÅrsak) + .medId(id) + .create(); } /** @@ -50,8 +58,13 @@ public static FastsettePeriodeUtfall opprett(String id, InnvilgetÅrsak innvilge * @param id sluttnode id. * @return periode utfall. */ - public static FastsettePeriodeUtfall opprettForOppholds(String id, boolean trekkDagerFraSaldo, boolean utbetal) { - return FastsettePeriodeUtfall.builder().oppfylt(null).utbetal(utbetal).medTrekkDagerFraSaldo(trekkDagerFraSaldo).medId(id).create(); + public static FastsettePeriodeUtfall opprettForOppholds( + String id, boolean trekkDagerFraSaldo, boolean utbetal) { + return FastsettePeriodeUtfall.builder() + .oppfylt(null) + .utbetal(utbetal) + .medTrekkDagerFraSaldo(trekkDagerFraSaldo) + .medId(id) + .create(); } - } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoIdentifiserer.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoIdentifiserer.java index 22646b9b..3aa89e5a 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoIdentifiserer.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoIdentifiserer.java @@ -12,7 +12,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Virkedager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; @@ -27,50 +26,88 @@ public class TomKontoIdentifiserer { private TomKontoIdentifiserer() { - //hindrer instansiering + // hindrer instansiering } - public static Optional identifiser(OppgittPeriode uttakPeriode, - List aktiviteter, - SaldoUtregning saldoUtregning, - Stønadskontotype stønadskontotype, - LukketPeriode farRundtFødselIntervall, - LocalDate startdatoNesteStønadsperiode, - boolean skalTrekkeDager, - PeriodeResultatÅrsak periodeResultatÅrsak, - UtfallType utfallType) { + public static Optional identifiser( + OppgittPeriode uttakPeriode, + List aktiviteter, + SaldoUtregning saldoUtregning, + Stønadskontotype stønadskontotype, + LukketPeriode farRundtFødselIntervall, + LocalDate startdatoNesteStønadsperiode, + boolean skalTrekkeDager, + PeriodeResultatÅrsak periodeResultatÅrsak, + UtfallType utfallType) { Map knekkpunkter = new HashMap<>(); - var etterNesteStønadsperiode = Optional.ofNullable(startdatoNesteStønadsperiode) - .filter(d -> !uttakPeriode.getFom().isBefore(d)) - .isPresent(); // Om aktuell periode begynner fom neste stønadsperiode + var etterNesteStønadsperiode = + Optional.ofNullable(startdatoNesteStønadsperiode) + .filter(d -> !uttakPeriode.getFom().isBefore(d)) + .isPresent(); // Om aktuell periode begynner fom neste stønadsperiode for (var aktivitet : aktiviteter) { - var datoKontoGårTomIPeriode = finnDatoKontoGårTomIPeriode(uttakPeriode, aktivitet, saldoUtregning, stønadskontotype, skalTrekkeDager); - datoKontoGårTomIPeriode.ifPresent(dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); + var datoKontoGårTomIPeriode = + finnDatoKontoGårTomIPeriode( + uttakPeriode, + aktivitet, + saldoUtregning, + stønadskontotype, + skalTrekkeDager); + datoKontoGårTomIPeriode.ifPresent( + dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); if (uttakPeriode.isFlerbarnsdager()) { - var knekkpunktFlerbarnsdager = finnDatoKontoGårTomIPeriodeFlerbarnsdager(uttakPeriode, aktivitet, saldoUtregning, skalTrekkeDager); - knekkpunktFlerbarnsdager.ifPresent(dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); + var knekkpunktFlerbarnsdager = + finnDatoKontoGårTomIPeriodeFlerbarnsdager( + uttakPeriode, aktivitet, saldoUtregning, skalTrekkeDager); + knekkpunktFlerbarnsdager.ifPresent( + dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); } if (saldoUtregning.getMaxDagerMinsterett().merEnn0() && !etterNesteStønadsperiode) { - finnDatoMinsterettOppbrukt(uttakPeriode, aktivitet, saldoUtregning, skalTrekkeDager, utfallType, periodeResultatÅrsak).ifPresent( - dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); + finnDatoMinsterettOppbrukt( + uttakPeriode, + aktivitet, + saldoUtregning, + skalTrekkeDager, + utfallType, + periodeResultatÅrsak) + .ifPresent(dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); } if (saldoUtregning.getMaxDagerUtenAktivitetskrav().merEnn0()) { - finnDatoDagerUtenAktivitetskravOppbrukt(uttakPeriode, aktivitet, saldoUtregning, skalTrekkeDager, utfallType, - periodeResultatÅrsak).ifPresent(dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); + finnDatoDagerUtenAktivitetskravOppbrukt( + uttakPeriode, + aktivitet, + saldoUtregning, + skalTrekkeDager, + utfallType, + periodeResultatÅrsak) + .ifPresent(dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); } - if (saldoUtregning.getMaxDagerEtterNesteStønadsperiode().merEnn0() && etterNesteStønadsperiode) { - finnDatoNesteStønadsperiodeOppbrukt(uttakPeriode, aktivitet, saldoUtregning, skalTrekkeDager, utfallType, - periodeResultatÅrsak).ifPresent(dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); + if (saldoUtregning.getMaxDagerEtterNesteStønadsperiode().merEnn0() + && etterNesteStønadsperiode) { + finnDatoNesteStønadsperiodeOppbrukt( + uttakPeriode, + aktivitet, + saldoUtregning, + skalTrekkeDager, + utfallType, + periodeResultatÅrsak) + .ifPresent(dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); } - if (farRundtFødselIntervall != null && FarUttakRundtFødsel.erKontoRelevant(stønadskontotype) - && saldoUtregning.getFarUttakRundtFødselDager().merEnn0()) { - // Fra lovendring 2022: Far kan ta ut 10 dager samtidig rundt fødsel (før termin, etter fødsel) + far alene kan ta ut fritt før uke 6. - // Grensen på 10 samtidige dager rundt fødsel gjelder dermed kun tilfelle av kvoter og 1 barn - finnDatoFarRundtFødselOppbrukt(uttakPeriode, aktivitet, farRundtFødselIntervall, saldoUtregning, skalTrekkeDager).ifPresent( - dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); + if (farRundtFødselIntervall != null + && FarUttakRundtFødsel.erKontoRelevant(stønadskontotype) + && saldoUtregning.getFarUttakRundtFødselDager().merEnn0()) { + // Fra lovendring 2022: Far kan ta ut 10 dager samtidig rundt fødsel (før termin, + // etter fødsel) + far alene kan ta ut fritt før uke 6. + // Grensen på 10 samtidige dager rundt fødsel gjelder dermed kun tilfelle av kvoter + // og 1 barn + finnDatoFarRundtFødselOppbrukt( + uttakPeriode, + aktivitet, + farRundtFødselIntervall, + saldoUtregning, + skalTrekkeDager) + .ifPresent(dato -> knekkpunkter.put(dato, new TomKontoKnekkpunkt(dato))); } - } if (knekkpunkter.isEmpty()) { return Optional.empty(); @@ -80,22 +117,26 @@ public static Optional identifiser(OppgittPeriode uttakPerio return Optional.of(knekkpunkter.get(tidligstDato)); } - private static Optional finnDatoKontoGårTomIPeriode(OppgittPeriode oppgittPeriode, - AktivitetIdentifikator aktivitet, - SaldoUtregning saldoUtregning, - Stønadskontotype stønadskontotype, - boolean skalTrekkeDager) { + private static Optional finnDatoKontoGårTomIPeriode( + OppgittPeriode oppgittPeriode, + AktivitetIdentifikator aktivitet, + SaldoUtregning saldoUtregning, + Stønadskontotype stønadskontotype, + boolean skalTrekkeDager) { if (!skalTrekkeDager) { return Optional.empty(); } - var saldo = saldoUtregning.nettoSaldoJustertForMinsterett(stønadskontotype, aktivitet, oppgittPeriode.kanTrekkeAvMinsterett()); + var saldo = + saldoUtregning.nettoSaldoJustertForMinsterett( + stønadskontotype, aktivitet, oppgittPeriode.kanTrekkeAvMinsterett()); return datoHvisSaldoOppbruktIPeriode(oppgittPeriode, aktivitet, saldo); } - private static Optional finnDatoKontoGårTomIPeriodeFlerbarnsdager(OppgittPeriode oppgittPeriode, - AktivitetIdentifikator aktivitet, - SaldoUtregning saldoUtregning, - boolean skalTrekkeDager) { + private static Optional finnDatoKontoGårTomIPeriodeFlerbarnsdager( + OppgittPeriode oppgittPeriode, + AktivitetIdentifikator aktivitet, + SaldoUtregning saldoUtregning, + boolean skalTrekkeDager) { if (!skalTrekkeDager) { return Optional.empty(); } @@ -103,39 +144,45 @@ public static Optional identifiser(OppgittPeriode uttakPerio return datoHvisSaldoOppbruktIPeriode(oppgittPeriode, aktivitet, saldo); } - private static Optional finnDatoMinsterettOppbrukt(OppgittPeriode oppgittPeriode, - AktivitetIdentifikator aktivitet, - SaldoUtregning saldoUtregning, - boolean skalTrekkeDager, - UtfallType utfallType, - PeriodeResultatÅrsak periodeResultatÅrsak) { - if (!trekkerMinsterett(oppgittPeriode, utfallType, periodeResultatÅrsak) || !skalTrekkeDager) { + private static Optional finnDatoMinsterettOppbrukt( + OppgittPeriode oppgittPeriode, + AktivitetIdentifikator aktivitet, + SaldoUtregning saldoUtregning, + boolean skalTrekkeDager, + UtfallType utfallType, + PeriodeResultatÅrsak periodeResultatÅrsak) { + if (!trekkerMinsterett(oppgittPeriode, utfallType, periodeResultatÅrsak) + || !skalTrekkeDager) { return Optional.empty(); } var saldoMinsterett = saldoUtregning.restSaldoMinsterett(aktivitet); return datoHvisSaldoOppbruktIPeriode(oppgittPeriode, aktivitet, saldoMinsterett); } - private static Optional finnDatoNesteStønadsperiodeOppbrukt(OppgittPeriode oppgittPeriode, - AktivitetIdentifikator aktivitet, - SaldoUtregning saldoUtregning, - boolean skalTrekkeDager, - UtfallType utfallType, - PeriodeResultatÅrsak periodeResultatÅrsak) { - if (!trekkerMinsterett(oppgittPeriode, utfallType, periodeResultatÅrsak) || !skalTrekkeDager) { + private static Optional finnDatoNesteStønadsperiodeOppbrukt( + OppgittPeriode oppgittPeriode, + AktivitetIdentifikator aktivitet, + SaldoUtregning saldoUtregning, + boolean skalTrekkeDager, + UtfallType utfallType, + PeriodeResultatÅrsak periodeResultatÅrsak) { + if (!trekkerMinsterett(oppgittPeriode, utfallType, periodeResultatÅrsak) + || !skalTrekkeDager) { return Optional.empty(); } var saldoMinsterett = saldoUtregning.restSaldoEtterNesteStønadsperiode(aktivitet); return datoHvisSaldoOppbruktIPeriode(oppgittPeriode, aktivitet, saldoMinsterett); } - private static Optional finnDatoDagerUtenAktivitetskravOppbrukt(OppgittPeriode oppgittPeriode, - AktivitetIdentifikator aktivitet, - SaldoUtregning saldoUtregning, - boolean skalTrekkeDager, - UtfallType utfallType, - PeriodeResultatÅrsak periodeResultatÅrsak) { - if (!trekkerMinsterett(oppgittPeriode, utfallType, periodeResultatÅrsak) || !skalTrekkeDager) { + private static Optional finnDatoDagerUtenAktivitetskravOppbrukt( + OppgittPeriode oppgittPeriode, + AktivitetIdentifikator aktivitet, + SaldoUtregning saldoUtregning, + boolean skalTrekkeDager, + UtfallType utfallType, + PeriodeResultatÅrsak periodeResultatÅrsak) { + if (!trekkerMinsterett(oppgittPeriode, utfallType, periodeResultatÅrsak) + || !skalTrekkeDager) { return Optional.empty(); } @@ -143,30 +190,41 @@ private static Optional finnDatoDagerUtenAktivitetskravOppbrukt(Oppgi return datoHvisSaldoOppbruktIPeriode(oppgittPeriode, aktivitet, saldoMinsterett); } - private static boolean trekkerMinsterett(OppgittPeriode oppgittPeriode, UtfallType utfallType, PeriodeResultatÅrsak resultatÅrsak) { - return FastsattUttakPeriode.trekkerMinsterett(Perioderesultattype.fra(utfallType), mapTilÅrsak(resultatÅrsak), oppgittPeriode.isUtsettelse()); + private static boolean trekkerMinsterett( + OppgittPeriode oppgittPeriode, + UtfallType utfallType, + PeriodeResultatÅrsak resultatÅrsak) { + return FastsattUttakPeriode.trekkerMinsterett( + Perioderesultattype.fra(utfallType), + mapTilÅrsak(resultatÅrsak), + oppgittPeriode.isUtsettelse()); } - private static Optional finnDatoFarRundtFødselOppbrukt(OppgittPeriode oppgittPeriode, - AktivitetIdentifikator aktivitet, - LukketPeriode farRundtFødselIntervall, - SaldoUtregning saldoUtregning, - boolean skalTrekkeDager) { - if (saldoUtregning.getFarUttakRundtFødselDager().equals(Trekkdager.ZERO) || !skalTrekkeDager || oppgittPeriode.isFlerbarnsdager() - || !FarUttakRundtFødsel.erPeriodeRelevant(farRundtFødselIntervall, oppgittPeriode)) { + private static Optional finnDatoFarRundtFødselOppbrukt( + OppgittPeriode oppgittPeriode, + AktivitetIdentifikator aktivitet, + LukketPeriode farRundtFødselIntervall, + SaldoUtregning saldoUtregning, + boolean skalTrekkeDager) { + if (saldoUtregning.getFarUttakRundtFødselDager().equals(Trekkdager.ZERO) + || !skalTrekkeDager + || oppgittPeriode.isFlerbarnsdager() + || !FarUttakRundtFødsel.erPeriodeRelevant( + farRundtFødselIntervall, oppgittPeriode)) { return Optional.empty(); } - var saldoFarRundtFødsel = saldoUtregning.restSaldoFarUttakRundtFødsel(aktivitet, farRundtFødselIntervall); + var saldoFarRundtFødsel = + saldoUtregning.restSaldoFarUttakRundtFødsel(aktivitet, farRundtFødselIntervall); return datoHvisSaldoOppbruktIPeriode(oppgittPeriode, aktivitet, saldoFarRundtFødsel); } - private static Optional datoHvisSaldoOppbruktIPeriode(OppgittPeriode oppgittPeriode, - AktivitetIdentifikator aktivitet, - Trekkdager saldo) { + private static Optional datoHvisSaldoOppbruktIPeriode( + OppgittPeriode oppgittPeriode, AktivitetIdentifikator aktivitet, Trekkdager saldo) { var trekkdagerIPeriodeFom = justerHelgTilMandag(oppgittPeriode.getFom()); var saldoTilVirkedager = saldoTilVirkedager(oppgittPeriode, aktivitet, saldo); var datoKontoGårTom = Virkedager.plusVirkedager(trekkdagerIPeriodeFom, saldoTilVirkedager); - if (datoKontoGårTom.isAfter(trekkdagerIPeriodeFom) && !datoKontoGårTom.isAfter(oppgittPeriode.getTom())) { + if (datoKontoGårTom.isAfter(trekkdagerIPeriodeFom) + && !datoKontoGårTom.isAfter(oppgittPeriode.getTom())) { return Optional.of(datoKontoGårTom); } @@ -177,7 +235,8 @@ private static LocalDate tidligst(Set knekkpunkter) { return knekkpunkter.stream().min(Comparator.comparing(date -> date)).orElseThrow(); } - private static int saldoTilVirkedager(OppgittPeriode periode, AktivitetIdentifikator aktivitet, Trekkdager saldo) { + private static int saldoTilVirkedager( + OppgittPeriode periode, AktivitetIdentifikator aktivitet, Trekkdager saldo) { if (saldo.mindreEnn0()) { return 0; } @@ -191,23 +250,35 @@ private static int saldoTilVirkedager(OppgittPeriode periode, AktivitetIdentifik } private static int saldoTilVirkedagerSamtidigUttak(OppgittPeriode periode, Trekkdager saldo) { - return saldoTilVirkedagerVedRedusertUttak(saldo, periode.getSamtidigUttaksprosent().decimalValue()); + return saldoTilVirkedagerVedRedusertUttak( + saldo, periode.getSamtidigUttaksprosent().decimalValue()); } private static int saldoTilVirkedagerGradering(OppgittPeriode periode, Trekkdager saldo) { if (graderer100EllerMer(periode)) { return saldo.rundOpp(); } - return saldoTilVirkedagerVedRedusertUttak(saldo, BigDecimal.valueOf(100).subtract(periode.getArbeidsprosent())); + return saldoTilVirkedagerVedRedusertUttak( + saldo, BigDecimal.valueOf(100).subtract(periode.getArbeidsprosent())); } - private static int saldoTilVirkedagerVedRedusertUttak(Trekkdager saldo, BigDecimal uttaksprosent) { - var trekkdagerPerVirkedag = uttaksprosent.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); + private static int saldoTilVirkedagerVedRedusertUttak( + Trekkdager saldo, BigDecimal uttaksprosent) { + var trekkdagerPerVirkedag = + uttaksprosent.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); if (saldo.gårAkkuratOppIHeleVirkedager(trekkdagerPerVirkedag)) { - return saldo.decimalValue().divide(trekkdagerPerVirkedag, 0, RoundingMode.DOWN).intValue(); + return saldo.decimalValue() + .divide(trekkdagerPerVirkedag, 0, RoundingMode.DOWN) + .intValue(); } - var virkedager = saldo.decimalValue().add(BigDecimal.ONE).divide(trekkdagerPerVirkedag, 4, RoundingMode.DOWN); - if (virkedager.remainder(BigDecimal.valueOf(virkedager.intValue(), 0)).compareTo(BigDecimal.ZERO) == 0) { + var virkedager = + saldo.decimalValue() + .add(BigDecimal.ONE) + .divide(trekkdagerPerVirkedag, 4, RoundingMode.DOWN); + if (virkedager + .remainder(BigDecimal.valueOf(virkedager.intValue(), 0)) + .compareTo(BigDecimal.ZERO) + == 0) { return virkedager.subtract(BigDecimal.ONE).intValue(); } return virkedager.intValue(); diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoKnekkpunkt.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoKnekkpunkt.java index 25fd3c95..2af72125 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoKnekkpunkt.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoKnekkpunkt.java @@ -2,5 +2,4 @@ import java.time.LocalDate; -public record TomKontoKnekkpunkt(LocalDate dato) { -} +public record TomKontoKnekkpunkt(LocalDate dato) {} diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/UttakOutcome.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/UttakOutcome.java index 3919714a..9c67dc7d 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/UttakOutcome.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/UttakOutcome.java @@ -1,7 +1,6 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall; import java.util.Optional; - import no.nav.fpsak.nare.evaluation.RuleReasonRef; public class UttakOutcome implements RuleReasonRef { @@ -21,8 +20,11 @@ public static UttakOutcome oppfylt(InnvilgetÅrsak årsak) { return new UttakOutcome(UtfallType.INNVILGET).medPeriodeResultatÅrsak(årsak); } - public static UttakOutcome manuell(PeriodeResultatÅrsak årsak, Manuellbehandlingårsak manuellårsak) { - return new UttakOutcome(UtfallType.MANUELL_BEHANDLING).medPeriodeResultatÅrsak(årsak).medManuellBehandlingårsak(manuellårsak); + public static UttakOutcome manuell( + PeriodeResultatÅrsak årsak, Manuellbehandlingårsak manuellårsak) { + return new UttakOutcome(UtfallType.MANUELL_BEHANDLING) + .medPeriodeResultatÅrsak(årsak) + .medManuellBehandlingårsak(manuellårsak); } public static UttakOutcome ikkeOppfylt(IkkeOppfyltÅrsak årsak) { @@ -63,7 +65,8 @@ public UtfallType getUtfallType() { return this; } - public UttakOutcome medGraderingIkkeInnvilgetÅrsak(GraderingIkkeInnvilgetÅrsak graderingIkkeInnvilgetÅrsak) { + public UttakOutcome medGraderingIkkeInnvilgetÅrsak( + GraderingIkkeInnvilgetÅrsak graderingIkkeInnvilgetÅrsak) { this.graderingIkkeInnvilgetÅrsak = graderingIkkeInnvilgetÅrsak; return this; } @@ -80,11 +83,16 @@ public UttakOutcome medTrekkDagerFraSaldo(boolean trekkDagerFraSaldo) { @Override public String getReasonTextTemplate() { - return Optional.ofNullable(periodeÅrsak).map(PeriodeResultatÅrsak::getBeskrivelse).orElse(""); + return Optional.ofNullable(periodeÅrsak) + .map(PeriodeResultatÅrsak::getBeskrivelse) + .orElse(""); } @Override public String getReasonCode() { - return Optional.ofNullable(periodeÅrsak).map(PeriodeResultatÅrsak::getId).map(String::valueOf).orElse(""); + return Optional.ofNullable(periodeÅrsak) + .map(PeriodeResultatÅrsak::getId) + .map(String::valueOf) + .orElse(""); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktPeriodeUtil.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktPeriodeUtil.java" index 997641d8..c4a6d87e 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktPeriodeUtil.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktPeriodeUtil.java" @@ -8,7 +8,6 @@ import java.util.Objects; import java.util.Optional; import java.util.function.Predicate; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Virkedager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; @@ -17,16 +16,19 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype; final class ManglendeSøktPeriodeUtil { - private ManglendeSøktPeriodeUtil() { - - } + private ManglendeSøktPeriodeUtil() {} - static List finnManglendeSøktePerioder(List perioder, LukketPeriode periode) { + static List finnManglendeSøktePerioder( + List perioder, LukketPeriode periode) { Objects.requireNonNull(periode, "periode"); - var sortertePerioder = perioder.stream() - .filter(p -> !p.getTom().isBefore(periode.getFom()) && !p.getFom().isAfter(periode.getTom())) - .sorted(Comparator.comparing(Periode::getFom)) - .toList(); + var sortertePerioder = + perioder.stream() + .filter( + p -> + !p.getTom().isBefore(periode.getFom()) + && !p.getFom().isAfter(periode.getTom())) + .sorted(Comparator.comparing(Periode::getFom)) + .toList(); List msp = new ArrayList<>(); var hullFom = periode.getFom(); @@ -47,7 +49,6 @@ final class ManglendeSøktPeriodeUtil { if (Virkedager.beregnAntallVirkedager(hullFom, hullTom) > 0) { msp.add(lagManglendeSøktPeriode(hullFom, hullTom)); } - } return msp; } @@ -56,10 +57,14 @@ final class ManglendeSøktPeriodeUtil { * Fjern helgedager i begynnelse og slutt av msp. * * @param msp perioder som skal strippes. - * @return periode uten helg i begynnelsen og slutten. Optional.empty() dersom perioden bare besto av helgedager. + * @return periode uten helg i begynnelsen og slutten. Optional.empty() dersom perioden bare + * besto av helgedager. */ static Optional fjernHelg(OppgittPeriode msp) { - Predicate sjekkOmHelg = dato -> dato.getDayOfWeek().equals(DayOfWeek.SATURDAY) || dato.getDayOfWeek().equals(DayOfWeek.SUNDAY); + Predicate sjekkOmHelg = + dato -> + dato.getDayOfWeek().equals(DayOfWeek.SATURDAY) + || dato.getDayOfWeek().equals(DayOfWeek.SUNDAY); var fom = msp.getFom(); var tom = msp.getTom(); @@ -81,11 +86,13 @@ static Optional fjernHelg(OppgittPeriode msp) { return lagManglendeSøktPeriode(hullFom, hullTom, null); } - static OppgittPeriode lagManglendeSøktPeriode(LocalDate hullFom, LocalDate hullTom, Stønadskontotype type) { + static OppgittPeriode lagManglendeSøktPeriode( + LocalDate hullFom, LocalDate hullTom, Stønadskontotype type) { return OppgittPeriode.forManglendeSøkt(type, hullFom, hullTom); } - static Optional fjernPerioderFørEndringsdatoVedRevurdering(OppgittPeriode msp, RegelGrunnlag grunnlag) { + static Optional fjernPerioderFørEndringsdatoVedRevurdering( + OppgittPeriode msp, RegelGrunnlag grunnlag) { if (!grunnlag.erRevurdering()) { return Optional.of(msp); } @@ -111,7 +118,9 @@ static boolean bareFarRett(RegelGrunnlag grunnlag) { List allePerioder = new ArrayList<>(); if (grunnlag.getAnnenPart() != null) { allePerioder.addAll( - grunnlag.getAnnenPart().getUttaksperioder().stream().filter(p -> p.isInnvilget() || p.harTrekkdager() || p.harUtbetaling()).toList()); + grunnlag.getAnnenPart().getUttaksperioder().stream() + .filter(p -> p.isInnvilget() || p.harTrekkdager() || p.harUtbetaling()) + .toList()); } allePerioder.addAll(grunnlag.getSøknad().getOppgittePerioder()); return allePerioder; @@ -126,5 +135,4 @@ static LocalDate utledSenesteLovligeStartdatoVedAdopsjon(RegelGrunnlag grunnlag) } return omsorgsovertakelseDato; } - } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderForSammenhengendeUttakTjeneste.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderForSammenhengendeUttakTjeneste.java" index a4975efe..63c698fe 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderForSammenhengendeUttakTjeneste.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderForSammenhengendeUttakTjeneste.java" @@ -17,7 +17,6 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Virkedager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; @@ -36,12 +35,15 @@ public final class ManglendeSøktePerioderForSammenhengendeUttakTjeneste { public static List finnManglendeSøktePerioder(RegelGrunnlag grunnlag) { var manglendePerioderIUkerForbeholdtMor = finnManglendeSøktIUkerForbeholdtMor(grunnlag); - var manglendePerioderIUkerFarMedAleneomsorg = finnManglendeSøktePerioderTilFarMedAleneomsorg(grunnlag); + var manglendePerioderIUkerFarMedAleneomsorg = + finnManglendeSøktePerioderTilFarMedAleneomsorg(grunnlag); List manglendePerioder = new ArrayList<>(); manglendePerioder.addAll(manglendePerioderIUkerFarMedAleneomsorg); manglendePerioder.addAll(manglendePerioderIUkerForbeholdtMor); - var manglendeSøktePerioder = finnManglendeMellomliggendePerioder(grunnlag, manglendePerioder).collect(Collectors.toList()); + var manglendeSøktePerioder = + finnManglendeMellomliggendePerioder(grunnlag, manglendePerioder) + .collect(Collectors.toList()); manglendeSøktePerioder.addAll(manglendePerioderIUkerFarMedAleneomsorg); manglendeSøktePerioder.addAll(finnPerioderVedAdopsjon(grunnlag)); manglendeSøktePerioder.addAll(manglendePerioderIUkerForbeholdtMor); @@ -57,23 +59,25 @@ public final class ManglendeSøktePerioderForSammenhengendeUttakTjeneste { return samlet; } - private static List trimPerioder(RegelGrunnlag grunnlag, List manglendeSøktePerioder) { + private static List trimPerioder( + RegelGrunnlag grunnlag, List manglendeSøktePerioder) { return manglendeSøktePerioder.stream() - .map(ManglendeSøktPeriodeUtil::fjernHelg) - .filter(Optional::isPresent) - .map(Optional::get) - .map(p -> fjernPerioderFørSkjæringstidspunktOpptjening(p, grunnlag)) - .filter(Optional::isPresent) - .map(Optional::get) - .map(p -> fjernPerioderFørEndringsdatoVedRevurdering(p, grunnlag)) - .filter(Optional::isPresent) - .map(Optional::get) - .sorted(Comparator.comparing(Periode::getFom)) - .toList(); + .map(ManglendeSøktPeriodeUtil::fjernHelg) + .filter(Optional::isPresent) + .map(Optional::get) + .map(p -> fjernPerioderFørSkjæringstidspunktOpptjening(p, grunnlag)) + .filter(Optional::isPresent) + .map(Optional::get) + .map(p -> fjernPerioderFørEndringsdatoVedRevurdering(p, grunnlag)) + .filter(Optional::isPresent) + .map(Optional::get) + .sorted(Comparator.comparing(Periode::getFom)) + .toList(); } private static boolean contains(List list, LocalDate fom, LocalDate tom) { - return list.stream().anyMatch(item -> item.getFom().isEqual(fom) && item.getTom().isEqual(tom)); + return list.stream() + .anyMatch(item -> item.getFom().isEqual(fom) && item.getTom().isEqual(tom)); } private static List finnPerioderVedAdopsjon(RegelGrunnlag grunnlag) { @@ -86,12 +90,18 @@ private static List finnPerioderVedAdopsjon(RegelGrunnlag grunnl return Collections.emptyList(); } - private static List finnManglendeSøktIUkerForbeholdtMor(RegelGrunnlag grunnlag) { - if (grunnlag.getBehandling().isSøkerMor() && grunnlag.getSøknad().getType().gjelderTerminFødsel()) { + private static List finnManglendeSøktIUkerForbeholdtMor( + RegelGrunnlag grunnlag) { + if (grunnlag.getBehandling().isSøkerMor() + && grunnlag.getSøknad().getType().gjelderTerminFødsel()) { return utledManglendeForMorFraOppgittePerioder(grunnlag); } - if (farSøkerFødselEllerTerminOgBareFarHarRett(grunnlag) && !grunnlag.getRettOgOmsorg().getAleneomsorg()) { - var oppholdFar = utledManglendeSøktForFar(grunnlag.getDatoer().getFamiliehendelse(), grunnlag.getSøknad().getOppgittePerioder()); + if (farSøkerFødselEllerTerminOgBareFarHarRett(grunnlag) + && !grunnlag.getRettOgOmsorg().getAleneomsorg()) { + var oppholdFar = + utledManglendeSøktForFar( + grunnlag.getDatoer().getFamiliehendelse(), + grunnlag.getSøknad().getOppgittePerioder()); if (oppholdFar.isPresent()) { return List.of(oppholdFar.get()); } @@ -99,12 +109,16 @@ private static List finnPerioderVedAdopsjon(RegelGrunnlag grunnl return Collections.emptyList(); } - private static List finnManglendeSøktePerioderTilFarMedAleneomsorg(RegelGrunnlag grunnlag) { + private static List finnManglendeSøktePerioderTilFarMedAleneomsorg( + RegelGrunnlag grunnlag) { if (isFarMedAleneomsorg(grunnlag)) { var førstePeriode = grunnlag.getSøknad().getOppgittePerioder().getFirst(); if (grunnlag.getDatoer().getFamiliehendelse().isBefore(førstePeriode.getFom())) { - var nyPeriode = lagManglendeSøktPeriode(grunnlag.getDatoer().getFamiliehendelse(), førstePeriode.getFom().minusDays(1), - Stønadskontotype.FORELDREPENGER); + var nyPeriode = + lagManglendeSøktPeriode( + grunnlag.getDatoer().getFamiliehendelse(), + førstePeriode.getFom().minusDays(1), + Stønadskontotype.FORELDREPENGER); return List.of(nyPeriode); } } @@ -116,10 +130,14 @@ private static List finnPerioderVedAdopsjon(RegelGrunnlag grunnl var førsteUttaksdatoSøknad = førsteUttaksdatoSøknad(grunnlag); var førsteUttaksdatoAnnenpart = førsteUttaksdatoAnnenpart(grunnlag); - if (førsteUttaksdatoSøknad.isAfter(senesteLovligeStartdatoVedAdopsjon) && (førsteUttaksdatoAnnenpart.isEmpty() - || førsteUttaksdatoAnnenpart.get().isAfter(senesteLovligeStartdatoVedAdopsjon))) { + if (førsteUttaksdatoSøknad.isAfter(senesteLovligeStartdatoVedAdopsjon) + && (førsteUttaksdatoAnnenpart.isEmpty() + || førsteUttaksdatoAnnenpart + .get() + .isAfter(senesteLovligeStartdatoVedAdopsjon))) { LocalDate tom; - if (førsteUttaksdatoAnnenpart.isEmpty() || førsteUttaksdatoSøknad.isBefore(førsteUttaksdatoAnnenpart.get())) { + if (førsteUttaksdatoAnnenpart.isEmpty() + || førsteUttaksdatoSøknad.isBefore(førsteUttaksdatoAnnenpart.get())) { tom = førsteUttaksdatoSøknad.minusDays(1); } else { tom = førsteUttaksdatoAnnenpart.get().minusDays(1); @@ -130,7 +148,8 @@ private static List finnPerioderVedAdopsjon(RegelGrunnlag grunnl } private static Optional førsteUttaksdatoAnnenpart(RegelGrunnlag grunnlag) { - if (grunnlag.getAnnenPart() == null || grunnlag.getAnnenPart().getUttaksperioder().isEmpty()) { + if (grunnlag.getAnnenPart() == null + || grunnlag.getAnnenPart().getUttaksperioder().isEmpty()) { return Optional.empty(); } return Optional.of(førsteFom(grunnlag.getAnnenPart().getUttaksperioder())); @@ -141,15 +160,24 @@ private static List finnPerioderVedAdopsjon(RegelGrunnlag grunnl } private static LocalDate førsteFom(List perioder) { - return perioder.stream().min(Comparator.comparing(LukketPeriode::getFom)).orElseThrow().getFom(); + return perioder.stream() + .min(Comparator.comparing(LukketPeriode::getFom)) + .orElseThrow() + .getFom(); } - private static Optional utledManglendeSøktForFar(LocalDate familiehendelse, List uttaksperioder) { + private static Optional utledManglendeSøktForFar( + LocalDate familiehendelse, List uttaksperioder) { var førstePeriode = uttaksperioder.get(0); - var ukerForbeholdtMor = Konfigurasjon.STANDARD.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, familiehendelse); + var ukerForbeholdtMor = + Konfigurasjon.STANDARD.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, familiehendelse); if (familiehendelse.plusWeeks(ukerForbeholdtMor).isBefore(førstePeriode.getFom())) { - var nyPeriode = lagManglendeSøktPeriode(familiehendelse.plusWeeks(ukerForbeholdtMor), førstePeriode.getFom().minusDays(1), - Stønadskontotype.FORELDREPENGER); + var nyPeriode = + lagManglendeSøktPeriode( + familiehendelse.plusWeeks(ukerForbeholdtMor), + førstePeriode.getFom().minusDays(1), + Stønadskontotype.FORELDREPENGER); return Optional.of(nyPeriode); } return Optional.empty(); @@ -163,26 +191,39 @@ private static List finnPerioderVedAdopsjon(RegelGrunnlag grunnl return grunnlag.getSøknad().getType().gjelderTerminFødsel(); } - private static List utledManglendeForMorFraOppgittePerioder(RegelGrunnlag grunnlag) { + private static List utledManglendeForMorFraOppgittePerioder( + RegelGrunnlag grunnlag) { var familiehendelseDato = grunnlag.getDatoer().getFamiliehendelse(); - var uttakPerioder = slåSammenUttakForBeggeParter(grunnlag).stream().sorted(Comparator.comparing(Periode::getFom)).toList(); - var mspFørFødsel = finnManglendeSøktFørFødsel(uttakPerioder, familiehendelseDato, grunnlag.getSøknad().getType(), - grunnlag.getGyldigeStønadskontotyper()); - var mspEtterFødsel = finnPerioderEtterFødsel(uttakPerioder, familiehendelseDato, grunnlag.getGyldigeStønadskontotyper()); + var uttakPerioder = + slåSammenUttakForBeggeParter(grunnlag).stream() + .sorted(Comparator.comparing(Periode::getFom)) + .toList(); + var mspFørFødsel = + finnManglendeSøktFørFødsel( + uttakPerioder, + familiehendelseDato, + grunnlag.getSøknad().getType(), + grunnlag.getGyldigeStønadskontotyper()); + var mspEtterFødsel = + finnPerioderEtterFødsel( + uttakPerioder, familiehendelseDato, grunnlag.getGyldigeStønadskontotyper()); return Stream.of(mspFørFødsel, mspEtterFødsel) - .flatMap(Collection::stream) - .map(ManglendeSøktPeriodeUtil::fjernHelg) - .filter(Optional::isPresent) - .map(Optional::get) - .toList(); + .flatMap(Collection::stream) + .map(ManglendeSøktPeriodeUtil::fjernHelg) + .filter(Optional::isPresent) + .map(Optional::get) + .toList(); } - private static Optional fjernPerioderFørSkjæringstidspunktOpptjening(OppgittPeriode msp, RegelGrunnlag grunnlag) { + private static Optional fjernPerioderFørSkjæringstidspunktOpptjening( + OppgittPeriode msp, RegelGrunnlag grunnlag) { var skjæringstidspunkt = grunnlag.getOpptjening().getSkjæringstidspunkt(); - // Skal ikke fjerne periode før skjæringstidspunkt for far med aleneomsorg eller enerett (fødsel eller adopsjon) - if ((farSøkerFødselEllerTerminOgBareFarHarRett(grunnlag) || isFarMedAleneomsorg(grunnlag) && skjæringstidspunkt.isAfter( - grunnlag.getDatoer().getFamiliehendelse()))) { + // Skal ikke fjerne periode før skjæringstidspunkt for far med aleneomsorg eller enerett + // (fødsel eller adopsjon) + if ((farSøkerFødselEllerTerminOgBareFarHarRett(grunnlag) + || isFarMedAleneomsorg(grunnlag) + && skjæringstidspunkt.isAfter(grunnlag.getDatoer().getFamiliehendelse()))) { return Optional.of(msp); } if (mspFyllerHullMellomForeldrene(msp, grunnlag)) { @@ -192,10 +233,12 @@ private static List utledManglendeForMorFraOppgittePerioder(Rege } private static boolean isFarMedAleneomsorg(RegelGrunnlag grunnlag) { - return grunnlag.getBehandling().isSøkerFarMedMor() && grunnlag.getRettOgOmsorg().getAleneomsorg(); + return grunnlag.getBehandling().isSøkerFarMedMor() + && grunnlag.getRettOgOmsorg().getAleneomsorg(); } - private static boolean mspFyllerHullMellomForeldrene(OppgittPeriode msp, RegelGrunnlag grunnlag) { + private static boolean mspFyllerHullMellomForeldrene( + OppgittPeriode msp, RegelGrunnlag grunnlag) { if (grunnlag.getAnnenPart() == null) { return false; } @@ -211,54 +254,84 @@ private static boolean mspFyllerHullMellomForeldrene(OppgittPeriode msp, RegelGr return farSøkerFødselEllerTermin(grunnlag) && bareFarRett(grunnlag); } - private static Stream finnManglendeMellomliggendePerioder(RegelGrunnlag grunnlag, List ekskludertePerioder) { + private static Stream finnManglendeMellomliggendePerioder( + RegelGrunnlag grunnlag, List ekskludertePerioder) { var allePerioder = slåSammenUttakForBeggeParter(grunnlag); - //legge inn ikke søkte perioder til uker som er Forbeholdt til Mor etter fødsel + // legge inn ikke søkte perioder til uker som er Forbeholdt til Mor etter fødsel allePerioder.addAll(ekskludertePerioder); return finnManglendeMellomliggendePerioder(allePerioder).stream() - .map(ManglendeSøktPeriodeUtil::fjernHelg) - .filter(Optional::isPresent) - .map(Optional::get); + .map(ManglendeSøktPeriodeUtil::fjernHelg) + .filter(Optional::isPresent) + .map(Optional::get); } - - private static List finnManglendeSøktFørFødsel(List søktePerioder, - LocalDate familiehendelseDato, - Søknadstype søknadstype, - Set gyldigeStønadskontotyper) { + private static List finnManglendeSøktFørFødsel( + List søktePerioder, + LocalDate familiehendelseDato, + Søknadstype søknadstype, + Set gyldigeStønadskontotyper) { if (Søknadstype.ADOPSJON.equals(søknadstype)) { return List.of(); } - var antallUkerFpffFørFødsel = Konfigurasjon.STANDARD.getParameter(Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, familiehendelseDato); - var sorterteSøktePerioder = søktePerioder.stream().sorted(Comparator.comparing(Periode::getFom)).toList(); + var antallUkerFpffFørFødsel = + Konfigurasjon.STANDARD.getParameter( + Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, familiehendelseDato); + var sorterteSøktePerioder = + søktePerioder.stream().sorted(Comparator.comparing(Periode::getFom)).toList(); var førsteUttaksdagSøknad = sorterteSøktePerioder.get(0).getFom(); - if (!førsteUttaksdagSøknad.isBefore(familiehendelseDato.minusWeeks(antallUkerFpffFørFødsel))) { + if (!førsteUttaksdagSøknad.isBefore( + familiehendelseDato.minusWeeks(antallUkerFpffFørFødsel))) { return List.of(); } - var startdatoBegingetFpff = førsteUttaksdagSøknad.isBefore( - familiehendelseDato.minusWeeks(antallUkerFpffFørFødsel)) ? familiehendelseDato.minusWeeks( - antallUkerFpffFørFødsel) : førsteUttaksdagSøknad; - var betingetFpffPeriode = new LukketPeriode(startdatoBegingetFpff, familiehendelseDato.minusDays(1)); - var mspFørFødsel = ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(sorterteSøktePerioder, betingetFpffPeriode) - .stream() - .map(msp -> lagManglendeSøktPeriode(msp.getFom(), msp.getTom(), Stønadskontotype.FORELDREPENGER_FØR_FØDSEL)) - .toList(); - var betingetFellesperiode = new LukketPeriode(førsteUttaksdagSøknad, familiehendelseDato.minusWeeks(antallUkerFpffFørFødsel).minusDays(1)); - var mspForFellesperiodeFørFødsel = ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(sorterteSøktePerioder, betingetFellesperiode) - .stream() - .map(msp -> { - var type = gyldigeStønadskontotyper.contains( - Stønadskontotype.FELLESPERIODE) ? Stønadskontotype.FELLESPERIODE : Stønadskontotype.FORELDREPENGER; - return lagManglendeSøktPeriode(msp.getFom(), msp.getTom(), type); - }) - .toList(); - return Stream.of(mspForFellesperiodeFørFødsel, mspFørFødsel).flatMap(Collection::stream).filter(p -> p.virkedager() > 0).toList(); + var startdatoBegingetFpff = + førsteUttaksdagSøknad.isBefore( + familiehendelseDato.minusWeeks(antallUkerFpffFørFødsel)) + ? familiehendelseDato.minusWeeks(antallUkerFpffFørFødsel) + : førsteUttaksdagSøknad; + var betingetFpffPeriode = + new LukketPeriode(startdatoBegingetFpff, familiehendelseDato.minusDays(1)); + var mspFørFødsel = + ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder( + sorterteSøktePerioder, betingetFpffPeriode) + .stream() + .map( + msp -> + lagManglendeSøktPeriode( + msp.getFom(), + msp.getTom(), + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL)) + .toList(); + var betingetFellesperiode = + new LukketPeriode( + førsteUttaksdagSøknad, + familiehendelseDato.minusWeeks(antallUkerFpffFørFødsel).minusDays(1)); + var mspForFellesperiodeFørFødsel = + ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder( + sorterteSøktePerioder, betingetFellesperiode) + .stream() + .map( + msp -> { + var type = + gyldigeStønadskontotyper.contains( + Stønadskontotype.FELLESPERIODE) + ? Stønadskontotype.FELLESPERIODE + : Stønadskontotype.FORELDREPENGER; + return lagManglendeSøktPeriode( + msp.getFom(), msp.getTom(), type); + }) + .toList(); + return Stream.of(mspForFellesperiodeFørFødsel, mspFørFødsel) + .flatMap(Collection::stream) + .filter(p -> p.virkedager() > 0) + .toList(); } - private static List finnManglendeMellomliggendePerioder(List perioder) { - var sortertePerioder = perioder.stream().sorted(Comparator.comparing(LukketPeriode::getFom)).toList(); + private static List finnManglendeMellomliggendePerioder( + List perioder) { + var sortertePerioder = + perioder.stream().sorted(Comparator.comparing(LukketPeriode::getFom)).toList(); List mellomliggendePerioder = new ArrayList<>(); LocalDate mspFom = null; @@ -278,17 +351,25 @@ private static List finnManglendeMellomliggendePerioder(List finnPerioderEtterFødsel(List søktePerioder, - LocalDate familiehendelseDato, - Set gyldigeStønadskontotyper) { - var mødrekvoteEtterFødselUker = Konfigurasjon.STANDARD.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, familiehendelseDato); - var betingetPeriodeEtterFødsel = new LukketPeriode(familiehendelseDato, - familiehendelseDato.plusWeeks(mødrekvoteEtterFødselUker).minusDays(1)); - var stønadskontotype = gyldigeStønadskontotyper.contains( - Stønadskontotype.MØDREKVOTE) ? Stønadskontotype.MØDREKVOTE : Stønadskontotype.FORELDREPENGER; - return ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(søktePerioder, betingetPeriodeEtterFødsel) - .stream() - .map(msp -> lagManglendeSøktPeriode(msp.getFom(), msp.getTom(), stønadskontotype)) - .toList(); + private static List finnPerioderEtterFødsel( + List søktePerioder, + LocalDate familiehendelseDato, + Set gyldigeStønadskontotyper) { + var mødrekvoteEtterFødselUker = + Konfigurasjon.STANDARD.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, familiehendelseDato); + var betingetPeriodeEtterFødsel = + new LukketPeriode( + familiehendelseDato, + familiehendelseDato.plusWeeks(mødrekvoteEtterFødselUker).minusDays(1)); + var stønadskontotype = + gyldigeStønadskontotyper.contains(Stønadskontotype.MØDREKVOTE) + ? Stønadskontotype.MØDREKVOTE + : Stønadskontotype.FORELDREPENGER; + return ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder( + søktePerioder, betingetPeriodeEtterFødsel) + .stream() + .map(msp -> lagManglendeSøktPeriode(msp.getFom(), msp.getTom(), stønadskontotype)) + .toList(); } } diff --git "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderTjeneste.java" "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderTjeneste.java" index 30748466..a635dd2b 100644 --- "a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderTjeneste.java" +++ "b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderTjeneste.java" @@ -13,7 +13,6 @@ import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Virkedager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; @@ -23,7 +22,6 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.Konfigurasjon; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.konfig.Parametertype; - public final class ManglendeSøktePerioderTjeneste { private ManglendeSøktePerioderTjeneste() { @@ -45,22 +43,22 @@ public final class ManglendeSøktePerioderTjeneste { return fellesFilter(grunnlag, msPerioder); } - private static List fellesFilter(RegelGrunnlag grunnlag, List msPerioder) { + private static List fellesFilter( + RegelGrunnlag grunnlag, List msPerioder) { return msPerioder.stream() - .map(p -> fjernPerioderFørEndringsdatoVedRevurdering(p, grunnlag)) - .filter(Optional::isPresent) - .map(Optional::get) - .map(ManglendeSøktPeriodeUtil::fjernHelg) - .filter(Optional::isPresent) - .map(Optional::get) - .sorted(Comparator.comparing(Periode::getFom)) - .toList(); + .map(p -> fjernPerioderFørEndringsdatoVedRevurdering(p, grunnlag)) + .filter(Optional::isPresent) + .map(Optional::get) + .map(ManglendeSøktPeriodeUtil::fjernHelg) + .filter(Optional::isPresent) + .map(Optional::get) + .sorted(Comparator.comparing(Periode::getFom)) + .toList(); } - /** - * Gjelder ikke bare far har rett, se egen metode - */ - private static List finnManglendeSøktePerioderITidsprommetForbeholdtMor(RegelGrunnlag grunnlag) { + /** Gjelder ikke bare far har rett, se egen metode */ + private static List finnManglendeSøktePerioderITidsprommetForbeholdtMor( + RegelGrunnlag grunnlag) { // Må sjekke om annenpart. Gjelder der far først har søkt om aleneomsorg. var behandling = grunnlag.getBehandling(); if (behandling.isSøkerFarMedMor() && grunnlag.getAnnenPart() == null) { @@ -68,39 +66,56 @@ private static List fellesFilter(RegelGrunnlag grunnlag, List splitPåTidsperiodeForbeholdtMor(familiehendelse, p).stream()) - .collect(Collectors.toList()); + var fellesUttakBeggeParter = + slåSammenUttakForBeggeParter(grunnlag).stream() + .flatMap(p -> splitPåTidsperiodeForbeholdtMor(familiehendelse, p).stream()) + .collect(Collectors.toList()); var førsteFellesUttaksdato = fellesUttakBeggeParter.get(0).getFom(); - var sisteFellesUttaksdato = fellesUttakBeggeParter.get(fellesUttakBeggeParter.size() - 1).getTom(); + var sisteFellesUttaksdato = + fellesUttakBeggeParter.get(fellesUttakBeggeParter.size() - 1).getTom(); var tomTidsperiodeForbeholdtMor = tomTidsperiodeForbeholdtMor(familiehendelse); if (behandling.isSøkerMor()) { if (førsteFellesUttaksdato.isAfter(familiehendelse)) { - //Feks mor søker ikke om uke 1-3, men fra uke 4 og utover. Legger til periode for at det skal opprettes msp - fellesUttakBeggeParter.add(new LukketPeriode(familiehendelse.minusDays(1), familiehendelse.minusDays(1))); + // Feks mor søker ikke om uke 1-3, men fra uke 4 og utover. Legger til periode for + // at det skal opprettes msp + fellesUttakBeggeParter.add( + new LukketPeriode( + familiehendelse.minusDays(1), familiehendelse.minusDays(1))); } if (sisteFellesUttaksdato.isBefore(tomTidsperiodeForbeholdtMor)) { - //Feks mor søker bare om de første 4 ukene, må ha msp på resten av ukene forbeholdt mor. Legger til periode for at det skal opprettes msp - fellesUttakBeggeParter.add(new LukketPeriode(tomTidsperiodeForbeholdtMor.plusDays(1), tomTidsperiodeForbeholdtMor.plusDays(1))); + // Feks mor søker bare om de første 4 ukene, må ha msp på resten av ukene forbeholdt + // mor. Legger til periode for at det skal opprettes msp + fellesUttakBeggeParter.add( + new LukketPeriode( + tomTidsperiodeForbeholdtMor.plusDays(1), + tomTidsperiodeForbeholdtMor.plusDays(1))); } } - var harForeldrepengerKonto = grunnlag.getKontoer().harStønadskonto(Stønadskontotype.FORELDREPENGER); + var harForeldrepengerKonto = + grunnlag.getKontoer().harStønadskonto(Stønadskontotype.FORELDREPENGER); - var stønadskontotype = harForeldrepengerKonto ? Stønadskontotype.FORELDREPENGER : Stønadskontotype.MØDREKVOTE; + var stønadskontotype = + harForeldrepengerKonto + ? Stønadskontotype.FORELDREPENGER + : Stønadskontotype.MØDREKVOTE; var fomTidsperiodeForbeholdtMor = fomTidsperiodeForbeholdtMor(familiehendelse); - return finnManglendeMellomliggendePerioderEtterFamilieHendelse(fellesUttakBeggeParter, familiehendelse, stønadskontotype).stream() - .flatMap(p -> split(tomTidsperiodeForbeholdtMor.plusDays(1), p)) - .flatMap(p -> split(fomTidsperiodeForbeholdtMor, p)) - .filter(p -> periodeLiggerITidsrommetForbeholdtMor(grunnlag, p)) - .sorted(Comparator.comparing(OppgittPeriode::getFom)) - .toList(); + return finnManglendeMellomliggendePerioderEtterFamilieHendelse( + fellesUttakBeggeParter, familiehendelse, stønadskontotype) + .stream() + .flatMap(p -> split(tomTidsperiodeForbeholdtMor.plusDays(1), p)) + .flatMap(p -> split(fomTidsperiodeForbeholdtMor, p)) + .filter(p -> periodeLiggerITidsrommetForbeholdtMor(grunnlag, p)) + .sorted(Comparator.comparing(OppgittPeriode::getFom)) + .toList(); } - private static List finnManglendeMellomliggendePerioderEtterFamilieHendelse(List perioder, - LocalDate familieHendelse, - Stønadskontotype stønadskontotype) { - var sortertePerioder = perioder.stream().sorted(Comparator.comparing(LukketPeriode::getFom)).toList(); + private static List finnManglendeMellomliggendePerioderEtterFamilieHendelse( + List perioder, + LocalDate familieHendelse, + Stønadskontotype stønadskontotype) { + var sortertePerioder = + perioder.stream().sorted(Comparator.comparing(LukketPeriode::getFom)).toList(); List mellomliggendePerioder = new ArrayList<>(); LocalDate mspFom = null; @@ -121,11 +136,13 @@ private static List finnManglendeMellomliggendePerioderEtterFami return mellomliggendePerioder; } - private static Optional finnMsp(LocalDate familieHendelse, - LocalDate mspFom, - LocalDate mspTom, - Stønadskontotype stønadskontotype) { - if (new LukketPeriode(mspFom, mspTom).overlapper(familieHendelse) && !mspFom.isEqual(familieHendelse)) { + private static Optional finnMsp( + LocalDate familieHendelse, + LocalDate mspFom, + LocalDate mspTom, + Stønadskontotype stønadskontotype) { + if (new LukketPeriode(mspFom, mspTom).overlapper(familieHendelse) + && !mspFom.isEqual(familieHendelse)) { var etterSplitt = lagManglendeSøktPeriode(familieHendelse, mspTom, stønadskontotype); return Optional.of(etterSplitt); @@ -141,42 +158,57 @@ private static Stream split(LocalDate dato, OppgittPeriode perio } if (periode.overlapper(dato)) { - return Stream.of(periode.kopiMedNyPeriode(periode.getFom(), dato.minusDays(1)), periode.kopiMedNyPeriode(dato, periode.getTom())); + return Stream.of( + periode.kopiMedNyPeriode(periode.getFom(), dato.minusDays(1)), + periode.kopiMedNyPeriode(dato, periode.getTom())); } return Stream.of(periode); } - private static List splitPåTidsperiodeForbeholdtMor(LocalDate familiehendelse, LukketPeriode periode) { + private static List splitPåTidsperiodeForbeholdtMor( + LocalDate familiehendelse, LukketPeriode periode) { var tomTidsperiodeForbeholdtMor = tomTidsperiodeForbeholdtMor(familiehendelse); - //Regner allerede med at perioden er splittet på familiehendelse - if (periode.overlapper(tomTidsperiodeForbeholdtMor) && periode.getTom().isAfter(tomTidsperiodeForbeholdtMor)) { - return List.of(new LukketPeriode(periode.getFom(), tomTidsperiodeForbeholdtMor), - new LukketPeriode(tomTidsperiodeForbeholdtMor.plusDays(1), periode.getTom())); + // Regner allerede med at perioden er splittet på familiehendelse + if (periode.overlapper(tomTidsperiodeForbeholdtMor) + && periode.getTom().isAfter(tomTidsperiodeForbeholdtMor)) { + return List.of( + new LukketPeriode(periode.getFom(), tomTidsperiodeForbeholdtMor), + new LukketPeriode(tomTidsperiodeForbeholdtMor.plusDays(1), periode.getTom())); } var fomTidsperiodeForbeholdtMor = fomTidsperiodeForbeholdtMor(familiehendelse); - if (periode.overlapper(fomTidsperiodeForbeholdtMor) && periode.getFom().isBefore(fomTidsperiodeForbeholdtMor)) { - return List.of(new LukketPeriode(periode.getFom(), fomTidsperiodeForbeholdtMor.minusDays(1)), - new LukketPeriode(fomTidsperiodeForbeholdtMor, periode.getTom())); + if (periode.overlapper(fomTidsperiodeForbeholdtMor) + && periode.getFom().isBefore(fomTidsperiodeForbeholdtMor)) { + return List.of( + new LukketPeriode(periode.getFom(), fomTidsperiodeForbeholdtMor.minusDays(1)), + new LukketPeriode(fomTidsperiodeForbeholdtMor, periode.getTom())); } return List.of(periode); } - private static boolean periodeLiggerITidsrommetForbeholdtMor(RegelGrunnlag grunnlag, LukketPeriode periode) { + private static boolean periodeLiggerITidsrommetForbeholdtMor( + RegelGrunnlag grunnlag, LukketPeriode periode) { var familiehendelse = grunnlag.getDatoer().getFamiliehendelse(); var fomTidsperiodeForbeholdtMor = fomTidsperiodeForbeholdtMor(familiehendelse); var tomTidsperiodeForbeholdtMor = tomTidsperiodeForbeholdtMor(familiehendelse); - //Regner med at periodene som kommer inne aldri overlapper med fom og tom forbeholdt mor. Altså at splittingen allerede er gjort - return periode.overlapper(new LukketPeriode(fomTidsperiodeForbeholdtMor, tomTidsperiodeForbeholdtMor)); + // Regner med at periodene som kommer inne aldri overlapper med fom og tom forbeholdt mor. + // Altså at splittingen allerede er gjort + return periode.overlapper( + new LukketPeriode(fomTidsperiodeForbeholdtMor, tomTidsperiodeForbeholdtMor)); } static LocalDate tomTidsperiodeForbeholdtMor(LocalDate familiehendelse) { - return familiehendelse.plusWeeks(Konfigurasjon.STANDARD.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, familiehendelse)) - .minusDays(1); + return familiehendelse + .plusWeeks( + Konfigurasjon.STANDARD.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, familiehendelse)) + .minusDays(1); } private static LocalDate fomTidsperiodeForbeholdtMor(LocalDate familiehendelse) { return Virkedager.justerHelgTilMandag( - familiehendelse.minusWeeks(Konfigurasjon.STANDARD.getParameter(Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, familiehendelse))); + familiehendelse.minusWeeks( + Konfigurasjon.STANDARD.getParameter( + Parametertype.SENEST_UTTAK_FØR_TERMIN_UKER, familiehendelse))); } } diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/MspBfhrUtil.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/MspBfhrUtil.java index 3e8b1a91..43eb25b4 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/MspBfhrUtil.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/MspBfhrUtil.java @@ -8,7 +8,6 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Virkedager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; @@ -17,8 +16,7 @@ final class MspBfhrUtil { - private MspBfhrUtil() { - } + private MspBfhrUtil() {} static List finnManglendeSøktPeriodeBareFarHarRett(RegelGrunnlag grunnlag) { if (grunnlag.getSøknad().gjelderAdopsjon()) { @@ -36,24 +34,29 @@ private static List forAdopsjon(RegelGrunnlag grunnlag) { private static List forTerminFødsel(RegelGrunnlag grunnlag) { var familiehendelse = grunnlag.getDatoer().getFamiliehendelse(); var tomTidsperiodeForbeholdtMor = tomTidsperiodeForbeholdtMor(familiehendelse); - var bareFarSomHarRettMåHaStartdato = Virkedager.plusVirkedager(tomTidsperiodeForbeholdtMor, 1); + var bareFarSomHarRettMåHaStartdato = + Virkedager.plusVirkedager(tomTidsperiodeForbeholdtMor, 1); return fraDato(grunnlag, bareFarSomHarRettMåHaStartdato, tomTidsperiodeForbeholdtMor); } - private static List fraDato(RegelGrunnlag grunnlag, LocalDate påkrevdOppstartsdato, LocalDate ikkeLagHullFørDato) { + private static List fraDato( + RegelGrunnlag grunnlag, LocalDate påkrevdOppstartsdato, LocalDate ikkeLagHullFørDato) { List msp = new ArrayList<>(); - var søktePerioderSomSkalLageHull = grunnlag.getSøknad() - .getOppgittePerioder() - .stream() - .filter(p -> p.getTom().isAfter(ikkeLagHullFørDato)) - .map(p -> new LukketPeriode(p.getFom(), p.getTom())) - .toList(); + var søktePerioderSomSkalLageHull = + grunnlag.getSøknad().getOppgittePerioder().stream() + .filter(p -> p.getTom().isAfter(ikkeLagHullFørDato)) + .map(p -> new LukketPeriode(p.getFom(), p.getTom())) + .toList(); if (søktePerioderSomSkalLageHull.isEmpty()) { return List.of(); } var førstePeriodeFom = søktePerioderSomSkalLageHull.get(0).getFom(); if (førstePeriodeFom.isAfter(påkrevdOppstartsdato)) { - var mspFraPåkrevdOppstart = lagManglendeSøktPeriode(påkrevdOppstartsdato, førstePeriodeFom.minusDays(1), Stønadskontotype.FORELDREPENGER); + var mspFraPåkrevdOppstart = + lagManglendeSøktPeriode( + påkrevdOppstartsdato, + førstePeriodeFom.minusDays(1), + Stønadskontotype.FORELDREPENGER); msp.add(mspFraPåkrevdOppstart); } var manglendeMellomliggendePerioder = finnMellomliggende(søktePerioderSomSkalLageHull); @@ -62,7 +65,8 @@ private static List fraDato(RegelGrunnlag grunnlag, LocalDate p } private static List finnMellomliggende(List perioder) { - var sortertePerioder = perioder.stream().sorted(Comparator.comparing(LukketPeriode::getFom)).toList(); + var sortertePerioder = + perioder.stream().sorted(Comparator.comparing(LukketPeriode::getFom)).toList(); List mellomliggendePerioder = new ArrayList<>(); LocalDate mspFom = null; @@ -72,7 +76,9 @@ private static List finnMellomliggende(List perio } else if (mspFom.isBefore(lukketPeriode.getFom())) { var mspTom = lukketPeriode.getFom().minusDays(1); if (Virkedager.beregnAntallVirkedager(mspFom, mspTom) > 0) { - mellomliggendePerioder.add(lagManglendeSøktPeriode(mspFom, mspTom, Stønadskontotype.FORELDREPENGER)); + mellomliggendePerioder.add( + lagManglendeSøktPeriode( + mspFom, mspTom, Stønadskontotype.FORELDREPENGER)); } } if (!lukketPeriode.getTom().isBefore(mspFom)) { diff --git a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/SamtidigUttakUtil.java b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/SamtidigUttakUtil.java index d885b071..406d7856 100644 --- a/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/SamtidigUttakUtil.java +++ b/src/main/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/SamtidigUttakUtil.java @@ -8,7 +8,6 @@ import java.util.Set; import java.util.function.Predicate; import java.util.stream.Collectors; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriodeAktivitet; @@ -21,27 +20,34 @@ public final class SamtidigUttakUtil { - private static final Set KONTI_FOR150 = Set.of(Stønadskontotype.MØDREKVOTE, Stønadskontotype.FEDREKVOTE, FELLESPERIODE); - private static final Set KONTI_KVOTE = Set.of(Stønadskontotype.MØDREKVOTE, Stønadskontotype.FEDREKVOTE); + private static final Set KONTI_FOR150 = + Set.of(Stønadskontotype.MØDREKVOTE, Stønadskontotype.FEDREKVOTE, FELLESPERIODE); + private static final Set KONTI_KVOTE = + Set.of(Stønadskontotype.MØDREKVOTE, Stønadskontotype.FEDREKVOTE); - private SamtidigUttakUtil() { - } + private SamtidigUttakUtil() {} - public static boolean annenpartHarSamtidigPeriodeMedUtbetaling(FastsettePeriodeGrunnlag grunnlag) { - return finnOverlappendeAnnenpartPeriode(grunnlag, SamtidigUttakUtil::periodeHarUtbetaling).isPresent(); + public static boolean annenpartHarSamtidigPeriodeMedUtbetaling( + FastsettePeriodeGrunnlag grunnlag) { + return finnOverlappendeAnnenpartPeriode(grunnlag, SamtidigUttakUtil::periodeHarUtbetaling) + .isPresent(); } public static boolean erTapendePeriodeRegel(FastsettePeriodeGrunnlag grunnlag) { - return grunnlag.getAktuellPeriode().getSenestMottattDato().isPresent() && annenpartHarPeriodeMottattSenere(grunnlag, false); + return grunnlag.getAktuellPeriode().getSenestMottattDato().isPresent() + && annenpartHarPeriodeMottattSenere(grunnlag, false); } public static boolean erTapendePeriodeUtregning(FastsettePeriodeGrunnlag grunnlag) { - return grunnlag.getAktuellPeriode().getSenestMottattDato().isPresent() && annenpartHarPeriodeMottattSenere(grunnlag, true); + return grunnlag.getAktuellPeriode().getSenestMottattDato().isPresent() + && annenpartHarPeriodeMottattSenere(grunnlag, true); } public static boolean søktSamtidigUttakForPeriode(FastsettePeriodeGrunnlag grunnlag) { - return grunnlag.getAktuellPeriode().erSøktSamtidigUttak() || finnOverlappendeAnnenpartPeriode(grunnlag, - AnnenpartUttakPeriode::isSamtidigUttak).isPresent(); + return grunnlag.getAktuellPeriode().erSøktSamtidigUttak() + || finnOverlappendeAnnenpartPeriode( + grunnlag, AnnenpartUttakPeriode::isSamtidigUttak) + .isPresent(); } public static boolean akseptert200ProsentSamtidigUttak(FastsettePeriodeGrunnlag grunnlag) { @@ -57,7 +63,8 @@ public static boolean merEnn100ProsentSamtidigUttak(FastsettePeriodeGrunnlag gru public static boolean akseptert150ProsentSamtidigUttak(FastsettePeriodeGrunnlag grunnlag) { // Ser etter kombo MK/FK (<= 100%) + Fellesperiode (<= 50%) boolean er150ProsentKonfigurasjon = er150ProsentKonfigurasjon(grunnlag); - if (er150ProsentKonfigurasjon && FELLESPERIODE.equals(grunnlag.getAktuellPeriode().getStønadskontotype())) { + if (er150ProsentKonfigurasjon + && FELLESPERIODE.equals(grunnlag.getAktuellPeriode().getStønadskontotype())) { return !uttaksprosent(grunnlag.getAktuellPeriode()).merEnn50(); } else if (er150ProsentKonfigurasjon) { return !uttaksprosentAnnenpart(grunnlag).merEnn50(); @@ -67,16 +74,23 @@ public static boolean akseptert150ProsentSamtidigUttak(FastsettePeriodeGrunnlag } public static boolean kanReduseresTil100ProsentForRegel(FastsettePeriodeGrunnlag grunnlag) { - // Sjekker om annenparts utbetalingsgrad <=80 slik at gjenværende utbetaling etter reduksjon er >= 20% (i første omgang) - // Dessuten avventer vi tilfelle av gradering og flere aktiviteter - reduser dersom 1 aktivitet eller ikke gradering + // Sjekker om annenparts utbetalingsgrad <=80 slik at gjenværende utbetaling etter reduksjon + // er >= 20% (i første omgang) + // Dessuten avventer vi tilfelle av gradering og flere aktiviteter - reduser dersom 1 + // aktivitet eller ikke gradering return !er150ProsentKonfigurasjon(grunnlag) - && uttaksprosentSomGir100ProsentSamtidigUttak(grunnlag).compareTo(SamtidigUttaksprosent.TWENTY) >= 0 && !( - grunnlag.getAktuellPeriode().getAktiviteter().size() > 1 && grunnlag.getAktuellPeriode().erSøktGradering()); + && uttaksprosentSomGir100ProsentSamtidigUttak(grunnlag) + .compareTo(SamtidigUttaksprosent.TWENTY) + >= 0 + && !(grunnlag.getAktuellPeriode().getAktiviteter().size() > 1 + && grunnlag.getAktuellPeriode().erSøktGradering()); } public static boolean gjelderFlerbarnsdager(FastsettePeriodeGrunnlag grunnlag) { - return grunnlag.getAktuellPeriode().isFlerbarnsdager() || finnOverlappendeAnnenpartPeriode(grunnlag, - AnnenpartUttakPeriode::isFlerbarnsdager).isPresent(); + return grunnlag.getAktuellPeriode().isFlerbarnsdager() + || finnOverlappendeAnnenpartPeriode( + grunnlag, AnnenpartUttakPeriode::isFlerbarnsdager) + .isPresent(); } public static boolean gjelderFarRundtFødsel(FastsettePeriodeGrunnlag grunnlag) { @@ -84,38 +98,56 @@ public static boolean gjelderFlerbarnsdager(FastsettePeriodeGrunnlag grunnlag) { if (farRundtFødselIntervall == null) { return false; } - return grunnlag.getAktuellPeriode().erOmsluttetAv(farRundtFødselIntervall) || finnOverlappendeAnnenpartPeriode(grunnlag, - app -> app.erOmsluttetAv(farRundtFødselIntervall)).isPresent(); + return grunnlag.getAktuellPeriode().erOmsluttetAv(farRundtFødselIntervall) + || finnOverlappendeAnnenpartPeriode( + grunnlag, app -> app.erOmsluttetAv(farRundtFødselIntervall)) + .isPresent(); } - public static boolean kanRedusereUtbetalingsgradForTapende(FastsettePeriodeGrunnlag periodeGrunnlag, RegelGrunnlag regelGrunnlag) { + public static boolean kanRedusereUtbetalingsgradForTapende( + FastsettePeriodeGrunnlag periodeGrunnlag, RegelGrunnlag regelGrunnlag) { // Er det ikkejusterbar periode, samtidig uttak under 100% eller 150/200% tilfelle? - var kanReduseres = regelGrunnlag.getBehandling().isBerørtBehandling() || erTapendePeriodeUtregning(periodeGrunnlag); - if (!kanReduseres || !annenpartHarSamtidigPeriodeMedUtbetaling(periodeGrunnlag) || !merEnn100ProsentSamtidigUttak(periodeGrunnlag) - || akseptert200ProsentSamtidigUttak(periodeGrunnlag) || akseptert150ProsentSamtidigUttak(periodeGrunnlag)) { + var kanReduseres = + regelGrunnlag.getBehandling().isBerørtBehandling() + || erTapendePeriodeUtregning(periodeGrunnlag); + if (!kanReduseres + || !annenpartHarSamtidigPeriodeMedUtbetaling(periodeGrunnlag) + || !merEnn100ProsentSamtidigUttak(periodeGrunnlag) + || akseptert200ProsentSamtidigUttak(periodeGrunnlag) + || akseptert150ProsentSamtidigUttak(periodeGrunnlag)) { return false; } - // Sjekker om annenparts utbetalingsgrad <=80 slik at gjenværende utbetaling etter reduksjon er >= 20% (i første omgang) + // Sjekker om annenparts utbetalingsgrad <=80 slik at gjenværende utbetaling etter reduksjon + // er >= 20% (i første omgang) return kanReduseresTil100ProsentForRegel(periodeGrunnlag); } public static SamtidigUttaksprosent uttaksprosentAnnenpart(FastsettePeriodeGrunnlag grunnlag) { - return finnOverlappendeAnnenpartPeriode(grunnlag, SamtidigUttakUtil::periodeHarUtbetaling).map(SamtidigUttakUtil::getSamtidigUttaksprosent) - .orElse(SamtidigUttaksprosent.ZERO); + return finnOverlappendeAnnenpartPeriode(grunnlag, SamtidigUttakUtil::periodeHarUtbetaling) + .map(SamtidigUttakUtil::getSamtidigUttaksprosent) + .orElse(SamtidigUttaksprosent.ZERO); } - private static SamtidigUttaksprosent uttaksprosentSomGir100ProsentSamtidigUttak(FastsettePeriodeGrunnlag grunnlag) { + private static SamtidigUttaksprosent uttaksprosentSomGir100ProsentSamtidigUttak( + FastsettePeriodeGrunnlag grunnlag) { var annenpart = uttaksprosentAnnenpart(grunnlag); return SamtidigUttaksprosent.HUNDRED.subtract(annenpart); } - private static boolean annenpartHarPeriodeMottattSenere(FastsettePeriodeGrunnlag grunnlag, boolean forNedjustering) { - var overlappende = finnOverlappendeAnnenpartPeriode(grunnlag, - aup -> ((aup.isInnvilget() && aup.isUtsettelse()) || aup.harUtbetaling()) && (forNedjustering || !aup.isSamtidigUttak())).flatMap( - AnnenpartUttakPeriode::getSenestMottattDato); + private static boolean annenpartHarPeriodeMottattSenere( + FastsettePeriodeGrunnlag grunnlag, boolean forNedjustering) { + var overlappende = + finnOverlappendeAnnenpartPeriode( + grunnlag, + aup -> + ((aup.isInnvilget() && aup.isUtsettelse()) + || aup.harUtbetaling()) + && (forNedjustering || !aup.isSamtidigUttak())) + .flatMap(AnnenpartUttakPeriode::getSenestMottattDato); var periodeMottatt = grunnlag.getAktuellPeriode().getSenestMottattDato().orElseThrow(); if (overlappende.filter(ol -> ol.equals(periodeMottatt)).isPresent()) { - return grunnlag.getAnnenPartSisteSøknadMottattTidspunkt().isAfter(grunnlag.getSisteSøknadMottattTidspunkt()); + return grunnlag.getAnnenPartSisteSøknadMottattTidspunkt() + .isAfter(grunnlag.getSisteSøknadMottattTidspunkt()); } return overlappende.filter(apmottatt -> apmottatt.isAfter(periodeMottatt)).isPresent(); } @@ -123,55 +155,63 @@ private static boolean annenpartHarPeriodeMottattSenere(FastsettePeriodeGrunnlag private static boolean er150ProsentKonfigurasjon(FastsettePeriodeGrunnlag grunnlag) { var aktuellPeriode = grunnlag.getAktuellPeriode(); Set annenpartsOverlappKonto = getAnnenpartStønadskontotyper(grunnlag); - if (!annenpartsOverlappKonto.isEmpty() && aktuellPeriode.getStønadskontotype() != null && KONTI_FOR150.contains( - aktuellPeriode.getStønadskontotype())) { - return (KONTI_KVOTE.contains(aktuellPeriode.getStønadskontotype()) && annenpartsOverlappKonto.contains(Stønadskontotype.FELLESPERIODE)) - || (FELLESPERIODE.equals(aktuellPeriode.getStønadskontotype()) && annenpartsOverlappKonto.stream().anyMatch(KONTI_KVOTE::contains)); + if (!annenpartsOverlappKonto.isEmpty() + && aktuellPeriode.getStønadskontotype() != null + && KONTI_FOR150.contains(aktuellPeriode.getStønadskontotype())) { + return (KONTI_KVOTE.contains(aktuellPeriode.getStønadskontotype()) + && annenpartsOverlappKonto.contains(Stønadskontotype.FELLESPERIODE)) + || (FELLESPERIODE.equals(aktuellPeriode.getStønadskontotype()) + && annenpartsOverlappKonto.stream().anyMatch(KONTI_KVOTE::contains)); } return false; } - private static Set getAnnenpartStønadskontotyper(FastsettePeriodeGrunnlag grunnlag) { - return finnOverlappendeAnnenpartPeriode(grunnlag, app -> true).map(AnnenpartUttakPeriode::getAktiviteter) - .orElse(Set.of()) - .stream() - .map(AnnenpartUttakPeriodeAktivitet::getStønadskontotype) - .filter(Objects::nonNull) - .filter(KONTI_FOR150::contains) - .collect(Collectors.toSet()); + private static Set getAnnenpartStønadskontotyper( + FastsettePeriodeGrunnlag grunnlag) { + return finnOverlappendeAnnenpartPeriode(grunnlag, app -> true) + .map(AnnenpartUttakPeriode::getAktiviteter) + .orElse(Set.of()) + .stream() + .map(AnnenpartUttakPeriodeAktivitet::getStønadskontotype) + .filter(Objects::nonNull) + .filter(KONTI_FOR150::contains) + .collect(Collectors.toSet()); } - private static Optional finnOverlappendeAnnenpartPeriode(FastsettePeriodeGrunnlag grunnlag, - Predicate filter) { + private static Optional finnOverlappendeAnnenpartPeriode( + FastsettePeriodeGrunnlag grunnlag, Predicate filter) { var aktuellPeriode = grunnlag.getAktuellPeriode(); - return grunnlag.getAnnenPartUttaksperioder() - .stream() - .filter(app -> PerioderUtenHelgUtil.perioderUtenHelgOverlapper(aktuellPeriode, app) && filter.test(app)) - .findFirst(); + return grunnlag.getAnnenPartUttaksperioder().stream() + .filter( + app -> + PerioderUtenHelgUtil.perioderUtenHelgOverlapper(aktuellPeriode, app) + && filter.test(app)) + .findFirst(); } private static SamtidigUttaksprosent uttaksprosent(OppgittPeriode aktuellPeriode) { if (aktuellPeriode.erSøktGradering()) { return SamtidigUttaksprosent.HUNDRED.subtract(aktuellPeriode.getArbeidsprosent()); } - return aktuellPeriode.erSøktSamtidigUttak() ? aktuellPeriode.getSamtidigUttaksprosent() : SamtidigUttaksprosent.HUNDRED; + return aktuellPeriode.erSøktSamtidigUttak() + ? aktuellPeriode.getSamtidigUttaksprosent() + : SamtidigUttaksprosent.HUNDRED; } - private static SamtidigUttaksprosent getSamtidigUttaksprosent(AnnenpartUttakPeriode ap) { if (ap.isUtsettelse() && ap.isInnvilget()) { return SamtidigUttaksprosent.HUNDRED; } - return ap.getAktiviteter() - .stream() - .filter(a -> a.getUtbetalingsgrad().harUtbetaling()) - .min(Comparator.comparing(AnnenpartUttakPeriodeAktivitet::getUtbetalingsgrad)) - .map(a -> new SamtidigUttaksprosent(a.getUtbetalingsgrad().decimalValue())) - .orElse(SamtidigUttaksprosent.ZERO); + return ap.getAktiviteter().stream() + .filter(a -> a.getUtbetalingsgrad().harUtbetaling()) + .min(Comparator.comparing(AnnenpartUttakPeriodeAktivitet::getUtbetalingsgrad)) + .map(a -> new SamtidigUttaksprosent(a.getUtbetalingsgrad().decimalValue())) + .orElse(SamtidigUttaksprosent.ZERO); } private static boolean periodeHarUtbetaling(AnnenpartUttakPeriode periode) { - return periode.getAktiviteter().stream().map(AnnenpartUttakPeriodeAktivitet::getUtbetalingsgrad).anyMatch(Utbetalingsgrad::harUtbetaling); + return periode.getAktiviteter().stream() + .map(AnnenpartUttakPeriodeAktivitet::getUtbetalingsgrad) + .anyMatch(Utbetalingsgrad::harUtbetaling); } - } diff --git a/src/main/resources/nare/fp-uttak-version.properties b/src/main/resources/nare/fp-uttak-version.properties index e5683df8..ff3598b5 100644 --- a/src/main/resources/nare/fp-uttak-version.properties +++ b/src/main/resources/nare/fp-uttak-version.properties @@ -1 +1,3 @@ -version=${project.version} \ No newline at end of file +version=${project.version} +vera=hello +avera=hello diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/AdopsjonOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/AdopsjonOrkestreringTest.java index 09539d95..6e48ccbd 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/AdopsjonOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/AdopsjonOrkestreringTest.java @@ -8,9 +8,6 @@ import java.math.BigDecimal; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Adopsjon; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -28,36 +25,51 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { - private final RegelGrunnlag.Builder grunnlagAdopsjon = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) - .behandling(morBehandling()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) - .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(50)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(130))) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .inngangsvilkår(oppfyltAlleVilkår()); + private final RegelGrunnlag.Builder grunnlagAdopsjon = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) + .behandling(morBehandling()) + .kontoer( + new Kontoer.Builder() + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(50)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(130))) + .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .inngangsvilkår(oppfyltAlleVilkår()); // MØDREKVOTE @Test void UT1230_adopsjon_mor_søker_mødrekvote_før_omsorgsovertakelse() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad( - søknad(Søknadstype.ADOPSJON, oppgittPeriode(MØDREKVOTE, omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad( + søknad( + Søknadstype.ADOPSJON, + oppgittPeriode( + MØDREKVOTE, + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - MØDREKVOTE, IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + MØDREKVOTE, + IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); } // MØDREKVOTE @@ -65,19 +77,33 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1006_adopsjon_mor_søker_mødrekvote_etter_omsorgsovertakelse_men_uten_omsorg() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett().harOmsorg(false)) - .behandling(morBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett().harOmsorg(false)) + .behandling(morBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + omsorgsovertakelseDato, + omsorgsovertakelseDato + .plusWeeks(2) + .minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), - MØDREKVOTE, IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + MØDREKVOTE, + IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); } // MØDREKVOTE @@ -85,20 +111,36 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1230_adopsjon_far_søker_overført_mødrekvote_pga_innleggelse_før_omsorgsovertakelse() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(OppgittPeriode.forOverføring(MØDREKVOTE, omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - OverføringÅrsak.INNLEGGELSE, null, null, DokumentasjonVurdering.INNLEGGELSE_ANNEN_FORELDER_GODKJENT))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + OppgittPeriode.forOverføring( + MØDREKVOTE, + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + OverføringÅrsak.INNLEGGELSE, + null, + null, + DokumentasjonVurdering + .INNLEGGELSE_ANNEN_FORELDER_GODKJENT))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - MØDREKVOTE, IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + MØDREKVOTE, + IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); } // MØDREKVOTE @@ -106,41 +148,67 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1230_adopsjon_far_søker_overført_mødrekvote_pga_sykdom_skade_før_omsorgsovertakelse() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(OppgittPeriode.forOverføring(MØDREKVOTE, omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - OverføringÅrsak.SYKDOM_ELLER_SKADE, null, null, DokumentasjonVurdering.SYKDOM_ANNEN_FORELDER_GODKJENT))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + OppgittPeriode.forOverføring( + MØDREKVOTE, + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + OverføringÅrsak.SYKDOM_ELLER_SKADE, + null, + null, + DokumentasjonVurdering + .SYKDOM_ANNEN_FORELDER_GODKJENT))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - MØDREKVOTE, IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + MØDREKVOTE, + IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); } - // FEDREKVOTE @Test void UT1231_adopsjon_far_søker_fedrekvote_før_omsorgsovertakelse() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .søknad( - søknad(Søknadstype.ADOPSJON, oppgittPeriode(FEDREKVOTE, omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .søknad( + søknad( + Søknadstype.ADOPSJON, + oppgittPeriode( + FEDREKVOTE, + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - FEDREKVOTE, IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + FEDREKVOTE, + IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); } // FEDREKVOTE @@ -148,20 +216,33 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1030_adopsjon_far_søker_fedrekvote_før_omsorgsovertakelse_men_uten_omsorg() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett().harOmsorg(false)) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode( - oppgittPeriode(Stønadskontotype.FEDREKVOTE, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett().harOmsorg(false)) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.FEDREKVOTE, + omsorgsovertakelseDato, + omsorgsovertakelseDato + .plusWeeks(2) + .minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), - FEDREKVOTE, IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + FEDREKVOTE, + IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); } // FEDREKVOTE @@ -169,20 +250,36 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1231_adopsjon_mor_søker_overført_fedrekvote_pga_innleggelse_før_omsorgsovertakelse() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(OppgittPeriode.forOverføring(FEDREKVOTE, omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - OverføringÅrsak.INNLEGGELSE, null, null, DokumentasjonVurdering.INNLEGGELSE_ANNEN_FORELDER_GODKJENT))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + OppgittPeriode.forOverføring( + FEDREKVOTE, + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + OverføringÅrsak.INNLEGGELSE, + null, + null, + DokumentasjonVurdering + .INNLEGGELSE_ANNEN_FORELDER_GODKJENT))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - FEDREKVOTE, IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + FEDREKVOTE, + IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); } // FEDREKVOTE @@ -190,41 +287,67 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1231_adopsjon_mor_søker_overført_fedrekvote_pga_sykdom_skade_før_omsorgsovertakelse() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(OppgittPeriode.forOverføring(FEDREKVOTE, omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - OverføringÅrsak.SYKDOM_ELLER_SKADE, null, null, DokumentasjonVurdering.SYKDOM_ANNEN_FORELDER_GODKJENT))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + OppgittPeriode.forOverføring( + FEDREKVOTE, + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + OverføringÅrsak.SYKDOM_ELLER_SKADE, + null, + null, + DokumentasjonVurdering + .SYKDOM_ANNEN_FORELDER_GODKJENT))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - FEDREKVOTE, IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + FEDREKVOTE, + IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); } - // FELLESPERIODE @Test void UT1235_adopsjon_mor_søker_fellesperiode_før_omsorgsovertakelse() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad(søknad(Søknadstype.ADOPSJON, - oppgittPeriode(FELLESPERIODE, omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad( + søknad( + Søknadstype.ADOPSJON, + oppgittPeriode( + FELLESPERIODE, + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - FELLESPERIODE, IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + FELLESPERIODE, + IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); } // FELLESPERIODE @@ -232,19 +355,33 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1046_adopsjon_mor_søker_fellesperiode_etter_omsorgsovertakelse_men_uten_omsorg() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett().harOmsorg(false)) - .behandling(morBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett().harOmsorg(false)) + .behandling(morBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + omsorgsovertakelseDato, + omsorgsovertakelseDato + .plusWeeks(2) + .minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), - FELLESPERIODE, IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + FELLESPERIODE, + IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); } // FELLESPERIODE @@ -252,19 +389,30 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1232_adopsjon_far_søker_fellesperiode_før_omsorgsovertakelse() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .søknad(søknad(Søknadstype.ADOPSJON, - oppgittPeriode(FELLESPERIODE, omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .søknad( + søknad( + Søknadstype.ADOPSJON, + oppgittPeriode( + FELLESPERIODE, + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - FELLESPERIODE, IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + FELLESPERIODE, + IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); } // FELLESPERIODE @@ -272,19 +420,33 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1060_adopsjon_far_søker_fellesperiode_etter_omsorgsovertakelse_men_uten_omsorg() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett().harOmsorg(false)) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett().harOmsorg(false)) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + omsorgsovertakelseDato, + omsorgsovertakelseDato + .plusWeeks(2) + .minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), - FELLESPERIODE, IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + FELLESPERIODE, + IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); } // FORELDREPENGER @@ -292,21 +454,38 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1236_adopsjon_mor_søker_foreldrepenger_før_omsorgsovertakelse() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); - var grunnlag = grunnlagAdopsjon.kontoer(kontoer) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(false).morHarRett(true).samtykke(true)) - .behandling(morBehandling()) - .søknad(søknad(Søknadstype.ADOPSJON, - oppgittPeriode(FORELDREPENGER, omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); + var grunnlag = + grunnlagAdopsjon + .kontoer(kontoer) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .farHarRett(false) + .morHarRett(true) + .samtykke(true)) + .behandling(morBehandling()) + .søknad( + søknad( + Søknadstype.ADOPSJON, + oppgittPeriode( + FORELDREPENGER, + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - FORELDREPENGER, IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + FORELDREPENGER, + IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); } // FORELDREPENGER @@ -314,21 +493,37 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1191_adopsjon_mor_søker_foreldrepenger_etter_omsorgsovertakelse_men_uten_omsorg() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); - var grunnlag = grunnlagAdopsjon.kontoer(kontoer) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett().harOmsorg(false)) - .behandling(morBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); + var grunnlag = + grunnlagAdopsjon + .kontoer(kontoer) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett().harOmsorg(false)) + .behandling(morBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + omsorgsovertakelseDato, + omsorgsovertakelseDato + .plusWeeks(2) + .minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), - FORELDREPENGER, IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + FORELDREPENGER, + IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); } // FORELDREPENGER @@ -336,21 +531,34 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1234_adopsjon_far_søker_foreldrepenger_før_omsorgsovertakelse() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); - var grunnlag = grunnlagAdopsjon.kontoer(kontoer) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(bareFarRett()) - .behandling(farBehandling()) - .søknad(søknad(Søknadstype.ADOPSJON, - oppgittPeriode(FORELDREPENGER, omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); + var grunnlag = + grunnlagAdopsjon + .kontoer(kontoer) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(bareFarRett()) + .behandling(farBehandling()) + .søknad( + søknad( + Søknadstype.ADOPSJON, + oppgittPeriode( + FORELDREPENGER, + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato.minusWeeks(1), omsorgsovertakelseDato.minusDays(1), - FORELDREPENGER, IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato.minusWeeks(1), + omsorgsovertakelseDato.minusDays(1), + FORELDREPENGER, + IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); } // FORELDREPENGER @@ -358,22 +566,40 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1199_adopsjon_far_søker_foreldrepenger_etter_omsorgsovertakelse_men_uten_omsorg() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); - var grunnlag = grunnlagAdopsjon.arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(bareFarRett().harOmsorg(false)) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); + var grunnlag = + grunnlagAdopsjon + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(bareFarRett().harOmsorg(false)) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + omsorgsovertakelseDato, + omsorgsovertakelseDato + .plusWeeks(2) + .minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), - FORELDREPENGER, IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + FORELDREPENGER, + IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); } // FORELDREPENGER @@ -381,48 +607,90 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void adopsjon_far_søker_foreldrepenger_etter_omsorgsovertakelse_men_før_uke_7_skal_innvilges() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); - var oppgittPeriode = oppgittPeriode(FORELDREPENGER, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), false, null, - DokumentasjonVurdering.MORS_AKTIVITET_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); + var oppgittPeriode = + oppgittPeriode( + FORELDREPENGER, + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + false, + null, + DokumentasjonVurdering.MORS_AKTIVITET_GODKJENT); var søknad = new Søknad.Builder().type(Søknadstype.ADOPSJON).oppgittPeriode(oppgittPeriode); - var grunnlag = grunnlagAdopsjon.arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(bareFarRett()) - .behandling(farBehandling()) - .søknad(søknad) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagAdopsjon + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(bareFarRett()) + .behandling(farBehandling()) + .søknad(søknad) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), - Perioderesultattype.INNVILGET, FORELDREPENGER); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + Perioderesultattype.INNVILGET, + FORELDREPENGER); } @Test void UT1082_adopsjon_avslag_perioder_forut_for_førsteLovligeUttaksdag() { var omsorgsovertakelseDato = LocalDate.of(2020, 1, 1); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(100)); - var testGrunnlag = grunnlagAdopsjon.arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true).samtykke(true)) - .behandling(morBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - //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))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelseDato)) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(100)); + var testGrunnlag = + grunnlagAdopsjon + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .farHarRett(true) + .morHarRett(true) + .samtykke(true)) + .behandling(morBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + // 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))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelseDato)) + .build(); var resultater = fastsettPerioder(testGrunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(1).minusDays(1), - FORELDREPENGER, IkkeOppfyltÅrsak.SØKNADSFRIST); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(1).minusDays(1), + FORELDREPENGER, + IkkeOppfyltÅrsak.SØKNADSFRIST); } // STEBARNSADOPSJON @@ -430,80 +698,141 @@ class AdopsjonOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas void UT1240_stebarnsadopsjon_far_ikke_omsorg() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett().harOmsorg(false)) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null).stebarnsadopsjon(true)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett().harOmsorg(false)) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + omsorgsovertakelseDato, + omsorgsovertakelseDato + .plusWeeks(2) + .minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null).stebarnsadopsjon(true)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), - MØDREKVOTE, IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + MØDREKVOTE, + IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); } @Test void UT1241_stebarnsadopsjon_far_omsorg_disponible_dager_og_ingen_gradering() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null).stebarnsadopsjon(true)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + omsorgsovertakelseDato, + omsorgsovertakelseDato + .plusWeeks(2) + .minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null).stebarnsadopsjon(true)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserManuellBehandlingPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), - FEDREKVOTE, null, Manuellbehandlingårsak.STEBARNSADOPSJON); + verifiserManuellBehandlingPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + FEDREKVOTE, + null, + Manuellbehandlingårsak.STEBARNSADOPSJON); } @Test void UT1242_stebarnsadopsjon_far_omsorg_disponible_dager_gradering_og_avklart_periode() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var grunnlag = grunnlagAdopsjon.datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode( - gradertoppgittPeriode(FEDREKVOTE, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), BigDecimal.TEN))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null).stebarnsadopsjon(true)) - .build(); + var grunnlag = + grunnlagAdopsjon + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + gradertoppgittPeriode( + FEDREKVOTE, + omsorgsovertakelseDato, + omsorgsovertakelseDato + .plusWeeks(2) + .minusDays(1), + BigDecimal.TEN))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null).stebarnsadopsjon(true)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserManuellBehandlingPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), - FEDREKVOTE, null, Manuellbehandlingårsak.STEBARNSADOPSJON); + verifiserManuellBehandlingPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + FEDREKVOTE, + null, + Manuellbehandlingårsak.STEBARNSADOPSJON); } @Test void UT1244_stebarnsadopsjon_far_omsorg_ikke_disponible_stønadsdager() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) - .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(0)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(1300)); - var grunnlag = grunnlagAdopsjon.kontoer(kontoer) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1)))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null).stebarnsadopsjon(true)) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(0)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(1300)); + var grunnlag = + grunnlagAdopsjon + .kontoer(kontoer) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelseDato)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + omsorgsovertakelseDato, + omsorgsovertakelseDato + .plusWeeks(2) + .minusDays(1)))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null).stebarnsadopsjon(true)) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserManuellBehandlingPeriode(resultater.get(0).uttakPeriode(), omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2).minusDays(1), - FEDREKVOTE, IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.STØNADSKONTO_TOM); + verifiserManuellBehandlingPeriode( + resultater.get(0).uttakPeriode(), + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2).minusDays(1), + FEDREKVOTE, + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.STØNADSKONTO_TOM); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ArbeidsforholdPeriodeRegelOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ArbeidsforholdPeriodeRegelOrkestreringTest.java index 8aeadd35..e24debec 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ArbeidsforholdPeriodeRegelOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ArbeidsforholdPeriodeRegelOrkestreringTest.java @@ -9,9 +9,6 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Adopsjon; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; @@ -20,8 +17,10 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UtsettelseÅrsak; +import org.junit.jupiter.api.Test; -class ArbeidsforholdPeriodeRegelOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { +class ArbeidsforholdPeriodeRegelOrkestreringTest + extends FastsettePerioderRegelOrkestreringTestBase { @Test void skal_starte_arbeidsforhold_fra_startdato() { @@ -30,25 +29,41 @@ void skal_starte_arbeidsforhold_fra_startdato() { var arbeidsforhold2 = AktivitetIdentifikator.annenAktivitet(); var arbeidsforhold3 = AktivitetIdentifikator.forFrilans(); var arbeidsforhold4 = AktivitetIdentifikator.forSelvstendigNæringsdrivende(); - var arbeid = new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(arbeidsforhold1, omsorgsovertakelse.minusYears(1))) - //Ingen startdato på arbeidsforholdet skal tolkes som at arbeidsforholdet varer hele uttaket - .arbeidsforhold(new Arbeidsforhold(arbeidsforhold2)) - .arbeidsforhold(new Arbeidsforhold(arbeidsforhold3, omsorgsovertakelse.plusWeeks(8))) - .arbeidsforhold(new Arbeidsforhold(arbeidsforhold4, omsorgsovertakelse.plusWeeks(35))); - var mødrekvote = oppgittPeriode(MØDREKVOTE, omsorgsovertakelse, omsorgsovertakelse.plusWeeks(40)); - var grunnlag = basicGrunnlag().arbeid(arbeid) - .søknad(søknad(Søknadstype.ADOPSJON, mødrekvote)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelse)) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)); + var arbeid = + new Arbeid.Builder() + .arbeidsforhold( + new Arbeidsforhold( + arbeidsforhold1, omsorgsovertakelse.minusYears(1))) + // Ingen startdato på arbeidsforholdet skal tolkes som at arbeidsforholdet + // varer hele uttaket + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold2)) + .arbeidsforhold( + new Arbeidsforhold( + arbeidsforhold3, omsorgsovertakelse.plusWeeks(8))) + .arbeidsforhold( + new Arbeidsforhold( + arbeidsforhold4, omsorgsovertakelse.plusWeeks(35))); + var mødrekvote = + oppgittPeriode(MØDREKVOTE, omsorgsovertakelse, omsorgsovertakelse.plusWeeks(40)); + var grunnlag = + basicGrunnlag() + .arbeid(arbeid) + .søknad(søknad(Søknadstype.ADOPSJON, mødrekvote)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelse)) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - assertThat(aktiviteterIPeriode(resultat.get(0).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); - assertThat(aktiviteterIPeriode(resultat.get(1).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2, arbeidsforhold3); - assertThat(aktiviteterIPeriode(resultat.get(2).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2, arbeidsforhold3); - assertThat(aktiviteterIPeriode(resultat.get(3).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2, arbeidsforhold3, - arbeidsforhold4); + assertThat(aktiviteterIPeriode(resultat.get(0).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); + assertThat(aktiviteterIPeriode(resultat.get(1).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2, arbeidsforhold3); + assertThat(aktiviteterIPeriode(resultat.get(2).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2, arbeidsforhold3); + assertThat(aktiviteterIPeriode(resultat.get(3).uttakPeriode())) + .containsExactlyInAnyOrder( + arbeidsforhold1, arbeidsforhold2, arbeidsforhold3, arbeidsforhold4); } @Test @@ -56,132 +71,258 @@ void nytt_arbeidsforhold_skal_hente_saldo_fra_eksisterende_arbeidsforhold() { var fødselsdato = LocalDate.of(2019, 11, 27); var arbeidsforhold1 = AktivitetIdentifikator.annenAktivitet(); var arbeidsforhold2 = AktivitetIdentifikator.forFrilans(); - var arbeid = new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(arbeidsforhold1)) - .arbeidsforhold(new Arbeidsforhold(arbeidsforhold2, fødselsdato.plusWeeks(8))); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)); - var mødrekvote1 = oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); - var gradertMødrekvote = gradertoppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), - BigDecimal.valueOf(50), Set.of(arbeidsforhold1)); - var mødrekvote2 = oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(11).minusDays(1)); - var grunnlag = basicGrunnlag().arbeid(arbeid) - .søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote1, gradertMødrekvote, mødrekvote2)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)); + var arbeid = + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold1)) + .arbeidsforhold( + new Arbeidsforhold(arbeidsforhold2, fødselsdato.plusWeeks(8))); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)); + var mødrekvote1 = + oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); + var gradertMødrekvote = + gradertoppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + BigDecimal.valueOf(50), + Set.of(arbeidsforhold1)); + var mødrekvote2 = + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(11).minusDays(1)); + var grunnlag = + basicGrunnlag() + .arbeid(arbeid) + .søknad( + søknad( + Søknadstype.FØDSEL, + fpff, + mødrekvote1, + gradertMødrekvote, + mødrekvote2)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - assertThat(aktiviteterIPeriode(resultat.get(0).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1); - assertThat(aktiviteterIPeriode(resultat.get(1).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1); - assertThat(aktiviteterIPeriode(resultat.get(2).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1); - assertThat(aktiviteterIPeriode(resultat.get(3).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); - assertThat(resultat.get(3).uttakPeriode().getUtbetalingsgrad(arbeidsforhold1)).isEqualTo(Utbetalingsgrad.HUNDRED); - assertThat(resultat.get(3).uttakPeriode().getUtbetalingsgrad(arbeidsforhold2)).isEqualTo(Utbetalingsgrad.HUNDRED); + assertThat(aktiviteterIPeriode(resultat.get(0).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1); + assertThat(aktiviteterIPeriode(resultat.get(1).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1); + assertThat(aktiviteterIPeriode(resultat.get(2).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1); + assertThat(aktiviteterIPeriode(resultat.get(3).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); + assertThat(resultat.get(3).uttakPeriode().getUtbetalingsgrad(arbeidsforhold1)) + .isEqualTo(Utbetalingsgrad.HUNDRED); + assertThat(resultat.get(3).uttakPeriode().getUtbetalingsgrad(arbeidsforhold2)) + .isEqualTo(Utbetalingsgrad.HUNDRED); } @Test - void nytt_arbeidsforhold_skal_hente_saldo_fra_arbeidsforholdet_som_har_høyest_saldo_på_startdato() { + void + nytt_arbeidsforhold_skal_hente_saldo_fra_arbeidsforholdet_som_har_høyest_saldo_på_startdato() { var fødselsdato = LocalDate.of(2019, 11, 27); var arbeidsforhold1 = ARBEIDSFORHOLD; var arbeidsforhold2 = AktivitetIdentifikator.annenAktivitet(); var arbeidsforhold3 = AktivitetIdentifikator.forFrilans(); - var arbeid = new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(arbeidsforhold1)) - .arbeidsforhold(new Arbeidsforhold(arbeidsforhold2)) - .arbeidsforhold(new Arbeidsforhold(arbeidsforhold3, fødselsdato.plusWeeks(10))); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)); - var mødrekvote1 = oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(8).minusDays(1)); - var gradertMødrekvote = gradertoppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(12).minusDays(1), - BigDecimal.valueOf(50), Set.of(arbeidsforhold1)); - var grunnlag = basicGrunnlag().arbeid(arbeid) - .søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote1, gradertMødrekvote)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)); + var arbeid = + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold1)) + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold2)) + .arbeidsforhold( + new Arbeidsforhold(arbeidsforhold3, fødselsdato.plusWeeks(10))); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)); + var mødrekvote1 = + oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(8).minusDays(1)); + var gradertMødrekvote = + gradertoppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(12).minusDays(1), + BigDecimal.valueOf(50), + Set.of(arbeidsforhold1)); + var grunnlag = + basicGrunnlag() + .arbeid(arbeid) + .søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote1, gradertMødrekvote)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(6); - assertThat(aktiviteterIPeriode(resultat.get(0).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); - assertThat(aktiviteterIPeriode(resultat.get(1).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); - assertThat(aktiviteterIPeriode(resultat.get(2).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); - assertThat(aktiviteterIPeriode(resultat.get(3).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); - //NYtt arbeidsforhold arver saldo fra arbeidsforhold 1 pga arbeidsforhold 1 har gradert i perioden før - assertThat(aktiviteterIPeriode(resultat.get(4).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2, arbeidsforhold3); - assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(arbeidsforhold1)).isEqualTo(new Utbetalingsgrad(50)); - assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(arbeidsforhold2)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(arbeidsforhold3)).isEqualTo(Utbetalingsgrad.HUNDRED); - - //Nytt arbeidsforhold går tomt for dager, arbeidsforhold holder 1 uke til pga gradering - assertThat(aktiviteterIPeriode(resultat.get(5).uttakPeriode())).containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2, arbeidsforhold3); - assertThat(resultat.get(5).uttakPeriode().getUtbetalingsgrad(arbeidsforhold1)).isEqualTo(new Utbetalingsgrad(50)); - assertThat(resultat.get(5).uttakPeriode().getUtbetalingsgrad(arbeidsforhold2)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(resultat.get(5).uttakPeriode().getUtbetalingsgrad(arbeidsforhold3)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(aktiviteterIPeriode(resultat.get(0).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); + assertThat(aktiviteterIPeriode(resultat.get(1).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); + assertThat(aktiviteterIPeriode(resultat.get(2).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); + assertThat(aktiviteterIPeriode(resultat.get(3).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2); + // NYtt arbeidsforhold arver saldo fra arbeidsforhold 1 pga arbeidsforhold 1 har gradert i + // perioden før + assertThat(aktiviteterIPeriode(resultat.get(4).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2, arbeidsforhold3); + assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(arbeidsforhold1)) + .isEqualTo(new Utbetalingsgrad(50)); + assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(arbeidsforhold2)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(arbeidsforhold3)) + .isEqualTo(Utbetalingsgrad.HUNDRED); + + // Nytt arbeidsforhold går tomt for dager, arbeidsforhold holder 1 uke til pga gradering + assertThat(aktiviteterIPeriode(resultat.get(5).uttakPeriode())) + .containsExactlyInAnyOrder(arbeidsforhold1, arbeidsforhold2, arbeidsforhold3); + assertThat(resultat.get(5).uttakPeriode().getUtbetalingsgrad(arbeidsforhold1)) + .isEqualTo(new Utbetalingsgrad(50)); + assertThat(resultat.get(5).uttakPeriode().getUtbetalingsgrad(arbeidsforhold2)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(5).uttakPeriode().getUtbetalingsgrad(arbeidsforhold3)) + .isEqualTo(Utbetalingsgrad.ZERO); } @Test - void nytt_arbeidsforhold_skal_hente_saldo_fra_arbeidsforholdet_som_har_høyest_saldo_på_startdato_2() { - //Testen sjekker om det nye arbeidsforholdet vinner dager på at begge eksisterende arbeidsforhold graderer to uker hver + void + nytt_arbeidsforhold_skal_hente_saldo_fra_arbeidsforholdet_som_har_høyest_saldo_på_startdato_2() { + // Testen sjekker om det nye arbeidsforholdet vinner dager på at begge eksisterende + // arbeidsforhold graderer to uker hver var fødselsdato = LocalDate.of(2019, 11, 27); var arbeidsforhold1 = ARBEIDSFORHOLD; var arbeidsforhold2 = AktivitetIdentifikator.annenAktivitet(); var arbeidsforhold3 = AktivitetIdentifikator.forFrilans(); - var arbeid = new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(arbeidsforhold1)) - .arbeidsforhold(new Arbeidsforhold(arbeidsforhold2)) - .arbeidsforhold(new Arbeidsforhold(arbeidsforhold3, fødselsdato.plusWeeks(10))); - var mødrekvote1 = oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); - var gradertMødrekvote1 = gradertoppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), - BigDecimal.valueOf(50), Set.of(arbeidsforhold1)); - var gradertMødrekvote2 = gradertoppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(10).minusDays(1), - BigDecimal.valueOf(50), Set.of(arbeidsforhold2)); - var mødrekvote2 = oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1)); - var grunnlag = basicGrunnlag().arbeid(arbeid) - .søknad(søknad(Søknadstype.FØDSEL, mødrekvote1, gradertMødrekvote1, gradertMødrekvote2, mødrekvote2)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)); + var arbeid = + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold1)) + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold2)) + .arbeidsforhold( + new Arbeidsforhold(arbeidsforhold3, fødselsdato.plusWeeks(10))); + var mødrekvote1 = + oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); + var gradertMødrekvote1 = + gradertoppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + BigDecimal.valueOf(50), + Set.of(arbeidsforhold1)); + var gradertMødrekvote2 = + gradertoppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(10).minusDays(1), + BigDecimal.valueOf(50), + Set.of(arbeidsforhold2)); + var mødrekvote2 = + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1)); + var grunnlag = + basicGrunnlag() + .arbeid(arbeid) + .søknad( + søknad( + Søknadstype.FØDSEL, + mødrekvote1, + gradertMødrekvote1, + gradertMødrekvote2, + mødrekvote2)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(5); - //Arver 45 dager, har igjen 50. Nok til en uke. Siste uken skal avslås for tom for dager - assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(arbeidsforhold3)).isEqualTo(Utbetalingsgrad.ZERO); + // Arver 45 dager, har igjen 50. Nok til en uke. Siste uken skal avslås for tom for dager + assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(arbeidsforhold3)) + .isEqualTo(Utbetalingsgrad.ZERO); } @Test void skal_ikke_ta_hensyn_til_startdato_hvis_bare_ett_arbeidsforhold() { var fødselsdato = LocalDate.of(2019, 11, 27); var arbeidsforhold = AktivitetIdentifikator.annenAktivitet(); - var arbeid = new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(arbeidsforhold, fødselsdato.plusWeeks(4))); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)); - var mødrekvote = oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1)); - var grunnlag = basicGrunnlag().arbeid(arbeid) - .søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)); + var arbeid = + new Arbeid.Builder() + .arbeidsforhold( + new Arbeidsforhold(arbeidsforhold, fødselsdato.plusWeeks(4))); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)); + var mødrekvote = + oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1)); + var grunnlag = + basicGrunnlag() + .arbeid(arbeid) + .søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); - assertThat(aktiviteterIPeriode(resultat.get(0).uttakPeriode())).containsExactly(arbeidsforhold); - assertThat(aktiviteterIPeriode(resultat.get(1).uttakPeriode())).containsExactly(arbeidsforhold); - assertThat(aktiviteterIPeriode(resultat.get(2).uttakPeriode())).containsExactly(arbeidsforhold); + assertThat(aktiviteterIPeriode(resultat.get(0).uttakPeriode())) + .containsExactly(arbeidsforhold); + assertThat(aktiviteterIPeriode(resultat.get(1).uttakPeriode())) + .containsExactly(arbeidsforhold); + assertThat(aktiviteterIPeriode(resultat.get(2).uttakPeriode())) + .containsExactly(arbeidsforhold); } @Test - void skal_kunne_lage_manglende_søkt_periode_i_periode_uten_at_søker_har_aktive_arbeidsforhold() { + void + skal_kunne_lage_manglende_søkt_periode_i_periode_uten_at_søker_har_aktive_arbeidsforhold() { var fødsel = LocalDate.of(2018, 10, 26); var tilkommetArbeidsforhold1 = AktivitetIdentifikator.forSelvstendigNæringsdrivende(); var tilkommetArbeidsforhold2 = AktivitetIdentifikator.forFrilans(); - var arbeid = new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(tilkommetArbeidsforhold1, LocalDate.of(2019, 5, 1))) - .arbeidsforhold(new Arbeidsforhold(tilkommetArbeidsforhold2, LocalDate.of(2019, 6, 10))); - var utsettelseArbeid = utsettelsePeriode(LocalDate.of(2019, 11, 4), LocalDate.of(2019, 12, 6), UtsettelseÅrsak.ARBEID, null, - MORS_AKTIVITET_GODKJENT); - var fpPeriode = oppgittPeriode(FORELDREPENGER, LocalDate.of(2019, 12, 16), LocalDate.of(2020, 1, 3), MORS_AKTIVITET_GODKJENT); + var arbeid = + new Arbeid.Builder() + .arbeidsforhold( + new Arbeidsforhold( + tilkommetArbeidsforhold1, LocalDate.of(2019, 5, 1))) + .arbeidsforhold( + new Arbeidsforhold( + tilkommetArbeidsforhold2, LocalDate.of(2019, 6, 10))); + var utsettelseArbeid = + utsettelsePeriode( + LocalDate.of(2019, 11, 4), + LocalDate.of(2019, 12, 6), + UtsettelseÅrsak.ARBEID, + null, + MORS_AKTIVITET_GODKJENT); + var fpPeriode = + oppgittPeriode( + FORELDREPENGER, + LocalDate.of(2019, 12, 16), + LocalDate.of(2020, 1, 3), + MORS_AKTIVITET_GODKJENT); var søknad = søknad(Søknadstype.FØDSEL, utsettelseArbeid, fpPeriode); - var grunnlag = basicGrunnlag().arbeid(arbeid) - .søknad(søknad) - .rettOgOmsorg(bareFarRett()) - .behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(fødsel)); + var grunnlag = + basicGrunnlag() + .arbeid(arbeid) + .søknad(søknad) + .rettOgOmsorg(bareFarRett()) + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødsel)); var resultat = fastsettPerioder(grunnlag); - //Skal legge inn aktivitet med tidligst startdato hvis alle arbeidsforhold starter etter manglende søkt - assertThat(resultat.get(0).uttakPeriode().getAktiviteter().stream().findFirst().orElseThrow().getIdentifikator()).isEqualTo( - tilkommetArbeidsforhold1); + // Skal legge inn aktivitet med tidligst startdato hvis alle arbeidsforhold starter etter + // manglende søkt + assertThat( + resultat.get(0).uttakPeriode().getAktiviteter().stream() + .findFirst() + .orElseThrow() + .getIdentifikator()) + .isEqualTo(tilkommetArbeidsforhold1); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ArbeidsforholdTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ArbeidsforholdTest.java index c853f1ea..e0c42771 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ArbeidsforholdTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ArbeidsforholdTest.java @@ -4,11 +4,9 @@ import java.math.BigDecimal; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.EndringAvStilling; +import org.junit.jupiter.api.Test; class ArbeidsforholdTest { @@ -16,16 +14,22 @@ class ArbeidsforholdTest { void skal_finne_stillingsprosent() { var arbeidBuilder = new Arbeid.Builder(); - arbeidBuilder.endringAvStilling(new EndringAvStilling(LocalDate.of(2019, 1, 1), BigDecimal.valueOf(50))); - arbeidBuilder.endringAvStilling(new EndringAvStilling(LocalDate.of(2018, 1, 1), BigDecimal.ZERO)); - arbeidBuilder.endringAvStilling(new EndringAvStilling(LocalDate.of(2020, 1, 1), BigDecimal.valueOf(100))); + arbeidBuilder.endringAvStilling( + new EndringAvStilling(LocalDate.of(2019, 1, 1), BigDecimal.valueOf(50))); + arbeidBuilder.endringAvStilling( + new EndringAvStilling(LocalDate.of(2018, 1, 1), BigDecimal.ZERO)); + arbeidBuilder.endringAvStilling( + new EndringAvStilling(LocalDate.of(2020, 1, 1), BigDecimal.valueOf(100))); var arbeid = arbeidBuilder.build(); - assertThat(arbeid.getStillingsprosent(LocalDate.of(2017, 1, 1))).isEqualTo(BigDecimal.valueOf(100)); - assertThat(arbeid.getStillingsprosent(LocalDate.of(2018, 11, 11))).isEqualTo(BigDecimal.ZERO); - assertThat(arbeid.getStillingsprosent(LocalDate.of(2019, 12, 12))).isEqualTo(BigDecimal.valueOf(50)); - assertThat(arbeid.getStillingsprosent(LocalDate.of(2020, 2, 2))).isEqualTo(BigDecimal.valueOf(100)); + assertThat(arbeid.getStillingsprosent(LocalDate.of(2017, 1, 1))) + .isEqualTo(BigDecimal.valueOf(100)); + assertThat(arbeid.getStillingsprosent(LocalDate.of(2018, 11, 11))) + .isEqualTo(BigDecimal.ZERO); + assertThat(arbeid.getStillingsprosent(LocalDate.of(2019, 12, 12))) + .isEqualTo(BigDecimal.valueOf(50)); + assertThat(arbeid.getStillingsprosent(LocalDate.of(2020, 2, 2))) + .isEqualTo(BigDecimal.valueOf(100)); } - } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/AvslagAktivitetskravOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/AvslagAktivitetskravOrkestreringTest.java index 2bdb91d0..675c8f4a 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/AvslagAktivitetskravOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/AvslagAktivitetskravOrkestreringTest.java @@ -34,12 +34,6 @@ import java.time.LocalDate; import java.util.List; import java.util.stream.Stream; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Datoer; @@ -57,64 +51,93 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; class AvslagAktivitetskravOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { - - @ParameterizedTest(name = "Ved mors aktivitet {0} og dokumentasjonvurdering er {1}, forventes resultat {2}") + @ParameterizedTest( + name = + "Ved mors aktivitet {0} og dokumentasjonvurdering er {1}, forventes resultat {2}") @MethodSource("dokumentasjonOgAvslagKombinasjoner") - void test_kombinasjoner_av_MorsAktivitet_PeriodeMedAvklartMorsAktivitetResultat_og_IkkeOppfyltÅrsak_sammenheng(MorsAktivitet morsAktivitet, - IkkeOppfyltÅrsak ikkeOppfyltÅrsak, - DokumentasjonVurdering dokumentasjonVurdering) { + void + test_kombinasjoner_av_MorsAktivitet_PeriodeMedAvklartMorsAktivitetResultat_og_IkkeOppfyltÅrsak_sammenheng( + MorsAktivitet morsAktivitet, + IkkeOppfyltÅrsak ikkeOppfyltÅrsak, + DokumentasjonVurdering dokumentasjonVurdering) { testAvslag(morsAktivitet, ikkeOppfyltÅrsak, dokumentasjonVurdering, true); } - @ParameterizedTest(name = "Ved mors aktivitet {0} og dokumentasjonvurdering er {1}, forventes resultat {2}") + @ParameterizedTest( + name = + "Ved mors aktivitet {0} og dokumentasjonvurdering er {1}, forventes resultat {2}") @MethodSource("dokumentasjonOgAvslagKombinasjoner") - void test_kombinasjoner_av_MorsAktivitet_PeriodeMedAvklartMorsAktivitetResultat_og_IkkeOppfyltÅrsak_fri(MorsAktivitet morsAktivitet, - IkkeOppfyltÅrsak ikkeOppfyltÅrsak, - DokumentasjonVurdering dokumentasjonVurdering) { + void + test_kombinasjoner_av_MorsAktivitet_PeriodeMedAvklartMorsAktivitetResultat_og_IkkeOppfyltÅrsak_fri( + MorsAktivitet morsAktivitet, + IkkeOppfyltÅrsak ikkeOppfyltÅrsak, + DokumentasjonVurdering dokumentasjonVurdering) { testAvslag(morsAktivitet, ikkeOppfyltÅrsak, dokumentasjonVurdering, false); } @Test void mor_med_bekreftet_uføretrygd_skal_avslås() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2018, 1, 1)); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(200)).minsterettDager(20); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(200)) + .minsterettDager(20); var oppgittPeriode = foreldrepenger(fødselsdato, UFØRE); var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(true)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(true)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo( - InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); - assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); + assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); } @Test void mor_med_bekreftet_ikke_uføretrygd_skal_avslås() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(200)).minsterettDager(0); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(200)) + .minsterettDager(0); var oppgittPeriode = foreldrepenger(fødselsdato, UFØRE); var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(false)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(false)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_MOR_IKKE_UFØR); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_MOR_IKKE_UFØR); + assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); } @Test @@ -124,56 +147,80 @@ class AvslagAktivitetskravOrkestreringTest extends FastsettePerioderRegelOrkestr var oppgittPeriode = fellesperiode(fødselsdato, UFØRE, null); var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett().morUføretrygd(false)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(beggeRett().morUføretrygd(false)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.get(0).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.MOR_UFØR); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isFalse(); + assertThat(fastsattePerioder.get(0).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.MOR_UFØR); + assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isFalse(); } @Test void mor_med_bekreftet_uføretrygd_skal_gå_til_avslås_mangler_dager_uten_aktivitetskrav() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2018, 1, 1)); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(200)).utenAktivitetskravDager(20); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(200)) + .utenAktivitetskravDager(20); var oppgittPeriode = foreldrepenger(fødselsdato, UFØRE); var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(true)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(true)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo( - InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); - assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); + assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); } @Test void mor_med_bekreftet_ikke_uføretrygd_skal_avslås_dager_uten_aktivitetskrav() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(200)).utenAktivitetskravDager(0); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(200)) + .utenAktivitetskravDager(0); var oppgittPeriode = foreldrepenger(fødselsdato, UFØRE); var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(false)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(false)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_MOR_IKKE_UFØR); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_MOR_IKKE_UFØR); + assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); } @Test @@ -183,17 +230,22 @@ class AvslagAktivitetskravOrkestreringTest extends FastsettePerioderRegelOrkestr var oppgittPeriode = fellesperiode(fødselsdato, null, MORS_AKTIVITET_IKKE_GODKJENT); var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(beggeRett()) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.get(0).uttakPeriode().getManuellbehandlingårsak()).isEqualTo( - Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); + assertThat(fastsattePerioder.get(0).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); + assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); } @Test @@ -203,17 +255,22 @@ void ukjent_mors_aktivitet_fellesperiode_manuell_ikke_dokumentert() { var oppgittPeriode = fellesperiode(fødselsdato, null, null); var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(beggeRett()) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.get(0).uttakPeriode().getManuellbehandlingårsak()).isEqualTo( - Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); + assertThat(fastsattePerioder.get(0).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); + assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); } @Test @@ -223,114 +280,191 @@ void ukjent_mors_aktivitet_fellesperiode_manuell_ikke_dokumentert() { var oppgittPeriode = foreldrepenger(fødselsdato, null); var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett()) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); - assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); + assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); } @Test - void ukjent_mors_aktivitet_fri_utsettelse_foreldrepenger_skal_avslås_hvis_minsterett_ikke_dokumentert() { + void + ukjent_mors_aktivitet_fri_utsettelse_foreldrepenger_skal_avslås_hvis_minsterett_ikke_dokumentert() { var fødselsdato = LocalDate.of(2022, 9, 1); var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 75)).minsterettDager(1); var oppgittPeriode = foreldrepenger(fødselsdato, null); - var utsettelse1 = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(16).minusDays(1), UtsettelseÅrsak.ARBEID, - fødselsdato, fødselsdato, null, null); - var utsettelse2 = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(16), fødselsdato.plusWeeks(17).minusDays(1), UtsettelseÅrsak.FRI, - fødselsdato, fødselsdato, null, null); - - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode, utsettelse1, utsettelse2)); - - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett()) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var utsettelse1 = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(16).minusDays(1), + UtsettelseÅrsak.ARBEID, + fødselsdato, + fødselsdato, + null, + null); + var utsettelse2 = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(16), + fødselsdato.plusWeeks(17).minusDays(1), + UtsettelseÅrsak.FRI, + fødselsdato, + fødselsdato, + null, + null); + + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(oppgittPeriode, utsettelse1, utsettelse2)); + + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); - assertThat(fastsattePerioder.get(2).uttakPeriode().getManuellbehandlingårsak()).isEqualTo( - Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); - assertThat(fastsattePerioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(BARE_FAR_RETT_IKKE_SØKT); - assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); - assertThat(fastsattePerioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); - assertThat(fastsattePerioder.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); + assertThat(fastsattePerioder.get(2).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); + assertThat(fastsattePerioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(BARE_FAR_RETT_IKKE_SØKT); + assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); + assertThat(fastsattePerioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); + assertThat(fastsattePerioder.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); } @Test 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); + var oppgittPeriode = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10), + null, + false, + fødselsdato, + fødselsdato, + UTDANNING, + 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()) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett()) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling()) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); assertThat(fastsattePerioder).hasSize(1); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(AKTIVITETSKRAVET_UTDANNING_IKKE_DOKUMENTERT); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(AKTIVITETSKRAVET_UTDANNING_IKKE_DOKUMENTERT); + assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); } @Test void far_søker_utsettelse_sammenhengende_uttak() { var fødselsdato = LocalDate.of(2018, 1, 1); var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 100)); - var oppgittPeriode = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10), UtsettelseÅrsak.ARBEID, fødselsdato, - fødselsdato, ARBEID, MORS_AKTIVITET_IKKE_GODKJENT); + var oppgittPeriode = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10), + UtsettelseÅrsak.ARBEID, + fødselsdato, + fødselsdato, + ARBEID, + MORS_AKTIVITET_IKKE_GODKJENT); var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling().kreverSammenhengendeUttak(true)) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett()) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling().kreverSammenhengendeUttak(true)) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); assertThat(fastsattePerioder).hasSize(1); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(AKTIVITETSKRAVET_ARBEID_IKKE_OPPFYLT); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(AKTIVITETSKRAVET_ARBEID_IKKE_OPPFYLT); + assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); } @Test void far_søker_utsettelse() { var fødselsdato = LocalDate.of(2018, 1, 1); var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 100)); - var oppgittPeriode = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10), UtsettelseÅrsak.ARBEID, fødselsdato, - fødselsdato, ARBEID, MORS_AKTIVITET_IKKE_GODKJENT); + var oppgittPeriode = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10), + UtsettelseÅrsak.ARBEID, + fødselsdato, + fødselsdato, + ARBEID, + MORS_AKTIVITET_IKKE_GODKJENT); var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling()) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett()) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling()) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); assertThat(fastsattePerioder).hasSize(1); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(AKTIVITETSKRAVET_ARBEID_IKKE_OPPFYLT); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(AKTIVITETSKRAVET_ARBEID_IKKE_OPPFYLT); + assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isTrue(); } private Kontoer.Builder kontoerMedFellesperiode() { @@ -338,60 +472,121 @@ 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); + return OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(15).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + morsAktivitet, + 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); + 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); } private static Stream dokumentasjonOgAvslagKombinasjoner() { - return Stream.of(Arguments.of(ARBEID, AKTIVITETSKRAVET_ARBEID_IKKE_OPPFYLT, MORS_AKTIVITET_IKKE_GODKJENT), - Arguments.of(ARBEID, AKTIVITETSKRAVET_ARBEID_IKKE_DOKUMENTERT, MORS_AKTIVITET_IKKE_DOKUMENTERT), - - Arguments.of(SYK, AKTIVITETSKRAVET_SYKDOM_IKKE_OPPFYLT, MORS_AKTIVITET_IKKE_GODKJENT), - Arguments.of(SYK, AKTIVITETSKRAVET_SYKDOM_IKKE_DOKUMENTERT, MORS_AKTIVITET_IKKE_DOKUMENTERT), - - Arguments.of(INNLAGT, AKTIVITETSKRAVET_INNLEGGELSE_IKKE_OPPFYLT, MORS_AKTIVITET_IKKE_GODKJENT), - Arguments.of(INNLAGT, AKTIVITETSKRAVET_INNLEGGELSE_IKKE_DOKUMENTERT, MORS_AKTIVITET_IKKE_DOKUMENTERT), - - Arguments.of(UTDANNING, AKTIVITETSKRAVET_UTDANNING_IKKE_OPPFYLT, MORS_AKTIVITET_IKKE_GODKJENT), - Arguments.of(UTDANNING, AKTIVITETSKRAVET_UTDANNING_IKKE_DOKUMENTERT, MORS_AKTIVITET_IKKE_DOKUMENTERT), - - Arguments.of(KVALPROG, AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_OPPFYLT, MORS_AKTIVITET_IKKE_GODKJENT), - Arguments.of(KVALPROG, AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_DOKUMENTERT, MORS_AKTIVITET_IKKE_DOKUMENTERT), - - Arguments.of(INTROPROG, AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_OPPFYLT, MORS_AKTIVITET_IKKE_GODKJENT), - Arguments.of(INTROPROG, AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_DOKUMENTERT, MORS_AKTIVITET_IKKE_DOKUMENTERT), - - Arguments.of(ARBEID_OG_UTDANNING, AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_OPPFYLT, MORS_AKTIVITET_IKKE_GODKJENT), - Arguments.of(ARBEID_OG_UTDANNING, AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_DOKUMENTERT, MORS_AKTIVITET_IKKE_DOKUMENTERT)); + return Stream.of( + Arguments.of( + ARBEID, AKTIVITETSKRAVET_ARBEID_IKKE_OPPFYLT, MORS_AKTIVITET_IKKE_GODKJENT), + Arguments.of( + ARBEID, + AKTIVITETSKRAVET_ARBEID_IKKE_DOKUMENTERT, + MORS_AKTIVITET_IKKE_DOKUMENTERT), + Arguments.of( + SYK, AKTIVITETSKRAVET_SYKDOM_IKKE_OPPFYLT, MORS_AKTIVITET_IKKE_GODKJENT), + Arguments.of( + SYK, + AKTIVITETSKRAVET_SYKDOM_IKKE_DOKUMENTERT, + MORS_AKTIVITET_IKKE_DOKUMENTERT), + Arguments.of( + INNLAGT, + AKTIVITETSKRAVET_INNLEGGELSE_IKKE_OPPFYLT, + MORS_AKTIVITET_IKKE_GODKJENT), + Arguments.of( + INNLAGT, + AKTIVITETSKRAVET_INNLEGGELSE_IKKE_DOKUMENTERT, + MORS_AKTIVITET_IKKE_DOKUMENTERT), + Arguments.of( + UTDANNING, + AKTIVITETSKRAVET_UTDANNING_IKKE_OPPFYLT, + MORS_AKTIVITET_IKKE_GODKJENT), + Arguments.of( + UTDANNING, + AKTIVITETSKRAVET_UTDANNING_IKKE_DOKUMENTERT, + MORS_AKTIVITET_IKKE_DOKUMENTERT), + Arguments.of( + KVALPROG, + AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_OPPFYLT, + MORS_AKTIVITET_IKKE_GODKJENT), + Arguments.of( + KVALPROG, + AKTIVITETSKRAVET_DELTAKELSE_KVALIFISERINGSPROGRAM_IKKE_DOKUMENTERT, + MORS_AKTIVITET_IKKE_DOKUMENTERT), + Arguments.of( + INTROPROG, + AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_OPPFYLT, + MORS_AKTIVITET_IKKE_GODKJENT), + Arguments.of( + INTROPROG, + AKTIVITETSKRAVET_DELTAKELSE_INTRODUKSJONSPROGRAM_IKKE_DOKUMENTERT, + MORS_AKTIVITET_IKKE_DOKUMENTERT), + Arguments.of( + ARBEID_OG_UTDANNING, + AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_OPPFYLT, + MORS_AKTIVITET_IKKE_GODKJENT), + Arguments.of( + ARBEID_OG_UTDANNING, + AKTIVITETSKRAVET_KOMBINASJON_ARBEID_UTDANNING_IKKE_DOKUMENTERT, + MORS_AKTIVITET_IKKE_DOKUMENTERT)); } - private void testAvslag(MorsAktivitet morsAktivitet, - IkkeOppfyltÅrsak ikkeOppfyltÅrsak, - DokumentasjonVurdering dokumentasjonVurdering, - boolean sammenhengendeUttak) { + private void testAvslag( + MorsAktivitet morsAktivitet, + IkkeOppfyltÅrsak ikkeOppfyltÅrsak, + DokumentasjonVurdering dokumentasjonVurdering, + boolean sammenhengendeUttak) { var fødselsdato = LocalDate.of(2018, 1, 1); var kontoer = kontoerMedFellesperiode(); var oppgittPeriode = fellesperiode(fødselsdato, morsAktivitet, dokumentasjonVurdering); var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode); - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling().kreverSammenhengendeUttak(sammenhengendeUttak)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling().kreverSammenhengendeUttak(sammenhengendeUttak)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(beggeRett()) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); assertThat(fastsattePerioder).hasSize(1); - verifiserAvslåttPeriode(fastsattePerioder.get(0).uttakPeriode(), fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(15).minusDays(1), - FELLESPERIODE, ikkeOppfyltÅrsak); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isEqualTo(sammenhengendeUttak); + verifiserAvslåttPeriode( + fastsattePerioder.get(0).uttakPeriode(), + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(15).minusDays(1), + FELLESPERIODE, + ikkeOppfyltÅrsak); + assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isEqualTo(sammenhengendeUttak); } - } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/DelRegelTestUtil.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/DelRegelTestUtil.java index d1b284bb..771e0f1f 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/DelRegelTestUtil.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/DelRegelTestUtil.java @@ -4,7 +4,6 @@ import java.time.LocalDate; import java.util.List; import java.util.Set; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.DokumentasjonVurdering; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.FastsattUttakPeriode; @@ -23,72 +22,100 @@ final class DelRegelTestUtil { private static final FastsettePeriodeRegel REGEL = new FastsettePeriodeRegel(); - private DelRegelTestUtil() { - } + private DelRegelTestUtil() {} - static FastsettePerioderRegelresultat kjørRegel(OppgittPeriode oppgittPeriode, RegelGrunnlag grunnlag) { + static FastsettePerioderRegelresultat kjørRegel( + OppgittPeriode oppgittPeriode, RegelGrunnlag grunnlag) { return kjørRegel(oppgittPeriode, grunnlag, List.of()); } - static FastsettePerioderRegelresultat kjørRegel(OppgittPeriode oppgittPeriode, - RegelGrunnlag grunnlag, - List søkersFastsattePerioder) { - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(søkersFastsattePerioder, List.of(), grunnlag, - oppgittPeriode.getFom()); + static FastsettePerioderRegelresultat kjørRegel( + OppgittPeriode oppgittPeriode, + RegelGrunnlag grunnlag, + List søkersFastsattePerioder) { + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + søkersFastsattePerioder, List.of(), grunnlag, oppgittPeriode.getFom()); oppgittPeriode.setAktiviteter(grunnlag.getArbeid().getAktiviteter()); - var farRundtFødselIntervall = FarUttakRundtFødsel.utledFarsPeriodeRundtFødsel(grunnlag).orElse(null); - return new FastsettePerioderRegelresultat(REGEL.evaluer( - new FastsettePeriodeGrunnlagImpl(grunnlag, farRundtFødselIntervall, SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag), - oppgittPeriode))); + var farRundtFødselIntervall = + FarUttakRundtFødsel.utledFarsPeriodeRundtFødsel(grunnlag).orElse(null); + return new FastsettePerioderRegelresultat( + REGEL.evaluer( + new FastsettePeriodeGrunnlagImpl( + grunnlag, + farRundtFødselIntervall, + SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag), + oppgittPeriode))); } - static OppgittPeriode overføringsperiode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - OverføringÅrsak årsak, - DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forOverføring(stønadskontotype, fom, tom, årsak, null, null, dokumentasjonVurdering); + static OppgittPeriode overføringsperiode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + OverføringÅrsak årsak, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forOverføring( + stønadskontotype, fom, tom, årsak, null, null, dokumentasjonVurdering); } - static OppgittPeriode gradertPeriode(Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { - return gradertPeriode(stønadskontotype, fom, tom, Set.of(AktivitetIdentifikator.forFrilans())); + static OppgittPeriode gradertPeriode( + Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { + return gradertPeriode( + stønadskontotype, fom, tom, Set.of(AktivitetIdentifikator.forFrilans())); } - static OppgittPeriode gradertPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - Set gradertAktiviteter) { + static OppgittPeriode gradertPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + Set gradertAktiviteter) { return gradertPeriode(stønadskontotype, fom, tom, gradertAktiviteter, null); } - static OppgittPeriode gradertPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - Set gradertAktiviteter, - DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forGradering(stønadskontotype, fom, tom, BigDecimal.TEN, null, false, gradertAktiviteter, null, null, null, - dokumentasjonVurdering); + static OppgittPeriode gradertPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + Set gradertAktiviteter, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forGradering( + stønadskontotype, + fom, + tom, + BigDecimal.TEN, + null, + false, + gradertAktiviteter, + null, + null, + null, + dokumentasjonVurdering); } - static OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { + static OppgittPeriode oppgittPeriode( + Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { return oppgittPeriode(stønadskontotype, fom, tom, null); } - static OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forVanligPeriode(stønadskontotype, fom, tom, null, false, null, null, null, dokumentasjonVurdering); + static OppgittPeriode oppgittPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forVanligPeriode( + stønadskontotype, fom, tom, null, false, null, null, null, dokumentasjonVurdering); } static OppgittPeriode oppholdPeriode(LocalDate fom, LocalDate tom, OppholdÅrsak årsak) { return OppgittPeriode.forOpphold(fom, tom, årsak, null, null); } - static OppgittPeriode utsettelsePeriode(LocalDate fom, - LocalDate tom, - UtsettelseÅrsak utsettelsesÅrsak, - DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forUtsettelse(fom, tom, utsettelsesÅrsak, null, null, null, dokumentasjonVurdering); + static OppgittPeriode utsettelsePeriode( + LocalDate fom, + LocalDate tom, + UtsettelseÅrsak utsettelsesÅrsak, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forUtsettelse( + fom, tom, utsettelsesÅrsak, null, null, null, dokumentasjonVurdering); } } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Endringss\303\270knadOrkestreringTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Endringss\303\270knadOrkestreringTest.java" index 9165fd07..8c324e65 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Endringss\303\270knadOrkestreringTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Endringss\303\270knadOrkestreringTest.java" @@ -4,9 +4,6 @@ import java.time.LocalDate; import java.util.List; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -21,6 +18,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Vedtak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; +import org.junit.jupiter.api.Test; class EndringssøknadOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @@ -29,24 +27,47 @@ void skal_trekke_dager_for_perioder_i_vedtak() { var fødselsdato = LocalDate.of(2020, 1, 16); var endringsdato = fødselsdato.plusWeeks(6); var aktivitet = AktivitetIdentifikator.forFrilans(); - var vedtaksperiode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato, endringsdato.minusDays(1)) - .periodeResultatType(Perioderesultattype.INNVILGET) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(30), Stønadskontotype.MØDREKVOTE, aktivitet))); + var vedtaksperiode = + new FastsattUttakPeriode.Builder() + .tidsperiode(fødselsdato, endringsdato.minusDays(1)) + .periodeResultatType(Perioderesultattype.INNVILGET) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(30), + Stønadskontotype.MØDREKVOTE, + aktivitet))); var vedtak = new Vedtak.Builder().leggTilPeriode(vedtaksperiode); - var revurdering = new Revurdering.Builder().endringsdato(endringsdato).gjeldendeVedtak(vedtak); - var søknadOm10UkerMødrekvote = søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.MØDREKVOTE, endringsdato, endringsdato.plusWeeks(10).minusDays(1))); - var grunnlag = basicGrunnlagMor(fødselsdato).revurdering(revurdering) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.MØDREKVOTE).trekkdager(75))) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitet))) - .søknad(søknadOm10UkerMødrekvote); + var revurdering = + new Revurdering.Builder().endringsdato(endringsdato).gjeldendeVedtak(vedtak); + var søknadOm10UkerMødrekvote = + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + endringsdato, + endringsdato.plusWeeks(10).minusDays(1))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .revurdering(revurdering) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.MØDREKVOTE) + .trekkdager(75))) + .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitet))) + .søknad(søknadOm10UkerMødrekvote); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isNotEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isNotEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); } @Test @@ -55,32 +76,62 @@ void skal_trekke_dager_for_perioder_i_vedtak() { var aktivitet1 = AktivitetIdentifikator.forFrilans(); var aktivitet2 = AktivitetIdentifikator.forSelvstendigNæringsdrivende(); var tilkommetAktivitet1 = AktivitetIdentifikator.forArbeid(new Orgnummer("123"), null); - var opprinnligUttakAktivitet1 = new FastsattUttakPeriodeAktivitet(new Trekkdager(30), Stønadskontotype.MØDREKVOTE, aktivitet1); - var opprinnligUttakAktivitet2 = new FastsattUttakPeriodeAktivitet(new Trekkdager(20), Stønadskontotype.MØDREKVOTE, aktivitet2); - var vedtaksperiode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)) - .periodeResultatType(Perioderesultattype.INNVILGET) - .aktiviteter(List.of(opprinnligUttakAktivitet1, opprinnligUttakAktivitet2)); + var opprinnligUttakAktivitet1 = + new FastsattUttakPeriodeAktivitet( + new Trekkdager(30), Stønadskontotype.MØDREKVOTE, aktivitet1); + var opprinnligUttakAktivitet2 = + new FastsattUttakPeriodeAktivitet( + new Trekkdager(20), Stønadskontotype.MØDREKVOTE, aktivitet2); + var vedtaksperiode = + new FastsattUttakPeriode.Builder() + .tidsperiode(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)) + .periodeResultatType(Perioderesultattype.INNVILGET) + .aktiviteter(List.of(opprinnligUttakAktivitet1, opprinnligUttakAktivitet2)); var vedtak = new Vedtak.Builder().leggTilPeriode(vedtaksperiode); - var revurdering = new Revurdering.Builder().endringsdato(fødselsdato.plusWeeks(6)).gjeldendeVedtak(vedtak); - var søknadOm12UkerMødrekvote = søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(18).minusDays(1))); - var grunnlag = basicGrunnlagMor(fødselsdato).revurdering(revurdering) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.MØDREKVOTE).trekkdager(75))) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitet1)) - .arbeidsforhold(new Arbeidsforhold(aktivitet2)) - .arbeidsforhold(new Arbeidsforhold(tilkommetAktivitet1, fødselsdato.plusWeeks(8)))) - .søknad(søknadOm12UkerMødrekvote); + var revurdering = + new Revurdering.Builder() + .endringsdato(fødselsdato.plusWeeks(6)) + .gjeldendeVedtak(vedtak); + var søknadOm12UkerMødrekvote = + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(18).minusDays(1))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .revurdering(revurdering) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.MØDREKVOTE) + .trekkdager(75))) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(aktivitet1)) + .arbeidsforhold(new Arbeidsforhold(aktivitet2)) + .arbeidsforhold( + new Arbeidsforhold( + tilkommetAktivitet1, + fødselsdato.plusWeeks(8)))) + .søknad(søknadOm12UkerMødrekvote); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - //Knekk pga nytt arbeidsforhold - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - //aktivitet1 går tom for dager - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - //aktivitet2 og tilkommet går tom for dager - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - //alle arbeidsforhold tom for dager - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + // Knekk pga nytt arbeidsforhold + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + // aktivitet1 går tom for dager + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + // aktivitet2 og tilkommet går tom for dager + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + // alle arbeidsforhold tom for dager + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeRegelTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeRegelTest.java index f4443041..d974a3f8 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeRegelTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePeriodeRegelTest.java @@ -2,9 +2,8 @@ import static org.assertj.core.api.Assertions.assertThat; -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.regelflyt.FastsettePeriodeRegel; +import org.junit.jupiter.api.Test; class FastsettePeriodeRegelTest { diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelOrkestreringTestBase.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelOrkestreringTestBase.java index 947b6208..5e890ff9 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelOrkestreringTestBase.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FastsettePerioderRegelOrkestreringTestBase.java @@ -12,7 +12,6 @@ import java.util.List; 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.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -39,24 +38,27 @@ abstract class FastsettePerioderRegelOrkestreringTestBase { static final AktivitetIdentifikator ARBEIDSFORHOLD = ARBEIDSFORHOLD_1; - private final FastsettePerioderRegelOrkestrering fastsettePerioderRegelOrkestrering = new FastsettePerioderRegelOrkestrering(); + private final FastsettePerioderRegelOrkestrering fastsettePerioderRegelOrkestrering = + new FastsettePerioderRegelOrkestrering(); - void verifiserPeriode(UttakPeriode periode, - LocalDate forventetFom, - LocalDate forventetTom, - Perioderesultattype forventetResultat, - Stønadskontotype stønadskontotype) { + void verifiserPeriode( + UttakPeriode periode, + LocalDate forventetFom, + LocalDate forventetTom, + Perioderesultattype forventetResultat, + Stønadskontotype stønadskontotype) { assertThat(periode.getFom()).isEqualTo(forventetFom); assertThat(periode.getTom()).isEqualTo(forventetTom); assertThat(periode.getPerioderesultattype()).isEqualTo(forventetResultat); assertThat(periode.getStønadskontotype()).isEqualTo(stønadskontotype); } - void verifiserAvslåttPeriode(UttakPeriode periode, - LocalDate forventetFom, - LocalDate forventetTom, - Stønadskontotype stønadskontotype, - IkkeOppfyltÅrsak ikkeOppfyltÅrsak) { + void verifiserAvslåttPeriode( + UttakPeriode periode, + LocalDate forventetFom, + LocalDate forventetTom, + Stønadskontotype stønadskontotype, + IkkeOppfyltÅrsak ikkeOppfyltÅrsak) { assertThat(periode.getFom()).isEqualTo(forventetFom); assertThat(periode.getTom()).isEqualTo(forventetTom); assertThat(periode.getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); @@ -64,32 +66,34 @@ void verifiserPeriode(UttakPeriode periode, assertThat(periode.getPeriodeResultatÅrsak()).isEqualTo(ikkeOppfyltÅrsak); } - RegelGrunnlag.Builder basicGrunnlag() { return RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .behandling(morBehandling()) - .kontoer(defaultKontoer()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .inngangsvilkår(oppfyltAlleVilkår()); + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .behandling(morBehandling()) + .kontoer(defaultKontoer()) + .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .inngangsvilkår(oppfyltAlleVilkår()); } Kontoer.Builder defaultKontoer() { - return new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER_FØR_FØDSEL).trekkdager(15)) - .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) - .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(50)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(130)); - } - - void verifiserManuellBehandlingPeriode(UttakPeriode periode, - LocalDate forventetFom, - LocalDate forventetTom, - Stønadskontotype stønadskontotype, - IkkeOppfyltÅrsak ikkeOppfyltÅrsak, - Manuellbehandlingårsak manuellbehandlingårsak) { + return new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER_FØR_FØDSEL).trekkdager(15)) + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(50)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(130)); + } + + void verifiserManuellBehandlingPeriode( + UttakPeriode periode, + LocalDate forventetFom, + LocalDate forventetTom, + Stønadskontotype stønadskontotype, + IkkeOppfyltÅrsak ikkeOppfyltÅrsak, + Manuellbehandlingårsak manuellbehandlingårsak) { assertThat(periode.getFom()).isEqualTo(forventetFom); assertThat(periode.getTom()).isEqualTo(forventetTom); - assertThat(periode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(periode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); assertThat(periode.getStønadskontotype()).isEqualTo(stønadskontotype); assertThat(periode.getManuellbehandlingårsak()).isEqualTo(manuellbehandlingårsak); assertThat(periode.getPeriodeResultatÅrsak()).isEqualTo(ikkeOppfyltÅrsak); @@ -107,38 +111,71 @@ OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, LocalDate fom return oppgittPeriode(stønadskontotype, fom, tom, false, null); } - OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - boolean flerbarnsdager, - SamtidigUttaksprosent samtidigUttaksprosent) { - return oppgittPeriode(stønadskontotype, fom, tom, flerbarnsdager, samtidigUttaksprosent, null); + OppgittPeriode oppgittPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + boolean flerbarnsdager, + SamtidigUttaksprosent samtidigUttaksprosent) { + return oppgittPeriode( + stønadskontotype, fom, tom, flerbarnsdager, samtidigUttaksprosent, null); } - OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - boolean flerbarnsdager, - SamtidigUttaksprosent samtidigUttaksprosent, - DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forVanligPeriode(stønadskontotype, fom, tom, samtidigUttaksprosent, flerbarnsdager, null, null, null, - dokumentasjonVurdering); + OppgittPeriode oppgittPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + boolean flerbarnsdager, + SamtidigUttaksprosent samtidigUttaksprosent, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forVanligPeriode( + stønadskontotype, + fom, + tom, + samtidigUttaksprosent, + flerbarnsdager, + null, + null, + null, + dokumentasjonVurdering); } - OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom, DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forVanligPeriode(stønadskontotype, fom, tom, null, false, null, null, null, dokumentasjonVurdering); + OppgittPeriode oppgittPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forVanligPeriode( + stønadskontotype, fom, tom, null, false, null, null, null, dokumentasjonVurdering); } - OppgittPeriode gradertoppgittPeriode(Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom, BigDecimal arbeidsprosent) { - return gradertoppgittPeriode(stønadskontotype, fom, tom, arbeidsprosent, Set.of(ARBEIDSFORHOLD_1)); + OppgittPeriode gradertoppgittPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + BigDecimal arbeidsprosent) { + return gradertoppgittPeriode( + stønadskontotype, fom, tom, arbeidsprosent, Set.of(ARBEIDSFORHOLD_1)); } - OppgittPeriode gradertoppgittPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - BigDecimal arbeidsprosent, - Set gradertAktiviteter) { - return OppgittPeriode.forGradering(stønadskontotype, fom, tom, arbeidsprosent, null, false, gradertAktiviteter, null, null, null, null); + OppgittPeriode gradertoppgittPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + BigDecimal arbeidsprosent, + Set gradertAktiviteter) { + return OppgittPeriode.forGradering( + stønadskontotype, + fom, + tom, + arbeidsprosent, + null, + false, + gradertAktiviteter, + null, + null, + null, + null); } RegelGrunnlag.Builder basicGrunnlagMor(LocalDate fødselsdato) { @@ -158,7 +195,9 @@ RegelGrunnlag.Builder basicGrunnlagFar(LocalDate fødselsdato) { } RegelGrunnlag.Builder basicGrunnlag(LocalDate fødselsdato) { - return basicGrunnlag().datoer(new Datoer.Builder().fødsel(fødselsdato)).rettOgOmsorg(beggeRett()); + return basicGrunnlag() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(beggeRett()); } Konto.Builder konto(Stønadskontotype stønadskontotype, int antallDager) { @@ -173,20 +212,30 @@ RettOgOmsorg.Builder bareFarRett() { return new RettOgOmsorg.Builder().samtykke(true).morHarRett(false).farHarRett(true); } - OppgittPeriode utsettelsePeriode(LocalDate fom, LocalDate tom, UtsettelseÅrsak utsettelseÅrsak, DokumentasjonVurdering dokumentasjonVurdering) { + OppgittPeriode utsettelsePeriode( + LocalDate fom, + LocalDate tom, + UtsettelseÅrsak utsettelseÅrsak, + DokumentasjonVurdering dokumentasjonVurdering) { return utsettelsePeriode(fom, tom, utsettelseÅrsak, null, dokumentasjonVurdering); } - OppgittPeriode utsettelsePeriode(LocalDate fom, - LocalDate tom, - UtsettelseÅrsak utsettelseÅrsak, - MorsAktivitet morsAktivitet, - DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forUtsettelse(fom, tom, utsettelseÅrsak, null, null, morsAktivitet, dokumentasjonVurdering); + OppgittPeriode utsettelsePeriode( + LocalDate fom, + LocalDate tom, + UtsettelseÅrsak utsettelseÅrsak, + MorsAktivitet morsAktivitet, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forUtsettelse( + fom, tom, utsettelseÅrsak, null, null, morsAktivitet, dokumentasjonVurdering); } Inngangsvilkår.Builder oppfyltAlleVilkår() { - return new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true); + return new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true); } RettOgOmsorg.Builder aleneomsorg() { @@ -202,6 +251,8 @@ List fastsettPerioder(RegelGrunnlag.Builder grunnlag) } Set aktiviteterIPeriode(UttakPeriode uttakPeriode) { - return uttakPeriode.getAktiviteter().stream().map(a -> a.getIdentifikator()).collect(Collectors.toSet()); + return uttakPeriode.getAktiviteter().stream() + .map(a -> a.getIdentifikator()) + .collect(Collectors.toSet()); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FedrekvoteDelregelTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FedrekvoteDelregelTest.java index 29afb216..bbe7a6b4 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FedrekvoteDelregelTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FedrekvoteDelregelTest.java @@ -10,9 +10,6 @@ import java.time.LocalDate; import java.util.List; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -34,6 +31,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.UtfallType; +import org.junit.jupiter.api.Test; class FedrekvoteDelregelTest { @@ -41,8 +39,13 @@ class FedrekvoteDelregelTest { void fedrekvote_etter_6_uker_blir_innvilget() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittPeriode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1)); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(fedrekvoteKonto(10 * 5)).build(); + var oppgittPeriode = + oppgittPeriode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(fedrekvoteKonto(10 * 5)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -59,26 +62,38 @@ private OppgittPeriode oppgittPeriode(LocalDate fom, LocalDate tom) { var oppgittPeriode = oppgittPeriode(fødselsdato.minusWeeks(5), fødselsdato.minusWeeks(1)); var kontoer = fedrekvoteKonto(10 * 5); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(kontoer).build(); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL); } @Test void UT1292_fedrekvote_uten_at_mor_har_rett_blir_avslått() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittPeriode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(9).minusDays(1)); + var oppgittPeriode = + oppgittPeriode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(9).minusDays(1)); var kontoer = new Kontoer.Builder().konto(konto(FEDREKVOTE, 10 * 5)); var arbeidsforhold = new Arbeidsforhold(ARBEIDSFORHOLD_1); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(false).farHarRett(true).samtykke(true)) - .søknad(søknad(oppgittPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) - .build(); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(kontoer) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .morHarRett(false) + .farHarRett(true) + .samtykke(true)) + .søknad(søknad(oppgittPeriode)) + .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -94,13 +109,20 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) void fedrekvote_bli_avslått_når_søker_ikke_har_omsorg() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittPeriode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1)); + var oppgittPeriode = + oppgittPeriode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1)); var kontoer = fedrekvoteKonto(10 * 5); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg( - new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(fødselssøknadMedEnPeriode(oppgittPeriode)) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad(fødselssøknadMedEnPeriode(oppgittPeriode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -111,15 +133,30 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) void UT1025_far_førUke7_etterTermin_utenGyldigGrunn_ikkeOmsorg_flerbarnsdager() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = OppgittPeriode.forVanligPeriode(FEDREKVOTE, fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(4), null, true, null, null, - null, null); + var oppgittPeriode = + OppgittPeriode.forVanligPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(4), + null, + true, + null, + null, + null, + null); var arbeidsforhold = new Arbeidsforhold(ARBEIDSFORHOLD_1); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg( - new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(fødselssøknadMedEnPeriode(oppgittPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) - .kontoer(fedrekvoteOgFlerbarnsdagerKonto(1000, 85)) - .build(); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad(fødselssøknadMedEnPeriode(oppgittPeriode)) + .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) + .kontoer(fedrekvoteOgFlerbarnsdagerKonto(1000, 85)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -127,7 +164,8 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); assertThat(regelresultat.getManuellbehandlingårsak()).isNull(); } @@ -138,9 +176,21 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); var oppgittPeriode = oppgittPeriode(fom, tom); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(kontoer).build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -148,8 +198,10 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.MANUELL_BEHANDLING); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); } @Test @@ -158,10 +210,23 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var oppgittPeriode = overføringsperiode(FEDREKVOTE, fom, tom, OverføringÅrsak.INNLEGGELSE, null); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(kontoer).build(); + var oppgittPeriode = + overføringsperiode(FEDREKVOTE, fom, tom, OverføringÅrsak.INNLEGGELSE, null); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -169,7 +234,8 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_INNLEGGELSE_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_INNLEGGELSE_IKKE_OPPFYLT); } @Test @@ -178,10 +244,23 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var oppgittPeriode = overføringsperiode(FEDREKVOTE, fom, tom, OverføringÅrsak.SYKDOM_ELLER_SKADE, null); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(kontoer).build(); + var oppgittPeriode = + overføringsperiode(FEDREKVOTE, fom, tom, OverføringÅrsak.SYKDOM_ELLER_SKADE, null); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -189,7 +268,8 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT); } @Test @@ -198,10 +278,23 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var oppgittPeriode = overføringsperiode(FEDREKVOTE, fom, tom, OverføringÅrsak.ALENEOMSORG, null); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(kontoer).build(); + var oppgittPeriode = + overføringsperiode(FEDREKVOTE, fom, tom, OverføringÅrsak.ALENEOMSORG, null); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -209,7 +302,8 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.ALENEOMSORG_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.ALENEOMSORG_IKKE_OPPFYLT); } @Test @@ -218,10 +312,24 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var oppgittPeriode = overføringsperiode(FEDREKVOTE, fom, tom, OverføringÅrsak.ANNEN_FORELDER_IKKE_RETT, null); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(kontoer).build(); + var oppgittPeriode = + overføringsperiode( + FEDREKVOTE, fom, tom, OverføringÅrsak.ANNEN_FORELDER_IKKE_RETT, null); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -229,16 +337,25 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_IKKE_RETT_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_IKKE_RETT_IKKE_OPPFYLT); } @Test void UT1026_far_førUke7_etterTermin_gyldigGrunn_omsorg_disponibleDager_ikkeGradert() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = DelRegelTestUtil.oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(4), - SYKDOM_ANNEN_FORELDER_GODKJENT); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(fedrekvoteKonto(1000)).build(); + var oppgittPeriode = + DelRegelTestUtil.oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(4), + SYKDOM_ANNEN_FORELDER_GODKJENT); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(fedrekvoteKonto(1000)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -249,16 +366,30 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) void UT1217_far_førUke7_etterTermin_gyldigGrunn_omsorg_disponibleDager_gradert_avklart() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = gradertPeriode(fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(4), SYKDOM_ANNEN_FORELDER_GODKJENT); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(fedrekvoteKonto(1000)).build(); + var oppgittPeriode = + gradertPeriode( + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(4), + SYKDOM_ANNEN_FORELDER_GODKJENT); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(fedrekvoteKonto(1000)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertInnvilget(regelresultat, InnvilgetÅrsak.GRADERING_KVOTE_ELLER_OVERFØRT_KVOTE); } - private OppgittPeriode gradertPeriode(LocalDate fom, LocalDate tom, DokumentasjonVurdering dokumentasjonVurdering) { - return DelRegelTestUtil.gradertPeriode(FEDREKVOTE, fom, tom, Set.of(AktivitetIdentifikator.forFrilans()), dokumentasjonVurdering); + private OppgittPeriode gradertPeriode( + LocalDate fom, LocalDate tom, DokumentasjonVurdering dokumentasjonVurdering) { + return DelRegelTestUtil.gradertPeriode( + FEDREKVOTE, + fom, + tom, + Set.of(AktivitetIdentifikator.forFrilans()), + dokumentasjonVurdering); } @Test @@ -266,7 +397,11 @@ void UT1031_far_etterUke7_gyldigGrunn_omsorg_disponibleDager_ikkeGradert() { var fødselsdato = LocalDate.of(2018, 1, 1); var oppgittPeriode = oppgittPeriode(fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(9)); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(fedrekvoteKonto(1000)).build(); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(fedrekvoteKonto(1000)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -277,8 +412,13 @@ void UT1031_far_etterUke7_gyldigGrunn_omsorg_disponibleDager_ikkeGradert() { void fom_akkurat_6_uker_etter_fødsel() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittPeriode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(6).plusDays(1)); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(fedrekvoteKonto(1000)).build(); + var oppgittPeriode = + oppgittPeriode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(6).plusDays(1)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(fedrekvoteKonto(1000)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -289,8 +429,13 @@ void UT1031_far_etterUke7_gyldigGrunn_omsorg_disponibleDager_ikkeGradert() { void UT1218_far_etterUke7_gyldigGrunn_omsorg_disponibleDager_gradert_avklart() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = gradertPeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(15), null); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(oppgittPeriode)).kontoer(fedrekvoteKonto(1000)).build(); + var oppgittPeriode = + gradertPeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(15), null); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad(oppgittPeriode)) + .kontoer(fedrekvoteKonto(1000)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -301,13 +446,31 @@ void UT1218_far_etterUke7_gyldigGrunn_omsorg_disponibleDager_gradert_avklart() { void opphold_fedrekvote_annenforelder() { var fødselsdato = LocalDate.of(2018, 1, 1); - var periode = OppgittPeriode.forOpphold(fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(15).plusWeeks(15), - OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER, null, null); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(periode))) - .kontoer(kontoer) - .build(); + var periode = + OppgittPeriode.forOpphold( + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(15).plusWeeks(15), + OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER, + null, + null); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(periode))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(periode, grunnlag); @@ -318,20 +481,36 @@ void opphold_fedrekvote_annenforelder() { void opphold_fedrekvote_annenforelder_tom_for_konto() { var fødselsdato = LocalDate.of(2018, 1, 1); - var periode = OppgittPeriode.forOpphold(fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(15).plusWeeks(15), - OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER, null, null); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(0).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(periode))) - .kontoer(kontoer) - .build(); + var periode = + OppgittPeriode.forOpphold( + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(15).plusWeeks(15), + OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER, + null, + null); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto(new Konto.Builder().trekkdager(0).type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(periode))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(periode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER); } @Test @@ -339,10 +518,12 @@ void opphold_fedrekvote_annenforelder_tom_for_konto() { var fødselsdato = LocalDate.of(2022, 10, 1); var oppgittPeriode = oppgittPeriode(fødselsdato, fødselsdato.plusWeeks(1).plusDays(1)); - var grunnlag = basicGrunnlag(fødselsdato).behandling(new Behandling.Builder().søkerErMor(false)) - .søknad(søknad(oppgittPeriode)) - .kontoer(fedrekvoteKonto(10 * 5).farUttakRundtFødselDager(10)) - .build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .behandling(new Behandling.Builder().søkerErMor(false)) + .søknad(søknad(oppgittPeriode)) + .kontoer(fedrekvoteKonto(10 * 5).farUttakRundtFødselDager(10)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag, List.of()); @@ -355,11 +536,13 @@ void opphold_fedrekvote_annenforelder_tom_for_konto() { var termindato = LocalDate.of(2022, 10, 5); var oppgittPeriode = oppgittPeriode(termindato.minusWeeks(3), fødselsdato.plusDays(1)); - var grunnlag = basicGrunnlag(fødselsdato).datoer(new Datoer.Builder().termin(termindato).fødsel(fødselsdato)) - .behandling(new Behandling.Builder().søkerErMor(false)) - .søknad(søknad(oppgittPeriode)) - .kontoer(fedrekvoteKonto(10 * 5).farUttakRundtFødselDager(10)) - .build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .datoer(new Datoer.Builder().termin(termindato).fødsel(fødselsdato)) + .behandling(new Behandling.Builder().søkerErMor(false)) + .søknad(søknad(oppgittPeriode)) + .kontoer(fedrekvoteKonto(10 * 5).farUttakRundtFødselDager(10)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -371,10 +554,12 @@ void opphold_fedrekvote_annenforelder_tom_for_konto() { var fødselsdato = LocalDate.of(2022, 10, 1); var oppgittPeriode = oppgittPeriode(fødselsdato.minusDays(2), fødselsdato.minusDays(1)); - var grunnlag = basicGrunnlag(fødselsdato).behandling(new Behandling.Builder().søkerErMor(false)) - .søknad(søknad(oppgittPeriode)) - .kontoer(fedrekvoteKonto(10 * 5).farUttakRundtFødselDager(10)) - .build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .behandling(new Behandling.Builder().søkerErMor(false)) + .søknad(søknad(oppgittPeriode)) + .kontoer(fedrekvoteKonto(10 * 5).farUttakRundtFødselDager(10)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -386,19 +571,19 @@ void fedrekvote_rundt_termin_blir_innvilget() { var termindato = LocalDate.of(2022, 10, 1); var oppgittPeriode = oppgittPeriode(termindato.minusDays(3), termindato.minusDays(1)); - var grunnlag = basicGrunnlag(termindato).behandling(new Behandling.Builder().søkerErMor(false)) - .søknad(søknad(oppgittPeriode)) - .datoer(new Datoer.Builder().termin(termindato)) - .kontoer(fedrekvoteKonto(10 * 5).farUttakRundtFødselDager(10)) - .build(); + var grunnlag = + basicGrunnlag(termindato) + .behandling(new Behandling.Builder().søkerErMor(false)) + .søknad(søknad(oppgittPeriode)) + .datoer(new Datoer.Builder().termin(termindato)) + .kontoer(fedrekvoteKonto(10 * 5).farUttakRundtFødselDager(10)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag, List.of()); - assertThat(regelresultat.oppfylt()).isTrue(); } - private void assertInnvilgetOpphold(FastsettePerioderRegelresultat regelresultat) { assertThat(regelresultat.oppfylt()).isTrue(); assertThat(regelresultat.skalUtbetale()).isFalse(); @@ -415,15 +600,25 @@ private void assertInnvilgetOpphold(FastsettePerioderRegelresultat regelresultat } private Kontoer.Builder fedrekvoteKonto(int trekkdager) { - return new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FEDREKVOTE).trekkdager(trekkdager)); + return new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FEDREKVOTE) + .trekkdager(trekkdager)); } - private Kontoer.Builder fedrekvoteOgFlerbarnsdagerKonto(int fedrekvoteTrekkdager, int flerbarnsdagerTrekkdager) { - return new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FEDREKVOTE).trekkdager(fedrekvoteTrekkdager)) - .flerbarnsdager(flerbarnsdagerTrekkdager); + private Kontoer.Builder fedrekvoteOgFlerbarnsdagerKonto( + int fedrekvoteTrekkdager, int flerbarnsdagerTrekkdager) { + return new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FEDREKVOTE) + .trekkdager(fedrekvoteTrekkdager)) + .flerbarnsdager(flerbarnsdagerTrekkdager); } - private void assertInnvilget(FastsettePerioderRegelresultat regelresultat, InnvilgetÅrsak innvilgetÅrsak) { + private void assertInnvilget( + FastsettePerioderRegelresultat regelresultat, InnvilgetÅrsak innvilgetÅrsak) { assertThat(regelresultat.oppfylt()).isTrue(); assertThat(regelresultat.skalUtbetale()).isTrue(); assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(innvilgetÅrsak); @@ -431,11 +626,16 @@ private void assertInnvilget(FastsettePerioderRegelresultat regelresultat, Innvi private RegelGrunnlag.Builder basicGrunnlag(LocalDate fødselsdato) { return RegelGrunnlagTestBuilder.create() - .inngangsvilkår(new Inngangsvilkår.Builder()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true).farHarRett(true).samtykke(true)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + .inngangsvilkår(new Inngangsvilkår.Builder()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().morHarRett(true).farHarRett(true).samtykke(true)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } private RegelGrunnlag.Builder basicGrunnlagFar(LocalDate fødselsdato) { diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FedrekvoteOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FedrekvoteOrkestreringTest.java index 2c1c8c21..f270b453 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FedrekvoteOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FedrekvoteOrkestreringTest.java @@ -10,9 +10,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Datoer; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.DokumentasjonVurdering; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Konto; @@ -26,62 +23,123 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UttakPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; +import org.junit.jupiter.api.Test; class FedrekvoteOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { - @Test - void fedrekvote_med_tidlig_oppstart_og_gyldig_grunn_fra_første_dag_til_midten_av_perioden_blir_innvilget_med_knekkpunkt() { + void + fedrekvote_med_tidlig_oppstart_og_gyldig_grunn_fra_første_dag_til_midten_av_perioden_blir_innvilget_med_knekkpunkt() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad( - søknad(Søknadstype.FØDSEL, oppgittPeriode(fødselsdato, fødselsdato.plusWeeks(1).minusDays(1), INNLEGGELSE_ANNEN_FORELDER_GODKJENT), - oppgittPeriode(fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(2), null))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + fødselsdato, + fødselsdato.plusWeeks(1).minusDays(1), + INNLEGGELSE_ANNEN_FORELDER_GODKJENT), + oppgittPeriode( + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(2), + null))); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(2); - verifiserPeriode(resultater.get(0).uttakPeriode(), fødselsdato, fødselsdato.plusWeeks(1).minusDays(1), INNVILGET, FEDREKVOTE); - verifiserPeriode(resultater.get(1).uttakPeriode(), fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(2), MANUELL_BEHANDLING, FEDREKVOTE); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato, + fødselsdato.plusWeeks(1).minusDays(1), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(2), + MANUELL_BEHANDLING, + FEDREKVOTE); } - private OppgittPeriode oppgittPeriode(LocalDate fom, LocalDate tom, DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forVanligPeriode(FEDREKVOTE, fom, tom, null, false, null, null, null, dokumentasjonVurdering); + private OppgittPeriode oppgittPeriode( + LocalDate fom, LocalDate tom, DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forVanligPeriode( + FEDREKVOTE, fom, tom, null, false, null, null, null, dokumentasjonVurdering); } @Test void skal_gi_ikke_innvilget_når_far_har_gyldig_grunn_til_tidlig_oppstart_men_ikke_omsorg() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(100)); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg( - new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), SYKDOM_ANNEN_FORELDER_GODKJENT))) - .kontoer(kontoer); + var kontoer = + new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(100)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + SYKDOM_ANNEN_FORELDER_GODKJENT))) + .kontoer(kontoer); var periodeResultater = fastsettPerioder(grunnlag); assertThat(periodeResultater).hasSize(1); - var perioder = periodeResultater.stream().map(FastsettePeriodeResultat::uttakPeriode).sorted(comparing(UttakPeriode::getFom)).toList(); - - verifiserAvslåttPeriode(perioder.get(0), fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), FEDREKVOTE, - IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); + var perioder = + periodeResultater.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .sorted(comparing(UttakPeriode::getFom)) + .toList(); + + verifiserAvslåttPeriode( + perioder.get(0), + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + FEDREKVOTE, + IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); } @Test void fedrekvote_fra_1_dag_før_6_uker_skal_behandles_manuelt() { var fødselsdato = LocalDate.of(2018, 1, 3); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad( - søknad(Søknadstype.FØDSEL, oppgittPeriode(fødselsdato.plusWeeks(6).minusDays(1), fødselsdato.plusWeeks(10).minusDays(1), null))).build(); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + fødselsdato.plusWeeks(6).minusDays(1), + fødselsdato.plusWeeks(10).minusDays(1), + null))) + .build(); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(2); - verifiserPeriode(resultater.get(0).uttakPeriode(), fødselsdato.plusWeeks(6).minusDays(1), fødselsdato.plusWeeks(6).minusDays(1), - MANUELL_BEHANDLING, FEDREKVOTE); - //Denne går til manuell pga uavklart periode - verifiserPeriode(resultater.get(1).uttakPeriode(), fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), INNVILGET, FEDREKVOTE); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato.plusWeeks(6).minusDays(1), + fødselsdato.plusWeeks(6).minusDays(1), + MANUELL_BEHANDLING, + FEDREKVOTE); + // Denne går til manuell pga uavklart periode + verifiserPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + INNVILGET, + FEDREKVOTE); } @Test @@ -94,222 +152,453 @@ private OppgittPeriode oppgittPeriode(LocalDate fom, LocalDate tom, Dokumentasjo var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(2); - verifiserPeriode(resultater.get(0).uttakPeriode(), fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), MANUELL_BEHANDLING, FEDREKVOTE); - verifiserPeriode(resultater.get(1).uttakPeriode(), fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), INNVILGET, FEDREKVOTE); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + MANUELL_BEHANDLING, + FEDREKVOTE); + verifiserPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + INNVILGET, + FEDREKVOTE); } @Test void fedrekvote_bli_ikke_innvilget_når_søker_ikke_har_omsorg() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(100)); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg( - new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.FEDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1)))) - .kontoer(kontoer); + var kontoer = + new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(100)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.FEDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1)))) + .kontoer(kontoer); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(1); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), FEDREKVOTE, - IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + FEDREKVOTE, + IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); } @Test void overføring_av_fedrekvote_grunnet_sykdom_skade_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode(overføringPeriode(Stønadskontotype.FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), - OverføringÅrsak.SYKDOM_ELLER_SKADE, SYKDOM_ANNEN_FORELDER_GODKJENT))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + overføringPeriode( + Stønadskontotype.FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + OverføringÅrsak.SYKDOM_ELLER_SKADE, + SYKDOM_ANNEN_FORELDER_GODKJENT))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(4); - //3 uker foreldrepenger før fødsel innvilges - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); - //assertThat(perioder.get(0).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(30); + // 3 uker foreldrepenger før fødsel innvilges + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + // assertThat(perioder.get(0).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(30); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - //6 første uker mødrekvote innvilges - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - //assertThat(perioder.get(1).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(30); + // 6 første uker mødrekvote innvilges + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + // assertThat(perioder.get(1).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(30); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - - //3 neste uker mødrekvote innvilges - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - //assertThat(perioder.get(2).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(20); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + + // 3 neste uker mødrekvote innvilges + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + // assertThat(perioder.get(2).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(20); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); - - //2 neste uker fedrekvote innvilges - assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(3).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FEDREKVOTE); - //assertThat(perioder.get(3).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(20); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); + + // 2 neste uker fedrekvote innvilges + assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(3).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FEDREKVOTE); + // assertThat(perioder.get(3).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(20); assertThat(perioder.get(3).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(10)); - assertThat(perioder.get(3).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); + assertThat(perioder.get(3).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); } @Test void overføring_av_fedrekvote_grunnet_sykdom_skade_skal_gå_til_avslag_hvis_ikke_dokumentert() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1)), - overføringPeriode(Stønadskontotype.FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), - OverføringÅrsak.SYKDOM_ELLER_SKADE, null))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1)), + overføringPeriode( + Stønadskontotype.FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + OverføringÅrsak.SYKDOM_ELLER_SKADE, + null))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(4); - //3 uker foreldrepenger før fødsel innvilges - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); - //assertThat(perioder.get(0).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(30); + // 3 uker foreldrepenger før fødsel innvilges + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + // assertThat(perioder.get(0).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(30); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - //6 første uker mødrekvote innvilges - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - //assertThat(perioder.get(1).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(30); + // 6 første uker mødrekvote innvilges + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + // assertThat(perioder.get(1).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(30); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - - //3 neste uker mødrekvote innvilges - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - //assertThat(perioder.get(2).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(20); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + + // 3 neste uker mødrekvote innvilges + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + // assertThat(perioder.get(2).uttakPeriode().trekkdager(ARBEIDSFORHOLD)).isEqualTo(20); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); - //2 neste uker fedrekvote avslås + // 2 neste uker fedrekvote avslås assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); } @Test void overføring_av_fedrekvote_ugyldig_årsak_skal_til_manuell_behandling() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1)), - overføringPeriode(Stønadskontotype.FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), null, null))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1)), + overføringPeriode( + Stønadskontotype.FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + null, + null))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(4); - //3 uker foreldrepenger før fødsel innvilges - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + // 3 uker foreldrepenger før fødsel innvilges + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - //6 første uker mødrekvote innvilges - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + // 6 første uker mødrekvote innvilges + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - - //3 neste uker mødrekvote innvilges - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + + // 3 neste uker mødrekvote innvilges + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); - - //2 neste uker fedrekvote skal til manuell behandling - assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(3).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FEDREKVOTE); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); + + // 2 neste uker fedrekvote skal til manuell behandling + assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(3).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FEDREKVOTE); assertThat(perioder.get(3).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(10)); - assertThat(perioder.get(3).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); + assertThat(perioder.get(3).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); } @Test void fedrekvote_med_enkelt_uttak_rundt_fødsel_blir_avkortet_og_innvilget_riktig() { var fødselsdato = LocalDate.of(2022, 10, 3); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer( - new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(15 * 5)).farUttakRundtFødselDager(10)) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(fødselsdato, fødselsdato.plusWeeks(1).minusDays(1), null), - oppgittPeriode(fødselsdato.plusWeeks(31), fødselsdato.plusWeeks(40).minusDays(1), null))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FEDREKVOTE) + .trekkdager(15 * 5)) + .farUttakRundtFødselDager(10)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + fødselsdato, + fødselsdato.plusWeeks(1).minusDays(1), + null), + oppgittPeriode( + fødselsdato.plusWeeks(31), + fødselsdato.plusWeeks(40).minusDays(1), + null))); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(2); - verifiserPeriode(resultater.get(0).uttakPeriode(), fødselsdato, fødselsdato.plusWeeks(1).minusDays(1), INNVILGET, FEDREKVOTE); - verifiserPeriode(resultater.get(1).uttakPeriode(), fødselsdato.plusWeeks(31), fødselsdato.plusWeeks(40).minusDays(1), INNVILGET, FEDREKVOTE); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato, + fødselsdato.plusWeeks(1).minusDays(1), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato.plusWeeks(31), + fødselsdato.plusWeeks(40).minusDays(1), + INNVILGET, + FEDREKVOTE); } @Test void fedrekvote_med_enkelt_uttak_rundt_termin_blir_avkortet_og_innvilget_riktig() { var fødselsdato = LocalDate.of(2022, 10, 4); var termindato = fødselsdato.plusDays(1); - var grunnlag = basicGrunnlagFar(fødselsdato).datoer(datoer(fødselsdato).termin(termindato)) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(15 * 5)).farUttakRundtFødselDager(10)) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(termindato.minusDays(2), termindato.plusWeeks(2).minusDays(3), null), - oppgittPeriode(fødselsdato.plusWeeks(31), fødselsdato.plusWeeks(50).minusDays(1), null))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .datoer(datoer(fødselsdato).termin(termindato)) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FEDREKVOTE) + .trekkdager(15 * 5)) + .farUttakRundtFødselDager(10)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + termindato.minusDays(2), + termindato.plusWeeks(2).minusDays(3), + null), + oppgittPeriode( + fødselsdato.plusWeeks(31), + fødselsdato.plusWeeks(50).minusDays(1), + null))); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(4); - verifiserPeriode(resultater.get(0).uttakPeriode(), termindato.minusDays(2), fødselsdato.minusDays(1), INNVILGET, FEDREKVOTE); - verifiserPeriode(resultater.get(1).uttakPeriode(), fødselsdato, termindato.plusWeeks(2).minusDays(3), INNVILGET, FEDREKVOTE); - verifiserPeriode(resultater.get(2).uttakPeriode(), fødselsdato.plusWeeks(31), fødselsdato.plusWeeks(44).minusDays(1), INNVILGET, FEDREKVOTE); - verifiserPeriode(resultater.get(3).uttakPeriode(), fødselsdato.plusWeeks(44), fødselsdato.plusWeeks(50).minusDays(1), AVSLÅTT, FEDREKVOTE); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + termindato.minusDays(2), + fødselsdato.minusDays(1), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato, + termindato.plusWeeks(2).minusDays(3), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + resultater.get(2).uttakPeriode(), + fødselsdato.plusWeeks(31), + fødselsdato.plusWeeks(44).minusDays(1), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + resultater.get(3).uttakPeriode(), + fødselsdato.plusWeeks(44), + fødselsdato.plusWeeks(50).minusDays(1), + AVSLÅTT, + FEDREKVOTE); } @Test void fedrekvote_med_uttak_rundt_fødsel_blir_avkortet_og_innvilget_riktig() { var fødselsdato = LocalDate.of(2022, 10, 3); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer( - new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(15 * 5)).farUttakRundtFødselDager(10)) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(fødselsdato.minusWeeks(1), fødselsdato.plusWeeks(3).minusDays(1), null))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FEDREKVOTE) + .trekkdager(15 * 5)) + .farUttakRundtFødselDager(10)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + fødselsdato.minusWeeks(1), + fødselsdato.plusWeeks(3).minusDays(1), + null))); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(3); - verifiserPeriode(resultater.get(0).uttakPeriode(), fødselsdato.minusWeeks(1), fødselsdato.minusDays(1), MANUELL_BEHANDLING, FEDREKVOTE); - verifiserPeriode(resultater.get(1).uttakPeriode(), fødselsdato, fødselsdato.plusWeeks(2).minusDays(1), INNVILGET, FEDREKVOTE); - verifiserPeriode(resultater.get(2).uttakPeriode(), fødselsdato.plusWeeks(2), fødselsdato.plusWeeks(3).minusDays(1), MANUELL_BEHANDLING, - FEDREKVOTE); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato.minusWeeks(1), + fødselsdato.minusDays(1), + MANUELL_BEHANDLING, + FEDREKVOTE); + verifiserPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato, + fødselsdato.plusWeeks(2).minusDays(1), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + resultater.get(2).uttakPeriode(), + fødselsdato.plusWeeks(2), + fødselsdato.plusWeeks(3).minusDays(1), + MANUELL_BEHANDLING, + FEDREKVOTE); } @Test void fedrekvote_med_for_mye_uttak_rundt_fødsel_blir_avkortet_og_innvilget_riktig() { var fødselsdato = LocalDate.of(2022, 10, 4); var termindato = fødselsdato.plusDays(1); - var grunnlag = basicGrunnlagFar(fødselsdato).datoer(datoer(fødselsdato).termin(termindato)) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(15 * 5)).farUttakRundtFødselDager(10)) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(termindato.minusDays(2), termindato.plusWeeks(1), null), - oppgittPeriode(fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(6).minusDays(1), null))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .datoer(datoer(fødselsdato).termin(termindato)) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FEDREKVOTE) + .trekkdager(15 * 5)) + .farUttakRundtFødselDager(10)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + termindato.minusDays(2), + termindato.plusWeeks(1), + null), + oppgittPeriode( + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(6).minusDays(1), + null))); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(4); - verifiserPeriode(resultater.get(0).uttakPeriode(), termindato.minusDays(2), fødselsdato.minusDays(1), INNVILGET, FEDREKVOTE); - verifiserPeriode(resultater.get(1).uttakPeriode(), fødselsdato, termindato.plusWeeks(1), INNVILGET, FEDREKVOTE); - verifiserPeriode(resultater.get(2).uttakPeriode(), fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(4).plusDays(1), INNVILGET, FEDREKVOTE); - verifiserPeriode(resultater.get(3).uttakPeriode(), fødselsdato.plusWeeks(4).plusDays(2), fødselsdato.plusWeeks(6).minusDays(1), - MANUELL_BEHANDLING, FEDREKVOTE); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + termindato.minusDays(2), + fødselsdato.minusDays(1), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato, + termindato.plusWeeks(1), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + resultater.get(2).uttakPeriode(), + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(4).plusDays(1), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + resultater.get(3).uttakPeriode(), + fødselsdato.plusWeeks(4).plusDays(2), + fødselsdato.plusWeeks(6).minusDays(1), + MANUELL_BEHANDLING, + FEDREKVOTE); } - private OppgittPeriode overføringPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - OverføringÅrsak årsak, - DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forOverføring(stønadskontotype, fom, tom, årsak, null, null, dokumentasjonVurdering); + private OppgittPeriode overføringPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + OverføringÅrsak årsak, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forOverføring( + stønadskontotype, fom, tom, årsak, null, null, dokumentasjonVurdering); } private Datoer.Builder datoer(LocalDate fødselsdato) { diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeDelregelTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeDelregelTest.java index 7fb20751..a1e71632 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeDelregelTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeDelregelTest.java @@ -13,9 +13,6 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -37,34 +34,44 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; class FellesperiodeDelregelTest { private final LocalDate fødselsdato = LocalDate.of(2018, 1, 1); @Test - void fellesperiode_mor_uttak_starter_ved_12_uker_og_slutter_ved_3_uker_før_fødsel_blir_innvilget() { - var søknadsperiode = oppgittPeriode(fødselsdato.minusWeeks(12), fødselsdato.minusWeeks(3), null, false); + void + fellesperiode_mor_uttak_starter_ved_12_uker_og_slutter_ved_3_uker_før_fødsel_blir_innvilget() { + var søknadsperiode = + oppgittPeriode(fødselsdato.minusWeeks(12), fødselsdato.minusWeeks(3), null, false); var kontoer = enFellesperiodeKonto(13 * 5); - var grunnlag = basicGrunnlagMor().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); - } @Test void fellesperiode_mor_uttak_starter_etter_fødsel_og_som_slutter_før_7_uker_blir_avslått() { var søknadsperiode = oppgittPeriode(fødselsdato, fødselsdato.plusWeeks(3), null, false); var kontoer = enFellesperiodeKonto(13 * 5); - var grunnlag = basicGrunnlagMor().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -73,12 +80,17 @@ class FellesperiodeDelregelTest { @Test void fellesperiode_mor_uttak_starter_ved_3_uker_før_fødsel_slutter_før_fødsel_blir_innvilget() { - var søknadsperiode = oppgittPeriode(fødselsdato.minusWeeks(3), fødselsdato.minusWeeks(1), null, false); + var søknadsperiode = + oppgittPeriode(fødselsdato.minusWeeks(3), fødselsdato.minusWeeks(1), null, false); var kontoer = enFellesperiodeKonto(13 * 5); - var grunnlag = basicGrunnlagMor().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -87,12 +99,17 @@ class FellesperiodeDelregelTest { @Test void fellesperiode_mor_uttak_starter_ved_7_uker_etter_fødsel_blir_innvilget() { - var søknadsperiode = oppgittPeriode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(10), null, false); + var søknadsperiode = + oppgittPeriode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(10), null, false); var kontoer = enFellesperiodeKonto(13 * 5); - var grunnlag = basicGrunnlagMor().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -101,12 +118,17 @@ class FellesperiodeDelregelTest { @Test void fellesperiode_far_før_fødsel_slutter_før_fødsel_blir_avslått_uten_knekk() { - var søknadsperiode = oppgittPeriode(fødselsdato.minusWeeks(10), fødselsdato.minusWeeks(5), null, false); + var søknadsperiode = + oppgittPeriode(fødselsdato.minusWeeks(10), fødselsdato.minusWeeks(5), null, false); var kontoer = enFellesperiodeKonto(10 * 5); - var grunnlag = basicGrunnlagFar().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagFar() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -119,13 +141,23 @@ private RegelGrunnlag.Builder basicGrunnlagFar() { @Test void fellesperiode_blir_avslått_etter_uke_7_når_mor_ikke_har_omsorg() { - var søknadsperiode = oppgittPeriode(fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(14), null, false); + var søknadsperiode = + oppgittPeriode(fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(14), null, false); var kontoer = enFellesperiodeKonto(13 * 5); - var grunnlag = basicGrunnlagMor().rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -135,14 +167,27 @@ private RegelGrunnlag.Builder basicGrunnlagFar() { @Test void fellesperiode_blir_avslått_etter_uke_7_når_mor_ikke_har_omsorg_sammenhengede_uttak() { - var søknadsperiode = oppgittPeriode(fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(14), null, false); + var søknadsperiode = + oppgittPeriode(fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(14), null, false); var kontoer = enFellesperiodeKonto(13 * 5); - var grunnlag = basicGrunnlagMor().rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .behandling(new Behandling.Builder().søkerErMor(true).kreverSammenhengendeUttak(true)) - .søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .behandling( + new Behandling.Builder() + .søkerErMor(true) + .kreverSammenhengendeUttak(true)) + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -152,13 +197,23 @@ private RegelGrunnlag.Builder basicGrunnlagFar() { @Test void fellesperiode_blir_avslått_etter_uke_7_når_far_ikke_har_omsorg() { - var søknadsperiode = oppgittPeriode(fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(14), null, false); + var søknadsperiode = + oppgittPeriode(fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(14), null, false); var kontoer = enFellesperiodeKonto(13 * 5); - var grunnlag = basicGrunnlagFar().rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagFar() + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -168,14 +223,27 @@ private RegelGrunnlag.Builder basicGrunnlagFar() { @Test void fellesperiode_blir_avslått_etter_uke_7_når_far_ikke_har_omsorg_sammenhengede_uttak() { - var søknadsperiode = oppgittPeriode(fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(14), null, false); + var søknadsperiode = + oppgittPeriode(fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(14), null, false); var kontoer = enFellesperiodeKonto(13 * 5); - var grunnlag = basicGrunnlagFar().rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .behandling(new Behandling.Builder().søkerErMor(false).kreverSammenhengendeUttak(true)) - .søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagFar() + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .behandling( + new Behandling.Builder() + .søkerErMor(false) + .kreverSammenhengendeUttak(true)) + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -184,14 +252,25 @@ private RegelGrunnlag.Builder basicGrunnlagFar() { } @Test - void fellesperiode_før_fødsel_innvilges_uavhengig_av_om_søker_har_omsorg_da_det_ikke_er_mulig_å_ha_omsorg_fordi_barnet_ikke_er_født() { - var søknadsperiode = oppgittPeriode(fødselsdato.minusWeeks(12), fødselsdato.minusWeeks(10), null, false); + void + fellesperiode_før_fødsel_innvilges_uavhengig_av_om_søker_har_omsorg_da_det_ikke_er_mulig_å_ha_omsorg_fordi_barnet_ikke_er_født() { + var søknadsperiode = + oppgittPeriode(fødselsdato.minusWeeks(12), fødselsdato.minusWeeks(10), null, false); var kontoer = enFellesperiodeKonto(13 * 5); - var grunnlag = basicGrunnlagMor().rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -200,12 +279,17 @@ private RegelGrunnlag.Builder basicGrunnlagFar() { @Test void UT1041_mor_før3UkerFørFamilieHendelse_ikkeGradert() { - var søknadsperiode = oppgittPeriode(fødselsdato.minusWeeks(5), fødselsdato.minusWeeks(4), null, false); + var søknadsperiode = + oppgittPeriode(fødselsdato.minusWeeks(5), fødselsdato.minusWeeks(4), null, false); var kontoer = enFellesperiodeKonto(13 * 5); - var grunnlag = basicGrunnlagMor().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -214,27 +298,41 @@ private RegelGrunnlag.Builder basicGrunnlagFar() { @Test void UT1064_mor_før3UkerFørFamilieHendelse_gradert() { - var søknadsperiode = gradertoppgittPeriode(fødselsdato.minusWeeks(5), fødselsdato.minusWeeks(4), null, false, null); + var søknadsperiode = + gradertoppgittPeriode( + fødselsdato.minusWeeks(5), fødselsdato.minusWeeks(4), null, false, null); var kontoer = enFellesperiodeKonto(13 * 5); - var grunnlag = basicGrunnlagMor().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); - assertInnvilgetAvslåttGradering(regelresultat, InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, - GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); + assertInnvilgetAvslåttGradering( + regelresultat, + InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER, + GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); } @Test void UT1219_mor_tidligstUke7_omsorg_disponibleStønadsdager_gradert_avklart() { - var søknadsperiode = gradertoppgittPeriode(fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(9), null, false, null); + var søknadsperiode = + gradertoppgittPeriode( + fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(9), null, false, null); var kontoer = enFellesperiodeKonto(100); - var grunnlag = basicGrunnlagMor().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -243,12 +341,17 @@ private RegelGrunnlag.Builder basicGrunnlagFar() { @Test void UT1047_mor_fellesperioder_etter_uke7() { - var søknadsperiode = oppgittPeriode(fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(9), null, false); + var søknadsperiode = + oppgittPeriode(fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(9), null, false); var kontoer = enFellesperiodeKonto(100); - var grunnlag = basicGrunnlagMor().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -257,26 +360,43 @@ void UT1047_mor_fellesperioder_etter_uke7() { @Test void UT1048_mor_fellesperiode_før_uke7() { - var søknadsperiode = oppgittPeriode(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), null, false); + var søknadsperiode = + oppgittPeriode(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), null, false); var kontoer = enFellesperiodeKonto(100); - var grunnlag = basicGrunnlagMor().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); - assertManuellBehandling(regelresultat, null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false); + assertManuellBehandling( + regelresultat, null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false); } @Test - void UT1255_far_førUke7_etterFamileHendelse_gyldigGrunn_omsorg_disponibleStønadsdager_gradert_avklart() { - var søknadsperiode = gradertoppgittPeriode(fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(5), null, false, SYKDOM_ANNEN_FORELDER_GODKJENT); + void + UT1255_far_førUke7_etterFamileHendelse_gyldigGrunn_omsorg_disponibleStønadsdager_gradert_avklart() { + var søknadsperiode = + gradertoppgittPeriode( + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(5), + null, + false, + SYKDOM_ANNEN_FORELDER_GODKJENT); var kontoer = enFellesperiodeKonto(100); - var grunnlag = basicGrunnlagFar().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagFar() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -285,13 +405,23 @@ void UT1047_mor_fellesperioder_etter_uke7() { @Test void UT1054_far_førUke7_etterFamileHendelse_utenGyldigGrunn_flerbarnsdager_ikkeOmsorg() { - var søknadsperiode = oppgittPeriode(fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(5), null, true); + var søknadsperiode = + oppgittPeriode(fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(5), null, true); var kontoer = fellesperiodeOgFlerbarnsdagerKonto(100, 85); - var grunnlag = basicGrunnlagFar().rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagFar() + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -299,13 +429,24 @@ void UT1047_mor_fellesperioder_etter_uke7() { } @Test - void UT1256_far_førUke7_etterFamileHendelse_gyldigGrunn_omsorg_disponibleStønadsdager_utenGradering() { - var søknadsperiode = oppgittPeriode(fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(5), null, false, INNLEGGELSE_ANNEN_FORELDER_GODKJENT); + void + UT1256_far_førUke7_etterFamileHendelse_gyldigGrunn_omsorg_disponibleStønadsdager_utenGradering() { + var søknadsperiode = + oppgittPeriode( + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(5), + null, + false, + INNLEGGELSE_ANNEN_FORELDER_GODKJENT); var kontoer = enFellesperiodeKonto(100); - var grunnlag = basicGrunnlagFar().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagFar() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -316,13 +457,20 @@ void UT1047_mor_fellesperioder_etter_uke7() { void opphold_fellesperiode_annenforelder() { var fødselsdato = LocalDate.of(2018, 1, 1); - var søknadsperiode = oppholdPeriode(fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(15).plusWeeks(15), - OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER); + var søknadsperiode = + oppholdPeriode( + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(15).plusWeeks(15), + OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER); var kontoer = enFellesperiodeKonto(100); - var grunnlag = basicGrunnlagMor().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagMor() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -336,32 +484,52 @@ void opphold_fellesperiode_annenforelder() { void opphold_fellesperiode_annenforelder_tom_for_konto() { var fødselsdato = LocalDate.of(2018, 1, 1); - var søknadsperiode = oppholdPeriode(fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(15).plusWeeks(15), - OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER); - var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 0)).konto(konto(MØDREKVOTE, 100)); - var grunnlag = basicGrunnlagMor().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var søknadsperiode = + oppholdPeriode( + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(15).plusWeeks(15), + OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER); + var kontoer = + new Kontoer.Builder().konto(konto(FELLESPERIODE, 0)).konto(konto(MØDREKVOTE, 100)); + var grunnlag = + basicGrunnlagMor() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); } @Test void far_etterUke7_omsorg_disponibleStønadsdager_gradering_ikkeFlerbarnsdager() { - var søknadsperiode = gradertoppgittPeriode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(9), null, false, MORS_AKTIVITET_GODKJENT); + var søknadsperiode = + gradertoppgittPeriode( + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(9), + null, + false, + MORS_AKTIVITET_GODKJENT); var kontoer = enFellesperiodeKonto(100); var søknad = søknad(søknadsperiode); - var grunnlag = basicGrunnlagFar().søknad(søknad) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagFar() + .søknad(søknad) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -370,12 +538,18 @@ void opphold_fellesperiode_annenforelder_tom_for_konto() { @Test void UT1270_far_etterUke7_omsorg_disponibleStønadsdager_gradering_flerbarnsdager() { - var søknadsperiode = gradertoppgittPeriode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(9), null, true, null); + var søknadsperiode = + gradertoppgittPeriode( + fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(9), null, true, null); var kontoer = fellesperiodeOgFlerbarnsdagerKonto(100, 85); - var grunnlag = basicGrunnlagFar().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagFar() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -384,13 +558,23 @@ void opphold_fellesperiode_annenforelder_tom_for_konto() { @Test void far_etterUke7_omsorg_disponibleStønadsdager_utenGradering_ikkeFlerbarnsdager() { - var søknadsperiode = oppgittPeriode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(9), null, false, MORS_AKTIVITET_GODKJENT); + var søknadsperiode = + oppgittPeriode( + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(9), + null, + false, + MORS_AKTIVITET_GODKJENT); var kontoer = enFellesperiodeKonto(100); var søknad = søknad(søknadsperiode); - var grunnlag = basicGrunnlagFar().søknad(søknad) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagFar() + .søknad(søknad) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -399,12 +583,17 @@ void opphold_fellesperiode_annenforelder_tom_for_konto() { @Test void UT1271_far_etterUke7_omsorg_disponibleStønadsdager_utenGradering_flerbarnsdager() { - var søknadsperiode = oppgittPeriode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(9), null, true); + var søknadsperiode = + oppgittPeriode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(9), null, true); var kontoer = fellesperiodeOgFlerbarnsdagerKonto(100, 85); - var grunnlag = basicGrunnlagFar().søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlagFar() + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -417,12 +606,25 @@ void opphold_fellesperiode_annenforelder_tom_for_konto() { var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 10 * 5)); - var søknadsperiode = oppgittPeriode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(9).minusDays(1), null, false); - var grunnlag = basicGrunnlagFar().rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(false).farHarRett(true).samtykke(true)) - .søknad(søknad(søknadsperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var søknadsperiode = + oppgittPeriode( + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(9).minusDays(1), + null, + false); + var grunnlag = + basicGrunnlagFar() + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .morHarRett(false) + .farHarRett(true) + .samtykke(true)) + .søknad(søknad(søknadsperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -430,13 +632,24 @@ void opphold_fellesperiode_annenforelder_tom_for_konto() { assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_IKKE_RETT_FP); } - private OppgittPeriode gradertoppgittPeriode(LocalDate fom, - LocalDate tom, - SamtidigUttaksprosent samtidigUttaksprosent, - boolean flerbarnsdager, - DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forGradering(FELLESPERIODE, fom, tom, BigDecimal.TEN, samtidigUttaksprosent, flerbarnsdager, - Set.of(AktivitetIdentifikator.forFrilans()), null, null, null, dokumentasjonVurdering); + private OppgittPeriode gradertoppgittPeriode( + LocalDate fom, + LocalDate tom, + SamtidigUttaksprosent samtidigUttaksprosent, + boolean flerbarnsdager, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forGradering( + FELLESPERIODE, + fom, + tom, + BigDecimal.TEN, + samtidigUttaksprosent, + flerbarnsdager, + Set.of(AktivitetIdentifikator.forFrilans()), + null, + null, + null, + dokumentasjonVurdering); } private Søknad.Builder søknad(OppgittPeriode søknadsperiode) { @@ -447,46 +660,65 @@ private Kontoer.Builder enFellesperiodeKonto(int trekkdager) { return new Kontoer.Builder().konto(konto(FELLESPERIODE, trekkdager)); } - private Kontoer.Builder fellesperiodeOgFlerbarnsdagerKonto(int fellesperiodeTrekkdager, int flerbarnsdagerTrekkdager) { - return new Kontoer.Builder().konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(fellesperiodeTrekkdager)) - .flerbarnsdager(flerbarnsdagerTrekkdager); + private Kontoer.Builder fellesperiodeOgFlerbarnsdagerKonto( + int fellesperiodeTrekkdager, int flerbarnsdagerTrekkdager) { + return new Kontoer.Builder() + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(fellesperiodeTrekkdager)) + .flerbarnsdager(flerbarnsdagerTrekkdager); } private Konto.Builder konto(Stønadskontotype type, int trekkdager) { return new Konto.Builder().type(type).trekkdager(trekkdager); } - private OppgittPeriode oppgittPeriode(LocalDate fom, LocalDate tom, SamtidigUttaksprosent samtidigUttaksprosent, boolean flerbarnsdager) { + private OppgittPeriode oppgittPeriode( + LocalDate fom, + LocalDate tom, + SamtidigUttaksprosent samtidigUttaksprosent, + boolean flerbarnsdager) { return oppgittPeriode(fom, tom, samtidigUttaksprosent, flerbarnsdager, null); } - private OppgittPeriode oppgittPeriode(LocalDate fom, - LocalDate tom, - SamtidigUttaksprosent samtidigUttaksprosent, - boolean flerbarnsdager, - DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forVanligPeriode(FELLESPERIODE, fom, tom, samtidigUttaksprosent, flerbarnsdager, null, null, null, - dokumentasjonVurdering); - } - - private void assertInnvilget(FastsettePerioderRegelresultat regelresultat, InnvilgetÅrsak innvilgetÅrsak) { + private OppgittPeriode oppgittPeriode( + LocalDate fom, + LocalDate tom, + SamtidigUttaksprosent samtidigUttaksprosent, + boolean flerbarnsdager, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forVanligPeriode( + FELLESPERIODE, + fom, + tom, + samtidigUttaksprosent, + flerbarnsdager, + null, + null, + null, + dokumentasjonVurdering); + } + + private void assertInnvilget( + FastsettePerioderRegelresultat regelresultat, InnvilgetÅrsak innvilgetÅrsak) { assertThat(regelresultat.oppfylt()).isTrue(); assertThat(regelresultat.skalUtbetale()).isTrue(); assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(innvilgetÅrsak); } - private void assertInnvilgetAvslåttGradering(FastsettePerioderRegelresultat regelresultat, - InnvilgetÅrsak innvilgetÅrsak, - GraderingIkkeInnvilgetÅrsak graderingIkkeInnvilgetÅrsak) { + private void assertInnvilgetAvslåttGradering( + FastsettePerioderRegelresultat regelresultat, + InnvilgetÅrsak innvilgetÅrsak, + GraderingIkkeInnvilgetÅrsak graderingIkkeInnvilgetÅrsak) { assertInnvilget(regelresultat, innvilgetÅrsak); - assertThat(regelresultat.getGraderingIkkeInnvilgetÅrsak()).isEqualTo(graderingIkkeInnvilgetÅrsak); + assertThat(regelresultat.getGraderingIkkeInnvilgetÅrsak()) + .isEqualTo(graderingIkkeInnvilgetÅrsak); } - private void assertManuellBehandling(FastsettePerioderRegelresultat regelresultat, - IkkeOppfyltÅrsak ikkeOppfyltÅrsak, - Manuellbehandlingårsak manuellBehandlingÅrsak, - boolean trekkdager, - boolean utbetal) { + private void assertManuellBehandling( + FastsettePerioderRegelresultat regelresultat, + IkkeOppfyltÅrsak ikkeOppfyltÅrsak, + Manuellbehandlingårsak manuellBehandlingÅrsak, + boolean trekkdager, + boolean utbetal) { assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isEqualTo(trekkdager); assertThat(regelresultat.skalUtbetale()).isEqualTo(utbetal); @@ -494,23 +726,31 @@ private void assertManuellBehandling(FastsettePerioderRegelresultat regelresulta assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(manuellBehandlingÅrsak); } - private void assertAvslått(FastsettePerioderRegelresultat regelresultat, IkkeOppfyltÅrsak ikkeOppfyltÅrsak, boolean trekkdager, boolean utbetal) { + private void assertAvslått( + FastsettePerioderRegelresultat regelresultat, + IkkeOppfyltÅrsak ikkeOppfyltÅrsak, + boolean trekkdager, + boolean utbetal) { assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isEqualTo(trekkdager); assertThat(regelresultat.skalUtbetale()).isEqualTo(utbetal); assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(ikkeOppfyltÅrsak); } - private RegelGrunnlag.Builder basicGrunnlagMor() { return basicGrunnlag().behandling(new Behandling.Builder().søkerErMor(true)); } private RegelGrunnlag.Builder basicGrunnlag() { return RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).farHarRett(true).morHarRett(true)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().samtykke(true).farHarRett(true).morHarRett(true)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeMedGraderingTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeMedGraderingTest.java index a3b304ba..5eb3b870 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeMedGraderingTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeMedGraderingTest.java @@ -7,9 +7,6 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Behandling; @@ -24,6 +21,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.UtfallType; +import org.junit.jupiter.api.Test; class FellesperiodeMedGraderingTest { @@ -33,14 +31,30 @@ class FellesperiodeMedGraderingTest { void mor_graderer_med_50_prosent_arbeid_i_10_uker_med_5_uker_igjen_på_saldo() { var graderingFom = fødselsdato.plusWeeks(10); var graderingTom = fødselsdato.plusWeeks(20).minusDays(1); - var aktuellPeriode = OppgittPeriode.forGradering(Stønadskontotype.FELLESPERIODE, graderingFom, graderingTom, BigDecimal.valueOf(50), null, - false, Set.of(ARBEIDSFORHOLD_1), null, null, null, null); + var aktuellPeriode = + OppgittPeriode.forGradering( + Stønadskontotype.FELLESPERIODE, + graderingFom, + graderingTom, + BigDecimal.valueOf(50), + null, + false, + Set.of(ARBEIDSFORHOLD_1), + null, + null, + null, + null); var kontoer = new Kontoer.Builder().konto(konto(Stønadskontotype.FELLESPERIODE, 5 * 5)); var arbeidsforhold = new Arbeidsforhold(ARBEIDSFORHOLD_1); - var grunnlag = basicGrunnlag().kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(aktuellPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) - .build(); + var grunnlag = + basicGrunnlag() + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(aktuellPeriode)) + .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) + .build(); var regelresultat = kjørRegel(aktuellPeriode, grunnlag); @@ -51,14 +65,30 @@ class FellesperiodeMedGraderingTest { void mor_graderer_med_50_prosent_arbeid_i_10_uker_med_4_uker_igjen_på_saldo() { var graderingFom = fødselsdato.plusWeeks(10); var graderingTom = fødselsdato.plusWeeks(20).minusDays(1); - var aktuellPeriode = OppgittPeriode.forGradering(Stønadskontotype.FELLESPERIODE, graderingFom, graderingTom, BigDecimal.valueOf(50), null, - false, Set.of(ARBEIDSFORHOLD_1), null, null, null, null); + var aktuellPeriode = + OppgittPeriode.forGradering( + Stønadskontotype.FELLESPERIODE, + graderingFom, + graderingTom, + BigDecimal.valueOf(50), + null, + false, + Set.of(ARBEIDSFORHOLD_1), + null, + null, + null, + null); var kontoer = new Kontoer.Builder().konto(konto(Stønadskontotype.FELLESPERIODE, 4 * 5)); var arbeidsforhold = new Arbeidsforhold(ARBEIDSFORHOLD_1); - var grunnlag = basicGrunnlag().kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(aktuellPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) - .build(); + var grunnlag = + basicGrunnlag() + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(aktuellPeriode)) + .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) + .build(); var regelresultat = kjørRegel(aktuellPeriode, grunnlag); @@ -71,10 +101,15 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) private RegelGrunnlag.Builder basicGrunnlag() { return RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .behandling(new Behandling.Builder().søkerErMor(true)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true).samtykke(true)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .behandling(new Behandling.Builder().søkerErMor(true)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true).samtykke(true)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeOrkestreringTest.java index 63ee4b61..e5c4d0e5 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/FellesperiodeOrkestreringTest.java @@ -11,9 +11,6 @@ import java.time.LocalDate; import java.util.List; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Datoer; @@ -28,156 +25,366 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; class FellesperiodeOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { private final LocalDate fødselsdato = LocalDate.of(2018, 1, 1); @Test - void fellesperiode_mor_etter_uke_7_etter_fødsel_uten_nok_dager_blir_innvilget_med_knekk_og_avslått_periode_på_resten() { - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER_FØR_FØDSEL).trekkdager(1000)) - .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(1000)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(4 * 5)); - var grunnlag = basicGrunnlagMor().søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - oppgittPeriode(Stønadskontotype.FELLESPERIODE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(15).minusDays(1)))) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + void + fellesperiode_mor_etter_uke_7_etter_fødsel_uten_nok_dager_blir_innvilget_med_knekk_og_avslått_periode_på_resten() { + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER_FØR_FØDSEL).trekkdager(1000)) + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(1000)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(4 * 5)); + var grunnlag = + basicGrunnlagMor() + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + oppgittPeriode( + Stønadskontotype.FELLESPERIODE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(15).minusDays(1)))) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(4); - verifiserPeriode(resultater.get(0).uttakPeriode(), fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), INNVILGET, FORELDREPENGER_FØR_FØDSEL); - verifiserPeriode(resultater.get(1).uttakPeriode(), fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), INNVILGET, MØDREKVOTE); - verifiserPeriode(resultater.get(2).uttakPeriode(), fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), INNVILGET, - FELLESPERIODE); - verifiserManuellBehandlingPeriode(resultater.get(3).uttakPeriode(), fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(15).minusDays(1), - FELLESPERIODE, IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.STØNADSKONTO_TOM); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + INNVILGET, + FORELDREPENGER_FØR_FØDSEL); + verifiserPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + INNVILGET, + MØDREKVOTE); + verifiserPeriode( + resultater.get(2).uttakPeriode(), + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + INNVILGET, + FELLESPERIODE); + verifiserManuellBehandlingPeriode( + resultater.get(3).uttakPeriode(), + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(15).minusDays(1), + FELLESPERIODE, + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.STØNADSKONTO_TOM); } private Kontoer.Builder fellesperiodeKonto(int trekkdager) { - return new Kontoer.Builder().konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(trekkdager)); + return new Kontoer.Builder() + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(trekkdager)); } @Test void fellesperiode_far_etter_uke_6_blir_innvilget_pga_oppfyller_aktivitetskravet() { var kontoer = fellesperiodeKonto(4 * 5); - var oppgittPeriode = oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(15), MORS_AKTIVITET_GODKJENT); + var oppgittPeriode = + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(15), + MORS_AKTIVITET_GODKJENT); var søknad = søknad(Søknadstype.FØDSEL, oppgittPeriode); - var grunnlag = basicGrunnlagFar().søknad(søknad) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var grunnlag = + basicGrunnlagFar() + .søknad(søknad) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var resultater = fastsettPerioder(grunnlag); - //Siste del av søknadsperioden blir avslått pga tom for dager + // Siste del av søknadsperioden blir avslått pga tom for dager assertThat(resultater).hasSize(2); - verifiserPeriode(resultater.get(0).uttakPeriode(), fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), INNVILGET, - FELLESPERIODE); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + INNVILGET, + FELLESPERIODE); } @Test void for_tidlig_fellesperiode_far_blir_knekt_og_må_behandles_manuelt() { - var periode = oppgittPeriode(FELLESPERIODE, fødselsdato.minusWeeks(5), fødselsdato.plusWeeks(1), false, null, - INNLEGGELSE_ANNEN_FORELDER_GODKJENT); + var periode = + oppgittPeriode( + FELLESPERIODE, + fødselsdato.minusWeeks(5), + fødselsdato.plusWeeks(1), + false, + null, + INNLEGGELSE_ANNEN_FORELDER_GODKJENT); var grunnlag = basicGrunnlagFar().søknad(søknad(Søknadstype.FØDSEL, periode)); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(3); - verifiserManuellBehandlingPeriode(resultater.get(0).uttakPeriode(), fødselsdato.minusWeeks(5), fødselsdato.minusWeeks(3).minusDays(1), - FELLESPERIODE, IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL); - verifiserManuellBehandlingPeriode(resultater.get(1).uttakPeriode(), fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), FELLESPERIODE, - IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL); - verifiserPeriode(resultater.get(2).uttakPeriode(), fødselsdato, fødselsdato.plusWeeks(1), Perioderesultattype.INNVILGET, FELLESPERIODE); + verifiserManuellBehandlingPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato.minusWeeks(5), + fødselsdato.minusWeeks(3).minusDays(1), + FELLESPERIODE, + IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, + Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL); + verifiserManuellBehandlingPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + FELLESPERIODE, + IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, + Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL); + verifiserPeriode( + resultater.get(2).uttakPeriode(), + fødselsdato, + fødselsdato.plusWeeks(1), + Perioderesultattype.INNVILGET, + FELLESPERIODE); } @Test - void fellesperiode_mor_uttak_starter_ved_12_uker_og_slutter_etter_3_uker_før_fødsel_og_blir_innvilget() { - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER_FØR_FØDSEL).trekkdager(3 * 5)) - .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(15 * 5)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(16 * 5)); - - var grunnlag = basicGrunnlagMor().søknad( - søknad(Søknadstype.FØDSEL, oppgittPeriode(FELLESPERIODE, fødselsdato.minusWeeks(12), fødselsdato.minusWeeks(1).minusDays(1)), - oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(1), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)))) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + void + fellesperiode_mor_uttak_starter_ved_12_uker_og_slutter_etter_3_uker_før_fødsel_og_blir_innvilget() { + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FORELDREPENGER_FØR_FØDSEL) + .trekkdager(3 * 5)) + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(15 * 5)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(16 * 5)); + + var grunnlag = + basicGrunnlagMor() + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FELLESPERIODE, + fødselsdato.minusWeeks(12), + fødselsdato.minusWeeks(1).minusDays(1)), + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(1), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)))) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(4); - verifiserPeriode(resultater.get(0).uttakPeriode(), fødselsdato.minusWeeks(12), fødselsdato.minusWeeks(3).minusDays(1), - Perioderesultattype.INNVILGET, FELLESPERIODE); - verifiserPeriode(resultater.get(1).uttakPeriode(), fødselsdato.minusWeeks(3), fødselsdato.minusWeeks(1).minusDays(1), - Perioderesultattype.INNVILGET, FELLESPERIODE); - verifiserPeriode(resultater.get(2).uttakPeriode(), fødselsdato.minusWeeks(1), fødselsdato.minusDays(1), Perioderesultattype.INNVILGET, - FORELDREPENGER_FØR_FØDSEL); - verifiserPeriode(resultater.get(3).uttakPeriode(), fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), Perioderesultattype.INNVILGET, - MØDREKVOTE); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato.minusWeeks(12), + fødselsdato.minusWeeks(3).minusDays(1), + Perioderesultattype.INNVILGET, + FELLESPERIODE); + verifiserPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato.minusWeeks(3), + fødselsdato.minusWeeks(1).minusDays(1), + Perioderesultattype.INNVILGET, + FELLESPERIODE); + verifiserPeriode( + resultater.get(2).uttakPeriode(), + fødselsdato.minusWeeks(1), + fødselsdato.minusDays(1), + Perioderesultattype.INNVILGET, + FORELDREPENGER_FØR_FØDSEL); + verifiserPeriode( + resultater.get(3).uttakPeriode(), + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + Perioderesultattype.INNVILGET, + MØDREKVOTE); } @Test - void fellesperiode_mor_uttak_starter_ved_3_uker_etter_fødsel_blir_knekt_ved_6_uker_og_må_behandles_manuelt() { - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(15).type(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL)) - .konto(new Konto.Builder().trekkdager(50).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(13 * 5).type(Stønadskontotype.FELLESPERIODE)); - var søknad = søknad(Søknadstype.FØDSEL, oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(10).minusDays(1))); + void + fellesperiode_mor_uttak_starter_ved_3_uker_etter_fødsel_blir_knekt_ved_6_uker_og_må_behandles_manuelt() { + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(15) + .type(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL)) + .konto(new Konto.Builder().trekkdager(50).type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(13 * 5) + .type(Stønadskontotype.FELLESPERIODE)); + var søknad = + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(10).minusDays(1))); var grunnlag = basicGrunnlagMor().søknad(søknad).kontoer(kontoer); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(3); - verifiserAvslåttPeriode(resultater.get(0).uttakPeriode(), fødselsdato, fødselsdato.plusWeeks(3).minusDays(3), MØDREKVOTE, - IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); - verifiserManuellBehandlingPeriode(resultater.get(1).uttakPeriode(), fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(6).minusDays(1), - FELLESPERIODE, null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); - verifiserPeriode(resultater.get(2).uttakPeriode(), fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), - Perioderesultattype.INNVILGET, FELLESPERIODE); + verifiserAvslåttPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato, + fødselsdato.plusWeeks(3).minusDays(3), + MØDREKVOTE, + IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); + verifiserManuellBehandlingPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(6).minusDays(1), + FELLESPERIODE, + null, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); + verifiserPeriode( + resultater.get(2).uttakPeriode(), + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + Perioderesultattype.INNVILGET, + FELLESPERIODE); } @Test - void fellesperiode_mor_uttak_starter_før_12_uker_blir_avslått_med_knekk_ved_12_uker_før_fødsel() { - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.MØDREKVOTE).trekkdager(1000)) - .konto(new Konto.Builder().type(Stønadskontotype.FELLESPERIODE).trekkdager(13 * 5)); - var grunnlag = basicGrunnlagMor().søknad( - søknad(Søknadstype.FØDSEL, oppgittPeriode(Stønadskontotype.FELLESPERIODE, fødselsdato.minusWeeks(13), fødselsdato))).kontoer(kontoer); + void + fellesperiode_mor_uttak_starter_før_12_uker_blir_avslått_med_knekk_ved_12_uker_før_fødsel() { + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.MØDREKVOTE) + .trekkdager(1000)) + .konto( + new Konto.Builder() + .type(Stønadskontotype.FELLESPERIODE) + .trekkdager(13 * 5)); + var grunnlag = + basicGrunnlagMor() + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FELLESPERIODE, + fødselsdato.minusWeeks(13), + fødselsdato))) + .kontoer(kontoer); var resultater = fastsettPerioder(grunnlag); assertThat(resultater).hasSize(5); - verifiserPeriode(resultater.get(0).uttakPeriode(), fødselsdato.minusWeeks(13), fødselsdato.minusWeeks(12).minusDays(1), - Perioderesultattype.AVSLÅTT, Stønadskontotype.FELLESPERIODE); - verifiserPeriode(resultater.get(1).uttakPeriode(), fødselsdato.minusWeeks(12), fødselsdato.minusWeeks(3).minusDays(1), - Perioderesultattype.INNVILGET, Stønadskontotype.FELLESPERIODE); - verifiserPeriode(resultater.get(2).uttakPeriode(), fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), Perioderesultattype.INNVILGET, - Stønadskontotype.FELLESPERIODE); - verifiserManuellBehandlingPeriode(resultater.get(3).uttakPeriode(), fødselsdato, fødselsdato, FELLESPERIODE, null, - Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); - verifiserAvslåttPeriode(resultater.get(4).uttakPeriode(), fødselsdato.plusDays(1), fødselsdato.plusWeeks(6).minusDays(3), MØDREKVOTE, - IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); + verifiserPeriode( + resultater.get(0).uttakPeriode(), + fødselsdato.minusWeeks(13), + fødselsdato.minusWeeks(12).minusDays(1), + Perioderesultattype.AVSLÅTT, + Stønadskontotype.FELLESPERIODE); + verifiserPeriode( + resultater.get(1).uttakPeriode(), + fødselsdato.minusWeeks(12), + fødselsdato.minusWeeks(3).minusDays(1), + Perioderesultattype.INNVILGET, + Stønadskontotype.FELLESPERIODE); + verifiserPeriode( + resultater.get(2).uttakPeriode(), + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + Perioderesultattype.INNVILGET, + Stønadskontotype.FELLESPERIODE); + verifiserManuellBehandlingPeriode( + resultater.get(3).uttakPeriode(), + fødselsdato, + fødselsdato, + FELLESPERIODE, + null, + Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); + verifiserAvslåttPeriode( + resultater.get(4).uttakPeriode(), + fødselsdato.plusDays(1), + fødselsdato.plusWeeks(6).minusDays(3), + MØDREKVOTE, + IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); } @Test void innvilge_fellesperiode_14_uker_før_fødsel_men_ikke_12_uker_før_termin_ved_terminsøknad() { var termin = LocalDate.of(2020, 6, 10); - var grunnlag = basicGrunnlagMor().datoer(new Datoer.Builder().termin(termin).fødsel(termin.plusWeeks(2))) - .søknad(new Søknad.Builder().type(Søknadstype.TERMIN) - .oppgittePerioder(List.of( - OppgittPeriode.forVanligPeriode(FELLESPERIODE, termin.minusWeeks(15), termin.minusWeeks(3).minusDays(1), null, false, null, null, - null, null), - OppgittPeriode.forVanligPeriode(FORELDREPENGER_FØR_FØDSEL, termin.minusWeeks(3), termin.minusDays(1), null, false, null, null, - null, null), OppgittPeriode.forVanligPeriode(MØDREKVOTE, termin, termin.plusWeeks(4), null, false, null, null, null, null)))); + var grunnlag = + basicGrunnlagMor() + .datoer(new Datoer.Builder().termin(termin).fødsel(termin.plusWeeks(2))) + .søknad( + new Søknad.Builder() + .type(Søknadstype.TERMIN) + .oppgittePerioder( + List.of( + OppgittPeriode.forVanligPeriode( + FELLESPERIODE, + termin.minusWeeks(15), + termin.minusWeeks(3).minusDays(1), + null, + false, + null, + null, + null, + null), + OppgittPeriode.forVanligPeriode( + FORELDREPENGER_FØR_FØDSEL, + termin.minusWeeks(3), + termin.minusDays(1), + null, + false, + null, + null, + null, + null), + OppgittPeriode.forVanligPeriode( + MØDREKVOTE, + termin, + termin.plusWeeks(4), + null, + false, + null, + null, + null, + null)))); var resultater = fastsettPerioder(grunnlag); assertThat(resultater.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); assertThat(resultater.get(0).uttakPeriode().getFom()).isEqualTo(termin.minusWeeks(15)); - assertThat(resultater.get(0).uttakPeriode().getTom()).isEqualTo(termin.minusWeeks(12).minusDays(1)); - assertThat(resultater.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(resultater.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); + assertThat(resultater.get(0).uttakPeriode().getTom()) + .isEqualTo(termin.minusWeeks(12).minusDays(1)); + assertThat(resultater.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultater.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); assertThat(resultater.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); } @@ -185,13 +392,44 @@ void fellesperiode_far_etter_uke_6_blir_innvilget_pga_oppfyller_aktivitetskravet @Test void avslå_fellesperiode_mer_enn_12_uker_før_fødsel_ved_fødselsøknad() { var termin = LocalDate.of(2020, 6, 10); - var grunnlag = basicGrunnlagMor().datoer(new Datoer.Builder().termin(termin).fødsel(termin.plusWeeks(2))) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittePerioder(List.of( - OppgittPeriode.forVanligPeriode(FELLESPERIODE, termin.minusWeeks(12), termin.minusWeeks(3).minusDays(1), null, false, null, null, - null, null), - OppgittPeriode.forVanligPeriode(FORELDREPENGER_FØR_FØDSEL, termin.minusWeeks(3), termin.minusDays(1), null, false, null, null, - null, null), OppgittPeriode.forVanligPeriode(MØDREKVOTE, termin, termin.plusWeeks(4), null, false, null, null, null, null)))); + var grunnlag = + basicGrunnlagMor() + .datoer(new Datoer.Builder().termin(termin).fødsel(termin.plusWeeks(2))) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder( + List.of( + OppgittPeriode.forVanligPeriode( + FELLESPERIODE, + termin.minusWeeks(12), + termin.minusWeeks(3).minusDays(1), + null, + false, + null, + null, + null, + null), + OppgittPeriode.forVanligPeriode( + FORELDREPENGER_FØR_FØDSEL, + termin.minusWeeks(3), + termin.minusDays(1), + null, + false, + null, + null, + null, + null), + OppgittPeriode.forVanligPeriode( + MØDREKVOTE, + termin, + termin.plusWeeks(4), + null, + false, + null, + null, + null, + null)))); var resultater = fastsettPerioder(grunnlag); diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerDelregelTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerDelregelTest.java index 3d375caa..86a5aa41 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerDelregelTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerDelregelTest.java @@ -10,9 +10,6 @@ import java.util.List; import java.util.Optional; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -38,31 +35,44 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.PeriodeResultatÅrsak; +import org.junit.jupiter.api.Test; class ForeldrepengerDelregelTest { @Test void mor_starter_tidligere_enn_12_uker_før_termin() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittPeriode(familiehendelseDato.minusWeeks(12).minusDays(1), familiehendelseDato); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(søknad(oppgittPeriode)).kontoer(foreldrepengerKonto(15)).build(); + var oppgittPeriode = + oppgittPeriode( + familiehendelseDato.minusWeeks(12).minusDays(1), familiehendelseDato); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(foreldrepengerKonto(15)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_SØKER_FELLESPERIODE_FØR_12_UKER_FØR_TERMIN_FØDSEL); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_SØKER_FELLESPERIODE_FØR_12_UKER_FØR_TERMIN_FØDSEL); assertThat(regelresultat.getManuellbehandlingårsak()).isNull(); } @Test void mor_aleneomsorg_før3ukerFørFødsel_disponibleDager_ikkeGradering_ikkeBareMorRett() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittPeriode(familiehendelseDato.minusWeeks(6), familiehendelseDato.minusWeeks(5)); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(false).aleneomsorg(true)) - .build(); + var oppgittPeriode = + oppgittPeriode( + familiehendelseDato.minusWeeks(6), familiehendelseDato.minusWeeks(5)); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().morHarRett(false).aleneomsorg(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -70,13 +80,19 @@ class ForeldrepengerDelregelTest { } @Test - void utenAleneomsorg_morRett_aleneomsorg_før3ukerFørFødsel_disponibleDager_ikkeGradering_morRett() { + void + utenAleneomsorg_morRett_aleneomsorg_før3ukerFørFødsel_disponibleDager_ikkeGradering_morRett() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittPeriode(familiehendelseDato.minusWeeks(6), familiehendelseDato.minusWeeks(5)); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true).aleneomsorg(false)) - .build(); + var oppgittPeriode = + oppgittPeriode( + familiehendelseDato.minusWeeks(6), familiehendelseDato.minusWeeks(5)); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().morHarRett(true).aleneomsorg(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertInnvilget(regelresultat, InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT); @@ -85,74 +101,121 @@ class ForeldrepengerDelregelTest { @Test void mor_aleneomsorg_før3ukerFørFødsel_disponibleDager_gradering_ikkeBareMorRett() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var gradertPeriode = gradertPeriode(familiehendelseDato.minusWeeks(6), familiehendelseDato, AktivitetIdentifikator.forFrilans(), null); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(søknad(gradertPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(false)) - .build(); + var gradertPeriode = + gradertPeriode( + familiehendelseDato.minusWeeks(6), + familiehendelseDato, + AktivitetIdentifikator.forFrilans(), + null); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad(søknad(gradertPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(false)) + .build(); var regelresultat = kjørRegel(gradertPeriode, grunnlag); - assertInnvilgetMenAvslåttGradering(regelresultat, InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, - GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); + assertInnvilgetMenAvslåttGradering( + regelresultat, + InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, + GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); } @Test void mor_aleneomsorg_før6ukerEtterFødsel_disponibleDager_ikkeGradering() { var familiehendelseDato = LocalDate.of(2022, 10, 4); - var oppgittPeriode = oppgittPeriode(familiehendelseDato, familiehendelseDato.plusWeeks(6).minusDays(1)); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(false).morHarRett(false).aleneomsorg(true)) - .build(); + var oppgittPeriode = + oppgittPeriode(familiehendelseDato, familiehendelseDato.plusWeeks(6).minusDays(1)); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .farHarRett(false) + .morHarRett(false) + .aleneomsorg(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertInnvilget(regelresultat, InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG); } - private OppgittPeriode gradertPeriode(LocalDate fom, - LocalDate tom, - AktivitetIdentifikator aktivitetIdentifikator, - DokumentasjonVurdering dokumentasjonVurdering) { - return gradertPeriode(fom, tom, aktivitetIdentifikator, null, false, dokumentasjonVurdering); + private OppgittPeriode gradertPeriode( + LocalDate fom, + LocalDate tom, + AktivitetIdentifikator aktivitetIdentifikator, + DokumentasjonVurdering dokumentasjonVurdering) { + return gradertPeriode( + fom, tom, aktivitetIdentifikator, null, false, dokumentasjonVurdering); } - private OppgittPeriode gradertPeriode(LocalDate fom, - LocalDate tom, - AktivitetIdentifikator aktivitetIdentifikator, - SamtidigUttaksprosent samtidigUttaksprosent, - boolean flerbarnsdager, - DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forGradering(Stønadskontotype.FORELDREPENGER, fom, tom, BigDecimal.TEN, samtidigUttaksprosent, flerbarnsdager, - Set.of(aktivitetIdentifikator), null, null, null, dokumentasjonVurdering); + private OppgittPeriode gradertPeriode( + LocalDate fom, + LocalDate tom, + AktivitetIdentifikator aktivitetIdentifikator, + SamtidigUttaksprosent samtidigUttaksprosent, + boolean flerbarnsdager, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forGradering( + Stønadskontotype.FORELDREPENGER, + fom, + tom, + BigDecimal.TEN, + samtidigUttaksprosent, + flerbarnsdager, + Set.of(aktivitetIdentifikator), + null, + null, + null, + dokumentasjonVurdering); } @Test void mor_aleneomsorg_før3ukerFørFødsel_disponibleDager_gradering_bareMorRett() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var gradertPeriode = gradertPeriode(familiehendelseDato.minusWeeks(6), familiehendelseDato, AktivitetIdentifikator.forFrilans(), null); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(søknad(gradertPeriode)) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(true)) - .kontoer(foreldrepengerKonto(100)) - .build(); + var gradertPeriode = + gradertPeriode( + familiehendelseDato.minusWeeks(6), + familiehendelseDato, + AktivitetIdentifikator.forFrilans(), + null); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad(søknad(gradertPeriode)) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(true)) + .kontoer(foreldrepengerKonto(100)) + .build(); var regelresultat = kjørRegel(gradertPeriode, grunnlag); - assertInnvilgetMenAvslåttGradering(regelresultat, InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, - GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); + assertInnvilgetMenAvslåttGradering( + regelresultat, + InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, + GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); } @Test - void mor_aleneomsorg_etter6ukerEtterFødsel_omsorg_disponibleDager_gradering_avklart_ikkeBareMorRett() { + void + mor_aleneomsorg_etter6ukerEtterFødsel_omsorg_disponibleDager_gradering_avklart_ikkeBareMorRett() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var gradertPeriode = gradertPeriode(familiehendelseDato.plusWeeks(7), familiehendelseDato.plusWeeks(8), AktivitetIdentifikator.forFrilans(), - null); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(søknad(gradertPeriode)) - .kontoer(foreldrepengerKonto(100)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(false)) - .build(); + var gradertPeriode = + gradertPeriode( + familiehendelseDato.plusWeeks(7), + familiehendelseDato.plusWeeks(8), + AktivitetIdentifikator.forFrilans(), + null); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad(søknad(gradertPeriode)) + .kontoer(foreldrepengerKonto(100)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(false)) + .build(); var regelresultat = kjørRegel(gradertPeriode, grunnlag); @@ -163,13 +226,22 @@ private OppgittPeriode gradertPeriode(LocalDate fom, void mor_aleneomsorg_etter6ukerEtterFødsel_omsorg_disponibleDager_gradering_avklart_morRett() { var familiehendelseDato = LocalDate.of(2018, 1, 1); var aktivitetIdentifikator = ARBEIDSFORHOLD_1; - var gradertPeriode = gradertPeriode(familiehendelseDato.plusWeeks(7), familiehendelseDato.plusWeeks(8), aktivitetIdentifikator, null); + var gradertPeriode = + gradertPeriode( + familiehendelseDato.plusWeeks(7), + familiehendelseDato.plusWeeks(8), + aktivitetIdentifikator, + null); var kontoer = foreldrepengerKonto(100); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(søknad(gradertPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) - .kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(true)) - .build(); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad(søknad(gradertPeriode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) + .kontoer(kontoer) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(true)) + .build(); var regelresultat = kjørRegel(gradertPeriode, grunnlag); @@ -177,13 +249,18 @@ private OppgittPeriode gradertPeriode(LocalDate fom, } @Test - void mor_aleneomsorg_etter6ukerEtterFødsel_omsorg_disponibleDager_ikkeGradering_ikkeBareMorRett() { + void + mor_aleneomsorg_etter6ukerEtterFødsel_omsorg_disponibleDager_ikkeGradering_ikkeBareMorRett() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittPeriode(familiehendelseDato.plusWeeks(7), familiehendelseDato.plusWeeks(8)); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(false)) - .build(); + var oppgittPeriode = + oppgittPeriode(familiehendelseDato.plusWeeks(7), familiehendelseDato.plusWeeks(8)); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -193,40 +270,64 @@ private OppgittPeriode gradertPeriode(LocalDate fom, @Test void mor_aleneomsorg_etter6ukerEtterFødsel_omsorg_disponibleDager_ikkeGradering_morRett() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittPeriode(familiehendelseDato.plusWeeks(7), familiehendelseDato.plusWeeks(8)); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(true)) - .build(); + var oppgittPeriode = + oppgittPeriode(familiehendelseDato.plusWeeks(7), familiehendelseDato.plusWeeks(8)); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).morHarRett(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertInnvilget(regelresultat, InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG); } - private void assertInnvilgetMenAvslåttGradering(FastsettePerioderRegelresultat regelresultat, - InnvilgetÅrsak innvilgetÅrsak, - GraderingIkkeInnvilgetÅrsak graderingIkkeInnvilgetÅrsak) { + private void assertInnvilgetMenAvslåttGradering( + FastsettePerioderRegelresultat regelresultat, + InnvilgetÅrsak innvilgetÅrsak, + GraderingIkkeInnvilgetÅrsak graderingIkkeInnvilgetÅrsak) { assertInnvilget(regelresultat, innvilgetÅrsak); - assertThat(regelresultat.getGraderingIkkeInnvilgetÅrsak()).isEqualTo(graderingIkkeInnvilgetÅrsak); + assertThat(regelresultat.getGraderingIkkeInnvilgetÅrsak()) + .isEqualTo(graderingIkkeInnvilgetÅrsak); } @Test void mor_aleneomsorg_etter6ukerEtterFødsel_omsorg_noenDisponibleDager() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittPeriode(familiehendelseDato.plusWeeks(7), familiehendelseDato.plusWeeks(12)); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forFrilans())) - .arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forSelvstendigNæringsdrivende()))) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) - .kontoer(foreldrepengerKonto(10)) - .build(); - - var fastsattePerioder = List.of(new FastsattUttakPeriode.Builder().periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(oppgittPeriode.getFom().minusWeeks(1), oppgittPeriode.getFom().minusDays(1)) - .aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(8), Stønadskontotype.FORELDREPENGER, AktivitetIdentifikator.forFrilans()))) - .build()); + var oppgittPeriode = + oppgittPeriode(familiehendelseDato.plusWeeks(7), familiehendelseDato.plusWeeks(12)); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold( + new Arbeidsforhold( + AktivitetIdentifikator.forFrilans())) + .arbeidsforhold( + new Arbeidsforhold( + AktivitetIdentifikator + .forSelvstendigNæringsdrivende()))) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) + .kontoer(foreldrepengerKonto(10)) + .build(); + + var fastsattePerioder = + List.of( + new FastsattUttakPeriode.Builder() + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode( + oppgittPeriode.getFom().minusWeeks(1), + oppgittPeriode.getFom().minusDays(1)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(8), + Stønadskontotype.FORELDREPENGER, + AktivitetIdentifikator.forFrilans()))) + .build()); var regelresultat = kjørRegel(oppgittPeriode, grunnlag, fastsattePerioder); assertThat(regelresultat.sluttpunktId()).isEqualTo("UT1190"); @@ -239,17 +340,23 @@ private OppgittPeriode gradertPeriode(LocalDate fom, var fom = familiehendelseDato.plusWeeks(6); var tom = familiehendelseDato.plusWeeks(7); var oppgittPeriode = oppgittPeriode(fom, tom); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode).type(Søknadstype.FØDSEL)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).harOmsorg(false)) - .build(); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad( + new Søknad.Builder() + .oppgittPeriode(oppgittPeriode) + .type(Søknadstype.FØDSEL)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).harOmsorg(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); assertThat(regelresultat.skalUtbetale()).isFalse(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); } @Test @@ -258,14 +365,24 @@ void mor_utenAleneomsorg_ikkeBareMorRett() { var fom = familiehendelseDato.plusWeeks(6); var tom = familiehendelseDato.plusWeeks(7); var oppgittPeriode = oppgittPeriode(fom, tom); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(false).farHarRett(true).harOmsorg(false)) - .build(); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .aleneomsorg(false) + .farHarRett(true) + .harOmsorg(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertManuellBehandling(regelresultat, null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false); + assertManuellBehandling( + regelresultat, null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false); } @Test @@ -274,10 +391,15 @@ void mor_utenAleneomsorg_ikkeBareMorRett() { var fom = familiehendelseDato.minusWeeks(3); var tom = familiehendelseDato.minusWeeks(2); var oppgittPeriode = oppgittPeriode(fom, tom); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true)) - .build(); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -290,43 +412,59 @@ void mor_utenAleneomsorg_ikkeBareMorRett() { var fom = familiehendelseDato.minusWeeks(3); var tom = familiehendelseDato.minusWeeks(2); var oppgittPeriode = oppgittPeriode(fom, tom); - var grunnlag = grunnlagMor(familiehendelseDato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) - .build(); + var grunnlag = + grunnlagMor(familiehendelseDato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertInnvilget(regelresultat, InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG, "UT1197"); } - private void assertManuellBehandling(FastsettePerioderRegelresultat regelresultat, - PeriodeResultatÅrsak periodeResultatÅrsak, - Manuellbehandlingårsak manuellBehandlingÅrsak) { - assertManuellBehandling(regelresultat, periodeResultatÅrsak, manuellBehandlingÅrsak, false, false); + private void assertManuellBehandling( + FastsettePerioderRegelresultat regelresultat, + PeriodeResultatÅrsak periodeResultatÅrsak, + Manuellbehandlingårsak manuellBehandlingÅrsak) { + assertManuellBehandling( + regelresultat, periodeResultatÅrsak, manuellBehandlingÅrsak, false, false); } - private void assertManuellBehandling(FastsettePerioderRegelresultat regelresultat, - PeriodeResultatÅrsak periodeResultatÅrsak, - Manuellbehandlingårsak manuellBehandlingÅrsak, - boolean trekkdager, - boolean utbetal) { - assertManuellBehandling(regelresultat, periodeResultatÅrsak, manuellBehandlingÅrsak, trekkdager, utbetal, Optional.empty()); + private void assertManuellBehandling( + FastsettePerioderRegelresultat regelresultat, + PeriodeResultatÅrsak periodeResultatÅrsak, + Manuellbehandlingårsak manuellBehandlingÅrsak, + boolean trekkdager, + boolean utbetal) { + assertManuellBehandling( + regelresultat, + periodeResultatÅrsak, + manuellBehandlingÅrsak, + trekkdager, + utbetal, + Optional.empty()); } - private void assertManuellBehandling(FastsettePerioderRegelresultat regelresultat, - PeriodeResultatÅrsak periodeResultatÅrsak, - Manuellbehandlingårsak manuellBehandlingÅrsak, - boolean trekkdager, - boolean utbetal, - Optional graderingIkkeInnvilgetÅrsak) { + private void assertManuellBehandling( + FastsettePerioderRegelresultat regelresultat, + PeriodeResultatÅrsak periodeResultatÅrsak, + Manuellbehandlingårsak manuellBehandlingÅrsak, + boolean trekkdager, + boolean utbetal, + Optional graderingIkkeInnvilgetÅrsak) { assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isEqualTo(trekkdager); assertThat(regelresultat.skalUtbetale()).isEqualTo(utbetal); assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(periodeResultatÅrsak); assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(manuellBehandlingÅrsak); if (graderingIkkeInnvilgetÅrsak.isPresent()) { - assertThat(regelresultat.getGraderingIkkeInnvilgetÅrsak()).isEqualTo(graderingIkkeInnvilgetÅrsak.get()); + assertThat(regelresultat.getGraderingIkkeInnvilgetÅrsak()) + .isEqualTo(graderingIkkeInnvilgetÅrsak.get()); } else { assertThat(regelresultat.getGraderingIkkeInnvilgetÅrsak()).isNull(); } @@ -335,12 +473,21 @@ private void assertManuellBehandling(FastsettePerioderRegelresultat regelresulta @Test void far_før_familiehendelse() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittPeriode(familiehendelseDato.minusWeeks(3), familiehendelseDato.minusWeeks(2)); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(oppgittPeriode)).kontoer(foreldrepengerKonto(100)).build(); + var oppgittPeriode = + oppgittPeriode( + familiehendelseDato.minusWeeks(3), familiehendelseDato.minusWeeks(2)); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertManuellBehandling(regelresultat, IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL); + assertManuellBehandling( + regelresultat, + IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, + Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL); } @Test @@ -349,17 +496,23 @@ void far_etterFamiliehendelse_aleneomsorg_utenOmsorg() { var fom = familiehendelseDato.plusWeeks(1); var tom = familiehendelseDato.plusWeeks(2); var oppgittPeriode = oppgittPeriode(fom, tom); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).harOmsorg(false)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true).harOmsorg(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); assertThat(regelresultat.skalUtbetale()).isFalse(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); } @Test @@ -368,20 +521,39 @@ void far_etterFamiliehendelse_aleneomsorg_medOmsorg_utenDisponibledager() { var fom = familiehendelseDato.plusWeeks(1); var tom = familiehendelseDato.plusWeeks(2); var oppgittPeriode = oppgittPeriode(fom, tom); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .kontoer(foreldrepengerKonto(10)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forFrilans())) - .arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forSelvstendigNæringsdrivende()))) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) - .build(); - - var fastsattePerioder = List.of(new FastsattUttakPeriode.Builder().periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(fom.minusWeeks(1), fom.minusDays(1)) - .aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), Stønadskontotype.FORELDREPENGER, AktivitetIdentifikator.forFrilans()), - new FastsattUttakPeriodeAktivitet(new Trekkdager(5), Stønadskontotype.FORELDREPENGER, - AktivitetIdentifikator.forSelvstendigNæringsdrivende()))) - .build()); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(foreldrepengerKonto(10)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold( + new Arbeidsforhold( + AktivitetIdentifikator.forFrilans())) + .arbeidsforhold( + new Arbeidsforhold( + AktivitetIdentifikator + .forSelvstendigNæringsdrivende()))) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) + .build(); + + var fastsattePerioder = + List.of( + new FastsattUttakPeriode.Builder() + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(fom.minusWeeks(1), fom.minusDays(1)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + Stønadskontotype.FORELDREPENGER, + AktivitetIdentifikator.forFrilans()), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + Stønadskontotype.FORELDREPENGER, + AktivitetIdentifikator + .forSelvstendigNæringsdrivende()))) + .build()); var regelresultat = kjørRegel(oppgittPeriode, grunnlag, fastsattePerioder); assertThat(regelresultat.sluttpunktId()).isEqualTo("UT1198"); @@ -395,11 +567,15 @@ void far_etterFamiliehendelse_aleneomsorg_medOmsorg_utenDisponibledager() { var tom = familiehendelseDato.plusWeeks(2); var aktivitetIdentifikator = ARBEIDSFORHOLD_1; var gradertPeriode = gradertPeriode(fom, tom, aktivitetIdentifikator, null); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(gradertPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(gradertPeriode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) + .build(); var regelresultat = kjørRegel(gradertPeriode, grunnlag); @@ -412,10 +588,12 @@ void far_etterFamiliehendelse_aleneomsorg_medOmsorg_medDisponibledager_utenGrade var fom = familiehendelseDato.plusWeeks(4); var tom = familiehendelseDato.plusWeeks(5); var oppgittPeriode = oppgittPeriode(fom, tom); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -428,17 +606,27 @@ void far_etterFamiliehendelse_utenAleneomsorg_farRett_utenOmsorg() { var fom = familiehendelseDato.plusWeeks(4); var tom = familiehendelseDato.plusWeeks(5); var oppgittPeriode = oppgittPeriode(fom, tom); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode).type(Søknadstype.FØDSEL)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false).harOmsorg(false)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad( + new Søknad.Builder() + .oppgittPeriode(oppgittPeriode) + .type(Søknadstype.FØDSEL)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .farHarRett(true) + .morHarRett(false) + .harOmsorg(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); } @Test @@ -446,31 +634,51 @@ void far_etterFamiliehendelse_utenAleneomsorg_farRett_utenOmsorg() { var familiehendelseDato = LocalDate.of(2018, 1, 1); var fom = familiehendelseDato.plusWeeks(4); var tom = familiehendelseDato.plusWeeks(5); - var oppgittPeriode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FORELDREPENGER, fom, tom, null, false, null, null, null, null); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .build(); + var oppgittPeriode = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FORELDREPENGER, + fom, + tom, + null, + false, + null, + null, + null, + null); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); } @Test - void far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_førUke7_medGyldigGrunn_utenGradering() { + void + far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_førUke7_medGyldigGrunn_utenGradering() { var familiehendelseDato = LocalDate.of(2018, 1, 1); var fom = familiehendelseDato.plusWeeks(4); var tom = familiehendelseDato.plusWeeks(5); var oppgittPeriode = oppgittPeriode(fom, tom, MORS_AKTIVITET_GODKJENT); var søknad = søknad(oppgittPeriode); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false).aleneomsorg(false)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .farHarRett(true) + .morHarRett(false) + .aleneomsorg(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -478,16 +686,19 @@ void far_etterFamiliehendelse_utenAleneomsorg_farRett_utenOmsorg() { } @Test - void far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_EtterUke7_medDisponibleDager_utenGradering() { + void + far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_EtterUke7_medDisponibleDager_utenGradering() { var familiehendelseDato = LocalDate.of(2018, 1, 1); var fom = familiehendelseDato.plusWeeks(8); var tom = familiehendelseDato.plusWeeks(9); var oppgittPeriode = oppgittPeriode(fom, tom, MORS_AKTIVITET_GODKJENT); var søknad = søknad(oppgittPeriode); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -495,16 +706,21 @@ void far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_EtterUke7_medDis } @Test - void far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_førUke7_medGyldigGrunn_medGradering_avklart() { + void + far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_førUke7_medGyldigGrunn_medGradering_avklart() { var familiehendelseDato = LocalDate.of(2018, 1, 1); var fom = familiehendelseDato.plusWeeks(4); var tom = familiehendelseDato.plusWeeks(5); - var gradertPeriode = gradertPeriode(fom, tom, AktivitetIdentifikator.forFrilans(), MORS_AKTIVITET_GODKJENT); + var gradertPeriode = + gradertPeriode( + fom, tom, AktivitetIdentifikator.forFrilans(), MORS_AKTIVITET_GODKJENT); var søknad = søknad(gradertPeriode); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .build(); var regelresultat = kjørRegel(gradertPeriode, grunnlag); @@ -512,19 +728,25 @@ void far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_EtterUke7_medDis } @Test - void far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_EtterUke7_medDisponibleDager_medGradering_avklart() { + void + far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_EtterUke7_medDisponibleDager_medGradering_avklart() { var familiehendelseDato = LocalDate.of(2018, 1, 1); var fom = familiehendelseDato.plusWeeks(8); var tom = familiehendelseDato.plusWeeks(9); var aktivitetIdentifikator = ARBEIDSFORHOLD_1; - var gradertPeriode = gradertPeriode(fom, tom, aktivitetIdentifikator, MORS_AKTIVITET_GODKJENT); + var gradertPeriode = + gradertPeriode(fom, tom, aktivitetIdentifikator, MORS_AKTIVITET_GODKJENT); var kontoer = foreldrepengerKonto(100); var søknad = søknad(gradertPeriode); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) - .kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) + .kontoer(kontoer) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .build(); var regelresultat = kjørRegel(gradertPeriode, grunnlag); @@ -532,27 +754,44 @@ void far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_EtterUke7_medDis } @Test - void far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_EtterUke7_utenDisponibleDagerPåAlleAktiviteter() { + void + far_etterFamiliehendelse_utenAleneomsorg_farRett_medOmsorg_EtterUke7_utenDisponibleDagerPåAlleAktiviteter() { var familiehendelseDato = LocalDate.of(2018, 1, 1); var fom = familiehendelseDato.plusWeeks(8); var tom = familiehendelseDato.plusWeeks(9); var oppgittPeriode = oppgittPeriode(fom, tom, MORS_AKTIVITET_GODKJENT); var søknad = søknad(oppgittPeriode); - var arbeid = new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forFrilans())) - .arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forSelvstendigNæringsdrivende())); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad) - .arbeid(arbeid) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .kontoer(foreldrepengerKonto(10)) - .build(); - - var fastsattePerioder = List.of(new FastsattUttakPeriode.Builder().periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(fom.minusWeeks(1), fom.minusDays(1)) - .aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), Stønadskontotype.FORELDREPENGER, AktivitetIdentifikator.forFrilans()), - new FastsattUttakPeriodeAktivitet(new Trekkdager(5), Stønadskontotype.FORELDREPENGER, - AktivitetIdentifikator.forSelvstendigNæringsdrivende()))) - .build()); + var arbeid = + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forFrilans())) + .arbeidsforhold( + new Arbeidsforhold( + AktivitetIdentifikator.forSelvstendigNæringsdrivende())); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad) + .arbeid(arbeid) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .kontoer(foreldrepengerKonto(10)) + .build(); + + var fastsattePerioder = + List.of( + new FastsattUttakPeriode.Builder() + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(fom.minusWeeks(1), fom.minusDays(1)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + Stønadskontotype.FORELDREPENGER, + AktivitetIdentifikator.forFrilans()), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + Stønadskontotype.FORELDREPENGER, + AktivitetIdentifikator + .forSelvstendigNæringsdrivende()))) + .build()); var regelresultat = kjørRegel(oppgittPeriode, grunnlag, fastsattePerioder); assertThat(regelresultat.sluttpunktId()).isEqualTo("UT1316"); @@ -565,14 +804,17 @@ void far_etterFamiliehendelse_utenAleneomsorg_utenFarRett() { var fom = familiehendelseDato.plusWeeks(8); var tom = familiehendelseDato.plusWeeks(9); var oppgittPeriode = oppgittPeriode(fom, tom); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .kontoer(foreldrepengerKonto(100)) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(foreldrepengerKonto(100)) + .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertManuellBehandling(regelresultat, null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false); + assertManuellBehandling( + regelresultat, null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false); } @Test @@ -580,13 +822,27 @@ void far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett() { var familiehendelseDato = LocalDate.now().minusMonths(2); var fom = familiehendelseDato.plusWeeks(1); var tom = familiehendelseDato.plusWeeks(3); - var oppgittPeriode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FORELDREPENGER, fom, tom, null, true, null, null, null, null); + var oppgittPeriode = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FORELDREPENGER, + fom, + tom, + null, + true, + null, + null, + null, + null); var kontoer = foreldrepengerOgFlerbarnsdagerKonto(40, 17); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -594,18 +850,25 @@ void far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett() { } @Test - void far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_medDisponibleDager_medGradering_avklart() { + void + far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_medDisponibleDager_medGradering_avklart() { var familiehendelseDato = LocalDate.now().minusMonths(2); var fom = familiehendelseDato.plusWeeks(1); var tom = familiehendelseDato.plusWeeks(3); var aktivitetIdentifikator = AktivitetIdentifikator.forFrilans(); - var gradertPeriode = gradertPeriode(fom, tom, aktivitetIdentifikator, null, true, MORS_AKTIVITET_GODKJENT); + var gradertPeriode = + gradertPeriode( + fom, tom, aktivitetIdentifikator, null, true, MORS_AKTIVITET_GODKJENT); var kontoer = foreldrepengerOgFlerbarnsdagerKonto(40, 17); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(gradertPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(gradertPeriode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .build(); var regelresultat = kjørRegel(gradertPeriode, grunnlag); @@ -617,13 +880,27 @@ void far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_noenDisponi var familiehendelseDato = LocalDate.now().minusMonths(2); var fom = familiehendelseDato.plusWeeks(1); var tom = familiehendelseDato.plusWeeks(3); - var oppgittPeriode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FORELDREPENGER, fom, tom, null, true, null, null, null, null); + var oppgittPeriode = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FORELDREPENGER, + fom, + tom, + null, + true, + null, + null, + null, + null); var kontoer = foreldrepengerOgFlerbarnsdagerKonto(100, 0); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -636,18 +913,38 @@ void far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_noenDisponi var familiehendelseDato = LocalDate.now().minusMonths(2); var fom = familiehendelseDato.plusWeeks(8); var tom = familiehendelseDato.plusWeeks(10); - var oppgittPeriode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FORELDREPENGER, fom, tom, null, false, familiehendelseDato, - familiehendelseDato, MorsAktivitet.UFØRE, null); + var oppgittPeriode = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FORELDREPENGER, + fom, + tom, + null, + false, + familiehendelseDato, + familiehendelseDato, + MorsAktivitet.UFØRE, + null); var kontoer = foreldrepengerKonto(40).minsterettDager(10); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false).morUføretrygd(true)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .farHarRett(true) + .morHarRett(false) + .morUføretrygd(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertInnvilget(regelresultat, InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, "UT1317"); + assertInnvilget( + regelresultat, + InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + "UT1317"); } @Test @@ -655,56 +952,122 @@ void far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_noenDisponi var familiehendelseDato = LocalDate.now().minusMonths(2); var fom = familiehendelseDato.plusWeeks(8); var tom = familiehendelseDato.plusWeeks(10); - var oppgittPeriode = OppgittPeriode.forGradering(Stønadskontotype.FORELDREPENGER, fom, tom, BigDecimal.TEN, SamtidigUttaksprosent.ZERO, false, - Set.of(ARBEIDSFORHOLD_1), familiehendelseDato, familiehendelseDato, MorsAktivitet.UFØRE, null); + var oppgittPeriode = + OppgittPeriode.forGradering( + Stønadskontotype.FORELDREPENGER, + fom, + tom, + BigDecimal.TEN, + SamtidigUttaksprosent.ZERO, + false, + Set.of(ARBEIDSFORHOLD_1), + familiehendelseDato, + familiehendelseDato, + MorsAktivitet.UFØRE, + null); var kontoer = foreldrepengerKonto(40).minsterettDager(10); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false).morUføretrygd(true)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .farHarRett(true) + .morHarRett(false) + .morUføretrygd(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertInnvilget(regelresultat, InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, "UT1318"); + assertInnvilget( + regelresultat, + InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + "UT1318"); } @Test - void far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_morUføretrygdet_ikkeFrittUttak() { + void + far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_morUføretrygdet_ikkeFrittUttak() { var familiehendelseDato = LocalDate.now().minusMonths(2); var fom = familiehendelseDato.plusWeeks(8); var tom = familiehendelseDato.plusWeeks(10); - var oppgittPeriode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FORELDREPENGER, fom, tom, null, false, familiehendelseDato, - familiehendelseDato, MorsAktivitet.UFØRE, null); + var oppgittPeriode = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FORELDREPENGER, + fom, + tom, + null, + false, + familiehendelseDato, + familiehendelseDato, + MorsAktivitet.UFØRE, + null); var kontoer = foreldrepengerKonto(40).utenAktivitetskravDager(10); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false).morUføretrygd(true)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .farHarRett(true) + .morHarRett(false) + .morUføretrygd(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertInnvilget(regelresultat, InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, "UT1317"); + assertInnvilget( + regelresultat, + InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + "UT1317"); } @Test - void far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_morUføretrygdetGradert_ikkeFrittUttak() { + void + far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_morUføretrygdetGradert_ikkeFrittUttak() { var familiehendelseDato = LocalDate.now().minusMonths(2); var fom = familiehendelseDato.plusWeeks(8); var tom = familiehendelseDato.plusWeeks(10); - var oppgittPeriode = OppgittPeriode.forGradering(Stønadskontotype.FORELDREPENGER, fom, tom, BigDecimal.TEN, SamtidigUttaksprosent.ZERO, false, - Set.of(ARBEIDSFORHOLD_1), familiehendelseDato, familiehendelseDato, MorsAktivitet.UFØRE, null); + var oppgittPeriode = + OppgittPeriode.forGradering( + Stønadskontotype.FORELDREPENGER, + fom, + tom, + BigDecimal.TEN, + SamtidigUttaksprosent.ZERO, + false, + Set.of(ARBEIDSFORHOLD_1), + familiehendelseDato, + familiehendelseDato, + MorsAktivitet.UFØRE, + null); var kontoer = foreldrepengerKonto(40).utenAktivitetskravDager(10); - var grunnlag = grunnlagFar(familiehendelseDato).søknad(søknad(oppgittPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false).morUføretrygd(true)) - .build(); + var grunnlag = + grunnlagFar(familiehendelseDato) + .søknad(søknad(oppgittPeriode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .farHarRett(true) + .morHarRett(false) + .morUføretrygd(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertInnvilget(regelresultat, InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, "UT1318"); + assertInnvilget( + regelresultat, + InnvilgetÅrsak.GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + "UT1318"); } @Test @@ -712,11 +1075,23 @@ void far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_noenDisponi var fødselsdato = LocalDate.of(2022, 10, 1); var oppgittPeriode = oppgittPeriode(fødselsdato, fødselsdato.plusWeeks(1).plusDays(1)); - var grunnlag = grunnlagFar(fødselsdato).behandling(new Behandling.Builder().søkerErMor(false).kreverSammenhengendeUttak(false)) - .søknad(søknad(oppgittPeriode)) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(false).farHarRett(true).aleneomsorg(false)) - .kontoer(foreldrepengerKonto(40 * 5).farUttakRundtFødselDager(10).minsterettDager(10)) - .build(); + var grunnlag = + grunnlagFar(fødselsdato) + .behandling( + new Behandling.Builder() + .søkerErMor(false) + .kreverSammenhengendeUttak(false)) + .søknad(søknad(oppgittPeriode)) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .morHarRett(false) + .farHarRett(true) + .aleneomsorg(false)) + .kontoer( + foreldrepengerKonto(40 * 5) + .farUttakRundtFødselDager(10) + .minsterettDager(10)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -728,11 +1103,23 @@ void far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_noenDisponi var fødselsdato = LocalDate.of(2022, 10, 1); var oppgittPeriode = oppgittPeriode(fødselsdato.minusDays(2), fødselsdato.minusDays(1)); - var grunnlag = grunnlagFar(fødselsdato).behandling(new Behandling.Builder().søkerErMor(false).kreverSammenhengendeUttak(false)) - .søknad(søknad(oppgittPeriode)) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(false).farHarRett(true).aleneomsorg(false)) - .kontoer(foreldrepengerKonto(40 * 5).farUttakRundtFødselDager(10).minsterettDager(10)) - .build(); + var grunnlag = + grunnlagFar(fødselsdato) + .behandling( + new Behandling.Builder() + .søkerErMor(false) + .kreverSammenhengendeUttak(false)) + .søknad(søknad(oppgittPeriode)) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .morHarRett(false) + .farHarRett(true) + .aleneomsorg(false)) + .kontoer( + foreldrepengerKonto(40 * 5) + .farUttakRundtFødselDager(10) + .minsterettDager(10)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -743,26 +1130,43 @@ void far_etterFamiliehendelse_utenAleneomsorg_medFarRett_utenMorRett_noenDisponi void bfhr_rundt_termin_blir_innvilget() { var termindato = LocalDate.of(2022, 10, 1); - var oppgittPeriode = oppgittPeriode(termindato.minusDays(3), termindato.plusWeeks(1).plusDays(1)); - var grunnlag = grunnlagFar(termindato).behandling(new Behandling.Builder().søkerErMor(false).kreverSammenhengendeUttak(false)) - .søknad(søknad(oppgittPeriode)) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(false).farHarRett(true).aleneomsorg(false)) - .datoer(new Datoer.Builder().termin(termindato)) - .kontoer(foreldrepengerKonto(40 * 5).farUttakRundtFødselDager(10).minsterettDager(10)) - .build(); + var oppgittPeriode = + oppgittPeriode(termindato.minusDays(3), termindato.plusWeeks(1).plusDays(1)); + var grunnlag = + grunnlagFar(termindato) + .behandling( + new Behandling.Builder() + .søkerErMor(false) + .kreverSammenhengendeUttak(false)) + .søknad(søknad(oppgittPeriode)) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .morHarRett(false) + .farHarRett(true) + .aleneomsorg(false)) + .datoer(new Datoer.Builder().termin(termindato)) + .kontoer( + foreldrepengerKonto(40 * 5) + .farUttakRundtFødselDager(10) + .minsterettDager(10)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); } - private void assertInnvilget(FastsettePerioderRegelresultat regelresultat, InnvilgetÅrsak innvilgetÅrsak) { + private void assertInnvilget( + FastsettePerioderRegelresultat regelresultat, InnvilgetÅrsak innvilgetÅrsak) { assertThat(regelresultat.oppfylt()).isTrue(); assertThat(regelresultat.skalUtbetale()).isTrue(); assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(innvilgetÅrsak); } - private void assertInnvilget(FastsettePerioderRegelresultat regelresultat, InnvilgetÅrsak innvilgetÅrsak, String sluttpunktId) { + private void assertInnvilget( + FastsettePerioderRegelresultat regelresultat, + InnvilgetÅrsak innvilgetÅrsak, + String sluttpunktId) { assertInnvilget(regelresultat, innvilgetÅrsak); assertThat(regelresultat.sluttpunktId()).isEqualTo((sluttpunktId)); } @@ -777,20 +1181,33 @@ private RegelGrunnlag.Builder grunnlagFar(LocalDate familiehendelseDato) { private RegelGrunnlag.Builder grunnlag(LocalDate familiehendelseDato, boolean søkerMor) { return RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(familiehendelseDato)) - .behandling(new Behandling.Builder().søkerErMor(søkerMor)) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + .datoer(new Datoer.Builder().fødsel(familiehendelseDato)) + .behandling(new Behandling.Builder().søkerErMor(søkerMor)) + .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } private Kontoer.Builder foreldrepengerKonto(int trekkdager) { - return new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FORELDREPENGER).trekkdager(trekkdager)); + return new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FORELDREPENGER) + .trekkdager(trekkdager)); } - private Kontoer.Builder foreldrepengerOgFlerbarnsdagerKonto(int foreldrepengerTrekkdager, int flerbarnsdagerTrekkdager) { - return new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FORELDREPENGER).trekkdager(foreldrepengerTrekkdager)) - .flerbarnsdager(flerbarnsdagerTrekkdager); + private Kontoer.Builder foreldrepengerOgFlerbarnsdagerKonto( + int foreldrepengerTrekkdager, int flerbarnsdagerTrekkdager) { + return new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FORELDREPENGER) + .trekkdager(foreldrepengerTrekkdager)) + .flerbarnsdager(flerbarnsdagerTrekkdager); } private Søknad.Builder søknad(OppgittPeriode uttakPeriode) { @@ -801,7 +1218,9 @@ private OppgittPeriode oppgittPeriode(LocalDate fom, LocalDate tom) { return oppgittPeriode(fom, tom, null); } - private OppgittPeriode oppgittPeriode(LocalDate fom, LocalDate tom, DokumentasjonVurdering dokumentasjonVurdering) { - return DelRegelTestUtil.oppgittPeriode(Stønadskontotype.FORELDREPENGER, fom, tom, dokumentasjonVurdering); + private OppgittPeriode oppgittPeriode( + LocalDate fom, LocalDate tom, DokumentasjonVurdering dokumentasjonVurdering) { + return DelRegelTestUtil.oppgittPeriode( + Stønadskontotype.FORELDREPENGER, fom, tom, dokumentasjonVurdering); } } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerF\303\270rF\303\270dselDelregelTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerF\303\270rF\303\270dselDelregelTest.java" index 12b5365f..d7600cad 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerF\303\270rF\303\270dselDelregelTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerF\303\270rF\303\270dselDelregelTest.java" @@ -7,9 +7,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Behandling; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Datoer; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Inngangsvilkår; @@ -26,29 +23,45 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.PeriodeResultatÅrsak; +import org.junit.jupiter.api.Test; class ForeldrepengerFørFødselDelregelTest { @Test void UT1070_mor_utenFor3UkerFørFødsel() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var uttakPeriode = oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, familiehendelseDato.plusWeeks(8), - familiehendelseDato.plusWeeks(9)); + var uttakPeriode = + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + familiehendelseDato.plusWeeks(8), + familiehendelseDato.plusWeeks(9)); var kontoer = kontoer(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, 100); - var grunnlag = basicGrunnlagMor(familiehendelseDato).kontoer(kontoer).søknad(søknad(uttakPeriode)).build(); + var grunnlag = + basicGrunnlagMor(familiehendelseDato) + .kontoer(kontoer) + .søknad(søknad(uttakPeriode)) + .build(); var regelresultat = kjørRegel(uttakPeriode, grunnlag); - assertManuell(regelresultat, null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false); + assertManuell( + regelresultat, null, Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO, true, false); } @Test void UT1071_mor_innenFor3UkerFørFødsel_ikkeManglendeSøktPeriode_ikkeGradering() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var uttakPeriode = oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, familiehendelseDato.minusWeeks(2), - familiehendelseDato.minusWeeks(1)); + var uttakPeriode = + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + familiehendelseDato.minusWeeks(2), + familiehendelseDato.minusWeeks(1)); var kontoer = kontoer(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, 100); - var grunnlag = basicGrunnlagMor(familiehendelseDato).kontoer(kontoer).søknad(søknad(uttakPeriode)).build(); + var grunnlag = + basicGrunnlagMor(familiehendelseDato) + .kontoer(kontoer) + .søknad(søknad(uttakPeriode)) + .build(); var regelresultat = kjørRegel(uttakPeriode, grunnlag); @@ -58,53 +71,83 @@ class ForeldrepengerFørFødselDelregelTest { @Test void UT1072_mor_innenFor3UkerFørFødsel_ikkeManglendeSøktPeriode_gradering() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var uttakPeriode = gradertPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, familiehendelseDato.minusWeeks(2), - familiehendelseDato.minusWeeks(1)); + var uttakPeriode = + gradertPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + familiehendelseDato.minusWeeks(2), + familiehendelseDato.minusWeeks(1)); var kontoer = kontoer(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, 100); - var grunnlag = basicGrunnlagMor(familiehendelseDato).kontoer(kontoer).søknad(søknad(uttakPeriode)).build(); + var grunnlag = + basicGrunnlagMor(familiehendelseDato) + .kontoer(kontoer) + .søknad(søknad(uttakPeriode)) + .build(); var regelresultat = kjørRegel(uttakPeriode, grunnlag); assertInnvilget(regelresultat, InnvilgetÅrsak.FORELDREPENGER_FØR_FØDSEL); - assertThat(regelresultat.getGraderingIkkeInnvilgetÅrsak()).isEqualTo(GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); + assertThat(regelresultat.getGraderingIkkeInnvilgetÅrsak()) + .isEqualTo(GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); } @Test void UT1073_mor_innenFor3UkerFørFødsel_manglendeSøktPeriode() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var msp = manglendeSøktPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, familiehendelseDato.minusWeeks(2), - familiehendelseDato.minusWeeks(1)); + var msp = + manglendeSøktPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + familiehendelseDato.minusWeeks(2), + familiehendelseDato.minusWeeks(1)); var kontoer = kontoer(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, 100); - var grunnlag = basicGrunnlagMor(familiehendelseDato).kontoer(kontoer).søknad(søknad(msp)).build(); + var grunnlag = + basicGrunnlagMor(familiehendelseDato).kontoer(kontoer).søknad(søknad(msp)).build(); var regelresultat = kjørRegel(msp, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_FØR_FØDSEL); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_FØR_FØDSEL); } @Test void UT1076_far_søker_fpff() { var familiehendelseDato = LocalDate.of(2018, 1, 1); - var uttakPeriode = oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, familiehendelseDato.minusWeeks(2), - familiehendelseDato.minusWeeks(1)); - var kontoer = new Kontoer.Builder().konto(konto(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, 100)) - //Må ha ellers å faller vi ut på FP_VK 10.5.1 - SjekkOmTomForAlleSineKontoer - .konto(konto(Stønadskontotype.FEDREKVOTE, 100)); - var grunnlag = basicGrunnlag(familiehendelseDato).kontoer(kontoer).behandling(søkerErFarBehandling()).søknad(søknad(uttakPeriode)).build(); + var uttakPeriode = + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + familiehendelseDato.minusWeeks(2), + familiehendelseDato.minusWeeks(1)); + var kontoer = + new Kontoer.Builder() + .konto(konto(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, 100)) + // Må ha ellers å faller vi ut på FP_VK 10.5.1 - + // SjekkOmTomForAlleSineKontoer + .konto(konto(Stønadskontotype.FEDREKVOTE, 100)); + var grunnlag = + basicGrunnlag(familiehendelseDato) + .kontoer(kontoer) + .behandling(søkerErFarBehandling()) + .søknad(søknad(uttakPeriode)) + .build(); var regelresultat = kjørRegel(uttakPeriode, grunnlag); - assertManuell(regelresultat, IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL, false, false); + assertManuell( + regelresultat, + IkkeOppfyltÅrsak.FAR_PERIODE_FØR_FØDSEL, + Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL, + false, + false); } private Kontoer.Builder kontoer(Stønadskontotype stønadskontotype, int trekkdager) { return new Kontoer.Builder().konto(konto(stønadskontotype, trekkdager)); } - private OppgittPeriode manglendeSøktPeriode(Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { + private OppgittPeriode manglendeSøktPeriode( + Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { return OppgittPeriode.forManglendeSøkt(stønadskontotype, fom, tom); } @@ -120,17 +163,20 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) return new Behandling.Builder().søkerErMor(false); } - private void assertInnvilget(FastsettePerioderRegelresultat regelresultat, PeriodeResultatÅrsak innvilgetPeriodeResultatÅrsak) { + private void assertInnvilget( + FastsettePerioderRegelresultat regelresultat, + PeriodeResultatÅrsak innvilgetPeriodeResultatÅrsak) { assertThat(regelresultat.oppfylt()).isTrue(); assertThat(regelresultat.skalUtbetale()).isTrue(); assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(innvilgetPeriodeResultatÅrsak); } - private void assertManuell(FastsettePerioderRegelresultat regelresultat, - PeriodeResultatÅrsak periodeResultatÅrsak, - Manuellbehandlingårsak manuellbehandlingårsak, - boolean trekkDager, - boolean utbetal) { + private void assertManuell( + FastsettePerioderRegelresultat regelresultat, + PeriodeResultatÅrsak periodeResultatÅrsak, + Manuellbehandlingårsak manuellbehandlingårsak, + boolean trekkDager, + boolean utbetal) { assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.skalUtbetale()).isEqualTo(utbetal); assertThat(regelresultat.trekkDagerFraSaldo()).isEqualTo(trekkDager); @@ -140,12 +186,18 @@ private void assertManuell(FastsettePerioderRegelresultat regelresultat, private RegelGrunnlag.Builder basicGrunnlag(LocalDate familiehendelseDato) { return create().datoer(new Datoer.Builder().fødsel(familiehendelseDato)) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).farHarRett(true).morHarRett(true)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + .rettOgOmsorg( + new RettOgOmsorg.Builder().samtykke(true).farHarRett(true).morHarRett(true)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } private RegelGrunnlag.Builder basicGrunnlagMor(LocalDate familiehendelseDato) { - return basicGrunnlag(familiehendelseDato).behandling(new Behandling.Builder().søkerErMor(true)); + return basicGrunnlag(familiehendelseDato) + .behandling(new Behandling.Builder().søkerErMor(true)); } } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerF\303\270rF\303\270dselOrkestreringTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerF\303\270rF\303\270dselOrkestreringTest.java" index d0a88903..437a7e95 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerF\303\270rF\303\270dselOrkestreringTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ForeldrepengerF\303\270rF\303\270dselOrkestreringTest.java" @@ -3,57 +3,81 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Perioderesultattype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; class ForeldrepengerFørFødselOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @Test void foreldrepengerFørFødsel_happy_case() { var fødselsdato = LocalDate.of(2018, 1, 1); - var fpff = oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)); - var mødrekvote = oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)); + var fpff = + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)); + var mødrekvote = + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)); + var grunnlag = + basicGrunnlagMor(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(2); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(15)); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(15)); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(30)); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(30)); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); } @Test void foreldrepengerFørFødsel_far_søker_fpff() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(1); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); - assertThat(perioder.get(0).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.FAR_SØKER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); } @@ -61,34 +85,51 @@ class ForeldrepengerFørFødselOrkestreringTest extends FastsettePerioderRegelOr @Test void foreldrepengerFørFødsel_for_lang_fpff_periode_før_fødsel() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(4), fødselsdato.minusDays(1)))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(4), + fødselsdato.minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); - assertThat(perioder.get(0).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(4)); - assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusWeeks(3).minusDays(1)); + assertThat(perioder.get(0).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.minusWeeks(3).minusDays(1)); assertThat(perioder.get(0).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(0).evalueringResultat()).isNotNull(); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); assertThat(perioder.get(1).uttakPeriode().getManuellbehandlingårsak()).isNull(); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); assertThat(perioder.get(1).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(1).evalueringResultat()).isNotNull(); - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(3)); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(3)); assertThat(perioder.get(2).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(2).evalueringResultat()).isNotNull(); } @@ -96,35 +137,54 @@ class ForeldrepengerFørFødselOrkestreringTest extends FastsettePerioderRegelOr @Test void foreldrepengerFørFødsel_for_lang_fpff_periode_etter_fødsel() { var fødselsdato = LocalDate.of(2018, 1, 1); - var fpff = oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.plusWeeks(2).minusDays(1)); - var mødrekvote = oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato.plusWeeks(2), fødselsdato.plusWeeks(6).minusDays(1)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)); + var fpff = + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.plusWeeks(2).minusDays(1)); + var mødrekvote = + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato.plusWeeks(2), + fødselsdato.plusWeeks(6).minusDays(1)); + var grunnlag = + basicGrunnlagMor(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); assertThat(perioder.get(0).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(0).evalueringResultat()).isNotNull(); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); - assertThat(perioder.get(1).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(1).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(2).minusDays(1)); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(2).minusDays(1)); assertThat(perioder.get(1).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(1).evalueringResultat()).isNotNull(); - //Mødrekvoten blir satt til manuell pga forrige periode ble manuell. Ingen årsak eller regelvurdering. - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + // Mødrekvoten blir satt til manuell pga forrige periode ble manuell. Ingen årsak eller + // regelvurdering. + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); assertThat(perioder.get(2).uttakPeriode().getManuellbehandlingårsak()).isNull(); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(2)); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); assertThat(perioder.get(2).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(2).evalueringResultat()).isNotNull(); } @@ -132,34 +192,52 @@ class ForeldrepengerFørFødselOrkestreringTest extends FastsettePerioderRegelOr @Test void foreldrepengerFørFødsel_for_kort_fpff_periode_slutter_for_tidlig() { var fødselsdato = LocalDate.of(2018, 3, 1); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3).minusDays(1), fødselsdato.minusWeeks(2)))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3).minusDays(1), + fødselsdato.minusWeeks(2)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); - assertThat(perioder.get(0).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); - assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3).minusDays(1)); - assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusWeeks(3).minusDays(1)); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); + assertThat(perioder.get(0).uttakPeriode().getFom()) + .isEqualTo(fødselsdato.minusWeeks(3).minusDays(1)); + assertThat(perioder.get(0).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.minusWeeks(3).minusDays(1)); assertThat(perioder.get(0).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(0).evalueringResultat()).isNotNull(); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); assertThat(perioder.get(1).uttakPeriode().getManuellbehandlingårsak()).isNull(); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusWeeks(2)); assertThat(perioder.get(1).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(1).evalueringResultat()).isNotNull(); - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); assertThat(perioder.get(2).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(2).evalueringResultat()).isNotNull(); } @@ -167,27 +245,43 @@ class ForeldrepengerFørFødselOrkestreringTest extends FastsettePerioderRegelOr @Test void foreldrepengerFørFødsel_for_kort_fpff_starter_for_sent() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(1), fødselsdato.minusDays(1)))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(1), + fødselsdato.minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(2); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.FORELDREPENGER_FØR_FØDSEL); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(1)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(5)); assertThat(perioder.get(0).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(0).evalueringResultat()).isNotNull(); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(3)); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(30)); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(3)); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(30)); assertThat(perioder.get(1).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(1).evalueringResultat()).isNotNull(); } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/GraderingOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/GraderingOrkestreringTest.java index 2326bf7e..b5791f99 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/GraderingOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/GraderingOrkestreringTest.java @@ -19,9 +19,6 @@ import java.time.LocalDate; import java.util.List; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Adopsjon; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; @@ -45,16 +42,20 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Vedtak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.GraderingIkkeInnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; +import org.junit.jupiter.api.Test; class GraderingOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { - protected final FastsettePerioderRegelOrkestrering fastsettePerioderRegelOrkestrering = new FastsettePerioderRegelOrkestrering(); + protected final FastsettePerioderRegelOrkestrering fastsettePerioderRegelOrkestrering = + new FastsettePerioderRegelOrkestrering(); private RegelGrunnlag.Builder leggPåKvoter(RegelGrunnlag.Builder builder) { - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(MØDREKVOTE, 50)) - .konto(konto(FEDREKVOTE, 50)) - .konto(konto(FELLESPERIODE, 130)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 50)) + .konto(konto(FEDREKVOTE, 50)) + .konto(konto(FELLESPERIODE, 130)); return builder.kontoer(kontoer); } @@ -64,36 +65,54 @@ class GraderingOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBa var graderingFom = fødselsdato.plusWeeks(10); var graderingTom = fødselsdato.plusWeeks(20).minusDays(1); var arbeidsprosent = BigDecimal.TEN; - var grunnlag = basicGrunnlag(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, graderingFom.minusDays(1))) - .oppgittPeriode(gradertoppgittPeriode(FELLESPERIODE, graderingFom, graderingTom, arbeidsprosent))).build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + graderingFom.minusDays(1))) + .oppgittPeriode( + gradertoppgittPeriode( + FELLESPERIODE, + graderingFom, + graderingTom, + arbeidsprosent))) + .build(); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - //3 uker før fødsel - innvilges + // 3 uker før fødsel - innvilges var uttakPeriode = resultat.get(0).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //6 første uker mødrekvote innvilges + // 6 første uker mødrekvote innvilges uttakPeriode = resultat.get(1).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //4 neste uker mødrekvote innvilges + // 4 neste uker mødrekvote innvilges uttakPeriode = resultat.get(2).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(6)); assertThat(uttakPeriode.getTom()).isEqualTo(graderingFom.minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //4 neste uker mødrekvote innvilges og gradering beholdes + // 4 neste uker mødrekvote innvilges og gradering beholdes uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(graderingFom); assertThat(uttakPeriode.getTom()).isEqualTo(graderingTom); @@ -104,76 +123,143 @@ class GraderingOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBa @Test void når_graderingsperiode_går_tom_skal_perioden_dras_til_søkers_fordel() { - var kontoer = new Kontoer.Builder().flerbarnsdager(17 * 5).konto(konto(FORELDREPENGER, 57 * 5)); - var søknadsperiode1 = oppgittPeriode(FORELDREPENGER, LocalDate.of(2019, 1, 23), LocalDate.of(2019, 3, 1)); - //Søker vil gå tom for dager i løpet av 19. sept, derfor får søker en ekstra trekkdager (Søkers fordel) - var søknadsperiode2 = gradertoppgittPeriode(FORELDREPENGER, LocalDate.of(2019, 3, 4), LocalDate.of(2019, 9, 19), BigDecimal.valueOf(60)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(LocalDate.of(2019, 1, 23))) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(false).aleneomsorg(true)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(søknadsperiode1).oppgittPeriode(søknadsperiode2)) - .build(); + var kontoer = + new Kontoer.Builder().flerbarnsdager(17 * 5).konto(konto(FORELDREPENGER, 57 * 5)); + var søknadsperiode1 = + oppgittPeriode(FORELDREPENGER, LocalDate.of(2019, 1, 23), LocalDate.of(2019, 3, 1)); + // Søker vil gå tom for dager i løpet av 19. sept, derfor får søker en ekstra trekkdager + // (Søkers fordel) + var søknadsperiode2 = + gradertoppgittPeriode( + FORELDREPENGER, + LocalDate.of(2019, 3, 4), + LocalDate.of(2019, 9, 19), + BigDecimal.valueOf(60)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(LocalDate.of(2019, 1, 23))) + .rettOgOmsorg( + new RettOgOmsorg.Builder().morHarRett(false).aleneomsorg(true)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(søknadsperiode1) + .oppgittPeriode(søknadsperiode2)) + .build(); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test - void samtidig_uttaksprosent_skal_settes_til_100_minus_gradering_arbeidstidsprosent_hvis_samtidig_uttak_og_gradering() { + void + samtidig_uttaksprosent_skal_settes_til_100_minus_gradering_arbeidstidsprosent_hvis_samtidig_uttak_og_gradering() { var fødselsdato = LocalDate.of(2018, 1, 1); var grunnlag = RegelGrunnlagTestBuilder.create(); leggPåKvoter(grunnlag); var arbeidstidsprosent = BigDecimal.TEN; var samtidigUttaksprosent = new SamtidigUttaksprosent(50); - var gradertMedSamtidigUttak = OppgittPeriode.forGradering(FELLESPERIODE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), - arbeidstidsprosent, samtidigUttaksprosent, false, Set.of(ARBEIDSFORHOLD_1), null, null, null, null); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(MØDREKVOTE, 50)) - .konto(konto(FEDREKVOTE, 50)) - .konto(konto(FELLESPERIODE, 130)); + var gradertMedSamtidigUttak = + OppgittPeriode.forGradering( + FELLESPERIODE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + arbeidstidsprosent, + samtidigUttaksprosent, + false, + Set.of(ARBEIDSFORHOLD_1), + null, + null, + null, + null); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 50)) + .konto(konto(FEDREKVOTE, 50)) + .konto(konto(FELLESPERIODE, 130)); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode(gradertMedSamtidigUttak)) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)).arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))); + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode(gradertMedSamtidigUttak)) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)) + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))); var fastsettePeriodeGrunnlag = grunnlag.build(); var resultat = fastsettPerioder(fastsettePeriodeGrunnlag); assertThat(resultat.get(2).uttakPeriode().erSamtidigUttak()).isTrue(); - assertThat(resultat.get(2).uttakPeriode().getSamtidigUttaksprosent()).isEqualTo(SamtidigUttaksprosent.HUNDRED.subtract(arbeidstidsprosent)); + assertThat(resultat.get(2).uttakPeriode().getSamtidigUttaksprosent()) + .isEqualTo(SamtidigUttaksprosent.HUNDRED.subtract(arbeidstidsprosent)); } @Test - void uttak_på_to_arbeidsforhold_hvor_den_ene_går_tom_for_fellesperiode_skal_føre_0_utbetaling_og_0_trekkdager_for_den_som_går_tom() { + void + uttak_på_to_arbeidsforhold_hvor_den_ene_går_tom_for_fellesperiode_skal_føre_0_utbetaling_og_0_trekkdager_for_den_som_går_tom() { var fødselsdato = LocalDate.of(2018, 1, 1); var prosent50 = new BigDecimal("50.00"); var grunnlag = RegelGrunnlagTestBuilder.create(); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)) - .konto(konto(MØDREKVOTE, 15 * 5)) - .konto(konto(FEDREKVOTE, 15 * 5)) - .konto(konto(FELLESPERIODE, 16 * 5)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)) + .konto(konto(MØDREKVOTE, 15 * 5)) + .konto(konto(FEDREKVOTE, 15 * 5)) + .konto(konto(FELLESPERIODE, 16 * 5)); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(15).minusDays(1))) - .oppgittPeriode(gradertoppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(33).minusDays(1), prosent50, - Set.of(ARBEIDSFORHOLD_1)))) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)).arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))); + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(15).minusDays(1))) + .oppgittPeriode( + gradertoppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(33).minusDays(1), + prosent50, + Set.of(ARBEIDSFORHOLD_1)))) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)) + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))); var fastsettePeriodeGrunnlag = grunnlag.build(); var resultat = fastsettPerioder(fastsettePeriodeGrunnlag); - assertThat(resultat).hasSize(5); assertKontoOgResultat(resultat.get(0), FORELDREPENGER_FØR_FØDSEL, INNVILGET); assertTrekkdager(resultat.get(0), ARBEIDSFORHOLD_1, new Trekkdager(3 * 5)); @@ -190,31 +276,53 @@ void samtidig_uttaksprosent_skal_settes_til_100_minus_gradering_arbeidstidsprose assertTrekkdager(resultat.get(3), ARBEIDSFORHOLD_2, new Trekkdager(16 * 5)); assertKontoOgResultat(resultat.get(4), FELLESPERIODE, INNVILGET); assertTrekkdager(resultat.get(4), ARBEIDSFORHOLD_1, new Trekkdager((2 * 5) / 2)); - assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD_2)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD_2)) + .isEqualTo(Utbetalingsgrad.ZERO); assertTrekkdager(resultat.get(4), ARBEIDSFORHOLD_2, Trekkdager.ZERO); } @Test - void uttak_på_to_arbeidsforhold_hvor_den_ene_går_tom_for_mødrekvote_skal_føre_0_utbetaling_og_0_trekkdager_for_den_som_går_tom() { + void + uttak_på_to_arbeidsforhold_hvor_den_ene_går_tom_for_mødrekvote_skal_føre_0_utbetaling_og_0_trekkdager_for_den_som_går_tom() { var fødselsdato = LocalDate.of(2018, 1, 1); var prosent50 = new BigDecimal("50.00"); var grunnlag = RegelGrunnlagTestBuilder.create(); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)) - .konto(konto(MØDREKVOTE, 15 * 5)) - .konto(konto(FEDREKVOTE, 15 * 5)) - .konto(konto(FELLESPERIODE, 16 * 5)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)) + .konto(konto(MØDREKVOTE, 15 * 5)) + .konto(konto(FEDREKVOTE, 15 * 5)) + .konto(konto(FELLESPERIODE, 16 * 5)); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)).arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))) - .kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode(gradertoppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(33).minusDays(1), prosent50, - Set.of(ARBEIDSFORHOLD_1)))); + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)) + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))) + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + gradertoppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(33).minusDays(1), + prosent50, + Set.of(ARBEIDSFORHOLD_1)))); var fastsettePeriodeGrunnlag = grunnlag.build(); - var resultat = fastsettePerioderRegelOrkestrering.fastsettePerioder(fastsettePeriodeGrunnlag); - + var resultat = + fastsettePerioderRegelOrkestrering.fastsettePerioder(fastsettePeriodeGrunnlag); assertThat(resultat).hasSize(5); assertKontoOgResultat(resultat.get(0), FORELDREPENGER_FØR_FØDSEL, INNVILGET); @@ -224,79 +332,134 @@ void samtidig_uttaksprosent_skal_settes_til_100_minus_gradering_arbeidstidsprose assertTrekkdager(resultat.get(1), ARBEIDSFORHOLD_1, new Trekkdager(6 * 5)); assertTrekkdager(resultat.get(1), ARBEIDSFORHOLD_2, new Trekkdager(6 * 5)); assertKontoOgResultat(resultat.get(2), MØDREKVOTE, INNVILGET); - assertTrekkdager(resultat.get(2), ARBEIDSFORHOLD_1, new Trekkdager(new BigDecimal("22.50"))); + assertTrekkdager( + resultat.get(2), ARBEIDSFORHOLD_1, new Trekkdager(new BigDecimal("22.50"))); assertTrekkdager(resultat.get(2), ARBEIDSFORHOLD_2, new Trekkdager(9 * 5)); assertKontoOgResultat(resultat.get(3), MØDREKVOTE, INNVILGET); assertThat(resultat.get(3).uttakPeriode().getGraderingIkkeInnvilgetÅrsak()).isNull(); - assertTrekkdager(resultat.get(3), ARBEIDSFORHOLD_1, new Trekkdager(new BigDecimal("22.50"))); + assertTrekkdager( + resultat.get(3), ARBEIDSFORHOLD_1, new Trekkdager(new BigDecimal("22.50"))); assertTrekkdager(resultat.get(3), ARBEIDSFORHOLD_2, Trekkdager.ZERO); assertKontoOgResultat(resultat.get(4), MØDREKVOTE, MANUELL_BEHANDLING); - assertTrekkdager(resultat.get(4), ARBEIDSFORHOLD_1, new Trekkdager(new BigDecimal("22.50"))); - assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD_2)).isEqualTo(Utbetalingsgrad.ZERO); + assertTrekkdager( + resultat.get(4), ARBEIDSFORHOLD_1, new Trekkdager(new BigDecimal("22.50"))); + assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD_2)) + .isEqualTo(Utbetalingsgrad.ZERO); assertTrekkdager(resultat.get(4), ARBEIDSFORHOLD_2, new Trekkdager(45)); } - private void assertKontoOgResultat(FastsettePeriodeResultat fastsettePeriodeResultat, - Stønadskontotype stønadskontotype, - Perioderesultattype perioderesultattype) { - assertThat(fastsettePeriodeResultat.uttakPeriode().getStønadskontotype()).isEqualTo(stønadskontotype); - assertThat(fastsettePeriodeResultat.uttakPeriode().getPerioderesultattype()).isEqualTo(perioderesultattype); + private void assertKontoOgResultat( + FastsettePeriodeResultat fastsettePeriodeResultat, + Stønadskontotype stønadskontotype, + Perioderesultattype perioderesultattype) { + assertThat(fastsettePeriodeResultat.uttakPeriode().getStønadskontotype()) + .isEqualTo(stønadskontotype); + assertThat(fastsettePeriodeResultat.uttakPeriode().getPerioderesultattype()) + .isEqualTo(perioderesultattype); } - private void assertTrekkdager(FastsettePeriodeResultat fastsettePeriodeResultat, - AktivitetIdentifikator aktivitetIdentifikator, - Trekkdager trekkdager) { - assertThat(fastsettePeriodeResultat.uttakPeriode().getTrekkdager(aktivitetIdentifikator)).isEqualTo(trekkdager); + private void assertTrekkdager( + FastsettePeriodeResultat fastsettePeriodeResultat, + AktivitetIdentifikator aktivitetIdentifikator, + Trekkdager trekkdager) { + assertThat(fastsettePeriodeResultat.uttakPeriode().getTrekkdager(aktivitetIdentifikator)) + .isEqualTo(trekkdager); } - @Test - void utbetalingsgrad_og_trekkdager_skal_ta_utgangspunkt_samtidig_uttaksprosent_for_aktiviteter_uten_gradering_hvis_det_finnes_gradering() { + void + utbetalingsgrad_og_trekkdager_skal_ta_utgangspunkt_samtidig_uttaksprosent_for_aktiviteter_uten_gradering_hvis_det_finnes_gradering() { var fødselsdato = LocalDate.of(2018, 1, 1); var grunnlag = RegelGrunnlagTestBuilder.create(); var arbeidstidsprosent = BigDecimal.TEN; var samtidigUttaksprosent = new SamtidigUttaksprosent(50); - //10 virkedager - var gradertMedSamtidigUttak = OppgittPeriode.forGradering(FELLESPERIODE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), - arbeidstidsprosent, samtidigUttaksprosent, false, Set.of(ARBEIDSFORHOLD_1), null, null, null, null); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(MØDREKVOTE, 50)) - .konto(konto(FEDREKVOTE, 50)) - .konto(konto(FELLESPERIODE, 130)); + // 10 virkedager + var gradertMedSamtidigUttak = + OppgittPeriode.forGradering( + FELLESPERIODE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + arbeidstidsprosent, + samtidigUttaksprosent, + false, + Set.of(ARBEIDSFORHOLD_1), + null, + null, + null, + null); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 50)) + .konto(konto(FEDREKVOTE, 50)) + .konto(konto(FELLESPERIODE, 130)); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)).arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))) - .kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode(gradertMedSamtidigUttak)); + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)) + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))) + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode(gradertMedSamtidigUttak)); var fastsettePeriodeGrunnlag = grunnlag.build(); var resultat = fastsettPerioder(fastsettePeriodeGrunnlag); - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_2)).isEqualTo(new Trekkdager(9)); - assertThat(resultat.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD_2).decimalValue()).isEqualTo( - BigDecimal.valueOf(100).subtract(arbeidstidsprosent).setScale(2, RoundingMode.DOWN)); + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_2)) + .isEqualTo(new Trekkdager(9)); + assertThat( + resultat.get(2) + .uttakPeriode() + .getUtbetalingsgrad(ARBEIDSFORHOLD_2) + .decimalValue()) + .isEqualTo( + BigDecimal.valueOf(100) + .subtract(arbeidstidsprosent) + .setScale(2, RoundingMode.DOWN)); } @Test void trekkdager_med_desimaler_når_en_periode_er_en_dag() { var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 1)); - var søknadsperiode = gradertoppgittPeriode(FORELDREPENGER, LocalDate.of(2019, 4, 19), LocalDate.of(2019, 4, 19), BigDecimal.valueOf(75)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .behandling(new Behandling.Builder().søkerErMor(true)) - .datoer(new Datoer.Builder().omsorgsovertakelse(søknadsperiode.getFom())) - .adopsjon(new Adopsjon.Builder().ankomstNorge(søknadsperiode.getFom())) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON).oppgittPeriode(søknadsperiode)) - .build(); + var søknadsperiode = + gradertoppgittPeriode( + FORELDREPENGER, + LocalDate.of(2019, 4, 19), + LocalDate.of(2019, 4, 19), + BigDecimal.valueOf(75)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .behandling(new Behandling.Builder().søkerErMor(true)) + .datoer(new Datoer.Builder().omsorgsovertakelse(søknadsperiode.getFom())) + .adopsjon(new Adopsjon.Builder().ankomstNorge(søknadsperiode.getFom())) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode(søknadsperiode)) + .build(); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(1); - //Runder ned fra 0.25 til 0.2 - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(0.2)); + // Runder ned fra 0.25 til 0.2 + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(0.2)); } @Test @@ -305,36 +468,54 @@ void utbetalingsgrad_og_trekkdager_skal_ta_utgangspunkt_samtidig_uttaksprosent_f var graderingFom = fødselsdato.plusWeeks(10); var graderingTom = fødselsdato.plusWeeks(20).minusDays(1); var arbeidsprosent = BigDecimal.valueOf(90); - var grunnlag = basicGrunnlag(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode(gradertoppgittPeriode(FELLESPERIODE, graderingFom, graderingTom, arbeidsprosent))).build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + gradertoppgittPeriode( + FELLESPERIODE, + graderingFom, + graderingTom, + arbeidsprosent))) + .build(); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - //3 uker før fødsel - innvilges + // 3 uker før fødsel - innvilges var uttakPeriode = resultat.get(0).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //6 første uker mødrekvote innvilges + // 6 første uker mødrekvote innvilges uttakPeriode = resultat.get(1).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //4 neste uker mødrekvote innvilges + // 4 neste uker mødrekvote innvilges uttakPeriode = resultat.get(2).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(6)); assertThat(uttakPeriode.getTom()).isEqualTo(graderingFom.minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //10 neste uker mødrekvote innvilges og gradering beholdes + // 10 neste uker mødrekvote innvilges og gradering beholdes uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(graderingFom); assertThat(uttakPeriode.getTom()).isEqualTo(graderingTom); @@ -350,41 +531,63 @@ void utbetalingsgrad_og_trekkdager_skal_ta_utgangspunkt_samtidig_uttaksprosent_f var graderingFom = fødselsdato.plusWeeks(10); var graderingTom = fødselsdato.plusWeeks(20).minusDays(1); var arbeidsprosent = BigDecimal.valueOf(90); - var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 5)) // bare 5 igjen - .konto(konto(FORELDREPENGER_FØR_FØDSEL, 1000)).konto(konto(MØDREKVOTE, 1000)); - var grunnlag = basicGrunnlag(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, graderingFom.minusDays(1))) - .oppgittPeriode(gradertoppgittPeriode(FELLESPERIODE, graderingFom, graderingTom, arbeidsprosent))) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(konto(FELLESPERIODE, 5)) // bare 5 igjen + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 1000)) + .konto(konto(MØDREKVOTE, 1000)); + var grunnlag = + basicGrunnlag(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + graderingFom.minusDays(1))) + .oppgittPeriode( + gradertoppgittPeriode( + FELLESPERIODE, + graderingFom, + graderingTom, + arbeidsprosent))) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - //3 uker før fødsel - innvilges + // 3 uker før fødsel - innvilges var uttakPeriode = resultat.get(0).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //6 første uker mødrekvote innvilges + // 6 første uker mødrekvote innvilges uttakPeriode = resultat.get(1).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //4 neste uker mødrekvote innvilges + // 4 neste uker mødrekvote innvilges uttakPeriode = resultat.get(2).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(6)); assertThat(uttakPeriode.getTom()).isEqualTo(graderingFom.minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //10 neste uker mødrekvote innvilges og gradering beholdes + // 10 neste uker mødrekvote innvilges og gradering beholdes uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(graderingFom); assertThat(uttakPeriode.getTom()).isEqualTo(graderingTom); @@ -395,50 +598,67 @@ void utbetalingsgrad_og_trekkdager_skal_ta_utgangspunkt_samtidig_uttaksprosent_f } @Test - void periode_med_gradering_og_80_prosent_arbeid_og_det_er_for_lite_igjen_på_saldo_slik_at_perioden_knekkes() { + void + periode_med_gradering_og_80_prosent_arbeid_og_det_er_for_lite_igjen_på_saldo_slik_at_perioden_knekkes() { var fødselsdato = LocalDate.of(2018, 1, 1); var graderingFom = fødselsdato.plusWeeks(10); var graderingTom = fødselsdato.plusWeeks(20).minusDays(1); var grunnlag = RegelGrunnlagTestBuilder.create(); - var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 5)) //bare 5 dager felles igjen - .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)).konto(konto(MØDREKVOTE, 50)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FELLESPERIODE, 5)) // bare 5 dager felles igjen + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 50)); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, graderingFom.minusDays(1))) - .oppgittPeriode(gradertoppgittPeriode(FELLESPERIODE, graderingFom, graderingTom, BigDecimal.valueOf(80)))) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .inngangsvilkår(oppfyltAlleVilkår()); + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, fødselsdato, graderingFom.minusDays(1))) + .oppgittPeriode( + gradertoppgittPeriode( + FELLESPERIODE, + graderingFom, + graderingTom, + BigDecimal.valueOf(80)))) + .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .inngangsvilkår(oppfyltAlleVilkår()); var fastsettePeriodeGrunnlag = grunnlag.build(); var resultat = fastsettPerioder(fastsettePeriodeGrunnlag); assertThat(resultat).hasSize(5); - //3 uker før fødsel - innvilges + // 3 uker før fødsel - innvilges var uttakPeriode = resultat.get(0).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //6 første uker mødrekvote innvilges + // 6 første uker mødrekvote innvilges uttakPeriode = resultat.get(1).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //4 neste uker mødrekvote innvilges + // 4 neste uker mødrekvote innvilges uttakPeriode = resultat.get(2).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(6)); assertThat(uttakPeriode.getTom()).isEqualTo(graderingFom.minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //5 neste uker fellesperiode innvilges + // 5 neste uker fellesperiode innvilges uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(graderingFom); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(15).minusDays(1)); @@ -449,13 +669,14 @@ void utbetalingsgrad_og_trekkdager_skal_ta_utgangspunkt_samtidig_uttaksprosent_f assertThat(uttakPeriode.erGraderingInnvilget(ARBEIDSFORHOLD_1)).isTrue(); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(5)); - //5 siste uker fellesperiode avslås + // 5 siste uker fellesperiode avslås uttakPeriode = resultat.get(4).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(15)); assertThat(uttakPeriode.getTom()).isEqualTo(graderingTom); assertThat(uttakPeriode.getStønadskontotype()).isEqualTo(Stønadskontotype.FELLESPERIODE); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(uttakPeriode.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(uttakPeriode.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); assertThat(uttakPeriode.erGraderingInnvilget()).isTrue(); assertThat(uttakPeriode.getArbeidsprosent()).isEqualTo(BigDecimal.valueOf(80)); assertThat(uttakPeriode.erGraderingInnvilget(ARBEIDSFORHOLD_1)).isTrue(); @@ -467,32 +688,46 @@ void utbetalingsgrad_og_trekkdager_skal_ta_utgangspunkt_samtidig_uttaksprosent_f var grunnlag = create(); leggPåKvoter(grunnlag); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode( - gradertoppgittPeriode(FELLESPERIODE, fødselsdato.minusWeeks(6), fødselsdato.minusWeeks(3).minusDays(1), BigDecimal.valueOf(50))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)))) - .inngangsvilkår(oppfyltAlleVilkår()); + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + gradertoppgittPeriode( + FELLESPERIODE, + fødselsdato.minusWeeks(6), + fødselsdato.minusWeeks(3).minusDays(1), + BigDecimal.valueOf(50))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)))) + .inngangsvilkår(oppfyltAlleVilkår()); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); - //Foreldrepenger før fødsel innvilges + // Foreldrepenger før fødsel innvilges var uttakPeriode = resultat.get(0).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.minusWeeks(6)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.minusWeeks(3).minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //3 uker før fødsel innvilges + // 3 uker før fødsel innvilges uttakPeriode = resultat.get(1).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.erGraderingInnvilget()).isFalse(); - //6 første uker mødrekvote innvilges + // 6 første uker mødrekvote innvilges uttakPeriode = resultat.get(2).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); @@ -504,22 +739,39 @@ void utbetalingsgrad_og_trekkdager_skal_ta_utgangspunkt_samtidig_uttaksprosent_f void skal_ha_en_desimal_på_trekkdager_ved_gradering() { var omsorgsovertakelse = LocalDate.of(2019, 4, 8); var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 100)); - var grunnlag = new RegelGrunnlag.Builder().arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelse)) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) - .rettOgOmsorg(aleneomsorg()) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(gradertoppgittPeriode(FORELDREPENGER, omsorgsovertakelse, omsorgsovertakelse.plusDays(4), BigDecimal.valueOf(50))) - .oppgittPeriode( - gradertoppgittPeriode(FORELDREPENGER, omsorgsovertakelse.plusWeeks(1), omsorgsovertakelse.plusWeeks(1), BigDecimal.TEN))) - .inngangsvilkår(oppfyltAlleVilkår()); + var grunnlag = + new RegelGrunnlag.Builder() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelse)) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) + .rettOgOmsorg(aleneomsorg()) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + gradertoppgittPeriode( + FORELDREPENGER, + omsorgsovertakelse, + omsorgsovertakelse.plusDays(4), + BigDecimal.valueOf(50))) + .oppgittPeriode( + gradertoppgittPeriode( + FORELDREPENGER, + omsorgsovertakelse.plusWeeks(1), + omsorgsovertakelse.plusWeeks(1), + BigDecimal.TEN))) + .inngangsvilkår(oppfyltAlleVilkår()); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(2.5)); - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(0.9)); + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(2.5)); + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(0.9)); } @Test @@ -529,38 +781,72 @@ void skal_knekke_riktig_ved_flere_graderingsperioder_og_flere_arbeidsforhold() { var arbeidsforhold2 = new Arbeidsforhold(ARBEIDSFORHOLD_2); var arbeidsforhold3 = new Arbeidsforhold(ARBEIDSFORHOLD_3); var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 100)); - //Fastsatt periode før å få ulik saldo - var fastsattAktiviter = List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(96), FORELDREPENGER, ARBEIDSFORHOLD_1), - new FastsattUttakPeriodeAktivitet(new Trekkdager(96), FORELDREPENGER, ARBEIDSFORHOLD_2), - new FastsattUttakPeriodeAktivitet(Trekkdager.ZERO, FORELDREPENGER, ARBEIDSFORHOLD_3)); - var fastsattPeriode = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .tidsperiode(omsorgsovertakelse.minusDays(1), omsorgsovertakelse.minusDays(1)) - .aktiviteter(fastsattAktiviter); + // Fastsatt periode før å få ulik saldo + var fastsattAktiviter = + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(96), FORELDREPENGER, ARBEIDSFORHOLD_1), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(96), FORELDREPENGER, ARBEIDSFORHOLD_2), + new FastsattUttakPeriodeAktivitet( + Trekkdager.ZERO, FORELDREPENGER, ARBEIDSFORHOLD_3)); + var fastsattPeriode = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .tidsperiode( + omsorgsovertakelse.minusDays(1), omsorgsovertakelse.minusDays(1)) + .aktiviteter(fastsattAktiviter); var vedtak = new Vedtak.Builder().leggTilPeriode(fastsattPeriode); - var grunnlag = new RegelGrunnlag.Builder().arbeid( - new Arbeid.Builder().arbeidsforhold(arbeidsforhold1).arbeidsforhold(arbeidsforhold2).arbeidsforhold(arbeidsforhold3)) - .kontoer(kontoer) - .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelse)) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) - .rettOgOmsorg(aleneomsorg()) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(gradertoppgittPeriode(FORELDREPENGER, omsorgsovertakelse, omsorgsovertakelse.plusDays(4), BigDecimal.valueOf(50), - Set.of(ARBEIDSFORHOLD_1, ARBEIDSFORHOLD_2))) - .oppgittPeriode( - gradertoppgittPeriode(FORELDREPENGER, omsorgsovertakelse.plusWeeks(1), omsorgsovertakelse.plusWeeks(1), BigDecimal.TEN, - Set.of(ARBEIDSFORHOLD_1, ARBEIDSFORHOLD_2))) - .oppgittPeriode(gradertoppgittPeriode(FORELDREPENGER, omsorgsovertakelse.plusWeeks(1).plusDays(1), omsorgsovertakelse.plusWeeks(10), - BigDecimal.valueOf(75), Set.of(ARBEIDSFORHOLD_1, ARBEIDSFORHOLD_2)))) - .inngangsvilkår(oppfyltAlleVilkår()) - .revurdering(new Revurdering.Builder().gjeldendeVedtak(vedtak)); + var grunnlag = + new RegelGrunnlag.Builder() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(arbeidsforhold1) + .arbeidsforhold(arbeidsforhold2) + .arbeidsforhold(arbeidsforhold3)) + .kontoer(kontoer) + .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelse)) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) + .rettOgOmsorg(aleneomsorg()) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + gradertoppgittPeriode( + FORELDREPENGER, + omsorgsovertakelse, + omsorgsovertakelse.plusDays(4), + BigDecimal.valueOf(50), + Set.of(ARBEIDSFORHOLD_1, ARBEIDSFORHOLD_2))) + .oppgittPeriode( + gradertoppgittPeriode( + FORELDREPENGER, + omsorgsovertakelse.plusWeeks(1), + omsorgsovertakelse.plusWeeks(1), + BigDecimal.TEN, + Set.of(ARBEIDSFORHOLD_1, ARBEIDSFORHOLD_2))) + .oppgittPeriode( + gradertoppgittPeriode( + FORELDREPENGER, + omsorgsovertakelse.plusWeeks(1).plusDays(1), + omsorgsovertakelse.plusWeeks(10), + BigDecimal.valueOf(75), + Set.of( + ARBEIDSFORHOLD_1, + ARBEIDSFORHOLD_2)))) + .inngangsvilkår(oppfyltAlleVilkår()) + .revurdering(new Revurdering.Builder().gjeldendeVedtak(vedtak)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - //Resten av dagene 4 - 2.5 - 0.9. - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(1.5)); - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_2)).isEqualTo(new Trekkdager(1.5)); - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_3)).isEqualTo(new Trekkdager(6)); + // Resten av dagene 4 - 2.5 - 0.9. + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(1.5)); + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_2)) + .isEqualTo(new Trekkdager(1.5)); + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_3)) + .isEqualTo(new Trekkdager(6)); assertThat(resultat.get(2).uttakPeriode().getTom()).isEqualTo(LocalDate.of(2019, 4, 23)); } @@ -570,74 +856,141 @@ void skal_knekke_riktig_ved_flere_graderingsperioder_og_flere_arbeidsforhold() { var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 100)); var arbeidsforhold1 = new Arbeidsforhold(ARBEIDSFORHOLD_1); var arbeidsforhold2 = new Arbeidsforhold(ARBEIDSFORHOLD_2); - //Fastsatt periode før å få ulik saldo - var fastsattPeriode = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .tidsperiode(omsorgsovertakelse.minusDays(1), omsorgsovertakelse.minusDays(1)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(96), FORELDREPENGER, ARBEIDSFORHOLD_2), - new FastsattUttakPeriodeAktivitet(Trekkdager.ZERO, FORELDREPENGER, ARBEIDSFORHOLD_1))); + // Fastsatt periode før å få ulik saldo + var fastsattPeriode = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .tidsperiode( + omsorgsovertakelse.minusDays(1), omsorgsovertakelse.minusDays(1)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(96), + FORELDREPENGER, + ARBEIDSFORHOLD_2), + new FastsattUttakPeriodeAktivitet( + Trekkdager.ZERO, + FORELDREPENGER, + ARBEIDSFORHOLD_1))); var vedtak = new Vedtak.Builder().leggTilPeriode(fastsattPeriode); - var grunnlag = new RegelGrunnlag.Builder().arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold1).arbeidsforhold(arbeidsforhold2)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelse)) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) - .rettOgOmsorg(aleneomsorg()) - .behandling(farBehandling()) - .kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(gradertoppgittPeriode(FORELDREPENGER, omsorgsovertakelse, omsorgsovertakelse.plusDays(4), BigDecimal.valueOf(50), - Set.of(ARBEIDSFORHOLD_1)))) - .inngangsvilkår(oppfyltAlleVilkår()) - .revurdering(new Revurdering.Builder().gjeldendeVedtak(vedtak)); + var grunnlag = + new RegelGrunnlag.Builder() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(arbeidsforhold1) + .arbeidsforhold(arbeidsforhold2)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelse)) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) + .rettOgOmsorg(aleneomsorg()) + .behandling(farBehandling()) + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + gradertoppgittPeriode( + FORELDREPENGER, + omsorgsovertakelse, + omsorgsovertakelse.plusDays(4), + BigDecimal.valueOf(50), + Set.of(ARBEIDSFORHOLD_1)))) + .inngangsvilkår(oppfyltAlleVilkår()) + .revurdering(new Revurdering.Builder().gjeldendeVedtak(vedtak)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(2)); - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_2)).isEqualTo(new Trekkdager(4)); + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(2)); + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_2)) + .isEqualTo(new Trekkdager(4)); assertThat(resultat.get(0).uttakPeriode().getTom()).isEqualTo(LocalDate.of(2019, 4, 11)); assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(new BigDecimal("0.5"))); - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_2)).isEqualTo(Trekkdager.ZERO); + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(new BigDecimal("0.5"))); + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_2)) + .isEqualTo(Trekkdager.ZERO); } @Test void skal_sette_trekkdager_lik_lengden_på_perioden_før_knekk() { var omsorgsovertakelse = LocalDate.of(2019, 4, 8); var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 100)); - var grunnlag = new RegelGrunnlag.Builder().arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelse)) - .kontoer(kontoer) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) - .rettOgOmsorg(aleneomsorg()) - .behandling(farBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(gradertoppgittPeriode(FORELDREPENGER, omsorgsovertakelse, omsorgsovertakelse.plusWeeks(1), BigDecimal.valueOf(75))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, omsorgsovertakelse.plusWeeks(1).plusDays(1), omsorgsovertakelse.plusWeeks(100)))) - .inngangsvilkår(oppfyltAlleVilkår()); + var grunnlag = + new RegelGrunnlag.Builder() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .adopsjon(new Adopsjon.Builder().ankomstNorge(omsorgsovertakelse)) + .kontoer(kontoer) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) + .rettOgOmsorg(aleneomsorg()) + .behandling(farBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + gradertoppgittPeriode( + FORELDREPENGER, + omsorgsovertakelse, + omsorgsovertakelse.plusWeeks(1), + BigDecimal.valueOf(75))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + omsorgsovertakelse.plusWeeks(1).plusDays(1), + omsorgsovertakelse.plusWeeks(100)))) + .inngangsvilkår(oppfyltAlleVilkår()); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(1.5)); - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(99)); + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(1.5)); + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(99)); } @Test void skal_ikke_få_innvilget_en_hel_ekstra_trekkdag() { var fødselsdato = LocalDate.of(2019, 2, 11); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(FELLESPERIODE, 80)) - .konto(konto(FEDREKVOTE, 75)) - .konto(konto(MØDREKVOTE, 75)); - var grunnlag = new RegelGrunnlag.Builder().arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - //Søker så at konto akkurat går går opp i 76 trekkdager - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(gradertoppgittPeriode(FEDREKVOTE, LocalDate.of(2019, 5, 3), LocalDate.of(2019, 7, 5), BigDecimal.valueOf(60))) - .oppgittPeriode(utsettelsePeriode(LocalDate.of(2019, 7, 8), LocalDate.of(2019, 7, 26), UtsettelseÅrsak.FERIE, null)) - .oppgittPeriode(gradertoppgittPeriode(FEDREKVOTE, LocalDate.of(2019, 7, 29), LocalDate.of(2020, 2, 13), BigDecimal.valueOf(60)))) - .inngangsvilkår(oppfyltAlleVilkår()); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(FELLESPERIODE, 80)) + .konto(konto(FEDREKVOTE, 75)) + .konto(konto(MØDREKVOTE, 75)); + var grunnlag = + new RegelGrunnlag.Builder() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + // Søker så at konto akkurat går går opp i 76 trekkdager + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + gradertoppgittPeriode( + FEDREKVOTE, + LocalDate.of(2019, 5, 3), + LocalDate.of(2019, 7, 5), + BigDecimal.valueOf(60))) + .oppgittPeriode( + utsettelsePeriode( + LocalDate.of(2019, 7, 8), + LocalDate.of(2019, 7, 26), + UtsettelseÅrsak.FERIE, + null)) + .oppgittPeriode( + gradertoppgittPeriode( + FEDREKVOTE, + LocalDate.of(2019, 7, 29), + LocalDate.of(2020, 2, 13), + BigDecimal.valueOf(60)))) + .inngangsvilkår(oppfyltAlleVilkår()); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); @@ -656,14 +1009,31 @@ void skal_knekke_riktig_ved_flere_graderingsperioder_og_flere_arbeidsforhold() { var grunnlag = RegelGrunnlagTestBuilder.create(); leggPåKvoter(grunnlag); var mottattDato = fødselsdato.plusWeeks(8).minusDays(1); - var gradering = OppgittPeriode.forGradering(MØDREKVOTE, fødselsdato.plusWeeks(6), mottattDato.plusWeeks(1), BigDecimal.TEN, null, false, - Set.of(ARBEIDSFORHOLD_1), mottattDato, mottattDato, null, null); + var gradering = + OppgittPeriode.forGradering( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + mottattDato.plusWeeks(1), + BigDecimal.TEN, + null, + false, + Set.of(ARBEIDSFORHOLD_1), + mottattDato, + mottattDato, + null, + null); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling().kreverSammenhengendeUttak(true)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode(gradering)); + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling().kreverSammenhengendeUttak(true)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode(gradering)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); @@ -675,14 +1045,31 @@ void skal_knekke_riktig_ved_flere_graderingsperioder_og_flere_arbeidsforhold() { var grunnlag = RegelGrunnlagTestBuilder.create(); leggPåKvoter(grunnlag); var mottattDato = fødselsdato.plusWeeks(8).minusDays(1); - var gradering = OppgittPeriode.forGradering(MØDREKVOTE, fødselsdato.plusWeeks(6), mottattDato.plusWeeks(1), BigDecimal.TEN, null, false, - Set.of(ARBEIDSFORHOLD_1), mottattDato, mottattDato, null, null); + var gradering = + OppgittPeriode.forGradering( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + mottattDato.plusWeeks(1), + BigDecimal.TEN, + null, + false, + Set.of(ARBEIDSFORHOLD_1), + mottattDato, + mottattDato, + null, + null); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling().kreverSammenhengendeUttak(false)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode(gradering)); + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling().kreverSammenhengendeUttak(false)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode(gradering)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); @@ -696,17 +1083,35 @@ void skal_knekke_riktig_ved_flere_graderingsperioder_og_flere_arbeidsforhold() { leggPåKvoter(grunnlag); var senestMottattDato = fødselsdato.plusWeeks(8).minusDays(1); var tidligstMottattDato = fødselsdato.plusWeeks(6); - var gradering = OppgittPeriode.forGradering(MØDREKVOTE, fødselsdato.plusWeeks(6), senestMottattDato.plusWeeks(1), BigDecimal.TEN, null, false, - Set.of(ARBEIDSFORHOLD_1), senestMottattDato, tidligstMottattDato, null, null); + var gradering = + OppgittPeriode.forGradering( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + senestMottattDato.plusWeeks(1), + BigDecimal.TEN, + null, + false, + Set.of(ARBEIDSFORHOLD_1), + senestMottattDato, + tidligstMottattDato, + null, + null); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode(gradering)); + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode(gradering)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test @@ -716,33 +1121,59 @@ void skal_knekke_riktig_ved_flere_graderingsperioder_og_flere_arbeidsforhold() { leggPåKvoter(grunnlag); var mottattDato = fødselsdato.plusWeeks(8).minusDays(1); var kontoer = new Kontoer.Builder().konto(konto(MØDREKVOTE, 200)); - var gradering = OppgittPeriode.forGradering(MØDREKVOTE, fødselsdato.plusWeeks(5), mottattDato.plusWeeks(1), BigDecimal.TEN, null, false, - Set.of(ARBEIDSFORHOLD_1), mottattDato, mottattDato, null, null); + var gradering = + OppgittPeriode.forGradering( + MØDREKVOTE, + fødselsdato.plusWeeks(5), + mottattDato.plusWeeks(1), + BigDecimal.TEN, + null, + false, + Set.of(ARBEIDSFORHOLD_1), + mottattDato, + mottattDato, + null, + null); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)).arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))) - .kontoer(kontoer) - .behandling(morBehandling().kreverSammenhengendeUttak(true)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(5).minusDays(1))) - .oppgittPeriode(gradering)) - .inngangsvilkår(oppfyltAlleVilkår()); + .rettOgOmsorg(beggeRett()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)) + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))) + .kontoer(kontoer) + .behandling(morBehandling().kreverSammenhengendeUttak(true)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(5).minusDays(1))) + .oppgittPeriode(gradering)) + .inngangsvilkår(oppfyltAlleVilkår()); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); - assertThat(resultat.get(1).uttakPeriode().getGraderingIkkeInnvilgetÅrsak()).isEqualTo( - GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); + assertThat(resultat.get(1).uttakPeriode().getGraderingIkkeInnvilgetÅrsak()) + .isEqualTo(GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); assertThat(resultat.get(1).uttakPeriode().erGraderingInnvilget()).isFalse(); assertThat(resultat.get(1).uttakPeriode().erGraderingInnvilget(ARBEIDSFORHOLD_1)).isFalse(); assertThat(resultat.get(1).uttakPeriode().erGraderingInnvilget(ARBEIDSFORHOLD_1)).isFalse(); - assertThat(resultat.get(1) - .uttakPeriode() - .getAktiviteter() - .stream() - .anyMatch(a -> a.isSøktGradering() && a.getIdentifikator().equals(ARBEIDSFORHOLD_1))).isTrue(); - assertThat(resultat.get(1) - .uttakPeriode() - .getAktiviteter() - .stream() - .anyMatch(a -> a.isSøktGradering() && a.getIdentifikator().equals(ARBEIDSFORHOLD_2))).isFalse(); + assertThat( + resultat.get(1).uttakPeriode().getAktiviteter().stream() + .anyMatch( + a -> + a.isSøktGradering() + && a.getIdentifikator() + .equals(ARBEIDSFORHOLD_1))) + .isTrue(); + assertThat( + resultat.get(1).uttakPeriode().getAktiviteter().stream() + .anyMatch( + a -> + a.isSøktGradering() + && a.getIdentifikator() + .equals(ARBEIDSFORHOLD_2))) + .isFalse(); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktIdentifisererTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktIdentifisererTest.java index 4701a7c3..945b883e 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktIdentifisererTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktIdentifisererTest.java @@ -1,15 +1,11 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode; - import static org.assertj.core.api.Assertions.assertThat; import java.math.BigDecimal; import java.time.LocalDate; import java.util.List; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; @@ -28,32 +24,41 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.ytelser.Pleiepenger; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.ytelser.PleiepengerPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.ytelser.Ytelser; +import org.junit.jupiter.api.Test; class KnekkpunktIdentifisererTest { @Test void skal_finne_knekkpunkter_for_søknad_ved_fødsel() { var fødselsdato = LocalDate.of(2018, 2, 22); - var grunnlag = RegelGrunnlagTestBuilder.create().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)).datoer(datoer(fødselsdato)).build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .datoer(datoer(fødselsdato)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); - assertThat(knekkpunkter).containsOnly(fødselsdato.minusWeeks(12), //tidligste mulige uttak - fødselsdato.minusWeeks(3), //foreldrepenger før fødsel - fødselsdato, fødselsdato.plusWeeks(6), //slutt på periode reservert mor - fødselsdato.plusYears(3) //siste mulige uttak for foreldrepenger - ); + assertThat(knekkpunkter) + .containsOnly( + fødselsdato.minusWeeks(12), // tidligste mulige uttak + fødselsdato.minusWeeks(3), // foreldrepenger før fødsel + fødselsdato, + fødselsdato.plusWeeks(6), // slutt på periode reservert mor + fødselsdato.plusYears(3) // siste mulige uttak for foreldrepenger + ); } @Test void skal_finne_knekkpunkter_for_opphørsdato_for_medlemskap() { var fødselsdato = LocalDate.of(2018, 2, 22); var opphørsdato = fødselsdato.plusWeeks(1); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .datoer(datoer(fødselsdato)) - .medlemskap(new Medlemskap.Builder().opphørsdato(opphørsdato)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .datoer(datoer(fødselsdato)) + .medlemskap(new Medlemskap.Builder().opphørsdato(opphørsdato)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); @@ -63,33 +68,39 @@ class KnekkpunktIdentifisererTest { @Test void skal_finne_knekkpunkter_ved_adopsjon() { var adopsjonsdato = LocalDate.of(2018, 2, 22); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) - .datoer(new Datoer.Builder().omsorgsovertakelse(adopsjonsdato)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) + .datoer(new Datoer.Builder().omsorgsovertakelse(adopsjonsdato)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); - assertThat(knekkpunkter).containsOnly(adopsjonsdato.minusWeeks(12), //tidligste mulige uttak? - adopsjonsdato, adopsjonsdato.plusYears(3) //siste mulige uttak for foreldrepenger - ); + assertThat(knekkpunkter) + .containsOnly( + adopsjonsdato.minusWeeks(12), // tidligste mulige uttak? + adopsjonsdato, + adopsjonsdato.plusYears(3) // siste mulige uttak for foreldrepenger + ); } @Test void skal_lage_knekkpunkt_ved_start_og_dagen_etter_periode_medslutt_av_() { var adopsjonsdato = LocalDate.of(2018, 2, 22); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) - .datoer(new Datoer.Builder().omsorgsovertakelse(adopsjonsdato)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) + .datoer(new Datoer.Builder().omsorgsovertakelse(adopsjonsdato)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); - assertThat(knekkpunkter).containsOnly(adopsjonsdato.minusWeeks(12), //tidligste mulige uttak? - adopsjonsdato, - - adopsjonsdato.plusYears(3) //siste mulige uttak for foreldrepenger - ); + assertThat(knekkpunkter) + .containsOnly( + adopsjonsdato.minusWeeks(12), // tidligste mulige uttak? + adopsjonsdato, + adopsjonsdato.plusYears(3) // siste mulige uttak for foreldrepenger + ); } @Test @@ -98,14 +109,30 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperStart1() { var fødselsdato = uttakStartdato.minusMonths(1); var førsteLovligeSøknadsperiode = fødselsdato.minusWeeks(12); var knekkdato = uttakStartdato.plusDays(1); - var grunnlag = RegelGrunnlagTestBuilder.create() - .annenPart( - new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(uttakStartdato, uttakStartdato.plusDays(10)).build())) - .søknad(new Søknad.Builder().oppgittPeriode( - OppgittPeriode.forVanligPeriode(Stønadskontotype.FELLESPERIODE, knekkdato, uttakStartdato.plusDays(10), SamtidigUttaksprosent.TEN, - true, null, null, null, null))) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + uttakStartdato, + uttakStartdato.plusDays(10)) + .build())) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FELLESPERIODE, + knekkdato, + uttakStartdato.plusDays(10), + SamtidigUttaksprosent.TEN, + true, + null, + null, + null, + null))) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); knekkpunkter.removeAll(standardKnekkpunktFødsel(fødselsdato, førsteLovligeSøknadsperiode)); @@ -118,18 +145,39 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperStart2() { var fødselsdato = uttakStartdato.minusWeeks(7); var førsteLovligeSøknadsperiode = fødselsdato.minusWeeks(12); var knekkdato = uttakStartdato.plusDays(1); - var grunnlag = RegelGrunnlagTestBuilder.create() - .annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(uttakStartdato.plusDays(1), uttakStartdato.plusDays(10)).build())) - .søknad(new Søknad.Builder().oppgittPeriode( - OppgittPeriode.forVanligPeriode(Stønadskontotype.FELLESPERIODE, uttakStartdato, knekkdato, SamtidigUttaksprosent.TEN, true, null, - null, null, null))) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + uttakStartdato.plusDays(1), + uttakStartdato.plusDays(10)) + .build())) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FELLESPERIODE, + uttakStartdato, + knekkdato, + SamtidigUttaksprosent.TEN, + true, + null, + null, + null, + null))) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); knekkpunkter.removeAll(standardKnekkpunktFødsel(fødselsdato, førsteLovligeSøknadsperiode)); - assertThat(knekkpunkter).containsExactlyInAnyOrder(knekkdato, uttakStartdato, uttakStartdato.plusDays(11), knekkdato.plusDays(1)); + assertThat(knekkpunkter) + .containsExactlyInAnyOrder( + knekkdato, + uttakStartdato, + uttakStartdato.plusDays(11), + knekkdato.plusDays(1)); } @Test @@ -137,19 +185,39 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperMidtI() { final var uttakStartdato = LocalDate.of(2018, 10, 1); var fødselsdato = uttakStartdato.minusWeeks(7); var førsteLovligeSøknadsperiode = fødselsdato.minusWeeks(12); - var grunnlag = RegelGrunnlagTestBuilder.create() - .annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(uttakStartdato.plusDays(1), uttakStartdato.plusDays(5)).build())) - .søknad(new Søknad.Builder().oppgittPeriode( - OppgittPeriode.forVanligPeriode(Stønadskontotype.FELLESPERIODE, uttakStartdato, uttakStartdato.plusDays(6), SamtidigUttaksprosent.TEN, - true, null, null, null, null))) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + uttakStartdato.plusDays(1), + uttakStartdato.plusDays(5)) + .build())) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FELLESPERIODE, + uttakStartdato, + uttakStartdato.plusDays(6), + SamtidigUttaksprosent.TEN, + true, + null, + null, + null, + null))) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); knekkpunkter.removeAll(standardKnekkpunktFødsel(fødselsdato, førsteLovligeSøknadsperiode)); - assertThat(knekkpunkter).containsExactlyInAnyOrder(uttakStartdato, uttakStartdato.plusDays(7), uttakStartdato.plusDays(1), - uttakStartdato.plusDays(6)); + assertThat(knekkpunkter) + .containsExactlyInAnyOrder( + uttakStartdato, + uttakStartdato.plusDays(7), + uttakStartdato.plusDays(1), + uttakStartdato.plusDays(6)); } @Test @@ -162,31 +230,65 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperSluttAvPeri var annenPartPeriodeFom = stønadsperiodeFom.plusDays(4); var annenPartPeriodeTom = stønadsperiodeFom.plusDays(12); - var grunnlag = RegelGrunnlagTestBuilder.create() - .annenPart(new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(annenPartPeriodeFom, annenPartPeriodeTom).build())) - .søknad(new Søknad.Builder().oppgittPeriode( - OppgittPeriode.forVanligPeriode(Stønadskontotype.FELLESPERIODE, stønadsperiodeFom, stønadsperiodeTom, SamtidigUttaksprosent.TEN, true, - null, null, null, null))) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + annenPartPeriodeFom, + annenPartPeriodeTom) + .build())) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FELLESPERIODE, + stønadsperiodeFom, + stønadsperiodeTom, + SamtidigUttaksprosent.TEN, + true, + null, + null, + null, + null))) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); knekkpunkter.removeAll(standardKnekkpunktFødsel(fødselsdato, førsteLovligeSøknadsperiode)); - assertThat(knekkpunkter).containsExactlyInAnyOrder(stønadsperiodeFom, stønadsperiodeTom.plusDays(1), annenPartPeriodeFom, - annenPartPeriodeTom.plusDays(1)); + assertThat(knekkpunkter) + .containsExactlyInAnyOrder( + stønadsperiodeFom, + stønadsperiodeTom.plusDays(1), + annenPartPeriodeFom, + annenPartPeriodeTom.plusDays(1)); } @Test void finnerKnekkPåEndringssøknadMottattdatoHvisGraderingStarterPåMottattdato() { var mottattdato = LocalDate.of(2018, 10, 10); var gradertArbeidsforhold = AktivitetIdentifikator.forFrilans(); - var gradering = OppgittPeriode.forGradering(Stønadskontotype.MØDREKVOTE, mottattdato, mottattdato.plusWeeks(2), BigDecimal.valueOf(30), null, - false, Set.of(gradertArbeidsforhold), mottattdato, mottattdato, null, null); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(LocalDate.of(2018, 5, 5))) - .revurdering(new Revurdering.Builder().endringsdato(LocalDate.of(2018, 5, 5))) - .søknad(new Søknad.Builder().oppgittPeriode(gradering)) - .build(); + var gradering = + OppgittPeriode.forGradering( + Stønadskontotype.MØDREKVOTE, + mottattdato, + mottattdato.plusWeeks(2), + BigDecimal.valueOf(30), + null, + false, + Set.of(gradertArbeidsforhold), + mottattdato, + mottattdato, + null, + null); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(LocalDate.of(2018, 5, 5))) + .revurdering( + new Revurdering.Builder().endringsdato(LocalDate.of(2018, 5, 5))) + .søknad(new Søknad.Builder().oppgittPeriode(gradering)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); @@ -197,13 +299,26 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperSluttAvPeri void finnerIkkeKnekkPåEndringssøknadMottattdatoHvisGraderingStarterEtterMottattdato() { var mottattdato = LocalDate.of(2018, 10, 10); var gradertArbeidsforhold = AktivitetIdentifikator.forFrilans(); - var gradering = OppgittPeriode.forGradering(Stønadskontotype.MØDREKVOTE, mottattdato.plusWeeks(1), mottattdato.plusWeeks(2), - BigDecimal.valueOf(30), null, false, Set.of(gradertArbeidsforhold), mottattdato, mottattdato, null, null); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(LocalDate.of(2018, 5, 5))) - .revurdering(new Revurdering.Builder().endringsdato(LocalDate.of(2018, 5, 5))) - .søknad(new Søknad.Builder().oppgittPeriode(gradering)) - .build(); + var gradering = + OppgittPeriode.forGradering( + Stønadskontotype.MØDREKVOTE, + mottattdato.plusWeeks(1), + mottattdato.plusWeeks(2), + BigDecimal.valueOf(30), + null, + false, + Set.of(gradertArbeidsforhold), + mottattdato, + mottattdato, + null, + null); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(LocalDate.of(2018, 5, 5))) + .revurdering( + new Revurdering.Builder().endringsdato(LocalDate.of(2018, 5, 5))) + .søknad(new Søknad.Builder().oppgittPeriode(gradering)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); @@ -213,13 +328,22 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperSluttAvPeri @Test void finnerKnekkPåEndringssøknadMottattdatoHvisUtsettelseFerieArbeidStarterPåMottattdato() { var mottattdato = LocalDate.of(2018, 10, 10); - var utsettelse = OppgittPeriode.forUtsettelse(mottattdato, mottattdato.plusWeeks(2), UtsettelseÅrsak.ARBEID, mottattdato, mottattdato, null, - null); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(LocalDate.of(2018, 5, 5))) - .revurdering(new Revurdering.Builder().endringsdato(LocalDate.of(2018, 5, 5))) - .søknad(new Søknad.Builder().oppgittPeriode(utsettelse)) - .build(); + var utsettelse = + OppgittPeriode.forUtsettelse( + mottattdato, + mottattdato.plusWeeks(2), + UtsettelseÅrsak.ARBEID, + mottattdato, + mottattdato, + null, + null); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(LocalDate.of(2018, 5, 5))) + .revurdering( + new Revurdering.Builder().endringsdato(LocalDate.of(2018, 5, 5))) + .søknad(new Søknad.Builder().oppgittPeriode(utsettelse)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); @@ -227,15 +351,25 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperSluttAvPeri } @Test - void finnerIkkeKnekkPåEndringssøknadMottattdatoHvisUtsettelseFerieArbeidStarterEtterMottattdato() { + void + finnerIkkeKnekkPåEndringssøknadMottattdatoHvisUtsettelseFerieArbeidStarterEtterMottattdato() { var mottattdato = LocalDate.of(2018, 10, 10); - var utsettelse = OppgittPeriode.forUtsettelse(mottattdato.plusWeeks(1), mottattdato.plusWeeks(2), UtsettelseÅrsak.FERIE, mottattdato, - mottattdato, null, null); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(LocalDate.of(2018, 5, 5))) - .revurdering(new Revurdering.Builder().endringsdato(LocalDate.of(2018, 5, 5))) - .søknad(new Søknad.Builder().oppgittPeriode(utsettelse)) - .build(); + var utsettelse = + OppgittPeriode.forUtsettelse( + mottattdato.plusWeeks(1), + mottattdato.plusWeeks(2), + UtsettelseÅrsak.FERIE, + mottattdato, + mottattdato, + null, + null); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(LocalDate.of(2018, 5, 5))) + .revurdering( + new Revurdering.Builder().endringsdato(LocalDate.of(2018, 5, 5))) + .søknad(new Søknad.Builder().oppgittPeriode(utsettelse)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); @@ -246,11 +380,22 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperSluttAvPeri void skal_knekke_på_bevegelige_helligdager() { var fødselsdato = LocalDate.of(2019, 5, 1); var tom = LocalDate.of(2019, 5, 25); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forUtsettelse(fødselsdato, tom, UtsettelseÅrsak.FERIE, null, null, null, null))) - .datoer(datoer(fødselsdato)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forUtsettelse( + fødselsdato, + tom, + UtsettelseÅrsak.FERIE, + null, + null, + null, + null))) + .datoer(datoer(fødselsdato)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); @@ -262,10 +407,11 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperSluttAvPeri var fødselsdato = LocalDate.of(2019, 7, 22); var termin = LocalDate.of(2019, 9, 23); var førsteLovligeSøknadsperiode = LocalDate.of(2017, 12, 1); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termin)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termin)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); @@ -277,12 +423,22 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperSluttAvPeri var fødselsdato = LocalDate.of(2019, 9, 23); var startdato1 = fødselsdato.plusWeeks(8); var startdato2 = fødselsdato.plusWeeks(10); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .datoer(datoer(fødselsdato)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forFrilans(), startdato1)) - .arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forSelvstendigNæringsdrivende(), startdato2))) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .datoer(datoer(fødselsdato)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold( + new Arbeidsforhold( + AktivitetIdentifikator.forFrilans(), + startdato1)) + .arbeidsforhold( + new Arbeidsforhold( + AktivitetIdentifikator + .forSelvstendigNæringsdrivende(), + startdato2))) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); @@ -293,11 +449,17 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperSluttAvPeri void skal_ikke_knekke_på_startdato_hos_arbeidsforhold_hvis_bare_ett_arbeidsforhold() { var fødselsdato = LocalDate.of(2019, 9, 23); var startdato = fødselsdato.plusWeeks(8); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .datoer(datoer(fødselsdato)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forFrilans(), startdato))) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .datoer(datoer(fødselsdato)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold( + new Arbeidsforhold( + AktivitetIdentifikator.forFrilans(), + startdato))) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); @@ -305,36 +467,69 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperSluttAvPeri } @Test - void skal_knekke_på_første_lovlige_uttaksdag_for_hver_søknadsperiode_der_første_lovlige_uttaksdag_overlapper_med_periode() { + void + skal_knekke_på_første_lovlige_uttaksdag_for_hver_søknadsperiode_der_første_lovlige_uttaksdag_overlapper_med_periode() { var fødselsdato = LocalDate.of(2020, 7, 20); var mottattDatoPeriode1 = LocalDate.of(2020, 11, 1); var mottattDatoPeriode2 = LocalDate.of(2021, 2, 1); - var periode1 = OppgittPeriode.forVanligPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, LocalDate.of(2020, 11, 15), null, false, - mottattDatoPeriode1, mottattDatoPeriode1, null, null); - var periode2 = OppgittPeriode.forVanligPeriode(Stønadskontotype.MØDREKVOTE, LocalDate.of(2020, 11, 16), LocalDate.of(2020, 12, 15), null, - false, mottattDatoPeriode2, mottattDatoPeriode2, null, null); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().oppgittePerioder(List.of(periode1, periode2)).type(Søknadstype.FØDSEL)) - .datoer(datoer(fødselsdato)) - .build(); + var periode1 = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + LocalDate.of(2020, 11, 15), + null, + false, + mottattDatoPeriode1, + mottattDatoPeriode1, + null, + null); + var periode2 = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.MØDREKVOTE, + LocalDate.of(2020, 11, 16), + LocalDate.of(2020, 12, 15), + null, + false, + mottattDatoPeriode2, + mottattDatoPeriode2, + null, + null); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad( + new Søknad.Builder() + .oppgittePerioder(List.of(periode1, periode2)) + .type(Søknadstype.FØDSEL)) + .datoer(datoer(fødselsdato)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); - assertThat(knekkpunkter).contains( - LocalDate.of(2020, 8, 1))//Første lovlige dato for første periode ligger midt i perioden. Skal derfor knekkes for å avlås - .doesNotContain(LocalDate.of(2020, 11, 1)); //Første lovlige dato for andre periode ligger før start på perioden + assertThat(knekkpunkter) + .contains( + LocalDate.of( + 2020, 8, 1)) // Første lovlige dato for første periode ligger midt i + // perioden. Skal derfor knekkes for å avlås + .doesNotContain( + LocalDate.of( + 2020, 11, + 1)); // Første lovlige dato for andre periode ligger før start på + // perioden } @Test void skal_knekke_på_perioder_med_pleiepenger() { var innleggelseFom = LocalDate.of(2020, 10, 10); var innleggelseTom = LocalDate.of(2020, 10, 15); - var pleiepenger = new Pleiepenger(Set.of(new PleiepengerPeriode(innleggelseFom, innleggelseTom, true))); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .datoer(new Datoer.Builder().fødsel(innleggelseFom)) - .ytelser(new Ytelser(pleiepenger)) - .build(); + var pleiepenger = + new Pleiepenger( + Set.of(new PleiepengerPeriode(innleggelseFom, innleggelseTom, true))); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .datoer(new Datoer.Builder().fødsel(innleggelseFom)) + .ytelser(new Ytelser(pleiepenger)) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); @@ -344,32 +539,39 @@ void finnerKnekkpunktVedOverlappIUttakperioderMedAnnenPart_overlapperSluttAvPeri @Test void ikkeKnekkPåMottattDatoForFriUtsettelse() { var mottattdato = LocalDate.of(2018, 10, 10); - var utsettelse = OppgittPeriode.forUtsettelse(mottattdato.minusWeeks(2), mottattdato.minusWeeks(1), UtsettelseÅrsak.FRI, mottattdato, - mottattdato, null, null); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(LocalDate.of(2018, 5, 5))) - .søknad(new Søknad.Builder().oppgittPeriode(utsettelse)) - .behandling(new Behandling.Builder()) - .build(); + var utsettelse = + OppgittPeriode.forUtsettelse( + mottattdato.minusWeeks(2), + mottattdato.minusWeeks(1), + UtsettelseÅrsak.FRI, + mottattdato, + mottattdato, + null, + null); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(LocalDate.of(2018, 5, 5))) + .søknad(new Søknad.Builder().oppgittPeriode(utsettelse)) + .behandling(new Behandling.Builder()) + .build(); var knekkpunkter = KnekkpunktIdentifiserer.finnKnekkpunkter(grunnlag); assertThat(knekkpunkter).isNotEmpty().doesNotContain(mottattdato); } - private List standardKnekkpunktFødsel(LocalDate fødselsdato, LocalDate førsteLovligeSøknadsperiode) { - return List.of(fødselsdato.minusWeeks(12), //tidligste mulige uttak - førsteLovligeSøknadsperiode,//ifbm søknadsfrist - fødselsdato.minusWeeks(3), //foreldrepenger før fødsel - fødselsdato, fødselsdato.plusWeeks(6), //slutt på periode reservert mor - fødselsdato.plusYears(3)); //siste mulige uttak for foreldrepenger + private List standardKnekkpunktFødsel( + LocalDate fødselsdato, LocalDate førsteLovligeSøknadsperiode) { + return List.of( + fødselsdato.minusWeeks(12), // tidligste mulige uttak + førsteLovligeSøknadsperiode, // ifbm søknadsfrist + fødselsdato.minusWeeks(3), // foreldrepenger før fødsel + fødselsdato, + fødselsdato.plusWeeks(6), // slutt på periode reservert mor + fødselsdato.plusYears(3)); // siste mulige uttak for foreldrepenger } - private Datoer.Builder datoer(LocalDate fødselsdato) { return new Datoer.Builder().fødsel(fødselsdato); } - } - - diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktOrkestreringTest.java index bc7fa786..1b32ebb7 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/KnekkpunktOrkestreringTest.java @@ -8,9 +8,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -27,60 +24,97 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; class KnekkpunktOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @Test - void foreldrepengerFørFødssel_søknad_fra_3_uker_før_fødsel_til_og_med_fødsel_blir_knekt_ved_fødsel() { + void + foreldrepengerFørFødssel_søknad_fra_3_uker_før_fødsel_til_og_med_fødsel_blir_knekt_ved_fødsel() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL).trekkdager(3 * 5)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato))) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer) - .build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL) + .trekkdager(3 * 5)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato))) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer) + .build(); var perioder = fastsettPerioder(grunnlag); - assertThat(perioder).hasSize(3); //3 perioder fordi det også lages en manglende søkt periode for de 6 første ukene. + assertThat(perioder) + .hasSize(3); // 3 perioder fordi det også lages en manglende søkt periode for de 6 + // første ukene. - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(1).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(1).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato); } - @Test - void foreldrepengerFørFødsel_periode_dekker_alle_ukene_før_fødsel_slutter_etter_fødsel_blir_hvor_ukene_etter_fødsel_blir_avslått() { + void + foreldrepengerFørFødsel_periode_dekker_alle_ukene_før_fødsel_slutter_etter_fødsel_blir_hvor_ukene_etter_fødsel_blir_avslått() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL).trekkdager(3 * 5)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.plusWeeks(4)))) - .kontoer(kontoer) - .build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL) + .trekkdager(3 * 5)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.plusWeeks(4)))) + .kontoer(kontoer) + .build(); var perioder = fastsettPerioder(grunnlag); - assertThat(perioder).hasSize(3); //3 perioder fordi det også lages en manglende søkt periode for de 6 første ukene. + assertThat(perioder) + .hasSize(3); // 3 perioder fordi det også lages en manglende søkt periode for de 6 + // første ukene. - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(1).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(1).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(4)); } @@ -88,41 +122,68 @@ class KnekkpunktOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB @Test void riktig_knekk_ved_tom_for_dager_ifm_helg() { var fødselsdato = LocalDate.of(2018, 5, 15); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL).trekkdager(15)) - .konto(new Konto.Builder().type(Stønadskontotype.MØDREKVOTE).trekkdager(15 * 5)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, LocalDate.of(2018, 6, 30)), - oppgittPeriode(Stønadskontotype.MØDREKVOTE, LocalDate.of(2018, 7, 1), LocalDate.of(2018, 12, 21)))) - .kontoer(kontoer) - .build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL) + .trekkdager(15)) + .konto( + new Konto.Builder() + .type(Stønadskontotype.MØDREKVOTE) + .trekkdager(15 * 5)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + LocalDate.of(2018, 6, 30)), + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + LocalDate.of(2018, 7, 1), + LocalDate.of(2018, 12, 21)))) + .kontoer(kontoer) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(5); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(LocalDate.of(2018, 6, 26)); assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(LocalDate.of(2018, 6, 30)); - assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(perioder.get(3).uttakPeriode().getFom()).isEqualTo(LocalDate.of(2018, 7, 1)); assertThat(perioder.get(3).uttakPeriode().getTom()).isEqualTo(LocalDate.of(2018, 8, 27)); - assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(4).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(4).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); assertThat(perioder.get(4).uttakPeriode().getFom()).isEqualTo(LocalDate.of(2018, 8, 28)); assertThat(perioder.get(4).uttakPeriode().getTom()).isEqualTo(LocalDate.of(2018, 12, 21)); } @@ -130,98 +191,175 @@ void riktig_knekk_ved_tom_for_dager_ifm_helg() { @Test void riktig_knekk_ved_tom_for_dager_ifm_helg2() { var fødselsdato = LocalDate.of(2020, 9, 20); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FEDREKVOTE).trekkdager(10)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .søknad(søknad(Søknadstype.FØDSEL, - //Starter søndag, slutter lørdag - oppgittPeriode(Stønadskontotype.FEDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1)))) - .kontoer(kontoer) - .build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FEDREKVOTE) + .trekkdager(10)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .søknad( + søknad( + Søknadstype.FØDSEL, + // Starter søndag, slutter lørdag + oppgittPeriode( + Stønadskontotype.FEDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1)))) + .kontoer(kontoer) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(2); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(LocalDate.of(2020, 11, 15)); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(LocalDate.of(2020, 11, 16)); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); } @Test void periode_etter_knekk_skal_gå_videre() { var fødselsdato = LocalDate.of(2018, 5, 15); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL).trekkdager(15)) - .konto(new Konto.Builder().type(Stønadskontotype.MØDREKVOTE).trekkdager(15 * 5)) - .konto(new Konto.Builder().type(Stønadskontotype.FELLESPERIODE).trekkdager(2)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(15)), - oppgittPeriode(Stønadskontotype.FELLESPERIODE, fødselsdato.plusWeeks(15).plusDays(1), fødselsdato.plusWeeks(15).plusDays(2)))) - .kontoer(kontoer) - .build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL) + .trekkdager(15)) + .konto( + new Konto.Builder() + .type(Stønadskontotype.MØDREKVOTE) + .trekkdager(15 * 5)) + .konto( + new Konto.Builder() + .type(Stønadskontotype.FELLESPERIODE) + .trekkdager(2)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(15)), + oppgittPeriode( + Stønadskontotype.FELLESPERIODE, + fødselsdato.plusWeeks(15).plusDays(1), + fødselsdato.plusWeeks(15).plusDays(2)))) + .kontoer(kontoer) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(5); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - //tom for mødrekvote - assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + // tom for mødrekvote + assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test - void en_lang_manglende_søkt_før_første_uttaksperiode_skal_gå_til_manuell_når_alle_dager_brukes_opp() { + void + en_lang_manglende_søkt_før_første_uttaksperiode_skal_gå_til_manuell_når_alle_dager_brukes_opp() { var fødselsdato = LocalDate.of(2018, 2, 13); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(200)); - var grunnlag = basicGrunnlag(fødselsdato).behandling(farBehandling()) - .rettOgOmsorg(bareFarRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.FORELDREPENGER, LocalDate.of(2019, 3, 20), LocalDate.of(2019, 12, 24)))) - .kontoer(kontoer); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(200)); + var grunnlag = + basicGrunnlag(fødselsdato) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.FORELDREPENGER, + LocalDate.of(2019, 3, 20), + LocalDate.of(2019, 12, 24)))) + .kontoer(kontoer); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); } @Test void tilfelle_med_lang_overføring_sykdom() { var termindato = LocalDate.of(2022, 9, 24); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(95)) - .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(95)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(90)) - .konto(new Konto.Builder().type(FORELDREPENGER_FØR_FØDSEL).trekkdager(15)) - .farUttakRundtFødselDager(10); - var overføring = OppgittPeriode.forOverføring(MØDREKVOTE, LocalDate.of(2022, 9, 26), LocalDate.of(2023, 2, 3), - OverføringÅrsak.SYKDOM_ELLER_SKADE, LocalDate.of(2022, 8, 22), LocalDate.of(2022, 8, 22), - DokumentasjonVurdering.SYKDOM_ANNEN_FORELDER_GODKJENT); - var grunnlag = basicGrunnlag(termindato).behandling(farBehandling()) - .rettOgOmsorg(beggeRett()) - .datoer(new Datoer.Builder().termin(termindato)) - .søknad(new Søknad.Builder().type(Søknadstype.TERMIN) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, LocalDate.of(2022, 9, 12), LocalDate.of(2022, 9, 23))) - .oppgittPeriode(overføring)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forSelvstendigNæringsdrivende()))) - .kontoer(kontoer); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(95)) + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(95)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(90)) + .konto(new Konto.Builder().type(FORELDREPENGER_FØR_FØDSEL).trekkdager(15)) + .farUttakRundtFødselDager(10); + var overføring = + OppgittPeriode.forOverføring( + MØDREKVOTE, + LocalDate.of(2022, 9, 26), + LocalDate.of(2023, 2, 3), + OverføringÅrsak.SYKDOM_ELLER_SKADE, + LocalDate.of(2022, 8, 22), + LocalDate.of(2022, 8, 22), + DokumentasjonVurdering.SYKDOM_ANNEN_FORELDER_GODKJENT); + var grunnlag = + basicGrunnlag(termindato) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett()) + .datoer(new Datoer.Builder().termin(termindato)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.TERMIN) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + LocalDate.of(2022, 9, 12), + LocalDate.of(2022, 9, 23))) + .oppgittPeriode(overføring)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold( + new Arbeidsforhold( + AktivitetIdentifikator + .forSelvstendigNæringsdrivende()))) + .kontoer(kontoer); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } - } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ManglendeS\303\270ktOrkestreringTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ManglendeS\303\270ktOrkestreringTest.java" index 4550e93b..9ced0f77 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ManglendeS\303\270ktOrkestreringTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ManglendeS\303\270ktOrkestreringTest.java" @@ -15,9 +15,6 @@ import java.time.LocalDate; import java.util.List; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Datoer; @@ -35,33 +32,49 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Vedtak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; +import org.junit.jupiter.api.Test; class ManglendeSøktOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @Test void skal_avslå_og_trekke_foreldrepenger_for_bare_far_har_rett_hvis_dager_igjen() { var fødselsdato = LocalDate.of(2019, 9, 3); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad( - søknad(FØDSEL, oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(50), fødselsdato.plusWeeks(52)))) - .kontoer(kontoer(konto(FORELDREPENGER, 100))) - .rettOgOmsorg(bareFarRett()) - .build(); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad( + søknad( + FØDSEL, + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(50), + fødselsdato.plusWeeks(52)))) + .kontoer(kontoer(konto(FORELDREPENGER, 100))) + .rettOgOmsorg(bareFarRett()) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); - assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isFalse(); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isFalse(); assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isFalse(); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isFalse(); assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); } @@ -74,29 +87,55 @@ private Kontoer.Builder kontoer(Konto.Builder... konto) { } @Test - void skal_kunne_håndtere_ulikt_antall_dager_gjenværende_på_arbeidsforhold_ved_manglende_søkt_periode() { + void + skal_kunne_håndtere_ulikt_antall_dager_gjenværende_på_arbeidsforhold_ved_manglende_søkt_periode() { var fødselsdato = LocalDate.of(2019, 9, 3); var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 25)); - var arbeid = new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(forFrilans())) - .arbeidsforhold(new Arbeidsforhold(forSelvstendigNæringsdrivende())); - //En fastsatt periode for å få ulikt antall saldo - var fastsattPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(6)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FORELDREPENGER, forFrilans()), - new FastsattUttakPeriodeAktivitet(new Trekkdager(0), FORELDREPENGER, forSelvstendigNæringsdrivende()))) - .periodeResultatType(INNVILGET); - //SKal gå tom for dager på frilans før aktiviteten med sn - var søknad = søknad(FØDSEL, oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(100), fødselsdato.plusWeeks(100), MORS_AKTIVITET_GODKJENT)); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad) - .kontoer(kontoer) - .arbeid(arbeid) - .rettOgOmsorg(bareFarRett()) - .revurdering(new Revurdering.Builder().endringsdato(fødselsdato).gjeldendeVedtak(new Vedtak.Builder().leggTilPeriode(fastsattPeriode))) - .build(); + var arbeid = + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(forFrilans())) + .arbeidsforhold(new Arbeidsforhold(forSelvstendigNæringsdrivende())); + // En fastsatt periode for å få ulikt antall saldo + var fastsattPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(6)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), FORELDREPENGER, forFrilans()), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(0), + FORELDREPENGER, + forSelvstendigNæringsdrivende()))) + .periodeResultatType(INNVILGET); + // SKal gå tom for dager på frilans før aktiviteten med sn + var søknad = + søknad( + FØDSEL, + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(100), + fødselsdato.plusWeeks(100), + MORS_AKTIVITET_GODKJENT)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad) + .kontoer(kontoer) + .arbeid(arbeid) + .rettOgOmsorg(bareFarRett()) + .revurdering( + new Revurdering.Builder() + .endringsdato(fødselsdato) + .gjeldendeVedtak( + new Vedtak.Builder() + .leggTilPeriode(fastsattPeriode))) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); - //UT1291 + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); + // UT1291 assertThat(perioder.get(1).isManuellBehandling()).isTrue(); } @@ -108,130 +147,201 @@ private Kontoer.Builder kontoer(Konto.Builder... konto) { var tilkommetArbeidsforhold = forArbeid(new Orgnummer("000000001"), "1234"); var startdatoNyttArbeidsforhold = fødselsdato.plusWeeks(12); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(arbeidsforhold)) - .arbeidsforhold(new Arbeidsforhold(tilkommetArbeidsforhold, startdatoNyttArbeidsforhold))) - .kontoer(kontoer(konto(FORELDREPENGER, 100))) - .inngangsvilkår(oppfyltAlleVilkår()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .behandling(farBehandling()) - .rettOgOmsorg(bareFarRett()) - .søknad(new Søknad.Builder().type(FØDSEL) - .oppgittPeriode( - oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(13), fødselsdato.plusWeeks(15).minusDays(1), MORS_AKTIVITET_GODKJENT))); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold)) + .arbeidsforhold( + new Arbeidsforhold( + tilkommetArbeidsforhold, + startdatoNyttArbeidsforhold))) + .kontoer(kontoer(konto(FORELDREPENGER, 100))) + .inngangsvilkår(oppfyltAlleVilkår()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarRett()) + .søknad( + new Søknad.Builder() + .type(FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(13), + fødselsdato.plusWeeks(15).minusDays(1), + MORS_AKTIVITET_GODKJENT))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); assertThat(perioder.get(0).uttakPeriode().getAktiviteter()).hasSize(1); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo( - new Trekkdager(Virkedager.beregnAntallVirkedager(fødselsdato.plusWeeks(6), startdatoNyttArbeidsforhold.minusDays(1)))); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo( + new Trekkdager( + Virkedager.beregnAntallVirkedager( + fødselsdato.plusWeeks(6), + startdatoNyttArbeidsforhold.minusDays(1)))); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(startdatoNyttArbeidsforhold.minusDays(1)); + assertThat(perioder.get(0).uttakPeriode().getTom()) + .isEqualTo(startdatoNyttArbeidsforhold.minusDays(1)); assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); assertThat(perioder.get(1).uttakPeriode().getAktiviteter()).hasSize(2); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(5)); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(tilkommetArbeidsforhold)).isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(tilkommetArbeidsforhold)) + .isEqualTo(new Trekkdager(5)); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(startdatoNyttArbeidsforhold); - //minus3 for vi ikke avslutter msp i helgen - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(13).minusDays(3)); + // minus3 for vi ikke avslutter msp i helgen + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(13).minusDays(3)); assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); assertThat(perioder.get(2).uttakPeriode().getAktiviteter()).hasSize(2); assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); - assertThat(perioder.get(2).uttakPeriode().getTrekkdager(tilkommetArbeidsforhold).merEnn0()).isTrue(); - + assertThat(perioder.get(2).uttakPeriode().getTrekkdager(tilkommetArbeidsforhold).merEnn0()) + .isTrue(); } @Test void skal_avslå_foreldrepenger_når_msp_innenfor_første_6_ukene_bare_mor_har_rett() { var fødselsdato = LocalDate.of(2019, 9, 3); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad( - søknad(FØDSEL, oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(3).minusDays(1)), - oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(8).minusDays(1)), - oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(15).minusDays(1)))) - .kontoer(kontoer(konto(FORELDREPENGER, 100))) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true)) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + søknad( + FØDSEL, + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(3).minusDays(1)), + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(8).minusDays(1)), + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(15).minusDays(1)))) + .kontoer(kontoer(konto(FORELDREPENGER, 100))) + .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true)) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(6); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(1).minusDays(1)); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(1).minusDays(1)); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(1)); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(3).minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT); - assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(3).minusDays(1)); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT); + assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.HUNDRED); assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(3)); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(4).minusDays(1)); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(4).minusDays(1)); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); assertThat(perioder.get(3).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(4)); - assertThat(perioder.get(3).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - assertThat(perioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT); - assertThat(perioder.get(3).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); + assertThat(perioder.get(3).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(perioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.FORELDREPENGER_KUN_MOR_HAR_RETT); + assertThat(perioder.get(3).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.HUNDRED); assertThat(perioder.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); assertThat(perioder.get(3).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); } - @Test void skal_avslå_foreldrepenger_når_msp_innenfor_første_6_ukene_mor_aleneomsorg() { var fødselsdato = LocalDate.of(2019, 9, 3); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad( - søknad(FØDSEL, oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(3).minusDays(1)), - oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(8).minusDays(1)), - oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(15).minusDays(1)))) - .kontoer(kontoer(konto(FORELDREPENGER, 100))) - .rettOgOmsorg(aleneomsorg()) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + søknad( + FØDSEL, + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(3).minusDays(1)), + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(8).minusDays(1)), + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(15).minusDays(1)))) + .kontoer(kontoer(konto(FORELDREPENGER, 100))) + .rettOgOmsorg(aleneomsorg()) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(6); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(1).minusDays(1)); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(1).minusDays(1)); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(1)); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(3).minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG); - assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(3).minusDays(1)); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG); + assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.HUNDRED); assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(3)); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(4).minusDays(1)); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(4).minusDays(1)); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); assertThat(perioder.get(3).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(4)); - assertThat(perioder.get(3).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - assertThat(perioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG); - assertThat(perioder.get(3).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); + assertThat(perioder.get(3).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(perioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.FORELDREPENGER_ALENEOMSORG); + assertThat(perioder.get(3).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.HUNDRED); assertThat(perioder.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); assertThat(perioder.get(3).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); } @@ -239,9 +349,24 @@ private Kontoer.Builder kontoer(Konto.Builder... konto) { @Test void bfhr_eneste_periode_er_første_6_ukene_skal_innvilges() { var fødselsdato = LocalDate.of(2021, 10, 11); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(FØDSEL, - OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato, fødselsdato.plusWeeks(4), null, false, fødselsdato, fødselsdato, - MorsAktivitet.SYK, MORS_AKTIVITET_GODKJENT))).kontoer(kontoer(konto(FORELDREPENGER, 100))).rettOgOmsorg(bareFarRett()).build(); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad( + søknad( + FØDSEL, + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato, + fødselsdato.plusWeeks(4), + null, + false, + fødselsdato, + fødselsdato, + MorsAktivitet.SYK, + MORS_AKTIVITET_GODKJENT))) + .kontoer(kontoer(konto(FORELDREPENGER, 100))) + .rettOgOmsorg(bareFarRett()) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(1); @@ -251,170 +376,311 @@ private Kontoer.Builder kontoer(Konto.Builder... konto) { @Test void bfhr_msp_skal_ikke_avslås_pga_tom_på_konto_hvis_dager_igjen_på_minsteretten() { var fødselsdato = LocalDate.of(2022, 6, 15); - var fpFørMsp = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7).minusDays(1), null, false, - fødselsdato, fødselsdato, MorsAktivitet.UTDANNING, MORS_AKTIVITET_GODKJENT); - var fpEtterMsp = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(9).minusDays(1), null, false, - fødselsdato, fødselsdato, null, null); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(FØDSEL, fpFørMsp, fpEtterMsp)) - .kontoer(kontoer(konto(FORELDREPENGER, 10)).minsterettDager(5)) - .rettOgOmsorg(bareFarRett()) - .build(); + var fpFørMsp = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(7).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + MorsAktivitet.UTDANNING, + MORS_AKTIVITET_GODKJENT); + var fpEtterMsp = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(9).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad(FØDSEL, fpFørMsp, fpEtterMsp)) + .kontoer(kontoer(konto(FORELDREPENGER, 10)).minsterettDager(5)) + .rettOgOmsorg(bareFarRett()) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(7)); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(8).minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(8).minusDays(1)); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); } @Test - void bfhr_msp_skal_avslås_pga_tom_på_konto_hvis_ikke_dager_igjen_på_fp_men_ubrukte_minsterett() { + void + bfhr_msp_skal_avslås_pga_tom_på_konto_hvis_ikke_dager_igjen_på_fp_men_ubrukte_minsterett() { var fødselsdato = LocalDate.of(2022, 6, 15); - var fpFørMsp = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7).minusDays(1), null, false, - fødselsdato, fødselsdato, MorsAktivitet.UTDANNING, MORS_AKTIVITET_GODKJENT); - var fpEtterMsp = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(9).minusDays(1), null, false, - fødselsdato, fødselsdato, null, null); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(FØDSEL, fpFørMsp, fpEtterMsp)) - .kontoer(kontoer(konto(FORELDREPENGER, 5)).minsterettDager(5)) - .rettOgOmsorg(bareFarRett()) - .build(); + var fpFørMsp = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(7).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + MorsAktivitet.UTDANNING, + MORS_AKTIVITET_GODKJENT); + var fpEtterMsp = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(9).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad(FØDSEL, fpFørMsp, fpEtterMsp)) + .kontoer(kontoer(konto(FORELDREPENGER, 5)).minsterettDager(5)) + .rettOgOmsorg(bareFarRett()) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(7)); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(8).minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(8).minusDays(1)); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); } @Test - void bfhr_msp_skal_avslås_pga_tom_på_konto_hvis_dager_igjen_på_minsteretten_men_brukt_alle_dager_foreldrepenger() { + void + bfhr_msp_skal_avslås_pga_tom_på_konto_hvis_dager_igjen_på_minsteretten_men_brukt_alle_dager_foreldrepenger() { var fødselsdato = LocalDate.of(2022, 6, 15); - var fpFørMsp = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), null, false, - fødselsdato, fødselsdato, MorsAktivitet.UTDANNING, MORS_AKTIVITET_GODKJENT); - var fpEtterMsp = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(11), fødselsdato.plusWeeks(12).minusDays(1), null, - false, fødselsdato, fødselsdato, null, null); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(FØDSEL, fpFørMsp, fpEtterMsp)) - .kontoer(kontoer(konto(FORELDREPENGER, 20)).minsterettDager(5)) - .rettOgOmsorg(bareFarRett()) - .build(); + var fpFørMsp = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + MorsAktivitet.UTDANNING, + MORS_AKTIVITET_GODKJENT); + var fpEtterMsp = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(11), + fødselsdato.plusWeeks(12).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad(FØDSEL, fpFørMsp, fpEtterMsp)) + .kontoer(kontoer(konto(FORELDREPENGER, 20)).minsterettDager(5)) + .rettOgOmsorg(bareFarRett()) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(10)); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(11).minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(11).minusDays(1)); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); } @Test - void bfhr_msp_skal_ikke_avslås_pga_tom_på_konto_hvis_flere_dager_igjen_på_minsteretten_enn_foreldrepenger() { + void + bfhr_msp_skal_ikke_avslås_pga_tom_på_konto_hvis_flere_dager_igjen_på_minsteretten_enn_foreldrepenger() { var fødselsdato = LocalDate.of(2022, 6, 15); - var fpFørMsp = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), null, false, - fødselsdato, fødselsdato, MorsAktivitet.UTDANNING, MORS_AKTIVITET_GODKJENT); - var fpEtterMsp = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(11), fødselsdato.plusWeeks(12).minusDays(1), null, - false, fødselsdato, fødselsdato, null, null); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(søknad(FØDSEL, fpFørMsp, fpEtterMsp)) - .kontoer(kontoer(konto(FORELDREPENGER, 30)).minsterettDager(20)) - .rettOgOmsorg(bareFarRett()) - .build(); + var fpFørMsp = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + MorsAktivitet.UTDANNING, + MORS_AKTIVITET_GODKJENT); + var fpEtterMsp = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(11), + fødselsdato.plusWeeks(12).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(søknad(FØDSEL, fpFørMsp, fpEtterMsp)) + .kontoer(kontoer(konto(FORELDREPENGER, 30)).minsterettDager(20)) + .rettOgOmsorg(bareFarRett()) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(10)); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(11).minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(11).minusDays(1)); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); } @Test void msp_pga_fødselshendelse_etter_termin_skal_innvilge_mødrekvote() { var termindato = LocalDate.of(2022, 6, 23); var fødselsdato = termindato.plusWeeks(1); - var fellesperiode = oppgittPeriode(FELLESPERIODE, termindato.minusWeeks(3), termindato.minusWeeks(2).minusDays(1)); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)); - var mødrekvote1 = oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(5).minusDays(1)); - //Hull skapt av justering ved fødselshendelsen - var mødrekvote2 = oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7)); - var grunnlag = basicGrunnlagMor(fødselsdato).datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) - .søknad(søknad(FØDSEL, fellesperiode, fpff, mødrekvote1, mødrekvote2)) - .build(); + var fellesperiode = + oppgittPeriode( + FELLESPERIODE, + termindato.minusWeeks(3), + termindato.minusWeeks(2).minusDays(1)); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)); + var mødrekvote1 = + oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(5).minusDays(1)); + // Hull skapt av justering ved fødselshendelsen + var mødrekvote2 = + oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) + .søknad(søknad(FØDSEL, fellesperiode, fpff, mødrekvote1, mødrekvote2)) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(5); - //msp skal innvilges som mødrekvote + // msp skal innvilges som mødrekvote assertThat(perioder.get(3).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(5)); - assertThat(perioder.get(3).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(perioder.get(3).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); assertThat(perioder.get(3).uttakPeriode().getStønadskontotype()).isEqualTo(MØDREKVOTE); - assertThat(perioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.MSP_INNVILGET); + assertThat(perioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.MSP_INNVILGET); var aktivitet = grunnlag.getArbeid().getAktiviteter().stream().findFirst().orElseThrow(); - assertThat(perioder.get(3).uttakPeriode().getTrekkdager(aktivitet)).isEqualTo(new Trekkdager(5)); - assertThat(perioder.get(3).uttakPeriode().getUtbetalingsgrad(aktivitet)).isEqualTo(Utbetalingsgrad.HUNDRED); + assertThat(perioder.get(3).uttakPeriode().getTrekkdager(aktivitet)) + .isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(3).uttakPeriode().getUtbetalingsgrad(aktivitet)) + .isEqualTo(Utbetalingsgrad.HUNDRED); } @Test void msp_pga_fødselshendelse_etter_termin_skal_innvilge_mødrekvote_søker_over_uke_6() { var termindato = LocalDate.of(2022, 6, 16); var fødselsdato = LocalDate.of(2022, 6, 23); - var fellesperiode = oppgittPeriode(FELLESPERIODE, LocalDate.of(2022, 5, 26), LocalDate.of(2022, 6, 1)); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, LocalDate.of(2022, 6, 2), LocalDate.of(2022, 6, 22)); - var mødrekvote1 = oppgittPeriode(MØDREKVOTE, LocalDate.of(2022, 6, 23), LocalDate.of(2022, 7, 29)); - //Hull skapt av justering ved fødselshendelsen - var mødrekvote2 = oppgittPeriode(MØDREKVOTE, LocalDate.of(2022, 8, 25), LocalDate.of(2022, 8, 31)); - var grunnlag = basicGrunnlagMor(fødselsdato).datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) - .søknad(søknad(FØDSEL, fellesperiode, fpff, mødrekvote1, mødrekvote2)) - .build(); + var fellesperiode = + oppgittPeriode(FELLESPERIODE, LocalDate.of(2022, 5, 26), LocalDate.of(2022, 6, 1)); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + LocalDate.of(2022, 6, 2), + LocalDate.of(2022, 6, 22)); + var mødrekvote1 = + oppgittPeriode(MØDREKVOTE, LocalDate.of(2022, 6, 23), LocalDate.of(2022, 7, 29)); + // Hull skapt av justering ved fødselshendelsen + var mødrekvote2 = + oppgittPeriode(MØDREKVOTE, LocalDate.of(2022, 8, 25), LocalDate.of(2022, 8, 31)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) + .søknad(søknad(FØDSEL, fellesperiode, fpff, mødrekvote1, mødrekvote2)) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(5); - //msp skal innvilges som mødrekvote + // msp skal innvilges som mødrekvote assertThat(perioder.get(3).uttakPeriode().getFom()).isEqualTo(LocalDate.of(2022, 8, 1)); assertThat(perioder.get(3).uttakPeriode().getTom()).isEqualTo(LocalDate.of(2022, 8, 3)); assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); assertThat(perioder.get(3).uttakPeriode().getStønadskontotype()).isEqualTo(MØDREKVOTE); - assertThat(perioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.MSP_INNVILGET); + assertThat(perioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.MSP_INNVILGET); var aktivitet = grunnlag.getArbeid().getAktiviteter().stream().findFirst().orElseThrow(); - assertThat(perioder.get(3).uttakPeriode().getTrekkdager(aktivitet)).isEqualTo(new Trekkdager(3)); - assertThat(perioder.get(3).uttakPeriode().getUtbetalingsgrad(aktivitet)).isEqualTo(Utbetalingsgrad.HUNDRED); + assertThat(perioder.get(3).uttakPeriode().getTrekkdager(aktivitet)) + .isEqualTo(new Trekkdager(3)); + assertThat(perioder.get(3).uttakPeriode().getUtbetalingsgrad(aktivitet)) + .isEqualTo(Utbetalingsgrad.HUNDRED); } @Test void msp_første_6_ukene_som_ikke_er_opprettet_av_fødselshendelse_skal_avlås() { var termindato = LocalDate.of(2022, 6, 21); var fødselsdato = termindato.plusDays(3); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)); - var mødrekvote1 = oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(3).minusDays(1)); - //hull mellom 3-4 - var mødrekvote2 = oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(5).minusDays(1)); - //hull mellom 5-6 - var mødrekvote3 = oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7).minusDays(1)); - var grunnlag = basicGrunnlagMor(fødselsdato).datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) - .søknad(søknad(FØDSEL, fpff, mødrekvote1, mødrekvote2, mødrekvote3)) - .build(); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)); + var mødrekvote1 = + oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(3).minusDays(1)); + // hull mellom 3-4 + var mødrekvote2 = + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(5).minusDays(1)); + // hull mellom 5-6 + var mødrekvote3 = + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(7).minusDays(1)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) + .søknad(søknad(FØDSEL, fpff, mødrekvote1, mødrekvote2, mødrekvote3)) + .build(); var perioder = fastsettPerioder(grunnlag); var aktivitet = grunnlag.getArbeid().getAktiviteter().stream().findFirst().orElseThrow(); assertThat(perioder).hasSize(6); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(3)); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(4).minusDays(1)); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(4).minusDays(1)); assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(MØDREKVOTE); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); - assertThat(perioder.get(2).uttakPeriode().getTrekkdager(aktivitet)).isEqualTo(new Trekkdager(5)); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(aktivitet)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); + assertThat(perioder.get(2).uttakPeriode().getTrekkdager(aktivitet)) + .isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(aktivitet)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(perioder.get(4).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(5)); - assertThat(perioder.get(4).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(perioder.get(4).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); assertThat(perioder.get(4).uttakPeriode().getStønadskontotype()).isEqualTo(MØDREKVOTE); - assertThat(perioder.get(4).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); - assertThat(perioder.get(4).uttakPeriode().getTrekkdager(aktivitet)).isEqualTo(new Trekkdager(5)); - assertThat(perioder.get(4).uttakPeriode().getUtbetalingsgrad(aktivitet)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(4).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_TAR_IKKE_UKENE_ETTER_FØDSEL); + assertThat(perioder.get(4).uttakPeriode().getTrekkdager(aktivitet)) + .isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(4).uttakPeriode().getUtbetalingsgrad(aktivitet)) + .isEqualTo(Utbetalingsgrad.ZERO); } - } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ManglendeS\303\270ktSammenhengendeUttakOrkestreringTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ManglendeS\303\270ktSammenhengendeUttakOrkestreringTest.java" index d46af305..8047fec8 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ManglendeS\303\270ktSammenhengendeUttakOrkestreringTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ManglendeS\303\270ktSammenhengendeUttakOrkestreringTest.java" @@ -9,9 +9,6 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.List; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -31,27 +28,49 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Vedtak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; +import org.junit.jupiter.api.Test; -class ManglendeSøktSammenhengendeUttakOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { +class ManglendeSøktSammenhengendeUttakOrkestreringTest + extends FastsettePerioderRegelOrkestreringTestBase { @Test void skal_avslå_og_trekke_mødrekvote_for_mor_hvis_dager_igjen() { var fødselsdato = LocalDate.of(2019, 9, 3); - var grunnlag = basicGrunnlagMorSammenhengendeUttak(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - //manglende søkt i mellom - oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(9)))) - .kontoer(kontoer(konto(Stønadskontotype.MØDREKVOTE, 1000), konto(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, 15))) - .build(); + var grunnlag = + basicGrunnlagMorSammenhengendeUttak(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + // manglende søkt i mellom + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(9)))) + .kontoer( + kontoer( + konto(Stønadskontotype.MØDREKVOTE, 1000), + konto(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, 15))) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(4); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.HULL_MELLOM_FORELDRENES_PERIODER); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isNotEqualByComparingTo(BigDecimal.ZERO); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.HULL_MELLOM_FORELDRENES_PERIODER); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isNotEqualByComparingTo(BigDecimal.ZERO); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); } private Kontoer.Builder kontoer(Konto.Builder... konto) { @@ -65,101 +84,193 @@ private Kontoer.Builder kontoer(Konto.Builder... konto) { @Test void skal_avslå_og_trekke_foreldrepenger_for_far_med_enerett_hvis_dager_igjen() { var fødselsdato = LocalDate.of(2019, 9, 3); - var oppgittPeriode = oppgittPeriode(Stønadskontotype.FORELDREPENGER, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), - MORS_AKTIVITET_GODKJENT); - var søknad = søknad(Søknadstype.FØDSEL, - //manglende søkt blir opprettet før foreldrepenger-perioder - oppgittPeriode); - var grunnlag = basicGrunnlagFarSammenhengendeUttak(fødselsdato).rettOgOmsorg(bareFarRett()) - .søknad(søknad) - .kontoer(kontoer(konto(Stønadskontotype.FORELDREPENGER, 1000))) - .build(); + var oppgittPeriode = + oppgittPeriode( + Stønadskontotype.FORELDREPENGER, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + MORS_AKTIVITET_GODKJENT); + var søknad = + søknad( + Søknadstype.FØDSEL, + // manglende søkt blir opprettet før foreldrepenger-perioder + oppgittPeriode); + var grunnlag = + basicGrunnlagFarSammenhengendeUttak(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .kontoer(kontoer(konto(Stønadskontotype.FORELDREPENGER, 1000))) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(2); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isNotZero(); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isNotZero(); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER); } private RegelGrunnlag.Builder basicGrunnlagFarSammenhengendeUttak(LocalDate fødselsdato) { - return basicGrunnlag(fødselsdato).behandling(farBehandling().kreverSammenhengendeUttak(true)); + return basicGrunnlag(fødselsdato) + .behandling(farBehandling().kreverSammenhengendeUttak(true)); } private RegelGrunnlag.Builder basicGrunnlagMorSammenhengendeUttak(LocalDate fødselsdato) { - return basicGrunnlag(fødselsdato).behandling(morBehandling().kreverSammenhengendeUttak(true)); + return basicGrunnlag(fødselsdato) + .behandling(morBehandling().kreverSammenhengendeUttak(true)); } @Test void skal_avslå_og_ikke_trekke_dager_når_alle_kontoer_går_tom() { var fødselsdato = LocalDate.of(2019, 9, 3); - var grunnlag = basicGrunnlagMorSammenhengendeUttak(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - //manglende søkt i mellom - oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(9)))) - .kontoer(kontoer(konto(Stønadskontotype.MØDREKVOTE, 30), konto(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, 15))) - .build(); + var grunnlag = + basicGrunnlagMorSammenhengendeUttak(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + // manglende søkt i mellom + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(9)))) + .kontoer( + kontoer( + konto(Stønadskontotype.MØDREKVOTE, 30), + konto(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, 15))) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(4); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isZero(); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isZero(); assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isNull(); - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); } @Test - void skal_avslå_og_ikke_trekke_dager_når_alle_kontoer_går_tom_midt_i_en_manglede_søkt_periode() { + void + skal_avslå_og_ikke_trekke_dager_når_alle_kontoer_går_tom_midt_i_en_manglede_søkt_periode() { var fødselsdato = LocalDate.of(2019, 9, 3); - var grunnlag = basicGrunnlagFarSammenhengendeUttak(fødselsdato).rettOgOmsorg(bareFarRett()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().trekkdager(30).type(FORELDREPENGER))) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10)), - //Bare far har rett, msp i mellom - oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(20)))) - .build(); + var grunnlag = + basicGrunnlagFarSammenhengendeUttak(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(30) + .type(FORELDREPENGER))) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10)), + // Bare far har rett, msp i mellom + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(20)))) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(4); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); - assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); + assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isNotZero(); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isNotZero(); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isNull(); - assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isZero(); - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isZero(); + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); } @Test - void skal_kunne_håndtere_ulikt_antall_dager_gjenværende_på_arbeidsforhold_ved_manglende_søkt_periode() { + void + skal_kunne_håndtere_ulikt_antall_dager_gjenværende_på_arbeidsforhold_ved_manglende_søkt_periode() { var fødselsdato = LocalDate.of(2019, 9, 3); - var kontoer = new Kontoer.Builder().konto(konto(Stønadskontotype.MØDREKVOTE, 75)).konto(konto(Stønadskontotype.FELLESPERIODE, 1)); - var arbeid = new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forFrilans())) - .arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forSelvstendigNæringsdrivende())); - //En fastsatt periode for å få ulikt antall saldo - var fastsattPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.minusDays(1), fødselsdato.minusDays(1)) - .aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), Stønadskontotype.FELLESPERIODE, AktivitetIdentifikator.forFrilans()), - new FastsattUttakPeriodeAktivitet(new Trekkdager(0), Stønadskontotype.FELLESPERIODE, - AktivitetIdentifikator.forSelvstendigNæringsdrivende()))) - .periodeResultatType(Perioderesultattype.INNVILGET); - var grunnlag = basicGrunnlagMorSammenhengendeUttak(fødselsdato).søknad( - søknad(Søknadstype.FØDSEL, oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(15).minusDays(1)), - //Har igjen 1 dag på fellesperiode på ett arbeidsforhold når manglende søkt skal behandles - oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato.plusWeeks(16), fødselsdato.plusWeeks(17).minusDays(1)))) - .kontoer(kontoer) - .arbeid(arbeid) - .revurdering(new Revurdering.Builder().endringsdato(fødselsdato).gjeldendeVedtak(new Vedtak.Builder().leggTilPeriode(fastsattPeriode))) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(konto(Stønadskontotype.MØDREKVOTE, 75)) + .konto(konto(Stønadskontotype.FELLESPERIODE, 1)); + var arbeid = + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(AktivitetIdentifikator.forFrilans())) + .arbeidsforhold( + new Arbeidsforhold( + AktivitetIdentifikator.forSelvstendigNæringsdrivende())); + // En fastsatt periode for å få ulikt antall saldo + var fastsattPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode(fødselsdato.minusDays(1), fødselsdato.minusDays(1)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), + Stønadskontotype.FELLESPERIODE, + AktivitetIdentifikator.forFrilans()), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(0), + Stønadskontotype.FELLESPERIODE, + AktivitetIdentifikator + .forSelvstendigNæringsdrivende()))) + .periodeResultatType(Perioderesultattype.INNVILGET); + var grunnlag = + basicGrunnlagMorSammenhengendeUttak(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(15).minusDays(1)), + // Har igjen 1 dag på fellesperiode på ett arbeidsforhold + // når manglende søkt skal behandles + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato.plusWeeks(16), + fødselsdato.plusWeeks(17).minusDays(1)))) + .kontoer(kontoer) + .arbeid(arbeid) + .revurdering( + new Revurdering.Builder() + .endringsdato(fødselsdato) + .gjeldendeVedtak( + new Vedtak.Builder() + .leggTilPeriode(fastsattPeriode))) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(4); - //UT1291 + // UT1291 assertThat(perioder.get(3).isManuellBehandling()).isTrue(); } @@ -168,87 +279,145 @@ private RegelGrunnlag.Builder basicGrunnlagMorSammenhengendeUttak(LocalDate fød var fødselsdato = LocalDate.of(2018, 1, 1); var arbeidsforhold = AktivitetIdentifikator.forArbeid(new Orgnummer("000000001"), null); - var arbeidsforholdMedId = AktivitetIdentifikator.forArbeid(new Orgnummer("000000001"), "1234"); - - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(arbeidsforhold)) - .arbeidsforhold(new Arbeidsforhold(arbeidsforholdMedId, fødselsdato.plusWeeks(12)))) - .kontoer(defaultKontoer()) - .inngangsvilkår(oppfyltAlleVilkår()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .behandling(morBehandling().kreverSammenhengendeUttak(true)) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.FELLESPERIODE, fødselsdato.plusWeeks(11), fødselsdato.plusWeeks(15).minusDays(1)))); + var arbeidsforholdMedId = + AktivitetIdentifikator.forArbeid(new Orgnummer("000000001"), "1234"); + + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold)) + .arbeidsforhold( + new Arbeidsforhold( + arbeidsforholdMedId, + fødselsdato.plusWeeks(12)))) + .kontoer(defaultKontoer()) + .inngangsvilkår(oppfyltAlleVilkår()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .behandling(morBehandling().kreverSammenhengendeUttak(true)) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.FELLESPERIODE, + fødselsdato.plusWeeks(11), + fødselsdato.plusWeeks(15).minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(6); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(3 * 5)); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(3 * 5)); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(6 * 5)); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(6 * 5)); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(4 * 5)); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(4 * 5)); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); - - - assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(3).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FELLESPERIODE); - assertThat(perioder.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); + + assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(3).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FELLESPERIODE); + assertThat(perioder.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(5)); assertThat(perioder.get(3).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(10)); - assertThat(perioder.get(3).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(11).minusDays(3)); //tar ikke med helg - - assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(4).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FELLESPERIODE); - assertThat(perioder.get(4).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(3).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(11).minusDays(3)); // tar ikke med helg + + assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(4).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FELLESPERIODE); + assertThat(perioder.get(4).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(5)); assertThat(perioder.get(4).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(11)); - assertThat(perioder.get(4).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); - - assertThat(perioder.get(5).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(5).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FELLESPERIODE); - assertThat(perioder.get(5).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(3 * 5)); + assertThat(perioder.get(4).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); + + assertThat(perioder.get(5).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(5).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FELLESPERIODE); + assertThat(perioder.get(5).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(3 * 5)); assertThat(perioder.get(5).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(12)); - assertThat(perioder.get(5).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(15).minusDays(1)); + assertThat(perioder.get(5).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(15).minusDays(1)); } @Test void skal_avslå_og_trekke_foreldrepenger_for_bare_far_har_rett_hvis_dager_igjen_regresjon() { var fødselsdato = LocalDate.of(2019, 9, 3); - var grunnlag = basicGrunnlagFarSammenhengendeUttak(fødselsdato).søknad( - søknad(FØDSEL, oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(50), fødselsdato.plusWeeks(52)))) - .kontoer(kontoer(konto(FORELDREPENGER, 100))) - .rettOgOmsorg(bareFarRett()) - .build(); + var grunnlag = + basicGrunnlagFarSammenhengendeUttak(fødselsdato) + .søknad( + søknad( + FØDSEL, + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(50), + fødselsdato.plusWeeks(52)))) + .kontoer(kontoer(konto(FORELDREPENGER, 100))) + .rettOgOmsorg(bareFarRett()) + .build(); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); - assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isFalse(); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isFalse(); assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isFalse(); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isFalse(); assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); } @@ -259,27 +428,43 @@ private Datoer.Builder datoer(LocalDate fødselsdato) { @Test void foreldrepengerFørFødsel_for_kort_fpff_starter_for_sent() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagMorSammenhengendeUttak(fødselsdato).søknad( - søknad(FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(1), fødselsdato.minusDays(1)))); + var grunnlag = + basicGrunnlagMorSammenhengendeUttak(fødselsdato) + .søknad( + søknad( + FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(1), + fødselsdato.minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(2); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.FORELDREPENGER_FØR_FØDSEL); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(1)); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(5)); assertThat(perioder.get(0).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(0).evalueringResultat()).isNotNull(); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.HULL_MELLOM_FORELDRENES_PERIODER); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.HULL_MELLOM_FORELDRENES_PERIODER); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(3)); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(30)); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(3)); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(30)); assertThat(perioder.get(1).innsendtGrunnlag()).isNotNull(); assertThat(perioder.get(1).evalueringResultat()).isNotNull(); } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/MinsterettOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/MinsterettOrkestreringTest.java index f22a1801..817762bc 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/MinsterettOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/MinsterettOrkestreringTest.java @@ -21,11 +21,6 @@ import java.time.LocalDate; import java.util.List; import java.util.Set; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -46,6 +41,9 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.PeriodeResultatÅrsak; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; class MinsterettOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @@ -55,88 +53,221 @@ class MinsterettOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 200)).minsterettDager(75); var oppgittPeriode = foreldrepenger(fødselsdato, MorsAktivitet.UFØRE, null); var utsettelseFra = Virkedager.justerHelgTilMandag(fødselsdato.plusMonths(6)); - var oppgittPeriodeU1 = foreldrepengerUtsettelse(utsettelseFra, Virkedager.plusVirkedager(utsettelseFra, 19), MorsAktivitet.UTDANNING, - MORS_AKTIVITET_IKKE_DOKUMENTERT); + var oppgittPeriodeU1 = + foreldrepengerUtsettelse( + utsettelseFra, + Virkedager.plusVirkedager(utsettelseFra, 19), + MorsAktivitet.UTDANNING, + MORS_AKTIVITET_IKKE_DOKUMENTERT); var oppgittPeriode2 = foreldrepenger(fødselsdato.plusYears(1), MorsAktivitet.UFØRE, null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode, oppgittPeriodeU1, oppgittPeriode2)); - - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling().kreverSammenhengendeUttak(false)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(true)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder( + List.of(oppgittPeriode, oppgittPeriodeU1, oppgittPeriode2)); + + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling().kreverSammenhengendeUttak(false)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(true)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.stream() - .anyMatch( - p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, 40))).isTrue(); - assertThat(fastsattePerioder.stream() - .anyMatch( - p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, 35))).isTrue(); - assertThat(fastsattePerioder.stream() - .anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, AKTIVITETSKRAVET_UTDANNING_IKKE_DOKUMENTERT, 20))).isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 40))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 35))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + AKTIVITETSKRAVET_UTDANNING_IKKE_DOKUMENTERT, + 20))) + .isTrue(); // Søkt ufør, ikke dager igjen på minstekvote assertThat( - fastsattePerioder.stream().anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, BARE_FAR_RETT_IKKE_SØKT, 5))).isTrue(); - assertThat(fastsattePerioder.stream() - .anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, IKKE_STØNADSDAGER_IGJEN, -1))).isTrue(); + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + BARE_FAR_RETT_IKKE_SØKT, + 5))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + IKKE_STØNADSDAGER_IGJEN, + -1))) + .isTrue(); } @Test void bfhr_mor_med_bekreftet_uføretrygd_flerbarn_skal_godkjennes() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 2, 1)); - var kontoer = new Kontoer.Builder().kontoList(List.of(konto(FORELDREPENGER, 285))).flerbarnsdager(85).minsterettDager(85); + var kontoer = + new Kontoer.Builder() + .kontoList(List.of(konto(FORELDREPENGER, 285))) + .flerbarnsdager(85) + .minsterettDager(85); var oppgittPeriode = foreldrepenger(fødselsdato, MorsAktivitet.UFØRE, null); var oppgittPeriode2 = foreldrepenger(fødselsdato.plusYears(1), MorsAktivitet.UFØRE, null); var oppgittPeriode3 = foreldrepenger(fødselsdato.plusYears(2), MorsAktivitet.UFØRE, null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode, oppgittPeriode2, oppgittPeriode3)); - - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling().kreverSammenhengendeUttak(false)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(true)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder( + List.of(oppgittPeriode, oppgittPeriode2, oppgittPeriode3)); + + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling().kreverSammenhengendeUttak(false)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(true)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(harPeriode(fastsattePerioder.get(0).uttakPeriode(), Perioderesultattype.AVSLÅTT, BARE_FAR_RETT_IKKE_SØKT, 5)).isTrue(); assertThat( - harPeriode(fastsattePerioder.get(1).uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, - 40)).isTrue(); - assertThat(harPeriode(fastsattePerioder.get(2).uttakPeriode(), Perioderesultattype.AVSLÅTT, BARE_FAR_RETT_IKKE_SØKT, 195)).isTrue(); + harPeriode( + fastsattePerioder.get(0).uttakPeriode(), + Perioderesultattype.AVSLÅTT, + BARE_FAR_RETT_IKKE_SØKT, + 5)) + .isTrue(); + assertThat( + harPeriode( + fastsattePerioder.get(1).uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 40)) + .isTrue(); + assertThat( + harPeriode( + fastsattePerioder.get(2).uttakPeriode(), + Perioderesultattype.AVSLÅTT, + BARE_FAR_RETT_IKKE_SØKT, + 195)) + .isTrue(); + assertThat( + harPeriode( + fastsattePerioder.get(4).uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 40)) + .isTrue(); assertThat( - harPeriode(fastsattePerioder.get(4).uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, - 40)).isTrue(); - assertThat(harPeriode(fastsattePerioder.get(5).uttakPeriode(), Perioderesultattype.AVSLÅTT, BARE_FAR_RETT_IKKE_SØKT, 0)).isTrue(); + harPeriode( + fastsattePerioder.get(5).uttakPeriode(), + Perioderesultattype.AVSLÅTT, + BARE_FAR_RETT_IKKE_SØKT, + 0)) + .isTrue(); assertThat( - harPeriode(fastsattePerioder.get(6).uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, - 5)).isTrue(); - assertThat(harPeriode(fastsattePerioder.get(7).uttakPeriode(), Perioderesultattype.AVSLÅTT, IKKE_STØNADSDAGER_IGJEN, -1)).isTrue(); + harPeriode( + fastsattePerioder.get(6).uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 5)) + .isTrue(); + assertThat( + harPeriode( + fastsattePerioder.get(7).uttakPeriode(), + Perioderesultattype.AVSLÅTT, + IKKE_STØNADSDAGER_IGJEN, + -1)) + .isTrue(); } @Test void bfhr_mor_med_bekreftet_uføretrygd_overskrider_minsterett() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 200)).minsterettDager(75); - var oppgittPeriode = foreldrepenger(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(23).minusDays(1), MorsAktivitet.UFØRE, null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode)); - - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling().kreverSammenhengendeUttak(false)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(true)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var oppgittPeriode = + foreldrepenger( + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(23).minusDays(1), + MorsAktivitet.UFØRE, + null); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(oppgittPeriode)); + + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling().kreverSammenhengendeUttak(false)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(true)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.stream() - .anyMatch( - p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, 75))).isTrue(); assertThat( - fastsattePerioder.stream().anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, BARE_FAR_RETT_IKKE_SØKT, 5))).isTrue(); - assertThat(fastsattePerioder.stream() - .anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, AKTIVITET_UKJENT_UDOKUMENTERT, 5))).isTrue(); + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 75))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + BARE_FAR_RETT_IKKE_SØKT, + 5))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + AKTIVITET_UKJENT_UDOKUMENTERT, + 5))) + .isTrue(); // Søkt ufør, ikke dager igjen på minstekvote } @@ -144,355 +275,835 @@ class MinsterettOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB void bfhr_enkel_minsterett_vs_innvilget_med_mye_godkjent_aktivitet() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 200)).minsterettDager(40); - var oppgittPeriode = foreldrepenger(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(45).minusDays(1), MorsAktivitet.UTDANNING, - MORS_AKTIVITET_GODKJENT); - var oppgittPeriode2 = foreldrepenger(fødselsdato.plusWeeks(45), fødselsdato.plusWeeks(47).minusDays(1), null, null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode, oppgittPeriode2)); - - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling().kreverSammenhengendeUttak(false)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(true)) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer) - .søknad(søknad) - .build(); + var oppgittPeriode = + foreldrepenger( + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(45).minusDays(1), + MorsAktivitet.UTDANNING, + MORS_AKTIVITET_GODKJENT); + var oppgittPeriode2 = + foreldrepenger( + fødselsdato.plusWeeks(45), + fødselsdato.plusWeeks(47).minusDays(1), + null, + null); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(oppgittPeriode, oppgittPeriode2)); + + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling().kreverSammenhengendeUttak(false)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(true)) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer) + .søknad(søknad) + .build(); var fastsattePerioder = fastsettPerioder(grunnlag); assertThat(fastsattePerioder).hasSize(4); - assertThat(fastsattePerioder.stream() - .anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT, 190))).isTrue(); - assertThat(fastsattePerioder.stream() - .anyMatch( - p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, 5))).isTrue(); assertThat( - fastsattePerioder.stream().anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, BARE_FAR_RETT_IKKE_SØKT, 5))).isTrue(); + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT, + 190))) + .isTrue(); assertThat( - fastsattePerioder.stream().anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, IKKE_STØNADSDAGER_IGJEN, 0))).isTrue(); + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 5))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + BARE_FAR_RETT_IKKE_SØKT, + 5))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + IKKE_STØNADSDAGER_IGJEN, + 0))) + .isTrue(); } @Test void bfhr_mor_med_bekreftet_uføretrygd_uten_aktivitetskrav_skal_godkjennes() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 200)).utenAktivitetskravDager(75); + var kontoer = + new Kontoer.Builder().konto(konto(FORELDREPENGER, 200)).utenAktivitetskravDager(75); var oppgittPeriode = foreldrepenger(fødselsdato, MorsAktivitet.UFØRE, null); var oppgittPeriode2 = foreldrepenger(fødselsdato.plusWeeks(25), MorsAktivitet.UFØRE, null); var oppgittPeriode3 = foreldrepenger(fødselsdato.plusWeeks(40), MorsAktivitet.UFØRE, null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode, oppgittPeriode2, oppgittPeriode3)); - - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling().kreverSammenhengendeUttak(false)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(true)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder( + List.of(oppgittPeriode, oppgittPeriode2, oppgittPeriode3)); + + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling().kreverSammenhengendeUttak(false)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(true)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.stream() - .anyMatch( - p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, 40))).isTrue(); - assertThat(fastsattePerioder.stream() - .anyMatch( - p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, 35))).isTrue(); - assertThat(fastsattePerioder.stream() - .anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, AKTIVITET_UKJENT_UDOKUMENTERT, 5))).isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 40))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 35))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + AKTIVITET_UKJENT_UDOKUMENTERT, + 5))) + .isTrue(); // Søkt ufør, ikke dager igjen på minstekvote assertThat( - fastsattePerioder.stream().anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, BARE_FAR_RETT_IKKE_SØKT, 5))).isTrue(); - assertThat(fastsattePerioder.stream() - .anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, IKKE_STØNADSDAGER_IGJEN, -1))).isTrue(); + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + BARE_FAR_RETT_IKKE_SØKT, + 5))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + IKKE_STØNADSDAGER_IGJEN, + -1))) + .isTrue(); } @Test - void bfhr_mor_med_bekreftet_uføretrygd_uten_aktivitetskrav_avslått_periode_med_aktivitet_skal_godkjennes() { + void + bfhr_mor_med_bekreftet_uføretrygd_uten_aktivitetskrav_avslått_periode_med_aktivitet_skal_godkjennes() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 200)).utenAktivitetskravDager(75); - var oppgittPeriode = foreldrepenger(fødselsdato.minusWeeks(1), MorsAktivitet.SYK, MORS_AKTIVITET_GODKJENT); + var kontoer = + new Kontoer.Builder().konto(konto(FORELDREPENGER, 200)).utenAktivitetskravDager(75); + var oppgittPeriode = + foreldrepenger( + fødselsdato.minusWeeks(1), MorsAktivitet.SYK, MORS_AKTIVITET_GODKJENT); var oppgittPeriode2 = foreldrepenger(fødselsdato.plusWeeks(14), MorsAktivitet.SYK, null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode, oppgittPeriode2)); - - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling().kreverSammenhengendeUttak(false)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(true)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(oppgittPeriode, oppgittPeriode2)); + + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling().kreverSammenhengendeUttak(false)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(true)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.stream() - .anyMatch( - p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT, 40))).isTrue(); // Akt krav oppfylt - assertThat(fastsattePerioder.stream() - .anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, BARE_FAR_RETT_IKKE_SØKT, 35))).isTrue(); // Mellomliggende - assertThat(fastsattePerioder.stream() - .anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, - 40))).isTrue(); // Akt krav ikke oppfylt - innvilget fra uføre + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT, + 40))) + .isTrue(); // Akt krav oppfylt + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + BARE_FAR_RETT_IKKE_SØKT, + 35))) + .isTrue(); // Mellomliggende + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 40))) + .isTrue(); // Akt krav ikke oppfylt - innvilget fra uføre } @Test void bfhr_mor_med_bekreftet_uføretrygd_uten_aktivitetskrav_flerbarn_skal_godkjennes() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().kontoList(List.of(konto(FORELDREPENGER, 285))).flerbarnsdager(85).utenAktivitetskravDager(75); + var kontoer = + new Kontoer.Builder() + .kontoList(List.of(konto(FORELDREPENGER, 285))) + .flerbarnsdager(85) + .utenAktivitetskravDager(75); var oppgittPeriode = foreldrepenger(fødselsdato, MorsAktivitet.UFØRE, null); - var oppgittPeriode2 = foreldrepenger(Virkedager.justerHelgTilMandag(fødselsdato.plusWeeks(49)), MorsAktivitet.UFØRE, - null); // Strekker seg utover stønadsperioden - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode, oppgittPeriode2)); - - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling().kreverSammenhengendeUttak(false)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(true)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var oppgittPeriode2 = + foreldrepenger( + Virkedager.justerHelgTilMandag(fødselsdato.plusWeeks(49)), + MorsAktivitet.UFØRE, + null); // Strekker seg utover stønadsperioden + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(oppgittPeriode, oppgittPeriode2)); + + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling().kreverSammenhengendeUttak(false)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(true)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.stream() - .anyMatch( - p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, 40))).isTrue(); - assertThat(fastsattePerioder.stream() - .anyMatch( - p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, 35))).isTrue(); - assertThat( - fastsattePerioder.stream().anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, BARE_FAR_RETT_IKKE_SØKT, 5))).isTrue(); - assertThat(fastsattePerioder.stream() - .anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, IKKE_STØNADSDAGER_IGJEN, -1))).isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 40))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 35))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + BARE_FAR_RETT_IKKE_SØKT, + 5))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + IKKE_STØNADSDAGER_IGJEN, + -1))) + .isTrue(); } @Test void bfhr_mor_med_bekreftet_uføretrygd_uten_aktivitetskrav_overskrider_minsterett() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 200)).utenAktivitetskravDager(75); - var oppgittPeriode = foreldrepenger(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(23).minusDays(1), MorsAktivitet.UFØRE, null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode)); - - var grunnlag = new RegelGrunnlag.Builder().behandling(farBehandling().kreverSammenhengendeUttak(false)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett().morUføretrygd(true)) - .søknad(søknad) - .inngangsvilkår(oppfyltAlleVilkår()) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) - .kontoer(kontoer); + var kontoer = + new Kontoer.Builder().konto(konto(FORELDREPENGER, 200)).utenAktivitetskravDager(75); + var oppgittPeriode = + foreldrepenger( + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(23).minusDays(1), + MorsAktivitet.UFØRE, + null); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(oppgittPeriode)); + + var grunnlag = + new RegelGrunnlag.Builder() + .behandling(farBehandling().kreverSammenhengendeUttak(false)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett().morUføretrygd(true)) + .søknad(søknad) + .inngangsvilkår(oppfyltAlleVilkår()) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD))) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); - assertThat(fastsattePerioder.stream() - .anyMatch( - p -> harPeriode(p.uttakPeriode(), Perioderesultattype.INNVILGET, FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, 75))).isTrue(); assertThat( - fastsattePerioder.stream().anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, BARE_FAR_RETT_IKKE_SØKT, 5))).isTrue(); - assertThat(fastsattePerioder.stream() - .anyMatch(p -> harPeriode(p.uttakPeriode(), Perioderesultattype.AVSLÅTT, AKTIVITET_UKJENT_UDOKUMENTERT, 5))).isTrue(); + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.INNVILGET, + FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV, + 75))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + BARE_FAR_RETT_IKKE_SØKT, + 5))) + .isTrue(); + assertThat( + fastsattePerioder.stream() + .anyMatch( + p -> + harPeriode( + p.uttakPeriode(), + Perioderesultattype.AVSLÅTT, + AKTIVITET_UKJENT_UDOKUMENTERT, + 5))) + .isTrue(); // Søkt ufør, ikke dager igjen på minstekvote } @Test void bfhr_flerbarnsdager_skal_også_trekkes_fra_minsteretten() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 200)).minsterettDager(5).flerbarnsdager(5); - //Uten mors aktivitet bruker opp minsterett - var oppgittPeriode1 = oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7).minusDays(1)); - var oppgittPeriode2 = oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(8).minusDays(1), true, null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode1, oppgittPeriode2)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER, 200)) + .minsterettDager(5) + .flerbarnsdager(5); + // Uten mors aktivitet bruker opp minsterett + var oppgittPeriode1 = + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(7).minusDays(1)); + var oppgittPeriode2 = + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(8).minusDays(1), + true, + null); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(oppgittPeriode1, oppgittPeriode2)); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(bareFarRett()).søknad(søknad).kontoer(kontoer); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); assertThat(fastsattePerioder).hasSize(2); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); } @Test void bfhr_flerbarnsdager_minsterett_skal_gå_tom_for_dager_selv_om_ikke_minsterett_brukes_opp() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 40)).minsterettDager(17).flerbarnsdager(10); - var oppgittPeriode1 = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(14).minusDays(1), null, - false, fødselsdato, fødselsdato, MorsAktivitet.ARBEID, MORS_AKTIVITET_GODKJENT); - var oppgittPeriode2 = oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(14), fødselsdato.plusWeeks(17).minusDays(1), true, null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode1, oppgittPeriode2)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER, 40)) + .minsterettDager(17) + .flerbarnsdager(10); + var oppgittPeriode1 = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(14).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + MorsAktivitet.ARBEID, + MORS_AKTIVITET_GODKJENT); + var oppgittPeriode2 = + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(14), + fødselsdato.plusWeeks(17).minusDays(1), + true, + null); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(oppgittPeriode1, oppgittPeriode2)); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(bareFarRett()).søknad(søknad).kontoer(kontoer); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); assertThat(fastsattePerioder).hasSize(2); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IKKE_STØNADSDAGER_IGJEN); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IKKE_STØNADSDAGER_IGJEN); } @Test void bfhr_flerbarnsdager_minsterett_skal_gå_tom_for_dager_når_tomt_for_flerbarnsdager() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 40)).minsterettDager(10).flerbarnsdager(10); - var oppgittPeriode1 = oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), true, null); - var oppgittPeriode2 = oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(10).minusDays(1), true, null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode1, oppgittPeriode2)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER, 40)) + .minsterettDager(10) + .flerbarnsdager(10); + var oppgittPeriode1 = + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + true, + null); + var oppgittPeriode2 = + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(10).minusDays(1), + true, + null); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(oppgittPeriode1, oppgittPeriode2)); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(bareFarRett()).søknad(søknad).kontoer(kontoer); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); assertThat(fastsattePerioder).hasSize(2); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); } @Test void bfhr_flerbarnsdager_trekker_minsterett() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 40)).minsterettDager(25).flerbarnsdager(20); - var oppgittPeriode1 = oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), true, null); - var gradertPeriode = OppgittPeriode.forGradering(FORELDREPENGER, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(10), BigDecimal.TEN, null, - true, Set.of(ARBEIDSFORHOLD), fødselsdato, fødselsdato, null, null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(oppgittPeriode1, gradertPeriode)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER, 40)) + .minsterettDager(25) + .flerbarnsdager(20); + var oppgittPeriode1 = + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + true, + null); + var gradertPeriode = + OppgittPeriode.forGradering( + FORELDREPENGER, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(10), + BigDecimal.TEN, + null, + true, + Set.of(ARBEIDSFORHOLD), + fødselsdato, + fødselsdato, + null, + null); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(oppgittPeriode1, gradertPeriode)); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(bareFarRett()).søknad(søknad).kontoer(kontoer); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); assertThat(fastsattePerioder).hasSize(2); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo( - GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); } @ParameterizedTest @EnumSource(UtsettelseÅrsak.class) - void utsettelser_etter_startdato_neste_stønadsperiode_innvilges(UtsettelseÅrsak utsettelseÅrsak) { + void utsettelser_etter_startdato_neste_stønadsperiode_innvilges( + UtsettelseÅrsak utsettelseÅrsak) { var fødselsdatoFørsteSak = LocalDate.of(2023, 1, 6); var startdatoNesteStønadsperiode = fødselsdatoFørsteSak.plusYears(2); - var grunnlag = basicGrunnlagFar(fødselsdatoFørsteSak).kontoer(defaultKontoer().etterNesteStønadsperiodeDager(10)) - .datoer(new Datoer.Builder().fødsel(fødselsdatoFørsteSak).startdatoNesteStønadsperiode(startdatoNesteStønadsperiode)) - .søknad(søknad(FØDSEL, utsettelsePeriode(startdatoNesteStønadsperiode, startdatoNesteStønadsperiode.plusWeeks(2), utsettelseÅrsak, null), - //Bruker opp minsteretten - oppgittPeriode(FEDREKVOTE, startdatoNesteStønadsperiode.plusWeeks(4), startdatoNesteStønadsperiode.plusWeeks(6).minusDays(1)), - utsettelsePeriode(startdatoNesteStønadsperiode.plusWeeks(8), startdatoNesteStønadsperiode.plusWeeks(10), utsettelseÅrsak, null))); + var grunnlag = + basicGrunnlagFar(fødselsdatoFørsteSak) + .kontoer(defaultKontoer().etterNesteStønadsperiodeDager(10)) + .datoer( + new Datoer.Builder() + .fødsel(fødselsdatoFørsteSak) + .startdatoNesteStønadsperiode(startdatoNesteStønadsperiode)) + .søknad( + søknad( + FØDSEL, + utsettelsePeriode( + startdatoNesteStønadsperiode, + startdatoNesteStønadsperiode.plusWeeks(2), + utsettelseÅrsak, + null), + // Bruker opp minsteretten + oppgittPeriode( + FEDREKVOTE, + startdatoNesteStønadsperiode.plusWeeks(4), + startdatoNesteStønadsperiode + .plusWeeks(6) + .minusDays(1)), + utsettelsePeriode( + startdatoNesteStønadsperiode.plusWeeks(8), + startdatoNesteStønadsperiode.plusWeeks(10), + utsettelseÅrsak, + null))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.UTSETTELSE_GYLDIG); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.UTSETTELSE_GYLDIG); - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.UTSETTELSE_GYLDIG); + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.UTSETTELSE_GYLDIG); } @ParameterizedTest @EnumSource(UtsettelseÅrsak.class) - void utsettelser_etter_startdato_neste_stønadsperiode_avslås_hvis_ingen_to_tette_minsterett(UtsettelseÅrsak utsettelseÅrsak) { + void utsettelser_etter_startdato_neste_stønadsperiode_avslås_hvis_ingen_to_tette_minsterett( + UtsettelseÅrsak utsettelseÅrsak) { var fødselsdatoFørsteSak = LocalDate.of(2021, 1, 6); var startdatoNesteStønadsperiode = fødselsdatoFørsteSak.plusYears(2); - var grunnlag = basicGrunnlagFar(fødselsdatoFørsteSak).kontoer(defaultKontoer().etterNesteStønadsperiodeDager(0)) - .datoer(new Datoer.Builder().fødsel(fødselsdatoFørsteSak).startdatoNesteStønadsperiode(startdatoNesteStønadsperiode)) - .søknad(søknad(FØDSEL, - utsettelsePeriode(startdatoNesteStønadsperiode, startdatoNesteStønadsperiode.plusWeeks(2).minusDays(1), utsettelseÅrsak, null), - oppgittPeriode(FEDREKVOTE, startdatoNesteStønadsperiode.plusWeeks(2), startdatoNesteStønadsperiode.plusWeeks(6).minusDays(1)))); + var grunnlag = + basicGrunnlagFar(fødselsdatoFørsteSak) + .kontoer(defaultKontoer().etterNesteStønadsperiodeDager(0)) + .datoer( + new Datoer.Builder() + .fødsel(fødselsdatoFørsteSak) + .startdatoNesteStønadsperiode(startdatoNesteStønadsperiode)) + .søknad( + søknad( + FØDSEL, + utsettelsePeriode( + startdatoNesteStønadsperiode, + startdatoNesteStønadsperiode + .plusWeeks(2) + .minusDays(1), + utsettelseÅrsak, + null), + oppgittPeriode( + FEDREKVOTE, + startdatoNesteStønadsperiode.plusWeeks(2), + startdatoNesteStønadsperiode + .plusWeeks(6) + .minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(2); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); } - //FAGSYSTEM-269397 + // FAGSYSTEM-269397 @Test void bfhr_minsterett_gradering_flere_arbeidsforhold() { var fødselsdato = LocalDate.of(2022, 9, 12); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 40 * 5)).minsterettDager(8 * 5); + var kontoer = + new Kontoer.Builder().konto(konto(FORELDREPENGER, 40 * 5)).minsterettDager(8 * 5); var arbeidsforhold1 = AktivitetIdentifikator.forArbeid(new Orgnummer("1"), null); var arbeidsforhold2 = AktivitetIdentifikator.forArbeid(new Orgnummer("2"), null); - var gradering = OppgittPeriode.forGradering(FORELDREPENGER, LocalDate.of(2022, 10, 24), LocalDate.of(2023, 7, 31), BigDecimal.valueOf(44.7), - null, false, Set.of(arbeidsforhold1), fødselsdato, fødselsdato, MorsAktivitet.UTDANNING, MORS_AKTIVITET_GODKJENT); - var foreldrepenger1 = OppgittPeriode.forVanligPeriode(FORELDREPENGER, LocalDate.of(2023, 8, 1), LocalDate.of(2023, 9, 25), null, false, - fødselsdato, fødselsdato, null, null); - var foreldrepenger2 = OppgittPeriode.forVanligPeriode(FORELDREPENGER, LocalDate.of(2023, 9, 26), LocalDate.of(2023, 12, 1), null, false, - fødselsdato, fødselsdato, MorsAktivitet.UTDANNING, MORS_AKTIVITET_IKKE_GODKJENT); + var gradering = + OppgittPeriode.forGradering( + FORELDREPENGER, + LocalDate.of(2022, 10, 24), + LocalDate.of(2023, 7, 31), + BigDecimal.valueOf(44.7), + null, + false, + Set.of(arbeidsforhold1), + fødselsdato, + fødselsdato, + MorsAktivitet.UTDANNING, + MORS_AKTIVITET_GODKJENT); + var foreldrepenger1 = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + LocalDate.of(2023, 8, 1), + LocalDate.of(2023, 9, 25), + null, + false, + fødselsdato, + fødselsdato, + null, + null); + var foreldrepenger2 = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + LocalDate.of(2023, 9, 26), + LocalDate.of(2023, 12, 1), + null, + false, + fødselsdato, + fødselsdato, + MorsAktivitet.UTDANNING, + MORS_AKTIVITET_IKKE_GODKJENT); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(gradering, foreldrepenger1, foreldrepenger2)); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittePerioder(List.of(gradering, foreldrepenger1, foreldrepenger2)); - var arbeid = new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(arbeidsforhold1)).arbeidsforhold(new Arbeidsforhold(arbeidsforhold2)); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(bareFarRett()).søknad(søknad).arbeid(arbeid).kontoer(kontoer); + var arbeid = + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold1)) + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold2)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .arbeid(arbeid) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); assertThat(fastsattePerioder).hasSize(4); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(GRADERING_FORELDREPENGER_KUN_FAR_HAR_RETT); - assertThat(fastsattePerioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(fastsattePerioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); - assertThat(fastsattePerioder.get(2).uttakPeriode().getTrekkdager(arbeidsforhold1)).isEqualTo(new Trekkdager(40)); - assertThat(fastsattePerioder.get(2).uttakPeriode().getTrekkdager(arbeidsforhold2)).isEqualTo(Trekkdager.ZERO); + assertThat(fastsattePerioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(fastsattePerioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV); + assertThat(fastsattePerioder.get(2).uttakPeriode().getTrekkdager(arbeidsforhold1)) + .isEqualTo(new Trekkdager(40)); + assertThat(fastsattePerioder.get(2).uttakPeriode().getTrekkdager(arbeidsforhold2)) + .isEqualTo(Trekkdager.ZERO); - assertThat(fastsattePerioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(fastsattePerioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(AKTIVITETSKRAVET_UTDANNING_IKKE_OPPFYLT); + assertThat(fastsattePerioder.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(fastsattePerioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(AKTIVITETSKRAVET_UTDANNING_IKKE_OPPFYLT); } - //FAGSYSTEM-301302 + // FAGSYSTEM-301302 @Test void bfhr_minsterett_gradering_flere_arbeidsforhold_2() { var fødselsdato = LocalDate.of(2023, 10, 2); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 40 * 5)).minsterettDager(8 * 5); + var kontoer = + new Kontoer.Builder().konto(konto(FORELDREPENGER, 40 * 5)).minsterettDager(8 * 5); var arbeidsforhold1 = AktivitetIdentifikator.forArbeid(new Orgnummer("1"), null); var arbeidsforhold2 = AktivitetIdentifikator.forArbeid(new Orgnummer("2"), null); - var gradering = OppgittPeriode.forGradering(FORELDREPENGER, fødselsdato, LocalDate.of(2024, 1, 22), BigDecimal.valueOf(50), null, false, - Set.of(arbeidsforhold1), fødselsdato, fødselsdato, null, null); + var gradering = + OppgittPeriode.forGradering( + FORELDREPENGER, + fødselsdato, + LocalDate.of(2024, 1, 22), + BigDecimal.valueOf(50), + null, + false, + Set.of(arbeidsforhold1), + fødselsdato, + fødselsdato, + null, + null); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(gradering)); + var søknad = + new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittePerioder(List.of(gradering)); - var arbeid = new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(arbeidsforhold1)).arbeidsforhold(new Arbeidsforhold(arbeidsforhold2)); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(bareFarRett()).søknad(søknad).arbeid(arbeid).kontoer(kontoer); + var arbeid = + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold1)) + .arbeidsforhold(new Arbeidsforhold(arbeidsforhold2)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad) + .arbeid(arbeid) + .kontoer(kontoer); var fastsattePerioder = fastsettPerioder(grunnlag); assertThat(fastsattePerioder).hasSize(4); assertThat(fastsattePerioder.get(0).uttakPeriode().erGraderingInnvilget()).isTrue(); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(arbeidsforhold1)).isEqualTo(new Trekkdager(15)); - assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(arbeidsforhold2)).isEqualTo(new Trekkdager(30)); + assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(arbeidsforhold1)) + .isEqualTo(new Trekkdager(15)); + assertThat(fastsattePerioder.get(0).uttakPeriode().getTrekkdager(arbeidsforhold2)) + .isEqualTo(new Trekkdager(30)); assertThat(fastsattePerioder.get(1).uttakPeriode().erGraderingInnvilget()).isTrue(); - assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(arbeidsforhold1)).isEqualTo(new Trekkdager(5)); - assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(arbeidsforhold2)).isEqualTo(new Trekkdager(10)); + assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(arbeidsforhold1)) + .isEqualTo(new Trekkdager(5)); + assertThat(fastsattePerioder.get(1).uttakPeriode().getTrekkdager(arbeidsforhold2)) + .isEqualTo(new Trekkdager(10)); assertThat(fastsattePerioder.get(2).uttakPeriode().erGraderingInnvilget()).isTrue(); - assertThat(fastsattePerioder.get(2).uttakPeriode().getTrekkdager(arbeidsforhold1)).isEqualTo(new Trekkdager(20)); - assertThat(fastsattePerioder.get(2).uttakPeriode().getTrekkdager(arbeidsforhold2)).isEqualTo(new Trekkdager(0)); - assertThat(fastsattePerioder.get(2).uttakPeriode().getUtbetalingsgrad(arbeidsforhold2)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(fastsattePerioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - //Søkt en dag for mye minsterett - assertThat(fastsattePerioder.get(3).uttakPeriode().getTrekkdager(arbeidsforhold1)).isEqualTo(new Trekkdager(0.5)); - assertThat(fastsattePerioder.get(3).uttakPeriode().getTrekkdager(arbeidsforhold2)).isEqualTo(new Trekkdager(1)); - assertThat(fastsattePerioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); + assertThat(fastsattePerioder.get(2).uttakPeriode().getTrekkdager(arbeidsforhold1)) + .isEqualTo(new Trekkdager(20)); + assertThat(fastsattePerioder.get(2).uttakPeriode().getTrekkdager(arbeidsforhold2)) + .isEqualTo(new Trekkdager(0)); + assertThat(fastsattePerioder.get(2).uttakPeriode().getUtbetalingsgrad(arbeidsforhold2)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(fastsattePerioder.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + // Søkt en dag for mye minsterett + assertThat(fastsattePerioder.get(3).uttakPeriode().getTrekkdager(arbeidsforhold1)) + .isEqualTo(new Trekkdager(0.5)); + assertThat(fastsattePerioder.get(3).uttakPeriode().getTrekkdager(arbeidsforhold2)) + .isEqualTo(new Trekkdager(1)); + assertThat(fastsattePerioder.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(AKTIVITET_UKJENT_UDOKUMENTERT); } - private boolean harPeriode(UttakPeriode p, Perioderesultattype prt, PeriodeResultatÅrsak prå, int dager) { - return p.getPerioderesultattype().equals(prt) && p.getPeriodeResultatÅrsak().equals(prå) && (dager == -1 - || p.getAktiviteter().stream().map(UttakPeriodeAktivitet::getTrekkdager).mapToInt(Trekkdager::rundOpp).sum() == dager); + private boolean harPeriode( + UttakPeriode p, Perioderesultattype prt, PeriodeResultatÅrsak prå, int dager) { + return p.getPerioderesultattype().equals(prt) + && p.getPeriodeResultatÅrsak().equals(prå) + && (dager == -1 + || p.getAktiviteter().stream() + .map(UttakPeriodeAktivitet::getTrekkdager) + .mapToInt(Trekkdager::rundOpp) + .sum() + == dager); } - private OppgittPeriode foreldrepenger(LocalDate fødselsdato, MorsAktivitet morsAktivitet, DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(15).minusDays(1), null, false, - fødselsdato, fødselsdato, morsAktivitet, dokumentasjonVurdering); + private OppgittPeriode foreldrepenger( + LocalDate fødselsdato, + MorsAktivitet morsAktivitet, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(15).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + morsAktivitet, + dokumentasjonVurdering); } - private OppgittPeriode foreldrepenger(LocalDate fom, LocalDate tom, MorsAktivitet morsAktivitet, DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forVanligPeriode(FORELDREPENGER, fom, tom, null, false, fom.minusWeeks(3), fom.minusWeeks(3), morsAktivitet, - dokumentasjonVurdering); + private OppgittPeriode foreldrepenger( + LocalDate fom, + LocalDate tom, + MorsAktivitet morsAktivitet, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fom, + tom, + null, + false, + fom.minusWeeks(3), + fom.minusWeeks(3), + morsAktivitet, + dokumentasjonVurdering); } - private OppgittPeriode foreldrepengerUtsettelse(LocalDate fom, - LocalDate tom, - MorsAktivitet morsAktivitet, - DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forUtsettelse(fom, tom, UtsettelseÅrsak.FERIE, fom, fom, morsAktivitet, dokumentasjonVurdering); + private OppgittPeriode foreldrepengerUtsettelse( + LocalDate fom, + LocalDate tom, + MorsAktivitet morsAktivitet, + DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forUtsettelse( + fom, tom, UtsettelseÅrsak.FERIE, fom, fom, morsAktivitet, dokumentasjonVurdering); } - - } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/M\303\270drekvoteDelregelTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/M\303\270drekvoteDelregelTest.java" index d2757fb7..6ec81ba7 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/M\303\270drekvoteDelregelTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/M\303\270drekvoteDelregelTest.java" @@ -6,9 +6,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Behandling; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Datoer; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Dødsdatoer; @@ -28,6 +25,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.UtfallType; +import org.junit.jupiter.api.Test; class MødrekvoteDelregelTest { @@ -36,7 +34,11 @@ class MødrekvoteDelregelTest { var fødselsdato = LocalDate.of(2018, 1, 1); var oppgittPeriode = oppgittMødrekvote(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer).søknad(søknad(oppgittPeriode)).build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -48,7 +50,11 @@ class MødrekvoteDelregelTest { var fødselsdato = LocalDate.of(2017, 12, 31); var oppgittPeriode = oppgittMødrekvote(fødselsdato, fødselsdato.plusWeeks(6).minusDays(2)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer).søknad(søknad(oppgittPeriode)).build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); @@ -59,10 +65,17 @@ class MødrekvoteDelregelTest { var fødselsdato = LocalDate.of(2018, 1, 1); var oppgittPeriode = oppgittMødrekvote(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(søknad(oppgittPeriode)) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -70,14 +83,22 @@ class MødrekvoteDelregelTest { } @Test - void mødrekvote_etter_første_6_ukene_etter_fødsel_skal_ikke_innvilges_når_mor_har_nok_på_kvoten_men_ikke_har_omsorg() { + void + mødrekvote_etter_første_6_ukene_etter_fødsel_skal_ikke_innvilges_når_mor_har_nok_på_kvoten_men_ikke_har_omsorg() { var fødselsdato = LocalDate.of(2018, 1, 1); var oppgittPeriode = oppgittMødrekvote(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(søknad(oppgittPeriode)) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -85,14 +106,22 @@ class MødrekvoteDelregelTest { } @Test - void mødrekvote_etter_første_6_ukene_etter_fødsel_skal_ikke_innvilges_når_mor_har_noe_men_ikke_nok_på_kvoten_og_ikke_har_omsorg() { + void + mødrekvote_etter_første_6_ukene_etter_fødsel_skal_ikke_innvilges_når_mor_har_noe_men_ikke_nok_på_kvoten_og_ikke_har_omsorg() { var fødselsdato = LocalDate.of(2018, 1, 1); var oppgittPeriode = oppgittMødrekvote(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 1); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(søknad(oppgittPeriode)) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -104,53 +133,80 @@ void UT1007_mor_etterTermin_innenFor6Uker_ikkeGradering_disponibleDager() { var fødselsdato = LocalDate.of(2018, 1, 1); var oppgittPeriode = oppgittMødrekvote(fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(4)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 100); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer).søknad(søknad(oppgittPeriode)).build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); assertThat(regelresultat.skalUtbetale()).isTrue(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE); } @Test void UT1008_mor_innenFor6UkerEtterFødsel_gradering() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = gradertPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(4)); + var oppgittPeriode = + gradertPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(4)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 100); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer).søknad(søknad(oppgittPeriode)).build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); assertThat(regelresultat.skalUtbetale()).isTrue(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE); - assertThat(regelresultat.getGraderingIkkeInnvilgetÅrsak()).isEqualTo(GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE); + assertThat(regelresultat.getGraderingIkkeInnvilgetÅrsak()) + .isEqualTo(GraderingIkkeInnvilgetÅrsak.AVSLAG_PGA_FOR_TIDLIG_GRADERING); } @Test void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = gradertPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(11)); + var oppgittPeriode = + gradertPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(11)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 100); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer).søknad(søknad(oppgittPeriode)).build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); assertThat(regelresultat.skalUtbetale()).isTrue(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(InnvilgetÅrsak.GRADERING_KVOTE_ELLER_OVERFØRT_KVOTE); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(InnvilgetÅrsak.GRADERING_KVOTE_ELLER_OVERFØRT_KVOTE); } @Test void UT1251_fødselsvilkår_ikke_oppfylt() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittMødrekvote(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(11)); + var oppgittPeriode = + oppgittMødrekvote(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(11)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 100); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer) - .søknad(søknad(oppgittPeriode)) - .inngangsvilkår(new Inngangsvilkår.Builder().fødselOppfylt(false)) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .inngangsvilkår(new Inngangsvilkår.Builder().fødselOppfylt(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -159,18 +215,25 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.getManuellbehandlingårsak()).isNull(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.FØDSELSVILKÅRET_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.FØDSELSVILKÅRET_IKKE_OPPFYLT); } @Test void UT1252_adopsjonsvilkår_ikke_oppfylt() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittMødrekvote(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(11)); + var oppgittPeriode = + oppgittMødrekvote(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(11)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 100); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer) - .søknad(søknad(oppgittPeriode)) - .inngangsvilkår(new Inngangsvilkår.Builder().fødselOppfylt(true).adopsjonOppfylt(false)) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .fødselOppfylt(true) + .adopsjonOppfylt(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -179,18 +242,26 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.getManuellbehandlingårsak()).isNull(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.ADOPSJONSVILKÅRET_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.ADOPSJONSVILKÅRET_IKKE_OPPFYLT); } @Test void UT1253_foreldreansvarsvilkår_ikke_oppfylt() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittMødrekvote(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(11)); + var oppgittPeriode = + oppgittMødrekvote(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(11)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 100); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer) - .søknad(søknad(oppgittPeriode)) - .inngangsvilkår(new Inngangsvilkår.Builder().fødselOppfylt(true).adopsjonOppfylt(true).foreldreansvarnOppfylt(false)) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .fødselOppfylt(true) + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -199,19 +270,27 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.getManuellbehandlingårsak()).isNull(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.FORELDREANSVARSVILKÅRET_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.FORELDREANSVARSVILKÅRET_IKKE_OPPFYLT); } @Test void UT1254_opptjeningsvilkår_ikke_oppfylt() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittMødrekvote(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(11)); + var oppgittPeriode = + oppgittMødrekvote(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(11)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 100); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer) - .søknad(søknad(oppgittPeriode)) - .inngangsvilkår( - new Inngangsvilkår.Builder().fødselOppfylt(true).adopsjonOppfylt(true).foreldreansvarnOppfylt(true).opptjeningOppfylt(false)) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .fødselOppfylt(true) + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .opptjeningOppfylt(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -220,17 +299,28 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.getManuellbehandlingårsak()).isNull(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.OPPTJENINGSVILKÅRET_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.OPPTJENINGSVILKÅRET_IKKE_OPPFYLT); } @Test void opphold_mødrekvote_annenforelder() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppholdsperiode = DelRegelTestUtil.oppholdPeriode(fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(30), - OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER); - var kontoer = new Kontoer.Builder().konto(konto(Stønadskontotype.FEDREKVOTE, 100)).konto(konto(Stønadskontotype.MØDREKVOTE, 100)); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(kontoer).søknad(søknad(oppholdsperiode)).build(); + var oppholdsperiode = + DelRegelTestUtil.oppholdPeriode( + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(30), + OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER); + var kontoer = + new Kontoer.Builder() + .konto(konto(Stønadskontotype.FEDREKVOTE, 100)) + .konto(konto(Stønadskontotype.MØDREKVOTE, 100)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppholdsperiode)) + .build(); var regelresultat = kjørRegel(oppholdsperiode, grunnlag); @@ -244,48 +334,77 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( void opphold_mødrekvote_annenforelder_tom_for_konto() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppholdsperiode = DelRegelTestUtil.oppholdPeriode(fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(30), - OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER); - var kontoer = new Kontoer.Builder().konto(konto(Stønadskontotype.FEDREKVOTE, 100)).konto(konto(Stønadskontotype.MØDREKVOTE, 0)); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(kontoer) - .søknad(new Søknad.Builder().oppgittPeriode(oppholdsperiode).type(Søknadstype.FØDSEL)) - .build(); + var oppholdsperiode = + DelRegelTestUtil.oppholdPeriode( + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(30), + OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER); + var kontoer = + new Kontoer.Builder() + .konto(konto(Stønadskontotype.FEDREKVOTE, 100)) + .konto(konto(Stønadskontotype.MØDREKVOTE, 0)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .oppgittPeriode(oppholdsperiode) + .type(Søknadstype.FØDSEL)) + .build(); var regelresultat = kjørRegel(oppholdsperiode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.OPPHOLD_STØRRE_ENN_TILGJENGELIGE_DAGER); } @Test void UT1275_søkte_mødrekvoteperiode_men_søker_døde_i_mellomtiden() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittMødrekvote(fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(6).minusDays(1)); + var oppgittPeriode = + oppgittMødrekvote(fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(6).minusDays(1)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer) - .søknad(søknad(oppgittPeriode)) - .datoer(new Datoer.Builder().fødsel(fødselsdato).dødsdatoer(new Dødsdatoer.Builder().søkersDødsdato(fødselsdato.plusDays(3)))) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .datoer( + new Datoer.Builder() + .fødsel(fødselsdato) + .dødsdatoer( + new Dødsdatoer.Builder() + .søkersDødsdato(fødselsdato.plusDays(3)))) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.DØDSFALL); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.DØDSFALL); assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.SØKER_DØD); } @Test void UT1289_søkte_mødrekvoteperiode_men_barn_døde_i_mellomtiden() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittMødrekvote(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(13).minusDays(1)); + var oppgittPeriode = + oppgittMødrekvote(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(13).minusDays(1)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer) - .søknad(søknad(oppgittPeriode)) - .datoer(new Datoer.Builder().fødsel(fødselsdato) - .dødsdatoer(new Dødsdatoer.Builder().barnsDødsdato(fødselsdato.plusDays(3)).alleBarnDøde(true))) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .datoer( + new Datoer.Builder() + .fødsel(fødselsdato) + .dødsdatoer( + new Dødsdatoer.Builder() + .barnsDødsdato(fødselsdato.plusDays(3)) + .alleBarnDøde(true))) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -297,34 +416,54 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( void Innvilge_ikke_UT1289_søkte_mødrekvoteperiode_og_barn_døde_men_mindre_enn_6_uker_siden() { var fødselsdato = LocalDate.of(2018, 1, 1); var barnsDødsdato = fødselsdato.plusDays(1); - var oppgittPeriode = oppgittMødrekvote(fødselsdato, barnsDødsdato.plusWeeks(6).minusDays(2)); + var oppgittPeriode = + oppgittMødrekvote(fødselsdato, barnsDødsdato.plusWeeks(6).minusDays(2)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer) - .søknad(søknad(oppgittPeriode)) - .datoer(new Datoer.Builder().fødsel(fødselsdato).dødsdatoer(new Dødsdatoer.Builder().barnsDødsdato(barnsDødsdato).alleBarnDøde(true))) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .datoer( + new Datoer.Builder() + .fødsel(fødselsdato) + .dødsdatoer( + new Dødsdatoer.Builder() + .barnsDødsdato(barnsDødsdato) + .alleBarnDøde(true))) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE); } @Test - void Innvilge_ikke_UT1289_søkte_mødrekvoteperiode_barn_døde_i_mellomtiden_men_alle_barn_er_ikke_døde() { + void + Innvilge_ikke_UT1289_søkte_mødrekvoteperiode_barn_døde_i_mellomtiden_men_alle_barn_er_ikke_døde() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = oppgittMødrekvote(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(13).minusDays(1)); + var oppgittPeriode = + oppgittMødrekvote(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(13).minusDays(1)); var kontoer = enKonto(Stønadskontotype.MØDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer) - .søknad(søknad(oppgittPeriode)) - .datoer(new Datoer.Builder().fødsel(fødselsdato) - .dødsdatoer(new Dødsdatoer.Builder().barnsDødsdato(fødselsdato.plusDays(3)).alleBarnDøde(false))) - .build(); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .datoer( + new Datoer.Builder() + .fødsel(fødselsdato) + .dødsdatoer( + new Dødsdatoer.Builder() + .barnsDødsdato(fødselsdato.plusDays(3)) + .alleBarnDøde(false))) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE); } private OppgittPeriode oppgittMødrekvote(LocalDate fom, LocalDate tom) { @@ -338,9 +477,21 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); var oppgittPeriode = oppgittMødrekvote(fom, tom); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(kontoer).søknad(søknad(oppgittPeriode)).build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -348,8 +499,10 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.MANUELL_BEHANDLING); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); } @Test @@ -359,9 +512,21 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); var oppgittPeriode = overføringsperiode(fom, tom, OverføringÅrsak.INNLEGGELSE); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(kontoer).søknad(søknad(oppgittPeriode)).build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -369,7 +534,8 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_INNLEGGELSE_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_INNLEGGELSE_IKKE_OPPFYLT); } @Test @@ -379,9 +545,21 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); var oppgittPeriode = overføringsperiode(fom, tom, OverføringÅrsak.SYKDOM_ELLER_SKADE); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(kontoer).søknad(søknad(oppgittPeriode)).build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -389,7 +567,8 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_SYK_SKADET_IKKE_OPPFYLT); } @Test @@ -399,9 +578,21 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); var oppgittPeriode = overføringsperiode(fom, tom, OverføringÅrsak.ALENEOMSORG); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(kontoer).søknad(søknad(oppgittPeriode)).build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -409,11 +600,13 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.ALENEOMSORG_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.ALENEOMSORG_IKKE_OPPFYLT); } private OppgittPeriode overføringsperiode(LocalDate fom, LocalDate tom, OverføringÅrsak årsak) { - return DelRegelTestUtil.overføringsperiode(Stønadskontotype.MØDREKVOTE, fom, tom, årsak, null); + return DelRegelTestUtil.overføringsperiode( + Stønadskontotype.MØDREKVOTE, fom, tom, årsak, null); } @Test @@ -423,9 +616,21 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); var oppgittPeriode = overføringsperiode(fom, tom, OverføringÅrsak.ANNEN_FORELDER_IKKE_RETT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(kontoer).søknad(søknad(oppgittPeriode)).build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(oppgittPeriode)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -433,15 +638,21 @@ void UT1221_mor_etterTermin_etter6Uker_omsorg_disponibleDager_gradering_avklart( assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getUtfallType()).isEqualTo(UtfallType.AVSLÅTT); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_IKKE_RETT_IKKE_OPPFYLT); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.DEN_ANDRE_PART_IKKE_RETT_IKKE_OPPFYLT); } private RegelGrunnlag.Builder basicGrunnlagFar(LocalDate fødselsdato) { return create().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true)) - .behandling(new Behandling.Builder().søkerErMor(false)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + .rettOgOmsorg( + new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true)) + .behandling(new Behandling.Builder().søkerErMor(false)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } private Søknad.Builder søknad(OppgittPeriode oppgittPeriode) { @@ -458,9 +669,14 @@ private Konto.Builder konto(Stønadskontotype type, int trekkdager) { private RegelGrunnlag.Builder basicGrunnlagMor(LocalDate fødselsdato) { return create().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true)) - .behandling(new Behandling.Builder().søkerErMor(true)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + .rettOgOmsorg( + new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true)) + .behandling(new Behandling.Builder().søkerErMor(true)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/M\303\270drekvoteOrkestreringTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/M\303\270drekvoteOrkestreringTest.java" index 0c05c785..f2504a1c 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/M\303\270drekvoteOrkestreringTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/M\303\270drekvoteOrkestreringTest.java" @@ -4,9 +4,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OverføringÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Perioderesultattype; @@ -15,155 +12,277 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; +import org.junit.jupiter.api.Test; class MødrekvoteOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @Test void mødrekvoteperiode_før_familiehendelse() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlag(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode( - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusWeeks(1).minusDays(1))) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.MØDREKVOTE, fødselsdato.minusWeeks(1), fødselsdato.plusWeeks(6).minusDays(1)))); + var grunnlag = + basicGrunnlag(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusWeeks(1).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.MØDREKVOTE, + fødselsdato.minusWeeks(1), + fødselsdato.plusWeeks(6).minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(10)); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(10)); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); - assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusWeeks(1).minusDays(1)); - - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(0).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.minusWeeks(1).minusDays(1)); + + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(5)); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(1)); assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(30)); + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(30)); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); } @Test void overføring_av_mødrekvote_grunnet_sykdom_skade_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forOverføring(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), - OverføringÅrsak.SYKDOM_ELLER_SKADE, null, null, SYKDOM_ANNEN_FORELDER_GODKJENT)) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1)))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forOverføring( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + OverføringÅrsak.SYKDOM_ELLER_SKADE, + null, + null, + SYKDOM_ANNEN_FORELDER_GODKJENT)) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - //6 første uker mødrekvote innvilges - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + // 6 første uker mødrekvote innvilges + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - assertThat(perioder.get(0).uttakPeriode().getOverføringÅrsak()).isEqualTo(OverføringÅrsak.SYKDOM_ELLER_SKADE); - - //3 neste uker mødrekvote innvilges - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(0).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(perioder.get(0).uttakPeriode().getOverføringÅrsak()) + .isEqualTo(OverføringÅrsak.SYKDOM_ELLER_SKADE); + + // 3 neste uker mødrekvote innvilges + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); - assertThat(perioder.get(1).uttakPeriode().getOverføringÅrsak()).isEqualTo(OverføringÅrsak.SYKDOM_ELLER_SKADE); - - //2 neste uker fedrekvote innvilges - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FEDREKVOTE); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); + assertThat(perioder.get(1).uttakPeriode().getOverføringÅrsak()) + .isEqualTo(OverføringÅrsak.SYKDOM_ELLER_SKADE); + + // 2 neste uker fedrekvote innvilges + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FEDREKVOTE); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(10)); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); } @Test void overføring_av_mødrekvote_grunnet_sykdom_skade_skal_gå_til_avslag_hvis_ikke_dokumentert() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forOverføring(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), - OverføringÅrsak.SYKDOM_ELLER_SKADE, null, null, null)) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1)))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forOverføring( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + OverføringÅrsak.SYKDOM_ELLER_SKADE, + null, + null, + null)) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - //6 første uker mødrekvote avslås - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + // 6 første uker mødrekvote avslås + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); } @Test void overføring_av_mødrekvote_ikke_dokumentert_skal_til_avslag() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forOverføring(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), - OverføringÅrsak.SYKDOM_ELLER_SKADE, null, null, null)) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1)))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forOverføring( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + OverføringÅrsak.SYKDOM_ELLER_SKADE, + null, + null, + null)) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - //6 første uker mødrekvote skal til avslag - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + // 6 første uker mødrekvote skal til avslag + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - - //3 neste uker mødrekvote skal til avslag - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(0).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + + // 3 neste uker mødrekvote skal til avslag + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); - - //2 neste uker fedrekvote skal til innvilget - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FEDREKVOTE); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); + + // 2 neste uker fedrekvote skal til innvilget + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FEDREKVOTE); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(10)); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); } @Test - void overføring_av_mødrekvote_grunnet_sykdom_skade_men_far_har_ikke_omsorg_skal_til_manuell_behandling() { + void + overføring_av_mødrekvote_grunnet_sykdom_skade_men_far_har_ikke_omsorg_skal_til_manuell_behandling() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg( - new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forOverføring(Stønadskontotype.MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), - OverføringÅrsak.SYKDOM_ELLER_SKADE, null, null, SYKDOM_ANNEN_FORELDER_GODKJENT)) - .oppgittPeriode(oppgittPeriode(Stønadskontotype.FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1)))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forOverføring( + Stønadskontotype.MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + OverføringÅrsak.SYKDOM_ELLER_SKADE, + null, + null, + SYKDOM_ANNEN_FORELDER_GODKJENT)) + .oppgittPeriode( + oppgittPeriode( + Stønadskontotype.FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - //6 første uker mødrekvote avslås - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); // UT1006 - assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); + // 6 første uker mødrekvote avslås + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); // UT1006 + assertThat(perioder.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - - //3 neste uker mødrekvote innvilges - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); // UT1006 - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); - assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); + assertThat(perioder.get(0).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + + // 3 neste uker mødrekvote innvilges + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); // UT1006 + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); + assertThat(perioder.get(1).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.MØDREKVOTE); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); - - //2 neste uker fedrekvote avslått - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); // UT1086 - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); - assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FEDREKVOTE); + assertThat(perioder.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); + + // 2 neste uker fedrekvote avslått + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); // UT1086 + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.MOR_HAR_IKKE_OMSORG); + assertThat(perioder.get(2).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FEDREKVOTE); assertThat(perioder.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(10)); - assertThat(perioder.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); + assertThat(perioder.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/OrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/OrkestreringTest.java index cdd14a95..f18ae134 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/OrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/OrkestreringTest.java @@ -23,9 +23,6 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktørId; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; @@ -58,72 +55,125 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Vedtak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; class OrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @Test void skal_innvilge_to_perioder_med_med_mødrekvote_på_under_10_uker() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad( - søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1)))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); resultat.stream() - .map(FastsettePeriodeResultat::uttakPeriode) - .forEach(uttakPeriode -> assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET)); + .map(FastsettePeriodeResultat::uttakPeriode) + .forEach( + uttakPeriode -> + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET)); } @Test void skal_knekke_mødrekvote_dersom_det_ikke_er_flere_dager_igjen() { var fødselsdato = LocalDate.of(2018, 1, 3); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad( - søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(12).minusDays(1)))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(12).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); - var uttakPerioder = resultat.stream().map(FastsettePeriodeResultat::uttakPeriode).collect(Collectors.toList()); + var uttakPerioder = + resultat.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .collect(Collectors.toList()); assertThat(uttakPerioder).hasSize(4); /* Innvilget foreldrepenger før fødsel*/ - assertThat(uttakPerioder.get(0).getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(uttakPerioder.get(0).getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPerioder.get(0).getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(uttakPerioder.get(0).getTom()).isEqualTo(fødselsdato.minusDays(1)); /* Innvilget mødrekvote etter fødsel frem til og med uke 6*/ - assertThat(uttakPerioder.get(1).getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(uttakPerioder.get(1).getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPerioder.get(1).getFom()).isEqualTo(fødselsdato); assertThat(uttakPerioder.get(1).getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); /* Innvilget mødrekvote etter fødsel, etter uke 6 */ - assertThat(uttakPerioder.get(2).getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(uttakPerioder.get(2).getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPerioder.get(2).getFom()).isEqualTo(fødselsdato.plusWeeks(6)); assertThat(uttakPerioder.get(2).getTom()).isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); /* Avslått mødrekvote, ikke nok dager */ assertThat(uttakPerioder.get(3).getPerioderesultattype()).isEqualTo(MANUELL_BEHANDLING); - assertThat(uttakPerioder.get(3).getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); + assertThat(uttakPerioder.get(3).getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); assertThat(uttakPerioder.get(3).getFom()).isEqualTo(fødselsdato.plusWeeks(10)); assertThat(uttakPerioder.get(3).getTom()).isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); } - @Test void helePeriodenUtenforSøknadsfrist() { var fødselsdato = LocalDate.of(2017, 11, 1); var sisteUttaksdag = fødselsdato.plusWeeks(6).minusDays(1); var søknadsfrist = sisteUttaksdag.plusMonths(3).with(TemporalAdjusters.lastDayOfMonth()); - var fpff = forVanligPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), null, false, - søknadsfrist.plusWeeks(1), søknadsfrist.plusWeeks(1), null, null); - var mødrekvote = forVanligPeriode(MØDREKVOTE, fødselsdato, sisteUttaksdag, null, false, søknadsfrist.plusWeeks(1), søknadsfrist.plusWeeks(1), - null, null); - var grunnlag = basicGrunnlagMor(fødselsdato).rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) - .søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)); + var fpff = + forVanligPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + null, + false, + søknadsfrist.plusWeeks(1), + søknadsfrist.plusWeeks(1), + null, + null); + var mødrekvote = + forVanligPeriode( + MØDREKVOTE, + fødselsdato, + sisteUttaksdag, + null, + false, + søknadsfrist.plusWeeks(1), + søknadsfrist.plusWeeks(1), + null, + null); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) + .søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)); // Act var resultat = fastsettPerioder(grunnlag); @@ -131,24 +181,27 @@ class OrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { // Assert assertThat(resultat).hasSize(2); - var førFødsel = resultat.stream() - .map(FastsettePeriodeResultat::uttakPeriode) - .filter(p -> FORELDREPENGER_FØR_FØDSEL.equals(p.getStønadskontotype())) - .findFirst(); + var førFødsel = + resultat.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .filter(p -> FORELDREPENGER_FØR_FØDSEL.equals(p.getStønadskontotype())) + .findFirst(); assertThat(førFødsel).isPresent(); assertThat(førFødsel.get().getPerioderesultattype()).isEqualTo(AVSLÅTT); assertThat(førFødsel.get().getManuellbehandlingårsak()).isNull(); - assertThat(førFødsel.get().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.SØKNADSFRIST); - - - var avslåttMødrekvote = resultat.stream() - .map(FastsettePeriodeResultat::uttakPeriode) - .filter(p -> MØDREKVOTE.equals(p.getStønadskontotype())) - .findFirst(); + assertThat(førFødsel.get().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.SØKNADSFRIST); + + var avslåttMødrekvote = + resultat.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .filter(p -> MØDREKVOTE.equals(p.getStønadskontotype())) + .findFirst(); assertThat(avslåttMødrekvote).isPresent(); assertThat(avslåttMødrekvote.get().getPerioderesultattype()).isEqualTo(AVSLÅTT); assertThat(avslåttMødrekvote.get().getManuellbehandlingårsak()).isNull(); - assertThat(avslåttMødrekvote.get().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.SØKNADSFRIST); + assertThat(avslåttMødrekvote.get().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.SØKNADSFRIST); } private Datoer.Builder datoer(LocalDate fødselsdato) { @@ -159,17 +212,35 @@ private Datoer.Builder datoer(LocalDate fødselsdato) { void skalKnekkePeriodenVedGrenseForSøknadsfrist() { var fødselsdato = LocalDate.of(2017, 11, 1); var mottattDato = fødselsdato.plusMonths(4).plusWeeks(1); - var fpff = forVanligPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), null, false, mottattDato, - mottattDato, null, null); - //Mødrekvote skal knekkes på for at første delen skal avlås pga søknadsfrist - var mødrekvote = forVanligPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), null, false, mottattDato, mottattDato, null, - null); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)); + var fpff = + forVanligPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + null, + false, + mottattDato, + mottattDato, + null, + null); + // Mødrekvote skal knekkes på for at første delen skal avlås pga søknadsfrist + var mødrekvote = + forVanligPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + null, + false, + mottattDato, + mottattDato, + null, + null); + var grunnlag = + basicGrunnlagMor(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)); // Act var resultat = fastsettPerioder(grunnlag); - // Assert assertThat(resultat).hasSize(3); @@ -178,13 +249,13 @@ private Datoer.Builder datoer(LocalDate fødselsdato) { assertThat(førFødsel.getManuellbehandlingårsak()).isNull(); assertThat(førFødsel.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.SØKNADSFRIST); - var mødrekvoteFørKnekk = resultat.get(1).uttakPeriode(); assertThat(mødrekvoteFørKnekk.getPerioderesultattype()).isEqualTo(AVSLÅTT); assertThat(mødrekvoteFørKnekk.getFom()).isEqualTo(fødselsdato); assertThat(mødrekvoteFørKnekk.getTom()).isEqualTo(LocalDate.of(2017, 11, 30)); assertThat(mødrekvoteFørKnekk.getManuellbehandlingårsak()).isNull(); - assertThat(mødrekvoteFørKnekk.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.SØKNADSFRIST); + assertThat(mødrekvoteFørKnekk.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.SØKNADSFRIST); var mødrekvoteEtterKnekk = resultat.get(2).uttakPeriode(); assertThat(mødrekvoteEtterKnekk.getPerioderesultattype()).isEqualTo(INNVILGET); @@ -196,104 +267,160 @@ private Datoer.Builder datoer(LocalDate fødselsdato) { @Test void skal_ikke_innvilge_etter_eller_på_barnets_3årsdag_selv_om_det_er_nok_på_saldoen() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(MØDREKVOTE, 10000000)) - .konto(konto(FEDREKVOTE, 0)) - .konto(konto(FELLESPERIODE, 0)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(datoer(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusYears(4)))) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 10000000)) + .konto(konto(FEDREKVOTE, 0)) + .konto(konto(FELLESPERIODE, 0)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(datoer(fødselsdato)) + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, fødselsdato, fødselsdato.plusYears(4)))) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - //3 uker før fødsel - innvilges + // 3 uker før fødsel - innvilges assertThat(resultat.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(resultat.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); - //periode frem til 3-årsdag (eksklusiv) innvilges - //periode knekkes alltid knekt ved 6 uker pga regelflyt + // periode frem til 3-årsdag (eksklusiv) innvilges + // periode knekkes alltid knekt ved 6 uker pga regelflyt assertThat(resultat.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(resultat.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(resultat.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(resultat.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusYears(3).minusDays(1)); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusYears(3).minusDays(1)); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); - //resten av søknadsperide avslås + // resten av søknadsperide avslås assertThat(resultat.get(3).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusYears(3)); assertThat(resultat.get(3).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusYears(4)); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(resultat.get(3).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD_1)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(3).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD_1)) + .isEqualTo(Utbetalingsgrad.ZERO); } @Test void skal_ikke_innvilge_periode_som_starter_på_barnets_3årsdag_eller_som_starter_senere() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(MØDREKVOTE, 10000000)) - .konto(konto(FEDREKVOTE, 15)) - .konto(konto(FELLESPERIODE, 10000)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(datoer(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusYears(3).minusDays(1)), - oppgittPeriode(FELLESPERIODE, fødselsdato.plusYears(3), fødselsdato.plusYears(4).minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato.plusYears(4), fødselsdato.plusYears(5)))) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 10000000)) + .konto(konto(FEDREKVOTE, 15)) + .konto(konto(FELLESPERIODE, 10000)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(datoer(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusYears(3).minusDays(1)), + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusYears(3), + fødselsdato.plusYears(4).minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusYears(4), + fødselsdato.plusYears(5)))) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(5); - //3 uker før fødsel - innvilges + // 3 uker før fødsel - innvilges assertThat(resultat.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(resultat.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.minusDays(1)); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); - //periode frem til 3-årsdag (eksklusiv) innvilges - //periode knekkes alltid knekt ved 6 uker pga regelflyt + // periode frem til 3-årsdag (eksklusiv) innvilges + // periode knekkes alltid knekt ved 6 uker pga regelflyt assertThat(resultat.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato); - assertThat(resultat.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(resultat.get(2).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(resultat.get(2).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusYears(3).minusDays(1)); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(2).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusYears(3).minusDays(1)); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); - //periode som starter på 3årsdag avslås + // periode som starter på 3årsdag avslås assertThat(resultat.get(3).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusYears(3)); - assertThat(resultat.get(3).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusYears(4).minusDays(1)); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(3).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusYears(4).minusDays(1)); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); - //periode som starter etter 3årsdag avslås + // periode som starter etter 3årsdag avslås assertThat(resultat.get(4).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusYears(4)); assertThat(resultat.get(4).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusYears(5)); - assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); } - @Test - void skal_avslå_første_del_pga_manglende_omsorg_og_andre_del_pga_tom_på_kvote_siden_dager_trekkes() { + void + skal_avslå_første_del_pga_manglende_omsorg_og_andre_del_pga_tom_på_kvote_siden_dager_trekkes() { var fødselsdato = LocalDate.of(2018, 1, 1); var kontoer = new Kontoer.Builder().konto(konto(FEDREKVOTE, 5)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(datoer(fødselsdato)) - .behandling(farBehandling()) - .rettOgOmsorg(beggeRett().harOmsorg(false)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1)))) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(datoer(fødselsdato)) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett().harOmsorg(false)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1)))) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var resultat = fastsettPerioder(grunnlag); @@ -304,14 +431,16 @@ private Datoer.Builder datoer(LocalDate fødselsdato) { assertThat(uttakPeriode1.getTom()).isEqualTo(fødselsdato.plusWeeks(11).minusDays(1)); assertThat(uttakPeriode1.getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); assertThat(uttakPeriode1.getManuellbehandlingårsak()).isNull(); - assertThat(uttakPeriode1.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); + assertThat(uttakPeriode1.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); var uttakPeriode2 = resultat.get(1).uttakPeriode(); assertThat(uttakPeriode2.getFom()).isEqualTo(fødselsdato.plusWeeks(11)); assertThat(uttakPeriode2.getTom()).isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); assertThat(uttakPeriode2.getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); assertThat(uttakPeriode2.getManuellbehandlingårsak()).isNull(); - assertThat(uttakPeriode2.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(uttakPeriode2.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); } @Test @@ -320,16 +449,28 @@ private Datoer.Builder datoer(LocalDate fødselsdato) { var periodeFom = fødselsdato.plusYears(1); var periodeTom = periodeFom.plusDays(20); var kontoer = new Kontoer.Builder().konto(konto(FEDREKVOTE, 15)); - var fedrekvote = forVanligPeriode(FEDREKVOTE, periodeFom, periodeTom, null, false, periodeTom.plusYears(2), periodeTom.plusYears(2), null, - null); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(datoer(fødselsdato)) - .behandling(farBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) - .søknad(søknad(Søknadstype.FØDSEL, fedrekvote)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .build(); + var fedrekvote = + forVanligPeriode( + FEDREKVOTE, + periodeFom, + periodeTom, + null, + false, + periodeTom.plusYears(2), + periodeTom.plusYears(2), + null, + null); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(datoer(fødselsdato)) + .behandling(farBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) + .søknad(søknad(Søknadstype.FØDSEL, fedrekvote)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(1); @@ -345,54 +486,110 @@ private Datoer.Builder datoer(LocalDate fødselsdato) { @Test void UT1290_skal_være_ugyldige_stønadskonto_hvis_søker_på_konto_som_man_ikke_har_tilgang_til() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10)))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(resultat.get(2).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); - assertThat(resultat.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1).decimalValue()).isNotZero(); - assertThat(resultat.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD_1)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(resultat.get(2).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.UGYLDIG_STØNADSKONTO); + assertThat(resultat.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1).decimalValue()) + .isNotZero(); + assertThat(resultat.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD_1)) + .isEqualTo(Utbetalingsgrad.ZERO); } @Test void skal_knekke_periode_og_gå_til_manuell_behandling_ved_ikke_nok_flerbarnsdager() { - var aktivitetIdentifikator = AktivitetIdentifikator.forArbeid(new Orgnummer("1234"), "12345"); + var aktivitetIdentifikator = + AktivitetIdentifikator.forArbeid(new Orgnummer("1234"), "12345"); var fødselsdato = LocalDate.of(2019, 3, 13); var tom = Virkedager.plusVirkedager(fødselsdato.plusWeeks(6), 5); - var annenPartPeriode1 = AnnenpartUttakPeriode.Builder.uttak(fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(aktivitetIdentifikator, Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, new Trekkdager(15), - Utbetalingsgrad.TEN)) - .build(); - var annenPartPeriode2 = AnnenpartUttakPeriode.Builder.uttak(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(aktivitetIdentifikator, Stønadskontotype.MØDREKVOTE, new Trekkdager(30), Utbetalingsgrad.TEN)) - .build(); - var annenPartPeriode3 = AnnenpartUttakPeriode.Builder.uttak(fødselsdato.plusWeeks(6), tom) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(aktivitetIdentifikator, Stønadskontotype.FELLESPERIODE, - new Trekkdager(Virkedager.beregnAntallVirkedager(fødselsdato.plusWeeks(6), tom)), Utbetalingsgrad.TEN)) - .build(); - var kontoer = new Kontoer.Builder().konto(konto(FEDREKVOTE, 50)) - .konto(konto(MØDREKVOTE, 50)) - .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(FELLESPERIODE, 130)) - .flerbarnsdager(5); - var periodeGrunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(farBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(Stønadskontotype.FEDREKVOTE, fødselsdato.plusWeeks(6), tom, true, null))) - .annenPart(new AnnenPart.Builder().uttaksperiode(annenPartPeriode1).uttaksperiode(annenPartPeriode2).uttaksperiode(annenPartPeriode3)) - .build(); + var annenPartPeriode1 = + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + aktivitetIdentifikator, + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + new Trekkdager(15), + Utbetalingsgrad.TEN)) + .build(); + var annenPartPeriode2 = + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + aktivitetIdentifikator, + Stønadskontotype.MØDREKVOTE, + new Trekkdager(30), + Utbetalingsgrad.TEN)) + .build(); + var annenPartPeriode3 = + AnnenpartUttakPeriode.Builder.uttak(fødselsdato.plusWeeks(6), tom) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + aktivitetIdentifikator, + Stønadskontotype.FELLESPERIODE, + new Trekkdager( + Virkedager.beregnAntallVirkedager( + fødselsdato.plusWeeks(6), tom)), + Utbetalingsgrad.TEN)) + .build(); + var kontoer = + new Kontoer.Builder() + .konto(konto(FEDREKVOTE, 50)) + .konto(konto(MØDREKVOTE, 50)) + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(FELLESPERIODE, 130)) + .flerbarnsdager(5); + var periodeGrunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FEDREKVOTE, + fødselsdato.plusWeeks(6), + tom, + true, + null))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode(annenPartPeriode1) + .uttaksperiode(annenPartPeriode2) + .uttaksperiode(annenPartPeriode3)) + .build(); var resultat = fastsettPerioder(periodeGrunnlag); assertThat(resultat).hasSize(2); @@ -408,22 +605,41 @@ private Datoer.Builder datoer(LocalDate fødselsdato) { } @Test - void skal_håndtere_at_både_flerbarnsdager_og_foreldrepenger_kvote_går_tom_i_samme_søknadsperiode_på_forskjellig_dato() { + void + skal_håndtere_at_både_flerbarnsdager_og_foreldrepenger_kvote_går_tom_i_samme_søknadsperiode_på_forskjellig_dato() { var fødselsdato = LocalDate.of(2019, 3, 13); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - //Går først tom for foreldrepenger, deretter tom på flerbarnsdager - .konto(konto(FORELDREPENGER, 75)).flerbarnsdager(150); - var periodeGrunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(aleneomsorg()) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), false, null), - oppgittPeriode(Stønadskontotype.FORELDREPENGER, fødselsdato, fødselsdato.plusWeeks(100), true, null))) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + // Går først tom for foreldrepenger, deretter tom på flerbarnsdager + .konto(konto(FORELDREPENGER, 75)) + .flerbarnsdager(150); + var periodeGrunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg(aleneomsorg()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + false, + null), + oppgittPeriode( + Stønadskontotype.FORELDREPENGER, + fødselsdato, + fødselsdato.plusWeeks(100), + true, + null))) + .build(); var resultat = fastsettPerioder(periodeGrunnlag); assertThat(resultat).hasSize(4); @@ -437,17 +653,41 @@ private Datoer.Builder datoer(LocalDate fødselsdato) { void mor_aleneomsorg_knekkes_riktig() { var fødselsdato = LocalDate.of(2022, 10, 4); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)).konto(konto(FORELDREPENGER, 75)).farUttakRundtFødselDager(10); - var periodeGrunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(false).farHarRett(false).aleneomsorg(true)) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), false, null), - oppgittPeriode(Stønadskontotype.FORELDREPENGER, fødselsdato, fødselsdato.plusWeeks(100), false, null))) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(FORELDREPENGER, 75)) + .farUttakRundtFødselDager(10); + var periodeGrunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(false) + .farHarRett(false) + .aleneomsorg(true)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + false, + null), + oppgittPeriode( + Stønadskontotype.FORELDREPENGER, + fødselsdato, + fødselsdato.plusWeeks(100), + false, + null))) + .build(); var resultat = fastsettPerioder(periodeGrunnlag); assertThat(resultat).hasSize(4); @@ -461,21 +701,38 @@ void mor_aleneomsorg_knekkes_riktig() { void begge_rett_med_termin_fff_knekkes_riktig() { var fødselsdato = LocalDate.of(2022, 10, 4); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(MØDREKVOTE, 75)) - .konto(konto(FEDREKVOTE, 75)) - .konto(konto(FELLESPERIODE, 80)) - .farUttakRundtFødselDager(10); - var periodeGrunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato).termin(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), false, null), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(15).minusDays(1), false, null))) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 75)) + .konto(konto(FEDREKVOTE, 75)) + .konto(konto(FELLESPERIODE, 80)) + .farUttakRundtFødselDager(10); + var periodeGrunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato).termin(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + Stønadskontotype.FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + false, + null), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(15).minusDays(1), + false, + null))) + .build(); var resultat = fastsettPerioder(periodeGrunnlag); assertThat(resultat).hasSize(3); assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); @@ -487,19 +744,40 @@ void begge_rett_med_termin_fff_knekkes_riktig() { void skalIkkeKasteExceptionVedUtsettelseFraDerSaldoGårUt() { var fødselsdato = LocalDate.of(2018, 8, 20); var aktivitetIdentifikator = AktivitetIdentifikator.annenAktivitet(); - var kontoer = new Kontoer.Builder().konto(konto(MØDREKVOTE, 75)).konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)); - var grunnlag = new RegelGrunnlag.Builder().datoer(datoer(fødselsdato)) - .behandling(morBehandling().kreverSammenhengendeUttak(true)) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) - .kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, LocalDate.of(2018, 7, 30), LocalDate.of(2018, 8, 19))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, LocalDate.of(2018, 8, 20), LocalDate.of(2018, 12, 2))) - .oppgittPeriode(utsettelsePeriode(LocalDate.of(2018, 12, 3), LocalDate.of(2018, 12, 31), UtsettelseÅrsak.INNLAGT_SØKER, - INNLEGGELSE_SØKER_GODKJENT))) - .inngangsvilkår(oppfyltAlleVilkår()) - .build(); + var kontoer = + new Kontoer.Builder() + .konto(konto(MØDREKVOTE, 75)) + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)); + var grunnlag = + new RegelGrunnlag.Builder() + .datoer(datoer(fødselsdato)) + .behandling(morBehandling().kreverSammenhengendeUttak(true)) + .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + LocalDate.of(2018, 7, 30), + LocalDate.of(2018, 8, 19))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + LocalDate.of(2018, 8, 20), + LocalDate.of(2018, 12, 2))) + .oppgittPeriode( + utsettelsePeriode( + LocalDate.of(2018, 12, 3), + LocalDate.of(2018, 12, 31), + UtsettelseÅrsak.INNLAGT_SØKER, + INNLEGGELSE_SØKER_GODKJENT))) + .inngangsvilkår(oppfyltAlleVilkår()) + .build(); assertThatCode(() -> fastsettPerioder(grunnlag)).doesNotThrowAnyException(); } @@ -507,42 +785,91 @@ void begge_rett_med_termin_fff_knekkes_riktig() { @Test void skal_gå_til_avslag_når_søker_er_tom_for_sine_konto_mor() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)).konto(konto(MØDREKVOTE, 50)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(13).minusDays(1)))); - + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 50)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(13).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); - var uttakPeriode = resultat.get(4).uttakPeriode(); // henter ut den siste perioden, som skal gå til avslag + var uttakPeriode = + resultat.get(4) + .uttakPeriode(); // henter ut den siste perioden, som skal gå til avslag assertThat(uttakPeriode.getStønadskontotype()).isEqualTo(Stønadskontotype.MØDREKVOTE); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(uttakPeriode.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(uttakPeriode.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); } @Test void skal_filtrere_bort_perioden_som_kun_er_helg() { var fødselsdato = LocalDate.of(2018, 1, 1); - var periodeSomKunErHelg = oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6).plusDays(5), fødselsdato.plusWeeks(6).plusDays(6)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)).konto(konto(MØDREKVOTE, 50)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(6).plusDays(4)), periodeSomKunErHelg, - oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(8)))); + var periodeSomKunErHelg = + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6).plusDays(5), + fødselsdato.plusWeeks(6).plusDays(6)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 50)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(6).plusDays(4)), + periodeSomKunErHelg, + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(8)))); var resultat = fastsettPerioder(grunnlag); @@ -550,191 +877,358 @@ void skal_filtrere_bort_perioden_som_kun_er_helg() { assertThat(resultat).hasSize(4); } - @Test void skal_gå_til_avslag_når_søker_er_tom_for_sine_konto_far() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(konto(FEDREKVOTE, 15)).konto(konto(FELLESPERIODE, 50)); - var søknad = søknad(Søknadstype.FØDSEL, oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(9).minusDays(1)), - oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(9), fødselsdato.plusWeeks(10).minusDays(1)), - oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(20).minusDays(1), MORS_AKTIVITET_GODKJENT), - oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(20), fødselsdato.plusWeeks(21).minusDays(1), MORS_AKTIVITET_GODKJENT)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(farBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(søknad); - + var kontoer = + new Kontoer.Builder().konto(konto(FEDREKVOTE, 15)).konto(konto(FELLESPERIODE, 50)); + var søknad = + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(9).minusDays(1)), + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(9), + fødselsdato.plusWeeks(10).minusDays(1)), + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(20).minusDays(1), + MORS_AKTIVITET_GODKJENT), + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(20), + fødselsdato.plusWeeks(21).minusDays(1), + MORS_AKTIVITET_GODKJENT)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad(søknad); var resultat = fastsettPerioder(grunnlag); - var uttakPeriode = resultat.get(1).uttakPeriode(); // henter ut den siste perioden, som skal gå til avslag + var uttakPeriode = + resultat.get(1) + .uttakPeriode(); // henter ut den siste perioden, som skal gå til avslag assertThat(uttakPeriode.getStønadskontotype()).isEqualTo(Stønadskontotype.FEDREKVOTE); - assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(uttakPeriode.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); - assertThat(uttakPeriode.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(uttakPeriode.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); + assertThat(uttakPeriode.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); } @Test void skal_gå_regne_ubetalingsprosent_ut_fra_samtidig_uttaksprosent_hvis_ikke_gradering() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)).konto(konto(MØDREKVOTE, 5 * 15)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), false, new SamtidigUttaksprosent(50)))); - + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)) + .konto(konto(MØDREKVOTE, 5 * 15)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + false, + new SamtidigUttaksprosent(50)))); var resultat = fastsettPerioder(grunnlag); var periodeMedSamtidigUttak = resultat.get(2).uttakPeriode(); - assertThat(periodeMedSamtidigUttak.getUtbetalingsgrad(ARBEIDSFORHOLD_1)).isEqualTo(new Utbetalingsgrad(50)); + assertThat(periodeMedSamtidigUttak.getUtbetalingsgrad(ARBEIDSFORHOLD_1)) + .isEqualTo(new Utbetalingsgrad(50)); } @Test void skal_gå_regne_trekkdager_ut_fra_samtidig_uttaksprosent_hvis_ikke_gradering() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)).konto(konto(MØDREKVOTE, 5 * 15)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), false, new SamtidigUttaksprosent(80)))); - + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)) + .konto(konto(MØDREKVOTE, 5 * 15)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + false, + new SamtidigUttaksprosent(80)))); var resultat = fastsettPerioder(grunnlag); var periodeMedSamtidigUttak = resultat.get(2).uttakPeriode(); - assertThat(periodeMedSamtidigUttak.getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(8)); + assertThat(periodeMedSamtidigUttak.getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(8)); } @Test void oppholdsperiode_skal_knekke_og_bevare_årsaken() { var fødselsdato = LocalDate.of(2018, 1, 1); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)).konto(konto(MØDREKVOTE, 100)).konto(konto(FEDREKVOTE, 5)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(morBehandling().kreverSammenhengendeUttak(true)) - .rettOgOmsorg(beggeRett()) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - //Går tom for fedrekvote i oppholdsperioden - .oppgittPeriode( - forOpphold(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8), OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER, null, null))); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 100)) + .konto(konto(FEDREKVOTE, 5)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling(morBehandling().kreverSammenhengendeUttak(true)) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + // Går tom for fedrekvote i oppholdsperioden + .oppgittPeriode( + forOpphold( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8), + OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER, + null, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - assertThat(resultat.get(2).uttakPeriode().getOppholdÅrsak()).isEqualTo(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER); - assertThat(resultat.get(3).uttakPeriode().getOppholdÅrsak()).isEqualTo(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER); + assertThat(resultat.get(2).uttakPeriode().getOppholdÅrsak()) + .isEqualTo(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER); + assertThat(resultat.get(3).uttakPeriode().getOppholdÅrsak()) + .isEqualTo(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER); } @Test void skal_knekke_på_riktig_dato_når_konto_går_tom_og_periode_har_samtidig_uttak() { var fødselsdato = LocalDate.of(2019, 3, 19); var sisteUttaksdato = LocalDate.of(2019, 5, 13); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)).konto(konto(MØDREKVOTE, 5)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, LocalDate.of(2019, 2, 27), LocalDate.of(2019, 3, 18)), - oppgittPeriode(MØDREKVOTE, LocalDate.of(2019, 4, 19), sisteUttaksdato, false, new SamtidigUttaksprosent(80)))); - + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)) + .konto(konto(MØDREKVOTE, 5)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + LocalDate.of(2019, 2, 27), + LocalDate.of(2019, 3, 18)), + oppgittPeriode( + MØDREKVOTE, + LocalDate.of(2019, 4, 19), + sisteUttaksdato, + false, + new SamtidigUttaksprosent(80)))); var resultat = fastsettPerioder(grunnlag); - assertThat(resultat.get(resultat.size() - 1).uttakPeriode().getFom()).isEqualTo(LocalDate.of(2019, 4, 30)); - assertThat(resultat.get(resultat.size() - 1).uttakPeriode().getTom()).isEqualTo(sisteUttaksdato); + assertThat(resultat.get(resultat.size() - 1).uttakPeriode().getFom()) + .isEqualTo(LocalDate.of(2019, 4, 30)); + assertThat(resultat.get(resultat.size() - 1).uttakPeriode().getTom()) + .isEqualTo(sisteUttaksdato); } @Test void far_skal_kunne_få_overført_perioder_fra_mor_i_revurdering_med_endringsdato() { var fødselsdato = LocalDate.of(2019, 1, 24); var kontoer = new Kontoer.Builder().konto(konto(MØDREKVOTE, 75 - 28)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(new Behandling.Builder().søkerErMor(true).berørtBehandling(true)) - .rettOgOmsorg(beggeRett()) - .revurdering(new Revurdering.Builder().endringsdato(LocalDate.of(2019, 3, 4))) - //far har fått overført mange dager av mor. Det er noen dager igjen til mor. Skal avslå alle mors perioder og ikke trekk dager - .annenPart(new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2019, 3, 4), LocalDate.of(2019, 3, 6)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), Stønadskontotype.MØDREKVOTE, new Trekkdager(3), - Utbetalingsgrad.FULL)) - .build()) - .uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2019, 3, 7), LocalDate.of(2019, 3, 31)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), Stønadskontotype.MØDREKVOTE, new Trekkdager(17), - Utbetalingsgrad.FULL)) - .build()) - .uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2019, 4, 1), LocalDate.of(2019, 5, 3)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), Stønadskontotype.MØDREKVOTE, new Trekkdager(25), - Utbetalingsgrad.FULL)) - .build())) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(MØDREKVOTE, LocalDate.of(2019, 3, 4), LocalDate.of(2019, 3, 15)))); - + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling( + new Behandling.Builder().søkerErMor(true).berørtBehandling(true)) + .rettOgOmsorg(beggeRett()) + .revurdering( + new Revurdering.Builder().endringsdato(LocalDate.of(2019, 3, 4))) + // far har fått overført mange dager av mor. Det er noen dager igjen til + // mor. Skal avslå alle mors perioder og ikke trekk dager + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2019, 3, 4), + LocalDate.of(2019, 3, 6)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator + .forFrilans(), + Stønadskontotype.MØDREKVOTE, + new Trekkdager(3), + Utbetalingsgrad.FULL)) + .build()) + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2019, 3, 7), + LocalDate.of(2019, 3, 31)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator + .forFrilans(), + Stønadskontotype.MØDREKVOTE, + new Trekkdager(17), + Utbetalingsgrad.FULL)) + .build()) + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2019, 4, 1), + LocalDate.of(2019, 5, 3)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator + .forFrilans(), + Stønadskontotype.MØDREKVOTE, + new Trekkdager(25), + Utbetalingsgrad.FULL)) + .build())) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + MØDREKVOTE, + LocalDate.of(2019, 3, 4), + LocalDate.of(2019, 3, 15)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1).decimalValue()).isZero(); - assertThat(resultat.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD_1).decimalValue()).isZero(); - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1).decimalValue()).isZero(); - assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD_1).decimalValue()).isZero(); + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1).decimalValue()) + .isZero(); + assertThat( + resultat.get(0) + .uttakPeriode() + .getUtbetalingsgrad(ARBEIDSFORHOLD_1) + .decimalValue()) + .isZero(); + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1).decimalValue()) + .isZero(); + assertThat( + resultat.get(1) + .uttakPeriode() + .getUtbetalingsgrad(ARBEIDSFORHOLD_1) + .decimalValue()) + .isZero(); } @Test void skal_knekke_på_riktig_dato_når_flerbarnskonto_går_tom() { var fødselsdato = LocalDate.of(2019, 3, 19); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)) - .konto(konto(MØDREKVOTE, 20)) - .konto(konto(FELLESPERIODE, 20)) - .flerbarnsdager(5); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(datoer(fødselsdato)) - .behandling(farBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(6), LocalDate.of(2020, 5, 13), true, null))); - + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 3 * 5)) + .konto(konto(MØDREKVOTE, 20)) + .konto(konto(FELLESPERIODE, 20)) + .flerbarnsdager(5); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(datoer(fødselsdato)) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(6), + LocalDate.of(2020, 5, 13), + true, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - //Flerbarnsdager går tom, trekkdager satt til 5 dager som er resten av flerbansdager kontoen + // Flerbarnsdager går tom, trekkdager satt til 5 dager som er resten av flerbansdager + // kontoen assertThat(resultat.get(0).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(resultat.get(0).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(7).minusDays(1)); + assertThat(resultat.get(0).uttakPeriode().getTom()) + .isEqualTo(fødselsdato.plusWeeks(7).minusDays(1)); assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(5)); + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(5)); - //15 dager fellesperiode igjen, men ingen flerbarnsdager + // 15 dager fellesperiode igjen, men ingen flerbarnsdager assertThat(resultat.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(7)); assertThat(resultat.get(1).uttakPeriode().getTom()).isEqualTo(LocalDate.of(2020, 5, 13)); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(MANUELL_BEHANDLING); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(MANUELL_BEHANDLING); } @Test @@ -742,20 +1236,42 @@ void skal_filtrere_bort_perioden_som_kun_er_helg() { var fødselsdato = LocalDate.of(2019, 5, 28); var arbeidsforhold1 = new Arbeidsforhold(ARBEIDSFORHOLD_1); var arbeidsforhold2 = new Arbeidsforhold(ARBEIDSFORHOLD_2); - var fastsattPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.minusDays(1), fødselsdato.minusDays(1)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FORELDREPENGER, arbeidsforhold1.identifikator()))); + var fastsattPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode(fødselsdato.minusDays(1), fødselsdato.minusDays(1)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), + FORELDREPENGER, + arbeidsforhold1.identifikator()))); var vedtak = new Vedtak.Builder().leggTilPeriode(fastsattPeriode); - var grunnlag = new RegelGrunnlag.Builder().arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold1).arbeidsforhold(arbeidsforhold2)) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).aleneomsorg(true)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, fødselsdato, fødselsdato.plusWeeks(6))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6).plusDays(1), fødselsdato.plusWeeks(15)))) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato)) - .inngangsvilkår(oppfyltAlleVilkår()) - .revurdering(new Revurdering.Builder().gjeldendeVedtak(vedtak)) - .kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 50))); + var grunnlag = + new RegelGrunnlag.Builder() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(arbeidsforhold1) + .arbeidsforhold(arbeidsforhold2)) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .behandling(morBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).aleneomsorg(true)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødselsdato, + fødselsdato.plusWeeks(6))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6).plusDays(1), + fødselsdato.plusWeeks(15)))) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato)) + .inngangsvilkår(oppfyltAlleVilkår()) + .revurdering(new Revurdering.Builder().gjeldendeVedtak(vedtak)) + .kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 50))); assertThatCode(() -> fastsettPerioder(grunnlag)).doesNotThrowAnyException(); } @@ -763,85 +1279,174 @@ void skal_filtrere_bort_perioden_som_kun_er_helg() { @Test void søknadsfrist_ikke_trekke_dager_etter_at_konto_er_tom() { var fødselsdato = LocalDate.of(2018, 6, 14); - var grunnlag = basicGrunnlag(fødselsdato).rettOgOmsorg(aleneomsorg()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(FORELDREPENGER, fødselsdato, fødselsdato.plusYears(1)))) - .kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 50))); + var grunnlag = + basicGrunnlag(fødselsdato) + .rettOgOmsorg(aleneomsorg()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødselsdato, + fødselsdato.plusYears(1)))) + .kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 50))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(30)); - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(20)); - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(Trekkdager.ZERO); + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(30)); + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(20)); + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(Trekkdager.ZERO); } @Test void søknadsfrist_ikke_trekke_dager_etter_at_konto_er_tom_manglende_søkt_periode() { var fødselsdato = LocalDate.of(2018, 6, 14); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(bareFarRett()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, fødselsdato.plusYears(1), fødselsdato.plusYears(1)))) - .kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 50))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusYears(1), + fødselsdato.plusYears(1)))) + .kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 50))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); - //fram til tom på konto - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(50)); + // fram til tom på konto + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(50)); assertThat(resultat.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); - //mellom tom på konto og første søkte - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(Trekkdager.ZERO); - //første søkte - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(Trekkdager.ZERO); + // mellom tom på konto og første søkte + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(Trekkdager.ZERO); + // første søkte + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(Trekkdager.ZERO); assertThat(resultat.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); } @Test - void utsettelse_som_går_til_manuell_behandling_skal_ikke_trekke_dager_hvis_dager_igjen_på_bare_ett_av_to_arbeidsforhold_selv_om_sluttpunkt_trekker_dager() { + void + utsettelse_som_går_til_manuell_behandling_skal_ikke_trekke_dager_hvis_dager_igjen_på_bare_ett_av_to_arbeidsforhold_selv_om_sluttpunkt_trekker_dager() { var fødselsdato = LocalDate.of(2018, 6, 14); var arbeidsforhold1 = new Arbeidsforhold(ARBEIDSFORHOLD_1); var arbeidsforhold2 = new Arbeidsforhold(ARBEIDSFORHOLD_2); - var grunnlag = basicGrunnlag(fødselsdato).behandling(morBehandling().kreverSammenhengendeUttak(true)) - .rettOgOmsorg(aleneomsorg()) - //50% prosent stilling, men søker utsettelse. Går til manuell behandling - .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold1) - .arbeidsforhold(arbeidsforhold2) - .endringAvStilling(new EndringAvStilling(fødselsdato, BigDecimal.valueOf(75)))) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode( - gradertoppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7).minusDays(1), BigDecimal.valueOf(50), - Set.of(arbeidsforhold1.identifikator()))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(100), UtsettelseÅrsak.ARBEID, null))) - .kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 35))); + var grunnlag = + basicGrunnlag(fødselsdato) + .behandling(morBehandling().kreverSammenhengendeUttak(true)) + .rettOgOmsorg(aleneomsorg()) + // 50% prosent stilling, men søker utsettelse. Går til manuell behandling + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(arbeidsforhold1) + .arbeidsforhold(arbeidsforhold2) + .endringAvStilling( + new EndringAvStilling( + fødselsdato, BigDecimal.valueOf(75)))) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + gradertoppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(7).minusDays(1), + BigDecimal.valueOf(50), + Set.of(arbeidsforhold1.identifikator()))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(100), + UtsettelseÅrsak.ARBEID, + null))) + .kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 35))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); assertThat(resultat.get(2).uttakPeriode().getManuellbehandlingårsak()).isNotNull(); - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(Trekkdager.ZERO); - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_2)).isEqualTo(Trekkdager.ZERO); + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(Trekkdager.ZERO); + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_2)) + .isEqualTo(Trekkdager.ZERO); assertThat(resultat.get(2).uttakPeriode().getStønadskontotype()).isNull(); } @Test void innvilge_foreldrepenger_14_uker_før_fødsel_men_ikke_12_uker_før_termin_ved_terminsøknad() { var termin = LocalDate.of(2020, 6, 10); - var fp = forVanligPeriode(FORELDREPENGER, termin.minusWeeks(15), termin.minusWeeks(3).minusDays(1), null, false, null, null, null, null); - var fpff = forVanligPeriode(FORELDREPENGER_FØR_FØDSEL, termin.minusWeeks(3), termin.minusDays(1), null, false, null, null, null, null); - var fp2 = forVanligPeriode(FORELDREPENGER, termin, termin.plusWeeks(4), null, false, null, null, null, null); - var testGrunnlag = basicGrunnlag().datoer(new Datoer.Builder().termin(termin).fødsel(termin.plusWeeks(2))) - .rettOgOmsorg(aleneomsorg()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(1000))) - .søknad(new Søknad.Builder().type(Søknadstype.TERMIN).oppgittePerioder(List.of(fp, fpff, fp2))); + var fp = + forVanligPeriode( + FORELDREPENGER, + termin.minusWeeks(15), + termin.minusWeeks(3).minusDays(1), + null, + false, + null, + null, + null, + null); + var fpff = + forVanligPeriode( + FORELDREPENGER_FØR_FØDSEL, + termin.minusWeeks(3), + termin.minusDays(1), + null, + false, + null, + null, + null, + null); + var fp2 = + forVanligPeriode( + FORELDREPENGER, + termin, + termin.plusWeeks(4), + null, + false, + null, + null, + null, + null); + var testGrunnlag = + basicGrunnlag() + .datoer(new Datoer.Builder().termin(termin).fødsel(termin.plusWeeks(2))) + .rettOgOmsorg(aleneomsorg()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FORELDREPENGER) + .trekkdager(1000))) + .søknad( + new Søknad.Builder() + .type(Søknadstype.TERMIN) + .oppgittePerioder(List.of(fp, fpff, fp2))); var resultater = fastsettPerioder(testGrunnlag); assertThat(resultater.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); assertThat(resultater.get(0).uttakPeriode().getFom()).isEqualTo(termin.minusWeeks(15)); - assertThat(resultater.get(0).uttakPeriode().getTom()).isEqualTo(termin.minusWeeks(12).minusDays(1)); - assertThat(resultater.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(resultater.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); + assertThat(resultater.get(0).uttakPeriode().getTom()) + .isEqualTo(termin.minusWeeks(12).minusDays(1)); + assertThat(resultater.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultater.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); assertThat(resultater.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); } @@ -850,328 +1455,656 @@ void skal_filtrere_bort_perioden_som_kun_er_helg() { void skal_innvilge_med_privatperson_som_arbeidsgiver() { var fødselsdato = LocalDate.of(2018, 1, 1); var aktivitetIdentifikator = AktivitetIdentifikator.forArbeid(new AktørId("123"), "345"); - var grunnlag = basicGrunnlagMor(fødselsdato).arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - gradertoppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10), BigDecimal.TEN, - Set.of(aktivitetIdentifikator)))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + gradertoppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10), + BigDecimal.TEN, + Set.of(aktivitetIdentifikator)))); var resultat = fastsettPerioder(grunnlag); - assertThat(resultat).isNotEmpty().allMatch(p -> p.uttakPeriode().getPerioderesultattype().equals(Perioderesultattype.INNVILGET)); + assertThat(resultat) + .isNotEmpty() + .allMatch( + p -> + p.uttakPeriode() + .getPerioderesultattype() + .equals(Perioderesultattype.INNVILGET)); } @Test void skal_delvis_innvilge_med_periode_før_etter_start_ny_stønadsperiode() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2021, 1, 1)); var nesteStønadsperiode = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var grunnlag = basicGrunnlag().datoer(datoer(fødselsdato).startdatoNesteStønadsperiode(nesteStønadsperiode)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(FEDREKVOTE, nesteStønadsperiode.minusWeeks(5), nesteStønadsperiode.plusWeeks(5).minusDays(1)))); + var grunnlag = + basicGrunnlag() + .datoer( + datoer(fødselsdato) + .startdatoNesteStønadsperiode(nesteStønadsperiode)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FEDREKVOTE, + nesteStønadsperiode.minusWeeks(5), + nesteStønadsperiode.plusWeeks(5).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.stream() - .map(FastsettePeriodeResultat::uttakPeriode) - .map(UttakPeriode::getPerioderesultattype) - .filter(INNVILGET::equals) - .count()).isEqualTo(1); - var avslått = resultat.stream() - .map(FastsettePeriodeResultat::uttakPeriode) - .filter(up -> AVSLÅTT.equals(up.getPerioderesultattype())) - .findFirst() - .orElseThrow(); + assertThat( + resultat.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .map(UttakPeriode::getPerioderesultattype) + .filter(INNVILGET::equals) + .count()) + .isEqualTo(1); + var avslått = + resultat.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .filter(up -> AVSLÅTT.equals(up.getPerioderesultattype())) + .findFirst() + .orElseThrow(); assertThat(avslått.getFom()).isEqualTo(nesteStønadsperiode); - assertThat(avslått.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); + assertThat(avslått.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); } @Test void skal_innvilge_med_periode_før_start_ny_stønadsperiode() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2021, 1, 1)); var nesteStønadsperiode = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var grunnlag = basicGrunnlag().datoer(datoer(fødselsdato).startdatoNesteStønadsperiode(nesteStønadsperiode)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .kontoer(defaultKontoer()) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(FEDREKVOTE, nesteStønadsperiode.minusWeeks(18), nesteStønadsperiode.minusWeeks(8).minusDays(1)))); + var grunnlag = + basicGrunnlag() + .datoer( + datoer(fødselsdato) + .startdatoNesteStønadsperiode(nesteStønadsperiode)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .kontoer(defaultKontoer()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FEDREKVOTE, + nesteStønadsperiode.minusWeeks(18), + nesteStønadsperiode.minusWeeks(8).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(1); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test void skal_avslå_med_periode_etter_start_ny_stønadsperiode() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2021, 1, 1)); var nesteStønadsperiode = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var grunnlag = basicGrunnlag().datoer(datoer(fødselsdato).startdatoNesteStønadsperiode(nesteStønadsperiode)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(FEDREKVOTE, nesteStønadsperiode.plusWeeks(1), nesteStønadsperiode.plusWeeks(11).minusDays(1)))); + var grunnlag = + basicGrunnlag() + .datoer( + datoer(fødselsdato) + .startdatoNesteStønadsperiode(nesteStønadsperiode)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FEDREKVOTE, + nesteStønadsperiode.plusWeeks(1), + nesteStønadsperiode.plusWeeks(11).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(1); assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(resultat.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); + assertThat(resultat.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); } @Test void to_tette_skal_innvilge_med_periode_etter_start_ny_stønadsperiode_gjenstående_minsterett() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 8, 2)); var nesteStønadsperiode = Virkedager.justerHelgTilMandag(LocalDate.of(2023, 4, 1)); - var grunnlag = basicGrunnlag().datoer(datoer(fødselsdato).startdatoNesteStønadsperiode(nesteStønadsperiode)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(15 * 5)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(16 * 5)) - .etterNesteStønadsperiodeDager(22 * 5)) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(15).minusDays(1)), - oppgittPeriode(FELLESPERIODE, nesteStønadsperiode.minusWeeks(4), nesteStønadsperiode.plusWeeks(12).minusDays(1)))); + var grunnlag = + basicGrunnlag() + .datoer( + datoer(fødselsdato) + .startdatoNesteStønadsperiode(nesteStønadsperiode)) + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(MØDREKVOTE) + .trekkdager(15 * 5)) + .konto( + new Konto.Builder() + .type(FELLESPERIODE) + .trekkdager(16 * 5)) + .etterNesteStønadsperiodeDager(22 * 5)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(15).minusDays(1)), + oppgittPeriode( + FELLESPERIODE, + nesteStønadsperiode.minusWeeks(4), + nesteStønadsperiode.plusWeeks(12).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(5); - assertThat(resultat.stream().filter(r -> Perioderesultattype.AVSLÅTT.equals(r.uttakPeriode().getPerioderesultattype())).count()).isEqualTo(1); + assertThat( + resultat.stream() + .filter( + r -> + Perioderesultattype.AVSLÅTT.equals( + r.uttakPeriode().getPerioderesultattype())) + .count()) + .isEqualTo(1); assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); assertThat(resultat.get(3).uttakPeriode().getFom()).isEqualTo(nesteStønadsperiode); - assertThat(resultat.get(3).uttakPeriode().getTom()).isEqualTo(nesteStønadsperiode.plusWeeks(3).minusDays(1)); + assertThat(resultat.get(3).uttakPeriode().getTom()) + .isEqualTo(nesteStønadsperiode.plusWeeks(3).minusDays(1)); assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(resultat.get(4).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); + assertThat(resultat.get(4).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); } @Test void to_tette_skal_avslå_med_periode_etter_start_ny_stønadsperiode_oppbrukt_minsterett() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 8, 2)); var nesteStønadsperiode = Virkedager.justerHelgTilMandag(LocalDate.of(2023, 4, 1)); - var grunnlag = basicGrunnlag().datoer(datoer(fødselsdato).startdatoNesteStønadsperiode(nesteStønadsperiode)) - .rettOgOmsorg(beggeRett()) - .behandling(farBehandling()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(15 * 5)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(16 * 5)) - .minsterettDager(8 * 5) - .etterNesteStønadsperiodeDager(8 * 5)) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(FEDREKVOTE, nesteStønadsperiode.minusWeeks(12), nesteStønadsperiode.minusWeeks(2).minusDays(1)), - oppgittPeriode(FEDREKVOTE, nesteStønadsperiode, nesteStønadsperiode.plusWeeks(5).minusDays(1)))); + var grunnlag = + basicGrunnlag() + .datoer( + datoer(fødselsdato) + .startdatoNesteStønadsperiode(nesteStønadsperiode)) + .rettOgOmsorg(beggeRett()) + .behandling(farBehandling()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FEDREKVOTE) + .trekkdager(15 * 5)) + .konto( + new Konto.Builder() + .type(FELLESPERIODE) + .trekkdager(16 * 5)) + .minsterettDager(8 * 5) + .etterNesteStønadsperiodeDager(8 * 5)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FEDREKVOTE, + nesteStønadsperiode.minusWeeks(12), + nesteStønadsperiode.minusWeeks(2).minusDays(1)), + oppgittPeriode( + FEDREKVOTE, + nesteStønadsperiode, + nesteStønadsperiode.plusWeeks(5).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); - assertThat(resultat.stream().filter(r -> Perioderesultattype.AVSLÅTT.equals(r.uttakPeriode().getPerioderesultattype())).count()).isEqualTo(1); - // Periode 0 er 8 uker FK innenfor minsteretten. Det var søkt om 10 uker men perioden blir knekt etter 8 uker pga minsterett - // Periode 1 er 2 uker FK utenfor minsteretten. Det var søkt om 10 uker og dette er restperioden på 2 uker + assertThat( + resultat.stream() + .filter( + r -> + Perioderesultattype.AVSLÅTT.equals( + r.uttakPeriode().getPerioderesultattype())) + .count()) + .isEqualTo(1); + // Periode 0 er 8 uker FK innenfor minsteretten. Det var søkt om 10 uker men perioden blir + // knekt etter 8 uker pga minsterett + // Periode 1 er 2 uker FK utenfor minsteretten. Det var søkt om 10 uker og dette er + // restperioden på 2 uker assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getFom()).isEqualTo(nesteStønadsperiode.minusWeeks(4)); - assertThat(resultat.get(1).uttakPeriode().getTom()).isEqualTo(nesteStønadsperiode.minusWeeks(2).minusDays(1)); + assertThat(resultat.get(1).uttakPeriode().getFom()) + .isEqualTo(nesteStønadsperiode.minusWeeks(4)); + assertThat(resultat.get(1).uttakPeriode().getTom()) + .isEqualTo(nesteStønadsperiode.minusWeeks(2).minusDays(1)); assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(resultat.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); + assertThat(resultat.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); } @Test void to_tette_bfhr_redusert_minsterett_oppbrukt_før_start_ny_sak() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 8, 2)); var nesteStønadsperiode = Virkedager.justerHelgTilMandag(LocalDate.of(2023, 4, 1)); - var grunnlag = basicGrunnlag().datoer(datoer(fødselsdato).startdatoNesteStønadsperiode(nesteStønadsperiode)) - .rettOgOmsorg(bareFarRett()) - .behandling(farBehandling()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(40 * 5)) - .minsterettDager(15 * 5) - .etterNesteStønadsperiodeDager(8 * 5)) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(FORELDREPENGER, nesteStønadsperiode.minusWeeks(12), nesteStønadsperiode.minusWeeks(2).minusDays(1)), - oppgittPeriode(FORELDREPENGER, nesteStønadsperiode, nesteStønadsperiode.plusWeeks(5).minusDays(1)))); + var grunnlag = + basicGrunnlag() + .datoer( + datoer(fødselsdato) + .startdatoNesteStønadsperiode(nesteStønadsperiode)) + .rettOgOmsorg(bareFarRett()) + .behandling(farBehandling()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FORELDREPENGER) + .trekkdager(40 * 5)) + .minsterettDager(15 * 5) + .etterNesteStønadsperiodeDager(8 * 5)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER, + nesteStønadsperiode.minusWeeks(12), + nesteStønadsperiode.minusWeeks(2).minusDays(1)), + oppgittPeriode( + FORELDREPENGER, + nesteStønadsperiode, + nesteStønadsperiode.plusWeeks(5).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - assertThat(resultat.stream() - .filter(r -> IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT.equals(r.uttakPeriode().getPeriodeResultatÅrsak())) - .count()).isEqualTo(2); //MSP + assertThat( + resultat.stream() + .filter( + r -> + IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT.equals( + r.uttakPeriode().getPeriodeResultatÅrsak())) + .count()) + .isEqualTo(2); // MSP assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getFom()).isEqualTo(nesteStønadsperiode.minusWeeks(12)); - assertThat(resultat.get(1).uttakPeriode().getTom()).isEqualTo(nesteStønadsperiode.minusWeeks(2).minusDays(1)); + assertThat(resultat.get(1).uttakPeriode().getFom()) + .isEqualTo(nesteStønadsperiode.minusWeeks(12)); + assertThat(resultat.get(1).uttakPeriode().getTom()) + .isEqualTo(nesteStønadsperiode.minusWeeks(2).minusDays(1)); assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); + assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); } @Test void to_tette_bfhr_redusert_minsterett_oppbrukt_etter_start_ny_sak() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 8, 2)); var nesteStønadsperiode = Virkedager.justerHelgTilMandag(LocalDate.of(2023, 4, 1)); - var grunnlag = basicGrunnlag().datoer(datoer(fødselsdato).startdatoNesteStønadsperiode(nesteStønadsperiode)) - .rettOgOmsorg(bareFarRett()) - .behandling(farBehandling()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(40 * 5)) - .minsterettDager(15 * 5) - .etterNesteStønadsperiodeDager(8 * 5)) - .søknad(søknad(Søknadstype.FØDSEL, - oppgittPeriode(FORELDREPENGER, nesteStønadsperiode.minusWeeks(12), nesteStønadsperiode.minusWeeks(6).minusDays(1)), - oppgittPeriode(FORELDREPENGER, nesteStønadsperiode.plusWeeks(8), nesteStønadsperiode.plusWeeks(9).minusDays(1)), - oppgittPeriode(FORELDREPENGER, nesteStønadsperiode.plusWeeks(15), nesteStønadsperiode.plusWeeks(18).minusDays(1)))); + var grunnlag = + basicGrunnlag() + .datoer( + datoer(fødselsdato) + .startdatoNesteStønadsperiode(nesteStønadsperiode)) + .rettOgOmsorg(bareFarRett()) + .behandling(farBehandling()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FORELDREPENGER) + .trekkdager(40 * 5)) + .minsterettDager(15 * 5) + .etterNesteStønadsperiodeDager(8 * 5)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER, + nesteStønadsperiode.minusWeeks(12), + nesteStønadsperiode.minusWeeks(6).minusDays(1)), + oppgittPeriode( + FORELDREPENGER, + nesteStønadsperiode.plusWeeks(8), + nesteStønadsperiode.plusWeeks(9).minusDays(1)), + oppgittPeriode( + FORELDREPENGER, + nesteStønadsperiode.plusWeeks(15), + nesteStønadsperiode.plusWeeks(18).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(8); - assertThat(resultat.stream() - .filter(r -> IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT.equals(r.uttakPeriode().getPeriodeResultatÅrsak())) - .count()).isEqualTo(2); //MSP + assertThat( + resultat.stream() + .filter( + r -> + IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT.equals( + r.uttakPeriode().getPeriodeResultatÅrsak())) + .count()) + .isEqualTo(2); // MSP assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getFom()).isEqualTo(nesteStønadsperiode.minusWeeks(12)); - assertThat(resultat.get(1).uttakPeriode().getTom()).isEqualTo(nesteStønadsperiode.minusWeeks(6).minusDays(1)); + assertThat(resultat.get(1).uttakPeriode().getFom()) + .isEqualTo(nesteStønadsperiode.minusWeeks(12)); + assertThat(resultat.get(1).uttakPeriode().getTom()) + .isEqualTo(nesteStønadsperiode.minusWeeks(6).minusDays(1)); assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); // MSP + assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); // MSP assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); - assertThat(resultat.get(4).uttakPeriode().getFom()).isEqualTo(nesteStønadsperiode.plusWeeks(8)); - assertThat(resultat.get(4).uttakPeriode().getTom()).isEqualTo(nesteStønadsperiode.plusWeeks(9).minusDays(1)); + assertThat(resultat.get(4).uttakPeriode().getFom()) + .isEqualTo(nesteStønadsperiode.plusWeeks(8)); + assertThat(resultat.get(4).uttakPeriode().getTom()) + .isEqualTo(nesteStønadsperiode.plusWeeks(9).minusDays(1)); assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(resultat.get(5).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); // MSP + assertThat(resultat.get(5).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); // MSP assertThat(resultat.get(6).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); - assertThat(resultat.get(6).uttakPeriode().getFom()).isEqualTo(nesteStønadsperiode.plusWeeks(15)); - assertThat(resultat.get(6).uttakPeriode().getTom()).isEqualTo(nesteStønadsperiode.plusWeeks(16).minusDays(1)); + assertThat(resultat.get(6).uttakPeriode().getFom()) + .isEqualTo(nesteStønadsperiode.plusWeeks(15)); + assertThat(resultat.get(6).uttakPeriode().getTom()) + .isEqualTo(nesteStønadsperiode.plusWeeks(16).minusDays(1)); assertThat(resultat.get(7).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(resultat.get(7).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo( - IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); // Vanlig avslag + assertThat(resultat.get(7).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTTAK_ETTER_NY_STØNADSPERIODE); // Vanlig avslag } @Test void bare_far_har_rett_skal_innvilge_to_uker_rundt_fødsel_deretter_minsterett() { - //Søkt samme dag, men mor har søkt etter far + // Søkt samme dag, men mor har søkt etter far var fødselsdato = LocalDate.of(2022, 10, 6); var termindato = LocalDate.of(2022, 10, 5); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(datoer(fødselsdato).termin(termindato)) - .behandling(farBehandling()) - .rettOgOmsorg(bareFarRett()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(5 * 40)) - .minsterettDager(5 * 8) - .farUttakRundtFødselDager(10)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode( - forVanligPeriode(FORELDREPENGER, termindato.minusDays(2), fødselsdato.plusWeeks(2).minusDays(1), null, false, fødselsdato, - fødselsdato, null, null)) - .oppgittPeriode( - forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(2), fødselsdato.plusWeeks(3).minusDays(1), null, false, fødselsdato, - fødselsdato, null, null)) - .oppgittPeriode( - forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(50), fødselsdato.plusWeeks(58).minusDays(1), null, false, fødselsdato, - fødselsdato, null, null))); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(datoer(fødselsdato).termin(termindato)) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarRett()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FORELDREPENGER) + .trekkdager(5 * 40)) + .minsterettDager(5 * 8) + .farUttakRundtFødselDager(10)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + forVanligPeriode( + FORELDREPENGER, + termindato.minusDays(2), + fødselsdato.plusWeeks(2).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null)) + .oppgittPeriode( + forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(2), + fødselsdato.plusWeeks(3).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null)) + .oppgittPeriode( + forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(50), + fødselsdato.plusWeeks(58).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(7); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); // Før fødsel P1 - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(3)); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); // Etter Fødsel P1 - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(10)); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); // Etter Fødsel P2 - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(5)); - assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); // MSP - assertThat(resultat.get(4).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); // MSP - assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); // Minsterett - assertThat(resultat.get(5).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(22)); // Minsterett - assertThat(resultat.get(6).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo( - IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); // Oppbrukt minsterett + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(INNVILGET); // Før fødsel P1 + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(3)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(INNVILGET); // Etter Fødsel P1 + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(10)); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(INNVILGET); // Etter Fødsel P2 + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(5)); + assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); // MSP + assertThat(resultat.get(4).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARE_FAR_RETT_IKKE_SØKT); // MSP + assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()) + .isEqualTo(INNVILGET); // Minsterett + assertThat(resultat.get(5).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(22)); // Minsterett + assertThat(resultat.get(6).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); // Oppbrukt minsterett } @Test void bare_far_har_rett_skal_innvilge_minsterett_men_ikke_etter_barns_død_selv_om_dager_igjen() { - //Søkt samme dag, men mor har søkt etter far + // Søkt samme dag, men mor har søkt etter far var fødselsdato = LocalDate.of(2022, 10, 6); var dødsdato = fødselsdato.plusWeeks(10); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(datoer(fødselsdato).termin(fødselsdato).dødsdatoer(new Dødsdatoer.Builder().barnsDødsdato(dødsdato).alleBarnDøde(true))) - .behandling(farBehandling()) - .rettOgOmsorg(bareFarRett()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(5 * 40)) - .minsterettDager(5 * 8) - .farUttakRundtFødselDager(10)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode( - forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(2), fødselsdato.plusWeeks(4).minusDays(1), null, false, fødselsdato, - fødselsdato, null, null)) - .oppgittPeriode( - forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(17).minusDays(1), null, false, fødselsdato, - fødselsdato, null, null)) - .oppgittPeriode( - forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(25), fødselsdato.plusWeeks(29).minusDays(1), null, false, fødselsdato, - fødselsdato, null, null))); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer( + datoer(fødselsdato) + .termin(fødselsdato) + .dødsdatoer( + new Dødsdatoer.Builder() + .barnsDødsdato(dødsdato) + .alleBarnDøde(true))) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarRett()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FORELDREPENGER) + .trekkdager(5 * 40)) + .minsterettDager(5 * 8) + .farUttakRundtFødselDager(10)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(2), + fødselsdato.plusWeeks(4).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null)) + .oppgittPeriode( + forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(17).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null)) + .oppgittPeriode( + forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(25), + fødselsdato.plusWeeks(29).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(6); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); // Før fødsel P1 - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(10)); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); // MSP fom uke 6 - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager((15 - 6) * 5)); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); // Etter Fødsel P2 - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(5)); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(MANUELL_BEHANDLING); // Fom dødsdato + 6 uker - assertThat(resultat.get(3).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.DØDSFALL); - assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.BARN_DØD); - assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(MANUELL_BEHANDLING); - assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()).isEqualTo(MANUELL_BEHANDLING); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(INNVILGET); // Før fødsel P1 + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(10)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(AVSLÅTT); // MSP fom uke 6 + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager((15 - 6) * 5)); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(INNVILGET); // Etter Fødsel P2 + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(5)); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(MANUELL_BEHANDLING); // Fom dødsdato + 6 uker + assertThat(resultat.get(3).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.DØDSFALL); + assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.BARN_DØD); + assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(MANUELL_BEHANDLING); + assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()) + .isEqualTo(MANUELL_BEHANDLING); } @Test void bare_far_har_rett_skal_innvilge_minsterett_men_ikke_etter_ny_stønad_selv_om_dager_igjen() { - //Søkt samme dag, men mor har søkt etter far + // Søkt samme dag, men mor har søkt etter far var fødselsdato = LocalDate.of(2022, 10, 6); - var nestesakStartDato = fødselsdato.plusWeeks( - 41); // TOTETTE <= 45 uker (stønadsperiode begynner 3 uker før fødsel). OBS neste sak kan begyynne langt senere - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(datoer(fødselsdato).termin(fødselsdato).startdatoNesteStønadsperiode(nestesakStartDato)) - .behandling(farBehandling()) - .rettOgOmsorg(bareFarRett()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(5 * 40)) - .minsterettDager(5 * 15) - .etterNesteStønadsperiodeDager(8 * 5) - .farUttakRundtFødselDager(10)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode( - forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(24).minusDays(1), null, false, fødselsdato, - fødselsdato, null, null)) - .oppgittPeriode( - forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(40), fødselsdato.plusWeeks(43).minusDays(1), null, false, fødselsdato, - fødselsdato, null, null))); + var nestesakStartDato = + fødselsdato.plusWeeks( + 41); // TOTETTE <= 45 uker (stønadsperiode begynner 3 uker før fødsel). OBS + // neste sak kan begyynne langt senere + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer( + datoer(fødselsdato) + .termin(fødselsdato) + .startdatoNesteStønadsperiode(nestesakStartDato)) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarRett()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FORELDREPENGER) + .trekkdager(5 * 40)) + .minsterettDager(5 * 15) + .etterNesteStønadsperiodeDager(8 * 5) + .farUttakRundtFødselDager(10)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(24).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null)) + .oppgittPeriode( + forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(40), + fødselsdato.plusWeeks(43).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(5); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); // MSP - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager((15 - 6) * 5)); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); // Uttak 9 uker - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager((24 - 15) * 5)); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); // MSP - assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager((40 - 24) * 5)); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); // Fom ny stønad - en uke mellom fom og ny stønad - assertThat(resultat.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(new Trekkdager(5)); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(AVSLÅTT); // MSP + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager((15 - 6) * 5)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(INNVILGET); // Uttak 9 uker + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager((24 - 15) * 5)); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(AVSLÅTT); // MSP + assertThat(resultat.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager((40 - 24) * 5)); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(INNVILGET); // Fom ny stønad - en uke mellom fom og ny stønad + assertThat(resultat.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(new Trekkdager(5)); assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(resultat.get(4).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)).isEqualTo(Trekkdager.ZERO); + assertThat(resultat.get(4).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD_1)) + .isEqualTo(Trekkdager.ZERO); } @Test void oppholdsperioder_med_fritt_uttak_skal_fjernes() { var fødselsdato = LocalDate.of(2022, 11, 4); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad( - søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - forOpphold(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7).minusDays(1), OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER, fødselsdato, - fødselsdato), oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(10).minusDays(1)))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + forOpphold( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(7).minusDays(1), + OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER, + fødselsdato, + fødselsdato), + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(10).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); assertThat(resultat.get(2).uttakPeriode().getStønadskontotype()).isEqualTo(FELLESPERIODE); } - } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Overf\303\270ringDelregelTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Overf\303\270ringDelregelTest.java" index 6e79306d..e134ee9b 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Overf\303\270ringDelregelTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Overf\303\270ringDelregelTest.java" @@ -13,9 +13,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Behandling; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Datoer; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.DokumentasjonVurdering; @@ -29,6 +26,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; +import org.junit.jupiter.api.Test; class OverføringDelregelTest { @@ -38,10 +36,28 @@ class OverføringDelregelTest { var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var søknadsperiode = overføringsperiode(Stønadskontotype.FEDREKVOTE, fom, tom, SYKDOM_ELLER_SKADE, SYKDOM_ANNEN_FORELDER_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.FEDREKVOTE, + fom, + tom, + SYKDOM_ELLER_SKADE, + SYKDOM_ANNEN_FORELDER_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -54,10 +70,28 @@ class OverføringDelregelTest { var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var søknadsperiode = overføringsperiode(Stønadskontotype.FEDREKVOTE, fom, tom, INNLEGGELSE, INNLEGGELSE_ANNEN_FORELDER_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.FEDREKVOTE, + fom, + tom, + INNLEGGELSE, + INNLEGGELSE_ANNEN_FORELDER_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -70,10 +104,28 @@ class OverføringDelregelTest { var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var søknadsperiode = overføringsperiode(Stønadskontotype.FEDREKVOTE, fom, tom, ALENEOMSORG, ER_ALENEOMSORG_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.FEDREKVOTE, + fom, + tom, + ALENEOMSORG, + ER_ALENEOMSORG_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -81,15 +133,34 @@ class OverføringDelregelTest { } @Test - void UT1175_mor_overføring_annen_forelder_ikke_rett_avklart_gyldig_grunn_før_7uker_etter_fødsel() { + void + UT1175_mor_overføring_annen_forelder_ikke_rett_avklart_gyldig_grunn_før_7uker_etter_fødsel() { var fødselsdato = LocalDate.of(2018, 1, 1); var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var søknadsperiode = overføringsperiode(Stønadskontotype.FEDREKVOTE, fom, tom, ANNEN_FORELDER_IKKE_RETT, ER_BARE_SØKER_RETT_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.FEDREKVOTE, + fom, + tom, + ANNEN_FORELDER_IKKE_RETT, + ER_BARE_SØKER_RETT_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -102,10 +173,28 @@ class OverføringDelregelTest { var fom = fødselsdato.plusWeeks(8); var tom = fødselsdato.plusWeeks(9); - var søknadsperiode = overføringsperiode(Stønadskontotype.FEDREKVOTE, fom, tom, SYKDOM_ELLER_SKADE, SYKDOM_ANNEN_FORELDER_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.FEDREKVOTE, + fom, + tom, + SYKDOM_ELLER_SKADE, + SYKDOM_ANNEN_FORELDER_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -118,10 +207,28 @@ class OverføringDelregelTest { var fom = fødselsdato.plusWeeks(8); var tom = fødselsdato.plusWeeks(9); - var søknadsperiode = overføringsperiode(Stønadskontotype.FEDREKVOTE, fom, tom, INNLEGGELSE, INNLEGGELSE_ANNEN_FORELDER_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.FEDREKVOTE, + fom, + tom, + INNLEGGELSE, + INNLEGGELSE_ANNEN_FORELDER_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -134,10 +241,28 @@ class OverføringDelregelTest { var fom = fødselsdato.plusWeeks(8); var tom = fødselsdato.plusWeeks(9); - var søknadsperiode = overføringsperiode(Stønadskontotype.FEDREKVOTE, fom, tom, ALENEOMSORG, ER_ALENEOMSORG_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.FEDREKVOTE, + fom, + tom, + ALENEOMSORG, + ER_ALENEOMSORG_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -145,15 +270,34 @@ class OverføringDelregelTest { } @Test - void UT1175_mor_overføring_annen_forelder_ikke_rett_avklart_gyldig_grunn_etter_7uker_etter_fødsel() { + void + UT1175_mor_overføring_annen_forelder_ikke_rett_avklart_gyldig_grunn_etter_7uker_etter_fødsel() { var fødselsdato = LocalDate.of(2018, 1, 1); var fom = fødselsdato.plusWeeks(8); var tom = fødselsdato.plusWeeks(9); - var søknadsperiode = overføringsperiode(Stønadskontotype.FEDREKVOTE, fom, tom, ANNEN_FORELDER_IKKE_RETT, ER_BARE_SØKER_RETT_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.FEDREKVOTE, + fom, + tom, + ANNEN_FORELDER_IKKE_RETT, + ER_BARE_SØKER_RETT_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -166,10 +310,28 @@ class OverføringDelregelTest { var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var søknadsperiode = overføringsperiode(Stønadskontotype.MØDREKVOTE, fom, tom, SYKDOM_ELLER_SKADE, SYKDOM_ANNEN_FORELDER_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.MØDREKVOTE, + fom, + tom, + SYKDOM_ELLER_SKADE, + SYKDOM_ANNEN_FORELDER_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -182,10 +344,28 @@ class OverføringDelregelTest { var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var søknadsperiode = overføringsperiode(Stønadskontotype.MØDREKVOTE, fom, tom, INNLEGGELSE, INNLEGGELSE_ANNEN_FORELDER_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.MØDREKVOTE, + fom, + tom, + INNLEGGELSE, + INNLEGGELSE_ANNEN_FORELDER_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -198,10 +378,28 @@ class OverføringDelregelTest { var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var søknadsperiode = overføringsperiode(Stønadskontotype.MØDREKVOTE, fom, tom, ALENEOMSORG, ER_ALENEOMSORG_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.MØDREKVOTE, + fom, + tom, + ALENEOMSORG, + ER_ALENEOMSORG_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -214,11 +412,28 @@ class OverføringDelregelTest { var fom = fødselsdato.plusWeeks(3); var tom = fødselsdato.plusWeeks(4); - var søknadsperiode = overføringsperiode(Stønadskontotype.MØDREKVOTE, fom, tom, ANNEN_FORELDER_IKKE_RETT, - DokumentasjonVurdering.ER_BARE_SØKER_RETT_GODKJENT); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.MØDREKVOTE)) - .konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FEDREKVOTE)); - var grunnlag = basicGrunnlagFar(fødselsdato).søknad(fødselssøknadMedEnPeriode(søknadsperiode)).kontoer(kontoer).build(); + var søknadsperiode = + overføringsperiode( + Stønadskontotype.MØDREKVOTE, + fom, + tom, + ANNEN_FORELDER_IKKE_RETT, + DokumentasjonVurdering.ER_BARE_SØKER_RETT_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.MØDREKVOTE)) + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FEDREKVOTE)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .søknad(fødselssøknadMedEnPeriode(søknadsperiode)) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -231,11 +446,16 @@ class OverføringDelregelTest { private RegelGrunnlag.Builder basicGrunnlag(LocalDate fødselsdato) { return RegelGrunnlagTestBuilder.create() - .inngangsvilkår(new Inngangsvilkår.Builder()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + .inngangsvilkår(new Inngangsvilkår.Builder()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } private RegelGrunnlag.Builder basicGrunnlagFar(LocalDate fødselsdato) { @@ -246,10 +466,10 @@ private RegelGrunnlag.Builder basicGrunnlagMor(LocalDate fødselsdato) { return basicGrunnlag(fødselsdato).behandling(new Behandling.Builder().søkerErMor(true)); } - private void assertInnvilget(FastsettePerioderRegelresultat regelresultat, InnvilgetÅrsak innvilgetÅrsak) { + private void assertInnvilget( + FastsettePerioderRegelresultat regelresultat, InnvilgetÅrsak innvilgetÅrsak) { assertThat(regelresultat.oppfylt()).isTrue(); assertThat(regelresultat.skalUtbetale()).isTrue(); assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(innvilgetÅrsak); } - } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Overf\303\270ringOrkestreringTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Overf\303\270ringOrkestreringTest.java" index 5463d632..151a01aa 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Overf\303\270ringOrkestreringTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/Overf\303\270ringOrkestreringTest.java" @@ -14,9 +14,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; @@ -28,22 +25,40 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; +import org.junit.jupiter.api.Test; class OverføringOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @Test void innvilgelse_fedrekvote_overføring_når_bruker_en_tom_for_sine_konto_skal_gå_automatisk() { - //Mødrekvote og fellesperiode brukes opp før øverføring av fedrekvote + // Mødrekvote og fellesperiode brukes opp før øverføring av fedrekvote var fødselsdato = LocalDate.of(2020, 1, 21); - var mødrekvote = oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); - var fellesperiode = oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1)); - var overføring = OppgittPeriode.forOverføring(FEDREKVOTE, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(11), INNLEGGELSE, fødselsdato, - fødselsdato, INNLEGGELSE_ANNEN_FORELDER_GODKJENT); - var kontoer = new Kontoer.Builder().konto(konto(FEDREKVOTE, 10)) - .konto(konto(MØDREKVOTE, 30)) - .konto(konto(FELLESPERIODE, 15)) - .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)); - var grunnlag = basicGrunnlagMor(fødselsdato).kontoer(kontoer).søknad(søknad(FØDSEL, mødrekvote, fellesperiode, overføring)); + var mødrekvote = + oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); + var fellesperiode = + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1)); + var overføring = + OppgittPeriode.forOverføring( + FEDREKVOTE, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(11), + INNLEGGELSE, + fødselsdato, + fødselsdato, + INNLEGGELSE_ANNEN_FORELDER_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto(konto(FEDREKVOTE, 10)) + .konto(konto(MØDREKVOTE, 30)) + .konto(konto(FELLESPERIODE, 15)) + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(FØDSEL, mødrekvote, fellesperiode, overføring)); var resultat = fastsettPerioder(grunnlag); // 1. mk @@ -53,45 +68,88 @@ class OverføringOrkestreringTest extends FastsettePerioderRegelOrkestreringTest assertThat(resultat).hasSize(4); assertThat(resultat.get(2).uttakPeriode().getOverføringÅrsak()).isEqualTo(INNLEGGELSE); assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); - assertThat(resultat.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.OVERFØRING_ANNEN_PART_INNLAGT); + assertThat(resultat.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.OVERFØRING_ANNEN_PART_INNLAGT); assertThat(resultat.get(3).uttakPeriode().getOverføringÅrsak()).isEqualTo(INNLEGGELSE); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(MANUELL_BEHANDLING); - assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(MANUELL_BEHANDLING); + assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); } @Test void innvilgelse_mødrekvote_overføring_når_bruker_en_tom_for_sine_konto_skal_gå_automatisk() { - //Fedrekvote og fellesperiode brukes opp før øverføring av mødrekvote + // Fedrekvote og fellesperiode brukes opp før øverføring av mødrekvote var fødselsdato = LocalDate.of(2020, 1, 21); - var fedrekvote = oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(9), fødselsdato.plusWeeks(11).minusDays(1)); - var overføring = OppgittPeriode.forOverføring(MØDREKVOTE, fødselsdato.plusWeeks(11), fødselsdato.plusWeeks(14), SYKDOM_ELLER_SKADE, - fødselsdato, fødselsdato, SYKDOM_ANNEN_FORELDER_GODKJENT); - var kontoer = new Kontoer.Builder().konto(konto(FEDREKVOTE, 10)) - .konto(konto(MØDREKVOTE, 40)) - .konto(konto(FELLESPERIODE, 15)) - .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)); - var annenPart = new AnnenPart.Builder().uttaksperiode(innvilget(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), MØDREKVOTE)) - .uttaksperiode(innvilget(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(9).minusDays(1), FELLESPERIODE)); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(kontoer).søknad(søknad(FØDSEL, fedrekvote, overføring)).annenPart(annenPart); + var fedrekvote = + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(9), + fødselsdato.plusWeeks(11).minusDays(1)); + var overføring = + OppgittPeriode.forOverføring( + MØDREKVOTE, + fødselsdato.plusWeeks(11), + fødselsdato.plusWeeks(14), + SYKDOM_ELLER_SKADE, + fødselsdato, + fødselsdato, + SYKDOM_ANNEN_FORELDER_GODKJENT); + var kontoer = + new Kontoer.Builder() + .konto(konto(FEDREKVOTE, 10)) + .konto(konto(MØDREKVOTE, 40)) + .konto(konto(FELLESPERIODE, 15)) + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)); + var annenPart = + new AnnenPart.Builder() + .uttaksperiode( + innvilget( + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + MØDREKVOTE)) + .uttaksperiode( + innvilget( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(9).minusDays(1), + FELLESPERIODE)); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(kontoer) + .søknad(søknad(FØDSEL, fedrekvote, overføring)) + .annenPart(annenPart); var resultat = fastsettPerioder(grunnlag); // 1. fk // 2. overføring innvilget // 3. overføring til manuell pga tom dager assertThat(resultat).hasSize(3); - assertThat(resultat.get(1).uttakPeriode().getOverføringÅrsak()).isEqualTo(SYKDOM_ELLER_SKADE); + assertThat(resultat.get(1).uttakPeriode().getOverføringÅrsak()) + .isEqualTo(SYKDOM_ELLER_SKADE); assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.OVERFØRING_ANNEN_PART_SYKDOM_SKADE); + assertThat(resultat.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.OVERFØRING_ANNEN_PART_SYKDOM_SKADE); - assertThat(resultat.get(2).uttakPeriode().getOverføringÅrsak()).isEqualTo(SYKDOM_ELLER_SKADE); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(MANUELL_BEHANDLING); - assertThat(resultat.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(resultat.get(2).uttakPeriode().getOverføringÅrsak()) + .isEqualTo(SYKDOM_ELLER_SKADE); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(MANUELL_BEHANDLING); + assertThat(resultat.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); } - private AnnenpartUttakPeriode innvilget(LocalDate fom, LocalDate tom, Stønadskontotype stønadskontotype) { - var aktivitet = new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), stønadskontotype, - new Trekkdager(Virkedager.beregnAntallVirkedager(new Periode(fom, tom))), Utbetalingsgrad.FULL); - return AnnenpartUttakPeriode.Builder.uttak(fom, tom).innvilget(true).uttakPeriodeAktivitet(aktivitet).build(); + private AnnenpartUttakPeriode innvilget( + LocalDate fom, LocalDate tom, Stønadskontotype stønadskontotype) { + var aktivitet = + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator.forFrilans(), + stønadskontotype, + new Trekkdager(Virkedager.beregnAntallVirkedager(new Periode(fom, tom))), + Utbetalingsgrad.FULL); + return AnnenpartUttakPeriode.Builder.uttak(fom, tom) + .innvilget(true) + .uttakPeriodeAktivitet(aktivitet) + .build(); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelGrunnlagTestBuilder.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelGrunnlagTestBuilder.java index 0f117e40..3d74de58 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelGrunnlagTestBuilder.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelGrunnlagTestBuilder.java @@ -6,7 +6,6 @@ import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype.MØDREKVOTE; import java.time.LocalDate; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -19,26 +18,35 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.RegelGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.RettOgOmsorg; - public class RegelGrunnlagTestBuilder { - public static final AktivitetIdentifikator ARBEIDSFORHOLD_1 = AktivitetIdentifikator.forArbeid(new Orgnummer("000000001"), null); - public static final AktivitetIdentifikator ARBEIDSFORHOLD_2 = AktivitetIdentifikator.forArbeid(new Orgnummer("000000002"), null); - public static final AktivitetIdentifikator ARBEIDSFORHOLD_3 = AktivitetIdentifikator.forArbeid(new Orgnummer("000000003"), null); + public static final AktivitetIdentifikator ARBEIDSFORHOLD_1 = + AktivitetIdentifikator.forArbeid(new Orgnummer("000000001"), null); + public static final AktivitetIdentifikator ARBEIDSFORHOLD_2 = + AktivitetIdentifikator.forArbeid(new Orgnummer("000000002"), null); + public static final AktivitetIdentifikator ARBEIDSFORHOLD_3 = + AktivitetIdentifikator.forArbeid(new Orgnummer("000000003"), null); public static RegelGrunnlag.Builder create() { - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER_FØR_FØDSEL).trekkdager(15)) - .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(75)) - .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(75)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(80)); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER_FØR_FØDSEL).trekkdager(15)) + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(75)) + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(75)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(80)); var arbeidsforhold = new Arbeidsforhold(ARBEIDSFORHOLD_1); - return new RegelGrunnlag.Builder().kontoer(kontoer) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(LocalDate.MIN)) - .behandling(new Behandling.Builder().søkerErMor(true)) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true).farHarRett(true).samtykke(true)) - .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + return new RegelGrunnlag.Builder() + .kontoer(kontoer) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(LocalDate.MIN)) + .behandling(new Behandling.Builder().søkerErMor(true)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().morHarRett(true).farHarRett(true).samtykke(true)) + .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } - } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandlerTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandlerTest.java index a80da790..e941a4a2 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandlerTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RegelResultatBehandlerTest.java @@ -1,15 +1,11 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode; - import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import java.time.LocalDate; import java.util.List; import java.util.Optional; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -24,30 +20,56 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.TomKontoKnekkpunkt; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.UttakOutcome; +import org.junit.jupiter.api.Test; class RegelResultatBehandlerTest { @Test void skal_knekke_på_riktig_datoer_ved_avslag() { - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(1000).type(Stønadskontotype.FELLESPERIODE)); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(1000) + .type(Stønadskontotype.FELLESPERIODE)); var arbeidsforhold = new Arbeidsforhold(AktivitetIdentifikator.annenAktivitet()); var fom = LocalDate.of(2018, 10, 10); var tom = LocalDate.of(2018, 11, 11); - var oppgittPeriode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FELLESPERIODE, fom, tom, null, false, null, null, null, null); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode)) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(false)) - .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) - .kontoer(kontoer) - .build(); + var oppgittPeriode = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FELLESPERIODE, + fom, + tom, + null, + false, + null, + null, + null, + null); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode)) + .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(false)) + .arbeid(new Arbeid.Builder().arbeidsforhold(arbeidsforhold)) + .kontoer(kontoer) + .build(); var knekkpunkt = new TomKontoKnekkpunkt(LocalDate.of(2018, 10, 15)); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(), List.of(), grunnlag, oppgittPeriode.getFom()); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(), List.of(), grunnlag, oppgittPeriode.getFom()); oppgittPeriode.setAktiviteter(Set.of(arbeidsforhold.identifikator())); - var behandler = new RegelResultatBehandler(SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag), grunnlag); + var behandler = + new RegelResultatBehandler( + SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag), grunnlag); - var regelresultat = new FastsettePerioderRegelresultat(null, - UttakOutcome.ikkeOppfylt(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN).medTrekkDagerFraSaldo(true)); - var resultat = behandler.avslåAktuellPeriode(oppgittPeriode, regelresultat, Optional.of(knekkpunkt), false); + var regelresultat = + new FastsettePerioderRegelresultat( + null, + UttakOutcome.ikkeOppfylt(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN) + .medTrekkDagerFraSaldo(true)); + var resultat = + behandler.avslåAktuellPeriode( + oppgittPeriode, regelresultat, Optional.of(knekkpunkt), false); assertThat(resultat.getPeriode().getFom()).isEqualTo(fom); assertThat(resultat.getPeriode().getTom()).isEqualTo(knekkpunkt.dato().minusDays(1)); diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RevurderingTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RevurderingTest.java index f9d49533..c52198e2 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RevurderingTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/RevurderingTest.java @@ -4,9 +4,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; @@ -33,6 +30,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.UtfallType; +import org.junit.jupiter.api.Test; class RevurderingTest { @@ -40,11 +38,24 @@ class RevurderingTest { @Test void revurderingSøknadUtenSamtykkeOgOverlappendePerioderSkalFørTilAvslagPgaSamtykke() { - var oppgittPeriode = uttakPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)); - var grunnlag = basicBuilder(oppgittPeriode).rettOgOmsorg(samtykke(false)) - .annenPart(annenPart(lagPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12), - Utbetalingsgrad.TEN, false).build())) - .build(); + var oppgittPeriode = + uttakPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)); + var grunnlag = + basicBuilder(oppgittPeriode) + .rettOgOmsorg(samtykke(false)) + .annenPart( + annenPart( + lagPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12), + Utbetalingsgrad.TEN, + false) + .build())) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -57,13 +68,27 @@ class RevurderingTest { @Test void berørtBehandlingHvorDenAndrePartenHarInnvilgetUtsettelseSkalInnvilges() { - var oppgittPeriode = uttakPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)); - var grunnlag = basicBuilder(oppgittPeriode).rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true).farHarRett(true).samtykke(true)) - .annenPart(annenPart(AnnenpartUttakPeriode.Builder.utsettelse(FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)) - .innvilget(true) - .build())) - .behandling(berørtBehandling().søkerErMor(true)) - .build(); + var oppgittPeriode = + uttakPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)); + var grunnlag = + basicBuilder(oppgittPeriode) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .morHarRett(true) + .farHarRett(true) + .samtykke(true)) + .annenPart( + annenPart( + AnnenpartUttakPeriode.Builder.utsettelse( + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)) + .innvilget(true) + .build())) + .behandling(berørtBehandling().søkerErMor(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -71,45 +96,111 @@ class RevurderingTest { } @Test - void berørtBehandlingHvorDenAndrePartenHarInnvilgetUtsettelseSkalAvslåsHvisBehandlingKreverSammenhengendeUttak() { - var oppgittPeriode = uttakPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)); - var grunnlag = basicBuilder(oppgittPeriode).rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true).farHarRett(true).samtykke(true)) - .annenPart(annenPart(AnnenpartUttakPeriode.Builder.utsettelse(FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)) - .innvilget(true) - .build())) - .behandling(berørtBehandling().søkerErMor(true).kreverSammenhengendeUttak(true)) - .build(); + void + berørtBehandlingHvorDenAndrePartenHarInnvilgetUtsettelseSkalAvslåsHvisBehandlingKreverSammenhengendeUttak() { + var oppgittPeriode = + uttakPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)); + var grunnlag = + basicBuilder(oppgittPeriode) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .morHarRett(true) + .farHarRett(true) + .samtykke(true)) + .annenPart( + annenPart( + AnnenpartUttakPeriode.Builder.utsettelse( + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)) + .innvilget(true) + .build())) + .behandling( + berørtBehandling().søkerErMor(true).kreverSammenhengendeUttak(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.OPPHOLD_UTSETTELSE); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.OPPHOLD_UTSETTELSE); } @Test - void berørtBehandlingHvorDenAndrePartenHarInnvilgetUtsettelseSkalAvslåsHvisInnenforFørsteSeksUker() { - var oppgittPeriode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FEDREKVOTE, FAMILIEHENDELSE_DATO, FAMILIEHENDELSE_DATO.plusWeeks(2), - SamtidigUttaksprosent.HUNDRED, false, null, null, null, null); - var grunnlag = basicBuilder(oppgittPeriode).rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true).farHarRett(true).samtykke(true)) - .annenPart( - annenPart(AnnenpartUttakPeriode.Builder.utsettelse(FAMILIEHENDELSE_DATO, FAMILIEHENDELSE_DATO.plusWeeks(3)).innvilget(true).build())) - .behandling(berørtBehandling().søkerErMor(false)) - .build(); + void + berørtBehandlingHvorDenAndrePartenHarInnvilgetUtsettelseSkalAvslåsHvisInnenforFørsteSeksUker() { + var oppgittPeriode = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FEDREKVOTE, + FAMILIEHENDELSE_DATO, + FAMILIEHENDELSE_DATO.plusWeeks(2), + SamtidigUttaksprosent.HUNDRED, + false, + null, + null, + null, + null); + var grunnlag = + basicBuilder(oppgittPeriode) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .morHarRett(true) + .farHarRett(true) + .samtykke(true)) + .annenPart( + annenPart( + AnnenpartUttakPeriode.Builder.utsettelse( + FAMILIEHENDELSE_DATO, + FAMILIEHENDELSE_DATO.plusWeeks(3)) + .innvilget(true) + .build())) + .behandling(berørtBehandling().søkerErMor(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.OPPHOLD_UTSETTELSE); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.OPPHOLD_UTSETTELSE); } @Test - void berørtBehandlingHvorDenAndrePartenHarInnvilgetUtsettelseSkalInnvilgesForBalanserteFedreSelvOmInnenforFørsteSeksUker() { - var oppgittPeriode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FEDREKVOTE, FAMILIEHENDELSE_DATO, FAMILIEHENDELSE_DATO.plusWeeks(2), - SamtidigUttaksprosent.HUNDRED, false, null, null, null, null); - var grunnlag = basicBuilder(oppgittPeriode).rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true).farHarRett(true).samtykke(true)) - .annenPart( - annenPart(AnnenpartUttakPeriode.Builder.utsettelse(FAMILIEHENDELSE_DATO, FAMILIEHENDELSE_DATO.plusWeeks(3)).innvilget(true).build())) - .behandling(berørtBehandling().søkerErMor(false)) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FEDREKVOTE).trekkdager(50)).farUttakRundtFødselDager(10)) - .build(); + void + berørtBehandlingHvorDenAndrePartenHarInnvilgetUtsettelseSkalInnvilgesForBalanserteFedreSelvOmInnenforFørsteSeksUker() { + var oppgittPeriode = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FEDREKVOTE, + FAMILIEHENDELSE_DATO, + FAMILIEHENDELSE_DATO.plusWeeks(2), + SamtidigUttaksprosent.HUNDRED, + false, + null, + null, + null, + null); + var grunnlag = + basicBuilder(oppgittPeriode) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .morHarRett(true) + .farHarRett(true) + .samtykke(true)) + .annenPart( + annenPart( + AnnenpartUttakPeriode.Builder.utsettelse( + FAMILIEHENDELSE_DATO, + FAMILIEHENDELSE_DATO.plusWeeks(3)) + .innvilget(true) + .build())) + .behandling(berørtBehandling().søkerErMor(false)) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FEDREKVOTE) + .trekkdager(50)) + .farUttakRundtFødselDager(10)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); @@ -118,122 +209,235 @@ class RevurderingTest { @Test void berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0MenIkkeSamtidigUttakSkalAvslås() { - var oppgittPeriode = uttakPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)); - var grunnlag = basicBuilder(oppgittPeriode).rettOgOmsorg(samtykke(true)) - .annenPart(annenPart(lagPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12), - Utbetalingsgrad.TEN, false).build())) - .behandling(berørtBehandling()) - .build(); + var oppgittPeriode = + uttakPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)); + var grunnlag = + basicBuilder(oppgittPeriode) + .rettOgOmsorg(samtykke(true)) + .annenPart( + annenPart( + lagPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12), + Utbetalingsgrad.TEN, + false) + .build())) + .behandling(berørtBehandling()) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.OPPHOLD_IKKE_SAMTIDIG_UTTAK); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.OPPHOLD_IKKE_SAMTIDIG_UTTAK); } @Test - void berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0MenIkkeSamtidigUttakSkalAvslåsOgKnekkes() { - var oppgittPeriode = uttakPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)); - var grunnlag = basicBuilder(oppgittPeriode).rettOgOmsorg(samtykke(true)) - .annenPart(annenPart(lagPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12), - Utbetalingsgrad.TEN, false).build())) - .behandling(berørtBehandling()) - .build(); + void + berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0MenIkkeSamtidigUttakSkalAvslåsOgKnekkes() { + var oppgittPeriode = + uttakPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)); + var grunnlag = + basicBuilder(oppgittPeriode) + .rettOgOmsorg(samtykke(true)) + .annenPart( + annenPart( + lagPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12), + Utbetalingsgrad.TEN, + false) + .build())) + .behandling(berørtBehandling()) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.OPPHOLD_IKKE_SAMTIDIG_UTTAK); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.OPPHOLD_IKKE_SAMTIDIG_UTTAK); } @Test void berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0OgSamtidigUttakSkalManueltVurderes() { - var oppgittPeriode = uttakPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)); - var grunnlag = basicBuilder(oppgittPeriode).rettOgOmsorg(samtykke(true)) - .annenPart(annenPart(lagPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12), - Utbetalingsgrad.HUNDRED.subtract(Utbetalingsgrad.TEN), true).build())) - .behandling(berørtBehandling()) - .build(); + var oppgittPeriode = + uttakPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)); + var grunnlag = + basicBuilder(oppgittPeriode) + .rettOgOmsorg(samtykke(true)) + .annenPart( + annenPart( + lagPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12), + Utbetalingsgrad.HUNDRED.subtract( + Utbetalingsgrad.TEN), + true) + .build())) + .behandling(berørtBehandling()) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.VURDER_SAMTIDIG_UTTAK); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.VURDER_SAMTIDIG_UTTAK); } @Test - void berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0OgSamtidigUttakSkalAutomatiskReduseres() { - var oppgittPeriode = uttakPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)); - var grunnlag = basicBuilder(oppgittPeriode).rettOgOmsorg(samtykke(true).morHarRett(true).farHarRett(true)) - .annenPart(annenPart(lagPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12), - new Utbetalingsgrad(60), true).build())) - .behandling(berørtBehandling().søkerErMor(true)) - .build(); + void + berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0OgSamtidigUttakSkalAutomatiskReduseres() { + var oppgittPeriode = + uttakPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)); + var grunnlag = + basicBuilder(oppgittPeriode) + .rettOgOmsorg(samtykke(true).morHarRett(true).farHarRett(true)) + .annenPart( + annenPart( + lagPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12), + new Utbetalingsgrad(60), + true) + .build())) + .behandling(berørtBehandling().søkerErMor(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER); assertThat(regelresultat.skalUtbetale()).isTrue(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); } @Test - void berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0OgSamtidigUttakFlerbarnsdagerSkalFlyteVidere() { - var oppgittPeriode = uttakPeriodeFlerbarnsdager(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), - FAMILIEHENDELSE_DATO.plusWeeks(12)); - var grunnlag = basicBuilder(oppgittPeriode, true, true).rettOgOmsorg(samtykke(true).morHarRett(true).farHarRett(true)) - .annenPart(annenPart(lagPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12), - Utbetalingsgrad.TEN, true).build())) - .behandling(berørtBehandling().søkerErMor(true)) - .build(); + void + berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0OgSamtidigUttakFlerbarnsdagerSkalFlyteVidere() { + var oppgittPeriode = + uttakPeriodeFlerbarnsdager( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)); + var grunnlag = + basicBuilder(oppgittPeriode, true, true) + .rettOgOmsorg(samtykke(true).morHarRett(true).farHarRett(true)) + .annenPart( + annenPart( + lagPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12), + Utbetalingsgrad.TEN, + true) + .build())) + .behandling(berørtBehandling().søkerErMor(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER); assertThat(regelresultat.skalUtbetale()).isTrue(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); } @Test - void berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0OgSamtidigUttakFlerbarnsdagerSkalFlyteVidereMKAP() { - var oppgittPeriode = uttakPeriodeFlerbarnsdager(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO, FAMILIEHENDELSE_DATO.plusWeeks(10)); - var grunnlag = basicBuilder(oppgittPeriode, false, true).rettOgOmsorg(samtykke(true).morHarRett(true).farHarRett(true)) - .annenPart(annenPart( - lagPeriode(Stønadskontotype.MØDREKVOTE, FAMILIEHENDELSE_DATO, FAMILIEHENDELSE_DATO.plusWeeks(10), Utbetalingsgrad.TEN, true).build())) - .behandling(berørtBehandling().søkerErMor(false)) - .build(); + void + berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0OgSamtidigUttakFlerbarnsdagerSkalFlyteVidereMKAP() { + var oppgittPeriode = + uttakPeriodeFlerbarnsdager( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO, + FAMILIEHENDELSE_DATO.plusWeeks(10)); + var grunnlag = + basicBuilder(oppgittPeriode, false, true) + .rettOgOmsorg(samtykke(true).morHarRett(true).farHarRett(true)) + .annenPart( + annenPart( + lagPeriode( + Stønadskontotype.MØDREKVOTE, + FAMILIEHENDELSE_DATO, + FAMILIEHENDELSE_DATO.plusWeeks(10), + Utbetalingsgrad.TEN, + true) + .build())) + .behandling(berørtBehandling().søkerErMor(false)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(InnvilgetÅrsak.FELLESPERIODE_ELLER_FORELDREPENGER); assertThat(regelresultat.skalUtbetale()).isTrue(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); } - @Test - void berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0OgSamtidigUttakFlerbarnsdagerSkalFlyteVidereMK() { - var oppgittPeriode = uttakPeriode(Stønadskontotype.MØDREKVOTE, FAMILIEHENDELSE_DATO, FAMILIEHENDELSE_DATO.plusWeeks(6).minusDays(1)); - var grunnlag = basicBuilder(oppgittPeriode, true, true).rettOgOmsorg(samtykke(true).morHarRett(true).farHarRett(true)) - .annenPart(annenPart( - lagPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO, FAMILIEHENDELSE_DATO.plusWeeks(10).minusDays(1), Utbetalingsgrad.TEN, - true).flerbarnsdager(true).build())) - .behandling(berørtBehandling().søkerErMor(true)) - .build(); + void + berørtBehandlingHvorDenAndrePartenHarUtbetalingOver0OgSamtidigUttakFlerbarnsdagerSkalFlyteVidereMK() { + var oppgittPeriode = + uttakPeriode( + Stønadskontotype.MØDREKVOTE, + FAMILIEHENDELSE_DATO, + FAMILIEHENDELSE_DATO.plusWeeks(6).minusDays(1)); + var grunnlag = + basicBuilder(oppgittPeriode, true, true) + .rettOgOmsorg(samtykke(true).morHarRett(true).farHarRett(true)) + .annenPart( + annenPart( + lagPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO, + FAMILIEHENDELSE_DATO + .plusWeeks(10) + .minusDays(1), + Utbetalingsgrad.TEN, + true) + .flerbarnsdager(true) + .build())) + .behandling(berørtBehandling().søkerErMor(true)) + .build(); var regelresultat = kjørRegel(oppgittPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isTrue(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE); assertThat(regelresultat.skalUtbetale()).isTrue(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); } @Test void revurdering_søknad_der_opphørsdato_ligger_i_perioden() { - var uttaksperiode = uttakPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)); - - var grunnlag = basicBuilder(uttaksperiode).medlemskap(new Medlemskap.Builder().opphørsdato(uttaksperiode.getFom().plusWeeks(1))).build(); + var uttaksperiode = + uttakPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)); + + var grunnlag = + basicBuilder(uttaksperiode) + .medlemskap( + new Medlemskap.Builder() + .opphørsdato(uttaksperiode.getFom().plusWeeks(1))) + .build(); var regelresultat = kjørRegel(uttaksperiode, grunnlag); @@ -245,9 +449,18 @@ class RevurderingTest { @Test void revurdering_søknad_der_opphørsdato_ligger_før_perioden() { - var uttaksperiode = uttakPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)); - - var grunnlag = basicBuilder(uttaksperiode).medlemskap(new Medlemskap.Builder().opphørsdato(uttaksperiode.getFom().minusWeeks(1))).build(); + var uttaksperiode = + uttakPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)); + + var grunnlag = + basicBuilder(uttaksperiode) + .medlemskap( + new Medlemskap.Builder() + .opphørsdato(uttaksperiode.getFom().minusWeeks(1))) + .build(); var regelresultat = kjørRegel(uttaksperiode, grunnlag); @@ -259,16 +472,25 @@ class RevurderingTest { @Test void revurdering_søknad_der_opphørsdato_ligger_etter_perioden() { - var uttaksperiode = uttakPeriode(Stønadskontotype.FELLESPERIODE, FAMILIEHENDELSE_DATO.plusWeeks(10), FAMILIEHENDELSE_DATO.plusWeeks(12)); - - var grunnlag = basicBuilder(uttaksperiode).revurdering(new Revurdering.Builder()) - .rettOgOmsorg(samtykke(true)) - .medlemskap(new Medlemskap.Builder().opphørsdato(uttaksperiode.getTom().plusWeeks(1))) - .build(); + var uttaksperiode = + uttakPeriode( + Stønadskontotype.FELLESPERIODE, + FAMILIEHENDELSE_DATO.plusWeeks(10), + FAMILIEHENDELSE_DATO.plusWeeks(12)); + + var grunnlag = + basicBuilder(uttaksperiode) + .revurdering(new Revurdering.Builder()) + .rettOgOmsorg(samtykke(true)) + .medlemskap( + new Medlemskap.Builder() + .opphørsdato(uttaksperiode.getTom().plusWeeks(1))) + .build(); var regelresultat = kjørRegel(uttaksperiode, grunnlag); - assertThat(regelresultat.getAvklaringÅrsak()).isNotEqualTo(IkkeOppfyltÅrsak.SØKER_IKKE_MEDLEM); + assertThat(regelresultat.getAvklaringÅrsak()) + .isNotEqualTo(IkkeOppfyltÅrsak.SØKER_IKKE_MEDLEM); } private Behandling.Builder berørtBehandling() { @@ -283,43 +505,68 @@ private RettOgOmsorg.Builder samtykke(boolean samtykke) { return new RettOgOmsorg.Builder().samtykke(samtykke); } - private AnnenpartUttakPeriode.Builder lagPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - Utbetalingsgrad utbetalingsgrad, - boolean samtidigUttak) { + private AnnenpartUttakPeriode.Builder lagPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + Utbetalingsgrad utbetalingsgrad, + boolean samtidigUttak) { return AnnenpartUttakPeriode.Builder.uttak(fom, tom) - .samtidigUttak(samtidigUttak) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forArbeid(new Orgnummer("000000003"), null), stønadskontotype, - new Trekkdager(Virkedager.beregnAntallVirkedager(fom, tom)), utbetalingsgrad)); + .samtidigUttak(samtidigUttak) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator.forArbeid(new Orgnummer("000000003"), null), + stønadskontotype, + new Trekkdager(Virkedager.beregnAntallVirkedager(fom, tom)), + utbetalingsgrad)); } private RegelGrunnlag.Builder basicBuilder(OppgittPeriode oppgittPeriode) { return basicBuilder(oppgittPeriode, true, false); } - private RegelGrunnlag.Builder basicBuilder(OppgittPeriode oppgittPeriode, boolean erMor, boolean flerbarnskonto) { - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.MØDREKVOTE).trekkdager(50)) - .konto(new Konto.Builder().type(Stønadskontotype.FELLESPERIODE).trekkdager(13 * 5)); + private RegelGrunnlag.Builder basicBuilder( + OppgittPeriode oppgittPeriode, boolean erMor, boolean flerbarnskonto) { + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(Stønadskontotype.MØDREKVOTE).trekkdager(50)) + .konto( + new Konto.Builder() + .type(Stønadskontotype.FELLESPERIODE) + .trekkdager(13 * 5)); if (flerbarnskonto) { kontoer.flerbarnsdager(5 * 13); } return RegelGrunnlagTestBuilder.create() - .behandling(new Behandling.Builder().søkerErMor(erMor)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .datoer(new Datoer.Builder().fødsel(FAMILIEHENDELSE_DATO)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + .behandling(new Behandling.Builder().søkerErMor(erMor)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(oppgittPeriode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold( + new Arbeidsforhold( + RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .datoer(new Datoer.Builder().fødsel(FAMILIEHENDELSE_DATO)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } - private OppgittPeriode uttakPeriode(Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { - return OppgittPeriode.forVanligPeriode(stønadskontotype, fom, tom, null, false, null, null, null, null); + private OppgittPeriode uttakPeriode( + Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { + return OppgittPeriode.forVanligPeriode( + stønadskontotype, fom, tom, null, false, null, null, null, null); } - private OppgittPeriode uttakPeriodeFlerbarnsdager(Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { - return OppgittPeriode.forVanligPeriode(stønadskontotype, fom, tom, null, true, null, null, null, null); + private OppgittPeriode uttakPeriodeFlerbarnsdager( + Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { + return OppgittPeriode.forVanligPeriode( + stønadskontotype, fom, tom, null, true, null, null, null, null); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SaldoUtregningTjenesteTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SaldoUtregningTjenesteTest.java index 741f594d..e5c297b7 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SaldoUtregningTjenesteTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SaldoUtregningTjenesteTest.java @@ -1,6 +1,5 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode; - import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator.annenAktivitet; import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator.forArbeid; import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator.forFrilans; @@ -22,10 +21,6 @@ import java.time.LocalTime; import java.util.ArrayList; import java.util.List; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriodeAktivitet; @@ -46,6 +41,8 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.saldo.SaldoUtregningGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.saldo.SaldoUtregningTjeneste; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; class SaldoUtregningTjenesteTest { @@ -53,18 +50,28 @@ class SaldoUtregningTjenesteTest { void skal_knekke_annenparts_perioder() { var fomAnnenpart = LocalDate.of(2019, 12, 2); var tomAnnenpart = fomAnnenpart.plusWeeks(10).minusDays(1); - var annenpartUttaksperiode = AnnenpartUttakPeriode.Builder.uttak(fomAnnenpart, tomAnnenpart) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(50), Utbetalingsgrad.FULL)) - .build(); + var annenpartUttaksperiode = + AnnenpartUttakPeriode.Builder.uttak(fomAnnenpart, tomAnnenpart) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(50), + Utbetalingsgrad.FULL)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 100)); var aktuellPeriode = oppgittPeriode(FELLESPERIODE, fomAnnenpart.plusWeeks(5), tomAnnenpart); - var grunnlag = new RegelGrunnlag.Builder().annenPart(new AnnenPart.Builder().uttaksperiode(annenpartUttaksperiode)) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) - .behandling(new Behandling.Builder()) - .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) - .build(); + var grunnlag = + new RegelGrunnlag.Builder() + .annenPart(new AnnenPart.Builder().uttaksperiode(annenpartUttaksperiode)) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) + .behandling(new Behandling.Builder()) + .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) + .build(); var saldoUtregningGrunnlag = lagGrunnlag(aktuellPeriode, grunnlag); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); @@ -72,30 +79,52 @@ void skal_knekke_annenparts_perioder() { assertThat(resultat.saldo(FELLESPERIODE)).isEqualTo(75); } - private OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { - return OppgittPeriode.forVanligPeriode(stønadskontotype, fom, tom, null, false, null, null, null, null); + private OppgittPeriode oppgittPeriode( + Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { + return OppgittPeriode.forVanligPeriode( + stønadskontotype, fom, tom, null, false, null, null, null, null); } @Test - void skal_ikke_ta_med_opphold_på_annenpart_hvis_overlapp_med_søkers_periode_og_berørt_behandling() { + void + skal_ikke_ta_med_opphold_på_annenpart_hvis_overlapp_med_søkers_periode_og_berørt_behandling() { var fomAnnenpartOpphold = LocalDate.of(2019, 12, 2); var tomAnnenpartOpphold = fomAnnenpartOpphold.plusWeeks(10).minusDays(1); - var annenpartOpphold = AnnenpartUttakPeriode.Builder.opphold(fomAnnenpartOpphold, tomAnnenpartOpphold, FEDREKVOTE_ANNEN_FORELDER) - .innvilget(true) - .build(); - var annenpartUttaksperiode = AnnenpartUttakPeriode.Builder.uttak(fomAnnenpartOpphold.minusWeeks(1), fomAnnenpartOpphold.minusWeeks(1)) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(50), Utbetalingsgrad.HUNDRED)) - .build(); + var annenpartOpphold = + AnnenpartUttakPeriode.Builder.opphold( + fomAnnenpartOpphold, tomAnnenpartOpphold, FEDREKVOTE_ANNEN_FORELDER) + .innvilget(true) + .build(); + var annenpartUttaksperiode = + AnnenpartUttakPeriode.Builder.uttak( + fomAnnenpartOpphold.minusWeeks(1), + fomAnnenpartOpphold.minusWeeks(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(50), + Utbetalingsgrad.HUNDRED)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FEDREKVOTE, 100)); var aktuellPeriode = oppgittPeriode(FEDREKVOTE, fomAnnenpartOpphold, tomAnnenpartOpphold); - var grunnlag = new RegelGrunnlag.Builder().annenPart( - new AnnenPart.Builder().uttaksperiode(annenpartOpphold).uttaksperiode(annenpartUttaksperiode)) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) - .behandling(new Behandling.Builder().berørtBehandling(true).kreverSammenhengendeUttak(true)) - .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) - .build(); + var grunnlag = + new RegelGrunnlag.Builder() + .annenPart( + new AnnenPart.Builder() + .uttaksperiode(annenpartOpphold) + .uttaksperiode(annenpartUttaksperiode)) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) + .behandling( + new Behandling.Builder() + .berørtBehandling(true) + .kreverSammenhengendeUttak(true)) + .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) + .build(); var saldoUtregningGrunnlag = lagGrunnlag(aktuellPeriode, grunnlag); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); @@ -104,25 +133,46 @@ private OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, Local } @Test - void skal_ta_med_deler_av_opphold_på_annenpart_hvis_overlapp_med_søkers_periode_og_berørt_behandling_tidlig_overlapp() { + void + skal_ta_med_deler_av_opphold_på_annenpart_hvis_overlapp_med_søkers_periode_og_berørt_behandling_tidlig_overlapp() { var fomAnnenpartOpphold = LocalDate.of(2019, 12, 2); var tomAnnenpartOpphold = fomAnnenpartOpphold.plusWeeks(10).minusDays(1); - var annenpartOpphold = AnnenpartUttakPeriode.Builder.opphold(fomAnnenpartOpphold, tomAnnenpartOpphold, FEDREKVOTE_ANNEN_FORELDER) - .innvilget(true) - .build(); - var annenpartUttaksperiode = AnnenpartUttakPeriode.Builder.uttak(fomAnnenpartOpphold.minusWeeks(1), fomAnnenpartOpphold.minusWeeks(1)) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(50), Utbetalingsgrad.HUNDRED)) - .build(); + var annenpartOpphold = + AnnenpartUttakPeriode.Builder.opphold( + fomAnnenpartOpphold, tomAnnenpartOpphold, FEDREKVOTE_ANNEN_FORELDER) + .innvilget(true) + .build(); + var annenpartUttaksperiode = + AnnenpartUttakPeriode.Builder.uttak( + fomAnnenpartOpphold.minusWeeks(1), + fomAnnenpartOpphold.minusWeeks(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(50), + Utbetalingsgrad.HUNDRED)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FEDREKVOTE, 100)); - var aktuellPeriode = oppgittPeriode(FEDREKVOTE, fomAnnenpartOpphold, tomAnnenpartOpphold.minusWeeks(5)); - var grunnlag = new RegelGrunnlag.Builder().annenPart( - new AnnenPart.Builder().uttaksperiode(annenpartOpphold).uttaksperiode(annenpartUttaksperiode)) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) - .behandling(new Behandling.Builder().berørtBehandling(true).kreverSammenhengendeUttak(true)) - .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) - .build(); + var aktuellPeriode = + oppgittPeriode(FEDREKVOTE, fomAnnenpartOpphold, tomAnnenpartOpphold.minusWeeks(5)); + var grunnlag = + new RegelGrunnlag.Builder() + .annenPart( + new AnnenPart.Builder() + .uttaksperiode(annenpartOpphold) + .uttaksperiode(annenpartUttaksperiode)) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) + .behandling( + new Behandling.Builder() + .berørtBehandling(true) + .kreverSammenhengendeUttak(true)) + .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) + .build(); var saldoUtregningGrunnlag = lagGrunnlag(aktuellPeriode, grunnlag); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); @@ -131,25 +181,46 @@ private OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, Local } @Test - void skal_ta_med_deler_av_opphold_på_annenpart_hvis_overlapp_med_søkers_periode_og_berørt_behandling_sen_overlapp() { + void + skal_ta_med_deler_av_opphold_på_annenpart_hvis_overlapp_med_søkers_periode_og_berørt_behandling_sen_overlapp() { var fomAnnenpartOpphold = LocalDate.of(2019, 12, 2); var tomAnnenpartOpphold = fomAnnenpartOpphold.plusWeeks(10).minusDays(1); - var annenpartOpphold = AnnenpartUttakPeriode.Builder.opphold(fomAnnenpartOpphold, tomAnnenpartOpphold, FEDREKVOTE_ANNEN_FORELDER) - .innvilget(true) - .build(); - var annenpartUttaksperiode = AnnenpartUttakPeriode.Builder.uttak(fomAnnenpartOpphold.minusWeeks(1), fomAnnenpartOpphold.minusWeeks(1)) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(50), Utbetalingsgrad.HUNDRED)) - .build(); + var annenpartOpphold = + AnnenpartUttakPeriode.Builder.opphold( + fomAnnenpartOpphold, tomAnnenpartOpphold, FEDREKVOTE_ANNEN_FORELDER) + .innvilget(true) + .build(); + var annenpartUttaksperiode = + AnnenpartUttakPeriode.Builder.uttak( + fomAnnenpartOpphold.minusWeeks(1), + fomAnnenpartOpphold.minusWeeks(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(50), + Utbetalingsgrad.HUNDRED)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FEDREKVOTE, 100)); - var aktuellPeriode = oppgittPeriode(FEDREKVOTE, fomAnnenpartOpphold.plusWeeks(5), tomAnnenpartOpphold); - var grunnlag = new RegelGrunnlag.Builder().annenPart( - new AnnenPart.Builder().uttaksperiode(annenpartOpphold).uttaksperiode(annenpartUttaksperiode)) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) - .behandling(new Behandling.Builder().berørtBehandling(true).kreverSammenhengendeUttak(true)) - .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) - .build(); + var aktuellPeriode = + oppgittPeriode(FEDREKVOTE, fomAnnenpartOpphold.plusWeeks(5), tomAnnenpartOpphold); + var grunnlag = + new RegelGrunnlag.Builder() + .annenPart( + new AnnenPart.Builder() + .uttaksperiode(annenpartOpphold) + .uttaksperiode(annenpartUttaksperiode)) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) + .behandling( + new Behandling.Builder() + .berørtBehandling(true) + .kreverSammenhengendeUttak(true)) + .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) + .build(); var saldoUtregningGrunnlag = lagGrunnlag(aktuellPeriode, grunnlag); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); @@ -158,25 +229,49 @@ private OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, Local } @Test - void skal_ta_med_deler_av_opphold_på_annenpart_hvis_overlapp_med_søkers_periode_og_berørt_behandling_midt_overlapp() { + void + skal_ta_med_deler_av_opphold_på_annenpart_hvis_overlapp_med_søkers_periode_og_berørt_behandling_midt_overlapp() { var fomAnnenpartOpphold = LocalDate.of(2019, 12, 2); var tomAnnenpartOpphold = fomAnnenpartOpphold.plusWeeks(10).minusDays(1); - var annenpartOpphold = AnnenpartUttakPeriode.Builder.opphold(fomAnnenpartOpphold, tomAnnenpartOpphold, FEDREKVOTE_ANNEN_FORELDER) - .innvilget(true) - .build(); - var annenpartUttaksperiode = AnnenpartUttakPeriode.Builder.uttak(fomAnnenpartOpphold.minusWeeks(1), fomAnnenpartOpphold.minusWeeks(1)) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(50), Utbetalingsgrad.HUNDRED)) - .build(); + var annenpartOpphold = + AnnenpartUttakPeriode.Builder.opphold( + fomAnnenpartOpphold, tomAnnenpartOpphold, FEDREKVOTE_ANNEN_FORELDER) + .innvilget(true) + .build(); + var annenpartUttaksperiode = + AnnenpartUttakPeriode.Builder.uttak( + fomAnnenpartOpphold.minusWeeks(1), + fomAnnenpartOpphold.minusWeeks(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(50), + Utbetalingsgrad.HUNDRED)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FEDREKVOTE, 100)); - var aktuellPeriode = oppgittPeriode(FEDREKVOTE, fomAnnenpartOpphold.plusWeeks(2), tomAnnenpartOpphold.minusWeeks(3)); - var grunnlag = new RegelGrunnlag.Builder().annenPart( - new AnnenPart.Builder().uttaksperiode(annenpartOpphold).uttaksperiode(annenpartUttaksperiode)) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) - .behandling(new Behandling.Builder().berørtBehandling(true).kreverSammenhengendeUttak(true)) - .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) - .build(); + var aktuellPeriode = + oppgittPeriode( + FEDREKVOTE, + fomAnnenpartOpphold.plusWeeks(2), + tomAnnenpartOpphold.minusWeeks(3)); + var grunnlag = + new RegelGrunnlag.Builder() + .annenPart( + new AnnenPart.Builder() + .uttaksperiode(annenpartOpphold) + .uttaksperiode(annenpartUttaksperiode)) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) + .behandling( + new Behandling.Builder() + .berørtBehandling(true) + .kreverSammenhengendeUttak(true)) + .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) + .build(); var saldoUtregningGrunnlag = lagGrunnlag(aktuellPeriode, grunnlag); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); @@ -184,31 +279,50 @@ private OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, Local assertThat(resultat.saldo(FEDREKVOTE)).isEqualTo(75); } - private SaldoUtregningGrunnlag lagGrunnlag(OppgittPeriode aktuellPeriode, RegelGrunnlag grunnlag) { + private SaldoUtregningGrunnlag lagGrunnlag( + OppgittPeriode aktuellPeriode, RegelGrunnlag grunnlag) { if (grunnlag.getBehandling().isBerørtBehandling()) { - return SaldoUtregningGrunnlag.forUtregningAvDelerAvUttakBerørtBehandling(List.of(), grunnlag.getAnnenPart().getUttaksperioder(), grunnlag, - aktuellPeriode.getFom(), new ArrayList<>(grunnlag.getSøknad().getOppgittePerioder())); + return SaldoUtregningGrunnlag.forUtregningAvDelerAvUttakBerørtBehandling( + List.of(), + grunnlag.getAnnenPart().getUttaksperioder(), + grunnlag, + aktuellPeriode.getFom(), + new ArrayList<>(grunnlag.getSøknad().getOppgittePerioder())); } - return SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(), grunnlag.getAnnenPart().getUttaksperioder(), grunnlag, - aktuellPeriode.getFom()); + return SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(), + grunnlag.getAnnenPart().getUttaksperioder(), + grunnlag, + aktuellPeriode.getFom()); } @Test void skal_knekke_annenparts_perioder_overlapp_annenpart_starter_en_dag_før() { var fomAnnenpart = LocalDate.of(2019, 12, 3); var tomAnnenpart = fomAnnenpart.plusWeeks(10).minusDays(1); - var annenpartUttaksperiode = AnnenpartUttakPeriode.Builder.uttak(fomAnnenpart, tomAnnenpart) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(50), Utbetalingsgrad.HUNDRED)) - .build(); + var annenpartUttaksperiode = + AnnenpartUttakPeriode.Builder.uttak(fomAnnenpart, tomAnnenpart) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(50), + Utbetalingsgrad.HUNDRED)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 100)); - var aktuellPeriode = oppgittPeriode(FELLESPERIODE, fomAnnenpart.plusDays(1), tomAnnenpart.plusWeeks(10)); - var grunnlag = new RegelGrunnlag.Builder().annenPart(new AnnenPart.Builder().uttaksperiode(annenpartUttaksperiode)) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) - .behandling(new Behandling.Builder()) - .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) - .build(); + var aktuellPeriode = + oppgittPeriode(FELLESPERIODE, fomAnnenpart.plusDays(1), tomAnnenpart.plusWeeks(10)); + var grunnlag = + new RegelGrunnlag.Builder() + .annenPart(new AnnenPart.Builder().uttaksperiode(annenpartUttaksperiode)) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) + .behandling(new Behandling.Builder()) + .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) + .build(); var resultat = SaldoUtregningTjeneste.lagUtregning(lagGrunnlag(aktuellPeriode, grunnlag)); @@ -219,18 +333,29 @@ private SaldoUtregningGrunnlag lagGrunnlag(OppgittPeriode aktuellPeriode, RegelG void skal_ikke_knekke_annenparts_perioder_ved_berørt_behandling() { var fomAnnenpart = LocalDate.of(2019, 12, 3); var tomAnnenpart = fomAnnenpart.plusWeeks(10).minusDays(1); - var annenpartUttaksperiode = AnnenpartUttakPeriode.Builder.uttak(fomAnnenpart, tomAnnenpart) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(70), Utbetalingsgrad.HUNDRED)) - .build(); + var annenpartUttaksperiode = + AnnenpartUttakPeriode.Builder.uttak(fomAnnenpart, tomAnnenpart) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(70), + Utbetalingsgrad.HUNDRED)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 100)); - var aktuellPeriode = oppgittPeriode(FELLESPERIODE, fomAnnenpart.plusWeeks(5).minusDays(1), tomAnnenpart); - var grunnlag = new RegelGrunnlag.Builder().annenPart(new AnnenPart.Builder().uttaksperiode(annenpartUttaksperiode)) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) - .behandling(new Behandling.Builder().berørtBehandling(true)) - .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) - .build(); + var aktuellPeriode = + oppgittPeriode(FELLESPERIODE, fomAnnenpart.plusWeeks(5).minusDays(1), tomAnnenpart); + var grunnlag = + new RegelGrunnlag.Builder() + .annenPart(new AnnenPart.Builder().uttaksperiode(annenpartUttaksperiode)) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(annenAktivitet()))) + .behandling(new Behandling.Builder().berørtBehandling(true)) + .søknad(new Søknad.Builder().oppgittPeriode(aktuellPeriode)) + .build(); var resultat = SaldoUtregningTjeneste.lagUtregning(lagGrunnlag(aktuellPeriode, grunnlag)); @@ -244,154 +369,279 @@ private SaldoUtregningGrunnlag lagGrunnlag(OppgittPeriode aktuellPeriode, RegelG var utregningsdato = LocalDate.of(2019, 12, 5); var identifikator = annenAktivitet(); var identifikatorNyttArbeidsforhold = forFrilans(); - var fastsattPeriode = new FastsattUttakPeriode.Builder().tidsperiode(utregningsdato.minusWeeks(1), utregningsdato.minusDays(1)) - .periodeResultatType(INNVILGET) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(2.5), FELLESPERIODE, identifikator))) - .build(); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(identifikator)) - .arbeidsforhold(new Arbeidsforhold(identifikatorNyttArbeidsforhold))) - .kontoer(kontoer) - .build(); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(fastsattPeriode), List.of(), grunnlag, utregningsdato); + var fastsattPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode(utregningsdato.minusWeeks(1), utregningsdato.minusDays(1)) + .periodeResultatType(INNVILGET) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(2.5), FELLESPERIODE, identifikator))) + .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(identifikator)) + .arbeidsforhold( + new Arbeidsforhold( + identifikatorNyttArbeidsforhold))) + .kontoer(kontoer) + .build(); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(fastsattPeriode), List.of(), grunnlag, utregningsdato); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikator)).isEqualTo(new Trekkdager(97.5)); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold)).isEqualTo(new Trekkdager(97.5)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikator)) + .isEqualTo(new Trekkdager(97.5)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold)) + .isEqualTo(new Trekkdager(97.5)); } @Test void skal_ikke_dobbelt_trekke_fra_annenpart_når_arbeidsforhold_starter_ila_uttaket() { - var kontoer = new Kontoer.Builder().konto(konto(MØDREKVOTE, 100)).konto(konto(FELLESPERIODE, 100)); + var kontoer = + new Kontoer.Builder() + .konto(konto(MØDREKVOTE, 100)) + .konto(konto(FELLESPERIODE, 100)); var utregningsdato = LocalDate.MAX; var identifikator = forArbeid(new Orgnummer("123"), "456"); var identifikatorNyttArbeidsforhold = forArbeid(new Orgnummer("123"), "789"); - var fastsattPeriode = new FastsattUttakPeriode.Builder().tidsperiode(LocalDate.of(2019, 12, 18), LocalDate.of(2019, 12, 19)) - .periodeResultatType(INNVILGET) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(50), FELLESPERIODE, identifikator))) - .build(); - var annenpartsPeriode = AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2019, 12, 11), LocalDate.of(2019, 12, 17)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(forSelvstendigNæringsdrivende(), MØDREKVOTE, new Trekkdager(100), Utbetalingsgrad.HUNDRED)) - .build(); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(identifikator)) - .arbeidsforhold(new Arbeidsforhold(identifikatorNyttArbeidsforhold))) - .kontoer(kontoer) - .build(); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(fastsattPeriode), List.of(annenpartsPeriode), grunnlag, - utregningsdato); + var fastsattPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode(LocalDate.of(2019, 12, 18), LocalDate.of(2019, 12, 19)) + .periodeResultatType(INNVILGET) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(50), FELLESPERIODE, identifikator))) + .build(); + var annenpartsPeriode = + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2019, 12, 11), LocalDate.of(2019, 12, 17)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forSelvstendigNæringsdrivende(), + MØDREKVOTE, + new Trekkdager(100), + Utbetalingsgrad.HUNDRED)) + .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(identifikator)) + .arbeidsforhold( + new Arbeidsforhold( + identifikatorNyttArbeidsforhold))) + .kontoer(kontoer) + .build(); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(fastsattPeriode), + List.of(annenpartsPeriode), + grunnlag, + utregningsdato); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); assertThat(resultat.saldoITrekkdager(MØDREKVOTE, identifikator)).isEqualTo(Trekkdager.ZERO); - assertThat(resultat.saldoITrekkdager(MØDREKVOTE, identifikatorNyttArbeidsforhold)).isEqualTo(Trekkdager.ZERO); + assertThat(resultat.saldoITrekkdager(MØDREKVOTE, identifikatorNyttArbeidsforhold)) + .isEqualTo(Trekkdager.ZERO); } @Test void saldoutregning_flerbarnsdager() { var fødselsdato = LocalDate.of(2022, 3, 28); - var kontoer = new Kontoer.Builder().konto(konto(MØDREKVOTE, 5 * 15)).konto(konto(FELLESPERIODE, (16 + 17) * 5)).flerbarnsdager(17 * 5); + var kontoer = + new Kontoer.Builder() + .konto(konto(MØDREKVOTE, 5 * 15)) + .konto(konto(FELLESPERIODE, (16 + 17) * 5)) + .flerbarnsdager(17 * 5); var utregningsdato = LocalDate.MAX; var identifikator = forArbeid(new Orgnummer("123"), "456"); var identifikatorNyttArbeidsforhold = forArbeid(new Orgnummer("123"), "789"); - var fastsattPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato, fødselsdato.plusDays(5)) - .periodeResultatType(INNVILGET) - .flerbarnsdager(true) - .samtidigUttak(true) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, identifikator))) - .build(); - var annenpartsPeriode = AnnenpartUttakPeriode.Builder.uttak(fødselsdato, fødselsdato.plusDays(5)) - .innvilget(true) - .flerbarnsdager(false) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(forSelvstendigNæringsdrivende(), MØDREKVOTE, new Trekkdager(5), Utbetalingsgrad.HUNDRED)) - .build(); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(identifikator)) - .arbeidsforhold(new Arbeidsforhold(identifikatorNyttArbeidsforhold))) - .kontoer(kontoer) - .build(); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(fastsattPeriode), List.of(annenpartsPeriode), grunnlag, - utregningsdato); + var fastsattPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode(fødselsdato, fødselsdato.plusDays(5)) + .periodeResultatType(INNVILGET) + .flerbarnsdager(true) + .samtidigUttak(true) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), FELLESPERIODE, identifikator))) + .build(); + var annenpartsPeriode = + AnnenpartUttakPeriode.Builder.uttak(fødselsdato, fødselsdato.plusDays(5)) + .innvilget(true) + .flerbarnsdager(false) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forSelvstendigNæringsdrivende(), + MØDREKVOTE, + new Trekkdager(5), + Utbetalingsgrad.HUNDRED)) + .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(identifikator)) + .arbeidsforhold( + new Arbeidsforhold( + identifikatorNyttArbeidsforhold))) + .kontoer(kontoer) + .build(); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(fastsattPeriode), + List.of(annenpartsPeriode), + grunnlag, + utregningsdato); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); - assertThat(resultat.saldoITrekkdager(MØDREKVOTE, identifikator)).isEqualTo(new Trekkdager(14 * 5)); - assertThat(resultat.saldoITrekkdager(MØDREKVOTE, forSelvstendigNæringsdrivende())).isEqualTo(new Trekkdager(14 * 5)); - assertThat(resultat.restSaldoFlerbarnsdager(identifikator)).isEqualTo(new Trekkdager(16 * 5)); - assertThat(resultat.restSaldoFlerbarnsdager(identifikatorNyttArbeidsforhold)).isEqualTo(new Trekkdager(16 * 5)); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikator)).isEqualTo(new Trekkdager(32 * 5)); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold)).isEqualTo(new Trekkdager(32 * 5)); + assertThat(resultat.saldoITrekkdager(MØDREKVOTE, identifikator)) + .isEqualTo(new Trekkdager(14 * 5)); + assertThat(resultat.saldoITrekkdager(MØDREKVOTE, forSelvstendigNæringsdrivende())) + .isEqualTo(new Trekkdager(14 * 5)); + assertThat(resultat.restSaldoFlerbarnsdager(identifikator)) + .isEqualTo(new Trekkdager(16 * 5)); + assertThat(resultat.restSaldoFlerbarnsdager(identifikatorNyttArbeidsforhold)) + .isEqualTo(new Trekkdager(16 * 5)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikator)) + .isEqualTo(new Trekkdager(32 * 5)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold)) + .isEqualTo(new Trekkdager(32 * 5)); } @Test void saldoutregning_flerbarnsdager_begge_fellesperiode() { - var kontoer = new Kontoer.Builder().konto(konto(MØDREKVOTE, 5 * 15)).konto(konto(FELLESPERIODE, (16 + 17) * 5)).flerbarnsdager(17 * 5); + var kontoer = + new Kontoer.Builder() + .konto(konto(MØDREKVOTE, 5 * 15)) + .konto(konto(FELLESPERIODE, (16 + 17) * 5)) + .flerbarnsdager(17 * 5); var fødselsdato = LocalDate.of(2022, 3, 28); var utregningsdato = LocalDate.MAX; var identifikator = forArbeid(new Orgnummer("123"), "456"); var identifikatorNyttArbeidsforhold = forArbeid(new Orgnummer("123"), "789"); - var fastsattPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(10).plusDays(5)) - .periodeResultatType(INNVILGET) - .flerbarnsdager(true) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, identifikator))) - .build(); - var annenpartsPeriode = AnnenpartUttakPeriode.Builder.uttak(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(10).plusDays(5)) - .innvilget(true) - .flerbarnsdager(true) - .samtidigUttak(true) - .uttakPeriodeAktiviteter(List.of( - new AnnenpartUttakPeriodeAktivitet(forSelvstendigNæringsdrivende(), FELLESPERIODE, new Trekkdager(5), Utbetalingsgrad.HUNDRED))) - .build(); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(identifikator)) - .arbeidsforhold(new Arbeidsforhold(identifikatorNyttArbeidsforhold))) - .kontoer(kontoer) - .build(); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(fastsattPeriode), List.of(annenpartsPeriode), grunnlag, - utregningsdato); + var fastsattPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode( + fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(10).plusDays(5)) + .periodeResultatType(INNVILGET) + .flerbarnsdager(true) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), FELLESPERIODE, identifikator))) + .build(); + var annenpartsPeriode = + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(10).plusDays(5)) + .innvilget(true) + .flerbarnsdager(true) + .samtidigUttak(true) + .uttakPeriodeAktiviteter( + List.of( + new AnnenpartUttakPeriodeAktivitet( + forSelvstendigNæringsdrivende(), + FELLESPERIODE, + new Trekkdager(5), + Utbetalingsgrad.HUNDRED))) + .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(identifikator)) + .arbeidsforhold( + new Arbeidsforhold( + identifikatorNyttArbeidsforhold))) + .kontoer(kontoer) + .build(); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(fastsattPeriode), + List.of(annenpartsPeriode), + grunnlag, + utregningsdato); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); - assertThat(resultat.restSaldoFlerbarnsdager(identifikator)).isEqualTo(new Trekkdager(16 * 5)); - assertThat(resultat.restSaldoFlerbarnsdager(identifikatorNyttArbeidsforhold)).isEqualTo(new Trekkdager(16 * 5)); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikator)).isEqualTo(new Trekkdager(31 * 5)); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold)).isEqualTo(new Trekkdager(31 * 5)); + assertThat(resultat.restSaldoFlerbarnsdager(identifikator)) + .isEqualTo(new Trekkdager(16 * 5)); + assertThat(resultat.restSaldoFlerbarnsdager(identifikatorNyttArbeidsforhold)) + .isEqualTo(new Trekkdager(16 * 5)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikator)) + .isEqualTo(new Trekkdager(31 * 5)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold)) + .isEqualTo(new Trekkdager(31 * 5)); } @Test void saldoutregning_flerbarnsdager_begge_fellesperiode_berørt() { - var kontoer = new Kontoer.Builder().konto(konto(MØDREKVOTE, 5 * 15)).konto(konto(FELLESPERIODE, (16 + 17) * 5)).flerbarnsdager(17 * 5); + var kontoer = + new Kontoer.Builder() + .konto(konto(MØDREKVOTE, 5 * 15)) + .konto(konto(FELLESPERIODE, (16 + 17) * 5)) + .flerbarnsdager(17 * 5); var fødselsdato = LocalDate.of(2022, 3, 28); var identifikator = forArbeid(new Orgnummer("123"), "456"); var identifikatorNyttArbeidsforhold = forArbeid(new Orgnummer("123"), "789"); - var fastsattPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(10).plusDays(5)) - .periodeResultatType(INNVILGET) - .flerbarnsdager(true) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, identifikator))) - .build(); - var annenpartsPeriode = AnnenpartUttakPeriode.Builder.uttak(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(10).plusDays(5)) - .innvilget(true) - .flerbarnsdager(true) - .samtidigUttak(true) - .uttakPeriodeAktiviteter(List.of( - new AnnenpartUttakPeriodeAktivitet(forSelvstendigNæringsdrivende(), FELLESPERIODE, new Trekkdager(5), Utbetalingsgrad.HUNDRED))) - .build(); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvHeleUttaket(List.of(fastsattPeriode), true, List.of(annenpartsPeriode), - kontoer.build(), null, null, false); + var fastsattPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode( + fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(10).plusDays(5)) + .periodeResultatType(INNVILGET) + .flerbarnsdager(true) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), FELLESPERIODE, identifikator))) + .build(); + var annenpartsPeriode = + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(10).plusDays(5)) + .innvilget(true) + .flerbarnsdager(true) + .samtidigUttak(true) + .uttakPeriodeAktiviteter( + List.of( + new AnnenpartUttakPeriodeAktivitet( + forSelvstendigNæringsdrivende(), + FELLESPERIODE, + new Trekkdager(5), + Utbetalingsgrad.HUNDRED))) + .build(); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvHeleUttaket( + List.of(fastsattPeriode), + true, + List.of(annenpartsPeriode), + kontoer.build(), + null, + null, + false); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); - assertThat(resultat.restSaldoFlerbarnsdager(identifikator)).isEqualTo(new Trekkdager(16 * 5)); - assertThat(resultat.restSaldoFlerbarnsdager(identifikatorNyttArbeidsforhold)).isEqualTo(new Trekkdager(16 * 5)); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikator)).isEqualTo(new Trekkdager(31 * 5)); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold)).isEqualTo(new Trekkdager(31 * 5)); + assertThat(resultat.restSaldoFlerbarnsdager(identifikator)) + .isEqualTo(new Trekkdager(16 * 5)); + assertThat(resultat.restSaldoFlerbarnsdager(identifikatorNyttArbeidsforhold)) + .isEqualTo(new Trekkdager(16 * 5)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikator)) + .isEqualTo(new Trekkdager(31 * 5)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold)) + .isEqualTo(new Trekkdager(31 * 5)); } @Test @@ -401,132 +651,234 @@ void bfhr_enkel_minsterett_og_litt_msp() { var foreldrepengerTD = new Trekkdager(200); var mspTD = new Trekkdager(50); var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 5 * 40)).minsterettDager(40); + var kontoer = + new Kontoer.Builder().konto(konto(FORELDREPENGER, 5 * 40)).minsterettDager(40); var utregningsdato = LocalDate.MAX; var identifikator = forArbeid(new Orgnummer("123"), "456"); - var avslåttPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(16).minusDays(1)) - .periodeResultatType(AVSLÅTT) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(mspTD, FORELDREPENGER, identifikator))) - .build(); - var innvilgetPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.plusWeeks(16), fødselsdato.plusWeeks(19).minusDays(1)) - .periodeResultatType(INNVILGET) - .resultatÅrsak(ANNET) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(innvilgetMinsterettTD, FORELDREPENGER, identifikator))) - .build(); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(identifikator))) - .kontoer(kontoer) - .build(); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(avslåttPeriode, innvilgetPeriode), List.of(), grunnlag, - utregningsdato); + var avslåttPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode( + fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(16).minusDays(1)) + .periodeResultatType(AVSLÅTT) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + mspTD, FORELDREPENGER, identifikator))) + .build(); + var innvilgetPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode( + fødselsdato.plusWeeks(16), fødselsdato.plusWeeks(19).minusDays(1)) + .periodeResultatType(INNVILGET) + .resultatÅrsak(ANNET) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + innvilgetMinsterettTD, + FORELDREPENGER, + identifikator))) + .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(identifikator))) + .kontoer(kontoer) + .build(); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(avslåttPeriode, innvilgetPeriode), + List.of(), + grunnlag, + utregningsdato); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); - assertThat(resultat.saldoITrekkdager(FORELDREPENGER, identifikator)).isEqualTo( - foreldrepengerTD.subtract(mspTD).subtract(innvilgetMinsterettTD)); - assertThat(resultat.restSaldoMinsterett(identifikator)).isEqualTo(minsterettTD.subtract(innvilgetMinsterettTD)); - assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, false)).isEqualTo( - foreldrepengerTD.subtract(mspTD).subtract(innvilgetMinsterettTD).subtract(minsterettTD).add(innvilgetMinsterettTD)); - assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, true)).isEqualTo( - foreldrepengerTD.subtract(mspTD).subtract(innvilgetMinsterettTD)); + assertThat(resultat.saldoITrekkdager(FORELDREPENGER, identifikator)) + .isEqualTo(foreldrepengerTD.subtract(mspTD).subtract(innvilgetMinsterettTD)); + assertThat(resultat.restSaldoMinsterett(identifikator)) + .isEqualTo(minsterettTD.subtract(innvilgetMinsterettTD)); + assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, false)) + .isEqualTo( + foreldrepengerTD + .subtract(mspTD) + .subtract(innvilgetMinsterettTD) + .subtract(minsterettTD) + .add(innvilgetMinsterettTD)); + assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, true)) + .isEqualTo(foreldrepengerTD.subtract(mspTD).subtract(innvilgetMinsterettTD)); } @Test void bfhr_enkel_minsterett_vs_innvilget_mye_godkjent_aktivitet() { var minsterettTD = new Trekkdager(40); var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 5 * 40)).minsterettDager(40); + var kontoer = + new Kontoer.Builder().konto(konto(FORELDREPENGER, 5 * 40)).minsterettDager(40); var utregningsdato = LocalDate.MAX; var identifikator = forArbeid(new Orgnummer("123"), "456"); - var avslåttPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7).minusDays(1)) - .periodeResultatType(AVSLÅTT) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FORELDREPENGER, identifikator))) - .build(); - var innvilgetPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(45).minusDays(1)) - .periodeResultatType(INNVILGET) - .resultatÅrsak(INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(39 * 5), FORELDREPENGER, identifikator))) - .build(); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(identifikator))) - .kontoer(kontoer) - .build(); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(avslåttPeriode, innvilgetPeriode), List.of(), grunnlag, - utregningsdato); + var avslåttPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode( + fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7).minusDays(1)) + .periodeResultatType(AVSLÅTT) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), FORELDREPENGER, identifikator))) + .build(); + var innvilgetPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode( + fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(45).minusDays(1)) + .periodeResultatType(INNVILGET) + .resultatÅrsak(INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(39 * 5), + FORELDREPENGER, + identifikator))) + .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(identifikator))) + .kontoer(kontoer) + .build(); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(avslåttPeriode, innvilgetPeriode), + List.of(), + grunnlag, + utregningsdato); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); - assertThat(resultat.saldoITrekkdager(FORELDREPENGER, identifikator)).isEqualTo(Trekkdager.ZERO); + assertThat(resultat.saldoITrekkdager(FORELDREPENGER, identifikator)) + .isEqualTo(Trekkdager.ZERO); assertThat(resultat.restSaldoMinsterett(identifikator)).isEqualTo(minsterettTD); - assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, false)).isEqualTo(Trekkdager.ZERO.subtract(minsterettTD)); - assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, true)).isEqualTo(Trekkdager.ZERO); + assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, false)) + .isEqualTo(Trekkdager.ZERO.subtract(minsterettTD)); + assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, true)) + .isEqualTo(Trekkdager.ZERO); } @Test void bfhr_enkel_minsterett_vs_innvilget_med_godkjent_aktivitet_og_minsterett() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 5 * 40)).minsterettDager(40); + var kontoer = + new Kontoer.Builder().konto(konto(FORELDREPENGER, 5 * 40)).minsterettDager(40); var utregningsdato = LocalDate.MAX; var identifikator = forArbeid(new Orgnummer("123"), "456"); - var avslåttPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7).minusDays(1)) - .periodeResultatType(AVSLÅTT) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FORELDREPENGER, identifikator))) - .build(); - var innvilgetPeriode1 = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(11).minusDays(1)) - .periodeResultatType(INNVILGET) - .resultatÅrsak(ANNET) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(4 * 5), FORELDREPENGER, identifikator))) - .build(); - var innvilgetPeriode2 = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.plusWeeks(11), fødselsdato.plusWeeks(45).minusDays(1)) - .periodeResultatType(INNVILGET) - .resultatÅrsak(INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(35 * 5), FORELDREPENGER, identifikator))) - .build(); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(identifikator))) - .kontoer(kontoer) - .build(); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(avslåttPeriode, innvilgetPeriode1, innvilgetPeriode2), - List.of(), grunnlag, utregningsdato); + var avslåttPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode( + fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(7).minusDays(1)) + .periodeResultatType(AVSLÅTT) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), FORELDREPENGER, identifikator))) + .build(); + var innvilgetPeriode1 = + new FastsattUttakPeriode.Builder() + .tidsperiode( + fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(11).minusDays(1)) + .periodeResultatType(INNVILGET) + .resultatÅrsak(ANNET) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(4 * 5), + FORELDREPENGER, + identifikator))) + .build(); + var innvilgetPeriode2 = + new FastsattUttakPeriode.Builder() + .tidsperiode( + fødselsdato.plusWeeks(11), fødselsdato.plusWeeks(45).minusDays(1)) + .periodeResultatType(INNVILGET) + .resultatÅrsak(INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(35 * 5), + FORELDREPENGER, + identifikator))) + .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(identifikator))) + .kontoer(kontoer) + .build(); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(avslåttPeriode, innvilgetPeriode1, innvilgetPeriode2), + List.of(), + grunnlag, + utregningsdato); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); - assertThat(resultat.saldoITrekkdager(FORELDREPENGER, identifikator)).isEqualTo(Trekkdager.ZERO); + assertThat(resultat.saldoITrekkdager(FORELDREPENGER, identifikator)) + .isEqualTo(Trekkdager.ZERO); assertThat(resultat.restSaldoMinsterett(identifikator)).isEqualTo(new Trekkdager(40 - 20)); - assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, false)).isEqualTo(new Trekkdager(20 - 40)); - assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, true)).isEqualTo(Trekkdager.ZERO); + assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, false)) + .isEqualTo(new Trekkdager(20 - 40)); + assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, true)) + .isEqualTo(Trekkdager.ZERO); } @Test void bfhr_enkel_minsterett_vs_innvilget_med_mer_uttak_enn_minsterett() { var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 1, 1)); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER, 5 * 40)).minsterettDager(40); + var kontoer = + new Kontoer.Builder().konto(konto(FORELDREPENGER, 5 * 40)).minsterettDager(40); var utregningsdato = LocalDate.MAX; var identifikator = forArbeid(new Orgnummer("123"), "456"); - var innvilgetPeriode = new FastsattUttakPeriode.Builder().tidsperiode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(16).minusDays(1)) - .periodeResultatType(INNVILGET) - .resultatÅrsak(ANNET) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10 * 5), FORELDREPENGER, identifikator))) - .build(); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(identifikator))) - .kontoer(kontoer) - .build(); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(innvilgetPeriode), List.of(), grunnlag, - utregningsdato); + var innvilgetPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode( + fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(16).minusDays(1)) + .periodeResultatType(INNVILGET) + .resultatÅrsak(ANNET) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10 * 5), + FORELDREPENGER, + identifikator))) + .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(identifikator))) + .kontoer(kontoer) + .build(); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(innvilgetPeriode), List.of(), grunnlag, utregningsdato); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); - assertThat(resultat.saldoITrekkdager(FORELDREPENGER, identifikator)).isEqualTo(new Trekkdager(200 - 50)); + assertThat(resultat.saldoITrekkdager(FORELDREPENGER, identifikator)) + .isEqualTo(new Trekkdager(200 - 50)); assertThat(resultat.restSaldoMinsterett(identifikator)).isEqualTo(new Trekkdager(40 - 50)); - assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, false)).isEqualTo(new Trekkdager(200 - 50)); - assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, true)).isEqualTo(new Trekkdager(200 - 50)); + assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, false)) + .isEqualTo(new Trekkdager(200 - 50)); + assertThat(resultat.nettoSaldoJustertForMinsterett(FORELDREPENGER, identifikator, true)) + .isEqualTo(new Trekkdager(200 - 50)); } @Test @@ -537,36 +889,74 @@ void skal_arve_saldo_flere_ganger() { var identifikator = forArbeid(new Orgnummer("123"), "456"); var identifikatorNyttArbeidsforhold1 = forArbeid(new Orgnummer("123"), "789"); var identifikatorNyttArbeidsforhold2 = forArbeid(new Orgnummer("345"), null); - var fastsattPeriode1 = new FastsattUttakPeriode.Builder().tidsperiode(LocalDate.of(2019, 12, 18), LocalDate.of(2019, 12, 18)) - .periodeResultatType(INNVILGET) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(50), FELLESPERIODE, identifikator))) - .build(); - var fastsattPeriode2 = new FastsattUttakPeriode.Builder().tidsperiode(LocalDate.of(2019, 12, 19), LocalDate.of(2019, 12, 19)) - .periodeResultatType(INNVILGET) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(50), FELLESPERIODE, identifikator), - new FastsattUttakPeriodeAktivitet(new Trekkdager(50), FELLESPERIODE, identifikatorNyttArbeidsforhold1))) - .build(); - var fastsattPeriode3 = new FastsattUttakPeriode.Builder().tidsperiode(LocalDate.of(2019, 12, 20), LocalDate.of(2019, 12, 20)) - .periodeResultatType(INNVILGET) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(50), FELLESPERIODE, identifikator), - new FastsattUttakPeriodeAktivitet(new Trekkdager(50), FELLESPERIODE, identifikatorNyttArbeidsforhold1), - new FastsattUttakPeriodeAktivitet(new Trekkdager(50), FELLESPERIODE, identifikatorNyttArbeidsforhold2))) - .build(); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(identifikator)) - .arbeidsforhold(new Arbeidsforhold(identifikatorNyttArbeidsforhold1)) - .arbeidsforhold(new Arbeidsforhold(identifikatorNyttArbeidsforhold2))) - .kontoer(kontoer) - .build(); - - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(fastsattPeriode1, fastsattPeriode2, fastsattPeriode3), - List.of(), grunnlag, utregningsdato); + var fastsattPeriode1 = + new FastsattUttakPeriode.Builder() + .tidsperiode(LocalDate.of(2019, 12, 18), LocalDate.of(2019, 12, 18)) + .periodeResultatType(INNVILGET) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(50), FELLESPERIODE, identifikator))) + .build(); + var fastsattPeriode2 = + new FastsattUttakPeriode.Builder() + .tidsperiode(LocalDate.of(2019, 12, 19), LocalDate.of(2019, 12, 19)) + .periodeResultatType(INNVILGET) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(50), FELLESPERIODE, identifikator), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(50), + FELLESPERIODE, + identifikatorNyttArbeidsforhold1))) + .build(); + var fastsattPeriode3 = + new FastsattUttakPeriode.Builder() + .tidsperiode(LocalDate.of(2019, 12, 20), LocalDate.of(2019, 12, 20)) + .periodeResultatType(INNVILGET) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(50), FELLESPERIODE, identifikator), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(50), + FELLESPERIODE, + identifikatorNyttArbeidsforhold1), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(50), + FELLESPERIODE, + identifikatorNyttArbeidsforhold2))) + .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(identifikator)) + .arbeidsforhold( + new Arbeidsforhold( + identifikatorNyttArbeidsforhold1)) + .arbeidsforhold( + new Arbeidsforhold( + identifikatorNyttArbeidsforhold2))) + .kontoer(kontoer) + .build(); + + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(fastsattPeriode1, fastsattPeriode2, fastsattPeriode3), + List.of(), + grunnlag, + utregningsdato); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikator)).isEqualTo(new Trekkdager(5)); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold1)).isEqualTo(new Trekkdager(5)); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold2)).isEqualTo(new Trekkdager(5)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikator)) + .isEqualTo(new Trekkdager(5)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold1)) + .isEqualTo(new Trekkdager(5)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, identifikatorNyttArbeidsforhold2)) + .isEqualTo(new Trekkdager(5)); } @Test @@ -574,148 +964,286 @@ void skal_regne_riktig_flerbarnsdager_hvis_annenpart_har_nyoppstartet_arbeidsfor var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 100)).flerbarnsdager(50); var søkersArbeidsforhold = forArbeid(new Orgnummer("123"), "456"); - var fastsattPeriode = new FastsattUttakPeriode.Builder().tidsperiode(LocalDate.of(2019, 12, 18), LocalDate.of(2019, 12, 18)) - .periodeResultatType(INNVILGET) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FELLESPERIODE, søkersArbeidsforhold))) - .build(); + var fastsattPeriode = + new FastsattUttakPeriode.Builder() + .tidsperiode(LocalDate.of(2019, 12, 18), LocalDate.of(2019, 12, 18)) + .periodeResultatType(INNVILGET) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), + FELLESPERIODE, + søkersArbeidsforhold))) + .build(); var annenpartsArbeidsforhold1 = forArbeid(new Orgnummer("123"), "789"); var annenpartsArbeidsforhold2 = forSelvstendigNæringsdrivende(); - var annenpartPeriode1 = AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2019, 12, 17), LocalDate.of(2019, 12, 17)) - .flerbarnsdager(true) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(annenpartsArbeidsforhold1, FELLESPERIODE, new Trekkdager(1), Utbetalingsgrad.HUNDRED)) - .build(); - var annenpartPeriode2 = AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2019, 12, 19), LocalDate.of(2019, 12, 19)) - .flerbarnsdager(false) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(annenpartsArbeidsforhold1, FELLESPERIODE, new Trekkdager(1), Utbetalingsgrad.HUNDRED)) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(annenpartsArbeidsforhold2, FELLESPERIODE, new Trekkdager(1), Utbetalingsgrad.HUNDRED)) - .build(); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvHeleUttaket(List.of(fastsattPeriode), false, - List.of(annenpartPeriode1, annenpartPeriode2), kontoer.build(), null, null, false); + var annenpartPeriode1 = + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2019, 12, 17), LocalDate.of(2019, 12, 17)) + .flerbarnsdager(true) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + annenpartsArbeidsforhold1, + FELLESPERIODE, + new Trekkdager(1), + Utbetalingsgrad.HUNDRED)) + .build(); + var annenpartPeriode2 = + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2019, 12, 19), LocalDate.of(2019, 12, 19)) + .flerbarnsdager(false) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + annenpartsArbeidsforhold1, + FELLESPERIODE, + new Trekkdager(1), + Utbetalingsgrad.HUNDRED)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + annenpartsArbeidsforhold2, + FELLESPERIODE, + new Trekkdager(1), + Utbetalingsgrad.HUNDRED)) + .build(); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvHeleUttaket( + List.of(fastsattPeriode), + false, + List.of(annenpartPeriode1, annenpartPeriode2), + kontoer.build(), + null, + null, + false); var resultat = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); - assertThat(resultat.saldoITrekkdager(FELLESPERIODE, søkersArbeidsforhold)).isEqualTo(new Trekkdager(97)); - assertThat(resultat.restSaldoFlerbarnsdager(søkersArbeidsforhold)).isEqualTo(new Trekkdager(49)); + assertThat(resultat.saldoITrekkdager(FELLESPERIODE, søkersArbeidsforhold)) + .isEqualTo(new Trekkdager(97)); + assertThat(resultat.restSaldoFlerbarnsdager(søkersArbeidsforhold)) + .isEqualTo(new Trekkdager(49)); } - @DisplayName("FAGSYSTEM-204667 Oppholdsperiode hos søker ligger før endringsdato, slik at den ikke knekkes mot annen parts perioder") + @DisplayName( + "FAGSYSTEM-204667 Oppholdsperiode hos søker ligger før endringsdato, slik at den ikke knekkes mot annen parts perioder") @Test void oppholdsperiode_hos_søker_som_ikke_er_knekt() { - var opphold = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .tidsperiode(LocalDate.of(2021, 11, 1), LocalDate.of(2021, 11, 28)) - .build(); - var uttakEtterOpphold = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .tidsperiode(opphold.getTom().plusDays(1), opphold.getTom().plusDays(1)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FELLESPERIODE, forFrilans()))) - .build(); - var annenpartUttaksperiode1 = AnnenpartUttakPeriode.Builder.uttak(opphold.getFom(), opphold.getFom().plusWeeks(1).minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(25), Utbetalingsgrad.FULL)) - .build(); - var annenpartUttaksperiode2 = AnnenpartUttakPeriode.Builder.uttak(annenpartUttaksperiode1.getTom().plusDays(1), - opphold.getTom().minusWeeks(1)) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(25), Utbetalingsgrad.FULL)) - .build(); - var annenpartUttaksperiode3 = AnnenpartUttakPeriode.Builder.uttak(annenpartUttaksperiode2.getTom().plusDays(1), opphold.getTom()) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(25), Utbetalingsgrad.FULL)) - .build(); + var opphold = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .tidsperiode(LocalDate.of(2021, 11, 1), LocalDate.of(2021, 11, 28)) + .build(); + var uttakEtterOpphold = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .tidsperiode(opphold.getTom().plusDays(1), opphold.getTom().plusDays(1)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), FELLESPERIODE, forFrilans()))) + .build(); + var annenpartUttaksperiode1 = + AnnenpartUttakPeriode.Builder.uttak( + opphold.getFom(), opphold.getFom().plusWeeks(1).minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(25), + Utbetalingsgrad.FULL)) + .build(); + var annenpartUttaksperiode2 = + AnnenpartUttakPeriode.Builder.uttak( + annenpartUttaksperiode1.getTom().plusDays(1), + opphold.getTom().minusWeeks(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(25), + Utbetalingsgrad.FULL)) + .build(); + var annenpartUttaksperiode3 = + AnnenpartUttakPeriode.Builder.uttak( + annenpartUttaksperiode2.getTom().plusDays(1), opphold.getTom()) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(25), + Utbetalingsgrad.FULL)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 100)); - var grunnlag = SaldoUtregningGrunnlag.forUtregningAvHeleUttaket(List.of(opphold, uttakEtterOpphold), false, - List.of(annenpartUttaksperiode1, annenpartUttaksperiode2, annenpartUttaksperiode3), kontoer.build(), - LocalDateTime.of(annenpartUttaksperiode1.getFom(), LocalTime.NOON), LocalDateTime.of(opphold.getFom(), LocalTime.NOON), true); + var grunnlag = + SaldoUtregningGrunnlag.forUtregningAvHeleUttaket( + List.of(opphold, uttakEtterOpphold), + false, + List.of( + annenpartUttaksperiode1, + annenpartUttaksperiode2, + annenpartUttaksperiode3), + kontoer.build(), + LocalDateTime.of(annenpartUttaksperiode1.getFom(), LocalTime.NOON), + LocalDateTime.of(opphold.getFom(), LocalTime.NOON), + true); var resultat = SaldoUtregningTjeneste.lagUtregning(grunnlag); - //100 - 25 - 25 - 25 - 1 + // 100 - 25 - 25 - 25 - 1 assertThat(resultat.saldo(FELLESPERIODE)).isEqualTo(24); } @Test void oppholdsperiode_hos_søker_der_annenpart_ikke_har_fylt_hele_perioden() { - var opphold = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .tidsperiode(LocalDate.of(2022, 1, 31), LocalDate.of(2022, 2, 4)) - .build(); - var uttakEtterOpphold = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .tidsperiode(LocalDate.of(2022, 2, 7), LocalDate.of(2022, 2, 7)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FELLESPERIODE, forFrilans()))) - .build(); - var annenpartUttaksperiode = AnnenpartUttakPeriode.Builder.uttak(opphold.getFom(), LocalDate.of(2022, 2, 2)) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(3), Utbetalingsgrad.FULL)) - .build(); + var opphold = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .tidsperiode(LocalDate.of(2022, 1, 31), LocalDate.of(2022, 2, 4)) + .build(); + var uttakEtterOpphold = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .tidsperiode(LocalDate.of(2022, 2, 7), LocalDate.of(2022, 2, 7)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), FELLESPERIODE, forFrilans()))) + .build(); + var annenpartUttaksperiode = + AnnenpartUttakPeriode.Builder.uttak(opphold.getFom(), LocalDate.of(2022, 2, 2)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(3), + Utbetalingsgrad.FULL)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 100)); - var grunnlag = SaldoUtregningGrunnlag.forUtregningAvHeleUttaket(List.of(opphold, uttakEtterOpphold), false, List.of(annenpartUttaksperiode), - kontoer.build(), LocalDateTime.of(annenpartUttaksperiode.getFom(), LocalTime.NOON), LocalDateTime.of(opphold.getFom(), LocalTime.NOON), - true); + var grunnlag = + SaldoUtregningGrunnlag.forUtregningAvHeleUttaket( + List.of(opphold, uttakEtterOpphold), + false, + List.of(annenpartUttaksperiode), + kontoer.build(), + LocalDateTime.of(annenpartUttaksperiode.getFom(), LocalTime.NOON), + LocalDateTime.of(opphold.getFom(), LocalTime.NOON), + true); var resultat = SaldoUtregningTjeneste.lagUtregning(grunnlag); - //100 - 3 - 2 - 1 + // 100 - 3 - 2 - 1 assertThat(resultat.saldo(FELLESPERIODE)).isEqualTo(94); } @Test void oppholdsperiode_hos_søker_der_annenpart_har_hull_i_oppholdsperioden() { - var opphold = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .tidsperiode(LocalDate.of(2022, 1, 31), LocalDate.of(2022, 2, 4)) - .build(); - var uttakEtterOpphold = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .tidsperiode(LocalDate.of(2022, 2, 7), LocalDate.of(2022, 2, 7)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FELLESPERIODE, forFrilans()))) - .build(); - var annenpartUttaksperiode1 = AnnenpartUttakPeriode.Builder.uttak(opphold.getFom(), LocalDate.of(2022, 2, 1)) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(2), Utbetalingsgrad.FULL)) - .build(); - var annenpartUttaksperiode2 = AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2022, 2, 4), LocalDate.of(2022, 2, 4)) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(1), Utbetalingsgrad.FULL)) - .build(); + var opphold = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .tidsperiode(LocalDate.of(2022, 1, 31), LocalDate.of(2022, 2, 4)) + .build(); + var uttakEtterOpphold = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .tidsperiode(LocalDate.of(2022, 2, 7), LocalDate.of(2022, 2, 7)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), FELLESPERIODE, forFrilans()))) + .build(); + var annenpartUttaksperiode1 = + AnnenpartUttakPeriode.Builder.uttak(opphold.getFom(), LocalDate.of(2022, 2, 1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(2), + Utbetalingsgrad.FULL)) + .build(); + var annenpartUttaksperiode2 = + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2022, 2, 4), LocalDate.of(2022, 2, 4)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(1), + Utbetalingsgrad.FULL)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 100)); - var grunnlag = SaldoUtregningGrunnlag.forUtregningAvHeleUttaket(List.of(opphold, uttakEtterOpphold), false, - List.of(annenpartUttaksperiode1, annenpartUttaksperiode2), kontoer.build(), - LocalDateTime.of(annenpartUttaksperiode1.getFom(), LocalTime.NOON), LocalDateTime.of(opphold.getFom(), LocalTime.NOON), true); + var grunnlag = + SaldoUtregningGrunnlag.forUtregningAvHeleUttaket( + List.of(opphold, uttakEtterOpphold), + false, + List.of(annenpartUttaksperiode1, annenpartUttaksperiode2), + kontoer.build(), + LocalDateTime.of(annenpartUttaksperiode1.getFom(), LocalTime.NOON), + LocalDateTime.of(opphold.getFom(), LocalTime.NOON), + true); var resultat = SaldoUtregningTjeneste.lagUtregning(grunnlag); - //100 - 2 - 2 - 1 - 1 + // 100 - 2 - 2 - 1 - 1 assertThat(resultat.saldo(FELLESPERIODE)).isEqualTo(94); } @Test void oppholdsperioder_skal_ikke_telle_dager_ved_fritt_uttak() { - var opphold = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .tidsperiode(LocalDate.of(2022, 11, 4), LocalDate.of(2022, 11, 4)) - .build(); - var uttakEtterOpphold = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .tidsperiode(LocalDate.of(2022, 11, 7), LocalDate.of(2022, 11, 7)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FELLESPERIODE, forFrilans()))) - .build(); - - var annenpartOpphold = AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2022, 11, 8), LocalDate.of(2022, 11, 8)) - .innvilget(true) - .oppholdsårsak(FELLESPERIODE_ANNEN_FORELDER) - .build(); - - var annenpartUttak = AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2022, 11, 9), LocalDate.of(2022, 11, 9)) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(1), Utbetalingsgrad.FULL)) - .build(); + var opphold = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .tidsperiode(LocalDate.of(2022, 11, 4), LocalDate.of(2022, 11, 4)) + .build(); + var uttakEtterOpphold = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .tidsperiode(LocalDate.of(2022, 11, 7), LocalDate.of(2022, 11, 7)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), FELLESPERIODE, forFrilans()))) + .build(); + + var annenpartOpphold = + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2022, 11, 8), LocalDate.of(2022, 11, 8)) + .innvilget(true) + .oppholdsårsak(FELLESPERIODE_ANNEN_FORELDER) + .build(); + + var annenpartUttak = + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2022, 11, 9), LocalDate.of(2022, 11, 9)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(1), + Utbetalingsgrad.FULL)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 100)).build(); - var grunnlag = SaldoUtregningGrunnlag.forUtregningAvHeleUttaket(List.of(opphold, uttakEtterOpphold), false, - List.of(annenpartOpphold, annenpartUttak), kontoer, null, null, false); + var grunnlag = + SaldoUtregningGrunnlag.forUtregningAvHeleUttaket( + List.of(opphold, uttakEtterOpphold), + false, + List.of(annenpartOpphold, annenpartUttak), + kontoer, + null, + null, + false); var resultat = SaldoUtregningTjeneste.lagUtregning(grunnlag); assertThat(resultat.saldo(FELLESPERIODE)).isEqualTo(98); @@ -723,29 +1251,52 @@ void oppholdsperioder_skal_ikke_telle_dager_ved_fritt_uttak() { @Test void oppholdsperioder_skal_telle_dager_ved_sammehengende_uttak() { - var opphold = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .tidsperiode(LocalDate.of(2022, 11, 4), LocalDate.of(2022, 11, 4)) - .build(); - var uttakEtterOpphold = new FastsattUttakPeriode.Builder().periodeResultatType(INNVILGET) - .tidsperiode(LocalDate.of(2022, 11, 7), LocalDate.of(2022, 11, 7)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FELLESPERIODE, forFrilans()))) - .build(); - - var annenpartOpphold = AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2022, 11, 8), LocalDate.of(2022, 11, 8)) - .innvilget(true) - .oppholdsårsak(FELLESPERIODE_ANNEN_FORELDER) - .build(); - - var annenpartUttak = AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2022, 11, 9), LocalDate.of(2022, 11, 9)) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(1), Utbetalingsgrad.FULL)) - .build(); + var opphold = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .tidsperiode(LocalDate.of(2022, 11, 4), LocalDate.of(2022, 11, 4)) + .build(); + var uttakEtterOpphold = + new FastsattUttakPeriode.Builder() + .periodeResultatType(INNVILGET) + .tidsperiode(LocalDate.of(2022, 11, 7), LocalDate.of(2022, 11, 7)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), FELLESPERIODE, forFrilans()))) + .build(); + + var annenpartOpphold = + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2022, 11, 8), LocalDate.of(2022, 11, 8)) + .innvilget(true) + .oppholdsårsak(FELLESPERIODE_ANNEN_FORELDER) + .build(); + + var annenpartUttak = + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2022, 11, 9), LocalDate.of(2022, 11, 9)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(1), + Utbetalingsgrad.FULL)) + .build(); var kontoer = new Kontoer.Builder().konto(konto(FELLESPERIODE, 100)).build(); - var grunnlag = SaldoUtregningGrunnlag.forUtregningAvHeleUttaket(List.of(opphold, uttakEtterOpphold), false, - List.of(annenpartOpphold, annenpartUttak), kontoer, null, null, true); + var grunnlag = + SaldoUtregningGrunnlag.forUtregningAvHeleUttaket( + List.of(opphold, uttakEtterOpphold), + false, + List.of(annenpartOpphold, annenpartUttak), + kontoer, + null, + null, + true); var resultat = SaldoUtregningTjeneste.lagUtregning(grunnlag); assertThat(resultat.saldo(FELLESPERIODE)).isEqualTo(96); diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SjekkGyldigGrunnForTidligOppstartDelRegelTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SjekkGyldigGrunnForTidligOppstartDelRegelTest.java index ecbdcc05..a4009767 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SjekkGyldigGrunnForTidligOppstartDelRegelTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SjekkGyldigGrunnForTidligOppstartDelRegelTest.java @@ -12,9 +12,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Behandling; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Datoer; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.DokumentasjonVurdering; @@ -29,70 +26,121 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UttakPeriode; +import org.junit.jupiter.api.Test; class SjekkGyldigGrunnForTidligOppstartDelRegelTest { - private final FastsettePerioderRegelOrkestrering regelOrkestrering = new FastsettePerioderRegelOrkestrering(); + private final FastsettePerioderRegelOrkestrering regelOrkestrering = + new FastsettePerioderRegelOrkestrering(); @Test void fedrekvote_med_tidlig_oppstart_og_gyldig_grunn_blir_innvilget() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = DelRegelTestUtil.oppgittPeriode(FEDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6), TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT); + var oppgittPeriode = + DelRegelTestUtil.oppgittPeriode( + FEDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6), + TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT); var kontoer = enKonto(FEDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlag(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode)) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(oppgittPeriode)) + .kontoer(kontoer) + .build(); var periodeResultater = regelOrkestrering.fastsettePerioder(grunnlag); assertThat(periodeResultater).hasSize(2); - var perioder = periodeResultater.stream().map(FastsettePeriodeResultat::uttakPeriode).sorted(comparing(UttakPeriode::getFom)).toList(); - assertThat(perioder.stream().map(UttakPeriode::getPerioderesultattype).collect(toList())).containsExactly(INNVILGET, INNVILGET); - assertThat(perioder.stream().map(UttakPeriode::getStønadskontotype).collect(toList())).containsExactly(FEDREKVOTE, FEDREKVOTE); + var perioder = + periodeResultater.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .sorted(comparing(UttakPeriode::getFom)) + .toList(); + assertThat(perioder.stream().map(UttakPeriode::getPerioderesultattype).collect(toList())) + .containsExactly(INNVILGET, INNVILGET); + assertThat(perioder.stream().map(UttakPeriode::getStønadskontotype).collect(toList())) + .containsExactly(FEDREKVOTE, FEDREKVOTE); } @Test void fellesperiode_med_tidlig_oppstart_mor_er_i_aktivitet_blir_innvilget() { var fødselsdato = LocalDate.of(2018, 1, 1); - var oppgittPeriode = DelRegelTestUtil.oppgittPeriode(FELLESPERIODE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), - MORS_AKTIVITET_GODKJENT); + var oppgittPeriode = + DelRegelTestUtil.oppgittPeriode( + FELLESPERIODE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + MORS_AKTIVITET_GODKJENT); var kontoer = enKonto(FELLESPERIODE, 10 * 5); - var grunnlag = basicGrunnlag(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode)) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(oppgittPeriode)) + .kontoer(kontoer) + .build(); var periodeResultater = regelOrkestrering.fastsettePerioder(grunnlag); assertThat(periodeResultater).hasSize(1); - assertThat(periodeResultater.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(INNVILGET); - assertThat(periodeResultater.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FELLESPERIODE); + assertThat(periodeResultater.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(INNVILGET); + assertThat(periodeResultater.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(FELLESPERIODE); } @Test void fellesperiode_med_tidlig_oppstart_og_gyldig_grunn_hele_perioden_blir_innvilget() { var fødselsdato = LocalDate.of(2018, 1, 1); - var uttakPeriode = DelRegelTestUtil.oppgittPeriode(FELLESPERIODE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), - INNLEGGELSE_ANNEN_FORELDER_GODKJENT); + var uttakPeriode = + DelRegelTestUtil.oppgittPeriode( + FELLESPERIODE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + INNLEGGELSE_ANNEN_FORELDER_GODKJENT); var kontoer = enKonto(FELLESPERIODE, 10 * 5); - var grunnlag = basicGrunnlag(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(uttakPeriode)) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(uttakPeriode)) + .kontoer(kontoer) + .build(); var periodeResultater = regelOrkestrering.fastsettePerioder(grunnlag); assertThat(periodeResultater).hasSize(1); - assertThat(periodeResultater.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(periodeResultater.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(Stønadskontotype.FELLESPERIODE); + assertThat(periodeResultater.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(periodeResultater.get(0).uttakPeriode().getStønadskontotype()) + .isEqualTo(Stønadskontotype.FELLESPERIODE); } @Test - void fedrekvote_med_tidlig_oppstart_uten_gyldig_grunn_deler_av_perioden_skal_behandles_manuelt() { + void + fedrekvote_med_tidlig_oppstart_uten_gyldig_grunn_deler_av_perioden_skal_behandles_manuelt() { var fødselsdato = LocalDate.of(2018, 1, 1); - var uttakPeriode = oppgittPeriode(fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(10), null); + var uttakPeriode = + oppgittPeriode(fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(10), null); var kontoer = enKonto(FEDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlag(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(uttakPeriode)) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(uttakPeriode)) + .kontoer(kontoer) + .build(); var periodeResultater = regelOrkestrering.fastsettePerioder(grunnlag); assertThat(periodeResultater).hasSize(2); - var perioder = periodeResultater.stream().map(FastsettePeriodeResultat::uttakPeriode).sorted(comparing(UttakPeriode::getFom)).toList(); + var perioder = + periodeResultater.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .sorted(comparing(UttakPeriode::getFom)) + .toList(); var ugyldigPeriode = perioder.get(0); assertThat(ugyldigPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); @@ -109,83 +157,179 @@ void fedrekvote_med_tidlig_oppstart_uten_gyldig_grunn_deler_av_perioden_skal_beh @Test void fedrekvote_med_tidlig_oppstart_og_vurdert_OK_av_saksbehandler_blir_innvilget_med_knekk() { var fødselsdato = LocalDate.of(2018, 1, 1); - var uttakPeriode = oppgittPeriode(fødselsdato.plusWeeks(2), fødselsdato.plusWeeks(10), TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT); + var uttakPeriode = + oppgittPeriode( + fødselsdato.plusWeeks(2), + fødselsdato.plusWeeks(10), + TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT); var kontoer = enKonto(FEDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlag(fødselsdato).kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(uttakPeriode)) - .build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(uttakPeriode)) + .build(); var periodeResultater = regelOrkestrering.fastsettePerioder(grunnlag); assertThat(periodeResultater).hasSize(2); - var perioder = periodeResultater.stream().map(FastsettePeriodeResultat::uttakPeriode).sorted(comparing(UttakPeriode::getFom)).toList(); - - verifiserPeriode(perioder.get(0), fødselsdato.plusWeeks(2), fødselsdato.plusWeeks(6).minusDays(1), INNVILGET, FEDREKVOTE); - verifiserPeriode(perioder.get(1), fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10), INNVILGET, FEDREKVOTE); + var perioder = + periodeResultater.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .sorted(comparing(UttakPeriode::getFom)) + .toList(); + + verifiserPeriode( + perioder.get(0), + fødselsdato.plusWeeks(2), + fødselsdato.plusWeeks(6).minusDays(1), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + perioder.get(1), + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10), + INNVILGET, + FEDREKVOTE); } @Test void fedrekvote_med_tidlig_oppstart_og_vurdert_OK_av_saksbehandler_blir_innvilget() { var fødselsdato = LocalDate.of(2018, 1, 1); - var uttakPeriode = oppgittPeriode(fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(3).minusDays(1), TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT); + var uttakPeriode = + oppgittPeriode( + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(3).minusDays(1), + TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT); var kontoer = enKonto(FEDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlag(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(uttakPeriode)) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(uttakPeriode)) + .kontoer(kontoer) + .build(); var periodeResultater = regelOrkestrering.fastsettePerioder(grunnlag); assertThat(periodeResultater).hasSize(1); - var perioder = periodeResultater.stream().map(FastsettePeriodeResultat::uttakPeriode).sorted(comparing(UttakPeriode::getFom)).toList(); - - verifiserPeriode(perioder.get(0), fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(3).minusDays(1), INNVILGET, FEDREKVOTE); + var perioder = + periodeResultater.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .sorted(comparing(UttakPeriode::getFom)) + .toList(); + + verifiserPeriode( + perioder.get(0), + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(3).minusDays(1), + INNVILGET, + FEDREKVOTE); } - private OppgittPeriode oppgittPeriode(LocalDate fom, LocalDate tom, DokumentasjonVurdering dokumentasjonVurdering) { - return OppgittPeriode.forVanligPeriode(FEDREKVOTE, fom, tom, null, false, null, null, null, dokumentasjonVurdering); + private OppgittPeriode oppgittPeriode( + LocalDate fom, LocalDate tom, DokumentasjonVurdering dokumentasjonVurdering) { + return OppgittPeriode.forVanligPeriode( + FEDREKVOTE, fom, tom, null, false, null, null, null, dokumentasjonVurdering); } @Test - void fedrekvote_med_tidlig_oppstart_og_vurdert_uavklart_av_saksbehandler_går_til_manuell_behandling() { + void + fedrekvote_med_tidlig_oppstart_og_vurdert_uavklart_av_saksbehandler_går_til_manuell_behandling() { var fødselsdato = LocalDate.of(2018, 1, 1); - var uttakPeriode = oppgittPeriode(fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(3).minusDays(1), null); + var uttakPeriode = + oppgittPeriode( + fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(3).minusDays(1), null); var kontoer = enKonto(FEDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlag(fødselsdato).søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(uttakPeriode)) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(uttakPeriode)) + .kontoer(kontoer) + .build(); var periodeResultater = regelOrkestrering.fastsettePerioder(grunnlag); assertThat(periodeResultater).hasSize(1); - var perioder = periodeResultater.stream().map(FastsettePeriodeResultat::uttakPeriode).sorted(comparing(UttakPeriode::getFom)).toList(); - - verifiserPeriode(perioder.get(0), fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(3).minusDays(1), MANUELL_BEHANDLING, FEDREKVOTE); + var perioder = + periodeResultater.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .sorted(comparing(UttakPeriode::getFom)) + .toList(); + + verifiserPeriode( + perioder.get(0), + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(3).minusDays(1), + MANUELL_BEHANDLING, + FEDREKVOTE); } @Test - void fedrekvote_med_tidlig_oppstart_og_vurdert_OK_av_saksbehandler_blir_innvilget_med_knekk_som_saksbehandler_har_registrert() { + void + fedrekvote_med_tidlig_oppstart_og_vurdert_OK_av_saksbehandler_blir_innvilget_med_knekk_som_saksbehandler_har_registrert() { var fødselsdato = LocalDate.of(2018, 1, 1); - var uttakPeriode1 = oppgittPeriode(fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(3).minusDays(1), TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT); - var uttakPeriode2 = oppgittPeriode(fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(4).minusDays(1), TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT); - var uttakPeriode3 = oppgittPeriode(fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(6).minusDays(1), null); + var uttakPeriode1 = + oppgittPeriode( + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(3).minusDays(1), + TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT); + var uttakPeriode2 = + oppgittPeriode( + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(4).minusDays(1), + TIDLIG_OPPSTART_FEDREKVOTE_GODKJENT); + var uttakPeriode3 = + oppgittPeriode( + fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(6).minusDays(1), null); var kontoer = enKonto(FEDREKVOTE, 10 * 5); - var grunnlag = basicGrunnlag(fødselsdato).søknad( - new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(uttakPeriode1).oppgittPeriode(uttakPeriode2).oppgittPeriode(uttakPeriode3)) - .kontoer(kontoer) - .build(); + var grunnlag = + basicGrunnlag(fødselsdato) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(uttakPeriode1) + .oppgittPeriode(uttakPeriode2) + .oppgittPeriode(uttakPeriode3)) + .kontoer(kontoer) + .build(); var periodeResultater = regelOrkestrering.fastsettePerioder(grunnlag); assertThat(periodeResultater).hasSize(3); - var perioder = periodeResultater.stream().map(FastsettePeriodeResultat::uttakPeriode).sorted(comparing(UttakPeriode::getFom)).toList(); - - verifiserPeriode(perioder.get(0), fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(3).minusDays(1), INNVILGET, FEDREKVOTE); - verifiserPeriode(perioder.get(1), fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(4).minusDays(1), INNVILGET, FEDREKVOTE); - verifiserPeriode(perioder.get(2), fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(6).minusDays(1), MANUELL_BEHANDLING, FEDREKVOTE); + var perioder = + periodeResultater.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .sorted(comparing(UttakPeriode::getFom)) + .toList(); + + verifiserPeriode( + perioder.get(0), + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(3).minusDays(1), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + perioder.get(1), + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(4).minusDays(1), + INNVILGET, + FEDREKVOTE); + verifiserPeriode( + perioder.get(2), + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(6).minusDays(1), + MANUELL_BEHANDLING, + FEDREKVOTE); } - - private void verifiserPeriode(UttakPeriode periode, - LocalDate forventetFom, - LocalDate forventetTom, - Perioderesultattype forventetResultat, - Stønadskontotype stønadskontotype) { + private void verifiserPeriode( + UttakPeriode periode, + LocalDate forventetFom, + LocalDate forventetTom, + Perioderesultattype forventetResultat, + Stønadskontotype stønadskontotype) { assertThat(periode.getFom()).isEqualTo(forventetFom); assertThat(periode.getTom()).isEqualTo(forventetTom); assertThat(periode.getPerioderesultattype()).isEqualTo(forventetResultat); @@ -194,14 +338,20 @@ private void verifiserPeriode(UttakPeriode periode, private RegelGrunnlag.Builder basicGrunnlag(LocalDate fødselsdato) { return RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true)) - .behandling(new Behandling.Builder().søkerErMor(false)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true)) + .behandling(new Behandling.Builder().søkerErMor(false)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } private Kontoer.Builder enKonto(Stønadskontotype stønadskontotype, int trekkdager) { - return new Kontoer.Builder().konto(new Konto.Builder().type(stønadskontotype).trekkdager(trekkdager)); + return new Kontoer.Builder() + .konto(new Konto.Builder().type(stønadskontotype).trekkdager(trekkdager)); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SporingOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SporingOrkestreringTest.java index 291cb98b..4f431ac2 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SporingOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/SporingOrkestreringTest.java @@ -4,33 +4,49 @@ import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype.MØDREKVOTE; import static org.assertj.core.api.Assertions.assertThat; -import java.time.LocalDate; -import java.util.HashMap; - -import org.junit.jupiter.api.Test; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; - +import java.time.LocalDate; +import java.util.HashMap; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.RettOgOmsorg; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; +import org.junit.jupiter.api.Test; class SporingOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @Test - void fastsette_perioder_regel_skal_produsere_sporing_i_json_format() throws JsonProcessingException { + void fastsette_perioder_regel_skal_produsere_sporing_i_json_format() + throws JsonProcessingException { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagMor(fødselsdato).rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) - .søknad(søknad(Søknadstype.FØDSEL, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1)))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) + .søknad( + søknad( + Søknadstype.FØDSEL, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1)))); var resultatListe = fastsettPerioder(grunnlag); assertThat(resultatListe).hasSize(3); for (var resultat : resultatListe) { - assertThat(new ObjectMapper().readValue(resultat.innsendtGrunnlag(), HashMap.class)).isNotNull().isNotEmpty(); - assertThat(new ObjectMapper().readValue(resultat.evalueringResultat(), HashMap.class)).isNotNull().isNotEmpty(); + assertThat(new ObjectMapper().readValue(resultat.innsendtGrunnlag(), HashMap.class)) + .isNotNull() + .isNotEmpty(); + assertThat(new ObjectMapper().readValue(resultat.evalueringResultat(), HashMap.class)) + .isNotNull() + .isNotEmpty(); } } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/StebarnsadopsjonDelRegelTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/StebarnsadopsjonDelRegelTest.java index 4fe8948c..e0d7b92f 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/StebarnsadopsjonDelRegelTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/StebarnsadopsjonDelRegelTest.java @@ -10,9 +10,6 @@ import java.time.LocalDate; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Adopsjon; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -29,26 +26,37 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; class StebarnsadopsjonDelRegelTest { @Test void UT1240_stebarnsadopsjon_far_ikke_omsorg() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var uttakPeriode = oppgittPeriode(omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2)); - - var grunnlag = grunnlagFar(omsorgsovertakelseDato, uttakPeriode).rettOgOmsorg( - new RettOgOmsorg.Builder().samtykke(true).morHarRett(true).farHarRett(true).harOmsorg(false)) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON).oppgittPeriode(uttakPeriode)) - .build(); + var uttakPeriode = + oppgittPeriode(omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2)); + + var grunnlag = + grunnlagFar(omsorgsovertakelseDato, uttakPeriode) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .samtykke(true) + .morHarRett(true) + .farHarRett(true) + .harOmsorg(false)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode(uttakPeriode)) + .build(); var regelresultat = kjørRegel(uttakPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); assertThat(regelresultat.skalUtbetale()).isFalse(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.FAR_HAR_IKKE_OMSORG); assertThat(regelresultat.getManuellbehandlingårsak()).isNull(); - } private OppgittPeriode oppgittPeriode(LocalDate fom, LocalDate tom) { @@ -58,11 +66,10 @@ private OppgittPeriode oppgittPeriode(LocalDate fom, LocalDate tom) { @Test void UT1241_stebarnsadopsjon_far_omsorg_disponible_dager_og_ingen_gradering() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var uttakPeriode = oppgittPeriode(omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2)); - - var grunnlag = grunnlagFar(omsorgsovertakelseDato, uttakPeriode) + var uttakPeriode = + oppgittPeriode(omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2)); - .build(); + var grunnlag = grunnlagFar(omsorgsovertakelseDato, uttakPeriode).build(); var regelresultat = kjørRegel(uttakPeriode, grunnlag); @@ -70,14 +77,19 @@ void UT1241_stebarnsadopsjon_far_omsorg_disponible_dager_og_ingen_gradering() { assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getAvklaringÅrsak()).isNull(); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.STEBARNSADOPSJON); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.STEBARNSADOPSJON); } @Test void UT1242_stebarnsadopsjon_far_omsorg_disponible_dager_gradering_og_avklart_periode() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var uttakPeriode = gradertPeriode(Stønadskontotype.FEDREKVOTE, omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2), - Set.of(ARBEIDSFORHOLD_1)); + var uttakPeriode = + gradertPeriode( + Stønadskontotype.FEDREKVOTE, + omsorgsovertakelseDato, + omsorgsovertakelseDato.plusWeeks(2), + Set.of(ARBEIDSFORHOLD_1)); var grunnlag = grunnlagFar(omsorgsovertakelseDato, uttakPeriode).build(); @@ -87,61 +99,93 @@ void UT1242_stebarnsadopsjon_far_omsorg_disponible_dager_gradering_og_avklart_pe assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); assertThat(regelresultat.skalUtbetale()).isFalse(); assertThat(regelresultat.getAvklaringÅrsak()).isNull(); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.STEBARNSADOPSJON); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.STEBARNSADOPSJON); } @Test void UT1244_stebarnsadopsjon_far_omsorg_ikke_disponible_stønadsdager() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var uttakPeriode = oppgittPeriode(omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2)); - - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) - .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(0)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(130)); - var grunnlag = grunnlagFar(omsorgsovertakelseDato, uttakPeriode).arbeid( - new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))).kontoer(kontoer).build(); + var uttakPeriode = + oppgittPeriode(omsorgsovertakelseDato, omsorgsovertakelseDato.plusWeeks(2)); + + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(0)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(130)); + var grunnlag = + grunnlagFar(omsorgsovertakelseDato, uttakPeriode) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(uttakPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isTrue(); assertThat(regelresultat.skalUtbetale()).isFalse(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); - assertThat(regelresultat.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(regelresultat.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); } @Test void UT1285_stebarnsadopsjon_uttak_før_omsorgsovertakelse() { var omsorgsovertakelseDato = LocalDate.of(2019, 1, 8); - var uttakPeriode = oppgittPeriode(omsorgsovertakelseDato.minusDays(3), omsorgsovertakelseDato.plusWeeks(2)); - - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) - .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(0)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(130)); - var grunnlag = grunnlagFar(omsorgsovertakelseDato, uttakPeriode).arbeid( - new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))).kontoer(kontoer).build(); + var uttakPeriode = + oppgittPeriode( + omsorgsovertakelseDato.minusDays(3), omsorgsovertakelseDato.plusWeeks(2)); + + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(0)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(130)); + var grunnlag = + grunnlagFar(omsorgsovertakelseDato, uttakPeriode) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .build(); var regelresultat = kjørRegel(uttakPeriode, grunnlag); assertThat(regelresultat.oppfylt()).isFalse(); assertThat(regelresultat.trekkDagerFraSaldo()).isFalse(); assertThat(regelresultat.skalUtbetale()).isFalse(); - assertThat(regelresultat.getAvklaringÅrsak()).isEqualTo(IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); + assertThat(regelresultat.getAvklaringÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.FØR_OMSORGSOVERTAKELSE); } - private RegelGrunnlag.Builder grunnlagFar(LocalDate familiehendelseDato, OppgittPeriode oppgittPeriode) { - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) - .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(50)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(130)); + private RegelGrunnlag.Builder grunnlagFar( + LocalDate familiehendelseDato, OppgittPeriode oppgittPeriode) { + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(50)) + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(50)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(130)); return RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON).oppgittPeriode(oppgittPeriode)) - .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelseDato)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .kontoer(kontoer) - .behandling(new Behandling.Builder().søkerErMor(false)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true).samtykke(true)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null).stebarnsadopsjon(true)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode(oppgittPeriode)) + .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelseDato)) + .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .kontoer(kontoer) + .behandling(new Behandling.Builder().søkerErMor(false)) + .rettOgOmsorg( + new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true).samtykke(true)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null).stebarnsadopsjon(true)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/S\303\270knadMottattDatoRegelTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/S\303\270knadMottattDatoRegelTest.java" index 259b7d5d..4bde9a43 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/S\303\270knadMottattDatoRegelTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/S\303\270knadMottattDatoRegelTest.java" @@ -6,9 +6,6 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -25,6 +22,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UtsettelseÅrsak; +import org.junit.jupiter.api.Test; class SøknadMottattDatoRegelTest { @@ -33,7 +31,8 @@ class SøknadMottattDatoRegelTest { @Test void mottattDatoFørSluttAvGraderingBlirInnvilget() { var mottattDato = FAMILIEHENDELSE_DATO.plusWeeks(7); - var søknadsperiode = gradertoppgittPeriode(mottattDato.minusWeeks(1), mottattDato, mottattDato); + var søknadsperiode = + gradertoppgittPeriode(mottattDato.minusWeeks(1), mottattDato, mottattDato); var grunnlag = basicBuilder().søknad(søknad(søknadsperiode)).build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -46,7 +45,9 @@ class SøknadMottattDatoRegelTest { @Test void mottattDatoFørSluttAvFerieBlirInnvilget() { var mottattDato = FAMILIEHENDELSE_DATO.plusWeeks(7); - var søknadsperiode = utsettelsePeriode(mottattDato.minusWeeks(1), mottattDato, UtsettelseÅrsak.FERIE, mottattDato); + var søknadsperiode = + utsettelsePeriode( + mottattDato.minusWeeks(1), mottattDato, UtsettelseÅrsak.FERIE, mottattDato); var grunnlag = basicBuilder().søknad(søknad(søknadsperiode)).build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -59,7 +60,12 @@ class SøknadMottattDatoRegelTest { @Test void mottattDatoEtterSluttAvFerieBlirInnvilget() { var mottattDato = FAMILIEHENDELSE_DATO.plusWeeks(7); - var søknadsperiode = utsettelsePeriode(mottattDato.plusDays(1), mottattDato.plusWeeks(1), UtsettelseÅrsak.FERIE, mottattDato); + var søknadsperiode = + utsettelsePeriode( + mottattDato.plusDays(1), + mottattDato.plusWeeks(1), + UtsettelseÅrsak.FERIE, + mottattDato); var grunnlag = basicBuilder().søknad(søknad(søknadsperiode)).build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -72,7 +78,12 @@ void mottattDatoEtterSluttAvFerieBlirInnvilget() { @Test void mottattDatoFørSluttAvArbeidBlirInnvilget() { var mottattDato = FAMILIEHENDELSE_DATO.plusWeeks(7); - var søknadsperiode = utsettelsePeriode(mottattDato.minusWeeks(1), mottattDato, UtsettelseÅrsak.ARBEID, mottattDato); + var søknadsperiode = + utsettelsePeriode( + mottattDato.minusWeeks(1), + mottattDato, + UtsettelseÅrsak.ARBEID, + mottattDato); var grunnlag = basicBuilder().søknad(søknad(søknadsperiode)).build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -85,7 +96,12 @@ void mottattDatoEtterSluttAvFerieBlirInnvilget() { @Test void mottattDatoEtterSluttAvArbeidBlirInnvilget() { var mottattDato = FAMILIEHENDELSE_DATO.plusWeeks(7); - var søknadsperiode = utsettelsePeriode(mottattDato.plusDays(1), mottattDato.plusWeeks(1), UtsettelseÅrsak.ARBEID, mottattDato); + var søknadsperiode = + utsettelsePeriode( + mottattDato.plusDays(1), + mottattDato.plusWeeks(1), + UtsettelseÅrsak.ARBEID, + mottattDato); var grunnlag = basicBuilder().søknad(søknad(søknadsperiode)).build(); var regelresultat = kjørRegel(søknadsperiode, grunnlag); @@ -99,25 +115,46 @@ void mottattDatoEtterSluttAvArbeidBlirInnvilget() { return new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(søknadsperiode); } - private OppgittPeriode utsettelsePeriode(LocalDate fom, LocalDate tom, UtsettelseÅrsak utsettelseÅrsak, LocalDate mottattDato) { - return OppgittPeriode.forUtsettelse(fom, tom, utsettelseÅrsak, mottattDato, mottattDato, null, null); + private OppgittPeriode utsettelsePeriode( + LocalDate fom, LocalDate tom, UtsettelseÅrsak utsettelseÅrsak, LocalDate mottattDato) { + return OppgittPeriode.forUtsettelse( + fom, tom, utsettelseÅrsak, mottattDato, mottattDato, null, null); } private RegelGrunnlag.Builder basicBuilder() { var aktivitetIdentifikator = AktivitetIdentifikator.forArbeid(new Orgnummer("123"), null); var konto = new Konto.Builder().type(Stønadskontotype.MØDREKVOTE).trekkdager(50); var kontoer = new Kontoer.Builder().konto(konto); - return new RegelGrunnlag.Builder().kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) - .datoer(new Datoer.Builder().fødsel(FAMILIEHENDELSE_DATO)) - .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) - .behandling(new Behandling.Builder().søkerErMor(true).kreverSammenhengendeUttak(true)) - .inngangsvilkår( - new Inngangsvilkår.Builder().adopsjonOppfylt(true).foreldreansvarnOppfylt(true).fødselOppfylt(true).opptjeningOppfylt(true)); + return new RegelGrunnlag.Builder() + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) + .datoer(new Datoer.Builder().fødsel(FAMILIEHENDELSE_DATO)) + .rettOgOmsorg(new RettOgOmsorg.Builder().samtykke(true)) + .behandling( + new Behandling.Builder().søkerErMor(true).kreverSammenhengendeUttak(true)) + .inngangsvilkår( + new Inngangsvilkår.Builder() + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .fødselOppfylt(true) + .opptjeningOppfylt(true)); } - private OppgittPeriode gradertoppgittPeriode(LocalDate fom, LocalDate tom, LocalDate mottattDato) { - return OppgittPeriode.forGradering(Stønadskontotype.MØDREKVOTE, fom, tom, BigDecimal.TEN, null, false, - Set.of(AktivitetIdentifikator.forSelvstendigNæringsdrivende()), mottattDato, mottattDato, null, null); + private OppgittPeriode gradertoppgittPeriode( + LocalDate fom, LocalDate tom, LocalDate mottattDato) { + return OppgittPeriode.forGradering( + Stønadskontotype.MØDREKVOTE, + fom, + tom, + BigDecimal.TEN, + null, + false, + Set.of(AktivitetIdentifikator.forSelvstendigNæringsdrivende()), + mottattDato, + mottattDato, + null, + null); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TapendeSakOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TapendeSakOrkestreringTest.java index af2d8b70..6818966a 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TapendeSakOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TapendeSakOrkestreringTest.java @@ -10,9 +10,6 @@ import java.time.LocalDate; import java.time.LocalTime; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; @@ -27,73 +24,164 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UttakPeriode; +import org.junit.jupiter.api.Test; class TapendeSakOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { - private static final AktivitetIdentifikator MOR_ARBEIDSFORHOLD = RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1; + private static final AktivitetIdentifikator MOR_ARBEIDSFORHOLD = + RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1; private final LocalDate fødselsdato = LocalDate.of(2018, 1, 1); @Test - void skal_sette_0_trekkdager_når_perioden_avslås_men_annen_forelder_har_innvilget_samme_tidsrom() { + void + skal_sette_0_trekkdager_når_perioden_avslås_men_annen_forelder_har_innvilget_samme_tidsrom() { /* - Far søker fedrekvote samtidig som mor tar fellesperiode. Far har ikke omsorg i denne perioden og skal få avslag og egentlig trukket dager. - Skal ikke trekke dager siden mor har innvilget i samme tidsrom - */ - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), MOR_ARBEIDSFORHOLD, true)) - .uttaksperiode(annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(15).minusDays(1), MOR_ARBEIDSFORHOLD, true)) - .uttaksperiode(annenpartsPeriode(FELLESPERIODE, fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(16), MOR_ARBEIDSFORHOLD, true))) - .behandling(farBehandling()) - .rettOgOmsorg(beggeRett().harOmsorg(false)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(16)))); + Far søker fedrekvote samtidig som mor tar fellesperiode. Far har ikke omsorg i denne perioden og skal få avslag og egentlig trukket dager. + Skal ikke trekke dager siden mor har innvilget i samme tidsrom + */ + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + MOR_ARBEIDSFORHOLD, + true)) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(15).minusDays(1), + MOR_ARBEIDSFORHOLD, + true)) + .uttaksperiode( + annenpartsPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(16), + MOR_ARBEIDSFORHOLD, + true))) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett().harOmsorg(false)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(16)))); var resultat = fastsettPerioder(grunnlag); var resultatPeriode = resultat.get(0).uttakPeriode(); assertThat(resultatPeriode.getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(resultatPeriode.getUtbetalingsgrad(RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(resultatPeriode.getTrekkdager(RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1).decimalValue()).isZero(); + assertThat(resultatPeriode.getUtbetalingsgrad(RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat( + resultatPeriode + .getTrekkdager(RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1) + .decimalValue()) + .isZero(); } @Test - void skal_ikke_sette_0_trekkdager_når_perioden_avslås_men_annen_forelder_har_avslått_samme_tidsrom() { - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), MOR_ARBEIDSFORHOLD, true)) - .uttaksperiode(annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(15).minusDays(1), MOR_ARBEIDSFORHOLD, true)) - .uttaksperiode(annenpartsPeriode(FELLESPERIODE, fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(16), MOR_ARBEIDSFORHOLD, false))) - .behandling(farBehandling()) - .rettOgOmsorg(beggeRett().harOmsorg(false)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(16)))); + void + skal_ikke_sette_0_trekkdager_når_perioden_avslås_men_annen_forelder_har_avslått_samme_tidsrom() { + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + MOR_ARBEIDSFORHOLD, + true)) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(15).minusDays(1), + MOR_ARBEIDSFORHOLD, + true)) + .uttaksperiode( + annenpartsPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(16), + MOR_ARBEIDSFORHOLD, + false))) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett().harOmsorg(false)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(16)))); var resultat = fastsettPerioder(grunnlag); var resultatPeriode = resultat.get(0).uttakPeriode(); assertThat(resultatPeriode.getPerioderesultattype()).isEqualTo(AVSLÅTT); - assertThat(resultatPeriode.getUtbetalingsgrad(RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(resultatPeriode.getTrekkdager(RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1).decimalValue()).isNotZero(); + assertThat(resultatPeriode.getUtbetalingsgrad(RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat( + resultatPeriode + .getTrekkdager(RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1) + .decimalValue()) + .isNotZero(); } @Test void skal_ikke_tape_hvis_søknad_mottatt_i_etterkant() { - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(10))) - .uttaksperiode(annenpartsPeriode(MØDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(10)))) - .behandling(farBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forVanligPeriode(FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), null, false, - fødselsdato.plusWeeks(13), fødselsdato.plusWeeks(13), null, null))); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(10))) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(10)))) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + null, + false, + fødselsdato.plusWeeks(13), + fødselsdato.plusWeeks(13), + null, + null))); var resultat = fastsettPerioder(grunnlag); @@ -103,18 +191,43 @@ class TapendeSakOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB @Test void skal_tape_hvis_søknad_mottatt_i_forkant() { - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(14))) - .uttaksperiode(annenpartsPeriode(MØDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(14)))) - .behandling(farBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forVanligPeriode(FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), null, false, - fødselsdato.plusWeeks(13), fødselsdato.plusWeeks(13), null, null))); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(14))) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(14)))) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + null, + false, + fødselsdato.plusWeeks(13), + fødselsdato.plusWeeks(13), + null, + null))); var resultat = fastsettPerioder(grunnlag); @@ -124,21 +237,52 @@ class TapendeSakOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB @Test void skal_tape_hvis_mor_søker_etter_far_samme_dag() { - //Søkt samme dag, men mor har søkt etter far - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(13))) - .uttaksperiode(annenpartsPeriode(MØDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(13))) - .sisteSøknadMottattTidspunkt(fødselsdato.plusWeeks(13).atTime(LocalTime.of(12, 12, 12)))) - .behandling(farBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forVanligPeriode(FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), null, false, - fødselsdato.plusWeeks(13), fødselsdato.plusWeeks(13), null, null)) - .mottattTidspunkt(fødselsdato.plusWeeks(13).atTime(LocalTime.of(10, 10, 10)))); + // Søkt samme dag, men mor har søkt etter far + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(13))) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(13))) + .sisteSøknadMottattTidspunkt( + fødselsdato + .plusWeeks(13) + .atTime(LocalTime.of(12, 12, 12)))) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + null, + false, + fødselsdato.plusWeeks(13), + fødselsdato.plusWeeks(13), + null, + null)) + .mottattTidspunkt( + fødselsdato + .plusWeeks(13) + .atTime(LocalTime.of(10, 10, 10)))); var resultat = fastsettPerioder(grunnlag); @@ -148,21 +292,52 @@ class TapendeSakOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB @Test void skal_ikke_tape_hvis_mor_søker_før_far_samme_dag() { - //Søkt samme dag, men mor har søkt etter far - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(13))) - .uttaksperiode(annenpartsPeriode(MØDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(13))) - .sisteSøknadMottattTidspunkt(fødselsdato.plusWeeks(13).atTime(LocalTime.of(10, 10, 10)))) - .behandling(farBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forVanligPeriode(FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), null, false, - fødselsdato.plusWeeks(13), fødselsdato.plusWeeks(13), null, null)) - .mottattTidspunkt(fødselsdato.plusWeeks(13).atTime(LocalTime.of(12, 12, 12)))); + // Søkt samme dag, men mor har søkt etter far + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(13))) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(13))) + .sisteSøknadMottattTidspunkt( + fødselsdato + .plusWeeks(13) + .atTime(LocalTime.of(10, 10, 10)))) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + null, + false, + fødselsdato.plusWeeks(13), + fødselsdato.plusWeeks(13), + null, + null)) + .mottattTidspunkt( + fødselsdato + .plusWeeks(13) + .atTime(LocalTime.of(12, 12, 12)))); var resultat = fastsettPerioder(grunnlag); @@ -172,19 +347,44 @@ class TapendeSakOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB @Test void skal_tape_hvis_far_har_søkt_etter_mor_men_det_er_berørt_behandling() { - //Søkt samme dag, men mor har søkt etter far - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(10))) - .uttaksperiode(annenpartsPeriode(MØDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(10)))) - .behandling(farBehandling().berørtBehandling(true)) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forVanligPeriode(FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), null, false, - fødselsdato.plusWeeks(13), fødselsdato.plusWeeks(13), null, null))); + // Søkt samme dag, men mor har søkt etter far + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(10))) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(10)))) + .behandling(farBehandling().berørtBehandling(true)) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + null, + false, + fødselsdato.plusWeeks(13), + fødselsdato.plusWeeks(13), + null, + null))); var resultat = fastsettPerioder(grunnlag); @@ -193,23 +393,57 @@ class TapendeSakOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB } @Test - void skal_evaluere_normal_flyt_dersom_flerbarnsdager_far_har_søkt_etter_mor_berørt_behandling() { - //Søkt samme dag, men mor har søkt etter far - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(10))) - .uttaksperiode(annenpartsPeriode(MØDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(10)))) - .behandling(farBehandling().berørtBehandling(true)) - .rettOgOmsorg(beggeRett()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(5 * 15)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(5 * 16 + 5 * 17)) - .flerbarnsdager(5 * 17)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forVanligPeriode(FELLESPERIODE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), - new SamtidigUttaksprosent(100), true, fødselsdato.plusWeeks(13), fødselsdato.plusWeeks(13), null, null))); + void + skal_evaluere_normal_flyt_dersom_flerbarnsdager_far_har_søkt_etter_mor_berørt_behandling() { + // Søkt samme dag, men mor har søkt etter far + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(10))) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(10)))) + .behandling(farBehandling().berørtBehandling(true)) + .rettOgOmsorg(beggeRett()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FEDREKVOTE) + .trekkdager(5 * 15)) + .konto( + new Konto.Builder() + .type(FELLESPERIODE) + .trekkdager(5 * 16 + 5 * 17)) + .flerbarnsdager(5 * 17)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + new SamtidigUttaksprosent(100), + true, + fødselsdato.plusWeeks(13), + fødselsdato.plusWeeks(13), + null, + null))); var resultat = fastsettPerioder(grunnlag); @@ -218,23 +452,57 @@ class TapendeSakOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB } @Test - void skal_evaluere_normal_flyt_dersom_flerbarnsdager_far_har_søkt_etter_mor_berørt_behandling_annen_part_samtidig() { - //Søkt samme dag, men mor har søkt etter far - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(10))) - .uttaksperiode(annenpartsPeriodeSamtidig(MØDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), MOR_ARBEIDSFORHOLD, true, - fødselsdato.plusWeeks(10)))) - .behandling(farBehandling().berørtBehandling(true)) - .rettOgOmsorg(beggeRett()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(5 * 15)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(5 * 16 + 5 * 17)) - .flerbarnsdager(5 * 17)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forVanligPeriode(FELLESPERIODE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), null, true, - fødselsdato.plusWeeks(13), fødselsdato.plusWeeks(13), null, null))); + void + skal_evaluere_normal_flyt_dersom_flerbarnsdager_far_har_søkt_etter_mor_berørt_behandling_annen_part_samtidig() { + // Søkt samme dag, men mor har søkt etter far + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(10))) + .uttaksperiode( + annenpartsPeriodeSamtidig( + MØDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato.plusWeeks(10)))) + .behandling(farBehandling().berørtBehandling(true)) + .rettOgOmsorg(beggeRett()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(FEDREKVOTE) + .trekkdager(5 * 15)) + .konto( + new Konto.Builder() + .type(FELLESPERIODE) + .trekkdager(5 * 16 + 5 * 17)) + .flerbarnsdager(5 * 17)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + null, + true, + fødselsdato.plusWeeks(13), + fødselsdato.plusWeeks(13), + null, + null))); var resultat = fastsettPerioder(grunnlag); @@ -244,123 +512,219 @@ class TapendeSakOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB @Test void skal_evaluere_normal_flyt_dersom_far_rundt_fødsel_berørt_med_samtidig() { - //Søkt samme dag, men mor har søkt etter far + // Søkt samme dag, men mor har søkt etter far var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 10, 3)); var termindato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 10, 5)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1), MOR_ARBEIDSFORHOLD, true, fødselsdato)) - .uttaksperiode( - annenpartsPeriode(MØDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12), MOR_ARBEIDSFORHOLD, true, fødselsdato))) - .behandling(farBehandling().berørtBehandling(true)) - .rettOgOmsorg(beggeRett()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(5 * 15)) - .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(5 * 15)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(5 * 16)) - .farUttakRundtFødselDager(10)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(OppgittPeriode.forVanligPeriode(FEDREKVOTE, termindato.minusWeeks(1), termindato.plusWeeks(1).minusDays(1), - new SamtidigUttaksprosent(100), false, fødselsdato, fødselsdato, null, null)) - .oppgittPeriode( - OppgittPeriode.forVanligPeriode(FEDREKVOTE, fødselsdato.plusWeeks(35), fødselsdato.plusWeeks(42).minusDays(1), null, false, - fødselsdato, fødselsdato, null, null))); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato)) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato))) + .behandling(farBehandling().berørtBehandling(true)) + .rettOgOmsorg(beggeRett()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(MØDREKVOTE) + .trekkdager(5 * 15)) + .konto( + new Konto.Builder() + .type(FEDREKVOTE) + .trekkdager(5 * 15)) + .konto( + new Konto.Builder() + .type(FELLESPERIODE) + .trekkdager(5 * 16)) + .farUttakRundtFødselDager(10)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + FEDREKVOTE, + termindato.minusWeeks(1), + termindato.plusWeeks(1).minusDays(1), + new SamtidigUttaksprosent(100), + false, + fødselsdato, + fødselsdato, + null, + null)) + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(35), + fødselsdato.plusWeeks(42).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + null, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); - assertThat(resultat.stream() - .map(FastsettePeriodeResultat::uttakPeriode) - .map(UttakPeriode::getPerioderesultattype) - .allMatch(INNVILGET::equals)).isTrue(); + assertThat( + resultat.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .map(UttakPeriode::getPerioderesultattype) + .allMatch(INNVILGET::equals)) + .isTrue(); } @Test - void skal_evaluere_normal_flyt_dersom_far_rundt_fødsel_mor_berørt_behandling_annen_part_samtidig() { - //Søkt samme dag, men mor har søkt etter far + void + skal_evaluere_normal_flyt_dersom_far_rundt_fødsel_mor_berørt_behandling_annen_part_samtidig() { + // Søkt samme dag, men mor har søkt etter far var fødselsdato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 10, 3)); var termindato = Virkedager.justerHelgTilMandag(LocalDate.of(2022, 10, 5)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsSamtidigPeriode(FEDREKVOTE, termindato.minusWeeks(1), termindato.plusWeeks(1).minusDays(1), MOR_ARBEIDSFORHOLD, true, - fødselsdato)) - .uttaksperiode( - annenpartsSamtidigPeriode(FEDREKVOTE, fødselsdato.plusWeeks(41), fødselsdato.plusWeeks(50).minusDays(1), MOR_ARBEIDSFORHOLD, true, - fødselsdato))) - .behandling(morBehandling().berørtBehandling(true)) - .rettOgOmsorg(beggeRett()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(5 * 15)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(5 * 16)) - .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(5 * 15)) - .farUttakRundtFødselDager(10)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode( - OppgittPeriode.forVanligPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(3), null, false, fødselsdato, - fødselsdato, null, null))); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsSamtidigPeriode( + FEDREKVOTE, + termindato.minusWeeks(1), + termindato.plusWeeks(1).minusDays(1), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato)) + .uttaksperiode( + annenpartsSamtidigPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(41), + fødselsdato.plusWeeks(50).minusDays(1), + MOR_ARBEIDSFORHOLD, + true, + fødselsdato))) + .behandling(morBehandling().berørtBehandling(true)) + .rettOgOmsorg(beggeRett()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(MØDREKVOTE) + .trekkdager(5 * 15)) + .konto( + new Konto.Builder() + .type(FELLESPERIODE) + .trekkdager(5 * 16)) + .konto( + new Konto.Builder() + .type(FEDREKVOTE) + .trekkdager(5 * 15)) + .farUttakRundtFødselDager(10)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + OppgittPeriode.forVanligPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(3), + null, + false, + fødselsdato, + fødselsdato, + null, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); - assertThat(resultat.stream() - .map(FastsettePeriodeResultat::uttakPeriode) - .map(UttakPeriode::getPerioderesultattype) - .allMatch(INNVILGET::equals)).isTrue(); + assertThat( + resultat.stream() + .map(FastsettePeriodeResultat::uttakPeriode) + .map(UttakPeriode::getPerioderesultattype) + .allMatch(INNVILGET::equals)) + .isTrue(); } - static AnnenpartUttakPeriode annenpartsPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - AktivitetIdentifikator aktivitet, - boolean innvilget) { + static AnnenpartUttakPeriode annenpartsPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + AktivitetIdentifikator aktivitet, + boolean innvilget) { return annenpartsPeriode(stønadskontotype, fom, tom, aktivitet, innvilget, null); } - static AnnenpartUttakPeriode annenpartsPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - AktivitetIdentifikator aktivitet, - boolean innvilget, - LocalDate senestMottattDato) { + static AnnenpartUttakPeriode annenpartsPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + AktivitetIdentifikator aktivitet, + boolean innvilget, + LocalDate senestMottattDato) { return AnnenpartUttakPeriode.Builder.uttak(fom, tom) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(aktivitet, stønadskontotype, new Trekkdager(Virkedager.beregnAntallVirkedager(fom, tom)), - Utbetalingsgrad.TEN)) - .innvilget(innvilget) - .senestMottattDato(senestMottattDato) - .build(); + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + aktivitet, + stønadskontotype, + new Trekkdager(Virkedager.beregnAntallVirkedager(fom, tom)), + Utbetalingsgrad.TEN)) + .innvilget(innvilget) + .senestMottattDato(senestMottattDato) + .build(); } - static AnnenpartUttakPeriode annenpartsSamtidigPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - AktivitetIdentifikator aktivitet, - boolean innvilget, - LocalDate senestMottattDato) { + static AnnenpartUttakPeriode annenpartsSamtidigPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + AktivitetIdentifikator aktivitet, + boolean innvilget, + LocalDate senestMottattDato) { return AnnenpartUttakPeriode.Builder.uttak(fom, tom) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(aktivitet, stønadskontotype, new Trekkdager(Virkedager.beregnAntallVirkedager(fom, tom)), - Utbetalingsgrad.TEN)) - .innvilget(innvilget) - .samtidigUttak(true) - .senestMottattDato(senestMottattDato) - .build(); + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + aktivitet, + stønadskontotype, + new Trekkdager(Virkedager.beregnAntallVirkedager(fom, tom)), + Utbetalingsgrad.TEN)) + .innvilget(innvilget) + .samtidigUttak(true) + .senestMottattDato(senestMottattDato) + .build(); } - static AnnenpartUttakPeriode annenpartsPeriodeSamtidig(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - AktivitetIdentifikator aktivitet, - boolean innvilget, - LocalDate senestMottattDato) { + static AnnenpartUttakPeriode annenpartsPeriodeSamtidig( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + AktivitetIdentifikator aktivitet, + boolean innvilget, + LocalDate senestMottattDato) { return AnnenpartUttakPeriode.Builder.uttak(fom, tom) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(aktivitet, stønadskontotype, new Trekkdager(Virkedager.beregnAntallVirkedager(fom, tom)), - Utbetalingsgrad.TEN)) - .innvilget(innvilget) - .senestMottattDato(senestMottattDato) - .samtidigUttak(true) - .build(); + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + aktivitet, + stønadskontotype, + new Trekkdager(Virkedager.beregnAntallVirkedager(fom, tom)), + Utbetalingsgrad.TEN)) + .innvilget(innvilget) + .senestMottattDato(senestMottattDato) + .samtidigUttak(true) + .build(); } - } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ToParterOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ToParterOrkestreringTest.java index b5d1f5d8..b5ac3b97 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ToParterOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/ToParterOrkestreringTest.java @@ -12,9 +12,6 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; @@ -37,6 +34,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; class ToParterOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @@ -44,15 +42,18 @@ class ToParterOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBas private static final int UKER_MK = 15; private static final int UKER_FK = 15; private static final int UKER_FP = 16; - private static final AktivitetIdentifikator FAR_ARBEIDSFORHOLD = RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_2; + private static final AktivitetIdentifikator FAR_ARBEIDSFORHOLD = + RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_2; private final LocalDate fødselsdato = LocalDate.of(2018, 1, 1); private RegelGrunnlag.Builder leggPåKvoter(RegelGrunnlag.Builder builder) { - var kontoer = new Kontoer.Builder().konto(kvote(FORELDREPENGER_FØR_FØDSEL, UKER_FPFF)) - .konto(kvote(MØDREKVOTE, UKER_MK)) - .konto(kvote(FEDREKVOTE, UKER_FK)) - .konto(kvote(FELLESPERIODE, UKER_FP)); + var kontoer = + new Kontoer.Builder() + .konto(kvote(FORELDREPENGER_FØR_FØDSEL, UKER_FPFF)) + .konto(kvote(MØDREKVOTE, UKER_MK)) + .konto(kvote(FEDREKVOTE, UKER_FK)) + .konto(kvote(FELLESPERIODE, UKER_FP)); return builder.kontoer(kontoer); } @@ -60,7 +61,6 @@ private Konto.Builder kvote(Stønadskontotype foreldrepengerFørFødsel, int uke return new Konto.Builder().type(foreldrepengerFørFødsel).trekkdager(uker * 5); } - @Test void far_har_uttak_og_mor_søker_før_og_etter_fars_uttak() { var fomFarsFP = fødselsdato.plusWeeks(UKER_MK); @@ -70,14 +70,30 @@ private Konto.Builder kvote(Stønadskontotype foreldrepengerFørFødsel, int uke var tomMorsFPsøknad = fødselsdato.plusWeeks(50); var grunnlag = RegelGrunnlagTestBuilder.create(); - leggPåKvoter(grunnlag).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode(lagPeriodeForFar(FELLESPERIODE, fomFarsFP, tomFarsFP, true))) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(UKER_FPFF), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(UKER_MK).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fomMorsFP, tomMorsFPsøknad))); + leggPåKvoter(grunnlag) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + lagPeriodeForFar( + FELLESPERIODE, fomFarsFP, tomFarsFP, true))) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(UKER_FPFF), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(UKER_MK).minusDays(1))) + .oppgittPeriode( + oppgittPeriode(FELLESPERIODE, fomMorsFP, tomMorsFPsøknad))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(5); @@ -103,7 +119,8 @@ private Konto.Builder kvote(Stønadskontotype foreldrepengerFørFødsel, int uke } @Test - void far_har_uttak_og_mor_søker_om_uttak_før_fars_uttak_slutter_slik_at_mor_tar_dager_fra_far() { + void + far_har_uttak_og_mor_søker_om_uttak_før_fars_uttak_slutter_slik_at_mor_tar_dager_fra_far() { var fomFarsFP = fødselsdato.plusWeeks(UKER_MK); var tomFarsFPorginal = fødselsdato.plusWeeks(UKER_MK + UKER_FP / 2).minusDays(1); var fomMorsFP = fødselsdato.plusWeeks(UKER_MK + UKER_FP / 2); @@ -111,14 +128,30 @@ private Konto.Builder kvote(Stønadskontotype foreldrepengerFørFødsel, int uke var tomMorsFPsøknad = fødselsdato.plusWeeks(50); var grunnlag = RegelGrunnlagTestBuilder.create(); - leggPåKvoter(grunnlag).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode(lagPeriodeForFar(FELLESPERIODE, fomFarsFP, tomFarsFPorginal, true))) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(UKER_FPFF), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(UKER_MK).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fomMorsFP, tomMorsFPsøknad))); + leggPåKvoter(grunnlag) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + lagPeriodeForFar( + FELLESPERIODE, fomFarsFP, tomFarsFPorginal, true))) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(UKER_FPFF), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(UKER_MK).minusDays(1))) + .oppgittPeriode( + oppgittPeriode(FELLESPERIODE, fomMorsFP, tomMorsFPsøknad))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(5); @@ -144,29 +177,60 @@ private Konto.Builder kvote(Stønadskontotype foreldrepengerFørFødsel, int uke } @Test - void når_far_har_uttak_og_gradert_i_ett_arbeidsforhold_ser_mors_tilgjengelige_dager_kun_det_arbeidsforholdet_for_far_med_minst_forbruk() { + void + når_far_har_uttak_og_gradert_i_ett_arbeidsforhold_ser_mors_tilgjengelige_dager_kun_det_arbeidsforholdet_for_far_med_minst_forbruk() { var fomFarsFP = fødselsdato.plusWeeks(UKER_MK); var tomFarsFP = fødselsdato.plusWeeks(UKER_MK + UKER_FP / 2).minusDays(1); var fomMorsFP = fødselsdato.plusWeeks(UKER_MK + UKER_FP / 2); - var tomMorsFP = fødselsdato.plusWeeks(UKER_MK + UKER_FP + 7).minusDays(1); //7 ekstra uker pga fars gradering + var tomMorsFP = + fødselsdato + .plusWeeks(UKER_MK + UKER_FP + 7) + .minusDays(1); // 7 ekstra uker pga fars gradering var tomMorsFPsøknad = fødselsdato.plusWeeks(50); var farArbeidsforhold2 = RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_3; var grunnlag = RegelGrunnlagTestBuilder.create(); - leggPåKvoter(grunnlag).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(fomFarsFP, tomFarsFP) - .samtidigUttak(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(FAR_ARBEIDSFORHOLD, FELLESPERIODE, - new Trekkdager(Virkedager.beregnAntallVirkedager(fomFarsFP, tomFarsFP)), Utbetalingsgrad.TEN)) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(farArbeidsforhold2, FELLESPERIODE, new Trekkdager(5), new Utbetalingsgrad(87.5))) - .build())) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(UKER_FPFF), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(UKER_MK).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fomMorsFP, tomMorsFPsøknad))); + leggPåKvoter(grunnlag) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak(fomFarsFP, tomFarsFP) + .samtidigUttak(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + FAR_ARBEIDSFORHOLD, + FELLESPERIODE, + new Trekkdager( + Virkedager + .beregnAntallVirkedager( + fomFarsFP, + tomFarsFP)), + Utbetalingsgrad.TEN)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + farArbeidsforhold2, + FELLESPERIODE, + new Trekkdager(5), + new Utbetalingsgrad(87.5))) + .build())) + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(UKER_FPFF), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(UKER_MK).minusDays(1))) + .oppgittPeriode( + oppgittPeriode(FELLESPERIODE, fomMorsFP, tomMorsFPsøknad))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(5); @@ -198,32 +262,58 @@ private Konto.Builder kvote(Stønadskontotype foreldrepengerFørFødsel, int uke var fomMorsFP1 = fødselsdato.plusWeeks(UKER_MK); var tomMorsFP1 = fødselsdato.plusWeeks(UKER_MK).plusWeeks(2).minusDays(1); var fomMorsFP2 = fødselsdato.plusWeeks(UKER_MK).plusWeeks(2); - var tomMorsFP2 = fødselsdato.plusWeeks(UKER_MK).plusWeeks(UKER_FP).minusWeeks(4).plusWeeks(1); - + var tomMorsFP2 = + fødselsdato.plusWeeks(UKER_MK).plusWeeks(UKER_FP).minusWeeks(4).plusWeeks(1); var grunnlag = RegelGrunnlagTestBuilder.create(); - leggPåKvoter(grunnlag).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode(lagPeriodeForFar(FELLESPERIODE, fomFarsFP, tomFarsFP, true))) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(UKER_FPFF), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(UKER_MK).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fomMorsFP1, tomMorsFP1)) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fomMorsFP2, tomMorsFP2))); + leggPåKvoter(grunnlag) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + lagPeriodeForFar( + FELLESPERIODE, fomFarsFP, tomFarsFP, true))) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(UKER_FPFF), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(UKER_MK).minusDays(1))) + .oppgittPeriode( + oppgittPeriode(FELLESPERIODE, fomMorsFP1, tomMorsFP1)) + .oppgittPeriode( + oppgittPeriode(FELLESPERIODE, fomMorsFP2, tomMorsFP2))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(8); - //skal gå tom for dager - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(6).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(7).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(resultat.get(7).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + // skal gå tom for dager + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(6).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(7).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(7).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); } @Test @@ -235,107 +325,226 @@ private Konto.Builder kvote(Stønadskontotype foreldrepengerFørFødsel, int uke var fomMorsFP2 = fødselsdato.plusWeeks(UKER_MK).plusWeeks(6); var tomMorsFP2 = fødselsdato.plusWeeks(UKER_MK).plusWeeks(8).minusDays(1); - var grunnlag = RegelGrunnlagTestBuilder.create(); - leggPåKvoter(grunnlag).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode(lagPeriodeForFar(FELLESPERIODE, fomFarsFP, tomFarsFP, true))) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(UKER_FPFF), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(UKER_MK).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fomMorsFP1, tomMorsFP1)) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fomMorsFP2, tomMorsFP2))); + leggPåKvoter(grunnlag) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + lagPeriodeForFar( + FELLESPERIODE, fomFarsFP, tomFarsFP, true))) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(UKER_FPFF), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(UKER_MK).minusDays(1))) + .oppgittPeriode( + oppgittPeriode(FELLESPERIODE, fomMorsFP1, tomMorsFP1)) + .oppgittPeriode( + oppgittPeriode(FELLESPERIODE, fomMorsFP2, tomMorsFP2))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(5); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test void skalHåndtereAnnenPartPeriodeOverlapperMedFlereSøknadsperioder_medSamtidigUttak() { var grunnlag = RegelGrunnlagTestBuilder.create(); - leggPåKvoter(grunnlag).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - lagPeriodeForFar(FELLESPERIODE, fødselsdato.plusWeeks(UKER_MK), fødselsdato.plusWeeks(UKER_MK).plusWeeks(20).minusDays(1), true))) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(UKER_FPFF), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(UKER_MK).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(UKER_MK).plusWeeks(2), - fødselsdato.plusWeeks(UKER_MK).plusWeeks(3).minusDays(1))) - //Når denne perioden skal inn i reglene skal er det igjen 6 uke på fellesperioden - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(UKER_MK).plusWeeks(6), - fødselsdato.plusWeeks(UKER_MK).plusWeeks(17).minusDays(1)))); + leggPåKvoter(grunnlag) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + lagPeriodeForFar( + FELLESPERIODE, + fødselsdato.plusWeeks(UKER_MK), + fødselsdato + .plusWeeks(UKER_MK) + .plusWeeks(20) + .minusDays(1), + true))) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(UKER_FPFF), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(UKER_MK).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(UKER_MK).plusWeeks(2), + fødselsdato + .plusWeeks(UKER_MK) + .plusWeeks(3) + .minusDays(1))) + // Når denne perioden skal inn i reglene skal er det igjen 6 uke på + // fellesperioden + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(UKER_MK).plusWeeks(6), + fødselsdato + .plusWeeks(UKER_MK) + .plusWeeks(17) + .minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(6); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - //Tom for dager - assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + // Tom for dager + assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); } @Test void skalHåndtereAnnenPartPeriodeOverlapperMedFlereSøknadsperioder_utenSamtidigUttak() { var grunnlag = RegelGrunnlagTestBuilder.create(); - leggPåKvoter(grunnlag).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - lagPeriodeForFar(FELLESPERIODE, fødselsdato.plusWeeks(UKER_MK), fødselsdato.plusWeeks(UKER_MK).plusWeeks(20).minusDays(1), false))) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(UKER_FPFF), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(UKER_MK).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(UKER_MK).plusWeeks(2), - fødselsdato.plusWeeks(UKER_MK).plusWeeks(3).minusDays(1))) - //Når denne perioden skal inn i reglene skal er det igjen 6 uke på fellesperioden - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(UKER_MK).plusWeeks(6), - fødselsdato.plusWeeks(UKER_MK).plusWeeks(17).minusDays(1)))); + leggPåKvoter(grunnlag) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + lagPeriodeForFar( + FELLESPERIODE, + fødselsdato.plusWeeks(UKER_MK), + fødselsdato + .plusWeeks(UKER_MK) + .plusWeeks(20) + .minusDays(1), + false))) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(UKER_FPFF), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(UKER_MK).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(UKER_MK).plusWeeks(2), + fødselsdato + .plusWeeks(UKER_MK) + .plusWeeks(3) + .minusDays(1))) + // Når denne perioden skal inn i reglene skal er det igjen 6 uke på + // fellesperioden + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(UKER_MK).plusWeeks(6), + fødselsdato + .plusWeeks(UKER_MK) + .plusWeeks(17) + .minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(6); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - //Tom for dager - assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + // Tom for dager + assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); } @Test - void skalHåndtereAnnenPartPeriodeOverlapperMedFlereSøknadsperioderPeriodenTilSluttSkalIkkeTrekkesFra() { + void + skalHåndtereAnnenPartPeriodeOverlapperMedFlereSøknadsperioderPeriodenTilSluttSkalIkkeTrekkesFra() { var fomFarsFP = fødselsdato.plusWeeks(UKER_MK).plusWeeks(10); var tomFarsFP = fødselsdato.plusWeeks(UKER_MK).plusWeeks(40).minusDays(1); var fomMorsFP1 = fødselsdato.plusWeeks(UKER_MK); var tomMorsFP1 = fødselsdato.plusWeeks(UKER_MK).plusWeeks(10).minusDays(1); - var grunnlag = RegelGrunnlagTestBuilder.create(); - leggPåKvoter(grunnlag).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode(lagPeriodeForFar(FELLESPERIODE, fomFarsFP, tomFarsFP, true))) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(UKER_FPFF), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(UKER_MK).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fomMorsFP1, tomMorsFP1))); + leggPåKvoter(grunnlag) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + lagPeriodeForFar( + FELLESPERIODE, fomFarsFP, tomFarsFP, true))) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(UKER_FPFF), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(UKER_MK).minusDays(1))) + .oppgittPeriode( + oppgittPeriode(FELLESPERIODE, fomMorsFP1, tomMorsFP1))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test @@ -346,24 +555,45 @@ private Konto.Builder kvote(Stønadskontotype foreldrepengerFørFødsel, int uke var tomMorsFP1 = fødselsdato.plusWeeks(UKER_MK).plusWeeks(6).minusDays(1); var grunnlag = RegelGrunnlagTestBuilder.create(); - leggPåKvoter(grunnlag).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode(lagPeriodeForFar(FELLESPERIODE, fomFarsFP, tomFarsFP, true))) - .behandling(new Behandling.Builder().søkerErMor(true).berørtBehandling(true)) - .revurdering(new Revurdering.Builder()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(UKER_FPFF), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(UKER_MK).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fomMorsFP1, tomMorsFP1))); + leggPåKvoter(grunnlag) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + lagPeriodeForFar( + FELLESPERIODE, fomFarsFP, tomFarsFP, true))) + .behandling(new Behandling.Builder().søkerErMor(true).berørtBehandling(true)) + .revurdering(new Revurdering.Builder()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(UKER_FPFF), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(UKER_MK).minusDays(1))) + .oppgittPeriode( + oppgittPeriode(FELLESPERIODE, fomMorsFP1, tomMorsFP1))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - //skal gå tom for dager - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + // skal gå tom for dager + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); } @Test @@ -371,192 +601,400 @@ private Konto.Builder kvote(Stønadskontotype foreldrepengerFørFødsel, int uke var fødselsdato = LocalDate.of(2019, 9, 25); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(75)) - .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(75)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(80)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(FAR_ARBEIDSFORHOLD))) - .kontoer(kontoer) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartPeriodeInnvilget(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), MØDREKVOTE, new Trekkdager(30))) - .uttaksperiode( - annenpartPeriodeOpphold(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER))) - .behandling(farBehandling().kreverSammenhengendeUttak(true)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(23).minusDays(1)))); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(75)) + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(75)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(80)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(FAR_ARBEIDSFORHOLD))) + .kontoer(kontoer) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartPeriodeInnvilget( + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + MØDREKVOTE, + new Trekkdager(30))) + .uttaksperiode( + annenpartPeriodeOpphold( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER))) + .behandling(farBehandling().kreverSammenhengendeUttak(true)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(23).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - //skal gå tom for dager - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(resultat.get(1).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); + // skal gå tom for dager + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(resultat.get(1).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); } @Test void skal_ikke_trekke_for_opphold_i_berørt_behandling_hvis_søker_har_søkt_i_perioden() { var fødselsdato = LocalDate.of(2019, 9, 25); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(75)) - .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(75)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(80)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(FAR_ARBEIDSFORHOLD))) - .kontoer(kontoer) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartPeriodeInnvilget(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), FEDREKVOTE, new Trekkdager(20))) - .uttaksperiode(annenpartPeriodeOpphold(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(19).minusDays(1), - OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER))) - .behandling(new Behandling.Builder().søkerErMor(true).berørtBehandling(true)) - .revurdering(new Revurdering.Builder().endringsdato(fødselsdato.plusWeeks(10))) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(19).minusDays(1)))); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(75)) + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(75)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(80)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(FAR_ARBEIDSFORHOLD))) + .kontoer(kontoer) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartPeriodeInnvilget( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + FEDREKVOTE, + new Trekkdager(20))) + .uttaksperiode( + annenpartPeriodeOpphold( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(19).minusDays(1), + OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER))) + .behandling( + new Behandling.Builder().søkerErMor(true).berørtBehandling(true)) + .revurdering( + new Revurdering.Builder().endringsdato(fødselsdato.plusWeeks(10))) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(19).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - //skal gå tom for dager - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + // skal gå tom for dager + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test void skal_trekke_for_overlappende_avslått_hos_annenpart_i_berørt_behandling() { var fødselsdato = LocalDate.of(2019, 9, 25); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(75)) - .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(75)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(80)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(FAR_ARBEIDSFORHOLD))) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1)) - .innvilget(false) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(80), Utbetalingsgrad.ZERO)) - .build())) - .behandling(new Behandling.Builder().søkerErMor(true).berørtBehandling(true)) - .revurdering(new Revurdering.Builder().endringsdato(fødselsdato)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1)))); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(75)) + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(75)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(80)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(FAR_ARBEIDSFORHOLD))) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato.plusWeeks(6), + fødselsdato + .plusWeeks(10) + .minusDays(1)) + .innvilget(false) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(80), + Utbetalingsgrad.ZERO)) + .build())) + .behandling( + new Behandling.Builder().søkerErMor(true).berørtBehandling(true)) + .revurdering(new Revurdering.Builder().endringsdato(fødselsdato)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - //skal gå tom for dager - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - //tom på dager - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(resultat.get(1).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); + // skal gå tom for dager + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + // tom på dager + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(resultat.get(1).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); } @Test void skal_ikke_trekke_for_opphold_hvis_søker_har_søkt_i_perioden() { var fødselsdato = LocalDate.of(2019, 9, 25); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(75)) - .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(75)) - .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(80)); - var søknad = new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(21).minusDays(1), MORS_AKTIVITET_GODKJENT)) - .oppgittPeriode( - oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(21), fødselsdato.plusWeeks(22).minusDays(1), MORS_AKTIVITET_GODKJENT)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(FAR_ARBEIDSFORHOLD))) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartPeriodeInnvilget(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), MØDREKVOTE, new Trekkdager(30))) - .uttaksperiode( - annenpartPeriodeOpphold(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(21).minusDays(1), OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER)) - .uttaksperiode( - annenpartPeriodeInnvilget(fødselsdato.plusWeeks(21), fødselsdato.plusWeeks(30).minusDays(1), MØDREKVOTE, new Trekkdager(45)))) - .behandling(farBehandling()) - .søknad(søknad); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FEDREKVOTE).trekkdager(75)) + .konto(new Konto.Builder().type(MØDREKVOTE).trekkdager(75)) + .konto(new Konto.Builder().type(FELLESPERIODE).trekkdager(80)); + var søknad = + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(21).minusDays(1), + MORS_AKTIVITET_GODKJENT)) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(21), + fødselsdato.plusWeeks(22).minusDays(1), + MORS_AKTIVITET_GODKJENT)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(FAR_ARBEIDSFORHOLD))) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartPeriodeInnvilget( + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + MØDREKVOTE, + new Trekkdager(30))) + .uttaksperiode( + annenpartPeriodeOpphold( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(21).minusDays(1), + OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER)) + .uttaksperiode( + annenpartPeriodeInnvilget( + fødselsdato.plusWeeks(21), + fødselsdato.plusWeeks(30).minusDays(1), + MØDREKVOTE, + new Trekkdager(45)))) + .behandling(farBehandling()) + .søknad(søknad); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - //skal gå tom for dager - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + // skal gå tom for dager + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test void oppholdsperioder_som_overlapper_med_annenpart_skal_fjernes() { - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), forFrilans(), true)) - .uttaksperiode(annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(15).minusDays(1), forFrilans(), true)) - .uttaksperiode(annenpartsPeriode(FELLESPERIODE, fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(17), forFrilans(), true))) - .behandling(farBehandling().kreverSammenhengendeUttak(true)) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(14), fødselsdato.plusWeeks(15).minusDays(1))) - .oppgittPeriode(OppgittPeriode.forOpphold(fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(16).minusDays(1), - OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER, null, null)) - .oppgittPeriode( - OppgittPeriode.forOpphold(fødselsdato.plusWeeks(16), fødselsdato.plusWeeks(20), OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER, null, - null))); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + forFrilans(), + true)) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(15).minusDays(1), + forFrilans(), + true)) + .uttaksperiode( + annenpartsPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(17), + forFrilans(), + true))) + .behandling(farBehandling().kreverSammenhengendeUttak(true)) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(14), + fødselsdato.plusWeeks(15).minusDays(1))) + .oppgittPeriode( + OppgittPeriode.forOpphold( + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(16).minusDays(1), + OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER, + null, + null)) + .oppgittPeriode( + OppgittPeriode.forOpphold( + fødselsdato.plusWeeks(16), + fødselsdato.plusWeeks(20), + OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER, + null, + null))); var resultat = fastsettPerioder(grunnlag); - //Skal ligge igjen opphold på slutten som ikke overlapper med annenpart, alt som overlapper skal fjernes + // Skal ligge igjen opphold på slutten som ikke overlapper med annenpart, alt som overlapper + // skal fjernes assertThat(resultat).hasSize(2); assertThat(resultat.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FEDREKVOTE); - assertThat(resultat.get(1).uttakPeriode().getOppholdÅrsak()).isEqualTo(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER); - assertThat(resultat.get(1).uttakPeriode().getFom()).isEqualTo(fødselsdato.plusWeeks(17).plusDays(1)); + assertThat(resultat.get(1).uttakPeriode().getOppholdÅrsak()) + .isEqualTo(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER); + assertThat(resultat.get(1).uttakPeriode().getFom()) + .isEqualTo(fødselsdato.plusWeeks(17).plusDays(1)); assertThat(resultat.get(1).uttakPeriode().getTom()).isEqualTo(fødselsdato.plusWeeks(20)); } @Test void oppholdsperioder_som_overlapper_med_annenpart_uten_trekkdager_skal_ikke_fjernes() { - var annenpartAktivitet = new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, Trekkdager.ZERO, Utbetalingsgrad.ZERO); - var annenpartPeriodeUtenTrekkdager = AnnenpartUttakPeriode.Builder.uttak(fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(16)) - .innvilget(false) - .uttakPeriodeAktivitet(annenpartAktivitet) - .build(); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), forFrilans(), true)) - .uttaksperiode(annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(15).minusDays(1), forFrilans(), true)) - .uttaksperiode(annenpartPeriodeUtenTrekkdager)) - .behandling(farBehandling().kreverSammenhengendeUttak(true)) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(14), fødselsdato.plusWeeks(15).minusDays(1))) - .oppgittPeriode(OppgittPeriode.forOpphold(annenpartPeriodeUtenTrekkdager.getFom(), annenpartPeriodeUtenTrekkdager.getTom(), - OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER, null, null))); + var annenpartAktivitet = + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), FELLESPERIODE, Trekkdager.ZERO, Utbetalingsgrad.ZERO); + var annenpartPeriodeUtenTrekkdager = + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(16)) + .innvilget(false) + .uttakPeriodeAktivitet(annenpartAktivitet) + .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + forFrilans(), + true)) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(15).minusDays(1), + forFrilans(), + true)) + .uttaksperiode(annenpartPeriodeUtenTrekkdager)) + .behandling(farBehandling().kreverSammenhengendeUttak(true)) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(14), + fødselsdato.plusWeeks(15).minusDays(1))) + .oppgittPeriode( + OppgittPeriode.forOpphold( + annenpartPeriodeUtenTrekkdager.getFom(), + annenpartPeriodeUtenTrekkdager.getTom(), + OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER, + null, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); assertThat(resultat.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FEDREKVOTE); - assertThat(resultat.get(1).uttakPeriode().getOppholdÅrsak()).isEqualTo(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER); + assertThat(resultat.get(1).uttakPeriode().getOppholdÅrsak()) + .isEqualTo(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER); } @Test void oppholdsperioder_som_overlapper_med_annenpart_innvilget_utsettelse_skal_fjernes() { - var annenpartAktivitet = new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, Trekkdager.ZERO, Utbetalingsgrad.ZERO); - var annenpartPeriodeUtsettelse = AnnenpartUttakPeriode.Builder.utsettelse(fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(16)) - .innvilget(true) - .uttakPeriodeAktivitet(annenpartAktivitet) - .build(); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), forFrilans(), true)) - .uttaksperiode(annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(15).minusDays(1), forFrilans(), true)) - .uttaksperiode(annenpartPeriodeUtsettelse)) - .behandling(farBehandling()) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(14), fødselsdato.plusWeeks(15).minusDays(1))) - .oppgittPeriode(OppgittPeriode.forOpphold(annenpartPeriodeUtsettelse.getFom(), annenpartPeriodeUtsettelse.getTom(), - OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER, null, null))); + var annenpartAktivitet = + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), FELLESPERIODE, Trekkdager.ZERO, Utbetalingsgrad.ZERO); + var annenpartPeriodeUtsettelse = + AnnenpartUttakPeriode.Builder.utsettelse( + fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(16)) + .innvilget(true) + .uttakPeriodeAktivitet(annenpartAktivitet) + .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + forFrilans(), + true)) + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(15).minusDays(1), + forFrilans(), + true)) + .uttaksperiode(annenpartPeriodeUtsettelse)) + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(14), + fødselsdato.plusWeeks(15).minusDays(1))) + .oppgittPeriode( + OppgittPeriode.forOpphold( + annenpartPeriodeUtsettelse.getFom(), + annenpartPeriodeUtsettelse.getTom(), + OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER, + null, + null))); var resultat = fastsettPerioder(grunnlag); @@ -564,331 +1002,695 @@ void oppholdsperioder_som_overlapper_med_annenpart_innvilget_utsettelse_skal_fje assertThat(resultat.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FEDREKVOTE); } - //FAGSYSTEM-85385 + // FAGSYSTEM-85385 @Test - void berørt_behandling_som_har_annenpart_med_overlappende_oppholdsperiode_skal_ikke_tape_perioden() { - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - annenpartsPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(15).minusDays(1), forFrilans(), true)) - .uttaksperiode(annenpartPeriodeOpphold(fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(30).minusDays(1), - OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER))) - .behandling(farBehandling().berørtBehandling(true)) - .rettOgOmsorg(beggeRett()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(30).minusDays(1)))); + void + berørt_behandling_som_har_annenpart_med_overlappende_oppholdsperiode_skal_ikke_tape_perioden() { + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + annenpartsPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(15).minusDays(1), + forFrilans(), + true)) + .uttaksperiode( + annenpartPeriodeOpphold( + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(30).minusDays(1), + OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER))) + .behandling(farBehandling().berørtBehandling(true)) + .rettOgOmsorg(beggeRett()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(30).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(1); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test void samtidig_uttak_automatiseres_i_berørt_hvis_samlet_lik_100_prosent_uttak() { var fh = LocalDate.of(2022, 4, 1); - var grunnlag = basicGrunnlagMor(fh).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FEDREKVOTE, new Trekkdager(5), new Utbetalingsgrad(40))) - .innvilget(true) - .samtidigUttak(true) - .build())) - .behandling(morBehandling().berørtBehandling(true)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh, fh.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1), false, new SamtidigUttaksprosent(60)))); + var grunnlag = + basicGrunnlagMor(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FEDREKVOTE, + new Trekkdager(5), + new Utbetalingsgrad(40))) + .innvilget(true) + .samtidigUttak(true) + .build())) + .behandling(morBehandling().berørtBehandling(true)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh, + fh.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1), + false, + new SamtidigUttaksprosent(60)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(60)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(new Utbetalingsgrad(60)); } @Test void samtidig_uttak_automatiseres_i_berørt_hvis_samlet_under_100_prosent_uttak() { var fh = LocalDate.of(2022, 4, 1); - var grunnlag = basicGrunnlagMor(fh).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FEDREKVOTE, new Trekkdager(5), new Utbetalingsgrad(30))) - .innvilget(true) - .samtidigUttak(true) - .build())) - .behandling(morBehandling().berørtBehandling(true)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh, fh.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1), false, new SamtidigUttaksprosent(30)))); + var grunnlag = + basicGrunnlagMor(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FEDREKVOTE, + new Trekkdager(5), + new Utbetalingsgrad(30))) + .innvilget(true) + .samtidigUttak(true) + .build())) + .behandling(morBehandling().berørtBehandling(true)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh, + fh.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1), + false, + new SamtidigUttaksprosent(30)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(30)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(new Utbetalingsgrad(30)); } @Test - void samtidig_uttak_til_manuell_i_berørt_hvis_samlet_over_100_prosent_uttak_ene_over_80_prosent() { + void + samtidig_uttak_til_manuell_i_berørt_hvis_samlet_over_100_prosent_uttak_ene_over_80_prosent() { var fh = LocalDate.of(2022, 4, 1); - var grunnlag = basicGrunnlagMor(fh).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FEDREKVOTE, new Trekkdager(5), new Utbetalingsgrad(85))) - .innvilget(true) - .samtidigUttak(true) - .build())) - .behandling(morBehandling().berørtBehandling(true)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh, fh.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1), false, new SamtidigUttaksprosent(70)))); + var grunnlag = + basicGrunnlagMor(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FEDREKVOTE, + new Trekkdager(5), + new Utbetalingsgrad(85))) + .innvilget(true) + .samtidigUttak(true) + .build())) + .behandling(morBehandling().berørtBehandling(true)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh, + fh.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1), + false, + new SamtidigUttaksprosent(70)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(resultat.get(1).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.VURDER_SAMTIDIG_UTTAK); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(resultat.get(1).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.VURDER_SAMTIDIG_UTTAK); } @Test void samtidig_uttak_automatisk_reduksjon_i_berørt_hvis_samlet_over_100_prosent_uttak() { var forventetRedusertTil = 40; var fh = LocalDate.of(2022, 4, 1); - var grunnlag = basicGrunnlagMor(fh).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FEDREKVOTE, new Trekkdager(5), new Utbetalingsgrad(60))) - .innvilget(true) - .samtidigUttak(true) - .build())) - .behandling(morBehandling().berørtBehandling(true)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh, fh.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1), false, new SamtidigUttaksprosent(70)))); + var grunnlag = + basicGrunnlagMor(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FEDREKVOTE, + new Trekkdager(5), + new Utbetalingsgrad(60))) + .innvilget(true) + .samtidigUttak(true) + .build())) + .behandling(morBehandling().berørtBehandling(true)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh, + fh.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1), + false, + new SamtidigUttaksprosent(70)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getSamtidigUttaksprosent()).isEqualTo(new SamtidigUttaksprosent(forventetRedusertTil)); - assertThat(resultat.get(1).uttakPeriode().getAktiviteter().stream().findFirst().orElseThrow().getUtbetalingsgrad()).isEqualTo( - new Utbetalingsgrad(forventetRedusertTil)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getSamtidigUttaksprosent()) + .isEqualTo(new SamtidigUttaksprosent(forventetRedusertTil)); + assertThat( + resultat.get(1).uttakPeriode().getAktiviteter().stream() + .findFirst() + .orElseThrow() + .getUtbetalingsgrad()) + .isEqualTo(new Utbetalingsgrad(forventetRedusertTil)); } @Test void samtidig_uttak_automatiseres_i_berørt_hvis_samlet_lik_150_prosent_uttak() { var fh = LocalDate.of(2022, 4, 1); - var grunnlag = basicGrunnlagMor(fh).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(5), new Utbetalingsgrad(50))) - .innvilget(true) - .samtidigUttak(true) - .build())) - .behandling(morBehandling().berørtBehandling(true)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh, fh.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1), false, new SamtidigUttaksprosent(100)))); + var grunnlag = + basicGrunnlagMor(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(5), + new Utbetalingsgrad(50))) + .innvilget(true) + .samtidigUttak(true) + .build())) + .behandling(morBehandling().berørtBehandling(true)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh, + fh.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1), + false, + new SamtidigUttaksprosent(100)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(100)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(new Utbetalingsgrad(100)); } @Test void samtidig_uttak_automatiseres_i_berørt_hvis_samlet_lik_150_prosent_uttak_byttom() { var fh = LocalDate.of(2022, 4, 1); - var grunnlag = basicGrunnlagMor(fh).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FEDREKVOTE, new Trekkdager(5), new Utbetalingsgrad(100))) - .innvilget(true) - .samtidigUttak(true) - .build())) - .behandling(morBehandling().berørtBehandling(true)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh, fh.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1), false, new SamtidigUttaksprosent(50)))); + var grunnlag = + basicGrunnlagMor(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FEDREKVOTE, + new Trekkdager(5), + new Utbetalingsgrad(100))) + .innvilget(true) + .samtidigUttak(true) + .build())) + .behandling(morBehandling().berørtBehandling(true)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh, + fh.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1), + false, + new SamtidigUttaksprosent(50)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(50)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(new Utbetalingsgrad(50)); } @Test void samtidig_uttak_automatiseres_i_berørt_hvis_samlet_under_150_prosent_uttak() { var fh = LocalDate.of(2022, 4, 1); - var grunnlag = basicGrunnlagMor(fh).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FEDREKVOTE, new Trekkdager(5), new Utbetalingsgrad(30))) - .innvilget(true) - .samtidigUttak(true) - .build())) - .behandling(morBehandling().berørtBehandling(true)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh, fh.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1), false, new SamtidigUttaksprosent(30)))); + var grunnlag = + basicGrunnlagMor(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FEDREKVOTE, + new Trekkdager(5), + new Utbetalingsgrad(30))) + .innvilget(true) + .samtidigUttak(true) + .build())) + .behandling(morBehandling().berørtBehandling(true)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh, + fh.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1), + false, + new SamtidigUttaksprosent(30)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(new Utbetalingsgrad(30)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(new Utbetalingsgrad(30)); } @Test void samtidig_uttak_til_manuell_i_berørt_hvis_samlet_over_150_prosent_uttak() { var fh = LocalDate.of(2022, 4, 1); - var grunnlag = basicGrunnlagMor(fh).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FELLESPERIODE, new Trekkdager(5), new Utbetalingsgrad(60))) - .innvilget(true) - .samtidigUttak(true) - .build())) - .behandling(morBehandling().berørtBehandling(true)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh, fh.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1), false, new SamtidigUttaksprosent(70)))); + var grunnlag = + basicGrunnlagMor(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FELLESPERIODE, + new Trekkdager(5), + new Utbetalingsgrad(60))) + .innvilget(true) + .samtidigUttak(true) + .build())) + .behandling(morBehandling().berørtBehandling(true)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh, + fh.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1), + false, + new SamtidigUttaksprosent(70)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); } @Test void samtidig_uttak_til_manuell_i_berørt_hvis_samlet_over_150_prosent_uttak_byttom() { var fh = LocalDate.of(2022, 4, 1); - var grunnlag = basicGrunnlagMor(fh).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FEDREKVOTE, new Trekkdager(5), new Utbetalingsgrad(60))) - .innvilget(true) - .samtidigUttak(true) - .build())) - .behandling(morBehandling().berørtBehandling(true)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh, fh.plusWeeks(6).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1), false, new SamtidigUttaksprosent(70)))); + var grunnlag = + basicGrunnlagMor(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FEDREKVOTE, + new Trekkdager(5), + new Utbetalingsgrad(60))) + .innvilget(true) + .samtidigUttak(true) + .build())) + .behandling(morBehandling().berørtBehandling(true)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh, + fh.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1), + false, + new SamtidigUttaksprosent(70)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); } @Test void skal_gi_riktig_saldo_for_flerbarnsdager() { var fh = LocalDate.of(2022, 4, 1); - var annenpartUttakPeriode1 = AnnenpartUttakPeriode.Builder.uttak(fh, fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), MØDREKVOTE, new Trekkdager(30), Utbetalingsgrad.HUNDRED)) - .innvilget(true) - .build(); - var annenpartUttakPeriode2 = AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(9), fh.plusWeeks(10).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), MØDREKVOTE, new Trekkdager(5), Utbetalingsgrad.HUNDRED)) - .innvilget(true) - .flerbarnsdager(true) - .samtidigUttak(true) - .build(); - var annenpartUttakPeriode3 = AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(10), fh.plusWeeks(11).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), MØDREKVOTE, new Trekkdager(5), Utbetalingsgrad.HUNDRED)) - .innvilget(true) - .flerbarnsdager(true) - .samtidigUttak(false) - .build(); - var annenpartUttakPeriode4 = AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(11), fh.plusWeeks(12).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), MØDREKVOTE, new Trekkdager(5), Utbetalingsgrad.HUNDRED)) - .innvilget(true) - .flerbarnsdager(false) - .samtidigUttak(false) - .build(); - var grunnlag = basicGrunnlagFar(fh).annenPart(new AnnenPart.Builder().uttaksperiode(annenpartUttakPeriode1) - .uttaksperiode(annenpartUttakPeriode2) - .uttaksperiode(annenpartUttakPeriode3) - .uttaksperiode(annenpartUttakPeriode4)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode( - oppgittPeriode(FEDREKVOTE, fh.plusWeeks(8), fh.plusWeeks(17).minusDays(1), true, new SamtidigUttaksprosent(100)))) - .kontoer(new Kontoer.Builder().flerbarnsdager(40) - .konto(konto(MØDREKVOTE, 100)) - .konto(konto(FELLESPERIODE, 100)) - .konto(konto(FEDREKVOTE, 100))); + var annenpartUttakPeriode1 = + AnnenpartUttakPeriode.Builder.uttak(fh, fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + MØDREKVOTE, + new Trekkdager(30), + Utbetalingsgrad.HUNDRED)) + .innvilget(true) + .build(); + var annenpartUttakPeriode2 = + AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(9), fh.plusWeeks(10).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + MØDREKVOTE, + new Trekkdager(5), + Utbetalingsgrad.HUNDRED)) + .innvilget(true) + .flerbarnsdager(true) + .samtidigUttak(true) + .build(); + var annenpartUttakPeriode3 = + AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(10), fh.plusWeeks(11).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + MØDREKVOTE, + new Trekkdager(5), + Utbetalingsgrad.HUNDRED)) + .innvilget(true) + .flerbarnsdager(true) + .samtidigUttak(false) + .build(); + var annenpartUttakPeriode4 = + AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(11), fh.plusWeeks(12).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + MØDREKVOTE, + new Trekkdager(5), + Utbetalingsgrad.HUNDRED)) + .innvilget(true) + .flerbarnsdager(false) + .samtidigUttak(false) + .build(); + var grunnlag = + basicGrunnlagFar(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode(annenpartUttakPeriode1) + .uttaksperiode(annenpartUttakPeriode2) + .uttaksperiode(annenpartUttakPeriode3) + .uttaksperiode(annenpartUttakPeriode4)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fh.plusWeeks(8), + fh.plusWeeks(17).minusDays(1), + true, + new SamtidigUttaksprosent(100)))) + .kontoer( + new Kontoer.Builder() + .flerbarnsdager(40) + .konto(konto(MØDREKVOTE, 100)) + .konto(konto(FELLESPERIODE, 100)) + .konto(konto(FEDREKVOTE, 100))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(6); - //Siste periode knekkes og siste 5 dagene går til manuell pga tom for flerbarnsdager - assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(resultat.get(5).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); - assertThat(resultat.get(5).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); - //5 dager over flerbarns-kvoten. Dette er pga vi ikke skal dobbelt trekke flerbarnsdager i perioder der begge har oppgitt flerbarnsdager - assertThat(resultat.get(5).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(5)); + // Siste periode knekkes og siste 5 dagene går til manuell pga tom for flerbarnsdager + assertThat(resultat.get(5).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(resultat.get(5).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(resultat.get(5).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); + // 5 dager over flerbarns-kvoten. Dette er pga vi ikke skal dobbelt trekke flerbarnsdager i + // perioder der begge har oppgitt flerbarnsdager + assertThat(resultat.get(5).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(5)); } @Test void skal_ikke_trekke_dobbelt_flerbarnsdager_når_begge_foreldre_oppgir_flerbarnsdager() { var fh = LocalDate.of(2022, 4, 1); - var annenpartUttakPeriode1 = AnnenpartUttakPeriode.Builder.uttak(fh, fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), MØDREKVOTE, new Trekkdager(30), Utbetalingsgrad.HUNDRED)) - .innvilget(true) - .build(); - var annenpartUttakPeriode2 = AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(9), fh.plusWeeks(10).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), MØDREKVOTE, new Trekkdager(5), Utbetalingsgrad.HUNDRED)) - .innvilget(true) - .flerbarnsdager(true) - .samtidigUttak(false) - .build(); - var grunnlag = basicGrunnlagFar(fh).annenPart( - new AnnenPart.Builder().uttaksperiode(annenpartUttakPeriode1).uttaksperiode(annenpartUttakPeriode2)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode( - oppgittPeriode(FEDREKVOTE, fh.plusWeeks(8), fh.plusWeeks(15).minusDays(1), true, new SamtidigUttaksprosent(100)))) - .kontoer(new Kontoer.Builder().flerbarnsdager(34) - .konto(konto(MØDREKVOTE, 100)) - .konto(konto(FELLESPERIODE, 100)) - .konto(konto(FEDREKVOTE, 100))); + var annenpartUttakPeriode1 = + AnnenpartUttakPeriode.Builder.uttak(fh, fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + MØDREKVOTE, + new Trekkdager(30), + Utbetalingsgrad.HUNDRED)) + .innvilget(true) + .build(); + var annenpartUttakPeriode2 = + AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(9), fh.plusWeeks(10).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + MØDREKVOTE, + new Trekkdager(5), + Utbetalingsgrad.HUNDRED)) + .innvilget(true) + .flerbarnsdager(true) + .samtidigUttak(false) + .build(); + var grunnlag = + basicGrunnlagFar(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode(annenpartUttakPeriode1) + .uttaksperiode(annenpartUttakPeriode2)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fh.plusWeeks(8), + fh.plusWeeks(15).minusDays(1), + true, + new SamtidigUttaksprosent(100)))) + .kontoer( + new Kontoer.Builder() + .flerbarnsdager(34) + .konto(konto(MØDREKVOTE, 100)) + .konto(konto(FELLESPERIODE, 100)) + .konto(konto(FEDREKVOTE, 100))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - //Siste periode knekkes og siste 1 dagene går til manuell pga tom for flerbarnsdager - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); - assertThat(resultat.get(3).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); - assertThat(resultat.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(1)); + // Siste periode knekkes og siste 1 dagene går til manuell pga tom for flerbarnsdager + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN); + assertThat(resultat.get(3).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.STØNADSKONTO_TOM); + assertThat(resultat.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(1)); } @Test void overlappende_gradering_avslås_i_berørt_selv_om_samlet_under_100_prosent_uttak() { var fh = LocalDate.of(2022, 4, 1); - var grunnlag = basicGrunnlagMor(fh).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1)) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), FEDREKVOTE, new Trekkdager(5), new Utbetalingsgrad(30))) - .innvilget(true) - .build())) - .behandling(morBehandling().berørtBehandling(true)) - .søknad(søknad(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(MØDREKVOTE, fh, fh.plusWeeks(6).minusDays(1))) - .oppgittPeriode(gradertoppgittPeriode(MØDREKVOTE, fh.plusWeeks(6), fh.plusWeeks(7).minusDays(1), BigDecimal.valueOf(30), - Set.of(ARBEIDSFORHOLD)))); + var grunnlag = + basicGrunnlagMor(fh) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1)) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + FEDREKVOTE, + new Trekkdager(5), + new Utbetalingsgrad(30))) + .innvilget(true) + .build())) + .behandling(morBehandling().berørtBehandling(true)) + .søknad( + søknad(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fh, + fh.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + gradertoppgittPeriode( + MØDREKVOTE, + fh.plusWeeks(6), + fh.plusWeeks(7).minusDays(1), + BigDecimal.valueOf(30), + Set.of(ARBEIDSFORHOLD)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); } - private AnnenpartUttakPeriode annenpartPeriodeOpphold(LocalDate fom, LocalDate tom, OppholdÅrsak oppholdÅrsak) { - return AnnenpartUttakPeriode.Builder.opphold(fom, tom, oppholdÅrsak).innvilget(true).build(); + private AnnenpartUttakPeriode annenpartPeriodeOpphold( + LocalDate fom, LocalDate tom, OppholdÅrsak oppholdÅrsak) { + return AnnenpartUttakPeriode.Builder.opphold(fom, tom, oppholdÅrsak) + .innvilget(true) + .build(); } - private AnnenpartUttakPeriode annenpartPeriodeInnvilget(LocalDate fom, LocalDate tom, Stønadskontotype stønadskontotype, Trekkdager trekkdager) { + private AnnenpartUttakPeriode annenpartPeriodeInnvilget( + LocalDate fom, + LocalDate tom, + Stønadskontotype stønadskontotype, + Trekkdager trekkdager) { return AnnenpartUttakPeriode.Builder.uttak(fom, tom) - .innvilget(true) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(forFrilans(), stønadskontotype, trekkdager, Utbetalingsgrad.HUNDRED)) - .build(); + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + forFrilans(), + stønadskontotype, + trekkdager, + Utbetalingsgrad.HUNDRED)) + .build(); } - private AnnenpartUttakPeriode lagPeriodeForFar(Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom, boolean samtidigUttak) { - return lagPeriode(stønadskontotype, fom, tom, FAR_ARBEIDSFORHOLD, new Trekkdager(Virkedager.beregnAntallVirkedager(fom, tom)), samtidigUttak); + private AnnenpartUttakPeriode lagPeriodeForFar( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + boolean samtidigUttak) { + return lagPeriode( + stønadskontotype, + fom, + tom, + FAR_ARBEIDSFORHOLD, + new Trekkdager(Virkedager.beregnAntallVirkedager(fom, tom)), + samtidigUttak); } - private AnnenpartUttakPeriode lagPeriode(Stønadskontotype stønadskontotype, - LocalDate fom, - LocalDate tom, - AktivitetIdentifikator aktivitet, - Trekkdager trekkdager, - boolean samtidigUttak) { + private AnnenpartUttakPeriode lagPeriode( + Stønadskontotype stønadskontotype, + LocalDate fom, + LocalDate tom, + AktivitetIdentifikator aktivitet, + Trekkdager trekkdager, + boolean samtidigUttak) { return AnnenpartUttakPeriode.Builder.uttak(fom, tom) - .samtidigUttak(samtidigUttak) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(aktivitet, stønadskontotype, trekkdager, Utbetalingsgrad.TEN)) - .build(); + .samtidigUttak(samtidigUttak) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + aktivitet, stønadskontotype, trekkdager, Utbetalingsgrad.TEN)) + .build(); } - - } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TrekkdagerUtregningUtilTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TrekkdagerUtregningUtilTest.java index 283beb04..51116659 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TrekkdagerUtregningUtilTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/TrekkdagerUtregningUtilTest.java @@ -5,12 +5,10 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype; +import org.junit.jupiter.api.Test; class TrekkdagerUtregningUtilTest { @@ -19,11 +17,23 @@ void skal_runde_ned_ved_gradering() { var fom = LocalDate.of(2019, 3, 14); var tom = LocalDate.of(2019, 3, 15); - //periode på 2 dager, 1% gradering + // periode på 2 dager, 1% gradering var arbeidstidsprosent = BigDecimal.valueOf(1); - var periode = OppgittPeriode.forGradering(Stønadskontotype.FORELDREPENGER, fom, tom, arbeidstidsprosent, null, false, Set.of(), null, null, - null, null); - var trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(periode, true, arbeidstidsprosent, null); + var periode = + OppgittPeriode.forGradering( + Stønadskontotype.FORELDREPENGER, + fom, + tom, + arbeidstidsprosent, + null, + false, + Set.of(), + null, + null, + null, + null); + var trekkdager = + TrekkdagerUtregningUtil.trekkdagerFor(periode, true, arbeidstidsprosent, null); assertThat(trekkdager).isEqualTo(new Trekkdager(1.9)); } @@ -31,14 +41,24 @@ void skal_runde_ned_ved_gradering() { @Test void skal_redusere_trekkdager_ved_samtidig_uttak_uten_gradering() { - //10 virkdager + // 10 virkdager var fom = LocalDate.of(2019, 4, 1); var tom = LocalDate.of(2019, 4, 12); var samtidigUttaksprosent = new SamtidigUttaksprosent(50); - var periode = OppgittPeriode.forVanligPeriode(Stønadskontotype.FORELDREPENGER, fom, tom, samtidigUttaksprosent, false, null, null, null, - null); - var trekkdager = TrekkdagerUtregningUtil.trekkdagerFor(periode, false, null, samtidigUttaksprosent); + var periode = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.FORELDREPENGER, + fom, + tom, + samtidigUttaksprosent, + false, + null, + null, + null, + null); + var trekkdager = + TrekkdagerUtregningUtil.trekkdagerFor(periode, false, null, samtidigUttaksprosent); assertThat(trekkdager).isEqualTo(new Trekkdager(5)); } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradMedGraderingUtregningTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradMedGraderingUtregningTest.java index 92b528df..6207e599 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradMedGraderingUtregningTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradMedGraderingUtregningTest.java @@ -5,14 +5,12 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; +import org.junit.jupiter.api.Test; class UtbetalingsgradMedGraderingUtregningTest { @@ -22,17 +20,31 @@ void toArbeidsforholdMedEnGradertGirRedusertUtbetalingsgrad() { var aktivitet2 = AktivitetIdentifikator.forFrilans(); var arbeidstidsprosent = BigDecimal.valueOf(20); - var periode = OppgittPeriode.forGradering(Stønadskontotype.FEDREKVOTE, LocalDate.now(), LocalDate.now().plusWeeks(1), arbeidstidsprosent, - null, false, Set.of(aktivitet1), null, null, null, null); + var periode = + OppgittPeriode.forGradering( + Stønadskontotype.FEDREKVOTE, + LocalDate.now(), + LocalDate.now().plusWeeks(1), + arbeidstidsprosent, + null, + false, + Set.of(aktivitet1), + null, + null, + null, + null); var utregningForAktivitet1 = utregning(aktivitet1, periode); var utregningForAktivitet2 = utregning(aktivitet2, periode); - assertThat(utregningForAktivitet1.resultat()).isEqualTo(Utbetalingsgrad.FULL.subtract(arbeidstidsprosent)); + assertThat(utregningForAktivitet1.resultat()) + .isEqualTo(Utbetalingsgrad.FULL.subtract(arbeidstidsprosent)); assertThat(utregningForAktivitet2.resultat()).isEqualTo(Utbetalingsgrad.FULL); } - private UtbetalingsgradMedGraderingUtregning utregning(AktivitetIdentifikator aktivitetIdentifikator, OppgittPeriode periode) { - return new UtbetalingsgradMedGraderingUtregning(periode, aktivitetIdentifikator, SamtidigUttaksprosent.ZERO); + private UtbetalingsgradMedGraderingUtregning utregning( + AktivitetIdentifikator aktivitetIdentifikator, OppgittPeriode periode) { + return new UtbetalingsgradMedGraderingUtregning( + periode, aktivitetIdentifikator, SamtidigUttaksprosent.ZERO); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradOrkestreringTest.java index 63858214..5df0a2ec 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradOrkestreringTest.java @@ -12,9 +12,6 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Datoer; @@ -26,6 +23,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UtsettelseÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; class UtbetalingsgradOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @@ -33,74 +31,133 @@ class UtbetalingsgradOrkestreringTest extends FastsettePerioderRegelOrkestrering void tom_for_dager_skal_gi_null_utbetaling() { var fødselsdato = LocalDate.of(2018, 1, 1); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)); - var mødrekvote = oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(20).minusDays(1)); - var grunnlag = basicGrunnlag(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)); + var mødrekvote = + oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(20).minusDays(1)); + var grunnlag = + basicGrunnlag(fødselsdato).søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote)); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(4); var up0 = perioder.get(0).uttakPeriode(); - verifiserPeriode(up0, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), INNVILGET, FORELDREPENGER_FØR_FØDSEL); + verifiserPeriode( + up0, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + INNVILGET, + FORELDREPENGER_FØR_FØDSEL); assertThat(up0.getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); var up1 = perioder.get(1).uttakPeriode(); - verifiserPeriode(up1, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), INNVILGET, MØDREKVOTE); + verifiserPeriode( + up1, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), INNVILGET, MØDREKVOTE); assertThat(up1.getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); var up2 = perioder.get(2).uttakPeriode(); - verifiserPeriode(up2, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), INNVILGET, MØDREKVOTE); + verifiserPeriode( + up2, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + INNVILGET, + MØDREKVOTE); assertThat(up2.getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); var up3 = perioder.get(3).uttakPeriode(); - verifiserManuellBehandlingPeriode(up3, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(20).minusDays(1), MØDREKVOTE, - IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, Manuellbehandlingårsak.STØNADSKONTO_TOM); + verifiserManuellBehandlingPeriode( + up3, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(20).minusDays(1), + MØDREKVOTE, + IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN, + Manuellbehandlingårsak.STØNADSKONTO_TOM); assertThat(up3.getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - } @Test void gyldig_utsettelse_gir_ingen_utbetaling() { var fødselsdato = LocalDate.of(2018, 1, 1); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)); - var mødrekvote = oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1)); - var utsettelseFellesperiode = utsettelsePeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), UtsettelseÅrsak.FERIE, - null); - var fellesperiode = oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(14).minusDays(1)); - - //Krever sammenhengende pga søkt om ferie som innvilges, dette er gamle regler - var grunnlag = basicGrunnlag(fødselsdato).behandling(morBehandling().kreverSammenhengendeUttak(true)) - .søknad(new Søknad.Builder().oppgittPeriode(fpff) - .oppgittPeriode(mødrekvote) - .oppgittPeriode(utsettelseFellesperiode) - .oppgittPeriode(fellesperiode) - .type(Søknadstype.FØDSEL)); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)); + var mødrekvote = + oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1)); + var utsettelseFellesperiode = + utsettelsePeriode( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + UtsettelseÅrsak.FERIE, + null); + var fellesperiode = + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(12), + fødselsdato.plusWeeks(14).minusDays(1)); + + // Krever sammenhengende pga søkt om ferie som innvilges, dette er gamle regler + var grunnlag = + basicGrunnlag(fødselsdato) + .behandling(morBehandling().kreverSammenhengendeUttak(true)) + .søknad( + new Søknad.Builder() + .oppgittPeriode(fpff) + .oppgittPeriode(mødrekvote) + .oppgittPeriode(utsettelseFellesperiode) + .oppgittPeriode(fellesperiode) + .type(Søknadstype.FØDSEL)); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(5); var up0 = perioder.get(0).uttakPeriode(); - verifiserPeriode(up0, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), INNVILGET, FORELDREPENGER_FØR_FØDSEL); + verifiserPeriode( + up0, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + INNVILGET, + FORELDREPENGER_FØR_FØDSEL); assertThat(up0.getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); var up1 = perioder.get(1).uttakPeriode(); - verifiserPeriode(up1, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), INNVILGET, MØDREKVOTE); + verifiserPeriode( + up1, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), INNVILGET, MØDREKVOTE); assertThat(up1.getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); var up2 = perioder.get(2).uttakPeriode(); - verifiserPeriode(up2, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), INNVILGET, MØDREKVOTE); + verifiserPeriode( + up2, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + INNVILGET, + MØDREKVOTE); assertThat(up2.getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); var up3 = perioder.get(3).uttakPeriode(); assertThat(up3.getUtsettelseÅrsak()).isEqualTo(UtsettelseÅrsak.FERIE); - verifiserPeriode(up3, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), INNVILGET, null); + verifiserPeriode( + up3, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + INNVILGET, + null); assertThat(up3.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); assertThat(up3.getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); var up4 = perioder.get(4).uttakPeriode(); - verifiserPeriode(up4, fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(14).minusDays(1), INNVILGET, FELLESPERIODE); + verifiserPeriode( + up4, + fødselsdato.plusWeeks(12), + fødselsdato.plusWeeks(14).minusDays(1), + INNVILGET, + FELLESPERIODE); assertThat(up4.getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); } @@ -110,31 +167,55 @@ void gradering_gir_redusert_utbetalingsgrad() { var aktiviteter = Set.of(ARBEIDSFORHOLD_1); var grunnlag = basicGrunnlag(); leggPåKvoter(grunnlag); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)); - var mødrekvote = oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); - var gradertFellesperiode = gradertoppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), - BigDecimal.valueOf(20), aktiviteter); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)); + var mødrekvote = + oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); + var gradertFellesperiode = + gradertoppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + BigDecimal.valueOf(20), + aktiviteter); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .inngangsvilkår(oppfyltAlleVilkår()) - .søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote, gradertFellesperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)).arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))); + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .inngangsvilkår(oppfyltAlleVilkår()) + .søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote, gradertFellesperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)) + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); var up0 = perioder.get(0).uttakPeriode(); - verifiserPeriode(up0, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1), INNVILGET, FORELDREPENGER_FØR_FØDSEL); + verifiserPeriode( + up0, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1), + INNVILGET, + FORELDREPENGER_FØR_FØDSEL); assertThat(up0.getUtbetalingsgrad(ARBEIDSFORHOLD_1)).isEqualTo(Utbetalingsgrad.HUNDRED); var up1 = perioder.get(1).uttakPeriode(); - verifiserPeriode(up1, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), INNVILGET, MØDREKVOTE); + verifiserPeriode( + up1, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), INNVILGET, MØDREKVOTE); assertThat(up1.getUtbetalingsgrad(ARBEIDSFORHOLD_1)).isEqualTo(Utbetalingsgrad.HUNDRED); var up2 = perioder.get(2).uttakPeriode(); - verifiserPeriode(up2, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), INNVILGET, FELLESPERIODE); + verifiserPeriode( + up2, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + INNVILGET, + FELLESPERIODE); assertThat(up2.getUtbetalingsgrad(ARBEIDSFORHOLD_1)).isEqualTo(new Utbetalingsgrad(80)); } @@ -144,29 +225,46 @@ void gradering_gir_redusert_utbetalingsgrad_avrunding() { var aktivititeter = Set.of(ARBEIDSFORHOLD_1, ARBEIDSFORHOLD_2); var grunnlag = basicGrunnlag(); leggPåKvoter(grunnlag); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)); - var mødrekvote = oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); - var gradertFellesperiode = gradertoppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), - new BigDecimal("17.55"), aktivititeter); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)); + var mødrekvote = + oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)); + var gradertFellesperiode = + gradertoppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + new BigDecimal("17.55"), + aktivititeter); grunnlag.datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(beggeRett()) - .behandling(morBehandling()) - .søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote, gradertFellesperiode)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)).arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))) - .inngangsvilkår(oppfyltAlleVilkår()); + .rettOgOmsorg(beggeRett()) + .behandling(morBehandling()) + .søknad(søknad(Søknadstype.FØDSEL, fpff, mødrekvote, gradertFellesperiode)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1)) + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_2))) + .inngangsvilkår(oppfyltAlleVilkår()); var perioder = fastsettPerioder(grunnlag); var uttakPeriode = perioder.get(2).uttakPeriode(); - assertThat(uttakPeriode.getUtbetalingsgrad(ARBEIDSFORHOLD_1)).isEqualTo(new Utbetalingsgrad(82.45)); - assertThat(uttakPeriode.getUtbetalingsgrad(ARBEIDSFORHOLD_2)).isEqualTo(new Utbetalingsgrad(82.45)); + assertThat(uttakPeriode.getUtbetalingsgrad(ARBEIDSFORHOLD_1)) + .isEqualTo(new Utbetalingsgrad(82.45)); + assertThat(uttakPeriode.getUtbetalingsgrad(ARBEIDSFORHOLD_2)) + .isEqualTo(new Utbetalingsgrad(82.45)); } private RegelGrunnlag.Builder leggPåKvoter(RegelGrunnlag.Builder builder) { - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(MØDREKVOTE, 50)) - .konto(konto(FEDREKVOTE, 50)) - .konto(konto(FELLESPERIODE, 130)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 50)) + .konto(konto(FEDREKVOTE, 50)) + .konto(konto(FELLESPERIODE, 130)); return builder.kontoer(kontoer); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradSamtidigUttakUtregningTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradSamtidigUttakUtregningTest.java index e1012d51..72748df2 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradSamtidigUttakUtregningTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradSamtidigUttakUtregningTest.java @@ -1,21 +1,21 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode; - import static org.assertj.core.api.Assertions.assertThat; import java.math.BigDecimal; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; +import org.junit.jupiter.api.Test; class UtbetalingsgradSamtidigUttakUtregningTest { @Test void hvis_ugradert_periode_skal_utbetalingsgrad_være_lik_samtidig_uttaksprosent() { var samtidigUttaksprosent = SamtidigUttaksprosent.TEN; - var resultat = new UtbetalingsgradSamtidigUttakUtregning(samtidigUttaksprosent, null, SamtidigUttaksprosent.ZERO).resultat(); + var resultat = + new UtbetalingsgradSamtidigUttakUtregning( + samtidigUttaksprosent, null, SamtidigUttaksprosent.ZERO) + .resultat(); assertThat(resultat.decimalValue()).isEqualTo(samtidigUttaksprosent.decimalValue()); } @@ -24,9 +24,15 @@ class UtbetalingsgradSamtidigUttakUtregningTest { void hvis_gradert_periode_skal_utbetalingsgrad_være_gradering_arbeidstidsprosent() { var samtidigUttaksprosent = SamtidigUttaksprosent.TEN; var graderingArbeidstidsprosent = BigDecimal.ONE; - var resultat = new UtbetalingsgradSamtidigUttakUtregning(samtidigUttaksprosent, graderingArbeidstidsprosent, - SamtidigUttaksprosent.ZERO).resultat(); - - assertThat(resultat).isEqualByComparingTo(Utbetalingsgrad.HUNDRED.subtract(graderingArbeidstidsprosent)); + var resultat = + new UtbetalingsgradSamtidigUttakUtregning( + samtidigUttaksprosent, + graderingArbeidstidsprosent, + SamtidigUttaksprosent.ZERO) + .resultat(); + + assertThat(resultat) + .isEqualByComparingTo( + Utbetalingsgrad.HUNDRED.subtract(graderingArbeidstidsprosent)); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradUtenGraderingUtregningTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradUtenGraderingUtregningTest.java index d23a5b54..3160a755 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradUtenGraderingUtregningTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtbetalingsgradUtenGraderingUtregningTest.java @@ -1,12 +1,10 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode; - import static org.assertj.core.api.Assertions.assertThat; -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.SamtidigUttaksprosent; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; +import org.junit.jupiter.api.Test; class UtbetalingsgradUtenGraderingUtregningTest { diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseDelregelSammenhengendeUttakTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseDelregelSammenhengendeUttakTest.java index 37056fbd..62e32e2d 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseDelregelSammenhengendeUttakTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseDelregelSammenhengendeUttakTest.java @@ -1,15 +1,11 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode; - import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.DelRegelTestUtil.kjørRegel; import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.DelRegelTestUtil.utsettelsePeriode; import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.DokumentasjonVurdering.INNLEGGELSE_BARN_GODKJENT; import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeidsforhold; @@ -26,31 +22,51 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UtsettelseÅrsak; +import org.junit.jupiter.api.Test; class UtsettelseDelregelSammenhengendeUttakTest { - @Test void UT1101_ferie_innenfor_seks_første_uker() { var fødselsdato = LocalDate.of(2019, 7, 1); - var periode = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(5), UtsettelseÅrsak.FERIE, - fødselsdato.minusWeeks(1), null, null, null); // innenfor seks uker etter fødsel + var periode = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(5), + UtsettelseÅrsak.FERIE, + fødselsdato.minusWeeks(1), + null, + null, + null); // innenfor seks uker etter fødsel var aktivitetIdentifikator = AktivitetIdentifikator.forFrilans(); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(100).type(Stønadskontotype.MØDREKVOTE)); - var grunnlag = new RegelGrunnlag.Builder().arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) - .kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(periode)) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(fødselsdato)) - .inngangsvilkår(oppfylt()) - .build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(100) + .type(Stønadskontotype.MØDREKVOTE)); + var grunnlag = + new RegelGrunnlag.Builder() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(periode)) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(fødselsdato)) + .inngangsvilkår(oppfylt()) + .build(); var resultat = kjørRegel(periode, grunnlag); assertThat(resultat.sluttpunktId()).isEqualTo("UT1101"); assertThat(resultat.oppfylt()).isFalse(); - assertThat(resultat.getManuellbehandlingårsak()).isNull(); // ikke satt ved automatisk behandling + assertThat(resultat.getManuellbehandlingårsak()) + .isNull(); // ikke satt ved automatisk behandling assertThat(resultat.trekkDagerFraSaldo()).isTrue(); assertThat(resultat.skalUtbetale()).isTrue(); } @@ -58,20 +74,36 @@ class UtsettelseDelregelSammenhengendeUttakTest { @Test void UT1124_fødsel_mer_enn_7_uker_før_termin() { var fom = LocalDate.of(2019, 7, 1); - var periode = utsettelsePeriode(fom, fom, UtsettelseÅrsak.INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT); + var periode = + utsettelsePeriode( + fom, fom, UtsettelseÅrsak.INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT); var aktivitetIdentifikator = AktivitetIdentifikator.forFrilans(); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(100).type(Stønadskontotype.MØDREKVOTE)); - var grunnlag = new RegelGrunnlag.Builder().arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) - .kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(periode)) - .behandling(morBehandling()) - .revurdering(new Revurdering.Builder().endringsdato(fom)) - .rettOgOmsorg(beggeRett()) - .datoer(new Datoer.Builder() - //Nok til å få prematuruker - .fødsel(fom).termin(fom.plusWeeks(8))) - .inngangsvilkår(oppfylt()) - .build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(100) + .type(Stønadskontotype.MØDREKVOTE)); + var grunnlag = + new RegelGrunnlag.Builder() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(periode)) + .behandling(morBehandling()) + .revurdering(new Revurdering.Builder().endringsdato(fom)) + .rettOgOmsorg(beggeRett()) + .datoer( + new Datoer.Builder() + // Nok til å få prematuruker + .fødsel(fom) + .termin(fom.plusWeeks(8))) + .inngangsvilkår(oppfylt()) + .build(); var resultat = kjørRegel(periode, grunnlag); @@ -81,20 +113,39 @@ class UtsettelseDelregelSammenhengendeUttakTest { @Test void UT1120_fødsel_mer_enn_7_uker_før_termin_perioden_ligger_etter_termin() { var fom = LocalDate.of(2019, 7, 1); - var periode = utsettelsePeriode(fom.plusWeeks(10), fom.plusWeeks(10), UtsettelseÅrsak.INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT); + var periode = + utsettelsePeriode( + fom.plusWeeks(10), + fom.plusWeeks(10), + UtsettelseÅrsak.INNLAGT_BARN, + INNLEGGELSE_BARN_GODKJENT); var aktivitetIdentifikator = AktivitetIdentifikator.forFrilans(); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(100).type(Stønadskontotype.MØDREKVOTE)); - var grunnlag = new RegelGrunnlag.Builder().arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) - .kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(periode)) - .behandling(morBehandling()) - .revurdering(new Revurdering.Builder().endringsdato(fom)) - .rettOgOmsorg(beggeRett()) - .datoer(new Datoer.Builder() - //Nok til å få prematuruker - .fødsel(fom).termin(fom.plusWeeks(8))) - .inngangsvilkår(oppfylt()) - .build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(100) + .type(Stønadskontotype.MØDREKVOTE)); + var grunnlag = + new RegelGrunnlag.Builder() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(periode)) + .behandling(morBehandling()) + .revurdering(new Revurdering.Builder().endringsdato(fom)) + .rettOgOmsorg(beggeRett()) + .datoer( + new Datoer.Builder() + // Nok til å få prematuruker + .fødsel(fom) + .termin(fom.plusWeeks(8))) + .inngangsvilkår(oppfylt()) + .build(); var resultat = kjørRegel(periode, grunnlag); @@ -104,20 +155,36 @@ class UtsettelseDelregelSammenhengendeUttakTest { @Test void UT1120_fødsel_mindre_enn_7_uker_før_termin() { var fom = LocalDate.of(2019, 7, 1); - var periode = utsettelsePeriode(fom, fom, UtsettelseÅrsak.INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT); + var periode = + utsettelsePeriode( + fom, fom, UtsettelseÅrsak.INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT); var aktivitetIdentifikator = AktivitetIdentifikator.forFrilans(); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().trekkdager(100).type(Stønadskontotype.MØDREKVOTE)); - var grunnlag = new RegelGrunnlag.Builder().arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) - .kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(periode)) - .behandling(morBehandling()) - .revurdering(new Revurdering.Builder().endringsdato(fom)) - .rettOgOmsorg(beggeRett()) - .datoer(new Datoer.Builder() - //Nok til å få prematuruker - .fødsel(fom).termin(fom)) - .inngangsvilkår(oppfylt()) - .build(); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(100) + .type(Stønadskontotype.MØDREKVOTE)); + var grunnlag = + new RegelGrunnlag.Builder() + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(aktivitetIdentifikator))) + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(periode)) + .behandling(morBehandling()) + .revurdering(new Revurdering.Builder().endringsdato(fom)) + .rettOgOmsorg(beggeRett()) + .datoer( + new Datoer.Builder() + // Nok til å få prematuruker + .fødsel(fom) + .termin(fom)) + .inngangsvilkår(oppfylt()) + .build(); var resultat = kjørRegel(periode, grunnlag); @@ -133,6 +200,10 @@ private Behandling.Builder morBehandling() { } private Inngangsvilkår.Builder oppfylt() { - return new Inngangsvilkår.Builder().fødselOppfylt(true).adopsjonOppfylt(true).foreldreansvarnOppfylt(true).opptjeningOppfylt(true); + return new Inngangsvilkår.Builder() + .fødselOppfylt(true) + .adopsjonOppfylt(true) + .foreldreansvarnOppfylt(true) + .opptjeningOppfylt(true); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseOrkestreringTest.java index 4e72d8f2..b6cfc745 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseOrkestreringTest.java @@ -32,11 +32,6 @@ import java.time.LocalDate; import java.util.List; import java.util.Set; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriodeAktivitet; @@ -58,17 +53,36 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.ytelser.Ytelser; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; class UtsettelseOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { @Test - void periode_med_dokumentert_utsettelse_pga_barn_innlagt_innenfor_første_6_ukene_skal_innvilges() { + void + periode_med_dokumentert_utsettelse_pga_barn_innlagt_innenfor_første_6_ukene_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(3).minusDays(1))) - .oppgittPeriode( - utsettelsePeriode(fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(6).minusDays(1), INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(3).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(6).minusDays(1), + INNLAGT_BARN, + INNLEGGELSE_BARN_GODKJENT))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); @@ -84,11 +98,26 @@ class UtsettelseOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB @Test void periode_med_dokumentert_utsettelse_pga_barn_innlagt_etter_første_6_ukene_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode( - utsettelsePeriode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + INNLAGT_BARN, + INNLEGGELSE_BARN_GODKJENT))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); @@ -102,13 +131,29 @@ class UtsettelseOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB } @Test - void periode_med_dokumentert_utsettelse_pga_søker_innlagt_innenfor_første_6_ukene_skal_innvilges() { + void + periode_med_dokumentert_utsettelse_pga_søker_innlagt_innenfor_første_6_ukene_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(3).minusDays(1))) - .oppgittPeriode( - utsettelsePeriode(fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(6).minusDays(1), INNLAGT_SØKER, INNLEGGELSE_SØKER_GODKJENT))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(3).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(6).minusDays(1), + INNLAGT_SØKER, + INNLEGGELSE_SØKER_GODKJENT))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); @@ -122,13 +167,29 @@ class UtsettelseOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB } @Test - void periode_med_dokumentert_utsettelse_pga_søker_innlagt_etter_første_6_ukene_skal_innvilges() { + void + periode_med_dokumentert_utsettelse_pga_søker_innlagt_etter_første_6_ukene_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode( - utsettelsePeriode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), INNLAGT_SØKER, INNLEGGELSE_SØKER_GODKJENT))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + INNLAGT_SØKER, + INNLEGGELSE_SØKER_GODKJENT))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); @@ -144,11 +205,26 @@ class UtsettelseOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB @Test void periode_med_dokumentert_utsettelse_pga_søker_syk_innenfor_første_6_ukene_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(3).minusDays(1))) - .oppgittPeriode( - utsettelsePeriode(fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(6).minusDays(1), SYKDOM_SKADE, SYKDOM_SØKER_GODKJENT))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(3).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(6).minusDays(1), + SYKDOM_SKADE, + SYKDOM_SØKER_GODKJENT))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); @@ -164,11 +240,26 @@ class UtsettelseOrkestreringTest extends FastsettePerioderRegelOrkestreringTestB @Test void periode_med_dokumentert_utsettelse_pga_søker_syk_etter_første_6_ukene_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode( - utsettelsePeriode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), SYKDOM_SKADE, SYKDOM_SØKER_GODKJENT))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + SYKDOM_SKADE, + SYKDOM_SØKER_GODKJENT))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); @@ -186,9 +277,21 @@ void periode_med_utsettelse_pga_arbeid_etter_uke_6_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); var utsettelseFom = fødselsdato.plusWeeks(6); var utsettelseTom = fødselsdato.plusWeeks(10).minusDays(1); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(utsettelseFom, utsettelseTom, ARBEID, null))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + utsettelseFom, + utsettelseTom, + ARBEID, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); @@ -206,9 +309,21 @@ void periode_med_utsettelse_pga_arbeid_etter_uke_6_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); var utsettelseFom = fødselsdato.plusWeeks(4); var utsettelseTom = fødselsdato.plusWeeks(10).minusDays(1); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(4).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(utsettelseFom, utsettelseTom, ARBEID, null))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(4).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + utsettelseFom, + utsettelseTom, + ARBEID, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); @@ -216,7 +331,8 @@ void periode_med_utsettelse_pga_arbeid_etter_uke_6_skal_innvilges() { var innenfor6Uker = resultat.get(1).uttakPeriode(); assertThat(innenfor6Uker.getFom()).isEqualTo(utsettelseFom); assertThat(innenfor6Uker.getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - assertThat(innenfor6Uker.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(innenfor6Uker.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); var etter6Uker = resultat.get(2).uttakPeriode(); assertThat(etter6Uker.getFom()).isEqualTo(fødselsdato.plusWeeks(6)); @@ -229,9 +345,21 @@ void periode_med_utsettelse_pga_ferie_etter_uke_6_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); var utsettelseFom = fødselsdato.plusWeeks(6); var utsettelseTom = fødselsdato.plusWeeks(10).minusDays(1); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(utsettelseFom, utsettelseTom, FERIE, null))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + utsettelseFom, + utsettelseTom, + FERIE, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); @@ -248,10 +376,21 @@ void periode_med_utsettelse_pga_ferie_etter_uke_6_skal_innvilges() { @Test void skal_ikke_utlede_stønadskontotype_ved_innvilgelse_av_utsettelse() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(4).minusDays(1))) - .oppgittPeriode( - utsettelsePeriode(fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(6).minusDays(1), INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(4).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(6).minusDays(1), + INNLAGT_BARN, + INNLEGGELSE_BARN_GODKJENT))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); @@ -264,46 +403,85 @@ void periode_med_utsettelse_pga_ferie_etter_uke_6_skal_innvilges() { @Test void periode_med_utsettelse_sykdom_som_ikke_er_dokumentert_skal_avslås() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(2).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(2), fødselsdato.plusWeeks(3).minusDays(1), SYKDOM_SKADE, null)) - .oppgittPeriode( - utsettelsePeriode(fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(12).minusDays(1), SYKDOM_SKADE, SYKDOM_SØKER_GODKJENT))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(2).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(2), + fødselsdato.plusWeeks(3).minusDays(1), + SYKDOM_SKADE, + null)) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(12).minusDays(1), + SYKDOM_SKADE, + SYKDOM_SØKER_GODKJENT))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); var utsettelseFørsteUkeneSomIkkeErDokumentert = resultat.get(1).uttakPeriode(); - assertThat(utsettelseFørsteUkeneSomIkkeErDokumentert.getUtsettelseÅrsak()).isEqualTo(SYKDOM_SKADE); - assertThat(utsettelseFørsteUkeneSomIkkeErDokumentert.getFom()).isEqualTo(fødselsdato.plusWeeks(2)); - assertThat(utsettelseFørsteUkeneSomIkkeErDokumentert.getTom()).isEqualTo(fødselsdato.plusWeeks(3).minusDays(1)); - assertThat(utsettelseFørsteUkeneSomIkkeErDokumentert.getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(utsettelseFørsteUkeneSomIkkeErDokumentert.getUtsettelseÅrsak()) + .isEqualTo(SYKDOM_SKADE); + assertThat(utsettelseFørsteUkeneSomIkkeErDokumentert.getFom()) + .isEqualTo(fødselsdato.plusWeeks(2)); + assertThat(utsettelseFørsteUkeneSomIkkeErDokumentert.getTom()) + .isEqualTo(fødselsdato.plusWeeks(3).minusDays(1)); + assertThat(utsettelseFørsteUkeneSomIkkeErDokumentert.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); var utsettelseFørsteUkeneSomErDokumentert = resultat.get(2).uttakPeriode(); - assertThat(utsettelseFørsteUkeneSomErDokumentert.getUtsettelseÅrsak()).isEqualTo(SYKDOM_SKADE); - assertThat(utsettelseFørsteUkeneSomErDokumentert.getFom()).isEqualTo(fødselsdato.plusWeeks(3)); - assertThat(utsettelseFørsteUkeneSomErDokumentert.getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); - assertThat(utsettelseFørsteUkeneSomErDokumentert.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(utsettelseFørsteUkeneSomErDokumentert.getUtsettelseÅrsak()) + .isEqualTo(SYKDOM_SKADE); + assertThat(utsettelseFørsteUkeneSomErDokumentert.getFom()) + .isEqualTo(fødselsdato.plusWeeks(3)); + assertThat(utsettelseFørsteUkeneSomErDokumentert.getTom()) + .isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); + assertThat(utsettelseFørsteUkeneSomErDokumentert.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); var utsettelseEtterFørsteUkeneDokumentert = resultat.get(3).uttakPeriode(); - assertThat(utsettelseEtterFørsteUkeneDokumentert.getUtsettelseÅrsak()).isEqualTo(SYKDOM_SKADE); - assertThat(utsettelseEtterFørsteUkeneDokumentert.getFom()).isEqualTo(fødselsdato.plusWeeks(6)); - assertThat(utsettelseEtterFørsteUkeneDokumentert.getTom()).isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); - assertThat(utsettelseEtterFørsteUkeneDokumentert.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(utsettelseEtterFørsteUkeneDokumentert.getUtsettelseÅrsak()) + .isEqualTo(SYKDOM_SKADE); + assertThat(utsettelseEtterFørsteUkeneDokumentert.getFom()) + .isEqualTo(fødselsdato.plusWeeks(6)); + assertThat(utsettelseEtterFørsteUkeneDokumentert.getTom()) + .isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); + assertThat(utsettelseEtterFørsteUkeneDokumentert.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test void utsettelse_periode_med_ukjent_kontotype_må_settes_til_neste_tilgjengelig() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(4).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(6).minusDays(1), SYKDOM_SKADE, null))); - - //Her skal det gis avslag (mangler dok) og trekke dager, skal velge konto å trekke fra + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(4).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(6).minusDays(1), + SYKDOM_SKADE, + null))); + + // Her skal det gis avslag (mangler dok) og trekke dager, skal velge konto å trekke fra var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - var utsettelse = resultat.get(1).uttakPeriode(); assertThat(utsettelse.getUtsettelseÅrsak()).isEqualTo(SYKDOM_SKADE); assertThat(utsettelse.getFom()).isEqualTo(fødselsdato.plusWeeks(4)); @@ -315,46 +493,78 @@ void periode_med_utsettelse_pga_ferie_etter_uke_6_skal_innvilges() { @Test void pleiepenger_utsettelse_skal_trekke_fra_fellesperiode() { - //Over 7 uker for tidlig, får pleiepenger. Utsettelsen skal avlås og det skal trekkes dager + // Over 7 uker for tidlig, får pleiepenger. Utsettelsen skal avlås og det skal trekkes dager var termindato = LocalDate.of(2019, 9, 1); var fødselsdato = LocalDate.of(2019, 7, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).rettOgOmsorg(beggeRett().harOmsorg(true)) - .datoer(new Datoer.Builder().termin(termindato).fødsel(fødselsdato)) - .søknad(fødselSøknad() - //Starter med pleiepenger - .oppgittPeriode(utsettelsePeriode(fødselsdato, fødselsdato.plusWeeks(4).minusDays(1), INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT)) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(4), termindato))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .rettOgOmsorg(beggeRett().harOmsorg(true)) + .datoer(new Datoer.Builder().termin(termindato).fødsel(fødselsdato)) + .søknad( + fødselSøknad() + // Starter med pleiepenger + .oppgittPeriode( + utsettelsePeriode( + fødselsdato, + fødselsdato.plusWeeks(4).minusDays(1), + INNLAGT_BARN, + INNLEGGELSE_BARN_GODKJENT)) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(4), + termindato))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); assertThat(resultat.get(0).uttakPeriode().getUtsettelseÅrsak()).isEqualTo(INNLAGT_BARN); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isNotZero(); - assertThat(resultat.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isNotZero(); + assertThat(resultat.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(resultat.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FELLESPERIODE); } @Test void pleiepenger_utsettelse_skal_trekke_fra_foreldrepenger() { - //Over 7 uker for tidlig, får pleiepenger. Utsettelsen skal avlås og det skal trekkes dager + // Over 7 uker for tidlig, får pleiepenger. Utsettelsen skal avlås og det skal trekkes dager var termindato = LocalDate.of(2019, 9, 1); var fødselsdato = LocalDate.of(2019, 7, 1); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(100)); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).kontoer(kontoer) - .datoer(new Datoer.Builder().termin(termindato).fødsel(fødselsdato)) - .søknad(fødselSøknad() - //Starter med pleiepenger - .oppgittPeriode(utsettelsePeriode(fødselsdato, termindato.minusDays(1), INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT)) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, termindato, termindato.plusWeeks(10)))); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(100)); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .kontoer(kontoer) + .datoer(new Datoer.Builder().termin(termindato).fødsel(fødselsdato)) + .søknad( + fødselSøknad() + // Starter med pleiepenger + .oppgittPeriode( + utsettelsePeriode( + fødselsdato, + termindato.minusDays(1), + INNLAGT_BARN, + INNLEGGELSE_BARN_GODKJENT)) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + termindato, + termindato.plusWeeks(10)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); assertThat(resultat.get(0).uttakPeriode().getUtsettelseÅrsak()).isEqualTo(INNLAGT_BARN); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isNotZero(); - assertThat(resultat.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isNotZero(); + assertThat(resultat.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(resultat.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); } @@ -362,45 +572,95 @@ void pleiepenger_utsettelse_skal_trekke_fra_foreldrepenger() { void pleiepenger_med_overlappende_uttaksperiode_skal_gå_til_manuell() { var fødselsdato = LocalDate.of(2019, 7, 1); var innleggelse = new PleiepengerPeriode(fødselsdato, fødselsdato.plusWeeks(3), true); - var utenInnleggelse = new PleiepengerPeriode(fødselsdato.plusWeeks(3).plusDays(1), fødselsdato.plusWeeks(6).minusDays(1), false); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)))) - .ytelser(new Ytelser(new Pleiepenger(List.of(innleggelse, utenInnleggelse)))); + var utenInnleggelse = + new PleiepengerPeriode( + fødselsdato.plusWeeks(3).plusDays(1), + fødselsdato.plusWeeks(6).minusDays(1), + false); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)))) + .ytelser( + new Ytelser( + new Pleiepenger(List.of(innleggelse, utenInnleggelse)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); assertThat(resultat.get(0).uttakPeriode().getFom()).isEqualTo(innleggelse.getFom()); - assertThat(resultat.get(0).uttakPeriode().getManuellbehandlingårsak()).isEqualTo( - Manuellbehandlingårsak.OVERLAPPENDE_PLEIEPENGER_MED_INNLEGGELSE); + assertThat(resultat.get(0).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.OVERLAPPENDE_PLEIEPENGER_MED_INNLEGGELSE); assertThat(resultat.get(1).uttakPeriode().getFom()).isEqualTo(utenInnleggelse.getFom()); - assertThat(resultat.get(1).uttakPeriode().getManuellbehandlingårsak()).isEqualTo( - Manuellbehandlingårsak.OVERLAPPENDE_PLEIEPENGER_UTEN_INNLEGGELSE); + assertThat(resultat.get(1).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.OVERLAPPENDE_PLEIEPENGER_UTEN_INNLEGGELSE); } @Test void utsettelse_pga_sykdom_før_søknad_mottatt_dato_skal_innvilges() { - //Mottatt dato skal ikke være relevant for utsettelse første 6 ukene hvis det er dokumentert + // Mottatt dato skal ikke være relevant for utsettelse første 6 ukene hvis det er + // dokumentert var fødselsdato = LocalDate.of(2019, 7, 1); - var utsettelse = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(4), fødselsdato.plusWeeks(6).minusDays(1), SYKDOM_SKADE, - fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(8), null, SYKDOM_SØKER_GODKJENT); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(4).minusDays(1))).oppgittPeriode(utsettelse)); + var utsettelse = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(4), + fødselsdato.plusWeeks(6).minusDays(1), + SYKDOM_SKADE, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(8), + null, + SYKDOM_SØKER_GODKJENT); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(4).minusDays(1))) + .oppgittPeriode(utsettelse)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test - void skal_avslå_periode_hvis_overlapp_med_innvilget_utsettelse_i_tidsperiode_forbeholdt_mor_i_berørt_behandling() { + void + skal_avslå_periode_hvis_overlapp_med_innvilget_utsettelse_i_tidsperiode_forbeholdt_mor_i_berørt_behandling() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagFar(fødselsdato).annenPart( - new AnnenPart.Builder().uttaksperiode(uttak(fødselsdato, fødselsdato.plusWeeks(2).minusDays(1)).build()) - .uttaksperiode(utsettelse(fødselsdato.plusWeeks(2), fødselsdato.plusWeeks(6)).build())) - .behandling(farBehandling().berørtBehandling(true)) - .søknad(fødselSøknad().oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(2), fødselsdato.plusWeeks(4).minusDays(1)))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + uttak( + fødselsdato, + fødselsdato + .plusWeeks(2) + .minusDays(1)) + .build()) + .uttaksperiode( + utsettelse( + fødselsdato.plusWeeks(2), + fødselsdato.plusWeeks(6)) + .build())) + .behandling(farBehandling().berørtBehandling(true)) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(2), + fødselsdato.plusWeeks(4).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(1); @@ -411,13 +671,33 @@ void pleiepenger_utsettelse_skal_trekke_fra_foreldrepenger() { } @Test - void skal_innvilge_periode_hvis_overlapp_med_innvilget_utsettelse_etter_tidsperiode_forbeholdt_mor_i_berørt_behandling() { + void + skal_innvilge_periode_hvis_overlapp_med_innvilget_utsettelse_etter_tidsperiode_forbeholdt_mor_i_berørt_behandling() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicGrunnlagFar(fødselsdato).annenPart( - new AnnenPart.Builder().uttaksperiode(uttak(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)).build()) - .uttaksperiode(utsettelse(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10)).build())) - .behandling(farBehandling().berørtBehandling(true)) - .søknad(fødselSøknad().oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1)))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + uttak( + fødselsdato, + fødselsdato + .plusWeeks(6) + .minusDays(1)) + .build()) + .uttaksperiode( + utsettelse( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10)) + .build())) + .behandling(farBehandling().berørtBehandling(true)) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(1); @@ -426,33 +706,68 @@ void pleiepenger_utsettelse_skal_trekke_fra_foreldrepenger() { assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); } - //FAGSYSTEM-151437 + // FAGSYSTEM-151437 @Test void utsettelse_innvilges_tilbake_i_tid_for_bare_far_har_rett_hvis_mor_er_i_aktivitet() { var fødselsdato = LocalDate.of(2019, 10, 10); - var utsettelse = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(50), ARBEID, fødselsdato.plusWeeks(100), - fødselsdato.plusWeeks(100), MorsAktivitet.UTDANNING, MORS_AKTIVITET_GODKJENT); - var grunnlag = basicGrunnlagFar(fødselsdato).behandling(farBehandling()) - .kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 100))) - .rettOgOmsorg(bareFarRett()) - .søknad(søknad(FØDSEL, utsettelse)); + var utsettelse = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(50), + ARBEID, + fødselsdato.plusWeeks(100), + fødselsdato.plusWeeks(100), + MorsAktivitet.UTDANNING, + MORS_AKTIVITET_GODKJENT); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .behandling(farBehandling()) + .kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 100))) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad(FØDSEL, utsettelse)); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(1); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); } @Test void innvilge_eller_avslå_basert_på_pleiepenger_med_innleggelse() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(3).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(6).minusDays(1), INNLAGT_BARN, null))) - .ytelser( - new Ytelser(new Pleiepenger(Set.of(new PleiepengerPeriode(fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(5).minusDays(1), true))))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(3).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(6).minusDays(1), + INNLAGT_BARN, + null))) + .ytelser( + new Ytelser( + new Pleiepenger( + Set.of( + new PleiepengerPeriode( + fødselsdato.plusWeeks(3), + fødselsdato + .plusWeeks(5) + .minusDays(1), + true))))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); @@ -461,7 +776,8 @@ void utsettelse_innvilges_tilbake_i_tid_for_bare_far_har_rett_hvis_mor_er_i_akti assertThat(innvilgetPeriode.getUtsettelseÅrsak()).isEqualTo(INNLAGT_BARN); assertThat(innvilgetPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(3)); assertThat(innvilgetPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(5).minusDays(1)); - assertThat(innvilgetPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(innvilgetPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); assertThat(innvilgetPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); var manuellPeriode = resultat.get(3).uttakPeriode(); @@ -474,54 +790,95 @@ void utsettelse_innvilges_tilbake_i_tid_for_bare_far_har_rett_hvis_mor_er_i_akti @Test void avslag_utsettelse_med_trekkdager_skal_knekkes_når_saldo_går_tom() { var fødselsdato = LocalDate.of(2021, 1, 20); - //Skal få avslag pga mor ikke er i aktivitet + // Skal få avslag pga mor ikke er i aktivitet var fom = fødselsdato.plusWeeks(6); var tom = fødselsdato.plusWeeks(9); - //Skal gå tom for dager - var utsettelse = OppgittPeriode.forUtsettelse(fom, tom, FRI, fødselsdato, fødselsdato, MorsAktivitet.ARBEID, MORS_AKTIVITET_IKKE_GODKJENT); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(bareFarRett()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().trekkdager(10).type(FORELDREPENGER))) - .søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelse)); + // Skal gå tom for dager + var utsettelse = + OppgittPeriode.forUtsettelse( + fom, + tom, + FRI, + fødselsdato, + fødselsdato, + MorsAktivitet.ARBEID, + MORS_AKTIVITET_IKKE_GODKJENT); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(10) + .type(FORELDREPENGER))) + .søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelse)); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(2); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fom); - assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fom.plusWeeks(2).minusDays(1)); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTom()) + .isEqualTo(fom.plusWeeks(2).minusDays(1)); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IKKE_STØNADSDAGER_IGJEN); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IKKE_STØNADSDAGER_IGJEN); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fom.plusWeeks(2)); assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(tom); - assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); + assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); } @Test void utsettelse_akt_krav_bare_far_rett_innvilget_uten_trekk() { var fødselsdato = LocalDate.of(2021, 1, 20); - //Skal få avslag pga mor ikke er i aktivitet + // Skal få avslag pga mor ikke er i aktivitet var fom = fødselsdato.plusWeeks(6); var tom = fødselsdato.plusWeeks(9); - //Skal gå tom for dager - var utsettelse = OppgittPeriode.forUtsettelse(fom, tom, FRI, fødselsdato, fødselsdato, MorsAktivitet.ARBEID, MORS_AKTIVITET_GODKJENT); - var grunnlag = basicGrunnlagFar(fødselsdato).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .rettOgOmsorg(bareFarRett()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().trekkdager(10).type(FORELDREPENGER))) - .søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelse)); + // Skal gå tom for dager + var utsettelse = + OppgittPeriode.forUtsettelse( + fom, + tom, + FRI, + fødselsdato, + fødselsdato, + MorsAktivitet.ARBEID, + MORS_AKTIVITET_GODKJENT); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .rettOgOmsorg(bareFarRett()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(10) + .type(FORELDREPENGER))) + .søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelse)); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(1); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(InnvilgetÅrsak.UTSETTELSE_GYLDIG_BFR_AKT_KRAV_OPPFYLT); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(InnvilgetÅrsak.UTSETTELSE_GYLDIG_BFR_AKT_KRAV_OPPFYLT); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fom); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(tom); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isFalse(); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()) + .isFalse(); } @Test @@ -530,16 +887,30 @@ void utsettelse_akt_krav_bare_far_rett_innvilget_uten_trekk() { var fom = fødselsdato.minusWeeks(5); var tom = fødselsdato.minusWeeks(3).minusDays(1); var utsettelse = utsettelsePeriode(fom, tom, FRI, null); - var grunnlag = basicGrunnlagMor(fødselsdato).søknad( - søknad(FØDSEL, utsettelse, oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1)), - oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)))); + var grunnlag = + basicGrunnlagMor(fødselsdato) + .søknad( + søknad( + FØDSEL, + utsettelse, + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1)), + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isZero(); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isZero(); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fom); assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(tom); } @@ -548,9 +919,22 @@ void utsettelse_akt_krav_bare_far_rett_innvilget_uten_trekk() { void prematur_fødsel_pleiepenger_skal_gi_utsettelse_med_trekkdager_fram_til_termindato() { var fødselsdato = LocalDate.of(2021, 11, 22); var termindato = fødselsdato.plusWeeks(8); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) - .søknad(fødselSøknad().oppgittPeriode(utsettelsePeriode(fødselsdato, termindato.minusDays(1), INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT)) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, termindato, termindato.plusWeeks(6)))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termindato)) + .søknad( + fødselSøknad() + .oppgittPeriode( + utsettelsePeriode( + fødselsdato, + termindato.minusDays(1), + INNLAGT_BARN, + INNLEGGELSE_BARN_GODKJENT)) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + termindato, + termindato.plusWeeks(6)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); @@ -578,196 +962,423 @@ void utsettelse_akt_krav_bare_far_rett_innvilget_uten_trekk() { @Test void fri_utsettelse_første_6_ukene_skal_gå_til_manuell_pre_wlb() { var fødselsdato = LocalDate.of(2022, 6, 28); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(defaultKontoer()) - .søknad(søknad(FØDSEL, utsettelsePeriode(fødselsdato, fødselsdato.plusWeeks(1).minusDays(1), FRI, null), - oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(2).minusDays(1), false, SamtidigUttaksprosent.HUNDRED))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(defaultKontoer()) + .søknad( + søknad( + FØDSEL, + utsettelsePeriode( + fødselsdato, + fødselsdato.plusWeeks(1).minusDays(1), + FRI, + null), + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(2).minusDays(1), + false, + SamtidigUttaksprosent.HUNDRED))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(2); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isNotEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isNotEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isNotEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isNotEqualTo(Perioderesultattype.INNVILGET); } @Test void fri_utsettelse_første_6_ukene_skal_innvilges_for_far_begge_rett() { var fødselsdato = LocalDate.of(2022, 6, 28); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(defaultKontoer().farUttakRundtFødselDager(10)) - .søknad(søknad(FØDSEL, utsettelsePeriode(fødselsdato, fødselsdato.plusWeeks(1).minusDays(1), FRI, null), - oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(2).minusDays(1), false, SamtidigUttaksprosent.HUNDRED), - utsettelsePeriode(fødselsdato.plusWeeks(2), fødselsdato.plusWeeks(3).minusDays(1), FRI, null), - oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(5).minusDays(1), false, new SamtidigUttaksprosent(50)), - utsettelsePeriode(fødselsdato.plusWeeks(5), fødselsdato.plusWeeks(8).minusDays(1), FRI, null), - oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(15)))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(defaultKontoer().farUttakRundtFødselDager(10)) + .søknad( + søknad( + FØDSEL, + utsettelsePeriode( + fødselsdato, + fødselsdato.plusWeeks(1).minusDays(1), + FRI, + null), + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(2).minusDays(1), + false, + SamtidigUttaksprosent.HUNDRED), + utsettelsePeriode( + fødselsdato.plusWeeks(2), + fødselsdato.plusWeeks(3).minusDays(1), + FRI, + null), + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(5).minusDays(1), + false, + new SamtidigUttaksprosent(50)), + utsettelsePeriode( + fødselsdato.plusWeeks(5), + fødselsdato.plusWeeks(8).minusDays(1), + FRI, + null), + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(15)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(7); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - - assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - - assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(4).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(4).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(4).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + + assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + + assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(4).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(4).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(4).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); // Knekk ved fødsel + 6uker - assertThat(perioder.get(5).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(5).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(5).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(5).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - - assertThat(perioder.get(6).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(5).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(5).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(5).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(5).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + + assertThat(perioder.get(6).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test void fri_utsettelse_første_6_ukene_skal_innvilges_for_bfhr() { var fødselsdato = LocalDate.of(2022, 6, 28); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(bareFarRett()) - .kontoer(new Kontoer.Builder().konto(FORELDREPENGER, 100).minsterettDager(40).farUttakRundtFødselDager(10)) - .søknad(søknad(FØDSEL, utsettelsePeriode(fødselsdato, fødselsdato.plusWeeks(1).minusDays(1), FRI, null), - oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(2).minusDays(1)), - utsettelsePeriode(fødselsdato.plusWeeks(2), fødselsdato.plusWeeks(3).minusDays(1), FRI, null), - gradertoppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(5).minusDays(1), BigDecimal.valueOf(50)), - utsettelsePeriode(fødselsdato.plusWeeks(5), fødselsdato.plusWeeks(6).minusDays(1), FRI, MorsAktivitet.ARBEID, null), - utsettelsePeriode(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(8).minusDays(1), FRI, MorsAktivitet.ARBEID, - MORS_AKTIVITET_GODKJENT), - oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(10), MORS_AKTIVITET_GODKJENT))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .kontoer( + new Kontoer.Builder() + .konto(FORELDREPENGER, 100) + .minsterettDager(40) + .farUttakRundtFødselDager(10)) + .søknad( + søknad( + FØDSEL, + utsettelsePeriode( + fødselsdato, + fødselsdato.plusWeeks(1).minusDays(1), + FRI, + null), + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(2).minusDays(1)), + utsettelsePeriode( + fødselsdato.plusWeeks(2), + fødselsdato.plusWeeks(3).minusDays(1), + FRI, + null), + gradertoppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(5).minusDays(1), + BigDecimal.valueOf(50)), + utsettelsePeriode( + fødselsdato.plusWeeks(5), + fødselsdato.plusWeeks(6).minusDays(1), + FRI, + MorsAktivitet.ARBEID, + null), + utsettelsePeriode( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(8).minusDays(1), + FRI, + MorsAktivitet.ARBEID, + MORS_AKTIVITET_GODKJENT), + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(10), + MORS_AKTIVITET_GODKJENT))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(7); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - - assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - - assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(4).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(4).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(4).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - - assertThat(perioder.get(5).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - - assertThat(perioder.get(6).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(2).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + + assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + + assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(4).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(4).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(4).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + + assertThat(perioder.get(5).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + + assertThat(perioder.get(6).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test void fri_utsettelse_før_termin_far_begge_rett() { var fødselsdato = LocalDate.of(2022, 6, 28); - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(defaultKontoer().farUttakRundtFødselDager(10)) - .søknad(søknad(FØDSEL, utsettelsePeriode(fødselsdato.minusWeeks(1), fødselsdato.plusWeeks(1).minusDays(1), FRI, null), - oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(3), fødselsdato.plusWeeks(5).minusDays(1), false, SamtidigUttaksprosent.HUNDRED))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(defaultKontoer().farUttakRundtFødselDager(10)) + .søknad( + søknad( + FØDSEL, + utsettelsePeriode( + fødselsdato.minusWeeks(1), + fødselsdato.plusWeeks(1).minusDays(1), + FRI, + null), + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(3), + fødselsdato.plusWeeks(5).minusDays(1), + false, + SamtidigUttaksprosent.HUNDRED))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.HUNDRED); } @Test void fri_utsettelse_før_termin_bfhr() { var fødselsdato = LocalDate.of(2022, 6, 28); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(bareFarRett()) - .kontoer(new Kontoer.Builder().konto(FORELDREPENGER, 100).minsterettDager(40).farUttakRundtFødselDager(10)) - .søknad(søknad(FØDSEL, utsettelsePeriode(fødselsdato.minusWeeks(1), fødselsdato.plusWeeks(1).minusDays(1), FRI, null), - oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(1), fødselsdato.plusWeeks(3).minusDays(1)))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .kontoer( + new Kontoer.Builder() + .konto(FORELDREPENGER, 100) + .minsterettDager(40) + .farUttakRundtFødselDager(10)) + .søknad( + søknad( + FØDSEL, + utsettelsePeriode( + fødselsdato.minusWeeks(1), + fødselsdato.plusWeeks(1).minusDays(1), + FRI, + null), + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(1), + fødselsdato.plusWeeks(3).minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); - assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.HUNDRED); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(2).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.HUNDRED); } @Test void fri_utsettelse_etter_uke_6_far_aleneomsorg_innvilges() { var fødselsdato = LocalDate.of(2024, 5, 13); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(aleneomsorg()) - .kontoer(new Kontoer.Builder().konto(FORELDREPENGER, 100)) - .søknad(søknad(FØDSEL, oppgittPeriode(FORELDREPENGER, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)), - utsettelsePeriode(fødselsdato.plusWeeks(8), fødselsdato.plusWeeks(10).minusDays(1), FRI, null), - oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(15).minusDays(1)))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(aleneomsorg()) + .kontoer(new Kontoer.Builder().konto(FORELDREPENGER, 100)) + .søknad( + søknad( + FØDSEL, + oppgittPeriode( + FORELDREPENGER, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1)), + utsettelsePeriode( + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(10).minusDays(1), + FRI, + null), + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(15).minusDays(1)))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(3); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(UTSETTELSE_GYLDIG); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(UTSETTELSE_GYLDIG); } @ParameterizedTest @EnumSource(UtsettelseÅrsak.class) - void annen_parts_periode_skal_trekke_dager_selv_om_de_overlapper_med_søkers_utsettelse(UtsettelseÅrsak utsettelseÅrsak) { - //FAGSYSTEM-243708 + void annen_parts_periode_skal_trekke_dager_selv_om_de_overlapper_med_søkers_utsettelse( + UtsettelseÅrsak utsettelseÅrsak) { + // FAGSYSTEM-243708 var fødselsdato = of(2018, 1, 1); var mottattDatoFar = fødselsdato.plusWeeks(5); - var utsettelsePeriode = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), utsettelseÅrsak, - mottattDatoFar, mottattDatoFar, null, null); + var utsettelsePeriode = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + utsettelseÅrsak, + mottattDatoFar, + mottattDatoFar, + null, + null); var fellesperiodeFom = utsettelsePeriode.getTom().plusDays(1); - var fellesperiode = OppgittPeriode.forVanligPeriode(FELLESPERIODE, fellesperiodeFom, fellesperiodeFom.plusWeeks(1).minusDays(1), null, false, - mottattDatoFar, mottattDatoFar, MorsAktivitet.ARBEID, MORS_AKTIVITET_GODKJENT); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).behandling(farBehandling()) - .søknad(søknad(Søknadstype.FØDSEL, utsettelsePeriode, fellesperiode)) - .annenPart(new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)) - .innvilget(true) - .senestMottattDato(fødselsdato) - .uttakPeriodeAktivitet(new AnnenpartUttakPeriodeAktivitet(ARBEIDSFORHOLD_3, MØDREKVOTE, new Trekkdager(30), Utbetalingsgrad.HUNDRED)) - .build()) - .uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(utsettelsePeriode.getFom(), utsettelsePeriode.getTom()) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(ARBEIDSFORHOLD_3, FELLESPERIODE, new Trekkdager(130), Utbetalingsgrad.HUNDRED)) - .senestMottattDato(fødselsdato) - .build())); + var fellesperiode = + OppgittPeriode.forVanligPeriode( + FELLESPERIODE, + fellesperiodeFom, + fellesperiodeFom.plusWeeks(1).minusDays(1), + null, + false, + mottattDatoFar, + mottattDatoFar, + MorsAktivitet.ARBEID, + MORS_AKTIVITET_GODKJENT); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .behandling(farBehandling()) + .søknad(søknad(Søknadstype.FØDSEL, utsettelsePeriode, fellesperiode)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato, + fødselsdato + .plusWeeks(6) + .minusDays(1)) + .innvilget(true) + .senestMottattDato(fødselsdato) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + ARBEIDSFORHOLD_3, + MØDREKVOTE, + new Trekkdager(30), + Utbetalingsgrad.HUNDRED)) + .build()) + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + utsettelsePeriode.getFom(), + utsettelsePeriode.getTom()) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + ARBEIDSFORHOLD_3, + FELLESPERIODE, + new Trekkdager(130), + Utbetalingsgrad.HUNDRED)) + .senestMottattDato(fødselsdato) + .build())); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(5)); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(MANUELL_BEHANDLING); - assertThat(resultat.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo(IKKE_STØNADSDAGER_IGJEN); + assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(5)); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(MANUELL_BEHANDLING); + assertThat(resultat.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IKKE_STØNADSDAGER_IGJEN); } private Datoer.Builder datoer(LocalDate fødselsdato) { @@ -778,8 +1389,12 @@ private RegelGrunnlag.Builder basicUtsettelseGrunnlag(LocalDate fødselsdato) { return basicUtsettelseGrunnlag(fødselsdato, morBehandling()); } - private RegelGrunnlag.Builder basicUtsettelseGrunnlag(LocalDate fødselsdato, Behandling.Builder behandling) { - return basicGrunnlag().datoer(datoer(fødselsdato)).behandling(behandling).rettOgOmsorg(beggeRett()); + private RegelGrunnlag.Builder basicUtsettelseGrunnlag( + LocalDate fødselsdato, Behandling.Builder behandling) { + return basicGrunnlag() + .datoer(datoer(fødselsdato)) + .behandling(behandling) + .rettOgOmsorg(beggeRett()); } private Søknad.Builder fødselSøknad() { diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseSammenhengendeUttakOrkestreringTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseSammenhengendeUttakOrkestreringTest.java index 7c65aa6d..6f27fc70 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseSammenhengendeUttakOrkestreringTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/UtsettelseSammenhengendeUttakOrkestreringTest.java @@ -25,9 +25,6 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.List; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenpartUttakPeriode; @@ -47,24 +44,41 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.Manuellbehandlingårsak; +import org.junit.jupiter.api.Test; -class UtsettelseSammenhengendeUttakOrkestreringTest extends FastsettePerioderRegelOrkestreringTestBase { +class UtsettelseSammenhengendeUttakOrkestreringTest + extends FastsettePerioderRegelOrkestreringTestBase { @Test void periode_med_gyldig_utsettelse_pga_barn_innlagt_i_helseinstitusjon_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode( - utsettelsePeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + INNLAGT_BARN, + INNLEGGELSE_BARN_GODKJENT))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); assertDeTreFørstePeriodene(resultat, fødselsdato); - //2 neste uker med gyldig utsettelse + // 2 neste uker med gyldig utsettelse var uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(INNLAGT_BARN); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(10)); @@ -76,18 +90,33 @@ void periode_med_gyldig_utsettelse_pga_barn_innlagt_i_helseinstitusjon_skal_innv @Test void periode_med_gyldig_utsettelse_pga_søker_innlagt_i_helseinstitusjon_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode( - utsettelsePeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), INNLAGT_SØKER, INNLEGGELSE_SØKER_GODKJENT))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + INNLAGT_SØKER, + INNLEGGELSE_SØKER_GODKJENT))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); assertDeTreFørstePeriodene(resultat, fødselsdato); - //2 neste uker med gyldig utsettelse + // 2 neste uker med gyldig utsettelse var uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(INNLAGT_SØKER); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(10)); @@ -99,18 +128,33 @@ void periode_med_gyldig_utsettelse_pga_barn_innlagt_i_helseinstitusjon_skal_innv @Test void periode_med_gyldig_utsettelse_pga_søkers_sykdom_eller_skade_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode( - utsettelsePeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), SYKDOM_SKADE, SYKDOM_SØKER_GODKJENT))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + SYKDOM_SKADE, + SYKDOM_SØKER_GODKJENT))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); assertDeTreFørstePeriodene(resultat, fødselsdato); - //2 neste uker med gyldig utsettelse + // 2 neste uker med gyldig utsettelse var uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(SYKDOM_SKADE); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(10)); @@ -124,30 +168,54 @@ void periode_med_gyldig_utsettelse_pga_arbeid_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); var utsettelseFom = fødselsdato.plusWeeks(10); var utsettelseTom = fødselsdato.plusWeeks(12).minusDays(1); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(MØDREKVOTE, 75)) - .konto(konto(FEDREKVOTE, 75)) - .konto(konto(FELLESPERIODE, 80)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 75)) + .konto(konto(FEDREKVOTE, 75)) + .konto(konto(FELLESPERIODE, 80)); var arbeidsforhold = new Arbeidsforhold(ARBEIDSFORHOLD); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).arbeid( - new Arbeid.Builder().arbeidsforhold(arbeidsforhold).endringAvStilling(new EndringAvStilling(fødselsdato, BigDecimal.valueOf(100)))) - .kontoer(kontoer) - .søknad(fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, utsettelseFom.minusDays(1))) - .oppgittPeriode(utsettelsePeriode(utsettelseFom, utsettelseTom, ARBEID, null))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(arbeidsforhold) + .endringAvStilling( + new EndringAvStilling( + fødselsdato, BigDecimal.valueOf(100)))) + .kontoer(kontoer) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + utsettelseFom.minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + utsettelseFom, + utsettelseTom, + ARBEID, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); assertDeTreFørstePeriodene(resultat, fødselsdato); - //2 neste uker med gyldig utsettelse + // 2 neste uker med gyldig utsettelse var uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(ARBEID); assertThat(uttakPeriode.getFom()).isEqualTo(utsettelseFom); assertThat(uttakPeriode.getTom()).isEqualTo(utsettelseTom); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(uttakPeriode.getTrekkdager(arbeidsforhold.identifikator())).isEqualTo(Trekkdager.ZERO); + assertThat(uttakPeriode.getTrekkdager(arbeidsforhold.identifikator())) + .isEqualTo(Trekkdager.ZERO); } @Test @@ -155,47 +223,88 @@ void UT1110_periode_med_utsettelse_pga_arbeid_med_50_prosent_stilling_skal_manue var fødselsdato = LocalDate.of(2018, 1, 1); var utsettelseFom = fødselsdato.plusWeeks(10); var utsettelseTom = fødselsdato.plusWeeks(12).minusDays(1); - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(MØDREKVOTE, 75)) - .konto(konto(FELLESPERIODE, 80)) - .konto(konto(FEDREKVOTE, 75)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 75)) + .konto(konto(FELLESPERIODE, 80)) + .konto(konto(FEDREKVOTE, 75)); var arbeidsforhold = new Arbeidsforhold(ARBEIDSFORHOLD); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).kontoer(kontoer) - .søknad(fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, utsettelseFom.minusDays(1))) - .oppgittPeriode(utsettelsePeriode(utsettelseFom, utsettelseTom, ARBEID, null))) - .arbeid( - new Arbeid.Builder().arbeidsforhold(arbeidsforhold).endringAvStilling(new EndringAvStilling(utsettelseFom, BigDecimal.valueOf(50)))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .kontoer(kontoer) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + utsettelseFom.minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + utsettelseFom, + utsettelseTom, + ARBEID, + null))) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(arbeidsforhold) + .endringAvStilling( + new EndringAvStilling( + utsettelseFom, BigDecimal.valueOf(50)))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); assertDeTreFørstePeriodene(resultat, fødselsdato); - //2 neste uker med utsettelse + // 2 neste uker med utsettelse var uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(ARBEID); assertThat(uttakPeriode.getFom()).isEqualTo(utsettelseFom); assertThat(uttakPeriode.getTom()).isEqualTo(utsettelseTom); - assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(uttakPeriode.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.IKKE_HELTIDSARBEID); + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(uttakPeriode.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.IKKE_HELTIDSARBEID); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(10)); } @Test void periode_med_utsettelse_pga_ferie_skal_innvilges() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), FERIE, null))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + FERIE, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); assertDeTreFørstePeriodene(resultat, fødselsdato); - //2 neste uker med gyldig utsettelse + // 2 neste uker med gyldig utsettelse var uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(FERIE); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(10)); @@ -207,10 +316,26 @@ void periode_med_utsettelse_pga_ferie_skal_innvilges() { @Test void skal_ikke_utlede_stønadskontotype_ved_innvilgelse_av_utsettelse() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), FERIE, null))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + FERIE, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); @@ -221,12 +346,29 @@ void periode_med_utsettelse_pga_ferie_skal_innvilges() { } @Test - void periode_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet_bevegelige_helligdager() { + void + periode_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet_bevegelige_helligdager() { var fødselsdato = LocalDate.of(2018, 1, 15); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), FERIE, null))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + FERIE, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(8); @@ -241,16 +383,19 @@ void periode_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet_bevege assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - //2 neste uker med ugyldig utsettelse grunnet bevegelig helligdag + // 2 neste uker med ugyldig utsettelse grunnet bevegelig helligdag // 29.03 - 29.03 er en periode fordi 29.mars er skjærtorsdag uttakPeriode = resultat.get(4).uttakPeriode(); assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(FERIE); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(10).plusDays(3)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(10).plusDays(3)); - assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(uttakPeriode.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); - assertThat(uttakPeriode.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(uttakPeriode.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); + assertThat(uttakPeriode.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(1)); // 30.03 - 30.03 er en periode fordi 30.mars er en helligdag @@ -258,9 +403,12 @@ void periode_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet_bevege assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(FERIE); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(10).plusDays(4)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(10).plusDays(4)); - assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(uttakPeriode.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); - assertThat(uttakPeriode.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(uttakPeriode.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); + assertThat(uttakPeriode.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(1)); // 02.04 - 02.04 er en periode fordi 02.april er 2.påskedag @@ -268,9 +416,12 @@ void periode_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet_bevege assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(FERIE); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(11)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(11)); - assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(uttakPeriode.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); - assertThat(uttakPeriode.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(uttakPeriode.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); + assertThat(uttakPeriode.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(1)); // 03.04 - 08.04 er en periode fordi det er resten av perioden, uten helligdag @@ -283,14 +434,40 @@ void periode_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet_bevege } @Test - void flere_perioder_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet_bevegelige_helligdager() { + void + flere_perioder_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet_bevegelige_helligdager() { var fødselsdato = LocalDate.of(2018, 1, 15); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), FERIE, null)) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(17).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(17), fødselsdato.plusWeeks(18).minusDays(1), FERIE, null))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + FERIE, + null)) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(12), + fødselsdato.plusWeeks(17).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(17), + fødselsdato.plusWeeks(18).minusDays(1), + FERIE, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(12); @@ -305,16 +482,19 @@ void flere_perioder_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - //2 neste uker med ugyldig utsettelse grunnet bevegelig helligdag + // 2 neste uker med ugyldig utsettelse grunnet bevegelig helligdag // 29.03 - 29.03 er en periode fordi 29.mars er skjærtorsdag uttakPeriode = resultat.get(4).uttakPeriode(); assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(FERIE); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(10).plusDays(3)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(10).plusDays(3)); - assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(uttakPeriode.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); - assertThat(uttakPeriode.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(uttakPeriode.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); + assertThat(uttakPeriode.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(1)); // 30.03 - 30.03 er en periode fordi 30.mars er en helligdag (langfredag) @@ -322,9 +502,12 @@ void flere_perioder_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(FERIE); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(10).plusDays(4)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(10).plusDays(4)); - assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(uttakPeriode.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); - assertThat(uttakPeriode.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(uttakPeriode.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); + assertThat(uttakPeriode.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(1)); // 02.04 - 02.04 er en periode fordi 02.april er 2.påskedag @@ -332,9 +515,12 @@ void flere_perioder_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(FERIE); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(11)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(11)); - assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(uttakPeriode.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); - assertThat(uttakPeriode.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(uttakPeriode.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); + assertThat(uttakPeriode.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(1)); // 03.04 - 08.04 er en periode fordi det er resten av perioden, uten helligdag @@ -365,9 +551,12 @@ void flere_perioder_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(FERIE); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(17).plusDays(3)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(17).plusDays(3)); - assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(uttakPeriode.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); - assertThat(uttakPeriode.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(uttakPeriode.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); + assertThat(uttakPeriode.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(1)); // 18.05 - 20.05 er en periode fordi det er resten av perioden, uten helligdag @@ -382,42 +571,79 @@ void flere_perioder_med_utsettelse_pga_ferie_skal_til_manuell_behandling_grunnet @Test void periode_med_ugyldig_utsettelse_skal_til_manuell_behandling() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), INNLAGT_BARN, null))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + INNLAGT_BARN, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); assertDeTreFørstePeriodene(resultat, fødselsdato); - //2 neste uker med forsøkt utsettelse + // 2 neste uker med forsøkt utsettelse var uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(INNLAGT_BARN); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(10)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); - assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(10)); } @Test void utsettelse_uten_stønadskonto_på_helligdag_skal_gi_ugyldig_opphold() { var fødselsdato = LocalDate.of(2018, 11, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, LocalDate.of(2018, 12, 24))) - .oppgittPeriode(utsettelsePeriode(LocalDate.of(2018, 12, 25), LocalDate.of(2018, 12, 25), FERIE, null))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + LocalDate.of(2018, 12, 24))) + .oppgittPeriode( + utsettelsePeriode( + LocalDate.of(2018, 12, 25), + LocalDate.of(2018, 12, 25), + FERIE, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); - //2 neste uker med gyldig utsettelse + // 2 neste uker med gyldig utsettelse var utsettelse = resultat.get(3).uttakPeriode(); - assertThat(utsettelse.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(utsettelse.getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); - assertThat(utsettelse.getPeriodeResultatÅrsak()).isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); - //Utsettelse periode med UKJENT stønadskontotype er settes til neste tilgjengelige stønadskontotype + assertThat(utsettelse.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(utsettelse.getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.IKKE_GYLDIG_GRUNN_FOR_UTSETTELSE); + assertThat(utsettelse.getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.UTSETTELSE_FERIE_PÅ_BEVEGELIG_HELLIGDAG); + // Utsettelse periode med UKJENT stønadskontotype er settes til neste tilgjengelige + // stønadskontotype assertThat(utsettelse.getStønadskontotype()).isEqualTo(MØDREKVOTE); assertThat(utsettelse.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(1)); } @@ -425,134 +651,252 @@ void periode_med_ugyldig_utsettelse_skal_til_manuell_behandling() { @Test void utsettelse_periode_med_ukjent_kontotype_må_settes_til_neste_tilgjengelig() { var fødselsdato = LocalDate.of(2018, 1, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(12).minusDays(1), SYKDOM_SKADE, null))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(12).minusDays(1), + SYKDOM_SKADE, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(4); assertDeTreFørstePeriodene(resultat, fødselsdato); - //2 neste uker med forsøkt utsettelse + // 2 neste uker med forsøkt utsettelse var uttakPeriode = resultat.get(3).uttakPeriode(); assertThat(uttakPeriode.getUtsettelseÅrsak()).isEqualTo(SYKDOM_SKADE); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(10)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(12).minusDays(1)); - assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(uttakPeriode.getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); assertThat(uttakPeriode.getStønadskontotype()).isEqualTo(FELLESPERIODE); assertThat(uttakPeriode.getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(10)); } @Test void pleiepenger_utsettelse_skal_trekke_fra_fellesperiode() { - //Over 7 uker for tidlig, får pleiepenger. Utsettelsen skal avlås og det skal trekkes dager + // Over 7 uker for tidlig, får pleiepenger. Utsettelsen skal avlås og det skal trekkes dager var termindato = LocalDate.of(2019, 9, 1); var fødselsdato = LocalDate.of(2019, 7, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).datoer(new Datoer.Builder().termin(termindato).fødsel(fødselsdato)).søknad(fødselSøknad() - //Starter med pleiepenger - .oppgittPeriode(utsettelsePeriode(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT)) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato.plusWeeks(6), termindato))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .datoer(new Datoer.Builder().termin(termindato).fødsel(fødselsdato)) + .søknad( + fødselSøknad() + // Starter med pleiepenger + .oppgittPeriode( + utsettelsePeriode( + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + INNLAGT_BARN, + INNLEGGELSE_BARN_GODKJENT)) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato.plusWeeks(6), + termindato))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); assertThat(resultat.get(0).uttakPeriode().getUtsettelseÅrsak()).isEqualTo(INNLAGT_BARN); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isNotZero(); - assertThat(resultat.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isNotZero(); + assertThat(resultat.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(resultat.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FELLESPERIODE); } @Test void pleiepenger_utsettelse_skal_trekke_fra_foreldrepenger() { - //Over 7 uker for tidlig, får pleiepenger. Utsettelsen skal avlås og det skal trekkes dager + // Over 7 uker for tidlig, får pleiepenger. Utsettelsen skal avlås og det skal trekkes dager var termindato = LocalDate.of(2019, 9, 1); var fødselsdato = LocalDate.of(2019, 7, 1); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(100)); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).kontoer(kontoer) - .datoer(new Datoer.Builder().termin(termindato).fødsel(fødselsdato)) - .søknad(fødselSøknad() - //Starter med pleiepenger - .oppgittPeriode(utsettelsePeriode(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1), INNLAGT_BARN, INNLEGGELSE_BARN_GODKJENT)) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), termindato))); + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(100)); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .kontoer(kontoer) + .datoer(new Datoer.Builder().termin(termindato).fødsel(fødselsdato)) + .søknad( + fødselSøknad() + // Starter med pleiepenger + .oppgittPeriode( + utsettelsePeriode( + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1), + INNLAGT_BARN, + INNLEGGELSE_BARN_GODKJENT)) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + termindato))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); assertThat(resultat.get(0).uttakPeriode().getUtsettelseÅrsak()).isEqualTo(INNLAGT_BARN); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isNotZero(); - assertThat(resultat.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isNotZero(); + assertThat(resultat.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(resultat.get(0).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); } @Test void skal_trekke_fra_mødrekvote_ved_avslag_ferie_innenfor_første_seks_uker() { - //Søkt om ferieutsettelse innenfor seks uker etter fødsel. Utsettelsen skal avlås og det skal trekkes dager fra mødrekvote + // Søkt om ferieutsettelse innenfor seks uker etter fødsel. Utsettelsen skal avlås og det + // skal trekkes dager fra mødrekvote var fødselsdato = LocalDate.of(2019, 7, 1); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad(fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(4))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(4).plusDays(1), fødselsdato.plusWeeks(8), FERIE, null))); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(4))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(4).plusDays(1), + fødselsdato.plusWeeks(8), + FERIE, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); assertThat(resultat.get(1).uttakPeriode().getUtsettelseÅrsak()).isEqualTo(FERIE); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isNotZero(); - assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isNotEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isNotZero(); + assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isNotEqualTo(Utbetalingsgrad.ZERO); assertThat(resultat.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(MØDREKVOTE); } @Test - void skal_trekke_fra_foreldrepengekvote_ved_avslag_ferie_innenfor_første_seks_uker_ved_aleneomsorg_far() { + void + skal_trekke_fra_foreldrepengekvote_ved_avslag_ferie_innenfor_første_seks_uker_ved_aleneomsorg_far() { var fødselsdato = LocalDate.of(2019, 7, 1); - var grunnlag = aleneomsorgUtsettelseGrunnlag(fødselsdato, farBehandling()).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad(fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER, fødselsdato, fødselsdato.plusWeeks(4))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(4).plusDays(1), fødselsdato.plusWeeks(8), FERIE, null))); + var grunnlag = + aleneomsorgUtsettelseGrunnlag(fødselsdato, farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødselsdato, + fødselsdato.plusWeeks(4))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(4).plusDays(1), + fødselsdato.plusWeeks(8), + FERIE, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); assertThat(resultat.get(1).uttakPeriode().getUtsettelseÅrsak()).isEqualTo(FERIE); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isNotZero(); - assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isNotEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isNotZero(); + assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isNotEqualTo(Utbetalingsgrad.ZERO); assertThat(resultat.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); } @Test - void skal_trekke_fra_foreldrepengekvote_ved_avslag_ferie_innenfor_første_seks_uker_ved_aleneomsorg_mor() { + void + skal_trekke_fra_foreldrepengekvote_ved_avslag_ferie_innenfor_første_seks_uker_ved_aleneomsorg_mor() { var fødselsdato = LocalDate.of(2019, 7, 1); - var grunnlag = aleneomsorgUtsettelseGrunnlag(fødselsdato, morBehandling()).datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad(fødselSøknad().oppgittPeriode(oppgittPeriode(FORELDREPENGER, fødselsdato, fødselsdato.plusWeeks(4))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(4).plusDays(1), fødselsdato.plusWeeks(8), FERIE, null))); + var grunnlag = + aleneomsorgUtsettelseGrunnlag(fødselsdato, morBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødselsdato, + fødselsdato.plusWeeks(4))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(4).plusDays(1), + fødselsdato.plusWeeks(8), + FERIE, + null))); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(3); assertThat(resultat.get(1).uttakPeriode().getUtsettelseÅrsak()).isEqualTo(FERIE); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()).isNotZero(); - assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isNotEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).decimalValue()) + .isNotZero(); + assertThat(resultat.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isNotEqualTo(Utbetalingsgrad.ZERO); assertThat(resultat.get(1).uttakPeriode().getStønadskontotype()).isEqualTo(FORELDREPENGER); } @Test void utsettelse_før_søknad_mottatt_dato_skal_innvilges() { var fødselsdato = LocalDate.of(2019, 7, 1); - var utsettelse = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10), FERIE, fødselsdato.plusWeeks(8), - fødselsdato.plusWeeks(8), null, null); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))).oppgittPeriode(utsettelse)); + var utsettelse = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10), + FERIE, + fødselsdato.plusWeeks(8), + fødselsdato.plusWeeks(8), + null, + null); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode(utsettelse)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test @@ -560,65 +904,134 @@ void pleiepenger_utsettelse_skal_trekke_fra_foreldrepenger() { var fødselsdato = LocalDate.of(2019, 7, 1); var tidligstMottattDato = fødselsdato; var senestMottattDato = fødselsdato.plusWeeks(8); - var utsettelse = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10), FERIE, senestMottattDato, - tidligstMottattDato, null, null); - var grunnlag = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6).minusDays(1))).oppgittPeriode(utsettelse)); + var utsettelse = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10), + FERIE, + senestMottattDato, + tidligstMottattDato, + null, + null); + var grunnlag = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6).minusDays(1))) + .oppgittPeriode(utsettelse)); var resultat = fastsettPerioder(grunnlag); assertThat(resultat).hasSize(2); - assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); + assertThat(resultat.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); } @Test void utsettelse_ved_tomme_dager_skal_også_avslås() { var fødselsdato = LocalDate.of(2019, 7, 1); - var uttakAvsluttetMedUtsettelse = basicUtsettelseGrunnlag(fødselsdato).søknad( - fødselSøknad().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10).minusDays(1))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(36).minusDays(1))) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(36), fødselsdato.plusWeeks(37).minusDays(1), FERIE, null)) - .oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(37), fødselsdato.plusWeeks(100), ARBEID, null))).build(); + var uttakAvsluttetMedUtsettelse = + basicUtsettelseGrunnlag(fødselsdato) + .søknad( + fødselSøknad() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10).minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(36).minusDays(1))) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(36), + fødselsdato.plusWeeks(37).minusDays(1), + FERIE, + null)) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(37), + fødselsdato.plusWeeks(100), + ARBEID, + null))) + .build(); var resultat = fastsettPerioder(uttakAvsluttetMedUtsettelse); assertThat(resultat).hasSize(5); - assertThat(resultat.get(3).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(resultat.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo( - IkkeOppfyltÅrsak.INGEN_STØNADSDAGER_IGJEN_FOR_AVSLÅTT_UTSETTELSE); - - assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(resultat.get(4).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); - assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(3).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(3).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + assertThat(resultat.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(resultat.get(3).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.INGEN_STØNADSDAGER_IGJEN_FOR_AVSLÅTT_UTSETTELSE); + + assertThat(resultat.get(4).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(resultat.get(4).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); + assertThat(resultat.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); } @Test void skal_knekke_riktig_på_helligdager_i_jula_ved_utsettelse_pga_ferie() { var fødselsdato = LocalDate.of(2019, 10, 10); - var grunnlag = basicGrunnlagFar(fødselsdato).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato, fødselsdato.plusWeeks(6).minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, Trekkdager.ZERO, Utbetalingsgrad.ZERO)) - .build())) - .søknad( - new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelsePeriode(fødselsdato.plusWeeks(6), LocalDate.of(2020, 1, 1), FERIE, null))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato, + fødselsdato + .plusWeeks(6) + .minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator + .forFrilans(), + MØDREKVOTE, + Trekkdager.ZERO, + Utbetalingsgrad.ZERO)) + .build())) + .søknad( + new Søknad.Builder() + .type(FØDSEL) + .oppgittPeriode( + utsettelsePeriode( + fødselsdato.plusWeeks(6), + LocalDate.of(2020, 1, 1), + FERIE, + null))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(5); - //Før jul ok - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - //25 - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - //26 - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - //Romjul - assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - //1 - assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + // Før jul ok + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + // 25 + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + // 26 + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + // Romjul + assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + // 1 + assertThat(perioder.get(4).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); } @Test @@ -626,19 +1039,37 @@ void pleiepenger_utsettelse_skal_trekke_fra_foreldrepenger() { var fødselsdato = LocalDate.of(2019, 10, 10); var hvFom = fødselsdato.plusWeeks(6); var hvTom = fødselsdato.plusWeeks(7).minusDays(1); - var grunnlag = basicGrunnlagFar(fødselsdato).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato, hvFom.minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, Trekkdager.ZERO, Utbetalingsgrad.ZERO)) - .build())).søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelsePeriode(hvFom, hvTom, HV_OVELSE, null))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato, hvFom.minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator + .forFrilans(), + MØDREKVOTE, + Trekkdager.ZERO, + Utbetalingsgrad.ZERO)) + .build())) + .søknad( + new Søknad.Builder() + .type(FØDSEL) + .oppgittPeriode( + utsettelsePeriode(hvFom, hvTom, HV_OVELSE, null))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(1); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(5)); } @Test @@ -646,19 +1077,41 @@ void utsettelse_pga_heimevernet_skal_innvilges_hvis_dokumentert() { var fødselsdato = LocalDate.of(2019, 10, 10); var hvFom = fødselsdato.plusWeeks(6); var hvTom = fødselsdato.plusWeeks(7).minusDays(1); - var grunnlag = basicGrunnlagFar(fødselsdato).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato, hvFom.minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, Trekkdager.ZERO, Utbetalingsgrad.ZERO)) - .build())).søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelsePeriode(hvFom, hvTom, HV_OVELSE, HV_OVELSE_GODKJENT))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato, hvFom.minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator + .forFrilans(), + MØDREKVOTE, + Trekkdager.ZERO, + Utbetalingsgrad.ZERO)) + .build())) + .søknad( + new Søknad.Builder() + .type(FØDSEL) + .oppgittPeriode( + utsettelsePeriode( + hvFom, + hvTom, + HV_OVELSE, + HV_OVELSE_GODKJENT))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(1); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); } @Test @@ -666,17 +1119,33 @@ void utsettelse_pga_heimevernet_skal_til_manuell_hvis_ikke_dokumentert() { var fødselsdato = LocalDate.of(2019, 10, 10); var hvFom = fødselsdato.plusWeeks(6); var hvTom = fødselsdato.plusWeeks(7).minusDays(1); - var grunnlag = basicGrunnlagFar(fødselsdato).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato, hvFom.minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, Trekkdager.ZERO, Utbetalingsgrad.ZERO)) - .build())).søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelsePeriode(hvFom, hvTom, HV_OVELSE, null))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato, hvFom.minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator + .forFrilans(), + MØDREKVOTE, + Trekkdager.ZERO, + Utbetalingsgrad.ZERO)) + .build())) + .søknad( + new Søknad.Builder() + .type(FØDSEL) + .oppgittPeriode( + utsettelsePeriode(hvFom, hvTom, HV_OVELSE, null))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(1); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); } @Test @@ -684,19 +1153,38 @@ void utsettelse_pga_heimevernet_skal_til_manuell_hvis_ikke_dokumentert() { var fødselsdato = LocalDate.of(2019, 10, 10); var tiltakFom = fødselsdato.plusWeeks(6); var tiltakTom = fødselsdato.plusWeeks(7).minusDays(1); - var grunnlag = basicGrunnlagFar(fødselsdato).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato, tiltakFom.minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, Trekkdager.ZERO, Utbetalingsgrad.ZERO)) - .build())).søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelsePeriode(tiltakFom, tiltakTom, NAV_TILTAK, null))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato, tiltakFom.minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator + .forFrilans(), + MØDREKVOTE, + Trekkdager.ZERO, + Utbetalingsgrad.ZERO)) + .build())) + .søknad( + new Søknad.Builder() + .type(FØDSEL) + .oppgittPeriode( + utsettelsePeriode( + tiltakFom, tiltakTom, NAV_TILTAK, null))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(1); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(new Trekkdager(5)); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(new Trekkdager(5)); } @Test @@ -704,20 +1192,41 @@ void utsettelse_pga_tiltak_i_regi_av_nav_skal_innvilges_hvis_dokumentert() { var fødselsdato = LocalDate.of(2019, 10, 10); var tiltakFom = fødselsdato.plusWeeks(6); var tiltakTom = fødselsdato.plusWeeks(7).minusDays(1); - var grunnlag = basicGrunnlagFar(fødselsdato).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato, tiltakFom.minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, Trekkdager.ZERO, Utbetalingsgrad.ZERO)) - .build())) - .søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelsePeriode(tiltakFom, tiltakTom, NAV_TILTAK, NAV_TILTAK_GODKJENT))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato, tiltakFom.minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator + .forFrilans(), + MØDREKVOTE, + Trekkdager.ZERO, + Utbetalingsgrad.ZERO)) + .build())) + .søknad( + new Søknad.Builder() + .type(FØDSEL) + .oppgittPeriode( + utsettelsePeriode( + tiltakFom, + tiltakTom, + NAV_TILTAK, + NAV_TILTAK_GODKJENT))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(1); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.INNVILGET); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); } @Test @@ -725,94 +1234,171 @@ void utsettelse_pga_tiltak_i_regi_av_nav_skal_til_manuell_hvis_ikke_dokumentert( var fødselsdato = LocalDate.of(2019, 10, 10); var tiltakFom = fødselsdato.plusWeeks(6); var tiltakTom = fødselsdato.plusWeeks(7).minusDays(1); - var grunnlag = basicGrunnlagFar(fødselsdato).annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato, tiltakFom.minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, Trekkdager.ZERO, Utbetalingsgrad.ZERO)) - .build())).søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelsePeriode(tiltakFom, tiltakTom, NAV_TILTAK, null))); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato, tiltakFom.minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator + .forFrilans(), + MØDREKVOTE, + Trekkdager.ZERO, + Utbetalingsgrad.ZERO)) + .build())) + .søknad( + new Søknad.Builder() + .type(FØDSEL) + .oppgittPeriode( + utsettelsePeriode( + tiltakFom, tiltakTom, NAV_TILTAK, null))); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(1); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); } @Test void avslag_utsettelse_med_trekkdager_skal_knekkes_når_saldo_går_tom() { var fødselsdato = LocalDate.of(2021, 1, 20); - //Skal få avslag pga mor ikke er i aktivitet + // Skal få avslag pga mor ikke er i aktivitet var fom = fødselsdato.plusWeeks(6); var tom = fødselsdato.plusWeeks(9); - //Skal gå tom for dager - var utsettelse = OppgittPeriode.forUtsettelse(fom, tom, ARBEID, fødselsdato, fødselsdato, MorsAktivitet.ARBEID, MORS_AKTIVITET_IKKE_GODKJENT); - var grunnlag = basicGrunnlagFar(fødselsdato).rettOgOmsorg(bareFarRett()) - .kontoer(new Kontoer.Builder().konto(new Konto.Builder().trekkdager(10).type(FORELDREPENGER))) - .søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelse)); + // Skal gå tom for dager + var utsettelse = + OppgittPeriode.forUtsettelse( + fom, + tom, + ARBEID, + fødselsdato, + fødselsdato, + MorsAktivitet.ARBEID, + MORS_AKTIVITET_IKKE_GODKJENT); + var grunnlag = + basicGrunnlagFar(fødselsdato) + .rettOgOmsorg(bareFarRett()) + .kontoer( + new Kontoer.Builder() + .konto( + new Konto.Builder() + .trekkdager(10) + .type(FORELDREPENGER))) + .søknad(new Søknad.Builder().type(FØDSEL).oppgittPeriode(utsettelse)); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(2); - assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(0).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); assertThat(perioder.get(0).uttakPeriode().getFom()).isEqualTo(fom); - assertThat(perioder.get(0).uttakPeriode().getTom()).isEqualTo(fom.plusWeeks(2).minusDays(1)); - assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(0).uttakPeriode().getTom()) + .isEqualTo(fom.plusWeeks(2).minusDays(1)); + assertThat(perioder.get(0).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); assertThat(perioder.get(0).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD).merEnn0()).isTrue(); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.AVSLÅTT); - assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()).isEqualTo( - IkkeOppfyltÅrsak.INGEN_STØNADSDAGER_IGJEN_FOR_AVSLÅTT_UTSETTELSE); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.AVSLÅTT); + assertThat(perioder.get(1).uttakPeriode().getPeriodeResultatÅrsak()) + .isEqualTo(IkkeOppfyltÅrsak.INGEN_STØNADSDAGER_IGJEN_FOR_AVSLÅTT_UTSETTELSE); assertThat(perioder.get(1).uttakPeriode().getFom()).isEqualTo(fom.plusWeeks(2)); assertThat(perioder.get(1).uttakPeriode().getTom()).isEqualTo(tom); - assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)).isEqualTo(Utbetalingsgrad.ZERO); - assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)).isEqualTo(Trekkdager.ZERO); + assertThat(perioder.get(1).uttakPeriode().getUtbetalingsgrad(ARBEIDSFORHOLD)) + .isEqualTo(Utbetalingsgrad.ZERO); + assertThat(perioder.get(1).uttakPeriode().getTrekkdager(ARBEIDSFORHOLD)) + .isEqualTo(Trekkdager.ZERO); } @Test void bfhr_utsettelse_som_trenger_dok_og_aktivitetskrav_vurdering_skal_gå_til_manuell() { var fødselsdato = LocalDate.of(2019, 10, 10); - var periode = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(6), fødselsdato.plusWeeks(10).minusDays(1), null, false, - fødselsdato, fødselsdato, MorsAktivitet.ARBEID, MORS_AKTIVITET_GODKJENT); - var sykdom = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(11).minusDays(1), SYKDOM_SKADE, fødselsdato, - fødselsdato, MorsAktivitet.ARBEID, SYKDOM_SØKER_GODKJENT); - - var innleggelse = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(11), fødselsdato.plusWeeks(12).minusDays(1), INNLAGT_SØKER, fødselsdato, - fødselsdato, MorsAktivitet.UTDANNING, INNLEGGELSE_SØKER_GODKJENT); - - var sykdomBarn = OppgittPeriode.forUtsettelse(fødselsdato.plusWeeks(12), fødselsdato.plusWeeks(13).minusDays(1), INNLAGT_BARN, fødselsdato, - fødselsdato, MorsAktivitet.INTROPROG, INNLEGGELSE_BARN_GODKJENT); - - var grunnlag = basicGrunnlagFar(fødselsdato).kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 100))) - .rettOgOmsorg(bareFarRett()) - .søknad(søknad(FØDSEL, periode, sykdom, innleggelse, sykdomBarn)); + var periode = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(6), + fødselsdato.plusWeeks(10).minusDays(1), + null, + false, + fødselsdato, + fødselsdato, + MorsAktivitet.ARBEID, + MORS_AKTIVITET_GODKJENT); + var sykdom = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(11).minusDays(1), + SYKDOM_SKADE, + fødselsdato, + fødselsdato, + MorsAktivitet.ARBEID, + SYKDOM_SØKER_GODKJENT); + + var innleggelse = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(11), + fødselsdato.plusWeeks(12).minusDays(1), + INNLAGT_SØKER, + fødselsdato, + fødselsdato, + MorsAktivitet.UTDANNING, + INNLEGGELSE_SØKER_GODKJENT); + + var sykdomBarn = + OppgittPeriode.forUtsettelse( + fødselsdato.plusWeeks(12), + fødselsdato.plusWeeks(13).minusDays(1), + INNLAGT_BARN, + fødselsdato, + fødselsdato, + MorsAktivitet.INTROPROG, + INNLEGGELSE_BARN_GODKJENT); + + var grunnlag = + basicGrunnlagFar(fødselsdato) + .kontoer(new Kontoer.Builder().konto(konto(FORELDREPENGER, 100))) + .rettOgOmsorg(bareFarRett()) + .søknad(søknad(FØDSEL, periode, sykdom, innleggelse, sykdomBarn)); var perioder = fastsettPerioder(grunnlag); assertThat(perioder).hasSize(4); - assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(1).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); - - assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(2).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); - - assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()).isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); - assertThat(perioder.get(3).uttakPeriode().getManuellbehandlingårsak()).isEqualTo(Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); + assertThat(perioder.get(1).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(1).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); + + assertThat(perioder.get(2).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(2).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); + + assertThat(perioder.get(3).uttakPeriode().getPerioderesultattype()) + .isEqualTo(Perioderesultattype.MANUELL_BEHANDLING); + assertThat(perioder.get(3).uttakPeriode().getManuellbehandlingårsak()) + .isEqualTo(Manuellbehandlingårsak.AKTIVITEKTSKRAVET_MÅ_SJEKKES_MANUELT); } - private void assertDeTreFørstePeriodene(List resultat, LocalDate fødselsdato) { - //3 uker før fødsel - innvilges + private void assertDeTreFørstePeriodene( + List resultat, LocalDate fødselsdato) { + // 3 uker før fødsel - innvilges var uttakPeriode = resultat.get(0).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.minusWeeks(3)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - //6 første uker mødrekvote innvilges + // 6 første uker mødrekvote innvilges uttakPeriode = resultat.get(1).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(6).minusDays(1)); assertThat(uttakPeriode.getPerioderesultattype()).isEqualTo(Perioderesultattype.INNVILGET); - //4 neste uker mødrekvote innvilges + // 4 neste uker mødrekvote innvilges uttakPeriode = resultat.get(2).uttakPeriode(); assertThat(uttakPeriode.getFom()).isEqualTo(fødselsdato.plusWeeks(6)); assertThat(uttakPeriode.getTom()).isEqualTo(fødselsdato.plusWeeks(10).minusDays(1)); @@ -827,13 +1413,24 @@ private RegelGrunnlag.Builder basicUtsettelseGrunnlag(LocalDate fødselsdato) { return basicUtsettelseGrunnlag(fødselsdato, morBehandling()); } - private RegelGrunnlag.Builder aleneomsorgUtsettelseGrunnlag(LocalDate fødselsdato, Behandling.Builder behandling) { - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); - return basicGrunnlag().datoer(datoer(fødselsdato)).behandling(behandling).kontoer(kontoer).rettOgOmsorg(aleneomsorg()); + private RegelGrunnlag.Builder aleneomsorgUtsettelseGrunnlag( + LocalDate fødselsdato, Behandling.Builder behandling) { + var kontoer = + new Kontoer.Builder() + .konto(new Konto.Builder().type(FORELDREPENGER).trekkdager(130)); + return basicGrunnlag() + .datoer(datoer(fødselsdato)) + .behandling(behandling) + .kontoer(kontoer) + .rettOgOmsorg(aleneomsorg()); } - private RegelGrunnlag.Builder basicUtsettelseGrunnlag(LocalDate fødselsdato, Behandling.Builder behandling) { - return basicGrunnlag().datoer(datoer(fødselsdato)).behandling(behandling).rettOgOmsorg(beggeRett()); + private RegelGrunnlag.Builder basicUtsettelseGrunnlag( + LocalDate fødselsdato, Behandling.Builder behandling) { + return basicGrunnlag() + .datoer(datoer(fødselsdato)) + .behandling(behandling) + .rettOgOmsorg(beggeRett()); } private Søknad.Builder fødselSøknad() { diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/VirkedagerTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/VirkedagerTest.java index ae1affae..01c8166a 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/VirkedagerTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/VirkedagerTest.java @@ -7,7 +7,6 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; - import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -19,7 +18,11 @@ class VirkedagerTest { void setUp() { var iDag = LocalDate.now(); var mandag = iDag.minusDays(iDag.getDayOfWeek().getValue() - DayOfWeek.MONDAY.getValue()); - uke = Stream.of(DayOfWeek.values()).collect(Collectors.toMap(day -> day, day -> mandag.plusDays(day.ordinal()))); + uke = + Stream.of(DayOfWeek.values()) + .collect( + Collectors.toMap( + day -> day, day -> mandag.plusDays(day.ordinal()))); } @Test @@ -31,14 +34,16 @@ void skalBeregneAntallVirkedager() { assertThat(Virkedager.beregnAntallVirkedager(mandag, søndag.plusDays(1))).isEqualTo(6); assertThat(Virkedager.beregnAntallVirkedager(mandag, søndag.plusDays(10))).isEqualTo(13); assertThat(Virkedager.beregnAntallVirkedager(mandag.plusDays(1), søndag)).isEqualTo(4); - assertThat(Virkedager.beregnAntallVirkedager(mandag.plusDays(1), søndag.plusDays(1))).isEqualTo(5); + assertThat(Virkedager.beregnAntallVirkedager(mandag.plusDays(1), søndag.plusDays(1))) + .isEqualTo(5); assertThat(Virkedager.beregnAntallVirkedager(mandag.plusDays(4), søndag)).isEqualTo(1); assertThat(Virkedager.beregnAntallVirkedager(mandag.plusDays(5), søndag)).isZero(); assertThat(Virkedager.beregnAntallVirkedager(mandag.minusDays(1), søndag)).isEqualTo(5); assertThat(Virkedager.beregnAntallVirkedager(mandag.minusDays(2), søndag)).isEqualTo(5); assertThat(Virkedager.beregnAntallVirkedager(mandag.minusDays(3), søndag)).isEqualTo(6); - assertThat(Virkedager.beregnAntallVirkedager(mandag.minusDays(3), søndag.plusDays(1))).isEqualTo(7); + assertThat(Virkedager.beregnAntallVirkedager(mandag.minusDays(3), søndag.plusDays(1))) + .isEqualTo(7); } @Test diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTidsperiodeForbeholdtMorTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTidsperiodeForbeholdtMorTest.java index eeb6075c..d147ee8c 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTidsperiodeForbeholdtMorTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTidsperiodeForbeholdtMorTest.java @@ -1,15 +1,11 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.betingelser; - import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.MorsAktivitet.INNLAGT; import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype.FØDSEL; import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UtsettelseÅrsak.INNLAGT_SØKER; import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlagImpl; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Datoer; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.DokumentasjonVurdering; @@ -18,6 +14,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknad; import no.nav.fpsak.nare.evaluation.Evaluation; import no.nav.fpsak.nare.evaluation.Resultat; +import org.junit.jupiter.api.Test; class SjekkOmTidsperiodeForbeholdtMorTest { @@ -89,11 +86,23 @@ private SjekkOmTidsperiodeForbeholdtMor sjekk() { return new SjekkOmTidsperiodeForbeholdtMor(); } - private FastsettePeriodeGrunnlagImpl grunnlag(LocalDate familiehendelse, LocalDate periodeFom, LocalDate periodeTom) { + private FastsettePeriodeGrunnlagImpl grunnlag( + LocalDate familiehendelse, LocalDate periodeFom, LocalDate periodeTom) { var datoer = new Datoer.Builder().fødsel(familiehendelse); - var regelGrunnlag = new RegelGrunnlag.Builder().datoer(datoer).søknad(new Søknad.Builder().type(FØDSEL)).build(); - var aktuellPeriode = OppgittPeriode.forUtsettelse(periodeFom, periodeTom, INNLAGT_SØKER, periodeFom, periodeFom, INNLAGT, - DokumentasjonVurdering.INNLEGGELSE_SØKER_GODKJENT); + var regelGrunnlag = + new RegelGrunnlag.Builder() + .datoer(datoer) + .søknad(new Søknad.Builder().type(FØDSEL)) + .build(); + var aktuellPeriode = + OppgittPeriode.forUtsettelse( + periodeFom, + periodeTom, + INNLAGT_SØKER, + periodeFom, + periodeFom, + INNLAGT, + DokumentasjonVurdering.INNLEGGELSE_SØKER_GODKJENT); return new FastsettePeriodeGrunnlagImpl(regelGrunnlag, null, null, aktuellPeriode); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTomForAlleSineKontoerTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTomForAlleSineKontoerTest.java index d818080c..f4651370 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTomForAlleSineKontoerTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/betingelser/SjekkOmTomForAlleSineKontoerTest.java @@ -5,9 +5,6 @@ import java.time.LocalDate; import java.util.List; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.FastsettePeriodeGrunnlagImpl; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.RegelGrunnlagTestBuilder; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Arbeid; @@ -24,149 +21,243 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.saldo.SaldoUtregningGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.saldo.SaldoUtregningTjeneste; import no.nav.fpsak.nare.evaluation.Resultat; +import org.junit.jupiter.api.Test; class SjekkOmTomForAlleSineKontoerTest { @Test - void når_søknadstype_er_fødsel_og_søker_er_mor_og_begge_har_rett_skal_søker_sine_kontoer_vær_MK_FP_og_FORELDREPENGER() { // 1 + void + når_søknadstype_er_fødsel_og_søker_er_mor_og_begge_har_rett_skal_søker_sine_kontoer_vær_MK_FP_og_FORELDREPENGER() { // 1 - var grunnlag = RegelGrunnlagTestBuilder.create() - .behandling(new Behandling.Builder().søkerErMor(true)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .behandling(new Behandling.Builder().søkerErMor(true)) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .build(); var stønadskontotypene = stønadskontotypene(grunnlag); - assertThat(stønadskontotypene).containsExactly(Stønadskontotype.MØDREKVOTE, Stønadskontotype.FELLESPERIODE, Stønadskontotype.FORELDREPENGER); + assertThat(stønadskontotypene) + .containsExactly( + Stønadskontotype.MØDREKVOTE, + Stønadskontotype.FELLESPERIODE, + Stønadskontotype.FORELDREPENGER); } private List stønadskontotypene(RegelGrunnlag grunnlag) { - return SjekkOmTomForAlleSineKontoer.hentSøkerSineKontoer(new FastsettePeriodeGrunnlagImpl(grunnlag, null, null, null)); + return SjekkOmTomForAlleSineKontoer.hentSøkerSineKontoer( + new FastsettePeriodeGrunnlagImpl(grunnlag, null, null, null)); } @Test - void når_søker_har_kontoene_FPFF_MK_FP_er_søker_ikke_tom_for_alle_sine_konto_selvom_en_konto_er_tom() { + void + når_søker_har_kontoene_FPFF_MK_FP_er_søker_ikke_tom_for_alle_sine_konto_selvom_en_konto_er_tom() { var periodeStart = LocalDate.of(2018, 1, 8); var periodeSlutt = periodeStart.plusWeeks(6); - var uttakPeriode = OppgittPeriode.forVanligPeriode(Stønadskontotype.MØDREKVOTE, periodeStart, periodeSlutt, null, false, null, null, null, - null); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.MØDREKVOTE).trekkdager(15 * 5)) - .konto(new Konto.Builder().type(Stønadskontotype.FELLESPERIODE).trekkdager(10 * 5)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .kontoer(kontoer) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(uttakPeriode).mottattTidspunkt(periodeStart.atStartOfDay())) - .behandling(new Behandling.Builder().søkerErMor(true)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .build(); + var uttakPeriode = + OppgittPeriode.forVanligPeriode( + Stønadskontotype.MØDREKVOTE, + periodeStart, + periodeSlutt, + null, + false, + null, + null, + null, + null); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.MØDREKVOTE) + .trekkdager(15 * 5)) + .konto( + new Konto.Builder() + .type(Stønadskontotype.FELLESPERIODE) + .trekkdager(10 * 5)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .kontoer(kontoer) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode(uttakPeriode) + .mottattTidspunkt(periodeStart.atStartOfDay())) + .behandling(new Behandling.Builder().søkerErMor(true)) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .build(); var sjekkOmTomForAlleSineKontoer = new SjekkOmTomForAlleSineKontoer(); uttakPeriode.setAktiviteter(grunnlag.getArbeid().getAktiviteter()); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(), List.of(), grunnlag, uttakPeriode.getFom()); - var evaluation = sjekkOmTomForAlleSineKontoer.evaluate( - new FastsettePeriodeGrunnlagImpl(grunnlag, null, SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag), uttakPeriode)); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(), List.of(), grunnlag, uttakPeriode.getFom()); + var evaluation = + sjekkOmTomForAlleSineKontoer.evaluate( + new FastsettePeriodeGrunnlagImpl( + grunnlag, + null, + SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag), + uttakPeriode)); assertThat(evaluation.result()).isEqualTo(Resultat.NEI); } @Test - void når_søknadstype_er_fødsel_og_søker_er_mor_og_kun_mor_har_rett_skal_søker_sine_kontoer_være_FORELDREPENGER() { // 2 - - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FORELDREPENGER).trekkdager(50)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .behandling(new Behandling.Builder().søkerErMor(true)) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .build(); + void + når_søknadstype_er_fødsel_og_søker_er_mor_og_kun_mor_har_rett_skal_søker_sine_kontoer_være_FORELDREPENGER() { // 2 + + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FORELDREPENGER) + .trekkdager(50)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .behandling(new Behandling.Builder().søkerErMor(true)) + .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true)) + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .build(); var stønadskontotypene = stønadskontotypene(grunnlag); assertThat(stønadskontotypene).containsExactly(Stønadskontotype.FORELDREPENGER); } @Test - void når_søknadstype_er_fødsel_og_søker_er_far_og_begge_har_rett_skal_søker_sine_kontoer_være_FK_FP_og_FORELDREPENGER() { // 3 + void + når_søknadstype_er_fødsel_og_søker_er_far_og_begge_har_rett_skal_søker_sine_kontoer_være_FK_FP_og_FORELDREPENGER() { // 3 - var grunnlag = RegelGrunnlagTestBuilder.create() - .behandling(new Behandling.Builder().søkerErMor(false)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .behandling(new Behandling.Builder().søkerErMor(false)) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .build(); var stønadskontotypene = stønadskontotypene(grunnlag); - assertThat(stønadskontotypene).containsExactly(Stønadskontotype.FEDREKVOTE, Stønadskontotype.FELLESPERIODE, Stønadskontotype.FORELDREPENGER); + assertThat(stønadskontotypene) + .containsExactly( + Stønadskontotype.FEDREKVOTE, + Stønadskontotype.FELLESPERIODE, + Stønadskontotype.FORELDREPENGER); } @Test - void når_søknadstype_er_fødsel_og_søker_er_far_og_kun_far_har_rett_skal_søker_sine_kontoer_være_FORELDREPENGER() { // 4 - - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FORELDREPENGER).trekkdager(50)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .behandling(new Behandling.Builder().søkerErMor(false)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) - .build(); + void + når_søknadstype_er_fødsel_og_søker_er_far_og_kun_far_har_rett_skal_søker_sine_kontoer_være_FORELDREPENGER() { // 4 + + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FORELDREPENGER) + .trekkdager(50)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .behandling(new Behandling.Builder().søkerErMor(false)) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true)) + .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL)) + .build(); var stønadskontotypene = stønadskontotypene(grunnlag); assertThat(stønadskontotypene).containsExactly(Stønadskontotype.FORELDREPENGER); } @Test - void når_søknadstype_er_adopsjon_og_søker_er_mor_og_begge_har_rett_skal_søker_sine_kontoer_være_MK_FP_og_FORELDREPENGER() { // 5 + void + når_søknadstype_er_adopsjon_og_søker_er_mor_og_begge_har_rett_skal_søker_sine_kontoer_være_MK_FP_og_FORELDREPENGER() { // 5 - var grunnlag = RegelGrunnlagTestBuilder.create() - .behandling(new Behandling.Builder().søkerErMor(true)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .behandling(new Behandling.Builder().søkerErMor(true)) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) + .build(); var stønadskontotypene = stønadskontotypene(grunnlag); - assertThat(stønadskontotypene).containsExactly(Stønadskontotype.MØDREKVOTE, Stønadskontotype.FELLESPERIODE, Stønadskontotype.FORELDREPENGER); + assertThat(stønadskontotypene) + .containsExactly( + Stønadskontotype.MØDREKVOTE, + Stønadskontotype.FELLESPERIODE, + Stønadskontotype.FORELDREPENGER); } @Test - void når_søknadstype_er_adopsjon_og_søker_er_mor_og_kun_mor_har_rett_skal_søker_sine_kontoer_være_FORELDREPENGER() { // 6 - - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FORELDREPENGER).trekkdager(50)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .behandling(new Behandling.Builder().søkerErMor(true)) - .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true)) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) - .build(); + void + når_søknadstype_er_adopsjon_og_søker_er_mor_og_kun_mor_har_rett_skal_søker_sine_kontoer_være_FORELDREPENGER() { // 6 + + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FORELDREPENGER) + .trekkdager(50)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .behandling(new Behandling.Builder().søkerErMor(true)) + .rettOgOmsorg(new RettOgOmsorg.Builder().morHarRett(true)) + .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) + .build(); var stønadskontotypene = stønadskontotypene(grunnlag); assertThat(stønadskontotypene).containsExactly(Stønadskontotype.FORELDREPENGER); } @Test - void når_søknadstype_er_adopsjon_og_søker_er_far_og_begge_har_rett_skal_søker_sine_kontoer_være_FK_FP_og_FORELDREPENGER() { // 7 + void + når_søknadstype_er_adopsjon_og_søker_er_far_og_begge_har_rett_skal_søker_sine_kontoer_være_FK_FP_og_FORELDREPENGER() { // 7 - var grunnlag = RegelGrunnlagTestBuilder.create() - .behandling(new Behandling.Builder().søkerErMor(false)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .behandling(new Behandling.Builder().søkerErMor(false)) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) + .build(); var stønadskontotypene = stønadskontotypene(grunnlag); - assertThat(stønadskontotypene).containsExactly(Stønadskontotype.FEDREKVOTE, Stønadskontotype.FELLESPERIODE, Stønadskontotype.FORELDREPENGER); + assertThat(stønadskontotypene) + .containsExactly( + Stønadskontotype.FEDREKVOTE, + Stønadskontotype.FELLESPERIODE, + Stønadskontotype.FORELDREPENGER); } @Test - void når_søknadstype_er_adopsjon_og_søker_er_far_og_kun_en_har_rett_skal_søker_sine_kontoer_være_FORELDREPENGER() { // 8 - - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.FORELDREPENGER).trekkdager(50)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) - .behandling(new Behandling.Builder().søkerErMor(false)) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true)) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) - .build(); + void + når_søknadstype_er_adopsjon_og_søker_er_far_og_kun_en_har_rett_skal_søker_sine_kontoer_være_FORELDREPENGER() { // 8 + + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.FORELDREPENGER) + .trekkdager(50)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold(new Arbeidsforhold(ARBEIDSFORHOLD_1))) + .behandling(new Behandling.Builder().søkerErMor(false)) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true)) + .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON)) + .build(); var stønadskontotypene = stønadskontotypene(grunnlag); assertThat(stønadskontotypene).containsExactly(Stønadskontotype.FORELDREPENGER); diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/LukketPeriodeTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/LukketPeriodeTest.java index a5c652ef..8949adbc 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/LukketPeriodeTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/LukketPeriodeTest.java @@ -3,7 +3,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - import org.junit.jupiter.api.Test; class LukketPeriodeTest { @@ -15,16 +14,24 @@ void omsluttet() { var dag3 = dag1.plusDays(2); var dag4 = dag1.plusDays(3); - assertThat(new LukketPeriode(dag2, dag2).erOmsluttetAv(new LukketPeriode(dag2, dag2))).isTrue(); - assertThat(new LukketPeriode(dag2, dag3).erOmsluttetAv(new LukketPeriode(dag2, dag3))).isTrue(); - assertThat(new LukketPeriode(dag2, dag3).erOmsluttetAv(new LukketPeriode(dag1, dag3))).isTrue(); - assertThat(new LukketPeriode(dag2, dag3).erOmsluttetAv(new LukketPeriode(dag2, dag4))).isTrue(); - assertThat(new LukketPeriode(dag2, dag3).erOmsluttetAv(new LukketPeriode(dag1, dag4))).isTrue(); - - assertThat(new LukketPeriode(dag1, dag4).erOmsluttetAv(new LukketPeriode(dag1, dag3))).isFalse(); - assertThat(new LukketPeriode(dag1, dag4).erOmsluttetAv(new LukketPeriode(dag2, dag4))).isFalse(); - assertThat(new LukketPeriode(dag1, dag4).erOmsluttetAv(new LukketPeriode(dag2, dag2))).isFalse(); - assertThat(new LukketPeriode(dag1, dag4).erOmsluttetAv(new LukketPeriode(dag4, dag4))).isFalse(); - + assertThat(new LukketPeriode(dag2, dag2).erOmsluttetAv(new LukketPeriode(dag2, dag2))) + .isTrue(); + assertThat(new LukketPeriode(dag2, dag3).erOmsluttetAv(new LukketPeriode(dag2, dag3))) + .isTrue(); + assertThat(new LukketPeriode(dag2, dag3).erOmsluttetAv(new LukketPeriode(dag1, dag3))) + .isTrue(); + assertThat(new LukketPeriode(dag2, dag3).erOmsluttetAv(new LukketPeriode(dag2, dag4))) + .isTrue(); + assertThat(new LukketPeriode(dag2, dag3).erOmsluttetAv(new LukketPeriode(dag1, dag4))) + .isTrue(); + + assertThat(new LukketPeriode(dag1, dag4).erOmsluttetAv(new LukketPeriode(dag1, dag3))) + .isFalse(); + assertThat(new LukketPeriode(dag1, dag4).erOmsluttetAv(new LukketPeriode(dag2, dag4))) + .isFalse(); + assertThat(new LukketPeriode(dag1, dag4).erOmsluttetAv(new LukketPeriode(dag2, dag2))) + .isFalse(); + assertThat(new LukketPeriode(dag1, dag4).erOmsluttetAv(new LukketPeriode(dag4, dag4))) + .isFalse(); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/OrgnummerTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/OrgnummerTest.java index 31a866e7..100ae6c0 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/OrgnummerTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/OrgnummerTest.java @@ -11,5 +11,4 @@ void to_string_maskerer() { var orgnr = new Orgnummer("000000000"); assertThat(orgnr.toString()).hasToString("*****0000"); } - } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/PeriodeTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/PeriodeTest.java index 48206bd9..ab1fe7f7 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/PeriodeTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/grunnlag/PeriodeTest.java @@ -1,13 +1,10 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag; - import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - import org.junit.jupiter.api.Test; - class PeriodeTest { @Test @@ -17,7 +14,6 @@ void periode_med_start_og_slutt_og_dato_utenfor_skal_ikke_overlappe() { assertThat(testPeriode.overlapper(LocalDate.of(2019, 1, 1))).isFalse(); } - @Test void periode_uten_start_og_slutt_skal_overlappe() { var testPeriode = new Periode(null, null); @@ -25,7 +21,6 @@ void periode_uten_start_og_slutt_skal_overlappe() { assertThat(testPeriode.overlapper(LocalDate.of(2017, 1, 1))).isTrue(); } - @Test void periode_med_start_og_slutt_skal_overlappe() { var testPeriode = new Periode(LocalDate.of(2016, 1, 1), LocalDate.of(2018, 1, 1)); @@ -53,8 +48,10 @@ void helePeriodenOverlapper() { var tom = fom.plusWeeks(2); var periode = new LukketPeriode(fom, tom); - assertThat(periode.overlapper(new LukketPeriode(fom.minusDays(1), tom.plusDays(1)))).isTrue(); - assertThat(periode.overlapper(new LukketPeriode(fom.plusDays(1), tom.minusDays(1)))).isTrue(); + assertThat(periode.overlapper(new LukketPeriode(fom.minusDays(1), tom.plusDays(1)))) + .isTrue(); + assertThat(periode.overlapper(new LukketPeriode(fom.plusDays(1), tom.minusDays(1)))) + .isTrue(); assertThat(periode.overlapper(periode)).isTrue(); } @@ -64,7 +61,8 @@ void begynnelsenAvPeriodenOverlapper() { var tom = fom.plusWeeks(2); var periode = new LukketPeriode(fom, tom); - assertThat(periode.overlapper(new LukketPeriode(fom.minusDays(1), tom.minusDays(1)))).isTrue(); + assertThat(periode.overlapper(new LukketPeriode(fom.minusDays(1), tom.minusDays(1)))) + .isTrue(); assertThat(periode.overlapper(new LukketPeriode(fom, fom))).isTrue(); assertThat(periode.overlapper(new LukketPeriode(fom.minusDays(1), fom))).isTrue(); } @@ -75,7 +73,8 @@ void sluttenAvPeriodenOverlapper() { var tom = fom.plusWeeks(2); var periode = new LukketPeriode(fom, tom); - assertThat(periode.overlapper(new LukketPeriode(fom.plusDays(1), tom.plusDays(1)))).isTrue(); + assertThat(periode.overlapper(new LukketPeriode(fom.plusDays(1), tom.plusDays(1)))) + .isTrue(); assertThat(periode.overlapper(new LukketPeriode(tom, tom))).isTrue(); assertThat(periode.overlapper(new LukketPeriode(tom, tom.plusDays(1)))).isTrue(); } @@ -86,7 +85,8 @@ void sluttenAvPeriodenOverlapper() { var tom = fom.plusWeeks(2); var periode = new LukketPeriode(fom, tom); - assertThat(periode.overlapper(new LukketPeriode(fom.minusDays(10), fom.minusDays(1)))).isFalse(); + assertThat(periode.overlapper(new LukketPeriode(fom.minusDays(10), fom.minusDays(1)))) + .isFalse(); } @Test @@ -95,8 +95,7 @@ void periodenRettEtterOverlapperIkke() { var tom = fom.plusWeeks(2); var periode = new LukketPeriode(fom, tom); - assertThat(periode.overlapper(new LukketPeriode(tom.plusDays(1), tom.plusDays(5)))).isFalse(); + assertThat(periode.overlapper(new LukketPeriode(tom.plusDays(1), tom.plusDays(5)))) + .isFalse(); } - - } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/BevegeligeHelligdagerUtilTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/BevegeligeHelligdagerUtilTest.java index 05851c90..59175ddf 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/BevegeligeHelligdagerUtilTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/BevegeligeHelligdagerUtilTest.java @@ -3,10 +3,8 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; +import org.junit.jupiter.api.Test; class BevegeligeHelligdagerUtilTest { @@ -23,8 +21,9 @@ void skal_gi_helligdagene_for_2017() { var førsteJuledag = LocalDate.of(2017, 12, 25); var andreJuledag = LocalDate.of(2017, 12, 26); - var helligdager2018 = BevegeligeHelligdagerUtil.finnBevegeligeHelligdagerUtenHelg( - new LukketPeriode(LocalDate.of(2017, 1, 1), LocalDate.of(2017, 1, 1))); + var helligdager2018 = + BevegeligeHelligdagerUtil.finnBevegeligeHelligdagerUtenHelg( + new LukketPeriode(LocalDate.of(2017, 1, 1), LocalDate.of(2017, 1, 1))); assertThat(helligdager2018).hasSize(9); @@ -54,8 +53,9 @@ void skal_gi_helligdagene_for_2018() { var førsteJuledag = LocalDate.of(2018, 12, 25); var andreJuledag = LocalDate.of(2018, 12, 26); - var helligdager2018 = BevegeligeHelligdagerUtil.finnBevegeligeHelligdagerUtenHelg( - new LukketPeriode(LocalDate.of(2018, 1, 1), LocalDate.of(2018, 1, 1))); + var helligdager2018 = + BevegeligeHelligdagerUtil.finnBevegeligeHelligdagerUtenHelg( + new LukketPeriode(LocalDate.of(2018, 1, 1), LocalDate.of(2018, 1, 1))); assertThat(helligdager2018).hasSize(10); @@ -85,8 +85,9 @@ void skal_gi_helligdagene_for_2019() { var førsteJuledag = LocalDate.of(2019, 12, 25); var andreJuledag = LocalDate.of(2019, 12, 26); - var helligdager2018 = BevegeligeHelligdagerUtil.finnBevegeligeHelligdagerUtenHelg( - new LukketPeriode(LocalDate.of(2019, 1, 1), LocalDate.of(2019, 1, 1))); + var helligdager2018 = + BevegeligeHelligdagerUtil.finnBevegeligeHelligdagerUtenHelg( + new LukketPeriode(LocalDate.of(2019, 1, 1), LocalDate.of(2019, 1, 1))); assertThat(helligdager2018).hasSize(10); diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/KonfigurasjonBuilderTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/KonfigurasjonBuilderTest.java index ec2ae5a1..e7a492b4 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/KonfigurasjonBuilderTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/KonfigurasjonBuilderTest.java @@ -4,7 +4,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.time.LocalDate; - import org.junit.jupiter.api.Test; class KonfigurasjonBuilderTest { @@ -12,28 +11,59 @@ class KonfigurasjonBuilderTest { @Test void konfigurasjon_med_en_verdi() { var nå = LocalDate.now(); - var konfigurasjon = KonfigurasjonBuilder.create().leggTilParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå, null, 6).build(); - assertThat(konfigurasjon.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå)).isEqualTo(6); + var konfigurasjon = + KonfigurasjonBuilder.create() + .leggTilParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå, null, 6) + .build(); + assertThat(konfigurasjon.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå)) + .isEqualTo(6); } @Test void konfigurasjon_med_en_verdi_i_to_intervaller() { var nå = LocalDate.now(); - var konfigurasjon = KonfigurasjonBuilder.create() - .leggTilParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå, nå.plusDays(6), 6) - .leggTilParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå.plusDays(7), null, 7) - .build(); - assertThat(konfigurasjon.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå)).isEqualTo(6); - assertThat(konfigurasjon.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå.plusDays(7))).isEqualTo(7); - assertThat(konfigurasjon.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå.plusDays(70))).isEqualTo(7); + var konfigurasjon = + KonfigurasjonBuilder.create() + .leggTilParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, + nå, + nå.plusDays(6), + 6) + .leggTilParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, + nå.plusDays(7), + null, + 7) + .build(); + assertThat(konfigurasjon.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå)) + .isEqualTo(6); + assertThat( + konfigurasjon.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå.plusDays(7))) + .isEqualTo(7); + assertThat( + konfigurasjon.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå.plusDays(70))) + .isEqualTo(7); } @Test void konfigurasjon_med_en_verdi_i_to_intervaller_med_overlapp() { var nå = LocalDate.now(); - assertThrows(IllegalArgumentException.class, () -> KonfigurasjonBuilder.create() - .leggTilParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå, nå.plusDays(6), 6) - .leggTilParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, nå.plusDays(5), null, 7)); + assertThrows( + IllegalArgumentException.class, + () -> + KonfigurasjonBuilder.create() + .leggTilParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, + nå, + nå.plusDays(6), + 6) + .leggTilParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, + nå.plusDays(5), + null, + 7)); } - } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PerioderUtenHelgUtilTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PerioderUtenHelgUtilTest.java index aa730289..d8933821 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PerioderUtenHelgUtilTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/PerioderUtenHelgUtilTest.java @@ -7,14 +7,11 @@ import java.time.DayOfWeek; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; +import org.junit.jupiter.api.Test; class PerioderUtenHelgUtilTest { - private static final LocalDate SØNDAG_FØR_UKE_1 = LocalDate.of(2017, 1, 1); private final LocalDate fredagUke1 = dag(DayOfWeek.FRIDAY, 1); @@ -49,36 +46,75 @@ void skal_si_at_perioder_er_ulike() { @Test void skal_si_at_periode_omslutter_den_andre() { - assertThat(periodeUtenHelgOmslutter(new LukketPeriode(mandagUke2, fredagUke2), new LukketPeriode(lørdagUke1, søndagUke2))).isTrue(); - assertThat(periodeUtenHelgOmslutter(new LukketPeriode(mandagUke2, fredagUke2), new LukketPeriode(lørdagUke2, søndagUke2))).isTrue(); - assertThat(periodeUtenHelgOmslutter(new LukketPeriode(mandagUke2, fredagUke2), new LukketPeriode(lørdagUke1, søndagUke1))).isTrue(); - assertThat(periodeUtenHelgOmslutter(new LukketPeriode(lørdagUke1, søndagUke1), new LukketPeriode(lørdagUke1, søndagUke1))).isTrue(); + assertThat( + periodeUtenHelgOmslutter( + new LukketPeriode(mandagUke2, fredagUke2), + new LukketPeriode(lørdagUke1, søndagUke2))) + .isTrue(); + assertThat( + periodeUtenHelgOmslutter( + new LukketPeriode(mandagUke2, fredagUke2), + new LukketPeriode(lørdagUke2, søndagUke2))) + .isTrue(); + assertThat( + periodeUtenHelgOmslutter( + new LukketPeriode(mandagUke2, fredagUke2), + new LukketPeriode(lørdagUke1, søndagUke1))) + .isTrue(); + assertThat( + periodeUtenHelgOmslutter( + new LukketPeriode(lørdagUke1, søndagUke1), + new LukketPeriode(lørdagUke1, søndagUke1))) + .isTrue(); } @Test void skal_si_at_periode_ikke_omslutter_den_andre_nå_andre_periode_er_lenger() { - assertThat(periodeUtenHelgOmslutter(new LukketPeriode(mandagUke2, fredagUke2), new LukketPeriode(fredagUke1, søndagUke2))).isFalse(); - assertThat(periodeUtenHelgOmslutter(new LukketPeriode(mandagUke2, tirsdagUke2), new LukketPeriode(mandagUke2, søndagUke2))).isFalse(); + assertThat( + periodeUtenHelgOmslutter( + new LukketPeriode(mandagUke2, fredagUke2), + new LukketPeriode(fredagUke1, søndagUke2))) + .isFalse(); + assertThat( + periodeUtenHelgOmslutter( + new LukketPeriode(mandagUke2, tirsdagUke2), + new LukketPeriode(mandagUke2, søndagUke2))) + .isFalse(); } @Test void skal_si_at_helg1_ikke_omslutter_helg2() { - assertThat(periodeUtenHelgOmslutter(new LukketPeriode(lørdagUke1, søndagUke1), new LukketPeriode(lørdagUke2, søndagUke2))).isFalse(); + assertThat( + periodeUtenHelgOmslutter( + new LukketPeriode(lørdagUke1, søndagUke1), + new LukketPeriode(lørdagUke2, søndagUke2))) + .isFalse(); } @Test void skal_si_at_perioder_overlapper() { - assertThat(perioderUtenHelgOverlapper(new LukketPeriode(mandagUke2, fredagUke2), new LukketPeriode(fredagUke1, søndagUke2))).isTrue(); + assertThat( + perioderUtenHelgOverlapper( + new LukketPeriode(mandagUke2, fredagUke2), + new LukketPeriode(fredagUke1, søndagUke2))) + .isTrue(); } @Test void skal_si_at_helg_ikke_overlapper() { - assertThat(perioderUtenHelgOverlapper(new LukketPeriode(fredagUke1, søndagUke1), new LukketPeriode(lørdagUke1, søndagUke2))).isFalse(); - assertThat(perioderUtenHelgOverlapper(new LukketPeriode(fredagUke1, søndagUke1), new LukketPeriode(lørdagUke1, søndagUke1))).isFalse(); + assertThat( + perioderUtenHelgOverlapper( + new LukketPeriode(fredagUke1, søndagUke1), + new LukketPeriode(lørdagUke1, søndagUke2))) + .isFalse(); + assertThat( + perioderUtenHelgOverlapper( + new LukketPeriode(fredagUke1, søndagUke1), + new LukketPeriode(lørdagUke1, søndagUke1))) + .isFalse(); } private LocalDate dag(DayOfWeek dag, int ukenr) { return SØNDAG_FØR_UKE_1.plusWeeks(ukenr - 1).plusDays(dag.getValue()); } - } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/StandardKonfigurasjonTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/StandardKonfigurasjonTest.java index 579a28eb..9c69bed4 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/StandardKonfigurasjonTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/konfig/StandardKonfigurasjonTest.java @@ -4,21 +4,31 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.time.LocalDate; - import org.junit.jupiter.api.Test; class StandardKonfigurasjonTest { @Test void test_standard_konfiguration() { - assertThat(Konfigurasjon.STANDARD.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, LocalDate.of(2017, 12, 5))).isEqualTo(6); - assertThat(Konfigurasjon.STANDARD.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, LocalDate.of(2017, 12, 5))).isEqualTo(6); + assertThat( + Konfigurasjon.STANDARD.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, + LocalDate.of(2017, 12, 5))) + .isEqualTo(6); + assertThat( + Konfigurasjon.STANDARD.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, + LocalDate.of(2017, 12, 5))) + .isEqualTo(6); } @Test void hent_parameter_utenfor_periode_skal_gi_exception() { - assertThrows(IllegalArgumentException.class, - () -> Konfigurasjon.STANDARD.getParameter(Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, LocalDate.of(1970, 12, 5))); + assertThrows( + IllegalArgumentException.class, + () -> + Konfigurasjon.STANDARD.getParameter( + Parametertype.FORBEHOLDT_MOR_ETTER_FØDSEL_UKER, + LocalDate.of(1970, 12, 5))); } - } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningFlerbarnsdagerTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningFlerbarnsdagerTest.java index febe03de..836b0029 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningFlerbarnsdagerTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningFlerbarnsdagerTest.java @@ -5,9 +5,6 @@ import java.util.List; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.FastsattUttakPeriode; @@ -16,26 +13,49 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.IkkeOppfyltÅrsak; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.utfall.InnvilgetÅrsak; +import org.junit.jupiter.api.Test; class SaldoUtregningFlerbarnsdagerTest { - @Test - void skal_bare_trekke_flerbarnsdager_fra_perioder_med_flerbarnsdager_med_minsterett_hvis_perioden_trekker_minsterett() { + void + skal_bare_trekke_flerbarnsdager_fra_perioder_med_flerbarnsdager_med_minsterett_hvis_perioden_trekker_minsterett() { var aktivitetIdentifikator = AktivitetIdentifikator.forFrilans(); - var periode1 = new FastsattUttakPeriode.Builder().flerbarnsdager(true) - .periodeResultatType(Perioderesultattype.INNVILGET) - .resultatÅrsak(mapTilÅrsak(InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), Stønadskontotype.FORELDREPENGER, aktivitetIdentifikator))) - .build(); - var periode2 = new FastsattUttakPeriode.Builder().flerbarnsdager(true) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .resultatÅrsak(mapTilÅrsak(IkkeOppfyltÅrsak.AKTIVITET_UKJENT_UDOKUMENTERT)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), Stønadskontotype.FORELDREPENGER, aktivitetIdentifikator))) - .build(); - var saldoUtregning = new SaldoUtregningFlerbarnsdager(List.of(periode1, periode2), List.of(), Set.of(aktivitetIdentifikator), - new Trekkdager(10), new Trekkdager(10)); + var periode1 = + new FastsattUttakPeriode.Builder() + .flerbarnsdager(true) + .periodeResultatType(Perioderesultattype.INNVILGET) + .resultatÅrsak( + mapTilÅrsak( + InnvilgetÅrsak + .FORELDREPENGER_KUN_FAR_HAR_RETT_UTEN_AKTIVITETSKRAV)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + Stønadskontotype.FORELDREPENGER, + aktivitetIdentifikator))) + .build(); + var periode2 = + new FastsattUttakPeriode.Builder() + .flerbarnsdager(true) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .resultatÅrsak(mapTilÅrsak(IkkeOppfyltÅrsak.AKTIVITET_UKJENT_UDOKUMENTERT)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + Stønadskontotype.FORELDREPENGER, + aktivitetIdentifikator))) + .build(); + var saldoUtregning = + new SaldoUtregningFlerbarnsdager( + List.of(periode1, periode2), + List.of(), + Set.of(aktivitetIdentifikator), + new Trekkdager(10), + new Trekkdager(10)); assertThat(saldoUtregning.restSaldo()).isEqualTo(new Trekkdager(5)); } @@ -43,18 +63,37 @@ void skal_bare_trekke_flerbarnsdager_fra_perioder_med_flerbarnsdager_med_minster @Test void skal_alltid_trekke_flerbarnsdager_fra_perioder_med_flerbarnsdager_hvis_uten_minsterett() { var aktivitetIdentifikator = AktivitetIdentifikator.forFrilans(); - var periode1 = new FastsattUttakPeriode.Builder().flerbarnsdager(true) - .periodeResultatType(Perioderesultattype.INNVILGET) - .resultatÅrsak(mapTilÅrsak(InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), Stønadskontotype.FORELDREPENGER, aktivitetIdentifikator))) - .build(); - var periode2 = new FastsattUttakPeriode.Builder().flerbarnsdager(true) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .resultatÅrsak(mapTilÅrsak(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN)) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), Stønadskontotype.FORELDREPENGER, aktivitetIdentifikator))) - .build(); - var saldoUtregning = new SaldoUtregningFlerbarnsdager(List.of(periode1, periode2), List.of(), Set.of(aktivitetIdentifikator), - new Trekkdager(10), Trekkdager.ZERO); + var periode1 = + new FastsattUttakPeriode.Builder() + .flerbarnsdager(true) + .periodeResultatType(Perioderesultattype.INNVILGET) + .resultatÅrsak(mapTilÅrsak(InnvilgetÅrsak.FORELDREPENGER_KUN_FAR_HAR_RETT)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + Stønadskontotype.FORELDREPENGER, + aktivitetIdentifikator))) + .build(); + var periode2 = + new FastsattUttakPeriode.Builder() + .flerbarnsdager(true) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .resultatÅrsak(mapTilÅrsak(IkkeOppfyltÅrsak.IKKE_STØNADSDAGER_IGJEN)) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + Stønadskontotype.FORELDREPENGER, + aktivitetIdentifikator))) + .build(); + var saldoUtregning = + new SaldoUtregningFlerbarnsdager( + List.of(periode1, periode2), + List.of(), + Set.of(aktivitetIdentifikator), + new Trekkdager(10), + Trekkdager.ZERO); assertThat(saldoUtregning.restSaldo()).isEqualTo(Trekkdager.ZERO); } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningTest.java index ad03591c..6b4a11b7 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/saldo/SaldoUtregningTest.java @@ -1,6 +1,5 @@ package no.nav.foreldrepenger.regler.uttak.fastsetteperiode.saldo; - import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype.FEDREKVOTE; import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype.FELLESPERIODE; import static no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype.FORELDREPENGER; @@ -13,9 +12,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AktivitetIdentifikator; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.FastsattUttakPeriode; @@ -25,125 +21,233 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Orgnummer; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Perioderesultattype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Stønadskontotype; +import org.junit.jupiter.api.Test; class SaldoUtregningTest { - private static final AktivitetIdentifikator AKTIVITET1_SØKER = AktivitetIdentifikator.forArbeid(new Orgnummer("111"), "222"); - private static final AktivitetIdentifikator AKTIVITET2_SØKER = AktivitetIdentifikator.forArbeid(new Orgnummer("333"), "444"); - private static final AktivitetIdentifikator AKTIVITET1_ANNENPART = AktivitetIdentifikator.forArbeid(new Orgnummer("555"), "666"); - private static final AktivitetIdentifikator AKTIVITET2_ANNENPART = AktivitetIdentifikator.forArbeid(new Orgnummer("777"), "888"); + private static final AktivitetIdentifikator AKTIVITET1_SØKER = + AktivitetIdentifikator.forArbeid(new Orgnummer("111"), "222"); + private static final AktivitetIdentifikator AKTIVITET2_SØKER = + AktivitetIdentifikator.forArbeid(new Orgnummer("333"), "444"); + private static final AktivitetIdentifikator AKTIVITET1_ANNENPART = + AktivitetIdentifikator.forArbeid(new Orgnummer("555"), "666"); + private static final AktivitetIdentifikator AKTIVITET2_ANNENPART = + AktivitetIdentifikator.forArbeid(new Orgnummer("777"), "888"); private final LocalDate enTirsdag = LocalDate.of(2019, 2, 19); - - private Map.Entry stønadskonto(Stønadskontotype kontoType, int trekkdager) { + private Map.Entry stønadskonto( + Stønadskontotype kontoType, int trekkdager) { return Map.entry(kontoType, new Trekkdager(trekkdager)); } @Test void ingen_max_dag_og_ingen_trekkdager_skal_alltid_gi_0_i_saldo() { - var fastsattUttakPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(0), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); + var fastsattUttakPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(0), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); var perioderSøker = List.of(fastsattUttakPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 0)), perioderSøker, List.of(), false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 0)), + perioderSøker, + List.of(), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE, AKTIVITET1_SØKER)).isZero(); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isZero(); } @Test void max_dager_minus_trekkdag_skal_bli_saldo() { - var fastsattUttakPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); + var fastsattUttakPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); var perioderSøker = List.of(fastsattUttakPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 10)), perioderSøker, List.of(), false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 10)), + perioderSøker, + List.of(), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE, AKTIVITET1_SØKER)).isEqualTo(10 - 5); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(10 - 5); } @Test void flere_trekk_gir_riktig_saldo() { - var fastsattUttakPeriode1 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); - var fastsattUttakPeriode2 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); + var fastsattUttakPeriode1 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); + var fastsattUttakPeriode2 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); var perioderSøker = List.of(fastsattUttakPeriode1, fastsattUttakPeriode2); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 12)), perioderSøker, List.of(), false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 12)), + perioderSøker, + List.of(), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE, AKTIVITET1_SØKER)).isEqualTo(12 - 5 - 5); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(12 - 5 - 5); } @Test void skal_runde_opp_hvis_ikke_brukt_mer_enn_maks() { - var fastsattUttakPeriode1 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10.5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); + var fastsattUttakPeriode1 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10.5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); var perioderSøker = List.of(fastsattUttakPeriode1); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 12)), perioderSøker, List.of(), false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 12)), + perioderSøker, + List.of(), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(2); } @Test void skal_runde_opp_hvis_brukt_mer_enn_maks() { - var fastsattUttakPeriode1 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(13.5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); + var fastsattUttakPeriode1 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(13.5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); var perioderSøker = List.of(fastsattUttakPeriode1); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 12)), perioderSøker, List.of(), false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 12)), + perioderSøker, + List.of(), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(-1); } @Test void for_stort_trekk_gir_riktig_saldo() { - var fastsattUttakPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), MØDREKVOTE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); + var fastsattUttakPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), MØDREKVOTE, AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); var perioderSøker = List.of(fastsattUttakPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(MØDREKVOTE, 10)), perioderSøker, List.of(), false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(MØDREKVOTE, 10)), + perioderSøker, + List.of(), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(MØDREKVOTE, AKTIVITET1_SØKER)).isEqualTo(10 - 15); assertThat(saldoUtregning.saldo(MØDREKVOTE)).isEqualTo(10 - 15); } @Test void returnerer_dagerUtenAktivitetskrav() { - var fastsattUttakPeriode1 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FORELDREPENGER, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT) - .build(); - var fastsattUttakPeriode2 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(3), FORELDREPENGER, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) - .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.ANNET) - .build(); + var fastsattUttakPeriode1 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FORELDREPENGER, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .resultatÅrsak( + FastsattUttakPeriode.ResultatÅrsak + .INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT) + .build(); + var fastsattUttakPeriode2 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(3), + FORELDREPENGER, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) + .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.ANNET) + .build(); var perioderSøker = List.of(fastsattUttakPeriode1, fastsattUttakPeriode2); - var saldoUtregning = lagForenkletSaldoUtregning(Map.of(FORELDREPENGER, 15), perioderSøker, Trekkdager.ZERO, new Trekkdager(10), - Optional.empty(), Trekkdager.ZERO); - assertThat(saldoUtregning.restSaldoDagerUtenAktivitetskrav(AKTIVITET1_SØKER)).isEqualTo(new Trekkdager(7)); + var saldoUtregning = + lagForenkletSaldoUtregning( + Map.of(FORELDREPENGER, 15), + perioderSøker, + Trekkdager.ZERO, + new Trekkdager(10), + Optional.empty(), + Trekkdager.ZERO); + assertThat(saldoUtregning.restSaldoDagerUtenAktivitetskrav(AKTIVITET1_SØKER)) + .isEqualTo(new Trekkdager(7)); assertThat(saldoUtregning.saldo(FORELDREPENGER)).isEqualTo(2); assertThat(saldoUtregning.getMaxDagerUtenAktivitetskrav()).isEqualTo(new Trekkdager(10)); } @@ -151,24 +255,51 @@ void returnerer_dagerUtenAktivitetskrav() { @Test void for_stort_trekk_som_ikke_bruker_minsterett_gir_riktig_saldo_minsterett() { // assert/netto: kanTrekkeAvMinsterett = false for MSP, Uttak, Opphold - // Forbrukeravminsterett = innvilget utenom aktivitetskrav, avslag/søknadsfrist, eller manuellbehandling - var fastsattUttakPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FORELDREPENGER, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT) - .build(); + // Forbrukeravminsterett = innvilget utenom aktivitetskrav, avslag/søknadsfrist, eller + // manuellbehandling + var fastsattUttakPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), + FORELDREPENGER, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .resultatÅrsak( + FastsattUttakPeriode.ResultatÅrsak + .INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT) + .build(); var perioderSøker = List.of(fastsattUttakPeriode); - var saldoUtregning = lagForenkletSaldoUtregning(Map.of(FORELDREPENGER, 10), perioderSøker, new Trekkdager(5), Trekkdager.ZERO, - Optional.empty(), Trekkdager.ZERO); + var saldoUtregning = + lagForenkletSaldoUtregning( + Map.of(FORELDREPENGER, 10), + perioderSøker, + new Trekkdager(5), + Trekkdager.ZERO, + Optional.empty(), + Trekkdager.ZERO); // Skal beholde dager pga minsterett 5 derfor 5-15 - assertThat(saldoUtregning.nettoSaldoJustertForMinsterett(FORELDREPENGER, AKTIVITET1_SØKER, false).decimalValue().intValue()).isEqualTo( - 5 - 15); - assertThat(saldoUtregning.nettoSaldoJustertForMinsterett(FORELDREPENGER, AKTIVITET1_SØKER, true).decimalValue().intValue()).isEqualTo( - 10 - 15); - assertThat(saldoUtregning.restSaldoMinsterett(AKTIVITET1_SØKER)).isEqualTo(new Trekkdager(5)); + assertThat( + saldoUtregning + .nettoSaldoJustertForMinsterett( + FORELDREPENGER, AKTIVITET1_SØKER, false) + .decimalValue() + .intValue()) + .isEqualTo(5 - 15); + assertThat( + saldoUtregning + .nettoSaldoJustertForMinsterett( + FORELDREPENGER, AKTIVITET1_SØKER, true) + .decimalValue() + .intValue()) + .isEqualTo(10 - 15); + assertThat(saldoUtregning.restSaldoMinsterett(AKTIVITET1_SØKER)) + .isEqualTo(new Trekkdager(5)); assertThat(saldoUtregning.restSaldoMinsterett()).isEqualTo(new Trekkdager(5)); - assertThat(saldoUtregning.restSaldoDagerUtenAktivitetskrav(AKTIVITET1_SØKER)).isEqualTo(Trekkdager.ZERO); + assertThat(saldoUtregning.restSaldoDagerUtenAktivitetskrav(AKTIVITET1_SØKER)) + .isEqualTo(Trekkdager.ZERO); assertThat(saldoUtregning.saldo(FORELDREPENGER, AKTIVITET1_SØKER)).isEqualTo(10 - 15); assertThat(saldoUtregning.saldo(FORELDREPENGER)).isEqualTo(10 - 15); assertThat(saldoUtregning.getMaxDagerMinsterett()).isEqualTo(new Trekkdager(5)); @@ -177,24 +308,49 @@ void for_stort_trekk_som_ikke_bruker_minsterett_gir_riktig_saldo_minsterett() { @Test void for_stort_trekk_som_bruker_minsterett_gir_riktig_saldo_minsterett() { // assert/netto: kanTrekkeAvMinsterett = false for MSP, Uttak, Opphold - // Forbrukeravminsterett = innvilget utenom aktivitetskrav, avslag/søknadsfrist, eller manuellbehandling - var fastsattUttakPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FORELDREPENGER, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.ANNET) - .build(); + // Forbrukeravminsterett = innvilget utenom aktivitetskrav, avslag/søknadsfrist, eller + // manuellbehandling + var fastsattUttakPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), + FORELDREPENGER, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.ANNET) + .build(); var perioderSøker = List.of(fastsattUttakPeriode); - var saldoUtregning = lagForenkletSaldoUtregning(Map.of(FORELDREPENGER, 10), perioderSøker, new Trekkdager(5), Trekkdager.ZERO, - Optional.empty(), Trekkdager.ZERO); + var saldoUtregning = + lagForenkletSaldoUtregning( + Map.of(FORELDREPENGER, 10), + perioderSøker, + new Trekkdager(5), + Trekkdager.ZERO, + Optional.empty(), + Trekkdager.ZERO); // Skal forbruke minsterett - assertThat(saldoUtregning.nettoSaldoJustertForMinsterett(FORELDREPENGER, AKTIVITET1_SØKER, false).decimalValue().intValue()).isEqualTo( - 10 - 15); - assertThat(saldoUtregning.nettoSaldoJustertForMinsterett(FORELDREPENGER, AKTIVITET1_SØKER, true).decimalValue().intValue()).isEqualTo( - 10 - 15); - assertThat(saldoUtregning.restSaldoMinsterett(AKTIVITET1_SØKER)).isEqualTo(new Trekkdager(-10)); + assertThat( + saldoUtregning + .nettoSaldoJustertForMinsterett( + FORELDREPENGER, AKTIVITET1_SØKER, false) + .decimalValue() + .intValue()) + .isEqualTo(10 - 15); + assertThat( + saldoUtregning + .nettoSaldoJustertForMinsterett( + FORELDREPENGER, AKTIVITET1_SØKER, true) + .decimalValue() + .intValue()) + .isEqualTo(10 - 15); + assertThat(saldoUtregning.restSaldoMinsterett(AKTIVITET1_SØKER)) + .isEqualTo(new Trekkdager(-10)); assertThat(saldoUtregning.restSaldoMinsterett()).isEqualTo(new Trekkdager(-10)); - assertThat(saldoUtregning.restSaldoDagerUtenAktivitetskrav(AKTIVITET1_SØKER)).isEqualTo(Trekkdager.ZERO); + assertThat(saldoUtregning.restSaldoDagerUtenAktivitetskrav(AKTIVITET1_SØKER)) + .isEqualTo(Trekkdager.ZERO); assertThat(saldoUtregning.restSaldoDagerUtenAktivitetskrav()).isEqualTo(Trekkdager.ZERO); assertThat(saldoUtregning.saldo(FORELDREPENGER, AKTIVITET1_SØKER)).isEqualTo(10 - 15); assertThat(saldoUtregning.saldo(FORELDREPENGER)).isEqualTo(10 - 15); @@ -204,23 +360,49 @@ void for_stort_trekk_som_bruker_minsterett_gir_riktig_saldo_minsterett() { @Test void for_stort_trekk_som_ikke_bruker_minsterett_gir_riktig_saldo_utenAktivitetskrav() { // assert/netto: kanTrekkeAvMinsterett = false for MSP, Uttak, Opphold - // Forbrukeravminsterett = innvilget utenom aktivitetskrav, avslag/søknadsfrist, eller manuellbehandling - var fastsattUttakPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FORELDREPENGER, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT) - .build(); + // Forbrukeravminsterett = innvilget utenom aktivitetskrav, avslag/søknadsfrist, eller + // manuellbehandling + var fastsattUttakPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), + FORELDREPENGER, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .resultatÅrsak( + FastsattUttakPeriode.ResultatÅrsak + .INNVILGET_FORELDREPENGER_KUN_FAR_HAR_RETT) + .build(); var perioderSøker = List.of(fastsattUttakPeriode); - var saldoUtregning = lagForenkletSaldoUtregning(Map.of(FORELDREPENGER, 10), perioderSøker, Trekkdager.ZERO, new Trekkdager(5), - Optional.empty(), Trekkdager.ZERO); + var saldoUtregning = + lagForenkletSaldoUtregning( + Map.of(FORELDREPENGER, 10), + perioderSøker, + Trekkdager.ZERO, + new Trekkdager(5), + Optional.empty(), + Trekkdager.ZERO); // Skal beholde dager pga minsterett 5 derfor 5-15 - assertThat(saldoUtregning.nettoSaldoJustertForMinsterett(FORELDREPENGER, AKTIVITET1_SØKER, false).decimalValue().intValue()).isEqualTo( - 10 - 15); - assertThat(saldoUtregning.nettoSaldoJustertForMinsterett(FORELDREPENGER, AKTIVITET1_SØKER, true).decimalValue().intValue()).isEqualTo( - 10 - 15); + assertThat( + saldoUtregning + .nettoSaldoJustertForMinsterett( + FORELDREPENGER, AKTIVITET1_SØKER, false) + .decimalValue() + .intValue()) + .isEqualTo(10 - 15); + assertThat( + saldoUtregning + .nettoSaldoJustertForMinsterett( + FORELDREPENGER, AKTIVITET1_SØKER, true) + .decimalValue() + .intValue()) + .isEqualTo(10 - 15); assertThat(saldoUtregning.restSaldoMinsterett(AKTIVITET1_SØKER)).isEqualTo(Trekkdager.ZERO); - assertThat(saldoUtregning.restSaldoDagerUtenAktivitetskrav(AKTIVITET1_SØKER)).isEqualTo(new Trekkdager(5)); + assertThat(saldoUtregning.restSaldoDagerUtenAktivitetskrav(AKTIVITET1_SØKER)) + .isEqualTo(new Trekkdager(5)); assertThat(saldoUtregning.saldo(FORELDREPENGER, AKTIVITET1_SØKER)).isEqualTo(10 - 15); assertThat(saldoUtregning.saldo(FORELDREPENGER)).isEqualTo(10 - 15); assertThat(saldoUtregning.getMaxDagerUtenAktivitetskrav()).isEqualTo(new Trekkdager(5)); @@ -230,72 +412,132 @@ void for_stort_trekk_som_ikke_bruker_minsterett_gir_riktig_saldo_utenAktivitetsk @Test void for_stort_trekk_som_bruker_minsterett_gir_riktig_saldo_utenAktivitetskrav() { // assert/netto: kanTrekkeAvMinsterett = false for MSP, Uttak, Opphold - // Forbrukeravminsterett = innvilget utenom aktivitetskrav, avslag/søknadsfrist, eller manuellbehandling - var fastsattUttakPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FORELDREPENGER, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.ANNET) - .build(); + // Forbrukeravminsterett = innvilget utenom aktivitetskrav, avslag/søknadsfrist, eller + // manuellbehandling + var fastsattUttakPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), + FORELDREPENGER, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.ANNET) + .build(); var perioderSøker = List.of(fastsattUttakPeriode); - var saldoUtregning = lagForenkletSaldoUtregning(Map.of(FORELDREPENGER, 10), perioderSøker, Trekkdager.ZERO, new Trekkdager(5), - Optional.empty(), Trekkdager.ZERO); + var saldoUtregning = + lagForenkletSaldoUtregning( + Map.of(FORELDREPENGER, 10), + perioderSøker, + Trekkdager.ZERO, + new Trekkdager(5), + Optional.empty(), + Trekkdager.ZERO); // Skal forbruke minsterett - assertThat(saldoUtregning.nettoSaldoJustertForMinsterett(FORELDREPENGER, AKTIVITET1_SØKER, false).decimalValue().intValue()).isEqualTo( - 10 - 15); - assertThat(saldoUtregning.nettoSaldoJustertForMinsterett(FORELDREPENGER, AKTIVITET1_SØKER, true).decimalValue().intValue()).isEqualTo( - 10 - 15); + assertThat( + saldoUtregning + .nettoSaldoJustertForMinsterett( + FORELDREPENGER, AKTIVITET1_SØKER, false) + .decimalValue() + .intValue()) + .isEqualTo(10 - 15); + assertThat( + saldoUtregning + .nettoSaldoJustertForMinsterett( + FORELDREPENGER, AKTIVITET1_SØKER, true) + .decimalValue() + .intValue()) + .isEqualTo(10 - 15); assertThat(saldoUtregning.restSaldoMinsterett(AKTIVITET1_SØKER)).isEqualTo(Trekkdager.ZERO); - assertThat(saldoUtregning.restSaldoDagerUtenAktivitetskrav(AKTIVITET1_SØKER)).isEqualTo(new Trekkdager(-10)); + assertThat(saldoUtregning.restSaldoDagerUtenAktivitetskrav(AKTIVITET1_SØKER)) + .isEqualTo(new Trekkdager(-10)); assertThat(saldoUtregning.saldo(FORELDREPENGER, AKTIVITET1_SØKER)).isEqualTo(10 - 15); assertThat(saldoUtregning.saldo(FORELDREPENGER)).isEqualTo(10 - 15); } @Test void vanlig_far_fødsel_gir_riktig_saldo_far_fødsel() { - var fastsattUttakPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FEDREKVOTE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.ANNET) - .build(); + var fastsattUttakPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), FEDREKVOTE, AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.ANNET) + .build(); var perioderSøker = List.of(fastsattUttakPeriode); - var saldoUtregning = lagForenkletSaldoUtregning(Map.of(FEDREKVOTE, 10), perioderSøker, Trekkdager.ZERO, Trekkdager.ZERO, - Optional.of(new LukketPeriode(enTirsdag, enTirsdag)), new Trekkdager(10)); + var saldoUtregning = + lagForenkletSaldoUtregning( + Map.of(FEDREKVOTE, 10), + perioderSøker, + Trekkdager.ZERO, + Trekkdager.ZERO, + Optional.of(new LukketPeriode(enTirsdag, enTirsdag)), + new Trekkdager(10)); // Skal forbruke minsterett var rundtFødsel = new LukketPeriode(enTirsdag, enTirsdag); - assertThat(saldoUtregning.restSaldoFarUttakRundtFødsel(AKTIVITET1_SØKER, rundtFødsel)).isEqualTo(new Trekkdager(5)); - assertThat(saldoUtregning.restSaldoFarUttakRundtFødsel(rundtFødsel)).isEqualTo(new Trekkdager(5)); + assertThat(saldoUtregning.restSaldoFarUttakRundtFødsel(AKTIVITET1_SØKER, rundtFødsel)) + .isEqualTo(new Trekkdager(5)); + assertThat(saldoUtregning.restSaldoFarUttakRundtFødsel(rundtFødsel)) + .isEqualTo(new Trekkdager(5)); } @Test void for_stort_trekk_far_fødsel_gir_riktig_saldo_far_fødsel() { - var fastsattUttakPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FEDREKVOTE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.ANNET) - .build(); + var fastsattUttakPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), FEDREKVOTE, AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .resultatÅrsak(FastsattUttakPeriode.ResultatÅrsak.ANNET) + .build(); var perioderSøker = List.of(fastsattUttakPeriode); - var saldoUtregning = lagForenkletSaldoUtregning(Map.of(FEDREKVOTE, 10), perioderSøker, Trekkdager.ZERO, Trekkdager.ZERO, - Optional.of(new LukketPeriode(enTirsdag, enTirsdag)), new Trekkdager(10)); + var saldoUtregning = + lagForenkletSaldoUtregning( + Map.of(FEDREKVOTE, 10), + perioderSøker, + Trekkdager.ZERO, + Trekkdager.ZERO, + Optional.of(new LukketPeriode(enTirsdag, enTirsdag)), + new Trekkdager(10)); // Skal forbruke minsterett var rundtFødsel = new LukketPeriode(enTirsdag, enTirsdag); - assertThat(saldoUtregning.restSaldoFarUttakRundtFødsel(AKTIVITET1_SØKER, rundtFødsel)).isEqualTo(new Trekkdager(-5)); - assertThat(saldoUtregning.restSaldoFarUttakRundtFødsel(rundtFødsel)).isEqualTo(new Trekkdager(-5)); + assertThat(saldoUtregning.restSaldoFarUttakRundtFødsel(AKTIVITET1_SØKER, rundtFødsel)) + .isEqualTo(new Trekkdager(-5)); + assertThat(saldoUtregning.restSaldoFarUttakRundtFødsel(rundtFødsel)) + .isEqualTo(new Trekkdager(-5)); } @Test void for_stort_trekk_på_flere_aktiviteter_gir_riktig_saldo() { - var fastsattUttakPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), MØDREKVOTE, AKTIVITET1_SØKER), - new FastsattUttakPeriodeAktivitet(new Trekkdager(20), MØDREKVOTE, AKTIVITET2_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); + var fastsattUttakPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), MØDREKVOTE, AKTIVITET1_SØKER), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(20), MØDREKVOTE, AKTIVITET2_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); var perioderSøker = List.of(fastsattUttakPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(MØDREKVOTE, 10)), perioderSøker, List.of(), false, - Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(MØDREKVOTE, 10)), + perioderSøker, + List.of(), + false, + Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), + null, + null); assertThat(saldoUtregning.saldo(MØDREKVOTE, AKTIVITET1_SØKER)).isEqualTo(10 - 15); assertThat(saldoUtregning.saldo(MØDREKVOTE, AKTIVITET2_SØKER)).isEqualTo(10 - 20); assertThat(saldoUtregning.saldo(MØDREKVOTE)).isEqualTo(10 - 15); @@ -303,15 +545,27 @@ void for_stort_trekk_som_bruker_minsterett_gir_riktig_saldo_utenAktivitetskrav() @Test void flere_trekk_på_forskjellig_aktivitet_gir_forskjellig_saldo() { - var fastsattUttakPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), MØDREKVOTE, AKTIVITET1_SØKER), - new FastsattUttakPeriodeAktivitet(new Trekkdager(10), MØDREKVOTE, AKTIVITET2_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); + var fastsattUttakPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), MØDREKVOTE, AKTIVITET1_SØKER), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), MØDREKVOTE, AKTIVITET2_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); var perioderSøker = List.of(fastsattUttakPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(MØDREKVOTE, 10)), perioderSøker, List.of(), false, - Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(MØDREKVOTE, 10)), + perioderSøker, + List.of(), + false, + Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), + null, + null); assertThat(saldoUtregning.saldo(MØDREKVOTE, AKTIVITET1_SØKER)).isEqualTo(5); assertThat(saldoUtregning.saldo(MØDREKVOTE, AKTIVITET2_SØKER)).isZero(); assertThat(saldoUtregning.saldo(MØDREKVOTE)).isEqualTo(5); @@ -319,21 +573,42 @@ void for_stort_trekk_som_bruker_minsterett_gir_riktig_saldo_utenAktivitetskrav() @Test void trekkdager_på_annen_part_skal_telle_med_i_saldo() { - var søkerPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER), - new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET2_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); - var annenpartPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(12), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) - .build(); + var søkerPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET2_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); + var annenpartPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(12), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) + .build(); var perioderSøker = List.of(søkerPeriode); var perioderAnnenpart = List.of(annenpartPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(MØDREKVOTE, 10), stønadskonto(FELLESPERIODE, 20)), perioderSøker, - perioderAnnenpart, false, Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries( + stønadskonto(MØDREKVOTE, 10), stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE, AKTIVITET1_SØKER)).isEqualTo(3); assertThat(saldoUtregning.saldo(FELLESPERIODE, AKTIVITET2_SØKER)).isEqualTo(-2); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(3); @@ -341,22 +616,46 @@ void for_stort_trekk_som_bruker_minsterett_gir_riktig_saldo_utenAktivitetskrav() @Test void minste_trekkdager_på_annen_part_skal_telle_med_i_saldo() { - var søkerPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER), - new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET2_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); - var annenpartPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(7), FELLESPERIODE, AKTIVITET1_ANNENPART), - new FastsattUttakPeriodeAktivitet(new Trekkdager(12), FELLESPERIODE, AKTIVITET2_ANNENPART))) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) - .build(); + var søkerPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET2_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); + var annenpartPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(7), + FELLESPERIODE, + AKTIVITET1_ANNENPART), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(12), + FELLESPERIODE, + AKTIVITET2_ANNENPART))) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) + .build(); var perioderSøker = List.of(søkerPeriode); var perioderAnnenpart = List.of(annenpartPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(MØDREKVOTE, 10), stønadskonto(FELLESPERIODE, 20)), perioderSøker, - perioderAnnenpart, false, Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries( + stønadskonto(MØDREKVOTE, 10), stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE, AKTIVITET1_SØKER)).isEqualTo(8); assertThat(saldoUtregning.saldo(FELLESPERIODE, AKTIVITET2_SØKER)).isEqualTo(3); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(8); @@ -364,28 +663,61 @@ void for_stort_trekk_som_bruker_minsterett_gir_riktig_saldo_utenAktivitetskrav() @Test void flere_trekk_på_annen_part_skal_telle_med_i_saldo() { - var søkerPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER), - new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET2_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); - var annenpartPeriode1 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(2), FELLESPERIODE, AKTIVITET1_ANNENPART), - new FastsattUttakPeriodeAktivitet(new Trekkdager(3), FELLESPERIODE, AKTIVITET2_ANNENPART))) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) - .build(); - var annenpartPeriode2 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(2), FELLESPERIODE, AKTIVITET1_ANNENPART), - new FastsattUttakPeriodeAktivitet(new Trekkdager(3), FELLESPERIODE, AKTIVITET2_ANNENPART))) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) - .build(); + var søkerPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET2_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); + var annenpartPeriode1 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(2), + FELLESPERIODE, + AKTIVITET1_ANNENPART), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(3), + FELLESPERIODE, + AKTIVITET2_ANNENPART))) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) + .build(); + var annenpartPeriode2 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(2), + FELLESPERIODE, + AKTIVITET1_ANNENPART), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(3), + FELLESPERIODE, + AKTIVITET2_ANNENPART))) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) + .build(); var perioderSøker = List.of(søkerPeriode); var perioderAnnenpart = List.of(annenpartPeriode1, annenpartPeriode2); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(MØDREKVOTE, 10), stønadskonto(FELLESPERIODE, 20)), perioderSøker, - perioderAnnenpart, false, Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries( + stønadskonto(MØDREKVOTE, 10), stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE, AKTIVITET1_SØKER)).isEqualTo(11); assertThat(saldoUtregning.saldo(FELLESPERIODE, AKTIVITET2_SØKER)).isEqualTo(6); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(11); @@ -393,216 +725,411 @@ void for_stort_trekk_som_bruker_minsterett_gir_riktig_saldo_utenAktivitetskrav() @Test void ikke_stjele_men_summere_begge_parter_hvis_berørt_behandling() { - var søkerPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .mottattDato(LocalDate.MAX) - .samtidigUttak(false) - .build(); - var annenpartPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(12), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .mottattDato(LocalDate.MIN) - .build(); + var søkerPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .mottattDato(LocalDate.MAX) + .samtidigUttak(false) + .build(); + var annenpartPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(12), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .mottattDato(LocalDate.MIN) + .build(); var perioderSøker = List.of(søkerPeriode); var perioderAnnenpart = List.of(annenpartPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, true, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + true, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(3); } @Test void ikke_stjele_men_summere_begge_parter_hvis_tapende_periode() { - var søkerPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .samtidigUttak(false) - .mottattDato(LocalDate.MIN) - .build(); - var annenpartPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(12), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .mottattDato(LocalDate.MAX) - .build(); + var søkerPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .samtidigUttak(false) + .mottattDato(LocalDate.MIN) + .build(); + var annenpartPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(12), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .mottattDato(LocalDate.MAX) + .build(); var perioderSøker = List.of(søkerPeriode); var perioderAnnenpart = List.of(annenpartPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(3); } @Test - void ikke_stjele_men_summere_begge_parter_hvis_tapende_periode_søkt_samme_dag_søker_søkt_først() { - var søkerPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .samtidigUttak(false) - .mottattDato(LocalDate.MIN) - .build(); - var annenpartPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(12), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .mottattDato(LocalDate.MIN) - .build(); + void + ikke_stjele_men_summere_begge_parter_hvis_tapende_periode_søkt_samme_dag_søker_søkt_først() { + var søkerPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .samtidigUttak(false) + .mottattDato(LocalDate.MIN) + .build(); + var annenpartPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(12), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .mottattDato(LocalDate.MIN) + .build(); var perioderSøker = List.of(søkerPeriode); var perioderAnnenpart = List.of(annenpartPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), enTirsdag.atStartOfDay(), enTirsdag.atStartOfDay().plusHours(2)); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + enTirsdag.atStartOfDay(), + enTirsdag.atStartOfDay().plusHours(2)); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(3); } @Test void stjele_hvis_tapende_periode_søkt_samme_dag_og_annenpart_har_søkt_til_slutt() { - var søkerPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .samtidigUttak(false) - .mottattDato(LocalDate.MIN) - .build(); - var annenpartPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(12), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .mottattDato(LocalDate.MIN) - .build(); + var søkerPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .samtidigUttak(false) + .mottattDato(LocalDate.MIN) + .build(); + var annenpartPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(12), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .mottattDato(LocalDate.MIN) + .build(); var perioderSøker = List.of(søkerPeriode); var perioderAnnenpart = List.of(annenpartPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), enTirsdag.atStartOfDay().plusHours(2), enTirsdag.atStartOfDay()); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + enTirsdag.atStartOfDay().plusHours(2), + enTirsdag.atStartOfDay()); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(15); } @Test void stjele_fra_annenpart_hvis_ikke_berørt_behandling_og_ikke_samtidig_uttak() { - var søkerPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .samtidigUttak(false) - .build(); - var annenpartPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(12), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); + var søkerPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .samtidigUttak(false) + .build(); + var annenpartPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(12), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); var perioderSøker = List.of(søkerPeriode); var perioderAnnenpart = List.of(annenpartPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(15); } @Test - void skal_summere_trekkdager_for_begge_parter_hvis_overlapp_og_samtidig_uttak_og_ikke_berørt_behandling() { - var søkerPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .samtidigUttak(true) - .build(); - var annenpartPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(12), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); + void + skal_summere_trekkdager_for_begge_parter_hvis_overlapp_og_samtidig_uttak_og_ikke_berørt_behandling() { + var søkerPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .samtidigUttak(true) + .build(); + var annenpartPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(12), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); var perioderSøker = List.of(søkerPeriode); var perioderAnnenpart = List.of(annenpartPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(3); } @Test void skal_trekke_virkedager_fra_oppholdsperioder() { - var periodeSøker1 = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 15)) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .build(); - var periodeSøker2 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(0), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .tidsperiode(LocalDate.of(2019, 2, 18), LocalDate.of(2019, 2, 18)) - .build(); + var periodeSøker1 = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 15)) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .build(); + var periodeSøker2 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(0), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .tidsperiode(LocalDate.of(2019, 2, 18), LocalDate.of(2019, 2, 18)) + .build(); var perioderSøker = List.of(periodeSøker1, periodeSøker2); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 10)), perioderSøker, List.of(), false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 10)), + perioderSøker, + List.of(), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(10 - 5); } @Test void skal_trekke_oppholdsperioder_for_annenpart() { - var periodeSøker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) - .build(); - var oppholdAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 22)) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .build(); - var periodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(0), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .tidsperiode(LocalDate.of(2019, 2, 25), LocalDate.of(2019, 2, 25)) - .build(); + var periodeSøker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) + .build(); + var oppholdAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 22)) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .build(); + var periodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(0), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .tidsperiode(LocalDate.of(2019, 2, 25), LocalDate.of(2019, 2, 25)) + .build(); var perioderSøker = List.of(periodeSøker); var perioderAnnenpart = List.of(oppholdAnnenpart, periodeAnnenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(20 - 5 - 7); } @Test void skal_ikke_stjele_fra_annenpart_hvis_søker_har_oppholdsperiode() { - var oppholdsperiodeSøker = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) - .oppholdÅrsak(OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER) - .build(); - var periodeSøker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(2), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 15)) - .build(); - var periodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), MØDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) - .build(); + var oppholdsperiodeSøker = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) + .oppholdÅrsak(OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER) + .build(); + var periodeSøker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(2), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 15)) + .build(); + var periodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + MØDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) + .build(); var perioderSøker = List.of(periodeSøker, oppholdsperiodeSøker); var perioderAnnenpart = List.of(periodeAnnenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20), stønadskonto(MØDREKVOTE, 20)), perioderSøker, - perioderAnnenpart, false, Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries( + stønadskonto(FELLESPERIODE, 20), stønadskonto(MØDREKVOTE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(20 - 2); assertThat(saldoUtregning.saldo(MØDREKVOTE)).isEqualTo(20 - 5); } @Test void skal_ikke_knekke_hvis_periode_er_i_en_helg() { - var søkerPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER), - new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET2_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 16), LocalDate.of(2019, 2, 16)) - .build(); - var annenpartPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(12), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .tidsperiode(LocalDate.of(2019, 2, 17), LocalDate.of(2019, 2, 17)) - .build(); + var søkerPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET2_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 16), LocalDate.of(2019, 2, 16)) + .build(); + var annenpartPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(12), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .tidsperiode(LocalDate.of(2019, 2, 17), LocalDate.of(2019, 2, 17)) + .build(); var perioderSøker = List.of(søkerPeriode); var perioderAnnenpart = List.of(annenpartPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(MØDREKVOTE, 10), stønadskonto(FELLESPERIODE, 20)), perioderSøker, - perioderAnnenpart, false, Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries( + stønadskonto(MØDREKVOTE, 10), stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE, AKTIVITET1_SØKER)).isEqualTo(3); assertThat(saldoUtregning.saldo(FELLESPERIODE, AKTIVITET2_SØKER)).isEqualTo(-2); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(3); @@ -610,347 +1137,668 @@ void skal_ikke_knekke_hvis_periode_er_i_en_helg() { @Test void overlappende_oppholdsperioder_skal_trekke_fra_annenparts_periode_ved() { - var periodeSøker1 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(2), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) - .build(); - var oppholdsperiodeSøker = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 15)) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .build(); - var oppholdsperiodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 15)) - .oppholdÅrsak(OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER) - .build(); - var periodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), MØDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 18), LocalDate.of(2019, 2, 18)) - .build(); + var periodeSøker1 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(2), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) + .build(); + var oppholdsperiodeSøker = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 15)) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .build(); + var oppholdsperiodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 15)) + .oppholdÅrsak(OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER) + .build(); + var periodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), + MØDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 18), LocalDate.of(2019, 2, 18)) + .build(); var perioderSøker = List.of(periodeSøker1, oppholdsperiodeSøker); var perioderAnnenpart = List.of(oppholdsperiodeAnnenpart, periodeAnnenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20), stønadskonto(MØDREKVOTE, 20)), perioderSøker, - perioderAnnenpart, true, Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries( + stønadskonto(FELLESPERIODE, 20), stønadskonto(MØDREKVOTE, 20)), + perioderSøker, + perioderAnnenpart, + true, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(20 - 2); assertThat(saldoUtregning.saldo(MØDREKVOTE)).isEqualTo(20 - 3); } @Test void overlapp_med_avslått_perioder_på_søker_skal_telles_dobbelt() { - var søkerPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(0), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .tidsperiode(enTirsdag, enTirsdag) - .build(); - var annenpartPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(12), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); + var søkerPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(0), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .tidsperiode(enTirsdag, enTirsdag) + .build(); + var annenpartPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(12), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); var perioderSøker = List.of(søkerPeriode); var perioderAnnenpart = List.of(annenpartPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(20 - 12); } @Test - void hvis_søkers_innvilget_periode_overlapper_med_annenparts_oppholdsperiode_skal_det_ikke_trekkes_dobbelt() { - var periodeSøker1 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(3), MØDREKVOTE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) - .build(); - var oppholdsperiodeSøker = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 15)) - .oppholdÅrsak(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER) - .build(); - var oppholdsperiodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) - .oppholdÅrsak(OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER) - .build(); - var periodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(2), FEDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 15)) - .build(); + void + hvis_søkers_innvilget_periode_overlapper_med_annenparts_oppholdsperiode_skal_det_ikke_trekkes_dobbelt() { + var periodeSøker1 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(3), MØDREKVOTE, AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) + .build(); + var oppholdsperiodeSøker = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 15)) + .oppholdÅrsak(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER) + .build(); + var oppholdsperiodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 11), LocalDate.of(2019, 2, 13)) + .oppholdÅrsak(OppholdÅrsak.MØDREKVOTE_ANNEN_FORELDER) + .build(); + var periodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(2), + FEDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 15)) + .build(); var perioderSøker = List.of(periodeSøker1, oppholdsperiodeSøker); var perioderAnnenpart = List.of(oppholdsperiodeAnnenpart, periodeAnnenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(MØDREKVOTE, 20), stønadskonto(FEDREKVOTE, 20)), perioderSøker, - perioderAnnenpart, true, Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(MØDREKVOTE, 20), stønadskonto(FEDREKVOTE, 20)), + perioderSøker, + perioderAnnenpart, + true, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FEDREKVOTE)).isEqualTo(20 - 2); assertThat(saldoUtregning.saldo(MØDREKVOTE)).isEqualTo(20 - 3); } @Test void hvis_alle_søkers_perioder_er_etter_annenpart_skal_det_ikke_være_nok_dager_å_frigi() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 15), LocalDate.of(2019, 2, 15)) - .build(); - var periode2Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 16), LocalDate.of(2019, 2, 16)) - .build(); - - var periode1Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 13), LocalDate.of(2019, 2, 13)) - .build(); - var periode2Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 14)) - .build(); + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 15), LocalDate.of(2019, 2, 15)) + .build(); + var periode2Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 16), LocalDate.of(2019, 2, 16)) + .build(); + + var periode1Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 13), LocalDate.of(2019, 2, 13)) + .build(); + var periode2Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 14), LocalDate.of(2019, 2, 14)) + .build(); var perioderSøker = List.of(periode1Søker, periode2Søker); var perioderAnnenpart = List.of(periode1Annenpart, periode2Annenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isFalse(); } @Test void hvis_ikke_alle_søkers_perioder_er_etter_annenpart_skal_det_være_nok_dager_å_frigi() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 15), LocalDate.of(2019, 2, 20)) - .build(); - - var periode1Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 10), LocalDate.of(2019, 2, 14)) - .build(); - var periode2Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 2, 15), LocalDate.of(2019, 2, 20)) - .build(); + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 15), LocalDate.of(2019, 2, 20)) + .build(); + + var periode1Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 10), LocalDate.of(2019, 2, 14)) + .build(); + var periode2Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 2, 15), LocalDate.of(2019, 2, 20)) + .build(); var perioderSøker = List.of(periode1Søker); var perioderAnnenpart = List.of(periode1Annenpart, periode2Annenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isTrue(); } @Test - void annenpart_har_ikke_nok_dager_å_frigi_selv_med_perioder_etter_søkers_siste_periode_med_trekkdager() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) - .build(); - - var periode1Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) - .build(); - var periode2Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 3)) - .build(); + void + annenpart_har_ikke_nok_dager_å_frigi_selv_med_perioder_etter_søkers_siste_periode_med_trekkdager() { + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) + .build(); + + var periode1Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) + .build(); + var periode2Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 3)) + .build(); var perioderSøker = List.of(periode1Søker); var perioderAnnenpart = List.of(periode1Annenpart, periode2Annenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isFalse(); } @Test - void annenpart_har_ikke_nok_dager_å_frigi_selv_med_perioder_etter_søkers_siste_periode_med_trekkdager_flere_arbeidsforhold_hos_annenpart() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) - .build(); - - var periode1Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FELLESPERIODE, AKTIVITET1_ANNENPART), - new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FELLESPERIODE, AKTIVITET2_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) - .build(); - var periode2Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_ANNENPART), - new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET2_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 3)) - .build(); + void + annenpart_har_ikke_nok_dager_å_frigi_selv_med_perioder_etter_søkers_siste_periode_med_trekkdager_flere_arbeidsforhold_hos_annenpart() { + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) + .build(); + + var periode1Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), + FELLESPERIODE, + AKTIVITET1_ANNENPART), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), + FELLESPERIODE, + AKTIVITET2_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) + .build(); + var periode2Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_ANNENPART), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET2_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 3)) + .build(); var perioderSøker = List.of(periode1Søker); var perioderAnnenpart = List.of(periode1Annenpart, periode2Annenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isFalse(); } @Test void annenpart_har_nok_dager_å_frigi_etter_søkers_siste_periode_med_trekkdager() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) - .build(); - - var periode1Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) - .build(); - var periode2Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 3)) - .build(); + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) + .build(); + + var periode1Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) + .build(); + var periode2Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 3)) + .build(); var perioderSøker = List.of(periode1Søker); var perioderAnnenpart = List.of(periode1Annenpart, periode2Annenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isTrue(); } @Test - void annenpart_har_nok_dager_å_frigi_etter_søkers_siste_periode_med_trekkdager_hvis_søkers_siste_periode_starter_samme_dag_som_annenparts_siste_periode() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 4), LocalDate.of(2019, 3, 5)) - .build(); - - var periode1Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(30), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 4), LocalDate.of(2019, 3, 12)) - .build(); + void + annenpart_har_nok_dager_å_frigi_etter_søkers_siste_periode_med_trekkdager_hvis_søkers_siste_periode_starter_samme_dag_som_annenparts_siste_periode() { + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 4), LocalDate.of(2019, 3, 5)) + .build(); + + var periode1Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(30), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 4), LocalDate.of(2019, 3, 12)) + .build(); var perioderSøker = List.of(periode1Søker); var perioderAnnenpart = List.of(periode1Annenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 30)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 30)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isTrue(); } @Test - void annenpart_har_nok_dager_å_frigi_etter_søkers_siste_periode_med_trekkdager_flere_arbeidsforhold_hos_annenpart() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) - .build(); - - var periode1Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_ANNENPART), - new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET2_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) - .build(); - var periode2Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FELLESPERIODE, AKTIVITET1_ANNENPART), - new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET2_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 3)) - .build(); + void + annenpart_har_nok_dager_å_frigi_etter_søkers_siste_periode_med_trekkdager_flere_arbeidsforhold_hos_annenpart() { + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) + .build(); + + var periode1Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_ANNENPART), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET2_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) + .build(); + var periode2Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), + FELLESPERIODE, + AKTIVITET1_ANNENPART), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET2_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 3)) + .build(); var perioderSøker = List.of(periode1Søker); var perioderAnnenpart = List.of(periode1Annenpart, periode2Annenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isTrue(); } @Test - void annenpart_har_nok_dager_å_frigi_etter_søkers_siste_periode_med_trekkdager_oppholdsperiode() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) - .build(); - - var periode1Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) - .build(); - var periode2Annenpart = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 25)) - .build(); + void + annenpart_har_nok_dager_å_frigi_etter_søkers_siste_periode_med_trekkdager_oppholdsperiode() { + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) + .build(); + + var periode1Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) + .build(); + var periode2Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 25)) + .build(); var perioderSøker = List.of(periode1Søker); var perioderAnnenpart = List.of(periode1Annenpart, periode2Annenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isTrue(); } @Test void annenpart_har_ikke_nok_dager_å_frigi_etter_søkers_siste_periode_med_trekkdager() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) - .build(); - - var periode2Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FEDREKVOTE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 4), LocalDate.of(2019, 3, 4)) - .build(); - - var periode1Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) - .build(); - var periode2Annenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 3)) - .build(); + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) + .build(); + + var periode2Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), FEDREKVOTE, AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 4), LocalDate.of(2019, 3, 4)) + .build(); + + var periode1Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 1), LocalDate.of(2019, 3, 1)) + .build(); + var periode2Annenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 3), LocalDate.of(2019, 3, 3)) + .build(); var perioderSøker = List.of(periode1Søker, periode2Søker); var perioderAnnenpart = List.of(periode1Annenpart, periode2Annenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20), stønadskonto(FEDREKVOTE, 20)), perioderSøker, - perioderAnnenpart, false, Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries( + stønadskonto(FELLESPERIODE, 20), stønadskonto(FEDREKVOTE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isFalse(); } @Test void har_søkt_samtidig_uttak() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .samtidigUttak(true) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) - .build(); + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .samtidigUttak(true) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) + .build(); var perioderSøker = List.of(periode1Søker); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, List.of(), false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + List.of(), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.søktSamtidigUttak(FELLESPERIODE)).isTrue(); assertThat(saldoUtregning.søktSamtidigUttak(FEDREKVOTE)).isFalse(); @@ -958,15 +1806,28 @@ void overlappende_oppholdsperioder_skal_trekke_fra_annenparts_periode_ved() { @Test void har_ikke_søkt_samtidig_uttak() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) - .build(); + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 3, 2), LocalDate.of(2019, 3, 2)) + .build(); var perioderSøker = List.of(periode1Søker); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, List.of(), false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + List.of(), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.søktSamtidigUttak(FELLESPERIODE)).isFalse(); assertThat(saldoUtregning.søktSamtidigUttak(FEDREKVOTE)).isFalse(); @@ -974,314 +1835,600 @@ void overlappende_oppholdsperioder_skal_trekke_fra_annenparts_periode_ved() { @Test void skal_støtte_en_søknadsperiode_overlapper_med_flere_oppholdsperioder_hos_annenpart() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(4), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 7), LocalDate.of(2019, 10, 10)) - .build(); - - var opphold1 = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 7), LocalDate.of(2019, 10, 7)) - .build(); - var opphold2 = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 8), LocalDate.of(2019, 10, 8)) - .build(); - var uttakAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), MØDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 11), LocalDate.of(2019, 10, 11)) - .build(); + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(4), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 7), LocalDate.of(2019, 10, 10)) + .build(); + + var opphold1 = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 7), LocalDate.of(2019, 10, 7)) + .build(); + var opphold2 = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 8), LocalDate.of(2019, 10, 8)) + .build(); + var uttakAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), + MØDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 11), LocalDate.of(2019, 10, 11)) + .build(); var perioderSøker = List.of(periode1Søker); var perioderAnnenpart = List.of(opphold1, opphold2, uttakAnnenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); - - //1 per søknadsperioder + 1 for resterende opphold der det ikke er søkt + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); + + // 1 per søknadsperioder + 1 for resterende opphold der det ikke er søkt assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(16); } @Test void skal_støtte_flere_søknadsperioder_overlapper_med_opphold_hos_annenpart() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 7), LocalDate.of(2019, 10, 7)) - .build(); - - var periode2Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(3), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 8), LocalDate.of(2019, 10, 10)) - .build(); - - var opphold = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 7), LocalDate.of(2019, 10, 9)) - .build(); - var uttakAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), MØDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 11), LocalDate.of(2019, 10, 11)) - .build(); + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 7), LocalDate.of(2019, 10, 7)) + .build(); + + var periode2Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(3), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 8), LocalDate.of(2019, 10, 10)) + .build(); + + var opphold = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 7), LocalDate.of(2019, 10, 9)) + .build(); + var uttakAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), + MØDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 11), LocalDate.of(2019, 10, 11)) + .build(); var perioderSøker = List.of(periode1Søker, periode2Søker); var perioderAnnenpart = List.of(opphold, uttakAnnenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 20)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(16); } @Test - void skal_ikke_telle_dobbelt_når_oppholdsperiode_annenpart_overlapper_mer_flere_søknadsperioder_i_berørt_behandling() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(42), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 1, 2), LocalDate.of(2020, 3, 1)) - .build(); - var periode2Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(4), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 3, 2), LocalDate.of(2020, 3, 5)) - .build(); - var periode3Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 3, 6), LocalDate.of(2020, 3, 12)) - .build(); - var oppholdAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .tidsperiode(LocalDate.of(2020, 1, 2), LocalDate.of(2020, 3, 12)) - .build(); - var uttakAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FEDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 3, 13), LocalDate.of(2020, 3, 20)) - .build(); + void + skal_ikke_telle_dobbelt_når_oppholdsperiode_annenpart_overlapper_mer_flere_søknadsperioder_i_berørt_behandling() { + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(42), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 1, 2), LocalDate.of(2020, 3, 1)) + .build(); + var periode2Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(4), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 3, 2), LocalDate.of(2020, 3, 5)) + .build(); + var periode3Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 3, 6), LocalDate.of(2020, 3, 12)) + .build(); + var oppholdAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .tidsperiode(LocalDate.of(2020, 1, 2), LocalDate.of(2020, 3, 12)) + .build(); + var uttakAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), + FEDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 3, 13), LocalDate.of(2020, 3, 20)) + .build(); var perioderSøker = List.of(periode1Søker, periode2Søker, periode3Søker); var perioderAnnenpart = List.of(oppholdAnnenpart, uttakAnnenpart); - var saldoUtregning = new SaldoUtregning( - Map.ofEntries(stønadskonto(FELLESPERIODE, 51), stønadskonto(FEDREKVOTE, 75), stønadskonto(MØDREKVOTE, 75)), perioderSøker, - perioderAnnenpart, true, Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries( + stønadskonto(FELLESPERIODE, 51), + stønadskonto(FEDREKVOTE, 75), + stønadskonto(MØDREKVOTE, 75)), + perioderSøker, + perioderAnnenpart, + true, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(0); } @Test void skal_ikke_frigi_dager_fra_oppholdsperiode_hvis_overlapp_med_avslått_periode_annenpart() { - var periode1Søker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(6), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 21), LocalDate.of(2019, 10, 23)) - .build(); - var oppholdSøker = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .oppholdÅrsak(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 24), LocalDate.of(2019, 10, 25)) - .build(); - var innvilgetPeriodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FEDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 24), LocalDate.of(2019, 10, 24)) - .build(); - var avslåttPeriodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(0), FEDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.AVSLÅTT) - .tidsperiode(LocalDate.of(2019, 10, 25), LocalDate.of(2019, 10, 25)) - .build(); + var periode1Søker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(6), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 21), LocalDate.of(2019, 10, 23)) + .build(); + var oppholdSøker = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .oppholdÅrsak(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 24), LocalDate.of(2019, 10, 25)) + .build(); + var innvilgetPeriodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), + FEDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 24), LocalDate.of(2019, 10, 24)) + .build(); + var avslåttPeriodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(0), + FEDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.AVSLÅTT) + .tidsperiode(LocalDate.of(2019, 10, 25), LocalDate.of(2019, 10, 25)) + .build(); var perioderSøker = List.of(periode1Søker, oppholdSøker); var perioderAnnenpart = List.of(innvilgetPeriodeAnnenpart, avslåttPeriodeAnnenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FEDREKVOTE, 10)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FEDREKVOTE, 10)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FEDREKVOTE)).isEqualTo(9); } @Test - void skal_ikke_trekke_dager_for_oppholdsperioder_på_annenpart_som_ligger_etter_søkers_siste_periode() { - var periodeSøker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FEDREKVOTE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 29), LocalDate.of(2019, 10, 30)) - .build(); - var innvilgetPeriodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), MØDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 28), LocalDate.of(2019, 10, 28)) - .build(); - var oppholdAnnenpart1 = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .oppholdÅrsak(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 30), LocalDate.of(2019, 10, 30)) - .build(); - var oppholdAnnenpart2 = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .oppholdÅrsak(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 31), LocalDate.of(2019, 10, 31)) - .build(); + void + skal_ikke_trekke_dager_for_oppholdsperioder_på_annenpart_som_ligger_etter_søkers_siste_periode() { + var periodeSøker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), FEDREKVOTE, AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 29), LocalDate.of(2019, 10, 30)) + .build(); + var innvilgetPeriodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + MØDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 28), LocalDate.of(2019, 10, 28)) + .build(); + var oppholdAnnenpart1 = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .oppholdÅrsak(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 30), LocalDate.of(2019, 10, 30)) + .build(); + var oppholdAnnenpart2 = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .oppholdÅrsak(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 31), LocalDate.of(2019, 10, 31)) + .build(); var perioderSøker = List.of(periodeSøker); - var perioderAnnenpart = List.of(innvilgetPeriodeAnnenpart, oppholdAnnenpart1, oppholdAnnenpart2); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FEDREKVOTE, 10), stønadskonto(MØDREKVOTE, 10)), perioderSøker, - perioderAnnenpart, false, Set.of(AKTIVITET1_SØKER), null, null); + var perioderAnnenpart = + List.of(innvilgetPeriodeAnnenpart, oppholdAnnenpart1, oppholdAnnenpart2); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FEDREKVOTE, 10), stønadskonto(MØDREKVOTE, 10)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FEDREKVOTE)).isZero(); - var saldoUtregningBerørt = new SaldoUtregning(Map.ofEntries(stønadskonto(FEDREKVOTE, 10), stønadskonto(MØDREKVOTE, 10)), perioderSøker, - perioderAnnenpart, false, Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregningBerørt = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FEDREKVOTE, 10), stønadskonto(MØDREKVOTE, 10)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregningBerørt.saldo(FEDREKVOTE)).isZero(); } @Test - void riktig_saldo_ved_delvis_overlapp_og_gradering_på_annenpart_der_annenpart_har_flere_arbeidsforhold() { - var periodeSøker = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(5), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 1, 27), LocalDate.of(2020, 1, 31)) - .build(); - var innvilgetPeriodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(4), FELLESPERIODE, AKTIVITET2_ANNENPART), - new FastsattUttakPeriodeAktivitet(new Trekkdager(8), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 1, 20), LocalDate.of(2020, 1, 29)) - .build(); + void + riktig_saldo_ved_delvis_overlapp_og_gradering_på_annenpart_der_annenpart_har_flere_arbeidsforhold() { + var periodeSøker = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(5), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 1, 27), LocalDate.of(2020, 1, 31)) + .build(); + var innvilgetPeriodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(4), + FELLESPERIODE, + AKTIVITET2_ANNENPART), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(8), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 1, 20), LocalDate.of(2020, 1, 29)) + .build(); var perioderSøker = List.of(periodeSøker); var perioderAnnenpart = List.of(innvilgetPeriodeAnnenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 100)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 100)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldoITrekkdager(FELLESPERIODE)).isEqualTo(new Trekkdager(92)); } @Test - void skal_ikke_finnes_nok_dager_å_frigi_ved_flere_arbeidsforhold_der_bare_det_ene_arbeidsforholdet_har_nok_dager() { - var aktivitet1 = new FastsattUttakPeriodeAktivitet(new Trekkdager(8), FELLESPERIODE, AKTIVITET1_SØKER); - var aktivitet2 = new FastsattUttakPeriodeAktivitet(new Trekkdager(15), FELLESPERIODE, AKTIVITET2_SØKER); - var søkersPeriode = new FastsattUttakPeriode.Builder().aktiviteter(List.of(aktivitet1, aktivitet2)) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag, enTirsdag) - .build(); - var annenpartsPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(2), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) - .build(); + void + skal_ikke_finnes_nok_dager_å_frigi_ved_flere_arbeidsforhold_der_bare_det_ene_arbeidsforholdet_har_nok_dager() { + var aktivitet1 = + new FastsattUttakPeriodeAktivitet( + new Trekkdager(8), FELLESPERIODE, AKTIVITET1_SØKER); + var aktivitet2 = + new FastsattUttakPeriodeAktivitet( + new Trekkdager(15), FELLESPERIODE, AKTIVITET2_SØKER); + var søkersPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of(aktivitet1, aktivitet2)) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag, enTirsdag) + .build(); + var annenpartsPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(2), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(enTirsdag.plusDays(1), enTirsdag.plusDays(1)) + .build(); var perioderSøker = List.of(søkersPeriode); var perioderAnnenpart = List.of(annenpartsPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 10)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), null, null); - var saldoUtregningBerørtBehandling = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 10)), perioderSøker, perioderAnnenpart, - true, Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 10)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), + null, + null); + var saldoUtregningBerørtBehandling = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 10)), + perioderSøker, + perioderAnnenpart, + true, + Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), + null, + null); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isFalse(); - assertThat(saldoUtregningBerørtBehandling.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isFalse(); + assertThat(saldoUtregningBerørtBehandling.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)) + .isFalse(); } @Test void skal_finne_saldo_for_søker_uten_uttaksperioder() { - var innvilgetPeriodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), MØDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 28), LocalDate.of(2019, 10, 28)) - .build(); + var innvilgetPeriodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + MØDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 28), LocalDate.of(2019, 10, 28)) + .build(); List perioderSøker = List.of(); var perioderAnnenpart = List.of(innvilgetPeriodeAnnenpart); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FEDREKVOTE, 10)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FEDREKVOTE, 10)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FEDREKVOTE)).isEqualTo(10); } - //FAGSYSTEM-81103 + // FAGSYSTEM-81103 @Test - void skal_finnes_nok_dager_å_frigi_hvis_annenparts_uttaksperiode_starter_før_men_overlapper_med_søkers_periode() { - var søkersPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(32), FEDREKVOTE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 17), LocalDate.of(2019, 11, 29)) - .build(); - var annenpartsPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(75.2), FEDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 14), LocalDate.of(2020, 2, 20)) - .build(); + void + skal_finnes_nok_dager_å_frigi_hvis_annenparts_uttaksperiode_starter_før_men_overlapper_med_søkers_periode() { + var søkersPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(32), FEDREKVOTE, AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 17), LocalDate.of(2019, 11, 29)) + .build(); + var annenpartsPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(75.2), + FEDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 14), LocalDate.of(2020, 2, 20)) + .build(); var perioderSøker = List.of(søkersPeriode); var perioderAnnenpart = List.of(annenpartsPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FEDREKVOTE, 75)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FEDREKVOTE, 75)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FEDREKVOTE)).isTrue(); } @Test - void skal_ikke_finnes_nok_dager_å_frigi_hvis_annenparts_uttaksperiode_starter_før_men_overlapper_med_søkers_periode_og_ikke_nok_dager_etter_søkers_fom() { - var søkersPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(32), FEDREKVOTE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 1, 20), LocalDate.of(2020, 2, 10)) - .build(); - var annenpartsPeriode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(75.2), FEDREKVOTE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 14), LocalDate.of(2020, 2, 20)) - .build(); + void + skal_ikke_finnes_nok_dager_å_frigi_hvis_annenparts_uttaksperiode_starter_før_men_overlapper_med_søkers_periode_og_ikke_nok_dager_etter_søkers_fom() { + var søkersPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(32), FEDREKVOTE, AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 1, 20), LocalDate.of(2020, 2, 10)) + .build(); + var annenpartsPeriode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(75.2), + FEDREKVOTE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 14), LocalDate.of(2020, 2, 20)) + .build(); var perioderSøker = List.of(søkersPeriode); var perioderAnnenpart = List.of(annenpartsPeriode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FEDREKVOTE, 75)), perioderSøker, perioderAnnenpart, false, - Set.of(AKTIVITET1_SØKER), null, null); - - //-20 dager på saldo, bare 19 dager igjen å frigi fra annenpart + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FEDREKVOTE, 75)), + perioderSøker, + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); + + // -20 dager på saldo, bare 19 dager igjen å frigi fra annenpart assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FEDREKVOTE)).isFalse(); } @Test void skal_telle_riktig_antall_dager_på_annenpart_når_det_er_tilkommet_nytt_arbeidsforhold() { - var annenpartsPeriode1 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(80), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 14), LocalDate.of(2020, 2, 20)) - .build(); - var annenpartsPeriode2 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(75), MØDREKVOTE, AKTIVITET1_ANNENPART), - new FastsattUttakPeriodeAktivitet(new Trekkdager(75), MØDREKVOTE, AKTIVITET2_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 2, 21), LocalDate.of(2020, 5, 5)) - .build(); + var annenpartsPeriode1 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(80), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 14), LocalDate.of(2020, 2, 20)) + .build(); + var annenpartsPeriode2 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(75), + MØDREKVOTE, + AKTIVITET1_ANNENPART), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(75), + MØDREKVOTE, + AKTIVITET2_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 2, 21), LocalDate.of(2020, 5, 5)) + .build(); var perioderAnnenpart = List.of(annenpartsPeriode1, annenpartsPeriode2); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(MØDREKVOTE, 75), stønadskonto(FELLESPERIODE, 80)), List.of(), - perioderAnnenpart, false, Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries( + stønadskonto(MØDREKVOTE, 75), stønadskonto(FELLESPERIODE, 80)), + List.of(), + perioderAnnenpart, + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isZero(); } @Test - void skal_telle_riktig_antall_dager_når_det_er_tilkommet_nytt_arbeidsforhold_og_siste_periode_før_tilkommet_er_opphold() { - var periodeUtenNyttArbeidsforhold = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(40), MØDREKVOTE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 1), LocalDate.of(2020, 10, 13)) - .build(); - var opphold = new FastsattUttakPeriode.Builder().aktiviteter(List.of()) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2019, 10, 14), LocalDate.of(2020, 2, 20)) - .oppholdÅrsak(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER) - .build(); - var periodeMedNyttArbeidsforhold = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(35), MØDREKVOTE, AKTIVITET1_SØKER), - new FastsattUttakPeriodeAktivitet(new Trekkdager(35), MØDREKVOTE, AKTIVITET2_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 2, 21), LocalDate.of(2020, 5, 5)) - .build(); - var søkersPerioder = List.of(periodeUtenNyttArbeidsforhold, opphold, periodeMedNyttArbeidsforhold); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(MØDREKVOTE, 75)), søkersPerioder, List.of(), false, - Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), null, null); + void + skal_telle_riktig_antall_dager_når_det_er_tilkommet_nytt_arbeidsforhold_og_siste_periode_før_tilkommet_er_opphold() { + var periodeUtenNyttArbeidsforhold = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(40), MØDREKVOTE, AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 1), LocalDate.of(2020, 10, 13)) + .build(); + var opphold = + new FastsattUttakPeriode.Builder() + .aktiviteter(List.of()) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2019, 10, 14), LocalDate.of(2020, 2, 20)) + .oppholdÅrsak(OppholdÅrsak.FEDREKVOTE_ANNEN_FORELDER) + .build(); + var periodeMedNyttArbeidsforhold = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(35), MØDREKVOTE, AKTIVITET1_SØKER), + new FastsattUttakPeriodeAktivitet( + new Trekkdager(35), MØDREKVOTE, AKTIVITET2_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 2, 21), LocalDate.of(2020, 5, 5)) + .build(); + var søkersPerioder = + List.of(periodeUtenNyttArbeidsforhold, opphold, periodeMedNyttArbeidsforhold); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(MØDREKVOTE, 75)), + søkersPerioder, + List.of(), + false, + Set.of(AKTIVITET1_SØKER, AKTIVITET2_SØKER), + null, + null); assertThat(saldoUtregning.saldo(MØDREKVOTE, AKTIVITET1_SØKER)).isZero(); assertThat(saldoUtregning.saldo(MØDREKVOTE, AKTIVITET2_SØKER)).isZero(); @@ -1289,19 +2436,36 @@ void overlappende_oppholdsperioder_skal_trekke_fra_annenparts_periode_ved() { @Test void innvilget_utsettelse_overlapper_med_annenpart() { - var periode = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(0), null, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 2, 21), LocalDate.of(2020, 5, 5)) - .build(); - var periodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(75), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 2, 21), LocalDate.of(2020, 5, 5)) - .build(); + var periode = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(0), null, AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 2, 21), LocalDate.of(2020, 5, 5)) + .build(); + var periodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(75), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 2, 21), LocalDate.of(2020, 5, 5)) + .build(); var søkersPerioder = List.of(periode); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 75)), søkersPerioder, List.of(periodeAnnenpart), false, - Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 75)), + søkersPerioder, + List.of(periodeAnnenpart), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(75); assertThat(saldoUtregning.saldo(null)).isZero(); @@ -1309,77 +2473,154 @@ void innvilget_utsettelse_overlapper_med_annenpart() { @Test void skal_ta_med_overlappende_perioder_i_utregningen_av_dager_å_frigi_på_annenpart() { - var periode1 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 5, 17), LocalDate.of(2020, 5, 17)) - .build(); - var periode2 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(4), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 5, 18), LocalDate.of(2020, 5, 22)) - .build(); - var periodeAnnenpart1 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(3), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 5, 18), LocalDate.of(2020, 5, 20)) - .build(); - var periodeAnnenpart2 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(2), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 5, 21), LocalDate.of(2020, 5, 22)) - .build(); - var periodeAnnenpart3 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(10), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2020, 5, 23), LocalDate.of(2020, 5, 23)) - .build(); + var periode1 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 5, 17), LocalDate.of(2020, 5, 17)) + .build(); + var periode2 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(4), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 5, 18), LocalDate.of(2020, 5, 22)) + .build(); + var periodeAnnenpart1 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(3), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 5, 18), LocalDate.of(2020, 5, 20)) + .build(); + var periodeAnnenpart2 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(2), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 5, 21), LocalDate.of(2020, 5, 22)) + .build(); + var periodeAnnenpart3 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(10), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2020, 5, 23), LocalDate.of(2020, 5, 23)) + .build(); var søkersPerioder = List.of(periode1, periode2); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 5)), søkersPerioder, - List.of(periodeAnnenpart1, periodeAnnenpart2, periodeAnnenpart3), false, Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 5)), + søkersPerioder, + List.of(periodeAnnenpart1, periodeAnnenpart2, periodeAnnenpart3), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(-10); assertThat(saldoUtregning.nokDagerÅFrigiPåAnnenpart(FELLESPERIODE)).isTrue(); } @Test - void samtidig_uttak_som_overlapper_delvis_med_oppholdsperioder_skal_trekke_dager_for_resten_av_oppholdet() { - var samtidigUttak = new FastsattUttakPeriode.Builder().samtidigUttak(true) - .aktiviteter(List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2021, 8, 2), LocalDate.of(2021, 8, 6)) - .build(); - var oppholdAnnenpart = new FastsattUttakPeriode.Builder().oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2021, 8, 2), LocalDate.of(2021, 8, 13)) - .build(); - var søkersPeriode2 = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(4), FELLESPERIODE, AKTIVITET1_SØKER))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2021, 8, 10), LocalDate.of(2021, 8, 13)) - .build(); - var periodeAnnenpart = new FastsattUttakPeriode.Builder().aktiviteter( - List.of(new FastsattUttakPeriodeAktivitet(new Trekkdager(1), FELLESPERIODE, AKTIVITET1_ANNENPART))) - .periodeResultatType(Perioderesultattype.INNVILGET) - .tidsperiode(LocalDate.of(2021, 8, 15), LocalDate.of(2021, 8, 15)) - .build(); + void + samtidig_uttak_som_overlapper_delvis_med_oppholdsperioder_skal_trekke_dager_for_resten_av_oppholdet() { + var samtidigUttak = + new FastsattUttakPeriode.Builder() + .samtidigUttak(true) + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2021, 8, 2), LocalDate.of(2021, 8, 6)) + .build(); + var oppholdAnnenpart = + new FastsattUttakPeriode.Builder() + .oppholdÅrsak(OppholdÅrsak.FELLESPERIODE_ANNEN_FORELDER) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2021, 8, 2), LocalDate.of(2021, 8, 13)) + .build(); + var søkersPeriode2 = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(4), + FELLESPERIODE, + AKTIVITET1_SØKER))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2021, 8, 10), LocalDate.of(2021, 8, 13)) + .build(); + var periodeAnnenpart = + new FastsattUttakPeriode.Builder() + .aktiviteter( + List.of( + new FastsattUttakPeriodeAktivitet( + new Trekkdager(1), + FELLESPERIODE, + AKTIVITET1_ANNENPART))) + .periodeResultatType(Perioderesultattype.INNVILGET) + .tidsperiode(LocalDate.of(2021, 8, 15), LocalDate.of(2021, 8, 15)) + .build(); var søkersPerioder = List.of(samtidigUttak, søkersPeriode2); - var saldoUtregning = new SaldoUtregning(Map.ofEntries(stønadskonto(FELLESPERIODE, 10)), søkersPerioder, - List.of(oppholdAnnenpart, periodeAnnenpart), false, Set.of(AKTIVITET1_SØKER), null, null); + var saldoUtregning = + new SaldoUtregning( + Map.ofEntries(stønadskonto(FELLESPERIODE, 10)), + søkersPerioder, + List.of(oppholdAnnenpart, periodeAnnenpart), + false, + Set.of(AKTIVITET1_SØKER), + null, + null); assertThat(saldoUtregning.saldo(FELLESPERIODE)).isEqualTo(3); } - private SaldoUtregning lagForenkletSaldoUtregning(Map stønadskontoer, - // NOSONAR - List søkersPerioder, - Trekkdager minsterettDager, - Trekkdager utenAktivitetskravDager, - Optional farUttakRundtFødselPeriode, - Trekkdager farUttakRundtFødselDager) { + private SaldoUtregning lagForenkletSaldoUtregning( + Map stønadskontoer, + // NOSONAR + List søkersPerioder, + Trekkdager minsterettDager, + Trekkdager utenAktivitetskravDager, + Optional farUttakRundtFødselPeriode, + Trekkdager farUttakRundtFødselDager) { var konti = new EnumMap(Stønadskontotype.class); stønadskontoer.forEach((key, value) -> konti.put(key, new Trekkdager(value))); - return new SaldoUtregning(konti, søkersPerioder, List.of(), false, Set.of(AKTIVITET1_SØKER), null, null, minsterettDager, - utenAktivitetskravDager, Trekkdager.ZERO, farUttakRundtFødselDager); + return new SaldoUtregning( + konti, + søkersPerioder, + List.of(), + false, + Set.of(AKTIVITET1_SØKER), + null, + null, + minsterettDager, + utenAktivitetskravDager, + Trekkdager.ZERO, + farUttakRundtFødselDager); } } diff --git a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoIdentifisererTest.java b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoIdentifisererTest.java index 0c70cc13..1fb9d84c 100644 --- a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoIdentifisererTest.java +++ b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/utfall/TomKontoIdentifisererTest.java @@ -7,9 +7,6 @@ import java.time.LocalDate; import java.util.List; import java.util.Set; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.RegelGrunnlagTestBuilder; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Virkedager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Behandling; @@ -20,6 +17,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.saldo.SaldoUtregningGrunnlag; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.saldo.SaldoUtregningTjeneste; +import org.junit.jupiter.api.Test; class TomKontoIdentifisererTest { @@ -28,7 +26,6 @@ void knekkpunkt_ved_50_prosent_arbeid_og_gradering() { verifiserKnekkpunktVedGradering(100, 1, 50, 2); } - @Test void knekkpunkt_ved_80_prosent_arbeid_og_gradering() { verifiserKnekkpunktVedGradering(100, 1, 80, 5); @@ -49,26 +46,58 @@ void eksempel_1_fra_krav_9() { verifiserKnekkpunktVedGradering(17, 4, 60, 10); } - private void verifiserKnekkpunktVedGradering(int søktOmDag, int saldo, int arbeidsprosent, int virkedagerVarighet) { - verifiserKnekkpunktVedGradering(søktOmDag, saldo, BigDecimal.valueOf(arbeidsprosent), virkedagerVarighet); + private void verifiserKnekkpunktVedGradering( + int søktOmDag, int saldo, int arbeidsprosent, int virkedagerVarighet) { + verifiserKnekkpunktVedGradering( + søktOmDag, saldo, BigDecimal.valueOf(arbeidsprosent), virkedagerVarighet); } - private void verifiserKnekkpunktVedGradering(int søktOmDag, int saldo, BigDecimal arbeidsprosent, int virkedagerVarighet) { + private void verifiserKnekkpunktVedGradering( + int søktOmDag, int saldo, BigDecimal arbeidsprosent, int virkedagerVarighet) { var idag = LocalDate.of(2019, 3, 14); - var oppgittPeriode = OppgittPeriode.forGradering(Stønadskontotype.MØDREKVOTE, idag, idag.plusDays(søktOmDag - 1), arbeidsprosent, null, false, - Set.of(ARBEIDSFORHOLD_1), null, null, null, null); - var kontoer = new Kontoer.Builder().konto(new Konto.Builder().type(Stønadskontotype.MØDREKVOTE).trekkdager(saldo)); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode)) - .behandling(new Behandling.Builder().søkerErMor(true)) - .kontoer(kontoer) - .build(); + var oppgittPeriode = + OppgittPeriode.forGradering( + Stønadskontotype.MØDREKVOTE, + idag, + idag.plusDays(søktOmDag - 1), + arbeidsprosent, + null, + false, + Set.of(ARBEIDSFORHOLD_1), + null, + null, + null, + null); + var kontoer = + new Kontoer.Builder() + .konto( + new Konto.Builder() + .type(Stønadskontotype.MØDREKVOTE) + .trekkdager(saldo)); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode)) + .behandling(new Behandling.Builder().søkerErMor(true)) + .kontoer(kontoer) + .build(); - var saldoUtregningGrunnlag = SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak(List.of(), List.of(), grunnlag, oppgittPeriode.getFom()); + var saldoUtregningGrunnlag = + SaldoUtregningGrunnlag.forUtregningAvDelerAvUttak( + List.of(), List.of(), grunnlag, oppgittPeriode.getFom()); var saldoUtregning = SaldoUtregningTjeneste.lagUtregning(saldoUtregningGrunnlag); - var tomKontoKnekkpunkt = TomKontoIdentifiserer.identifiser(oppgittPeriode, List.of(ARBEIDSFORHOLD_1), saldoUtregning, - Stønadskontotype.MØDREKVOTE, null, null, true, InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE, UtfallType.INNVILGET); - assertThat(tomKontoKnekkpunkt.orElseThrow().dato()).isEqualTo(Virkedager.plusVirkedager(idag, virkedagerVarighet)); + var tomKontoKnekkpunkt = + TomKontoIdentifiserer.identifiser( + oppgittPeriode, + List.of(ARBEIDSFORHOLD_1), + saldoUtregning, + Stønadskontotype.MØDREKVOTE, + null, + null, + true, + InnvilgetÅrsak.KVOTE_ELLER_OVERFØRT_KVOTE, + UtfallType.INNVILGET); + assertThat(tomKontoKnekkpunkt.orElseThrow().dato()) + .isEqualTo(Virkedager.plusVirkedager(idag, virkedagerVarighet)); } } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktPeriodeUtilTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktPeriodeUtilTest.java" index a6b2c4c9..d9fae185 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktPeriodeUtilTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktPeriodeUtilTest.java" @@ -6,11 +6,9 @@ import java.time.LocalDate; import java.util.Arrays; import java.util.List; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.LukketPeriode; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.OppgittPeriode; +import org.junit.jupiter.api.Test; class ManglendeSøktPeriodeUtilTest { @@ -21,11 +19,17 @@ class ManglendeSøktPeriodeUtilTest { /* Tre dagers "period of interest" f.o.m. i dag */ var poi = new LukketPeriode(start, slutt); - List perioder = Arrays.asList( - // !!! Skal finne et msp her (f.o.m. i dag t.o.m. i dag) !!! - periode(start.plusDays(1), start.plusDays(1)), // En uttaksperiode f.o.m. i morgen t.o.m. i morgen - periode(slutt, slutt) // En uttaksperiode f.o.m. overimorgen t.o.m. overimorgen - ); + List perioder = + Arrays.asList( + // !!! Skal finne et msp her (f.o.m. i dag t.o.m. i dag) !!! + periode( + start.plusDays(1), + start.plusDays( + 1)), // En uttaksperiode f.o.m. i morgen t.o.m. i morgen + periode( + slutt, + slutt) // En uttaksperiode f.o.m. overimorgen t.o.m. overimorgen + ); var msp = ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(perioder, poi); @@ -35,7 +39,8 @@ class ManglendeSøktPeriodeUtilTest { } private OppgittPeriode periode(LocalDate fom, LocalDate tom) { - return OppgittPeriode.forVanligPeriode(MØDREKVOTE, fom, tom, null, false, null, null, null, null); + return OppgittPeriode.forVanligPeriode( + MØDREKVOTE, fom, tom, null, false, null, null, null, null); } @Test @@ -45,11 +50,15 @@ void skalFinneEttHullInniEnPeriodOfInterest() { /* Tre dagers "period of interest" f.o.m. i dag */ var poi = new LukketPeriode(start, slutt); - List perioder = Arrays.asList(periode(start, start), - // En uttaksperiode f.o.m. i dag t.o.m. i dag - // !!! Skal finne et msp her (f.o.m. i morgen t.o.m. i morgen) !!! - periode(slutt, slutt) // En uttaksperiode f.o.m. overimorgen t.o.m. overimorgen - ); + List perioder = + Arrays.asList( + periode(start, start), + // En uttaksperiode f.o.m. i dag t.o.m. i dag + // !!! Skal finne et msp her (f.o.m. i morgen t.o.m. i morgen) !!! + periode( + slutt, + slutt) // En uttaksperiode f.o.m. overimorgen t.o.m. overimorgen + ); var msp = ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(perioder, poi); @@ -65,13 +74,20 @@ void skalFinneFlereHullInniEnPeriodOfInterest() { /* Fem dagers "period of interest" f.o.m. i dag */ var poi = new LukketPeriode(start, slutt); - List perioder = Arrays.asList(periode(start, start), - // En uttaksperiode f.o.m. i dag t.o.m. i dag - // !!! Skal finne et msp her (f.o.m. i morgen t.o.m. i morgen) !!! - periode(start.plusDays(2), start.plusDays(2)), // En uttaksperiode f.o.m. overimorgen t.o.m. overimorgen - // !!! Skal finne et msp her (f.o.m. om tre dager t.o.m. om tre dager) !!! - periode(slutt, slutt) // En uttaksperiode f.o.m. om fire dager t.o.m. om fire dager - ); + List perioder = + Arrays.asList( + periode(start, start), + // En uttaksperiode f.o.m. i dag t.o.m. i dag + // !!! Skal finne et msp her (f.o.m. i morgen t.o.m. i morgen) !!! + periode( + start.plusDays(2), + start.plusDays(2)), // En uttaksperiode f.o.m. overimorgen t.o.m. + // overimorgen + // !!! Skal finne et msp her (f.o.m. om tre dager t.o.m. om tre dager) !!! + periode( + slutt, + slutt) // En uttaksperiode f.o.m. om fire dager t.o.m. om fire dager + ); var msp = ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(perioder, poi); @@ -89,11 +105,16 @@ void skalFinneFlereHullInniEnPeriodOfInterest() { /* Tre dagers "period of interest" f.o.m. i dag */ var poi = new LukketPeriode(start, slutt); - List perioder = Arrays.asList(periode(start, start), - // En uttaksperiode f.o.m. i dag t.o.m. i dag - periode(start.plusDays(1), start.plusDays(1)) // En uttaksperiode f.o.m. i morgen t.o.m. i morgen - // !!! Skal finne et msp her (f.o.m. overimorgen t.o.m. overimorgen) !!! - ); + List perioder = + Arrays.asList( + periode(start, start), + // En uttaksperiode f.o.m. i dag t.o.m. i dag + periode( + start.plusDays(1), + start.plusDays( + 1)) // En uttaksperiode f.o.m. i morgen t.o.m. i morgen + // !!! Skal finne et msp her (f.o.m. overimorgen t.o.m. overimorgen) !!! + ); var msp = ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(perioder, poi); @@ -109,13 +130,19 @@ void skalIkkeFinneHullHvisDetIkkeErNoenHull() { /* Tre dagers "period of interest" f.o.m. i dag */ var poi = new LukketPeriode(start, slutt); - List perioder = Arrays.asList(periode(start, start), - // En uttaksperiode f.o.m. i dag t.o.m. i dag - periode(start.plusDays(1), start.plusDays(1)), // En uttaksperiode f.o.m. i morgen t.o.m. i morgen - periode(slutt, slutt) // En uttaksperiode f.o.m. overimorgen t.o.m. overimorgen - /// !!! Skal ikke finne noen msp !!! - ); - + List perioder = + Arrays.asList( + periode(start, start), + // En uttaksperiode f.o.m. i dag t.o.m. i dag + periode( + start.plusDays(1), + start.plusDays( + 1)), // En uttaksperiode f.o.m. i morgen t.o.m. i morgen + periode( + slutt, + slutt) // En uttaksperiode f.o.m. overimorgen t.o.m. overimorgen + /// !!! Skal ikke finne noen msp !!! + ); var msp = ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(perioder, poi); @@ -129,10 +156,12 @@ void skalIkkeFinneHullHvisDetIkkeErNoenHull() { /* Tre dagers "period of interest" f.o.m. i dag */ var poi = new LukketPeriode(start, slutt); - List perioder = List.of(periode(start.minusDays(1), slutt.minusDays(1)) - // En uttaksperiode f.o.m. i går t.o.m. i morgen - // !!! Skal finne et msp her (f.o.m. overimorgen t.o.m. overimorgen) !!! - ); + List perioder = + List.of( + periode(start.minusDays(1), slutt.minusDays(1)) + // En uttaksperiode f.o.m. i går t.o.m. i morgen + // !!! Skal finne et msp her (f.o.m. overimorgen t.o.m. overimorgen) !!! + ); var msp = ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(perioder, poi); @@ -148,10 +177,14 @@ void skalIkkeFinneHullHvisDetIkkeErNoenHull() { /* Tre dagers "period of interest" f.o.m. i dag */ var poi = new LukketPeriode(start, slutt); - List perioder = List.of( - // !!! Skal finne et msp her (f.o.m. i dag t.o.m. i dag) !!! - periode(start.plusDays(1), slutt.plusDays(1)) // En uttaksperiode f.o.m. i morgen t.o.m. om tre dager - ); + List perioder = + List.of( + // !!! Skal finne et msp her (f.o.m. i dag t.o.m. i dag) !!! + periode( + start.plusDays(1), + slutt.plusDays( + 1)) // En uttaksperiode f.o.m. i morgen t.o.m. om tre dager + ); var msp = ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(perioder, poi); @@ -166,7 +199,9 @@ void enDagPerioderSkalIkkeGiHull() { var enDagPeriode = new LukketPeriode(LocalDate.of(2019, 1, 1), LocalDate.of(2019, 1, 1)); var etterPeriode = new LukketPeriode(LocalDate.of(2019, 1, 2), LocalDate.of(2019, 1, 10)); var perioder = Arrays.asList(førPeriode, enDagPeriode, etterPeriode); - var msp = ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(perioder, new LukketPeriode(førPeriode.getFom(), etterPeriode.getTom())); + var msp = + ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder( + perioder, new LukketPeriode(førPeriode.getFom(), etterPeriode.getTom())); assertThat(msp).isEmpty(); } @@ -179,7 +214,9 @@ void skalFinneFlereHull() { var periode4 = new LukketPeriode(LocalDate.of(2019, 1, 15), LocalDate.of(2019, 1, 20)); var periode5 = new LukketPeriode(LocalDate.of(2019, 1, 25), LocalDate.of(2019, 1, 30)); var perioder = Arrays.asList(periode1, periode2, periode3, periode4, periode5); - var msp = ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder(perioder, new LukketPeriode(periode1.getFom(), periode5.getTom())); + var msp = + ManglendeSøktPeriodeUtil.finnManglendeSøktePerioder( + perioder, new LukketPeriode(periode1.getFom(), periode5.getTom())); assertThat(msp).hasSize(2); assertThat(msp.get(0).getFom()).isEqualTo(LocalDate.of(2019, 1, 11)); diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderForSammenhengendeUttakTjenesteTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderForSammenhengendeUttakTjenesteTest.java" index 96013b2d..36713866 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderForSammenhengendeUttakTjenesteTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderForSammenhengendeUttakTjenesteTest.java" @@ -9,9 +9,6 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; - -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.RegelGrunnlagTestBuilder; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.Trekkdager; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Adopsjon; @@ -35,6 +32,7 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Utbetalingsgrad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UtsettelseÅrsak; +import org.junit.jupiter.api.Test; class ManglendeSøktePerioderForSammenhengendeUttakTjenesteTest { @@ -47,18 +45,26 @@ class ManglendeSøktePerioderForSammenhengendeUttakTjenesteTest { void farMedAleneomsorgSkalHaUttakFraFødsel() { // Case: PFP-6988. Far med aleneomsorg, 80% dekningsgrad, søkt uttak 9 uker etter fødsel. // Det skal legges til manglende periode fra fødselen og frem til hans første uttaksdag. - // Skjæringstidspunktet for opptjening og beregning er ved hans første uttaksdag, men vi må trekke dager fra fødselen eller omsorgsovertakelsedatoen ved adopsjon. + // Skjæringstidspunktet for opptjening og beregning er ved hans første uttaksdag, men vi må + // trekke dager fra fødselen eller omsorgsovertakelsedatoen ved adopsjon. var fødsel = LocalDate.of(2018, 12, 4); var førsteUttakSøktFom = fødsel.plusWeeks(9); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, førsteUttakSøktFom, førsteUttakSøktFom.plusWeeks(10)))) - .behandling(farBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) - .datoer(new Datoer.Builder().fødsel(fødsel)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + førsteUttakSøktFom, + førsteUttakSøktFom.plusWeeks(10)))) + .behandling(farBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) + .datoer(new Datoer.Builder().fødsel(fødsel)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -80,14 +86,24 @@ void farMedAleneomsorgSkalHaUttakFraAdopsjon() { var adopsjonsDato = LocalDate.of(2018, 12, 4); var førsteUttakSøktFom = adopsjonsDato.plusWeeks(9); - var grunnlag = RegelGrunnlagTestBuilder.create() - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, førsteUttakSøktFom, førsteUttakSøktFom.plusWeeks(10)))) - .behandling(farBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) - .datoer(new Datoer.Builder().omsorgsovertakelse(adopsjonsDato)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(adopsjonsDato).stebarnsadopsjon(false)) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + førsteUttakSøktFom, + førsteUttakSøktFom.plusWeeks(10)))) + .behandling(farBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().aleneomsorg(true)) + .datoer(new Datoer.Builder().omsorgsovertakelse(adopsjonsDato)) + .adopsjon( + new Adopsjon.Builder() + .ankomstNorge(adopsjonsDato) + .stebarnsadopsjon(false)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -102,26 +118,50 @@ void farMedAleneomsorgMedInnvilgetAnnetPartPerioder() { // Gjelder der far først har søkt om aleneomsorg. var morTom = LocalDate.of(2020, 12, 3); var farFom = morTom.plusDays(10); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(LocalDate.of(2020, 11, 5))) - .annenPart(new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2020, 11, 5), morTom).build())) - .behandling(farBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true).aleneomsorg(true).samtykke(false)) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(FORELDREPENGER, farFom, farFom.plusDays(10)))) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(LocalDate.of(2020, 11, 5))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2020, 11, 5), morTom) + .build())) + .behandling(farBehandling()) + .rettOgOmsorg( + new RettOgOmsorg.Builder() + .farHarRett(true) + .morHarRett(true) + .aleneomsorg(true) + .samtykke(false)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + farFom, + farFom.plusDays(10)))) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); } private RegelGrunnlag.Builder grunnlagMedKontoer() { - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, førFødselDager)) - .konto(konto(MØDREKVOTE, mødrekvoteDager)) - .konto(konto(FELLESPERIODE, fellesperiodDedager)) - .konto(konto(FEDREKVOTE, fedrekvoteDager)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, førFødselDager)) + .konto(konto(MØDREKVOTE, mødrekvoteDager)) + .konto(konto(FELLESPERIODE, fellesperiodDedager)) + .konto(konto(FEDREKVOTE, fedrekvoteDager)); return RegelGrunnlagTestBuilder.create() - .opptjening(new Opptjening.Builder().skjæringstidspunkt(LocalDate.MIN)) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1))); + .opptjening(new Opptjening.Builder().skjæringstidspunkt(LocalDate.MIN)) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold( + new Arbeidsforhold( + RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1))); } private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) { @@ -131,21 +171,31 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) @Test void skalIkkeUtledeMspIForeldrepengerFørFødselDersomSøknadstypeErAdopsjon() { var omsorgsovertakelse = LocalDate.of(2018, 6, 4).plusWeeks(4); - var uttakPeriode = oppgittPeriode(FELLESPERIODE, omsorgsovertakelse, omsorgsovertakelse.plusWeeks(7)); - - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) - .søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON).oppgittPeriode(uttakPeriode)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(LocalDate.of(2018, 6, 5))) - .build(); + var uttakPeriode = + oppgittPeriode(FELLESPERIODE, omsorgsovertakelse, omsorgsovertakelse.plusWeeks(7)); + + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode(uttakPeriode)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(LocalDate.of(2018, 6, 5))) + .build(); var manglendeSøktePerioder = finnManglendeSøktePerioder(grunnlag); - //Skal utlede msp mellom ankomst norge og første søkte dag + // Skal utlede msp mellom ankomst norge og første søkte dag assertThat(manglendeSøktePerioder).isNotEmpty(); - var mspFørFødsel = manglendeSøktePerioder.stream() - .filter(mspPeriode -> FORELDREPENGER_FØR_FØDSEL.equals(mspPeriode.getStønadskontotype())) - .findFirst(); + var mspFørFødsel = + manglendeSøktePerioder.stream() + .filter( + mspPeriode -> + FORELDREPENGER_FØR_FØDSEL.equals( + mspPeriode.getStønadskontotype())) + .findFirst(); assertThat(mspFørFødsel).isEmpty(); } @@ -154,88 +204,144 @@ private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) void skalUtledeMspIFellesperiodeFørFødsel() { var familiehendelsesDato = LocalDate.of(2018, 6, 4); - - var uttakPeriode = oppgittPeriode(FELLESPERIODE, familiehendelsesDato.minusWeeks(8), familiehendelsesDato.minusWeeks(5)); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) - .søknad(new Søknad.Builder().oppgittPeriode(uttakPeriode)) - .build(); - + var uttakPeriode = + oppgittPeriode( + FELLESPERIODE, + familiehendelsesDato.minusWeeks(8), + familiehendelsesDato.minusWeeks(5)); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) + .søknad(new Søknad.Builder().oppgittPeriode(uttakPeriode)) + .build(); var manglendeSøktePerioder = finnManglendeSøktePerioder(grunnlag); assertThat(manglendeSøktePerioder).isNotEmpty(); - var mspFørFødsel = manglendeSøktePerioder.stream().filter(periode -> periode.getStønadskontotype().equals(FELLESPERIODE)).findFirst(); + var mspFørFødsel = + manglendeSøktePerioder.stream() + .filter(periode -> periode.getStønadskontotype().equals(FELLESPERIODE)) + .findFirst(); assertThat(mspFørFødsel).isPresent(); - mspFørFødsel.ifPresent(msp -> { - assertThat(msp.getFom()).isEqualTo(familiehendelsesDato.minusWeeks(5).plusDays(1)); - assertThat(msp.getTom()).isEqualTo(familiehendelsesDato.minusWeeks(3).minusDays(3)); //-3 pga helg - }); + mspFørFødsel.ifPresent( + msp -> { + assertThat(msp.getFom()) + .isEqualTo(familiehendelsesDato.minusWeeks(5).plusDays(1)); + assertThat(msp.getTom()) + .isEqualTo( + familiehendelsesDato.minusWeeks(3).minusDays(3)); // -3 pga helg + }); } - private OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { - return OppgittPeriode.forVanligPeriode(stønadskontotype, fom, tom, null, false, null, null, null, null); + private OppgittPeriode oppgittPeriode( + Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { + return OppgittPeriode.forVanligPeriode( + stønadskontotype, fom, tom, null, false, null, null, null, null); } @Test void skal_ikke_overlappe_msp_fpff_og_msp_fellesperiode_før_fødsel() { var familiehendelsesDato = LocalDate.of(2019, 12, 11); - var fellesperiode1 = oppgittPeriode(FELLESPERIODE, familiehendelsesDato.minusWeeks(10), familiehendelsesDato.minusWeeks(8)); - var fellesperiode2 = oppgittPeriode(FELLESPERIODE, familiehendelsesDato.minusWeeks(7), familiehendelsesDato.minusWeeks(5)); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, familiehendelsesDato.minusWeeks(3), familiehendelsesDato.minusWeeks(2)); - var fellesperiode3 = oppgittPeriode(FELLESPERIODE, familiehendelsesDato, familiehendelsesDato.plusWeeks(6).minusDays(1)); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) - .søknad(new Søknad.Builder().oppgittPeriode(fellesperiode1) - .oppgittPeriode(fellesperiode2) - .oppgittPeriode(fpff) - .oppgittPeriode(fellesperiode3)) - .build(); + var fellesperiode1 = + oppgittPeriode( + FELLESPERIODE, + familiehendelsesDato.minusWeeks(10), + familiehendelsesDato.minusWeeks(8)); + var fellesperiode2 = + oppgittPeriode( + FELLESPERIODE, + familiehendelsesDato.minusWeeks(7), + familiehendelsesDato.minusWeeks(5)); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + familiehendelsesDato.minusWeeks(3), + familiehendelsesDato.minusWeeks(2)); + var fellesperiode3 = + oppgittPeriode( + FELLESPERIODE, + familiehendelsesDato, + familiehendelsesDato.plusWeeks(6).minusDays(1)); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode(fellesperiode1) + .oppgittPeriode(fellesperiode2) + .oppgittPeriode(fpff) + .oppgittPeriode(fellesperiode3)) + .build(); var manglendeSøktePerioder = finnManglendeSøktePerioder(grunnlag); assertThat(manglendeSøktePerioder.get(0).getStønadskontotype()).isEqualTo(FELLESPERIODE); - assertThat(manglendeSøktePerioder.get(0).getFom()).isEqualTo(familiehendelsesDato.minusWeeks(8).plusDays(1)); - assertThat(manglendeSøktePerioder.get(0).getTom()).isEqualTo(familiehendelsesDato.minusWeeks(7).minusDays(1)); + assertThat(manglendeSøktePerioder.get(0).getFom()) + .isEqualTo(familiehendelsesDato.minusWeeks(8).plusDays(1)); + assertThat(manglendeSøktePerioder.get(0).getTom()) + .isEqualTo(familiehendelsesDato.minusWeeks(7).minusDays(1)); assertThat(manglendeSøktePerioder.get(1).getStønadskontotype()).isEqualTo(FELLESPERIODE); - assertThat(manglendeSøktePerioder.get(1).getFom()).isEqualTo(familiehendelsesDato.minusWeeks(5).plusDays(1)); - assertThat(manglendeSøktePerioder.get(1).getTom()).isEqualTo(familiehendelsesDato.minusWeeks(3).minusDays(1)); - - assertThat(manglendeSøktePerioder.get(2).getStønadskontotype()).isEqualTo(FORELDREPENGER_FØR_FØDSEL); - assertThat(manglendeSøktePerioder.get(2).getFom()).isEqualTo(familiehendelsesDato.minusWeeks(2).plusDays(1)); - assertThat(manglendeSøktePerioder.get(2).getTom()).isEqualTo(familiehendelsesDato.minusDays(1)); + assertThat(manglendeSøktePerioder.get(1).getFom()) + .isEqualTo(familiehendelsesDato.minusWeeks(5).plusDays(1)); + assertThat(manglendeSøktePerioder.get(1).getTom()) + .isEqualTo(familiehendelsesDato.minusWeeks(3).minusDays(1)); + + assertThat(manglendeSøktePerioder.get(2).getStønadskontotype()) + .isEqualTo(FORELDREPENGER_FØR_FØDSEL); + assertThat(manglendeSøktePerioder.get(2).getFom()) + .isEqualTo(familiehendelsesDato.minusWeeks(2).plusDays(1)); + assertThat(manglendeSøktePerioder.get(2).getTom()) + .isEqualTo(familiehendelsesDato.minusDays(1)); } @Test void skalUtledeMspMødrekvoteITidsperiodenForbeholdtMorEtterFødsel() { var familiehendelsesDato = LocalDate.of(2018, 6, 4).plusWeeks(4); - var grunnlag = grunnlagMedKontoer().søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(MØDREKVOTE, familiehendelsesDato.plusWeeks(6), familiehendelsesDato.plusWeeks(7)))) - .datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + familiehendelsesDato.plusWeeks(6), + familiehendelsesDato.plusWeeks(7)))) + .datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) + .build(); var manglendeSøktePerioder = finnManglendeSøktePerioder(grunnlag); - var mspEtterFødsel = manglendeSøktePerioder.stream().filter(msp -> msp.getStønadskontotype().equals(MØDREKVOTE)).findFirst(); + var mspEtterFødsel = + manglendeSøktePerioder.stream() + .filter(msp -> msp.getStønadskontotype().equals(MØDREKVOTE)) + .findFirst(); assertThat(mspEtterFødsel).isPresent(); - mspEtterFødsel.ifPresent(msp -> { - assertThat(msp.getFom()).isEqualTo(familiehendelsesDato); - assertThat(msp.getTom()).isEqualTo(familiehendelsesDato.plusWeeks(6).minusDays(3));//-3 pga helg - }); + mspEtterFødsel.ifPresent( + msp -> { + assertThat(msp.getFom()).isEqualTo(familiehendelsesDato); + assertThat(msp.getTom()) + .isEqualTo( + familiehendelsesDato.plusWeeks(6).minusDays(3)); // -3 pga helg + }); } @Test void skalIkkeUtledeMspIPerioderFørEndringsdato() { var familiehendelsesDato = LocalDate.of(2018, 6, 4).plusWeeks(4); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder()) - .datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) - .behandling(new Behandling.Builder()) - .revurdering(new Revurdering.Builder().endringsdato(LocalDate.of(2019, 6, 4))) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad(new Søknad.Builder()) + .datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) + .behandling(new Behandling.Builder()) + .revurdering( + new Revurdering.Builder().endringsdato(LocalDate.of(2019, 6, 4))) + .build(); var manglendeSøktePerioder = finnManglendeSøktePerioder(grunnlag); @@ -246,13 +352,29 @@ private OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, Local void finnerHullMellomSøktePerioderOgAnnenPartsUttakperioder() { var fødselsdato = LocalDate.of(2018, 6, 6); var hullDato = fødselsdato.plusWeeks(6); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, hullDato.minusDays(1)))) - .annenPart( - new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(hullDato.plusDays(1), fødselsdato.plusWeeks(10)).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + hullDato.minusDays(1)))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + hullDato.plusDays(1), + fødselsdato.plusWeeks(10)) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); @@ -261,26 +383,52 @@ private OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, Local } @Test - void finnerHullMellomSøktePerioderOgAnnenPartsUttakperioderAvslåttPeriodeUtenTrekkdagerOgUtbetaling() { + void + finnerHullMellomSøktePerioderOgAnnenPartsUttakperioderAvslåttPeriodeUtenTrekkdagerOgUtbetaling() { var familiehendelse = LocalDate.of(2018, 12, 4); - var annenpartInnvilgetMødrekvote = AnnenpartUttakPeriode.Builder.uttak(familiehendelse, familiehendelse.plusWeeks(6).minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, new Trekkdager(10), Utbetalingsgrad.TEN)) - .build(); - var annenpartAvslåttMødrekvote = AnnenpartUttakPeriode.Builder.uttak(familiehendelse.plusWeeks(6), familiehendelse.plusWeeks(7)) - .innvilget(false) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, Trekkdager.ZERO, Utbetalingsgrad.ZERO)) - .build(); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, familiehendelse.plusWeeks(8), familiehendelse.plusWeeks(15)))) - .behandling(farBehandling()) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(familiehendelse.plusWeeks(10))) - .datoer(new Datoer.Builder().fødsel(familiehendelse)) - .annenPart(new AnnenPart.Builder().uttaksperiode(annenpartInnvilgetMødrekvote).uttaksperiode(annenpartAvslåttMødrekvote)) - .build(); + var annenpartInnvilgetMødrekvote = + AnnenpartUttakPeriode.Builder.uttak( + familiehendelse, familiehendelse.plusWeeks(6).minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator.forFrilans(), + MØDREKVOTE, + new Trekkdager(10), + Utbetalingsgrad.TEN)) + .build(); + var annenpartAvslåttMødrekvote = + AnnenpartUttakPeriode.Builder.uttak( + familiehendelse.plusWeeks(6), familiehendelse.plusWeeks(7)) + .innvilget(false) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator.forFrilans(), + MØDREKVOTE, + Trekkdager.ZERO, + Utbetalingsgrad.ZERO)) + .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + familiehendelse.plusWeeks(8), + familiehendelse.plusWeeks(15)))) + .behandling(farBehandling()) + .opptjening( + new Opptjening.Builder() + .skjæringstidspunkt(familiehendelse.plusWeeks(10))) + .datoer(new Datoer.Builder().fødsel(familiehendelse)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode(annenpartInnvilgetMødrekvote) + .uttaksperiode(annenpartAvslåttMødrekvote)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); @@ -292,32 +440,72 @@ private OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, Local void finnerIkkeHullFørRevurderingEndringsdato() { var fødselsdato = LocalDate.of(2018, 6, 6); var hullDato = fødselsdato.plusWeeks(6); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, hullDato.minusDays(1)))) - .annenPart( - new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(hullDato.plusDays(1), fødselsdato.plusWeeks(10)).build())) - .revurdering(new Revurdering.Builder().endringsdato(LocalDate.of(2019, 1, 1))) - .behandling(new Behandling.Builder()) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + hullDato.minusDays(1)))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + hullDato.plusDays(1), + fødselsdato.plusWeeks(10)) + .build())) + .revurdering( + new Revurdering.Builder().endringsdato(LocalDate.of(2019, 1, 1))) + .behandling(new Behandling.Builder()) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).isEmpty(); } - @Test void overlappendePerioderMedAnnenPartUtenHull() { var fødselsdato = LocalDate.of(2018, 6, 6); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10)))) - .annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato.plusWeeks(7).plusDays(1), fødselsdato.plusWeeks(8)).build()) - .uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(fødselsdato.plusWeeks(9).plusDays(1), fødselsdato.plusWeeks(11)).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10)))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato + .plusWeeks(7) + .plusDays(1), + fødselsdato.plusWeeks(8)) + .build()) + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato + .plusWeeks(9) + .plusDays(1), + fødselsdato.plusWeeks(11)) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).isEmpty(); @@ -328,13 +516,27 @@ void helgErIkkeHull() { var fødselsdato = LocalDate.of(2018, 6, 6); var mødrekvoteSlutt = LocalDate.of(2018, 7, 20); var annenPartStart = LocalDate.of(2018, 7, 23); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, mødrekvoteSlutt))) - .annenPart( - new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(annenPartStart, annenPartStart.plusWeeks(10)).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, fødselsdato, mødrekvoteSlutt))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + annenPartStart, + annenPartStart.plusWeeks(10)) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).isEmpty(); @@ -344,18 +546,28 @@ void helgErIkkeHull() { void skalLageManglendeSøktFraUke7TilFørsteUttaksdagNårBareFarHarRett() { var familiehendelse = LocalDate.of(2018, 12, 4); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.plusWeeks(7), familiehendelse.plusWeeks(8)))) - .behandling(farBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .datoer(new Datoer.Builder().fødsel(familiehendelse)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.plusWeeks(7), + familiehendelse.plusWeeks(8)))) + .behandling(farBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .datoer(new Datoer.Builder().fødsel(familiehendelse)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); - assertThat(msp.get(0).getFom()).isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6)); - assertThat(msp.get(0).getTom()).isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); + assertThat(msp.get(0).getFom()) + .isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6)); + assertThat(msp.get(0).getTom()) + .isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); assertThat(msp.get(0).getStønadskontotype()).isEqualTo(FORELDREPENGER); } @@ -364,25 +576,47 @@ void helgErIkkeHull() { var familiehendelse = LocalDate.of(2018, 12, 27); var søknadsperiodeFom = familiehendelse.minusWeeks(3); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, søknadsperiodeFom, familiehendelse.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, familiehendelse, familiehendelse.plusWeeks(3))) - .oppgittPeriode( - OppgittPeriode.forUtsettelse(familiehendelse.plusWeeks(6).plusDays(1), familiehendelse.plusWeeks(8), UtsettelseÅrsak.ARBEID, null, - null, null, null))) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(søknadsperiodeFom)) - .datoer(new Datoer.Builder().fødsel(familiehendelse)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + søknadsperiodeFom, + familiehendelse.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + familiehendelse, + familiehendelse.plusWeeks(3))) + .oppgittPeriode( + OppgittPeriode.forUtsettelse( + familiehendelse.plusWeeks(6).plusDays(1), + familiehendelse.plusWeeks(8), + UtsettelseÅrsak.ARBEID, + null, + null, + null, + null))) + .behandling(morBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(søknadsperiodeFom)) + .datoer(new Datoer.Builder().fødsel(familiehendelse)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(2); - assertThat(msp.get(0).getFom()).isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(3).plusDays(1)); - assertThat(msp.get(0).getTom()).isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6).minusDays(1)); - assertThat(msp.get(1).getFom()).isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6)); - assertThat(msp.get(1).getTom()).isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6)); + assertThat(msp.get(0).getFom()) + .isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(3).plusDays(1)); + assertThat(msp.get(0).getTom()) + .isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6).minusDays(1)); + assertThat(msp.get(1).getFom()) + .isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6)); + assertThat(msp.get(1).getTom()) + .isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6)); assertThat(msp.get(0).getStønadskontotype()).isEqualTo(MØDREKVOTE); } @@ -391,14 +625,22 @@ void helgErIkkeHull() { var familiehendelse = LocalDate.of(2018, 12, 4); var søknadsperiodeFom = familiehendelse.plusWeeks(9); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, søknadsperiodeFom, familiehendelse.plusWeeks(10)))) - .behandling(farBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(søknadsperiodeFom)) - .datoer(new Datoer.Builder().fødsel(familiehendelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + søknadsperiodeFom, + familiehendelse.plusWeeks(10)))) + .behandling(farBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(søknadsperiodeFom)) + .datoer(new Datoer.Builder().fødsel(familiehendelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -409,31 +651,62 @@ void helgErIkkeHull() { void skalLageManglendeSøktFraMellomForeldreFørStpForOpptjeningAnnenpartAvslåttSistePeriode() { var familiehendelse = LocalDate.of(2018, 12, 4); - var annenpartInnvilgetMødrekvote = AnnenpartUttakPeriode.Builder.uttak(familiehendelse, familiehendelse.plusWeeks(6).minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, new Trekkdager(10), Utbetalingsgrad.TEN)) - .build(); - var annenpartInnvilgetUtsettelse = AnnenpartUttakPeriode.Builder.utsettelse(familiehendelse.plusWeeks(6), - familiehendelse.plusWeeks(7).minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, Trekkdager.ZERO, Utbetalingsgrad.ZERO)) - .build(); - var annenpartAvslåttMødrekvote = AnnenpartUttakPeriode.Builder.uttak(familiehendelse.plusWeeks(7), familiehendelse.plusWeeks(7).plusDays(2)) - .innvilget(false) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, Trekkdager.ZERO, Utbetalingsgrad.ZERO)) - .build(); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, familiehendelse.plusWeeks(8), familiehendelse.plusWeeks(15)))) - .behandling(farBehandling()) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(familiehendelse.plusWeeks(10))) - .datoer(new Datoer.Builder().fødsel(familiehendelse)) - .annenPart(new AnnenPart.Builder().uttaksperiode(annenpartInnvilgetMødrekvote) - .uttaksperiode(annenpartInnvilgetUtsettelse) - .uttaksperiode(annenpartAvslåttMødrekvote)) - .build(); + var annenpartInnvilgetMødrekvote = + AnnenpartUttakPeriode.Builder.uttak( + familiehendelse, familiehendelse.plusWeeks(6).minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator.forFrilans(), + MØDREKVOTE, + new Trekkdager(10), + Utbetalingsgrad.TEN)) + .build(); + var annenpartInnvilgetUtsettelse = + AnnenpartUttakPeriode.Builder.utsettelse( + familiehendelse.plusWeeks(6), + familiehendelse.plusWeeks(7).minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator.forFrilans(), + MØDREKVOTE, + Trekkdager.ZERO, + Utbetalingsgrad.ZERO)) + .build(); + var annenpartAvslåttMødrekvote = + AnnenpartUttakPeriode.Builder.uttak( + familiehendelse.plusWeeks(7), + familiehendelse.plusWeeks(7).plusDays(2)) + .innvilget(false) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator.forFrilans(), + MØDREKVOTE, + Trekkdager.ZERO, + Utbetalingsgrad.ZERO)) + .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + familiehendelse.plusWeeks(8), + familiehendelse.plusWeeks(15)))) + .behandling(farBehandling()) + .opptjening( + new Opptjening.Builder() + .skjæringstidspunkt(familiehendelse.plusWeeks(10))) + .datoer(new Datoer.Builder().fødsel(familiehendelse)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode(annenpartInnvilgetMødrekvote) + .uttaksperiode(annenpartInnvilgetUtsettelse) + .uttaksperiode(annenpartAvslåttMødrekvote)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -442,68 +715,121 @@ void helgErIkkeHull() { } @Test - void skalLageManglendeSøktFraMellomForeldreFørStpForOpptjeningAnnenpartInnvilgetUtsettelseSistePeriode() { + void + skalLageManglendeSøktFraMellomForeldreFørStpForOpptjeningAnnenpartInnvilgetUtsettelseSistePeriode() { var familiehendelse = LocalDate.of(2018, 12, 4); - var annenpartInnvilgetMødrekvote = AnnenpartUttakPeriode.Builder.uttak(familiehendelse, familiehendelse.plusWeeks(6).minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, new Trekkdager(10), Utbetalingsgrad.TEN)) - .build(); - var annenpartInnvilgetUtsettelse = AnnenpartUttakPeriode.Builder.utsettelse(familiehendelse.plusWeeks(6), - familiehendelse.plusWeeks(7).minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, Trekkdager.ZERO, Utbetalingsgrad.ZERO)) - .build(); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, familiehendelse.plusWeeks(8), familiehendelse.plusWeeks(15)))) - .behandling(farBehandling()) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(familiehendelse.plusWeeks(10))) - .datoer(new Datoer.Builder().fødsel(familiehendelse)) - .annenPart(new AnnenPart.Builder().uttaksperiode(annenpartInnvilgetMødrekvote).uttaksperiode(annenpartInnvilgetUtsettelse)) - .build(); + var annenpartInnvilgetMødrekvote = + AnnenpartUttakPeriode.Builder.uttak( + familiehendelse, familiehendelse.plusWeeks(6).minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator.forFrilans(), + MØDREKVOTE, + new Trekkdager(10), + Utbetalingsgrad.TEN)) + .build(); + var annenpartInnvilgetUtsettelse = + AnnenpartUttakPeriode.Builder.utsettelse( + familiehendelse.plusWeeks(6), + familiehendelse.plusWeeks(7).minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator.forFrilans(), + MØDREKVOTE, + Trekkdager.ZERO, + Utbetalingsgrad.ZERO)) + .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + familiehendelse.plusWeeks(8), + familiehendelse.plusWeeks(15)))) + .behandling(farBehandling()) + .opptjening( + new Opptjening.Builder() + .skjæringstidspunkt(familiehendelse.plusWeeks(10))) + .datoer(new Datoer.Builder().fødsel(familiehendelse)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode(annenpartInnvilgetMødrekvote) + .uttaksperiode(annenpartInnvilgetUtsettelse)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); - assertThat(msp.get(0).getFom()).isEqualTo(annenpartInnvilgetUtsettelse.getTom().plusDays(1)); + assertThat(msp.get(0).getFom()) + .isEqualTo(annenpartInnvilgetUtsettelse.getTom().plusDays(1)); } @Test void skalLageManglendeSøktFraMellomForeldreFørStpForOpptjening() { var familiehendelse = LocalDate.of(2018, 12, 4); - var annenpartInnvilgetMødrekvote = AnnenpartUttakPeriode.Builder.uttak(familiehendelse, familiehendelse.plusWeeks(6).minusDays(1)) - .innvilget(true) - .uttakPeriodeAktivitet( - new AnnenpartUttakPeriodeAktivitet(AktivitetIdentifikator.forFrilans(), MØDREKVOTE, new Trekkdager(10), Utbetalingsgrad.TEN)) - .build(); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, familiehendelse.plusWeeks(8), familiehendelse.plusWeeks(15)))) - .behandling(farBehandling()) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(familiehendelse.plusWeeks(10))) - .datoer(new Datoer.Builder().fødsel(familiehendelse)) - .annenPart(new AnnenPart.Builder().uttaksperiode(annenpartInnvilgetMødrekvote)) - .build(); + var annenpartInnvilgetMødrekvote = + AnnenpartUttakPeriode.Builder.uttak( + familiehendelse, familiehendelse.plusWeeks(6).minusDays(1)) + .innvilget(true) + .uttakPeriodeAktivitet( + new AnnenpartUttakPeriodeAktivitet( + AktivitetIdentifikator.forFrilans(), + MØDREKVOTE, + new Trekkdager(10), + Utbetalingsgrad.TEN)) + .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + familiehendelse.plusWeeks(8), + familiehendelse.plusWeeks(15)))) + .behandling(farBehandling()) + .opptjening( + new Opptjening.Builder() + .skjæringstidspunkt(familiehendelse.plusWeeks(10))) + .datoer(new Datoer.Builder().fødsel(familiehendelse)) + .annenPart( + new AnnenPart.Builder().uttaksperiode(annenpartInnvilgetMødrekvote)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); - assertThat(msp.get(0).getFom()).isEqualTo(annenpartInnvilgetMødrekvote.getTom().plusDays(1)); + assertThat(msp.get(0).getFom()) + .isEqualTo(annenpartInnvilgetMødrekvote.getTom().plusDays(1)); } @Test void skalLageManglendeSøktFraOmsorgsovertakelseTilFørsteUttaksdagVedAdopsjon() { var familiehendelse = LocalDate.of(2018, 12, 4); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, familiehendelse.plusWeeks(1), familiehendelse.plusWeeks(3)))) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + familiehendelse.plusWeeks(1), + familiehendelse.plusWeeks(3)))) + .behandling(morBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -518,18 +844,27 @@ private Behandling.Builder morBehandling() { } @Test - void skalLageManglendeSøktFraOmsorgsovertakelseTilFørsteUttaksdagVedAdopsjonDerAnnenpartIkkeHarUttaksperioder() { + void + skalLageManglendeSøktFraOmsorgsovertakelseTilFørsteUttaksdagVedAdopsjonDerAnnenpartIkkeHarUttaksperioder() { var familiehendelse = LocalDate.of(2018, 12, 4); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, familiehendelse.plusWeeks(1), familiehendelse.plusWeeks(3)))) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - //Annenpart finnes, men har fått avslag på alle sine perioder - .annenPart(new AnnenPart.Builder()) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + familiehendelse.plusWeeks(1), + familiehendelse.plusWeeks(3)))) + .behandling(morBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + // Annenpart finnes, men har fått avslag på alle sine perioder + .annenPart(new AnnenPart.Builder()) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -543,19 +878,28 @@ private Behandling.Builder morBehandling() { void skalLageManglendeSøktFraOmsorgsovertakelseTilFørsteUttaksdagNårBareFarHarRett() { var familiehendelse = LocalDate.of(2018, 12, 4); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.plusWeeks(7), familiehendelse.plusWeeks(8)))) - .behandling(farBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.plusWeeks(7), + familiehendelse.plusWeeks(8)))) + .behandling(farBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); assertThat(msp.get(0).getFom()).isEqualTo(grunnlag.getDatoer().getFamiliehendelse()); - assertThat(msp.get(0).getTom()).isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); + assertThat(msp.get(0).getTom()) + .isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); assertThat(msp.get(0).getStønadskontotype()).isNull(); } @@ -563,36 +907,59 @@ private Behandling.Builder morBehandling() { void skalLageManglendeSøktFraAnkomstNorgeDatoTilFørsteUttaksdag() { var familiehendelse = LocalDate.of(2018, 12, 4); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, familiehendelse.plusWeeks(1), familiehendelse.plusWeeks(3)))) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(familiehendelse.plusDays(3))) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + familiehendelse.plusWeeks(1), + familiehendelse.plusWeeks(3)))) + .behandling(morBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(familiehendelse.plusDays(3))) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); assertThat(msp.get(0).getFom()).isEqualTo(grunnlag.getAdopsjon().getAnkomstNorgeDato()); - assertThat(msp.get(0).getTom()).isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); + assertThat(msp.get(0).getTom()) + .isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); assertThat(msp.get(0).getStønadskontotype()).isNull(); } @Test - void skalIkkeLageManglendeSøktFraOmsorgsovertakelseTilFørsteUttaksdagHvisAnnenpartHarUttakITidsrommet() { + void + skalIkkeLageManglendeSøktFraOmsorgsovertakelseTilFørsteUttaksdagHvisAnnenpartHarUttakITidsrommet() { var omsorgsovertakelse = LocalDate.of(2018, 12, 4); var førsteUttaksdato = omsorgsovertakelse.plusWeeks(5); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, førsteUttaksdato, førsteUttaksdato.plusWeeks(2)))) - .behandling(farBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .annenPart( - new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(omsorgsovertakelse, førsteUttaksdato.minusDays(1)).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + førsteUttaksdato, + førsteUttaksdato.plusWeeks(2)))) + .behandling(farBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + omsorgsovertakelse, + førsteUttaksdato.minusDays(1)) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -600,71 +967,119 @@ private Behandling.Builder morBehandling() { } @Test - void skalLageManglendeSøktFraOmsorgsovertakelseTilFørsteUttaksdagHvisAnnenpartIkkeHarTattHelePeriodenFramTilSøkersFørsteUttaksdato() { + void + skalLageManglendeSøktFraOmsorgsovertakelseTilFørsteUttaksdagHvisAnnenpartIkkeHarTattHelePeriodenFramTilSøkersFørsteUttaksdato() { var omsorgsovertakelse = LocalDate.of(2018, 12, 4); var førsteUttaksdato = omsorgsovertakelse.plusWeeks(5); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, førsteUttaksdato, førsteUttaksdato.plusWeeks(2)))) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(omsorgsovertakelse, førsteUttaksdato.minusWeeks(1)).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + førsteUttaksdato, + førsteUttaksdato.plusWeeks(2)))) + .behandling(morBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + omsorgsovertakelse, + førsteUttaksdato.minusWeeks(1)) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); - assertThat(msp.get(0).getFom()).isEqualTo(grunnlag.getAnnenPart().getUttaksperioder().get(0).getTom().plusDays(1)); + assertThat(msp.get(0).getFom()) + .isEqualTo(grunnlag.getAnnenPart().getUttaksperioder().get(0).getTom().plusDays(1)); assertThat(msp.get(0).getTom()).isEqualTo(førsteUttaksdato.minusDays(1)); } @Test - void skalLageManglendeSøktFraOmsorgsovertakelseTilFørsteUttaksdagAnnenpartHvisAnnenpartHarUttakMidtMellomOmsorgsovertakelseOgSøkersFørsteUttaksdag() { + void + skalLageManglendeSøktFraOmsorgsovertakelseTilFørsteUttaksdagAnnenpartHvisAnnenpartHarUttakMidtMellomOmsorgsovertakelseOgSøkersFørsteUttaksdag() { var omsorgsovertakelse = LocalDate.of(2018, 12, 4); var førsteUttaksdato = omsorgsovertakelse.plusWeeks(5); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, førsteUttaksdato, førsteUttaksdato.plusWeeks(2)))) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(omsorgsovertakelse.plusWeeks(1), førsteUttaksdato.minusWeeks(1)).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + førsteUttaksdato, + førsteUttaksdato.plusWeeks(2)))) + .behandling(morBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + omsorgsovertakelse.plusWeeks(1), + førsteUttaksdato.minusWeeks(1)) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(2); assertThat(msp.get(0).getFom()).isEqualTo(omsorgsovertakelse); - assertThat(msp.get(0).getTom()).isEqualTo(grunnlag.getAnnenPart().getUttaksperioder().get(0).getFom().minusDays(1)); - assertThat(msp.get(1).getFom()).isEqualTo(grunnlag.getAnnenPart().getUttaksperioder().get(0).getTom().plusDays(1)); + assertThat(msp.get(0).getTom()) + .isEqualTo( + grunnlag.getAnnenPart().getUttaksperioder().get(0).getFom().minusDays(1)); + assertThat(msp.get(1).getFom()) + .isEqualTo(grunnlag.getAnnenPart().getUttaksperioder().get(0).getTom().plusDays(1)); assertThat(msp.get(1).getTom()).isEqualTo(førsteUttaksdato.minusDays(1)); } @Test - void skalLageManglendeSøktFraAnkomstNorgeDatoTilFørsteUttaksdagPlussVanligeHullMellomPerioder() { + void + skalLageManglendeSøktFraAnkomstNorgeDatoTilFørsteUttaksdagPlussVanligeHullMellomPerioder() { var familiehendelse = LocalDate.of(2018, 12, 4); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, familiehendelse.plusWeeks(1), familiehendelse.plusWeeks(3))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, familiehendelse.plusWeeks(5), familiehendelse.plusWeeks(7)))) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(familiehendelse.plusDays(3))) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + familiehendelse.plusWeeks(1), + familiehendelse.plusWeeks(3))) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + familiehendelse.plusWeeks(5), + familiehendelse.plusWeeks(7)))) + .behandling(morBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(familiehendelse.plusDays(3))) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(2); assertThat(msp.get(0).getFom()).isEqualTo(grunnlag.getAdopsjon().getAnkomstNorgeDato()); - assertThat(msp.get(0).getTom()).isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); + assertThat(msp.get(0).getTom()) + .isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); assertThat(msp.get(0).getStønadskontotype()).isNull(); - assertThat(msp.get(1).getFom()).isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getTom().plusDays(1)); - assertThat(msp.get(1).getTom()).isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(1).getFom().minusDays(1)); + assertThat(msp.get(1).getFom()) + .isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getTom().plusDays(1)); + assertThat(msp.get(1).getTom()) + .isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(1).getFom().minusDays(1)); assertThat(msp.get(1).getStønadskontotype()).isNull(); } @@ -672,19 +1087,40 @@ private Behandling.Builder morBehandling() { void manglende_fpff_skal_ikke_slutte_i_helg() { var fødselsdato = LocalDate.of(2018, 6, 11); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, LocalDate.of(2018, 5, 21), LocalDate.of(2018, 6, 7))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, LocalDate.of(2018, 6, 11), LocalDate.of(2018, 8, 17))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, LocalDate.of(2018, 9, 10), LocalDate.of(2018, 10, 12)))) - .annenPart(new AnnenPart.Builder() - // Annen part starter mandagen etter - .uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2018, 8, 20), LocalDate.of(2018, 9, 8)).samtidigUttak(true).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + LocalDate.of(2018, 5, 21), + LocalDate.of(2018, 6, 7))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + LocalDate.of(2018, 6, 11), + LocalDate.of(2018, 8, 17))) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + LocalDate.of(2018, 9, 10), + LocalDate.of(2018, 10, 12)))) + .annenPart( + new AnnenPart.Builder() + // Annen part starter mandagen etter + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2018, 8, 20), + LocalDate.of(2018, 9, 8)) + .samtidigUttak(true) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); - //Lager manglende søkt bare for fredagen, ok ikke helgen + // Lager manglende søkt bare for fredagen, ok ikke helgen assertThat(msp).hasSize(1); assertThat(msp.get(0).getFom()).isEqualTo(LocalDate.of(2018, 6, 8)); assertThat(msp.get(0).getTom()).isEqualTo(LocalDate.of(2018, 6, 8)); @@ -694,10 +1130,18 @@ void manglende_fpff_skal_ikke_slutte_i_helg() { void skalIkkeOppretteManglendeSøktFørSkjæringstidspunktForOpptjening() { var fødselsdato = LocalDate.of(2018, 6, 11); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6)))) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6)))) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -708,12 +1152,25 @@ void manglende_fpff_skal_ikke_slutte_i_helg() { void skalOppretteManglendeSøktFraSkjæringstidspunktForOpptjening() { var fødselsdato = LocalDate.of(2018, 6, 13); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusWeeks(2))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6)))) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato.minusWeeks(1))) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusWeeks(2))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6)))) + .opptjening( + new Opptjening.Builder() + .skjæringstidspunkt(fødselsdato.minusWeeks(1))) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -726,14 +1183,32 @@ void manglende_fpff_skal_ikke_slutte_i_helg() { void skalIkkeOppretteManglendeSøktBasertPåAnnenPartFørSkjæringstidspunktForOpptjening() { var fødselsdato = LocalDate.of(2018, 6, 13); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(6)))) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato.plusWeeks(7))) - .annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato.plusWeeks(7), fødselsdato.plusWeeks(8)).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(6)))) + .opptjening( + new Opptjening.Builder() + .skjæringstidspunkt(fødselsdato.plusWeeks(7))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato.plusWeeks(7), + fødselsdato.plusWeeks(8)) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -744,15 +1219,29 @@ void manglende_fpff_skal_ikke_slutte_i_helg() { void skal_ikke_opprette_manglende_søkt_før_endringsdato() { var fødselsdato = LocalDate.of(2018, 6, 13); - var oppgittPeriode = OppgittPeriode.forVanligPeriode(FORELDREPENGER, fødselsdato.plusWeeks(20), fødselsdato.plusWeeks(22), null, false, - fødselsdato.plusWeeks(17), null, null, null); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode)) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(fødselsdato.plusWeeks(7))) - .behandling(farBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) - .revurdering(new Revurdering.Builder().endringsdato(fødselsdato.plusWeeks(18))) - .build(); + var oppgittPeriode = + OppgittPeriode.forVanligPeriode( + FORELDREPENGER, + fødselsdato.plusWeeks(20), + fødselsdato.plusWeeks(22), + null, + false, + fødselsdato.plusWeeks(17), + null, + null, + null); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode)) + .opptjening( + new Opptjening.Builder() + .skjæringstidspunkt(fødselsdato.plusWeeks(7))) + .behandling(farBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false)) + .revurdering( + new Revurdering.Builder().endringsdato(fødselsdato.plusWeeks(18))) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -760,5 +1249,4 @@ void manglende_fpff_skal_ikke_slutte_i_helg() { assertThat(msp.get(0).getFom()).isEqualTo(grunnlag.getRevurdering().getEndringsdato()); assertThat(msp.get(0).getTom()).isEqualTo(fødselsdato.plusWeeks(20).minusDays(1)); } - } diff --git "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderTjenesteTest.java" "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderTjenesteTest.java" index 5b1b3ca7..06c2961d 100644 --- "a/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderTjenesteTest.java" +++ "b/src/test/java/no/nav/foreldrepenger/regler/uttak/fastsetteperiode/util/ManglendeS\303\270ktePerioderTjenesteTest.java" @@ -9,10 +9,6 @@ import java.time.LocalDate; import java.util.List; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.RegelGrunnlagTestBuilder; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Adopsjon; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.AnnenPart; @@ -33,6 +29,8 @@ import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknad; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.Søknadstype; import no.nav.foreldrepenger.regler.uttak.fastsetteperiode.grunnlag.UtsettelseÅrsak; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; class ManglendeSøktePerioderTjenesteTest { @@ -41,13 +39,26 @@ void farMedAleneomsorgMedInnvilgetAnnetPartPerioder() { // Gjelder der far først har søkt om aleneomsorg. var morTom = LocalDate.of(2020, 12, 3); var farFom = morTom.plusDays(10); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(LocalDate.of(2020, 11, 5))) - .annenPart(new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(LocalDate.of(2020, 11, 5), morTom).build())) - .behandling(farBehandling()) - .rettOgOmsorg(aleneomsorg()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL).oppgittPeriode(oppgittPeriode(FORELDREPENGER, farFom, farFom.plusDays(10)))) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(LocalDate.of(2020, 11, 5))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + LocalDate.of(2020, 11, 5), morTom) + .build())) + .behandling(farBehandling()) + .rettOgOmsorg(aleneomsorg()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + farFom, + farFom.plusDays(10)))) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); } @@ -55,14 +66,25 @@ void farMedAleneomsorgMedInnvilgetAnnetPartPerioder() { @Test void farMedAleneomsorgSkalIkkeHaMsp() { var fødsel = LocalDate.of(2022, 7, 29); - var grunnlag = RegelGrunnlagTestBuilder.create() - .datoer(new Datoer.Builder().fødsel(fødsel)) - .behandling(farBehandling()) - .rettOgOmsorg(aleneomsorg()) - .søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, fødsel, fødsel.plusDays(10))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, fødsel.plusWeeks(3), fødsel.plusWeeks(10)))) - .build(); + var grunnlag = + RegelGrunnlagTestBuilder.create() + .datoer(new Datoer.Builder().fødsel(fødsel)) + .behandling(farBehandling()) + .rettOgOmsorg(aleneomsorg()) + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødsel, + fødsel.plusDays(10))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + fødsel.plusWeeks(3), + fødsel.plusWeeks(10)))) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).isEmpty(); } @@ -71,12 +93,30 @@ void farMedAleneomsorgSkalIkkeHaMsp() { void skal_ikke_opprette_msp_før_fødsel() { var familiehendelsesDato = LocalDate.of(2019, 12, 11); - var fellesperiode = oppgittPeriode(FELLESPERIODE, familiehendelsesDato.minusWeeks(10), familiehendelsesDato.minusWeeks(8)); - var fpff = oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, familiehendelsesDato.minusWeeks(3), familiehendelsesDato.minusWeeks(2)); - var mødrekvote = oppgittPeriode(MØDREKVOTE, familiehendelsesDato, familiehendelsesDato.plusWeeks(6).minusDays(1)); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) - .søknad(new Søknad.Builder().oppgittPeriode(fellesperiode).oppgittPeriode(fpff).oppgittPeriode(mødrekvote)) - .build(); + var fellesperiode = + oppgittPeriode( + FELLESPERIODE, + familiehendelsesDato.minusWeeks(10), + familiehendelsesDato.minusWeeks(8)); + var fpff = + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + familiehendelsesDato.minusWeeks(3), + familiehendelsesDato.minusWeeks(2)); + var mødrekvote = + oppgittPeriode( + MØDREKVOTE, + familiehendelsesDato, + familiehendelsesDato.plusWeeks(6).minusDays(1)); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode(fellesperiode) + .oppgittPeriode(fpff) + .oppgittPeriode(mødrekvote)) + .build(); var manglendeSøktePerioder = finnManglendeSøktePerioder(grunnlag); @@ -86,32 +126,53 @@ void farMedAleneomsorgSkalIkkeHaMsp() { @Test void skalUtledeMspMødrekvoteITidsperiodenForbeholdtMorEtterFødsel() { var familiehendelsesDato = LocalDate.of(2018, 6, 4).plusWeeks(4); - var grunnlag = grunnlagMedKontoer().søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(MØDREKVOTE, familiehendelsesDato.plusWeeks(6), familiehendelsesDato.plusWeeks(7)))) - .datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + familiehendelsesDato.plusWeeks(6), + familiehendelsesDato.plusWeeks(7)))) + .datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) + .build(); var manglendeSøktePerioder = finnManglendeSøktePerioder(grunnlag); - var mspEtterFødsel = manglendeSøktePerioder.stream().filter(msp -> msp.getStønadskontotype().equals(MØDREKVOTE)).findFirst(); + var mspEtterFødsel = + manglendeSøktePerioder.stream() + .filter(msp -> msp.getStønadskontotype().equals(MØDREKVOTE)) + .findFirst(); assertThat(mspEtterFødsel).isPresent(); - mspEtterFødsel.ifPresent(msp -> { - assertThat(msp.getFom()).isEqualTo(familiehendelsesDato); - assertThat(msp.getTom()).isEqualTo(familiehendelsesDato.plusWeeks(6).minusDays(3));//-3 pga helg - }); + mspEtterFødsel.ifPresent( + msp -> { + assertThat(msp.getFom()).isEqualTo(familiehendelsesDato); + assertThat(msp.getTom()) + .isEqualTo( + familiehendelsesDato.plusWeeks(6).minusDays(3)); // -3 pga helg + }); } @Test void skalIkkeUtledeMspIPerioderFørEndringsdato() { var familiehendelsesDato = LocalDate.of(2018, 6, 4).plusWeeks(4); - var grunnlag = grunnlagMedKontoer().søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(MØDREKVOTE, familiehendelsesDato.plusWeeks(6), familiehendelsesDato.plusWeeks(7)))) - .datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) - .behandling(new Behandling.Builder()) - .revurdering(new Revurdering.Builder().endringsdato(LocalDate.of(2019, 6, 4))) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + familiehendelsesDato.plusWeeks(6), + familiehendelsesDato.plusWeeks(7)))) + .datoer(new Datoer.Builder().fødsel(familiehendelsesDato)) + .behandling(new Behandling.Builder()) + .revurdering( + new Revurdering.Builder().endringsdato(LocalDate.of(2019, 6, 4))) + .build(); var manglendeSøktePerioder = finnManglendeSøktePerioder(grunnlag); @@ -122,13 +183,29 @@ void farMedAleneomsorgSkalIkkeHaMsp() { void finnerHullMellomParteneITidsrommetForbeholdtMor() { var fødselsdato = LocalDate.of(2018, 6, 6); var hullDato = fødselsdato.plusWeeks(3); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, hullDato.minusDays(1)))) - .annenPart( - new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(hullDato.plusDays(1), fødselsdato.plusWeeks(10)).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + hullDato.minusDays(1)))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + hullDato.plusDays(1), + fødselsdato.plusWeeks(10)) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); @@ -139,32 +216,72 @@ void finnerHullMellomParteneITidsrommetForbeholdtMor() { @Test void skal_ikke_opprette_msp_hvis_mor_ikke_søkt() { var fødselsdato = LocalDate.of(2021, 9, 27); - var grunnlag = grunnlagMedKontoer().behandling(farBehandling()) - .rettOgOmsorg(beggeRett()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(4))) - .oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(15), fødselsdato.plusWeeks(20)))) - .build(); + var grunnlag = + grunnlagMedKontoer() + .behandling(farBehandling()) + .rettOgOmsorg(beggeRett()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(4))) + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(15), + fødselsdato.plusWeeks(20)))) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).isEmpty(); } private RettOgOmsorg.Builder beggeRett() { - return new RettOgOmsorg.Builder().aleneomsorg(false).morHarRett(true).farHarRett(true).samtykke(true); + return new RettOgOmsorg.Builder() + .aleneomsorg(false) + .morHarRett(true) + .farHarRett(true) + .samtykke(true); } @Test void overlappendePerioderMedAnnenPartUtenHull() { var fødselsdato = LocalDate.of(2018, 6, 6); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, fødselsdato.plusWeeks(10)))) - .annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato.plusWeeks(7).plusDays(1), fødselsdato.plusWeeks(8)).build()) - .uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(fødselsdato.plusWeeks(9).plusDays(1), fødselsdato.plusWeeks(11)).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + fødselsdato, + fødselsdato.plusWeeks(10)))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato + .plusWeeks(7) + .plusDays(1), + fødselsdato.plusWeeks(8)) + .build()) + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato + .plusWeeks(9) + .plusDays(1), + fødselsdato.plusWeeks(11)) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).isEmpty(); @@ -175,13 +292,27 @@ void helgErIkkeHull() { var fødselsdato = LocalDate.of(2018, 6, 6); var mødrekvoteSlutt = LocalDate.of(2018, 7, 13); var annenPartStart = LocalDate.of(2018, 7, 16); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, fødselsdato.minusWeeks(3), fødselsdato.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, fødselsdato, mødrekvoteSlutt))) - .annenPart( - new AnnenPart.Builder().uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(annenPartStart, annenPartStart.plusWeeks(10)).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + fødselsdato.minusWeeks(3), + fødselsdato.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, fødselsdato, mødrekvoteSlutt))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + annenPartStart, + annenPartStart.plusWeeks(10)) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).isEmpty(); @@ -191,18 +322,28 @@ void helgErIkkeHull() { void skalLageManglendeSøktFraUke7TilFørsteUttaksdagNårBareFarHarRett() { var familiehendelse = LocalDate.of(2018, 12, 4); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.plusWeeks(7), familiehendelse.plusWeeks(8)))) - .behandling(farBehandling()) - .rettOgOmsorg(bareFarHarRett()) - .datoer(new Datoer.Builder().fødsel(familiehendelse)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.plusWeeks(7), + familiehendelse.plusWeeks(8)))) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarHarRett()) + .datoer(new Datoer.Builder().fødsel(familiehendelse)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); - assertThat(msp.get(0).getFom()).isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6)); - assertThat(msp.get(0).getTom()).isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); + assertThat(msp.get(0).getFom()) + .isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6)); + assertThat(msp.get(0).getTom()) + .isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); assertThat(msp.get(0).getStønadskontotype()).isEqualTo(FORELDREPENGER); } @@ -210,15 +351,35 @@ void helgErIkkeHull() { void skalLageManglendeSøktIMellomliggendePerioderNårBareFarHarRett_fødsel() { var familiehendelse = LocalDate.of(2021, 9, 28); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.minusWeeks(3), familiehendelse.plusWeeks(2))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.plusWeeks(4), familiehendelse.plusWeeks(5))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.plusWeeks(12), familiehendelse.plusWeeks(15))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.plusWeeks(16), familiehendelse.plusWeeks(18)))) - .behandling(farBehandling()) - .rettOgOmsorg(bareFarHarRett()) - .datoer(new Datoer.Builder().fødsel(familiehendelse)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.minusWeeks(3), + familiehendelse.plusWeeks(2))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.plusWeeks(4), + familiehendelse.plusWeeks(5))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.plusWeeks(12), + familiehendelse.plusWeeks(15))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.plusWeeks(16), + familiehendelse.plusWeeks(18)))) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarHarRett()) + .datoer(new Datoer.Builder().fødsel(familiehendelse)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -235,16 +396,36 @@ void helgErIkkeHull() { void skalLageManglendeSøktIMellomliggendePerioderNårBareFarHarRett_adopsjon() { var familiehendelse = LocalDate.of(2021, 9, 28); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.minusWeeks(3), familiehendelse.plusWeeks(2))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.plusWeeks(4), familiehendelse.plusWeeks(5))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.plusWeeks(12), familiehendelse.plusWeeks(15))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.plusWeeks(16), familiehendelse.plusWeeks(18)))) - .behandling(farBehandling()) - .rettOgOmsorg(bareFarHarRett()) - .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(familiehendelse)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.minusWeeks(3), + familiehendelse.plusWeeks(2))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.plusWeeks(4), + familiehendelse.plusWeeks(5))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.plusWeeks(12), + familiehendelse.plusWeeks(15))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.plusWeeks(16), + familiehendelse.plusWeeks(18)))) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarHarRett()) + .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(familiehendelse)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -264,13 +445,19 @@ void helgErIkkeHull() { void skalLageManglendeSøktHvisBfhrAdopsjonIkkeStarterPåOmsorgsovertakelseDato() { var omsorgsovertakelse = LocalDate.of(2023, 3, 3); - var søktPeriode = oppgittPeriode(FORELDREPENGER, LocalDate.of(2023, 4, 4), LocalDate.of(2023, 4, 10)); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON).oppgittPeriode(søktPeriode)) - .behandling(farBehandling()) - .rettOgOmsorg(bareFarHarRett()) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var søktPeriode = + oppgittPeriode(FORELDREPENGER, LocalDate.of(2023, 4, 4), LocalDate.of(2023, 4, 10)); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode(søktPeriode)) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarHarRett()) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -282,16 +469,22 @@ void helgErIkkeHull() { @Test void skalLageManglendeSøktHvisBfhrAdopsjonIkkeStarterPåOmsorgsovertakelseDato_endagsperiode() { - //FAGSYSTEM-276286 + // FAGSYSTEM-276286 var omsorgsovertakelse = LocalDate.of(2023, 3, 3); - var søktPeriode = oppgittPeriode(FORELDREPENGER, LocalDate.of(2023, 4, 4), LocalDate.of(2023, 4, 4)); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON).oppgittPeriode(søktPeriode)) - .behandling(farBehandling()) - .rettOgOmsorg(bareFarHarRett()) - .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var søktPeriode = + oppgittPeriode(FORELDREPENGER, LocalDate.of(2023, 4, 4), LocalDate.of(2023, 4, 4)); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode(søktPeriode)) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarHarRett()) + .datoer(new Datoer.Builder().omsorgsovertakelse(omsorgsovertakelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -310,23 +503,44 @@ private static RettOgOmsorg.Builder bareFarHarRett() { var familiehendelse = LocalDate.of(2018, 12, 27); var søknadsperiodeFom = familiehendelse.minusWeeks(3); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, søknadsperiodeFom, familiehendelse.minusDays(1))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, familiehendelse, familiehendelse.plusWeeks(3))) - .oppgittPeriode( - OppgittPeriode.forUtsettelse(familiehendelse.plusWeeks(6).plusDays(1), familiehendelse.plusWeeks(8), UtsettelseÅrsak.SYKDOM_SKADE, - null, null, null, DokumentasjonVurdering.SYKDOM_ANNEN_FORELDER_GODKJENT))) - .behandling(morBehandling()) - .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(søknadsperiodeFom)) - .datoer(new Datoer.Builder().fødsel(familiehendelse)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + søknadsperiodeFom, + familiehendelse.minusDays(1))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + familiehendelse, + familiehendelse.plusWeeks(3))) + .oppgittPeriode( + OppgittPeriode.forUtsettelse( + familiehendelse.plusWeeks(6).plusDays(1), + familiehendelse.plusWeeks(8), + UtsettelseÅrsak.SYKDOM_SKADE, + null, + null, + null, + DokumentasjonVurdering + .SYKDOM_ANNEN_FORELDER_GODKJENT))) + .behandling(morBehandling()) + .rettOgOmsorg(new RettOgOmsorg.Builder().farHarRett(true).morHarRett(true)) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(søknadsperiodeFom)) + .datoer(new Datoer.Builder().fødsel(familiehendelse)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); - assertThat(msp.get(0).getFom()).isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(3).plusDays(1)); - assertThat(msp.get(0).getTom()).isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6).minusDays(1)); + assertThat(msp.get(0).getFom()) + .isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(3).plusDays(1)); + assertThat(msp.get(0).getTom()) + .isEqualTo(grunnlag.getDatoer().getFamiliehendelse().plusWeeks(6).minusDays(1)); assertThat(msp.get(0).getStønadskontotype()).isEqualTo(MØDREKVOTE); } @@ -335,14 +549,22 @@ private static RettOgOmsorg.Builder bareFarHarRett() { var familiehendelse = LocalDate.of(2018, 12, 4); var søknadsperiodeFom = familiehendelse.plusWeeks(9); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.FØDSEL) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, søknadsperiodeFom, familiehendelse.plusWeeks(10)))) - .behandling(farBehandling()) - .rettOgOmsorg(bareFarHarRett()) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(søknadsperiodeFom)) - .datoer(new Datoer.Builder().fødsel(familiehendelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.FØDSEL) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + søknadsperiodeFom, + familiehendelse.plusWeeks(10)))) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarHarRett()) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(søknadsperiodeFom)) + .datoer(new Datoer.Builder().fødsel(familiehendelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -353,19 +575,28 @@ private static RettOgOmsorg.Builder bareFarHarRett() { void skalLageManglendeSøktFraOmsorgsovertakelseTilFørsteUttaksdagNårBareFarHarRett() { var familiehendelse = LocalDate.of(2018, 12, 4); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.ADOPSJON) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER, familiehendelse.plusWeeks(7), familiehendelse.plusWeeks(8)))) - .behandling(farBehandling()) - .rettOgOmsorg(bareFarHarRett()) - .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) - .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.ADOPSJON) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER, + familiehendelse.plusWeeks(7), + familiehendelse.plusWeeks(8)))) + .behandling(farBehandling()) + .rettOgOmsorg(bareFarHarRett()) + .datoer(new Datoer.Builder().omsorgsovertakelse(familiehendelse)) + .adopsjon(new Adopsjon.Builder().ankomstNorge(null)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).hasSize(1); assertThat(msp.get(0).getFom()).isEqualTo(grunnlag.getDatoer().getFamiliehendelse()); - assertThat(msp.get(0).getTom()).isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); + assertThat(msp.get(0).getTom()) + .isEqualTo(grunnlag.getSøknad().getOppgittePerioder().get(0).getFom().minusDays(1)); assertThat(msp.get(0).getStønadskontotype()).isEqualTo(FORELDREPENGER); } @@ -373,35 +604,67 @@ private static RettOgOmsorg.Builder bareFarHarRett() { void manglende_fpff_skal_ikke_slutte_i_helg() { var fødselsdato = LocalDate.of(2021, 6, 21); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad( - new Søknad.Builder().oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, LocalDate.of(2021, 5, 29), LocalDate.of(2021, 6, 18))) - //Mor har ikke søkt første uken etter fødsel - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, LocalDate.of(2021, 6, 27), LocalDate.of(2021, 8, 8)))) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + LocalDate.of(2021, 5, 29), + LocalDate.of(2021, 6, 18))) + // Mor har ikke søkt første uken etter fødsel + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + LocalDate.of(2021, 6, 27), + LocalDate.of(2021, 8, 8)))) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); - //Lager manglende søkt bare for fredagen, ok ikke helgen + // Lager manglende søkt bare for fredagen, ok ikke helgen assertThat(msp).hasSize(1); assertThat(msp.get(0).getFom()).isEqualTo(LocalDate.of(2021, 6, 21)); assertThat(msp.get(0).getTom()).isEqualTo(LocalDate.of(2021, 6, 25)); } @Test - @DisplayName("Skal lage manglende søkt periode for den ene dagen som ligger innen første 6 ukene.") + @DisplayName( + "Skal lage manglende søkt periode for den ene dagen som ligger innen første 6 ukene.") void ikke_msp_hvis_fødsel_etter_termin_med_påfølgende_fritt_uttak() { - //Fra prod saksnummer 152085835 + // Fra prod saksnummer 152085835 var termin = LocalDate.of(2021, 12, 15); var fødselsdato = LocalDate.of(2021, 12, 16); - var grunnlag = grunnlagMedKontoer().datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termin)) - .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode(FELLESPERIODE, LocalDate.of(2021, 11, 24), LocalDate.of(2021, 11, 24))) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, LocalDate.of(2021, 11, 25), LocalDate.of(2021, 12, 15))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, LocalDate.of(2021, 12, 16), LocalDate.of(2022, 1, 25))) - //Opprinnelig søkt fritt uttak etter uke 6 - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, LocalDate.of(2022, 2, 16), LocalDate.of(2022, 2, 16)))) - .build(); + var grunnlag = + grunnlagMedKontoer() + .datoer(new Datoer.Builder().fødsel(fødselsdato).termin(termin)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + LocalDate.of(2021, 11, 24), + LocalDate.of(2021, 11, 24))) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + LocalDate.of(2021, 11, 25), + LocalDate.of(2021, 12, 15))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + LocalDate.of(2021, 12, 16), + LocalDate.of(2022, 1, 25))) + // Opprinnelig søkt fritt uttak etter uke 6 + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + LocalDate.of(2022, 2, 16), + LocalDate.of(2022, 2, 16)))) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -412,22 +675,43 @@ void manglende_fpff_skal_ikke_slutte_i_helg() { @Test @DisplayName( - "FAGSYSTEM-214259 - Mor søker en dag fellesperiode lenge før fødsel. Termin på en lørdag. " + "Skal ikke få opprettet msp før fpff perioden") + "FAGSYSTEM-214259 - Mor søker en dag fellesperiode lenge før fødsel. Termin på en lørdag. " + + "Skal ikke få opprettet msp før fpff perioden") void skalIkkeLageManglendeSøktFørUke3FørFødsel() { var termindato = LocalDate.of(2022, 4, 16); var søknadsperiodeFom = LocalDate.of(2022, 1, 31); - var grunnlag = grunnlagMedKontoer().søknad(new Søknad.Builder().type(Søknadstype.TERMIN) - //Søker en dag - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, søknadsperiodeFom, søknadsperiodeFom)) - .oppgittPeriode(oppgittPeriode(FORELDREPENGER_FØR_FØDSEL, LocalDate.of(2022, 3, 28), LocalDate.of(2022, 4, 15))) - .oppgittPeriode(oppgittPeriode(MØDREKVOTE, LocalDate.of(2022, 4, 18), LocalDate.of(2022, 7, 29))) - .oppgittPeriode(oppgittPeriode(FELLESPERIODE, LocalDate.of(2022, 8, 1), LocalDate.of(2022, 11, 17)))) - .behandling(morBehandling()) - .rettOgOmsorg(beggeRett()) - .opptjening(new Opptjening.Builder().skjæringstidspunkt(søknadsperiodeFom)) - .datoer(new Datoer.Builder().termin(termindato)) - .build(); + var grunnlag = + grunnlagMedKontoer() + .søknad( + new Søknad.Builder() + .type(Søknadstype.TERMIN) + // Søker en dag + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + søknadsperiodeFom, + søknadsperiodeFom)) + .oppgittPeriode( + oppgittPeriode( + FORELDREPENGER_FØR_FØDSEL, + LocalDate.of(2022, 3, 28), + LocalDate.of(2022, 4, 15))) + .oppgittPeriode( + oppgittPeriode( + MØDREKVOTE, + LocalDate.of(2022, 4, 18), + LocalDate.of(2022, 7, 29))) + .oppgittPeriode( + oppgittPeriode( + FELLESPERIODE, + LocalDate.of(2022, 8, 1), + LocalDate.of(2022, 11, 17)))) + .behandling(morBehandling()) + .rettOgOmsorg(beggeRett()) + .opptjening(new Opptjening.Builder().skjæringstidspunkt(søknadsperiodeFom)) + .datoer(new Datoer.Builder().termin(termindato)) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); @@ -436,16 +720,39 @@ void manglende_fpff_skal_ikke_slutte_i_helg() { @Test void ikke_msp_for_for_ved_tidlig_oppstart_mor_der_hun_ikke_tar_alle_ukene_fpff() { - //FAGSYSTEM-295613 + // FAGSYSTEM-295613 var fødselsdato = LocalDate.of(2023, 9, 28); - var grunnlag = grunnlagMedKontoer().behandling(farBehandling()) - .datoer(new Datoer.Builder().fødsel(fødselsdato)) - .søknad(new Søknad.Builder().oppgittPeriode(oppgittPeriode(FEDREKVOTE, fødselsdato.plusWeeks(10), fødselsdato.plusWeeks(15)))) - .annenPart(new AnnenPart.Builder().uttaksperiode( - AnnenpartUttakPeriode.Builder.uttak(fødselsdato.minusWeeks(5), fødselsdato.minusWeeks(4)).build()) - .uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(fødselsdato.minusWeeks(2), fødselsdato.minusDays(1)).build()) - .uttaksperiode(AnnenpartUttakPeriode.Builder.uttak(fødselsdato, fødselsdato.plusWeeks(10).minusDays(1)).build())) - .build(); + var grunnlag = + grunnlagMedKontoer() + .behandling(farBehandling()) + .datoer(new Datoer.Builder().fødsel(fødselsdato)) + .søknad( + new Søknad.Builder() + .oppgittPeriode( + oppgittPeriode( + FEDREKVOTE, + fødselsdato.plusWeeks(10), + fødselsdato.plusWeeks(15)))) + .annenPart( + new AnnenPart.Builder() + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato.minusWeeks(5), + fødselsdato.minusWeeks(4)) + .build()) + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato.minusWeeks(2), + fødselsdato.minusDays(1)) + .build()) + .uttaksperiode( + AnnenpartUttakPeriode.Builder.uttak( + fødselsdato, + fødselsdato + .plusWeeks(10) + .minusDays(1)) + .build())) + .build(); var msp = finnManglendeSøktePerioder(grunnlag); assertThat(msp).isEmpty(); @@ -456,26 +763,38 @@ void ikke_msp_for_for_ved_tidlig_oppstart_mor_der_hun_ikke_tar_alle_ukene_fpff() } private RettOgOmsorg.Builder aleneomsorg() { - return new RettOgOmsorg.Builder().farHarRett(true).morHarRett(false).aleneomsorg(true).samtykke(false); + return new RettOgOmsorg.Builder() + .farHarRett(true) + .morHarRett(false) + .aleneomsorg(true) + .samtykke(false); } private RegelGrunnlag.Builder grunnlagMedKontoer() { - var kontoer = new Kontoer.Builder().konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) - .konto(konto(MØDREKVOTE, 75)) - .konto(konto(FELLESPERIODE, 85)) - .konto(konto(FEDREKVOTE, 75)); + var kontoer = + new Kontoer.Builder() + .konto(konto(FORELDREPENGER_FØR_FØDSEL, 15)) + .konto(konto(MØDREKVOTE, 75)) + .konto(konto(FELLESPERIODE, 85)) + .konto(konto(FEDREKVOTE, 75)); return RegelGrunnlagTestBuilder.create() - .opptjening(new Opptjening.Builder().skjæringstidspunkt(LocalDate.MIN)) - .kontoer(kontoer) - .arbeid(new Arbeid.Builder().arbeidsforhold(new Arbeidsforhold(RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1))); + .opptjening(new Opptjening.Builder().skjæringstidspunkt(LocalDate.MIN)) + .kontoer(kontoer) + .arbeid( + new Arbeid.Builder() + .arbeidsforhold( + new Arbeidsforhold( + RegelGrunnlagTestBuilder.ARBEIDSFORHOLD_1))); } private Konto.Builder konto(Stønadskontotype stønadskontotype, int trekkdager) { return new Konto.Builder().type(stønadskontotype).trekkdager(trekkdager); } - private OppgittPeriode oppgittPeriode(Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { - return OppgittPeriode.forVanligPeriode(stønadskontotype, fom, tom, null, false, null, null, null, null); + private OppgittPeriode oppgittPeriode( + Stønadskontotype stønadskontotype, LocalDate fom, LocalDate tom) { + return OppgittPeriode.forVanligPeriode( + stønadskontotype, fom, tom, null, false, null, null, null, null); } private Behandling.Builder farBehandling() {