From 7ec7f68a70f722ca64434b5970bee17e23fce07a Mon Sep 17 00:00:00 2001 From: Espen Velsvik Date: Mon, 17 Mar 2025 09:32:43 +0100 Subject: [PATCH 1/7] TSFF-1208: Nytt steg for kontroll av inntekt --- .../steg/beregnytelse/BeregnYtelseSteg.java | 2 +- .../steg/beregnytelse/LagTilkjentYtelse.java | 2 +- .../Avviksvurdering.java | 80 +++++++ ...trollresultatForIkkeGodkjentUttalelse.java | 46 ++++ .../KontrollResultat.java | 10 + .../KontrollerInntektSteg.java | 54 +++++ .../KontrollerInntektTjeneste.java | 39 ++++ .../beregnytelse/BeregnYtelseStegTest.java | 9 +- .../beregnytelse/LagTilkjentYtelseTest.java | 8 +- .../KontrollerInntektTjenesteTest.java | 210 ++++++++++++++++++ .../uttak/RapportertInntektMapperTest.java | 28 ++- .../behandlingskontroll/ProsessModell.java | 2 + .../sak/ytelse/RapportertInntektMapper.java | 195 ++++++++++++++-- .../ung/sak/ytelse/RapporterteInntekter.java | 24 +- .../BrukersUttalelseForRegisterinntekt.java | 8 + .../uttalelse/BrukersUttalelsePeriode.java | 10 + .../RegisterinntektUttalelseTjeneste.java | 10 + .../nav/ung/sak/ytelse/uttalelse/Status.java | 7 + .../ung/sak/ytelse/uttalelse/Uttalelse.java | 4 + domenetjenester/pom.xml | 1 + ...EndringRapportertInntektInnholdBygger.java | 4 +- ...evGenerererTjenesteEndringInntektTest.java | 3 +- .../behandling/BehandlingStegType.java | 3 +- 23 files changed, 707 insertions(+), 52 deletions(-) create mode 100644 behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/Avviksvurdering.java create mode 100644 behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/FinnKontrollresultatForIkkeGodkjentUttalelse.java create mode 100644 behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollResultat.java create mode 100644 behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektSteg.java create mode 100644 behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjeneste.java create mode 100644 behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java create mode 100644 domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/BrukersUttalelseForRegisterinntekt.java create mode 100644 domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/BrukersUttalelsePeriode.java create mode 100644 domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjeneste.java create mode 100644 domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/Status.java create mode 100644 domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/Uttalelse.java diff --git a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/BeregnYtelseSteg.java b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/BeregnYtelseSteg.java index 888d87babc..ee8ec238c0 100644 --- a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/BeregnYtelseSteg.java +++ b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/BeregnYtelseSteg.java @@ -66,7 +66,7 @@ public BeregnYtelseSteg(UngdomsytelseGrunnlagRepository ungdomsytelseGrunnlagRep if (ungdomsytelseGrunnlag.isEmpty()) { return BehandleStegResultat.utførtUtenAksjonspunkter(); } - final var rapportertInntektTidslinje = rapportertInntektMapper.map(kontekst.getBehandlingId()); + final var rapportertInntektTidslinje = rapportertInntektMapper.mapAlleGjeldendeRegisterOgBrukersInntekter(kontekst.getBehandlingId()); final var ytelseTidslinje = ytelseperiodeUtleder.utledYtelsestidslinje(kontekst.getBehandlingId()); // Validerer at periodene for rapporterte inntekter er konsistent med ytelsetidslinje diff --git a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/LagTilkjentYtelse.java b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/LagTilkjentYtelse.java index 2eef2069db..c03234f30b 100644 --- a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/LagTilkjentYtelse.java +++ b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/LagTilkjentYtelse.java @@ -19,7 +19,7 @@ public class LagTilkjentYtelse { static LocalDateTimeline lagTidslinje(LocalDateTimeline godkjentTidslinje, LocalDateTimeline totalsatsTidslinje, LocalDateTimeline rapportertInntektTidslinje) { return totalsatsTidslinje.combine(rapportertInntektTidslinje, (di, sats, rapportertInntekt) -> { // Dersom det ikke er rapportert inntekt settes denne til 0, ellers summeres alle inntektene - final var rapporertinntekt = rapportertInntekt == null ? BigDecimal.ZERO : rapportertInntekt.getValue().getRapporterteInntekter().stream().map(RapportertInntekt::beløp).reduce(BigDecimal.ZERO, BigDecimal::add); + final var rapporertinntekt = rapportertInntekt == null ? BigDecimal.ZERO : rapportertInntekt.getValue().getBrukerRapporterteInntekter().stream().map(RapportertInntekt::beløp).reduce(BigDecimal.ZERO, BigDecimal::add); // Mapper verdier til TilkjentYtelsePeriodeResultat final var periodeResultat = TikjentYtelseBeregner.beregn(di, sats.getValue(), rapporertinntekt); return new LocalDateSegment<>(di.getFomDato(), di.getTomDato(), periodeResultat); diff --git a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/Avviksvurdering.java b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/Avviksvurdering.java new file mode 100644 index 0000000000..2889222c5c --- /dev/null +++ b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/Avviksvurdering.java @@ -0,0 +1,80 @@ +package no.nav.ung.sak.domene.behandling.steg.registerinntektkontroll; + +import no.nav.fpsak.tidsserie.LocalDateSegment; +import no.nav.fpsak.tidsserie.LocalDateTimeline; +import no.nav.ung.kodeverk.behandling.BehandlingÅrsakType; +import no.nav.ung.sak.ytelse.RapportertInntekt; +import no.nav.ung.sak.ytelse.RapporterteInntekter; +import no.nav.ung.sak.ytelse.uttalelse.BrukersUttalelseForRegisterinntekt; + +import java.math.BigDecimal; +import java.util.Optional; +import java.util.Set; + +import static no.nav.ung.sak.domene.behandling.steg.registerinntektkontroll.FinnKontrollresultatForIkkeGodkjentUttalelse.harDiff; + +public class Avviksvurdering { + + public static final BigDecimal AKSEPTERT_DIFFERANSE = BigDecimal.valueOf(1000); + + + static Optional gjørAvviksvurderingMotRegisterinntekt(LocalDateTimeline gjeldendeRapporterteInntekter, LocalDateTimeline uttalelseTidslinje, LocalDateTimeline> tidslinjeRelevanteÅrsaker) { + final var inntektDiffKontrollResultat = finnKontrollresultatTidslinje(gjeldendeRapporterteInntekter, tidslinjeRelevanteÅrsaker); + + final var tidslinjeForOppgaveTilBruker = inntektDiffKontrollResultat.filterValue(it -> it.equals(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER)); + if (!tidslinjeForOppgaveTilBruker.isEmpty()) { + + // Må finne ut om vi skal sette ny frist + final var oppgaverTilBrukerTidslinje = finnNyOppgaveKontrollresultatTidslinje(gjeldendeRapporterteInntekter, uttalelseTidslinje, tidslinjeForOppgaveTilBruker); + + if (!oppgaverTilBrukerTidslinje.filterValue(it -> it.equals(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST)).isEmpty()) { + return Optional.of(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST); + } else { + return Optional.of(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER); + } + + } + + if (!inntektDiffKontrollResultat.filterValue(it -> it.equals(KontrollResultat.BRUK_INNTEKT_FRA_BRUKER)).isEmpty()) { + return Optional.of(KontrollResultat.BRUK_INNTEKT_FRA_BRUKER); + } + return Optional.empty(); + } + + private static LocalDateTimeline finnNyOppgaveKontrollresultatTidslinje(LocalDateTimeline gjeldendeRapporterteInntekter, LocalDateTimeline uttalelseTidslinje, LocalDateTimeline tidslinjeForOppgaveTilBruker) { + final var oppgaverTilBrukerTidslinje = gjeldendeRapporterteInntekter.mapValue(RapporterteInntekter::getRegisterRapporterteInntekter).intersection(tidslinjeForOppgaveTilBruker) + .combine(uttalelseTidslinje.mapValue(BrukersUttalelseForRegisterinntekt::registerInntekt), (di, register, uttalelse) -> { + if (uttalelse == null) { + return new LocalDateSegment<>(di, KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER); + } + if (!harDiff(uttalelse.getValue(), register.getValue())) { + return new LocalDateSegment<>(di, KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER); + } else { + return new LocalDateSegment<>(di, KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST); + } + }, LocalDateTimeline.JoinStyle.LEFT_JOIN); + return oppgaverTilBrukerTidslinje; + } + + private static LocalDateTimeline finnKontrollresultatTidslinje(LocalDateTimeline gjeldendeRapporterteInntekter, LocalDateTimeline> tidslinjeRelevanteÅrsaker) { + final var inntektDiffKontrollResultat = gjeldendeRapporterteInntekter.intersection(tidslinjeRelevanteÅrsaker) + .mapValue(it -> + { + final var register = it.getRegisterRapporterteInntekter().stream() + .map(RapportertInntekt::beløp).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + final var bruker = it.getBrukerRapporterteInntekter().stream() + .map(RapportertInntekt::beløp).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + final var differanse = register.subtract(bruker).abs(); + + if (differanse.compareTo(AKSEPTERT_DIFFERANSE) > 0) { + return KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER; + } else { + return KontrollResultat.BRUK_INNTEKT_FRA_BRUKER; + } + }); + return inntektDiffKontrollResultat; + } + + +} diff --git a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/FinnKontrollresultatForIkkeGodkjentUttalelse.java b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/FinnKontrollresultatForIkkeGodkjentUttalelse.java new file mode 100644 index 0000000000..fe51968454 --- /dev/null +++ b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/FinnKontrollresultatForIkkeGodkjentUttalelse.java @@ -0,0 +1,46 @@ +package no.nav.ung.sak.domene.behandling.steg.registerinntektkontroll; + +import no.nav.fpsak.tidsserie.LocalDateSegment; +import no.nav.fpsak.tidsserie.LocalDateTimeline; +import no.nav.ung.sak.ytelse.RapportertInntekt; +import no.nav.ung.sak.ytelse.RapporterteInntekter; +import no.nav.ung.sak.ytelse.uttalelse.BrukersUttalelseForRegisterinntekt; + +import java.math.BigDecimal; +import java.util.Set; + +public class FinnKontrollresultatForIkkeGodkjentUttalelse { + + static KontrollResultat finnKontrollresultatForIkkeGodkjentUttalelse(LocalDateTimeline gjeldendeRapporterteInntekter, LocalDateTimeline relevantIkkeGodkjentUttalelse) { + final var registerInntektTidslinje = gjeldendeRapporterteInntekter.mapValue(RapporterteInntekter::getRegisterRapporterteInntekter); + final var ikkeGodkjentUttalelseResultater = relevantIkkeGodkjentUttalelse.combine(registerInntektTidslinje, (di, uttalelse, register) -> { + if (!harDiff(uttalelse.getValue().registerInntekt(), register != null ? register.getValue() : Set.of())) { + return new LocalDateSegment<>(di, KontrollResultat.OPPRETT_AKSJONSPUNKT); + } else { + return new LocalDateSegment<>(di, KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST); + } + }, LocalDateTimeline.JoinStyle.LEFT_JOIN); + + if (!ikkeGodkjentUttalelseResultater.filterValue(it -> it == KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST).isEmpty()) { + return KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST; + } else if (!ikkeGodkjentUttalelseResultater.filterValue(it -> it == KontrollResultat.OPPRETT_AKSJONSPUNKT).isEmpty()) { + return KontrollResultat.OPPRETT_AKSJONSPUNKT; + } + + return KontrollResultat.OPPRETT_AKSJONSPUNKT; + } + + static boolean harDiff(Set registerInntekFraUttalelse, Set gjeldendeRegisterinntekt) { + final var totalInntektFraUttalelse = summerInntekter(registerInntekFraUttalelse); + final var totalGjeldendeRegisterInntekt = summerInntekter(gjeldendeRegisterinntekt); + return totalInntektFraUttalelse.compareTo(totalGjeldendeRegisterInntekt) != 0; + } + + private static BigDecimal summerInntekter(Set registerinntektFraUttalelse) { + return registerinntektFraUttalelse.stream() + .map(RapportertInntekt::beløp) + .reduce(BigDecimal::add) + .orElse(BigDecimal.ZERO); + } + +} diff --git a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollResultat.java b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollResultat.java new file mode 100644 index 0000000000..63aca49d91 --- /dev/null +++ b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollResultat.java @@ -0,0 +1,10 @@ +package no.nav.ung.sak.domene.behandling.steg.registerinntektkontroll; + +public enum KontrollResultat { + BRUK_INNTEKT_FRA_BRUKER, + OPPRETT_AKSJONSPUNKT, + OPPRETT_OPPGAVE_TIL_BRUKER, + OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST, + SETT_PÅ_VENT_TIL_RAPPORTERINGSFRIST + +} diff --git a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektSteg.java b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektSteg.java new file mode 100644 index 0000000000..ffde4b52f5 --- /dev/null +++ b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektSteg.java @@ -0,0 +1,54 @@ +package no.nav.ung.sak.domene.behandling.steg.registerinntektkontroll; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import no.nav.ung.sak.behandlingskontroll.*; +import no.nav.ung.sak.perioder.ProsessTriggerPeriodeUtleder; +import no.nav.ung.sak.ytelse.RapportertInntektMapper; +import no.nav.ung.sak.ytelse.uttalelse.RegisterinntektUttalelseTjeneste; + +import static no.nav.ung.kodeverk.behandling.BehandlingStegType.KONTROLLER_REGISTER_INNTEKT; +import static no.nav.ung.kodeverk.behandling.FagsakYtelseType.UNGDOMSYTELSE; + +@ApplicationScoped +@BehandlingStegRef(value = KONTROLLER_REGISTER_INNTEKT) +@BehandlingTypeRef +@FagsakYtelseTypeRef(UNGDOMSYTELSE) +public class KontrollerInntektSteg implements BehandlingSteg { + + private ProsessTriggerPeriodeUtleder prosessTriggerPeriodeUtleder; + private RapportertInntektMapper rapportertInntektMapper; + private KontrollerInntektTjeneste kontrollerInntektTjeneste; + private RegisterinntektUttalelseTjeneste registerinntektUttalelseTjeneste; + + + @Inject + public KontrollerInntektSteg(ProsessTriggerPeriodeUtleder prosessTriggerPeriodeUtleder, + RapportertInntektMapper rapportertInntektMapper, + KontrollerInntektTjeneste kontrollerInntektTjeneste, + RegisterinntektUttalelseTjeneste registerinntektUttalelseTjeneste) { + this.prosessTriggerPeriodeUtleder = prosessTriggerPeriodeUtleder; + this.rapportertInntektMapper = rapportertInntektMapper; + this.kontrollerInntektTjeneste = kontrollerInntektTjeneste; + this.registerinntektUttalelseTjeneste = registerinntektUttalelseTjeneste; + } + + public KontrollerInntektSteg() { + } + + @Override + public BehandleStegResultat utførSteg(BehandlingskontrollKontekst kontekst) { + + final var rapporterteInntekterTidslinje = rapportertInntektMapper.mapAlleGjeldendeRegisterOgBrukersInntekter(kontekst.getBehandlingId()); + final var prosessTriggerTidslinje = prosessTriggerPeriodeUtleder.utledTidslinje(kontekst.getBehandlingId()); + final var uttalelser = registerinntektUttalelseTjeneste.hentUttalelser(kontekst.getBehandlingId()); + final var registerinntekterForIkkeGodkjentUttalelse = rapportertInntektMapper.finnRegisterinntekterForUttalelse(kontekst.getBehandlingId(), uttalelser); + + + final var kontrollResultat = kontrollerInntektTjeneste.utførKontroll(prosessTriggerTidslinje, rapporterteInntekterTidslinje, registerinntekterForIkkeGodkjentUttalelse); + + return BehandleStegResultat.utførtUtenAksjonspunkter( + ); + } + +} diff --git a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjeneste.java b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjeneste.java new file mode 100644 index 0000000000..d6f817093f --- /dev/null +++ b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjeneste.java @@ -0,0 +1,39 @@ +package no.nav.ung.sak.domene.behandling.steg.registerinntektkontroll; + +import no.nav.fpsak.tidsserie.LocalDateTimeline; +import no.nav.ung.kodeverk.behandling.BehandlingÅrsakType; +import no.nav.ung.sak.ytelse.RapporterteInntekter; +import no.nav.ung.sak.ytelse.uttalelse.BrukersUttalelseForRegisterinntekt; +import no.nav.ung.sak.ytelse.uttalelse.Status; + +import java.util.Set; + +import static no.nav.ung.sak.domene.behandling.steg.registerinntektkontroll.FinnKontrollresultatForIkkeGodkjentUttalelse.finnKontrollresultatForIkkeGodkjentUttalelse; + +public class KontrollerInntektTjeneste { + + + + public KontrollResultat utførKontroll(LocalDateTimeline> prosessTriggerTidslinje, + LocalDateTimeline gjeldendeRapporterteInntekter, + LocalDateTimeline uttalelseTidslinje) { + + // Sjekker først om vi har relevante årsaker + final var tidslinjeRelevanteÅrsaker = prosessTriggerTidslinje.filterValue(it -> it.contains(BehandlingÅrsakType.RE_RAPPORTERING_INNTEKT) || it.contains(BehandlingÅrsakType.RE_KONTROLL_REGISTER_INNTEKT)); + final var harIkkePassertRapporteringsfrist = tidslinjeRelevanteÅrsaker.filterValue(it -> !it.contains(BehandlingÅrsakType.RE_KONTROLL_REGISTER_INNTEKT)); + // Dersom vi ikkje har passert rapporteringsfrist (ikkje har kontroll-årsak) så skal vi vente til rapporteringsfrist + if (!harIkkePassertRapporteringsfrist.isEmpty()) { + return KontrollResultat.SETT_PÅ_VENT_TIL_RAPPORTERINGSFRIST; + } + + final var relevantIkkeGodkjentUttalelse = uttalelseTidslinje.filterValue(it -> it.status().equals(Status.BEKREFTET) && !it.uttalelse().erEndringenGodkjent()).intersection(tidslinjeRelevanteÅrsaker); + if (!relevantIkkeGodkjentUttalelse.isEmpty()) { + return finnKontrollresultatForIkkeGodkjentUttalelse(gjeldendeRapporterteInntekter, relevantIkkeGodkjentUttalelse); + } + + final var opprettOppgaveTilBrukerMedNyFrist = Avviksvurdering.gjørAvviksvurderingMotRegisterinntekt(gjeldendeRapporterteInntekter, uttalelseTidslinje, tidslinjeRelevanteÅrsaker); + return opprettOppgaveTilBrukerMedNyFrist.orElse(KontrollResultat.BRUK_INNTEKT_FRA_BRUKER); + + } + +} diff --git a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/BeregnYtelseStegTest.java b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/BeregnYtelseStegTest.java index 1e68d77cea..f0c421a7ed 100644 --- a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/BeregnYtelseStegTest.java +++ b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/BeregnYtelseStegTest.java @@ -61,12 +61,13 @@ void setUp() { inntektArbeidYtelseTjeneste = new AbakusInMemoryInntektArbeidYtelseTjeneste(); ungdomsprogramPeriodeRepository = new UngdomsprogramPeriodeRepository(entityManager); behandlingRepository = new BehandlingRepository(entityManager); + final var ytelseperiodeUtleder = new YtelseperiodeUtleder( + new UngdomsprogramPeriodeTjeneste(ungdomsprogramPeriodeRepository), + behandlingRepository); beregnYtelseSteg = new BeregnYtelseSteg(ungdomsytelseGrunnlagRepository, tilkjentYtelseRepository, - new RapportertInntektMapper(inntektArbeidYtelseTjeneste), - new YtelseperiodeUtleder( - new UngdomsprogramPeriodeTjeneste(ungdomsprogramPeriodeRepository), - behandlingRepository)); + new RapportertInntektMapper(inntektArbeidYtelseTjeneste, ytelseperiodeUtleder), + ytelseperiodeUtleder); fagsakRepository = new FagsakRepository(entityManager); diff --git a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/LagTilkjentYtelseTest.java b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/LagTilkjentYtelseTest.java index da61bacab8..4b8caf8038 100644 --- a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/LagTilkjentYtelseTest.java +++ b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/beregnytelse/LagTilkjentYtelseTest.java @@ -37,7 +37,9 @@ void testLagTidslinjeMedTomGodkjentTidslinje() { LocalDateTimeline rapportertInntektTidslinje = new LocalDateTimeline<>(List.of( new LocalDateSegment<>(LocalDate.of(2023, 1, 15), LocalDate.of(2023, 2, 15), - new RapporterteInntekter(Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, BigDecimal.valueOf(50000))))) + new RapporterteInntekter( + Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, BigDecimal.valueOf(50000))), + Set.of())) )); // Call the method under test @@ -114,7 +116,9 @@ void testLagTidslinjeUtenRapportertInntekt() { final var rapportertInntekt = BigDecimal.valueOf(150); LocalDateTimeline rapportertInntektTidslinje = new LocalDateTimeline<>(List.of( - new LocalDateSegment<>(fom, tom, new RapporterteInntekter(Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, rapportertInntekt)))) + new LocalDateSegment<>(fom, tom, new RapporterteInntekter( + Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, rapportertInntekt)), + Set.of())) )); // Act diff --git a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java new file mode 100644 index 0000000000..1659c00fbb --- /dev/null +++ b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java @@ -0,0 +1,210 @@ +package no.nav.ung.sak.domene.behandling.steg.registerinntektkontroll; + +import no.nav.fpsak.tidsserie.LocalDateInterval; +import no.nav.fpsak.tidsserie.LocalDateSegment; +import no.nav.fpsak.tidsserie.LocalDateTimeline; +import no.nav.ung.kodeverk.behandling.BehandlingÅrsakType; +import no.nav.ung.sak.ytelse.InntektType; +import no.nav.ung.sak.ytelse.RapportertInntekt; +import no.nav.ung.sak.ytelse.RapporterteInntekter; +import no.nav.ung.sak.ytelse.uttalelse.BrukersUttalelseForRegisterinntekt; +import no.nav.ung.sak.ytelse.uttalelse.Status; +import no.nav.ung.sak.ytelse.uttalelse.Uttalelse; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +class KontrollerInntektTjenesteTest { + + private KontrollerInntektTjeneste tjeneste; + + @BeforeEach + void setUp() { + tjeneste = new KontrollerInntektTjeneste(); + } + + @Test + void utførKontroll() { + } + + @Test + void skal_sette_på_vent_til_rapporteringsfrist() { + // Arrange + final var fom = LocalDate.now().minusDays(10); + final var tom = LocalDate.now().plusDays(10); + LocalDateTimeline> prosessTriggerTidslinje = lagProsesstriggerTidslinjeForInntektRapportering(fom, tom); + final var gjeldendeRapporterteInntekter = lagRapportertInntektTidslinje(fom, tom); + LocalDateTimeline ikkeGodkjentUttalelseTidslinje = LocalDateTimeline.empty(); + + // Act + KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + + // Assert + assertEquals(KontrollResultat.SETT_PÅ_VENT_TIL_RAPPORTERINGSFRIST, resultat); + } + + @Test + void skal_opprette_aksjonspunkt_dersom_brukes_har_gitt_uttalelse_og_registerinntekt_er_lik() { + // Arrange + final var fom = LocalDate.now().minusDays(10); + final var tom = LocalDate.now().plusDays(10); + final var bruker = 10; + final var register = 10_000; + LocalDateTimeline> prosessTriggerTidslinje = lagProsesstriggerTidslinjeForInntektRapporteringOgKontroll(fom, tom); + final var gjeldendeRapporterteInntekter = lagRapportertInntektTidslinjeMedDiffMotRegister(fom, tom, register, bruker); + LocalDateTimeline ikkeGodkjentUttalelseTidslinje = new LocalDateTimeline<>(fom, tom, + new BrukersUttalelseForRegisterinntekt(Status.BEKREFTET, Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, BigDecimal.valueOf(register))), new Uttalelse(false))); + + // Act + KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + + // Assert + assertEquals(KontrollResultat.OPPRETT_AKSJONSPUNKT, resultat); + } + + @Test + void skal_sette_på_vent_på_nytt_dersom_bruker_har_gitt_uttalelse_og_registerinntekt_er_ulik() { + // Arrange + final var fom = LocalDate.now().minusDays(10); + final var tom = LocalDate.now().plusDays(10); + final var bruker = 10; + final var register = 10_000; + final var registerFraUttalelse = 9999; + LocalDateTimeline> prosessTriggerTidslinje = lagProsesstriggerTidslinjeForInntektRapporteringOgKontroll(fom, tom); + final var gjeldendeRapporterteInntekter = lagRapportertInntektTidslinjeMedDiffMotRegister(fom, tom, register, bruker); + LocalDateTimeline ikkeGodkjentUttalelseTidslinje = new LocalDateTimeline<>(fom, tom, + new BrukersUttalelseForRegisterinntekt(Status.BEKREFTET, Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, BigDecimal.valueOf(registerFraUttalelse))), new Uttalelse(false))); + + // Act + KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + + // Assert + assertEquals(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST, resultat); + } + + @Test + void skal_bruke_brukers_inntekt_dersom_diff_mellom_rapportert_inntekt_fra_register_og_bruker_er_mindre_enn_akseptert_grense() { + // Arrange + final var fom = LocalDate.now().minusDays(10); + final var tom = LocalDate.now().plusDays(10); + LocalDateTimeline> prosessTriggerTidslinje = lagProsesstriggerTidslinjeForKontroll(fom, tom); + final var gjeldendeRapporterteInntekter = lagRapportertInntektTidslinjeMedDiffMotRegister(fom, tom, 10_000, 10_001); + LocalDateTimeline ikkeGodkjentUttalelseTidslinje = LocalDateTimeline.empty(); + + // Act + KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + + // Assert + assertEquals(KontrollResultat.BRUK_INNTEKT_FRA_BRUKER, resultat); + } + + @Test + void skal_bruke_brukers_inntekt_dersom_ingen_rapportert_inntekt_fra_register_eller_bruker() { + // Arrange + final var fom = LocalDate.now().minusDays(10); + final var tom = LocalDate.now().plusDays(10); + LocalDateTimeline> prosessTriggerTidslinje = lagProsesstriggerTidslinjeForKontroll(fom, tom); + final var gjeldendeRapporterteInntekter = ingenRapporterteInntekter(fom, tom); + LocalDateTimeline ikkeGodkjentUttalelseTidslinje = LocalDateTimeline.empty(); + + // Act + KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + + // Assert + assertEquals(KontrollResultat.BRUK_INNTEKT_FRA_BRUKER, resultat); + } + + @Test + void skal_opprette_oppgave_dersom_diff_mellom_rapportert_inntekt_fra_register_og_bruker_er_større_enn_akseptert_grense() { + // Arrange + final var fom = LocalDate.now().minusDays(10); + final var tom = LocalDate.now().plusDays(10); + LocalDateTimeline> prosessTriggerTidslinje = lagProsesstriggerTidslinjeForKontroll(fom, tom); + final var gjeldendeRapporterteInntekter = lagRapportertInntektTidslinjeMedDiffMotRegister(fom, tom, 10_000, 11_001); + LocalDateTimeline ikkeGodkjentUttalelseTidslinje = LocalDateTimeline.empty(); + + // Act + KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + + // Assert + assertEquals(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER, resultat); + } + + + @Test + void skal_opprette_oppgave_med_ny_frist_dersom_diff_mellom_rapportert_inntekt_fra_register_og_bruker_er_større_enn_akseptert_grense_og_det_finnes_eksisterende_ikke_bekreftet_oppgave_med_ulik_registerinntekt() { + // Arrange + final var fom = LocalDate.now().minusDays(10); + final var tom = LocalDate.now().plusDays(10); + LocalDateTimeline> prosessTriggerTidslinje = lagProsesstriggerTidslinjeForKontroll(fom, tom); + final var gjeldendeRapporterteInntekter = lagRapportertInntektTidslinjeMedDiffMotRegister(fom, tom, 10_000, 11_001); + LocalDateTimeline uttalelseTidslinje = new LocalDateTimeline<>(fom, tom, + new BrukersUttalelseForRegisterinntekt(Status.VENTER, Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, BigDecimal.valueOf(10_002))), null)); + + // Act + KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, uttalelseTidslinje); + + // Assert + assertEquals(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST, resultat); + } + + + private static LocalDateTimeline> lagProsesstriggerTidslinjeForInntektRapportering(LocalDate fom, LocalDate tom) { + return new LocalDateTimeline<>( + new LocalDateInterval(fom, tom), + Set.of(BehandlingÅrsakType.RE_RAPPORTERING_INNTEKT) + ); + } + + private static LocalDateTimeline> lagProsesstriggerTidslinjeForInntektRapporteringOgKontroll(LocalDate fom, LocalDate tom) { + return new LocalDateTimeline<>( + new LocalDateInterval(fom, tom), + Set.of(BehandlingÅrsakType.RE_RAPPORTERING_INNTEKT, BehandlingÅrsakType.RE_KONTROLL_REGISTER_INNTEKT) + ); + } + + private static LocalDateTimeline> lagProsesstriggerTidslinjeForKontroll(LocalDate fom, LocalDate tom) { + return new LocalDateTimeline<>( + new LocalDateInterval(fom, tom), + Set.of(BehandlingÅrsakType.RE_KONTROLL_REGISTER_INNTEKT) + ); + } + + private static LocalDateTimeline lagRapportertInntektTidslinje(LocalDate fom, LocalDate tom) { + LocalDateTimeline gjeldendeRapporterteInntekter = new LocalDateTimeline<>( + List.of( + new LocalDateSegment<>(fom, tom, new RapporterteInntekter(Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, BigDecimal.TEN)), Set.of())) + ) + ); + return gjeldendeRapporterteInntekter; + } + + private static LocalDateTimeline lagRapportertInntektTidslinjeMedDiffMotRegister(LocalDate fom, LocalDate tom, int register, int bruker) { + LocalDateTimeline gjeldendeRapporterteInntekter = new LocalDateTimeline<>( + List.of( + new LocalDateSegment<>(fom, tom, new RapporterteInntekter(Set.of( + new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, BigDecimal.valueOf(bruker))), Set.of( + new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, BigDecimal.valueOf(register)) + ))) + ) + ); + return gjeldendeRapporterteInntekter; + } + + private static LocalDateTimeline ingenRapporterteInntekter(LocalDate fom, LocalDate tom) { + LocalDateTimeline gjeldendeRapporterteInntekter = new LocalDateTimeline<>( + List.of( + new LocalDateSegment<>(fom, tom, new RapporterteInntekter(Set.of(), Set.of())) + ) + ); + return gjeldendeRapporterteInntekter; + } + + +} diff --git a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/uttak/RapportertInntektMapperTest.java b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/uttak/RapportertInntektMapperTest.java index 9b63b531d8..3da3dfc229 100644 --- a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/uttak/RapportertInntektMapperTest.java +++ b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/uttak/RapportertInntektMapperTest.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Set; +import no.nav.ung.sak.ytelseperioder.YtelseperiodeUtleder; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -31,11 +32,12 @@ class RapportertInntektMapperTest { private InntektArbeidYtelseTjeneste inntektArbeidYtelseTjeneste = mock(InntektArbeidYtelseTjeneste.class); + private YtelseperiodeUtleder ytelseperiodeUtleder = mock(YtelseperiodeUtleder.class); private RapportertInntektMapper rapportertInntektMapper; @BeforeEach void setUp() { - rapportertInntektMapper = new RapportertInntektMapper(inntektArbeidYtelseTjeneste); + rapportertInntektMapper = new RapportertInntektMapper(inntektArbeidYtelseTjeneste, ytelseperiodeUtleder); } @Test @@ -47,11 +49,12 @@ void skal_mappe_en_mottatt_inntekt() { mockIAY(List.of(oppgittOpptjening)); // Act - final var tidslinje = rapportertInntektMapper.map(1L); + final var tidslinje = rapportertInntektMapper.mapAlleGjeldendeRegisterOgBrukersInntekter(1L); // Assert final var forventet = new LocalDateTimeline<>(periode.getFomDato(), periode.getTomDato(), - new RapporterteInntekter(Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, inntekt)))); + new RapporterteInntekter(Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, inntekt)), + Set.of())); assertThat(tidslinje).isEqualTo(forventet); } @@ -66,14 +69,14 @@ void skal_mappe_en_mottatt_inntekt() { mockIAY(List.of(oppgittOpptjening)); // Act - final var tidslinje = rapportertInntektMapper.map(1L); + final var tidslinje = rapportertInntektMapper.mapAlleGjeldendeRegisterOgBrukersInntekter(1L); // Assert final var forventet = new LocalDateTimeline<>(periode.getFomDato(), periode.getTomDato(), new RapporterteInntekter(Set.of( new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, arbeidsinntekt), new RapportertInntekt(InntektType.SELVSTENDIG_NÆRINGSDRIVENDE, næringsinntekt) - ))); + ), Set.of())); assertThat(tidslinje).isEqualTo(forventet); } @@ -95,13 +98,17 @@ void skal_mappe_to_mottatte_inntekter_for_forskjellige_perioder() { mockIAY(List.of(oppgittOpptjening, oppgittOpptjening2)); // Act - final var tidslinje = rapportertInntektMapper.map(1L); + final var tidslinje = rapportertInntektMapper.mapAlleGjeldendeRegisterOgBrukersInntekter(1L); // Assert final var forventet = new LocalDateTimeline<>( List.of( - new LocalDateSegment<>(periode.getFomDato(), periode.getTomDato(), new RapporterteInntekter(Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, inntekt)))), - new LocalDateSegment<>(periode2.getFomDato(), periode2.getTomDato(), new RapporterteInntekter(Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, inntekt2)))) + new LocalDateSegment<>(periode.getFomDato(), periode.getTomDato(), new RapporterteInntekter( + Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, inntekt)), + Set.of())), + new LocalDateSegment<>(periode2.getFomDato(), periode2.getTomDato(), new RapporterteInntekter( + Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, inntekt2)), + Set.of())) )); assertThat(tidslinje).isEqualTo(forventet); } @@ -123,12 +130,13 @@ void skal_mappe_to_mottatte_inntekter_for_samme_perioder() { mockIAY(List.of(oppgittOpptjening, oppgittOpptjening2)); // Act - final var tidslinje = rapportertInntektMapper.map(1L); + final var tidslinje = rapportertInntektMapper.mapAlleGjeldendeRegisterOgBrukersInntekter(1L); // Assert final var forventet = new LocalDateTimeline<>(periode.getFomDato(), periode.getTomDato(), new RapporterteInntekter( - Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, inntekt2)))); + Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, inntekt2)), + Set.of())); assertThat(tidslinje).isEqualTo(forventet); } diff --git a/domenetjenester/behandlingskontroll/src/main/java/no/nav/ung/sak/behandlingskontroll/ProsessModell.java b/domenetjenester/behandlingskontroll/src/main/java/no/nav/ung/sak/behandlingskontroll/ProsessModell.java index 196d85804b..39145397dd 100644 --- a/domenetjenester/behandlingskontroll/src/main/java/no/nav/ung/sak/behandlingskontroll/ProsessModell.java +++ b/domenetjenester/behandlingskontroll/src/main/java/no/nav/ung/sak/behandlingskontroll/ProsessModell.java @@ -28,6 +28,7 @@ public class ProsessModell { .medSteg(BehandlingStegType.FORESLÅ_BEHANDLINGSRESULTAT) .medSteg(BehandlingStegType.UNGDOMSYTELSE_BEREGNING, StartpunktType.BEREGNING) .medSteg(BehandlingStegType.VURDER_UTTAK) + .medSteg(BehandlingStegType.KONTROLLER_REGISTER_INNTEKT) .medSteg(BehandlingStegType.BEREGN_YTELSE) .medSteg(BehandlingStegType.SIMULER_OPPDRAG) .medSteg(BehandlingStegType.FORESLÅ_VEDTAK) @@ -53,6 +54,7 @@ public BehandlingModell revurdering() { .medSteg(BehandlingStegType.FORESLÅ_BEHANDLINGSRESULTAT) .medSteg(BehandlingStegType.UNGDOMSYTELSE_BEREGNING, StartpunktType.BEREGNING) .medSteg(BehandlingStegType.VURDER_UTTAK) + .medSteg(BehandlingStegType.KONTROLLER_REGISTER_INNTEKT) .medSteg(BehandlingStegType.BEREGN_YTELSE) .medSteg(BehandlingStegType.SIMULER_OPPDRAG) .medSteg(BehandlingStegType.FORESLÅ_VEDTAK) diff --git a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapportertInntektMapper.java b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapportertInntektMapper.java index 3403a622ce..cf5e2dc426 100644 --- a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapportertInntektMapper.java +++ b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapportertInntektMapper.java @@ -1,22 +1,31 @@ package no.nav.ung.sak.ytelse; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Set; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import jakarta.enterprise.context.Dependent; import jakarta.inject.Inject; +import no.nav.fpsak.tidsserie.LocalDateInterval; import no.nav.fpsak.tidsserie.LocalDateSegment; import no.nav.fpsak.tidsserie.LocalDateTimeline; import no.nav.fpsak.tidsserie.StandardCombinators; +import no.nav.ung.kodeverk.arbeidsforhold.InntektspostType; import no.nav.ung.sak.domene.arbeidsforhold.InntektArbeidYtelseTjeneste; import no.nav.ung.sak.domene.iay.modell.InntektArbeidYtelseGrunnlag; +import no.nav.ung.sak.domene.iay.modell.Inntektspost; +import no.nav.ung.sak.domene.iay.modell.OppgittArbeidsforhold; import no.nav.ung.sak.domene.iay.modell.OppgittOpptjening; +import no.nav.ung.sak.domene.typer.tid.DatoIntervallEntitet; +import no.nav.ung.sak.domene.typer.tid.Virkedager; +import no.nav.ung.sak.ytelse.uttalelse.BrukersUttalelseForRegisterinntekt; +import no.nav.ung.sak.ytelse.uttalelse.BrukersUttalelsePeriode; +import no.nav.ung.sak.ytelse.uttalelse.Status; +import no.nav.ung.sak.ytelseperioder.YtelseperiodeUtleder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; @Dependent public class RapportertInntektMapper { @@ -24,47 +33,191 @@ public class RapportertInntektMapper { private static final Logger LOGGER = LoggerFactory.getLogger(RapportertInntektMapper.class); private final InntektArbeidYtelseTjeneste inntektArbeidYtelseTjeneste; + private final YtelseperiodeUtleder ytelseperiodeUtleder; @Inject - public RapportertInntektMapper(InntektArbeidYtelseTjeneste inntektArbeidYtelseTjeneste) { + public RapportertInntektMapper(InntektArbeidYtelseTjeneste inntektArbeidYtelseTjeneste, YtelseperiodeUtleder ytelseperiodeUtleder) { this.inntektArbeidYtelseTjeneste = inntektArbeidYtelseTjeneste; + this.ytelseperiodeUtleder = ytelseperiodeUtleder; } - public LocalDateTimeline map(Long behandlingId) { + public LocalDateTimeline mapAlleGjeldendeRegisterOgBrukersInntekter(Long behandlingId) { // Henter iay-grunnlag (kall til abakus) final var iayGrunnlag = inntektArbeidYtelseTjeneste.hentGrunnlag(behandlingId); + final var ytelseTidslinje = ytelseperiodeUtleder.utledYtelsestidslinje(behandlingId); + + + final var brukersRapporterteInntekter = finnBrukersRapporterteInntekter(iayGrunnlag, ytelseTidslinje); + validerBrukersRapporterteInntekterTidslinje(brukersRapporterteInntekter, ytelseTidslinje); + + final var grupperteInntekter = grupperInntekter(iayGrunnlag); + + final var registerTidslinje = finnRegisterInntektTidslinje(ytelseTidslinje, grupperteInntekter); + return kombinerTidslinjer(brukersRapporterteInntekter, registerTidslinje); + + } + + public LocalDateTimeline finnRegisterinntekterForUttalelse(Long behandlingId, + List brukersUttalelsePerioder) { + final var relevanteUttalelser = brukersUttalelsePerioder.stream() + .filter(it -> Set.of(Status.BEKREFTET, Status.VENTER).contains(it.status())).toList(); + final var unikeGrunnlagsIder = relevanteUttalelser + .stream() + .map(no.nav.ung.sak.ytelse.uttalelse.BrukersUttalelsePeriode::iayGrunnlagUUID) + .collect(Collectors.toSet()); + + final var grunnlagPrUUID = unikeGrunnlagsIder.stream().collect(Collectors.toMap(it -> it, it -> inntektArbeidYtelseTjeneste.hentGrunnlagForGrunnlagId(behandlingId, it))); + + return relevanteUttalelser.stream() + .map(it -> finnRegisterinntekterVurdertIUttalelse(it, grunnlagPrUUID)) + .reduce(LocalDateTimeline::crossJoin) + .orElse(LocalDateTimeline.empty()); + + } + + private Map> grupperInntekter(InntektArbeidYtelseGrunnlag iayGrunnlag) { + return iayGrunnlag.getRegisterVersjon().stream().flatMap(it -> it.getAktørInntekt().stream()) + .flatMap(it -> it.getInntekt().stream()) + .flatMap(it -> it.getAlleInntektsposter().stream()) + .collect(Collectors.groupingBy(this::mapTilInntektType)); + } + + private LocalDateTimeline finnRegisterinntekterVurdertIUttalelse(BrukersUttalelsePeriode it, Map grunnlagPrUUID) { + final var iayGrunnlag = grunnlagPrUUID.get(it.iayGrunnlagUUID()); + final var grupperteInntekter = grupperInntekter(iayGrunnlag); + final var registerTidslinje = finnRegisterinntektForPeriode(grupperteInntekter, it.periode().toLocalDateInterval()); + return registerTidslinje.mapValue(registerinntekter -> new BrukersUttalelseForRegisterinntekt(it.status(), registerinntekter, it.uttalelse())); + } + + private static LocalDateTimeline> finnRegisterInntektTidslinje(LocalDateTimeline ytelseTidslinje, Map> grupperteInntekter) { + final var registerTidslinje = new LocalDateTimeline>(Set.of()); + + for (var intervall : ytelseTidslinje.getLocalDateIntervals()) { + + final var tidslinjeForPeriode = finnRegisterinntektForPeriode(grupperteInntekter, intervall); + registerTidslinje.crossJoin(tidslinjeForPeriode); + + } + return registerTidslinje; + } + + private static LocalDateTimeline> finnRegisterinntektForPeriode(Map> grupperteInntekter, LocalDateInterval intervall) { + final var inntekterForPeriode = getInntekterForPeriode(); + + final var overlappendeArbeidsinntekter = finnOverlappendeInntekterForType(intervall, grupperteInntekter, InntektType.ARBEIDSTAKER_ELLER_FRILANSER); + + overlappendeArbeidsinntekter + .stream() + .map(it -> finnBeløpInnenforPeriode(intervall, it)) + .reduce(BigDecimal::add) + .map(it -> new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, it)) + .ifPresent(inntekterForPeriode::add); + + final var overlappendeYtelse = finnOverlappendeInntekterForType(intervall, grupperteInntekter, InntektType.YTELSE); + overlappendeYtelse + .stream() + .map(it -> finnBeløpInnenforPeriode(intervall, it)) + .reduce(BigDecimal::add) + .map(it -> new RapportertInntekt(InntektType.YTELSE, it)) + .ifPresent(inntekterForPeriode::add); + + + final var tidslinjeForPeriode = new LocalDateTimeline>(intervall, inntekterForPeriode); + return tidslinjeForPeriode; + } + + private static HashSet getInntekterForPeriode() { + return new HashSet(); + } + + private static void validerBrukersRapporterteInntekterTidslinje(LocalDateTimeline> brukersRapporterteInntekter, LocalDateTimeline ytelseTidslinje) { + final var perioderUtenforYtelsesperioder = brukersRapporterteInntekter.getLocalDateIntervals().stream() + .filter(it -> ytelseTidslinje.getLocalDateIntervals().stream().noneMatch(it::equals)) + .toList(); + + if (!perioderUtenforYtelsesperioder.isEmpty()) { + throw new IllegalStateException("Fant rapporterte inntekter for perioder utenfor ytelsesperioder: " + perioderUtenforYtelsesperioder); + + } + } + + private static LocalDateTimeline kombinerTidslinjer(LocalDateTimeline> brukersRapporterteInntekter, LocalDateTimeline> registerTidslinje) { + return brukersRapporterteInntekter.crossJoin(registerTidslinje, (di, bruker, register) -> { + final var rapporterteInntekter = new RapporterteInntekter(bruker.getValue(), register.getValue()); + return new LocalDateSegment<>(di, rapporterteInntekter); + }); + } + + private static BigDecimal finnBeløpInnenforPeriode(LocalDateInterval intervall, Inntektspost it) { + final var inntektsperiode = it.getPeriode(); + final var overlapp = new LocalDateTimeline<>(intervall, true).intersection(new LocalDateInterval(inntektsperiode.getFomDato(), inntektsperiode.getTomDato())); + final var overlappPeriode = overlapp.getLocalDateIntervals().getFirst(); + + final var antallVirkedager = inntektsperiode.antallArbeidsdager(); + final var overlappAntallVirkedager = Virkedager.beregnAntallVirkedager(overlappPeriode.getFomDato(), overlappPeriode.getTomDato()); + + return it.getBeløp().getVerdi().multiply(BigDecimal.valueOf(overlappAntallVirkedager).divide(BigDecimal.valueOf(antallVirkedager), 10, RoundingMode.HALF_UP)); + } + + private static List finnOverlappendeInntekterForType(LocalDateInterval intervall, Map> grupperteInntekter, InntektType inntektType) { + return grupperteInntekter.get(inntektType) + .stream().filter(it -> intervall.overlaps(new LocalDateInterval(it.getPeriode().getFomDato(), it.getPeriode().getTomDato()))) + .toList(); + } + + private static boolean overlapperDelvis(LocalDateInterval intervall, DatoIntervallEntitet inntektsperiode) { + return inntektsperiode.getFomDato().isBefore(intervall.getFomDato()) && inntektsperiode.getTomDato().isAfter(intervall.getFomDato()); + } + + private InntektType mapTilInntektType(Inntektspost it) { + if (it.getInntektspostType().equals(InntektspostType.LØNN)) { + return InntektType.ARBEIDSTAKER_ELLER_FRILANSER; + } else if (it.getInntektspostType().equals(InntektspostType.YTELSE)) { + return InntektType.YTELSE; + } + throw new IllegalArgumentException("Kunne ikke håndtere inntektsposttype: " + it.getInntektspostType()); + } + + private LocalDateTimeline> finnBrukersRapporterteInntekter(InntektArbeidYtelseGrunnlag iayGrunnlag, LocalDateTimeline ytelseTidslinje) { // Finner rapporterte inntekter pr journalpost sortert på mottattdato med siste mottatt journalpost først - final var sorterteInntekttidslinjerPåMottattdato = finnSorterteInntektstidslinjer(iayGrunnlag); + final var sorterteInntekttidslinjerPåMottattdato = finnSorterteInntektstidslinjer(iayGrunnlag, ytelseTidslinje); - var resultatTidslinje = new LocalDateTimeline(List.of()); + var brukersRapporterteInntekter = new LocalDateTimeline>(List.of()); for (InntektForMottattidspunkt journalpostMedInntekttidslinje : sorterteInntekttidslinjerPåMottattdato) { // Dersom vi ikke allerede har lagt til en rapportert inntekt for perioden legger vi den til i resultattidslinjen - if (!resultatTidslinje.intersects(journalpostMedInntekttidslinje.tidslinje())) { + if (!brukersRapporterteInntekter.intersects(journalpostMedInntekttidslinje.tidslinje())) { // Trenger ikkje å håndtere overlapp sidan vi aldri går inn her med overlapp - resultatTidslinje = resultatTidslinje.crossJoin(journalpostMedInntekttidslinje.tidslinje()); + brukersRapporterteInntekter = brukersRapporterteInntekter.crossJoin(journalpostMedInntekttidslinje.tidslinje()); LOGGER.info("Fant rapportert inntekt for periode: " + journalpostMedInntekttidslinje); } else { LOGGER.info("Fant inntekt som ble forkastet pga overlapp med senere rapportert inntekt for samme periode: " + journalpostMedInntekttidslinje); } } - - return resultatTidslinje; + return brukersRapporterteInntekter; } - private List finnSorterteInntektstidslinjer(InntektArbeidYtelseGrunnlag iayGrunnlag) { + private List finnSorterteInntektstidslinjer(InntektArbeidYtelseGrunnlag iayGrunnlag, LocalDateTimeline ytelseTidslinje) { return iayGrunnlag.getOppgittOpptjeningAggregat() .stream() - .flatMap(o -> o.getOppgitteOpptjeninger().stream().map(RapportertInntektMapper::finnInntekterPrMottattidspunkt)) + .flatMap(o -> o.getOppgitteOpptjeninger().stream()) + .filter(o -> erRapportertForGyldigPeriode(o, ytelseTidslinje)) + .map(RapportertInntektMapper::finnInntekterPrMottattidspunkt) .sorted(Comparator.reverseOrder()) .toList(); } + private boolean erRapportertForGyldigPeriode(OppgittOpptjening o, LocalDateTimeline ytelseTidslinje) { + return o.getOppgittArbeidsforhold().stream().map(OppgittArbeidsforhold::getPeriode) + .map(DatoIntervallEntitet::toLocalDateInterval) + .allMatch(p -> ytelseTidslinje.getLocalDateIntervals().stream().anyMatch(p::equals)); + } + private static InntektForMottattidspunkt finnInntekterPrMottattidspunkt(OppgittOpptjening o) { final var res = new ArrayList>>(); res.addAll(finnArbeidOgFrilansSegmenter(o)); res.addAll(finnNæringssegmenter(o)); - return new InntektForMottattidspunkt(o.getInnsendingstidspunkt(), new LocalDateTimeline<>(res, StandardCombinators::union).mapValue(RapporterteInntekter::new)); + return new InntektForMottattidspunkt(o.getInnsendingstidspunkt(), new LocalDateTimeline<>(res, StandardCombinators::union)); } private static List>> finnNæringssegmenter(OppgittOpptjening o) { @@ -88,7 +241,7 @@ private static List>> finnArbeidOgFrilan } private record InntektForMottattidspunkt(LocalDateTime mottattTidspunkt, - LocalDateTimeline tidslinje + LocalDateTimeline> tidslinje ) implements Comparable { @Override diff --git a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapporterteInntekter.java b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapporterteInntekter.java index 2c9df5d4bc..adaf77faca 100644 --- a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapporterteInntekter.java +++ b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapporterteInntekter.java @@ -5,33 +5,39 @@ public class RapporterteInntekter { - private Set rapporterteInntekter; + private Set brukerRapporterteInntekter; + private Set registerRapporterteInntekter; - public RapporterteInntekter(Set rapporterteInntekter) { - this.rapporterteInntekter = rapporterteInntekter; + public RapporterteInntekter(Set brukerRapporterteInntekter, Set registerRapporterteInntekter) { + this.brukerRapporterteInntekter = brukerRapporterteInntekter; + this.registerRapporterteInntekter = registerRapporterteInntekter; } - public Set getRapporterteInntekter() { - return rapporterteInntekter; + public Set getBrukerRapporterteInntekter() { + return brukerRapporterteInntekter; + } + + public Set getRegisterRapporterteInntekter() { + return registerRapporterteInntekter; } @Override public boolean equals(Object o) { if (!(o instanceof RapporterteInntekter that)) return false; - return Objects.equals(rapporterteInntekter, that.rapporterteInntekter); + return Objects.equals(brukerRapporterteInntekter, that.brukerRapporterteInntekter) && Objects.equals(registerRapporterteInntekter, that.registerRapporterteInntekter); } @Override public int hashCode() { - return Objects.hashCode(rapporterteInntekter); + return Objects.hash(brukerRapporterteInntekter, registerRapporterteInntekter); } @Override public String toString() { return "RapporterteInntekter{" + - "rapporterteInntekter=" + rapporterteInntekter + + "brukerRapporterteInntekter=" + brukerRapporterteInntekter + + ", registerRapporterteInntekter=" + registerRapporterteInntekter + '}'; } - } diff --git a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/BrukersUttalelseForRegisterinntekt.java b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/BrukersUttalelseForRegisterinntekt.java new file mode 100644 index 0000000000..6a8da6956c --- /dev/null +++ b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/BrukersUttalelseForRegisterinntekt.java @@ -0,0 +1,8 @@ +package no.nav.ung.sak.ytelse.uttalelse; + +import no.nav.ung.sak.ytelse.RapportertInntekt; + +import java.util.Set; + +public record BrukersUttalelseForRegisterinntekt(Status status, Set registerInntekt, Uttalelse uttalelse) { +} diff --git a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/BrukersUttalelsePeriode.java b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/BrukersUttalelsePeriode.java new file mode 100644 index 0000000000..e3b0afa2f2 --- /dev/null +++ b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/BrukersUttalelsePeriode.java @@ -0,0 +1,10 @@ +package no.nav.ung.sak.ytelse.uttalelse; + + +import no.nav.ung.sak.domene.typer.tid.DatoIntervallEntitet; + +import java.util.UUID; + +public record BrukersUttalelsePeriode(DatoIntervallEntitet periode, Status status, Uttalelse uttalelse, UUID iayGrunnlagUUID) { + +} diff --git a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjeneste.java b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjeneste.java new file mode 100644 index 0000000000..bb38067432 --- /dev/null +++ b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjeneste.java @@ -0,0 +1,10 @@ +package no.nav.ung.sak.ytelse.uttalelse; + +import java.util.List; + +public interface RegisterinntektUttalelseTjeneste { + + + List hentUttalelser(Long behandlingId); + +} diff --git a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/Status.java b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/Status.java new file mode 100644 index 0000000000..4dc1402167 --- /dev/null +++ b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/Status.java @@ -0,0 +1,7 @@ +package no.nav.ung.sak.ytelse.uttalelse; + +public enum Status { + VENTER, + BEKREFTET, + UTLØPT +} diff --git a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/Uttalelse.java b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/Uttalelse.java new file mode 100644 index 0000000000..10b186847c --- /dev/null +++ b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/Uttalelse.java @@ -0,0 +1,4 @@ +package no.nav.ung.sak.ytelse.uttalelse; + +public record Uttalelse(boolean erEndringenGodkjent) { +} diff --git a/domenetjenester/pom.xml b/domenetjenester/pom.xml index 62ca49f708..3c2f73f255 100644 --- a/domenetjenester/pom.xml +++ b/domenetjenester/pom.xml @@ -36,6 +36,7 @@ bom grunnbelop behandlingskontroll + uttalelse diff --git a/formidling/src/main/java/no/nav/ung/sak/formidling/innhold/EndringRapportertInntektInnholdBygger.java b/formidling/src/main/java/no/nav/ung/sak/formidling/innhold/EndringRapportertInntektInnholdBygger.java index 28d4f0f741..db65563c4e 100644 --- a/formidling/src/main/java/no/nav/ung/sak/formidling/innhold/EndringRapportertInntektInnholdBygger.java +++ b/formidling/src/main/java/no/nav/ung/sak/formidling/innhold/EndringRapportertInntektInnholdBygger.java @@ -55,7 +55,7 @@ public TemplateInnholdResultat bygg(Behandling behandling, LocalDateTimeline mapTilTemplateDto( Objects.requireNonNull(rhs, "Mangler sats og rapportert inntekt for periode %s for tilkjent ytelse %s" .formatted(p.toString(), ty.toString())); - var rapportertInntektSum = rhs.getValue().getRapporterteInntekter().stream() + var rapportertInntektSum = rhs.getValue().getBrukerRapporterteInntekter().stream() .map(RapportertInntekt::beløp).reduce(BigDecimal.ZERO, BigDecimal::add); return new LocalDateSegment<>(p, diff --git a/formidling/src/test/java/no/nav/ung/sak/formidling/BrevGenerererTjenesteEndringInntektTest.java b/formidling/src/test/java/no/nav/ung/sak/formidling/BrevGenerererTjenesteEndringInntektTest.java index eb6fc0dd91..27080c3d9c 100644 --- a/formidling/src/test/java/no/nav/ung/sak/formidling/BrevGenerererTjenesteEndringInntektTest.java +++ b/formidling/src/test/java/no/nav/ung/sak/formidling/BrevGenerererTjenesteEndringInntektTest.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.time.LocalDate; +import no.nav.ung.sak.ytelseperioder.YtelseperiodeUtleder; import org.apache.pdfbox.Loader; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; @@ -93,7 +94,7 @@ private BrevGenerererTjeneste lagBrevGenererTjeneste(boolean ignorePdf) { var endringInnholdBygger = new EndringRapportertInntektInnholdBygger(tilkjentYtelseRepository, - new RapportertInntektMapper(abakusInMemoryInntektArbeidYtelseTjeneste) + new RapportertInntektMapper(abakusInMemoryInntektArbeidYtelseTjeneste, new YtelseperiodeUtleder(new UngdomsprogramPeriodeTjeneste(ungdomsprogramPeriodeRepository), repositoryProvider.getBehandlingRepository())) ); var detaljertResultatUtleder = new DetaljertResultatUtlederImpl( diff --git a/kodeverk/src/main/java/no/nav/ung/kodeverk/behandling/BehandlingStegType.java b/kodeverk/src/main/java/no/nav/ung/kodeverk/behandling/BehandlingStegType.java index e4d897b109..1d9fb77031 100644 --- a/kodeverk/src/main/java/no/nav/ung/kodeverk/behandling/BehandlingStegType.java +++ b/kodeverk/src/main/java/no/nav/ung/kodeverk/behandling/BehandlingStegType.java @@ -91,7 +91,8 @@ public enum BehandlingStegType implements Kodeverdi { MANUELL_TILKJENNING_YTELSE("MANUELL_TILKJENNING_YTELSE", "Manuell tilkjenning av ytelse", UTREDES), OVERGANG_FRA_INFOTRYGD("OVERGANG_FRA_INFOTRYGD", "Direkte overgang fra infotrygd", UTREDES), VURDER_UNGDOMSPROGRAMVILKÅR("VURDER_UNGDOMSPROGRAMVILKÅR", "Vurder deltakelse i ungdomsprogrammet", UTREDES), - UNGDOMSYTELSE_BEREGNING("UNGDOMSYTELSE_BEREGNING", "Beregner sats for ungdomsytelsen", UTREDES); + UNGDOMSYTELSE_BEREGNING("UNGDOMSYTELSE_BEREGNING", "Beregner sats for ungdomsytelsen", UTREDES), + KONTROLLER_REGISTER_INNTEKT("KONTROLLER_REGISTER_INNTEKT", "Kontroller brukers rapporterte inntekt mot registerinntekt", UTREDES); private static final Map KODER = new LinkedHashMap<>(); From 003a5efe0f01f88a7ca1abc0e1079be70ca84b3f Mon Sep 17 00:00:00 2001 From: Espen Velsvik Date: Mon, 17 Mar 2025 09:34:39 +0100 Subject: [PATCH 2/7] TSFF-1208: Fjerne modul --- domenetjenester/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/domenetjenester/pom.xml b/domenetjenester/pom.xml index 3c2f73f255..62ca49f708 100644 --- a/domenetjenester/pom.xml +++ b/domenetjenester/pom.xml @@ -36,7 +36,6 @@ bom grunnbelop behandlingskontroll - uttalelse From 7364627d3376c7125a775c4f3746e4b672234639 Mon Sep 17 00:00:00 2001 From: Espen Velsvik Date: Mon, 17 Mar 2025 10:15:01 +0100 Subject: [PATCH 3/7] =?UTF-8?q?TSFF-1208:=20H=C3=A5ndterer=20at=20det=20ik?= =?UTF-8?q?kje=20finnes=20registerinntekter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ung/sak/ytelse/RapportertInntektMapper.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapportertInntektMapper.java b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapportertInntektMapper.java index cf5e2dc426..cb01f1795f 100644 --- a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapportertInntektMapper.java +++ b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/RapportertInntektMapper.java @@ -102,7 +102,7 @@ private static LocalDateTimeline> finnRegisterInntektTids } private static LocalDateTimeline> finnRegisterinntektForPeriode(Map> grupperteInntekter, LocalDateInterval intervall) { - final var inntekterForPeriode = getInntekterForPeriode(); + final var inntekterForPeriode = new HashSet(); final var overlappendeArbeidsinntekter = finnOverlappendeInntekterForType(intervall, grupperteInntekter, InntektType.ARBEIDSTAKER_ELLER_FRILANSER); @@ -126,10 +126,6 @@ private static LocalDateTimeline> finnRegisterinntektForP return tidslinjeForPeriode; } - private static HashSet getInntekterForPeriode() { - return new HashSet(); - } - private static void validerBrukersRapporterteInntekterTidslinje(LocalDateTimeline> brukersRapporterteInntekter, LocalDateTimeline ytelseTidslinje) { final var perioderUtenforYtelsesperioder = brukersRapporterteInntekter.getLocalDateIntervals().stream() .filter(it -> ytelseTidslinje.getLocalDateIntervals().stream().noneMatch(it::equals)) @@ -143,7 +139,7 @@ private static void validerBrukersRapporterteInntekterTidslinje(LocalDateTimelin private static LocalDateTimeline kombinerTidslinjer(LocalDateTimeline> brukersRapporterteInntekter, LocalDateTimeline> registerTidslinje) { return brukersRapporterteInntekter.crossJoin(registerTidslinje, (di, bruker, register) -> { - final var rapporterteInntekter = new RapporterteInntekter(bruker.getValue(), register.getValue()); + final var rapporterteInntekter = new RapporterteInntekter(bruker == null ? Set.of() : bruker.getValue(), register == null ? Set.of() : register.getValue()); return new LocalDateSegment<>(di, rapporterteInntekter); }); } @@ -160,15 +156,11 @@ private static LocalDateTimeline kombinerTidslinjer(LocalD } private static List finnOverlappendeInntekterForType(LocalDateInterval intervall, Map> grupperteInntekter, InntektType inntektType) { - return grupperteInntekter.get(inntektType) + return grupperteInntekter.getOrDefault(inntektType, List.of()) .stream().filter(it -> intervall.overlaps(new LocalDateInterval(it.getPeriode().getFomDato(), it.getPeriode().getTomDato()))) .toList(); } - private static boolean overlapperDelvis(LocalDateInterval intervall, DatoIntervallEntitet inntektsperiode) { - return inntektsperiode.getFomDato().isBefore(intervall.getFomDato()) && inntektsperiode.getTomDato().isAfter(intervall.getFomDato()); - } - private InntektType mapTilInntektType(Inntektspost it) { if (it.getInntektspostType().equals(InntektspostType.LØNN)) { return InntektType.ARBEIDSTAKER_ELLER_FRILANSER; From 612af2d821deac5221d91e36cc6a2191cc2a3da1 Mon Sep 17 00:00:00 2001 From: Espen Velsvik Date: Mon, 17 Mar 2025 10:29:45 +0100 Subject: [PATCH 4/7] TSFF-1208: Lager dummy-implementasjon av interface --- .../KontrollerInntektSteg.java | 5 +---- .../KontrollerInntektTjeneste.java | 2 +- .../KontrollerInntektTjenesteTest.java | 21 +++++++------------ .../RegisterinntektUttalelseTjenesteImpl.java | 14 +++++++++++++ 4 files changed, 23 insertions(+), 19 deletions(-) create mode 100644 domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjenesteImpl.java diff --git a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektSteg.java b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektSteg.java index ffde4b52f5..cf6c41ff4f 100644 --- a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektSteg.java +++ b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektSteg.java @@ -18,18 +18,15 @@ public class KontrollerInntektSteg implements BehandlingSteg { private ProsessTriggerPeriodeUtleder prosessTriggerPeriodeUtleder; private RapportertInntektMapper rapportertInntektMapper; - private KontrollerInntektTjeneste kontrollerInntektTjeneste; private RegisterinntektUttalelseTjeneste registerinntektUttalelseTjeneste; @Inject public KontrollerInntektSteg(ProsessTriggerPeriodeUtleder prosessTriggerPeriodeUtleder, RapportertInntektMapper rapportertInntektMapper, - KontrollerInntektTjeneste kontrollerInntektTjeneste, RegisterinntektUttalelseTjeneste registerinntektUttalelseTjeneste) { this.prosessTriggerPeriodeUtleder = prosessTriggerPeriodeUtleder; this.rapportertInntektMapper = rapportertInntektMapper; - this.kontrollerInntektTjeneste = kontrollerInntektTjeneste; this.registerinntektUttalelseTjeneste = registerinntektUttalelseTjeneste; } @@ -45,7 +42,7 @@ public KontrollerInntektSteg() { final var registerinntekterForIkkeGodkjentUttalelse = rapportertInntektMapper.finnRegisterinntekterForUttalelse(kontekst.getBehandlingId(), uttalelser); - final var kontrollResultat = kontrollerInntektTjeneste.utførKontroll(prosessTriggerTidslinje, rapporterteInntekterTidslinje, registerinntekterForIkkeGodkjentUttalelse); + final var kontrollResultat = KontrollerInntektTjeneste.utførKontroll(prosessTriggerTidslinje, rapporterteInntekterTidslinje, registerinntekterForIkkeGodkjentUttalelse); return BehandleStegResultat.utførtUtenAksjonspunkter( ); diff --git a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjeneste.java b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjeneste.java index d6f817093f..d150516574 100644 --- a/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjeneste.java +++ b/behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjeneste.java @@ -14,7 +14,7 @@ public class KontrollerInntektTjeneste { - public KontrollResultat utførKontroll(LocalDateTimeline> prosessTriggerTidslinje, + public static KontrollResultat utførKontroll(LocalDateTimeline> prosessTriggerTidslinje, LocalDateTimeline gjeldendeRapporterteInntekter, LocalDateTimeline uttalelseTidslinje) { diff --git a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java index 1659c00fbb..700e110923 100644 --- a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java +++ b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java @@ -22,13 +22,6 @@ class KontrollerInntektTjenesteTest { - private KontrollerInntektTjeneste tjeneste; - - @BeforeEach - void setUp() { - tjeneste = new KontrollerInntektTjeneste(); - } - @Test void utførKontroll() { } @@ -43,7 +36,7 @@ void setUp() { LocalDateTimeline ikkeGodkjentUttalelseTidslinje = LocalDateTimeline.empty(); // Act - KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + KontrollResultat resultat = KontrollerInntektTjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); // Assert assertEquals(KontrollResultat.SETT_PÅ_VENT_TIL_RAPPORTERINGSFRIST, resultat); @@ -62,7 +55,7 @@ void skal_opprette_aksjonspunkt_dersom_brukes_har_gitt_uttalelse_og_registerinnt new BrukersUttalelseForRegisterinntekt(Status.BEKREFTET, Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, BigDecimal.valueOf(register))), new Uttalelse(false))); // Act - KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + KontrollResultat resultat = KontrollerInntektTjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); // Assert assertEquals(KontrollResultat.OPPRETT_AKSJONSPUNKT, resultat); @@ -82,7 +75,7 @@ void skal_opprette_aksjonspunkt_dersom_brukes_har_gitt_uttalelse_og_registerinnt new BrukersUttalelseForRegisterinntekt(Status.BEKREFTET, Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, BigDecimal.valueOf(registerFraUttalelse))), new Uttalelse(false))); // Act - KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + KontrollResultat resultat = KontrollerInntektTjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); // Assert assertEquals(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST, resultat); @@ -98,7 +91,7 @@ void skal_bruke_brukers_inntekt_dersom_diff_mellom_rapportert_inntekt_fra_regist LocalDateTimeline ikkeGodkjentUttalelseTidslinje = LocalDateTimeline.empty(); // Act - KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + KontrollResultat resultat = KontrollerInntektTjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); // Assert assertEquals(KontrollResultat.BRUK_INNTEKT_FRA_BRUKER, resultat); @@ -114,7 +107,7 @@ void skal_bruke_brukers_inntekt_dersom_ingen_rapportert_inntekt_fra_register_ell LocalDateTimeline ikkeGodkjentUttalelseTidslinje = LocalDateTimeline.empty(); // Act - KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + KontrollResultat resultat = KontrollerInntektTjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); // Assert assertEquals(KontrollResultat.BRUK_INNTEKT_FRA_BRUKER, resultat); @@ -130,7 +123,7 @@ void skal_bruke_brukers_inntekt_dersom_ingen_rapportert_inntekt_fra_register_ell LocalDateTimeline ikkeGodkjentUttalelseTidslinje = LocalDateTimeline.empty(); // Act - KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); + KontrollResultat resultat = KontrollerInntektTjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, ikkeGodkjentUttalelseTidslinje); // Assert assertEquals(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER, resultat); @@ -148,7 +141,7 @@ void skal_bruke_brukers_inntekt_dersom_ingen_rapportert_inntekt_fra_register_ell new BrukersUttalelseForRegisterinntekt(Status.VENTER, Set.of(new RapportertInntekt(InntektType.ARBEIDSTAKER_ELLER_FRILANSER, BigDecimal.valueOf(10_002))), null)); // Act - KontrollResultat resultat = tjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, uttalelseTidslinje); + KontrollResultat resultat = KontrollerInntektTjeneste.utførKontroll(prosessTriggerTidslinje, gjeldendeRapporterteInntekter, uttalelseTidslinje); // Assert assertEquals(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST, resultat); diff --git a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjenesteImpl.java b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjenesteImpl.java new file mode 100644 index 0000000000..62ad89da37 --- /dev/null +++ b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjenesteImpl.java @@ -0,0 +1,14 @@ +package no.nav.ung.sak.ytelse.uttalelse; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.context.Dependent; + +import java.util.List; + +@Dependent +public class RegisterinntektUttalelseTjenesteImpl implements RegisterinntektUttalelseTjeneste { + @Override + public List hentUttalelser(Long behandlingId) { + return List.of(); + } +} From c594a9ff53595d572b4f181bd19637baf8ff2fa0 Mon Sep 17 00:00:00 2001 From: Espen Velsvik Date: Mon, 17 Mar 2025 10:35:43 +0100 Subject: [PATCH 5/7] TSFF-1208: Fikser test --- .../steg/uttak/RapportertInntektMapperTest.java | 16 ++++++++++------ .../RegisterinntektUttalelseTjenesteImpl.java | 1 - 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/uttak/RapportertInntektMapperTest.java b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/uttak/RapportertInntektMapperTest.java index 3da3dfc229..c42fd15d0c 100644 --- a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/uttak/RapportertInntektMapperTest.java +++ b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/uttak/RapportertInntektMapperTest.java @@ -8,6 +8,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.temporal.TemporalAdjusters; import java.util.List; import java.util.Set; @@ -37,13 +38,16 @@ class RapportertInntektMapperTest { @BeforeEach void setUp() { + when(ytelseperiodeUtleder.utledYtelsestidslinje(anyLong())).thenReturn(new LocalDateTimeline<>(List.of( + new LocalDateSegment<>(LocalDate.now(), LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()), true), + new LocalDateSegment<>(LocalDate.now().plusMonths(1).withDayOfMonth(1), LocalDate.now().plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()), true)))); rapportertInntektMapper = new RapportertInntektMapper(inntektArbeidYtelseTjeneste, ytelseperiodeUtleder); } @Test void skal_mappe_en_mottatt_inntekt() { // Arrange - final var periode = DatoIntervallEntitet.fraOgMedTilOgMed(LocalDate.now(), LocalDate.now().plusDays(1)); + final var periode = DatoIntervallEntitet.fraOgMedTilOgMed(LocalDate.now(), LocalDate.now().with(TemporalAdjusters.lastDayOfMonth())); final var inntekt = BigDecimal.TEN; final var oppgittOpptjening = lagMottattATFLInntekt(periode, inntekt, LocalDateTime.now()); mockIAY(List.of(oppgittOpptjening)); @@ -62,7 +66,7 @@ void skal_mappe_en_mottatt_inntekt() { @Test void skal_mappe_mottatte_inntekter_for_næring_og_arbeid() { // Arrange - final var periode = DatoIntervallEntitet.fraOgMedTilOgMed(LocalDate.now(), LocalDate.now().plusDays(1)); + final var periode = DatoIntervallEntitet.fraOgMedTilOgMed(LocalDate.now(), LocalDate.now().with(TemporalAdjusters.lastDayOfMonth())); final var arbeidsinntekt = BigDecimal.TEN; final var næringsinntekt = BigDecimal.ONE; final var oppgittOpptjening = lagMottattATFLOgNæringInntekt(periode, arbeidsinntekt, næringsinntekt, LocalDateTime.now()); @@ -84,13 +88,13 @@ void skal_mappe_en_mottatt_inntekt() { void skal_mappe_to_mottatte_inntekter_for_forskjellige_perioder() { // Arrange final var fom = LocalDate.now(); - final var tom = LocalDate.now().plusDays(1); + final var tom = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()); final var periode = DatoIntervallEntitet.fraOgMedTilOgMed(fom, tom); final var inntekt = BigDecimal.TEN; final var innsendtTidspunkt = LocalDateTime.now(); final var oppgittOpptjening = lagMottattATFLInntekt(periode, inntekt, innsendtTidspunkt); - final var fom2 = tom.plusDays(10); - final var tom2 = fom2.plusDays(10); + final var fom2 = fom.plusMonths(1).withDayOfMonth(1); + final var tom2 = fom2.with(TemporalAdjusters.lastDayOfMonth()); final var periode2 = DatoIntervallEntitet.fraOgMedTilOgMed(fom2, tom2); final var inntekt2 = BigDecimal.valueOf(50); final var oppgittOpptjening2 = lagMottattATFLInntekt(periode2, inntekt2, innsendtTidspunkt); @@ -117,7 +121,7 @@ void skal_mappe_to_mottatte_inntekter_for_forskjellige_perioder() { void skal_mappe_to_mottatte_inntekter_for_samme_perioder() { // Arrange final var fom = LocalDate.now(); - final var tom = LocalDate.now().plusDays(1); + final var tom = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()); final var periode = DatoIntervallEntitet.fraOgMedTilOgMed(fom, tom); final var inntekt = BigDecimal.TEN; final var innsendtTidspunkt = LocalDateTime.now().minusDays(1); diff --git a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjenesteImpl.java b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjenesteImpl.java index 62ad89da37..957cf6fa96 100644 --- a/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjenesteImpl.java +++ b/domenetjenester/beregning-ytelse/src/main/java/no/nav/ung/sak/ytelse/uttalelse/RegisterinntektUttalelseTjenesteImpl.java @@ -1,6 +1,5 @@ package no.nav.ung.sak.ytelse.uttalelse; -import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.Dependent; import java.util.List; From f4e34cb52626447f258da5509e6ec9081d1d0e23 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 09:41:49 +0000 Subject: [PATCH 6/7] ung-sak.openapi.json updated by build pipeline skip-checks:true --- web/src/main/resources/openapi-ts-client/ung-sak.openapi.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/main/resources/openapi-ts-client/ung-sak.openapi.json b/web/src/main/resources/openapi-ts-client/ung-sak.openapi.json index dfddb365f3..e211cf118d 100644 --- a/web/src/main/resources/openapi-ts-client/ung-sak.openapi.json +++ b/web/src/main/resources/openapi-ts-client/ung-sak.openapi.json @@ -1047,9 +1047,9 @@ "x-enum-varnames" : [ "STARTET", "INNGANG", "UTGANG", "VENTER", "AVBRUTT", "UTFØRT", "FREMOVERFØRT", "TILBAKEFØRT", "UDEFINERT" ] }, "BehandlingStegTilstandDtoStegType" : { - "enum" : [ "BERYT", "PRECONDITION_BERGRUNN", "FAST_BERGRUNN", "VURDER_OPPTJ_PERIODE", "FASTSETT_STP_BER", "FVEDSTEG", "VURDER_VILKAR_BERGRUNN", "VURDER_REF_BERGRUNN", "FORDEL_BERGRUNN", "FORBRES", "FORS_BERGRUNN", "FORS_BERGRUNN_2", "VURDER_MANUELT_BREV", "FORVEDSTEG", "BERYT_OPPDRAG", "VURDER_SØKNADSFRIST", "INIT_PERIODER", "INIT_VILKÅR", "INPER", "INREG", "INSØK", "INREG_AVSL", "IVEDSTEG", "KOFAK", "KOARB", "KOMPLETT_FOR_BEREGNING", "INNINN", "KOFAKBER", "KOFAKUT", "KOFAK_LOP_MEDL", "VURDEROP", "SIMOPP", "START", "VRSLREV", "VULOMED", "VURDER_FARESIGNALER", "VURDINNSYN", "VURDERKOMPLETT", "VURDER_STARTDATO_UTTAKSREGLER", "VURDER_TILKOMMET_INNTEKT", "POSTCONDITION_KOMPLETTHET", "VARIANT_FILTER", "VURDER_MEDISINSK", "VURDER_NODVENDIGHET", "VURDER_INSTITUSJON", "VURDER_GJENNOMGATT_OPPLAERING", "POST_MEDISINSK", "VURDERMV", "VURDER_OMSORG_FOR", "VURDER_ALDER", "VURDER_ALDER_BARN", "VURDER_OPPTJ_FAKTA", "VURDER_OPPTJ", "VURDER_TILBAKETREKK", "VURDER_UTLAND", "VURDER_UTTAK", "VURDER_UTTAK_V2", "BEKREFT_UTTAK", "MANUELL_VILKÅRSVURDERING", "MANUELL_TILKJENNING_YTELSE", "OVERGANG_FRA_INFOTRYGD", "VURDER_UNGDOMSPROGRAMVILKÅR", "UNGDOMSYTELSE_BEREGNING" ], + "enum" : [ "BERYT", "PRECONDITION_BERGRUNN", "FAST_BERGRUNN", "VURDER_OPPTJ_PERIODE", "FASTSETT_STP_BER", "FVEDSTEG", "VURDER_VILKAR_BERGRUNN", "VURDER_REF_BERGRUNN", "FORDEL_BERGRUNN", "FORBRES", "FORS_BERGRUNN", "FORS_BERGRUNN_2", "VURDER_MANUELT_BREV", "FORVEDSTEG", "BERYT_OPPDRAG", "VURDER_SØKNADSFRIST", "INIT_PERIODER", "INIT_VILKÅR", "INPER", "INREG", "INSØK", "INREG_AVSL", "IVEDSTEG", "KOFAK", "KOARB", "KOMPLETT_FOR_BEREGNING", "INNINN", "KOFAKBER", "KOFAKUT", "KOFAK_LOP_MEDL", "VURDEROP", "SIMOPP", "START", "VRSLREV", "VULOMED", "VURDER_FARESIGNALER", "VURDINNSYN", "VURDERKOMPLETT", "VURDER_STARTDATO_UTTAKSREGLER", "VURDER_TILKOMMET_INNTEKT", "POSTCONDITION_KOMPLETTHET", "VARIANT_FILTER", "VURDER_MEDISINSK", "VURDER_NODVENDIGHET", "VURDER_INSTITUSJON", "VURDER_GJENNOMGATT_OPPLAERING", "POST_MEDISINSK", "VURDERMV", "VURDER_OMSORG_FOR", "VURDER_ALDER", "VURDER_ALDER_BARN", "VURDER_OPPTJ_FAKTA", "VURDER_OPPTJ", "VURDER_TILBAKETREKK", "VURDER_UTLAND", "VURDER_UTTAK", "VURDER_UTTAK_V2", "BEKREFT_UTTAK", "MANUELL_VILKÅRSVURDERING", "MANUELL_TILKJENNING_YTELSE", "OVERGANG_FRA_INFOTRYGD", "VURDER_UNGDOMSPROGRAMVILKÅR", "UNGDOMSYTELSE_BEREGNING", "KONTROLLER_REGISTER_INNTEKT" ], "type" : "string", - "x-enum-varnames" : [ "BEREGN_YTELSE", "PRECONDITION_BEREGNING", "FASTSETT_BEREGNINGSGRUNNLAG", "FASTSETT_OPPTJENINGSPERIODE", "FASTSETT_SKJÆRINGSTIDSPUNKT_BEREGNING", "FATTE_VEDTAK", "VURDER_VILKAR_BERGRUNN", "VURDER_REF_BERGRUNN", "FORDEL_BEREGNINGSGRUNNLAG", "FORESLÅ_BEHANDLINGSRESULTAT", "FORESLÅ_BEREGNINGSGRUNNLAG", "FORTSETT_FORESLÅ_BEREGNINGSGRUNNLAG", "VURDER_MANUELT_BREV", "FORESLÅ_VEDTAK", "HINDRE_TILBAKETREKK", "VURDER_SØKNADSFRIST", "INIT_PERIODER", "INIT_VILKÅR", "INNHENT_PERSONOPPLYSNINGER", "INNHENT_REGISTEROPP", "INNHENT_SØKNADOPP", "INREG_AVSL", "IVERKSETT_VEDTAK", "KONTROLLER_FAKTA", "KONTROLLER_FAKTA_ARBEIDSFORHOLD", "VURDER_KOMPLETTHET_BEREGNING", "INNHENT_INNTEKTSMELDING", "KONTROLLER_FAKTA_BEREGNING", "KONTROLLER_FAKTA_UTTAK", "KONTROLLER_LØPENDE_MEDLEMSKAP", "KONTROLLERER_SØKERS_OPPLYSNINGSPLIKT", "SIMULER_OPPDRAG", "START_STEG", "VARSEL_REVURDERING", "VULOMED", "VURDER_FARESIGNALER", "VURDER_INNSYN", "VURDER_KOMPLETTHET", "VURDER_STARTDATO_UTTAKSREGLER", "VURDER_TILKOMMET_INNTEKT", "POSTCONDITION_KOMPLETTHET", "VARIANT_FILTER", "VURDER_MEDISINSKE_VILKÅR", "VURDER_NØDVENDIGHETS_VILKÅR", "VURDER_INSTITUSJON_VILKÅR", "VURDER_GJENNOMGÅTT_OPPLÆRING", "POST_VURDER_MEDISINSKVILKÅR", "VURDER_MEDLEMSKAPVILKÅR", "VURDER_OMSORG_FOR", "ALDERSVILKÅRET", "VURDER_ALDERSVILKÅR_BARN", "VURDER_OPPTJENING_FAKTA", "VURDER_OPPTJENINGSVILKÅR", "VURDER_TILBAKETREKK", "VURDER_UTLAND", "VURDER_UTTAK", "VURDER_UTTAK_V2", "BEKREFT_UTTAK", "MANUELL_VILKÅRSVURDERING", "MANUELL_TILKJENNING_YTELSE", "OVERGANG_FRA_INFOTRYGD", "VURDER_UNGDOMSPROGRAMVILKÅR", "UNGDOMSYTELSE_BEREGNING" ] + "x-enum-varnames" : [ "BEREGN_YTELSE", "PRECONDITION_BEREGNING", "FASTSETT_BEREGNINGSGRUNNLAG", "FASTSETT_OPPTJENINGSPERIODE", "FASTSETT_SKJÆRINGSTIDSPUNKT_BEREGNING", "FATTE_VEDTAK", "VURDER_VILKAR_BERGRUNN", "VURDER_REF_BERGRUNN", "FORDEL_BEREGNINGSGRUNNLAG", "FORESLÅ_BEHANDLINGSRESULTAT", "FORESLÅ_BEREGNINGSGRUNNLAG", "FORTSETT_FORESLÅ_BEREGNINGSGRUNNLAG", "VURDER_MANUELT_BREV", "FORESLÅ_VEDTAK", "HINDRE_TILBAKETREKK", "VURDER_SØKNADSFRIST", "INIT_PERIODER", "INIT_VILKÅR", "INNHENT_PERSONOPPLYSNINGER", "INNHENT_REGISTEROPP", "INNHENT_SØKNADOPP", "INREG_AVSL", "IVERKSETT_VEDTAK", "KONTROLLER_FAKTA", "KONTROLLER_FAKTA_ARBEIDSFORHOLD", "VURDER_KOMPLETTHET_BEREGNING", "INNHENT_INNTEKTSMELDING", "KONTROLLER_FAKTA_BEREGNING", "KONTROLLER_FAKTA_UTTAK", "KONTROLLER_LØPENDE_MEDLEMSKAP", "KONTROLLERER_SØKERS_OPPLYSNINGSPLIKT", "SIMULER_OPPDRAG", "START_STEG", "VARSEL_REVURDERING", "VULOMED", "VURDER_FARESIGNALER", "VURDER_INNSYN", "VURDER_KOMPLETTHET", "VURDER_STARTDATO_UTTAKSREGLER", "VURDER_TILKOMMET_INNTEKT", "POSTCONDITION_KOMPLETTHET", "VARIANT_FILTER", "VURDER_MEDISINSKE_VILKÅR", "VURDER_NØDVENDIGHETS_VILKÅR", "VURDER_INSTITUSJON_VILKÅR", "VURDER_GJENNOMGÅTT_OPPLÆRING", "POST_VURDER_MEDISINSKVILKÅR", "VURDER_MEDLEMSKAPVILKÅR", "VURDER_OMSORG_FOR", "ALDERSVILKÅRET", "VURDER_ALDERSVILKÅR_BARN", "VURDER_OPPTJENING_FAKTA", "VURDER_OPPTJENINGSVILKÅR", "VURDER_TILBAKETREKK", "VURDER_UTLAND", "VURDER_UTTAK", "VURDER_UTTAK_V2", "BEKREFT_UTTAK", "MANUELL_VILKÅRSVURDERING", "MANUELL_TILKJENNING_YTELSE", "OVERGANG_FRA_INFOTRYGD", "VURDER_UNGDOMSPROGRAMVILKÅR", "UNGDOMSYTELSE_BEREGNING", "KONTROLLER_REGISTER_INNTEKT" ] }, "BehandlingsresultatDto" : { "properties" : { From d7edf4c1dcd5339ae69208419e847a992d3a6350 Mon Sep 17 00:00:00 2001 From: Espen Velsvik Date: Mon, 17 Mar 2025 10:54:20 +0100 Subject: [PATCH 7/7] TSFF-1208: Fjerne test --- .../KontrollerInntektTjenesteTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java index 700e110923..7afae66cb1 100644 --- a/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java +++ b/behandlingsprosess/src/test/java/no/nav/ung/sak/domene/behandling/steg/registerinntektkontroll/KontrollerInntektTjenesteTest.java @@ -22,10 +22,6 @@ class KontrollerInntektTjenesteTest { - @Test - void utførKontroll() { - } - @Test void skal_sette_på_vent_til_rapporteringsfrist() { // Arrange