Skip to content

Commit

Permalink
Merge branch 'refs/heads/master' into feature/popp-gjennomsnitt-g
Browse files Browse the repository at this point in the history
# Conflicts:
#	apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterConsumer.java
#	apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/pensjon/PensjonData.java
#	apps/dolly-frontend/src/main/js/package-lock.json
#	apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/kriterier/BestillingKriterieMapper.tsx
#	apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/stegVelger/steg/steg1/paneler/Pensjon.tsx
#	apps/dolly-frontend/src/main/js/src/components/fagsystem/pensjon/form/validation.tsx
  • Loading branch information
stigus committed Aug 14, 2024
2 parents 2af31e4 + 4dc9fad commit e278e9c
Show file tree
Hide file tree
Showing 126 changed files with 12,901 additions and 14,710 deletions.
24 changes: 24 additions & 0 deletions .github/workflows/app.levende-arbeidsforhold-service.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: levende-arbeidsforhold-service

on:
push:
paths:
- libs/kafka-config/**
- libs/avro-schema/**
- libs/security-core/**
- libs/servlet-core/**
- libs/servlet-insecure-security/**
- libs/reactive-core/**
- apps/levende-arbeidsforhold-service/**
- .github/workflows/app.levende-arbeidsforhold-service.yml

jobs:
workflow:
uses: ./.github/workflows/common.workflow.backend.yml
with:
working-directory: "apps/levende-arbeidsforhold-service"
deploy-tag: "#deploy-levende-arbeidsforhold-service"
permissions:
contents: read
id-token: write
secrets: inherit
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ consumers:
namespace: dolly
url: https://testnav-aareg-proxy.dev-fss-pub.nais.io
cluster: dev-fss

spec:
azure:
application:
enabled: true
management:
endpoints:
enabled-by-default: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonTpYtelseRequest;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonUforetrygdRequest;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonforvalterResponse;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonsavtaleRequest;
import no.nav.dolly.bestilling.personservice.PersonServiceConsumer;
import no.nav.dolly.consumer.norg2.Norg2Consumer;
import no.nav.dolly.consumer.norg2.dto.Norg2EnhetResponse;
Expand Down Expand Up @@ -84,6 +85,7 @@ public class PensjonforvalterClient implements ClientRegister {
private static final String TP_FORHOLD = "TpForhold#";
private static final String PEN_ALDERSPENSJON = "AP#";
private static final String PEN_UFORETRYGD = "Ufoer#";
private static final String PEN_PENSJONSAVTALE = "Pensjonsavtale#";
private static final String PERIODE = "/periode/";

private final PensjonforvalterConsumer pensjonforvalterConsumer;
Expand Down Expand Up @@ -159,7 +161,10 @@ public Flux<ClientFuture> gjenopprett(RsDollyUtvidetBestilling bestilling, Dolly
.map(response -> POPP_INNTEKTSREGISTER + decodeStatus(response, dollyPerson.getIdent())),

lagreTpForhold(pensjon, dollyPerson.getIdent(), bestilteMiljoer.get())
.map(response -> TP_FORHOLD + decodeStatus(response, dollyPerson.getIdent()))
.map(response -> TP_FORHOLD + decodeStatus(response, dollyPerson.getIdent())),

lagrePensjonsavtale(pensjon, dollyPerson.getIdent(), bestilteMiljoer.get())
.map(response -> PEN_PENSJONSAVTALE + decodeStatus(response, dollyPerson.getIdent()))
)
.collectList()
.doOnNext(statusResultat::addAll)
Expand Down Expand Up @@ -202,9 +207,10 @@ public Flux<ClientFuture> gjenopprett(RsDollyUtvidetBestilling bestilling, Dolly
@Override
public void release(List<String> identer) {

// Pensjonforvalter / POPP støtter pt ikke sletting
// Pensjonforvalter / POPP, AP, UT støtter pt ikke sletting

pensjonforvalterConsumer.sletteTpForhold(identer);
pensjonforvalterConsumer.slettePensjonsavtale(identer);
}

public static PensjonforvalterResponse mergePensjonforvalterResponses(List<PensjonforvalterResponse> responser) {
Expand Down Expand Up @@ -511,6 +517,23 @@ private Mono<PensjonforvalterResponse> lagreTpForhold(PensjonData pensjonData, S
.map(PensjonforvalterClient::mergePensjonforvalterResponses);
}

private Flux<PensjonforvalterResponse> lagrePensjonsavtale(PensjonData pensjon, String ident, Set<String> miljoer) {

return Flux.just(pensjon)
.filter(PensjonData::hasPensjonsavtale)
.map(PensjonData::getPensjonsavtale)
.flatMap(pensjonsavtaler -> Flux.fromIterable(pensjonsavtaler)
.flatMap(pensjonsavtale -> {

var context = MappingContextUtils.getMappingContext();
context.setProperty(IDENT, ident);
context.setProperty(MILJOER, miljoer);

var pensjonsavtaleRequest = mapperFacade.map(pensjonsavtale, PensjonsavtaleRequest.class, context);
return pensjonforvalterConsumer.lagrePensjonsavtale(pensjonsavtaleRequest);
}));
}

private String decodeStatus(PensjonforvalterResponse response, String ident) {

log.info("Mottatt status på {} fra Pensjon-Testdata-Facade: {}", ident, response);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@
import no.nav.dolly.bestilling.pensjonforvalter.command.HentSamboerCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.LagreAlderspensjonCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.LagreGenerertPoppInntektCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.LagrePensjonsavtaleCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.LagrePoppInntektCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.LagreSamboerCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.LagreTpForholdCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.LagreTpYtelseCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.LagreUforetrygdCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.OpprettPersonCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.SlettePensjonsavtaleCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.SletteTpForholdCommand;
import no.nav.dolly.bestilling.pensjonforvalter.domain.AlderspensjonRequest;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonPersonRequest;
Expand All @@ -25,6 +27,7 @@
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonTpYtelseRequest;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonUforetrygdRequest;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonforvalterResponse;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonsavtaleRequest;
import no.nav.dolly.config.Consumers;
import no.nav.dolly.metrics.Timed;
import no.nav.testnav.libs.securitycore.domain.ServerProperties;
Expand Down Expand Up @@ -158,6 +161,23 @@ public Flux<PensjonforvalterResponse> lagreTpYtelse(PensjonTpYtelseRequest pensj
.flatMapMany(token -> new LagreTpYtelseCommand(webClient, token.getTokenValue(), pensjonTpYtelseRequest).call());
}

@Timed(name = "providers", tags = { "operation", "pen_lagrePensjpnsavtale" })
public Flux<PensjonforvalterResponse> lagrePensjonsavtale(PensjonsavtaleRequest pensjonsavtaleRequest) {

return tokenService.exchange(serverProperties)
.flatMapMany(token -> new LagrePensjonsavtaleCommand(webClient, pensjonsavtaleRequest, token.getTokenValue()).call());
}

@Timed(name = "providers", tags = { "operation", "pen_slettePensjpnsavtale" })
public void slettePensjonsavtale(List<String> identer) {

var test = tokenService.exchange(serverProperties)
.flatMapMany(token -> Flux.fromIterable(identer)
.flatMap(ident -> new SlettePensjonsavtaleCommand(webClient, ident, token.getTokenValue()).call()))
.collectList()
.subscribe(resultat -> log.info("Slettet pensjonsavtaler (PEN), alle miljøer"));
}

@Override
public String serviceUrl() {
return serverProperties.getUrl();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package no.nav.dolly.bestilling.pensjonforvalter.command;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonforvalterResponse;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonsavtaleRequest;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.util.retry.Retry;

import java.time.Duration;
import java.util.concurrent.Callable;

import static no.nav.dolly.domain.CommonKeysAndUtils.CONSUMER;
import static no.nav.dolly.domain.CommonKeysAndUtils.HEADER_NAV_CALL_ID;
import static no.nav.dolly.domain.CommonKeysAndUtils.HEADER_NAV_CONSUMER_ID;
import static no.nav.dolly.util.CallIdUtil.generateCallId;
import static org.springframework.http.HttpHeaders.AUTHORIZATION;

@Slf4j
@RequiredArgsConstructor
public class LagrePensjonsavtaleCommand implements Callable<Flux<PensjonforvalterResponse>> {

private static final String PENSJONSAVTALE_URL = "/api/v2/pensjonsavtale/opprett";

private final WebClient webClient;
private final PensjonsavtaleRequest pensjonsavtaleRequest;
private final String token;

@Override
public Flux<PensjonforvalterResponse> call() {

var callId = generateCallId();
log.info("Pensjonsavtale lagre inntekt {}, callId: {}", pensjonsavtaleRequest, callId);

return webClient.post()
.uri(uriBuilder -> uriBuilder.path(PENSJONSAVTALE_URL).build())
.header(AUTHORIZATION, "Bearer " + token)
.header(HEADER_NAV_CALL_ID, callId)
.header(HEADER_NAV_CONSUMER_ID, CONSUMER)
.bodyValue(pensjonsavtaleRequest)
.retrieve()
.bodyToFlux(PensjonforvalterResponse.class)
.doOnError(WebClientFilter::logErrorMessage)
.retryWhen(Retry.backoff(3, Duration.ofSeconds(5))
.filter(WebClientFilter::is5xxException))
.onErrorResume(error ->
Mono.just(PensjonforvalterResponse.builder()
.status(pensjonsavtaleRequest.getMiljoer().stream()
.map(miljoe -> PensjonforvalterResponse.ResponseEnvironment.builder()
.miljo(miljoe)
.response(PensjonforvalterResponse.Response.builder()
.httpStatus(PensjonforvalterResponse.HttpStatus.builder()
.status(WebClientFilter.getStatus(error).value())
.reasonPhrase(WebClientFilter.getStatus(error).getReasonPhrase())
.build())
.message(WebClientFilter.getMessage(error))
.path(PENSJONSAVTALE_URL)
.build())
.build())
.toList())
.build()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package no.nav.dolly.bestilling.pensjonforvalter.command;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonforvalterResponse;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.securitycore.config.UserConstant;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.util.retry.Retry;

import java.time.Duration;
import java.util.concurrent.Callable;

import static no.nav.dolly.domain.CommonKeysAndUtils.CONSUMER;
import static no.nav.dolly.domain.CommonKeysAndUtils.HEADER_NAV_CALL_ID;
import static no.nav.dolly.domain.CommonKeysAndUtils.HEADER_NAV_CONSUMER_ID;
import static no.nav.dolly.util.CallIdUtil.generateCallId;
import static no.nav.dolly.util.TokenXUtil.getUserJwt;
import static org.springframework.http.HttpHeaders.AUTHORIZATION;

@Slf4j
@RequiredArgsConstructor
public class SlettePensjonsavtaleCommand implements Callable<Flux<PensjonforvalterResponse>> {

private static final String PENSJON_TP_PERSON_FORHOLD_URL = "/api/v1/pensjonsavtale/delete";

private final WebClient webClient;
private final String ident;
private final String token;


public Flux<PensjonforvalterResponse> call() {

var callId = generateCallId();
log.info("Pensjon slette pensjonsavtale callId: {}", callId);

return webClient
.delete()
.uri(uriBuilder -> uriBuilder
.path(PENSJON_TP_PERSON_FORHOLD_URL)
.build())
.header(AUTHORIZATION, "Bearer " + token)
.header(UserConstant.USER_HEADER_JWT, getUserJwt())
.header(HEADER_NAV_CALL_ID, callId)
.header(HEADER_NAV_CONSUMER_ID, CONSUMER)
.header("ident", ident)
.retrieve()
.bodyToFlux(PensjonforvalterResponse.class)
.retryWhen(Retry.backoff(3, Duration.ofSeconds(5))
.filter(WebClientFilter::is5xxException))
.doOnError(WebClientFilter::logErrorMessage)
.onErrorResume(Exception.class, error -> Mono.empty());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package no.nav.dolly.bestilling.pensjonforvalter.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

import static java.util.Objects.isNull;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PensjonsavtaleRequest {

public enum AvtaleKategori {
NONE, UNKNOWN, INDIVIDUELL_ORDNING, PRIVAT_AFP,
PRIVAT_TJENESTEPENSJON, OFFENTLIG_TJENESTEPENSJON, FOLKETRYGD
}

private String ident;
private String produktBetegnelse;
private AvtaleKategori avtaleKategori;
private List<OpprettUtbetalingsperiodeDTO> utbetalingsperioder;
private List<String> miljoer;

public List<OpprettUtbetalingsperiodeDTO> getUtbetalingsperioder() {

if (isNull(utbetalingsperioder)) {
utbetalingsperioder = new ArrayList<>();
}
return utbetalingsperioder;
}

public List<String> getMiljoer() {

if (isNull(miljoer)) {
miljoer = new ArrayList<>();
}
return miljoer;
}

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class OpprettUtbetalingsperiodeDTO {
private Integer startAlderAar;
private Integer startAlderMaaned;
private Integer sluttAlderAar;
private Integer sluttAlderMaaned;
private Integer aarligUtbetaling;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package no.nav.dolly.bestilling.pensjonforvalter.mapper;

import ma.glasnost.orika.CustomMapper;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.MappingContext;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonsavtaleRequest;
import no.nav.dolly.domain.resultset.pensjon.PensjonData;
import no.nav.dolly.mapper.MappingStrategy;
import org.springframework.stereotype.Component;

import java.util.Set;

@Component
public class PensjonsavtaleMappingStrategy implements MappingStrategy {

@Override
public void register(MapperFactory factory) {
factory.classMap(PensjonData.Pensjonsavtale.class, PensjonsavtaleRequest.class)
.customize(new CustomMapper<>() {
@Override
public void mapAtoB(PensjonData.Pensjonsavtale pensjonsavtale, PensjonsavtaleRequest pensjonsavtaleRequest, MappingContext context) {

var ident = (String) context.getProperty("ident");
var miljoer = (Set<String>) context.getProperty("miljoer");

pensjonsavtaleRequest.setIdent(ident);
pensjonsavtaleRequest.setMiljoer(miljoer.stream().toList());
}
})
.byDefault()
.register();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ protected void leggIdentTilGruppe(BestillingProgress progress, String beskrivels
protected void leggIdentTilGruppe(String ident, BestillingProgress progress, String beskrivelse) {

identService.saveIdentTilGruppe(isNotBlank(ident) ? ident : progress.getIdent(), progress.getBestilling().getGruppe(), progress.getMaster(), beskrivelse);
log.info("Ident {} lagt til gruppe {}", progress.getIdent(), progress.getBestilling().getGruppe().getId());
log.info("Ident {} lagt til gruppe {}", isNotBlank(ident) ? ident : progress.getIdent(), progress.getBestilling().getGruppe().getId());
}

protected Flux<DollyPerson> opprettDollyPerson(BestillingProgress progress, Bruker bruker) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public enum SystemTyper {
PEN_AP("Alderspensjon (AP)"),
PEN_FORVALTER("Pensjon persondata (PEN)"),
PEN_INNTEKT("Pensjonsopptjening (POPP)"),
PEN_PENSJONSAVTALE("Pensjonsavtale (PEN)"),
PEN_SAMBOER("Pensjon samboerregister"),
PEN_UT("Uføretrygd (UT)"),
SIGRUNSTUB("Skatteinntekt grunnlag (SIGRUN)"),
Expand Down
Loading

0 comments on commit e278e9c

Please sign in to comment.