Skip to content

Commit

Permalink
Merge pull request #1857 from navikt/gjeldende-14a-vedtak-fiks
Browse files Browse the repository at this point in the history
Gjer sjekken for kva vi anser som gjeldande § 14 a-vedtak meir "relaxed"
  • Loading branch information
slovrid authored Feb 18, 2025
2 parents 9b455b6 + a4cf6a2 commit 002bdbc
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,38 @@ class Gjeldende14aVedtakService(
}
}

fun hentGjeldende14aVedtak(brukerIdent: AktorId): Optional<Gjeldende14aVedtak> {
val aktorIdSiste14aVedtakMap: Map<AktorId, Optional<Siste14aVedtakForBruker>> =
siste14aVedtakRepository.hentSiste14aVedtakForBrukere(setOf(brukerIdent))
.mapValues { Optional.ofNullable(it.value) }
val aktorIdStartDatoOppfolgingMap: Map<AktorId, Optional<ZonedDateTime>> =
oppfolgingRepositoryV2.hentStartDatoForOppfolging(setOf(brukerIdent))

val maybeSiste14aVedtak: Optional<Siste14aVedtakForBruker> =
aktorIdSiste14aVedtakMap[brukerIdent] ?: Optional.empty()
val maybeStartDatoOppfolging: Optional<ZonedDateTime> =
aktorIdStartDatoOppfolgingMap[brukerIdent] ?: Optional.empty()

if (maybeSiste14aVedtak.isEmpty || maybeStartDatoOppfolging.isEmpty) {
return Optional.empty<Gjeldende14aVedtak>()
}

if (!sjekkOmVedtakErGjeldende(maybeSiste14aVedtak.get(), maybeStartDatoOppfolging.get())) {
return Optional.empty<Gjeldende14aVedtak>()
}

return maybeSiste14aVedtak.get().let {
Optional.of(
Gjeldende14aVedtak(
aktorId = it.aktorId,
innsatsgruppe = it.innsatsgruppe,
hovedmal = it.hovedmal,
fattetDato = it.fattetDato
)
)
}
}

companion object {
@JvmField
val LANSERINGSDATO_VEILARBOPPFOLGING_OPPFOLGINGSPERIODE: ZonedDateTime =
Expand All @@ -61,15 +93,19 @@ class Gjeldende14aVedtakService(
siste14aVedtakForBruker: Siste14aVedtakForBruker,
startDatoInnevarendeOppfolgingsperiode: ZonedDateTime
): Boolean {
val erVedtaketFattetIInnevarendeOppfolgingsperiode =
siste14aVedtakForBruker.fattetDato.isAfter(startDatoInnevarendeOppfolgingsperiode)
// 2025-02-18
// Vi har oppdaget at vedtak fattet i Arena får "fattetDato" lik midnatt den dagen vedtaket ble fattet.
// Derfor har vi valgt å innfør en "grace periode" på 4 døgn. Dvs. dersom vedtaket ble fattet etter
// "oppfølgingsperiode startdato - 4 døgn", så anser vi det som gjeldende.
val erVedtaketFattetIInnevarendeOppfolgingsperiodeMedGracePeriodePa4Dogn =
siste14aVedtakForBruker.fattetDato.isAfter(startDatoInnevarendeOppfolgingsperiode.minusDays(4))
val erVedtaketFattetForLanseringsdatoForVeilarboppfolging = siste14aVedtakForBruker.fattetDato
.isBefore(LANSERINGSDATO_VEILARBOPPFOLGING_OPPFOLGINGSPERIODE)
val erStartdatoForOppfolgingsperiodeLikLanseringsdatoForVeilarboppfolging =
!startDatoInnevarendeOppfolgingsperiode
.isAfter(LANSERINGSDATO_VEILARBOPPFOLGING_OPPFOLGINGSPERIODE)

return erVedtaketFattetIInnevarendeOppfolgingsperiode ||
return erVedtaketFattetIInnevarendeOppfolgingsperiodeMedGracePeriodePa4Dogn ||
(erVedtaketFattetForLanseringsdatoForVeilarboppfolging
&& erStartdatoForOppfolgingsperiodeLikLanseringsdatoForVeilarboppfolging)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,18 @@
import no.nav.common.types.identer.Fnr;
import no.nav.pto.veilarbportefolje.kafka.KafkaCommonNonKeyedConsumerService;
import no.nav.pto.veilarbportefolje.opensearch.OpensearchIndexerV2;
import no.nav.pto.veilarbportefolje.oppfolgingsvedtak14a.gjeldende14aVedtak.Gjeldende14aVedtak;
import no.nav.pto.veilarbportefolje.oppfolgingsvedtak14a.gjeldende14aVedtak.Gjeldende14aVedtakService;
import no.nav.pto.veilarbportefolje.oppfolgingsvedtak14a.gjeldende14aVedtak.GjeldendeVedtak14a;
import no.nav.pto.veilarbportefolje.persononinfo.PdlIdentRepository;
import no.nav.pto.veilarbportefolje.persononinfo.domene.IdenterForBruker;
import no.nav.pto.veilarbportefolje.vedtakstotte.VedtaksstotteClient;
import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.Optional;
import java.util.Set;

@Service
@RequiredArgsConstructor
public class Siste14aVedtakService extends KafkaCommonNonKeyedConsumerService<Siste14aVedtakKafkaDto> {
Expand All @@ -19,6 +25,7 @@ public class Siste14aVedtakService extends KafkaCommonNonKeyedConsumerService<Si
private final Siste14aVedtakRepository siste14aVedtakRepository;
private final VedtaksstotteClient vedtaksstotteClient;
private final OpensearchIndexerV2 opensearchIndexerV2;
private final Gjeldende14aVedtakService gjeldende14aVedtakService;

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

opensearchIndexerV2.updateGjeldendeVedtak14a(new GjeldendeVedtak14a(
siste14AVedtakForBruker.getInnsatsgruppe(),
siste14AVedtakForBruker.getHovedmal(),
siste14AVedtakForBruker.getFattetDato()
), aktorId);
Optional<Gjeldende14aVedtak> maybeGjeldende14aVedtak = gjeldende14aVedtakService.hentGjeldende14aVedtak(aktorId);
maybeGjeldende14aVedtak.ifPresent(gjeldende14aVedtak ->
opensearchIndexerV2.updateGjeldendeVedtak14a(new GjeldendeVedtak14a(
siste14AVedtakForBruker.getInnsatsgruppe(),
siste14AVedtakForBruker.getHovedmal(),
siste14AVedtakForBruker.getFattetDato()
), aktorId)
);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,69 @@ public void skal_ikke_flette_inn_gjeldende_14a_vedtak_for_flere_brukere_med_ulik
assertThat(oppfolgingsbruker2.getGjeldendeVedtak14a()).isNull();
}

@Test
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() {
GjeldendeIdenter ident1 = genererGjeldendeIdent();
ZonedDateTime startdatoForOppfolging = ZonedDateTime.parse("2020-11-13T10:00:00+02:00");

OppfolgingsBruker oppfolgingsbruker = new OppfolgingsBruker()
.setFnr(ident1.getFnr().get())
.setAktoer_id(ident1.getAktorId().get());

Siste14aVedtakForBruker siste14AVedtakForBruker = Siste14aVedtakForBruker.builder()
.aktorId(ident1.getAktorId())
.innsatsgruppe(Innsatsgruppe.STANDARD_INNSATS)
.hovedmal(Hovedmal.BEHOLDE_ARBEID)
.fattetDato(startdatoForOppfolging.minusDays(3).minusHours(23).minusMinutes(59))
.build();

Map<AktorId, Siste14aVedtakForBruker> aktorIdSiste14aVedtakMap = Map.of(ident1.getAktorId(), siste14AVedtakForBruker);


Map<AktorId, Optional<ZonedDateTime>> aktorIdStartDatoForOppfolgingMap =
Map.of(ident1.getAktorId(), Optional.of(startdatoForOppfolging));

when(siste14aVedtakRepository.hentSiste14aVedtakForBrukere(any())).thenReturn(aktorIdSiste14aVedtakMap);
when(oppfolgingRepositoryV2.hentStartDatoForOppfolging(any())).thenReturn(aktorIdStartDatoForOppfolgingMap);

postgresOpensearchMapper.flettInnGjeldende14aVedtak(List.of(oppfolgingsbruker));

assertThat(oppfolgingsbruker.getGjeldendeVedtak14a()).isNotNull();
assertThat(oppfolgingsbruker.getGjeldendeVedtak14a().fattetDato()).isEqualTo(siste14AVedtakForBruker.getFattetDato());
assertThat(oppfolgingsbruker.getGjeldendeVedtak14a().innsatsgruppe()).isEqualTo(siste14AVedtakForBruker.getInnsatsgruppe());
assertThat(oppfolgingsbruker.getGjeldendeVedtak14a().hovedmal()).isEqualTo(siste14AVedtakForBruker.getHovedmal());
}

@Test
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() {
GjeldendeIdenter ident1 = genererGjeldendeIdent();
ZonedDateTime startdatoForOppfolging = ZonedDateTime.parse("2020-11-13T10:00:00+02:00");

OppfolgingsBruker oppfolgingsbruker = new OppfolgingsBruker()
.setFnr(ident1.getFnr().get())
.setAktoer_id(ident1.getAktorId().get());

Siste14aVedtakForBruker siste14AVedtakForBruker = Siste14aVedtakForBruker.builder()
.aktorId(ident1.getAktorId())
.innsatsgruppe(Innsatsgruppe.STANDARD_INNSATS)
.hovedmal(Hovedmal.BEHOLDE_ARBEID)
.fattetDato(startdatoForOppfolging.minusDays(5))
.build();

Map<AktorId, Siste14aVedtakForBruker> aktorIdSiste14aVedtakMap = Map.of(ident1.getAktorId(), siste14AVedtakForBruker);


Map<AktorId, Optional<ZonedDateTime>> aktorIdStartDatoForOppfolgingMap =
Map.of(ident1.getAktorId(), Optional.of(startdatoForOppfolging));

when(siste14aVedtakRepository.hentSiste14aVedtakForBrukere(any())).thenReturn(aktorIdSiste14aVedtakMap);
when(oppfolgingRepositoryV2.hentStartDatoForOppfolging(any())).thenReturn(aktorIdStartDatoForOppfolgingMap);

postgresOpensearchMapper.flettInnGjeldende14aVedtak(List.of(oppfolgingsbruker));

assertThat(oppfolgingsbruker.getGjeldendeVedtak14a()).isNull();
}

private GjeldendeIdenter genererGjeldendeIdent() {
return GjeldendeIdenter.builder().fnr(randomFnr()).aktorId(randomAktorId()).build();
}
Expand Down

0 comments on commit 002bdbc

Please sign in to comment.