Skip to content

Commit 8d96f4a

Browse files
Håndterer ForelderBarnRelasjon (som fødselshendelse) fra PDL. (#120)
* Refaktorerer fødselshendelser. Mottar hendelse om at søker har fått barn, med ident på barnet. Slår opp person barnet for å hente fødselsdato som blir aktuell dato for saken. * ung-sak.openapi.json updated by build pipeline skip-checks:true * Fikser håndtering av HarFåttBarnHendelse. * Håndterer ForelderBarnRelasjon (som fødselshendelse) fra PDL. * Bytter tilbake til temurin * ung-sak.openapi.json updated by build pipeline skip-checks:true * Forenkler metodenavn etter PR-review * Fjerner kommentar etter PR-review * Gjør det klart at PDL hendelser håndteres i HåndterPdlHendelseTask. * Støtter medmor og forenkler rollesjekk for foreldre. * Endrer FødselsHendelse -> FødselHendelse * ung-sak.openapi.json updated by build pipeline skip-checks:true * Fikser navn på streamId. * Refaktorer og forenkler kafkaoppsett. * Legger til helsesjekk for PDL leessh stream * Rydder opp i kafka settings og fikser Personhendelse * Bruker egen VTP avro serde for leesah. * Rydder opp Vtp Avro oppsett. Fikser Personhendelse.avdl til å matche definisjon i VTP. * Utfører filterkall som bruker EM med nytt request context. * ung-sak.openapi.json updated by build pipeline skip-checks:true * Rydder opp i kafka settings. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 19379c3 commit 8d96f4a

File tree

42 files changed

+978
-1274
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+978
-1274
lines changed

domenetjenester/behandling/src/main/java/no/nav/ung/sak/behandling/hendelse/produksjonsstyring/ProsessEventKafkaProducer.java

+6-8
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package no.nav.ung.sak.behandling.hendelse.produksjonsstyring;
22

3-
import org.apache.kafka.clients.producer.ProducerRecord;
4-
import org.apache.kafka.clients.producer.RecordMetadata;
5-
import org.slf4j.Logger;
6-
import org.slf4j.LoggerFactory;
7-
83
import jakarta.enterprise.context.ApplicationScoped;
94
import jakarta.inject.Inject;
105
import no.nav.k9.felles.integrasjon.kafka.GenerellKafkaProducer;
116
import no.nav.k9.felles.integrasjon.kafka.KafkaPropertiesBuilder;
127
import no.nav.k9.felles.konfigurasjon.env.Environment;
138
import no.nav.k9.felles.konfigurasjon.konfig.KonfigVerdi;
9+
import org.apache.kafka.clients.producer.ProducerRecord;
10+
import org.apache.kafka.clients.producer.RecordMetadata;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
1413

1514
@ApplicationScoped
1615
public class ProsessEventKafkaProducer {
@@ -27,8 +26,7 @@ public ProsessEventKafkaProducer() {
2726
@Inject
2827
public ProsessEventKafkaProducer(@KonfigVerdi("kafka.aksjonspunkthendelse.topic") String topic,
2928
@KonfigVerdi("kafka.aksjonspunkthendelse.aiven.topic") String topicV2,
30-
@KonfigVerdi(value = "KAFKA_BROKERS") String bootstrapServersAiven,
31-
@KonfigVerdi("bootstrap.servers") String bootstrapServersOnPrem,
29+
@KonfigVerdi(value = "KAFKA_BROKERS") String kafkaBrokers,
3230
@KonfigVerdi(value = "KAFKA_TRUSTSTORE_PATH", required = false) String trustStorePath,
3331
@KonfigVerdi(value = "KAFKA_CREDSTORE_PASSWORD", required = false) String trustStorePassword,
3432
@KonfigVerdi(value = "KAFKA_KEYSTORE_PATH", required = false) String keyStoreLocation,
@@ -39,7 +37,7 @@ public ProsessEventKafkaProducer(@KonfigVerdi("kafka.aksjonspunkthendelse.topic"
3937

4038
boolean aivenEnabled = !Environment.current().isLocal(); //har ikke støtte i vtp
4139
String _topicName = aivenEnabled ? topicV2 : topic;
42-
String _bootstrapServer = aivenEnabled ? bootstrapServersAiven : bootstrapServersOnPrem;
40+
String _bootstrapServer = kafkaBrokers;
4341

4442
var builder = new KafkaPropertiesBuilder()
4543
.clientId("KP-" + _topicName).bootstrapServers(_bootstrapServer);

domenetjenester/hendelsemottak/src/main/java/no/nav/ung/sak/hendelsemottak/tjenester/FinnFagsakerForAktørTjeneste.java

+28-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package no.nav.ung.sak.hendelsemottak.tjenester;
22

3-
import java.time.LocalDate;
4-
import java.util.List;
5-
import java.util.Optional;
6-
73
import jakarta.enterprise.context.Dependent;
84
import jakarta.inject.Inject;
95
import jakarta.persistence.EntityManager;
@@ -14,6 +10,10 @@
1410
import no.nav.ung.sak.domene.typer.tid.AbstractLocalDateInterval;
1511
import no.nav.ung.sak.typer.AktørId;
1612

13+
import java.time.LocalDate;
14+
import java.util.List;
15+
import java.util.Optional;
16+
1717
@Dependent
1818
public class FinnFagsakerForAktørTjeneste {
1919

@@ -44,9 +44,33 @@ public class FinnFagsakerForAktørTjeneste {
4444
return query.getResultList();
4545
}
4646

47+
private boolean finnesSakMedBarn(AktørId barnAktørId) {
48+
Query query = entityManager.createNativeQuery(
49+
"SELECT f.* FROM GR_PERSONOPPLYSNING gr " +
50+
"inner join PO_INFORMASJON informasjon on informasjon.id = gr.registrert_informasjon_id " +
51+
"inner join PO_RELASJON relasjon on relasjon.po_informasjon_id = informasjon.id " +
52+
"inner join BEHANDLING b on gr.behandling_id = b.id " +
53+
"inner join FAGSAK f on b.fagsak_id = f.id " +
54+
"WHERE f.ytelse_type != 'OBSOLETE'" +
55+
"and relasjon.relasjonsrolle = :relasjonsrolle " +
56+
"and relasjon.til_aktoer_id = :aktoer_id ",
57+
Fagsak.class)
58+
.setParameter("relasjonsrolle", RelasjonsRolleType.BARN.getKode())
59+
.setParameter("aktoer_id", barnAktørId.getId());
60+
61+
return !query.getResultList().isEmpty();
62+
}
63+
4764
public Optional<Fagsak> hentRelevantFagsakForAktørSomSøker(AktørId aktør, LocalDate relevantDato) {
4865
return fagsakRepository.hentForBruker(aktør).stream().filter(f -> f.getPeriode().overlapper(relevantDato, AbstractLocalDateInterval.TIDENES_ENDE)).findFirst();
4966
}
5067

68+
private boolean finnesSakMedSøker(AktørId søkerAktørId) {
69+
return !fagsakRepository.hentForBruker(søkerAktørId).isEmpty();
70+
}
71+
5172

73+
public boolean harRelevantFagsakForAktør(AktørId aktør) {
74+
return finnesSakMedSøker(aktør) || finnesSakMedBarn(aktør);
75+
}
5276
}

domenetjenester/hendelsemottak/src/main/java/no/nav/ung/sak/hendelsemottak/tjenester/HendelsemottakTjeneste.java

+27-27
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
package no.nav.ung.sak.hendelsemottak.tjenester;
22

3-
import java.time.LocalDate;
4-
import java.util.ArrayList;
5-
import java.util.List;
6-
import java.util.Map;
7-
import java.util.stream.Collectors;
8-
9-
import org.slf4j.Logger;
10-
import org.slf4j.LoggerFactory;
11-
123
import jakarta.enterprise.context.ApplicationScoped;
134
import jakarta.enterprise.inject.Any;
145
import jakarta.enterprise.inject.Instance;
156
import jakarta.inject.Inject;
7+
import no.nav.k9.prosesstask.api.ProsessTaskData;
168
import no.nav.ung.kodeverk.behandling.BehandlingÅrsakType;
179
import no.nav.ung.kodeverk.hendelser.HendelseType;
18-
import no.nav.k9.prosesstask.api.ProsessTaskData;
1910
import no.nav.ung.sak.behandling.revurdering.OpprettRevurderingEllerOpprettDiffTask;
2011
import no.nav.ung.sak.behandlingslager.behandling.Behandling;
2112
import no.nav.ung.sak.behandlingslager.behandling.repository.BehandlingRepository;
2213
import no.nav.ung.sak.behandlingslager.fagsak.Fagsak;
2314
import no.nav.ung.sak.behandlingslager.fagsak.FagsakProsessTaskRepository;
2415
import no.nav.ung.sak.kontrakt.hendelser.Hendelse;
16+
import no.nav.ung.sak.typer.Periode;
17+
import org.slf4j.Logger;
18+
import org.slf4j.LoggerFactory;
19+
20+
import java.time.LocalDate;
21+
import java.util.ArrayList;
22+
import java.util.List;
23+
import java.util.Map;
24+
import java.util.stream.Collectors;
2525

2626
@ApplicationScoped
2727
public class HendelsemottakTjeneste {
@@ -46,26 +46,12 @@ public HendelsemottakTjeneste(@Any Instance<FagsakerTilVurderingUtleder> utleder
4646
this.fagsakProsessTaskRepository = fagsakProsessTaskRepository;
4747
}
4848

49-
private LocalDate utledDato(LocalDate fagsakSluttdato, Hendelse payload) {
50-
var hendelseDato = payload.getHendelsePeriode().getTom();
51-
if (hendelseDato.isBefore(fagsakSluttdato)) {
52-
return fagsakSluttdato;
53-
}
54-
return hendelseDato;
55-
}
56-
57-
private List<FagsakerTilVurderingUtleder> finnMatchendeUtledere(HendelseType hendelseType) {
58-
var matchendeUtledere = HendelseTypeRef.Lookup.list(utledere, hendelseType.getKode());
59-
return new ArrayList<>(matchendeUtledere);
60-
}
61-
6249
public Map<Fagsak, BehandlingÅrsakType> finnFagsakerTilVurdering(Hendelse hendelse) {
63-
var fagsakerMedBehandlingÅrsak = finnMatchendeUtledere(hendelse.getHendelseType())
50+
return finnMatchendeUtledere(hendelse.getHendelseType())
6451
.stream()
6552
.map(utleder -> utleder.finnFagsakerTilVurdering(hendelse))
6653
.flatMap(map -> map.entrySet().stream())
6754
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
68-
return fagsakerMedBehandlingÅrsak;
6955
}
7056

7157
public Map<Fagsak, BehandlingÅrsakType> mottaHendelse(Hendelse payload) {
@@ -80,8 +66,10 @@ private List<FagsakerTilVurderingUtleder> finnMatchendeUtledere(HendelseType hen
8066

8167
ProsessTaskData tilRevurderingTaskData = ProsessTaskData.forProsessTask(OpprettRevurderingEllerOpprettDiffTask.class);
8268
tilRevurderingTaskData.setProperty(OpprettRevurderingEllerOpprettDiffTask.BEHANDLING_ÅRSAK, behandlingÅrsak.getKode());
83-
tilRevurderingTaskData.setProperty(OpprettRevurderingEllerOpprettDiffTask.PERIODE_FOM, payload.getHendelsePeriode().getFom().toString());
84-
tilRevurderingTaskData.setProperty(OpprettRevurderingEllerOpprettDiffTask.PERIODE_TOM, utledDato(fagsak.getPeriode().getTomDato(), payload).toString());
69+
70+
Periode hendelsePeriode = payload.getHendelsePeriode();
71+
tilRevurderingTaskData.setProperty(OpprettRevurderingEllerOpprettDiffTask.PERIODE_FOM, hendelsePeriode.getFom().toString());
72+
tilRevurderingTaskData.setProperty(OpprettRevurderingEllerOpprettDiffTask.PERIODE_TOM, utledDato(fagsak.getPeriode().getTomDato(), hendelsePeriode).toString());
8573
var sisteBehandling = behandlingRepository.hentSisteYtelsesBehandlingForFagsakId(fagsak.getId());
8674
if (sisteBehandling.isPresent()) {
8775
Behandling tilRevurdering = sisteBehandling.get();
@@ -95,5 +83,17 @@ private List<FagsakerTilVurderingUtleder> finnMatchendeUtledere(HendelseType hen
9583
return kandidaterTilRevurdering;
9684
}
9785

86+
private LocalDate utledDato(LocalDate fagsakSluttdato, Periode hendelsePeriode) {
87+
var hendelseDato = hendelsePeriode.getTom();
88+
if (hendelseDato.isBefore(fagsakSluttdato)) {
89+
return fagsakSluttdato;
90+
}
91+
return hendelseDato;
92+
}
93+
94+
private List<FagsakerTilVurderingUtleder> finnMatchendeUtledere(HendelseType hendelseType) {
95+
var matchendeUtledere = HendelseTypeRef.Lookup.list(utledere, hendelseType.getKode());
96+
return new ArrayList<>(matchendeUtledere);
97+
}
9898
}
9999

domenetjenester/hendelsemottak/src/main/java/no/nav/ung/sak/hendelsemottak/tjenester/PdlDødsfallFagsakTilVurderingUtleder.java

+29-33
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,8 @@
11
package no.nav.ung.sak.hendelsemottak.tjenester;
22

3-
import java.time.LocalDate;
4-
import java.time.format.DateTimeFormatter;
5-
import java.util.HashMap;
6-
import java.util.List;
7-
import java.util.Map;
8-
import java.util.Objects;
9-
import java.util.Optional;
10-
11-
import org.slf4j.Logger;
12-
import org.slf4j.LoggerFactory;
13-
143
import jakarta.enterprise.context.ApplicationScoped;
154
import jakarta.inject.Inject;
16-
import no.nav.k9.felles.integrasjon.pdl.Doedsfall;
17-
import no.nav.k9.felles.integrasjon.pdl.DoedsfallResponseProjection;
18-
import no.nav.k9.felles.integrasjon.pdl.ForelderBarnRelasjonResponseProjection;
19-
import no.nav.k9.felles.integrasjon.pdl.HentPersonQueryRequest;
20-
import no.nav.k9.felles.integrasjon.pdl.PdlKlient;
21-
import no.nav.k9.felles.integrasjon.pdl.Person;
22-
import no.nav.k9.felles.integrasjon.pdl.PersonResponseProjection;
5+
import no.nav.k9.felles.integrasjon.pdl.*;
236
import no.nav.ung.kodeverk.behandling.BehandlingÅrsakType;
247
import no.nav.ung.sak.behandlingslager.behandling.Behandling;
258
import no.nav.ung.sak.behandlingslager.behandling.personopplysning.PersonopplysningEntitet;
@@ -30,13 +13,19 @@
3013
import no.nav.ung.sak.behandlingslager.perioder.UngdomsprogramPeriodeRepository;
3114
import no.nav.ung.sak.kontrakt.hendelser.Hendelse;
3215
import no.nav.ung.sak.typer.AktørId;
16+
import org.slf4j.Logger;
17+
import org.slf4j.LoggerFactory;
18+
19+
import java.time.LocalDate;
20+
import java.time.format.DateTimeFormatter;
21+
import java.util.*;
3322

3423
@ApplicationScoped
3524
@HendelseTypeRef("PDL_DØDSFALL")
3625
public class PdlDødsfallFagsakTilVurderingUtleder implements FagsakerTilVurderingUtleder {
3726

3827

39-
private static final Logger logger = LoggerFactory.getLogger(PdlFødselFagsakTilVurderingUtleder.class);
28+
private static final Logger logger = LoggerFactory.getLogger(PdlDødsfallFagsakTilVurderingUtleder.class);
4029
private BehandlingRepository behandlingRepository;
4130
private UngdomsprogramPeriodeRepository ungdomsprogramPeriodeRepository;
4231
private FinnFagsakerForAktørTjeneste finnFagsakerForAktørTjeneste;
@@ -72,23 +61,30 @@ public class PdlDødsfallFagsakTilVurderingUtleder implements FagsakerTilVurderi
7261
var personInfo = hentPersonInformasjon(aktør);
7362
var aktuellDato = finnAktuellDato(personInfo);
7463

75-
// Sjekker om det gjelder dødshendelse for søker
76-
var fagsakForAktør = finnFagsakerForAktørTjeneste.hentRelevantFagsakForAktørSomSøker(aktør, aktuellDato);
77-
if (fagsakForAktør.isPresent()) {
78-
if (deltarIProgramPåHendelsedato(fagsakForAktør.get(), aktuellDato, hendelseId) && erNyInformasjonIHendelsen(fagsakForAktør.get(), aktør, aktuellDato, hendelseId)) {
79-
fagsakÅrsakMap.put(fagsakForAktør.get(), BehandlingÅrsakType.RE_HENDELSE_DØD_FORELDER);
80-
break;
81-
}
82-
}
64+
fagsakÅrsakMap.putAll(finnPåvirketFagsak(aktør, aktuellDato, hendelseId));
65+
}
66+
67+
return fagsakÅrsakMap;
68+
}
69+
70+
private HashMap<Fagsak, BehandlingÅrsakType> finnPåvirketFagsak(AktørId aktør, LocalDate aktuellDato, String hendelseId) {
71+
var fagsakÅrsakMap = new HashMap<Fagsak, BehandlingÅrsakType>();
8372

84-
// Sjekker om det gjelder dødshendelse for barn av søker
85-
finnFagsakerForAktørTjeneste.hentRelevantFagsakForAktørSomBarnAvSøker(aktør, aktuellDato)
86-
.stream()
87-
.filter(f -> deltarIProgramPåHendelsedato(f, aktuellDato, hendelseId))
88-
.filter(f -> erNyInformasjonIHendelsen(f, aktør, aktuellDato, hendelseId))
89-
.forEach(f -> fagsakÅrsakMap.put(f, BehandlingÅrsakType.RE_HENDELSE_DØD_BARN));
73+
// Sjekker om det gjelder dødshendelse for søker
74+
var fagsakForAktør = finnFagsakerForAktørTjeneste.hentRelevantFagsakForAktørSomSøker(aktør, aktuellDato);
75+
if (fagsakForAktør.isPresent()) {
76+
if (deltarIProgramPåHendelsedato(fagsakForAktør.get(), aktuellDato, hendelseId) && erNyInformasjonIHendelsen(fagsakForAktør.get(), aktør, aktuellDato, hendelseId)) {
77+
fagsakÅrsakMap.put(fagsakForAktør.get(), BehandlingÅrsakType.RE_HENDELSE_DØD_FORELDER);
78+
}
9079
}
9180

81+
// Sjekker om det gjelder dødshendelse for barn av søker
82+
finnFagsakerForAktørTjeneste.hentRelevantFagsakForAktørSomBarnAvSøker(aktør, aktuellDato)
83+
.stream()
84+
.filter(f -> deltarIProgramPåHendelsedato(f, aktuellDato, hendelseId))
85+
.filter(f -> erNyInformasjonIHendelsen(f, aktør, aktuellDato, hendelseId))
86+
.forEach(f -> fagsakÅrsakMap.put(f, BehandlingÅrsakType.RE_HENDELSE_DØD_BARN));
87+
9288
return fagsakÅrsakMap;
9389
}
9490

0 commit comments

Comments
 (0)