Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TFP-5952 kalle tilgang sammenligne med abac, logg #7033

Merged
merged 3 commits into from
Jan 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,10 @@ public void oppdaterBehandlendeEnhet(Behandling behandling, OrganisasjonsEnhet n
behandlingEventPubliserer.publiserBehandlingEvent(new BehandlingEnhetEvent(behandling));
}

public Set<RutingResultat> finnRuting(Set<AktørId> aktørIds) {
return enhetsTjeneste.finnRuting(aktørIds);
}

private void lagHistorikkInnslagForByttBehandlendeEnhet(Behandling behandling,
OrganisasjonsEnhet nyEnhet,
String begrunnelse,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -88,6 +89,7 @@ public class EnhetsTjeneste {
private PersoninfoAdapter personinfoAdapter;
private Arbeidsfordeling norgRest;
private SkjermetPersonKlient skjermetPersonKlient;
private RutingKlient rutingKlient;

public EnhetsTjeneste() {
// For CDI proxy
Expand All @@ -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<FagsakMarkering> markering) {
Expand Down Expand Up @@ -130,13 +134,22 @@ static List<OrganisasjonsEnhet> 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);
}
Expand All @@ -147,11 +160,13 @@ Optional<OrganisasjonsEnhet> 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)) {
Expand All @@ -169,6 +184,15 @@ Optional<OrganisasjonsEnhet> oppdaterEnhetSjekkOppgittePersoner(String enhetId,
return Optional.of(FLYTTE_MAP.get(enhetId)).filter(ny -> !ny.enhetId().equals(enhetId));
}

public Set<RutingResultat> finnRuting(Set<AktørId> 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ørId> aktører) {
return aktører.stream()
.map(a -> personinfoAdapter.hentDiskresjonskode(ytelseType, a))
Expand Down Expand Up @@ -202,7 +226,7 @@ static OrganisasjonsEnhet getEnhetNasjonal() {
return NASJONAL_ENHET;
}

// Behold ut 2023
// Behold ut 2025
private List<OrganisasjonsEnhet> hentEnheterFor(String geografi, FagsakYtelseType ytelseType) {
var brukBTema = ytelseType == null || FagsakYtelseType.UDEFINERT.equals(ytelseType) ?
BehandlingTema.FORELDREPENGER : BehandlingTema.fraFagsak(ytelseType, null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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");
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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<RutingResultat> finnRutingEgenskaper(Set<String> 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<String> aktørIdenter) { }

public record RutingRespons(Set<RutingResultat> resultater) { }

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package no.nav.foreldrepenger.produksjonsstyring.behandlingenhet;

public enum RutingResultat {
STRENGTFORTROLIG,
SKJERMING,
UTLAND
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<svp-uttak.version>2.4.5</svp-uttak.version>
<fp-ytelse-beregn.version>1.0.4</fp-ytelse-beregn.version>

<felles.version>7.4.4</felles.version>
<felles.version>7.4.5</felles.version>
<prosesstask.version>5.1.1</prosesstask.version>

<fp-kontrakter.version>9.2.2</fp-kontrakter.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down