From 7263e7f400de4148716c6b3662086245fa27cd7f Mon Sep 17 00:00:00 2001 From: Petter Ekern <43809623+pekern@users.noreply.github.com> Date: Mon, 16 Sep 2024 12:13:58 +0200 Subject: [PATCH] =?UTF-8?q?TFP-5849:=20Mapper=20inn=20vilk=C3=A5rssporing,?= =?UTF-8?q?=20fjerner=20bruk=20av=20entitet=20/=20repo=20f=E2=80=A6=20(#67?= =?UTF-8?q?00)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TFP-5849: Mapper inn vilkårssporing, fjerner bruk av entitet / repo fra totrinn og greg task --- .../Grunnbel\303\270pReguleringTask.java" | 22 +++++++++----- .../Grunnbel\303\270pReguleringTaskTest.java" | 17 +++++++---- .../domene/prosess/BeregningKalkulus.java | 5 ++-- .../domene/prosess/KalkulusKlient.java | 5 +++- .../domene/prosess/KalkulusRespons.java | 4 ++- .../domene/prosess/BeregningKalkulusTest.java | 4 +-- pom.xml | 2 +- .../app/TotrinnsBeregningDtoTjeneste.java | 30 +++++++++---------- 8 files changed, 52 insertions(+), 37 deletions(-) diff --git "a/domenetjenester/behandling-revurdering/src/main/java/no/nav/foreldrepenger/behandling/revurdering/satsregulering/Grunnbel\303\270pReguleringTask.java" "b/domenetjenester/behandling-revurdering/src/main/java/no/nav/foreldrepenger/behandling/revurdering/satsregulering/Grunnbel\303\270pReguleringTask.java" index 7bbac1ab5a5..b9025358ae9 100644 --- "a/domenetjenester/behandling-revurdering/src/main/java/no/nav/foreldrepenger/behandling/revurdering/satsregulering/Grunnbel\303\270pReguleringTask.java" +++ "b/domenetjenester/behandling-revurdering/src/main/java/no/nav/foreldrepenger/behandling/revurdering/satsregulering/Grunnbel\303\270pReguleringTask.java" @@ -5,6 +5,11 @@ import jakarta.enterprise.context.Dependent; import jakarta.inject.Inject; +import no.nav.foreldrepenger.behandling.BehandlingReferanse; +import no.nav.foreldrepenger.domene.modell.Beregningsgrunnlag; +import no.nav.foreldrepenger.domene.modell.BeregningsgrunnlagGrunnlag; +import no.nav.foreldrepenger.domene.prosess.BeregningTjeneste; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,8 +25,6 @@ import no.nav.foreldrepenger.behandlingslager.fagsak.FagsakRepository; import no.nav.foreldrepenger.behandlingslager.task.FagsakProsessTask; import no.nav.foreldrepenger.behandlingsprosess.prosessering.BehandlingProsesseringTjeneste; -import no.nav.foreldrepenger.domene.entiteter.BeregningsgrunnlagEntitet; -import no.nav.foreldrepenger.domene.entiteter.BeregningsgrunnlagRepository; import no.nav.foreldrepenger.domene.typer.Beløp; import no.nav.foreldrepenger.produksjonsstyring.behandlingenhet.BehandlendeEnhetTjeneste; import no.nav.foreldrepenger.skjæringstidspunkt.SkjæringstidspunktTjeneste; @@ -40,7 +43,7 @@ public class GrunnbeløpReguleringTask extends FagsakProsessTask { private final BehandlingRepository behandlingRepository; private final FagsakRepository fagsakRepository; private final BehandlingProsesseringTjeneste behandlingProsesseringTjeneste; - private final BeregningsgrunnlagRepository beregningsgrunnlagRepository; + private final BeregningTjeneste beregningTjeneste; private final SatsRepository satsRepository; private final SkjæringstidspunktTjeneste skjæringstidspunktTjeneste; private final BehandlendeEnhetTjeneste enhetTjeneste; @@ -50,16 +53,16 @@ public class GrunnbeløpReguleringTask extends FagsakProsessTask { public GrunnbeløpReguleringTask(BehandlingRepositoryProvider repositoryProvider, SkjæringstidspunktTjeneste skjæringstidspunktTjeneste, BehandlingProsesseringTjeneste behandlingProsesseringTjeneste, - BeregningsgrunnlagRepository beregningsgrunnlagRepository, + BeregningTjeneste beregningTjeneste, SatsRepository satsRepository, BehandlendeEnhetTjeneste enhetTjeneste, BehandlingFlytkontroll flytkontroll) { super(repositoryProvider.getFagsakLåsRepository(), repositoryProvider.getBehandlingLåsRepository()); this.behandlingRepository = repositoryProvider.getBehandlingRepository(); this.fagsakRepository = repositoryProvider.getFagsakRepository(); - this.beregningsgrunnlagRepository = beregningsgrunnlagRepository; this.behandlingProsesseringTjeneste = behandlingProsesseringTjeneste; this.skjæringstidspunktTjeneste = skjæringstidspunktTjeneste; + this.beregningTjeneste = beregningTjeneste; this.satsRepository = satsRepository; this.enhetTjeneste = enhetTjeneste; this.flytkontroll = flytkontroll; @@ -80,9 +83,12 @@ protected void prosesser(ProsessTaskData prosessTaskData, Long fagsakId, Long be if (prosessTaskData.getPropertyValue(MANUELL_KEY) == null) { var sisteVedtatte = behandlingRepository.finnSisteAvsluttedeIkkeHenlagteBehandling(fagsakId).orElseThrow(); var skjæringstidspunkt = skjæringstidspunktTjeneste.getSkjæringstidspunkterForAvsluttetBehandling(sisteVedtatte.getId()); - var grunnbeløpFraSisteVedtatt = beregningsgrunnlagRepository.hentBeregningsgrunnlagForBehandling(sisteVedtatte.getId()) - .map(BeregningsgrunnlagEntitet::getGrunnbeløp) - .map(Beløp::getVerdi).map(BigDecimal::longValue).orElse(0L); + var grunnbeløpFraSisteVedtatt = beregningTjeneste.hent(BehandlingReferanse.fra(sisteVedtatte)) + .flatMap(BeregningsgrunnlagGrunnlag::getBeregningsgrunnlag) + .map(Beregningsgrunnlag::getGrunnbeløp) + .map(Beløp::getVerdi) + .map(BigDecimal::longValue) + .orElse(0L); var skalBrukeGrunnbeløp = satsRepository.finnEksaktSats(BeregningSatsType.GRUNNBELØP, skjæringstidspunkt.getFørsteUttaksdatoGrunnbeløp()).getVerdi(); if (grunnbeløpFraSisteVedtatt == skalBrukeGrunnbeløp) { LOG.info("GrunnbeløpRegulering har rett G for saksnummer = {} stp {}", fagsak.getSaksnummer().getVerdi(), skjæringstidspunkt.getFørsteUttaksdatoGrunnbeløp()); diff --git "a/domenetjenester/behandling-revurdering/src/test/java/no/nav/foreldrepenger/behandling/revurdering/satsregulering/Grunnbel\303\270pReguleringTaskTest.java" "b/domenetjenester/behandling-revurdering/src/test/java/no/nav/foreldrepenger/behandling/revurdering/satsregulering/Grunnbel\303\270pReguleringTaskTest.java" index bf51ae27723..72b4f62aa13 100644 --- "a/domenetjenester/behandling-revurdering/src/test/java/no/nav/foreldrepenger/behandling/revurdering/satsregulering/Grunnbel\303\270pReguleringTaskTest.java" +++ "b/domenetjenester/behandling-revurdering/src/test/java/no/nav/foreldrepenger/behandling/revurdering/satsregulering/Grunnbel\303\270pReguleringTaskTest.java" @@ -14,6 +14,11 @@ import no.nav.foreldrepenger.behandlingslager.behandling.beregning.SatsRepository; +import no.nav.foreldrepenger.domene.modell.Beregningsgrunnlag; +import no.nav.foreldrepenger.domene.modell.BeregningsgrunnlagGrunnlagBuilder; +import no.nav.foreldrepenger.domene.modell.kodeverk.BeregningsgrunnlagTilstand; +import no.nav.foreldrepenger.domene.prosess.BeregningTjeneste; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -42,8 +47,6 @@ import no.nav.foreldrepenger.behandlingslager.testutilities.behandling.ScenarioMorSøkerForeldrepenger; import no.nav.foreldrepenger.behandlingsprosess.prosessering.BehandlingProsesseringTjeneste; import no.nav.foreldrepenger.dbstoette.JpaExtension; -import no.nav.foreldrepenger.domene.entiteter.BeregningsgrunnlagEntitet; -import no.nav.foreldrepenger.domene.entiteter.BeregningsgrunnlagRepository; import no.nav.foreldrepenger.domene.tid.DatoIntervallEntitet; import no.nav.foreldrepenger.domene.typer.Beløp; import no.nav.foreldrepenger.produksjonsstyring.behandlingenhet.BehandlendeEnhetTjeneste; @@ -67,7 +70,7 @@ class GrunnbeløpReguleringTaskTest { @Mock private SkjæringstidspunktTjeneste skjæringstidspunktTjeneste; @Mock - private BeregningsgrunnlagRepository beregningsgrunnlagRepository; + private BeregningTjeneste beregningTjeneste; @Mock private SatsRepository satsRepository; @@ -78,8 +81,10 @@ class GrunnbeløpReguleringTaskTest { void setUp(EntityManager entityManager) { repositoryProvider = new BehandlingRepositoryProvider(entityManager); behandlingRepository = new BehandlingRepository(entityManager); - lenient().when(beregningsgrunnlagRepository.hentBeregningsgrunnlagForBehandling(any())).thenReturn(Optional.of(BeregningsgrunnlagEntitet.ny() - .medGrunnbeløp(EKSISTERENDE_G).medSkjæringstidspunkt(EKSISTERENDE_STP_B).build())); + var gr = BeregningsgrunnlagGrunnlagBuilder.nytt() + .medBeregningsgrunnlag(Beregningsgrunnlag.builder().medGrunnbeløp(EKSISTERENDE_G).medSkjæringstidspunkt(EKSISTERENDE_STP_B).build()) + .build(BeregningsgrunnlagTilstand.FASTSATT); + lenient().when(beregningTjeneste.hent(any())).thenReturn(Optional.of(gr)); lenient().when(satsRepository.finnEksaktSats(eq(BeregningSatsType.GRUNNBELØP), any())) .thenReturn(new BeregningSats(BeregningSatsType.GRUNNBELØP, DatoIntervallEntitet.fraOgMedTilOgMed(TERMINDATO.minusYears(1), TERMINDATO), EKSISTERENDE_G.getVerdi().longValue() + 1000)); @@ -121,7 +126,7 @@ private void assertIngenRevurdering(Fagsak fagsak) { private GrunnbeløpReguleringTask createTask() { return new GrunnbeløpReguleringTask(repositoryProvider, - skjæringstidspunktTjeneste, prosesseringTjeneste, beregningsgrunnlagRepository, satsRepository, enhetsTjeneste, flytkontroll); + skjæringstidspunktTjeneste, prosesseringTjeneste, beregningTjeneste, satsRepository, enhetsTjeneste, flytkontroll); } @Test diff --git a/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/BeregningKalkulus.java b/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/BeregningKalkulus.java index 238678403cf..37c39d2f303 100644 --- a/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/BeregningKalkulus.java +++ b/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/BeregningKalkulus.java @@ -92,8 +92,9 @@ public Optional hent(BehandlingReferanse referanse) var request = lagBeregningRequest(behandlingReferanse, kobling, beregningSteg, originalKobling); var respons = klient.beregn(request); var prosessResultat = new BeregningsgrunnlagVilkårOgAkjonspunktResultat(respons.aksjonspunkter()); - // TODO Finn ut hvordan vi løser sporing av vilkåret - prosessResultat.setVilkårOppfylt(respons.erVilkårOppfylt(), null, null, null); + if (respons.vilkårdata() != null) { + prosessResultat.setVilkårOppfylt(respons.vilkårdata().erVilkårOppfylt(), respons.vilkårdata().regelEvalueringSporing(), respons.vilkårdata().regelInputSporing(), respons.vilkårdata().regelVersjon()); + } oppdaterKoblingMedData(behandlingReferanse, stegType, kobling); return prosessResultat; } diff --git a/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/KalkulusKlient.java b/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/KalkulusKlient.java index 532186026ba..2b19940222e 100644 --- a/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/KalkulusKlient.java +++ b/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/KalkulusKlient.java @@ -64,7 +64,10 @@ public KalkulusRespons beregn(BeregnRequestDto request) { try { var respons = restClient.sendReturnOptional(restRequest, TilstandResponse.class).orElseThrow(() -> new IllegalStateException("Ugyldig tilstand, tomt svar fra kalkulus")); var aksjonspunkter = respons.getAvklaringsbehovMedTilstandDto().stream().map(BeregningAksjonspunktResultatMapper::mapKontrakt).toList(); - return new KalkulusRespons(aksjonspunkter, respons.getVilkarOppfylt()); + var vilkårRespons = respons.getVilkårResultat(); + var vilkårResponsDto = vilkårRespons == null ? null : new KalkulusRespons.VilkårRespons(vilkårRespons.getErVilkarOppfylt(), + vilkårRespons.getRegelEvalueringSporing(), vilkårRespons.getRegelInputSporing(), vilkårRespons.getRegelVersjon()); + return new KalkulusRespons(aksjonspunkter, vilkårResponsDto); } catch (Exception e) { throw new TekniskException("FP-503800", "Feil ved kall til fpkalkulus: " + e); } diff --git a/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/KalkulusRespons.java b/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/KalkulusRespons.java index f040b4c40cb..aab12c822f0 100644 --- a/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/KalkulusRespons.java +++ b/domenetjenester/beregningsgrunnlag/src/main/java/no/nav/foreldrepenger/domene/prosess/KalkulusRespons.java @@ -4,4 +4,6 @@ import java.util.List; -public record KalkulusRespons (List aksjonspunkter, Boolean erVilkårOppfylt) {} +public record KalkulusRespons (List aksjonspunkter, VilkårRespons vilkårdata) { + protected record VilkårRespons (Boolean erVilkårOppfylt, String regelEvalueringSporing, String regelInputSporing, String regelVersjon) {} +} diff --git a/domenetjenester/beregningsgrunnlag/src/test/java/no/nav/foreldrepenger/domene/prosess/BeregningKalkulusTest.java b/domenetjenester/beregningsgrunnlag/src/test/java/no/nav/foreldrepenger/domene/prosess/BeregningKalkulusTest.java index fcf7129f921..b299a64a733 100644 --- a/domenetjenester/beregningsgrunnlag/src/test/java/no/nav/foreldrepenger/domene/prosess/BeregningKalkulusTest.java +++ b/domenetjenester/beregningsgrunnlag/src/test/java/no/nav/foreldrepenger/domene/prosess/BeregningKalkulusTest.java @@ -59,7 +59,7 @@ void setup() { when(koblingRepository.hentKobling(behandlingReferanse.behandlingId())).thenReturn(Optional.empty()); when(koblingRepository.opprettKobling(behandlingReferanse)).thenReturn(new BeregningsgrunnlagKobling(behandlingReferanse .behandlingId(), behandlingReferanse.behandlingUuid())); - when(kalkulusKlient.beregn(any())).thenReturn(new KalkulusRespons(List.of(), true)); + when(kalkulusKlient.beregn(any())).thenReturn(new KalkulusRespons(List.of(), new KalkulusRespons.VilkårRespons(true, "", "", ""))); // Act beregningKalkulus.beregn(behandlingReferanse, BehandlingStegType.FASTSETT_SKJÆRINGSTIDSPUNKT_BEREGNING); @@ -84,7 +84,7 @@ void setup() { var behandlingReferanse = lagRef(); when(koblingRepository.hentKobling(behandlingReferanse.behandlingId())).thenReturn(Optional.of(new BeregningsgrunnlagKobling(behandlingReferanse .behandlingId(), behandlingReferanse.behandlingUuid()))); - when(kalkulusKlient.beregn(any())).thenReturn(new KalkulusRespons(List.of(), true)); + when(kalkulusKlient.beregn(any())).thenReturn(new KalkulusRespons(List.of(), new KalkulusRespons.VilkårRespons(true, "", "", ""))); // Act beregningKalkulus.beregn(behandlingReferanse, BehandlingStegType.FORESLÅ_BEREGNINGSGRUNNLAG); diff --git a/pom.xml b/pom.xml index 09669818d45..74bdb5af1b1 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 2.7.1 2.6.3 1.1.0 - 5.4.9 + 5.4.11 15.3.0 2.1.1 2.4.4 diff --git a/web/src/main/java/no/nav/foreldrepenger/web/app/tjenester/behandling/vedtak/app/TotrinnsBeregningDtoTjeneste.java b/web/src/main/java/no/nav/foreldrepenger/web/app/tjenester/behandling/vedtak/app/TotrinnsBeregningDtoTjeneste.java index 779a8254abd..b745d7d3877 100644 --- a/web/src/main/java/no/nav/foreldrepenger/web/app/tjenester/behandling/vedtak/app/TotrinnsBeregningDtoTjeneste.java +++ b/web/src/main/java/no/nav/foreldrepenger/web/app/tjenester/behandling/vedtak/app/TotrinnsBeregningDtoTjeneste.java @@ -1,42 +1,44 @@ package no.nav.foreldrepenger.web.app.tjenester.behandling.vedtak.app; import java.util.List; -import java.util.Optional; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; +import no.nav.foreldrepenger.behandling.BehandlingReferanse; import no.nav.foreldrepenger.behandlingslager.behandling.Behandling; import no.nav.foreldrepenger.behandlingslager.behandling.aksjonspunkt.AksjonspunktDefinisjon; import no.nav.foreldrepenger.behandlingslager.behandling.beregning.AktivitetStatus; import no.nav.foreldrepenger.behandlingslager.behandling.totrinn.Totrinnsvurdering; -import no.nav.foreldrepenger.domene.entiteter.BeregningsgrunnlagEntitet; +import no.nav.foreldrepenger.domene.modell.Beregningsgrunnlag; +import no.nav.foreldrepenger.domene.modell.BeregningsgrunnlagGrunnlag; import no.nav.foreldrepenger.domene.modell.kodeverk.FaktaOmBeregningTilfelle; -import no.nav.foreldrepenger.domene.prosess.HentOgLagreBeregningsgrunnlagTjeneste; +import no.nav.foreldrepenger.domene.prosess.BeregningTjeneste; import no.nav.foreldrepenger.web.app.tjenester.behandling.vedtak.dto.TotrinnsBeregningDto; @ApplicationScoped public class TotrinnsBeregningDtoTjeneste { - private HentOgLagreBeregningsgrunnlagTjeneste beregningsgrunnlagTjeneste; + private BeregningTjeneste beregningTjeneste; protected TotrinnsBeregningDtoTjeneste() { // for CDI proxy } @Inject - public TotrinnsBeregningDtoTjeneste(HentOgLagreBeregningsgrunnlagTjeneste beregningsgrunnlagTjeneste) { - this.beregningsgrunnlagTjeneste = beregningsgrunnlagTjeneste; + public TotrinnsBeregningDtoTjeneste(BeregningTjeneste beregningTjeneste) { + this.beregningTjeneste = beregningTjeneste; } TotrinnsBeregningDto hentBeregningDto(Totrinnsvurdering aksjonspunkt, Behandling behandling) { var dto = new TotrinnsBeregningDto(); + var ref = BehandlingReferanse.fra(behandling); if (aksjonspunkt.getAksjonspunktDefinisjon().equals(AksjonspunktDefinisjon.VURDER_VARIG_ENDRET_ELLER_NYOPPSTARTET_NÆRING_SELVSTENDIG_NÆRINGSDRIVENDE)) { - dto.setFastsattVarigEndringNaering(erVarigEndringFastsattForSelvstendingNæringsdrivendeGittBehandlingId(behandling.getId())); + dto.setFastsattVarigEndringNaering(erVarigEndringFastsattForSelvstendingNæringsdrivendeGittBehandlingId(ref)); } if (AksjonspunktDefinisjon.VURDER_FAKTA_FOR_ATFL_SN.equals(aksjonspunkt.getAksjonspunktDefinisjon())) { - var bg = hentBeregningsgrunnlag(behandling.getId()); - var tilfeller = bg.map(BeregningsgrunnlagEntitet::getFaktaOmBeregningTilfeller).orElseGet(List::of); + var bg = beregningTjeneste.hent(ref).flatMap(BeregningsgrunnlagGrunnlag::getBeregningsgrunnlag); + var tilfeller = bg.map(Beregningsgrunnlag::getFaktaOmBeregningTilfeller).orElseGet(List::of); dto.setFaktaOmBeregningTilfeller(mapTilfelle(tilfeller)); } return dto; @@ -46,14 +48,10 @@ private List mapTilfelle(List FaktaOmBeregningTilfelle.fraKode(t.getKode())).toList(); } - private Optional hentBeregningsgrunnlag(Long behandlingId) { - return beregningsgrunnlagTjeneste.hentBeregningsgrunnlagEntitetForBehandling(behandlingId); - } - - private boolean erVarigEndringFastsattForSelvstendingNæringsdrivendeGittBehandlingId(Long behandlingId) { - var beregningsgrunnlag = hentBeregningsgrunnlag(behandlingId); + private boolean erVarigEndringFastsattForSelvstendingNæringsdrivendeGittBehandlingId(BehandlingReferanse ref) { + var beregningsgrunnlag = beregningTjeneste.hent(ref).flatMap(BeregningsgrunnlagGrunnlag::getBeregningsgrunnlag); - return beregningsgrunnlag.map(BeregningsgrunnlagEntitet::getBeregningsgrunnlagPerioder).orElseGet(List::of).stream() + return beregningsgrunnlag.map(Beregningsgrunnlag::getBeregningsgrunnlagPerioder).orElseGet(List::of).stream() .flatMap(bgps -> bgps.getBeregningsgrunnlagPrStatusOgAndelList().stream()) .filter(andel -> AktivitetStatus.SELVSTENDIG_NÆRINGSDRIVENDE.equals(AktivitetStatus.fraKode(andel.getAktivitetStatus().getKode()))) .anyMatch(andel -> andel.getOverstyrtPrÅr() != null);