From a4ce921f8c763b97a2133cb2af0a36a55f2b9cfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristen=20H=C3=A6rum?= Date: Mon, 2 Sep 2024 15:23:36 +0200 Subject: [PATCH 1/2] Rydde opplysningstype foedsel (#3603) Rydde opplysningstype foedsel --- .../testnorgePage/search/partials/Alder.tsx | 18 +- .../main/js/src/pages/testnorgePage/utils.tsx | 2 +- .../personsearchservice/domain/Person.java | 9 +- ...edselModel.java => FoedselsdatoModel.java} | 2 +- .../model/HentPersonModel.java | 2 +- .../service/utils/AlderUtils.java | 10 +- .../consumer/v1/PdlApiConsumer.java | 4 +- .../consumer/v1/PdlTestdataConsumer.java | 2 +- ...d.java => OpprettFoedselsdatoCommand.java} | 10 +- .../{FoedselDTO.java => FoedselsdatoDTO.java} | 2 +- .../{Foedsel.java => Foedselsdato.java} | 2 +- .../consumer/v1/pdl/graphql/HentPerson.java | 27 +- .../consumer/v1/pdl/graphql/Kjoenn.java | 14 + .../apps/personservice/domain/Person.java | 12 +- .../main/resources/pdl/pdl-api-schema.graphql | 6 + .../resources/pdl/pdlPerson2Query.graphql | 13 - .../main/resources/pdl/pdlPersonQuery.graphql | 2 +- .../src/main/resources/pdl/pdlQuery.graphql | 3 +- .../main/resources/pdl/pdlbolkquery.graphql | 13 - .../resources/pdlperson/graphql.config.yml | 8 + .../pdlperson/pdl-api-schema.graphql | 949 ++++++++++++++++++ .../main/resources/pdlperson/pdlquery.graphql | 5 +- .../consumer/response/pdl/PdlPerson.java | 15 +- .../service/ArenaAapService.java | 2 +- .../service/ArenaDagpengerService.java | 4 +- .../service/IdentService.java | 18 +- .../service/PensjonService.java | 2 +- .../src/main/resources/application-dev.yml | 5 - .../resources/pdlperson/graphql.config.yml | 8 + .../pdlperson/pdl-api-schema.graphql | 949 ++++++++++++++++++ .../resources/pdlperson/pdlbolkquery.graphql | 5 +- .../main/resources/pdlperson/pdlquery.graphql | 5 +- .../service/ArenaAapServiceTest.java | 16 +- .../service/PensjonServiceTest.java | 6 +- .../test/resources/files/pdl/pdlperson.json | 5 +- .../resources/files/pdl/pdlpersonbolk.json | 2 +- .../files/search/single_search_response.json | 2 +- .../{FoedselDTO.java => FoedselsdatoDTO.java} | 2 +- .../dto/personsearchservice/v1/PersonDTO.java | 2 +- ...selSearch.java => FoedselsdatoSearch.java} | 2 +- .../v1/search/PersonSearch.java | 4 +- 41 files changed, 2028 insertions(+), 141 deletions(-) rename apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/model/{FoedselModel.java => FoedselsdatoModel.java} (83%) rename apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/command/{OpprettFoedselCommand.java => OpprettFoedselsdatoCommand.java} (86%) rename apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/{FoedselDTO.java => FoedselsdatoDTO.java} (92%) rename apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/{Foedsel.java => Foedselsdato.java} (87%) create mode 100644 apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/Kjoenn.java create mode 100644 apps/synt-sykemelding-api/src/main/resources/pdlperson/graphql.config.yml create mode 100644 apps/synt-sykemelding-api/src/main/resources/pdlperson/pdl-api-schema.graphql create mode 100644 apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/graphql.config.yml create mode 100644 apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdl-api-schema.graphql rename libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/{FoedselDTO.java => FoedselsdatoDTO.java} (90%) rename libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/search/{FoedselSearch.java => FoedselsdatoSearch.java} (89%) diff --git a/apps/dolly-frontend/src/main/js/src/pages/testnorgePage/search/partials/Alder.tsx b/apps/dolly-frontend/src/main/js/src/pages/testnorgePage/search/partials/Alder.tsx index 72b3707d55c..d994fc73d3d 100644 --- a/apps/dolly-frontend/src/main/js/src/pages/testnorgePage/search/partials/Alder.tsx +++ b/apps/dolly-frontend/src/main/js/src/pages/testnorgePage/search/partials/Alder.tsx @@ -6,8 +6,8 @@ import { UseFormReturn } from 'react-hook-form/dist/types' const paths = { fra: 'alder.fra', til: 'alder.til', - fom: 'foedsel.fom', - tom: 'foedsel.tom', + fom: 'foedselsdato.fom', + tom: 'foedselsdato.tom', } type Props = { @@ -38,18 +38,8 @@ export const Alder = ({ formMethods }: Props) => ( formMethods.handleSubmit() }} /> - - + + ) diff --git a/apps/dolly-frontend/src/main/js/src/pages/testnorgePage/utils.tsx b/apps/dolly-frontend/src/main/js/src/pages/testnorgePage/utils.tsx index dca54b8f748..6357226cdad 100644 --- a/apps/dolly-frontend/src/main/js/src/pages/testnorgePage/utils.tsx +++ b/apps/dolly-frontend/src/main/js/src/pages/testnorgePage/utils.tsx @@ -6,7 +6,7 @@ export const initialValues = { fra: '', til: '', }, - foedsel: { + foedselsdato: { fom: '', tom: '', }, diff --git a/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/domain/Person.java b/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/domain/Person.java index 8e8ed82547d..900cd610ba0 100644 --- a/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/domain/Person.java +++ b/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/domain/Person.java @@ -1,15 +1,14 @@ package no.nav.registre.testnorge.personsearchservice.domain; import no.nav.registre.testnorge.personsearchservice.model.DoedsfallModel; -import no.nav.registre.testnorge.personsearchservice.model.FoedselModel; +import no.nav.registre.testnorge.personsearchservice.model.FoedselsdatoModel; import no.nav.registre.testnorge.personsearchservice.model.KjoennModel; import no.nav.registre.testnorge.personsearchservice.model.NavnModel; import no.nav.registre.testnorge.personsearchservice.model.Response; -import no.nav.registre.testnorge.personsearchservice.model.SivilstandModel; import no.nav.registre.testnorge.personsearchservice.model.StatsborgerskapModel; import no.nav.registre.testnorge.personsearchservice.model.WithMetadata; import no.nav.testnav.libs.dto.personsearchservice.v1.DoedsfallDTO; -import no.nav.testnav.libs.dto.personsearchservice.v1.FoedselDTO; +import no.nav.testnav.libs.dto.personsearchservice.v1.FoedselsdatoDTO; import no.nav.testnav.libs.dto.personsearchservice.v1.FolkeregisterpersonstatusDTO; import no.nav.testnav.libs.dto.personsearchservice.v1.PersonDTO; import no.nav.testnav.libs.dto.personsearchservice.v1.SivilstandDTO; @@ -73,7 +72,7 @@ private String getEtternavn() { } private LocalDate getFoedselsdato() { - return getCurrent(response.getHentPerson().getFoedsel()).map(FoedselModel::getFoedselsdato).orElse(null); + return getCurrent(response.getHentPerson().getFoedselsdato()).map(FoedselsdatoModel::getFoedselsdato).orElse(null); } private LocalDate getDoedsdato() { @@ -147,7 +146,7 @@ public PersonDTO toDTO() { .ident(getIdent()) .kjoenn(getKjoenn()) .tags(getTags()) - .foedsel(FoedselDTO.builder().foedselsdato(getFoedselsdato()).build()) + .foedselsdato(FoedselsdatoDTO.builder().foedselsdato(getFoedselsdato()).build()) .doedsfall(DoedsfallDTO.builder().doedsdato(getDoedsdato()).build()) .sivilstand(getSivilstand()) .statsborgerskap(toDTO(statsborgerskap)) diff --git a/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/model/FoedselModel.java b/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/model/FoedselsdatoModel.java similarity index 83% rename from apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/model/FoedselModel.java rename to apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/model/FoedselsdatoModel.java index 918a317697a..0f0fbadf94c 100644 --- a/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/model/FoedselModel.java +++ b/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/model/FoedselsdatoModel.java @@ -9,7 +9,7 @@ @Value @AllArgsConstructor @NoArgsConstructor(force = true) -public class FoedselModel implements WithMetadata { +public class FoedselsdatoModel implements WithMetadata { LocalDate foedselsdato; Metadata metadata; } diff --git a/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/model/HentPersonModel.java b/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/model/HentPersonModel.java index 310ec6f751d..bdef5331943 100644 --- a/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/model/HentPersonModel.java +++ b/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/model/HentPersonModel.java @@ -12,7 +12,7 @@ public class HentPersonModel { List navn; List kjoenn; - List foedsel; + List foedselsdato; List doedsfall; List sivilstand; List statsborgerskap; diff --git a/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/service/utils/AlderUtils.java b/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/service/utils/AlderUtils.java index e7c61b07ee1..852521cd90c 100644 --- a/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/service/utils/AlderUtils.java +++ b/apps/person-search-service/src/main/java/no/nav/registre/testnorge/personsearchservice/service/utils/AlderUtils.java @@ -18,11 +18,11 @@ public class AlderUtils { public static void addAlderQueries(BoolQueryBuilder queryBuilder, PersonSearch search) { addAlderQuery(queryBuilder, search); - addFoedselQuery(queryBuilder, search); + addFoedselsdatoQuery(queryBuilder, search); } - private static void addFoedselQuery(BoolQueryBuilder queryBuilder, PersonSearch search) { - Optional.ofNullable(search.getFoedsel()) + private static void addFoedselsdatoQuery(BoolQueryBuilder queryBuilder, PersonSearch search) { + Optional.ofNullable(search.getFoedselsdato()) .ifPresent(value -> { var tom = isNull(value.getTom()) ? LocalDate.now() : value.getTom(); queryFoedselsdato(value.getFom(), tom, queryBuilder); @@ -35,9 +35,9 @@ private static void addAlderQuery(BoolQueryBuilder queryBuilder, PersonSearch se } private static void queryFoedselsdato(LocalDate fom, LocalDate tom, BoolQueryBuilder queryBuilder) { - getBetween(fom, tom, "hentPerson.foedsel.foedselsdato") + getBetween(fom, tom, "hentPerson.foedselsdato.foedselsdato") .ifPresent(rangeQueryBuilder -> queryBuilder.must(QueryBuilders.nestedQuery( - "hentPerson.foedsel", + "hentPerson.foedselsdato", rangeQueryBuilder, ScoreMode.Avg )) diff --git a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/PdlApiConsumer.java b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/PdlApiConsumer.java index 65143c79100..013ee54ef6b 100644 --- a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/PdlApiConsumer.java +++ b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/PdlApiConsumer.java @@ -104,7 +104,7 @@ private boolean isPresent(String ident, PdlAktoer pdlAktoer, String miljoe, Set< var person = pdlAktoer.getData().getHentPerson(); log.info("Sjekker ident {} i miljø {}, med PDL opplysningId {}, sjekkes for mottatt opplysningId {}", ident, miljoe, nonNull(person) ? - Stream.of(person.getNavn(), person.getFoedsel(), person.getFolkeregisteridentifikator(), person.getFolkeregisterpersonstatus(), person.getBostedsadresse()) + Stream.of(person.getNavn(), person.getFoedselsdato(), person.getKjoenn(), person.getFolkeregisterpersonstatus()) .flatMap(Collection::stream) .map(MetadataDTO::getMetadata) .map(MetadataDTO.Metadata::getOpplysningsId) @@ -117,7 +117,7 @@ private boolean isPresent(String ident, PdlAktoer pdlAktoer, String miljoe, Set< if (nonNull(opplysningId)) { resultat = nonNull(person) && - Stream.of(person.getNavn(), person.getFoedsel(), person.getFolkeregisteridentifikator(), person.getFolkeregisterpersonstatus(), person.getBostedsadresse()) + Stream.of(person.getNavn(), person.getFoedselsdato(), person.getKjoenn(), person.getFolkeregisterpersonstatus()) .flatMap(Collection::stream) .map(MetadataDTO::getMetadata) .map(MetadataDTO.Metadata::getOpplysningsId) diff --git a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/PdlTestdataConsumer.java b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/PdlTestdataConsumer.java index ed8dfdbb406..b8be9ed41ad 100644 --- a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/PdlTestdataConsumer.java +++ b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/PdlTestdataConsumer.java @@ -67,7 +67,7 @@ private void opprettAdresse(Person person, String kilde, AccessToken token) { private void opprettFoedsel(Person person, String kilde, AccessToken token) { person.toFoedselDTO(kilde) - .ifPresent(value -> new OpprettFoedselCommand(webClient, value, token.getTokenValue(), person.getIdent()).call()); + .ifPresent(value -> new OpprettFoedselsdatoCommand(webClient, value, token.getTokenValue(), person.getIdent()).call()); } private void opprettTags(Person person, AccessToken token) { diff --git a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/command/OpprettFoedselCommand.java b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/command/OpprettFoedselsdatoCommand.java similarity index 86% rename from apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/command/OpprettFoedselCommand.java rename to apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/command/OpprettFoedselsdatoCommand.java index da9ac841055..33aac5f9ed9 100644 --- a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/command/OpprettFoedselCommand.java +++ b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/command/OpprettFoedselsdatoCommand.java @@ -1,7 +1,7 @@ package no.nav.testnav.apps.personservice.consumer.v1.command; import lombok.RequiredArgsConstructor; -import no.nav.testnav.apps.personservice.consumer.v1.pdl.FoedselDTO; +import no.nav.testnav.apps.personservice.consumer.v1.pdl.FoedselsdatoDTO; import no.nav.testnav.apps.personservice.consumer.v1.pdl.HendelseDTO; import no.nav.testnav.apps.personservice.consumer.v1.header.PdlHeaders; import no.nav.testnav.libs.commands.utils.WebClientFilter; @@ -16,20 +16,20 @@ import java.util.concurrent.Callable; @RequiredArgsConstructor -public class OpprettFoedselCommand implements Callable> { +public class OpprettFoedselsdatoCommand implements Callable> { private final WebClient webClient; - private final FoedselDTO dto; + private final FoedselsdatoDTO dto; private final String token; private final String ident; @Override public Mono call() { return webClient.post() - .uri("/pdl-testdata/api/v1/bestilling/foedsel") + .uri("/pdl-testdata/api/v1/bestilling/foedselsdato") .accept(MediaType.APPLICATION_JSON) .header(PdlHeaders.NAV_PERSONIDENT, ident) .header(HttpHeaders.AUTHORIZATION, "Bearer " + token) - .body(BodyInserters.fromPublisher(Mono.just(dto), FoedselDTO.class)) + .body(BodyInserters.fromPublisher(Mono.just(dto), FoedselsdatoDTO.class)) .retrieve() .bodyToMono(HendelseDTO.class) .retryWhen(Retry.backoff(3, Duration.ofSeconds(5)) diff --git a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/FoedselDTO.java b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/FoedselsdatoDTO.java similarity index 92% rename from apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/FoedselDTO.java rename to apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/FoedselsdatoDTO.java index 881476cc785..239a953a230 100644 --- a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/FoedselDTO.java +++ b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/FoedselsdatoDTO.java @@ -11,7 +11,7 @@ @Builder @AllArgsConstructor @NoArgsConstructor(force = true) -public class FoedselDTO { +public class FoedselsdatoDTO { Integer foedselsaar; LocalDate foedselsdato; String kilde; diff --git a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/Foedsel.java b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/Foedselsdato.java similarity index 87% rename from apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/Foedsel.java rename to apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/Foedselsdato.java index df16825967a..04c0fe923ac 100644 --- a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/Foedsel.java +++ b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/Foedselsdato.java @@ -11,7 +11,7 @@ @Value @AllArgsConstructor @NoArgsConstructor(force = true) -public class Foedsel extends MetadataDTO { +public class Foedselsdato extends MetadataDTO { LocalDate foedselsdato; } diff --git a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/HentPerson.java b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/HentPerson.java index 35844269932..16cbcf4aad4 100644 --- a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/HentPerson.java +++ b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/HentPerson.java @@ -14,7 +14,8 @@ @NoArgsConstructor(force = true) public class HentPerson { List navn; - List foedsel; + List kjoenn; + List foedselsdato; List bostedsadresse; List folkeregisteridentifikator; List folkeregisterpersonstatus; @@ -27,20 +28,20 @@ public List getNavn() { return navn; } - public List getFoedsel() { + public List getFoedselsdato() { - if (isNull(foedsel)) { - foedsel = new ArrayList<>(); + if (isNull(foedselsdato)) { + foedselsdato = new ArrayList<>(); } - return foedsel; + return foedselsdato; } - public List getBostedsadresse() { + public List getKjoenn() { - if (isNull(bostedsadresse)) { - bostedsadresse = new ArrayList<>(); + if (isNull(kjoenn)) { + kjoenn = new ArrayList<>(); } - return bostedsadresse; + return kjoenn; } public List getFolkeregisteridentifikator() { @@ -51,6 +52,14 @@ public List getFolkeregisteridentifikator() { return folkeregisteridentifikator; } + public List getBostedsadresse() { + + if(isNull(bostedsadresse)) { + bostedsadresse = new ArrayList<>(); + } + return bostedsadresse; + } + public List getFolkeregisterpersonstatus() { if (isNull(folkeregisterpersonstatus)) { diff --git a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/Kjoenn.java b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/Kjoenn.java new file mode 100644 index 00000000000..50c46eb5ea3 --- /dev/null +++ b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/consumer/v1/pdl/graphql/Kjoenn.java @@ -0,0 +1,14 @@ +package no.nav.testnav.apps.personservice.consumer.v1.pdl.graphql; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.Value; + +@EqualsAndHashCode(callSuper = true) +@Value +@AllArgsConstructor +@NoArgsConstructor(force = true) +public class Kjoenn extends MetadataDTO { + String kjoenn; +} diff --git a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/domain/Person.java b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/domain/Person.java index 493b1ae261d..95424b4b649 100644 --- a/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/domain/Person.java +++ b/apps/person-service/src/main/java/no/nav/testnav/apps/personservice/domain/Person.java @@ -5,8 +5,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import no.nav.testnav.apps.personservice.consumer.v1.pdl.FoedselDTO; -import no.nav.testnav.apps.personservice.consumer.v1.pdl.graphql.Foedsel; +import no.nav.testnav.apps.personservice.consumer.v1.pdl.FoedselsdatoDTO; +import no.nav.testnav.apps.personservice.consumer.v1.pdl.graphql.Foedselsdato; import no.nav.testnav.apps.personservice.consumer.v1.pdl.graphql.Folkeregisteridentifikator; import no.nav.testnav.apps.personservice.consumer.v1.pdl.graphql.HentPerson; import no.nav.testnav.apps.personservice.consumer.v1.pdl.graphql.Navn; @@ -45,14 +45,14 @@ public Person(PersonDTO dto) { public Person(PdlPerson pdlPerson) { HentPerson person = pdlPerson.getData().getHentPerson(); Optional navn = person.getNavn().stream().findFirst(); - Optional foedsel = person.getFoedsel().stream().findFirst(); + Optional foedsel = person.getFoedselsdato().stream().findFirst(); ident = person.getFolkeregisteridentifikator() .stream() .findFirst() .map(Folkeregisteridentifikator::getIdentifikasjonsnummer) .orElse(null); - foedselsdato = foedsel.map(Foedsel::getFoedselsdato).orElse(null); + foedselsdato = foedsel.map(Foedselsdato::getFoedselsdato).orElse(null); fornavn = navn.map(Navn::getFornavn).orElse(null); mellomnavn = navn.map(Navn::getMellomnavn).orElse(null); etternavn = navn.map(Navn::getEtternavn).orElse(null); @@ -75,13 +75,13 @@ public PersonDTO toDTO() { .build(); } - public Optional toFoedselDTO(String kilde) { + public Optional toFoedselDTO(String kilde) { if (foedselsdato == null) { return Optional.empty(); } return Optional.of( - FoedselDTO + FoedselsdatoDTO .builder() .foedselsaar(foedselsdato.getYear()) .foedselsdato(foedselsdato) diff --git a/apps/person-service/src/main/resources/pdl/pdl-api-schema.graphql b/apps/person-service/src/main/resources/pdl/pdl-api-schema.graphql index d0209854938..cc4a8c90344 100644 --- a/apps/person-service/src/main/resources/pdl/pdl-api-schema.graphql +++ b/apps/person-service/src/main/resources/pdl/pdl-api-schema.graphql @@ -432,6 +432,11 @@ type Navn { originaltNavn: OriginaltNavn } +type Navspersonidentifikator { + identifikasjonsnummer: String! + metadata: Metadata! +} + type Opphold { folkeregistermetadata: Folkeregistermetadata! metadata: Metadata! @@ -479,6 +484,7 @@ type Person { kontaktadresse(historikk: Boolean = false): [Kontaktadresse!]! kontaktinformasjonForDoedsbo(historikk: Boolean = false): [KontaktinformasjonForDoedsbo!]! navn(historikk: Boolean = false): [Navn!]! + navspersonidentifikator(historikk: Boolean = false): [Navspersonidentifikator!]! opphold(historikk: Boolean = false): [Opphold!]! oppholdsadresse(historikk: Boolean = false): [Oppholdsadresse!]! rettsligHandleevne(historikk: Boolean = false): [RettsligHandleevne!]! diff --git a/apps/person-service/src/main/resources/pdl/pdlPerson2Query.graphql b/apps/person-service/src/main/resources/pdl/pdlPerson2Query.graphql index d0e5586ec6b..0d82bbdf215 100644 --- a/apps/person-service/src/main/resources/pdl/pdlPerson2Query.graphql +++ b/apps/person-service/src/main/resources/pdl/pdlPerson2Query.graphql @@ -346,19 +346,6 @@ query($ident: ID!, $historikk: Boolean!) { ...metadataDetails } }, - foedsel { - foedselsaar, - foedselsdato, - foedeland, - foedested, - foedekommune, - folkeregistermetadata { - ...folkeregistermetadataDetails - } - metadata { - ...metadataDetails - } - }, foedested { foedested, foedekommune, diff --git a/apps/person-service/src/main/resources/pdl/pdlPersonQuery.graphql b/apps/person-service/src/main/resources/pdl/pdlPersonQuery.graphql index cac59339c69..4b4068538ff 100644 --- a/apps/person-service/src/main/resources/pdl/pdlPersonQuery.graphql +++ b/apps/person-service/src/main/resources/pdl/pdlPersonQuery.graphql @@ -6,7 +6,7 @@ query($ident1: ID!) { opplysningsId } } - foedsel { + foedselsdato { metadata { opplysningsId } diff --git a/apps/person-service/src/main/resources/pdl/pdlQuery.graphql b/apps/person-service/src/main/resources/pdl/pdlQuery.graphql index 0d940372b26..e3eb68b9eb5 100644 --- a/apps/person-service/src/main/resources/pdl/pdlQuery.graphql +++ b/apps/person-service/src/main/resources/pdl/pdlQuery.graphql @@ -17,8 +17,9 @@ query ($ident: ID!, $historikk: Boolean) { ...vegadresseDetails } }, - foedsel { + foedselsdato{ foedselsdato + foedselsaar }, folkeregisteridentifikator(historikk: $historikk) { identifikasjonsnummer, diff --git a/apps/person-service/src/main/resources/pdl/pdlbolkquery.graphql b/apps/person-service/src/main/resources/pdl/pdlbolkquery.graphql index 054a824a9ed..e3036e802ad 100644 --- a/apps/person-service/src/main/resources/pdl/pdlbolkquery.graphql +++ b/apps/person-service/src/main/resources/pdl/pdlbolkquery.graphql @@ -353,19 +353,6 @@ query($identer: [ID!]!) { ...metadataDetails } }, - foedsel { - foedselsaar, - foedselsdato, - foedeland, - foedested, - foedekommune, - folkeregistermetadata { - ...folkeregistermetadataDetails - } - metadata { - ...metadataDetails - } - }, foedselsdato { foedselsaar, foedselsdato, diff --git a/apps/synt-sykemelding-api/src/main/resources/pdlperson/graphql.config.yml b/apps/synt-sykemelding-api/src/main/resources/pdlperson/graphql.config.yml new file mode 100644 index 00000000000..1f9a7cdf2a6 --- /dev/null +++ b/apps/synt-sykemelding-api/src/main/resources/pdlperson/graphql.config.yml @@ -0,0 +1,8 @@ +schema: pdl-api-schema.graphql +extensions: + endpoints: + PDL GraphQL Endpoint: + url: https://pdl-api.dev.intern.nav.no/graphql + headers: + user-agent: '' + introspect: false diff --git a/apps/synt-sykemelding-api/src/main/resources/pdlperson/pdl-api-schema.graphql b/apps/synt-sykemelding-api/src/main/resources/pdlperson/pdl-api-schema.graphql new file mode 100644 index 00000000000..cc4a8c90344 --- /dev/null +++ b/apps/synt-sykemelding-api/src/main/resources/pdlperson/pdl-api-schema.graphql @@ -0,0 +1,949 @@ +# This file was generated. Do not edit manually. + +schema { + query: Query +} + +"Indicates an Input Object is a OneOf Input Object." +directive @oneOf on INPUT_OBJECT + +type AdresseCompletionResult { + addressFound: CompletionAdresse + suggestions: [String!]! +} + +type AdresseSearchHit { + matrikkeladresse: MatrikkeladresseResult + score: Float + vegadresse: VegadresseResult +} + +type AdresseSearchResult { + hits: [AdresseSearchHit!]! + pageNumber: Int + totalHits: Int + totalPages: Int +} + +type Adressebeskyttelse { + folkeregistermetadata: Folkeregistermetadata + gradering: AdressebeskyttelseGradering! + metadata: Metadata! +} + +type Bostedsadresse { + angittFlyttedato: Date + coAdressenavn: String + folkeregistermetadata: Folkeregistermetadata + gyldigFraOgMed: DateTime + gyldigTilOgMed: DateTime + matrikkeladresse: Matrikkeladresse + metadata: Metadata! + ukjentBosted: UkjentBosted + utenlandskAdresse: UtenlandskAdresse + vegadresse: Vegadresse +} + +type CompletionAdresse { + matrikkeladresse: MatrikkeladresseResult + vegadresse: VegadresseResult +} + +type DeltBosted { + coAdressenavn: String + folkeregistermetadata: Folkeregistermetadata! + matrikkeladresse: Matrikkeladresse + metadata: Metadata! + sluttdatoForKontrakt: Date + startdatoForKontrakt: Date! + ukjentBosted: UkjentBosted + utenlandskAdresse: UtenlandskAdresse + vegadresse: Vegadresse +} + +type DoedfoedtBarn { + dato: Date + folkeregistermetadata: Folkeregistermetadata! + metadata: Metadata! +} + +type Doedsfall { + doedsdato: Date + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! +} + +" Endring som har blitt utført på opplysningen. F.eks: Opprett -> Korriger -> Korriger" +type Endring { + hendelseId: String! + """ + + Opphavet til informasjonen. I NAV blir dette satt i forbindelse med registrering (f.eks: Sykehuskassan). + Fra Folkeregisteret får vi opphaven til dems opplysning, altså NAV, UDI, Politiet, Skatteetaten o.l.. Fra Folkeregisteret kan det også være tekniske navn som: DSF_MIGRERING, m.m.. + """ + kilde: String! + " Tidspunktet for registrering." + registrert: DateTime! + " Hvem endringen har blitt utført av, ofte saksbehandler (f.eks Z990200), men kan også være system (f.eks srvXXXX). Denne blir satt til \"Folkeregisteret\" for det vi får fra dem." + registrertAv: String! + " Hvilke system endringen har kommet fra (f.eks srvXXX). Denne blir satt til \"FREG\" for det vi får fra Folkeregisteret." + systemkilde: String! + " Hvilke type endring som har blitt utført." + type: Endringstype! +} + +type FalskIdentitet { + erFalsk: Boolean! + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! + rettIdentitetErUkjent: Boolean + rettIdentitetVedIdentifikasjonsnummer: String + rettIdentitetVedOpplysninger: FalskIdentitetIdentifiserendeInformasjon +} + +type FalskIdentitetIdentifiserendeInformasjon { + foedselsdato: Date + kjoenn: KjoennType + personnavn: Personnavn! + statsborgerskap: [String!]! +} + +type Foedested { + foedekommune: String + foedeland: String + foedested: String + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! +} + +type Foedsel { + foedekommune: String + foedeland: String + foedested: String + foedselsaar: Int + foedselsdato: Date + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! +} + +type Foedselsdato { + foedselsaar: Int + foedselsdato: Date + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! +} + +type Folkeregisteridentifikator { + folkeregistermetadata: Folkeregistermetadata! + identifikasjonsnummer: String! + metadata: Metadata! + status: String! + type: String! +} + +type Folkeregistermetadata { + aarsak: String + ajourholdstidspunkt: DateTime + gyldighetstidspunkt: DateTime + kilde: String + opphoerstidspunkt: DateTime + sekvens: Int +} + +type Folkeregisterpersonstatus { + folkeregistermetadata: Folkeregistermetadata! + forenkletStatus: String! + metadata: Metadata! + status: String! +} + +type ForelderBarnRelasjon { + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! + minRolleForPerson: ForelderBarnRelasjonRolle + relatertPersonUtenFolkeregisteridentifikator: RelatertBiPerson + relatertPersonsIdent: String + relatertPersonsRolle: ForelderBarnRelasjonRolle! +} + +type Foreldreansvar { + ansvar: String + ansvarlig: String + ansvarligUtenIdentifikator: RelatertBiPerson + ansvarssubjekt: String + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! +} + +type Fullmakt { + gyldigFraOgMed: Date! + gyldigTilOgMed: Date! + metadata: Metadata! + motpartsPersonident: String! + motpartsRolle: FullmaktsRolle! + omraader: [String!]! +} + +type GeografiskTilknytning { + gtBydel: String + gtKommune: String + gtLand: String + gtType: GtType! + regel: String! +} + +type HentIdenterBolkResult { + code: String! + ident: String! + identer: [IdentInformasjon!] +} + +type HentPersonBolkResult { + code: String! + ident: String! + person: Person +} + +type IdentInformasjon { + gruppe: IdentGruppe! + historisk: Boolean! + ident: String! +} + +type IdentifiserendeInformasjon { + foedselsdato: Date + kjoenn: String + navn: Personnavn + statsborgerskap: [String!] +} + +type Identitetsgrunnlag { + folkeregistermetadata: Folkeregistermetadata! + metadata: Metadata! + status: Identitetsgrunnlagsstatus! +} + +type Identliste { + identer: [IdentInformasjon!]! +} + +type InnflyttingTilNorge { + folkeregistermetadata: Folkeregistermetadata + fraflyttingsland: String + fraflyttingsstedIUtlandet: String + metadata: Metadata! +} + +type KartverketAdresse { + id: Long! + matrikkeladresse: KartverketMatrikkeladresse + vegadresse: KartverketVegadresse +} + +type KartverketBydel { + bydelsnavn: String + bydelsnummer: String +} + +type KartverketFylke { + navn: String + nummer: String +} + +type KartverketGrunnkrets { + grunnkretsnavn: String + grunnkretsnummer: String +} + +type KartverketKommune { + fylke: KartverketFylke + navn: String + nummer: String +} + +type KartverketMatrikkeladresse { + adressetilleggsnavn: String + bydel: KartverketBydel + grunnkrets: KartverketGrunnkrets + kortnavn: String + matrikkelnummer: KartverketMatrikkelnummer + postnummeromraade: KartverketPostnummeromraade + representasjonspunkt: KartverketRepresentasjonspunkt + undernummer: Int +} + +type KartverketMatrikkelnummer { + bruksnummer: Int + festenummer: Int + gaardsnummer: Int + kommunenummer: String + seksjonsnummer: Int +} + +type KartverketPostnummeromraade { + postnummer: String + poststed: String +} + +type KartverketRepresentasjonspunkt { + posisjonskvalitet: Int + x: Float + y: Float + z: Float +} + +type KartverketVeg { + adressekode: Int + adressenavn: String + kommune: KartverketKommune + kortnavn: String + stedsnummer: String +} + +type KartverketVegadresse { + adressetilleggsnavn: String + bokstav: String + bydel: KartverketBydel + grunnkrets: KartverketGrunnkrets + kortnavn: String + nummer: Int + postnummeromraade: KartverketPostnummeromraade + representasjonspunkt: KartverketRepresentasjonspunkt + veg: KartverketVeg +} + +type Kjoenn { + folkeregistermetadata: Folkeregistermetadata + kjoenn: KjoennType + metadata: Metadata! +} + +type Kontaktadresse { + coAdressenavn: String + folkeregistermetadata: Folkeregistermetadata + gyldigFraOgMed: DateTime + gyldigTilOgMed: DateTime + metadata: Metadata! + postadresseIFrittFormat: PostadresseIFrittFormat + postboksadresse: Postboksadresse + type: KontaktadresseType! + utenlandskAdresse: UtenlandskAdresse + utenlandskAdresseIFrittFormat: UtenlandskAdresseIFrittFormat + vegadresse: Vegadresse +} + +type KontaktinformasjonForDoedsbo { + adresse: KontaktinformasjonForDoedsboAdresse! + advokatSomKontakt: KontaktinformasjonForDoedsboAdvokatSomKontakt + attestutstedelsesdato: Date! + folkeregistermetadata: Folkeregistermetadata! + metadata: Metadata! + organisasjonSomKontakt: KontaktinformasjonForDoedsboOrganisasjonSomKontakt + personSomKontakt: KontaktinformasjonForDoedsboPersonSomKontakt + skifteform: KontaktinformasjonForDoedsboSkifteform! +} + +type KontaktinformasjonForDoedsboAdresse { + adresselinje1: String! + adresselinje2: String + landkode: String + postnummer: String! + poststedsnavn: String! +} + +type KontaktinformasjonForDoedsboAdvokatSomKontakt { + organisasjonsnavn: String + organisasjonsnummer: String + personnavn: Personnavn! +} + +type KontaktinformasjonForDoedsboOrganisasjonSomKontakt { + kontaktperson: Personnavn + organisasjonsnavn: String! + organisasjonsnummer: String +} + +type KontaktinformasjonForDoedsboPersonSomKontakt { + foedselsdato: Date + identifikasjonsnummer: String + personnavn: Personnavn +} + +type Koordinater { + kvalitet: Int + x: Float + y: Float + z: Float +} + +type Matrikkeladresse { + bruksenhetsnummer: String + kommunenummer: String + koordinater: Koordinater + matrikkelId: Long + postnummer: String + tilleggsnavn: String +} + +type MatrikkeladresseResult { + bruksnummer: String + gaardsnummer: String + kommunenummer: String + matrikkelId: String + postnummer: String + poststed: String + tilleggsnavn: String +} + +type Metadata { + """ + + En liste over alle endringer som har blitt utført over tid. + Vær obs på at denne kan endre seg og man burde takle at det finnes flere korrigeringer i listen, så dersom man ønsker å kun vise den siste, så må man selv filtrere ut dette. + Det kan også ved svært få tilfeller skje at opprett blir fjernet. F.eks ved splitt tilfeller av identer. Dette skal skje i svært få tilfeller. Dersom man ønsker å presentere opprettet tidspunktet, så blir det tidspunktet på den første endringen. + """ + endringer: [Endring!]! + """ + + Feltet betegner hvorvidt dette er en funksjonelt historisk opplysning, for eksempel en tidligere fraflyttet adresse eller et foreldreansvar som er utløpt fordi barnet har fylt 18 år. + I de fleste tilfeller kan dette utledes ved å se på de andre feltene i opplysningen. Dette er imidlertid ikke alltid tilfellet, blant annet for foreldreansvar. + Feltet bør brukes av konsumenter som henter informasjon fra GraphQL med historikk, men som også trenger å utlede gjeldende informasjon. + """ + historisk: Boolean! + " Master refererer til hvem som eier opplysningen, f.eks så har PDL en kopi av Folkeregisteret, da vil master være FREG og eventuelle endringer på dette må gå via Folkeregisteret (API mot dem eller andre rutiner)." + master: String! + """ + + I PDL så får alle forekomster av en opplysning en ID som representerer dens unike forekomst. + F.eks, så vil en Opprett ha ID X, korriger ID Y (der hvor den spesifiserer at den korrigerer X). + Dersom en opplysning ikke er lagret i PDL, så vil denne verdien ikke være utfylt. + """ + opplysningsId: String +} + +type Navn { + etternavn: String! + folkeregistermetadata: Folkeregistermetadata + forkortetNavn: String @deprecated(reason: "No longer supported") + fornavn: String! + gyldigFraOgMed: Date + mellomnavn: String + metadata: Metadata! + originaltNavn: OriginaltNavn +} + +type Navspersonidentifikator { + identifikasjonsnummer: String! + metadata: Metadata! +} + +type Opphold { + folkeregistermetadata: Folkeregistermetadata! + metadata: Metadata! + oppholdFra: Date + oppholdTil: Date + type: Oppholdstillatelse! +} + +type Oppholdsadresse { + coAdressenavn: String + folkeregistermetadata: Folkeregistermetadata + gyldigFraOgMed: DateTime + gyldigTilOgMed: DateTime + matrikkeladresse: Matrikkeladresse + metadata: Metadata! + oppholdAnnetSted: String + utenlandskAdresse: UtenlandskAdresse + vegadresse: Vegadresse +} + +type OriginaltNavn { + etternavn: String + fornavn: String + mellomnavn: String +} + +type Person { + adressebeskyttelse(historikk: Boolean = false): [Adressebeskyttelse!]! + bostedsadresse(historikk: Boolean = false): [Bostedsadresse!]! + deltBosted(historikk: Boolean = false): [DeltBosted!]! + doedfoedtBarn: [DoedfoedtBarn!]! + doedsfall: [Doedsfall!]! + falskIdentitet: FalskIdentitet + foedested: [Foedested!]! + foedsel: [Foedsel!]! @deprecated(reason: "Erstattet av foedselsdato & foedested") + foedselsdato: [Foedselsdato!]! + folkeregisteridentifikator(historikk: Boolean = false): [Folkeregisteridentifikator!]! + folkeregisterpersonstatus(historikk: Boolean = false): [Folkeregisterpersonstatus!]! + forelderBarnRelasjon: [ForelderBarnRelasjon!]! + foreldreansvar(historikk: Boolean = false): [Foreldreansvar!]! + fullmakt(historikk: Boolean = false): [Fullmakt!]! + identitetsgrunnlag(historikk: Boolean = false): [Identitetsgrunnlag!]! + innflyttingTilNorge: [InnflyttingTilNorge!]! + kjoenn(historikk: Boolean = false): [Kjoenn!]! + kontaktadresse(historikk: Boolean = false): [Kontaktadresse!]! + kontaktinformasjonForDoedsbo(historikk: Boolean = false): [KontaktinformasjonForDoedsbo!]! + navn(historikk: Boolean = false): [Navn!]! + navspersonidentifikator(historikk: Boolean = false): [Navspersonidentifikator!]! + opphold(historikk: Boolean = false): [Opphold!]! + oppholdsadresse(historikk: Boolean = false): [Oppholdsadresse!]! + rettsligHandleevne(historikk: Boolean = false): [RettsligHandleevne!]! + sikkerhetstiltak: [Sikkerhetstiltak!]! + sivilstand(historikk: Boolean = false): [Sivilstand!]! + statsborgerskap(historikk: Boolean = false): [Statsborgerskap!]! + telefonnummer(historikk: Boolean = false): [Telefonnummer!]! + tilrettelagtKommunikasjon: [TilrettelagtKommunikasjon!]! + utenlandskIdentifikasjonsnummer(historikk: Boolean = false): [UtenlandskIdentifikasjonsnummer!]! + utflyttingFraNorge: [UtflyttingFraNorge!]! + vergemaalEllerFremtidsfullmakt(historikk: Boolean = false): [VergemaalEllerFremtidsfullmakt!]! +} + +type PersonSearchHighlight { + " Forteller hvorvidt opplysningen som ga treff er markert som historisk." + historisk: Boolean + """ + + liste med feltene og verdiene som ga treff. + Merk at for fritekst søk så vil disse kunne referere til hjelpe felter som ikke er synelig i resultatene. + """ + matches: [SearchMatch] + """ + + Navn/Sti til opplysningen som ga treff. Merk at dette ikke er feltet som ga treff men opplysningen. + F.eks. hvis du søker på person.navn.fornavn så vil opplysingen være person.navn. + """ + opplysning: String + """ + + Gitt att opplysningen som ga treff har en opplysningsId så vil den returneres her. + alle søk under person skal ha opplysningsId, men søk i identer vil kunne returnere treff uten opplysningsId. + """ + opplysningsId: String +} + +type PersonSearchHit { + " Infromasjon om hva som ga treff i søke resultatet." + highlights: [PersonSearchHighlight] + " forespurte data" + identer(historikk: Boolean = false): [IdentInformasjon!]! + " forespurte data" + person: Person + " Poengsummen elasticsearch har gitt dette resultatet (brukt til feilsøking, og tuning av søk)" + score: Float +} + +type PersonSearchResult { + " treff liste" + hits: [PersonSearchHit!]! + " Side nummer for siden som vises" + pageNumber: Int + " Totalt antall treff (øvre grense er satt til 10 000)" + totalHits: Int + " Totalt antall sider" + totalPages: Int +} + +type Personnavn { + etternavn: String! + fornavn: String! + mellomnavn: String +} + +type PostadresseIFrittFormat { + adresselinje1: String + adresselinje2: String + adresselinje3: String + postnummer: String +} + +type Postboksadresse { + postboks: String! + postbokseier: String + postnummer: String +} + +type Query { + forslagAdresse(parameters: CompletionParameters): AdresseCompletionResult + hentAdresse(matrikkelId: ID!): KartverketAdresse + hentGeografiskTilknytning(ident: ID!): GeografiskTilknytning + hentGeografiskTilknytningBolk(identer: [ID!]!): [hentGeografiskTilknytningBolkResult!]! + hentIdenter(grupper: [IdentGruppe!], historikk: Boolean = false, ident: ID!): Identliste + hentIdenterBolk(grupper: [IdentGruppe!], historikk: Boolean = false, identer: [ID!]!): [HentIdenterBolkResult!]! + hentPerson(ident: ID!): Person + hentPersonBolk(identer: [ID!]!): [HentPersonBolkResult!]! + sokAdresse(criteria: [Criterion], paging: Paging): AdresseSearchResult + sokPerson(criteria: [Criterion], paging: Paging): PersonSearchResult +} + +type RelatertBiPerson { + foedselsdato: Date + kjoenn: KjoennType + navn: Personnavn + statsborgerskap: String +} + +type RettsligHandleevne { + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! + rettsligHandleevneomfang: String +} + +type SearchMatch { + " feltnavn med sti til feltet so ga treff." + field: String! + " Verdien som ga treff" + fragments: [String] + type: String +} + +type Sikkerhetstiltak { + beskrivelse: String! + gyldigFraOgMed: Date! + gyldigTilOgMed: Date! + kontaktperson: SikkerhetstiltakKontaktperson + metadata: Metadata! + tiltakstype: String! +} + +type SikkerhetstiltakKontaktperson { + enhet: String! + personident: String! +} + +type Sivilstand { + bekreftelsesdato: Date + folkeregistermetadata: Folkeregistermetadata + gyldigFraOgMed: Date + metadata: Metadata! + relatertVedSivilstand: String + type: Sivilstandstype! +} + +type Statsborgerskap { + bekreftelsesdato: Date + folkeregistermetadata: Folkeregistermetadata + gyldigFraOgMed: Date + gyldigTilOgMed: Date + land: String! + metadata: Metadata! +} + +type Telefonnummer { + landskode: String! + metadata: Metadata! + nummer: String! + prioritet: Int! +} + +type TilrettelagtKommunikasjon { + metadata: Metadata! + talespraaktolk: Tolk + tegnspraaktolk: Tolk +} + +type Tjenesteomraade { + tjenesteoppgave: String + tjenestevirksomhet: String +} + +type Tolk { + spraak: String +} + +type UkjentBosted { + bostedskommune: String +} + +type UtenlandskAdresse { + adressenavnNummer: String + bySted: String + bygningEtasjeLeilighet: String + landkode: String! + postboksNummerNavn: String + postkode: String + regionDistriktOmraade: String +} + +type UtenlandskAdresseIFrittFormat { + adresselinje1: String + adresselinje2: String + adresselinje3: String + byEllerStedsnavn: String + landkode: String! + postkode: String +} + +type UtenlandskIdentifikasjonsnummer { + folkeregistermetadata: Folkeregistermetadata + identifikasjonsnummer: String! + metadata: Metadata! + opphoert: Boolean! + utstederland: String! +} + +type UtflyttingFraNorge { + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! + tilflyttingsland: String + tilflyttingsstedIUtlandet: String + utflyttingsdato: Date +} + +type Vegadresse { + adressenavn: String + bruksenhetsnummer: String + bydelsnummer: String + husbokstav: String + husnummer: String + kommunenummer: String + koordinater: Koordinater + matrikkelId: Long + postnummer: String + tilleggsnavn: String +} + +type VegadresseResult { + adressekode: String + adressenavn: String + bydelsnavn: String + bydelsnummer: String + fylkesnavn: String + fylkesnummer: String + husbokstav: String + husnummer: Int + kommunenavn: String + kommunenummer: String + matrikkelId: String + postnummer: String + poststed: String + tilleggsnavn: String +} + +type VergeEllerFullmektig { + identifiserendeInformasjon: IdentifiserendeInformasjon + motpartsPersonident: String + navn: Personnavn @deprecated(reason: "Erstattes av navn iidentifiserendeInformasjon") + omfang: String + omfangetErInnenPersonligOmraade: Boolean + tjenesteomraade: [Tjenesteomraade!] +} + +type VergemaalEllerFremtidsfullmakt { + embete: String + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! + type: String + vergeEllerFullmektig: VergeEllerFullmektig! +} + +type hentGeografiskTilknytningBolkResult { + code: String! + geografiskTilknytning: GeografiskTilknytning + ident: String! +} + +enum AdressebeskyttelseGradering { + FORTROLIG + STRENGT_FORTROLIG + STRENGT_FORTROLIG_UTLAND + UGRADERT +} + +enum Direction { + ASC + DESC +} + +enum Endringstype { + KORRIGER + OPPHOER + OPPRETT +} + +enum Familierelasjonsrolle { + BARN + FAR + MEDMOR + MOR +} + +enum ForelderBarnRelasjonRolle { + BARN + FAR + MEDMOR + MOR +} + +enum FullmaktsRolle { + FULLMAKTSGIVER + FULLMEKTIG +} + +enum GtType { + BYDEL + KOMMUNE + UDEFINERT + UTLAND +} + +enum IdentGruppe { + AKTORID + FOLKEREGISTERIDENT + NPID +} + +enum Identitetsgrunnlagsstatus { + IKKE_KONTROLLERT + INGEN_STATUS + KONTROLLERT +} + +enum KjoennType { + KVINNE + MANN + UKJENT +} + +enum KontaktadresseType { + Innland + Utland +} + +enum KontaktinformasjonForDoedsboSkifteform { + ANNET + OFFENTLIG +} + +enum Oppholdstillatelse { + MIDLERTIDIG + OPPLYSNING_MANGLER + PERMANENT +} + +enum Sivilstandstype { + ENKE_ELLER_ENKEMANN + GIFT + GJENLEVENDE_PARTNER + REGISTRERT_PARTNER + SEPARERT + SEPARERT_PARTNER + SKILT + SKILT_PARTNER + UGIFT + UOPPGITT +} + +"Format: YYYY-MM-DD (ISO-8601), example: 2017-11-24" +scalar Date + +"Format: YYYY-MM-DDTHH:mm:SS (ISO-8601), example: 2011-12-03T10:15:30" +scalar DateTime + +"A 64-bit signed integer" +scalar Long + +input CompletionFieldValue { + fieldName: String! + fieldValue: String +} + +input CompletionParameters { + completionField: String! + fieldValues: [CompletionFieldValue]! + maxSuggestions: Int +} + +input Criterion { + and: [Criterion] + " Feltnavn inkludert sti til ønsket felt (Eksempel: person.navn.fornavn)" + fieldName: String + not: [Criterion] + or: [Criterion] + """ + + Søk i historiske data + true = søker kun i historiske data. + false = søker kun i gjeldende data. + null = søke i både historiske og gjeldende data. + """ + searchHistorical: Boolean + searchRule: SearchRule +} + +input Paging { + " Hvilken side i resultatsettet man ønsker vist." + pageNumber: Int = 1 + " antall treff per side (maks 100)" + resultsPerPage: Int = 10 + """ + + Liste over felter man ønsker resultatene sortert etter + Standard er "score". Score er poengsummen Elasticsearch tildeler hvert resultat. + """ + sortBy: [SearchSorting] +} + +input SearchRule { + " Brukes til søke etter datoer som kommer etter opgitt dato." + after: String + " Brukes til søke etter datoer som kommer før opgitt dato." + before: String + " Boost brukes til å gi ett søkekriterie høyere eller lavere vektlegging en de andre søke kriteriene." + boost: Float + " [Flag] Kan brukes til å overstyre standard oppførsellen for søk i felter (standard er case insensitive)" + caseSensitive: Boolean + " Gir treff når opgitt felt inneholder en eller flere ord fra input verdien." + contains: String + " [Flag] Brukes til å deaktivere fonetisk søk feltene som har dette som standard (Navn)" + disablePhonetic: Boolean + " Begrenser treff til kun de hvor felt har input verdi" + equals: String + " Sjekker om feltet finnes / at det ikke har en null verdi." + exists: String + """ + + Søk fra og med (se fromExcluding for bare fra men ikke med) + kan benyttes på tall og dato + """ + from: String + """ + + Søk fra men ikke med oppgitt verdi + kan benyttes på tall og dato + """ + fromExcluding: String + " Søk som gir treff også for små variasjoner i skrivemåte" + fuzzy: String + " Brukes til å søke i tall og finner verdier som er størren en input verdi." + greaterThan: String + " Brukes til å søke i tall og finner verdier som er mindre en input verdi." + lessThan: String + " Filtrerer bort treff hvor felt inneholder input verdi" + notEquals: String + " Søk som gir tilfeldig poengsum til hvert treff (kun ment til generering av testdata)" + random: String + " Regex søk for spesielle situasjoner (Dette er en treg opprasjon og bør ikke brukes)" + regex: String + " Gir treff når opgitt feltstarter med opgitt verdi." + startsWith: String + """ + + Søk til og med (se toExcluding for bare til men ikke med) + kan benyttes på tall og dato + """ + to: String + """ + + Søk til men ikke med oppgitt verdi + kan benyttes på tall og dato + """ + toExcluding: String + " Bruk \"?\" som wildcard for enkelt tegn, og \"*\" som wildcard for 0 eller flere tegn." + wildcard: String +} + +input SearchSorting { + direction: Direction! + " Feltnavn ikludert sti til ønsket felt (eksepmel: person.navn.fornavn)" + fieldName: String! +} diff --git a/apps/synt-sykemelding-api/src/main/resources/pdlperson/pdlquery.graphql b/apps/synt-sykemelding-api/src/main/resources/pdlperson/pdlquery.graphql index 4a97089ff42..c7234709128 100644 --- a/apps/synt-sykemelding-api/src/main/resources/pdlperson/pdlquery.graphql +++ b/apps/synt-sykemelding-api/src/main/resources/pdlperson/pdlquery.graphql @@ -36,12 +36,9 @@ query($ident: ID!, $historikk: Boolean!) { regel } hentPerson(ident: $ident) { - foedsel { + foedselsdato { foedselsaar, foedselsdato, - foedeland, - foedested, - foedekommune, metadata { ...metadataDetails } diff --git a/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/consumer/response/pdl/PdlPerson.java b/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/consumer/response/pdl/PdlPerson.java index a7ecbc4fe05..900ec73b4f8 100644 --- a/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/consumer/response/pdl/PdlPerson.java +++ b/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/consumer/response/pdl/PdlPerson.java @@ -61,7 +61,7 @@ public static class HentPerson { private List bostedsadresse; private List navn; - private List foedsel; + private List foedselsdato; private List doedsfall; public List getBostedsadresse() { @@ -78,11 +78,11 @@ public List getNavn() { return navn; } - public List getFoedsel() { - if (isNull(foedsel)) { - foedsel = new ArrayList<>(); + public List getFoedselsdato() { + if (isNull(foedselsdato)) { + foedselsdato = new ArrayList<>(); } - return foedsel; + return foedselsdato; } public List getDoedsfall() { @@ -140,13 +140,10 @@ public static class Navn { @lombok.Data @NoArgsConstructor @AllArgsConstructor - public static class Foedsel { + public static class Foedselsdato { private String foedselsaar; private LocalDate foedselsdato; - private String foedeland; - private String foedested; - private String foedekommune; private Folkeregistermetadata folkeregistermetadata; private Metadata metadata; } diff --git a/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaAapService.java b/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaAapService.java index 0a146560e78..aa169eaffd9 100644 --- a/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaAapService.java +++ b/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaAapService.java @@ -85,7 +85,7 @@ public void opprettVedtakUngUfoer( String miljoe, List rettigheter ) { - var foedselsdato = person.getFoedsel().getFoedselsdato(); + var foedselsdato = person.getFoedselsdato().getFoedselsdato(); var ungUfoer = historikk.getUngUfoer(); if (nonNull(ungUfoer) && !ungUfoer.isEmpty()) { for (var vedtak : ungUfoer) { diff --git a/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaDagpengerService.java b/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaDagpengerService.java index 3f26fe8e49c..0a7033a1b55 100644 --- a/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaDagpengerService.java +++ b/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaDagpengerService.java @@ -70,7 +70,7 @@ public Map> registrerArenaBrukereMedDagpenger Map> responses = new HashMap<>(); for (var ident : utvalgteIdenter) { - var foedselsdato = ident.getFoedsel().getFoedselsdato(); + var foedselsdato = ident.getFoedselsdato().getFoedselsdato(); var minDate = foedselsdato.plusYears(18).isAfter(MINIMUM_DATE) ? foedselsdato.plusYears(18) : MINIMUM_DATE; @@ -113,7 +113,7 @@ private List sendDagpenger(String ident, String miljoe, Lo var soknadResponse = arenaForvalterService.opprettMottaDagpengesoknad(soknadRequest); if (soknadResponse.getFeiledeDagpenger().isEmpty() && !soknadResponse.getNyeDagpenger().isEmpty() && nonNull(vedtakdato)) { - var vedtakRequest = getDagpengevedtakRequest(ident, miljoe, vedtakdato, rettighetKode, soknadResponse.getNyeDagpenger().get(0)); + var vedtakRequest = getDagpengevedtakRequest(ident, miljoe, vedtakdato, rettighetKode, soknadResponse.getNyeDagpenger().getFirst()); if (isNull(vedtakRequest)) { return Collections.singletonList(soknadResponse); } diff --git a/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/IdentService.java b/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/IdentService.java index 768d6cb88be..9f250bc1bf2 100644 --- a/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/IdentService.java +++ b/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/IdentService.java @@ -137,11 +137,11 @@ private boolean validBarn(List barn, LocalDate tidligsteDatoBarnetillegg private boolean under18VedTidspunkt(PdlPersonBolk.PersonBolk personBolk, LocalDate tidspunkt) { var person = personBolk.getPerson(); - if (nonNull(person) && nonNull(person.getFoedsel()) && !person.getFoedsel().isEmpty()){ - var foedselsdato = person.getFoedsel().get(0).getFoedselsdato(); + if (nonNull(person) && nonNull(person.getFoedselsdato()) && !person.getFoedselsdato().isEmpty()){ + var foedselsdato = person.getFoedselsdato().getFirst().getFoedselsdato(); if(nonNull(person.getDoedsfall()) && !person.getDoedsfall().isEmpty()){ - var doedsdato = person.getDoedsfall().get(0).getDoedsdato(); + var doedsdato = person.getDoedsfall().getFirst().getDoedsdato(); if (doedsdato.isBefore(tidspunkt.plusDays(1))) return false; } var alder = Math.toIntExact(ChronoUnit.YEARS.between(foedselsdato, tidspunkt)); @@ -160,19 +160,19 @@ public Kontoinfo getIdentMedKontoinformasjon() { return Kontoinfo.builder() .fnr(ident.getIdent()) - .fornavn(navnInfo.isEmpty() ? "" : navnInfo.get(0).getFornavn()) - .mellomnavn(navnInfo.isEmpty() || isNull(navnInfo.get(0).getMellomnavn()) ? "" : navnInfo.get(0).getMellomnavn()) - .etternavn(navnInfo.isEmpty() ? "" : navnInfo.get(0).getEtternavn()) + .fornavn(navnInfo.isEmpty() ? "" : navnInfo.getFirst().getFornavn()) + .mellomnavn(navnInfo.isEmpty() || isNull(navnInfo.getFirst().getMellomnavn()) ? "" : navnInfo.getFirst().getMellomnavn()) + .etternavn(navnInfo.isEmpty() ? "" : navnInfo.getFirst().getEtternavn()) .kontonummer(ident.getKontonummer()) .adresseLinje1(getAdresseLinje(boadresseInfo)) - .postnr(boadresseInfo.isEmpty() ? "" : boadresseInfo.get(0).getVegadresse().getPostnummer()) + .postnr(boadresseInfo.isEmpty() ? "" : boadresseInfo.getFirst().getVegadresse().getPostnummer()) .landkode("NO") .build(); } private String getAdresseLinje(List boadresse) { - if (boadresse.isEmpty() || isNull(boadresse.get(0).getVegadresse())) return ""; - var vegadresse = boadresse.get(0).getVegadresse(); + if (boadresse.isEmpty() || isNull(boadresse.getFirst().getVegadresse())) return ""; + var vegadresse = boadresse.getFirst().getVegadresse(); var husbokstav = isNull(vegadresse.getHusbokstav()) ? "" : vegadresse.getHusbokstav(); return vegadresse.getAdressenavn() + " " + vegadresse.getHusnummer() + husbokstav; } diff --git a/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/PensjonService.java b/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/PensjonService.java index 5276f00cbdd..80d13cf8268 100644 --- a/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/PensjonService.java +++ b/apps/synt-vedtakshistorikk-service/src/main/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/PensjonService.java @@ -37,7 +37,7 @@ private boolean opprettPersonIPopp( ) { var opprettPersonStatus = pensjonTestdataFacadeConsumer.opprettPerson(PensjonTestdataPerson.builder() .bostedsland("NOR") - .fodselsDato(person.getFoedsel().getFoedselsdato()) + .fodselsDato(person.getFoedselsdato().getFoedselsdato()) .miljoer(Collections.singletonList(miljoe)) .fnr(person.getIdent()) .build()); diff --git a/apps/synt-vedtakshistorikk-service/src/main/resources/application-dev.yml b/apps/synt-vedtakshistorikk-service/src/main/resources/application-dev.yml index b4f9325607d..827909020eb 100644 --- a/apps/synt-vedtakshistorikk-service/src/main/resources/application-dev.yml +++ b/apps/synt-vedtakshistorikk-service/src/main/resources/application-dev.yml @@ -1,8 +1,3 @@ -azure: - app: - client: - id: ${client_id} - secret: ${client_secret} batch: miljoe: q2 diff --git a/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/graphql.config.yml b/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/graphql.config.yml new file mode 100644 index 00000000000..1f9a7cdf2a6 --- /dev/null +++ b/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/graphql.config.yml @@ -0,0 +1,8 @@ +schema: pdl-api-schema.graphql +extensions: + endpoints: + PDL GraphQL Endpoint: + url: https://pdl-api.dev.intern.nav.no/graphql + headers: + user-agent: '' + introspect: false diff --git a/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdl-api-schema.graphql b/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdl-api-schema.graphql new file mode 100644 index 00000000000..cc4a8c90344 --- /dev/null +++ b/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdl-api-schema.graphql @@ -0,0 +1,949 @@ +# This file was generated. Do not edit manually. + +schema { + query: Query +} + +"Indicates an Input Object is a OneOf Input Object." +directive @oneOf on INPUT_OBJECT + +type AdresseCompletionResult { + addressFound: CompletionAdresse + suggestions: [String!]! +} + +type AdresseSearchHit { + matrikkeladresse: MatrikkeladresseResult + score: Float + vegadresse: VegadresseResult +} + +type AdresseSearchResult { + hits: [AdresseSearchHit!]! + pageNumber: Int + totalHits: Int + totalPages: Int +} + +type Adressebeskyttelse { + folkeregistermetadata: Folkeregistermetadata + gradering: AdressebeskyttelseGradering! + metadata: Metadata! +} + +type Bostedsadresse { + angittFlyttedato: Date + coAdressenavn: String + folkeregistermetadata: Folkeregistermetadata + gyldigFraOgMed: DateTime + gyldigTilOgMed: DateTime + matrikkeladresse: Matrikkeladresse + metadata: Metadata! + ukjentBosted: UkjentBosted + utenlandskAdresse: UtenlandskAdresse + vegadresse: Vegadresse +} + +type CompletionAdresse { + matrikkeladresse: MatrikkeladresseResult + vegadresse: VegadresseResult +} + +type DeltBosted { + coAdressenavn: String + folkeregistermetadata: Folkeregistermetadata! + matrikkeladresse: Matrikkeladresse + metadata: Metadata! + sluttdatoForKontrakt: Date + startdatoForKontrakt: Date! + ukjentBosted: UkjentBosted + utenlandskAdresse: UtenlandskAdresse + vegadresse: Vegadresse +} + +type DoedfoedtBarn { + dato: Date + folkeregistermetadata: Folkeregistermetadata! + metadata: Metadata! +} + +type Doedsfall { + doedsdato: Date + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! +} + +" Endring som har blitt utført på opplysningen. F.eks: Opprett -> Korriger -> Korriger" +type Endring { + hendelseId: String! + """ + + Opphavet til informasjonen. I NAV blir dette satt i forbindelse med registrering (f.eks: Sykehuskassan). + Fra Folkeregisteret får vi opphaven til dems opplysning, altså NAV, UDI, Politiet, Skatteetaten o.l.. Fra Folkeregisteret kan det også være tekniske navn som: DSF_MIGRERING, m.m.. + """ + kilde: String! + " Tidspunktet for registrering." + registrert: DateTime! + " Hvem endringen har blitt utført av, ofte saksbehandler (f.eks Z990200), men kan også være system (f.eks srvXXXX). Denne blir satt til \"Folkeregisteret\" for det vi får fra dem." + registrertAv: String! + " Hvilke system endringen har kommet fra (f.eks srvXXX). Denne blir satt til \"FREG\" for det vi får fra Folkeregisteret." + systemkilde: String! + " Hvilke type endring som har blitt utført." + type: Endringstype! +} + +type FalskIdentitet { + erFalsk: Boolean! + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! + rettIdentitetErUkjent: Boolean + rettIdentitetVedIdentifikasjonsnummer: String + rettIdentitetVedOpplysninger: FalskIdentitetIdentifiserendeInformasjon +} + +type FalskIdentitetIdentifiserendeInformasjon { + foedselsdato: Date + kjoenn: KjoennType + personnavn: Personnavn! + statsborgerskap: [String!]! +} + +type Foedested { + foedekommune: String + foedeland: String + foedested: String + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! +} + +type Foedsel { + foedekommune: String + foedeland: String + foedested: String + foedselsaar: Int + foedselsdato: Date + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! +} + +type Foedselsdato { + foedselsaar: Int + foedselsdato: Date + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! +} + +type Folkeregisteridentifikator { + folkeregistermetadata: Folkeregistermetadata! + identifikasjonsnummer: String! + metadata: Metadata! + status: String! + type: String! +} + +type Folkeregistermetadata { + aarsak: String + ajourholdstidspunkt: DateTime + gyldighetstidspunkt: DateTime + kilde: String + opphoerstidspunkt: DateTime + sekvens: Int +} + +type Folkeregisterpersonstatus { + folkeregistermetadata: Folkeregistermetadata! + forenkletStatus: String! + metadata: Metadata! + status: String! +} + +type ForelderBarnRelasjon { + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! + minRolleForPerson: ForelderBarnRelasjonRolle + relatertPersonUtenFolkeregisteridentifikator: RelatertBiPerson + relatertPersonsIdent: String + relatertPersonsRolle: ForelderBarnRelasjonRolle! +} + +type Foreldreansvar { + ansvar: String + ansvarlig: String + ansvarligUtenIdentifikator: RelatertBiPerson + ansvarssubjekt: String + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! +} + +type Fullmakt { + gyldigFraOgMed: Date! + gyldigTilOgMed: Date! + metadata: Metadata! + motpartsPersonident: String! + motpartsRolle: FullmaktsRolle! + omraader: [String!]! +} + +type GeografiskTilknytning { + gtBydel: String + gtKommune: String + gtLand: String + gtType: GtType! + regel: String! +} + +type HentIdenterBolkResult { + code: String! + ident: String! + identer: [IdentInformasjon!] +} + +type HentPersonBolkResult { + code: String! + ident: String! + person: Person +} + +type IdentInformasjon { + gruppe: IdentGruppe! + historisk: Boolean! + ident: String! +} + +type IdentifiserendeInformasjon { + foedselsdato: Date + kjoenn: String + navn: Personnavn + statsborgerskap: [String!] +} + +type Identitetsgrunnlag { + folkeregistermetadata: Folkeregistermetadata! + metadata: Metadata! + status: Identitetsgrunnlagsstatus! +} + +type Identliste { + identer: [IdentInformasjon!]! +} + +type InnflyttingTilNorge { + folkeregistermetadata: Folkeregistermetadata + fraflyttingsland: String + fraflyttingsstedIUtlandet: String + metadata: Metadata! +} + +type KartverketAdresse { + id: Long! + matrikkeladresse: KartverketMatrikkeladresse + vegadresse: KartverketVegadresse +} + +type KartverketBydel { + bydelsnavn: String + bydelsnummer: String +} + +type KartverketFylke { + navn: String + nummer: String +} + +type KartverketGrunnkrets { + grunnkretsnavn: String + grunnkretsnummer: String +} + +type KartverketKommune { + fylke: KartverketFylke + navn: String + nummer: String +} + +type KartverketMatrikkeladresse { + adressetilleggsnavn: String + bydel: KartverketBydel + grunnkrets: KartverketGrunnkrets + kortnavn: String + matrikkelnummer: KartverketMatrikkelnummer + postnummeromraade: KartverketPostnummeromraade + representasjonspunkt: KartverketRepresentasjonspunkt + undernummer: Int +} + +type KartverketMatrikkelnummer { + bruksnummer: Int + festenummer: Int + gaardsnummer: Int + kommunenummer: String + seksjonsnummer: Int +} + +type KartverketPostnummeromraade { + postnummer: String + poststed: String +} + +type KartverketRepresentasjonspunkt { + posisjonskvalitet: Int + x: Float + y: Float + z: Float +} + +type KartverketVeg { + adressekode: Int + adressenavn: String + kommune: KartverketKommune + kortnavn: String + stedsnummer: String +} + +type KartverketVegadresse { + adressetilleggsnavn: String + bokstav: String + bydel: KartverketBydel + grunnkrets: KartverketGrunnkrets + kortnavn: String + nummer: Int + postnummeromraade: KartverketPostnummeromraade + representasjonspunkt: KartverketRepresentasjonspunkt + veg: KartverketVeg +} + +type Kjoenn { + folkeregistermetadata: Folkeregistermetadata + kjoenn: KjoennType + metadata: Metadata! +} + +type Kontaktadresse { + coAdressenavn: String + folkeregistermetadata: Folkeregistermetadata + gyldigFraOgMed: DateTime + gyldigTilOgMed: DateTime + metadata: Metadata! + postadresseIFrittFormat: PostadresseIFrittFormat + postboksadresse: Postboksadresse + type: KontaktadresseType! + utenlandskAdresse: UtenlandskAdresse + utenlandskAdresseIFrittFormat: UtenlandskAdresseIFrittFormat + vegadresse: Vegadresse +} + +type KontaktinformasjonForDoedsbo { + adresse: KontaktinformasjonForDoedsboAdresse! + advokatSomKontakt: KontaktinformasjonForDoedsboAdvokatSomKontakt + attestutstedelsesdato: Date! + folkeregistermetadata: Folkeregistermetadata! + metadata: Metadata! + organisasjonSomKontakt: KontaktinformasjonForDoedsboOrganisasjonSomKontakt + personSomKontakt: KontaktinformasjonForDoedsboPersonSomKontakt + skifteform: KontaktinformasjonForDoedsboSkifteform! +} + +type KontaktinformasjonForDoedsboAdresse { + adresselinje1: String! + adresselinje2: String + landkode: String + postnummer: String! + poststedsnavn: String! +} + +type KontaktinformasjonForDoedsboAdvokatSomKontakt { + organisasjonsnavn: String + organisasjonsnummer: String + personnavn: Personnavn! +} + +type KontaktinformasjonForDoedsboOrganisasjonSomKontakt { + kontaktperson: Personnavn + organisasjonsnavn: String! + organisasjonsnummer: String +} + +type KontaktinformasjonForDoedsboPersonSomKontakt { + foedselsdato: Date + identifikasjonsnummer: String + personnavn: Personnavn +} + +type Koordinater { + kvalitet: Int + x: Float + y: Float + z: Float +} + +type Matrikkeladresse { + bruksenhetsnummer: String + kommunenummer: String + koordinater: Koordinater + matrikkelId: Long + postnummer: String + tilleggsnavn: String +} + +type MatrikkeladresseResult { + bruksnummer: String + gaardsnummer: String + kommunenummer: String + matrikkelId: String + postnummer: String + poststed: String + tilleggsnavn: String +} + +type Metadata { + """ + + En liste over alle endringer som har blitt utført over tid. + Vær obs på at denne kan endre seg og man burde takle at det finnes flere korrigeringer i listen, så dersom man ønsker å kun vise den siste, så må man selv filtrere ut dette. + Det kan også ved svært få tilfeller skje at opprett blir fjernet. F.eks ved splitt tilfeller av identer. Dette skal skje i svært få tilfeller. Dersom man ønsker å presentere opprettet tidspunktet, så blir det tidspunktet på den første endringen. + """ + endringer: [Endring!]! + """ + + Feltet betegner hvorvidt dette er en funksjonelt historisk opplysning, for eksempel en tidligere fraflyttet adresse eller et foreldreansvar som er utløpt fordi barnet har fylt 18 år. + I de fleste tilfeller kan dette utledes ved å se på de andre feltene i opplysningen. Dette er imidlertid ikke alltid tilfellet, blant annet for foreldreansvar. + Feltet bør brukes av konsumenter som henter informasjon fra GraphQL med historikk, men som også trenger å utlede gjeldende informasjon. + """ + historisk: Boolean! + " Master refererer til hvem som eier opplysningen, f.eks så har PDL en kopi av Folkeregisteret, da vil master være FREG og eventuelle endringer på dette må gå via Folkeregisteret (API mot dem eller andre rutiner)." + master: String! + """ + + I PDL så får alle forekomster av en opplysning en ID som representerer dens unike forekomst. + F.eks, så vil en Opprett ha ID X, korriger ID Y (der hvor den spesifiserer at den korrigerer X). + Dersom en opplysning ikke er lagret i PDL, så vil denne verdien ikke være utfylt. + """ + opplysningsId: String +} + +type Navn { + etternavn: String! + folkeregistermetadata: Folkeregistermetadata + forkortetNavn: String @deprecated(reason: "No longer supported") + fornavn: String! + gyldigFraOgMed: Date + mellomnavn: String + metadata: Metadata! + originaltNavn: OriginaltNavn +} + +type Navspersonidentifikator { + identifikasjonsnummer: String! + metadata: Metadata! +} + +type Opphold { + folkeregistermetadata: Folkeregistermetadata! + metadata: Metadata! + oppholdFra: Date + oppholdTil: Date + type: Oppholdstillatelse! +} + +type Oppholdsadresse { + coAdressenavn: String + folkeregistermetadata: Folkeregistermetadata + gyldigFraOgMed: DateTime + gyldigTilOgMed: DateTime + matrikkeladresse: Matrikkeladresse + metadata: Metadata! + oppholdAnnetSted: String + utenlandskAdresse: UtenlandskAdresse + vegadresse: Vegadresse +} + +type OriginaltNavn { + etternavn: String + fornavn: String + mellomnavn: String +} + +type Person { + adressebeskyttelse(historikk: Boolean = false): [Adressebeskyttelse!]! + bostedsadresse(historikk: Boolean = false): [Bostedsadresse!]! + deltBosted(historikk: Boolean = false): [DeltBosted!]! + doedfoedtBarn: [DoedfoedtBarn!]! + doedsfall: [Doedsfall!]! + falskIdentitet: FalskIdentitet + foedested: [Foedested!]! + foedsel: [Foedsel!]! @deprecated(reason: "Erstattet av foedselsdato & foedested") + foedselsdato: [Foedselsdato!]! + folkeregisteridentifikator(historikk: Boolean = false): [Folkeregisteridentifikator!]! + folkeregisterpersonstatus(historikk: Boolean = false): [Folkeregisterpersonstatus!]! + forelderBarnRelasjon: [ForelderBarnRelasjon!]! + foreldreansvar(historikk: Boolean = false): [Foreldreansvar!]! + fullmakt(historikk: Boolean = false): [Fullmakt!]! + identitetsgrunnlag(historikk: Boolean = false): [Identitetsgrunnlag!]! + innflyttingTilNorge: [InnflyttingTilNorge!]! + kjoenn(historikk: Boolean = false): [Kjoenn!]! + kontaktadresse(historikk: Boolean = false): [Kontaktadresse!]! + kontaktinformasjonForDoedsbo(historikk: Boolean = false): [KontaktinformasjonForDoedsbo!]! + navn(historikk: Boolean = false): [Navn!]! + navspersonidentifikator(historikk: Boolean = false): [Navspersonidentifikator!]! + opphold(historikk: Boolean = false): [Opphold!]! + oppholdsadresse(historikk: Boolean = false): [Oppholdsadresse!]! + rettsligHandleevne(historikk: Boolean = false): [RettsligHandleevne!]! + sikkerhetstiltak: [Sikkerhetstiltak!]! + sivilstand(historikk: Boolean = false): [Sivilstand!]! + statsborgerskap(historikk: Boolean = false): [Statsborgerskap!]! + telefonnummer(historikk: Boolean = false): [Telefonnummer!]! + tilrettelagtKommunikasjon: [TilrettelagtKommunikasjon!]! + utenlandskIdentifikasjonsnummer(historikk: Boolean = false): [UtenlandskIdentifikasjonsnummer!]! + utflyttingFraNorge: [UtflyttingFraNorge!]! + vergemaalEllerFremtidsfullmakt(historikk: Boolean = false): [VergemaalEllerFremtidsfullmakt!]! +} + +type PersonSearchHighlight { + " Forteller hvorvidt opplysningen som ga treff er markert som historisk." + historisk: Boolean + """ + + liste med feltene og verdiene som ga treff. + Merk at for fritekst søk så vil disse kunne referere til hjelpe felter som ikke er synelig i resultatene. + """ + matches: [SearchMatch] + """ + + Navn/Sti til opplysningen som ga treff. Merk at dette ikke er feltet som ga treff men opplysningen. + F.eks. hvis du søker på person.navn.fornavn så vil opplysingen være person.navn. + """ + opplysning: String + """ + + Gitt att opplysningen som ga treff har en opplysningsId så vil den returneres her. + alle søk under person skal ha opplysningsId, men søk i identer vil kunne returnere treff uten opplysningsId. + """ + opplysningsId: String +} + +type PersonSearchHit { + " Infromasjon om hva som ga treff i søke resultatet." + highlights: [PersonSearchHighlight] + " forespurte data" + identer(historikk: Boolean = false): [IdentInformasjon!]! + " forespurte data" + person: Person + " Poengsummen elasticsearch har gitt dette resultatet (brukt til feilsøking, og tuning av søk)" + score: Float +} + +type PersonSearchResult { + " treff liste" + hits: [PersonSearchHit!]! + " Side nummer for siden som vises" + pageNumber: Int + " Totalt antall treff (øvre grense er satt til 10 000)" + totalHits: Int + " Totalt antall sider" + totalPages: Int +} + +type Personnavn { + etternavn: String! + fornavn: String! + mellomnavn: String +} + +type PostadresseIFrittFormat { + adresselinje1: String + adresselinje2: String + adresselinje3: String + postnummer: String +} + +type Postboksadresse { + postboks: String! + postbokseier: String + postnummer: String +} + +type Query { + forslagAdresse(parameters: CompletionParameters): AdresseCompletionResult + hentAdresse(matrikkelId: ID!): KartverketAdresse + hentGeografiskTilknytning(ident: ID!): GeografiskTilknytning + hentGeografiskTilknytningBolk(identer: [ID!]!): [hentGeografiskTilknytningBolkResult!]! + hentIdenter(grupper: [IdentGruppe!], historikk: Boolean = false, ident: ID!): Identliste + hentIdenterBolk(grupper: [IdentGruppe!], historikk: Boolean = false, identer: [ID!]!): [HentIdenterBolkResult!]! + hentPerson(ident: ID!): Person + hentPersonBolk(identer: [ID!]!): [HentPersonBolkResult!]! + sokAdresse(criteria: [Criterion], paging: Paging): AdresseSearchResult + sokPerson(criteria: [Criterion], paging: Paging): PersonSearchResult +} + +type RelatertBiPerson { + foedselsdato: Date + kjoenn: KjoennType + navn: Personnavn + statsborgerskap: String +} + +type RettsligHandleevne { + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! + rettsligHandleevneomfang: String +} + +type SearchMatch { + " feltnavn med sti til feltet so ga treff." + field: String! + " Verdien som ga treff" + fragments: [String] + type: String +} + +type Sikkerhetstiltak { + beskrivelse: String! + gyldigFraOgMed: Date! + gyldigTilOgMed: Date! + kontaktperson: SikkerhetstiltakKontaktperson + metadata: Metadata! + tiltakstype: String! +} + +type SikkerhetstiltakKontaktperson { + enhet: String! + personident: String! +} + +type Sivilstand { + bekreftelsesdato: Date + folkeregistermetadata: Folkeregistermetadata + gyldigFraOgMed: Date + metadata: Metadata! + relatertVedSivilstand: String + type: Sivilstandstype! +} + +type Statsborgerskap { + bekreftelsesdato: Date + folkeregistermetadata: Folkeregistermetadata + gyldigFraOgMed: Date + gyldigTilOgMed: Date + land: String! + metadata: Metadata! +} + +type Telefonnummer { + landskode: String! + metadata: Metadata! + nummer: String! + prioritet: Int! +} + +type TilrettelagtKommunikasjon { + metadata: Metadata! + talespraaktolk: Tolk + tegnspraaktolk: Tolk +} + +type Tjenesteomraade { + tjenesteoppgave: String + tjenestevirksomhet: String +} + +type Tolk { + spraak: String +} + +type UkjentBosted { + bostedskommune: String +} + +type UtenlandskAdresse { + adressenavnNummer: String + bySted: String + bygningEtasjeLeilighet: String + landkode: String! + postboksNummerNavn: String + postkode: String + regionDistriktOmraade: String +} + +type UtenlandskAdresseIFrittFormat { + adresselinje1: String + adresselinje2: String + adresselinje3: String + byEllerStedsnavn: String + landkode: String! + postkode: String +} + +type UtenlandskIdentifikasjonsnummer { + folkeregistermetadata: Folkeregistermetadata + identifikasjonsnummer: String! + metadata: Metadata! + opphoert: Boolean! + utstederland: String! +} + +type UtflyttingFraNorge { + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! + tilflyttingsland: String + tilflyttingsstedIUtlandet: String + utflyttingsdato: Date +} + +type Vegadresse { + adressenavn: String + bruksenhetsnummer: String + bydelsnummer: String + husbokstav: String + husnummer: String + kommunenummer: String + koordinater: Koordinater + matrikkelId: Long + postnummer: String + tilleggsnavn: String +} + +type VegadresseResult { + adressekode: String + adressenavn: String + bydelsnavn: String + bydelsnummer: String + fylkesnavn: String + fylkesnummer: String + husbokstav: String + husnummer: Int + kommunenavn: String + kommunenummer: String + matrikkelId: String + postnummer: String + poststed: String + tilleggsnavn: String +} + +type VergeEllerFullmektig { + identifiserendeInformasjon: IdentifiserendeInformasjon + motpartsPersonident: String + navn: Personnavn @deprecated(reason: "Erstattes av navn iidentifiserendeInformasjon") + omfang: String + omfangetErInnenPersonligOmraade: Boolean + tjenesteomraade: [Tjenesteomraade!] +} + +type VergemaalEllerFremtidsfullmakt { + embete: String + folkeregistermetadata: Folkeregistermetadata + metadata: Metadata! + type: String + vergeEllerFullmektig: VergeEllerFullmektig! +} + +type hentGeografiskTilknytningBolkResult { + code: String! + geografiskTilknytning: GeografiskTilknytning + ident: String! +} + +enum AdressebeskyttelseGradering { + FORTROLIG + STRENGT_FORTROLIG + STRENGT_FORTROLIG_UTLAND + UGRADERT +} + +enum Direction { + ASC + DESC +} + +enum Endringstype { + KORRIGER + OPPHOER + OPPRETT +} + +enum Familierelasjonsrolle { + BARN + FAR + MEDMOR + MOR +} + +enum ForelderBarnRelasjonRolle { + BARN + FAR + MEDMOR + MOR +} + +enum FullmaktsRolle { + FULLMAKTSGIVER + FULLMEKTIG +} + +enum GtType { + BYDEL + KOMMUNE + UDEFINERT + UTLAND +} + +enum IdentGruppe { + AKTORID + FOLKEREGISTERIDENT + NPID +} + +enum Identitetsgrunnlagsstatus { + IKKE_KONTROLLERT + INGEN_STATUS + KONTROLLERT +} + +enum KjoennType { + KVINNE + MANN + UKJENT +} + +enum KontaktadresseType { + Innland + Utland +} + +enum KontaktinformasjonForDoedsboSkifteform { + ANNET + OFFENTLIG +} + +enum Oppholdstillatelse { + MIDLERTIDIG + OPPLYSNING_MANGLER + PERMANENT +} + +enum Sivilstandstype { + ENKE_ELLER_ENKEMANN + GIFT + GJENLEVENDE_PARTNER + REGISTRERT_PARTNER + SEPARERT + SEPARERT_PARTNER + SKILT + SKILT_PARTNER + UGIFT + UOPPGITT +} + +"Format: YYYY-MM-DD (ISO-8601), example: 2017-11-24" +scalar Date + +"Format: YYYY-MM-DDTHH:mm:SS (ISO-8601), example: 2011-12-03T10:15:30" +scalar DateTime + +"A 64-bit signed integer" +scalar Long + +input CompletionFieldValue { + fieldName: String! + fieldValue: String +} + +input CompletionParameters { + completionField: String! + fieldValues: [CompletionFieldValue]! + maxSuggestions: Int +} + +input Criterion { + and: [Criterion] + " Feltnavn inkludert sti til ønsket felt (Eksempel: person.navn.fornavn)" + fieldName: String + not: [Criterion] + or: [Criterion] + """ + + Søk i historiske data + true = søker kun i historiske data. + false = søker kun i gjeldende data. + null = søke i både historiske og gjeldende data. + """ + searchHistorical: Boolean + searchRule: SearchRule +} + +input Paging { + " Hvilken side i resultatsettet man ønsker vist." + pageNumber: Int = 1 + " antall treff per side (maks 100)" + resultsPerPage: Int = 10 + """ + + Liste over felter man ønsker resultatene sortert etter + Standard er "score". Score er poengsummen Elasticsearch tildeler hvert resultat. + """ + sortBy: [SearchSorting] +} + +input SearchRule { + " Brukes til søke etter datoer som kommer etter opgitt dato." + after: String + " Brukes til søke etter datoer som kommer før opgitt dato." + before: String + " Boost brukes til å gi ett søkekriterie høyere eller lavere vektlegging en de andre søke kriteriene." + boost: Float + " [Flag] Kan brukes til å overstyre standard oppførsellen for søk i felter (standard er case insensitive)" + caseSensitive: Boolean + " Gir treff når opgitt felt inneholder en eller flere ord fra input verdien." + contains: String + " [Flag] Brukes til å deaktivere fonetisk søk feltene som har dette som standard (Navn)" + disablePhonetic: Boolean + " Begrenser treff til kun de hvor felt har input verdi" + equals: String + " Sjekker om feltet finnes / at det ikke har en null verdi." + exists: String + """ + + Søk fra og med (se fromExcluding for bare fra men ikke med) + kan benyttes på tall og dato + """ + from: String + """ + + Søk fra men ikke med oppgitt verdi + kan benyttes på tall og dato + """ + fromExcluding: String + " Søk som gir treff også for små variasjoner i skrivemåte" + fuzzy: String + " Brukes til å søke i tall og finner verdier som er størren en input verdi." + greaterThan: String + " Brukes til å søke i tall og finner verdier som er mindre en input verdi." + lessThan: String + " Filtrerer bort treff hvor felt inneholder input verdi" + notEquals: String + " Søk som gir tilfeldig poengsum til hvert treff (kun ment til generering av testdata)" + random: String + " Regex søk for spesielle situasjoner (Dette er en treg opprasjon og bør ikke brukes)" + regex: String + " Gir treff når opgitt feltstarter med opgitt verdi." + startsWith: String + """ + + Søk til og med (se toExcluding for bare til men ikke med) + kan benyttes på tall og dato + """ + to: String + """ + + Søk til men ikke med oppgitt verdi + kan benyttes på tall og dato + """ + toExcluding: String + " Bruk \"?\" som wildcard for enkelt tegn, og \"*\" som wildcard for 0 eller flere tegn." + wildcard: String +} + +input SearchSorting { + direction: Direction! + " Feltnavn ikludert sti til ønsket felt (eksepmel: person.navn.fornavn)" + fieldName: String! +} diff --git a/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdlbolkquery.graphql b/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdlbolkquery.graphql index acf324ca33a..5adcb038f40 100644 --- a/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdlbolkquery.graphql +++ b/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdlbolkquery.graphql @@ -24,12 +24,9 @@ query($identer: [ID!]!) { hentPersonBolk(identer: $identer) { ident, person { - foedsel { + foedselsdato { foedselsaar, foedselsdato, - foedeland, - foedested, - foedekommune, folkeregistermetadata { ...folkeregistermetadataDetails } diff --git a/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdlquery.graphql b/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdlquery.graphql index 4a97089ff42..c7234709128 100644 --- a/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdlquery.graphql +++ b/apps/synt-vedtakshistorikk-service/src/main/resources/pdlperson/pdlquery.graphql @@ -36,12 +36,9 @@ query($ident: ID!, $historikk: Boolean!) { regel } hentPerson(ident: $ident) { - foedsel { + foedselsdato { foedselsaar, foedselsdato, - foedeland, - foedested, - foedekommune, metadata { ...metadataDetails } diff --git a/apps/synt-vedtakshistorikk-service/src/test/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaAapServiceTest.java b/apps/synt-vedtakshistorikk-service/src/test/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaAapServiceTest.java index 8b05c6be483..2df7e69c6f9 100644 --- a/apps/synt-vedtakshistorikk-service/src/test/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaAapServiceTest.java +++ b/apps/synt-vedtakshistorikk-service/src/test/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/ArenaAapServiceTest.java @@ -5,7 +5,7 @@ import no.nav.testnav.libs.domain.dto.arena.testnorge.aap.gensaksopplysninger.Saksopplysning; import no.nav.testnav.libs.domain.dto.arena.testnorge.historikk.Vedtakshistorikk; import no.nav.testnav.libs.domain.dto.arena.testnorge.vedtak.NyttVedtakAap; -import no.nav.testnav.libs.dto.personsearchservice.v1.FoedselDTO; +import no.nav.testnav.libs.dto.personsearchservice.v1.FoedselsdatoDTO; import no.nav.testnav.libs.dto.personsearchservice.v1.PersonDTO; import org.junit.Before; import org.junit.Test; @@ -21,10 +21,10 @@ import java.util.Collections; import java.util.List; -import static org.mockito.Mockito.when; -import static org.assertj.core.api.Assertions.assertThat; -import static no.nav.testnav.apps.syntvedtakshistorikkservice.service.util.ServiceUtils.ARENA_AAP_UNG_UFOER_DATE_LIMIT; import static no.nav.testnav.apps.syntvedtakshistorikkservice.service.util.ServiceUtils.AKTIVITETSFASE_SYKEPENGEERSTATNING; +import static no.nav.testnav.apps.syntvedtakshistorikkservice.service.util.ServiceUtils.ARENA_AAP_UNG_UFOER_DATE_LIMIT; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class ArenaAapServiceTest { @@ -38,7 +38,7 @@ public class ArenaAapServiceTest { private final String fnr1 = "27869949421"; private final PersonDTO person = PersonDTO.builder() .ident(fnr1) - .foedsel(FoedselDTO.builder() + .foedselsdato(FoedselsdatoDTO.builder() .foedselsdato(LocalDate.of(1999, 6, 27)) .build()) .build(); @@ -103,7 +103,7 @@ public void shouldGetIkkeAvsluttende115Vedtak(){ var emptyVedtak = arenaAapService.getIkkeAvsluttendeVedtakAap115(null); assertThat(ikkeAvsluttendeVedtak).hasSize(1); - assertThat(ikkeAvsluttendeVedtak.get(0).getVedtaktype()).isEqualTo("O"); + assertThat(ikkeAvsluttendeVedtak.getFirst().getVedtaktype()).isEqualTo("O"); assertThat(emptyVedtak).isEmpty(); } @@ -114,7 +114,7 @@ public void shouldGetAvsluttende115Vedtak(){ var emptyVedtak = arenaAapService.getAvsluttendeVedtakAap115(null); assertThat(avsluttendeVedtak).hasSize(1); - assertThat(avsluttendeVedtak.get(0).getVedtaktype()).isEqualTo("S"); + assertThat(avsluttendeVedtak.getFirst().getVedtaktype()).isEqualTo("S"); assertThat(emptyVedtak).isEmpty(); } @@ -129,7 +129,7 @@ public void shouldFjernAapUngUfoerMedUgyldigeDatoer(){ var response = arenaAapService.fjernAapUngUfoerMedUgyldigeDatoer(vedtak); assertThat(response).hasSize(1); - assertThat(response.get(0).getFraDato()).isEqualTo(ARENA_AAP_UNG_UFOER_DATE_LIMIT.minusDays(7)); + assertThat(response.getFirst().getFraDato()).isEqualTo(ARENA_AAP_UNG_UFOER_DATE_LIMIT.minusDays(7)); } @Test diff --git a/apps/synt-vedtakshistorikk-service/src/test/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/PensjonServiceTest.java b/apps/synt-vedtakshistorikk-service/src/test/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/PensjonServiceTest.java index 9dfdc463a73..602d8980ff7 100644 --- a/apps/synt-vedtakshistorikk-service/src/test/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/PensjonServiceTest.java +++ b/apps/synt-vedtakshistorikk-service/src/test/java/no/nav/testnav/apps/syntvedtakshistorikkservice/service/PensjonServiceTest.java @@ -7,7 +7,7 @@ import no.nav.testnav.apps.syntvedtakshistorikkservice.consumer.response.pensjon.PensjonTestdataResponse; import no.nav.testnav.apps.syntvedtakshistorikkservice.consumer.response.pensjon.PensjonTestdataResponseDetails; import no.nav.testnav.apps.syntvedtakshistorikkservice.consumer.response.pensjon.PensjonTestdataStatus; -import no.nav.testnav.libs.dto.personsearchservice.v1.FoedselDTO; +import no.nav.testnav.libs.dto.personsearchservice.v1.FoedselsdatoDTO; import no.nav.testnav.libs.dto.personsearchservice.v1.PersonDTO; import org.junit.Test; import org.junit.runner.RunWith; @@ -38,7 +38,7 @@ public void shouldOpprettePersonOgInntektIPopp() { var miljoe = "TEST"; var person = PersonDTO.builder() .ident("01016412345") - .foedsel(FoedselDTO.builder() + .foedselsdato(FoedselsdatoDTO.builder() .foedselsdato(LocalDate.of(1964, 1, 1)) .build()) .build(); @@ -67,7 +67,7 @@ public void shouldAcceptPensjonTimestampString() { var miljoe = "TEST"; var person = PersonDTO.builder() .ident("01016412345") - .foedsel(FoedselDTO.builder() + .foedselsdato(FoedselsdatoDTO.builder() .foedselsdato(LocalDate.of(1964, 1, 1)) .build()) .build(); diff --git a/apps/synt-vedtakshistorikk-service/src/test/resources/files/pdl/pdlperson.json b/apps/synt-vedtakshistorikk-service/src/test/resources/files/pdl/pdlperson.json index 2423815908d..2780bf175f4 100644 --- a/apps/synt-vedtakshistorikk-service/src/test/resources/files/pdl/pdlperson.json +++ b/apps/synt-vedtakshistorikk-service/src/test/resources/files/pdl/pdlperson.json @@ -148,13 +148,10 @@ "kontaktinformasjonForDoedsbo": [], "utenlandskIdentifikasjonsnummer": [], "adressebeskyttelse": [], - "foedsel": [ + "foedselsdato": [ { "foedselsaar": 1952, "foedselsdato": "1952-01-01", - "foedeland": "NOR", - "foedested": null, - "foedekommune": "3024", "folkeregistermetadata": { "aarsak": null, "ajourholdstidspunkt": "2022-03-02T09:35:36", diff --git a/apps/synt-vedtakshistorikk-service/src/test/resources/files/pdl/pdlpersonbolk.json b/apps/synt-vedtakshistorikk-service/src/test/resources/files/pdl/pdlpersonbolk.json index 3d479f4fbba..5da14e42a11 100644 --- a/apps/synt-vedtakshistorikk-service/src/test/resources/files/pdl/pdlpersonbolk.json +++ b/apps/synt-vedtakshistorikk-service/src/test/resources/files/pdl/pdlpersonbolk.json @@ -13,7 +13,7 @@ } } ], - "foedsel": [ + "foedselsdato": [ { "foedselsdato": "1973-09-05", "metadata": { diff --git a/apps/synt-vedtakshistorikk-service/src/test/resources/files/search/single_search_response.json b/apps/synt-vedtakshistorikk-service/src/test/resources/files/search/single_search_response.json index a258d34d34c..a0f0d44d46d 100644 --- a/apps/synt-vedtakshistorikk-service/src/test/resources/files/search/single_search_response.json +++ b/apps/synt-vedtakshistorikk-service/src/test/resources/files/search/single_search_response.json @@ -10,7 +10,7 @@ "tags": [ "TESTNORGE" ], - "foedsel": { + "foedselsdato": { "foedselsdato": "1968-06-11" }, "sivilstand": { diff --git a/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/FoedselDTO.java b/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/FoedselsdatoDTO.java similarity index 90% rename from libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/FoedselDTO.java rename to libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/FoedselsdatoDTO.java index 69cd54b5fe8..dec5d6a402d 100644 --- a/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/FoedselDTO.java +++ b/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/FoedselsdatoDTO.java @@ -11,6 +11,6 @@ @Builder @AllArgsConstructor @NoArgsConstructor(force = true) -public class FoedselDTO { +public class FoedselsdatoDTO { LocalDate foedselsdato; } \ No newline at end of file diff --git a/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/PersonDTO.java b/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/PersonDTO.java index 28dff78cf7a..a9cd503d978 100644 --- a/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/PersonDTO.java +++ b/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/PersonDTO.java @@ -19,7 +19,7 @@ public class PersonDTO { String ident; String aktorId; List tags; - FoedselDTO foedsel; + FoedselsdatoDTO foedselsdato; DoedsfallDTO doedsfall; SivilstandDTO sivilstand; StatsborgerskapDTO statsborgerskap; diff --git a/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/search/FoedselSearch.java b/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/search/FoedselsdatoSearch.java similarity index 89% rename from libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/search/FoedselSearch.java rename to libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/search/FoedselsdatoSearch.java index e6af7d7c3af..da132b0cf25 100644 --- a/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/search/FoedselSearch.java +++ b/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/search/FoedselsdatoSearch.java @@ -9,7 +9,7 @@ @Value @AllArgsConstructor @NoArgsConstructor(force = true) -public class FoedselSearch { +public class FoedselsdatoSearch { LocalDate fom; LocalDate tom; } diff --git a/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/search/PersonSearch.java b/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/search/PersonSearch.java index 835775d9910..29112ee7574 100644 --- a/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/search/PersonSearch.java +++ b/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/personsearchservice/v1/search/PersonSearch.java @@ -2,8 +2,8 @@ import lombok.AllArgsConstructor; import lombok.Builder; -import lombok.NoArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; @@ -22,7 +22,7 @@ public class PersonSearch { String randomSeed; Boolean kunLevende; List identer; - FoedselSearch foedsel; + FoedselsdatoSearch foedselsdato; SivilstandSearch sivilstand; NasjonalitetSearch nasjonalitet; AlderSearch alder; From 7ec8fa7e797c1c507db869895aa8fe444407a7df Mon Sep 17 00:00:00 2001 From: Stian Gustavsson Date: Tue, 3 Sep 2024 14:18:16 +0200 Subject: [PATCH 2/2] Bugfix/sigrunstub validering (#3604) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Endringer for validering i sigrunstub * Fikset antall mulige elementer i fieldArray på sigrunstub og skrevet om/lagt til validering * Oppdatering og mindre refaktor --- .../src/main/js/package-lock.json | 234 +++++++++--------- apps/dolly-frontend/src/main/js/package.json | 2 +- .../fagsystem/sigrunstub/form/Form.tsx | 24 +- .../form/partials/enkeltinntektForm.tsx | 8 +- .../form/partials/inntektsaarForm.tsx | 98 ++++---- .../sigrunstubPensjonsgivende/form/Form.tsx | 5 +- .../form/PensjonsgivendeInntektForm.tsx | 6 +- .../form/validation.tsx | 27 +- .../ui/form/fieldArray/DollyFieldArray.tsx | 3 +- 9 files changed, 218 insertions(+), 189 deletions(-) diff --git a/apps/dolly-frontend/src/main/js/package-lock.json b/apps/dolly-frontend/src/main/js/package-lock.json index 8f8383c0cb4..8856d18f57e 100644 --- a/apps/dolly-frontend/src/main/js/package-lock.json +++ b/apps/dolly-frontend/src/main/js/package-lock.json @@ -1,12 +1,12 @@ { "name": "dolly", - "version": "3.0.26", + "version": "3.0.27", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dolly", - "version": "3.0.26", + "version": "3.0.27", "license": "ISC", "dependencies": { "@grafana/faro-react": "^1.1.2", @@ -172,12 +172,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz", - "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.4", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -311,14 +311,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/types": "^7.25.6" }, "engines": { "node": ">=6.9.0" @@ -340,12 +340,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz", - "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.4" + "@babel/types": "^7.25.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -403,9 +403,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz", - "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -429,16 +429,16 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz", - "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.4", - "@babel/parser": "^7.25.4", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", "@babel/template": "^7.25.0", - "@babel/types": "^7.25.4", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -447,9 +447,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz", - "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.24.8", @@ -2720,9 +2720,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.1.tgz", - "integrity": "sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", + "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", "cpu": [ "arm" ], @@ -2734,9 +2734,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.1.tgz", - "integrity": "sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", + "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", "cpu": [ "arm64" ], @@ -2748,9 +2748,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.1.tgz", - "integrity": "sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", + "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", "cpu": [ "arm64" ], @@ -2762,9 +2762,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.1.tgz", - "integrity": "sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", + "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", "cpu": [ "x64" ], @@ -2776,9 +2776,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.1.tgz", - "integrity": "sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", + "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", "cpu": [ "arm" ], @@ -2790,9 +2790,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.1.tgz", - "integrity": "sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", + "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", "cpu": [ "arm" ], @@ -2804,9 +2804,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.1.tgz", - "integrity": "sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", + "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", "cpu": [ "arm64" ], @@ -2818,9 +2818,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.1.tgz", - "integrity": "sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", + "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", "cpu": [ "arm64" ], @@ -2832,9 +2832,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.1.tgz", - "integrity": "sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", + "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", "cpu": [ "ppc64" ], @@ -2846,9 +2846,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.1.tgz", - "integrity": "sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", + "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", "cpu": [ "riscv64" ], @@ -2860,9 +2860,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.1.tgz", - "integrity": "sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", + "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", "cpu": [ "s390x" ], @@ -2874,9 +2874,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.1.tgz", - "integrity": "sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", + "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", "cpu": [ "x64" ], @@ -2888,9 +2888,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.1.tgz", - "integrity": "sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", + "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", "cpu": [ "x64" ], @@ -2902,9 +2902,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.1.tgz", - "integrity": "sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", + "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", "cpu": [ "arm64" ], @@ -2916,9 +2916,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.1.tgz", - "integrity": "sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", + "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", "cpu": [ "ia32" ], @@ -2930,9 +2930,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.1.tgz", - "integrity": "sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", + "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", "cpu": [ "x64" ], @@ -3064,9 +3064,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.1.tgz", - "integrity": "sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==", + "version": "22.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz", + "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==", "license": "MIT", "dependencies": { "undici-types": "~6.19.2" @@ -3085,9 +3085,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.4", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.4.tgz", - "integrity": "sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==", + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz", + "integrity": "sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -3811,9 +3811,9 @@ } }, "node_modules/axios": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", - "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -3985,9 +3985,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001653", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz", - "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==", + "version": "1.0.30001655", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", + "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==", "dev": true, "funding": [ { @@ -4835,9 +4835,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -8677,9 +8677,9 @@ } }, "node_modules/rollup": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.1.tgz", - "integrity": "sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", + "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", "dev": true, "license": "MIT", "dependencies": { @@ -8693,22 +8693,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.1", - "@rollup/rollup-android-arm64": "4.21.1", - "@rollup/rollup-darwin-arm64": "4.21.1", - "@rollup/rollup-darwin-x64": "4.21.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.1", - "@rollup/rollup-linux-arm-musleabihf": "4.21.1", - "@rollup/rollup-linux-arm64-gnu": "4.21.1", - "@rollup/rollup-linux-arm64-musl": "4.21.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.1", - "@rollup/rollup-linux-riscv64-gnu": "4.21.1", - "@rollup/rollup-linux-s390x-gnu": "4.21.1", - "@rollup/rollup-linux-x64-gnu": "4.21.1", - "@rollup/rollup-linux-x64-musl": "4.21.1", - "@rollup/rollup-win32-arm64-msvc": "4.21.1", - "@rollup/rollup-win32-ia32-msvc": "4.21.1", - "@rollup/rollup-win32-x64-msvc": "4.21.1", + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", "fsevents": "~2.3.2" } }, @@ -9242,9 +9242,9 @@ } }, "node_modules/styled-components": { - "version": "6.1.12", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.12.tgz", - "integrity": "sha512-n/O4PzRPhbYI0k1vKKayfti3C/IGcPf+DqcrOB7O/ab9x4u/zjqraneT5N45+sIe87cxrCApXM8Bna7NYxwoTA==", + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz", + "integrity": "sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==", "license": "MIT", "dependencies": { "@emotion/is-prop-valid": "1.2.2", @@ -9546,9 +9546,9 @@ } }, "node_modules/tsconfck": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.1.tgz", - "integrity": "sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.3.tgz", + "integrity": "sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==", "dev": true, "license": "MIT", "bin": { @@ -9943,9 +9943,9 @@ } }, "node_modules/vite/node_modules/postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "version": "8.4.43", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.43.tgz", + "integrity": "sha512-gJAQVYbh5R3gYm33FijzCZj7CHyQ3hWMgJMprLUlIYqCwTeZhBQ19wp0e9mA25BUbEvY5+EXuuaAjqQsrBxQBQ==", "dev": true, "funding": [ { diff --git a/apps/dolly-frontend/src/main/js/package.json b/apps/dolly-frontend/src/main/js/package.json index ae9f18961c9..625d4fd102f 100644 --- a/apps/dolly-frontend/src/main/js/package.json +++ b/apps/dolly-frontend/src/main/js/package.json @@ -1,6 +1,6 @@ { "name": "dolly", - "version": "3.0.26", + "version": "3.0.27", "type": "module", "description": "", "main": "index.js", diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/Form.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/Form.tsx index 3dbb526d982..4c35795db0d 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/Form.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/Form.tsx @@ -30,6 +30,7 @@ SigrunstubForm.validation = { Yup.array().of( Yup.object({ grunnlag: Yup.array() + .max(1) .of( Yup.object({ tekniskNavn: Yup.string().required('Velg en type inntekt'), @@ -50,15 +51,20 @@ SigrunstubForm.validation = { } return values.grunnlag?.length > 0 || values.svalbardGrunnlag?.length > 0 }), - inntektsaar: Yup.number().integer('Ugyldig årstall').required('Tast inn et gyldig år'), - svalbardGrunnlag: Yup.array().of( - Yup.object({ - tekniskNavn: Yup.string().required('Velg en type inntekt'), - verdi: Yup.number() - .min(0, 'Tast inn en gyldig verdi') - .typeError('Tast inn en gyldig verdi'), - }), - ), + inntektsaar: Yup.number() + .min(2017) + .integer('Ugyldig årstall') + .required('Tast inn et gyldig år'), + svalbardGrunnlag: Yup.array() + .max(1) + .of( + Yup.object({ + tekniskNavn: Yup.string().required('Velg en type inntekt'), + verdi: Yup.number() + .min(0, 'Tast inn en gyldig verdi') + .typeError('Tast inn en gyldig verdi'), + }), + ), tjeneste: Yup.string().required('Velg en type tjeneste'), }), ), diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/partials/enkeltinntektForm.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/partials/enkeltinntektForm.tsx index baf90a1552a..2a20222e603 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/partials/enkeltinntektForm.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/partials/enkeltinntektForm.tsx @@ -25,7 +25,13 @@ export const EnkeltinntektForm = ({ const filteredTekniskNavnOptions = getFilteredTekniskNavnOptions() return ( - + {(path, idx) => { const typeInntekt = formMethods.watch(`${path}.tekniskNavn`) return ( diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/partials/inntektsaarForm.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/partials/inntektsaarForm.tsx index 9c4ce54ccb1..6c962faf51e 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/partials/inntektsaarForm.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstub/form/partials/inntektsaarForm.tsx @@ -38,57 +38,55 @@ export const InntektsaarForm = ({ formMethods }) => { {(path) => ( - -
- - 0} - isClearable={false} - size="large" - onChange={(target) => handleTjenesteChange(target, path)} - /> -
- {tjenesteErValgt(formMethods, path) && ( - - )} - {formMethods.watch(`${path}.tjeneste`) === 'SUMMERT_SKATTEGRUNNLAG' && ( - - )} +
+ + 0} + isClearable={false} + size="large" + onChange={(target) => handleTjenesteChange(target, path)} + /> +
+ {tjenesteErValgt(formMethods, path) && ( + + )} + {formMethods.watch(`${path}.tjeneste`) === 'SUMMERT_SKATTEGRUNNLAG' && ( + + )} -
- - errorContext.showError && ( - {message} - ) - } - /> -
-
+
+ + errorContext.showError && ( + {message} + ) + } + /> +
)}
diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/Form.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/Form.tsx index 413daf72d6f..7cb6080f139 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/Form.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/Form.tsx @@ -16,6 +16,7 @@ import { import { getInitialInntekt } from '@/components/fagsystem/sigrunstubPensjonsgivende/utils' import { validation } from '@/components/fagsystem/sigrunstubPensjonsgivende/form/validation' import { useFormContext } from 'react-hook-form' +import _ from 'lodash' export const getInitialSigrunstubPensjonsgivende = (kodeverk = null, skatteordning = null) => { return { @@ -40,6 +41,7 @@ export const SigrunstubPensjonsgivendeForm = () => { const formMethods = useFormContext() const { kodeverk } = usePensjonsgivendeInntektKodeverk() const { skatteordning } = usePensjonsgivendeInntektSkatteordning() + const arrayError = _.get(formMethods.formState.errors, 'sigrunstubPensjonsgivende.root')?.message useEffect(() => { const pensjonsgivendeInntektPath = 'sigrunstubPensjonsgivende[0].pensjonsgivendeInntekt' @@ -68,6 +70,7 @@ export const SigrunstubPensjonsgivendeForm = () => { name="sigrunstubPensjonsgivende" header="Pensjonsgivende inntekt" newEntry={getInitialSigrunstubPensjonsgivende(kodeverk, skatteordning)} + errorText={arrayError} canBeEmpty={false} > {(path) => ( @@ -76,7 +79,7 @@ export const SigrunstubPensjonsgivendeForm = () => { diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/PensjonsgivendeInntektForm.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/PensjonsgivendeInntektForm.tsx index 7077259335d..93db703bbc6 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/PensjonsgivendeInntektForm.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/PensjonsgivendeInntektForm.tsx @@ -14,7 +14,7 @@ const getSkatteordningOptions = (skatteordning) => { return skatteordning?.map((item) => ({ value: item, label: _.capitalize(item) })) } -const createInntektForm = (kodeverk, skatteordning, path) => { +const createInntektForm = (kodeverk, skatteordning, path, formMethods) => { if (!kodeverk) { return null } @@ -30,6 +30,7 @@ const createInntektForm = (kodeverk, skatteordning, path) => { name={`${path}.${key}`} key={`${path}.${key}`} label={label} + afterChange={() => formMethods.trigger('sigrunstubPensjonsgivende')} options={skatteordningOptions} isClearable={false} size={size} @@ -69,12 +70,13 @@ export const PensjonsgivendeInntektForm = ({ path, formMethods, kodeverk, skatte newEntry={newEntry} canBeEmpty={false} errorText={inntektError} + maxEntries={2} nested > {(path, idx) => { return (
- {createInntektForm(kodeverk, skatteordning, path)} + {createInntektForm(kodeverk, skatteordning, path, formMethods)}
) }} diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/validation.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/validation.tsx index f45cd43a5f9..3908be5c7f5 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/validation.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sigrunstubPensjonsgivende/form/validation.tsx @@ -4,12 +4,25 @@ import * as Yup from 'yup' export const validation = { sigrunstubPensjonsgivende: ifPresent( '$sigrunstubPensjonsgivende', - Yup.array().of( - Yup.object({ - inntektsaar: requiredString, - testdataEier: Yup.string().nullable(), - pensjonsgivendeInntekt: Yup.array().min(1, 'Må ha minst én inntekt'), - }), - ), + Yup.array() + .test( + 'duplicate', + 'Kan ikke ha to pensjonsgivende inntekter for samme år', + (val, _context) => { + const years = val?.map((v) => v.inntektsaar) + return years?.length === new Set(years).size + }, + ) + .of( + Yup.object({ + inntektsaar: requiredString, + testdataEier: Yup.string().nullable(), + pensjonsgivendeInntekt: Yup.array() + .test('duplicate', 'Skatteordningene kan ikke være like', (value, _context) => { + return value?.[0]?.skatteordning !== value?.[1]?.skatteordning + }) + .min(1, 'Må ha minst én inntekt'), + }), + ), ), } diff --git a/apps/dolly-frontend/src/main/js/src/components/ui/form/fieldArray/DollyFieldArray.tsx b/apps/dolly-frontend/src/main/js/src/components/ui/form/fieldArray/DollyFieldArray.tsx index de675680b81..a8b199028aa 100644 --- a/apps/dolly-frontend/src/main/js/src/components/ui/form/fieldArray/DollyFieldArray.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/ui/form/fieldArray/DollyFieldArray.tsx @@ -254,6 +254,7 @@ export const FormDollyFieldArray = ({ const number = tag ? `${tag}.${idx + 1}` : `${idx + 1}` const handleRemove = () => { handleRemoveEntry ? handleRemoveEntry(idx) : remove(idx) + formMethods.trigger(name) } if (nested) { @@ -300,7 +301,7 @@ export const FormDollyFieldArray = ({ {errorText && {errorText}}