Skip to content

Commit

Permalink
feat. oppdatert endepunkt for aktsomhet til å sende med diskresjonsko…
Browse files Browse the repository at this point in the history
…de internt
  • Loading branch information
eirikv committed Mar 4, 2025
1 parent 0d4d786 commit 03c301f
Show file tree
Hide file tree
Showing 17 changed files with 234 additions and 158 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ private Optional<ArenaMigrationAction> validate(Avtale avtale, ArenaAgreementAgg

if (agreementAggregate.getFnr() != null) {
PdlRespons personalData = persondataService.hentPersondata(new Fnr(agreementAggregate.getFnr()));
if (persondataService.erKode6(personalData)) {
if (persondataService.hentDiskresjonskode(personalData).erKode6()) {
return Optional.of(ArenaMigrationAction.KODE_6);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,18 @@ public static Diskresjonskode parse(String str) {
};
}

public boolean erKode6() {
return STRENGT_FORTROLIG.equals(this) || STRENGT_FORTROLIG_UTLAND.equals(this);
}

public boolean erKode7() {
return FORTROLIG.equals(this);
}

public boolean erKode6Eller7() {
return erKode6() || erKode7();
}

public static class DiskresjonskodeDeserializer extends JsonDeserializer<Diskresjonskode> {
@Override
public Diskresjonskode deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
import no.nav.tag.tiltaksgjennomforing.infrastruktur.auditing.Utfall;
import no.nav.tag.tiltaksgjennomforing.okonomi.KontoregisterService;
import no.nav.tag.tiltaksgjennomforing.orgenhet.EregService;
import no.nav.tag.tiltaksgjennomforing.persondata.AktsomhetService;
import no.nav.tag.tiltaksgjennomforing.persondata.aktsomhet.Aktsomhet;
import no.nav.tag.tiltaksgjennomforing.persondata.aktsomhet.AktsomhetService;
import no.nav.tag.tiltaksgjennomforing.tilskuddsperiode.beregning.EndreTilskuddsberegning;
import no.nav.tag.tiltaksgjennomforing.utils.Now;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -833,7 +834,7 @@ public Avtale endreKostnadssted(
}

@GetMapping("/{avtaleId}/krever-aktsomhet")
public Boolean kreverAktsomhet(
public Aktsomhet kreverAktsomhet(
@PathVariable("avtaleId") UUID avtaleId,
@CookieValue("innlogget-part") Avtalerolle innloggetPart
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ public boolean kanEndreAvtale() {

@Override
void godkjennForAvtalepart(Avtale avtale) {
if (persondataService.erKode6(avtale.getDeltakerFnr())) {
if (persondataService.hentDiskresjonskode(avtale.getDeltakerFnr()).erKode6()) {
throw new KanIkkeGodkjenneAvtalePåKode6Exception();
}
this.sjekkOgOppdaterOppfølgningsstatusForAvtale(avtale);
Expand All @@ -159,15 +159,15 @@ boolean kanOppheveGodkjenninger(Avtale avtale) {

public void godkjennForVeilederOgDeltaker(GodkjentPaVegneGrunn paVegneAvGrunn, Avtale avtale) {
sjekkTilgang(avtale);
if (persondataService.erKode6(avtale.getDeltakerFnr())) {
if (persondataService.hentDiskresjonskode(avtale.getDeltakerFnr()).erKode6()) {
throw new KanIkkeGodkjenneAvtalePåKode6Exception();
}
this.sjekkOgOppdaterOppfølgningsstatusForAvtale(avtale);
avtale.godkjennForVeilederOgDeltaker(getIdentifikator(), paVegneAvGrunn);
}

private void blokkereKode6Prosessering(Fnr deltakerFnr) {
if (persondataService.erKode6(deltakerFnr)) {
if (persondataService.hentDiskresjonskode(deltakerFnr).erKode6()) {
throw new KanIkkeGodkjenneAvtalePåKode6Exception();
}
}
Expand Down Expand Up @@ -275,7 +275,7 @@ private void oppdatereGeoEnhetVedEndreAvtale(Avtale avtale, PdlRespons pdlRespon
}

private void sjekkKode6(PdlRespons persondata) {
if (persondataService.erKode6(persondata)) {
if (persondataService.hentDiskresjonskode(persondata).erKode6()) {
throw new KanIkkeOppretteAvtalePåKode6Exception();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.security.token.support.core.api.ProtectedWithClaims;
import no.nav.tag.tiltaksgjennomforing.autorisasjon.Diskresjonskode;
import no.nav.tag.tiltaksgjennomforing.autorisasjon.Tilgangsattributter;
import no.nav.tag.tiltaksgjennomforing.autorisasjon.abac.TilgangskontrollService;
import no.nav.tag.tiltaksgjennomforing.avtale.Avtale;
Expand All @@ -14,7 +15,6 @@
import no.nav.tag.tiltaksgjennomforing.enhet.Oppfølgingsstatus;
import no.nav.tag.tiltaksgjennomforing.enhet.veilarboppfolging.VeilarboppfolgingService;
import no.nav.tag.tiltaksgjennomforing.exceptions.RessursFinnesIkkeException;
import no.nav.tag.tiltaksgjennomforing.persondata.Adressebeskyttelse;
import no.nav.tag.tiltaksgjennomforing.persondata.PersondataService;
import no.nav.tag.tiltaksgjennomforing.utils.Now;
import org.springframework.format.annotation.DateTimeFormat;
Expand Down Expand Up @@ -212,11 +212,10 @@ public ResponseEntity sjekkTilgangsatrributter(@PathVariable UUID id) {
Optional<Tilgangsattributter> tilgangsattributter = tilgangskontrollService
.hentTilgangsattributter(avtale.getDeltakerFnr());

Adressebeskyttelse adressebeskyttelse = persondataService
.hentAdressebeskyttelse(avtale.getDeltakerFnr());
Diskresjonskode diskresjonskode = persondataService.hentDiskresjonskode(avtale.getDeltakerFnr());

return Map.of(
"pdlAdressebeskyttelse", adressebeskyttelse.getGradering(),
"pdlAdressebeskyttelse", diskresjonskode,
"kontor", tilgangsattributter.map(Tilgangsattributter::kontor).orElse(""),
"skjermet", tilgangsattributter.map(Tilgangsattributter::skjermet).orElse(false),
"diskresjonskode", tilgangsattributter.map(t -> t.diskresjonskode().name()).orElse("")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,29 @@
package no.nav.tag.tiltaksgjennomforing.persondata;

import lombok.SneakyThrows;
import lombok.Value;
import org.springframework.core.io.Resource;
import org.springframework.util.StreamUtils;

import java.nio.charset.StandardCharsets;

@Value
public class PdlRequest {
private final String query;
private final PdlRequestVariables variables;

public PdlRequest(String query, PdlRequestVariables variables) {
this.query = query;
this.variables = variables;
}

public PdlRequest(Resource resource, PdlRequestVariables variables) {
this(resourceAsString(resource), variables);
}

@SneakyThrows
private static String resourceAsString(Resource resource) {
String filinnhold = StreamUtils.copyToString(resource.getInputStream(), StandardCharsets.UTF_8);
return filinnhold.replaceAll("\\s+", " ");
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package no.nav.tag.tiltaksgjennomforing.persondata;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import no.nav.tag.tiltaksgjennomforing.autorisasjon.Diskresjonskode;
import no.nav.tag.tiltaksgjennomforing.avtale.Fnr;
Expand All @@ -13,26 +12,16 @@
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.util.StreamUtils;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

import java.nio.charset.StandardCharsets;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;

@Slf4j
@Service
public class PersondataService {
private static final String BEHANDLINGSNUMMER = "B662";
private static final Set<Diskresjonskode> KODE_6 = Set.of(
Diskresjonskode.STRENGT_FORTROLIG,
Diskresjonskode.STRENGT_FORTROLIG_UTLAND
);
private static final Set<Diskresjonskode> KODE_7 = Set.of(
Diskresjonskode.FORTROLIG
);

private final RestTemplate azureRestTemplate;
private final PersondataProperties persondataProperties;
Expand All @@ -54,15 +43,18 @@ public PersondataService(
this.persondataProperties = persondataProperties;
}

@SneakyThrows
private static String resourceAsString(Resource adressebeskyttelseQuery) {
String filinnhold = StreamUtils.copyToString(adressebeskyttelseQuery.getInputStream(), StandardCharsets.UTF_8);
return filinnhold.replaceAll("\\s+", " ");
public Diskresjonskode hentDiskresjonskode(Fnr fnr) {
PdlRequest pdlRequest = new PdlRequest(
adressebeskyttelseQueryResource,
new PdlRequestVariables(fnr.asString())
);
return hentDiskresjonskode(utførKallTilPdl(pdlRequest));
}

public Adressebeskyttelse hentAdressebeskyttelse(Fnr fnr) {
PdlRequest pdlRequest = new PdlRequest(resourceAsString(adressebeskyttelseQueryResource), new PdlRequestVariables(fnr.asString()));
return hentAdressebeskyttelseFraPdlRespons(utførKallTilPdl(pdlRequest));
public Diskresjonskode hentDiskresjonskode(PdlRespons pdlRespons) {
return Optional.ofNullable(hentAdressebeskyttelseFraPdlRespons(pdlRespons))
.map(Adressebeskyttelse::getGradering)
.orElse(Diskresjonskode.UGRADERT);
}

private HttpEntity<String> createRequestEntity(PdlRequest pdlRequest) {
Expand Down Expand Up @@ -121,40 +113,18 @@ public static Optional<String> hentGeoLokasjonFraPdlRespons(PdlRespons pdlRespon
return Optional.empty();
}

PdlRequest pdlRequest = new PdlRequest(
resourceAsString(identerQueryResource),
new PdlRequestVariables(fnr.asString())
);
PdlRequest pdlRequest = new PdlRequest(identerQueryResource, new PdlRequestVariables(fnr.asString()));
return hentGjeldendeIdentFraPdlRespons(utførKallTilPdl(pdlRequest)).map(AktorId::av);
}

public boolean erKode6Eller7(Fnr fnr) {
Diskresjonskode gradering = hentAdressebeskyttelse(fnr).getGradering();
return KODE_6.contains(gradering) || KODE_7.contains(gradering);
}

public boolean erKode6(PdlRespons pdlRespons) {
try {
Diskresjonskode gradering = hentAdressebeskyttelseFraPdlRespons(pdlRespons).getGradering();
return KODE_6.contains(gradering);
} catch (NullPointerException e) {
return false;
}
}

public boolean erKode6(Fnr fnr) {
Diskresjonskode gradering = hentAdressebeskyttelse(fnr).getGradering();
return KODE_6.contains(gradering);
}

@Cacheable(CacheConfig.PDL_CACHE)
public PdlRespons hentPersondataFraPdl(Fnr fnr) {
PdlRequest pdlRequest = new PdlRequest(resourceAsString(persondataQueryResource), new PdlRequestVariables(fnr.asString()));
PdlRequest pdlRequest = new PdlRequest(persondataQueryResource, new PdlRequestVariables(fnr.asString()));
return utførKallTilPdl(pdlRequest);
}

public PdlRespons hentPersondata(Fnr fnr) {
PdlRequest pdlRequest = new PdlRequest(resourceAsString(persondataQueryResource), new PdlRequestVariables(fnr.asString()));
PdlRequest pdlRequest = new PdlRequest(persondataQueryResource, new PdlRequestVariables(fnr.asString()));
return utførKallTilPdl(pdlRequest);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package no.nav.tag.tiltaksgjennomforing.persondata.aktsomhet;

import no.nav.tag.tiltaksgjennomforing.autorisasjon.Diskresjonskode;

public record Aktsomhet(
boolean kreverAktsomhet,
Diskresjonskode Diskresjonskode
) {
public static Aktsomhet intern(Diskresjonskode diskresjonskode) {
return new Aktsomhet(
diskresjonskode.erKode6Eller7(),
diskresjonskode
);
}

public static Aktsomhet ekstern(Diskresjonskode diskresjonskode) {
return new Aktsomhet(
diskresjonskode.erKode6Eller7(),
null
);
}

public static Aktsomhet tom() {
return new Aktsomhet(
false,
no.nav.tag.tiltaksgjennomforing.autorisasjon.Diskresjonskode.UGRADERT
);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package no.nav.tag.tiltaksgjennomforing.persondata;
package no.nav.tag.tiltaksgjennomforing.persondata.aktsomhet;

import no.nav.tag.tiltaksgjennomforing.autorisasjon.InnloggingService;
import no.nav.tag.tiltaksgjennomforing.avtale.AvtaleRepository;
import no.nav.tag.tiltaksgjennomforing.avtale.Avtalepart;
import no.nav.tag.tiltaksgjennomforing.avtale.Avtalerolle;
import no.nav.tag.tiltaksgjennomforing.persondata.PersondataService;
import org.springframework.stereotype.Service;

import java.util.Optional;
Expand All @@ -21,28 +22,28 @@ public AktsomhetService(InnloggingService innloggingService, PersondataService p
this.avtaleRepository = avtaleRepository;
}

public boolean kreverAktsomhet(Avtalerolle avtalerolle, UUID avtaleId) {
public Aktsomhet kreverAktsomhet(Avtalerolle avtalerolle, UUID avtaleId) {
try {
switch (avtalerolle) {
case VEILEDER -> {
Avtalepart avtalepart = innloggingService.hentAvtalepart(avtalerolle);
return Optional.ofNullable(avtalepart.hentAvtale(avtaleRepository, avtaleId))
.map(avtale -> persondataService.erKode6Eller7(avtale.getDeltakerFnr()))
.orElse(false);
.map(avtale -> Aktsomhet.intern(persondataService.hentDiskresjonskode(avtale.getDeltakerFnr())))
.orElse(Aktsomhet.tom());
}
case ARBEIDSGIVER, MENTOR -> {
Avtalepart avtalepart = innloggingService.hentAvtalepart(avtalerolle);
return Optional.ofNullable(avtalepart.hentAvtale(avtaleRepository, avtaleId))
.filter(avtale -> !avtale.erUfordelt())
.map(avtale -> persondataService.erKode6Eller7(avtale.getDeltakerFnr()))
.orElse(false);
.map(avtale -> Aktsomhet.ekstern(persondataService.hentDiskresjonskode(avtale.getDeltakerFnr())))
.orElse(Aktsomhet.tom());
}
default -> {
return false;
return Aktsomhet.tom();
}
}
} catch (Exception e) {
return false;
return Aktsomhet.tom();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.tag.tiltaksgjennomforing.avtale;

import no.nav.tag.tiltaksgjennomforing.Miljø;
import no.nav.tag.tiltaksgjennomforing.autorisasjon.Diskresjonskode;
import no.nav.tag.tiltaksgjennomforing.autorisasjon.InnloggingService;
import no.nav.tag.tiltaksgjennomforing.autorisasjon.SlettemerkeProperties;
import no.nav.tag.tiltaksgjennomforing.autorisasjon.abac.TilgangskontrollService;
Expand All @@ -21,6 +22,7 @@
import no.nav.tag.tiltaksgjennomforing.okonomi.KontoregisterService;
import no.nav.tag.tiltaksgjennomforing.orgenhet.EregService;
import no.nav.tag.tiltaksgjennomforing.orgenhet.Organisasjon;
import no.nav.tag.tiltaksgjennomforing.persondata.Data;
import no.nav.tag.tiltaksgjennomforing.persondata.PdlRespons;
import no.nav.tag.tiltaksgjennomforing.persondata.PersondataService;
import no.nav.tag.tiltaksgjennomforing.utils.Now;
Expand Down Expand Up @@ -49,7 +51,12 @@
import static no.nav.tag.tiltaksgjennomforing.avtale.TestData.enNavIdent;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.*;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

@SpringBootTest
@ActiveProfiles(Miljø.TEST)
Expand Down Expand Up @@ -284,6 +291,8 @@ public void opprettAvtaleSkalReturnereCreatedOgOpprettetLokasjon() {
);
when(tilgangskontrollService.harSkrivetilgangTilKandidat(eq(veileder), any())).thenReturn(true);
when(persondataService.hentPersondata(fnr)).thenReturn(pdlRespons);
when(persondataService.hentDiskresjonskode(any(PdlRespons.class))).thenReturn(Diskresjonskode.UGRADERT);
when(persondataService.hentPersondataFraPdl(any(Fnr.class))).thenReturn(new PdlRespons(new Data(null, null, null)));
when(norg2Client.hentGeografiskEnhet(pdlRespons.getData().getHentGeografiskTilknytning().getGtBydel()))
.thenReturn(
new Norg2GeoResponse(
Expand Down Expand Up @@ -340,6 +349,8 @@ public void endreAvtaleSkalReturnereOkHvisInnloggetPersonErVeileder() {
)).thenReturn(true);
when(avtaleRepository.findById(avtale.getId())).thenReturn(Optional.of(avtale));
when(avtaleRepository.save(avtale)).thenReturn(avtale);
when(persondataService.hentDiskresjonskode(any(PdlRespons.class))).thenReturn(Diskresjonskode.UGRADERT);
when(persondataService.hentPersondataFraPdl(any(Fnr.class))).thenReturn(new PdlRespons(new Data(null, null, null)));
ResponseEntity svar = avtaleController.endreAvtale(
avtale.getId(),
avtale.getSistEndret(),
Expand Down Expand Up @@ -437,7 +448,7 @@ public void opprettAvtaleSomVeileder__skal_feile_hvis_kode6() {
).thenReturn(true);
PdlRespons pdlRespons = TestData.enPdlrespons(true);
when(persondataServiceIMetode.hentPersondata(deltakerFnr)).thenReturn(pdlRespons);
when(persondataServiceIMetode.erKode6(pdlRespons)).thenCallRealMethod();
when(persondataServiceIMetode.hentDiskresjonskode(pdlRespons)).thenCallRealMethod();
assertThatThrownBy(
() -> avtaleController.opprettAvtaleSomVeileder(
new OpprettAvtale(deltakerFnr, new BedriftNr("111222333"), Tiltakstype.ARBEIDSTRENING)
Expand Down
Loading

0 comments on commit 03c301f

Please sign in to comment.