Skip to content

Commit ce821b4

Browse files
authored
Merge pull request #1860 from navikt/dev
Prodsette #1857
2 parents e8efa63 + c434e87 commit ce821b4

File tree

3 files changed

+117
-8
lines changed

3 files changed

+117
-8
lines changed

src/main/java/no/nav/pto/veilarbportefolje/oppfolgingsvedtak14a/gjeldende14aVedtak/Gjeldende14aVedtakService.kt

+39-3
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,38 @@ class Gjeldende14aVedtakService(
5151
}
5252
}
5353

54+
fun hentGjeldende14aVedtak(brukerIdent: AktorId): Optional<Gjeldende14aVedtak> {
55+
val aktorIdSiste14aVedtakMap: Map<AktorId, Optional<Siste14aVedtakForBruker>> =
56+
siste14aVedtakRepository.hentSiste14aVedtakForBrukere(setOf(brukerIdent))
57+
.mapValues { Optional.ofNullable(it.value) }
58+
val aktorIdStartDatoOppfolgingMap: Map<AktorId, Optional<ZonedDateTime>> =
59+
oppfolgingRepositoryV2.hentStartDatoForOppfolging(setOf(brukerIdent))
60+
61+
val maybeSiste14aVedtak: Optional<Siste14aVedtakForBruker> =
62+
aktorIdSiste14aVedtakMap[brukerIdent] ?: Optional.empty()
63+
val maybeStartDatoOppfolging: Optional<ZonedDateTime> =
64+
aktorIdStartDatoOppfolgingMap[brukerIdent] ?: Optional.empty()
65+
66+
if (maybeSiste14aVedtak.isEmpty || maybeStartDatoOppfolging.isEmpty) {
67+
return Optional.empty<Gjeldende14aVedtak>()
68+
}
69+
70+
if (!sjekkOmVedtakErGjeldende(maybeSiste14aVedtak.get(), maybeStartDatoOppfolging.get())) {
71+
return Optional.empty<Gjeldende14aVedtak>()
72+
}
73+
74+
return maybeSiste14aVedtak.get().let {
75+
Optional.of(
76+
Gjeldende14aVedtak(
77+
aktorId = it.aktorId,
78+
innsatsgruppe = it.innsatsgruppe,
79+
hovedmal = it.hovedmal,
80+
fattetDato = it.fattetDato
81+
)
82+
)
83+
}
84+
}
85+
5486
companion object {
5587
@JvmField
5688
val LANSERINGSDATO_VEILARBOPPFOLGING_OPPFOLGINGSPERIODE: ZonedDateTime =
@@ -61,15 +93,19 @@ class Gjeldende14aVedtakService(
6193
siste14aVedtakForBruker: Siste14aVedtakForBruker,
6294
startDatoInnevarendeOppfolgingsperiode: ZonedDateTime
6395
): Boolean {
64-
val erVedtaketFattetIInnevarendeOppfolgingsperiode =
65-
siste14aVedtakForBruker.fattetDato.isAfter(startDatoInnevarendeOppfolgingsperiode)
96+
// 2025-02-18
97+
// Vi har oppdaget at vedtak fattet i Arena får "fattetDato" lik midnatt den dagen vedtaket ble fattet.
98+
// Derfor har vi valgt å innfør en "grace periode" på 4 døgn. Dvs. dersom vedtaket ble fattet etter
99+
// "oppfølgingsperiode startdato - 4 døgn", så anser vi det som gjeldende.
100+
val erVedtaketFattetIInnevarendeOppfolgingsperiodeMedGracePeriodePa4Dogn =
101+
siste14aVedtakForBruker.fattetDato.isAfter(startDatoInnevarendeOppfolgingsperiode.minusDays(4))
66102
val erVedtaketFattetForLanseringsdatoForVeilarboppfolging = siste14aVedtakForBruker.fattetDato
67103
.isBefore(LANSERINGSDATO_VEILARBOPPFOLGING_OPPFOLGINGSPERIODE)
68104
val erStartdatoForOppfolgingsperiodeLikLanseringsdatoForVeilarboppfolging =
69105
!startDatoInnevarendeOppfolgingsperiode
70106
.isAfter(LANSERINGSDATO_VEILARBOPPFOLGING_OPPFOLGINGSPERIODE)
71107

72-
return erVedtaketFattetIInnevarendeOppfolgingsperiode ||
108+
return erVedtaketFattetIInnevarendeOppfolgingsperiodeMedGracePeriodePa4Dogn ||
73109
(erVedtaketFattetForLanseringsdatoForVeilarboppfolging
74110
&& erStartdatoForOppfolgingsperiodeLikLanseringsdatoForVeilarboppfolging)
75111
}

src/main/java/no/nav/pto/veilarbportefolje/oppfolgingsvedtak14a/siste14aVedtak/Siste14aVedtakService.java

+15-5
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,18 @@
55
import no.nav.common.types.identer.Fnr;
66
import no.nav.pto.veilarbportefolje.kafka.KafkaCommonNonKeyedConsumerService;
77
import no.nav.pto.veilarbportefolje.opensearch.OpensearchIndexerV2;
8+
import no.nav.pto.veilarbportefolje.oppfolgingsvedtak14a.gjeldende14aVedtak.Gjeldende14aVedtak;
9+
import no.nav.pto.veilarbportefolje.oppfolgingsvedtak14a.gjeldende14aVedtak.Gjeldende14aVedtakService;
810
import no.nav.pto.veilarbportefolje.oppfolgingsvedtak14a.gjeldende14aVedtak.GjeldendeVedtak14a;
911
import no.nav.pto.veilarbportefolje.persononinfo.PdlIdentRepository;
1012
import no.nav.pto.veilarbportefolje.persononinfo.domene.IdenterForBruker;
1113
import no.nav.pto.veilarbportefolje.vedtakstotte.VedtaksstotteClient;
1214
import org.springframework.stereotype.Service;
1315

16+
import java.util.Map;
17+
import java.util.Optional;
18+
import java.util.Set;
19+
1420
@Service
1521
@RequiredArgsConstructor
1622
public class Siste14aVedtakService extends KafkaCommonNonKeyedConsumerService<Siste14aVedtakKafkaDto> {
@@ -19,6 +25,7 @@ public class Siste14aVedtakService extends KafkaCommonNonKeyedConsumerService<Si
1925
private final Siste14aVedtakRepository siste14aVedtakRepository;
2026
private final VedtaksstotteClient vedtaksstotteClient;
2127
private final OpensearchIndexerV2 opensearchIndexerV2;
28+
private final Gjeldende14aVedtakService gjeldende14aVedtakService;
2229

2330
@Override
2431
protected void behandleKafkaMeldingLogikk(Siste14aVedtakKafkaDto kafkaMelding) {
@@ -32,11 +39,14 @@ public void lagreSiste14aVedtak(Siste14aVedtakForBruker siste14AVedtakForBruker)
3239
IdenterForBruker identer = pdlIdentRepository.hentIdenterForBruker(aktorId.get());
3340
siste14aVedtakRepository.upsert(siste14AVedtakForBruker, identer);
3441

35-
opensearchIndexerV2.updateGjeldendeVedtak14a(new GjeldendeVedtak14a(
36-
siste14AVedtakForBruker.getInnsatsgruppe(),
37-
siste14AVedtakForBruker.getHovedmal(),
38-
siste14AVedtakForBruker.getFattetDato()
39-
), aktorId);
42+
Optional<Gjeldende14aVedtak> maybeGjeldende14aVedtak = gjeldende14aVedtakService.hentGjeldende14aVedtak(aktorId);
43+
maybeGjeldende14aVedtak.ifPresent(gjeldende14aVedtak ->
44+
opensearchIndexerV2.updateGjeldendeVedtak14a(new GjeldendeVedtak14a(
45+
siste14AVedtakForBruker.getInnsatsgruppe(),
46+
siste14AVedtakForBruker.getHovedmal(),
47+
siste14AVedtakForBruker.getFattetDato()
48+
), aktorId)
49+
);
4050
}
4151
}
4252

src/test/java/no/nav/pto/veilarbportefolje/oppfolgingsvedtak14a/gjeldende14aVedtak/FlettingAvGjeldende14aVedtakTest.java

+63
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,69 @@ public void skal_ikke_flette_inn_gjeldende_14a_vedtak_for_flere_brukere_med_ulik
302302
assertThat(oppfolgingsbruker2.getGjeldendeVedtak14a()).isNull();
303303
}
304304

305+
@Test
306+
public void skal_flette_inn_gjeldende_14a_vedtak_når_personen_har_vedtak_og_vedtak_fattet_dato_er_innenfor_oppfølging_startdato_minus_4_døgn() {
307+
GjeldendeIdenter ident1 = genererGjeldendeIdent();
308+
ZonedDateTime startdatoForOppfolging = ZonedDateTime.parse("2020-11-13T10:00:00+02:00");
309+
310+
OppfolgingsBruker oppfolgingsbruker = new OppfolgingsBruker()
311+
.setFnr(ident1.getFnr().get())
312+
.setAktoer_id(ident1.getAktorId().get());
313+
314+
Siste14aVedtakForBruker siste14AVedtakForBruker = Siste14aVedtakForBruker.builder()
315+
.aktorId(ident1.getAktorId())
316+
.innsatsgruppe(Innsatsgruppe.STANDARD_INNSATS)
317+
.hovedmal(Hovedmal.BEHOLDE_ARBEID)
318+
.fattetDato(startdatoForOppfolging.minusDays(3).minusHours(23).minusMinutes(59))
319+
.build();
320+
321+
Map<AktorId, Siste14aVedtakForBruker> aktorIdSiste14aVedtakMap = Map.of(ident1.getAktorId(), siste14AVedtakForBruker);
322+
323+
324+
Map<AktorId, Optional<ZonedDateTime>> aktorIdStartDatoForOppfolgingMap =
325+
Map.of(ident1.getAktorId(), Optional.of(startdatoForOppfolging));
326+
327+
when(siste14aVedtakRepository.hentSiste14aVedtakForBrukere(any())).thenReturn(aktorIdSiste14aVedtakMap);
328+
when(oppfolgingRepositoryV2.hentStartDatoForOppfolging(any())).thenReturn(aktorIdStartDatoForOppfolgingMap);
329+
330+
postgresOpensearchMapper.flettInnGjeldende14aVedtak(List.of(oppfolgingsbruker));
331+
332+
assertThat(oppfolgingsbruker.getGjeldendeVedtak14a()).isNotNull();
333+
assertThat(oppfolgingsbruker.getGjeldendeVedtak14a().fattetDato()).isEqualTo(siste14AVedtakForBruker.getFattetDato());
334+
assertThat(oppfolgingsbruker.getGjeldendeVedtak14a().innsatsgruppe()).isEqualTo(siste14AVedtakForBruker.getInnsatsgruppe());
335+
assertThat(oppfolgingsbruker.getGjeldendeVedtak14a().hovedmal()).isEqualTo(siste14AVedtakForBruker.getHovedmal());
336+
}
337+
338+
@Test
339+
public void skal_ikke_flette_inn_gjeldende_14a_vedtak_når_personen_har_vedtak_og_vedtak_fattet_dato_er_utenfor_oppfølging_startdato_minus_4_døgn() {
340+
GjeldendeIdenter ident1 = genererGjeldendeIdent();
341+
ZonedDateTime startdatoForOppfolging = ZonedDateTime.parse("2020-11-13T10:00:00+02:00");
342+
343+
OppfolgingsBruker oppfolgingsbruker = new OppfolgingsBruker()
344+
.setFnr(ident1.getFnr().get())
345+
.setAktoer_id(ident1.getAktorId().get());
346+
347+
Siste14aVedtakForBruker siste14AVedtakForBruker = Siste14aVedtakForBruker.builder()
348+
.aktorId(ident1.getAktorId())
349+
.innsatsgruppe(Innsatsgruppe.STANDARD_INNSATS)
350+
.hovedmal(Hovedmal.BEHOLDE_ARBEID)
351+
.fattetDato(startdatoForOppfolging.minusDays(5))
352+
.build();
353+
354+
Map<AktorId, Siste14aVedtakForBruker> aktorIdSiste14aVedtakMap = Map.of(ident1.getAktorId(), siste14AVedtakForBruker);
355+
356+
357+
Map<AktorId, Optional<ZonedDateTime>> aktorIdStartDatoForOppfolgingMap =
358+
Map.of(ident1.getAktorId(), Optional.of(startdatoForOppfolging));
359+
360+
when(siste14aVedtakRepository.hentSiste14aVedtakForBrukere(any())).thenReturn(aktorIdSiste14aVedtakMap);
361+
when(oppfolgingRepositoryV2.hentStartDatoForOppfolging(any())).thenReturn(aktorIdStartDatoForOppfolgingMap);
362+
363+
postgresOpensearchMapper.flettInnGjeldende14aVedtak(List.of(oppfolgingsbruker));
364+
365+
assertThat(oppfolgingsbruker.getGjeldendeVedtak14a()).isNull();
366+
}
367+
305368
private GjeldendeIdenter genererGjeldendeIdent() {
306369
return GjeldendeIdenter.builder().fnr(randomFnr()).aktorId(randomAktorId()).build();
307370
}

0 commit comments

Comments
 (0)