diff --git a/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/BehandlendeEnhetTjeneste.java b/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/BehandlendeEnhetTjeneste.java index d9b4d25353a..99f7919f811 100644 --- a/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/BehandlendeEnhetTjeneste.java +++ b/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/BehandlendeEnhetTjeneste.java @@ -219,6 +219,10 @@ public void oppdaterBehandlendeEnhet(Behandling behandling, OrganisasjonsEnhet n behandlingEventPubliserer.publiserBehandlingEvent(new BehandlingEnhetEvent(behandling)); } + public Set finnRuting(Set aktørIds) { + return enhetsTjeneste.finnRuting(aktørIds); + } + private void lagHistorikkInnslagForByttBehandlendeEnhet(Behandling behandling, OrganisasjonsEnhet nyEnhet, String begrunnelse, diff --git a/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/EnhetsTjeneste.java b/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/EnhetsTjeneste.java index 782678e47b2..da6e317e95e 100644 --- a/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/EnhetsTjeneste.java +++ b/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/EnhetsTjeneste.java @@ -5,6 +5,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; @@ -88,6 +89,7 @@ public class EnhetsTjeneste { private PersoninfoAdapter personinfoAdapter; private Arbeidsfordeling norgRest; private SkjermetPersonKlient skjermetPersonKlient; + private RutingKlient rutingKlient; public EnhetsTjeneste() { // For CDI proxy @@ -96,10 +98,12 @@ public EnhetsTjeneste() { @Inject public EnhetsTjeneste(PersoninfoAdapter personinfoAdapter, Arbeidsfordeling arbeidsfordelingRestKlient, - SkjermetPersonKlient skjermetPersonKlient) { + SkjermetPersonKlient skjermetPersonKlient, + RutingKlient rutingKlient) { this.personinfoAdapter = personinfoAdapter; this.norgRest = arbeidsfordelingRestKlient; this.skjermetPersonKlient = skjermetPersonKlient; + this.rutingKlient = rutingKlient; } static OrganisasjonsEnhet velgEnhet(OrganisasjonsEnhet enhet, Collection markering) { @@ -130,13 +134,22 @@ static List hentEnhetListe() { } OrganisasjonsEnhet hentEnhetSjekkKunAktør(AktørId aktørId, FagsakYtelseType ytelseType) { + var rutingResultater = finnRuting(Set.of(aktørId)); if (harNoenDiskresjonskode6(ytelseType, Set.of(aktørId))) { + LOG.info("RUTING {}", rutingResultater.contains(RutingResultat.STRENGTFORTROLIG) ? "ok" : "diff sf"); return KODE6_ENHET; } else if (erNoenSkjermetPerson(Set.of(aktørId))) { + LOG.info("RUTING {}", rutingResultater.contains(RutingResultat.SKJERMING) ? "ok" : "diff skjerm"); return SKJERMET_ENHET; + } else if (personinfoAdapter.hentGeografiskTilknytning(ytelseType, aktørId) == null) { + LOG.info("RUTING {}", rutingResultater.contains(RutingResultat.UTLAND) ? "ok" : "diff utland"); + return UTLAND_ENHET; } else { - return personinfoAdapter.hentGeografiskTilknytning(ytelseType, aktørId) == null ? UTLAND_ENHET : NASJONAL_ENHET; - // Beholde ut 2023 + if (!rutingResultater.isEmpty()) { + LOG.info("RUTING diff nasjonal vs resultat {}", rutingResultater); + } + return NASJONAL_ENHET; + // Beholde ut 2025 // var enheter = hentEnheterFor(geografiskTilknytning, behandlingTema); // return enheter.isEmpty() ? NASJONAL_ENHET : velgEnhet(enheter.get(0), null); } @@ -147,11 +160,13 @@ Optional oppdaterEnhetSjekkOppgittePersoner(String enhetId, if (SPESIALENHETER.contains(enhetId)) { return Optional.empty(); } + var rutingResultater = finnRuting(alleAktører); if (harNoenDiskresjonskode6(ytelseType, alleAktører)) { + LOG.info("RUTING {}", rutingResultater.contains(RutingResultat.STRENGTFORTROLIG) ? "ok" : "diff sf"); return Optional.of(KODE6_ENHET); } if (erNoenSkjermetPerson(alleAktører)) { - LOG.info("FPSAK enhettjeneste skjermet person funnet"); + LOG.info("RUTING {}", rutingResultater.contains(RutingResultat.SKJERMING) ? "ok" : "diff skjerm"); return Optional.of(SKJERMET_ENHET); } if (saksmarkering.contains(FagsakMarkering.SAMMENSATT_KONTROLL)) { @@ -169,6 +184,15 @@ Optional oppdaterEnhetSjekkOppgittePersoner(String enhetId, return Optional.of(FLYTTE_MAP.get(enhetId)).filter(ny -> !ny.enhetId().equals(enhetId)); } + public Set finnRuting(Set aktørIds) { + try { + return rutingKlient.finnRutingEgenskaper(aktørIds.stream().map(AktørId::getId).collect(Collectors.toSet())); + } catch (Exception e) { + LOG.info("RUTING feil", e); + return Set.of(); + } + } + private boolean harNoenDiskresjonskode6(FagsakYtelseType ytelseType, Set aktører) { return aktører.stream() .map(a -> personinfoAdapter.hentDiskresjonskode(ytelseType, a)) @@ -202,7 +226,7 @@ static OrganisasjonsEnhet getEnhetNasjonal() { return NASJONAL_ENHET; } - // Behold ut 2023 + // Behold ut 2025 private List hentEnheterFor(String geografi, FagsakYtelseType ytelseType) { var brukBTema = ytelseType == null || FagsakYtelseType.UDEFINERT.equals(ytelseType) ? BehandlingTema.FORELDREPENGER : BehandlingTema.fraFagsak(ytelseType, null); diff --git a/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/RegistrerFagsakEgenskaper.java b/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/RegistrerFagsakEgenskaper.java index eb49dd79e6a..b6e370030bd 100644 --- a/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/RegistrerFagsakEgenskaper.java +++ b/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/RegistrerFagsakEgenskaper.java @@ -10,6 +10,9 @@ import jakarta.enterprise.context.Dependent; import jakarta.inject.Inject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import no.nav.foreldrepenger.behandlingslager.behandling.Behandling; import no.nav.foreldrepenger.behandlingslager.behandling.BehandlingType; import no.nav.foreldrepenger.behandlingslager.behandling.historikk.HistorikkAktør; @@ -33,6 +36,8 @@ @Dependent public class RegistrerFagsakEgenskaper { + private static final Logger LOG = LoggerFactory.getLogger(RegistrerFagsakEgenskaper.class); + private final BehandlendeEnhetTjeneste enhetTjeneste; private final PersoninfoAdapter personinfo; private final MedlemskapRepository medlemskapRepository; @@ -63,11 +68,16 @@ public void fagsakEgenskaperForBruker(Behandling behandling) { return; } + var rutingResultat = enhetTjeneste.finnRuting(Set.of(behandling.getAktørId())); + // Har registrert en tilknytning og ikke utflyttet if (personinfo.hentGeografiskTilknytning(behandling.getFagsakYtelseType(), behandling.getAktørId()) == null) { + LOG.info("RUTING {}", rutingResultat.contains(RutingResultat.UTLAND) ? "ok" : "diff utland fra hentGT"); fagsakEgenskapRepository.leggTilFagsakMarkering(behandling.getFagsakId(), FagsakMarkering.BOSATT_UTLAND); BehandlendeEnhetTjeneste.sjekkSkalOppdatereEnhet(behandling, fagsakEgenskapRepository.finnFagsakMarkeringer(behandling.getFagsakId())) .ifPresent(e -> enhetTjeneste.oppdaterBehandlendeEnhet(behandling, e, HistorikkAktør.VEDTAKSLØSNINGEN, "Personopplysning")); + } else { + LOG.info("RUTING {}", rutingResultat.contains(RutingResultat.UTLAND) ? "diff utland fra tilgang" : "ok"); } } diff --git a/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/RutingKlient.java b/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/RutingKlient.java new file mode 100644 index 00000000000..9416a1e1bdd --- /dev/null +++ b/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/RutingKlient.java @@ -0,0 +1,39 @@ +package no.nav.foreldrepenger.produksjonsstyring.behandlingenhet; + +import jakarta.enterprise.context.Dependent; +import jakarta.validation.Valid; +import jakarta.ws.rs.core.UriBuilder; + +import no.nav.vedtak.felles.integrasjon.rest.*; + +import java.net.URI; +import java.util.Set; + +@Dependent +@RestClientConfig(tokenConfig = TokenFlow.AZUREAD_CC, application = FpApplication.FPTILGANG) +public class RutingKlient { + + private final URI rutingUri; + private final RestClient klient; + private final RestConfig restConfig; + + public RutingKlient() { + this.klient = RestClient.client(); + this.restConfig = RestConfig.forClient(this.getClass()); + this.rutingUri = UriBuilder.fromUri(restConfig.fpContextPath()) + .path("/api/ruting/egenskaper") + .build(); + } + + public Set finnRutingEgenskaper(Set aktørIdenter) { + var request = new RutingRequest(aktørIdenter); + var rrequest = RestRequest.newPOSTJson(request, rutingUri, restConfig); + return klient.sendReturnOptional(rrequest, RutingRespons.class).map(RutingRespons::resultater).orElseGet(Set::of); + } + + + public record RutingRequest(@Valid Set aktørIdenter) { } + + public record RutingRespons(Set resultater) { } + +} diff --git a/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/RutingResultat.java b/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/RutingResultat.java new file mode 100644 index 00000000000..516704ea9bc --- /dev/null +++ b/domenetjenester/produksjonsstyring/src/main/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/RutingResultat.java @@ -0,0 +1,7 @@ +package no.nav.foreldrepenger.produksjonsstyring.behandlingenhet; + +public enum RutingResultat { + STRENGTFORTROLIG, + SKJERMING, + UTLAND +} diff --git a/domenetjenester/produksjonsstyring/src/test/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/EnhetsTjenesteTest.java b/domenetjenester/produksjonsstyring/src/test/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/EnhetsTjenesteTest.java index 785df4b9714..ebcd4909c5f 100644 --- a/domenetjenester/produksjonsstyring/src/test/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/EnhetsTjenesteTest.java +++ b/domenetjenester/produksjonsstyring/src/test/java/no/nav/foreldrepenger/produksjonsstyring/behandlingenhet/EnhetsTjenesteTest.java @@ -53,11 +53,14 @@ class EnhetsTjenesteTest { private Arbeidsfordeling arbeidsfordelingTjeneste; @Mock private SkjermetPersonKlient skjermetPersonKlient; + @Mock + private RutingKlient rutingKlient; + private EnhetsTjeneste enhetsTjeneste; @BeforeEach public void oppsett() { - enhetsTjeneste = new EnhetsTjeneste(personinfoAdapter, arbeidsfordelingTjeneste, skjermetPersonKlient); + enhetsTjeneste = new EnhetsTjeneste(personinfoAdapter, arbeidsfordelingTjeneste, skjermetPersonKlient, rutingKlient); } @Test diff --git a/pom.xml b/pom.xml index 65bb0069487..5b6c3407b1c 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ 2.4.5 1.0.4 - 7.4.4 + 7.4.5 5.1.1 9.2.2 diff --git a/web/src/main/java/no/nav/foreldrepenger/web/app/tjenester/abakus/IAYRegisterdataCallbackRestTjeneste.java b/web/src/main/java/no/nav/foreldrepenger/web/app/tjenester/abakus/IAYRegisterdataCallbackRestTjeneste.java index b3750d6497c..ac9f0b8dfa7 100644 --- a/web/src/main/java/no/nav/foreldrepenger/web/app/tjenester/abakus/IAYRegisterdataCallbackRestTjeneste.java +++ b/web/src/main/java/no/nav/foreldrepenger/web/app/tjenester/abakus/IAYRegisterdataCallbackRestTjeneste.java @@ -50,7 +50,7 @@ public IAYRegisterdataCallbackRestTjeneste(IAYRegisterdataTjeneste iayTjeneste, @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Operation(description = "Callback når registerinnhenting av IAY har blitt fullført i Abakus", tags = "registerdata") - @BeskyttetRessurs(actionType = ActionType.UPDATE, resourceType = ResourceType.APPLIKASJON) + @BeskyttetRessurs(actionType = ActionType.UPDATE, resourceType = ResourceType.FAGSAK) public Response callback(@Parameter(description = "callbackDto") @Valid @TilpassetAbacAttributt(supplierClass = AbacDataSupplier.class) CallbackDto dto) { // Ta lås var behandlingLås = låsRepository.taLås(dto.getAvsenderRef().getReferanse());