Skip to content

Commit

Permalink
TFP-3656 bedre håndtering av korrigering og annullering (#1034)
Browse files Browse the repository at this point in the history
* Generell forbedring

* TFP-3656 forbedret håndtering av hendelsekjeder
  • Loading branch information
jolarsen committed May 1, 2023
1 parent 7863f36 commit 4196018
Show file tree
Hide file tree
Showing 35 changed files with 486 additions and 289 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package no.nav.foreldrepenger.abonnent.felles.domene;

public enum HendelseEndringType {
OPPRETTET,
KORRIGERT,
ANNULLERT,
OPPHOERT,
UDEFINERT
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package no.nav.foreldrepenger.abonnent.felles.domene;

public enum HendelseOpplysningType {
PDL_FØDSEL_HENDELSE,
PDL_DØD_HENDELSE,
PDL_DØDFØDSEL_HENDELSE,
PDL_UTFLYTTING_HENDELSE,
UDEFINERT
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
package no.nav.foreldrepenger.abonnent.felles.domene;

import static no.nav.foreldrepenger.abonnent.felles.domene.HendelseEndringType.ANNULLERT;
import static no.nav.foreldrepenger.abonnent.felles.domene.HendelseEndringType.KORRIGERT;
import static no.nav.foreldrepenger.abonnent.felles.domene.HendelseEndringType.OPPHOERT;
import static no.nav.foreldrepenger.abonnent.felles.domene.HendelseEndringType.OPPRETTET;
import static no.nav.foreldrepenger.abonnent.felles.domene.HendelseOpplysningType.PDL_DØDFØDSEL_HENDELSE;
import static no.nav.foreldrepenger.abonnent.felles.domene.HendelseOpplysningType.PDL_DØD_HENDELSE;
import static no.nav.foreldrepenger.abonnent.felles.domene.HendelseOpplysningType.PDL_FØDSEL_HENDELSE;
import static no.nav.foreldrepenger.abonnent.felles.domene.HendelseOpplysningType.PDL_UTFLYTTING_HENDELSE;

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

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
Expand All @@ -14,32 +23,25 @@

public enum HendelseType implements Kodeverdi {

PDL_FØDSEL_OPPRETTET("PDL_FOEDSEL_OPPRETTET"),
PDL_FØDSEL_KORRIGERT("PDL_FOEDSEL_KORRIGERT"),
PDL_FØDSEL_ANNULLERT("PDL_FOEDSEL_ANNULLERT"),
PDL_FØDSEL_OPPHØRT("PDL_FOEDSEL_OPPHOERT"),

PDL_DØD_OPPRETTET("PDL_DOED_OPPRETTET"),
PDL_DØD_KORRIGERT("PDL_DOED_KORRIGERT"),
PDL_DØD_ANNULLERT("PDL_DOED_ANNULLERT"),
PDL_DØD_OPPHØRT("PDL_DOED_OPPHOERT"),

PDL_DØDFØDSEL_OPPRETTET("PDL_DOEDFOEDSEL_OPPRETTET"),
PDL_DØDFØDSEL_KORRIGERT("PDL_DOEDFOEDSEL_KORRIGERT"),
PDL_DØDFØDSEL_ANNULLERT("PDL_DOEDFOEDSEL_ANNULLERT"),
PDL_DØDFØDSEL_OPPHØRT("PDL_DOEDFOEDSEL_OPPHOERT"),

PDL_UTFLYTTING_OPPRETTET("PDL_UTFLYTTING_OPPRETTET"),
PDL_UTFLYTTING_KORRIGERT("PDL_UTFLYTTING_KORRIGERT"),
PDL_UTFLYTTING_ANNULLERT("PDL_UTFLYTTING_ANNULLERT"),
PDL_UTFLYTTING_OPPHØRT("PDL_UTFLYTTING_OPPHOERT"),

// Prosesseres ikke pt: - sjekk forekomst i database før evt slettes herfra
PDL_FAMILIERELASJON_OPPRETTET("PDL_FAMILIERELASJON_OPPRETTET"),
PDL_FAMILIERELASJON_KORRIGERT("PDL_FAMILIERELASJON_KORRIGERT"),
PDL_FAMILIERELASJON_ANNULLERT("PDL_FAMILIERELASJON_ANNULLERT"),
PDL_FAMILIERELASJON_OPPHØRT("PDL_FAMILIERELASJON_OPPHOERT"),

PDL_FØDSEL_OPPRETTET("PDL_FOEDSEL_OPPRETTET", PDL_FØDSEL_HENDELSE, OPPRETTET),
PDL_FØDSEL_KORRIGERT("PDL_FOEDSEL_KORRIGERT", PDL_FØDSEL_HENDELSE, KORRIGERT),
PDL_FØDSEL_ANNULLERT("PDL_FOEDSEL_ANNULLERT", PDL_FØDSEL_HENDELSE, ANNULLERT),
PDL_FØDSEL_OPPHØRT("PDL_FOEDSEL_OPPHOERT", PDL_FØDSEL_HENDELSE, OPPHOERT),

PDL_DØD_OPPRETTET("PDL_DOED_OPPRETTET", PDL_DØD_HENDELSE, OPPRETTET),
PDL_DØD_KORRIGERT("PDL_DOED_KORRIGERT", PDL_DØD_HENDELSE, KORRIGERT),
PDL_DØD_ANNULLERT("PDL_DOED_ANNULLERT", PDL_DØD_HENDELSE, ANNULLERT),
PDL_DØD_OPPHØRT("PDL_DOED_OPPHOERT", PDL_DØD_HENDELSE, OPPHOERT),

PDL_DØDFØDSEL_OPPRETTET("PDL_DOEDFOEDSEL_OPPRETTET", PDL_DØDFØDSEL_HENDELSE, OPPRETTET),
PDL_DØDFØDSEL_KORRIGERT("PDL_DOEDFOEDSEL_KORRIGERT", PDL_DØDFØDSEL_HENDELSE, KORRIGERT),
PDL_DØDFØDSEL_ANNULLERT("PDL_DOEDFOEDSEL_ANNULLERT", PDL_DØDFØDSEL_HENDELSE, ANNULLERT),
PDL_DØDFØDSEL_OPPHØRT("PDL_DOEDFOEDSEL_OPPHOERT", PDL_DØDFØDSEL_HENDELSE, OPPHOERT),

PDL_UTFLYTTING_OPPRETTET("PDL_UTFLYTTING_OPPRETTET", PDL_UTFLYTTING_HENDELSE, OPPRETTET),
PDL_UTFLYTTING_KORRIGERT("PDL_UTFLYTTING_KORRIGERT", PDL_UTFLYTTING_HENDELSE, KORRIGERT),
PDL_UTFLYTTING_ANNULLERT("PDL_UTFLYTTING_ANNULLERT", PDL_UTFLYTTING_HENDELSE, ANNULLERT),
PDL_UTFLYTTING_OPPHØRT("PDL_UTFLYTTING_OPPHOERT", PDL_UTFLYTTING_HENDELSE, OPPHOERT),
/**
* Alle kodeverk må ha en verdi, det kan ikke være null i databasen. Denne koden gjør samme nytten.
*/
Expand All @@ -51,12 +53,21 @@ public enum HendelseType implements Kodeverdi {
@JsonValue
private String kode;

private HendelseOpplysningType opplysningType;
private HendelseEndringType endringType;

HendelseType() {
// Hibernate trenger den
}

HendelseType(String kode) {
this(kode, HendelseOpplysningType.UDEFINERT, HendelseEndringType.UDEFINERT);
}

HendelseType(String kode, HendelseOpplysningType opplysningType, HendelseEndringType endringType) {
this.kode = kode;
this.opplysningType = opplysningType;
this.endringType = endringType;
}

@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
Expand All @@ -72,6 +83,14 @@ public String getKode() {
return kode;
}

public HendelseOpplysningType getOpplysningType() {
return opplysningType;
}

public HendelseEndringType getEndringType() {
return endringType;
}

static {
for (var v : values()) {
if (KODER.putIfAbsent(v.kode, v) != null) {
Expand All @@ -80,21 +99,11 @@ public String getKode() {
}
}

public static boolean erPdlFødselHendelseType(HendelseType hendelseType) {
return Set.of(PDL_FØDSEL_OPPRETTET, PDL_FØDSEL_KORRIGERT, PDL_FØDSEL_ANNULLERT, PDL_FØDSEL_OPPHØRT).contains(hendelseType);
public static boolean erOpprettetHendelseType(HendelseType hendelseType) {
return Objects.equals(hendelseType.endringType, OPPRETTET);
}

public static boolean erPdlDødHendelseType(HendelseType hendelseType) {
return Set.of(PDL_DØD_OPPRETTET, PDL_DØD_KORRIGERT, PDL_DØD_ANNULLERT, PDL_DØD_OPPHØRT).contains(hendelseType);
}

public static boolean erPdlDødfødselHendelseType(HendelseType hendelseType) {
return Set.of(PDL_DØDFØDSEL_OPPRETTET, PDL_DØDFØDSEL_KORRIGERT, PDL_DØDFØDSEL_ANNULLERT, PDL_DØDFØDSEL_OPPHØRT).contains(hendelseType);
}

public static boolean erPdlUtflyttingHendelseType(HendelseType hendelseType) {
return Set.of(PDL_UTFLYTTING_OPPRETTET, PDL_UTFLYTTING_KORRIGERT, PDL_UTFLYTTING_ANNULLERT, PDL_UTFLYTTING_OPPHØRT).contains(hendelseType);
}

@Converter(autoApply = true)
public static class KodeverdiConverter implements AttributeConverter<HendelseType, String> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package no.nav.foreldrepenger.abonnent.felles.task;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;

import org.slf4j.Logger;
Expand All @@ -9,27 +9,24 @@
import no.nav.foreldrepenger.abonnent.felles.domene.HendelsePayload;
import no.nav.foreldrepenger.abonnent.felles.fpsak.HendelserKlient;
import no.nav.foreldrepenger.abonnent.felles.tjeneste.AbonnentHendelserFeil;
import no.nav.foreldrepenger.abonnent.felles.tjeneste.HendelseRepository;
import no.nav.foreldrepenger.abonnent.felles.tjeneste.InngåendeHendelseTjeneste;
import no.nav.vedtak.felles.prosesstask.api.ProsessTask;
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData;
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskHandler;

@ApplicationScoped
@Dependent
@ProsessTask("hendelser.sendHendelse")
public class SendHendelseTask implements ProsessTaskHandler {

private static final Logger LOGGER = LoggerFactory.getLogger(SendHendelseTask.class);

private HendelserKlient hendelser;
private InngåendeHendelseTjeneste inngåendeHendelseTjeneste;
private HendelseRepository hendelseRepository;
private final HendelserKlient hendelser;
private final InngåendeHendelseTjeneste inngåendeHendelseTjeneste;

@Inject
public SendHendelseTask(HendelserKlient hendelser, InngåendeHendelseTjeneste inngåendeHendelseTjeneste, HendelseRepository hendelseRepository) {
public SendHendelseTask(HendelserKlient hendelser, InngåendeHendelseTjeneste inngåendeHendelseTjeneste) {
this.hendelser = hendelser;
this.inngåendeHendelseTjeneste = inngåendeHendelseTjeneste;
this.hendelseRepository = hendelseRepository;
}

@Override
Expand All @@ -46,13 +43,7 @@ private HendelsePayload getHendelsePayload(HendelserDataWrapper dataWrapper) {
Long inngåendeHendelseId = dataWrapper.getInngåendeHendelseId()
.orElseThrow(() -> AbonnentHendelserFeil.manglerInngåendeHendelseIdPåProsesstask(dataWrapper.getProsessTaskData().getTaskType(),
dataWrapper.getProsessTaskData().getId()));
var inngåendeHendelse = hendelseRepository.finnEksaktHendelse(inngåendeHendelseId);
var inngåendeHendelse = inngåendeHendelseTjeneste.finnEksaktHendelse(inngåendeHendelseId);
return inngåendeHendelseTjeneste.hentUtPayloadFraInngåendeHendelse(inngåendeHendelse);
}

@Override
public String toString() {
return getClass().getSimpleName() + " [hendelser=" + hendelser + ", inngåendeHendelseTjeneste=" + inngåendeHendelseTjeneste
+ ", hendelseRepository=" + hendelseRepository + "]";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.util.Collections;
import java.util.List;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;

import org.slf4j.Logger;
Expand All @@ -22,15 +22,15 @@
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste;
import no.nav.vedtak.felles.prosesstask.api.TaskType;

@ApplicationScoped
@Dependent
@ProsessTask("hendelser.grovsorter")
public class SorterHendelseTask implements ProsessTaskHandler {

private static final Logger LOGGER = LoggerFactory.getLogger(SorterHendelseTask.class);

private ProsessTaskTjeneste prosessTaskTjeneste;
private InngåendeHendelseTjeneste inngåendeHendelseTjeneste;
private HendelserKlient hendelser;
private final ProsessTaskTjeneste prosessTaskTjeneste;
private final InngåendeHendelseTjeneste inngåendeHendelseTjeneste;
private final HendelserKlient hendelser;

@Inject
public SorterHendelseTask(ProsessTaskTjeneste prosessTaskTjeneste,
Expand All @@ -46,35 +46,33 @@ public void doTask(ProsessTaskData prosessTaskData) {
var dataWrapper = new HendelserDataWrapper(prosessTaskData);
String hendelseId = getHendelseId(dataWrapper);

var inngåendeHendelse = inngåendeHendelseTjeneste.finnHendelseSomErSendtTilSortering(hendelseId);
if (inngåendeHendelse.isEmpty()) {
var inngåendeHendelse = inngåendeHendelseTjeneste.finnHendelseSomErSendtTilSortering(hendelseId).orElse(null);
if (inngåendeHendelse == null) {
LOGGER.warn("Fant ikke InngåendeHendelse for HendelseId {} - kan ikke grovsortere", hendelseId);
return;
}

var hendelsePayload = inngåendeHendelseTjeneste.hentUtPayloadFraInngåendeHendelse(inngåendeHendelse.get());
var hendelsePayload = inngåendeHendelseTjeneste.hentUtPayloadFraInngåendeHendelse(inngåendeHendelse);
var aktørIderForSortering = getAktørIderForSortering(hendelsePayload);
var filtrertAktørIdList = hendelser.grovsorterAktørIder(aktørIderForSortering);

if (!hendelseErRelevant(filtrertAktørIdList, hendelsePayload)) {
LOGGER.info("Ikke-relevant hendelse med hendelseId {} og type {} blir ikke videresendt til FPSAK", hendelsePayload.getHendelseId(),
hendelsePayload.getHendelseType());
inngåendeHendelseTjeneste.markerHendelseSomHåndtertOgFjernPayload(inngåendeHendelse.get());
inngåendeHendelseTjeneste.markerHendelseSomHåndtertOgFjernPayload(inngåendeHendelse);
inngåendeHendelseTjeneste.fjernPayloadTidligereHendelser(inngåendeHendelse);
return;
}

opprettSendHendelseTask(dataWrapper, hendelsePayload);
inngåendeHendelseTjeneste.oppdaterHåndtertStatus(inngåendeHendelse.get(), HåndtertStatusType.GROVSORTERT);
inngåendeHendelseTjeneste.oppdaterHåndtertStatus(inngåendeHendelse, HåndtertStatusType.GROVSORTERT);
LOGGER.info("Opprettet SendHendelseTask for hendelse {}", hendelseId);
}

private String getHendelseId(HendelserDataWrapper dataWrapper) {
var hendelseId = dataWrapper.getHendelseId();
if (hendelseId.isEmpty()) {
throw AbonnentHendelserFeil.prosesstaskPreconditionManglerProperty(dataWrapper.getProsessTaskData().getTaskType(),
HendelserDataWrapper.HENDELSE_ID, dataWrapper.getId());
}
return hendelseId.get();
return dataWrapper.getHendelseId()
.orElseThrow(() -> AbonnentHendelserFeil.prosesstaskPreconditionManglerProperty(dataWrapper.getProsessTaskData().getTaskType(),
HendelserDataWrapper.HENDELSE_ID, dataWrapper.getId()));
}

private void opprettSendHendelseTask(HendelserDataWrapper dataWrapper, HendelsePayload hendelsePayload) {
Expand All @@ -88,9 +86,4 @@ private boolean hendelseErRelevant(List<String> aktørIdList, HendelsePayload he
return !Collections.disjoint(hendelsePayload.getAktørIderForSortering(), aktørIdList);
}

@Override
public String toString() {
return getClass().getSimpleName() + " [prosessTaskRepository=" + prosessTaskTjeneste + ", inngåendeHendelseTjeneste="
+ inngåendeHendelseTjeneste + ", hendelser=" + hendelser + "]";
}
}
Loading

0 comments on commit 4196018

Please sign in to comment.