Skip to content

Commit

Permalink
TFP-5908: Sammenligner regelsporing i tillegg til beregningsgrunnlag (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
pekern authored Jan 8, 2025
1 parent e77b94e commit 828369f
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import no.nav.foreldrepenger.domene.modell.kodeverk.AktivitetStatus;
import no.nav.foreldrepenger.domene.modell.kodeverk.AndelKilde;
import no.nav.foreldrepenger.domene.modell.kodeverk.BeregningAktivitetHandlingType;
import no.nav.foreldrepenger.domene.modell.kodeverk.BeregningsgrunnlagPeriodeRegelType;
import no.nav.foreldrepenger.domene.modell.kodeverk.BeregningsgrunnlagRegelType;
import no.nav.foreldrepenger.domene.modell.kodeverk.BeregningsgrunnlagTilstand;
import no.nav.foreldrepenger.domene.modell.kodeverk.FaktaOmBeregningTilfelle;
import no.nav.foreldrepenger.domene.modell.kodeverk.Hjemmel;
Expand Down Expand Up @@ -194,4 +196,31 @@ public static Hjemmel mapHjemmel(no.nav.folketrygdloven.kalkulus.kodeverk.Hjemme
F_9_9_8_40, KORONALOVEN_3, F_22_13_6 -> throw new IllegalArgumentException(ukjentKodeFeil("hjemmel", hjemmel.getKode()));
};
}

public static BeregningsgrunnlagRegelType mapRegelGrunnlagType(no.nav.folketrygdloven.kalkulus.kodeverk.BeregningsgrunnlagRegelType type) {
return switch (type) {
case SKJÆRINGSTIDSPUNKT -> BeregningsgrunnlagRegelType.SKJÆRINGSTIDSPUNKT;
case BRUKERS_STATUS -> BeregningsgrunnlagRegelType.BRUKERS_STATUS;
case PERIODISERING_NATURALYTELSE -> BeregningsgrunnlagRegelType.PERIODISERING_NATURALYTELSE;
case PERIODISERING_REFUSJON -> BeregningsgrunnlagRegelType.PERIODISERING_REFUSJON;
case PERIODISERING_GRADERING -> BeregningsgrunnlagRegelType.PERIODISERING_GRADERING;
case UDEFINERT -> BeregningsgrunnlagRegelType.UDEFINERT;
case PERIODISERING -> BeregningsgrunnlagRegelType.PERIODISERING;
case PERIODISERING_UTBETALINGSGRAD, BESTEBEREGNING -> throw new IllegalArgumentException(ukjentKodeFeil("regelgrunnlagType", type.getKode()));
};
}

public static BeregningsgrunnlagPeriodeRegelType mapRegelPeriodeType(no.nav.folketrygdloven.kalkulus.kodeverk.BeregningsgrunnlagPeriodeRegelType type) {
return switch (type) {
case FORESLÅ -> BeregningsgrunnlagPeriodeRegelType.FORESLÅ;
case FORESLÅ_2 -> BeregningsgrunnlagPeriodeRegelType.FORESLÅ_2;
case VILKÅR_VURDERING -> BeregningsgrunnlagPeriodeRegelType.VILKÅR_VURDERING;
case FORDEL -> BeregningsgrunnlagPeriodeRegelType.FORDEL;
case FASTSETT -> BeregningsgrunnlagPeriodeRegelType.FASTSETT;
case FINN_GRENSEVERDI -> BeregningsgrunnlagPeriodeRegelType.FINN_GRENSEVERDI;
case UDEFINERT -> BeregningsgrunnlagPeriodeRegelType.UDEFINERT;
case OPPDATER_GRUNNLAG_SVP -> BeregningsgrunnlagPeriodeRegelType.OPPDATER_GRUNNLAG_SVP;
case FASTSETT2 -> BeregningsgrunnlagPeriodeRegelType.FASTSETT2;
};
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
package no.nav.foreldrepenger.domene.migrering;

import java.util.Collections;
import java.util.Comparator;
import java.util.Objects;
import java.util.Optional;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;

import no.nav.foreldrepenger.domene.entiteter.BeregningsgrunnlagEntitet;

import no.nav.foreldrepenger.domene.mappers.fra_kalkulator_til_entitet.KodeverkFraKalkulusMapper;
import no.nav.foreldrepenger.domene.modell.kodeverk.BeregningsgrunnlagPeriodeRegelType;

import org.jboss.weld.exceptions.IllegalStateException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -79,7 +86,8 @@ private void migrerBehandling(BehandlingReferanse referanse) {
var request = lagMigreringRequest(referanse, kobling, originalKobling, migreringsDto);
var response = klient.migrerGrunnlag(request);
sammenlignGrunnlag(response, referanse);

LOG.info(String.format("Vellykket migrering og verifisering av beregningsgrunnlag på sak %s, behandlingId %s og grunnlag %s.", referanse.saksnummer(),
referanse.behandlingId(), grunnlag.map(BeregningsgrunnlagGrunnlagEntitet::getId)));
} catch (Exception e) {
var msg = String.format("Feil ved mapping av grunnlag for sak %s, behandlingId %s og grunnlag %s. Fikk feil %s", referanse.saksnummer(),
referanse.behandlingId(), grunnlag.map(BeregningsgrunnlagGrunnlagEntitet::getId), e);
Expand All @@ -89,14 +97,47 @@ private void migrerBehandling(BehandlingReferanse referanse) {

private void sammenlignGrunnlag(MigrerBeregningsgrunnlagResponse response, BehandlingReferanse referanse) {
var entitet = beregningsgrunnlagRepository.hentBeregningsgrunnlagGrunnlagEntitet(referanse.behandlingId()).orElseThrow();
verifiserRegelsporinger(response, entitet);
var fpsakGrunnlag = FraEntitetTilBehandlingsmodellMapper.mapBeregningsgrunnlagGrunnlag(entitet);
var kalkulusGrunnlag = KalkulusTilFpsakMapper.map(response.grunnlag(), Optional.ofNullable(response.besteberegningGrunnlag()));
var fpJson = StandardJsonConfig.toJson(fpsakGrunnlag);
var kalkJson = StandardJsonConfig.toJson(kalkulusGrunnlag);
if (fpJson.equals(kalkJson)) {
LOG.info("Det er likt!");
} else {
LOG.info("Det er ulikt!");
if (!fpJson.equals(kalkJson)) {
throw new IllegalStateException("Missmatch mellom kalkulus json og fpsak json av samme beregninsgrunnlag");
}
}

private void verifiserRegelsporinger(MigrerBeregningsgrunnlagResponse response, BeregningsgrunnlagGrunnlagEntitet entitet) {
// Verifiser grunnlagsporinger
var grunnlagSporinger = response.sporingerGrunnlag();
var fpsakGrunnlagSporinger = entitet.getBeregningsgrunnlag()
.map(BeregningsgrunnlagEntitet::getRegelSporinger)
.orElse(Collections.emptyMap());
var alleGrunnlagSporingerMatcher = grunnlagSporinger.size() == fpsakGrunnlagSporinger.size() && grunnlagSporinger.stream().allMatch(kalkulusRegelGrunnlag -> {
var type = KodeverkFraKalkulusMapper.mapRegelGrunnlagType(kalkulusRegelGrunnlag.type());
var fpsakSporing = fpsakGrunnlagSporinger.get(type);
return fpsakSporing != null && fpsakSporing.getRegelEvaluering().equals(kalkulusRegelGrunnlag.regelevaluering()) && fpsakSporing.getRegelInput()
.equals(kalkulusRegelGrunnlag.regelinput()) && Objects.equals(fpsakSporing.getRegelVersjon(), kalkulusRegelGrunnlag.regelversjon());
});
if (!alleGrunnlagSporingerMatcher) {
throw new IllegalStateException("Feil med matching av regelsporing på grunnlagsnivå");
}

// Verifiser periodesporinger
var bgPerioder = entitet.getBeregningsgrunnlag().map(BeregningsgrunnlagEntitet::getBeregningsgrunnlagPerioder).orElse(Collections.emptyList());
var allePeriodeSporingerMatcher = response.sporingerPeriode().stream().allMatch(kalkulusRegelPeriode -> {
var matchetBgPeriode = bgPerioder.stream()
.filter(b -> b.getPeriode().getFomDato().equals(kalkulusRegelPeriode.periode().getFom()))
.findFirst()
.orElseThrow();
BeregningsgrunnlagPeriodeRegelType fpsakType = KodeverkFraKalkulusMapper.mapRegelPeriodeType(kalkulusRegelPeriode.type());
var fpsakSporing = matchetBgPeriode.getRegelSporinger().get(fpsakType);
return fpsakSporing != null && fpsakSporing.getRegelEvaluering().equals(kalkulusRegelPeriode.regelevaluering())
&& fpsakSporing.getRegelInput().equals(kalkulusRegelPeriode.regelinput()) && Objects.equals(fpsakSporing.getRegelVersjon(),
kalkulusRegelPeriode.regelversjon());
});
if (!allePeriodeSporingerMatcher) {
throw new IllegalStateException("Feil med matching av regelsporing på periodenivå");
}
}

Expand Down

0 comments on commit 828369f

Please sign in to comment.