Skip to content

Commit 86cf240

Browse files
mer eksplisitt validering av Infotrygdhistorikk
validerer med funksjonell feil for nye søknader/vedtaksperioder, mens vi foretrekker å validere med varsel for AUU'er.
1 parent e4d20ea commit 86cf240

11 files changed

+135
-287
lines changed

sykepenger-model/src/main/kotlin/no/nav/helse/person/Vedtaksperiode.kt

+12-14
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ internal class Vedtaksperiode private constructor(
289289
søknad.forUng(aktivitetsloggMedVedtaksperiodekontekst, person.alder)
290290
arbeidsgiver.vurderOmSøknadIkkeKanHåndteres(aktivitetsloggMedVedtaksperiodekontekst, this, arbeidsgivere)
291291

292-
infotrygdhistorikk.valider(aktivitetsloggMedVedtaksperiodekontekst, periode)
292+
infotrygdhistorikk.validerMedFunksjonellFeil(aktivitetsloggMedVedtaksperiodekontekst, periode)
293293
håndterSøknad(søknad, aktivitetsloggMedVedtaksperiodekontekst)
294294
aktivitetsloggMedVedtaksperiodekontekst.info("Fullført behandling av søknad")
295295

@@ -903,7 +903,7 @@ internal class Vedtaksperiode private constructor(
903903
val aktivitetsloggMedVedtaksperiodekontekst = registrerKontekst(aktivitetslogg)
904904

905905
when (tilstand) {
906-
AvsluttetUtenUtbetaling -> return omgjøreEtterInfotrygdendring(hendelse, aktivitetsloggMedVedtaksperiodekontekst.medFeilSomVarslerHvisNødvendig(), infotrygdhistorikk)
906+
AvsluttetUtenUtbetaling -> return omgjøreEtterInfotrygdendring(hendelse, aktivitetsloggMedVedtaksperiodekontekst, infotrygdhistorikk)
907907

908908
AvventerGodkjenning,
909909
AvventerGodkjenningRevurdering -> {
@@ -916,11 +916,10 @@ internal class Vedtaksperiode private constructor(
916916
}
917917

918918
AvventerInfotrygdHistorikk,
919-
AvventerInntektsmelding,
920-
AvventerHistorikk -> {
919+
AvventerInntektsmelding -> {
921920
validation(aktivitetsloggMedVedtaksperiodekontekst) {
922921
onValidationFailed { forkast(hendelse, aktivitetsloggMedVedtaksperiodekontekst) }
923-
valider { infotrygdhistorikk.valider(this, periode) }
922+
valider { infotrygdhistorikk.validerMedFunksjonellFeil(this, periode) }
924923
if (tilstand == AvventerInfotrygdHistorikk) {
925924
onSuccess { tilstand(aktivitetsloggMedVedtaksperiodekontekst, AvventerInntektsmelding) }
926925
}
@@ -930,6 +929,7 @@ internal class Vedtaksperiode private constructor(
930929
Avsluttet,
931930
AvventerBlokkerendePeriode,
932931
AvventerHistorikkRevurdering,
932+
AvventerHistorikk,
933933
AvventerRevurdering,
934934
AvventerSimulering,
935935
AvventerSimuleringRevurdering,
@@ -955,20 +955,17 @@ internal class Vedtaksperiode private constructor(
955955
arbeidsgiver.beregnArbeidsgiverperiode()
956956
)
957957

958-
infotrygdhistorikk.valider(aktivitetslogg, periode)
959-
960958
val kanForkastes = arbeidsgiver.kanForkastes(this, aktivitetslogg)
959+
valInnhenteInntektEllerRefusjon =InnhenteInntektEllerRefusjon()
961960

962-
if (aktivitetslogg.harFunksjonelleFeilEllerVerre() && kanForkastes) {
963-
aktivitetslogg.info("Forkaster perioden fordi Infotrygdhistorikken ikke validerer")
964-
forkast(hendelse, aktivitetslogg)
965-
return null
966-
}
967-
if (måInnhenteInntektEllerRefusjon() && kanForkastes) {
961+
if (kanForkastes &&InnhenteInntektEllerRefusjon) {
962+
infotrygdhistorikk.validerMedFunksjonellFeil(aktivitetslogg, periode)
968963
aktivitetslogg.info("Forkaster perioden fordi perioden har ikke tilstrekkelig informasjon til utbetaling")
969964
forkast(hendelse, aktivitetslogg)
970965
return null
971966
}
967+
968+
infotrygdhistorikk.validerMedVarsel(aktivitetslogg, periode)
972969
aktivitetslogg.varsel(RV_IT_38)
973970
return Revurderingseventyr.infotrygdendring(hendelse, skjæringstidspunkt, periode)
974971
}
@@ -1008,7 +1005,8 @@ internal class Vedtaksperiode private constructor(
10081005
checkNotNull(vilkårsgrunnlag).valider(aktivitetslogg, arbeidsgiver.organisasjonsnummer)
10091006
checkNotNull(vilkårsgrunnlag).inntektsgrunnlag.valider(aktivitetslogg)
10101007
checkNotNull(vilkårsgrunnlag).opptjening?.validerOpptjeningsdager(aktivitetslogg)
1011-
infotrygdhistorikk.valider(aktivitetslogg, periode)
1008+
infotrygdhistorikk.validerMedVarsel(aktivitetslogg, periode)
1009+
infotrygdhistorikk.validerNyereOpplysninger(aktivitetslogg, periode)
10121010
ytelser.valider(aktivitetslogg, periode, skjæringstidspunkt, maksdatoresultat.maksdato, erForlengelse())
10131011

10141012
if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return forkast(ytelser, aktivitetslogg)

sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Infotrygdhistorikk.kt

+18-2
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,28 @@ internal class Infotrygdhistorikk private constructor(
3131
}
3232
}
3333

34-
internal fun valider(
34+
internal fun validerMedFunksjonellFeil(
3535
aktivitetslogg: IAktivitetslogg,
3636
periode: Periode
3737
): Boolean {
3838
if (!harHistorikk()) return true
39-
return siste.valider(aktivitetslogg, periode)
39+
return siste.validerMedFunksjonellFeil(aktivitetslogg, periode)
40+
}
41+
42+
internal fun validerMedVarsel(
43+
aktivitetslogg: IAktivitetslogg,
44+
periode: Periode
45+
) {
46+
if (!harHistorikk()) return
47+
siste.validerMedVarsel(aktivitetslogg, periode)
48+
}
49+
50+
internal fun validerNyereOpplysninger(
51+
aktivitetslogg: IAktivitetslogg,
52+
periode: Periode
53+
) {
54+
if (!harHistorikk()) return
55+
siste.validerNyereOpplysninger(aktivitetslogg, periode)
4056
}
4157

4258
internal fun oppfriskNødvendig(aktivitetslogg: IAktivitetslogg, tidligsteDato: LocalDate) {

sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkElement.kt

+12-11
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@ package no.nav.helse.person.infotrygdhistorikk
22

33
import java.time.LocalDate
44
import java.time.LocalDateTime
5-
import java.util.UUID
5+
import java.util.*
66
import no.nav.helse.dto.deserialisering.InfotrygdhistorikkelementInnDto
77
import no.nav.helse.dto.serialisering.InfotrygdhistorikkelementUtDto
88
import no.nav.helse.hendelser.Hendelseskilde
99
import no.nav.helse.hendelser.MeldingsreferanseId
1010
import no.nav.helse.hendelser.Periode
1111
import no.nav.helse.person.aktivitetslogg.IAktivitetslogg
12-
import no.nav.helse.person.aktivitetslogg.Varselkode.RV_IT_14
13-
import no.nav.helse.person.infotrygdhistorikk.Infotrygdperiode.Companion.harBetaltRettFør
1412
import no.nav.helse.person.infotrygdhistorikk.Infotrygdperiode.Companion.utbetalingsperioder
1513
import no.nav.helse.sykdomstidslinje.Dag.Companion.sammenhengendeSykdom
1614
import no.nav.helse.sykdomstidslinje.Sykdomstidslinje
@@ -90,25 +88,28 @@ class InfotrygdhistorikkElement private constructor(
9088
private fun erTom() =
9189
perioder.isEmpty() && inntekter.isEmpty() && arbeidskategorikoder.isEmpty()
9290

93-
internal fun valider(aktivitetslogg: IAktivitetslogg, periode: Periode): Boolean {
94-
validerBetaltRettFør(periode, aktivitetslogg)
91+
internal fun validerMedFunksjonellFeil(aktivitetslogg: IAktivitetslogg, periode: Periode): Boolean {
9592
aktivitetslogg.info("Sjekker utbetalte perioder")
96-
perioder.forEach { it.valider(aktivitetslogg, periode) }
93+
perioder.forEach { it.valider(aktivitetslogg, periode, IAktivitetslogg::funksjonellFeil) }
9794
return !aktivitetslogg.harFunksjonelleFeilEllerVerre()
9895
}
9996

100-
private fun validerBetaltRettFør(periode: Periode, aktivitetslogg: IAktivitetslogg) {
101-
if (!harBetaltRettFør(periode)) return
102-
aktivitetslogg.funksjonellFeil(RV_IT_14)
97+
internal fun validerMedVarsel(aktivitetslogg: IAktivitetslogg, periode: Periode) {
98+
aktivitetslogg.info("Sjekker utbetalte perioder")
99+
perioder.forEach { it.valider(aktivitetslogg, periode, IAktivitetslogg::varsel) }
100+
}
101+
102+
internal fun validerNyereOpplysninger(aktivitetslogg: IAktivitetslogg, periode: Periode) {
103+
perioder.forEach {
104+
it.validerNyereOpplysninger(aktivitetslogg, periode)
105+
}
103106
}
104107

105108
internal fun utbetalingstidslinje() =
106109
perioder
107110
.map { it.utbetalingstidslinje() }
108111
.fold(Utbetalingstidslinje(), Utbetalingstidslinje::plus)
109112

110-
private fun harBetaltRettFør(periode: Periode) = perioder.harBetaltRettFør(periode)
111-
112113
internal fun funksjoneltLik(other: InfotrygdhistorikkElement): Boolean {
113114
if (!harLikePerioder(other)) return false
114115
if (!harLikeInntekter(other)) return false

sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Infotrygdperiode.kt

+12-19
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,28 @@ sealed class Infotrygdperiode(fom: LocalDate, tom: LocalDate) {
1616
internal open fun sykdomstidslinje(kilde: Hendelseskilde): Sykdomstidslinje = Sykdomstidslinje()
1717
internal open fun utbetalingstidslinje(): Utbetalingstidslinje = Utbetalingstidslinje()
1818

19-
internal fun valider(aktivitetslogg: IAktivitetslogg, periode: Periode) {
20-
validerHarBetaltTidligere(periode, aktivitetslogg)
21-
validerOverlapp(aktivitetslogg, periode)
22-
validerNyereOpplysninger(aktivitetslogg, periode)
23-
}
24-
25-
26-
private fun validerHarBetaltTidligere(periode: Periode, aktivitetslogg: IAktivitetslogg) {
27-
if (!harBetaltTidligere(periode)) return
28-
aktivitetslogg.funksjonellFeil(Varselkode.RV_IT_37)
19+
internal fun valider(aktivitetslogg: IAktivitetslogg, periode: Periode, strategi: IAktivitetslogg.(Varselkode) -> Unit) {
20+
if (harBetaltTidligere(periode)) aktivitetslogg.strategi(Varselkode.RV_IT_37)
21+
if (harBetaltRettFør(periode)) aktivitetslogg.strategi(Varselkode.RV_IT_14)
22+
if (harOverlapp(aktivitetslogg, periode)) aktivitetslogg.varsel(Varselkode.RV_IT_3)
2923
}
3024

3125
private fun harBetaltTidligere(other: Periode): Boolean {
3226
val periodeMellom = periode.periodeMellom(other.start) ?: return false
3327
return periodeMellom.count() < Vedtaksperiode.MINIMALT_TILLATT_AVSTAND_TIL_INFOTRYGD
3428
}
3529

36-
private fun validerOverlapp(aktivitetslogg: IAktivitetslogg, periode: Periode) {
37-
if (!this.periode.overlapperMed(periode)) return
30+
private fun harBetaltRettFør(other: Periode): Boolean {
31+
return this.periode.erRettFør(other)
32+
}
33+
34+
private fun harOverlapp(aktivitetslogg: IAktivitetslogg, periode: Periode): Boolean {
35+
if (!this.periode.overlapperMed(periode)) return false
3836
aktivitetslogg.info("Utbetaling i Infotrygd %s til %s overlapper med vedtaksperioden", this.periode.start, this.periode.endInclusive)
39-
aktivitetslogg.varsel(Varselkode.RV_IT_3)
37+
return true
4038
}
4139

42-
private fun validerNyereOpplysninger(aktivitetslogg: IAktivitetslogg, periode: Periode) {
40+
internal fun validerNyereOpplysninger(aktivitetslogg: IAktivitetslogg, periode: Periode) {
4341
if (this.periode.start <= periode.endInclusive) return
4442
val periodeMellom = periode.endInclusive.datesUntil(this.periode.start).count()
4543
if (periodeMellom > MINIMALT_TILLAT_AVSTAND_NYERE_OPPLYSNINGER) return
@@ -65,10 +63,5 @@ sealed class Infotrygdperiode(fom: LocalDate, tom: LocalDate) {
6563
.filterIsInstance<Utbetalingsperiode>()
6664
.filter { organisasjonsnummer == null || it.gjelder(organisasjonsnummer) }
6765
.map { it.periode }
68-
69-
internal fun List<Infotrygdperiode>.harBetaltRettFør(other: Periode) = this
70-
.any {
71-
it.periode.erRettFør(other)
72-
}
7366
}
7467
}

0 commit comments

Comments
 (0)