|
1 | 1 | package no.nav.ung.sak.domene.behandling.steg.registerinntektkontroll;
|
2 | 2 |
|
| 3 | +import static no.nav.ung.sak.domene.behandling.steg.registerinntektkontroll.FinnKontrollresultatForIkkeGodkjentUttalelse.harDiff; |
| 4 | + |
| 5 | +import java.math.BigDecimal; |
| 6 | +import java.util.Set; |
| 7 | + |
3 | 8 | import no.nav.fpsak.tidsserie.LocalDateSegment;
|
4 | 9 | import no.nav.fpsak.tidsserie.LocalDateTimeline;
|
| 10 | +import no.nav.fpsak.tidsserie.StandardCombinators; |
5 | 11 | import no.nav.ung.kodeverk.behandling.BehandlingÅrsakType;
|
| 12 | +import no.nav.ung.sak.ytelse.BrukersUttalelseForRegisterinntekt; |
6 | 13 | import no.nav.ung.sak.ytelse.RapportertInntekt;
|
7 | 14 | import no.nav.ung.sak.ytelse.RapporterteInntekter;
|
8 |
| -import no.nav.ung.sak.ytelse.uttalelse.BrukersUttalelseForRegisterinntekt; |
9 |
| - |
10 |
| -import java.math.BigDecimal; |
11 |
| -import java.util.Optional; |
12 |
| -import java.util.Set; |
13 |
| - |
14 |
| -import static no.nav.ung.sak.domene.behandling.steg.registerinntektkontroll.FinnKontrollresultatForIkkeGodkjentUttalelse.harDiff; |
15 | 15 |
|
16 | 16 | public class Avviksvurdering {
|
17 | 17 |
|
18 | 18 | public static final BigDecimal AKSEPTERT_DIFFERANSE = BigDecimal.valueOf(1000);
|
19 | 19 |
|
20 | 20 |
|
21 |
| - static Optional<KontrollResultat> gjørAvviksvurderingMotRegisterinntekt(LocalDateTimeline<RapporterteInntekter> gjeldendeRapporterteInntekter, LocalDateTimeline<BrukersUttalelseForRegisterinntekt> uttalelseTidslinje, LocalDateTimeline<Set<BehandlingÅrsakType>> tidslinjeRelevanteÅrsaker) { |
| 21 | + static LocalDateTimeline<KontrollResultat> gjørAvviksvurderingMotRegisterinntekt( |
| 22 | + LocalDateTimeline<RapporterteInntekter> gjeldendeRapporterteInntekter, |
| 23 | + LocalDateTimeline<BrukersUttalelseForRegisterinntekt> uttalelseTidslinje, |
| 24 | + LocalDateTimeline<Set<BehandlingÅrsakType>> tidslinjeRelevanteÅrsaker) { |
| 25 | + |
| 26 | + //Finner tidslinje der det er avvik mellom register og rapportert inntekt |
22 | 27 | final var inntektDiffKontrollResultat = finnKontrollresultatTidslinje(gjeldendeRapporterteInntekter, tidslinjeRelevanteÅrsaker);
|
23 | 28 |
|
24 | 29 | final var tidslinjeForOppgaveTilBruker = inntektDiffKontrollResultat.filterValue(it -> it.equals(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER));
|
25 |
| - if (!tidslinjeForOppgaveTilBruker.isEmpty()) { |
26 |
| - |
27 |
| - // Må finne ut om vi skal sette ny frist |
28 |
| - final var oppgaverTilBrukerTidslinje = finnNyOppgaveKontrollresultatTidslinje(gjeldendeRapporterteInntekter, uttalelseTidslinje, tidslinjeForOppgaveTilBruker); |
29 | 30 |
|
30 |
| - if (!oppgaverTilBrukerTidslinje.filterValue(it -> it.equals(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST)).isEmpty()) { |
31 |
| - return Optional.of(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST); |
32 |
| - } else { |
33 |
| - return Optional.of(KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER); |
34 |
| - } |
| 31 | + // Må finne ut om vi skal sette ny frist hvis registeret har oppdatert seg |
| 32 | + final var oppgaverTilBrukerTidslinje = finnNyOppgaveKontrollresultatTidslinje(gjeldendeRapporterteInntekter, uttalelseTidslinje, tidslinjeForOppgaveTilBruker); |
35 | 33 |
|
36 |
| - } |
37 |
| - |
38 |
| - if (!inntektDiffKontrollResultat.filterValue(it -> it.equals(KontrollResultat.BRUK_INNTEKT_FRA_BRUKER)).isEmpty()) { |
39 |
| - return Optional.of(KontrollResultat.BRUK_INNTEKT_FRA_BRUKER); |
40 |
| - } |
41 |
| - return Optional.empty(); |
| 34 | + //Resultat |
| 35 | + return inntektDiffKontrollResultat.crossJoin(oppgaverTilBrukerTidslinje, StandardCombinators::coalesceRightHandSide); |
42 | 36 | }
|
43 | 37 |
|
44 |
| - private static LocalDateTimeline<KontrollResultat> finnNyOppgaveKontrollresultatTidslinje(LocalDateTimeline<RapporterteInntekter> gjeldendeRapporterteInntekter, LocalDateTimeline<BrukersUttalelseForRegisterinntekt> uttalelseTidslinje, LocalDateTimeline<KontrollResultat> tidslinjeForOppgaveTilBruker) { |
45 |
| - final var oppgaverTilBrukerTidslinje = gjeldendeRapporterteInntekter.mapValue(RapporterteInntekter::getRegisterRapporterteInntekter).intersection(tidslinjeForOppgaveTilBruker) |
46 |
| - .combine(uttalelseTidslinje.mapValue(BrukersUttalelseForRegisterinntekt::registerInntekt), (di, register, uttalelse) -> { |
47 |
| - if (uttalelse == null) { |
48 |
| - return new LocalDateSegment<>(di, KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER); |
49 |
| - } |
50 |
| - if (!harDiff(uttalelse.getValue(), register.getValue())) { |
51 |
| - return new LocalDateSegment<>(di, KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER); |
52 |
| - } else { |
53 |
| - return new LocalDateSegment<>(di, KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST); |
54 |
| - } |
55 |
| - }, LocalDateTimeline.JoinStyle.LEFT_JOIN); |
| 38 | + private static LocalDateTimeline<KontrollResultat> finnNyOppgaveKontrollresultatTidslinje( |
| 39 | + LocalDateTimeline<RapporterteInntekter> gjeldendeRapporterteInntekter, |
| 40 | + LocalDateTimeline<BrukersUttalelseForRegisterinntekt> uttalelseTidslinje, |
| 41 | + LocalDateTimeline<KontrollResultat> tidslinjeForOppgaveTilBruker) { |
| 42 | + final var oppgaverTilBrukerTidslinje = gjeldendeRapporterteInntekter.mapValue(RapporterteInntekter::registerRapporterteInntekter).intersection(tidslinjeForOppgaveTilBruker) |
| 43 | + .combine(uttalelseTidslinje.mapValue(BrukersUttalelseForRegisterinntekt::registerInntekt), |
| 44 | + (di, gjeldendeRegisterinntekt, registerinntektVedUttalelse) -> { |
| 45 | + if (registerinntektVedUttalelse == null) { |
| 46 | + return new LocalDateSegment<>(di, KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER); |
| 47 | + } |
| 48 | + if (!harDiff(registerinntektVedUttalelse.getValue(), gjeldendeRegisterinntekt.getValue())) { |
| 49 | + return new LocalDateSegment<>(di, KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER); |
| 50 | + } else { |
| 51 | + return new LocalDateSegment<>(di, KontrollResultat.OPPRETT_OPPGAVE_TIL_BRUKER_MED_NY_FRIST); |
| 52 | + } |
| 53 | + }, |
| 54 | + LocalDateTimeline.JoinStyle.LEFT_JOIN); |
56 | 55 | return oppgaverTilBrukerTidslinje;
|
57 | 56 | }
|
58 | 57 |
|
59 | 58 | private static LocalDateTimeline<KontrollResultat> finnKontrollresultatTidslinje(LocalDateTimeline<RapporterteInntekter> gjeldendeRapporterteInntekter, LocalDateTimeline<Set<BehandlingÅrsakType>> tidslinjeRelevanteÅrsaker) {
|
60 | 59 | final var inntektDiffKontrollResultat = gjeldendeRapporterteInntekter.intersection(tidslinjeRelevanteÅrsaker)
|
61 | 60 | .mapValue(it ->
|
62 | 61 | {
|
63 |
| - final var register = it.getRegisterRapporterteInntekter().stream() |
| 62 | + final var register = it.registerRapporterteInntekter().stream() |
64 | 63 | .map(RapportertInntekt::beløp).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
|
65 |
| - final var bruker = it.getBrukerRapporterteInntekter().stream() |
| 64 | + final var bruker = it.brukerRapporterteInntekter().stream() |
66 | 65 | .map(RapportertInntekt::beløp).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
|
67 | 66 |
|
68 | 67 | final var differanse = register.subtract(bruker).abs();
|
|
0 commit comments