From 7869e30b8f078fecd5ac2a3d712113667fd88112 Mon Sep 17 00:00:00 2001 From: Espen Johansen Velsvik Date: Mon, 11 Nov 2024 11:44:14 +0100 Subject: [PATCH] =?UTF-8?q?Henter=20grunnbel=C3=B8p=20fra=20database=20og?= =?UTF-8?q?=20fjerner=20kobling=20til=20kalkulus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/dependabot.yml | 6 - .../Grunnbel\303\270pRepository.java" | 30 ++++ .../Grunnbel\303\270pSats.java" | 37 ++++ .../pu-default.grunnbel\303\270p.orm.xml" | 12 ++ deploy/dev-gcp.yml | 6 - deploy/prod-gcp.yml | 6 - dokumentasjon/arkitekturbeslutninger.md | 1 - domenetjenester/grunnbelop/pom.xml | 10 -- .../grunnbel\303\270p/Grunnbel\303\270p.java" | 2 + .../Grunnbel\303\270pTjeneste.java" | 32 ++-- .../KalkulusRestKlient.java" | 160 ------------------ kontrakt/pom.xml | 5 - pom.xml | 5 - web/app-vtp.properties | 2 - .../web/app/jackson/ObjectMapperResolver.java | 4 - .../Vilk\303\245rForlengelseDump.java" | 4 +- ...agGrunnbel\303\270pTidslinjeTjeneste.java" | 41 +---- .../UngdomsytelseBeregnDagsatsTest.java | 33 ++-- 18 files changed, 115 insertions(+), 281 deletions(-) create mode 100644 "behandlingslager/domene/src/main/java/no/nav/k9/sak/behandlingslager/grunnbel\303\270p/Grunnbel\303\270pRepository.java" create mode 100644 "behandlingslager/domene/src/main/java/no/nav/k9/sak/behandlingslager/grunnbel\303\270p/Grunnbel\303\270pSats.java" create mode 100644 "behandlingslager/domene/src/main/resources/META-INF/pu-default.grunnbel\303\270p.orm.xml" delete mode 100644 "domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/KalkulusRestKlient.java" diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8fd310a0b2..9325492cd9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -45,11 +45,6 @@ # url: https://maven.pkg.github.com/navikt/fp-abakus # username: x-access-token # password: ${{secrets.READER_TOKEN}} -# ft-kalkulus: -# type: maven-repository -# url: https://maven.pkg.github.com/navikt/ft-kalkulus -# username: x-access-token -# password: ${{secrets.READER_TOKEN}} # fp-nare: # type: maven-repository # url: https://maven.pkg.github.com/navikt/fp-nare @@ -76,7 +71,6 @@ # - k9-formidling # - k9-oppdrag # - fp-abakus -# - ft-kalkulus # - fp-nare # - fp-tidsserie # groups: diff --git "a/behandlingslager/domene/src/main/java/no/nav/k9/sak/behandlingslager/grunnbel\303\270p/Grunnbel\303\270pRepository.java" "b/behandlingslager/domene/src/main/java/no/nav/k9/sak/behandlingslager/grunnbel\303\270p/Grunnbel\303\270pRepository.java" new file mode 100644 index 0000000000..67c01196b3 --- /dev/null +++ "b/behandlingslager/domene/src/main/java/no/nav/k9/sak/behandlingslager/grunnbel\303\270p/Grunnbel\303\270pRepository.java" @@ -0,0 +1,30 @@ +package no.nav.k9.sak.behandlingslager.grunnbeløp; + +import java.util.List; + +import jakarta.enterprise.context.Dependent; +import jakarta.inject.Inject; +import jakarta.persistence.EntityManager; +import jakarta.persistence.TypedQuery; +import no.nav.k9.felles.jpa.HibernateVerktøy; +import no.nav.k9.sak.behandlingslager.fagsak.Fagsak; +import no.nav.k9.sak.domene.typer.tid.DatoIntervallEntitet; + +@Dependent +public class GrunnbeløpRepository { + + private EntityManager entityManager; + + @Inject + public GrunnbeløpRepository(EntityManager entityManager) { + this.entityManager = entityManager; + } + + public List hentGrunnbeløpForPeriode(DatoIntervallEntitet periode) { + TypedQuery query = entityManager.createQuery("from GrunnbeløpSats where periode.fomDato <= :tomDato and periode.tomDato >= :fomDato", GrunnbeløpSats.class); + query.setParameter("fomDato", periode.getFomDato()); // NOSONAR + query.setParameter("tomDato", periode.getTomDato()); // NOSONAR + return query.getResultList(); + } + +} diff --git "a/behandlingslager/domene/src/main/java/no/nav/k9/sak/behandlingslager/grunnbel\303\270p/Grunnbel\303\270pSats.java" "b/behandlingslager/domene/src/main/java/no/nav/k9/sak/behandlingslager/grunnbel\303\270p/Grunnbel\303\270pSats.java" new file mode 100644 index 0000000000..53c1e38fb4 --- /dev/null +++ "b/behandlingslager/domene/src/main/java/no/nav/k9/sak/behandlingslager/grunnbel\303\270p/Grunnbel\303\270pSats.java" @@ -0,0 +1,37 @@ +package no.nav.k9.sak.behandlingslager.grunnbeløp; + +import jakarta.persistence.Column; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import no.nav.k9.sak.domene.typer.tid.DatoIntervallEntitet; + +@Entity(name = "GrunnbeløpSats") +@Table(name = "GRUNNBELOP_SATS") +public class GrunnbeløpSats { + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_GRUNNBELOP_SATS") + private Long id; + + @Embedded + private DatoIntervallEntitet periode; + + @Column(name = "verdi", nullable = false, updatable = false) + private long verdi; + + public Long getId() { + return id; + } + + public DatoIntervallEntitet getPeriode() { + return periode; + } + + public long getVerdi() { + return verdi; + } +} diff --git "a/behandlingslager/domene/src/main/resources/META-INF/pu-default.grunnbel\303\270p.orm.xml" "b/behandlingslager/domene/src/main/resources/META-INF/pu-default.grunnbel\303\270p.orm.xml" new file mode 100644 index 0000000000..52d0098744 --- /dev/null +++ "b/behandlingslager/domene/src/main/resources/META-INF/pu-default.grunnbel\303\270p.orm.xml" @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/deploy/dev-gcp.yml b/deploy/dev-gcp.yml index e1de57867a..0d65071765 100644 --- a/deploy/dev-gcp.yml +++ b/deploy/dev-gcp.yml @@ -171,10 +171,6 @@ spec: value: https://k9-abakus.dev-fss-pub.nais.io - name: K9ABAKUS_SCOPE value: api://dev-fss.k9saksbehandling.k9-abakus/.default - - name: FTKALKULUS_URL - value: http://ftkalkulus.k9saksbehandling/ftkalkulus - - name: FTKALKULUS_SCOPE - value: api://dev-fss.k9saksbehandling.ftkalkulus/.default - name: ABAKUS_CALLBACK_URL value: http://ung-sak.k9saksbehandling/k9/sak/api/registerdata/iay/callback - name: ABAKUS_CALLBACK_SCOPE @@ -289,8 +285,6 @@ spec: value: "true" - name: FJERN_VILKARSPERIODER_BEREGNING value: "true" - - name: VALIDER_KALKULUS_REFERANSER - value: "true" - name: AVKLAR_ARBEIDSFORHOLD_REUTLED_VED_REVURDERING value: "true" - name: OMP_RELEVANT_ENDRING_UTLEDNING diff --git a/deploy/prod-gcp.yml b/deploy/prod-gcp.yml index a9c8234579..ea041c9442 100644 --- a/deploy/prod-gcp.yml +++ b/deploy/prod-gcp.yml @@ -162,10 +162,6 @@ spec: value: https://k9-abakus.prod-fss-pub.nais.io/k9/abakus - name: K9ABAKUS_SCOPE value: api://prod-fss.k9saksbehandling.k9-abakus/.default - - name: FTKALKULUS_URL - value: http://ftkalkulus.k9saksbehandling/ftkalkulus - - name: FTKALKULUS_SCOPE - value: api://prod-fss.k9saksbehandling.ftkalkulus/.default - name: ABAKUS_CALLBACK_URL value: http://ung-sak.k9saksbehandling/k9/sak/api/registerdata/iay/callback - name: ABAKUS_CALLBACK_SCOPE @@ -278,8 +274,6 @@ spec: value: "false" - name: FJERN_VILKARSPERIODER_BEREGNING value: "false" - - name: VALIDER_KALKULUS_REFERANSER - value: "false" - name: AVKLAR_ARBEIDSFORHOLD_REUTLED_VED_REVURDERING value: "false" - name: OMP_RELEVANT_ENDRING_UTLEDNING diff --git a/dokumentasjon/arkitekturbeslutninger.md b/dokumentasjon/arkitekturbeslutninger.md index 3624b92fdb..2d3b53cbfd 100644 --- a/dokumentasjon/arkitekturbeslutninger.md +++ b/dokumentasjon/arkitekturbeslutninger.md @@ -6,7 +6,6 @@ 1. Mottak av dokumenter 1. Mottak av eksterne hendelser (eks. fødsel/dødsfall, inntektsopplysninger) 1. Abakus: Registeropplysninger for inntekt-arbeid-ytelse - 1. Kalkulus: Beregningsgrunnlag og fordeling av beregning inntektskomponsasjon per yrkesaktivitet, ytelse og arbeidsgiver 1. Formidling og Dokgen: Aggreging av data og produksjon av brev til bruker 1. Uttak: Beregning av årskvantum, uttak av pleiepenger, opplæringspenger, frisinn) 1. Følgende er opprettet fra start som uavhengige moduler: diff --git a/domenetjenester/grunnbelop/pom.xml b/domenetjenester/grunnbelop/pom.xml index 1e28522b11..6a5fcccf91 100644 --- a/domenetjenester/grunnbelop/pom.xml +++ b/domenetjenester/grunnbelop/pom.xml @@ -22,10 +22,6 @@ no.nav.k9.felles k9-felles-db - - no.nav.k9.felles.integrasjon - k9-felles-integrasjon-rest-klient - @@ -33,12 +29,6 @@ kontrakt - - - no.nav.folketrygdloven.kalkulus - beregning-kontrakt - - no.nav.k9.sak diff --git "a/domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/Grunnbel\303\270p.java" "b/domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/Grunnbel\303\270p.java" index 5db489e888..6aa299516c 100644 --- "a/domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/Grunnbel\303\270p.java" +++ "b/domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/Grunnbel\303\270p.java" @@ -1,7 +1,9 @@ package no.nav.k9.sak.grunnbeløp; +import jakarta.persistence.Entity; import no.nav.k9.sak.domene.typer.tid.DatoIntervallEntitet; +@Entity() public class Grunnbeløp { private long verdi; diff --git "a/domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/Grunnbel\303\270pTjeneste.java" "b/domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/Grunnbel\303\270pTjeneste.java" index aef0fb9650..9f56630e99 100644 --- "a/domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/Grunnbel\303\270pTjeneste.java" +++ "b/domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/Grunnbel\303\270pTjeneste.java" @@ -1,36 +1,30 @@ package no.nav.k9.sak.grunnbeløp; -import java.time.LocalDate; +import java.math.BigDecimal; -import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.Dependent; -import jakarta.enterprise.inject.Default; import jakarta.inject.Inject; -import no.nav.folketrygdloven.kalkulus.felles.v1.Beløp; -import no.nav.folketrygdloven.kalkulus.request.v1.HentGrunnbeløpRequest; +import no.nav.fpsak.tidsserie.LocalDateTimeline; +import no.nav.k9.sak.behandlingslager.grunnbeløp.GrunnbeløpRepository; import no.nav.k9.sak.domene.typer.tid.DatoIntervallEntitet; -/** - * no.nav.grunnbeløp.KalkulusTjeneste sørger for at K9 kaller kalkulus på riktig format i henhold til no.nav.folketrygdloven.kalkulus.kontrakt - * (https://github.com/navikt/ft-kalkulus/) - */ + @Dependent public class GrunnbeløpTjeneste { - private final KalkulusRestKlient restTjeneste; + private final GrunnbeløpRepository grunnbeløpRepository; @Inject - public GrunnbeløpTjeneste(KalkulusRestKlient restTjeneste) { - this.restTjeneste = restTjeneste; - + public GrunnbeløpTjeneste(GrunnbeløpRepository grunnbeløpRepository) { + this.grunnbeløpRepository = grunnbeløpRepository; } - public Grunnbeløp hentGrunnbeløp(LocalDate dato) { - HentGrunnbeløpRequest request = new HentGrunnbeløpRequest(dato); - var grunnbeløp = restTjeneste.hentGrunnbeløp(request); - return new Grunnbeløp( - Beløp.safeVerdi(grunnbeløp.getVerdi()).longValue(), - DatoIntervallEntitet.fraOgMedTilOgMed(grunnbeløp.getPeriode().getFom(), grunnbeløp.getPeriode().getTom())); + public LocalDateTimeline hentGrunnbeløpTidslinje(LocalDateTimeline tidslinje) { + var grunnbeløpSatser = grunnbeløpRepository.hentGrunnbeløpForPeriode(DatoIntervallEntitet.fraOgMedTilOgMed(tidslinje.getMinLocalDate(), tidslinje.getMaxLocalDate())); + return grunnbeløpSatser.stream() + .map(s -> new LocalDateTimeline<>(s.getPeriode().getFomDato(), s.getPeriode().getTomDato(), BigDecimal.valueOf(s.getVerdi()))) + .reduce(LocalDateTimeline::crossJoin) + .orElse(LocalDateTimeline.empty()); } diff --git "a/domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/KalkulusRestKlient.java" "b/domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/KalkulusRestKlient.java" deleted file mode 100644 index 384224fc6a..0000000000 --- "a/domenetjenester/grunnbelop/src/main/java/no/nav/k9/sak/grunnbel\303\270p/KalkulusRestKlient.java" +++ /dev/null @@ -1,160 +0,0 @@ -package no.nav.k9.sak.grunnbeløp; - -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -import org.apache.http.HttpStatus; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectReader; -import com.fasterxml.jackson.databind.ObjectWriter; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; -import no.nav.folketrygdloven.kalkulus.mappers.JsonMapper; -import no.nav.folketrygdloven.kalkulus.request.v1.HentGrunnbeløpRequest; -import no.nav.folketrygdloven.kalkulus.response.v1.Grunnbeløp; -import no.nav.k9.felles.exception.VLException; -import no.nav.k9.felles.feil.Feil; -import no.nav.k9.felles.feil.FeilFactory; -import no.nav.k9.felles.feil.LogLevel; -import no.nav.k9.felles.feil.deklarasjon.DeklarerteFeil; -import no.nav.k9.felles.feil.deklarasjon.TekniskFeil; -import no.nav.k9.felles.integrasjon.rest.OidcRestClient; -import no.nav.k9.felles.integrasjon.rest.OidcRestClientResponseHandler; -import no.nav.k9.felles.integrasjon.rest.OidcRestClientResponseHandler.ObjectReaderResponseHandler; -import no.nav.k9.felles.integrasjon.rest.ScopedRestIntegration; -import no.nav.k9.felles.integrasjon.rest.SystemUserOidcRestClient; -import no.nav.k9.felles.konfigurasjon.konfig.KonfigVerdi; - - -@ApplicationScoped -@ScopedRestIntegration(scopeKey = "ftkalkulus.scope", defaultScope = "api://prod-fss.k9saksbehandling.ftkalkulus/.default") -public class KalkulusRestKlient { - - private static final Logger log = LoggerFactory.getLogger(KalkulusRestKlient.class); - private static final ObjectMapper kalkulusMapper = JsonMapper.getMapper(); - private final ObjectWriter kalkulusJsonWriter = kalkulusMapper.writerWithDefaultPrettyPrinter(); - private final ObjectReader grunnbeløpReader = kalkulusMapper.readerFor(Grunnbeløp.class); - - - private CloseableHttpClient restClient; - private URI kalkulusEndpoint; - private URI grunnbeløp; - - - public KalkulusRestKlient() { - // cdi - } - - @Inject - public KalkulusRestKlient(OidcRestClient restClient, - @KonfigVerdi(value = "ftkalkulus.url") URI endpoint) { - this(endpoint); - this.restClient = restClient; - } - - public KalkulusRestKlient(SystemUserOidcRestClient restClient, - URI endpoint) { - this(endpoint); - this.restClient = restClient; - } - - private KalkulusRestKlient(URI endpoint) { - this.kalkulusEndpoint = endpoint; - this.grunnbeløp = toUri("/api/kalkulus/v1/grunnbelop"); - } - - - public Grunnbeløp hentGrunnbeløp(HentGrunnbeløpRequest request) { - var endpoint = grunnbeløp; - - try { - return getResponse(endpoint, kalkulusJsonWriter.writeValueAsString(request), grunnbeløpReader); - } catch (JsonProcessingException e) { - throw RestTjenesteFeil.FEIL.feilVedJsonParsing(e.getMessage()).toException(); - } - } - - - private T getResponse(URI endpoint, String json, ObjectReader reader) { - try { - return utførOgHent(endpoint, json, new ObjectReaderResponseHandler<>(endpoint, reader)); - } catch (IOException e) { - throw RestTjenesteFeil.FEIL.feilVedKallTilKalkulus(endpoint, e.getMessage()).toException(); - } - } - - private T utførOgHent(URI endpoint, String json, OidcRestClientResponseHandler responseHandler) throws IOException { - var httpPost = new HttpPost(endpoint); // NOSONAR håndterer i responseHandler - httpPost.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON)); - - try (var httpResponse = restClient.execute(httpPost)) { - int responseCode = httpResponse.getStatusLine().getStatusCode(); - if (isOk(responseCode)) { - return responseHandler.handleResponse(httpResponse); - } else { - if (responseCode == HttpStatus.SC_NOT_MODIFIED) { - return null; - } - if (responseCode == HttpStatus.SC_NO_CONTENT) { - return null; - } - if (responseCode == HttpStatus.SC_ACCEPTED) { - return null; - } - String responseBody = EntityUtils.toString(httpResponse.getEntity()); - String feilmelding = "Kunne ikke hente utføre kall til kalkulus," - + " endpoint=" + httpPost.getURI() - + ", HTTP status=" + httpResponse.getStatusLine() - + ". HTTP Errormessage=" + responseBody; - if (responseCode == HttpStatus.SC_BAD_REQUEST) { - throw RestTjenesteFeil.FEIL.feilKallTilKalkulus(endpoint, feilmelding).toException(); - } else { - throw RestTjenesteFeil.FEIL.feilVedKallTilKalkulus(endpoint, feilmelding).toException(); - } - } - } catch (VLException e) { - throw e; // retrhow - } catch (RuntimeException re) { - log.warn("Feil ved henting av data. uri=" + endpoint, re); - throw re; - } - } - - private boolean isOk(int responseCode) { - return responseCode == HttpStatus.SC_OK - || responseCode == HttpStatus.SC_CREATED; - } - - private URI toUri(String relativeUri) { - String uri = kalkulusEndpoint.toString() + relativeUri; - try { - return new URI(uri); - } catch (URISyntaxException e) { - throw new IllegalArgumentException("Ugyldig uri: " + uri, e); - } - } - - interface RestTjenesteFeil extends DeklarerteFeil { - KalkulusRestKlient.RestTjenesteFeil FEIL = FeilFactory.create(KalkulusRestKlient.RestTjenesteFeil.class); - - @TekniskFeil(feilkode = "F-FT-K-1000001", feilmelding = "Feil ved kall til Kalkulus [%s]: %s", logLevel = LogLevel.ERROR) - Feil feilVedKallTilKalkulus(URI endpoint, String feilmelding); - - @TekniskFeil(feilkode = "F-FT-K-1000002", feilmelding = "Feil ved kall til Kalkulus [%s]: %s", logLevel = LogLevel.WARN) - Feil feilKallTilKalkulus(URI endpoint, String feilmelding); - - @TekniskFeil(feilkode = "F-FT-K-1000003", feilmelding = "Feil ved kall til Kalkulus: %s", logLevel = LogLevel.WARN) - Feil feilVedJsonParsing(String feilmelding); - } -} diff --git a/kontrakt/pom.xml b/kontrakt/pom.xml index db4aabd935..956ad8c2bf 100644 --- a/kontrakt/pom.xml +++ b/kontrakt/pom.xml @@ -27,11 +27,6 @@ kodeverk - - no.nav.folketrygdloven.kalkulus - beregning-kontrakt - - org.hibernate.validator diff --git a/pom.xml b/pom.xml index a97ae7c450..be05007867 100644 --- a/pom.xml +++ b/pom.xml @@ -140,11 +140,6 @@ abakus-kontrakt 1.1.0 - - no.nav.folketrygdloven.kalkulus - beregning-kontrakt - 5.5.2 - com.zaxxer diff --git a/web/app-vtp.properties b/web/app-vtp.properties index 5b8b9029d6..deaacd1746 100644 --- a/web/app-vtp.properties +++ b/web/app-vtp.properties @@ -11,7 +11,6 @@ arbeidsfordeling.rs.url=https://localhost:8063/rest/norg2/api/v1/arbeidsfordelin url.k9oppdrag=http://localhost:8070/k9/oppdrag/api k9abakus.url=http://localhost:8015/k9/abakus k9abakus.scope=api://vtp.k9saksbehandling.k9-abakus/.default -ftkalkulus.url=http://localhost:8016/ftkalkulus abakus.callback.url=http://host.docker.internal:8080/k9/sak/api/registerdata/iay/callback abakus.callback.scope=api://vtp.k9saksbehandling.ung-sak/.default k9.psb.uttak.url=http://localhost:8686/pleiepenger-barn-uttak @@ -106,7 +105,6 @@ AZURE_APP_PRE_AUTHORIZED_APPS=[{"name":"vtp:teamforeldrepenger:vtp","clientId":" k9inntektsmelding.url=http://localhost:8040/k9/inntektsmelding UKESMOERING_OMSORGSTILBUD_FOM_DATO=2023-01-02 YTELSE_OLP_AKTIVERT=true -VALIDER_KALKULUS_REFERANSER=false FJERN_VILKARSPERIODER_BEREGNING=false SEND_INNTEKTSMELDING_FORESPORSEL=false ALDERSVILKAR_I_KRONISK_SYK=true diff --git a/web/src/main/java/no/nav/k9/sak/web/app/jackson/ObjectMapperResolver.java b/web/src/main/java/no/nav/k9/sak/web/app/jackson/ObjectMapperResolver.java index 860ceffd9f..11fed25d0d 100644 --- a/web/src/main/java/no/nav/k9/sak/web/app/jackson/ObjectMapperResolver.java +++ b/web/src/main/java/no/nav/k9/sak/web/app/jackson/ObjectMapperResolver.java @@ -18,7 +18,6 @@ public class ObjectMapperResolver implements ContextResolver { private final ObjectMapper baseObjektMapper; private final ObjectMapper overstyrKodeverdiAlltidSomStringMapper; - private final ObjectMapper overstyrKalkulusKodeverdiSomStringMapper; private final ObjectMapper defaultObjektMapper; private final ObjectMapper openapiObjektMapper; @@ -29,7 +28,6 @@ public class ObjectMapperResolver implements ContextResolver { public ObjectMapperResolver() { this.baseObjektMapper = ObjectMapperFactory.createBaseObjectMapper(); this.overstyrKodeverdiAlltidSomStringMapper = this.baseObjektMapper.copy().registerModule(ObjectMapperFactory.createOverstyrendeKodeverdiSerializerModule(SakKodeverkOverstyringSerialisering.KODE_STRING)); - this.overstyrKalkulusKodeverdiSomStringMapper = this.baseObjektMapper.copy().registerModule(ObjectMapperFactory.createOverstyrendeKodeverdiSerializerModule(SakKodeverkOverstyringSerialisering.INGEN)); // defaultObjektMapper brukast når input header for overstyring ikkje er satt. // Bruker samme logikk som har vore pr no. Det vil seie overstyring av Kalkulus Kodeverdi serialisering til objekt, så lenge ikkje feature flagg for string serialisering er aktivt. // Når alle klienter kan handtere at Kalkulus Kodeverdi kjem som string kan denne sannsynlegvis settast lik baseObjektMapper. @@ -81,8 +79,6 @@ private String getJsonSerializerOptionHeaderValue() { public ObjectMapper getContext(Class type) { final String serializerOption = this.getJsonSerializerOptionHeaderValue(); return switch (serializerOption) { - // Kompatibilitet for verdikjede test klient, istadenfor feature flag på server: - case "kodeverdi-kalkulus-string" -> this.overrideMapperForSøknad(type, this.overstyrKalkulusKodeverdiSomStringMapper); case "kodeverdi-string" -> this.overrideMapperForSøknad(type, this.overstyrKodeverdiAlltidSomStringMapper); case "base" -> this.baseObjektMapper; case "openapi-compat" -> this.openapiObjektMapper; // <- Også hardkoda i k9-sak-web jsonSerializerOption.ts diff --git "a/web/src/main/java/no/nav/k9/sak/web/app/tjenester/forvaltning/dump/vilk\303\245r/Vilk\303\245rForlengelseDump.java" "b/web/src/main/java/no/nav/k9/sak/web/app/tjenester/forvaltning/dump/vilk\303\245r/Vilk\303\245rForlengelseDump.java" index 6831f03f48..34085a1f4a 100644 --- "a/web/src/main/java/no/nav/k9/sak/web/app/tjenester/forvaltning/dump/vilk\303\245r/Vilk\303\245rForlengelseDump.java" +++ "b/web/src/main/java/no/nav/k9/sak/web/app/tjenester/forvaltning/dump/vilk\303\245r/Vilk\303\245rForlengelseDump.java" @@ -15,12 +15,12 @@ import jakarta.enterprise.inject.Any; import jakarta.enterprise.inject.Instance; import jakarta.inject.Inject; -import no.nav.folketrygdloven.kalkulus.mappers.JsonMapper; import no.nav.k9.sak.behandling.BehandlingReferanse; import no.nav.k9.sak.behandlingskontroll.FagsakYtelseTypeRef; import no.nav.k9.sak.behandlingslager.behandling.Behandling; import no.nav.k9.sak.behandlingslager.behandling.vilkår.Vilkårene; import no.nav.k9.sak.behandlingslager.behandling.vilkår.periode.VilkårPeriode; +import no.nav.k9.sak.domene.typer.tid.JsonObjectMapper; import no.nav.k9.sak.perioder.ForlengelseTjeneste; import no.nav.k9.sak.perioder.VilkårsPerioderTilVurderingTjeneste; import no.nav.k9.sak.vilkår.VilkårTjeneste; @@ -35,7 +35,7 @@ @FagsakYtelseTypeRef(OPPLÆRINGSPENGER) public class VilkårForlengelseDump implements DebugDumpBehandling { - private final ObjectWriter objectWriter = JsonMapper.getMapper().writerWithDefaultPrettyPrinter(); + private final ObjectWriter objectWriter = JsonObjectMapper.getMapper().writerWithDefaultPrettyPrinter(); private Instance tjeneste; private VilkårTjeneste vilkårTjeneste; diff --git "a/ytelse-ung/src/main/java/no/nav/k9/sak/ytelse/ung/beregning/LagGrunnbel\303\270pTidslinjeTjeneste.java" "b/ytelse-ung/src/main/java/no/nav/k9/sak/ytelse/ung/beregning/LagGrunnbel\303\270pTidslinjeTjeneste.java" index 72df4f18a1..86ba458542 100644 --- "a/ytelse-ung/src/main/java/no/nav/k9/sak/ytelse/ung/beregning/LagGrunnbel\303\270pTidslinjeTjeneste.java" +++ "b/ytelse-ung/src/main/java/no/nav/k9/sak/ytelse/ung/beregning/LagGrunnbel\303\270pTidslinjeTjeneste.java" @@ -1,9 +1,6 @@ package no.nav.k9.sak.ytelse.ung.beregning; import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.HashSet; -import java.util.Set; import jakarta.enterprise.context.Dependent; import jakarta.inject.Inject; @@ -27,43 +24,7 @@ public class LagGrunnbeløpTidslinjeTjeneste { * @return Tidslinje med grunnbeløp */ public LocalDateTimeline lagGrunnbeløpTidslinjeForPeriode(LocalDateTimeline tidslinjeTilVurdering) { - var grunnbeløpsdatoer = finnGrunnbeløpsdatoer(tidslinjeTilVurdering); - - var grunnbeløpTidslinje = grunnbeløpsdatoer.stream() - .map(d -> grunnbeløpTjeneste.hentGrunnbeløp(d)) - .map(g -> new LocalDateTimeline<>(g.getPeriode().getFomDato(), g.getPeriode().getTomDato(), BigDecimal.valueOf(g.getVerdi()))) - .reduce(LocalDateTimeline::crossJoin) - .orElse(LocalDateTimeline.empty()); - if (grunnbeløpTidslinje.isEmpty()) { - throw new IllegalStateException("Grunnbeløpstidslinjen var tom. Dette skal ikke skje."); - } - return grunnbeløpTidslinje.intersection(tidslinjeTilVurdering); - } - - /** - * Finner datoer der vi skal spørre om grunnbeløp. Antar endring av g-verdi 1. mai hvert år. - * - * @param periodeTidslinje Perioder som skal vurderes - * @return Datoer for endring av grunnbeløp i periode - */ - // TODO: det er mer robust å spørre om tidslinje med G-verdier for hele perioden (i tilfelle det skulle endres på andre datoer) - private static Set finnGrunnbeløpsdatoer(LocalDateTimeline periodeTidslinje) { - var grunnbeløpsdatoer = new HashSet(); - periodeTidslinje.toSegments().forEach(p -> { - if (p.getFom().isAfter(LocalDate.now())) { - grunnbeløpsdatoer.add(LocalDate.now()); - } else { - var startDato = p.getFom().getMonthValue() < 5 ? p.getFom().withYear(p.getFom().getYear() - 1).withMonth(5).withDayOfMonth(1) : p.getFom().withMonth(5).withDayOfMonth(1); - var sluttDato = p.getTom().isBefore(LocalDate.now()) ? p.getTom() : LocalDate.now(); - while (!startDato.isAfter(sluttDato)) { - grunnbeløpsdatoer.add(startDato); - startDato = startDato.plusYears(1); - } - - } - }); - return grunnbeløpsdatoer; + return grunnbeløpTjeneste.hentGrunnbeløpTidslinje(tidslinjeTilVurdering); } - } diff --git a/ytelse-ung/src/test/java/no/nav/k9/sak/ytelse/ung/beregning/UngdomsytelseBeregnDagsatsTest.java b/ytelse-ung/src/test/java/no/nav/k9/sak/ytelse/ung/beregning/UngdomsytelseBeregnDagsatsTest.java index 826ef94b31..621b6c6231 100644 --- a/ytelse-ung/src/test/java/no/nav/k9/sak/ytelse/ung/beregning/UngdomsytelseBeregnDagsatsTest.java +++ b/ytelse-ung/src/test/java/no/nav/k9/sak/ytelse/ung/beregning/UngdomsytelseBeregnDagsatsTest.java @@ -11,25 +11,29 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import jakarta.inject.Inject; import no.nav.fpsak.tidsserie.LocalDateTimeline; -import no.nav.k9.sak.domene.typer.tid.DatoIntervallEntitet; +import no.nav.k9.felles.testutilities.cdi.CdiAwareExtension; +import no.nav.k9.sak.db.util.JpaExtension; import no.nav.k9.sak.grunnbeløp.GrunnbeløpTjeneste; import no.nav.k9.sak.ytelse.ung.beregning.barnetillegg.LagAntallBarnTidslinje; import no.nav.k9.sak.ytelse.ung.beregning.barnetillegg.LagBarnetilleggTidslinje; +@ExtendWith(JpaExtension.class) +@ExtendWith(CdiAwareExtension.class) class UngdomsytelseBeregnDagsatsTest { private UngdomsytelseBeregnDagsats tjeneste; - private GrunnbeløpTjeneste grunnbeløpTjeneste = mock(GrunnbeløpTjeneste.class); + @Inject + private GrunnbeløpTjeneste grunnbeløpTjeneste; private LagAntallBarnTidslinje lagAntallBarnTidslinje = mock(LagAntallBarnTidslinje.class); @BeforeEach void setUp() { tjeneste = new UngdomsytelseBeregnDagsats(new LagGrunnbeløpTidslinjeTjeneste(grunnbeløpTjeneste), new LagBarnetilleggTidslinje(lagAntallBarnTidslinje)); - when(grunnbeløpTjeneste.hentGrunnbeløp(LocalDate.of(2023,5,1))).thenReturn(new no.nav.k9.sak.grunnbeløp.Grunnbeløp(100000, DatoIntervallEntitet.fraOgMedTilOgMed(LocalDate.of(2023,5,1), LocalDate.of(2024,4,30)))); - when(grunnbeløpTjeneste.hentGrunnbeløp(LocalDate.of(2024,5,1))).thenReturn(new no.nav.k9.sak.grunnbeløp.Grunnbeløp(124028, DatoIntervallEntitet.fraOgMedTilOgMed(LocalDate.of(2024,5,1), LocalDate.MAX))); when(lagAntallBarnTidslinje.lagAntallBarnTidslinje(any())).thenReturn(LocalDateTimeline.empty()); } @@ -48,8 +52,8 @@ void setUp() { assertThat(first.getFom()).isEqualTo(fom); assertThat(first.getTom()).isEqualTo(tom); assertThat(first.getValue().grunnbeløpFaktor().compareTo(BigDecimal.valueOf(1.33333))).isEqualTo(0); - assertThat(first.getValue().grunnbeløp().compareTo(BigDecimal.valueOf(100000))).isEqualTo(0); - assertThat(first.getValue().dagsats().compareTo(BigDecimal.valueOf(512.82))).isEqualTo(0); + assertThat(first.getValue().grunnbeløp().compareTo(BigDecimal.valueOf(118620))).isEqualTo(0); + assertThat(first.getValue().dagsats().compareTo(BigDecimal.valueOf(608.31))).isEqualTo(0); } @@ -67,13 +71,13 @@ void setUp() { var iterator = segmenter.iterator(); var first = iterator.next(); assertThat(first.getFom()).isEqualTo(fom); - assertThat(first.getTom()).isEqualTo(LocalDate.of(2024,4, 30)); + assertThat(first.getTom()).isEqualTo(LocalDate.of(2024, 4, 30)); assertThat(first.getValue().grunnbeløpFaktor().compareTo(BigDecimal.valueOf(1.33333))).isEqualTo(0); - assertThat(first.getValue().grunnbeløp().compareTo(BigDecimal.valueOf(100000))).isEqualTo(0); - assertThat(first.getValue().dagsats().compareTo(BigDecimal.valueOf(512.82))).isEqualTo(0); + assertThat(first.getValue().grunnbeløp().compareTo(BigDecimal.valueOf(118620))).isEqualTo(0); + assertThat(first.getValue().dagsats().compareTo(BigDecimal.valueOf(608.31))).isEqualTo(0); var second = iterator.next(); - assertThat(second.getFom()).isEqualTo(LocalDate.of(2024,5, 1)); + assertThat(second.getFom()).isEqualTo(LocalDate.of(2024, 5, 1)); assertThat(second.getTom()).isEqualTo(tom); assertThat(second.getValue().grunnbeløpFaktor().compareTo(BigDecimal.valueOf(1.33333))).isEqualTo(0); assertThat(second.getValue().grunnbeløp().compareTo(BigDecimal.valueOf(124028))).isEqualTo(0); @@ -98,8 +102,8 @@ void setUp() { assertThat(first.getFom()).isEqualTo(fom); assertThat(first.getTom()).isEqualTo(førsteDagMedHøySats.minusDays(1)); assertThat(first.getValue().grunnbeløpFaktor().compareTo(BigDecimal.valueOf(1.33333))).isEqualTo(0); - assertThat(first.getValue().grunnbeløp().compareTo(BigDecimal.valueOf(100000))).isEqualTo(0); - assertThat(first.getValue().dagsats().compareTo(BigDecimal.valueOf(512.82))).isEqualTo(0); + assertThat(first.getValue().grunnbeløp().compareTo(BigDecimal.valueOf(118620))).isEqualTo(0); + assertThat(first.getValue().dagsats().compareTo(BigDecimal.valueOf(608.31))).isEqualTo(0); var second = iterator.next(); assertThat(second.getFom()).isEqualTo(førsteDagMedHøySats); @@ -128,8 +132,8 @@ void setUp() { var sisteDagMedLavSats = tjuefemårsdag.with(TemporalAdjusters.lastDayOfMonth()); assertThat(first.getTom()).isEqualTo(sisteDagMedLavSats); assertThat(first.getValue().grunnbeløpFaktor().compareTo(BigDecimal.valueOf(1.33333))).isEqualTo(0); - assertThat(first.getValue().grunnbeløp().compareTo(BigDecimal.valueOf(100000))).isEqualTo(0); - assertThat(first.getValue().dagsats().compareTo(BigDecimal.valueOf(512.82))).isEqualTo(0); + assertThat(first.getValue().grunnbeløp().compareTo(BigDecimal.valueOf(118620))).isEqualTo(0); + assertThat(first.getValue().dagsats().compareTo(BigDecimal.valueOf(608.31))).isEqualTo(0); var second = iterator.next(); assertThat(second.getFom()).isEqualTo(sisteDagMedLavSats.plusDays(1)); @@ -140,5 +144,4 @@ void setUp() { } - }