Skip to content

Commit

Permalink
FIX: Flytter kode som sjekker gradering i beregning inn i beregningsp… (
Browse files Browse the repository at this point in the history
#6676)

* FIX: Flytter kode som sjekker gradering i beregning inn i beregningspakken så den kan brukes der, og avvender bruk av kalkulatormodell andre steder enn beregningspakken
  • Loading branch information
pekern authored Sep 6, 2024
1 parent d911348 commit aac4cab
Show file tree
Hide file tree
Showing 12 changed files with 278 additions and 92 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,10 @@
import no.nav.foreldrepenger.behandling.BehandlingReferanse;
import no.nav.foreldrepenger.behandling.DekningsgradTjeneste;
import no.nav.foreldrepenger.behandling.Skjæringstidspunkt;
import no.nav.foreldrepenger.behandling.revurdering.ytelse.fp.BeregningUttakTjeneste;
import no.nav.foreldrepenger.domene.mappers.til_kalkulator.AktivitetGraderingTjeneste;
import no.nav.foreldrepenger.behandlingskontroll.FagsakYtelseTypeRef;
import no.nav.foreldrepenger.behandlingslager.behandling.repository.BehandlingRepositoryProvider;
import no.nav.foreldrepenger.behandlingslager.fagsak.FagsakYtelseType;
import no.nav.foreldrepenger.domene.arbeidsforhold.InntektArbeidYtelseTjeneste;
import no.nav.foreldrepenger.domene.arbeidsforhold.InntektsmeldingTjeneste;
import no.nav.foreldrepenger.domene.entiteter.BeregningsgrunnlagEntitet;
import no.nav.foreldrepenger.domene.entiteter.BeregningsgrunnlagGrunnlagEntitet;
Expand All @@ -43,7 +42,7 @@ public class BeregningsgrunnlagGUIInputTjeneste extends BeregningsgrunnlagGUIInp
private DekningsgradTjeneste dekningsgradTjeneste;
private BesteberegningFødendeKvinneTjeneste besteberegningFødendeKvinneTjeneste;
private HentOgLagreBeregningsgrunnlagTjeneste hentOgLagreBeregningsgrunnlagTjeneste;
private BeregningUttakTjeneste beregningUttakTjeneste;
private AktivitetGraderingTjeneste beregningUttakTjeneste;

protected BeregningsgrunnlagGUIInputTjeneste() {
// CDI proxy
Expand All @@ -52,7 +51,7 @@ protected BeregningsgrunnlagGUIInputTjeneste() {
@Inject
public BeregningsgrunnlagGUIInputTjeneste(BehandlingRepositoryProvider behandlingRepositoryProvider,
SkjæringstidspunktTjeneste skjæringstidspunktTjeneste,
BeregningUttakTjeneste beregningUttakTjeneste,
AktivitetGraderingTjeneste beregningUttakTjeneste,
BesteberegningFødendeKvinneTjeneste besteberegningFødendeKvinneTjeneste,
InntektsmeldingTjeneste inntektsmeldingTjeneste,
HentOgLagreBeregningsgrunnlagTjeneste hentOgLagreBeregningsgrunnlagTjeneste,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import no.nav.foreldrepenger.behandling.BehandlingReferanse;
import no.nav.foreldrepenger.behandling.DekningsgradTjeneste;
import no.nav.foreldrepenger.behandling.Skjæringstidspunkt;
import no.nav.foreldrepenger.behandling.revurdering.ytelse.fp.BeregningUttakTjeneste;
import no.nav.foreldrepenger.domene.mappers.til_kalkulator.AktivitetGraderingTjeneste;
import no.nav.foreldrepenger.behandlingskontroll.FagsakYtelseTypeRef;
import no.nav.foreldrepenger.behandlingslager.behandling.repository.BehandlingRepository;
import no.nav.foreldrepenger.behandlingslager.fagsak.FagsakYtelseType;
Expand All @@ -29,7 +29,7 @@ public class BeregningsgrunnlagInputTjeneste extends BeregningsgrunnlagInputFell

private DekningsgradTjeneste dekningsgradTjeneste;
private BesteberegningFødendeKvinneTjeneste besteberegningFødendeKvinneTjeneste;
private BeregningUttakTjeneste beregningUttakTjeneste;
private AktivitetGraderingTjeneste beregningUttakTjeneste;

protected BeregningsgrunnlagInputTjeneste() {
// CDI proxy
Expand All @@ -38,7 +38,7 @@ protected BeregningsgrunnlagInputTjeneste() {
@Inject
public BeregningsgrunnlagInputTjeneste(InntektArbeidYtelseTjeneste iayTjeneste,
SkjæringstidspunktTjeneste skjæringstidspunktTjeneste,
BeregningUttakTjeneste beregningUttakTjeneste,
AktivitetGraderingTjeneste beregningUttakTjeneste,
OpptjeningForBeregningTjeneste opptjeningForBeregningTjeneste,
BesteberegningFødendeKvinneTjeneste besteberegningFødendeKvinneTjeneste,
InntektsmeldingTjeneste inntektsmeldingTjeneste,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

import no.nav.foreldrepenger.behandling.BehandlingReferanse;
import no.nav.foreldrepenger.behandling.Skjæringstidspunkt;
import no.nav.foreldrepenger.behandling.revurdering.ytelse.fp.BeregningUttakTjeneste;
import no.nav.foreldrepenger.behandling.revurdering.ytelse.fp.GraderingUtenBeregningsgrunnlagTjeneste;
import no.nav.foreldrepenger.behandlingslager.behandling.Behandling;
import no.nav.foreldrepenger.behandlingslager.behandling.BehandlingÅrsak;
Expand All @@ -28,6 +27,7 @@
import no.nav.foreldrepenger.domene.modell.Beregningsgrunnlag;
import no.nav.foreldrepenger.domene.modell.BeregningsgrunnlagGrunnlag;
import no.nav.foreldrepenger.domene.modell.BeregningsgrunnlagPrStatusOgAndel;
import no.nav.foreldrepenger.domene.prosess.BeregningGraderingTjeneste;
import no.nav.foreldrepenger.domene.prosess.BeregningTjeneste;
import no.nav.foreldrepenger.domene.uttak.input.BeregningsgrunnlagStatus;
import no.nav.foreldrepenger.domene.uttak.input.UttakInput;
Expand All @@ -43,15 +43,15 @@ public class UttakInputTjeneste {
private BehandlingRepository behandlingRepository;
private BeregningTjeneste beregningTjeneste;
private SøknadRepository søknadRepository;
private BeregningUttakTjeneste beregningUttakTjeneste;
private BeregningGraderingTjeneste beregningGraderingTjeneste;
private no.nav.foreldrepenger.behandling.revurdering.ytelse.fp.UttakGrunnlagTjeneste fpUttakGrunnlagTjeneste;
private no.nav.foreldrepenger.behandling.revurdering.ytelse.svp.UttakGrunnlagTjeneste svpUttakGrunnlagTjeneste;

@Inject
public UttakInputTjeneste(BehandlingRepositoryProvider repositoryProvider, InntektArbeidYtelseTjeneste iayTjeneste,
SkjæringstidspunktTjeneste skjæringstidspunktTjeneste,
MedlemTjeneste medlemTjeneste, BeregningTjeneste beregningTjeneste,
BeregningUttakTjeneste beregningUttakTjeneste,
BeregningGraderingTjeneste beregningGraderingTjeneste,
no.nav.foreldrepenger.behandling.revurdering.ytelse.fp.UttakGrunnlagTjeneste fpUttakGrunnlagTjeneste,
no.nav.foreldrepenger.behandling.revurdering.ytelse.svp.UttakGrunnlagTjeneste svpUttakGrunnlagTjeneste) {
this.iayTjeneste = Objects.requireNonNull(iayTjeneste, "iayTjeneste");
Expand All @@ -60,7 +60,7 @@ public UttakInputTjeneste(BehandlingRepositoryProvider repositoryProvider, Innte
this.søknadRepository = repositoryProvider.getSøknadRepository();
this.behandlingRepository = repositoryProvider.getBehandlingRepository();
this.beregningTjeneste = beregningTjeneste;
this.beregningUttakTjeneste = beregningUttakTjeneste;
this.beregningGraderingTjeneste = beregningGraderingTjeneste;
this.fpUttakGrunnlagTjeneste = fpUttakGrunnlagTjeneste;
this.svpUttakGrunnlagTjeneste = svpUttakGrunnlagTjeneste;
}
Expand Down Expand Up @@ -113,7 +113,7 @@ public UttakInput lagInput(Behandling behandling, InntektArbeidYtelseGrunnlag ia
}

private boolean finnesAndelerMedGraderingUtenBeregningsgrunnlag(BehandlingReferanse ref, Beregningsgrunnlag beregningsgrunnlag) {
var aktivitetGradering = beregningUttakTjeneste.finnPerioderMedGradering(ref);
var aktivitetGradering = beregningGraderingTjeneste.finnPerioderMedGradering(ref);
var andelerMedGraderingUtenBG = GraderingUtenBeregningsgrunnlagTjeneste.finnesAndelerMedGraderingUtenBG(beregningsgrunnlag, aktivitetGradering);
return !andelerMedGraderingUtenBG.isEmpty();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.util.Objects;
import java.util.Optional;

import no.nav.foreldrepenger.domene.prosess.PeriodeMedGradering;
import no.nav.foreldrepenger.domene.modell.BGAndelArbeidsforhold;
import no.nav.foreldrepenger.domene.modell.Beregningsgrunnlag;
import no.nav.foreldrepenger.domene.modell.BeregningsgrunnlagPeriode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import no.nav.foreldrepenger.behandlingslager.virksomhet.Arbeidsgiver;

import no.nav.foreldrepenger.domene.prosess.PeriodeMedGradering;
import no.nav.foreldrepenger.domene.modell.BGAndelArbeidsforhold;
import no.nav.foreldrepenger.domene.modell.Beregningsgrunnlag;

Expand Down
4 changes: 4 additions & 0 deletions domenetjenester/beregningsgrunnlag/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@
<artifactId>behandlingslager-testutilities</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>no.nav.foreldrepenger</groupId>
<artifactId>uttak</artifactId>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -1,42 +1,95 @@
package no.nav.foreldrepenger.domene.mappers.input;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import no.nav.folketrygdloven.kalkulus.beregning.v1.AktivitetGraderingDto;
import no.nav.folketrygdloven.kalkulus.beregning.v1.AndelGraderingDto;
import no.nav.folketrygdloven.kalkulus.beregning.v1.ForeldrepengerGrunnlag;
import no.nav.folketrygdloven.kalkulus.beregning.v1.GraderingDto;
import no.nav.folketrygdloven.kalkulus.beregning.v1.YtelsespesifiktGrunnlagDto;
import no.nav.folketrygdloven.kalkulus.felles.v1.Aktør;
import no.nav.folketrygdloven.kalkulus.felles.v1.AktørIdPersonident;
import no.nav.folketrygdloven.kalkulus.felles.v1.Organisasjon;
import no.nav.folketrygdloven.kalkulus.felles.v1.Periode;
import no.nav.foreldrepenger.behandling.BehandlingReferanse;
import no.nav.foreldrepenger.behandling.DekningsgradTjeneste;
import no.nav.foreldrepenger.behandling.Skjæringstidspunkt;
import no.nav.foreldrepenger.behandlingskontroll.FagsakYtelseTypeRef;
import no.nav.foreldrepenger.behandlingslager.fagsak.FagsakYtelseType;
import no.nav.foreldrepenger.behandlingslager.virksomhet.Arbeidsgiver;
import no.nav.foreldrepenger.domene.fp.BesteberegningFødendeKvinneTjeneste;
import no.nav.foreldrepenger.domene.mappers.til_kalkulator.KodeverkTilKalkulusMapper;
import no.nav.foreldrepenger.domene.modell.kodeverk.AktivitetStatus;
import no.nav.foreldrepenger.domene.prosess.BeregningGraderingTjeneste;
import no.nav.foreldrepenger.domene.prosess.PeriodeMedGradering;

@ApplicationScoped
@FagsakYtelseTypeRef(FagsakYtelseType.FORELDREPENGER)
public class MapKalkulusYtelsegrunnlagFP implements MapKalkulusYtelsegrunnlag {
private DekningsgradTjeneste dekningsgradTjeneste;
private BesteberegningFødendeKvinneTjeneste besteberegningFødendeKvinneTjeneste;
// private BeregningUttakTjeneste beregningUttakTjeneste;
private BeregningGraderingTjeneste beregningGraderingTjeneste;

MapKalkulusYtelsegrunnlagFP() {
// CDI
}

@Inject
public MapKalkulusYtelsegrunnlagFP(DekningsgradTjeneste dekningsgradTjeneste,
BesteberegningFødendeKvinneTjeneste besteberegningFødendeKvinneTjeneste) {
BesteberegningFødendeKvinneTjeneste besteberegningFødendeKvinneTjeneste,
BeregningGraderingTjeneste beregningGraderingTjeneste) {
this.dekningsgradTjeneste = dekningsgradTjeneste;
this.besteberegningFødendeKvinneTjeneste = besteberegningFødendeKvinneTjeneste;
this.beregningGraderingTjeneste = beregningGraderingTjeneste;
}

@Override
public YtelsespesifiktGrunnlagDto mapYtelsegrunnlag(BehandlingReferanse referanse, Skjæringstidspunkt stp) {
var aktivitetGraderinger = finnAktivitetGraderingerKalkulus(referanse);
var dekningsgrad = BigDecimal.valueOf(dekningsgradTjeneste.finnGjeldendeDekningsgrad(referanse).getVerdi());
var kanBesteberegnes = besteberegningFødendeKvinneTjeneste.brukerOmfattesAvBesteBeregningsRegelForFødendeKvinne(referanse, stp);
return new ForeldrepengerGrunnlag(dekningsgrad, kanBesteberegnes, null, Collections.emptyList());
return new ForeldrepengerGrunnlag(dekningsgrad, kanBesteberegnes, aktivitetGraderinger, Collections.emptyList());
}

public AktivitetGraderingDto finnAktivitetGraderingerKalkulus(BehandlingReferanse ref) {
var periodeMedGradering = beregningGraderingTjeneste.finnPerioderMedGradering(ref);
return new AktivitetGraderingDto(mapTilDto(periodeMedGradering));
}

private List<AndelGraderingDto> mapTilDto(List<PeriodeMedGradering> perioderMedGradering) {
Map<AktivitetNøkkel, List<GraderingDto>> map = new HashMap<>();
perioderMedGradering.forEach(periodeMedGradering -> {
var nøkkel = new AktivitetNøkkel(periodeMedGradering.aktivitetStatus(), periodeMedGradering.arbeidsgiver());
var graderingDto = new GraderingDto(new Periode(periodeMedGradering.fom(), periodeMedGradering.tom()),
new no.nav.folketrygdloven.kalkulus.felles.v1.Aktivitetsgrad(periodeMedGradering.arbeidsprosent()));
if (map.containsKey(nøkkel)) {
map.get(nøkkel).add(graderingDto);
} else {
map.put(nøkkel, new ArrayList<>(List.of(graderingDto)));
}
});
return map.entrySet().stream().map(entry -> {
var aktivitetStatus = KodeverkTilKalkulusMapper.mapAktivitetstatus(entry.getKey().aktivitetStatus());
var arbeidsgiver = mapTilAktør(entry.getKey().arbeidsgiver());
return new AndelGraderingDto(aktivitetStatus, arbeidsgiver, null, entry.getValue());
}).toList();
}

private static Aktør mapTilAktør(Arbeidsgiver arbeidsgiver) {
if (arbeidsgiver == null) {
return null;
}
return arbeidsgiver.getErVirksomhet() ? new Organisasjon(arbeidsgiver.getOrgnr()) : new AktørIdPersonident(arbeidsgiver.getAktørId().getId());
}

record AktivitetNøkkel(AktivitetStatus aktivitetStatus, Arbeidsgiver arbeidsgiver) {}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package no.nav.foreldrepenger.domene.mappers.til_kalkulator;

import static no.nav.foreldrepenger.domene.mappers.til_kalkulator.IAYMapperTilKalkulus.mapArbeidsgiver;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

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

import no.nav.folketrygdloven.kalkulator.modell.gradering.AktivitetGradering;
import no.nav.folketrygdloven.kalkulator.modell.gradering.AndelGradering;
import no.nav.folketrygdloven.kalkulator.modell.typer.Aktivitetsgrad;
import no.nav.foreldrepenger.behandling.BehandlingReferanse;
import no.nav.foreldrepenger.domene.prosess.BeregningGraderingTjeneste;
import no.nav.foreldrepenger.domene.prosess.PeriodeMedGradering;
import no.nav.foreldrepenger.domene.modell.kodeverk.AktivitetStatus;

/**
* Tjeneste som brukes av beregning for å populere beregningsgrunnlagInput med uttaksdata
*/
@ApplicationScoped
public class AktivitetGraderingTjeneste {
private BeregningGraderingTjeneste beregningGraderingTjeneste;

AktivitetGraderingTjeneste() {
// CDI
}

@Inject
public AktivitetGraderingTjeneste(BeregningGraderingTjeneste beregningGraderingTjeneste) {
this.beregningGraderingTjeneste = beregningGraderingTjeneste;
}


public AktivitetGradering finnAktivitetGraderingerKalkulus(BehandlingReferanse ref) {
return new AktivitetGradering(utled(ref));
}

private List<AndelGradering> utled(BehandlingReferanse ref) {
var perioderMedGradering = beregningGraderingTjeneste.finnPerioderMedGradering(ref);
return map(perioderMedGradering);
}

private List<AndelGradering> map(List<PeriodeMedGradering> perioderMedGradering) {
Map<AndelGradering, AndelGradering.Builder> map = new HashMap<>();
perioderMedGradering.forEach(periodeMedGradering -> {
var aktivitetStatus = periodeMedGradering.aktivitetStatus();
var nyBuilder = AndelGradering.builder()
.medStatus(no.nav.folketrygdloven.kalkulus.kodeverk.AktivitetStatus.fraKode(aktivitetStatus.getKode()));
if (AktivitetStatus.ARBEIDSTAKER.equals(aktivitetStatus)) {
var arbeidsgiver = Objects.requireNonNull(periodeMedGradering.arbeidsgiver(), "arbeidsgiver");
nyBuilder.medArbeidsgiver(mapArbeidsgiver(arbeidsgiver));
}
var andelGradering = nyBuilder.build();

var builder = map.get(andelGradering);
if (builder == null) {
builder = nyBuilder;
map.put(andelGradering, nyBuilder);
}

builder.leggTilGradering(mapGradering(periodeMedGradering));
});
return new ArrayList<>(map.keySet());
}

private AndelGradering.Gradering mapGradering(PeriodeMedGradering periodeMedGradering) {
return new AndelGradering.Gradering(periodeMedGradering.fom(), periodeMedGradering.tom(), Aktivitetsgrad.fra(periodeMedGradering.arbeidsprosent()));
}
}
Loading

0 comments on commit aac4cab

Please sign in to comment.