-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* POFIM-5: Tjeneste for å hente inntekt siste 3 mnd før startdato * POFIM-5: Tjeneste for å hente inntekt siste 3 mnd før startdato * Inntektskomponentm klient * POFIM-5 Henter inntekt 3 siste måneder for søker gitt organisasjon og startdato. * POFIM-5 Henter inntekt 3 siste måneder for søker gitt organisasjon og startdato. --------- Co-authored-by: anjaaalerud <[email protected]>
- Loading branch information
1 parent
64b6951
commit c3a1a69
Showing
6 changed files
with
204 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
src/main/java/no/nav/familie/inntektsmelding/imdialog/rest/MånedsinntektResponsDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package no.nav.familie.inntektsmelding.imdialog.rest; | ||
|
||
import java.math.BigDecimal; | ||
import java.time.LocalDate; | ||
|
||
public record MånedsinntektResponsDto(LocalDate fom, LocalDate tom, BigDecimal beløp, String organisasjonsnummer) { | ||
} |
6 changes: 6 additions & 0 deletions
6
...va/no/nav/familie/inntektsmelding/integrasjoner/inntektskomponent/FinnInntektRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package no.nav.familie.inntektsmelding.integrasjoner.inntektskomponent; | ||
|
||
import java.time.YearMonth; | ||
|
||
public record FinnInntektRequest(String aktørId, YearMonth fom, YearMonth tom) {} | ||
|
99 changes: 99 additions & 0 deletions
99
.../java/no/nav/familie/inntektsmelding/integrasjoner/inntektskomponent/InntektTjeneste.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
package no.nav.familie.inntektsmelding.integrasjoner.inntektskomponent; | ||
|
||
import jakarta.enterprise.context.ApplicationScoped; | ||
import jakarta.inject.Inject; | ||
import no.nav.familie.inntektsmelding.integrasjoner.person.AktørId; | ||
import no.nav.tjenester.aordningen.inntektsinformasjon.ArbeidsInntektIdent; | ||
import no.nav.tjenester.aordningen.inntektsinformasjon.inntekt.Inntekt; | ||
import no.nav.tjenester.aordningen.inntektsinformasjon.inntekt.InntektType; | ||
import no.nav.tjenester.aordningen.inntektsinformasjon.response.HentInntektListeBolkResponse; | ||
import no.nav.vedtak.exception.IntegrasjonException; | ||
|
||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import java.math.BigDecimal; | ||
import java.time.LocalDate; | ||
import java.time.YearMonth; | ||
import java.util.ArrayList; | ||
import java.util.Collections; | ||
import java.util.List; | ||
|
||
@ApplicationScoped | ||
public class InntektTjeneste { | ||
private InntektskomponentKlient inntektskomponentKlient; | ||
|
||
InntektTjeneste() { | ||
// CDI | ||
} | ||
|
||
@Inject | ||
public InntektTjeneste(InntektskomponentKlient inntektskomponentKlient) { | ||
this.inntektskomponentKlient = inntektskomponentKlient; | ||
} | ||
|
||
public List<Månedsinntekt> hentInntekt(AktørId aktørId, LocalDate startdato, String organisasjonsnummer) { | ||
var request = lagRequest(aktørId, startdato); | ||
var respons = inntektskomponentKlient.finnInntekt(request); | ||
return oversettRespons(respons, aktørId, organisasjonsnummer); | ||
} | ||
|
||
private List<Månedsinntekt> oversettRespons(HentInntektListeBolkResponse response, | ||
AktørId aktørId, | ||
String organisasjonsnummer) { | ||
if (response.getSikkerhetsavvikListe() != null && !response.getSikkerhetsavvikListe().isEmpty()) { | ||
throw new IntegrasjonException("FP-535194", | ||
String.format("Fikk følgende sikkerhetsavvik ved kall til inntektstjenesten: %s.", byggSikkerhetsavvikString(response))); | ||
} | ||
|
||
List<ArbeidsInntektIdent> inntektListeRespons = response.getArbeidsInntektIdentListe() == null | ||
? Collections.emptyList() | ||
: response.getArbeidsInntektIdentListe(); | ||
|
||
var inntektPerMånedForBruker = inntektListeRespons.stream() | ||
.filter(a -> a.getIdent().getIdentifikator().equals(aktørId.getId())) | ||
.findFirst() | ||
.map(ArbeidsInntektIdent::getArbeidsInntektMaaned) | ||
.orElse(List.of()); | ||
|
||
List<Månedsinntekt> månedsInntektListe = new ArrayList<>(); | ||
|
||
inntektPerMånedForBruker.forEach( inntektMåned -> inntektMåned.getArbeidsInntektInformasjon().getInntektListe().stream() | ||
.filter(inntekt -> InntektType.LOENNSINNTEKT.equals(inntekt.getInntektType()) && organisasjonsnummer.equals(inntekt.getVirksomhet().getIdentifikator())) | ||
.findFirst() | ||
.map(this::mapMånedsInntekt) | ||
.ifPresent(månedsInntektListe::add)); | ||
|
||
return månedsInntektListe; | ||
} | ||
|
||
private Månedsinntekt mapMånedsInntekt(Inntekt månedsInntekt) { | ||
return new Månedsinntekt(månedsInntekt.getUtbetaltIMaaned(), månedsInntekt.getBeloep(), månedsInntekt.getVirksomhet().getIdentifikator()); | ||
} | ||
|
||
public record Månedsinntekt(YearMonth måned, BigDecimal beløp, String organisasjonsnummer) {} | ||
|
||
private FinnInntektRequest lagRequest(AktørId aktørId, LocalDate startdato) { | ||
var fomDato = startdato.minusMonths(3); | ||
var tomDato = startdato.minusMonths(1); | ||
|
||
var fomÅrMåned = YearMonth.of(fomDato.getYear(), fomDato.getMonth()); | ||
var tomÅrMåned = YearMonth.of(tomDato.getYear(), tomDato.getMonth()); | ||
|
||
return new FinnInntektRequest(aktørId.getId(), fomÅrMåned, tomÅrMåned); | ||
} | ||
|
||
private String byggSikkerhetsavvikString(HentInntektListeBolkResponse response) { | ||
var stringBuilder = new StringBuilder(); | ||
var sikkerhetsavvikListe = response.getSikkerhetsavvikListe(); | ||
if (sikkerhetsavvikListe != null && !sikkerhetsavvikListe.isEmpty()) { | ||
stringBuilder.append(sikkerhetsavvikListe.getFirst().getTekst()); | ||
for (int i = 1; i < sikkerhetsavvikListe.size(); i++) { | ||
stringBuilder.append(", "); | ||
stringBuilder.append(sikkerhetsavvikListe.get(i).getTekst()); | ||
} | ||
} | ||
return stringBuilder.toString(); | ||
} | ||
|
||
} |
60 changes: 60 additions & 0 deletions
60
.../nav/familie/inntektsmelding/integrasjoner/inntektskomponent/InntektskomponentKlient.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
package no.nav.familie.inntektsmelding.integrasjoner.inntektskomponent; | ||
|
||
import jakarta.enterprise.context.ApplicationScoped; | ||
import no.nav.tjenester.aordningen.inntektsinformasjon.Aktoer; | ||
import no.nav.tjenester.aordningen.inntektsinformasjon.request.HentInntektListeBolkRequest; | ||
import no.nav.tjenester.aordningen.inntektsinformasjon.response.HentInntektListeBolkResponse; | ||
import no.nav.vedtak.exception.IntegrasjonException; | ||
import no.nav.vedtak.felles.integrasjon.rest.RestClient; | ||
import no.nav.vedtak.felles.integrasjon.rest.RestClientConfig; | ||
import no.nav.vedtak.felles.integrasjon.rest.RestConfig; | ||
import no.nav.vedtak.felles.integrasjon.rest.RestRequest; | ||
import no.nav.vedtak.felles.integrasjon.rest.TokenFlow; | ||
|
||
import java.time.YearMonth; | ||
import java.util.Collections; | ||
|
||
@ApplicationScoped | ||
@RestClientConfig(tokenConfig = TokenFlow.AZUREAD_CC, endpointProperty = "hentinntektlistebolk.url", endpointDefault = "https://app.adeo.no/inntektskomponenten-ws/rs/api/v1/hentinntektlistebolk", | ||
scopesProperty = "hentinntektlistebolk.scopes", scopesDefault = "api://prod-fss.team-inntekt.inntektskomponenten/.default") | ||
public class InntektskomponentKlient { | ||
private static final YearMonth INNTK_TIDLIGSTE_DATO = YearMonth.of(2015, 7); | ||
|
||
private final RestClient restClient; | ||
private final RestConfig restConfig; | ||
|
||
public InntektskomponentKlient() { | ||
this(RestClient.client()); | ||
} | ||
|
||
public InntektskomponentKlient(RestClient restClient) { | ||
this.restClient = restClient; | ||
this.restConfig = RestConfig.forClient(this.getClass()); | ||
} | ||
|
||
public HentInntektListeBolkResponse finnInntekt(FinnInntektRequest finnInntektRequest) { | ||
var request = lagRequest(finnInntektRequest); | ||
|
||
HentInntektListeBolkResponse response; | ||
try { | ||
response = restClient.send(request, HentInntektListeBolkResponse.class); | ||
} catch (RuntimeException e) { | ||
throw new IntegrasjonException("FP-824246", | ||
"Feil ved kall til inntektstjenesten. Meld til #team_registre og #produksjonshendelser hvis dette skjer over lengre tidsperiode.", e); | ||
} | ||
return response; | ||
} | ||
|
||
private RestRequest lagRequest(FinnInntektRequest finnInntektRequest) { | ||
var request = new HentInntektListeBolkRequest(); | ||
|
||
request.setIdentListe(Collections.singletonList(Aktoer.newAktoerId(finnInntektRequest.aktørId()))); | ||
request.setAinntektsfilter("8-28"); | ||
request.setFormaal("Foreldrepenger"); // Trenger eget formål for K9 | ||
|
||
request.setMaanedFom(finnInntektRequest.fom().isAfter(INNTK_TIDLIGSTE_DATO) ? finnInntektRequest.fom() : INNTK_TIDLIGSTE_DATO); | ||
request.setMaanedTom(finnInntektRequest.tom().isAfter(INNTK_TIDLIGSTE_DATO) ? finnInntektRequest.tom() : INNTK_TIDLIGSTE_DATO); | ||
return RestRequest.newPOSTJson(request, restConfig.endpoint(), restConfig); | ||
} | ||
|
||
} |