Skip to content

Commit

Permalink
Fjerner opprettelse av sykepenger basert på dagpenger og pleiepenger …
Browse files Browse the repository at this point in the history
…basert på dagpenger (#505)
  • Loading branch information
espenjv authored Jun 6, 2024
1 parent 6894c76 commit 8dbac6c
Show file tree
Hide file tree
Showing 10 changed files with 364 additions and 537 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ public enum Aktivitet {
PLEIEPENGER_MOTTAKER,
SVANGERSKAPSPENGER_MOTTAKER,
SYKEPENGER_MOTTAKER,
SYKEPENGER_AV_DAGPENGER_MOTTAKER,
PLEIEPENGER_AV_DAGPENGER_MOTTAKER,
VENTELØNN_VARTPENGER,
VIDERE_ETTERUTDANNING,
UTDANNINGSPERMISJON,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,6 @@ private AktivitetStatus mapAktivitetTilStatus(Aktivitet aktivitet) {
aktivitetStatus = AktivitetStatus.SN;
} else if (Aktivitet.DAGPENGEMOTTAKER.equals(aktivitet)) {
aktivitetStatus = AktivitetStatus.DP;
} else if (Aktivitet.SYKEPENGER_AV_DAGPENGER_MOTTAKER.equals(aktivitet)) {
aktivitetStatus = AktivitetStatus.SP_AV_DP;
} else if (Aktivitet.PLEIEPENGER_AV_DAGPENGER_MOTTAKER.equals(aktivitet)) {
aktivitetStatus = AktivitetStatus.PSB_AV_DP;
} else if (Aktivitet.AAP_MOTTAKER.equals(aktivitet)) {
aktivitetStatus = AktivitetStatus.AAP;
} else if (Aktivitet.MILITÆR_ELLER_SIVILTJENESTE.equals(aktivitet)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,22 +85,6 @@ void skal_lage_andel_for_flere_arbeidsforhold() {
assertThat(statusListe.get(0).getAktivitetStatus()).isEqualTo(AktivitetStatus.BA);
}

@Test
void skal_oversette_aktivitet_til_dagpenger() {
// Arrange
AktivitetStatusModell regelmodell = new AktivitetStatusModell();
regelmodell.setSkjæringstidspunktForBeregning(STP);
regelmodell.leggTilEllerOppdaterAktivPeriode(AktivPeriode.forAndre(Aktivitet.PLEIEPENGER_AV_DAGPENGER_MOTTAKER, Periode.of(STP.minusMonths(36), STP.plusMonths(12))));
regelmodell.leggTilEllerOppdaterAktivPeriode(AktivPeriode.forAndre(Aktivitet.SYKEPENGER_AV_DAGPENGER_MOTTAKER, Periode.of(STP.minusMonths(36), STP.plusMonths(12))));

// Act
List<BeregningsgrunnlagPrStatus> statusListe = kjørRegel(regelmodell);

// Assert
assertThat(statusListe).hasSize(1);
assertThat(statusListe.get(0).getAktivitetStatus()).isEqualTo(AktivitetStatus.DP);
}

private void verifiserArbeidsforhold(List<Arbeidsforhold> arbeidsforholdList, String arbeidsgiverIdent) {
var matchetAF = arbeidsforholdList.stream()
.filter(af -> af.getArbeidsgiverId() != null && af.getArbeidsgiverId().equals(arbeidsgiverIdent)).findFirst();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,9 @@ public class MapOpptjeningAktivitetFraRegelTilVL {
aktivitetMap.put(Aktivitet.OMSORGSPENGER, OpptjeningAktivitetType.OMSORGSPENGER);
aktivitetMap.put(Aktivitet.OPPLÆRINGSPENGER, OpptjeningAktivitetType.OPPLÆRINGSPENGER);
aktivitetMap.put(Aktivitet.PLEIEPENGER_MOTTAKER, OpptjeningAktivitetType.PLEIEPENGER);
aktivitetMap.put(Aktivitet.SVANGERSKAPSPENGER_MOTTAKER, OpptjeningAktivitetType.SVANGERSKAPSPENGER);
aktivitetMap.put(Aktivitet.SVANGERSKAPSPENGER_MOTTAKER, OpptjeningAktivitetType.SVANGERSKAPSPENGER);
aktivitetMap.put(Aktivitet.SYKEPENGER_MOTTAKER, OpptjeningAktivitetType.SYKEPENGER);
aktivitetMap.put(Aktivitet.SYKEPENGER_AV_DAGPENGER_MOTTAKER, OpptjeningAktivitetType.SYKEPENGER_AV_DAGPENGER);
aktivitetMap.put(Aktivitet.PLEIEPENGER_AV_DAGPENGER_MOTTAKER, OpptjeningAktivitetType.PLEIEPENGER_AV_DAGPENGER);
aktivitetMap.put(Aktivitet.VENTELØNN_VARTPENGER, OpptjeningAktivitetType.VENTELØNN_VARTPENGER);
aktivitetMap.put(Aktivitet.VENTELØNN_VARTPENGER, OpptjeningAktivitetType.VENTELØNN_VARTPENGER);
aktivitetMap.put(Aktivitet.VIDERE_ETTERUTDANNING, OpptjeningAktivitetType.VIDERE_ETTERUTDANNING);
}

Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ public class MapOpptjeningAktivitetTypeFraVLTilRegel {
map.put(OpptjeningAktivitetType.OMSORGSPENGER, Aktivitet.OMSORGSPENGER);
map.put(OpptjeningAktivitetType.OPPLÆRINGSPENGER, Aktivitet.OPPLÆRINGSPENGER);
map.put(OpptjeningAktivitetType.PLEIEPENGER, Aktivitet.PLEIEPENGER_MOTTAKER);
map.put(OpptjeningAktivitetType.SVANGERSKAPSPENGER, Aktivitet.SVANGERSKAPSPENGER_MOTTAKER);
map.put(OpptjeningAktivitetType.PLEIEPENGER_AV_DAGPENGER, Aktivitet.PLEIEPENGER_MOTTAKER);
map.put(OpptjeningAktivitetType.SVANGERSKAPSPENGER, Aktivitet.SVANGERSKAPSPENGER_MOTTAKER);
map.put(OpptjeningAktivitetType.SYKEPENGER, Aktivitet.SYKEPENGER_MOTTAKER);
map.put(OpptjeningAktivitetType.SYKEPENGER_AV_DAGPENGER, Aktivitet.SYKEPENGER_AV_DAGPENGER_MOTTAKER);
map.put(OpptjeningAktivitetType.PLEIEPENGER_AV_DAGPENGER, Aktivitet.PLEIEPENGER_AV_DAGPENGER_MOTTAKER);
map.put(OpptjeningAktivitetType.VENTELØNN_VARTPENGER, Aktivitet.VENTELØNN_VARTPENGER);
map.put(OpptjeningAktivitetType.SYKEPENGER_AV_DAGPENGER, Aktivitet.SYKEPENGER_MOTTAKER);
map.put(OpptjeningAktivitetType.VENTELØNN_VARTPENGER, Aktivitet.VENTELØNN_VARTPENGER);
map.put(OpptjeningAktivitetType.VIDERE_ETTERUTDANNING, Aktivitet.VIDERE_ETTERUTDANNING);

map.put(OpptjeningAktivitetType.UDEFINERT, Aktivitet.UDEFINERT);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ private FinnInntektForVisning() {
}
if (andel.getAktivitetStatus().erDagpenger()) {
YtelseFilterDto ytelseFilter = new YtelseFilterDto(inntektArbeidYtelseGrunnlag.getAktørYtelseFraRegister()).før(ref.getSkjæringstidspunktBeregning());
return FinnInntektFraYtelse.finnÅrbeløpForDagpenger(ref, andel, ytelseFilter, ref.getSkjæringstidspunktBeregning())
return FinnInntektFraYtelse.finnÅrbeløpForDagpenger(ref, andel, ytelseFilter)
.map(årsbeløp -> årsbeløp.divider(KonfigTjeneste.getMånederIÅr(), 10, RoundingMode.HALF_EVEN));
}
if (andel.getAktivitetStatus().equals(AktivitetStatus.ARBEIDSAVKLARINGSPENGER)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
package no.nav.folketrygdloven.kalkulator.guitjenester.fakta;

import static no.nav.folketrygdloven.kalkulator.felles.ytelseovergang.InfotrygdvedtakMedDagpengerTjeneste.finnDagsatsFraYtelsevedtak;
import static no.nav.folketrygdloven.kalkulator.felles.ytelseovergang.InfotrygdvedtakMedDagpengerTjeneste.harYtelsePåGrunnlagAvDagpenger;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import no.nav.folketrygdloven.kalkulator.KonfigurasjonVerdi;
import no.nav.folketrygdloven.kalkulator.felles.MeldekortUtils;
import no.nav.folketrygdloven.kalkulator.konfig.KonfigTjeneste;
import no.nav.folketrygdloven.kalkulator.modell.behandling.KoblingReferanse;
Expand All @@ -27,86 +22,73 @@

class FinnInntektFraYtelse {

private static final BigDecimal VIRKEDAGER_I_1_ÅR = KonfigTjeneste.getYtelsesdagerIÅr();

private FinnInntektFraYtelse() {
// Skjul konstruktør
}

static Optional<Beløp> finnÅrbeløpFraMeldekortForAndel(KoblingReferanse ref,
BeregningsgrunnlagPrStatusOgAndelDto andel,
YtelseFilterDto ytelseFilter) {
LocalDate skjæringstidspunkt = ref.getSkjæringstidspunktBeregning();
if (ytelseFilter.isEmpty()) {
return Optional.empty();
}

Optional<YtelseDto> nyesteVedtak = MeldekortUtils.sisteVedtakFørStpForType(ytelseFilter, skjæringstidspunkt, Set.of(mapTilYtelseType(andel.getAktivitetStatus())));
if (nyesteVedtak.isEmpty()) {
return Optional.empty();
}

Optional<YtelseAnvistDto> nyesteMeldekort = MeldekortUtils.sisteHeleMeldekortFørStp(ytelseFilter, nyesteVedtak.get(),
skjæringstidspunkt,
Set.of(mapTilYtelseType(andel.getAktivitetStatus()))
);

// Hvis søker kun har status DP / AAP tar ikke beregning hensyn til utbetalingsfaktor
int antallUnikeStatuserIPeriode = andel.getBeregningsgrunnlagPeriode().getBeregningsgrunnlagPrStatusOgAndelList().stream()
.map(BeregningsgrunnlagPrStatusOgAndelDto::getAktivitetStatus)
.collect(Collectors.toSet())
.size();

if (antallUnikeStatuserIPeriode > 1) {
return Optional.of(finnÅrsbeløpMedHensynTilUtbetalingsfaktor(nyesteVedtak.get(), nyesteMeldekort));
} else {
return Optional.of(finnÅrsbeløp(nyesteVedtak.get(), nyesteMeldekort));
}

}

static Optional<Beløp> finnÅrbeløpForDagpenger(KoblingReferanse ref, BeregningsgrunnlagPrStatusOgAndelDto andel,
YtelseFilterDto ytelseFilter,
LocalDate skjæringstidspunkt) {

Collection<YtelseDto> ytelser = ytelseFilter.getFiltrertYtelser();
Boolean harSPAvDP = harYtelsePåGrunnlagAvDagpenger(ytelser, skjæringstidspunkt, YtelseType.SYKEPENGER);
if (harSPAvDP && KonfigurasjonVerdi.instance().get("BEREGNE_DAGPENGER_FRA_SYKEPENGER", false)) {
return Optional.of(finnDagsatsFraYtelsevedtak(ytelser, skjæringstidspunkt, YtelseType.SYKEPENGER))
.map(b -> b.multipliser(VIRKEDAGER_I_1_ÅR));
}
Boolean harPSBAvDP = harYtelsePåGrunnlagAvDagpenger(ytelser, skjæringstidspunkt, YtelseType.PLEIEPENGER_SYKT_BARN);
if (harPSBAvDP && KonfigurasjonVerdi.instance().get("BEREGNE_DAGPENGER_FRA_PLEIEPENGER", false)) {
return Optional.of(finnDagsatsFraYtelsevedtak(ytelser, skjæringstidspunkt, YtelseType.PLEIEPENGER_SYKT_BARN))
.map(b -> b.multipliser(VIRKEDAGER_I_1_ÅR));
}
return finnÅrbeløpFraMeldekortForAndel(ref, andel, ytelseFilter);
}


private static YtelseType mapTilYtelseType(AktivitetStatus aktivitetStatus) {
if (AktivitetStatus.DAGPENGER.equals(aktivitetStatus)) {
return YtelseType.DAGPENGER;
}
if (AktivitetStatus.ARBEIDSAVKLARINGSPENGER.equals(aktivitetStatus)) {
return YtelseType.ARBEIDSAVKLARINGSPENGER;
}
return YtelseType.UDEFINERT;
}

private static Beløp finnÅrsbeløpMedHensynTilUtbetalingsfaktor(YtelseDto ytelse, Optional<YtelseAnvistDto> ytelseAnvist) {
var årsbeløpUtenHensynTilUtbetalingsfaktor = finnÅrsbeløp(ytelse, ytelseAnvist);
BigDecimal utbetalingsgrad = ytelseAnvist.flatMap(YtelseAnvistDto::getUtbetalingsgradProsent).map(Stillingsprosent::verdi)
.orElse(MeldekortUtils.MAX_UTBETALING_PROSENT_AAP_DAG);
BigDecimal utbetalingsFaktor = utbetalingsgrad.divide(MeldekortUtils.MAX_UTBETALING_PROSENT_AAP_DAG, 10, RoundingMode.HALF_UP);
return årsbeløpUtenHensynTilUtbetalingsfaktor.multipliser(utbetalingsFaktor);
}

private static Beløp finnÅrsbeløp(YtelseDto ytelse, Optional<YtelseAnvistDto> ytelseAnvist) {
var dagsats = ytelse.getVedtaksDagsats()
.orElse(ytelseAnvist.flatMap(YtelseAnvistDto::getDagsats).orElse(Beløp.ZERO));
return dagsats.multipliser(VIRKEDAGER_I_1_ÅR);
}
private static final BigDecimal VIRKEDAGER_I_1_ÅR = KonfigTjeneste.getYtelsesdagerIÅr();

private FinnInntektFraYtelse() {
// Skjul konstruktør
}

static Optional<Beløp> finnÅrbeløpFraMeldekortForAndel(KoblingReferanse ref,
BeregningsgrunnlagPrStatusOgAndelDto andel,
YtelseFilterDto ytelseFilter) {
LocalDate skjæringstidspunkt = ref.getSkjæringstidspunktBeregning();
if (ytelseFilter.isEmpty()) {
return Optional.empty();
}

Optional<YtelseDto> nyesteVedtak = MeldekortUtils.sisteVedtakFørStpForType(ytelseFilter, skjæringstidspunkt, Set.of(mapTilYtelseType(andel.getAktivitetStatus())));
if (nyesteVedtak.isEmpty()) {
return Optional.empty();
}

Optional<YtelseAnvistDto> nyesteMeldekort = MeldekortUtils.sisteHeleMeldekortFørStp(ytelseFilter, nyesteVedtak.get(),
skjæringstidspunkt,
Set.of(mapTilYtelseType(andel.getAktivitetStatus()))
);

// Hvis søker kun har status DP / AAP tar ikke beregning hensyn til utbetalingsfaktor
int antallUnikeStatuserIPeriode = andel.getBeregningsgrunnlagPeriode().getBeregningsgrunnlagPrStatusOgAndelList().stream()
.map(BeregningsgrunnlagPrStatusOgAndelDto::getAktivitetStatus)
.collect(Collectors.toSet())
.size();

if (antallUnikeStatuserIPeriode > 1) {
return Optional.of(finnÅrsbeløpMedHensynTilUtbetalingsfaktor(nyesteVedtak.get(), nyesteMeldekort));
} else {
return Optional.of(finnÅrsbeløp(nyesteVedtak.get(), nyesteMeldekort));
}

}

static Optional<Beløp> finnÅrbeløpForDagpenger(KoblingReferanse ref, BeregningsgrunnlagPrStatusOgAndelDto andel,
YtelseFilterDto ytelseFilter) {
return finnÅrbeløpFraMeldekortForAndel(ref, andel, ytelseFilter);
}


private static YtelseType mapTilYtelseType(AktivitetStatus aktivitetStatus) {
if (AktivitetStatus.DAGPENGER.equals(aktivitetStatus)) {
return YtelseType.DAGPENGER;
}
if (AktivitetStatus.ARBEIDSAVKLARINGSPENGER.equals(aktivitetStatus)) {
return YtelseType.ARBEIDSAVKLARINGSPENGER;
}
return YtelseType.UDEFINERT;
}

private static Beløp finnÅrsbeløpMedHensynTilUtbetalingsfaktor(YtelseDto ytelse, Optional<YtelseAnvistDto> ytelseAnvist) {
var årsbeløpUtenHensynTilUtbetalingsfaktor = finnÅrsbeløp(ytelse, ytelseAnvist);
BigDecimal utbetalingsgrad = ytelseAnvist.flatMap(YtelseAnvistDto::getUtbetalingsgradProsent).map(Stillingsprosent::verdi)
.orElse(MeldekortUtils.MAX_UTBETALING_PROSENT_AAP_DAG);
BigDecimal utbetalingsFaktor = utbetalingsgrad.divide(MeldekortUtils.MAX_UTBETALING_PROSENT_AAP_DAG, 10, RoundingMode.HALF_UP);
return årsbeløpUtenHensynTilUtbetalingsfaktor.multipliser(utbetalingsFaktor);
}

private static Beløp finnÅrsbeløp(YtelseDto ytelse, Optional<YtelseAnvistDto> ytelseAnvist) {
var dagsats = ytelse.getVedtaksDagsats()
.orElse(ytelseAnvist.flatMap(YtelseAnvistDto::getDagsats).orElse(Beløp.ZERO));
return dagsats.multipliser(VIRKEDAGER_I_1_ÅR);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,11 @@ public enum OpptjeningAktivitetType implements Kodeverdi, DatabaseKode, Kontrakt
ETTERLØNN_SLUTTPAKKE,
SVANGERSKAPSPENGER,
SYKEPENGER,
SYKEPENGER_AV_DAGPENGER,
PLEIEPENGER_AV_DAGPENGER,
SYKEPENGER_AV_DAGPENGER,
PLEIEPENGER_AV_DAGPENGER,
VENTELØNN_VARTPENGER,
VIDERE_ETTERUTDANNING,
UTENLANDSK_ARBEIDSFORHOLD,

UTDANNINGSPERMISJON,
UDEFINERT,
;
Expand Down

0 comments on commit 8dbac6c

Please sign in to comment.