-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
FIX: Flytter kode som sjekker gradering i beregning inn i beregningsp… (
#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
Showing
12 changed files
with
278 additions
and
92 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
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
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
59 changes: 56 additions & 3 deletions
59
...src/main/java/no/nav/foreldrepenger/domene/mappers/input/MapKalkulusYtelsegrunnlagFP.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 |
---|---|---|
@@ -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) {} | ||
|
||
} |
74 changes: 74 additions & 0 deletions
74
.../java/no/nav/foreldrepenger/domene/mappers/til_kalkulator/AktivitetGraderingTjeneste.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,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())); | ||
} | ||
} |
Oops, something went wrong.