Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prodsette #1857 #1860

Merged
merged 5 commits into from
Feb 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading