Skip to content

Commit c984a24

Browse files
TSFF-1158: Setter behandling på vent og håndterer bekreftelse av oppgave vedrørende periodeendring (#209)
* TSFF-1158: Setter behandling på vent ved endret startdato eller sluttdato # Conflicts: # pom.xml * TSFF-1158: Håntering i fordel * TSFF-1158: Fikse revision * TSFF-1158: Legger til validator og brekodeinformasjonutleder * TSFF-1158: Konfigurerer kortere ventefrist i dev * TSFF-1158: Legger til test * TSFF-1158: Endrer default ventefrist til 14 dager * TSFF-1158: Søknadsperioder er lik perioder i programmet * TSFF-1158: Utvider fagsakperiode ved utvidelse av ungdomsprogrammet * TSFF-1158: Fikse test for fremoverhopp * Fjerner tester for frem og tilbakehopp * Legger tilbake dummy startpunkt * Fjerner test som ikkje lenger er relevant * TSFF-1158: Endringer etter QA * TSFF-1158: Fiks kompileringsfeil * TSFF-1158: Rename * TSFF-1158: Bruke tidslinje i staden for liste med perioder * TSFF-1158: Fjerner imports * TSFF-1158: Fikser ventefrist * TSFF-1158: Nullsjekk brevkode * ung-sak.openapi.json updated by build pipeline skip-checks:true * TSFF-1158: Endrer brevkode --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 0343075 commit c984a24

File tree

59 files changed

+1157
-2027
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+1157
-2027
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package no.nav.ung.sak.behandlingslager.behandling.startdato;
2+
3+
import jakarta.persistence.*;
4+
import no.nav.ung.kodeverk.ungdomsytelse.periodeendring.UngdomsprogramPeriodeEndringTypeKodeverdiConverter;
5+
import no.nav.ung.kodeverk.ungdomsytelse.periodeendring.UngdomsprogramPeriodeEndringType;
6+
import no.nav.ung.sak.behandlingslager.BaseEntitet;
7+
import no.nav.ung.sak.typer.JournalpostId;
8+
import org.hibernate.annotations.Immutable;
9+
10+
import java.time.LocalDate;
11+
import java.util.Objects;
12+
13+
@Entity(name = "UngdomsytelseBekreftetPeriodeEndring")
14+
@Table(name = "UNG_BEKREFTET_PERIODE_ENDRING")
15+
@Immutable
16+
public class UngdomsprogramBekreftetPeriodeEndring extends BaseEntitet {
17+
18+
@Id
19+
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_UNG_BEKREFTET_PERIODE_ENDRING")
20+
private Long id;
21+
22+
@Convert(converter = UngdomsprogramPeriodeEndringTypeKodeverdiConverter.class)
23+
@Column(name = "endring_type", nullable = false)
24+
private UngdomsprogramPeriodeEndringType endringType;
25+
26+
@Column(name = "dato", nullable = false)
27+
private LocalDate dato;
28+
29+
@Embedded
30+
@AttributeOverrides(@AttributeOverride(name = "journalpostId", column = @Column(name = "journalpost_id")))
31+
private JournalpostId journalpostId;
32+
33+
@Version
34+
@Column(name = "versjon", nullable = false)
35+
private long versjon;
36+
37+
public UngdomsprogramBekreftetPeriodeEndring(LocalDate dato, JournalpostId journalpostId, UngdomsprogramPeriodeEndringType endringType) {
38+
this.dato = dato;
39+
this.journalpostId = journalpostId;
40+
this.endringType = endringType;
41+
}
42+
43+
public UngdomsprogramBekreftetPeriodeEndring() {
44+
// hibernate
45+
}
46+
47+
public LocalDate getDato() {
48+
return dato;
49+
}
50+
51+
public JournalpostId getJournalpostId() {
52+
return journalpostId;
53+
}
54+
55+
public UngdomsprogramPeriodeEndringType getEndringType() {
56+
return endringType;
57+
}
58+
59+
@Override
60+
public boolean equals(Object o) {
61+
if (this == o) return true;
62+
if (o == null || getClass() != o.getClass()) return false;
63+
UngdomsprogramBekreftetPeriodeEndring that = (UngdomsprogramBekreftetPeriodeEndring) o;
64+
return Objects.equals(journalpostId, that.journalpostId);
65+
}
66+
67+
@Override
68+
public int hashCode() {
69+
return Objects.hash(journalpostId);
70+
}
71+
72+
@Override
73+
public String toString() {
74+
return "UngdomsprogramBekreftetPeriodeEndring{" +
75+
"endringType=" + endringType +
76+
", dato=" + dato +
77+
", journalpostId=" + journalpostId +
78+
'}';
79+
}
80+
}

behandlingslager/domene/src/main/java/no/nav/ung/sak/behandlingslager/behandling/startdato/UngdomsytelseStartdatoGrunnlag.java

+24-9
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,13 @@
33
import java.util.Collection;
44
import java.util.HashSet;
55
import java.util.Objects;
6+
import java.util.Set;
67

8+
import jakarta.persistence.*;
9+
import no.nav.ung.sak.behandlingslager.diff.ChangeTracked;
10+
import org.hibernate.annotations.BatchSize;
711
import org.hibernate.annotations.Immutable;
812

9-
import jakarta.persistence.Column;
10-
import jakarta.persistence.Entity;
11-
import jakarta.persistence.GeneratedValue;
12-
import jakarta.persistence.GenerationType;
13-
import jakarta.persistence.Id;
14-
import jakarta.persistence.JoinColumn;
15-
import jakarta.persistence.ManyToOne;
16-
import jakarta.persistence.Table;
17-
import jakarta.persistence.Version;
1813
import no.nav.ung.sak.behandlingslager.BaseEntitet;
1914

2015
@Entity(name = "UngdomsytelseStartdatoGrunnlag")
@@ -44,6 +39,13 @@ public class UngdomsytelseStartdatoGrunnlag extends BaseEntitet {
4439
@JoinColumn(name = "oppgitte_startdatoer_id", nullable = false, updatable = false, unique = true)
4540
private UngdomsytelseStartdatoer oppgitteStartdatoer;
4641

42+
43+
@ChangeTracked
44+
@BatchSize(size = 20)
45+
@JoinColumn(name = "UNG_GR_STARTDATO_ID", nullable = false)
46+
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH})
47+
private Set<UngdomsprogramBekreftetPeriodeEndring> bekreftetPeriodeEndringer;
48+
4749
@Column(name = "aktiv", nullable = false)
4850
private boolean aktiv = true;
4951

@@ -76,6 +78,10 @@ public UngdomsytelseStartdatoer getRelevanteStartdatoer() {
7678
return relevanteStartdatoer;
7779
}
7880

81+
public Set<UngdomsprogramBekreftetPeriodeEndring> getBekreftetPeriodeEndringer() {
82+
return bekreftetPeriodeEndringer;
83+
}
84+
7985
public boolean isAktiv() {
8086
return aktiv;
8187
}
@@ -93,6 +99,15 @@ void leggTil(Collection<UngdomsytelseSøktStartdato> startdatoer) {
9399
this.oppgitteStartdatoer = new UngdomsytelseStartdatoer(perioder);
94100
}
95101

102+
void leggTil(UngdomsprogramBekreftetPeriodeEndring bekreftetPeriodeEndring) {
103+
if (id != null) {
104+
throw new IllegalStateException("[Utvikler feil] Kan ikke editere persistert grunnlag");
105+
}
106+
Set<UngdomsprogramBekreftetPeriodeEndring> perioder = this.bekreftetPeriodeEndringer != null ? new HashSet<>(this.bekreftetPeriodeEndringer) : new HashSet<>();
107+
perioder.add(bekreftetPeriodeEndring);
108+
this.bekreftetPeriodeEndringer = perioder;
109+
}
110+
96111
void setRelevanteStartdatoer(UngdomsytelseStartdatoer relevanteSøknader) {
97112
Objects.requireNonNull(relevanteSøknader);
98113
this.relevanteStartdatoer = relevanteSøknader;

behandlingslager/domene/src/main/java/no/nav/ung/sak/behandlingslager/behandling/startdato/UngdomsytelseStartdatoRepository.java

+9
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ public void lagre(Long behandlingId, List<UngdomsytelseSøktStartdato> søknadsp
3333
persister(eksisterendeGrunnlag, nyttGrunnlag);
3434
}
3535

36+
public void lagre(Long behandlingId, UngdomsprogramBekreftetPeriodeEndring bekreftetPeriodeEndring) {
37+
var eksisterendeGrunnlag = hentEksisterendeGrunnlag(behandlingId);
38+
var nyttGrunnlag = eksisterendeGrunnlag.map(it -> new UngdomsytelseStartdatoGrunnlag(behandlingId, it))
39+
.orElse(new UngdomsytelseStartdatoGrunnlag(behandlingId));
40+
nyttGrunnlag.leggTil(bekreftetPeriodeEndring);
41+
42+
persister(eksisterendeGrunnlag, nyttGrunnlag);
43+
}
44+
3645
public void lagreRelevanteSøknader(Long behandlingId, UngdomsytelseStartdatoer søknader) {
3746
var eksisterendeGrunnlag = hentEksisterendeGrunnlag(behandlingId);
3847
var nyttGrunnlag = eksisterendeGrunnlag.map(it -> new UngdomsytelseStartdatoGrunnlag(behandlingId, it))

behandlingslager/domene/src/main/java/no/nav/ung/sak/behandlingslager/kodeverk/FaktaOmBeregningTilfelleKodeverdiConverter.java

-20
This file was deleted.

behandlingslager/domene/src/main/resources/META-INF/pu-default.ungdomsytelsesøknadsperioder.orm.xml

+2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
<sequence-generator name="SEQ_UNG_GR_STARTDATO" allocation-size="50" sequence-name="SEQ_UNG_GR_STARTDATO" />
88
<sequence-generator name="SEQ_UNG_STARTDATOER" allocation-size="50" sequence-name="SEQ_UNG_STARTDATOER" />
99
<sequence-generator name="SEQ_UNG_SOEKT_STARTDATO" allocation-size="50" sequence-name="SEQ_UNG_SOEKT_STARTDATO" />
10+
<sequence-generator name="SEQ_UNG_BEKREFTET_PERIODE_ENDRING" allocation-size="50" sequence-name="SEQ_UNG_BEKREFTET_PERIODE_ENDRING" />
1011

1112
<entity class="no.nav.ung.sak.behandlingslager.behandling.startdato.UngdomsytelseStartdatoGrunnlag" />
1213
<entity class="no.nav.ung.sak.behandlingslager.behandling.startdato.UngdomsytelseStartdatoer" />
1314
<entity class="no.nav.ung.sak.behandlingslager.behandling.startdato.UngdomsytelseSøktStartdato" />
15+
<entity class="no.nav.ung.sak.behandlingslager.behandling.startdato.UngdomsprogramBekreftetPeriodeEndring" />
1416

1517
</entity-mappings>

behandlingsprosess/src/main/java/no/nav/ung/sak/domene/behandling/steg/initperioder/InitierPerioderSteg.java

+23-23
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,30 @@
11
package no.nav.ung.sak.domene.behandling.steg.initperioder;
22

3-
import static no.nav.ung.kodeverk.behandling.BehandlingStegType.INIT_PERIODER;
4-
import static no.nav.ung.kodeverk.behandling.FagsakYtelseType.UNGDOMSYTELSE;
5-
6-
import java.time.LocalDate;
7-
import java.util.List;
8-
import java.util.Set;
9-
import java.util.stream.Collectors;
10-
113
import jakarta.enterprise.context.ApplicationScoped;
124
import jakarta.inject.Inject;
135
import no.nav.ung.kodeverk.dokument.Brevkode;
14-
import no.nav.ung.sak.behandlingskontroll.BehandleStegResultat;
15-
import no.nav.ung.sak.behandlingskontroll.BehandlingSteg;
16-
import no.nav.ung.sak.behandlingskontroll.BehandlingStegRef;
17-
import no.nav.ung.sak.behandlingskontroll.BehandlingTypeRef;
18-
import no.nav.ung.sak.behandlingskontroll.BehandlingskontrollKontekst;
19-
import no.nav.ung.sak.behandlingskontroll.FagsakYtelseTypeRef;
20-
import no.nav.ung.sak.behandlingslager.behandling.Behandling;
6+
import no.nav.ung.sak.behandlingskontroll.*;
217
import no.nav.ung.sak.behandlingslager.behandling.motattdokument.MottattDokument;
228
import no.nav.ung.sak.behandlingslager.behandling.motattdokument.MottatteDokumentRepository;
239
import no.nav.ung.sak.behandlingslager.behandling.repository.BehandlingRepository;
2410
import no.nav.ung.sak.behandlingslager.behandling.startdato.UngdomsytelseStartdatoGrunnlag;
2511
import no.nav.ung.sak.behandlingslager.behandling.startdato.UngdomsytelseStartdatoRepository;
2612
import no.nav.ung.sak.behandlingslager.behandling.startdato.UngdomsytelseStartdatoer;
13+
import no.nav.ung.sak.behandlingslager.fagsak.Fagsak;
14+
import no.nav.ung.sak.behandlingslager.fagsak.FagsakRepository;
2715
import no.nav.ung.sak.typer.JournalpostId;
2816
import no.nav.ung.sak.ungdomsprogram.UngdomsprogramPeriodeTjeneste;
2917
import no.nav.ung.sak.ungdomsprogram.UngdomsprogramTjeneste;
3018

19+
import java.time.LocalDate;
20+
import java.util.List;
21+
import java.util.Set;
22+
import java.util.stream.Collectors;
23+
24+
import static no.nav.ung.kodeverk.behandling.BehandlingStegType.INIT_PERIODER;
25+
import static no.nav.ung.kodeverk.behandling.FagsakYtelseType.UNGDOMSYTELSE;
26+
import static no.nav.ung.kodeverk.uttak.Tid.TIDENES_ENDE;
27+
3128
@ApplicationScoped
3229
@BehandlingStegRef(value = INIT_PERIODER)
3330
@BehandlingTypeRef
@@ -39,18 +36,20 @@ public class InitierPerioderSteg implements BehandlingSteg {
3936
private UngdomsytelseStartdatoRepository startdatoRepository;
4037
private MottatteDokumentRepository mottatteDokumentRepository;
4138
private UngdomsprogramPeriodeTjeneste ungdomsprogramPeriodeTjeneste;
39+
private FagsakRepository fagsakRepository;
4240

4341
@Inject
4442
public InitierPerioderSteg(UngdomsprogramTjeneste ungdomsprogramTjeneste,
4543
BehandlingRepository behandlingRepository,
4644
UngdomsytelseStartdatoRepository startdatoRepository,
4745
MottatteDokumentRepository mottatteDokumentRepository,
48-
UngdomsprogramPeriodeTjeneste ungdomsprogramPeriodeTjeneste) {
46+
UngdomsprogramPeriodeTjeneste ungdomsprogramPeriodeTjeneste, FagsakRepository fagsakRepository) {
4947
this.ungdomsprogramTjeneste = ungdomsprogramTjeneste;
5048
this.behandlingRepository = behandlingRepository;
5149
this.startdatoRepository = startdatoRepository;
5250
this.mottatteDokumentRepository = mottatteDokumentRepository;
5351
this.ungdomsprogramPeriodeTjeneste = ungdomsprogramPeriodeTjeneste;
52+
this.fagsakRepository = fagsakRepository;
5453
}
5554

5655
public InitierPerioderSteg() {
@@ -60,6 +59,12 @@ public InitierPerioderSteg() {
6059
public BehandleStegResultat utførSteg(BehandlingskontrollKontekst kontekst) {
6160
ungdomsprogramTjeneste.innhentOpplysninger(kontekst);
6261
initierRelevanteSøknader(kontekst);
62+
var periodeTidslinje = ungdomsprogramPeriodeTjeneste.finnPeriodeTidslinje(kontekst.getBehandlingId());
63+
if (!periodeTidslinje.isEmpty()) {
64+
final var fagsak = fagsakRepository.finnEksaktFagsak(kontekst.getFagsakId());
65+
final var maksdato = periodeTidslinje.getMaxLocalDate().equals(TIDENES_ENDE) ? fagsak.getPeriode().getTomDato() : periodeTidslinje.getMaxLocalDate();
66+
fagsakRepository.utvidPeriode(kontekst.getFagsakId(), periodeTidslinje.getMinLocalDate(), maksdato);
67+
}
6368
return BehandleStegResultat.utførtUtenAksjonspunkter();
6469
}
6570

@@ -74,29 +79,24 @@ public InitierPerioderSteg() {
7479
.map(MottattDokument::getJournalpostId)
7580
.collect(Collectors.toSet());
7681

77-
var søknadsperioder = mapStartdatoerRelevantForBehandlingen(behandling, mottatteDokumenter, søknadsperiodeGrunnlag);
82+
var søknadsperioder = mapStartdatoerRelevantForBehandlingen(mottatteDokumenter, søknadsperiodeGrunnlag);
7883
startdatoRepository.lagreRelevanteSøknader(behandlingId, søknadsperioder);
7984
}
8085

8186

8287
/**
8388
* Lager aggregat av perioder som er relevant for denne behandlingen, altså perioder fra journalposter som har kommet inn i denne behandlingen.
8489
*
85-
* @param behandling
8690
* @param journalposterMottattIDenneBehandlingen Journalposter som er mottatt i denne behandlingen
8791
* @param grunnlag Søknadsperiodegrunnlag
8892
* @return Aggregat for perioder som er relevant for denne behandlingen
8993
*/
90-
private UngdomsytelseStartdatoer mapStartdatoerRelevantForBehandlingen(Behandling behandling, Set<JournalpostId> journalposterMottattIDenneBehandlingen,
94+
private UngdomsytelseStartdatoer mapStartdatoerRelevantForBehandlingen(Set<JournalpostId> journalposterMottattIDenneBehandlingen,
9195
UngdomsytelseStartdatoGrunnlag grunnlag) {
9296

93-
List<LocalDate> gyldigeStartdatoer = ungdomsprogramPeriodeTjeneste.finnPeriodeTidslinje(behandling.getId())
94-
.getLocalDateIntervals().stream().map(it -> it.getFomDato()).toList();
95-
9697
var relevantePerioder = grunnlag.getOppgitteStartdatoer()
9798
.getStartdatoer()
9899
.stream()
99-
.filter(it -> gyldigeStartdatoer.contains(it.getStartdato())) // Filtrer ut søknader med startdato som ikke matcher ungdomsprogramperioden.
100100
.filter(it -> journalposterMottattIDenneBehandlingen.stream().anyMatch(at -> at.equals(it.getJournalpostId())))
101101
.collect(Collectors.toSet());
102102

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package no.nav.ung.sak.domene.behandling.steg.varselrevurdering;
2+
3+
import no.nav.fpsak.tidsserie.LocalDateTimeline;
4+
import no.nav.ung.kodeverk.behandling.BehandlingÅrsakType;
5+
import no.nav.ung.kodeverk.behandling.aksjonspunkt.Venteårsak;
6+
import no.nav.ung.kodeverk.ungdomsytelse.periodeendring.UngdomsprogramPeriodeEndringType;
7+
import no.nav.ung.sak.behandlingskontroll.AksjonspunktResultat;
8+
import no.nav.ung.sak.behandlingslager.behandling.aksjonspunkt.Aksjonspunkt;
9+
import no.nav.ung.sak.behandlingslager.behandling.motattdokument.MottattDokument;
10+
import no.nav.ung.sak.behandlingslager.behandling.startdato.UngdomsprogramBekreftetPeriodeEndring;
11+
12+
import java.time.LocalDateTime;
13+
import java.time.Period;
14+
import java.util.*;
15+
import java.util.stream.Collectors;
16+
17+
import static no.nav.ung.kodeverk.behandling.BehandlingÅrsakType.RE_HENDELSE_ENDRET_STARTDATO_UNGDOMSPROGRAM;
18+
import static no.nav.ung.kodeverk.behandling.BehandlingÅrsakType.RE_HENDELSE_OPPHØR_UNGDOMSPROGRAM;
19+
import static no.nav.ung.kodeverk.behandling.aksjonspunkt.AksjonspunktDefinisjon.AUTO_SATT_PÅ_VENT_REVURDERING;
20+
21+
public class VarselRevurderingAksjonspunktUtleder {
22+
23+
public static Optional<AksjonspunktResultat> utledAksjonspunkt(
24+
List<BehandlingÅrsakType> behandlingsårsakerForBehandling,
25+
LocalDateTimeline<Boolean> ungdomsprogramTidslinje,
26+
List<MottattDokument> gyldigeDokumenter,
27+
List<UngdomsprogramBekreftetPeriodeEndring> bekreftelser,
28+
Period ventePeriode,
29+
Optional<Aksjonspunkt> eksisterendeAksjonspunkt) {
30+
final var gruppertePeriodeEndringerPåEndringstype = finnBekreftelserGruppertPåEndringstype(bekreftelser);
31+
final var eksisterendeFrist = eksisterendeAksjonspunkt.map(Aksjonspunkt::getFristTid);
32+
33+
if (behandlingsårsakerForBehandling.contains(RE_HENDELSE_OPPHØR_UNGDOMSPROGRAM)) {
34+
final var sisteBekreftetEndring = finnSisteMottatteBekreftelseForEndringstype(gruppertePeriodeEndringerPåEndringstype, gyldigeDokumenter, UngdomsprogramPeriodeEndringType.ENDRET_OPPHØRSDATO);
35+
if (sisteBekreftetEndring.isEmpty() || !harMatchendeSluttdato(ungdomsprogramTidslinje, sisteBekreftetEndring.get())) {
36+
return Optional.of(aksjonspunktMedFristOgVenteÅrsak(Venteårsak.VENTER_BEKREFTELSE_ENDRET_OPPHØR_UNGDOMSPROGRAM, eksisterendeFrist, ventePeriode));
37+
}
38+
}
39+
40+
if (behandlingsårsakerForBehandling.contains(RE_HENDELSE_ENDRET_STARTDATO_UNGDOMSPROGRAM)) {
41+
final var sisteBekreftetEndring = finnSisteMottatteBekreftelseForEndringstype(gruppertePeriodeEndringerPåEndringstype, gyldigeDokumenter, UngdomsprogramPeriodeEndringType.ENDRET_STARTDATO);
42+
if (sisteBekreftetEndring.isEmpty() || !harMatchendeStartdato(ungdomsprogramTidslinje, sisteBekreftetEndring.get())) {
43+
return Optional.of(aksjonspunktMedFristOgVenteÅrsak(Venteårsak.VENTER_BEKREFTELSE_ENDRET_STARTDATO_UNGDOMSPROGRAM, eksisterendeFrist, ventePeriode));
44+
}
45+
46+
}
47+
48+
return Optional.empty();
49+
}
50+
51+
private static AksjonspunktResultat aksjonspunktMedFristOgVenteÅrsak(Venteårsak venterBekreftelseEndretStartdatoUngdomsprogram, Optional<LocalDateTime> eksisterendeFrist, Period ventePeriode) {
52+
return AksjonspunktResultat.opprettForAksjonspunktMedFrist(
53+
AUTO_SATT_PÅ_VENT_REVURDERING,
54+
venterBekreftelseEndretStartdatoUngdomsprogram,
55+
eksisterendeFrist.orElse(LocalDateTime.now().plus(ventePeriode)));
56+
}
57+
58+
59+
private static Map<UngdomsprogramPeriodeEndringType, List<UngdomsprogramBekreftetPeriodeEndring>> finnBekreftelserGruppertPåEndringstype(List<UngdomsprogramBekreftetPeriodeEndring> bekreftelser) {
60+
return bekreftelser.stream().collect(Collectors.groupingBy(UngdomsprogramBekreftetPeriodeEndring::getEndringType));
61+
}
62+
63+
private static boolean harMatchendeSluttdato(LocalDateTimeline<Boolean> ungdomsprogramTidslinje, UngdomsprogramBekreftetPeriodeEndring sisteBekreftetEndring) {
64+
return ungdomsprogramTidslinje.getLocalDateIntervals().stream().anyMatch(p -> p.getTomDato().equals(sisteBekreftetEndring.getDato()));
65+
}
66+
67+
private static boolean harMatchendeStartdato(LocalDateTimeline<Boolean> perioder, UngdomsprogramBekreftetPeriodeEndring sisteBekreftetEndring) {
68+
return perioder.getLocalDateIntervals().stream().anyMatch(p -> p.getFomDato().equals(sisteBekreftetEndring.getDato()));
69+
}
70+
71+
private static Optional<UngdomsprogramBekreftetPeriodeEndring> finnSisteMottatteBekreftelseForEndringstype(Map<UngdomsprogramPeriodeEndringType, List<UngdomsprogramBekreftetPeriodeEndring>> gruppertePeriodeEndringerPåEndringstype,
72+
List<MottattDokument> gyldigeDokumenter,
73+
UngdomsprogramPeriodeEndringType endringType) {
74+
final var bekreftetEndringer = gruppertePeriodeEndringerPåEndringstype.getOrDefault(endringType, List.of());
75+
return bekreftetEndringer.stream()
76+
.max(Comparator.comparing(e -> finnMottattTidspunkt(e, gyldigeDokumenter)));
77+
}
78+
79+
private static LocalDateTime finnMottattTidspunkt(UngdomsprogramBekreftetPeriodeEndring e, List<MottattDokument> gyldigeDokumenter) {
80+
return gyldigeDokumenter.stream().filter(d -> d.getJournalpostId().equals(e.getJournalpostId())).map(MottattDokument::getMottattTidspunkt).findFirst().orElseThrow();
81+
}
82+
83+
84+
}

0 commit comments

Comments
 (0)