From f7701af9d00d8396bff6e5c80ae8fcf09bc502b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristen=20H=C3=A6rum?= Date: Mon, 13 Jan 2025 15:43:42 +0100 Subject: [PATCH] Bugfix/sivilstand opphoerstidspunkt etter gyldighetstidspunkt (#3716) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Oppdaterer partners sivilstand ved dødsfall --- .../PdlForvalterApplicationStarter.java | 2 +- .../controller/PersonController.java | 6 --- .../forvalter/service/DoedsfallService.java | 30 +++++++++++-- .../service/MetadataTidspunkterService.java | 44 ++++++++++--------- .../service/PersonArtifactService.java | 2 +- .../data/pdlforvalter/v1/SivilstandDTO.java | 11 +++++ 6 files changed, 64 insertions(+), 31 deletions(-) diff --git a/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/PdlForvalterApplicationStarter.java b/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/PdlForvalterApplicationStarter.java index d4f60c563e8..45f34416ff3 100644 --- a/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/PdlForvalterApplicationStarter.java +++ b/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/PdlForvalterApplicationStarter.java @@ -10,4 +10,4 @@ public static void main(String[] args) { SpringApplication.run(PdlForvalterApplicationStarter.class, args); } -} \ No newline at end of file +} diff --git a/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/controller/PersonController.java b/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/controller/PersonController.java index 0174785101a..086ef20b2dc 100644 --- a/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/controller/PersonController.java +++ b/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/controller/PersonController.java @@ -51,7 +51,6 @@ import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -72,7 +71,6 @@ public class PersonController { private final ArtifactUpdateService artifactUpdateService; private final MetadataTidspunkterService metadataTidspunkterService; - @ResponseBody @GetMapping @Operation(description = "Hent person(er) med angitt(e) ident(er) eller alle") public List getPerson(@Parameter(description = "Ident(er) på personer som skal hentes") @@ -96,7 +94,6 @@ public List getPerson(@Parameter(description = "Ident(er) på per .build()); } - @ResponseBody @PostMapping @Operation(description = "Opprett person basert på angitte informasjonselementer, minimum er {}") public String createPerson(@RequestBody BestillingRequestDTO request) { @@ -104,7 +101,6 @@ public String createPerson(@RequestBody BestillingRequestDTO request) { return personService.createPerson(request); } - @ResponseBody @PutMapping(value = "/{ident}") @Operation(description = "Oppdater testperson basert på angitte informasjonselementer") public String updatePerson(@Parameter(description = "Ident på testperson som skal oppdateres") @@ -119,7 +115,6 @@ public String updatePerson(@Parameter(description = "Ident på testperson som sk } @Transactional - @ResponseBody @PostMapping(value = "/{ident}/ordre") @Operation(description = "Send angitte testperson(er) med relasjoner til PDL") public OrdreResponseDTO sendPersonTilPdl(@Parameter(description = "Ident på hovedperson som skal sendes") @@ -132,7 +127,6 @@ public OrdreResponseDTO sendPersonTilPdl(@Parameter(description = "Ident på hov return pdlOrdreService.send(ident, ekskluderEksternePersoner); } - @ResponseBody @DeleteMapping(value = "/{ident}") @Operation(description = "Slett person") public void deletePerson(@Parameter(description = "Slett angitt testperson med relasjoner") diff --git a/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/DoedsfallService.java b/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/DoedsfallService.java index e1136d8a299..1f8c1db8127 100644 --- a/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/DoedsfallService.java +++ b/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/DoedsfallService.java @@ -1,11 +1,13 @@ package no.nav.pdl.forvalter.service; +import lombok.RequiredArgsConstructor; +import no.nav.pdl.forvalter.database.repository.PersonRepository; import no.nav.pdl.forvalter.exception.InvalidRequestException; import no.nav.testnav.libs.data.pdlforvalter.v1.DoedsfallDTO; import no.nav.testnav.libs.data.pdlforvalter.v1.PersonDTO; +import no.nav.testnav.libs.data.pdlforvalter.v1.SivilstandDTO; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.Comparator; import java.util.List; @@ -14,11 +16,14 @@ import static no.nav.pdl.forvalter.utils.ArtifactUtils.getMaster; import static no.nav.pdl.forvalter.utils.ArtifactUtils.renumberId; import static org.apache.commons.lang3.BooleanUtils.isTrue; +import static org.apache.commons.lang3.StringUtils.isNotBlank; @Service +@RequiredArgsConstructor public class DoedsfallService implements Validation { private static final String INVALID_DATO_MISSING = "Dødsfall: dødsdato må oppgis"; + private final PersonRepository personRepository; public List convert(PersonDTO person) { @@ -30,14 +35,33 @@ public List convert(PersonDTO person) { } } - person.setDoedsfall(new ArrayList<>(person.getDoedsfall())); - person.getDoedsfall().sort(Comparator.comparing(DoedsfallDTO::getDoedsdato).reversed()); renumberId(person.getDoedsfall()); + handle(person); + return person.getDoedsfall(); } + private void handle(PersonDTO person) { + + if (!person.getSivilstand().isEmpty() && + isNotBlank(person.getSivilstand().getFirst().getRelatertVedSivilstand()) && + person.getSivilstand().getFirst().isGift()) { + + personRepository.findByIdent(person.getSivilstand().getFirst().getRelatertVedSivilstand()) + .ifPresent(person1 -> + person1.getPerson().getSivilstand().addFirst( + SivilstandDTO.builder() + .type(person.getSivilstand().getFirst().getGjenlevendeSivilstand()) + .sivilstandsdato(person.getDoedsfall().getFirst().getDoedsdato()) + .kilde(person.getDoedsfall().getFirst().getKilde()) + .master(person.getDoedsfall().getFirst().getMaster()) + .id(person1.getPerson().getSivilstand().size() + 1) + .build())); + } + } + @Override public void validate(DoedsfallDTO type) { diff --git a/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/MetadataTidspunkterService.java b/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/MetadataTidspunkterService.java index 9f1634245bb..05ad833c01a 100644 --- a/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/MetadataTidspunkterService.java +++ b/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/MetadataTidspunkterService.java @@ -1,6 +1,7 @@ package no.nav.pdl.forvalter.service; import lombok.RequiredArgsConstructor; +import ma.glasnost.orika.MapperFacade; import no.nav.pdl.forvalter.database.model.DbPerson; import no.nav.pdl.forvalter.database.model.DbRelasjon; import no.nav.pdl.forvalter.database.repository.PersonRepository; @@ -30,7 +31,7 @@ import java.time.LocalDateTime; import java.util.Comparator; import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import static java.util.Objects.isNull; import static java.util.Objects.nonNull; @@ -40,6 +41,7 @@ public class MetadataTidspunkterService { private final PersonRepository personRepository; + private final MapperFacade mapperFacade; public void updateMetadata(String ident) { @@ -221,31 +223,33 @@ private static void fixSikkerhetstiltak(SikkerhetstiltakDTO sikkerhetstiltakDTO) sikkerhetstiltakDTO.getFolkeregistermetadata().setOpphoerstidspunkt(sikkerhetstiltakDTO.getGyldigTilOgMed()); } - private static void fixSivilstand(PersonDTO person) { + private void fixSivilstand(PersonDTO person) { person.getSivilstand().sort(Comparator.comparing(SivilstandDTO::getId).reversed()); - var counter = new AtomicInteger(0); - person.getSivilstand() + var sivilstandCopy = mapperFacade.mapAsList(person.getSivilstand(), SivilstandDTO.class); + var dato = new AtomicReference<>(LocalDateTime.now()); + + sivilstandCopy .forEach(sivilstand -> { - fixFolkeregisterMetadata(sivilstand); - if (isNull(sivilstand.getFolkeregistermetadata().getGyldighetstidspunkt())) { - - LocalDateTime gyldighetstidspunkt; - if (nonNull(sivilstand.getSivilstandsdato())) { - gyldighetstidspunkt = sivilstand.getSivilstandsdato(); - } else if (nonNull(sivilstand.getBekreftelsesdato())) { - gyldighetstidspunkt = sivilstand.getBekreftelsesdato(); - } else { - gyldighetstidspunkt = LocalDateTime.now().minusYears(counter.incrementAndGet()); - } - sivilstand.getFolkeregistermetadata().setGyldighetstidspunkt(gyldighetstidspunkt); - } - if (isNull(sivilstand.getFolkeregistermetadata().getAjourholdstidspunkt())) { - sivilstand.getFolkeregistermetadata().setAjourholdstidspunkt( - sivilstand.getFolkeregistermetadata().getGyldighetstidspunkt()); + if (isNull(sivilstand.getSivilstandsdato()) && isNull(sivilstand.getBekreftelsesdato())) { + + sivilstand.setSivilstandsdato(dato.get()); + dato.set(dato.get().minusYears(1)); + + } else { + var sivilstandsdato = nonNull(sivilstand.getSivilstandsdato()) ? sivilstand.getSivilstandsdato() : sivilstand.getBekreftelsesdato(); + sivilstand.setSivilstandsdato(sivilstandsdato); + dato.set(sivilstandsdato.minusYears(1)); } }); + + for (int i = 0; i < person.getSivilstand().size(); i++) { + + var sivilstand = person.getSivilstand().get(i); + fixFolkeregisterMetadata(sivilstand); + sivilstand.getFolkeregistermetadata().setAjourholdstidspunkt(sivilstandCopy.get(i).getSivilstandsdato()); + } } private static void fixStatsborgerskap(StatsborgerskapDTO statsborgerskapDTO) { diff --git a/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/PersonArtifactService.java b/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/PersonArtifactService.java index 0d43ab87c88..16d0927b719 100644 --- a/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/PersonArtifactService.java +++ b/apps/pdl-forvalter/src/main/java/no/nav/pdl/forvalter/service/PersonArtifactService.java @@ -55,6 +55,7 @@ public PersonDTO buildPerson(PersonDTO person, Boolean relaxed) { person.setUtflytting(utflyttingService.convert(person)); person.setOpphold(oppholdService.convert(person.getOpphold())); person.setTilrettelagtKommunikasjon(tilrettelagtKommunikasjonService.convert(person.getTilrettelagtKommunikasjon())); + person.setSivilstand(sivilstandService.convert(person)); person.setDoedsfall(doedsfallService.convert(person)); person.setFullmakt(fullmaktService.convert(person)); person.setKontaktadresse(kontaktAdresseService.convert(person, relaxed)); @@ -62,7 +63,6 @@ public PersonDTO buildPerson(PersonDTO person, Boolean relaxed) { person.setVergemaal(vergemaalService.convert(person)); person.setFalskIdentitet(falskIdentitetService.convert(person)); person.setKontaktinformasjonForDoedsbo(kontaktinformasjonForDoedsboService.convert(person)); - person.setSivilstand(sivilstandService.convert(person)); person.setForelderBarnRelasjon(forelderBarnRelasjonService.convert(person)); person.setForeldreansvar(foreldreansvarService.convert(person)); person.setDoedfoedtBarn(doedfoedtBarnService.convert(person.getDoedfoedtBarn())); diff --git a/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/pdlforvalter/v1/SivilstandDTO.java b/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/pdlforvalter/v1/SivilstandDTO.java index 9181ff8bdd1..6a31af48df6 100644 --- a/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/pdlforvalter/v1/SivilstandDTO.java +++ b/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/pdlforvalter/v1/SivilstandDTO.java @@ -96,6 +96,17 @@ public boolean hasRelatertVedSivilstand() { } @JsonIgnore + public Sivilstand getGjenlevendeSivilstand() { + + return switch (type) { + case GIFT -> Sivilstand.ENKE_ELLER_ENKEMANN; + case REGISTRERT_PARTNER -> Sivilstand.GJENLEVENDE_PARTNER; + default -> type; + }; + } + + @JsonIgnore + @Override public String getIdentForRelasjon() { return relatertVedSivilstand; }