From 77f9d9c3f21ec2b8193cf8cd164029625099cd97 Mon Sep 17 00:00:00 2001 From: david steinsland Date: Thu, 7 Mar 2024 15:12:45 +0100 Subject: [PATCH] memento for person --- .../src/main/kotlin/no/nav/helse/Alder.kt | 3 + .../no/nav/helse/hendelser/Subsumsjon.kt | 6 +- .../no/nav/helse/memento/PersonMemento.kt | 442 ++++++++++ .../no/nav/helse/person/Arbeidsgiver.kt | 15 + .../no/nav/helse/person/Dokumentsporing.kt | 18 + .../helse/person/ForkastetVedtaksperiode.kt | 6 +- .../no/nav/helse/person/Generasjoner.kt | 52 ++ .../kotlin/no/nav/helse/person/Opptjening.kt | 18 + .../main/kotlin/no/nav/helse/person/Person.kt | 11 + .../nav/helse/person/Sykmeldingsperioder.kt | 3 + .../no/nav/helse/person/Vedtaksperiode.kt | 29 + .../Vilk\303\245rsgrunnlagHistorikk.kt" | 52 ++ .../person/infotrygdhistorikk/Friperiode.kt | 3 + .../infotrygdhistorikk/Infotrygdhistorikk.kt | 5 + .../InfotrygdhistorikkElement.kt | 12 + .../infotrygdhistorikk/Inntektsopplysning.kt | 10 + .../infotrygdhistorikk/Utbetalingsperiode.kt | 16 + .../inntekt/ArbeidsgiverInntektsopplysning.kt | 8 + ...ektsopplysningForSammenligningsgrunnlag.kt | 6 + .../helse/person/inntekt/IkkeRapportert.kt | 5 + .../no/nav/helse/person/inntekt/Infotrygd.kt | 5 + .../helse/person/inntekt/Inntektshistorikk.kt | 5 + .../helse/person/inntekt/Inntektsmelding.kt | 11 + .../person/inntekt/Inntektsopplysning.kt | 4 + .../person/inntekt/Refusjonshistorikk.kt | 19 + .../person/inntekt/Refusjonsopplysninger.kt | 13 + .../nav/helse/person/inntekt/Saksbehandler.kt | 14 + .../person/inntekt/Sammenligningsgrunnlag.kt | 6 + .../person/inntekt/SkattSykepengegrunnlag.kt | 14 + .../helse/person/inntekt/Skatteopplysning.kt | 17 + .../inntekt/Skj\303\270nnsmessigFastsatt.kt" | 11 + .../helse/person/inntekt/Sykepengegrunnlag.kt | 9 + .../kotlin/no/nav/helse/serde/JsonBuilder.kt | 16 +- .../kotlin/no/nav/helse/serde/PersonData.kt | 527 ++++++------ .../no/nav/helse/serde/PersonDataBuilder.kt | 767 ++++++++++++++++++ .../no/nav/helse/sykdomstidslinje/Dag.kt | 36 +- .../sykdomstidslinje/Sykdomshistorikk.kt | 13 + .../SykdomshistorikkHendelse.kt | 2 + .../sykdomstidslinje/Sykdomstidslinje.kt | 7 + .../utbetalingslinjer/Feriepengeutbetaling.kt | 14 + .../Feriepengeberegner.kt | 14 + .../no/nav/helse/dsl/AbstractDslTest.kt | 15 + .../kotlin/no/nav/helse/dsl/TestPerson.kt | 6 +- ...\303\245rsgrunnlagHistorikkInnslagTest.kt" | 12 + .../kotlin/no/nav/helse/serde/DagDataTest.kt | 87 ++ .../no/nav/helse/serde/JsonAssertUtil.kt | 14 +- .../nav/helse/serde/PersonDataBuilderTest.kt | 166 ++++ ...TOTest.kt => BegrunnelseMementoDTOTest.kt} | 2 +- ...mentoForReduksjonEllerIkkeUtbetaltTest.kt} | 2 +- ...nelseTest.kt => BegrunnelseMementoTest.kt} | 2 +- .../Create\303\230konomiTest.kt" | 5 +- .../kotlin/no/nav/helse/hendelser/Periode.kt | 3 + .../no/nav/helse/memento/PeriodeMemento.kt | 5 + .../nav/helse/hendelser/SimuleringResultat.kt | 14 +- .../no/nav/helse/memento/InntektMemento.kt | 9 + .../no/nav/helse/memento/UtbetalingMemento.kt | 188 +++++ .../helse/memento/\303\230konomiMemento.kt" | 15 + .../no/nav/helse/utbetalingslinjer/Oppdrag.kt | 33 + .../nav/helse/utbetalingslinjer/Utbetaling.kt | 50 +- .../utbetalingslinjer/Utbetalingslinje.kt | 31 + .../utbetalingstidslinje/Utbetalingsdag.kt | 24 + .../Utbetalingstidslinje.kt | 27 + .../no/nav/helse/\303\270konomi/Inntekt.kt" | 7 + .../nav/helse/\303\270konomi/Prosentdel.kt" | 3 + .../helse/\303\270konomi/\303\230konomi.kt" | 14 + 65 files changed, 2687 insertions(+), 291 deletions(-) create mode 100644 sykepenger-model/src/main/kotlin/no/nav/helse/memento/PersonMemento.kt create mode 100644 sykepenger-model/src/main/kotlin/no/nav/helse/serde/PersonDataBuilder.kt create mode 100644 sykepenger-model/src/test/kotlin/no/nav/helse/serde/DagDataTest.kt create mode 100644 sykepenger-model/src/test/kotlin/no/nav/helse/serde/PersonDataBuilderTest.kt rename sykepenger-model/src/test/kotlin/no/nav/helse/serde/api/{BegrunnelseDTOTest.kt => BegrunnelseMementoDTOTest.kt} (92%) rename sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/{BegrunnelseForReduksjonEllerIkkeUtbetaltTest.kt => BegrunnelseMementoForReduksjonEllerIkkeUtbetaltTest.kt} (96%) rename sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/{BegrunnelseTest.kt => BegrunnelseMementoTest.kt} (97%) create mode 100644 sykepenger-primitiver/src/main/kotlin/no/nav/helse/memento/PeriodeMemento.kt create mode 100644 sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/InntektMemento.kt create mode 100644 sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/UtbetalingMemento.kt create mode 100644 "sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/\303\230konomiMemento.kt" diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/Alder.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/Alder.kt index 1f9f0733a2..7f0db37c7f 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/Alder.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/Alder.kt @@ -5,6 +5,7 @@ import java.time.Year import java.time.temporal.ChronoUnit.YEARS import no.nav.helse.etterlevelse.SubsumsjonObserver import no.nav.helse.hendelser.til +import no.nav.helse.memento.AlderMemento import no.nav.helse.utbetalingstidslinje.Begrunnelse import no.nav.helse.utbetalingstidslinje.Utbetalingstidslinje @@ -81,4 +82,6 @@ class Alder(private val fødselsdato: LocalDate, private val dødsdato: LocalDat if (dødsdato == null) return tidslinjer return Utbetalingstidslinje.avvis(tidslinjer, listOf(dødsdato.nesteDag til LocalDate.MAX), listOf(Begrunnelse.EtterDødsdato)) } + + internal fun memento() = AlderMemento(fødselsdato = fødselsdato, dødsdato = dødsdato) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Subsumsjon.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Subsumsjon.kt index 1e613d9254..67fb87b9fd 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Subsumsjon.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Subsumsjon.kt @@ -1,7 +1,11 @@ package no.nav.helse.hendelser +import no.nav.helse.memento.SubsumsjonMemento + class Subsumsjon( val paragraf: String, val ledd: Int?, val bokstav: String?, -) \ No newline at end of file +) { + internal fun memento() = SubsumsjonMemento(paragraf = paragraf, ledd = ledd, bokstav = bokstav) +} \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/memento/PersonMemento.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/memento/PersonMemento.kt new file mode 100644 index 0000000000..e1b7801765 --- /dev/null +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/memento/PersonMemento.kt @@ -0,0 +1,442 @@ +package no.nav.helse.memento + +import java.time.LocalDate +import java.time.LocalDateTime +import java.time.Year +import java.time.YearMonth +import java.util.UUID + +data class PersonMemento( + val aktørId: String, + val fødselsnummer: String, + val alder: AlderMemento, + val opprettet: LocalDateTime, + val arbeidsgivere: List, + val infotrygdhistorikk: InfotrygdhistorikkMemento, + val vilkårsgrunnlagHistorikk: VilkårsgrunnlaghistorikkMemento +) { +} + +data class AlderMemento(val fødselsdato: LocalDate, val dødsdato: LocalDate?) + +data class ArbeidsgiverMemento( + val id: UUID, + val organisasjonsnummer: String, + val inntektshistorikk: InntektshistorikkMemento, + val sykdomshistorikk: SykdomshistorikkMemento, + val sykmeldingsperioder: SykmeldingsperioderMemento, + val vedtaksperioder: List, + val forkastede: List, + val utbetalinger: List, + val feriepengeutbetalinger: List, + val refusjonshistorikk: RefusjonshistorikkMemento +) + +data class SykmeldingsperioderMemento(val perioder: List) +data class RefusjonshistorikkMemento(val refusjoner: List) +data class RefusjonMemento( + val meldingsreferanseId: UUID, + val førsteFraværsdag: LocalDate?, + val arbeidsgiverperioder: List, + val beløp: InntektMemento?, + val sisteRefusjonsdag: LocalDate?, + val endringerIRefusjon: List, + val tidsstempel: LocalDateTime +) +data class EndringIRefusjonMemento( + val beløp: InntektMemento, + val endringsdato: LocalDate +) +data class InntektshistorikkMemento(val historikk: List) + +data class SykdomshistorikkMemento(val elementer: List) +data class SykdomshistorikkElementMemento( + val id: UUID, + val hendelseId: UUID?, + val tidsstempel: LocalDateTime, + val hendelseSykdomstidslinje: SykdomstidslinjeMemento, + val beregnetSykdomstidslinje: SykdomstidslinjeMemento, +) + +data class SykdomstidslinjeMemento( + val dager: List, + val periode: PeriodeMemento?, + val låstePerioder: List +) + +sealed class DagMemento { + abstract val dato: LocalDate + abstract val kilde: HendelseskildeMemento + + data class UkjentDagMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento) : DagMemento() + data class ArbeidsdagMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento) : DagMemento() + data class ArbeidsgiverdagMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento, val økonomi: ØkonomiMemento) : DagMemento() + data class FeriedagMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento) : DagMemento() + data class ArbeidIkkeGjenopptattDagMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento) : DagMemento() + data class FriskHelgedagMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento) : DagMemento() + data class ArbeidsgiverHelgedagMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento, val økonomi: ØkonomiMemento) : DagMemento() + data class SykedagMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento, val økonomi: ØkonomiMemento) : DagMemento() + data class SykHelgedagMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento, val økonomi: ØkonomiMemento) : DagMemento() + data class SykedagNavMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento, val økonomi: ØkonomiMemento) : DagMemento() + data class ForeldetSykedagMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento, val økonomi: ØkonomiMemento) : DagMemento() + data class PermisjonsdagMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento) : DagMemento() + data class ProblemDagMemento( + override val dato: LocalDate, + override val kilde: HendelseskildeMemento, + val other: HendelseskildeMemento, + val melding: String + ) : DagMemento() + data class AndreYtelserMemento(override val dato: LocalDate, override val kilde: HendelseskildeMemento, val ytelse: YtelseMemento) : DagMemento() { + enum class YtelseMemento { + Foreldrepenger, AAP, Omsorgspenger, Pleiepenger, Svangerskapspenger, Opplæringspenger, Dagpenger + } + } +} +data class HendelseskildeMemento( + val type: String, + val meldingsreferanseId: UUID, + val tidsstempel: LocalDateTime +) +data class ForkastetVedtaksperiodeMemento(val vedtaksperiode: VedtaksperiodeMemento) +data class VedtaksperiodeMemento( + val id: UUID, + var tilstand: VedtaksperiodetilstandMemento, + val generasjoner: GenerasjonerMemento, + val opprettet: LocalDateTime, + var oppdatert: LocalDateTime +) + +sealed class VedtaksperiodetilstandMemento { + data object AVVENTER_HISTORIKK : VedtaksperiodetilstandMemento() + data object AVVENTER_GODKJENNING : VedtaksperiodetilstandMemento() + data object AVVENTER_SIMULERING : VedtaksperiodetilstandMemento() + data object TIL_UTBETALING : VedtaksperiodetilstandMemento() + data object TIL_INFOTRYGD : VedtaksperiodetilstandMemento() + data object AVSLUTTET : VedtaksperiodetilstandMemento() + data object AVSLUTTET_UTEN_UTBETALING : VedtaksperiodetilstandMemento() + data object REVURDERING_FEILET : VedtaksperiodetilstandMemento() + data object START : VedtaksperiodetilstandMemento() + data object AVVENTER_INFOTRYGDHISTORIKK : VedtaksperiodetilstandMemento() + data object AVVENTER_INNTEKTSMELDING : VedtaksperiodetilstandMemento() + data object AVVENTER_BLOKKERENDE_PERIODE : VedtaksperiodetilstandMemento() + data object AVVENTER_VILKÅRSPRØVING : VedtaksperiodetilstandMemento() + data object AVVENTER_REVURDERING : VedtaksperiodetilstandMemento() + data object AVVENTER_HISTORIKK_REVURDERING : VedtaksperiodetilstandMemento() + data object AVVENTER_VILKÅRSPRØVING_REVURDERING : VedtaksperiodetilstandMemento() + data object AVVENTER_SIMULERING_REVURDERING : VedtaksperiodetilstandMemento() + data object AVVENTER_GODKJENNING_REVURDERING : VedtaksperiodetilstandMemento() +} + +data class GenerasjonerMemento(val generasjoner: List) +data class GenerasjonMemento( + val id: UUID, + val tilstand: GenerasjonTilstandMemento, + val endringer: List, + val vedtakFattet: LocalDateTime?, + val avsluttet: LocalDateTime?, + val kilde: GenerasjonkildeMemento, +) + +sealed class GenerasjonTilstandMemento { + data object UBEREGNET : GenerasjonTilstandMemento() + data object UBEREGNET_OMGJØRING : GenerasjonTilstandMemento() + data object UBEREGNET_REVURDERING : GenerasjonTilstandMemento() + data object BEREGNET : GenerasjonTilstandMemento() + data object BEREGNET_OMGJØRING : GenerasjonTilstandMemento() + data object BEREGNET_REVURDERING : GenerasjonTilstandMemento() + data object VEDTAK_FATTET : GenerasjonTilstandMemento() + data object REVURDERT_VEDTAK_AVVIST : GenerasjonTilstandMemento() + data object VEDTAK_IVERKSATT : GenerasjonTilstandMemento() + data object AVSLUTTET_UTEN_VEDTAK : GenerasjonTilstandMemento() + data object ANNULLERT_PERIODE : GenerasjonTilstandMemento() + data object TIL_INFOTRYGD : GenerasjonTilstandMemento() +} + +data class GenerasjonEndringMemento( + val id: UUID, + val tidsstempel: LocalDateTime, + val sykmeldingsperiode: PeriodeMemento, + val periode: PeriodeMemento, + val vilkårsgrunnlagId: UUID?, + val utbetalingId: UUID?, + val dokumentsporing: DokumentsporingMemento, + val sykdomstidslinje: SykdomstidslinjeMemento +) + +data class DokumentsporingMemento( + val id: UUID, + val type: DokumenttypeMemento +) + +sealed class DokumenttypeMemento { + data object Sykmelding : DokumenttypeMemento() + data object Søknad : DokumenttypeMemento() + data object InntektsmeldingInntekt : DokumenttypeMemento() + data object InntektsmeldingDager : DokumenttypeMemento() + data object OverstyrTidslinje : DokumenttypeMemento() + data object OverstyrInntekt : DokumenttypeMemento() + data object OverstyrRefusjon : DokumenttypeMemento() + data object OverstyrArbeidsgiveropplysninger : DokumenttypeMemento() + data object OverstyrArbeidsforhold : DokumenttypeMemento() + data object SkjønnsmessigFastsettelse : DokumenttypeMemento() +} + +data class GenerasjonkildeMemento( + val meldingsreferanseId: UUID, + val innsendt: LocalDateTime, + val registert: LocalDateTime, + val avsender: AvsenderMemento +) +sealed class AvsenderMemento { + data object SYKMELDT : AvsenderMemento() + data object ARBEIDSGIVER : AvsenderMemento() + data object SAKSBEHANDLER : AvsenderMemento() + data object SYSTEM : AvsenderMemento() +} + +data class VilkårsgrunnlaghistorikkMemento( + val historikk: List +) + +data class VilkårsgrunnlagInnslagMemento( + val id: UUID, + val opprettet: LocalDateTime, + val vilkårsgrunnlag: List +) + +sealed class VilkårsgrunnlagMemento { + abstract val vilkårsgrunnlagId: UUID + abstract val skjæringstidspunkt: LocalDate + abstract val sykepengegrunnlag: SykepengegrunnlagMemento + abstract val opptjening: OpptjeningMemento? + + data class Spleis( + override val vilkårsgrunnlagId: UUID, + override val skjæringstidspunkt: LocalDate, + override val sykepengegrunnlag: SykepengegrunnlagMemento, + override val opptjening: OpptjeningMemento?, + val medlemskapstatus: MedlemskapsvurderingMemento, + val vurdertOk: Boolean, + val meldingsreferanseId: UUID? + ) : VilkårsgrunnlagMemento() + data class Infotrygd( + override val vilkårsgrunnlagId: UUID, + override val skjæringstidspunkt: LocalDate, + override val sykepengegrunnlag: SykepengegrunnlagMemento, + override val opptjening: OpptjeningMemento? + ) : VilkårsgrunnlagMemento() +} + +sealed class MedlemskapsvurderingMemento { + data object Ja : MedlemskapsvurderingMemento() + data object Nei : MedlemskapsvurderingMemento() + data object VetIkke : MedlemskapsvurderingMemento() + data object UavklartMedBrukerspørsmål : MedlemskapsvurderingMemento() +} + +data class SykepengegrunnlagMemento( + val arbeidsgiverInntektsopplysninger: List, + val deaktiverteArbeidsforhold: List, + val vurdertInfotrygd: Boolean, + val sammenligningsgrunnlag: SammenligningsgrunnlagMemento, + val `6G`: InntektMemento? +) +data class ArbeidsgiverInntektsopplysningMemento( + val orgnummer: String, + val gjelder: PeriodeMemento, + val inntektsopplysning: InntektsopplysningMemento, + val refusjonsopplysninger: RefusjonsopplysningerMemento +) +sealed class InntektsopplysningMemento { + abstract val id: UUID + abstract val hendelseId: UUID + abstract val dato: LocalDate + abstract val beløp: InntektMemento + abstract val tidsstempel: LocalDateTime + + data class IkkeRapportertMemento( + override val id: UUID, + override val hendelseId: UUID, + override val dato: LocalDate, + override val beløp: InntektMemento, + override val tidsstempel: LocalDateTime + ) : InntektsopplysningMemento() + + data class InfotrygdMemento( + override val id: UUID, + override val hendelseId: UUID, + override val dato: LocalDate, + override val beløp: InntektMemento, + override val tidsstempel: LocalDateTime + ) : InntektsopplysningMemento() + + data class SaksbehandlerMemento( + override val id: UUID, + override val hendelseId: UUID, + override val dato: LocalDate, + override val beløp: InntektMemento, + override val tidsstempel: LocalDateTime, + val forklaring: String?, + val subsumsjon: SubsumsjonMemento?, + val overstyrtInntekt: InntektsopplysningMemento, + ) : InntektsopplysningMemento() + + data class SkjønnsmessigFastsattMemento( + override val id: UUID, + override val hendelseId: UUID, + override val dato: LocalDate, + override val beløp: InntektMemento, + override val tidsstempel: LocalDateTime, + val overstyrtInntekt: InntektsopplysningMemento, + ) : InntektsopplysningMemento() + + data class InntektsmeldingMemento( + override val id: UUID, + override val hendelseId: UUID, + override val dato: LocalDate, + override val beløp: InntektMemento, + override val tidsstempel: LocalDateTime + ) : InntektsopplysningMemento() + data class SkattSykepengegrunnlagMemento( + override val id: UUID, + override val hendelseId: UUID, + override val dato: LocalDate, + override val beløp: InntektMemento, + override val tidsstempel: LocalDateTime, + val inntektsopplysninger: List, + val ansattPerioder: List + ) : InntektsopplysningMemento() +} +data class AnsattPeriodeMemento(val fom: LocalDate, val tom: LocalDate?) +data class SubsumsjonMemento( + val paragraf: String, + val ledd: Int?, + val bokstav: String?, +) +data class SammenligningsgrunnlagMemento( + val sammenligningsgrunnlag: InntektMemento, + val arbeidsgiverInntektsopplysninger: List, +) +data class ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagMemento( + val orgnummer: String, + val inntektsopplysninger: List +) +data class SkatteopplysningMemento( + val hendelseId: UUID, + val beløp: InntektMemento, + val måned: YearMonth, + val type: InntekttypeMemento, + val fordel: String, + val beskrivelse: String, + val tidsstempel: LocalDateTime +) +sealed class InntekttypeMemento { + data object LØNNSINNTEKT : InntekttypeMemento() + data object NÆRINGSINNTEKT : InntekttypeMemento() + data object PENSJON_ELLER_TRYGD : InntekttypeMemento() + data object YTELSE_FRA_OFFENTLIGE : InntekttypeMemento() +} +data class RefusjonsopplysningerMemento(val opplysninger: List) +data class RefusjonsopplysningMemento( + val meldingsreferanseId: UUID, + val fom: LocalDate, + val tom: LocalDate?, + val beløp: InntektMemento +) +data class OpptjeningMemento( + val arbeidsforhold: List, + val opptjeningsperiode: PeriodeMemento +) + +data class ArbeidsgiverOpptjeningsgrunnlagMemento( + val orgnummer: String, + val ansattPerioder: List +) + +data class ArbeidsforholdMemento( + val ansattFom: LocalDate, + val ansattTom: LocalDate?, + val deaktivert: Boolean +) + +data class FeriepengeMemento( + val feriepengeberegner: FeriepengeberegnerMemento, + val infotrygdFeriepengebeløpPerson: Double, + val infotrygdFeriepengebeløpArbeidsgiver: Double, + val spleisFeriepengebeløpArbeidsgiver: Double, + val spleisFeriepengebeløpPerson: Double, + val oppdrag: OppdragMemento, + val personoppdrag: OppdragMemento, + val utbetalingId: UUID, + val sendTilOppdrag: Boolean, + val sendPersonoppdragTilOS: Boolean, +) + +data class FeriepengeberegnerMemento( + val opptjeningsår: Year, + val utbetalteDager: List +) +sealed class UtbetaltDagMemento { + abstract val orgnummer: String + abstract val dato: LocalDate + abstract val beløp: Int + + data class InfotrygdArbeidsgiver( + override val orgnummer: String, + override val dato: LocalDate, + override val beløp: Int + ) : UtbetaltDagMemento() + data class InfotrygdPerson( + override val orgnummer: String, + override val dato: LocalDate, + override val beløp: Int + ) : UtbetaltDagMemento() + data class SpleisArbeidsgiver( + override val orgnummer: String, + override val dato: LocalDate, + override val beløp: Int + ) : UtbetaltDagMemento() + data class SpleisPerson( + override val orgnummer: String, + override val dato: LocalDate, + override val beløp: Int + ) : UtbetaltDagMemento() +} + +data class InfotrygdhistorikkMemento( + val elementer: List +) + +data class InfotrygdhistorikkelementMemento( + val id: UUID, + val tidsstempel: LocalDateTime, + val hendelseId: UUID?, + val ferieperioder: List, + val arbeidsgiverutbetalingsperioder: List, + val personutbetalingsperioder: List, + val inntekter: List, + val arbeidskategorikoder: Map, + val oppdatert: LocalDateTime +) + +data class InfotrygdFerieperiodeMemento(val periode: PeriodeMemento) +data class InfotrygdArbeidsgiverutbetalingsperiodeMemento( + val orgnr: String, + val periode: PeriodeMemento, + val grad: ProsentdelMemento, + val inntekt: InntektMemento +) +data class InfotrygdPersonutbetalingsperiodeMemento( + val orgnr: String, + val periode: PeriodeMemento, + val grad: ProsentdelMemento, + val inntekt: InntektMemento +) +data class InfotrygdInntektsopplysningMemento( + val orgnummer: String, + val sykepengerFom: LocalDate, + val inntekt: InntektMemento, + val refusjonTilArbeidsgiver: Boolean, + val refusjonTom: LocalDate?, + val lagret: LocalDateTime? +) \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Arbeidsgiver.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Arbeidsgiver.kt index a16978c0a6..0e6e455120 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Arbeidsgiver.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Arbeidsgiver.kt @@ -28,6 +28,8 @@ import no.nav.helse.hendelser.utbetaling.AnnullerUtbetaling import no.nav.helse.hendelser.utbetaling.UtbetalingHendelse import no.nav.helse.hendelser.utbetaling.Utbetalingpåminnelse import no.nav.helse.hendelser.utbetaling.Utbetalingsavgjørelse +import no.nav.helse.memento.ArbeidsgiverMemento +import no.nav.helse.memoized import no.nav.helse.person.ForkastetVedtaksperiode.Companion.slåSammenSykdomstidslinjer import no.nav.helse.person.PersonObserver.UtbetalingEndretEvent.OppdragEventDetaljer import no.nav.helse.person.Vedtaksperiode.Companion.AUU_SOM_VIL_UTBETALES @@ -943,4 +945,17 @@ internal class Arbeidsgiver private constructor( ) } } + + internal fun memento() = ArbeidsgiverMemento( + id = id, + organisasjonsnummer = organisasjonsnummer, + inntektshistorikk = inntektshistorikk.memento(), + sykdomshistorikk = sykdomshistorikk.memento(), + sykmeldingsperioder = sykmeldingsperioder.memento(), + vedtaksperioder = vedtaksperioder.map { it.memento() }, + forkastede = forkastede.map { it.memento() }, + utbetalinger = utbetalinger.map { it.memento() }, + feriepengeutbetalinger = feriepengeutbetalinger.map { it.memento() }, + refusjonshistorikk = refusjonshistorikk.memento() + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Dokumentsporing.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Dokumentsporing.kt index ccf5266dd2..b500ff289a 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Dokumentsporing.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Dokumentsporing.kt @@ -3,6 +3,8 @@ package no.nav.helse.person import java.util.Objects import java.util.UUID import no.nav.helse.etterlevelse.KontekstType +import no.nav.helse.memento.DokumentsporingMemento +import no.nav.helse.memento.DokumenttypeMemento class Dokumentsporing private constructor(private val id: UUID, private val dokumentType: DokumentType) { @@ -49,5 +51,21 @@ class Dokumentsporing private constructor(private val id: UUID, private val doku return Objects.hash(id, dokumentType) } override fun toString() = "$dokumentType ($id)" + + internal fun memento() = DokumentsporingMemento( + id = this.id, + type = when (dokumentType) { + DokumentType.Sykmelding -> DokumenttypeMemento.Sykmelding + DokumentType.Søknad -> DokumenttypeMemento.Søknad + DokumentType.InntektsmeldingInntekt -> DokumenttypeMemento.InntektsmeldingInntekt + DokumentType.InntektsmeldingDager -> DokumenttypeMemento.InntektsmeldingDager + DokumentType.OverstyrTidslinje -> DokumenttypeMemento.OverstyrTidslinje + DokumentType.OverstyrInntekt -> DokumenttypeMemento.OverstyrInntekt + DokumentType.OverstyrRefusjon -> DokumenttypeMemento.OverstyrRefusjon + DokumentType.OverstyrArbeidsgiveropplysninger -> DokumenttypeMemento.OverstyrArbeidsgiveropplysninger + DokumentType.OverstyrArbeidsforhold -> DokumenttypeMemento.OverstyrArbeidsforhold + DokumentType.SkjønnsmessigFastsettelse -> DokumenttypeMemento.SkjønnsmessigFastsettelse + } + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/ForkastetVedtaksperiode.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/ForkastetVedtaksperiode.kt index 004a2c0104..38db53fcf5 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/ForkastetVedtaksperiode.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/ForkastetVedtaksperiode.kt @@ -1,11 +1,9 @@ package no.nav.helse.person -import java.util.UUID -import no.nav.helse.person.Vedtaksperiode.Companion.iderMedUtbetaling +import no.nav.helse.memento.ForkastetVedtaksperiodeMemento import no.nav.helse.person.Vedtaksperiode.Companion.slåSammenForkastedeSykdomstidslinjer import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import no.nav.helse.sykdomstidslinje.Sykdomstidslinje -import no.nav.helse.sykdomstidslinje.SykdomstidslinjeHendelse import no.nav.helse.utbetalingstidslinje.Arbeidsgiverperiode internal class ForkastetVedtaksperiode( @@ -44,4 +42,6 @@ internal class ForkastetVedtaksperiode( .filter { arbeidsgiverperiode.hørerTil(it.periode()) } } + + internal fun memento() = ForkastetVedtaksperiodeMemento(vedtaksperiode.memento()) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Generasjoner.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Generasjoner.kt index f9a2d8d493..4e67c7d3a1 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Generasjoner.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Generasjoner.kt @@ -14,6 +14,12 @@ import no.nav.helse.hendelser.utbetaling.AnnullerUtbetaling import no.nav.helse.hendelser.utbetaling.UtbetalingHendelse import no.nav.helse.hendelser.utbetaling.Utbetalingsavgjørelse import no.nav.helse.hendelser.utbetaling.avvist +import no.nav.helse.memento.AvsenderMemento +import no.nav.helse.memento.GenerasjonEndringMemento +import no.nav.helse.memento.GenerasjonMemento +import no.nav.helse.memento.GenerasjonTilstandMemento +import no.nav.helse.memento.GenerasjonerMemento +import no.nav.helse.memento.GenerasjonkildeMemento import no.nav.helse.person.Dokumentsporing.Companion.ider import no.nav.helse.person.Dokumentsporing.Companion.sisteInntektsmeldingId import no.nav.helse.person.Dokumentsporing.Companion.søknadIder @@ -247,6 +253,18 @@ internal class Generasjoner private constructor(generasjoner: List) internal fun accept(visitor: GenerasjonerVisitor) { visitor.preVisitGenerasjonkilde(meldingsreferanseId, innsendt, registert, avsender) } + + internal fun memento() = GenerasjonkildeMemento( + meldingsreferanseId = this.meldingsreferanseId, + innsendt = this.innsendt, + registert = this.registert, + avsender = when (avsender) { + Avsender.SYKMELDT -> AvsenderMemento.SYKMELDT + Avsender.ARBEIDSGIVER -> AvsenderMemento.ARBEIDSGIVER + Avsender.SAKSBEHANDLER -> AvsenderMemento.SAKSBEHANDLER + Avsender.SYSTEM -> AvsenderMemento.SYSTEM + } + ) } @@ -395,6 +413,16 @@ internal class Generasjoner private constructor(generasjoner: List) builder = builder ) } + internal fun memento() = GenerasjonEndringMemento( + id = this.id, + tidsstempel = this.tidsstempel, + sykmeldingsperiode = this.sykmeldingsperiode.memento(), + periode = this.periode.memento(), + vilkårsgrunnlagId = this.grunnlagsdata?.memento()?.vilkårsgrunnlagId, + utbetalingId = this.utbetaling?.memento()?.id, + dokumentsporing = this.dokumentsporing.memento(), + sykdomstidslinje = this.sykdomstidslinje.memento() + ) } internal fun sykdomstidslinje() = endringer.last().sykdomstidslinje @@ -1129,5 +1157,29 @@ enum class Periodetilstand { } } } + + internal fun memento() = GenerasjonMemento( + id = this.id, + tilstand = when (tilstand) { + Tilstand.AnnullertPeriode -> GenerasjonTilstandMemento.ANNULLERT_PERIODE + Tilstand.AvsluttetUtenVedtak -> GenerasjonTilstandMemento.AVSLUTTET_UTEN_VEDTAK + Tilstand.Beregnet -> GenerasjonTilstandMemento.BEREGNET + Tilstand.BeregnetOmgjøring -> GenerasjonTilstandMemento.BEREGNET_OMGJØRING + Tilstand.BeregnetRevurdering -> GenerasjonTilstandMemento.BEREGNET_REVURDERING + Tilstand.RevurdertVedtakAvvist -> GenerasjonTilstandMemento.REVURDERT_VEDTAK_AVVIST + Tilstand.TilInfotrygd -> GenerasjonTilstandMemento.TIL_INFOTRYGD + Tilstand.Uberegnet -> GenerasjonTilstandMemento.UBEREGNET + Tilstand.UberegnetOmgjøring -> GenerasjonTilstandMemento.UBEREGNET_OMGJØRING + Tilstand.UberegnetRevurdering -> GenerasjonTilstandMemento.UBEREGNET_REVURDERING + Tilstand.VedtakFattet -> GenerasjonTilstandMemento.VEDTAK_FATTET + Tilstand.VedtakIverksatt -> GenerasjonTilstandMemento.VEDTAK_IVERKSATT + }, + endringer = this.endringer.map { it.memento() }, + vedtakFattet = this.vedtakFattet, + avsluttet = this.avsluttet, + kilde = this.kilde.memento() + ) } + + internal fun memento() = GenerasjonerMemento(generasjoner = this.generasjoner.map { it.memento() }) } \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Opptjening.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Opptjening.kt index 4a5e0af68e..87d2d6b820 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Opptjening.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Opptjening.kt @@ -7,6 +7,9 @@ import no.nav.helse.hendelser.OverstyrArbeidsforhold import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.somPeriode import no.nav.helse.hendelser.til +import no.nav.helse.memento.ArbeidsforholdMemento +import no.nav.helse.memento.ArbeidsgiverOpptjeningsgrunnlagMemento +import no.nav.helse.memento.OpptjeningMemento import no.nav.helse.person.Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Arbeidsforhold.Companion.ansattVedSkjæringstidspunkt import no.nav.helse.person.Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Arbeidsforhold.Companion.opptjeningsperiode import no.nav.helse.person.Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Arbeidsforhold.Companion.toEtterlevelseMap @@ -148,6 +151,11 @@ internal class Opptjening private constructor( } } + internal fun memento() = ArbeidsforholdMemento( + ansattFom = this.ansattFom, + ansattTom = this.ansattTom, + deaktivert = this.deaktivert + ) } companion object { @@ -167,6 +175,11 @@ internal class Opptjening private constructor( internal fun List.arbeidsforholdForJurist() = flatMap { it.ansattPerioder.toEtterlevelseMap(it.orgnummer) } } + + internal fun memento() = ArbeidsgiverOpptjeningsgrunnlagMemento( + orgnummer = this.orgnummer, + ansattPerioder = this.ansattPerioder.map { it.memento() } + ) } companion object { @@ -192,4 +205,9 @@ internal class Opptjening private constructor( return opptjening } } + + internal fun memento() = OpptjeningMemento( + arbeidsforhold = this.arbeidsforhold.map { it.memento() }, + opptjeningsperiode = this.opptjeningsperiode.memento() + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Person.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Person.kt index 00fb730fc5..476df2fe61 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Person.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Person.kt @@ -43,6 +43,7 @@ import no.nav.helse.hendelser.utbetaling.AnnullerUtbetaling import no.nav.helse.hendelser.utbetaling.UtbetalingHendelse import no.nav.helse.hendelser.utbetaling.Utbetalingpåminnelse import no.nav.helse.hendelser.utbetaling.Utbetalingsgodkjenning +import no.nav.helse.memento.PersonMemento import no.nav.helse.person.Arbeidsgiver.Companion.avklarSykepengegrunnlag import no.nav.helse.person.Arbeidsgiver.Companion.beregnFeriepengerForAlleArbeidsgivere import no.nav.helse.person.Arbeidsgiver.Companion.finn @@ -861,5 +862,15 @@ class Person private constructor( internal fun vurderOmSøknadIkkeKanHåndteres(hendelse: IAktivitetslogg, vedtaksperiode: Vedtaksperiode, arbeidsgiver: Arbeidsgiver) = arbeidsgiver.vurderOmSøknadIkkeKanHåndteres(hendelse, vedtaksperiode, arbeidsgivere) + + fun memento() = PersonMemento( + aktørId = aktørId, + fødselsnummer = personidentifikator.toString(), + alder = alder.memento(), + arbeidsgivere = arbeidsgivere.map { it.memento() }, + opprettet = opprettet, + infotrygdhistorikk = infotrygdhistorikk.memento(), + vilkårsgrunnlagHistorikk = vilkårsgrunnlagHistorikk.memento() + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Sykmeldingsperioder.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Sykmeldingsperioder.kt index 949b26a6be..0e5d46b7e9 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Sykmeldingsperioder.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Sykmeldingsperioder.kt @@ -4,6 +4,7 @@ import java.time.LocalDate import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.Sykmelding import no.nav.helse.hendelser.inntektsmelding.DagerFraInntektsmelding +import no.nav.helse.memento.SykmeldingsperioderMemento internal class Sykmeldingsperioder( private var perioder: List = listOf() @@ -29,6 +30,8 @@ internal class Sykmeldingsperioder( internal fun overlappendePerioder(dager: DagerFraInntektsmelding) = dager.overlappendeSykmeldingsperioder(perioder) + + internal fun memento() = SykmeldingsperioderMemento(perioder = this.perioder.map { it.memento() }) } internal interface SykmeldingsperioderVisitor { diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Vedtaksperiode.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Vedtaksperiode.kt index 9f0c1e877c..6bf5591c3b 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Vedtaksperiode.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Vedtaksperiode.kt @@ -37,6 +37,8 @@ import no.nav.helse.hendelser.utbetaling.AnnullerUtbetaling import no.nav.helse.hendelser.utbetaling.UtbetalingHendelse import no.nav.helse.hendelser.utbetaling.Utbetalingsavgjørelse import no.nav.helse.hendelser.utbetaling.Utbetalingsgodkjenning +import no.nav.helse.memento.VedtaksperiodeMemento +import no.nav.helse.memento.VedtaksperiodetilstandMemento import no.nav.helse.memoized import no.nav.helse.person.Arbeidsgiver.Companion.avventerSøknad import no.nav.helse.person.Arbeidsgiver.Companion.harNødvendigInntektForVilkårsprøving @@ -2719,6 +2721,33 @@ internal class Vedtaksperiode private constructor( ).maxOf { it.periode.endInclusive } } + + internal fun memento() = VedtaksperiodeMemento( + id = id, + tilstand = when (tilstand) { + Avsluttet -> VedtaksperiodetilstandMemento.AVSLUTTET + AvsluttetUtenUtbetaling -> VedtaksperiodetilstandMemento.AVSLUTTET_UTEN_UTBETALING + AvventerBlokkerendePeriode -> VedtaksperiodetilstandMemento.AVVENTER_BLOKKERENDE_PERIODE + AvventerGodkjenning -> VedtaksperiodetilstandMemento.AVVENTER_GODKJENNING + AvventerGodkjenningRevurdering -> VedtaksperiodetilstandMemento.AVVENTER_GODKJENNING_REVURDERING + AvventerHistorikk -> VedtaksperiodetilstandMemento.AVVENTER_HISTORIKK + AvventerHistorikkRevurdering -> VedtaksperiodetilstandMemento.AVVENTER_HISTORIKK_REVURDERING + AvventerInfotrygdHistorikk -> VedtaksperiodetilstandMemento.AVVENTER_INFOTRYGDHISTORIKK + AvventerInntektsmelding -> VedtaksperiodetilstandMemento.AVVENTER_INNTEKTSMELDING + AvventerRevurdering -> VedtaksperiodetilstandMemento.AVVENTER_REVURDERING + AvventerSimulering -> VedtaksperiodetilstandMemento.AVVENTER_SIMULERING + AvventerSimuleringRevurdering -> VedtaksperiodetilstandMemento.AVVENTER_SIMULERING_REVURDERING + AvventerVilkårsprøving -> VedtaksperiodetilstandMemento.AVVENTER_VILKÅRSPRØVING + AvventerVilkårsprøvingRevurdering -> VedtaksperiodetilstandMemento.AVVENTER_VILKÅRSPRØVING_REVURDERING + RevurderingFeilet -> VedtaksperiodetilstandMemento.REVURDERING_FEILET + Start -> VedtaksperiodetilstandMemento.START + TilInfotrygd -> VedtaksperiodetilstandMemento.TIL_INFOTRYGD + TilUtbetaling -> VedtaksperiodetilstandMemento.TIL_UTBETALING + }, + generasjoner = generasjoner.memento(), + opprettet = opprettet, + oppdatert = oppdatert + ) } internal typealias VedtaksperiodeFilter = (Vedtaksperiode) -> Boolean diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikk.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikk.kt" index f3bd5cb370..8b215b8a16 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikk.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikk.kt" @@ -15,6 +15,12 @@ import no.nav.helse.hendelser.OverstyrArbeidsgiveropplysninger import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.SkjønnsmessigFastsettelse import no.nav.helse.hendelser.til +import no.nav.helse.memento.MedlemskapsvurderingMemento +import no.nav.helse.memento.OpptjeningMemento +import no.nav.helse.memento.SykepengegrunnlagMemento +import no.nav.helse.memento.VilkårsgrunnlagInnslagMemento +import no.nav.helse.memento.VilkårsgrunnlagMemento +import no.nav.helse.memento.VilkårsgrunnlaghistorikkMemento import no.nav.helse.person.Sykefraværstilfelleeventyr.Companion.erAktivtSkjæringstidspunkt import no.nav.helse.person.VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement.Companion.skjæringstidspunktperioder import no.nav.helse.person.aktivitetslogg.Aktivitetskontekst @@ -197,6 +203,12 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori elementer: Map ): Innslag = Innslag(id, opprettet, elementer.toMutableMap()) } + + internal fun memento() = VilkårsgrunnlagInnslagMemento( + id = this.id, + opprettet = this.opprettet, + vilkårsgrunnlag = this.vilkårsgrunnlag.map { it.value.memento() } + ) } internal abstract class VilkårsgrunnlagElement( @@ -418,6 +430,15 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori .maxByOrNull { it.skjæringstidspunkt } } } + + internal fun memento(): VilkårsgrunnlagMemento = + memento(vilkårsgrunnlagId, skjæringstidspunkt, sykepengegrunnlag.memento(), opptjening?.memento()) + protected abstract fun memento( + vilkårsgrunnlagId: UUID, + skjæringstidspunkt: LocalDate, + sykepengegrunnlag: SykepengegrunnlagMemento, + opptjening: OpptjeningMemento? + ): VilkårsgrunnlagMemento } internal class Grunnlagsdata( @@ -504,6 +525,26 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori vilkårsgrunnlagId = UUID.randomUUID() ) } + + override fun memento( + vilkårsgrunnlagId: UUID, + skjæringstidspunkt: LocalDate, + sykepengegrunnlag: SykepengegrunnlagMemento, + opptjening: OpptjeningMemento? + ) = VilkårsgrunnlagMemento.Spleis( + vilkårsgrunnlagId = vilkårsgrunnlagId, + skjæringstidspunkt = skjæringstidspunkt, + sykepengegrunnlag = sykepengegrunnlag, + opptjening = opptjening, + medlemskapstatus = when (medlemskapstatus) { + Medlemskapsvurdering.Medlemskapstatus.Ja -> MedlemskapsvurderingMemento.Ja + Medlemskapsvurdering.Medlemskapstatus.Nei -> MedlemskapsvurderingMemento.Nei + Medlemskapsvurdering.Medlemskapstatus.VetIkke -> MedlemskapsvurderingMemento.VetIkke + Medlemskapsvurdering.Medlemskapstatus.UavklartMedBrukerspørsmål -> MedlemskapsvurderingMemento.UavklartMedBrukerspørsmål + }, + vurdertOk = vurdertOk, + meldingsreferanseId = meldingsreferanseId + ) } internal class InfotrygdVilkårsgrunnlag( @@ -564,10 +605,21 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori result = 31 * result + sykepengegrunnlag.hashCode() return result } + + override fun memento( + vilkårsgrunnlagId: UUID, + skjæringstidspunkt: LocalDate, + sykepengegrunnlag: SykepengegrunnlagMemento, + opptjening: OpptjeningMemento? + ) = VilkårsgrunnlagMemento.Infotrygd(vilkårsgrunnlagId, skjæringstidspunkt, sykepengegrunnlag, opptjening) } internal companion object { internal fun ferdigVilkårsgrunnlagHistorikk(innslag: List) = VilkårsgrunnlagHistorikk(innslag.toMutableList()) } + + fun memento() = VilkårsgrunnlaghistorikkMemento( + historikk = this.historikk.map { it.memento() } + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Friperiode.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Friperiode.kt index bd70f0ae5c..4b78f092a5 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Friperiode.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Friperiode.kt @@ -1,6 +1,7 @@ package no.nav.helse.person.infotrygdhistorikk import java.time.LocalDate +import no.nav.helse.memento.InfotrygdFerieperiodeMemento import no.nav.helse.person.InfotrygdperiodeVisitor import no.nav.helse.sykdomstidslinje.SykdomshistorikkHendelse.Hendelseskilde import no.nav.helse.sykdomstidslinje.Sykdomstidslinje @@ -21,4 +22,6 @@ class Friperiode(fom: LocalDate, tom: LocalDate) : Infotrygdperiode(fom, tom) { override fun accept(visitor: InfotrygdperiodeVisitor) { visitor.visitInfotrygdhistorikkFerieperiode(this, periode.start, periode.endInclusive) } + + internal fun memento() = InfotrygdFerieperiodeMemento(periode.memento()) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Infotrygdhistorikk.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Infotrygdhistorikk.kt index 73e2200ccc..8f127690b5 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Infotrygdhistorikk.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Infotrygdhistorikk.kt @@ -6,6 +6,7 @@ import java.util.UUID import no.nav.helse.etterlevelse.SubsumsjonObserver import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.til +import no.nav.helse.memento.InfotrygdhistorikkMemento import no.nav.helse.person.InfotrygdhistorikkVisitor import no.nav.helse.person.Person import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Companion.utbetalingshistorikk @@ -162,4 +163,8 @@ internal class Infotrygdhistorikk private constructor( if (!harHistorikk()) return true return siste.ingenUtbetalingerMellom(organisasjonsnummer, periode) } + + internal fun memento() = InfotrygdhistorikkMemento( + elementer = this.elementer.map { it.memento() } + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkElement.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkElement.kt index c37fc3d9a3..3935da98ef 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkElement.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkElement.kt @@ -4,6 +4,7 @@ import java.time.LocalDate import java.time.LocalDateTime import java.util.UUID import no.nav.helse.hendelser.Periode +import no.nav.helse.memento.InfotrygdhistorikkelementMemento import no.nav.helse.person.InfotrygdhistorikkVisitor import no.nav.helse.person.Person import no.nav.helse.person.SykdomstidslinjeVisitor @@ -198,5 +199,16 @@ class InfotrygdhistorikkElement private constructor( } } + internal fun memento() = InfotrygdhistorikkelementMemento( + id = this.id, + tidsstempel = this.tidsstempel, + hendelseId = this.hendelseId, + ferieperioder = this.perioder.filterIsInstance().map { it.memento() }, + arbeidsgiverutbetalingsperioder = this.perioder.filterIsInstance().map { it.memento() }, + personutbetalingsperioder = this.perioder.filterIsInstance().map { it.memento() }, + inntekter = this.inntekter.map { it.memento() }, + arbeidskategorikoder = this.arbeidskategorikoder, + oppdatert = this.oppdatert + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Inntektsopplysning.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Inntektsopplysning.kt index c184bb9d9c..9d7df1aa4f 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Inntektsopplysning.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Inntektsopplysning.kt @@ -2,6 +2,7 @@ package no.nav.helse.person.infotrygdhistorikk import java.time.LocalDate import java.time.LocalDateTime +import no.nav.helse.memento.InfotrygdInntektsopplysningMemento import no.nav.helse.person.InfotrygdhistorikkVisitor import no.nav.helse.økonomi.Inntekt @@ -54,4 +55,13 @@ class Inntektsopplysning private constructor( lagret = lagret ) } + + internal fun memento() = InfotrygdInntektsopplysningMemento( + orgnummer = orgnummer, + sykepengerFom = sykepengerFom, + inntekt = inntekt.memento(), + refusjonTilArbeidsgiver = refusjonTilArbeidsgiver, + refusjonTom = refusjonTom, + lagret = lagret + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Utbetalingsperiode.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Utbetalingsperiode.kt index 05ecb3b4b9..7faa681119 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Utbetalingsperiode.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Utbetalingsperiode.kt @@ -3,6 +3,8 @@ package no.nav.helse.person.infotrygdhistorikk import java.time.LocalDate import no.nav.helse.erHelg import no.nav.helse.hendelser.Periode +import no.nav.helse.memento.InfotrygdArbeidsgiverutbetalingsperiodeMemento +import no.nav.helse.memento.InfotrygdPersonutbetalingsperiodeMemento import no.nav.helse.person.InfotrygdperiodeVisitor import no.nav.helse.person.Vedtaksperiode.Companion.MINIMALT_TILLATT_AVSTAND_TIL_INFOTRYGD import no.nav.helse.person.aktivitetslogg.IAktivitetslogg @@ -87,6 +89,13 @@ class ArbeidsgiverUtbetalingsperiode(orgnr: String, fom: LocalDate, tom: LocalDa override fun accept(visitor: InfotrygdperiodeVisitor) { visitor.visitInfotrygdhistorikkArbeidsgiverUtbetalingsperiode(this, orgnr, periode.start, periode.endInclusive, grad, inntekt) } + + internal fun memento() = InfotrygdArbeidsgiverutbetalingsperiodeMemento( + orgnr = orgnr, + periode = periode.memento(), + grad = grad.memento(), + inntekt = inntekt.memento() + ) } class PersonUtbetalingsperiode(orgnr: String, fom: LocalDate, tom: LocalDate, grad: Prosentdel, inntekt: Inntekt) : @@ -95,4 +104,11 @@ class PersonUtbetalingsperiode(orgnr: String, fom: LocalDate, tom: LocalDate, gr override fun accept(visitor: InfotrygdperiodeVisitor) { visitor.visitInfotrygdhistorikkPersonUtbetalingsperiode(this, orgnr, periode.start, periode.endInclusive, grad, inntekt) } + + internal fun memento() = InfotrygdPersonutbetalingsperiodeMemento( + orgnr = orgnr, + periode = periode.memento(), + grad = grad.memento(), + inntekt = inntekt.memento() + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysning.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysning.kt index eeedcf015c..ceb97e7532 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysning.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysning.kt @@ -6,6 +6,7 @@ import no.nav.helse.hendelser.Inntektsmelding import no.nav.helse.hendelser.OverstyrArbeidsgiveropplysninger import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.til +import no.nav.helse.memento.ArbeidsgiverInntektsopplysningMemento import no.nav.helse.person.Arbeidsgiver import no.nav.helse.person.Opptjening import no.nav.helse.person.Person @@ -291,4 +292,11 @@ class ArbeidsgiverInntektsopplysning( this.forEach{it.inntektsopplysning.omregnetÅrsinntekt(builder, it.orgnummer)} } } + + internal fun memento() = ArbeidsgiverInntektsopplysningMemento( + orgnummer = this.orgnummer, + gjelder = this.gjelder.memento(), + inntektsopplysning = this.inntektsopplysning.memento(), + refusjonsopplysninger = this.refusjonsopplysninger.memento() + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysningForSammenligningsgrunnlag.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysningForSammenligningsgrunnlag.kt index b2279e8d25..e3757783ad 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysningForSammenligningsgrunnlag.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysningForSammenligningsgrunnlag.kt @@ -1,5 +1,6 @@ package no.nav.helse.person.inntekt +import no.nav.helse.memento.ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagMemento import no.nav.helse.økonomi.Inntekt import no.nav.helse.økonomi.Inntekt.Companion.summer @@ -37,4 +38,9 @@ internal class ArbeidsgiverInntektsopplysningForSammenligningsgrunnlag( return map { it.rapportertInntekt }.summer() } } + + internal fun memento() = ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagMemento( + orgnummer = this.orgnummer, + inntektsopplysninger = this.inntektsopplysninger.map { it.memento() } + ) } \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/IkkeRapportert.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/IkkeRapportert.kt index 07d173d626..e38016641f 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/IkkeRapportert.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/IkkeRapportert.kt @@ -3,6 +3,8 @@ package no.nav.helse.person.inntekt import java.time.LocalDate import java.time.LocalDateTime import java.util.UUID +import no.nav.helse.memento.InntektMemento +import no.nav.helse.memento.InntektsopplysningMemento import no.nav.helse.økonomi.Inntekt internal class IkkeRapportert( @@ -28,4 +30,7 @@ internal class IkkeRapportert( override fun erSamme(other: Inntektsopplysning): Boolean { return other is IkkeRapportert && this.dato == other.dato } + + override fun memento() = + InntektsopplysningMemento.IkkeRapportertMemento(id, hendelseId, dato, beløp.memento(), tidsstempel) } \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Infotrygd.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Infotrygd.kt index e92dd162d2..770c290255 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Infotrygd.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Infotrygd.kt @@ -3,6 +3,8 @@ package no.nav.helse.person.inntekt import java.time.LocalDate import java.time.LocalDateTime import java.util.UUID +import no.nav.helse.memento.InntektMemento +import no.nav.helse.memento.InntektsopplysningMemento import no.nav.helse.økonomi.Inntekt internal class Infotrygd( @@ -25,4 +27,7 @@ internal class Infotrygd( if (other !is Infotrygd) return false return this.dato == other.dato && this.beløp == other.beløp } + + override fun memento() = + InntektsopplysningMemento.InfotrygdMemento(id, hendelseId, dato, beløp.memento(), tidsstempel) } \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektshistorikk.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektshistorikk.kt index e0c1deacb2..16e1deb214 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektshistorikk.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektshistorikk.kt @@ -2,6 +2,7 @@ package no.nav.helse.person.inntekt import java.time.LocalDate +import no.nav.helse.memento.InntektshistorikkMemento import no.nav.helse.person.InntekthistorikkVisitor import no.nav.helse.person.inntekt.AvklarbarSykepengegrunnlag.Companion.avklarSykepengegrunnlag @@ -27,4 +28,8 @@ internal class Inntektshistorikk private constructor(private val historikk: Muta internal fun avklarSykepengegrunnlag(skjæringstidspunkt: LocalDate, førsteFraværsdag: LocalDate?, skattSykepengegrunnlag: SkattSykepengegrunnlag?): Inntektsopplysning? = historikk.avklarSykepengegrunnlag(skjæringstidspunkt, førsteFraværsdag, skattSykepengegrunnlag) + + internal fun memento() = InntektshistorikkMemento( + historikk = historikk.map { it.memento() } + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsmelding.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsmelding.kt index 4ab7196f9f..c06d593d7d 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsmelding.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsmelding.kt @@ -6,6 +6,8 @@ import java.time.temporal.ChronoUnit import java.util.UUID import no.nav.helse.hendelser.OverstyrArbeidsgiveropplysninger import no.nav.helse.hendelser.Periode +import no.nav.helse.memento.InntektMemento +import no.nav.helse.memento.InntektsopplysningMemento import no.nav.helse.person.Arbeidsgiver import no.nav.helse.person.Person import no.nav.helse.person.PersonObserver @@ -111,4 +113,13 @@ internal class Inntektsmelding( } inntektshistorikk.leggTil(Inntektsmelding(nyDato, hendelseId, beløp, tidsstempel)) } + + override fun memento() = + InntektsopplysningMemento.InntektsmeldingMemento( + id = id, + hendelseId = hendelseId, + dato = dato, + beløp = beløp.memento(), + tidsstempel = tidsstempel + ) } \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsopplysning.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsopplysning.kt index 2211940e25..e0f7a4f9e1 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsopplysning.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsopplysning.kt @@ -7,6 +7,8 @@ import no.nav.helse.etterlevelse.SubsumsjonObserver import no.nav.helse.hendelser.OverstyrArbeidsgiveropplysninger import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.til +import no.nav.helse.memento.InntektMemento +import no.nav.helse.memento.InntektsopplysningMemento import no.nav.helse.person.Arbeidsgiver import no.nav.helse.person.Person import no.nav.helse.person.PersonObserver @@ -139,4 +141,6 @@ abstract class Inntektsopplysning protected constructor( check(all { it is SkjønnsmessigFastsatt } || none { it is SkjønnsmessigFastsatt }) {"Enten så må alle inntektsopplysninger var skjønnsmessig fastsatt, eller så må ingen være det"} } } + + internal abstract fun memento(): InntektsopplysningMemento } \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Refusjonshistorikk.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Refusjonshistorikk.kt index 00a29390a0..25d1d51402 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Refusjonshistorikk.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Refusjonshistorikk.kt @@ -6,6 +6,9 @@ import java.util.UUID import no.nav.helse.forrigeDag import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.til +import no.nav.helse.memento.EndringIRefusjonMemento +import no.nav.helse.memento.RefusjonMemento +import no.nav.helse.memento.RefusjonshistorikkMemento import no.nav.helse.nesteDag import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import no.nav.helse.person.RefusjonshistorikkVisitor @@ -163,7 +166,23 @@ internal class Refusjonshistorikk { internal fun accept(visitor: RefusjonshistorikkVisitor) { visitor.visitEndringIRefusjon(beløp, endringsdato) } + + internal fun memento() = EndringIRefusjonMemento(beløp.memento(), endringsdato) } + + internal fun memento() = RefusjonMemento( + meldingsreferanseId = meldingsreferanseId, + førsteFraværsdag = førsteFraværsdag, + arbeidsgiverperioder = arbeidsgiverperioder.map { it.memento() }, + beløp = beløp?.memento(), + sisteRefusjonsdag = sisteRefusjonsdag, + endringerIRefusjon = endringerIRefusjon.map { it.memento() }, + tidsstempel = tidsstempel + ) } + + internal fun memento() = RefusjonshistorikkMemento( + refusjoner = refusjoner.map { it.memento() } + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Refusjonsopplysninger.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Refusjonsopplysninger.kt index 1d36baec28..bb8f4d5e5f 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Refusjonsopplysninger.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Refusjonsopplysninger.kt @@ -9,6 +9,9 @@ import no.nav.helse.hendelser.Periode.Companion.grupperSammenhengendePerioder import no.nav.helse.hendelser.Periode.Companion.omsluttendePeriode import no.nav.helse.hendelser.Periode.Companion.overlapper import no.nav.helse.hendelser.til +import no.nav.helse.memento.RefusjonshistorikkMemento +import no.nav.helse.memento.RefusjonsopplysningMemento +import no.nav.helse.memento.RefusjonsopplysningerMemento import no.nav.helse.person.RefusjonsopplysningerVisitor import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import no.nav.helse.økonomi.Inntekt @@ -236,6 +239,16 @@ class Refusjonsopplysning( fun build() = Refusjonsopplysninger(emptyList().mergeInnNyeOpplysninger(sorterteRefusjonsopplysninger())) } + + internal fun memento() = RefusjonsopplysningerMemento( + opplysninger = this.validerteRefusjonsopplysninger.map { it.memento() } + ) } + internal fun memento() = RefusjonsopplysningMemento( + meldingsreferanseId = this.meldingsreferanseId, + fom = this.fom, + tom = this.tom, + beløp = this.beløp.memento() + ) } \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Saksbehandler.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Saksbehandler.kt index ccb95ffeb1..2c50247fb6 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Saksbehandler.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Saksbehandler.kt @@ -9,6 +9,8 @@ import no.nav.helse.etterlevelse.Paragraf import no.nav.helse.etterlevelse.SubsumsjonObserver import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.Subsumsjon +import no.nav.helse.memento.InntektMemento +import no.nav.helse.memento.InntektsopplysningMemento import no.nav.helse.person.Arbeidsgiver import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import no.nav.helse.økonomi.Inntekt @@ -112,6 +114,18 @@ class Saksbehandler internal constructor( } + override fun memento() = + InntektsopplysningMemento.SaksbehandlerMemento( + id = id, + hendelseId = hendelseId, + dato = dato, + beløp = beløp.memento(), + tidsstempel = tidsstempel, + forklaring = forklaring, + subsumsjon = subsumsjon?.memento(), + overstyrtInntekt = overstyrtInntekt?.memento()!! + ) + private companion object { private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Sammenligningsgrunnlag.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Sammenligningsgrunnlag.kt index e4401d47bb..5de16bd69a 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Sammenligningsgrunnlag.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Sammenligningsgrunnlag.kt @@ -1,5 +1,6 @@ package no.nav.helse.person.inntekt +import no.nav.helse.memento.SammenligningsgrunnlagMemento import no.nav.helse.person.SammenligningsgrunnlagVisitor import no.nav.helse.person.builders.VedtakFattetBuilder.FastsattISpleisBuilder import no.nav.helse.person.inntekt.ArbeidsgiverInntektsopplysningForSammenligningsgrunnlag.Companion.sammenligningsgrunnlag @@ -31,4 +32,9 @@ internal class Sammenligningsgrunnlag( internal fun build(builder: FastsattISpleisBuilder) { builder.innrapportertÅrsinntekt(sammenligningsgrunnlag) } + + internal fun memento() = SammenligningsgrunnlagMemento( + sammenligningsgrunnlag = this.sammenligningsgrunnlag.memento(), + arbeidsgiverInntektsopplysninger = this.arbeidsgiverInntektsopplysninger.map { it.memento() } + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/SkattSykepengegrunnlag.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/SkattSykepengegrunnlag.kt index 9d8bbb601a..b008434e16 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/SkattSykepengegrunnlag.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/SkattSykepengegrunnlag.kt @@ -4,6 +4,9 @@ import java.time.LocalDate import java.time.LocalDateTime import java.util.UUID import no.nav.helse.etterlevelse.SubsumsjonObserver +import no.nav.helse.memento.AnsattPeriodeMemento +import no.nav.helse.memento.InntektMemento +import no.nav.helse.memento.InntektsopplysningMemento import no.nav.helse.person.inntekt.AnsattPeriode.Companion.harArbeidsforholdNyereEnn import no.nav.helse.person.inntekt.Skatteopplysning.Companion.sisteMåneder import no.nav.helse.person.inntekt.Skatteopplysning.Companion.subsumsjonsformat @@ -134,6 +137,15 @@ internal class SkattSykepengegrunnlag private constructor( tidsstempel = this.tidsstempel ) } + override fun memento() = + InntektsopplysningMemento.SkattSykepengegrunnlagMemento( + id = id, + hendelseId = hendelseId, + dato = dato, + beløp = beløp.memento(), + tidsstempel = tidsstempel, + inntektsopplysninger = inntektsopplysninger.map { it.memento() }, + ansattPerioder = ansattPerioder.map { it.memento() }) } class AnsattPeriode( @@ -151,4 +163,6 @@ class AnsattPeriode( .filter { it.harArbeidetMindreEnn(skjæringstidspunkt, antallMåneder) } .filter { it.gjelder(skjæringstidspunkt) } } + + internal fun memento() = AnsattPeriodeMemento(ansattFom, ansattTom) } \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Skatteopplysning.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Skatteopplysning.kt index d80dec8ee3..257a4cf0d7 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Skatteopplysning.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Skatteopplysning.kt @@ -6,6 +6,8 @@ import java.time.YearMonth import java.util.UUID import no.nav.helse.etterlevelse.Inntektsubsumsjon import no.nav.helse.isWithinRangeOf +import no.nav.helse.memento.InntekttypeMemento +import no.nav.helse.memento.SkatteopplysningMemento import no.nav.helse.økonomi.Inntekt import no.nav.helse.økonomi.Inntekt.Companion.summer @@ -89,4 +91,19 @@ class Skatteopplysning( ) } } + + internal fun memento() = SkatteopplysningMemento( + hendelseId = this.hendelseId, + beløp = this.beløp.memento(), + måned = this.måned, + type = when (this.type) { + Inntekttype.LØNNSINNTEKT -> InntekttypeMemento.LØNNSINNTEKT + Inntekttype.NÆRINGSINNTEKT -> InntekttypeMemento.NÆRINGSINNTEKT + Inntekttype.PENSJON_ELLER_TRYGD -> InntekttypeMemento.PENSJON_ELLER_TRYGD + Inntekttype.YTELSE_FRA_OFFENTLIGE -> InntekttypeMemento.YTELSE_FRA_OFFENTLIGE + }, + fordel = this.fordel, + beskrivelse = this.beskrivelse, + tidsstempel = this.tidsstempel + ) } diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Skj\303\270nnsmessigFastsatt.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Skj\303\270nnsmessigFastsatt.kt" index a962f71104..907cbc9cb8 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Skj\303\270nnsmessigFastsatt.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Skj\303\270nnsmessigFastsatt.kt" @@ -5,6 +5,8 @@ import java.time.LocalDateTime import java.util.UUID import no.nav.helse.etterlevelse.SubsumsjonObserver import no.nav.helse.hendelser.Periode +import no.nav.helse.memento.InntektMemento +import no.nav.helse.memento.InntektsopplysningMemento import no.nav.helse.person.Arbeidsgiver import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import no.nav.helse.økonomi.Inntekt @@ -56,4 +58,13 @@ class SkjønnsmessigFastsatt internal constructor( override fun erSamme(other: Inntektsopplysning) = other is SkjønnsmessigFastsatt && this.dato == other.dato && this.beløp == other.beløp + override fun memento() = + InntektsopplysningMemento.SkjønnsmessigFastsattMemento( + id = id, + hendelseId = hendelseId, + dato = dato, + beløp = beløp.memento(), + tidsstempel = tidsstempel, + overstyrtInntekt = overstyrtInntekt?.memento()!! + ) } \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Sykepengegrunnlag.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Sykepengegrunnlag.kt index 5b774b9538..cc424d1369 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Sykepengegrunnlag.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Sykepengegrunnlag.kt @@ -14,6 +14,7 @@ import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.Periode.Companion.grupperSammenhengendePerioder import no.nav.helse.hendelser.SkjønnsmessigFastsettelse import no.nav.helse.hendelser.til +import no.nav.helse.memento.SykepengegrunnlagMemento import no.nav.helse.person.Arbeidsgiver import no.nav.helse.person.Opptjening import no.nav.helse.person.Person @@ -463,5 +464,13 @@ internal class Sykepengegrunnlag private constructor( internal fun ghosttidslinje(organisasjonsnummer: String, sisteDag: LocalDate) = arbeidsgiverInntektsopplysninger.firstNotNullOfOrNull { it.ghosttidslinje(organisasjonsnummer, sisteDag) } + + internal fun memento() = SykepengegrunnlagMemento( + arbeidsgiverInntektsopplysninger = this.arbeidsgiverInntektsopplysninger.map { it.memento() }, + deaktiverteArbeidsforhold = this.deaktiverteArbeidsforhold.map { it.memento() }, + vurdertInfotrygd = this.vurdertInfotrygd, + sammenligningsgrunnlag = this.sammenligningsgrunnlag.memento(), + `6G` = this.`6G`.memento() + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/serde/JsonBuilder.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/serde/JsonBuilder.kt index e71509200b..13aac82138 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/serde/JsonBuilder.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/serde/JsonBuilder.kt @@ -55,6 +55,9 @@ import no.nav.helse.serde.PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonD import no.nav.helse.serde.PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.PROBLEMDAG import no.nav.helse.serde.PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG import no.nav.helse.serde.PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG_NAV +import no.nav.helse.serde.PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.AvsenderData +import no.nav.helse.serde.PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData +import no.nav.helse.serde.PersonData.UtbetalingstidslinjeData.BegrunnelseData import no.nav.helse.serde.PersonData.UtbetalingstidslinjeData.TypeData import no.nav.helse.serde.api.BuilderState import no.nav.helse.serde.mapping.JsonMedlemskapstatus @@ -106,6 +109,7 @@ fun Person.serialize(pretty: Boolean = false): SerialisertPerson { return SerialisertPerson(if (pretty) jsonBuilder.toPretty() else jsonBuilder.toJson()) } + internal class JsonBuilder : AbstractBuilder() { private lateinit var personBuilder: PersonState @@ -117,7 +121,7 @@ internal class JsonBuilder : AbstractBuilder() { jsonNode = it } } - + internal fun toJson() = build().toString() internal fun toPretty() = build().toPrettyString() override fun toString() = toJson() @@ -1628,15 +1632,15 @@ internal class JsonBuilder : AbstractBuilder() { generasjoner.add(mapOf( "id" to id, "tidsstempel" to tidsstempel, - "tilstand" to PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.tilEnum(tilstand), + "tilstand" to TilstandData.tilEnum(tilstand), "fom" to periode.start, "tom" to periode.endInclusive, - "kilde" to kilde?.let { + "kilde" to kilde.let { mapOf( "meldingsreferanseId" to it.meldingsreferanseId, "innsendt" to it.innsendt, "registrert" to it.registert, - "avsender" to PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.AvsenderData.tilEnum(it.avsender) + "avsender" to AvsenderData.tilEnum(it.avsender) ) }, "vedtakFattet" to vedtakFattet, @@ -1978,14 +1982,14 @@ internal class JsonBuilder : AbstractBuilder() { private val type: TypeData ) { private var økonomiBuilder: ØkonomiJsonBuilder? = null - private var begrunnelser: List? = null + private var begrunnelser: List? = null fun økonomi(økonomi: Økonomi) = apply { this.økonomiBuilder = ØkonomiJsonBuilder().also { økonomi.builder(it) } } fun begrunnelser(begrunnelser: List) = apply { - this.begrunnelser = begrunnelser.map { PersonData.UtbetalingstidslinjeData.BegrunnelseData.fraBegrunnelse(it) } + this.begrunnelser = begrunnelser.map { BegrunnelseData.fraBegrunnelse(it) } } fun build() = mutableMapOf().apply { diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/serde/PersonData.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/serde/PersonData.kt index 8df6e26913..ee62866ca4 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/serde/PersonData.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/serde/PersonData.kt @@ -86,14 +86,14 @@ import no.nav.helse.økonomi.Prosentdel.Companion.prosent import no.nav.helse.økonomi.Økonomi internal data class PersonData( - private val aktørId: String, - private val fødselsnummer: String, - private val fødselsdato: LocalDate, - private val arbeidsgivere: List, - private val opprettet: LocalDateTime, - private val infotrygdhistorikk: List, - private val vilkårsgrunnlagHistorikk: List, - private val dødsdato: LocalDate? + val aktørId: String, + val fødselsnummer: String, + val fødselsdato: LocalDate, + val arbeidsgivere: List, + val opprettet: LocalDateTime, + val infotrygdhistorikk: List, + val vilkårsgrunnlagHistorikk: List, + val dødsdato: LocalDate? ) { private val arbeidsgivereliste = mutableListOf() private val fnr by lazy { fødselsnummer.somPersonidentifikator() } @@ -130,15 +130,15 @@ internal data class PersonData( } data class InfotrygdhistorikkElementData( - private val id: UUID, - private val tidsstempel: LocalDateTime, - private val hendelseId: UUID?, - private val ferieperioder: List, - private val arbeidsgiverutbetalingsperioder: List, - private val personutbetalingsperioder: List, - private val inntekter: List, - private val arbeidskategorikoder: Map, - private val oppdatert: LocalDateTime + val id: UUID, + val tidsstempel: LocalDateTime, + val hendelseId: UUID?, + val ferieperioder: List, + val arbeidsgiverutbetalingsperioder: List, + val personutbetalingsperioder: List, + val inntekter: List, + val arbeidskategorikoder: Map, + val oppdatert: LocalDateTime ) { internal companion object { fun List.tilModellObjekt() = @@ -158,18 +158,18 @@ internal data class PersonData( ) data class FerieperiodeData( - private val fom: LocalDate, - private val tom: LocalDate + val fom: LocalDate, + val tom: LocalDate ) { internal fun parsePeriode() = Friperiode(fom, tom) } data class PersonutbetalingsperiodeData( - private val orgnr: String, - private val fom: LocalDate, - private val tom: LocalDate, - private val grad: Double, - private val inntekt: Int + val orgnr: String, + val fom: LocalDate, + val tom: LocalDate, + val grad: Double, + val inntekt: Int ) { internal fun parsePeriode() = PersonUtbetalingsperiode( orgnr = orgnr, @@ -181,11 +181,11 @@ internal data class PersonData( } data class ArbeidsgiverutbetalingsperiodeData( - private val orgnr: String, - private val fom: LocalDate, - private val tom: LocalDate, - private val grad: Double, - private val inntekt: Int + val orgnr: String, + val fom: LocalDate, + val tom: LocalDate, + val grad: Double, + val inntekt: Int ) { internal fun parsePeriode() = ArbeidsgiverUtbetalingsperiode( orgnr = orgnr, @@ -197,12 +197,12 @@ internal data class PersonData( } data class InntektsopplysningData( - private val orgnr: String, - private val sykepengerFom: LocalDate, - private val inntekt: Double, - private val refusjonTilArbeidsgiver: Boolean, - private val refusjonTom: LocalDate?, - private val lagret: LocalDateTime? + val orgnr: String, + val sykepengerFom: LocalDate, + val inntekt: Double, + val refusjonTilArbeidsgiver: Boolean, + val refusjonTom: LocalDate?, + val lagret: LocalDateTime? ) { internal fun parseInntektsopplysning() = Inntektsopplysning.ferdigInntektsopplysning( orgnummer = orgnr, @@ -232,9 +232,9 @@ internal data class PersonData( } data class VilkårsgrunnlagInnslagData( - private val id: UUID, - private val opprettet: LocalDateTime, - private val vilkårsgrunnlag: List + val id: UUID, + val opprettet: LocalDateTime, + val vilkårsgrunnlag: List ) { private fun tilModellobjekt(builder: VilkårsgrunnlaghistorikkBuilder, alder: Alder) = id to VilkårsgrunnlagHistorikk.Innslag.gjenopprett( id = id, @@ -264,14 +264,14 @@ internal data class PersonData( } data class VilkårsgrunnlagElementData( - private val skjæringstidspunkt: LocalDate, - private val type: GrunnlagsdataType, - private val sykepengegrunnlag: SykepengegrunnlagData, - private val opptjening: OpptjeningData?, - private val medlemskapstatus: JsonMedlemskapstatus?, - private val vurdertOk: Boolean?, - private val meldingsreferanseId: UUID?, - private val vilkårsgrunnlagId: UUID + val skjæringstidspunkt: LocalDate, + val type: GrunnlagsdataType, + val sykepengegrunnlag: SykepengegrunnlagData, + val opptjening: OpptjeningData?, + val medlemskapstatus: JsonMedlemskapstatus?, + val vurdertOk: Boolean?, + val meldingsreferanseId: UUID?, + val vilkårsgrunnlagId: UUID ) { internal fun parseDataForVilkårsvurdering( builder: VilkårsgrunnlaghistorikkBuilder, @@ -306,11 +306,11 @@ internal data class PersonData( } data class SykepengegrunnlagData( - private val grunnbeløp: Double?, - private val arbeidsgiverInntektsopplysninger: List, - private val sammenligningsgrunnlag: SammenligningsgrunnlagData?, - private val deaktiverteArbeidsforhold: List, - private val vurdertInfotrygd: Boolean + val grunnbeløp: Double?, + val arbeidsgiverInntektsopplysninger: List, + val sammenligningsgrunnlag: SammenligningsgrunnlagData?, + val deaktiverteArbeidsforhold: List, + val vurdertInfotrygd: Boolean ) { internal fun parseSykepengegrunnlag( builder: VilkårsgrunnlaghistorikkBuilder, @@ -342,8 +342,8 @@ internal data class PersonData( } data class SammenligningsgrunnlagData( - private val sammenligningsgrunnlag: Double, - private val arbeidsgiverInntektsopplysninger: List, + val sammenligningsgrunnlag: Double, + val arbeidsgiverInntektsopplysninger: List, ) { internal fun parseSammenligningsgrunnlag(): Sammenligningsgrunnlag = Sammenligningsgrunnlag( @@ -353,11 +353,11 @@ internal data class PersonData( } data class ArbeidsgiverInntektsopplysningData( - private val orgnummer: String, - private val fom: LocalDate, - private val tom: LocalDate, - private val inntektsopplysning: InntektsopplysningData, - private val refusjonsopplysninger: List + val orgnummer: String, + val fom: LocalDate, + val tom: LocalDate, + val inntektsopplysning: InntektsopplysningData, + val refusjonsopplysninger: List ) { companion object { private fun List.tilModellobjekt() = @@ -370,33 +370,33 @@ internal data class PersonData( } data class SkatteopplysningData( - private val hendelseId: UUID, - private val beløp: Double, - private val måned: YearMonth, - private val type: String, - private val fordel: String, - private val beskrivelse: String, - private val tidsstempel: LocalDateTime + val hendelseId: UUID, + val beløp: Double, + val måned: YearMonth, + val type: String, + val fordel: String, + val beskrivelse: String, + val tidsstempel: LocalDateTime ) { internal fun tilModellobjekt() = Skatteopplysning(hendelseId, beløp.månedlig, måned, enumValueOf(type), fordel, beskrivelse, tidsstempel) } data class InntektsopplysningData( - private val id: UUID, - private val dato: LocalDate, - private val hendelseId: UUID, - private val beløp: Double?, - private val kilde: String, - private val forklaring: String?, - private val subsumsjon: SubsumsjonData?, - private val tidsstempel: LocalDateTime, - private val overstyrtInntektId: UUID?, - private val skatteopplysninger: List? + val id: UUID, + val dato: LocalDate, + val hendelseId: UUID, + val beløp: Double?, + val kilde: String, + val forklaring: String?, + val subsumsjon: SubsumsjonData?, + val tidsstempel: LocalDateTime, + val overstyrtInntektId: UUID?, + val skatteopplysninger: List? ) { data class SubsumsjonData( - private val paragraf: String, - private val ledd: Int?, - private val bokstav: String? + val paragraf: String, + val ledd: Int?, + val bokstav: String? ) { internal fun tilModellobjekt() = Subsumsjon(paragraf, ledd, bokstav) } @@ -469,8 +469,8 @@ internal data class PersonData( } data class ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagData( - private val orgnummer: String, - private val skatteopplysninger: List + val orgnummer: String, + val skatteopplysninger: List ) { companion object { internal fun List.parseArbeidsgiverInntektsopplysninger(): List = @@ -479,13 +479,13 @@ internal data class PersonData( } } data class SammenligningsgrunnlagInntektsopplysningData( - private val hendelseId: UUID, - private val beløp: Double, - private val måned: YearMonth, - private val type: InntekttypeData, - private val fordel: String, - private val beskrivelse: String, - private val tidsstempel: LocalDateTime, + val hendelseId: UUID, + val beløp: Double, + val måned: YearMonth, + val type: InntekttypeData, + val fordel: String, + val beskrivelse: String, + val tidsstempel: LocalDateTime, ) { internal enum class InntekttypeData { LØNNSINNTEKT, @@ -514,9 +514,9 @@ internal data class PersonData( } data class OpptjeningData( - private val opptjeningFom: LocalDate, - private val opptjeningTom: LocalDate, - private val arbeidsforhold: List + val opptjeningFom: LocalDate, + val opptjeningTom: LocalDate, + val arbeidsforhold: List ) { fun tilOpptjening(skjæringstidspunkt: LocalDate) = Opptjening.gjenopprett( skjæringstidspunkt = skjæringstidspunkt, @@ -525,8 +525,8 @@ internal data class PersonData( ) data class ArbeidsgiverOpptjeningsgrunnlagData( - private val orgnummer: String, - private val ansattPerioder: List + val orgnummer: String, + val ansattPerioder: List ) { data class ArbeidsforholdData( val ansattFom: LocalDate, @@ -551,24 +551,28 @@ internal data class PersonData( } data class ArbeidsgiverData( - private val organisasjonsnummer: String, - private val id: UUID, - private val inntektshistorikk: List = listOf(), - private val sykdomshistorikk: List, - private val sykmeldingsperioder: List, - private val vedtaksperioder: List, - private val forkastede: List, - private val utbetalinger: List, - private val feriepengeutbetalinger: List = emptyList(), - private val refusjonshistorikk: List + val organisasjonsnummer: String, + val id: UUID, + val inntektshistorikk: List = listOf(), + val sykdomshistorikk: List, + val sykmeldingsperioder: List, + val vedtaksperioder: List, + val forkastede: List, + val utbetalinger: List, + val feriepengeutbetalinger: List = emptyList(), + val refusjonshistorikk: List ) { - private val modelSykdomshistorikk = SykdomshistorikkData.parseSykdomshistorikk(sykdomshistorikk) + private val modelSykdomshistorikk by lazy { SykdomshistorikkData.parseSykdomshistorikk(sykdomshistorikk) } private val vedtaksperiodeliste = mutableListOf() private val forkastedeliste = mutableListOf() - private val modelUtbetalinger = utbetalinger.fold(emptyList>()) { andreUtbetalinger, utbetalingen -> - andreUtbetalinger.plus(utbetalingen.id to utbetalingen.konverterTilUtbetaling(andreUtbetalinger)) - }.map(Pair<*, Utbetaling>::second) - private val utbetalingMap = utbetalinger.zip(modelUtbetalinger) { data, utbetaling -> data.id to utbetaling }.toMap() + private val modelUtbetalinger by lazy { + utbetalinger.fold(emptyList>()) { andreUtbetalinger, utbetalingen -> + andreUtbetalinger.plus(utbetalingen.id to utbetalingen.konverterTilUtbetaling(andreUtbetalinger)) + }.map(Pair<*, Utbetaling>::second) + } + private val utbetalingMap by lazy { + utbetalinger.zip(modelUtbetalinger) { data, utbetaling -> data.id to utbetaling }.toMap() + } internal fun konverterTilArbeidsgiver( person: Person, @@ -627,11 +631,11 @@ internal data class PersonData( } data class InntektsmeldingData( - private val id: UUID, - private val dato: LocalDate, - private val hendelseId: UUID, - private val beløp: Double, - private val tidsstempel: LocalDateTime + val id: UUID, + val dato: LocalDate, + val hendelseId: UUID, + val beløp: Double, + val tidsstempel: LocalDateTime ) { internal fun tilModellobjekt() = Inntektsmelding( @@ -644,10 +648,10 @@ internal data class PersonData( } data class RefusjonsopplysningData( - private val meldingsreferanseId: UUID, - private val fom: LocalDate, - private val tom: LocalDate?, - private val beløp: Double + val meldingsreferanseId: UUID, + val fom: LocalDate, + val tom: LocalDate?, + val beløp: Double ) { internal fun tilModellobjekt() = Refusjonsopplysning(meldingsreferanseId, fom, tom, beløp.månedlig) } @@ -656,9 +660,9 @@ internal data class PersonData( fun tilModellobjekt() = Periode(fom, tom) } data class SykdomstidslinjeData( - private val dager: List, - private val periode: PeriodeData?, - private val låstePerioder: List + val dager: List, + val periode: PeriodeData?, + val låstePerioder: List? ) { private val dagerMap: Map = DagData.parseDager(dager) @@ -666,19 +670,18 @@ internal data class PersonData( Sykdomstidslinje.ferdigSykdomstidslinje( dager = dagerMap, periode = periode?.tilModellobjekt(), - perioder = låstePerioder.map { it.tilModellobjekt() } + perioder = låstePerioder?.map { it.tilModellobjekt() } ?: mutableListOf() ) data class DagData( - private val type: JsonDagType, - private val kilde: KildeData, - private val grad: Double, - private val other: KildeData?, - private val melding: String? + val type: JsonDagType, + val kilde: KildeData, + val grad: Double, + val other: KildeData?, + val melding: String? ) { - // Gjør så vi kan ha dato/fom og tom på samme nivå som resten av verdiene i dag @JsonUnwrapped - private lateinit var datoer: DateRange + lateinit var datoer: DateRange internal companion object { internal fun parseDager(dager: List): Map = @@ -746,9 +749,9 @@ internal data class PersonData( } data class KildeData( - private val type: String, - private val id: UUID, - private val tidsstempel: LocalDateTime + val type: String, + val id: UUID, + val tidsstempel: LocalDateTime ) { internal fun parseKilde() = Hendelseskilde(type, id, tidsstempel) } @@ -759,18 +762,18 @@ internal data class PersonData( ) data class FeriepengeutbetalingData( - private val infotrygdFeriepengebeløpPerson: Double, - private val infotrygdFeriepengebeløpArbeidsgiver: Double, - private val spleisFeriepengebeløpArbeidsgiver: Double, - private val spleisFeriepengebeløpPerson: Double, - private val oppdrag: OppdragData, - private val personoppdrag: OppdragData, - private val opptjeningsår: Year, - private val utbetalteDager: List, - private val feriepengedager: List, - private val utbetalingId: UUID, - private val sendTilOppdrag: Boolean, - private val sendPersonoppdragTilOS: Boolean, + val infotrygdFeriepengebeløpPerson: Double, + val infotrygdFeriepengebeløpArbeidsgiver: Double, + val spleisFeriepengebeløpArbeidsgiver: Double, + val spleisFeriepengebeløpPerson: Double, + val oppdrag: OppdragData, + val personoppdrag: OppdragData, + val opptjeningsår: Year, + val utbetalteDager: List, + val feriepengedager: List, + val utbetalingId: UUID, + val sendTilOppdrag: Boolean, + val sendPersonoppdragTilOS: Boolean, ) { internal fun createFeriepengeutbetaling(alder: Alder): Feriepengeutbetaling { val feriepengeberegner = createFeriepengeberegner(alder) @@ -797,10 +800,10 @@ internal data class PersonData( } data class UtbetaltDagData( - internal val type: String, - private val orgnummer: String, - private val dato: LocalDate, - private val beløp: Int, + val type: String, + val orgnummer: String, + val dato: LocalDate, + val beløp: Int, ) { internal fun createUtbetaltDag() = when (type) { @@ -815,22 +818,22 @@ internal data class PersonData( } data class SykmeldingsperiodeData( - private val fom: LocalDate, - private val tom: LocalDate + val fom: LocalDate, + val tom: LocalDate ) { internal fun tilPeriode() = fom til tom } data class VedtaksperiodeData( - private val id: UUID, - private val tilstand: TilstandType, - private val generasjoner: List, - private val opprettet: LocalDateTime, - private val oppdatert: LocalDateTime + val id: UUID, + val tilstand: TilstandType, + val generasjoner: List, + val opprettet: LocalDateTime, + val oppdatert: LocalDateTime ) { data class DokumentsporingData( - private val dokumentId: UUID, - private val dokumenttype: DokumentTypeData + val dokumentId: UUID, + val dokumenttype: DokumentTypeData ) { fun tilModellobjekt() = dokumenttype.tilModelltype(dokumentId) } @@ -850,12 +853,12 @@ internal data class PersonData( } data class GenerasjonData( - private val id: UUID, - private val tilstand: TilstandData, - private val vedtakFattet: LocalDateTime?, - private val avsluttet: LocalDateTime?, - private val kilde: KildeData, - private val endringer: List + val id: UUID, + val tilstand: TilstandData, + val vedtakFattet: LocalDateTime?, + val avsluttet: LocalDateTime?, + val kilde: KildeData, + val endringer: List ) { internal enum class TilstandData { UBEREGNET, UBEREGNET_OMGJØRING, UBEREGNET_REVURDERING, BEREGNET, BEREGNET_OMGJØRING, BEREGNET_REVURDERING, VEDTAK_FATTET, REVURDERT_VEDTAK_AVVIST, VEDTAK_IVERKSATT, AVSLUTTET_UTEN_VEDTAK, TIL_INFOTRYGD; @@ -921,16 +924,16 @@ internal data class PersonData( } data class EndringData( - private val id: UUID, + val id: UUID, val tidsstempel: LocalDateTime, - private val sykmeldingsperiodeFom: LocalDate, - private val sykmeldingsperiodeTom: LocalDate, - private val fom: LocalDate, - private val tom: LocalDate, - private val utbetalingId: UUID?, - private val vilkårsgrunnlagId: UUID?, - private val sykdomstidslinje: SykdomstidslinjeData, - private val dokumentsporing: DokumentsporingData + val sykmeldingsperiodeFom: LocalDate, + val sykmeldingsperiodeTom: LocalDate, + val fom: LocalDate, + val tom: LocalDate, + val utbetalingId: UUID?, + val vilkårsgrunnlagId: UUID?, + val sykdomstidslinje: SykdomstidslinjeData, + val dokumentsporing: DokumentsporingData ) { fun tilModellobjekt(grunnlagoppslag: (UUID) -> VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement, utbetalinger: Map) = Generasjoner.Generasjon.Endring( @@ -994,8 +997,8 @@ internal data class PersonData( } data class DataForSimuleringData( - private val totalbeløp: Int, - private val perioder: List + val totalbeløp: Int, + val perioder: List ) { internal fun parseDataForSimulering() = SimuleringResultat( totalbeløp = totalbeløp, @@ -1003,9 +1006,9 @@ internal data class PersonData( ) data class SimulertPeriode( - private val fom: LocalDate, - private val tom: LocalDate, - private val utbetalinger: List + val fom: LocalDate, + val tom: LocalDate, + val utbetalinger: List ) { internal fun parsePeriode(): SimuleringResultat.SimulertPeriode { @@ -1017,10 +1020,10 @@ internal data class PersonData( } data class SimulertUtbetaling( - private val forfallsdato: LocalDate, - private val utbetalesTil: Mottaker, - private val feilkonto: Boolean, - private val detaljer: List + val forfallsdato: LocalDate, + val utbetalesTil: Mottaker, + val feilkonto: Boolean, + val detaljer: List ) { internal fun parseUtbetaling(): SimuleringResultat.SimulertUtbetaling { return SimuleringResultat.SimulertUtbetaling( @@ -1036,16 +1039,16 @@ internal data class PersonData( } data class Detaljer( - private val fom: LocalDate, - private val tom: LocalDate, - private val konto: String, - private val beløp: Int, - private val klassekode: Klassekode, - private val uføregrad: Int, - private val utbetalingstype: String, - private val tilbakeføring: Boolean, - private val sats: Sats, - private val refunderesOrgnummer: String + val fom: LocalDate, + val tom: LocalDate, + val konto: String, + val beløp: Int, + val klassekode: Klassekode, + val uføregrad: Int, + val utbetalingstype: String, + val tilbakeføring: Boolean, + val sats: Sats, + val refunderesOrgnummer: String ) { internal fun parseDetaljer(): SimuleringResultat.Detaljer { return SimuleringResultat.Detaljer( @@ -1088,13 +1091,13 @@ internal data class PersonData( } data class RefusjonData( - private val meldingsreferanseId: UUID, - private val førsteFraværsdag: LocalDate?, - private val arbeidsgiverperioder: List, - private val beløp: Double?, - private val sisteRefusjonsdag: LocalDate?, - private val endringerIRefusjon: List, - private val tidsstempel: LocalDateTime + val meldingsreferanseId: UUID, + val førsteFraværsdag: LocalDate?, + val arbeidsgiverperioder: List, + val beløp: Double?, + val sisteRefusjonsdag: LocalDate?, + val endringerIRefusjon: List, + val tidsstempel: LocalDateTime ) { internal companion object { internal fun List.parseRefusjon() = Refusjonshistorikk().apply { @@ -1115,8 +1118,8 @@ internal data class PersonData( } data class EndringIRefusjonData( - private val beløp: Double, - private val endringsdato: LocalDate + val beløp: Double, + val endringsdato: LocalDate ) { internal companion object { internal fun List.parseEndringerIRefusjon() = map { @@ -1131,11 +1134,11 @@ internal data class PersonData( } data class SykdomshistorikkData( - private val tidsstempel: LocalDateTime, - private val id: UUID, - private val hendelseId: UUID?, - private val hendelseSykdomstidslinje: ArbeidsgiverData.SykdomstidslinjeData, - private val beregnetSykdomstidslinje: ArbeidsgiverData.SykdomstidslinjeData + val tidsstempel: LocalDateTime, + val id: UUID, + val hendelseId: UUID?, + val hendelseSykdomstidslinje: ArbeidsgiverData.SykdomstidslinjeData, + val beregnetSykdomstidslinje: ArbeidsgiverData.SykdomstidslinjeData ) { internal companion object { @@ -1156,24 +1159,24 @@ internal data class PersonData( data class UtbetalingData( val id: UUID, - private val korrelasjonsId: UUID, - private val fom: LocalDate, - private val tom: LocalDate, - private val annulleringer: List?, - private val utbetalingstidslinje: UtbetalingstidslinjeData, - private val arbeidsgiverOppdrag: OppdragData, - private val personOppdrag: OppdragData, - private val tidsstempel: LocalDateTime, - private val type: String, - private val status: String, - private val maksdato: LocalDate, - private val forbrukteSykedager: Int?, - private val gjenståendeSykedager: Int?, - private val vurdering: VurderingData?, - private val overføringstidspunkt: LocalDateTime?, - private val avstemmingsnøkkel: Long?, - private val avsluttet: LocalDateTime?, - private val oppdatert: LocalDateTime + val korrelasjonsId: UUID, + val fom: LocalDate, + val tom: LocalDate, + val annulleringer: List?, + val utbetalingstidslinje: UtbetalingstidslinjeData, + val arbeidsgiverOppdrag: OppdragData, + val personOppdrag: OppdragData, + val tidsstempel: LocalDateTime, + val type: String, + val status: String, + val maksdato: LocalDate, + val forbrukteSykedager: Int?, + val gjenståendeSykedager: Int?, + val vurdering: VurderingData?, + val overføringstidspunkt: LocalDateTime?, + val avstemmingsnøkkel: Long?, + val avsluttet: LocalDateTime?, + val oppdatert: LocalDateTime ) { internal fun konverterTilUtbetaling(andreUtbetalinger: List>) = Utbetaling.ferdigUtbetaling( @@ -1198,11 +1201,11 @@ internal data class PersonData( ) data class VurderingData( - private val godkjent: Boolean, - private val ident: String, - private val epost: String, - private val tidspunkt: LocalDateTime, - private val automatiskBehandling: Boolean + val godkjent: Boolean, + val ident: String, + val epost: String, + val tidspunkt: LocalDateTime, + val automatiskBehandling: Boolean ) { internal fun konverterTilVurdering() = Utbetaling.ferdigVurdering( godkjent = godkjent, @@ -1215,18 +1218,18 @@ internal data class PersonData( } data class OppdragData( - private val mottaker: String, - private val fagområde: String, - private val linjer: List, - private val fagsystemId: String, - private val endringskode: String, - private val tidsstempel: LocalDateTime, - private val nettoBeløp: Int, - private val avstemmingsnøkkel: Long?, - private val status: Oppdragstatus?, - private val overføringstidspunkt: LocalDateTime?, - private val erSimulert: Boolean, - private val simuleringsResultat: ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData? + val mottaker: String, + val fagområde: String, + val linjer: List, + val fagsystemId: String, + val endringskode: String, + val tidsstempel: LocalDateTime, + val nettoBeløp: Int, + val avstemmingsnøkkel: Long?, + val status: Oppdragstatus?, + val overføringstidspunkt: LocalDateTime?, + val erSimulert: Boolean, + val simuleringsResultat: ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData? ) { internal fun konverterTilOppdrag(): Oppdrag = Oppdrag.ferdigOppdrag( mottaker = mottaker, @@ -1245,17 +1248,17 @@ internal data class PersonData( } data class UtbetalingslinjeData( - private val fom: LocalDate, - private val tom: LocalDate, - private val satstype: String, - private val sats: Int, - private val grad: Int?, - private val refFagsystemId: String?, - private val delytelseId: Int, - private val refDelytelseId: Int?, - private val endringskode: String, - private val klassekode: String, - private val datoStatusFom: LocalDate? + val fom: LocalDate, + val tom: LocalDate, + val satstype: String, + val sats: Int, + val grad: Int?, + val refFagsystemId: String?, + val delytelseId: Int, + val refDelytelseId: Int?, + val endringskode: String, + val klassekode: String, + val datoStatusFom: LocalDate? ) { internal fun konverterTilUtbetalingslinje(): Utbetalingslinje = Utbetalingslinje.ferdigUtbetalingslinje( @@ -1357,18 +1360,18 @@ internal data class PersonData( } data class UtbetalingsdagData( - private val type: TypeData, - private val aktuellDagsinntekt: Double, - private val beregningsgrunnlag: Double, - private val dekningsgrunnlag: Double, - private val grunnbeløpgrense: Double?, - private val begrunnelser: List?, - private val grad: Double, - private val totalGrad: Double, - private val arbeidsgiverRefusjonsbeløp: Double, - private val arbeidsgiverbeløp: Double?, - private val personbeløp: Double?, - private val er6GBegrenset: Boolean? + val type: TypeData, + val aktuellDagsinntekt: Double, + val beregningsgrunnlag: Double, + val dekningsgrunnlag: Double, + val grunnbeløpgrense: Double?, + val begrunnelser: List?, + val grad: Double, + val totalGrad: Double, + val arbeidsgiverRefusjonsbeløp: Double, + val arbeidsgiverbeløp: Double?, + val personbeløp: Double?, + val er6GBegrenset: Boolean? ) { private val builder: Økonomi.Builder = Økonomi.Builder() @@ -1395,7 +1398,7 @@ internal data class PersonData( // Gjør så vi kan ha dato/fom og tom på samme nivå som resten av verdiene i utbetalingsdata @JsonUnwrapped - private lateinit var datoer: DateRange + lateinit var datoer: DateRange private val økonomi get() = builder.build() diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/serde/PersonDataBuilder.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/serde/PersonDataBuilder.kt new file mode 100644 index 0000000000..05bb064c93 --- /dev/null +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/serde/PersonDataBuilder.kt @@ -0,0 +1,767 @@ +package no.nav.helse.serde + +import no.nav.helse.hendelser.SimuleringResultat +import no.nav.helse.memento.ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagMemento +import no.nav.helse.memento.ArbeidsgiverInntektsopplysningMemento +import no.nav.helse.memento.ArbeidsgiverMemento +import no.nav.helse.memento.AvsenderMemento +import no.nav.helse.memento.BegrunnelseMemento +import no.nav.helse.memento.DagMemento +import no.nav.helse.memento.DokumentsporingMemento +import no.nav.helse.memento.DokumenttypeMemento +import no.nav.helse.memento.EndringIRefusjonMemento +import no.nav.helse.memento.EndringskodeMemento +import no.nav.helse.memento.FagområdeMemento +import no.nav.helse.memento.FeriepengeMemento +import no.nav.helse.memento.ForkastetVedtaksperiodeMemento +import no.nav.helse.memento.GenerasjonEndringMemento +import no.nav.helse.memento.GenerasjonMemento +import no.nav.helse.memento.GenerasjonTilstandMemento +import no.nav.helse.memento.GenerasjonkildeMemento +import no.nav.helse.memento.HendelseskildeMemento +import no.nav.helse.memento.InfotrygdArbeidsgiverutbetalingsperiodeMemento +import no.nav.helse.memento.InfotrygdFerieperiodeMemento +import no.nav.helse.memento.InfotrygdInntektsopplysningMemento +import no.nav.helse.memento.InfotrygdPersonutbetalingsperiodeMemento +import no.nav.helse.memento.InfotrygdhistorikkelementMemento +import no.nav.helse.memento.InntektsopplysningMemento +import no.nav.helse.memento.InntekttypeMemento +import no.nav.helse.memento.KlassekodeMemento +import no.nav.helse.memento.MedlemskapsvurderingMemento +import no.nav.helse.memento.OppdragMemento +import no.nav.helse.memento.OppdragstatusMemento +import no.nav.helse.memento.OpptjeningMemento +import no.nav.helse.memento.PersonMemento +import no.nav.helse.memento.RefusjonMemento +import no.nav.helse.memento.RefusjonsopplysningMemento +import no.nav.helse.memento.SammenligningsgrunnlagMemento +import no.nav.helse.memento.SatstypeMemento +import no.nav.helse.memento.SkatteopplysningMemento +import no.nav.helse.memento.SykdomshistorikkElementMemento +import no.nav.helse.memento.SykdomstidslinjeMemento +import no.nav.helse.memento.SykepengegrunnlagMemento +import no.nav.helse.memento.SykmeldingsperioderMemento +import no.nav.helse.memento.UtbetalingMemento +import no.nav.helse.memento.UtbetalingTilstandMemento +import no.nav.helse.memento.UtbetalingVurderingMemento +import no.nav.helse.memento.UtbetalingsdagMemento +import no.nav.helse.memento.UtbetalingslinjeMemento +import no.nav.helse.memento.UtbetalingstidslinjeMemento +import no.nav.helse.memento.UtbetalingtypeMemento +import no.nav.helse.memento.UtbetaltDagMemento +import no.nav.helse.memento.VedtaksperiodeMemento +import no.nav.helse.memento.VedtaksperiodetilstandMemento +import no.nav.helse.memento.VilkårsgrunnlagInnslagMemento +import no.nav.helse.memento.VilkårsgrunnlagMemento +import no.nav.helse.person.Person +import no.nav.helse.person.TilstandType +import no.nav.helse.serde.mapping.JsonMedlemskapstatus +import no.nav.helse.utbetalingslinjer.Oppdragstatus + +fun Person.tilSerialisertPerson(pretty: Boolean = false): SerialisertPerson { + return tilPersonData().tilSerialisertPerson(pretty) +} + +private fun Person.tilPersonData() = memento().tilPersonData() +internal fun PersonData.tilSerialisertPerson(pretty: Boolean = false): SerialisertPerson { + val node = SerialisertPerson.medSkjemaversjon(serdeObjectMapper.valueToTree(this)) + return SerialisertPerson(if (pretty) node.toPrettyString() else node.toString()) +} +internal fun PersonMemento.tilPersonData() = PersonData( + aktørId = this.aktørId, + fødselsdato = this.alder.fødselsdato, + fødselsnummer = this.fødselsnummer, + opprettet = this.opprettet, + arbeidsgivere = this.arbeidsgivere.map { it.tilPersonData() }, + infotrygdhistorikk = this.infotrygdhistorikk.elementer.map { it.tilPersonData() }, + vilkårsgrunnlagHistorikk = vilkårsgrunnlagHistorikk.historikk.map { it.tilPersonData() }, + dødsdato = this.alder.dødsdato +) + +private fun ArbeidsgiverMemento.tilPersonData() = PersonData.ArbeidsgiverData( + id = this.id, + organisasjonsnummer = this.organisasjonsnummer, + inntektshistorikk = this.inntektshistorikk.historikk.map { it.tilPersonData() }, + sykdomshistorikk = this.sykdomshistorikk.elementer.map { it.tilPersonData() }, + sykmeldingsperioder = this.sykmeldingsperioder.tilPersonData(), + vedtaksperioder = this.vedtaksperioder.map { it.tilPersonData() }, + forkastede = this.forkastede.map { it.tilPersonData() }, + utbetalinger = this.utbetalinger.map { it.tilPersonData() }, + feriepengeutbetalinger = this.feriepengeutbetalinger.map { it.tilPersonData() }, + refusjonshistorikk = this.refusjonshistorikk.refusjoner.map { it.tilPersonData() } +) + +private fun InntektsopplysningMemento.InntektsmeldingMemento.tilPersonData() = PersonData.ArbeidsgiverData.InntektsmeldingData( + id = this.id, + dato = this.dato, + hendelseId = this.hendelseId, + beløp = this.beløp.månedligDouble, + tidsstempel = this.tidsstempel +) + +private fun SykdomshistorikkElementMemento.tilPersonData() = PersonData.SykdomshistorikkData( + id = this.id, + tidsstempel = this.tidsstempel, + hendelseId = this.hendelseId, + hendelseSykdomstidslinje = this.hendelseSykdomstidslinje.tilPersonData(), + beregnetSykdomstidslinje = this.beregnetSykdomstidslinje.tilPersonData(), +) +private fun SykdomstidslinjeMemento.tilPersonData() = PersonData.ArbeidsgiverData.SykdomstidslinjeData( + dager = dager.map { it.tilPersonData() }, + låstePerioder = this.låstePerioder.map { PersonData.ArbeidsgiverData.PeriodeData(it.fom, it.tom) }, + periode = this.periode?.let { PersonData.ArbeidsgiverData.PeriodeData(it.fom, it.tom) } +) +private fun DagMemento.tilPersonData() = when (this) { + is DagMemento.UkjentDagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.UKJENT_DAG, + kilde = this.kilde.tilPersonData(), + grad = 0.0, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.AndreYtelserMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = when (this.ytelse) { + DagMemento.AndreYtelserMemento.YtelseMemento.AAP -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ANDRE_YTELSER_AAP + DagMemento.AndreYtelserMemento.YtelseMemento.Foreldrepenger -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ANDRE_YTELSER_FORELDREPENGER + DagMemento.AndreYtelserMemento.YtelseMemento.Omsorgspenger -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ANDRE_YTELSER_OMSORGSPENGER + DagMemento.AndreYtelserMemento.YtelseMemento.Pleiepenger -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ANDRE_YTELSER_PLEIEPENGER + DagMemento.AndreYtelserMemento.YtelseMemento.Svangerskapspenger -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ANDRE_YTELSER_SVANGERSKAPSPENGER + DagMemento.AndreYtelserMemento.YtelseMemento.Opplæringspenger -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ANDRE_YTELSER_OPPLÆRINGSPENGER + DagMemento.AndreYtelserMemento.YtelseMemento.Dagpenger -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ANDRE_YTELSER_DAGPENGER + }, + kilde = this.kilde.tilPersonData(), + grad = 0.0, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.ArbeidIkkeGjenopptattDagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEID_IKKE_GJENOPPTATT_DAG, + kilde = this.kilde.tilPersonData(), + grad = 0.0, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.ArbeidsdagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEIDSDAG, + kilde = this.kilde.tilPersonData(), + grad = 0.0, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.ArbeidsgiverHelgedagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEIDSGIVERDAG, + kilde = this.kilde.tilPersonData(), + grad = this.økonomi.grad.prosent, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.ArbeidsgiverdagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEIDSGIVERDAG, + kilde = this.kilde.tilPersonData(), + grad = this.økonomi.grad.prosent, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.FeriedagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.FERIEDAG, + kilde = this.kilde.tilPersonData(), + grad = 0.0, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.ForeldetSykedagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.FORELDET_SYKEDAG, + kilde = this.kilde.tilPersonData(), + grad = this.økonomi.grad.prosent, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.FriskHelgedagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.FRISK_HELGEDAG, + kilde = this.kilde.tilPersonData(), + grad = 0.0, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.PermisjonsdagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.PERMISJONSDAG, + kilde = this.kilde.tilPersonData(), + grad = 0.0, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.ProblemDagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.PROBLEMDAG, + kilde = this.kilde.tilPersonData(), + grad = 0.0, + other = this.other.tilPersonData(), + melding = this.melding + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.SykHelgedagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG, + kilde = this.kilde.tilPersonData(), + grad = this.økonomi.grad.prosent, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.SykedagMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG, + kilde = this.kilde.tilPersonData(), + grad = this.økonomi.grad.prosent, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } + is DagMemento.SykedagNavMemento -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG_NAV, + kilde = this.kilde.tilPersonData(), + grad = this.økonomi.grad.prosent, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(dato) + } +} +private fun HendelseskildeMemento.tilPersonData() = PersonData.ArbeidsgiverData.SykdomstidslinjeData.KildeData( + type = this.type, + id = this.meldingsreferanseId, + tidsstempel = this.tidsstempel +) +private fun RefusjonMemento.tilPersonData() = PersonData.ArbeidsgiverData.RefusjonData( + meldingsreferanseId = this.meldingsreferanseId, + førsteFraværsdag = this.førsteFraværsdag, + arbeidsgiverperioder = this.arbeidsgiverperioder.map { PersonData.ArbeidsgiverData.PeriodeData(it.fom, it.tom) }, + beløp = this.beløp?.månedligDouble, + sisteRefusjonsdag = this.sisteRefusjonsdag, + endringerIRefusjon = this.endringerIRefusjon.map { it.tilPersonData() }, + tidsstempel = this.tidsstempel +) +private fun EndringIRefusjonMemento.tilPersonData() = PersonData.ArbeidsgiverData.RefusjonData.EndringIRefusjonData( + beløp = this.beløp.månedligDouble, + endringsdato = this.endringsdato +) + +private fun SykmeldingsperioderMemento.tilPersonData() = perioder.map { + PersonData.ArbeidsgiverData.SykmeldingsperiodeData(it.fom, it.tom) +} +private fun ForkastetVedtaksperiodeMemento.tilPersonData() = PersonData.ArbeidsgiverData.ForkastetVedtaksperiodeData( + vedtaksperiode = this.vedtaksperiode.tilPersonData() +) +private fun VedtaksperiodeMemento.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData( + id = id, + tilstand = when (tilstand) { + VedtaksperiodetilstandMemento.AVSLUTTET -> TilstandType.AVSLUTTET + VedtaksperiodetilstandMemento.AVSLUTTET_UTEN_UTBETALING -> TilstandType.AVSLUTTET_UTEN_UTBETALING + VedtaksperiodetilstandMemento.AVVENTER_BLOKKERENDE_PERIODE -> TilstandType.AVVENTER_BLOKKERENDE_PERIODE + VedtaksperiodetilstandMemento.AVVENTER_GODKJENNING -> TilstandType.AVVENTER_GODKJENNING + VedtaksperiodetilstandMemento.AVVENTER_GODKJENNING_REVURDERING -> TilstandType.AVVENTER_GODKJENNING_REVURDERING + VedtaksperiodetilstandMemento.AVVENTER_HISTORIKK -> TilstandType.AVVENTER_HISTORIKK + VedtaksperiodetilstandMemento.AVVENTER_HISTORIKK_REVURDERING -> TilstandType.AVVENTER_HISTORIKK_REVURDERING + VedtaksperiodetilstandMemento.AVVENTER_INFOTRYGDHISTORIKK -> TilstandType.AVVENTER_INFOTRYGDHISTORIKK + VedtaksperiodetilstandMemento.AVVENTER_INNTEKTSMELDING -> TilstandType.AVVENTER_INNTEKTSMELDING + VedtaksperiodetilstandMemento.AVVENTER_REVURDERING -> TilstandType.AVVENTER_REVURDERING + VedtaksperiodetilstandMemento.AVVENTER_SIMULERING -> TilstandType.AVVENTER_SIMULERING + VedtaksperiodetilstandMemento.AVVENTER_SIMULERING_REVURDERING -> TilstandType.AVVENTER_SIMULERING_REVURDERING + VedtaksperiodetilstandMemento.AVVENTER_VILKÅRSPRØVING -> TilstandType.AVVENTER_VILKÅRSPRØVING + VedtaksperiodetilstandMemento.AVVENTER_VILKÅRSPRØVING_REVURDERING -> TilstandType.AVVENTER_VILKÅRSPRØVING_REVURDERING + VedtaksperiodetilstandMemento.REVURDERING_FEILET -> TilstandType.REVURDERING_FEILET + VedtaksperiodetilstandMemento.START -> TilstandType.START + VedtaksperiodetilstandMemento.TIL_INFOTRYGD -> TilstandType.TIL_INFOTRYGD + VedtaksperiodetilstandMemento.TIL_UTBETALING -> TilstandType.TIL_UTBETALING + }, + generasjoner = generasjoner.generasjoner.map { it.tilPersonData() }, + opprettet = opprettet, + oppdatert = oppdatert +) +private fun GenerasjonMemento.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData( + id = this.id, + tilstand = when (this.tilstand) { + GenerasjonTilstandMemento.ANNULLERT_PERIODE -> error("Forventer ikke å serialisere ${this.tilstand}") + GenerasjonTilstandMemento.AVSLUTTET_UTEN_VEDTAK -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.AVSLUTTET_UTEN_VEDTAK + GenerasjonTilstandMemento.BEREGNET -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.BEREGNET + GenerasjonTilstandMemento.BEREGNET_OMGJØRING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.BEREGNET_OMGJØRING + GenerasjonTilstandMemento.BEREGNET_REVURDERING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.BEREGNET_REVURDERING + GenerasjonTilstandMemento.REVURDERT_VEDTAK_AVVIST -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.REVURDERT_VEDTAK_AVVIST + GenerasjonTilstandMemento.TIL_INFOTRYGD -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.TIL_INFOTRYGD + GenerasjonTilstandMemento.UBEREGNET -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.UBEREGNET + GenerasjonTilstandMemento.UBEREGNET_OMGJØRING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.UBEREGNET_OMGJØRING + GenerasjonTilstandMemento.UBEREGNET_REVURDERING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.UBEREGNET_REVURDERING + GenerasjonTilstandMemento.VEDTAK_FATTET -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.VEDTAK_FATTET + GenerasjonTilstandMemento.VEDTAK_IVERKSATT -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.TilstandData.VEDTAK_IVERKSATT + }, + vedtakFattet = this.vedtakFattet, + avsluttet = this.avsluttet, + kilde = this.kilde.tilPersonData(), + endringer = this.endringer.map { it.tilPersonData() } +) +private fun GenerasjonkildeMemento.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.KildeData( + meldingsreferanseId = this.meldingsreferanseId, + innsendt = this.innsendt, + registrert = this.registert, + avsender = when (this.avsender) { + AvsenderMemento.ARBEIDSGIVER -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.AvsenderData.ARBEIDSGIVER + AvsenderMemento.SAKSBEHANDLER -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.AvsenderData.SAKSBEHANDLER + AvsenderMemento.SYKMELDT -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.AvsenderData.SYKMELDT + AvsenderMemento.SYSTEM -> PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.AvsenderData.SYSTEM + } +) +private fun GenerasjonEndringMemento.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData.GenerasjonData.EndringData( + id = id, + tidsstempel = tidsstempel, + sykmeldingsperiodeFom = sykmeldingsperiode.fom, + sykmeldingsperiodeTom = sykmeldingsperiode.tom, + fom = periode.fom, + tom = periode.tom, + utbetalingId = utbetalingId, + vilkårsgrunnlagId = vilkårsgrunnlagId, + sykdomstidslinje = sykdomstidslinje.tilPersonData(), + dokumentsporing = dokumentsporing.tilPersonData() +) +private fun DokumentsporingMemento.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentsporingData( + dokumentId = this.id, + dokumenttype = when (type) { + DokumenttypeMemento.InntektsmeldingDager -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.InntektsmeldingDager + DokumenttypeMemento.InntektsmeldingInntekt -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.InntektsmeldingInntekt + DokumenttypeMemento.OverstyrArbeidsforhold -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrArbeidsforhold + DokumenttypeMemento.OverstyrArbeidsgiveropplysninger -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrArbeidsgiveropplysninger + DokumenttypeMemento.OverstyrInntekt -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrInntekt + DokumenttypeMemento.OverstyrRefusjon -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrRefusjon + DokumenttypeMemento.OverstyrTidslinje -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrTidslinje + DokumenttypeMemento.SkjønnsmessigFastsettelse -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.SkjønnsmessigFastsettelse + DokumenttypeMemento.Sykmelding -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.Sykmelding + DokumenttypeMemento.Søknad -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.Søknad + } +) +private fun UtbetalingMemento.tilPersonData() = PersonData.UtbetalingData( + id = this.id, + korrelasjonsId = this.korrelasjonsId, + fom = this.periode.fom, + tom = this.periode.tom, + annulleringer = this.annulleringer, + utbetalingstidslinje = this.utbetalingstidslinje.tilPersonData(), + arbeidsgiverOppdrag = this.arbeidsgiverOppdrag.tilPersonData(), + personOppdrag = this.personOppdrag.tilPersonData(), + tidsstempel = this.tidsstempel, + type = when (this.type) { + UtbetalingtypeMemento.ANNULLERING -> "ANNULLERING" + UtbetalingtypeMemento.ETTERUTBETALING -> "ETTERUTBETALING" + UtbetalingtypeMemento.FERIEPENGER -> "FERIEPENGER" + UtbetalingtypeMemento.REVURDERING -> "REVURDERING" + UtbetalingtypeMemento.UTBETALING -> "UTBETALING" + }, + status = when (this.tilstand) { + UtbetalingTilstandMemento.ANNULLERT -> "ANNULLERT" + UtbetalingTilstandMemento.FORKASTET -> "FORKASTET" + UtbetalingTilstandMemento.GODKJENT -> "GODKJENT" + UtbetalingTilstandMemento.GODKJENT_UTEN_UTBETALING -> "GODKJENT_UTEN_UTBETALING" + UtbetalingTilstandMemento.IKKE_GODKJENT -> "IKKE_GODKJENT" + UtbetalingTilstandMemento.IKKE_UTBETALT -> "IKKE_UTBETALT" + UtbetalingTilstandMemento.NY -> "NY" + UtbetalingTilstandMemento.OVERFØRT -> "OVERFØRT" + UtbetalingTilstandMemento.UTBETALT -> "UTBETALT" + }, + maksdato = this.maksdato, + forbrukteSykedager = this.forbrukteSykedager, + gjenståendeSykedager = this.gjenståendeSykedager, + vurdering = this.vurdering?.tilPersonData(), + overføringstidspunkt = overføringstidspunkt, + avstemmingsnøkkel = avstemmingsnøkkel, + avsluttet = avsluttet, + oppdatert = oppdatert +) +private fun UtbetalingstidslinjeMemento.tilPersonData() = PersonData.UtbetalingstidslinjeData( + dager = this.dager.map { it.tilPersonData() } +) + +private fun UtbetalingsdagMemento.tilPersonData() = PersonData.UtbetalingstidslinjeData.UtbetalingsdagData( + type = when (this) { + is UtbetalingsdagMemento.ArbeidsdagMemento -> PersonData.UtbetalingstidslinjeData.TypeData.Arbeidsdag + is UtbetalingsdagMemento.ArbeidsgiverperiodeDagMemento -> PersonData.UtbetalingstidslinjeData.TypeData.ArbeidsgiverperiodeDag + is UtbetalingsdagMemento.ArbeidsgiverperiodeDagNavMemento -> PersonData.UtbetalingstidslinjeData.TypeData.ArbeidsgiverperiodedagNav + is UtbetalingsdagMemento.AvvistDagMemento -> PersonData.UtbetalingstidslinjeData.TypeData.AvvistDag + is UtbetalingsdagMemento.ForeldetDagMemento -> PersonData.UtbetalingstidslinjeData.TypeData.ForeldetDag + is UtbetalingsdagMemento.FridagMemento -> PersonData.UtbetalingstidslinjeData.TypeData.Fridag + is UtbetalingsdagMemento.NavDagMemento -> PersonData.UtbetalingstidslinjeData.TypeData.NavDag + is UtbetalingsdagMemento.NavHelgDagMemento -> PersonData.UtbetalingstidslinjeData.TypeData.NavHelgDag + is UtbetalingsdagMemento.UkjentDagMemento -> PersonData.UtbetalingstidslinjeData.TypeData.UkjentDag + }, + aktuellDagsinntekt = this.økonomi.aktuellDagsinntekt.dagligDouble, + beregningsgrunnlag = this.økonomi.beregningsgrunnlag.dagligDouble, + dekningsgrunnlag = this.økonomi.dekningsgrunnlag.dagligDouble, + grunnbeløpgrense = this.økonomi.grunnbeløpgrense?.årlig, + begrunnelser = when (this) { + is UtbetalingsdagMemento.AvvistDagMemento -> this.begrunnelser.map { it.tilPersonData() } + else -> null + }, + grad = this.økonomi.grad.prosent, + totalGrad = this.økonomi.totalGrad.prosent, + arbeidsgiverRefusjonsbeløp = økonomi.arbeidsgiverRefusjonsbeløp.dagligDouble, + arbeidsgiverbeløp = this.økonomi.arbeidsgiverbeløp?.dagligDouble, + personbeløp = this.økonomi.personbeløp?.dagligDouble, + er6GBegrenset = this.økonomi.er6GBegrenset +).apply { + datoer = DateRange.Single(dato) +} + +private fun BegrunnelseMemento.tilPersonData() = when (this) { + BegrunnelseMemento.AndreYtelserAap -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.AndreYtelserAap + BegrunnelseMemento.AndreYtelserDagpenger -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.AndreYtelserDagpenger + BegrunnelseMemento.AndreYtelserForeldrepenger -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.AndreYtelserForeldrepenger + BegrunnelseMemento.AndreYtelserOmsorgspenger -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.AndreYtelserOmsorgspenger + BegrunnelseMemento.AndreYtelserOpplaringspenger -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.AndreYtelserOpplaringspenger + BegrunnelseMemento.AndreYtelserPleiepenger -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.AndreYtelserPleiepenger + BegrunnelseMemento.AndreYtelserSvangerskapspenger -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.AndreYtelserSvangerskapspenger + BegrunnelseMemento.EgenmeldingUtenforArbeidsgiverperiode -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.EgenmeldingUtenforArbeidsgiverperiode + BegrunnelseMemento.EtterDødsdato -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.EtterDødsdato + BegrunnelseMemento.ManglerMedlemskap -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.ManglerMedlemskap + BegrunnelseMemento.ManglerOpptjening -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.ManglerOpptjening + BegrunnelseMemento.MinimumInntekt -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.MinimumInntekt + BegrunnelseMemento.MinimumInntektOver67 -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.MinimumInntektOver67 + BegrunnelseMemento.MinimumSykdomsgrad -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.MinimumSykdomsgrad + BegrunnelseMemento.NyVilkårsprøvingNødvendig -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.NyVilkårsprøvingNødvendig + BegrunnelseMemento.Over70 -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.Over70 + BegrunnelseMemento.SykepengedagerOppbrukt -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.SykepengedagerOppbrukt + BegrunnelseMemento.SykepengedagerOppbruktOver67 -> PersonData.UtbetalingstidslinjeData.BegrunnelseData.SykepengedagerOppbruktOver67 +} + +private fun UtbetalingVurderingMemento.tilPersonData() = PersonData.UtbetalingData.VurderingData( + godkjent = godkjent, + ident = ident, + epost = epost, + tidspunkt = tidspunkt, + automatiskBehandling = automatiskBehandling +) +private fun OppdragMemento.tilPersonData() = PersonData.OppdragData( + mottaker = this.mottaker, + fagområde = when (this.fagområde) { + FagområdeMemento.SP -> "SP" + FagområdeMemento.SPREF -> "SPREF" + }, + linjer = this.linjer.map { it.tilPersonData() }, + fagsystemId = this.fagsystemId, + endringskode = this.endringskode.tilPersonData(), + tidsstempel = this.tidsstempel, + nettoBeløp = this.nettoBeløp, + avstemmingsnøkkel = this.avstemmingsnøkkel, + status = when (this.status) { + OppdragstatusMemento.AKSEPTERT -> Oppdragstatus.AKSEPTERT + OppdragstatusMemento.AKSEPTERT_MED_FEIL -> Oppdragstatus.AKSEPTERT_MED_FEIL + OppdragstatusMemento.AVVIST -> Oppdragstatus.AVVIST + OppdragstatusMemento.FEIL -> Oppdragstatus.FEIL + OppdragstatusMemento.OVERFØRT -> Oppdragstatus.OVERFØRT + null -> null + }, + overføringstidspunkt = this.overføringstidspunkt, + erSimulert = this.erSimulert, + simuleringsResultat = this.simuleringsResultat?.tilPersonData() +) +private fun EndringskodeMemento.tilPersonData() = when (this) { + EndringskodeMemento.ENDR -> "ENDR" + EndringskodeMemento.NY -> "NY" + EndringskodeMemento.UEND -> "UEND" +} +private fun UtbetalingslinjeMemento.tilPersonData() = PersonData.UtbetalingslinjeData( + fom = this.fom, + tom = this.tom, + satstype = when (this.satstype) { + SatstypeMemento.Daglig -> "dag" + SatstypeMemento.Engang -> "eng" + }, + sats = this.beløp!!, + grad = this.grad, + refFagsystemId = this.refFagsystemId, + delytelseId = this.delytelseId, + refDelytelseId = this.refDelytelseId, + endringskode = this.endringskode.tilPersonData(), + klassekode = this.klassekode.tilPersonData(), + datoStatusFom = this.datoStatusFom +) +private fun KlassekodeMemento.tilPersonData() = when (this) { + KlassekodeMemento.RefusjonFeriepengerIkkeOpplysningspliktig -> "SPREFAGFER-IOP" + KlassekodeMemento.RefusjonIkkeOpplysningspliktig -> "SPREFAG-IOP" + KlassekodeMemento.SykepengerArbeidstakerFeriepenger -> "SPATFER" + KlassekodeMemento.SykepengerArbeidstakerOrdinær -> "SPATORD" +} +private fun SimuleringResultat.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData( + totalbeløp = this.totalbeløp, + perioder = this.perioder.map { + PersonData.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData.SimulertPeriode( + fom = it.periode.start, + tom = it.periode.endInclusive, + + utbetalinger = it.utbetalinger.map { + PersonData.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData.SimulertUtbetaling( + forfallsdato = it.forfallsdato, + utbetalesTil = PersonData.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData.Mottaker( + id = it.utbetalesTil.id, + navn = it.utbetalesTil.navn + ), + feilkonto = it.feilkonto, + detaljer = it.detaljer.map { + PersonData.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData.Detaljer( + fom = it.periode.start, + tom = it.periode.endInclusive, + konto = it.konto, + beløp = it.beløp, + klassekode = PersonData.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData.Klassekode( + kode = it.klassekode.kode, + beskrivelse = it.klassekode.beskrivelse + ), + uføregrad = it.uføregrad, + utbetalingstype = it.utbetalingstype, + tilbakeføring = it.tilbakeføring, + sats = PersonData.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData.Sats( + sats = it.sats.sats, + antall = it.sats.antall, + type = it.sats.type + ), + refunderesOrgnummer = it.refunderesOrgnummer + ) + } + ) + } + ) + } +) +private fun FeriepengeMemento.tilPersonData() = PersonData.ArbeidsgiverData.FeriepengeutbetalingData( + infotrygdFeriepengebeløpPerson = this.infotrygdFeriepengebeløpPerson, + infotrygdFeriepengebeløpArbeidsgiver = this.infotrygdFeriepengebeløpArbeidsgiver, + spleisFeriepengebeløpArbeidsgiver = this.spleisFeriepengebeløpArbeidsgiver, + spleisFeriepengebeløpPerson = this.spleisFeriepengebeløpPerson, + oppdrag = this.oppdrag.tilPersonData(), + personoppdrag = this.personoppdrag.tilPersonData(), + opptjeningsår = this.feriepengeberegner.opptjeningsår, + utbetalteDager = this.feriepengeberegner.utbetalteDager.map { it.tilPersonData() }, + feriepengedager = emptyList(), + utbetalingId = utbetalingId, + sendTilOppdrag = sendTilOppdrag, + sendPersonoppdragTilOS = sendPersonoppdragTilOS +) +private fun UtbetaltDagMemento.tilPersonData() = PersonData.ArbeidsgiverData.FeriepengeutbetalingData.UtbetaltDagData( + type = when (this) { + is UtbetaltDagMemento.InfotrygdArbeidsgiver -> "InfotrygdArbeidsgiverDag" + is UtbetaltDagMemento.InfotrygdPerson -> "InfotrygdPersonDag" + is UtbetaltDagMemento.SpleisArbeidsgiver -> "SpleisArbeidsgiverDag" + is UtbetaltDagMemento.SpleisPerson -> "SpleisPersonDag" + }, + orgnummer = orgnummer, + dato = dato, + beløp = beløp +) +private fun InfotrygdhistorikkelementMemento.tilPersonData() = PersonData.InfotrygdhistorikkElementData( + id = this.id, + tidsstempel = this.tidsstempel, + hendelseId = this.hendelseId, + ferieperioder = this.ferieperioder.map { it.tilPersonData() }, + arbeidsgiverutbetalingsperioder = this.arbeidsgiverutbetalingsperioder.map { it.tilPersonData() }, + personutbetalingsperioder = this.personutbetalingsperioder.map { it.tilPersonData() }, + inntekter = this.inntekter.map { it.tilPersonData() }, + arbeidskategorikoder = arbeidskategorikoder, + oppdatert = oppdatert +) +private fun InfotrygdFerieperiodeMemento.tilPersonData() = PersonData.InfotrygdhistorikkElementData.FerieperiodeData( + fom = this.periode.fom, + tom = this.periode.tom +) +private fun InfotrygdArbeidsgiverutbetalingsperiodeMemento.tilPersonData() = PersonData.InfotrygdhistorikkElementData.ArbeidsgiverutbetalingsperiodeData( + orgnr = this.orgnr, + fom = this.periode.fom, + tom = this.periode.tom, + grad = this.grad.prosent, + inntekt = this.inntekt.dagligInt +) +private fun InfotrygdPersonutbetalingsperiodeMemento.tilPersonData() = PersonData.InfotrygdhistorikkElementData.PersonutbetalingsperiodeData( + orgnr = this.orgnr, + fom = this.periode.fom, + tom = this.periode.tom, + grad = this.grad.prosent, + inntekt = this.inntekt.dagligInt +) +private fun InfotrygdInntektsopplysningMemento.tilPersonData() = PersonData.InfotrygdhistorikkElementData.InntektsopplysningData( + orgnr = this.orgnummer, + sykepengerFom = this.sykepengerFom, + inntekt = this.inntekt.månedligDouble, + refusjonTilArbeidsgiver = refusjonTilArbeidsgiver, + refusjonTom = refusjonTom, + lagret = lagret +) +private fun VilkårsgrunnlagInnslagMemento.tilPersonData() = PersonData.VilkårsgrunnlagInnslagData( + id = this.id, + opprettet = this.opprettet, + vilkårsgrunnlag = this.vilkårsgrunnlag.map { it.tilPersonData() } +) +private fun VilkårsgrunnlagMemento.tilPersonData() = PersonData.VilkårsgrunnlagElementData( + skjæringstidspunkt = this.skjæringstidspunkt, + type = when (this) { + is VilkårsgrunnlagMemento.Infotrygd -> PersonData.VilkårsgrunnlagElementData.GrunnlagsdataType.Infotrygd + is VilkårsgrunnlagMemento.Spleis -> PersonData.VilkårsgrunnlagElementData.GrunnlagsdataType.Vilkårsprøving + }, + sykepengegrunnlag = this.sykepengegrunnlag.tilPersonData(), + opptjening = this.opptjening?.tilPersonData(), + medlemskapstatus = when (this) { + is VilkårsgrunnlagMemento.Spleis -> when (this.medlemskapstatus) { + MedlemskapsvurderingMemento.Ja -> JsonMedlemskapstatus.JA + MedlemskapsvurderingMemento.Nei -> JsonMedlemskapstatus.NEI + MedlemskapsvurderingMemento.UavklartMedBrukerspørsmål -> JsonMedlemskapstatus.UAVKLART_MED_BRUKERSPØRSMÅL + MedlemskapsvurderingMemento.VetIkke -> JsonMedlemskapstatus.VET_IKKE + } + else -> null + }, + vurdertOk = when (this) { + is VilkårsgrunnlagMemento.Spleis -> this.vurdertOk + else -> null + }, + meldingsreferanseId = when (this) { + is VilkårsgrunnlagMemento.Spleis -> this.meldingsreferanseId + else -> null + }, + vilkårsgrunnlagId = this.vilkårsgrunnlagId +) + +private fun OpptjeningMemento.tilPersonData() = PersonData.VilkårsgrunnlagElementData.OpptjeningData( + opptjeningFom = this.opptjeningsperiode.fom, + opptjeningTom = this.opptjeningsperiode.tom, + arbeidsforhold = this.arbeidsforhold.map { + PersonData.VilkårsgrunnlagElementData.OpptjeningData.ArbeidsgiverOpptjeningsgrunnlagData( + orgnummer = it.orgnummer, + ansattPerioder = it.ansattPerioder.map { + PersonData.VilkårsgrunnlagElementData.OpptjeningData.ArbeidsgiverOpptjeningsgrunnlagData.ArbeidsforholdData( + ansattFom = it.ansattFom, + ansattTom = it.ansattTom, + deaktivert = it.deaktivert + ) + } + ) + } +) +private fun SykepengegrunnlagMemento.tilPersonData() = PersonData.VilkårsgrunnlagElementData.SykepengegrunnlagData( + grunnbeløp = this.`6G`?.årlig, + arbeidsgiverInntektsopplysninger = this.arbeidsgiverInntektsopplysninger.map { it.tilPersonData() }, + sammenligningsgrunnlag = this.sammenligningsgrunnlag.tilPersonData(), + deaktiverteArbeidsforhold = this.deaktiverteArbeidsforhold.map { it.tilPersonData() }, + vurdertInfotrygd = this.vurdertInfotrygd +) + +private fun ArbeidsgiverInntektsopplysningMemento.tilPersonData() = PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData( + orgnummer = this.orgnummer, + fom = this.gjelder.fom, + tom = this.gjelder.tom, + inntektsopplysning = this.inntektsopplysning.tilPersonData(), + refusjonsopplysninger = this.refusjonsopplysninger.opplysninger.map { + it.tilPersonData() + } +) + +private fun InntektsopplysningMemento.tilPersonData() = PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData( + id = this.id, + dato = this.dato, + hendelseId = this.hendelseId, + beløp = when (this) { + is InntektsopplysningMemento.SkattSykepengegrunnlagMemento -> null + else -> this.beløp.månedligDouble + }, + kilde = when (this) { + is InntektsopplysningMemento.IkkeRapportertMemento -> "IKKE_RAPPORTERT" + is InntektsopplysningMemento.InfotrygdMemento -> "INFOTRYGD" + is InntektsopplysningMemento.InntektsmeldingMemento -> "INNTEKTSMELDING" + is InntektsopplysningMemento.SaksbehandlerMemento -> "SAKSBEHANDLER" + is InntektsopplysningMemento.SkattSykepengegrunnlagMemento -> "SKATT_SYKEPENGEGRUNNLAG" + is InntektsopplysningMemento.SkjønnsmessigFastsattMemento -> "SKJØNNSMESSIG_FASTSATT" + }, + forklaring = when (this) { + is InntektsopplysningMemento.SaksbehandlerMemento -> this.forklaring + else -> null + }, + subsumsjon = when (this) { + is InntektsopplysningMemento.SaksbehandlerMemento -> this.subsumsjon?.let { + PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData.SubsumsjonData( + paragraf = it.paragraf, + bokstav = it.bokstav, + ledd = it.ledd + ) + } + else -> null + }, + tidsstempel = this.tidsstempel, + overstyrtInntektId = when (this) { + is InntektsopplysningMemento.SaksbehandlerMemento -> this.overstyrtInntekt.id + is InntektsopplysningMemento.SkjønnsmessigFastsattMemento -> this.overstyrtInntekt.id + else -> null + }, + skatteopplysninger = when (this) { + is InntektsopplysningMemento.SkattSykepengegrunnlagMemento -> this.inntektsopplysninger.map { it.tilPersonDataSkattopplysning() } + else -> null + } +) + +private fun RefusjonsopplysningMemento.tilPersonData() = PersonData.ArbeidsgiverData.RefusjonsopplysningData( + meldingsreferanseId = this.meldingsreferanseId, + fom = this.fom, + tom = this.tom, + beløp = this.beløp.månedligDouble +) + +private fun SammenligningsgrunnlagMemento.tilPersonData() = PersonData.VilkårsgrunnlagElementData.SammenligningsgrunnlagData( + sammenligningsgrunnlag = this.sammenligningsgrunnlag.årlig, + arbeidsgiverInntektsopplysninger = this.arbeidsgiverInntektsopplysninger.map { it.tilPersonData() } +) + +private fun ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagMemento.tilPersonData() = PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagData( + orgnummer = this.orgnummer, + skatteopplysninger = this.inntektsopplysninger.map { it.tilPersonData() } +) + +private fun SkatteopplysningMemento.tilPersonData() = + PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagData.SammenligningsgrunnlagInntektsopplysningData( + hendelseId = this.hendelseId, + beløp = this.beløp.månedligDouble, + måned = this.måned, + type = when (this.type) { + InntekttypeMemento.LØNNSINNTEKT -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagData.SammenligningsgrunnlagInntektsopplysningData.InntekttypeData.LØNNSINNTEKT + InntekttypeMemento.NÆRINGSINNTEKT -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagData.SammenligningsgrunnlagInntektsopplysningData.InntekttypeData.NÆRINGSINNTEKT + InntekttypeMemento.PENSJON_ELLER_TRYGD -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagData.SammenligningsgrunnlagInntektsopplysningData.InntekttypeData.PENSJON_ELLER_TRYGD + InntekttypeMemento.YTELSE_FRA_OFFENTLIGE -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagData.SammenligningsgrunnlagInntektsopplysningData.InntekttypeData.YTELSE_FRA_OFFENTLIGE + }, + fordel = fordel, + beskrivelse = beskrivelse, + tidsstempel = tidsstempel + ) +private fun SkatteopplysningMemento.tilPersonDataSkattopplysning() = PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.SkatteopplysningData( + hendelseId = this.hendelseId, + beløp = this.beløp.månedligDouble, + måned = this.måned, + type = when (this.type) { + InntekttypeMemento.LØNNSINNTEKT -> "LØNNSINNTEKT" + InntekttypeMemento.NÆRINGSINNTEKT -> "NÆRINGSINNTEKT" + InntekttypeMemento.PENSJON_ELLER_TRYGD -> "PENSJON_ELLER_TRYGD" + InntekttypeMemento.YTELSE_FRA_OFFENTLIGE -> "YTELSE_FRA_OFFENTLIGE" + }, + fordel = fordel, + beskrivelse = beskrivelse, + tidsstempel = tidsstempel +) \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Dag.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Dag.kt index 11c392d21e..4916ae985b 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Dag.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Dag.kt @@ -2,6 +2,9 @@ package no.nav.helse.sykdomstidslinje import java.time.LocalDate import no.nav.helse.erHelg +import no.nav.helse.memento.DagMemento +import no.nav.helse.memento.DagMemento.AndreYtelserMemento.YtelseMemento +import no.nav.helse.memento.HendelseskildeMemento import no.nav.helse.sykdomstidslinje.SykdomshistorikkHendelse.Hendelseskilde import no.nav.helse.økonomi.Økonomi @@ -82,6 +85,8 @@ internal sealed class Dag( override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, kilde) + + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.UkjentDagMemento(dato, kilde) } internal class Arbeidsdag( @@ -91,6 +96,7 @@ internal sealed class Dag( override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, kilde) + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.ArbeidsdagMemento(dato, kilde) } internal class Arbeidsgiverdag( @@ -100,6 +106,7 @@ internal sealed class Dag( ) : Dag(dato, kilde) { override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, økonomi, kilde) + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.ArbeidsgiverdagMemento(dato, kilde, økonomi.memento()) } internal class Feriedag( @@ -109,6 +116,7 @@ internal sealed class Dag( override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, kilde) + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.FeriedagMemento(dato, kilde) } internal class ArbeidIkkeGjenopptattDag( @@ -116,6 +124,7 @@ internal sealed class Dag( kilde: Hendelseskilde ) : Dag(dato, kilde) { override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, kilde) + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.ArbeidIkkeGjenopptattDagMemento(dato, kilde) } internal class FriskHelgedag( @@ -125,6 +134,8 @@ internal sealed class Dag( override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, kilde) + + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.FriskHelgedagMemento(dato, kilde) } internal class ArbeidsgiverHelgedag( @@ -134,6 +145,7 @@ internal sealed class Dag( ) : Dag(dato, kilde) { override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, økonomi, kilde) + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.ArbeidsgiverHelgedagMemento(dato, kilde, økonomi.memento()) } internal class Sykedag( @@ -143,6 +155,7 @@ internal sealed class Dag( ) : Dag(dato, kilde) { override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, økonomi, kilde) + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.SykedagMemento(dato, kilde, økonomi.memento()) } internal class ForeldetSykedag( @@ -152,6 +165,7 @@ internal sealed class Dag( ) : Dag(dato, kilde) { override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, økonomi, kilde) + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.ForeldetSykedagMemento(dato, kilde, økonomi.memento()) } internal class SykHelgedag( @@ -161,6 +175,7 @@ internal sealed class Dag( ) : Dag(dato, kilde) { override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, økonomi, kilde) + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.SykHelgedagMemento(dato, kilde, økonomi.memento()) } internal class SykedagNav( @@ -169,6 +184,7 @@ internal sealed class Dag( kilde: Hendelseskilde ) : Dag(dato, kilde) { override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, økonomi, kilde) + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.SykedagNavMemento(dato, kilde, økonomi.memento()) } internal class Permisjonsdag( @@ -178,6 +194,7 @@ internal sealed class Dag( override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, kilde) + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.PermisjonsdagMemento(dato, kilde) } internal class ProblemDag( @@ -191,6 +208,7 @@ internal sealed class Dag( override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, kilde, other, melding) + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = DagMemento.ProblemDagMemento(dato, kilde, other.memento(), melding) } internal class AndreYtelser( @@ -199,12 +217,28 @@ internal sealed class Dag( private val ytelse: AnnenYtelse, ) : Dag(dato, kilde) { enum class AnnenYtelse { - Foreldrepenger, AAP, Omsorgspenger, Pleiepenger, Svangerskapspenger, Opplæringspenger, Dagpenger + Foreldrepenger, AAP, Omsorgspenger, Pleiepenger, Svangerskapspenger, Opplæringspenger, Dagpenger; + + fun memento() = when (this) { + Foreldrepenger -> YtelseMemento.Foreldrepenger + AAP -> YtelseMemento.AAP + Omsorgspenger -> YtelseMemento.Omsorgspenger + Pleiepenger -> YtelseMemento.Pleiepenger + Svangerskapspenger -> YtelseMemento.Svangerskapspenger + Opplæringspenger -> YtelseMemento.Opplæringspenger + Dagpenger -> YtelseMemento.Dagpenger + } } override fun accept(visitor: SykdomstidslinjeDagVisitor) = visitor.visitDag(this, dato, kilde, ytelse) + + override fun memento(dato: LocalDate, kilde: HendelseskildeMemento) = + DagMemento.AndreYtelserMemento(dato, kilde, ytelse.memento()) } + + internal fun memento() = memento(dato, kilde.memento()) + protected abstract fun memento(dato: LocalDate, kilde: HendelseskildeMemento): DagMemento } internal interface SykdomstidslinjeDagVisitor { diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Sykdomshistorikk.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Sykdomshistorikk.kt index 3419624a91..c20b388a75 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Sykdomshistorikk.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Sykdomshistorikk.kt @@ -3,6 +3,8 @@ package no.nav.helse.sykdomstidslinje import java.time.LocalDateTime import java.util.UUID import no.nav.helse.hendelser.Periode +import no.nav.helse.memento.SykdomshistorikkElementMemento +import no.nav.helse.memento.SykdomshistorikkMemento import no.nav.helse.person.SykdomshistorikkVisitor import no.nav.helse.sykdomstidslinje.Sykdomshistorikk.Element.Companion.uhåndtertSykdomstidslinje import no.nav.helse.tournament.Dagturnering @@ -131,8 +133,19 @@ class Sykdomshistorikk private constructor( ) } + + internal fun memento() = SykdomshistorikkElementMemento( + id = id, + hendelseId = hendelseId, + tidsstempel = tidsstempel, + hendelseSykdomstidslinje = hendelseSykdomstidslinje.memento(), + beregnetSykdomstidslinje = beregnetSykdomstidslinje.memento(), + ) } + internal fun memento() = SykdomshistorikkMemento( + elementer = elementer.map { it.memento() } + ) internal companion object { internal fun ferdigSykdomshistorikk(historikk: List): Sykdomshistorikk = Sykdomshistorikk(historikk.toMutableList()) diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/SykdomshistorikkHendelse.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/SykdomshistorikkHendelse.kt index e7693435e5..54d3ca89b7 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/SykdomshistorikkHendelse.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/SykdomshistorikkHendelse.kt @@ -4,6 +4,7 @@ import java.time.LocalDateTime import java.util.UUID import no.nav.helse.hendelser.Hendelse import no.nav.helse.hendelser.Periode +import no.nav.helse.memento.HendelseskildeMemento import no.nav.helse.person.Dokumentsporing import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import kotlin.reflect.KClass @@ -44,5 +45,6 @@ internal interface SykdomshistorikkHendelse : Hendelse { // todo: midlertidig fordi "Inntektsmelding" ikke er en SykdomshistorikkHendelse. Alle dager med kilde "Inntektsmelding" må migreres til "BitFraInntektsmelding" internal fun erAvType(meldingstype: String) = this.type == meldingstype internal fun toJson() = mapOf("type" to type, "id" to meldingsreferanseId, "tidsstempel" to tidsstempel) + internal fun memento() = HendelseskildeMemento(type, meldingsreferanseId, tidsstempel) } } \ No newline at end of file diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Sykdomstidslinje.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Sykdomstidslinje.kt index 9ee2123f1b..200c288669 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Sykdomstidslinje.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Sykdomstidslinje.kt @@ -16,6 +16,7 @@ import no.nav.helse.hendelser.Søknad import no.nav.helse.hendelser.contains import no.nav.helse.hendelser.somPeriode import no.nav.helse.hendelser.til +import no.nav.helse.memento.SykdomstidslinjeMemento import no.nav.helse.person.SykdomstidslinjeVisitor import no.nav.helse.sykdomstidslinje.Dag.AndreYtelser import no.nav.helse.sykdomstidslinje.Dag.AndreYtelser.AnnenYtelse @@ -437,6 +438,12 @@ internal class Sykdomstidslinje private constructor( perioder: List ): Sykdomstidslinje = Sykdomstidslinje(dager.toSortedMap(), periode, perioder.map{it}.toMutableList()) } + + internal fun memento() = SykdomstidslinjeMemento( + dager = dager.map { (_, dag) -> dag.memento() }, + periode = periode?.memento(), + låstePerioder = låstePerioder.map { it.memento() } + ) } internal fun List.merge(beste: BesteStrategy = default): Sykdomstidslinje = diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingslinjer/Feriepengeutbetaling.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingslinjer/Feriepengeutbetaling.kt index 6769994ab7..5b5e116019 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingslinjer/Feriepengeutbetaling.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingslinjer/Feriepengeutbetaling.kt @@ -10,6 +10,7 @@ import no.nav.helse.hendelser.Periode.Companion.grupperSammenhengendePerioder import no.nav.helse.hendelser.PersonHendelse import no.nav.helse.hendelser.UtbetalingshistorikkForFeriepenger import no.nav.helse.hendelser.utbetaling.UtbetalingHendelse +import no.nav.helse.memento.FeriepengeMemento import no.nav.helse.person.FeriepengeutbetalingVisitor import no.nav.helse.person.Person import no.nav.helse.person.PersonObserver @@ -331,4 +332,17 @@ internal class Feriepengeutbetaling private constructor( ) } } + + internal fun memento() = FeriepengeMemento( + feriepengeberegner = feriepengeberegner.memento(), + infotrygdFeriepengebeløpPerson = infotrygdFeriepengebeløpPerson, + infotrygdFeriepengebeløpArbeidsgiver = infotrygdFeriepengebeløpArbeidsgiver, + spleisFeriepengebeløpPerson = spleisFeriepengebeløpPerson, + spleisFeriepengebeløpArbeidsgiver = spleisFeriepengebeløpArbeidsgiver, + oppdrag = this.oppdrag.memento(), + personoppdrag = this.personoppdrag.memento(), + utbetalingId = this.utbetalingId, + sendTilOppdrag = this.sendTilOppdrag, + sendPersonoppdragTilOS = this.sendPersonoppdragTilOS + ) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Feriepengeberegner.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Feriepengeberegner.kt index c5ccada855..18d8554a4d 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Feriepengeberegner.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Feriepengeberegner.kt @@ -11,6 +11,8 @@ import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.SimuleringResultat import no.nav.helse.hendelser.UtbetalingshistorikkForFeriepenger import no.nav.helse.hendelser.til +import no.nav.helse.memento.FeriepengeberegnerMemento +import no.nav.helse.memento.UtbetaltDagMemento import no.nav.helse.person.Arbeidsgiver import no.nav.helse.person.FeriepengeutbetalingVisitor import no.nav.helse.person.FeriepengeutbetalingsperiodeVisitor @@ -172,6 +174,7 @@ internal class Feriepengeberegner( override fun accept(visitor: FeriepengeutbetalingVisitor) { visitor.visitInfotrygdPersonDag(this, orgnummer, dato, beløp) } + override fun memento() = UtbetaltDagMemento.InfotrygdPerson(orgnummer, dato, beløp) } internal class InfotrygdArbeidsgiver( @@ -182,6 +185,7 @@ internal class Feriepengeberegner( override fun accept(visitor: FeriepengeutbetalingVisitor) { visitor.visitInfotrygdArbeidsgiverDag(this, orgnummer, dato, beløp) } + override fun memento() = UtbetaltDagMemento.InfotrygdArbeidsgiver(orgnummer, dato, beløp) } internal class SpleisArbeidsgiver( @@ -192,6 +196,7 @@ internal class Feriepengeberegner( override fun accept(visitor: FeriepengeutbetalingVisitor) { visitor.visitSpleisArbeidsgiverDag(this, orgnummer, dato, beløp) } + override fun memento() = UtbetaltDagMemento.SpleisArbeidsgiver(orgnummer, dato, beløp) } internal class SpleisPerson( orgnummer: String, @@ -201,7 +206,11 @@ internal class Feriepengeberegner( override fun accept(visitor: FeriepengeutbetalingVisitor) { visitor.visitSpleisPersonDag(this, orgnummer, dato, beløp) } + + override fun memento() = UtbetaltDagMemento.SpleisPerson(orgnummer, dato, beløp) } + + abstract fun memento(): UtbetaltDagMemento } private class FinnUtbetalteDagerVisitor( @@ -366,4 +375,9 @@ internal class Feriepengeberegner( } } } + + internal fun memento() = FeriepengeberegnerMemento( + opptjeningsår = this.opptjeningsår, + utbetalteDager = this.utbetalteDager.map { it.memento() } + ) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/AbstractDslTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/AbstractDslTest.kt index 033884f80d..b623c34738 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/AbstractDslTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/AbstractDslTest.kt @@ -21,6 +21,7 @@ import no.nav.helse.inspectors.PersonInspektør import no.nav.helse.inspectors.SubsumsjonInspektør import no.nav.helse.inspectors.TestArbeidsgiverInspektør import no.nav.helse.inspectors.inspektør +import no.nav.helse.memento.PersonMemento import no.nav.helse.person.Arbeidsledig import no.nav.helse.person.Frilans import no.nav.helse.person.Person @@ -29,6 +30,9 @@ import no.nav.helse.person.PersonVisitor import no.nav.helse.person.Selvstendig import no.nav.helse.person.TilstandType import no.nav.helse.person.aktivitetslogg.Varselkode +import no.nav.helse.serde.assertPersonEquals +import no.nav.helse.serde.tilPersonData +import no.nav.helse.serde.tilSerialisertPerson import no.nav.helse.spleis.e2e.AktivitetsloggFilter import no.nav.helse.spleis.e2e.TestObservatør import no.nav.helse.utbetalingslinjer.Oppdragstatus @@ -37,6 +41,7 @@ import no.nav.helse.økonomi.Inntekt.Companion.månedlig import no.nav.helse.økonomi.Prosentdel import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach @@ -473,6 +478,15 @@ protected fun håndterInntektsmeldingPortal( assertTrue(inspektør.aktivitetslogg.harAktiviteter()) { inspektør.aktivitetslogg.toString() } } + protected fun assertGjenoppbygget(memento: PersonMemento) { + val serialisertPerson = memento.tilPersonData().tilSerialisertPerson() + val gjenoppbyggetPerson = serialisertPerson.deserialize(MaskinellJurist()) + val nyttMemento = gjenoppbyggetPerson.memento() + + assertEquals(memento, nyttMemento) + assertPersonEquals(testperson.person, gjenoppbyggetPerson) + } + protected fun håndterDødsmelding(dødsdato: LocalDate) { testperson.håndterDødsmelding(dødsdato) } @@ -492,6 +506,7 @@ protected fun håndterInntektsmeldingPortal( protected fun serializeForSpeil() = testperson.serializeForSpeil(observatør.spekemat.resultat()) protected fun serialize(pretty: Boolean = false) = testperson.serialize(pretty) + protected fun memento() = testperson.memento() protected fun medFødselsdato(fødselsdato: LocalDate) { testperson = TestPerson(observatør = observatør, fødselsdato = fødselsdato, deferredLog = deferredLog, jurist = jurist) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPerson.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPerson.kt index ea4b1d8aaa..c40ecf6123 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPerson.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPerson.kt @@ -28,6 +28,7 @@ import no.nav.helse.hendelser.Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype import no.nav.helse.hendelser.til import no.nav.helse.inspectors.TestArbeidsgiverInspektør import no.nav.helse.januar +import no.nav.helse.memento.PersonMemento import no.nav.helse.person.Person import no.nav.helse.person.PersonObserver import no.nav.helse.person.PersonVisitor @@ -152,9 +153,8 @@ internal class TestPerson( fun serialize(pretty: Boolean = false): SerialisertPerson { return person.serialize(pretty) } - - fun serialize(): SerialisertPerson { - return person.serialize() + fun memento(): PersonMemento { + return person.memento() } inner class TestArbeidsgiver(internal val orgnummer: String) { diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikkInnslagTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikkInnslagTest.kt" index 76ae09cf42..9ba5836071 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikkInnslagTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikkInnslagTest.kt" @@ -12,6 +12,9 @@ import no.nav.helse.hendelser.OverstyrArbeidsforhold import no.nav.helse.hendelser.til import no.nav.helse.inspectors.inspektør import no.nav.helse.januar +import no.nav.helse.memento.OpptjeningMemento +import no.nav.helse.memento.SykepengegrunnlagMemento +import no.nav.helse.memento.VilkårsgrunnlagMemento import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import no.nav.helse.person.inntekt.ArbeidsgiverInntektsopplysning import no.nav.helse.person.inntekt.Refusjonsopplysning.Refusjonsopplysninger @@ -182,5 +185,14 @@ internal class VilkårsgrunnlagHistorikkInnslagTest { ): VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement { throw IllegalStateException() } + + override fun memento( + vilkårsgrunnlagId: UUID, + skjæringstidspunkt: LocalDate, + sykepengegrunnlag: SykepengegrunnlagMemento, + opptjening: OpptjeningMemento? + ): VilkårsgrunnlagMemento { + throw IllegalStateException() + } } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/serde/DagDataTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/serde/DagDataTest.kt new file mode 100644 index 0000000000..2ac39bd0a4 --- /dev/null +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/serde/DagDataTest.kt @@ -0,0 +1,87 @@ +package no.nav.helse.serde + +import com.fasterxml.jackson.module.kotlin.readValue +import java.time.LocalDateTime +import java.util.UUID +import no.nav.helse.januar +import no.nav.helse.serde.PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData +import no.nav.helse.serde.PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType +import no.nav.helse.serde.PersonData.ArbeidsgiverData.SykdomstidslinjeData.KildeData +import org.intellij.lang.annotations.Language +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import org.skyscreamer.jsonassert.JSONAssert +import org.skyscreamer.jsonassert.JSONCompareMode + +internal class DagDataTest { + + @Test + fun `deserialisere og serialisere enkeltdag`() { + @Language("JSON") + val json = """{ + "dato": "2018-01-01", + "type": "SYKEDAG", + "kilde": { + "type": "Søknad", + "id": "9d46a9e9-1e40-4f0f-be22-f6d7ef8f427e", + "tidsstempel": "2018-01-01T01:00:00.123" + }, + "grad": 100.0, + "other": null, + "melding": null + }""" + + val actual = serdeObjectMapper.readValue(json) + val expected = DagData( + type = JsonDagType.SYKEDAG, + kilde = KildeData( + type = "Søknad", + id = UUID.fromString("9d46a9e9-1e40-4f0f-be22-f6d7ef8f427e"), + tidsstempel = LocalDateTime.parse("2018-01-01T01:00:00.123") + ), + grad = 100.0, + other = null, + melding = null + ).apply { + datoer = DateRange.Single(1.januar) + } + + assertEquals(expected, actual) + JSONAssert.assertEquals(json, serdeObjectMapper.writeValueAsString(actual), JSONCompareMode.NON_EXTENSIBLE) + } + @Test + fun `deserialisere og serialisere flere dager`() { + @Language("JSON") + val json = """{ + "fom": "2018-01-01", + "tom": "2018-01-10", + "type": "SYKEDAG", + "kilde": { + "type": "Søknad", + "id": "9d46a9e9-1e40-4f0f-be22-f6d7ef8f427e", + "tidsstempel": "2018-01-01T01:00:00.123" + }, + "grad": 100.0, + "other": null, + "melding": null + }""" + + val actual = serdeObjectMapper.readValue(json) + val expected = DagData( + type = JsonDagType.SYKEDAG, + kilde = KildeData( + type = "Søknad", + id = UUID.fromString("9d46a9e9-1e40-4f0f-be22-f6d7ef8f427e"), + tidsstempel = LocalDateTime.parse("2018-01-01T01:00:00.123") + ), + grad = 100.0, + other = null, + melding = null + ).apply { + datoer = DateRange.Range(1.januar, 10.januar) + } + + assertEquals(expected, actual) + JSONAssert.assertEquals(json, serdeObjectMapper.writeValueAsString(actual), JSONCompareMode.NON_EXTENSIBLE) + } +} \ No newline at end of file diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/serde/JsonAssertUtil.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/serde/JsonAssertUtil.kt index a1ca72d14e..004598124b 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/serde/JsonAssertUtil.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/serde/JsonAssertUtil.kt @@ -13,10 +13,10 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import java.math.BigDecimal import java.math.RoundingMode import no.nav.helse.person.Arbeidsgiver +import no.nav.helse.person.Generasjoner import no.nav.helse.person.Opptjening import no.nav.helse.person.Person import no.nav.helse.person.Vedtaksperiode -import no.nav.helse.person.Generasjoner import no.nav.helse.person.infotrygdhistorikk.InfotrygdhistorikkElement import no.nav.helse.person.inntekt.SkattSykepengegrunnlag import no.nav.helse.person.inntekt.Sykepengegrunnlag @@ -24,8 +24,10 @@ import no.nav.helse.utbetalingslinjer.Utbetaling import no.nav.helse.utbetalingstidslinje.Begrunnelse import no.nav.helse.økonomi.Prosentdel import org.junit.jupiter.api.Assertions +import org.skyscreamer.jsonassert.JSONAssert +import org.skyscreamer.jsonassert.JSONCompareMode -@JsonIgnoreProperties("jurist", "aktivitetslogg") +@JsonIgnoreProperties("jurist", "aktivitetslogg", "observers") private class PersonMixin @JsonIgnoreProperties("person", "jurist") @@ -55,7 +57,7 @@ private class SkattSykepengegrunnlagMixin @JsonIgnoreProperties("opptjeningsdager\$delegate") private class OpptjeningMixin -@JsonIgnoreProperties() +@JsonIgnoreProperties("alder") private class SykepengegrunnlagMixin internal class BigDecimalSerializer : JsonSerializer() { @@ -94,6 +96,12 @@ private val objectMapper = jacksonObjectMapper() .setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE) .registerModule(JavaTimeModule()) +internal fun assertPersonEquals(expected: Person, actual: Person) { + val expectedJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(expected) + val actualJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(actual) + JSONAssert.assertEquals(expectedJson, actualJson, JSONCompareMode.STRICT) +} + internal fun assertJsonEquals(expected: Any, actual: Any) { val expectedJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(expected) val actualJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(actual) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/serde/PersonDataBuilderTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/serde/PersonDataBuilderTest.kt new file mode 100644 index 0000000000..6031ca920a --- /dev/null +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/serde/PersonDataBuilderTest.kt @@ -0,0 +1,166 @@ +package no.nav.helse.serde + +import java.time.LocalDate +import no.nav.helse.august +import no.nav.helse.desember +import no.nav.helse.dsl.AbstractDslTest +import no.nav.helse.dsl.TestPerson.Companion.AKTØRID +import no.nav.helse.dsl.TestPerson.Companion.INNTEKT +import no.nav.helse.dsl.TestPerson.Companion.UNG_PERSON_FDATO_2018 +import no.nav.helse.dsl.TestPerson.Companion.UNG_PERSON_FNR_2018 +import no.nav.helse.dsl.lagStandardSykepengegrunnlag +import no.nav.helse.erHelg +import no.nav.helse.februar +import no.nav.helse.hendelser.Inntektsmelding +import no.nav.helse.hendelser.Sykmeldingsperiode +import no.nav.helse.hendelser.Søknad +import no.nav.helse.hendelser.Søknad.Søknadsperiode.Arbeid +import no.nav.helse.hendelser.Søknad.Søknadsperiode.Sykdom +import no.nav.helse.hendelser.Vilkårsgrunnlag +import no.nav.helse.hendelser.til +import no.nav.helse.inspectors.inspektør +import no.nav.helse.januar +import no.nav.helse.juni +import no.nav.helse.memento.ArbeidsgiverMemento +import no.nav.helse.memento.AvsenderMemento +import no.nav.helse.memento.DagMemento +import no.nav.helse.memento.DokumenttypeMemento +import no.nav.helse.memento.VedtaksperiodetilstandMemento +import no.nav.helse.memento.VilkårsgrunnlaghistorikkMemento +import no.nav.helse.oktober +import no.nav.helse.økonomi.Inntekt.Companion.INGEN +import no.nav.helse.økonomi.Prosentdel.Companion.prosent +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertInstanceOf +import org.junit.jupiter.api.Assertions.assertNotNull +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.Test + +internal class PersonDataBuilderTest : AbstractDslTest() { + + @Test + fun `serialisering av person`() { + a1 { + håndterSøknad(Sykdom(5.januar, 17.januar, 100.prosent)) + håndterInntektsmeldingPortal(listOf(1.januar til 16.januar), inntektsdato = 1.januar, førsteFraværsdag = 1.januar) + håndterVilkårsgrunnlag(1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf( + a1 to INNTEKT + ), 1.januar), + arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), type = Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT) + ) + ) + håndterYtelser(1.vedtaksperiode) + håndterSimulering(1.vedtaksperiode) + håndterUtbetalingsgodkjenning(1.vedtaksperiode) + håndterUtbetalt() + håndterAnnullering(inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId()) + + håndterSykmelding(Sykmeldingsperiode(1.august, 5.august)) + } + a2 { + håndterSøknad(Sykdom(3.februar, 28.februar, 100.prosent), Arbeid(21.februar, 28.februar), egenmeldinger = listOf( + Søknad.Søknadsperiode.Arbeidsgiverdag(1.februar, 2.februar) + ), sendtTilNAVEllerArbeidsgiver = 1.juni) + håndterInntektsmeldingPortal(listOf(1.februar til 16.februar), inntektsdato = 1.februar, førsteFraværsdag = 1.februar) + håndterVilkårsgrunnlag(1.vedtaksperiode) + håndterYtelser(1.vedtaksperiode) + håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjent = false) + } + a3 { + håndterSøknad(Sykdom(1.juni, 16.juni, 100.prosent)) + håndterInntektsmeldingPortal(listOf(1.juni til 16.juni), + inntektsdato = 1.juni, + førsteFraværsdag = 1.juni, + beregnetInntekt = INNTEKT, + begrunnelseForReduksjonEllerIkkeUtbetalt = "IngenOpptjening", + refusjon = Inntektsmelding.Refusjon(INGEN, null) + ) + håndterVilkårsgrunnlag(1.vedtaksperiode, inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf( + a3 to INNTEKT + ), 1.juni)) + håndterYtelser(1.vedtaksperiode) + håndterSimulering(1.vedtaksperiode) + håndterUtbetalingsgodkjenning(1.vedtaksperiode) + håndterUtbetalt() + } + + håndterDødsmelding(1.oktober) + + val memento = memento() + + assertEquals(UNG_PERSON_FNR_2018.toString(), memento.fødselsnummer) + assertEquals(AKTØRID, memento.aktørId) + assertEquals(UNG_PERSON_FDATO_2018, memento.alder.fødselsdato) + assertEquals(1.oktober, memento.alder.dødsdato) + + assertArbeidsgivere(memento.arbeidsgivere) + assertVilkårsgrunnlaghistorikk(memento.vilkårsgrunnlagHistorikk) + assertGjenoppbygget(memento) + } + + private fun assertArbeidsgivere(arbeidsgivere: List) { + assertEquals(3, arbeidsgivere.size) + + arbeidsgivere[0].also { arbeidsgiver -> + assertEquals(a1, arbeidsgiver.organisasjonsnummer) + assertEquals(1, arbeidsgiver.inntektshistorikk.historikk.size) + arbeidsgiver.inntektshistorikk.historikk[0].also { inntektsmelding -> + assertEquals(1.januar, inntektsmelding.dato) + val forventetInntekt = INNTEKT + assertEquals(forventetInntekt.reflection { årlig, _, _, _ -> årlig }, inntektsmelding.beløp.årlig) + assertEquals(forventetInntekt.reflection { _, månedligDouble, _, _ -> månedligDouble }, inntektsmelding.beløp.månedligDouble) + assertEquals(forventetInntekt.reflection { _, _, dagligDouble, _ -> dagligDouble }, inntektsmelding.beløp.dagligDouble) + assertEquals(forventetInntekt.reflection { _, _, _, dagligInt -> dagligInt }, inntektsmelding.beløp.dagligInt) + } + assertEquals(3, arbeidsgiver.sykdomshistorikk.elementer.size) + arbeidsgiver.sykdomshistorikk.elementer[2].also { sykdomshistorikkElement -> + assertEquals(13, sykdomshistorikkElement.hendelseSykdomstidslinje.dager.size) + sykdomshistorikkElement.hendelseSykdomstidslinje.dager.also { dager -> + val forventetPeriode = 5.januar til 17.januar + forventetPeriode.forEach { dato -> + val dagen = dager.single { it.dato == dato } + assertEquals("Søknad", dagen.kilde.type) + if (dato.erHelg()) assertInstanceOf(DagMemento.SykHelgedagMemento::class.java, dagen) + else assertInstanceOf(DagMemento.SykedagMemento::class.java, dagen) + } + } + assertEquals(13, sykdomshistorikkElement.beregnetSykdomstidslinje.dager.size) + } + assertEquals(1, arbeidsgiver.sykmeldingsperioder.perioder.size) + arbeidsgiver.sykmeldingsperioder.perioder[0].also { periode -> + assertEquals(1.august, periode.fom) + assertEquals(5.august, periode.tom) + } + + assertEquals(2, arbeidsgiver.utbetalinger.size) + assertEquals(0, arbeidsgiver.vedtaksperioder.size) + assertEquals(1, arbeidsgiver.forkastede.size) + arbeidsgiver.forkastede[0].vedtaksperiode.also { vedtaksperiode -> + assertEquals(VedtaksperiodetilstandMemento.TIL_INFOTRYGD, vedtaksperiode.tilstand) + assertEquals(3, vedtaksperiode.generasjoner.generasjoner.size) + vedtaksperiode.generasjoner.generasjoner[0].also { generasjon -> + assertEquals(AvsenderMemento.SYKMELDT, generasjon.kilde.avsender) + assertNull(generasjon.vedtakFattet) + assertNotNull(generasjon.avsluttet) + assertEquals(1, generasjon.endringer.size) + generasjon.endringer[0].also { endring -> + assertEquals(5.januar, endring.periode.fom) + assertEquals(17.januar, endring.periode.tom) + assertEquals(5.januar, endring.sykmeldingsperiode.fom) + assertEquals(17.januar, endring.sykmeldingsperiode.tom) + assertEquals(DokumenttypeMemento.Søknad, endring.dokumentsporing.type) + assertEquals(13, endring.sykdomstidslinje.dager.size) + assertEquals(5.januar, endring.sykdomstidslinje.periode?.fom) + assertEquals(17.januar, endring.sykdomstidslinje.periode?.tom) + } + } + } + } + } + private fun assertVilkårsgrunnlaghistorikk(historikk: VilkårsgrunnlaghistorikkMemento) { + assertEquals(5, historikk.historikk.size) + } +} \ No newline at end of file diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/serde/api/BegrunnelseDTOTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/serde/api/BegrunnelseMementoDTOTest.kt similarity index 92% rename from sykepenger-model/src/test/kotlin/no/nav/helse/serde/api/BegrunnelseDTOTest.kt rename to sykepenger-model/src/test/kotlin/no/nav/helse/serde/api/BegrunnelseMementoDTOTest.kt index 6634b23fff..9d91fc1714 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/serde/api/BegrunnelseDTOTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/serde/api/BegrunnelseMementoDTOTest.kt @@ -5,7 +5,7 @@ import no.nav.helse.utbetalingstidslinje.Begrunnelse import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -internal class BegrunnelseDTOTest { +internal class BegrunnelseMementoDTOTest { @Test fun `likt innhold i enumene`() { diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/BegrunnelseForReduksjonEllerIkkeUtbetaltTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/BegrunnelseMementoForReduksjonEllerIkkeUtbetaltTest.kt similarity index 96% rename from sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/BegrunnelseForReduksjonEllerIkkeUtbetaltTest.kt rename to sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/BegrunnelseMementoForReduksjonEllerIkkeUtbetaltTest.kt index 81221ae7c8..9174987054 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/BegrunnelseForReduksjonEllerIkkeUtbetaltTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/BegrunnelseMementoForReduksjonEllerIkkeUtbetaltTest.kt @@ -10,7 +10,7 @@ import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -internal class BegrunnelseForReduksjonEllerIkkeUtbetaltTest: AbstractDslTest() { +internal class BegrunnelseMementoForReduksjonEllerIkkeUtbetaltTest: AbstractDslTest() { @Test fun `arbeidsgiverperioden strekker seg over to perioder og inntektsmelding kommer etter søknadene`() { diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/BegrunnelseTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/BegrunnelseMementoTest.kt similarity index 97% rename from sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/BegrunnelseTest.kt rename to sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/BegrunnelseMementoTest.kt index eeeb2d41d5..f3a6db8d63 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/BegrunnelseTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/BegrunnelseMementoTest.kt @@ -10,7 +10,7 @@ import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -internal class BegrunnelseTest { +internal class BegrunnelseMementoTest { private val økonomi = Økonomi.ikkeBetalt() @Test diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/\303\270konomi/Create\303\230konomiTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/\303\270konomi/Create\303\230konomiTest.kt" index 2603e552bd..5c6d14aa49 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/\303\270konomi/Create\303\230konomiTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/\303\270konomi/Create\303\230konomiTest.kt" @@ -6,6 +6,7 @@ import no.nav.helse.Grunnbeløp.Companion.`6G` import no.nav.helse.inspectors.inspektør import no.nav.helse.januar import no.nav.helse.person.SykdomstidslinjeVisitor +import no.nav.helse.serde.DateRange import no.nav.helse.serde.PersonData import no.nav.helse.serde.PersonData.UtbetalingstidslinjeData import no.nav.helse.sykdomstidslinje.Dag @@ -128,7 +129,9 @@ internal class CreateØkonomiTest { grad, null, null - ) + ).apply { + datoer = DateRange.Single(1.januar) + } private fun createØkonomi(dagData: UtbetalingstidslinjeData.UtbetalingsdagData): Økonomi { lateinit var fangetØkonomi: Økonomi diff --git a/sykepenger-primitiver/src/main/kotlin/no/nav/helse/hendelser/Periode.kt b/sykepenger-primitiver/src/main/kotlin/no/nav/helse/hendelser/Periode.kt index 7b275d7d3a..5a49b24c99 100644 --- a/sykepenger-primitiver/src/main/kotlin/no/nav/helse/hendelser/Periode.kt +++ b/sykepenger-primitiver/src/main/kotlin/no/nav/helse/hendelser/Periode.kt @@ -6,6 +6,7 @@ import java.time.LocalDate import java.time.format.DateTimeFormatter import no.nav.helse.erRettFør import no.nav.helse.forrigeDag +import no.nav.helse.memento.PeriodeMemento import no.nav.helse.nesteDag // Understands beginning and end of a time interval @@ -182,6 +183,8 @@ class Periode(fom: LocalDate, tom: LocalDate) : ClosedRange, Iterable fun subset(periode: Periode) = Periode(start.coerceAtLeast(periode.start), endInclusive.coerceAtMost(periode.endInclusive)) + + fun memento() = PeriodeMemento(start, endInclusive) } operator fun List.contains(dato: LocalDate) = this.any { dato in it } diff --git a/sykepenger-primitiver/src/main/kotlin/no/nav/helse/memento/PeriodeMemento.kt b/sykepenger-primitiver/src/main/kotlin/no/nav/helse/memento/PeriodeMemento.kt new file mode 100644 index 0000000000..407be536f1 --- /dev/null +++ b/sykepenger-primitiver/src/main/kotlin/no/nav/helse/memento/PeriodeMemento.kt @@ -0,0 +1,5 @@ +package no.nav.helse.memento + +import java.time.LocalDate + +data class PeriodeMemento(val fom: LocalDate, val tom: LocalDate) \ No newline at end of file diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/hendelser/SimuleringResultat.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/hendelser/SimuleringResultat.kt index 5bfce25a1a..6adcd66677 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/hendelser/SimuleringResultat.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/hendelser/SimuleringResultat.kt @@ -5,7 +5,7 @@ import java.time.LocalDate /** * Legger på en kommentar for å trigge en mulig feil et sted i bygget vårt */ -class SimuleringResultat( +data class SimuleringResultat( val totalbeløp: Int, val perioder: List ) { @@ -50,19 +50,19 @@ class SimuleringResultat( } ) - class SimulertPeriode( + data class SimulertPeriode( val periode: ClosedRange, val utbetalinger: List ) - class SimulertUtbetaling( + data class SimulertUtbetaling( val forfallsdato: LocalDate, val utbetalesTil: Mottaker, val feilkonto: Boolean, val detaljer: List ) - class Detaljer( + data class Detaljer( val periode: ClosedRange, val konto: String, val beløp: Int, @@ -74,18 +74,18 @@ class SimuleringResultat( val refunderesOrgnummer: String ) - class Sats( + data class Sats( val sats: Double, val antall: Int, val type: String ) - class Klassekode( + data class Klassekode( val kode: String, val beskrivelse: String ) - class Mottaker( + data class Mottaker( val id: String, val navn: String ) diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/InntektMemento.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/InntektMemento.kt new file mode 100644 index 0000000000..19db3cd078 --- /dev/null +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/InntektMemento.kt @@ -0,0 +1,9 @@ +package no.nav.helse.memento + +data class InntektMemento( + val årlig: Double, + val månedligDouble: Double, + val dagligDouble: Double, + val dagligInt: Int +) + diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/UtbetalingMemento.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/UtbetalingMemento.kt new file mode 100644 index 0000000000..6d568b3e57 --- /dev/null +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/UtbetalingMemento.kt @@ -0,0 +1,188 @@ +package no.nav.helse.memento + +import java.time.LocalDate +import java.time.LocalDateTime +import java.util.UUID +import no.nav.helse.hendelser.SimuleringResultat +import no.nav.helse.utbetalingslinjer.Endringskode +import no.nav.helse.utbetalingslinjer.Fagområde +import no.nav.helse.utbetalingslinjer.Klassekode +import no.nav.helse.utbetalingslinjer.Oppdragstatus +import no.nav.helse.utbetalingslinjer.Satstype +import no.nav.helse.utbetalingslinjer.Utbetalingslinje + +data class UtbetalingMemento( + val id: UUID, + val korrelasjonsId: UUID, + val periode: PeriodeMemento, + val utbetalingstidslinje: UtbetalingstidslinjeMemento, + val arbeidsgiverOppdrag: OppdragMemento, + val personOppdrag: OppdragMemento, + val tidsstempel: LocalDateTime, + val tilstand: UtbetalingTilstandMemento, + val type: UtbetalingtypeMemento, + val maksdato: LocalDate, + val forbrukteSykedager: Int?, + val gjenståendeSykedager: Int?, + val annulleringer: List, + val vurdering: UtbetalingVurderingMemento?, + val overføringstidspunkt: LocalDateTime?, + val avstemmingsnøkkel: Long?, + val avsluttet: LocalDateTime?, + val oppdatert: LocalDateTime +) + +data class UtbetalingVurderingMemento( + val godkjent: Boolean, + val ident: String, + val epost: String, + val tidspunkt: LocalDateTime, + val automatiskBehandling: Boolean +) + +sealed class UtbetalingtypeMemento { + data object UTBETALING : UtbetalingtypeMemento() + data object ETTERUTBETALING : UtbetalingtypeMemento() + data object ANNULLERING : UtbetalingtypeMemento() + data object REVURDERING : UtbetalingtypeMemento() + data object FERIEPENGER : UtbetalingtypeMemento() +} + +sealed class UtbetalingTilstandMemento { + data object NY : UtbetalingTilstandMemento() + data object IKKE_UTBETALT : UtbetalingTilstandMemento() + data object IKKE_GODKJENT : UtbetalingTilstandMemento() + data object OVERFØRT : UtbetalingTilstandMemento() + data object UTBETALT : UtbetalingTilstandMemento() + data object GODKJENT : UtbetalingTilstandMemento() + data object GODKJENT_UTEN_UTBETALING : UtbetalingTilstandMemento() + data object ANNULLERT : UtbetalingTilstandMemento() + data object FORKASTET : UtbetalingTilstandMemento() +} + +data class UtbetalingstidslinjeMemento( + val dager: List +) + +sealed class UtbetalingsdagMemento { + abstract val dato: LocalDate + abstract val økonomi: ØkonomiMemento + + data class ArbeidsgiverperiodeDagMemento( + override val dato: LocalDate, + override val økonomi: ØkonomiMemento + ) : UtbetalingsdagMemento() + data class ArbeidsgiverperiodeDagNavMemento( + override val dato: LocalDate, + override val økonomi: ØkonomiMemento + ) : UtbetalingsdagMemento() + data class NavDagMemento( + override val dato: LocalDate, + override val økonomi: ØkonomiMemento + ) : UtbetalingsdagMemento() + data class NavHelgDagMemento( + override val dato: LocalDate, + override val økonomi: ØkonomiMemento + ) : UtbetalingsdagMemento() + data class FridagMemento( + override val dato: LocalDate, + override val økonomi: ØkonomiMemento + ) : UtbetalingsdagMemento() + data class ArbeidsdagMemento( + override val dato: LocalDate, + override val økonomi: ØkonomiMemento + ) : UtbetalingsdagMemento() + data class AvvistDagMemento( + override val dato: LocalDate, + override val økonomi: ØkonomiMemento, + val begrunnelser: List + ) : UtbetalingsdagMemento() + data class ForeldetDagMemento( + override val dato: LocalDate, + override val økonomi: ØkonomiMemento + ) : UtbetalingsdagMemento() + data class UkjentDagMemento( + override val dato: LocalDate, + override val økonomi: ØkonomiMemento + ) : UtbetalingsdagMemento() +} + +sealed class BegrunnelseMemento { + data object SykepengedagerOppbrukt : BegrunnelseMemento() + data object SykepengedagerOppbruktOver67 : BegrunnelseMemento() + data object MinimumInntekt : BegrunnelseMemento() + data object MinimumInntektOver67 : BegrunnelseMemento() + data object EgenmeldingUtenforArbeidsgiverperiode : BegrunnelseMemento() + data object AndreYtelserForeldrepenger: BegrunnelseMemento() + data object AndreYtelserAap: BegrunnelseMemento() + data object AndreYtelserOmsorgspenger: BegrunnelseMemento() + data object AndreYtelserPleiepenger: BegrunnelseMemento() + data object AndreYtelserSvangerskapspenger: BegrunnelseMemento() + data object AndreYtelserOpplaringspenger: BegrunnelseMemento() + data object AndreYtelserDagpenger: BegrunnelseMemento() + data object MinimumSykdomsgrad : BegrunnelseMemento() + data object EtterDødsdato : BegrunnelseMemento() + data object Over70 : BegrunnelseMemento() + data object ManglerOpptjening : BegrunnelseMemento() + data object ManglerMedlemskap : BegrunnelseMemento() + data object NyVilkårsprøvingNødvendig : BegrunnelseMemento() +} + +data class OppdragMemento( + val mottaker: String, + val fagområde: FagområdeMemento, + val linjer: List, + val fagsystemId: String, + val endringskode: EndringskodeMemento, + val nettoBeløp: Int, + val overføringstidspunkt: LocalDateTime?, + val avstemmingsnøkkel: Long?, + val status: OppdragstatusMemento?, + val tidsstempel: LocalDateTime, + val erSimulert: Boolean, + val simuleringsResultat: SimuleringResultat? +) + +sealed class FagområdeMemento { + data object SPREF : FagområdeMemento() + data object SP : FagområdeMemento() +} +sealed class EndringskodeMemento { + data object NY : EndringskodeMemento() + data object UEND : EndringskodeMemento() + data object ENDR : EndringskodeMemento() +} + +sealed class OppdragstatusMemento { + data object OVERFØRT : OppdragstatusMemento() + data object AKSEPTERT : OppdragstatusMemento() + data object AKSEPTERT_MED_FEIL : OppdragstatusMemento() + data object AVVIST : OppdragstatusMemento() + data object FEIL : OppdragstatusMemento() +} + +data class UtbetalingslinjeMemento( + val fom: LocalDate, + val tom: LocalDate, + val satstype: SatstypeMemento, + val beløp: Int?, + val grad: Int?, + val refFagsystemId: String?, + val delytelseId: Int, + val refDelytelseId: Int?, + val endringskode: EndringskodeMemento, + val klassekode: KlassekodeMemento, + val datoStatusFom: LocalDate? +) + +sealed class KlassekodeMemento(val verdi: String) { + data object RefusjonIkkeOpplysningspliktig : KlassekodeMemento("SPREFAG-IOP") + data object RefusjonFeriepengerIkkeOpplysningspliktig : KlassekodeMemento("SPREFAGFER-IOP") + data object SykepengerArbeidstakerOrdinær : KlassekodeMemento("SPATORD") + data object SykepengerArbeidstakerFeriepenger : KlassekodeMemento("SPATFER") +} + +sealed class SatstypeMemento { + data object Daglig : SatstypeMemento() + data object Engang : SatstypeMemento() +} \ No newline at end of file diff --git "a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/\303\230konomiMemento.kt" "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/\303\230konomiMemento.kt" new file mode 100644 index 0000000000..73280fafea --- /dev/null +++ "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/memento/\303\230konomiMemento.kt" @@ -0,0 +1,15 @@ +package no.nav.helse.memento + +data class ØkonomiMemento( + val grad: ProsentdelMemento, + val totalGrad: ProsentdelMemento, + val arbeidsgiverRefusjonsbeløp: InntektMemento, + val aktuellDagsinntekt: InntektMemento, + val beregningsgrunnlag: InntektMemento, + val dekningsgrunnlag: InntektMemento, + val grunnbeløpgrense: InntektMemento?, + val arbeidsgiverbeløp: InntektMemento?, + val personbeløp: InntektMemento?, + val er6GBegrenset: Boolean? +) +data class ProsentdelMemento(val prosent: Double) \ No newline at end of file diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Oppdrag.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Oppdrag.kt index 26533d920d..b0fee0aa86 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Oppdrag.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Oppdrag.kt @@ -8,6 +8,10 @@ import no.nav.helse.hendelser.Simulering import no.nav.helse.hendelser.SimuleringResultat import no.nav.helse.hendelser.til import no.nav.helse.hendelser.utbetaling.UtbetalingHendelse +import no.nav.helse.memento.EndringskodeMemento +import no.nav.helse.memento.FagområdeMemento +import no.nav.helse.memento.OppdragMemento +import no.nav.helse.memento.OppdragstatusMemento import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype import no.nav.helse.person.aktivitetslogg.Aktivitetskontekst import no.nav.helse.person.aktivitetslogg.IAktivitetslogg @@ -463,6 +467,35 @@ class Oppdrag private constructor( } } } + + fun memento() = OppdragMemento( + mottaker = mottaker, + fagområde = when (fagområde) { + Fagområde.SykepengerRefusjon -> FagområdeMemento.SPREF + Fagområde.Sykepenger -> FagområdeMemento.SP + }, + linjer = linjer.map { it.memento() }, + fagsystemId = fagsystemId, + endringskode = when (endringskode) { + Endringskode.NY -> EndringskodeMemento.NY + Endringskode.UEND -> EndringskodeMemento.UEND + Endringskode.ENDR -> EndringskodeMemento.ENDR + }, + nettoBeløp = nettoBeløp, + overføringstidspunkt = overføringstidspunkt, + avstemmingsnøkkel = avstemmingsnøkkel, + status = when (status) { + Oppdragstatus.OVERFØRT -> OppdragstatusMemento.OVERFØRT + Oppdragstatus.AKSEPTERT -> OppdragstatusMemento.AKSEPTERT + Oppdragstatus.AKSEPTERT_MED_FEIL -> OppdragstatusMemento.AKSEPTERT_MED_FEIL + Oppdragstatus.AVVIST -> OppdragstatusMemento.AVVIST + Oppdragstatus.FEIL -> OppdragstatusMemento.FEIL + null -> null + }, + tidsstempel = tidsstempel, + erSimulert = erSimulert, + simuleringsResultat = simuleringsResultat + ) } enum class Oppdragstatus { OVERFØRT, AKSEPTERT, AKSEPTERT_MED_FEIL, AVVIST, FEIL } \ No newline at end of file diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetaling.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetaling.kt index e20242694d..b882773ac6 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetaling.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetaling.kt @@ -12,6 +12,10 @@ import no.nav.helse.hendelser.utbetaling.Utbetalingpåminnelse import no.nav.helse.hendelser.utbetaling.Utbetalingsavgjørelse import no.nav.helse.hendelser.utbetaling.valider import no.nav.helse.hendelser.utbetaling.vurdering +import no.nav.helse.memento.UtbetalingMemento +import no.nav.helse.memento.UtbetalingTilstandMemento +import no.nav.helse.memento.UtbetalingVurderingMemento +import no.nav.helse.memento.UtbetalingtypeMemento import no.nav.helse.person.aktivitetslogg.Aktivitetskontekst import no.nav.helse.person.aktivitetslogg.GodkjenningsbehovBuilder import no.nav.helse.person.aktivitetslogg.IAktivitetslogg @@ -471,7 +475,7 @@ class Utbetaling private constructor( } override fun toString() = "$type(${tilstand.status}) - $periode" - internal interface Tilstand { + internal sealed interface Tilstand { val status: Utbetalingstatus fun forkast(utbetaling: Utbetaling, hendelse: IAktivitetslogg) {} @@ -754,8 +758,52 @@ class Utbetaling private constructor( utbetaling.type == ANNULLERING -> Annullert else -> GodkjentUtenUtbetaling } + + fun memento() = UtbetalingVurderingMemento( + godkjent = godkjent, + ident = ident, + epost = epost, + tidspunkt = tidspunkt, + automatiskBehandling = automatiskBehandling + ) } + fun memento() = UtbetalingMemento( + id = this.id, + korrelasjonsId = this.korrelasjonsId, + periode = this.periode.memento(), + utbetalingstidslinje = this.utbetalingstidslinje.memento(), + arbeidsgiverOppdrag = this.arbeidsgiverOppdrag.memento(), + personOppdrag = this.personOppdrag.memento(), + tidsstempel = this.tidsstempel, + tilstand = when (tilstand) { + Annullert -> UtbetalingTilstandMemento.ANNULLERT + Forkastet -> UtbetalingTilstandMemento.FORKASTET + Godkjent -> UtbetalingTilstandMemento.GODKJENT + GodkjentUtenUtbetaling -> UtbetalingTilstandMemento.GODKJENT_UTEN_UTBETALING + IkkeGodkjent -> UtbetalingTilstandMemento.IKKE_GODKJENT + Ny -> UtbetalingTilstandMemento.NY + Overført -> UtbetalingTilstandMemento.OVERFØRT + Ubetalt -> UtbetalingTilstandMemento.IKKE_UTBETALT + Utbetalt -> UtbetalingTilstandMemento.UTBETALT + }, + type = when (type) { + Utbetalingtype.UTBETALING -> UtbetalingtypeMemento.UTBETALING + Utbetalingtype.ETTERUTBETALING -> UtbetalingtypeMemento.ETTERUTBETALING + Utbetalingtype.ANNULLERING -> UtbetalingtypeMemento.ANNULLERING + Utbetalingtype.REVURDERING -> UtbetalingtypeMemento.REVURDERING + Utbetalingtype.FERIEPENGER -> UtbetalingtypeMemento.FERIEPENGER + }, + maksdato = this.maksdato, + forbrukteSykedager = this.forbrukteSykedager, + gjenståendeSykedager = this.gjenståendeSykedager, + annulleringer = this.annulleringer.mapNotNull { it.id }, + vurdering = this.vurdering?.memento(), + overføringstidspunkt = overføringstidspunkt, + avstemmingsnøkkel = avstemmingsnøkkel, + avsluttet = avsluttet, + oppdatert = oppdatert + ) } enum class Utbetalingstatus { diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetalingslinje.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetalingslinje.kt index e7cdad2c02..a59b43afff 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetalingslinje.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetalingslinje.kt @@ -6,6 +6,10 @@ import no.nav.helse.erHelg import no.nav.helse.erRettFør import no.nav.helse.forrigeDag import no.nav.helse.hendelser.til +import no.nav.helse.memento.EndringskodeMemento +import no.nav.helse.memento.KlassekodeMemento +import no.nav.helse.memento.SatstypeMemento +import no.nav.helse.memento.UtbetalingslinjeMemento import no.nav.helse.utbetalingslinjer.Endringskode.ENDR import no.nav.helse.utbetalingslinjer.Endringskode.NY import no.nav.helse.utbetalingslinjer.Endringskode.UEND @@ -260,6 +264,33 @@ class Utbetalingslinje( "datoStatusFom" to datoStatusFom?.toString(), "klassekode" to klassekode.verdi ) + + fun memento() = UtbetalingslinjeMemento( + fom = this.fom, + tom = this.tom, + satstype = when { + satstype === Satstype.Daglig -> SatstypeMemento.Daglig + satstype === Satstype.Engang -> SatstypeMemento.Engang + else -> error("ukjent statype: $satstype") + }, + beløp = this.beløp, + grad = this.grad, + refFagsystemId = this.refFagsystemId, + delytelseId = this.delytelseId, + refDelytelseId = this.refDelytelseId, + endringskode = when (endringskode) { + NY -> EndringskodeMemento.NY + UEND -> EndringskodeMemento.UEND + ENDR -> EndringskodeMemento.ENDR + }, + klassekode = when (klassekode) { + RefusjonIkkeOpplysningspliktig -> KlassekodeMemento.RefusjonIkkeOpplysningspliktig + Klassekode.RefusjonFeriepengerIkkeOpplysningspliktig -> KlassekodeMemento.RefusjonFeriepengerIkkeOpplysningspliktig + Klassekode.SykepengerArbeidstakerOrdinær -> KlassekodeMemento.SykepengerArbeidstakerOrdinær + Klassekode.SykepengerArbeidstakerFeriepenger -> KlassekodeMemento.SykepengerArbeidstakerFeriepenger + }, + datoStatusFom = this.datoStatusFom + ) } interface UtbetalingslinjeVisitor { diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingsdag.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingsdag.kt index ef040a9a14..5a7df076ed 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingsdag.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingsdag.kt @@ -3,6 +3,8 @@ package no.nav.helse.utbetalingstidslinje import java.time.LocalDate import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.Periode.Companion.grupperSammenhengendePerioder +import no.nav.helse.memento.UtbetalingsdagMemento +import no.nav.helse.memento.ØkonomiMemento import no.nav.helse.utbetalingslinjer.Beløpkilde import no.nav.helse.utbetalingstidslinje.Utbetalingstidslinje.Companion.periode import no.nav.helse.økonomi.betal @@ -39,12 +41,17 @@ sealed class Utbetalingsdag( override val prioritet = 30 override fun accept(visitor: UtbetalingsdagVisitor) = visitor.visit(this, dato, økonomi) override fun kopierMed(økonomi: Økonomi) = ArbeidsgiverperiodeDag(dato, økonomi) + override fun memento(dato: LocalDate, økonomi: ØkonomiMemento) = + UtbetalingsdagMemento.ArbeidsgiverperiodeDagMemento(dato, økonomi) + } class ArbeidsgiverperiodedagNav(dato: LocalDate, økonomi: Økonomi) : Utbetalingsdag(dato, økonomi) { override val prioritet = 45 override fun accept(visitor: UtbetalingsdagVisitor) = visitor.visit(this, dato, økonomi) override fun kopierMed(økonomi: Økonomi) = ArbeidsgiverperiodedagNav(dato, økonomi) + override fun memento(dato: LocalDate, økonomi: ØkonomiMemento) = + UtbetalingsdagMemento.ArbeidsgiverperiodeDagNavMemento(dato, økonomi) } class NavDag( @@ -54,6 +61,8 @@ sealed class Utbetalingsdag( override val prioritet = 50 override fun accept(visitor: UtbetalingsdagVisitor) = visitor.visit(this, dato, økonomi) override fun kopierMed(økonomi: Økonomi) = NavDag(dato, økonomi) + override fun memento(dato: LocalDate, økonomi: ØkonomiMemento) = + UtbetalingsdagMemento.NavDagMemento(dato, økonomi) } class NavHelgDag(dato: LocalDate, økonomi: Økonomi) : @@ -61,18 +70,24 @@ sealed class Utbetalingsdag( override val prioritet = 40 override fun accept(visitor: UtbetalingsdagVisitor) = visitor.visit(this, dato, økonomi) override fun kopierMed(økonomi: Økonomi) = NavHelgDag(dato, økonomi) + override fun memento(dato: LocalDate, økonomi: ØkonomiMemento) = + UtbetalingsdagMemento.NavHelgDagMemento(dato, økonomi) } class Fridag(dato: LocalDate, økonomi: Økonomi) : Utbetalingsdag(dato, økonomi) { override val prioritet = 20 override fun accept(visitor: UtbetalingsdagVisitor) = visitor.visit(this, dato, økonomi) override fun kopierMed(økonomi: Økonomi) = Fridag(dato, økonomi) + override fun memento(dato: LocalDate, økonomi: ØkonomiMemento) = + UtbetalingsdagMemento.FridagMemento(dato, økonomi) } class Arbeidsdag(dato: LocalDate, økonomi: Økonomi) : Utbetalingsdag(dato, økonomi) { override val prioritet = 10 override fun accept(visitor: UtbetalingsdagVisitor) = visitor.visit(this, dato, økonomi) override fun kopierMed(økonomi: Økonomi) = Arbeidsdag(dato, økonomi) + override fun memento(dato: LocalDate, økonomi: ØkonomiMemento) = + UtbetalingsdagMemento.ArbeidsdagMemento(dato, økonomi) } class AvvistDag( @@ -88,6 +103,8 @@ sealed class Utbetalingsdag( override fun erAvvistMed(begrunnelse: Begrunnelse) = takeIf { begrunnelse in begrunnelser } override fun kopierMed(økonomi: Økonomi) = AvvistDag(dato, økonomi, begrunnelser) + override fun memento(dato: LocalDate, økonomi: ØkonomiMemento) = + UtbetalingsdagMemento.AvvistDagMemento(dato, økonomi, begrunnelser.map { it.memento() }) } class ForeldetDag(dato: LocalDate, økonomi: Økonomi) : @@ -95,12 +112,16 @@ sealed class Utbetalingsdag( override val prioritet = 40 // Mellom ArbeidsgiverperiodeDag og NavDag override fun accept(visitor: UtbetalingsdagVisitor) = visitor.visit(this, dato, økonomi) override fun kopierMed(økonomi: Økonomi) = ForeldetDag(dato, økonomi) + override fun memento(dato: LocalDate, økonomi: ØkonomiMemento) = + UtbetalingsdagMemento.ForeldetDagMemento(dato, økonomi) } class UkjentDag(dato: LocalDate, økonomi: Økonomi) : Utbetalingsdag(dato, økonomi) { override val prioritet = 0 override fun accept(visitor: UtbetalingsdagVisitor) = visitor.visit(this, dato, økonomi) override fun kopierMed(økonomi: Økonomi) = UkjentDag(dato, økonomi) + override fun memento(dato: LocalDate, økonomi: ØkonomiMemento) = + UtbetalingsdagMemento.UkjentDagMemento(dato, økonomi) } companion object { @@ -139,6 +160,9 @@ sealed class Utbetalingsdag( } ?: tidslinjer } } + + fun memento() = memento(this.dato, this.økonomi.memento()) + protected abstract fun memento(dato: LocalDate, økonomi: ØkonomiMemento): UtbetalingsdagMemento } /** diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingstidslinje.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingstidslinje.kt index 12e1ae537f..9ef2d7d173 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingstidslinje.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingstidslinje.kt @@ -6,6 +6,8 @@ import no.nav.helse.erHelg import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.contains import no.nav.helse.hendelser.til +import no.nav.helse.memento.BegrunnelseMemento +import no.nav.helse.memento.UtbetalingstidslinjeMemento import no.nav.helse.utbetalingstidslinje.Utbetalingsdag.Arbeidsdag import no.nav.helse.utbetalingstidslinje.Utbetalingsdag.ArbeidsgiverperiodeDag import no.nav.helse.utbetalingstidslinje.Utbetalingsdag.ArbeidsgiverperiodedagNav @@ -204,12 +206,37 @@ class Utbetalingstidslinje(utbetalingsdager: Collection) : Colle utbetalingsdager.add(dag) } } + + fun memento() = UtbetalingstidslinjeMemento( + dager = this.map { it.memento() } + ) } sealed class Begrunnelse { open fun skalAvvises(utbetalingsdag: Utbetalingsdag) = utbetalingsdag is AvvistDag || utbetalingsdag is NavDag || utbetalingsdag is ArbeidsgiverperiodedagNav + fun memento() = when (this) { + AndreYtelserAap -> BegrunnelseMemento.AndreYtelserAap + AndreYtelserDagpenger -> BegrunnelseMemento.AndreYtelserDagpenger + AndreYtelserForeldrepenger -> BegrunnelseMemento.AndreYtelserForeldrepenger + AndreYtelserOmsorgspenger -> BegrunnelseMemento.AndreYtelserOmsorgspenger + AndreYtelserOpplaringspenger -> BegrunnelseMemento.AndreYtelserOpplaringspenger + AndreYtelserPleiepenger -> BegrunnelseMemento.AndreYtelserPleiepenger + AndreYtelserSvangerskapspenger -> BegrunnelseMemento.AndreYtelserSvangerskapspenger + EgenmeldingUtenforArbeidsgiverperiode -> BegrunnelseMemento.EgenmeldingUtenforArbeidsgiverperiode + EtterDødsdato -> BegrunnelseMemento.EtterDødsdato + ManglerMedlemskap -> BegrunnelseMemento.ManglerMedlemskap + ManglerOpptjening -> BegrunnelseMemento.ManglerOpptjening + MinimumInntekt -> BegrunnelseMemento.MinimumInntekt + MinimumInntektOver67 -> BegrunnelseMemento.MinimumInntektOver67 + MinimumSykdomsgrad -> BegrunnelseMemento.MinimumSykdomsgrad + NyVilkårsprøvingNødvendig -> BegrunnelseMemento.NyVilkårsprøvingNødvendig + Over70 -> BegrunnelseMemento.Over70 + SykepengedagerOppbrukt -> BegrunnelseMemento.SykepengedagerOppbrukt + SykepengedagerOppbruktOver67 -> BegrunnelseMemento.SykepengedagerOppbruktOver67 + } + object SykepengedagerOppbrukt : Begrunnelse() object SykepengedagerOppbruktOver67 : Begrunnelse() object MinimumInntekt : Begrunnelse() diff --git "a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/Inntekt.kt" "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/Inntekt.kt" index 20822c882e..d9dc9e5a8e 100644 --- "a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/Inntekt.kt" +++ "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/Inntekt.kt" @@ -2,6 +2,7 @@ package no.nav.helse.økonomi import java.time.LocalDate import no.nav.helse.etterlevelse.SubsumsjonObserver +import no.nav.helse.memento.InntektMemento import no.nav.helse.memoize import no.nav.helse.økonomi.Prosentdel.Companion.average import kotlin.math.roundToInt @@ -92,6 +93,12 @@ class Inntekt private constructor(private val årlig: Double) : Comparable { @@ -63,4 +64,6 @@ class Prosentdel private constructor(private val brøkdel: BigDecimal): Comparab fun toDouble() = brøkdel.multiply(HUNDRE_PROSENT, mc).toDouble() internal fun erUnderGrensen() = this < GRENSE + + fun memento() = ProsentdelMemento(prosent = toDouble()) } \ No newline at end of file diff --git "a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/\303\230konomi.kt" "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/\303\230konomi.kt" index 8fb15b35db..82a9bd9209 100644 --- "a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/\303\230konomi.kt" +++ "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/\303\230konomi.kt" @@ -1,5 +1,6 @@ package no.nav.helse.økonomi +import no.nav.helse.memento.ØkonomiMemento import no.nav.helse.økonomi.Inntekt.Companion.INGEN import no.nav.helse.økonomi.Inntekt.Companion.daglig import no.nav.helse.økonomi.Inntekt.Companion.summer @@ -354,6 +355,19 @@ class Økonomi private constructor( ) } } + + fun memento() = ØkonomiMemento( + grad = grad.memento(), + totalGrad = totalGrad.memento(), + arbeidsgiverRefusjonsbeløp = arbeidsgiverRefusjonsbeløp.memento(), + aktuellDagsinntekt = aktuellDagsinntekt.memento(), + beregningsgrunnlag = beregningsgrunnlag.memento(), + dekningsgrunnlag = dekningsgrunnlag.memento(), + grunnbeløpgrense = grunnbeløpgrense?.memento(), + arbeidsgiverbeløp = arbeidsgiverbeløp?.memento(), + personbeløp = personbeløp?.memento(), + er6GBegrenset = er6GBegrenset + ) } abstract class ØkonomiBuilder {