Skip to content

Commit

Permalink
SVP: støtt avtalte ferieperioder fra søknad TFP-5853 (#6743)
Browse files Browse the repository at this point in the history
  • Loading branch information
dijjal authored Oct 22, 2024
1 parent 7d44071 commit 2cfcc0b
Show file tree
Hide file tree
Showing 14 changed files with 208 additions and 65 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import jakarta.persistence.Column;
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
Expand All @@ -29,6 +31,10 @@ public class SvpAvklartOpphold extends BaseCreateableEntitet {
@Column(name = "svp_opphold_arsak", nullable = false)
private SvpOppholdÅrsak svpOppholdÅrsak;

@Column(name = "svp_opphold_kilde")
@Enumerated(EnumType.STRING)
private SvpOppholdKilde svpOppholdKilde;

public SvpAvklartOpphold() {
//for hibernate
}
Expand All @@ -49,19 +55,28 @@ public LocalDate getTom() {
return svpOppholdÅrsak;
}

public SvpOppholdKilde getKilde() {
return svpOppholdKilde;
}

public void setKilde(SvpOppholdKilde svpOppholdKilde) {
this.svpOppholdKilde = svpOppholdKilde;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
var that = (SvpAvklartOpphold) o;
return Objects.equals(oppholdPeriode.getFomDato(), that.oppholdPeriode.getFomDato()) &&
Objects.equals(oppholdPeriode.getTomDato(), that.oppholdPeriode.getTomDato()) &&
Objects.equals(svpOppholdÅrsak, that.svpOppholdÅrsak);
Objects.equals(svpOppholdÅrsak, that.svpOppholdÅrsak) &&
Objects.equals(svpOppholdKilde, that.svpOppholdKilde);
}

@Override
public int hashCode() {
return Objects.hash(oppholdPeriode.getFomDato(), oppholdPeriode.getTomDato(), svpOppholdÅrsak);
return Objects.hash(oppholdPeriode.getFomDato(), oppholdPeriode.getTomDato(), svpOppholdÅrsak, svpOppholdKilde);
}

@Override
Expand All @@ -71,6 +86,7 @@ public String toString() {
+ "fom=" + oppholdPeriode.getFomDato() + ", "
+ "tom=" + oppholdPeriode.getTomDato() + ", "
+ "svpOppholdÅrsak=" + svpOppholdÅrsak + ", "
+ "svpOppholdKilde=" + svpOppholdKilde
+ ">";
}

Expand All @@ -92,7 +108,8 @@ public static Builder nytt() {
public static Builder fraEksisterende(SvpAvklartOpphold eksisterende) {
return new Builder()
.medOppholdPeriode(eksisterende.oppholdPeriode.getFomDato(), eksisterende.oppholdPeriode.getTomDato())
.medOppholdÅrsak(eksisterende.svpOppholdÅrsak);
.medOppholdÅrsak(eksisterende.svpOppholdÅrsak)
.medKilde(eksisterende.svpOppholdKilde);
}

public SvpAvklartOpphold.Builder medOppholdPeriode(LocalDate fom, LocalDate tom) {
Expand All @@ -105,9 +122,16 @@ public SvpAvklartOpphold.Builder medOppholdPeriode(LocalDate fom, LocalDate tom)
return this;
}

public SvpAvklartOpphold.Builder medKilde(SvpOppholdKilde kilde) {
kladd.svpOppholdKilde = Objects.requireNonNull(kilde);
return this;
}

public SvpAvklartOpphold build() {
Objects.requireNonNull(this.kladd.svpOppholdÅrsak, "Utviklerfeil:oppholdsårsak skal være satt");
Objects.requireNonNull(this.kladd.svpOppholdKilde, "Utviklerfeil:oppholdKilde skal være satt");
return kladd;
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package no.nav.foreldrepenger.behandlingslager.behandling.tilrettelegging;

public enum SvpOppholdKilde {
SØKNAD,
REGISTRERT_AV_SAKSBEHANDLER
}
Original file line number Diff line number Diff line change
Expand Up @@ -214,8 +214,8 @@ public static Builder fraEksisterende(SvpTilretteleggingEntitet tilrettelegging)
.medOpplysningerOmTilretteleggingstiltak(tilrettelegging.getOpplysningerOmTilretteleggingstiltak().orElse(null))
.medSkalBrukes(tilrettelegging.getSkalBrukes())
.medMottattTidspunkt(tilrettelegging.getMottattTidspunkt())
.medTilretteleggingFraDatoer(tilrettelegging.getTilretteleggingFOMListe())
.medAvklarteOpphold(tilrettelegging.getAvklarteOpphold());
.medAvklarteOpphold(tilrettelegging.getAvklarteOpphold())
.medTilretteleggingFraDatoer(tilrettelegging.getTilretteleggingFOMListe());
}
public Builder(SvpTilretteleggingEntitet tilretteleggingEntitet) {
mal = new SvpTilretteleggingEntitet(tilretteleggingEntitet, null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ private SvpTilretteleggingEntitet opprettTilrettelegging(LocalDate fom) {
.medAvklartOpphold(SvpAvklartOpphold.Builder.nytt()
.medOppholdPeriode(fom, fom.plusWeeks(1))
.medOppholdÅrsak(SvpOppholdÅrsak.SYKEPENGER)
.medKilde(SvpOppholdKilde.REGISTRERT_AV_SAKSBEHANDLER)
.build())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;

import no.nav.foreldrepenger.behandlingslager.behandling.tilrettelegging.SvpAvklartOpphold;
import no.nav.foreldrepenger.behandlingslager.behandling.tilrettelegging.SvpOppholdKilde;
import no.nav.foreldrepenger.behandlingslager.behandling.tilrettelegging.SvpOppholdÅrsak;

import no.nav.vedtak.felles.xml.soeknad.svangerskapspenger.v1.Tilrettelegging;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -323,7 +329,6 @@ private void byggFamilieHendelseForSvangerskap(Svangerskapspenger omYtelse,
if (fødselsdato != null) {
hendelseBuilder.erFødsel().medFødselsDato(fødselsdato).medAntallBarn(1);
}

}

private RelasjonsRolleType utledRolle(FagsakYtelseType ytelseType, Bruker bruker, Long behandlingId, AktørId aktørId) {
Expand Down Expand Up @@ -392,7 +397,6 @@ private void byggYtelsesSpesifikkeFelter(SøknadWrapper skjemaWrapper,

private void oversettOgLagreTilretteleggingOgVurderEksisterende(Svangerskapspenger svangerskapspenger,
Behandling behandling, LocalDate søknadMottattDato) {

var brukMottattTidspunkt = Optional.ofNullable(søknadMottattDato)
.filter(d -> !d.equals(behandling.getOpprettetTidspunkt().toLocalDate()))
.map(LocalDate::atStartOfDay)
Expand All @@ -403,28 +407,23 @@ private void oversettOgLagreTilretteleggingOgVurderEksisterende(Svangerskapspeng
var tilretteleggingListe = svangerskapspenger.getTilretteleggingListe().getTilrettelegging();

for (var tilrettelegging : tilretteleggingListe) {

var builder = new SvpTilretteleggingEntitet.Builder();
builder.medBehovForTilretteleggingFom(tilrettelegging.getBehovForTilretteleggingFom())
.medKopiertFraTidligereBehandling(false)
.medMottattTidspunkt(brukMottattTidspunkt);
.medMottattTidspunkt(brukMottattTidspunkt)
.medAvklarteOpphold(mapAvtaltFerie(tilrettelegging, svangerskapspenger));

if (tilrettelegging.getHelTilrettelegging() != null) {
tilrettelegging.getHelTilrettelegging()
.forEach(helTilrettelegging -> builder.medHelTilrettelegging(
helTilrettelegging.getTilrettelagtArbeidFom(), brukMottattTidspunkt.toLocalDate(), SvpTilretteleggingFomKilde.SØKNAD));
}
if (tilrettelegging.getDelvisTilrettelegging() != null) {
tilrettelegging.getDelvisTilrettelegging()
.forEach(delvisTilrettelegging -> builder.medDelvisTilrettelegging(
delvisTilrettelegging.getTilrettelagtArbeidFom(), delvisTilrettelegging.getStillingsprosent(), brukMottattTidspunkt.toLocalDate(),
SvpTilretteleggingFomKilde.SØKNAD));
}
if (tilrettelegging.getIngenTilrettelegging() != null) {
tilrettelegging.getIngenTilrettelegging()
.forEach(ingenTilrettelegging -> builder.medIngenTilrettelegging(
ingenTilrettelegging.getSlutteArbeidFom(), brukMottattTidspunkt.toLocalDate(), SvpTilretteleggingFomKilde.SØKNAD));
}
tilrettelegging.getHelTilrettelegging()
.forEach(helTilrettelegging -> builder.medHelTilrettelegging(helTilrettelegging.getTilrettelagtArbeidFom(),
brukMottattTidspunkt.toLocalDate(), SvpTilretteleggingFomKilde.SØKNAD));

tilrettelegging.getDelvisTilrettelegging()
.forEach(delvisTilrettelegging -> builder.medDelvisTilrettelegging(delvisTilrettelegging.getTilrettelagtArbeidFom(),
delvisTilrettelegging.getStillingsprosent(), brukMottattTidspunkt.toLocalDate(), SvpTilretteleggingFomKilde.SØKNAD));

tilrettelegging.getIngenTilrettelegging()
.forEach(ingenTilrettelegging -> builder.medIngenTilrettelegging(ingenTilrettelegging.getSlutteArbeidFom(),
brukMottattTidspunkt.toLocalDate(), SvpTilretteleggingFomKilde.SØKNAD));

oversettArbeidsforhold(builder, tilrettelegging.getArbeidsforhold());
nyeTilrettelegginger.add(builder.build());
Expand Down Expand Up @@ -466,7 +465,8 @@ private void oversettOgLagreTilretteleggingOgVurderEksisterende(Svangerskapspeng

for (var eksTilrettelegging : fletteGamleMap.entrySet()) {
var nyTilrettelegging = fletteNyeMap.get(eksTilrettelegging.getKey());
eksTilrettelegging.getValue().forEach( eksTlr -> nyeOgEksisterendeTilrettelegginger.add(oppdaterEksisterendeTlrMedNyeFOMs(nyTilrettelegging, eksTlr)));
eksTilrettelegging.getValue().forEach(eksTlr -> nyeOgEksisterendeTilrettelegginger.add(
oppdaterEksisterendeTlrMedNyeFomsOgOpphold(nyTilrettelegging, eksTlr)));
}
} else {
//ingen eksisterende
Expand All @@ -481,11 +481,10 @@ private void oversettOgLagreTilretteleggingOgVurderEksisterende(Svangerskapspeng
return tilrettelegging.getArbeidsgiver().map(Arbeidsgiver::getIdentifikator).orElseGet(() -> tilrettelegging.getArbeidType().getKode());
}

private SvpTilretteleggingEntitet oppdaterEksisterendeTlrMedNyeFOMs(SvpTilretteleggingEntitet nyTlR,
SvpTilretteleggingEntitet eksisterendeTlr) {
List<TilretteleggingFOM> nyFomListe = new ArrayList<>(nyTlR.getTilretteleggingFOMListe());
private SvpTilretteleggingEntitet oppdaterEksisterendeTlrMedNyeFomsOgOpphold(SvpTilretteleggingEntitet nyTlR,
SvpTilretteleggingEntitet eksisterendeTlr) {
var nyFomListe = new ArrayList<>(nyTlR.getTilretteleggingFOMListe());
var tidligsteNyFom = nyFomListe.stream().map(TilretteleggingFOM::getFomDato).min(LocalDate::compareTo).orElse(LocalDate.EPOCH);

var eksisterendeFOMSomSkalKopieres = eksisterendeTlr.getTilretteleggingFOMListe().stream().filter(f -> f.getFomDato().isBefore(tidligsteNyFom)).toList();

eksisterendeFOMSomSkalKopieres.forEach(eksFom ->
Expand All @@ -498,17 +497,30 @@ private SvpTilretteleggingEntitet oppdaterEksisterendeTlrMedNyeFOMs(SvpTilrettel

nyFomListe.sort(Comparator.comparing(TilretteleggingFOM::getFomDato));

return SvpTilretteleggingEntitet.Builder.fraEksisterende(eksisterendeTlr)
var justerteOppholdsperioder = eksisterendeTlr.getAvklarteOpphold().stream()
.filter(opphold -> opphold.getFom().isBefore(tidligsteNyFom))
.map(opphold -> {
if (!opphold.getTom().isBefore(tidligsteNyFom)) {
return SvpAvklartOpphold.Builder.nytt()
.medKilde(opphold.getKilde())
.medOppholdÅrsak(opphold.getOppholdÅrsak())
.medOppholdPeriode(opphold.getFom(), tidligsteNyFom.minusDays(1))
.build();
}
return opphold;
}).collect(Collectors.toList());
var justertTilrettelegging = SvpTilretteleggingEntitet.Builder.fraEksisterende(eksisterendeTlr)
.medBehovForTilretteleggingFom(nyFomListe.stream().map(TilretteleggingFOM::getFomDato).min(LocalDate::compareTo).orElse(null))
.medTilretteleggingFraDatoer(nyFomListe).build();
.medTilretteleggingFraDatoer(nyFomListe)
.medAvklarteOpphold(justerteOppholdsperioder);
nyTlR.getAvklarteOpphold().forEach(justertTilrettelegging::medAvklartOpphold);
return justertTilrettelegging.build();
}

private void oversettArbeidsforhold(SvpTilretteleggingEntitet.Builder builder, Arbeidsforhold arbeidsforhold) {

if (arbeidsforhold instanceof no.nav.vedtak.felles.xml.soeknad.svangerskapspenger.v1.Arbeidsgiver arbeidsgiverType) {
builder.medArbeidType(ArbeidType.ORDINÆRT_ARBEIDSFORHOLD);
Arbeidsgiver arbeidsgiver;

if (arbeidsforhold instanceof no.nav.vedtak.felles.xml.soeknad.svangerskapspenger.v1.Virksomhet virksomhetType) {
var orgnr = virksomhetType.getIdentifikator();
virksomhetTjeneste.hentOrganisasjon(orgnr);
Expand Down Expand Up @@ -537,6 +549,24 @@ private void oversettArbeidsforhold(SvpTilretteleggingEntitet.Builder builder, A
}
}

private static List<SvpAvklartOpphold> mapAvtaltFerie(Tilrettelegging tilrettelegging,
Svangerskapspenger svp) {
if (tilrettelegging.getArbeidsforhold() instanceof no.nav.vedtak.felles.xml.soeknad.svangerskapspenger.v1.Arbeidsgiver arbeidsgiver) {
var identifikator = arbeidsgiver.getIdentifikator();
var avtalteFerier = svp.getAvtaltFerieListe().getAvtaltFerie();
return avtalteFerier.stream()
.filter(af -> Objects.equals(identifikator, af.getArbeidsgiver().getIdentifikator()))
.map(ao -> SvpAvklartOpphold.Builder.nytt()
.medKilde(SvpOppholdKilde.SØKNAD)
.medOppholdÅrsak(SvpOppholdÅrsak.FERIE)
.medOppholdPeriode(ao.getAvtaltFerieFom(), ao.getAvtaltFerieTom())
.build())
.toList();
} else {
return List.of();
}
}

private void byggOpptjeningsspesifikkeFelter(SøknadWrapper skjemaWrapper, Behandling behandling) {
var behandlingId = behandling.getId();
Opptjening opptjeningFraSøknad = null;
Expand Down Expand Up @@ -572,7 +602,6 @@ private void byggOpptjeningsspesifikkeFelter(SøknadWrapper skjemaWrapper, Behan
}
}


private Optional<OppgittRettighetEntitet> oversettRettighet(Foreldrepenger omYtelse) {
return Optional.ofNullable(omYtelse.getRettigheter())
.map(rettigheter -> new OppgittRettighetEntitet(rettigheter.isHarAnnenForelderRett(), rettigheter.isHarAleneomsorgForBarnet(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import java.util.List;
import java.util.UUID;

import no.nav.foreldrepenger.behandlingslager.behandling.tilrettelegging.SvpOppholdKilde;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
Expand Down Expand Up @@ -202,7 +204,11 @@ private SvpTilretteleggingEntitet lagTilrettelegging(List<TilretteleggingFOM> fr
}

private SvpAvklartOpphold lagOppholdSaksbehandler(LocalDate fom, LocalDate tom, SvpOppholdÅrsak årsak) {
return SvpAvklartOpphold.Builder.nytt().medOppholdPeriode(fom, tom).medOppholdÅrsak( årsak).build();
return SvpAvklartOpphold.Builder.nytt()
.medOppholdÅrsak(årsak)
.medOppholdPeriode(fom, tom)
.medKilde(SvpOppholdKilde.REGISTRERT_AV_SAKSBEHANDLER)
.build();
}

private Inntektsmelding lagInntektsmelding(UtsettelsePeriode utsettelsePeriode, UtsettelsePeriode utsettelsePeriode2) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ALTER TABLE SVP_AVKLART_OPPHOLD
ADD SVP_OPPHOLD_KILDE VARCHAR2(50 char);

COMMENT ON COLUMN SVP_AVKLART_OPPHOLD.SVP_OPPHOLD_KILDE IS 'Kilde til registreringen';
Loading

0 comments on commit 2cfcc0b

Please sign in to comment.