From e82ca3e388b15ec20a22e7641acf7f3e9a70246b Mon Sep 17 00:00:00 2001 From: Linus Johansson Date: Wed, 27 Nov 2024 15:12:05 +0100 Subject: [PATCH] ktfmt formateringsregler i editorconfig, uten trailing commas. No plugin needed --- .editorconfig | 95 + doc/fimkt/flereIM_kortTid.md | 2 +- .../eksperimenterITilstandsdiagram.md | 2 +- jobs/build.gradle.kts | 7 +- .../kotlin/no/nav/helse/spleis/jobs/App.kt | 64 +- .../spleis/jobs/MigrereGrunnbel\303\270p.kt" | 19 +- .../helse/person/aktivitetslogg/Aktivitet.kt | 115 +- .../person/aktivitetslogg/Aktivitetslogg.kt | 15 +- .../person/aktivitetslogg/IAktivitetslogg.kt | 7 +- .../aktivitetslogg/SpesifikkKontekst.kt | 10 +- .../helse/person/aktivitetslogg/Varselkode.kt | 366 ++- .../no/nav/helse/dto/SpannerPersonDto.kt | 200 +- .../spleis/graphql/dto/GraphQLHendelse.kt | 10 +- .../graphql/dto/GraphQLTidslinjeperiode.kt | 10 +- .../graphql/dto/GraphQLVilkarsgrunnlag.kt | 10 +- .../helse/spleis/graphql/SchemaGenerator.kt | 19 +- sykepenger-api/build.gradle.kts | 7 +- .../main/kotlin/no/nav/helse/spleis/App.kt | 31 +- .../main/kotlin/no/nav/helse/spleis/Nais.kt | 1 - .../helse/spleis/RequestResponseTracing.kt | 11 +- .../no/nav/helse/spleis/SpekematClient.kt | 24 +- .../kotlin/no/nav/helse/spleis/SpleisApi.kt | 18 +- .../spleis/config/ApplicationConfiguration.kt | 12 +- .../no/nav/helse/spleis/dao/HendelseDao.kt | 19 +- .../no/nav/helse/spleis/dao/PersonDao.kt | 16 +- .../no/nav/helse/spleis/dao/PostgresProbe.kt | 2 +- .../no/nav/helse/spleis/dto/HendelseDTO.kt | 94 +- .../kotlin/no/nav/helse/spleis/graphql/Api.kt | 113 +- .../no/nav/helse/spleis/graphql/Mapping.kt | 104 +- .../nav/helse/spleis/graphql/PersonQuery.kt | 75 +- .../speil/builders/ArbeidsgiverBuilder.kt | 22 +- .../helse/spleis/speil/builders/Bindevev.kt | 3 +- .../spleis/speil/builders/PersonBuilder.kt | 15 +- .../builders/SpeilGenerasjonerBuilder.kt | 160 +- .../spleis/speil/builders/TidslinjeBuilder.kt | 68 +- .../Vilk\303\245rsgrunnlagBuilder.kt" | 137 +- .../helse/spleis/speil/dto/ArbeidsgiverDTO.kt | 37 +- .../helse/spleis/speil/dto/GenerasjonerDTO.kt | 23 +- .../helse/spleis/speil/dto/GhostPeriodeDTO.kt | 21 +- .../dto/NyttInntektsforholdPeriodeDTO.kt | 12 +- .../helse/spleis/speil/dto/TidslinjeDTO.kt | 6 +- .../nav/helse/spleis/sporing/PersonBuilder.kt | 26 +- .../no/nav/helse/spleis/sporing/SporingDTO.kt | 2 +- .../src/test/kotlin/no/nav/helse/Datoer.kt | 23 +- .../kotlin/no/nav/helse/GjenopprettFraJson.kt | 4 +- .../helse/spleis/AbstractObservableTest.kt | 60 +- .../nav/helse/spleis/Applikasjonsservere.kt | 35 +- .../no/nav/helse/spleis/AzureTokenStub.kt | 5 +- .../src/test/kotlin/no/nav/helse/spleis/DB.kt | 3 +- .../kotlin/no/nav/helse/spleis/JwtStub.kt | 70 +- .../no/nav/helse/spleis/LokalePayload.kt | 4 +- .../kotlin/no/nav/helse/spleis/RestApiTest.kt | 40 +- .../test/kotlin/no/nav/helse/spleis/Retry.kt | 7 +- .../no/nav/helse/spleis/SpekematClientTest.kt | 17 +- .../helse/spleis/graphql/AbstractE2ETest.kt | 238 +- .../helse/spleis/graphql/GraphQLApiTest.kt | 100 +- .../graphql/SpeilBehandlingerBuilderTest.kt | 369 ++- .../spleis/graphql/SpeilBuilderFlereAGTest.kt | 157 +- .../helse/spleis/graphql/SpeilBuilderTest.kt | 263 ++- .../no/nav/helse/spleis/graphql/Spekemat.kt | 3 +- .../ArbeidsgiverHendelsefabrikk.kt | 46 +- .../nav/helse/spleis/testhelpers/Inntekter.kt | 22 +- .../testhelpers/PersonHendelsefabrikk.kt | 112 +- .../testhelpers/TestObservat\303\270r.kt" | 19 +- .../no/nav/helse/etterlevelse/Subsumsjon.kt | 29 +- .../nav/helse/etterlevelse/Subsumsjonslogg.kt | 193 +- .../no/nav/helse/etterlevelse/Tidslinjedag.kt | 23 +- .../helse/etterlevelse/EnkelSubsumsjonTest.kt | 13 +- .../no/nav/helse/etterlevelse/LovverkTest.kt | 7 +- sykepenger-mediators/build.gradle.kts | 15 +- .../kotlin/no/nav/helse/ApplicationBuilder.kt | 15 +- .../kotlin/no/nav/helse/spleis/Avstemmer.kt | 9 +- .../no/nav/helse/spleis/BehovMediator.kt | 16 +- .../no/nav/helse/spleis/DatadelingMediator.kt | 8 +- .../no/nav/helse/spleis/HendelseMediator.kt | 422 +++- .../no/nav/helse/spleis/MessageMediator.kt | 35 +- .../no/nav/helse/spleis/PersonMediator.kt | 513 +++-- .../no/nav/helse/spleis/Personopplysninger.kt | 5 +- .../no/nav/helse/spleis/PostgresProbe.kt | 2 +- .../no/nav/helse/spleis/SubsumsjonMediator.kt | 35 +- .../nav/helse/spleis/VedtaksperiodeProbe.kt | 11 +- .../nav/helse/spleis/db/HendelseRepository.kt | 28 +- .../no/nav/helse/spleis/db/PersonDao.kt | 185 +- .../meldinger/AnmodningOmForkastingRiver.kt | 6 +- .../meldinger/AnnullerUtbetalingerRiver.kt | 6 +- .../meldinger/ArbeidsgiverBehovRiver.kt | 1 - .../meldinger/AvbruttS\303\270knadRiver.kt" | 6 +- .../nav/helse/spleis/meldinger/BehovRiver.kt | 2 - .../meldinger/D\303\270dsmeldingerRiver.kt" | 12 +- .../ForkastSykmeldingsperioderRiver.kt | 6 +- .../Grunnbel\303\270psreguleringRiver.kt" | 6 +- .../helse/spleis/meldinger/HendelseRiver.kt | 30 +- .../meldinger/IdentOpph\303\270rtRiver.kt" | 10 +- .../meldinger/InfotrygdendringerRiver.kt | 12 +- .../meldinger/InntektsmeldingerReplayRiver.kt | 6 +- .../meldinger/InntektsmeldingerRiver.kt | 8 +- .../helse/spleis/meldinger/MigrateRiver.kt | 9 +- .../MinimumSykdomsgradVurdertRiver.kt | 8 +- .../NyeArbeidsledigS\303\270knaderRiver.kt" | 6 +- .../NyeFrilansS\303\270knaderRiver.kt" | 7 +- .../NyeSelvstendigS\303\270knaderRiver.kt" | 6 +- .../meldinger/NyeS\303\270knaderRiver.kt" | 6 +- .../meldinger/OverstyrArbeidsforholdRiver.kt | 10 +- .../OverstyrArbeidsgiveropplysningerRiver.kt | 17 +- .../spleis/meldinger/OverstyrTidlinjeRiver.kt | 8 +- .../spleis/meldinger/PersonAvstemmingRiver.kt | 6 +- .../PersonP\303\245minnelserRiver.kt" | 6 +- .../meldinger/P\303\245minnelserRiver.kt" | 27 +- .../SendtArbeidsgiverS\303\270knaderRiver.kt" | 33 +- .../SendtArbeidsledigS\303\270knaderRiver.kt" | 24 +- .../SendtFrilansS\303\270knaderRiver.kt" | 22 +- .../SendtNavS\303\270knaderRiver.kt" | 28 +- .../SendtSelvstendigS\303\270knaderRiver.kt" | 22 +- .../spleis/meldinger/SimuleringerRiver.kt | 8 +- .../Skj\303\270nnsmessigFastsettelseRiver.kt" | 15 +- .../SykepengegrunnlagForArbeidsgiverRiver.kt | 23 +- .../spleis/meldinger/S\303\270knadRiver.kt" | 2 +- .../spleis/meldinger/UtbetalingerRiver.kt | 21 +- .../Utbetalingp\303\245minnelserRiver.kt" | 17 +- .../UtbetalingsgodkjenningerRiver.kt | 10 +- ...ingshistorikkEtterInfotrygdendringRiver.kt | 13 +- ...UtbetalingshistorikkForFeriepengerRiver.kt | 15 +- .../meldinger/UtbetalingshistorikkRiver.kt | 18 +- .../meldinger/Vilk\303\245rsgrunnlagRiver.kt" | 66 +- .../helse/spleis/meldinger/YtelserRiver.kt | 16 +- .../model/AnmodningOmForkastingMessage.kt | 9 +- .../meldinger/model/AnnulleringMessage.kt | 7 +- ...vbruttArbeidsledigS\303\270knadMessage.kt" | 11 +- .../model/AvbruttS\303\270knadMessage.kt" | 11 +- .../meldinger/model/AvstemmingMessage.kt | 3 +- .../spleis/meldinger/model/BehovMessage.kt | 1 - .../model/D\303\270dsmeldingMessage.kt" | 17 +- .../ForkastSykmeldingsperioderMessage.kt | 11 +- .../Grunnbel\303\270psreguleringMessage.kt" | 9 +- .../spleis/meldinger/model/HendelseMessage.kt | 114 +- .../model/IdentOpph\303\270rtMessage.kt" | 14 +- .../model/InfotrygdendringMessage.kt | 13 +- .../meldinger/model/InntektsmeldingMessage.kt | 20 +- .../model/InntektsmeldingerReplayMessage.kt | 28 +- .../spleis/meldinger/model/MigrateMessage.kt | 12 +- .../model/MinimumSykdomsgradVurdertMessage.kt | 15 +- .../NyArbeidsledigS\303\270knadMessage.kt" | 24 +- .../model/NyFrilansS\303\270knadMessage.kt" | 24 +- .../NySelvstendigS\303\270knadMessage.kt" | 23 +- .../model/NyS\303\270knadBuilder.kt" | 10 +- .../model/NyS\303\270knadMessage.kt" | 21 +- .../model/OverstyrArbeidsforholdMessage.kt | 9 +- ...OverstyrArbeidsgiveropplysningerMessage.kt | 76 +- .../model/OverstyrTidslinjeMessage.kt | 35 +- .../model/PersonP\303\245minnelseMessage.kt" | 7 +- .../model/P\303\245minnelseMessage.kt" | 12 +- .../SendtS\303\270knadArbeidsgiverMessage.kt" | 23 +- .../SendtS\303\270knadArbeidsledigMessage.kt" | 25 +- .../model/SendtS\303\270knadBuilder.kt" | 9 +- .../SendtS\303\270knadFrilansMessage.kt" | 25 +- .../model/SendtS\303\270knadNavMessage.kt" | 57 +- .../SendtS\303\270knadSelvstendigMessage.kt" | 25 +- .../meldinger/model/SimuleringMessage.kt | 28 +- ...kj\303\270nnsmessigFastsettelseMessage.kt" | 28 +- ...SykepengegrunnlagForArbeidsgiverMessage.kt | 29 +- .../meldinger/model/S\303\270knadBuilder.kt" | 25 +- .../meldinger/model/S\303\270knadMessage.kt" | 9 +- .../meldinger/model/UtbetalingMessage.kt | 15 +- .../Utbetalingp\303\245minnelseMessage.kt" | 13 +- .../model/UtbetalingsgodkjenningMessage.kt | 20 +- ...gshistorikkEtterInfotrygdendringMessage.kt | 5 +- ...betalingshistorikkForFeriepengerMessage.kt | 105 +- .../model/UtbetalingshistorikkMessage.kt | 35 +- .../model/Vilk\303\245rsgrunnlagMessage.kt" | 62 +- .../spleis/meldinger/model/YtelserMessage.kt | 35 +- .../spleis/monitorering/MonitoreringRiver.kt | 29 +- .../no/nav/helse/spleis/monitorering/Sjekk.kt | 4 +- .../test/kotlin/no/nav/helse/DatoerTest.kt | 2 +- .../helse/behov/AktivitetsloggBehovTest.kt | 4 +- .../spleis/mediator/BehovMediatorTest.kt | 61 +- .../no/nav/helse/spleis/mediator/Database.kt | 3 +- .../spleis/mediator/DatadelingMediatorTest.kt | 19 +- .../spleis/mediator/MessageMediatorTest.kt | 140 +- .../spleis/mediator/MonitoreringRiverTest.kt | 7 +- .../spleis/mediator/TestHendelseMediator.kt | 138 +- .../spleis/mediator/TestMessageFactory.kt | 349 +-- .../spleis/mediator/VarseloppsamlerTest.kt | 46 +- .../mediator/db/HendelseRepositoryTest.kt | 12 +- .../e2e/AbstractEndToEndMediatorTest.kt | 227 +- .../e2e/Akt\303\270rEndringE2ETest.kt" | 113 +- .../mediator/e2e/AndreInntektskilderTest.kt | 18 +- .../e2e/ArbeidsgiveropplysningerTest.kt | 253 ++- .../mediator/e2e/ArbeidsledigMediatorTest.kt | 33 +- .../e2e/ArbeidsopplysningerKorrigertTest.kt | 32 +- .../e2e/AvsluttetMedVedtakKontraktTest.kt | 78 +- .../mediator/e2e/AvstemmingMediatorTest.kt | 121 +- .../mediator/e2e/BehandlingerMediatorTest.kt | 49 +- .../spleis/mediator/e2e/BehovkontraktTest.kt | 116 +- .../mediator/e2e/FeriepengeMediatorTest.kt | 463 ++-- ...erneGodkjenningsbehovOgVedtakFattetTest.kt | 14 +- .../e2e/FlereArbeidsgivereMediatorTest.kt | 46 +- .../e2e/ForkastetVedtaksperiodeTest.kt | 57 +- .../spleis/mediator/e2e/FrilanserTest.kt | 16 +- .../e2e/GenerellMeldingskontraktTest.kt | 128 +- .../e2e/HendelseYtelserMediatorTest.kt | 289 ++- .../mediator/e2e/InfotrygdendringTest.kt | 33 +- ...ntekterFraSkattLagtTilGrunnKontraktTest.kt | 17 +- .../mediator/e2e/InntektsmeldingReplayTest.kt | 59 +- .../spleis/mediator/e2e/KontraktAssertions.kt | 40 +- .../e2e/KunEnArbeidsgiverMediatorTest.kt | 220 +- .../e2e/MinimumSykdomsgradVurdertTest.kt | 42 +- ...tyrArbeidsgiveropplysningerMediatorTest.kt | 41 +- .../mediator/e2e/P\303\245minnelserTest.kt" | 60 +- .../RevurderingAvsluttetUtenUtbetalingTest.kt | 111 +- .../e2e/RevurderingseventyrkontraktTest.kt | 21 +- .../mediator/e2e/SelvstendigMediatorTest.kt | 16 +- ...3\270nnsmessigFastsettelseMediatorTest.kt" | 17 +- .../mediator/e2e/SpreOppgaverKontraktTest.kt | 25 +- .../spleis/mediator/e2e/UgyldigDataTest.kt | 24 +- .../mediator/e2e/UtbetalingkontraktTest.kt | 291 ++- .../mediator/e2e/VedtaksperiodeVenterTest.kt | 97 +- .../mediator/etterlevelse/SubsumsjonTest.kt | 185 +- .../etterlevelse/SubsumsjonsmeldingTest.kt | 15 +- .../AnmodningOmForkastingRiverTest.kt | 2 +- .../AnnullerUtbetalingerRiverRiverTest.kt | 4 +- .../meldinger/InfotrygdendringerRiverTest.kt | 7 +- .../meldinger/InntektsmeldingMessageTest.kt | 43 +- .../meldinger/InntektsmeldingerRiverTest.kt | 48 +- .../meldinger/NyeS\303\270knaderRiverTest.kt" | 47 +- .../OverstyrArbeidsforholdRiverTest.kt | 31 +- ...erstyrArbeidsgiveropplysningerRiverTest.kt | 159 +- .../meldinger/OverstyrTidslinjeRiverTest.kt | 2 +- ...dtArbeidsgiverS\303\270knaderRiverTest.kt" | 2 +- .../SendtNavS\303\270knaderRiverTest.kt" | 60 +- .../mediator/meldinger/TestMessageMediator.kt | 8 +- .../spleis/mediator/meldinger/TestRapid.kt | 50 +- ...historikkEtterInfotrygdendringRiverTest.kt | 2 +- ...talingshistorikkForFeriepengerRiverTest.kt | 6 +- .../UtbetalingshistorikkRiverTest.kt | 2 +- .../Vilk\303\245rsgrunnlagRiverTest.kt" | 85 +- .../mediator/meldinger/YtelserRiverTest.kt | 6 +- .../helse/dto/Bel\303\270pstidslinjeDto.kt" | 18 +- .../kotlin/no/nav/helse/dto/PersonUtDto.kt | 86 +- .../nav/helse/dto/VedtaksperiodeVenterDto.kt | 18 +- .../InntektsopplysningInnDto.kt | 3 +- .../deserialisering/MaksdatoresultatInnDto.kt | 4 +- .../Vilk\303\245rsgrunnlagInnDto.kt" | 3 +- .../serialisering/MaksdatoresultatUtDto.kt | 4 +- .../helse/dto/serialisering/RefusjonUtDto.kt | 3 +- .../Vilk\303\245rsgrunnlagUtDto.kt" | 3 +- .../src/main/kotlin/no/nav/helse/Alder.kt | 37 +- .../kotlin/no/nav/helse/Grunnbel\303\270p.kt" | 37 +- .../src/main/kotlin/no/nav/helse/Teller.kt | 10 +- .../src/main/kotlin/no/nav/helse/Toggle.kt | 8 +- .../etterlevelse/BehandlingSubsumsjonslogg.kt | 44 +- .../etterlevelse/SykdomstidslinjeBuilder.kt | 11 +- .../UtbetalingstidslinjeBuilder.kt | 13 +- .../helse/hendelser/AnmodningOmForkasting.kt | 4 +- .../AnnenYtelseSomKanOppdatereHistorikk.kt | 25 +- .../nav/helse/hendelser/AnnullerUtbetaling.kt | 3 +- .../hendelser/Arbeidsavklaringspenger.kt | 6 +- .../helse/hendelser/ArbeidsgiverInntekt.kt | 27 +- .../hendelser/DagerFraInntektsmelding.kt | 215 +- .../no/nav/helse/hendelser/Dagpenger.kt | 6 +- .../no/nav/helse/hendelser/Foreldrepenger.kt | 64 +- .../hendelser/ForkastSykmeldingsperioder.kt | 4 +- .../Grunnbel\303\270psregulering.kt" | 4 +- .../kotlin/no/nav/helse/hendelser/Hendelse.kt | 3 +- .../no/nav/helse/hendelser/Inntektsmelding.kt | 355 ++- .../helse/hendelser/Institusjonsopphold.kt | 3 +- .../helse/hendelser/Medlemskapsvurdering.kt | 3 + .../MinimumSykdomsgradsvurderingMelding.kt | 9 +- .../no/nav/helse/hendelser/Omsorgspenger.kt | 16 +- .../hendelser/Oppl\303\246ringspenger.kt" | 16 +- .../helse/hendelser/OverstyrArbeidsforhold.kt | 13 +- .../OverstyrArbeidsgiveropplysninger.kt | 27 +- .../nav/helse/hendelser/OverstyrTidslinje.kt | 22 +- .../no/nav/helse/hendelser/Pleiepenger.kt | 16 +- .../nav/helse/hendelser/P\303\245minnelse.kt" | 14 +- .../helse/hendelser/Revurderingseventyr.kt | 196 +- .../Skj\303\270nnsmessigFastsettelse.kt" | 3 +- .../nav/helse/hendelser/Svangerskapspenger.kt | 16 +- .../hendelser/SykdomshistorikkHendelse.kt | 26 +- .../SykepengegrunnlagForArbeidsgiver.kt | 27 +- .../no/nav/helse/hendelser/Sykmelding.kt | 12 +- .../no/nav/helse/hendelser/S\303\270knad.kt" | 169 +- .../helse/hendelser/Utbetalingshistorikk.kt | 5 +- ...betalingshistorikkEtterInfotrygdendring.kt | 5 +- .../UtbetalingshistorikkForFeriepenger.kt | 51 +- .../no/nav/helse/hendelser/Validation.kt | 11 +- .../hendelser/Vilk\303\245rsgrunnlag.kt" | 100 +- .../kotlin/no/nav/helse/hendelser/Ytelser.kt | 57 +- .../no/nav/helse/person/Arbeidsgiver.kt | 640 ++++-- .../no/nav/helse/person/BehandlingObserver.kt | 4 +- .../no/nav/helse/person/Behandlinger.kt | 1531 ++++++++++--- .../no/nav/helse/person/Dokumentsporing.kt | 49 +- .../helse/person/ForkastetVedtaksperiode.kt | 48 +- .../person/MinimumSykdomsgradsvurdering.kt | 5 +- .../kotlin/no/nav/helse/person/Opptjening.kt | 66 +- .../main/kotlin/no/nav/helse/person/Person.kt | 437 +++- .../no/nav/helse/person/PersonObserver.kt | 94 +- .../helse/person/UtbetalingsakerBuilder.kt | 36 +- .../no/nav/helse/person/Vedtaksperiode.kt | 2024 +++++++++++++---- .../nav/helse/person/VedtaksperiodeVenter.kt | 41 +- .../Vilk\303\245rsgrunnlagHistorikk.kt" | 268 ++- .../no/nav/helse/person/Yrkesaktivitet.kt | 39 +- .../bel\303\270p/Bel\303\270pstidslinje.kt" | 77 +- .../builders/UtbetalingsdagerBuilder.kt | 62 +- .../person/builders/UtkastTilVedtakBuilder.kt | 344 ++- .../infotrygdhistorikk/Infotrygdhistorikk.kt | 5 +- .../InfotrygdhistorikkElement.kt | 40 +- .../infotrygdhistorikk/Infotrygdperiode.kt | 34 +- .../infotrygdhistorikk/Inntektsopplysning.kt | 8 +- .../infotrygdhistorikk/Utbetalingsperiode.kt | 22 +- .../inntekt/ArbeidsgiverInntektsopplysning.kt | 244 +- ...ektsopplysningForSammenligningsgrunnlag.kt | 8 +- .../helse/person/inntekt/IkkeRapportert.kt | 8 +- .../helse/person/inntekt/Inntektsgrunnlag.kt | 309 ++- .../helse/person/inntekt/Inntektshistorikk.kt | 12 +- .../helse/person/inntekt/Inntektsmelding.kt | 38 +- .../person/inntekt/Inntektsopplysning.kt | 81 +- .../person/inntekt/NyInntektUnderveis.kt | 38 +- .../person/inntekt/Refusjonshistorikk.kt | 85 +- .../person/inntekt/Refusjonsopplysninger.kt | 155 +- .../nav/helse/person/inntekt/Saksbehandler.kt | 103 +- .../person/inntekt/SkattSykepengegrunnlag.kt | 101 +- .../helse/person/inntekt/Skatteopplysning.kt | 7 +- .../inntekt/Skj\303\270nnsmessigFastsatt.kt" | 20 +- .../refusjon/Refusjonsservit\303\270r.kt" | 35 +- .../no/nav/helse/sykdomstidslinje/Dag.kt | 122 +- .../Skj\303\246ringstidspunkt.kt" | 51 +- .../sykdomstidslinje/Sykdomshistorikk.kt | 56 +- .../sykdomstidslinje/Sykdomstidslinje.kt | 95 +- .../no/nav/helse/tournament/Dagturnering.kt | 25 +- .../utbetalingslinjer/Feriepengeutbetaling.kt | 141 +- .../ArbeidsgiverRegler.kt | 4 +- .../Arbeidsgiverperiode.kt | 128 +- .../Arbeidsgiverperiodeberegner.kt | 191 +- .../Arbeidsgiverperiodeoppsamler.kt | 1 + .../Arbeidsgiverperioderesultat.kt | 33 +- .../Arbeidsgiverperiodeteller.kt | 7 + .../AvvisAndreYtelserFilter.kt | 2 +- .../AvvisDagerEtterD\303\270dsdatofilter.kt" | 2 +- .../AvvisInngangsvilk\303\245rfilter.kt" | 11 +- .../Feriepengeberegner.kt | 117 +- .../utbetalingstidslinje/Maksdatokontekst.kt | 134 +- .../MaksimumSykepengedagerfilter.kt | 100 +- .../utbetalingstidslinje/Sykdomsgradfilter.kt | 12 +- .../UtbetalingstidslinjeBuilder.kt | 213 +- .../Utbetalingstidslinjesubsumsjon.kt | 76 +- .../no/nav/helse/AktivitetsloggHelpers.kt | 47 +- .../no/nav/helse/AssertForventetFeil.kt | 17 +- .../no/nav/helse/AssertForventetFeilTest.kt | 15 +- .../src/test/kotlin/no/nav/helse/Datoer.kt | 25 +- .../test/kotlin/no/nav/helse/DatoerTest.kt | 7 +- .../kotlin/no/nav/helse/GjenopprettFraJson.kt | 9 +- .../no/nav/helse/Grunnbel\303\270pTest.kt" | 68 +- .../src/test/kotlin/no/nav/helse/Inntekt.kt | 38 +- .../kotlin/no/nav/helse/OpenAllInSpanner.kt | 11 +- .../test/kotlin/no/nav/helse/OpenInSpanner.kt | 36 +- .../nav/helse/SykdomstidslinjeTestHelpers.kt | 3 +- .../test/kotlin/no/nav/helse/TellerTest.kt | 12 +- .../src/test/kotlin/no/nav/helse/Toggle.kt | 2 +- .../test/kotlin/no/nav/helse/WarningsTest.kt | 48 +- .../helse/bugs_showstoppers/E2EEpic3Test.kt | 243 +- .../ManglendeVilk\303\245rsgrunnlagTest.kt" | 46 +- .../UtdatertGodkjenningBugE2ETest.kt | 2 +- .../no/nav/helse/dsl/AbstractDslTest.kt | 596 ++++- .../helse/dsl/ArbeidsgiverHendelsefabrikk.kt | 54 +- .../kotlin/no/nav/helse/dsl/Behovsamler.kt | 95 +- .../helse/dsl/Bel\303\270pstidslinjeDsl.kt" | 10 +- .../kotlin/no/nav/helse/dsl/DeferredLog.kt | 15 +- .../no/nav/helse/dsl/PersonHendelsefabrikk.kt | 112 +- .../helse/dsl/TestArbeidsgiverAssertions.kt | 129 +- .../kotlin/no/nav/helse/dsl/TestPerson.kt | 357 ++- .../no/nav/helse/dsl/TestPersonAssertions.kt | 12 +- .../kotlin/no/nav/helse/dsl/TestPersonTest.kt | 13 +- .../UgyldigeSituasjonerObservat\303\270r.kt" | 181 +- .../no/nav/helse/dsl/Vedtaksperiodesamler.kt | 5 +- .../BehandlingSubsumsjonsloggTest.kt | 44 +- .../EtterlevelseSykdomstidslinjeTest.kt | 17 +- .../AndreYtelserOppdatereHistorikkTest.kt | 35 +- .../hendelser/ArbeidsavklaringspengerTest.kt | 15 +- .../no/nav/helse/hendelser/DagpengerTest.kt | 27 +- .../nav/helse/hendelser/ForeldrepengerTest.kt | 42 +- ...nnelseForReduksjonEllerIkkeUtbetaltTest.kt | 31 +- .../InntektForInntektsgrunnlagTest.kt | 80 +- .../helse/hendelser/InntektsmeldingTest.kt | 152 +- .../helse/hendelser/OverstyrTidslinjeTest.kt | 9 +- .../no/nav/helse/hendelser/PeriodeTest.kt | 87 +- .../no/nav/helse/hendelser/SykmeldingTest.kt | 40 +- .../nav/helse/hendelser/S\303\270knadTest.kt" | 130 +- .../InntektsmeldingMatchingTest.kt | 72 +- .../Inntektsmeldingverkt\303\270y.kt" | 29 +- ...iverInntektsopplysningInspekt\303\270r.kt" | 10 +- .../inspectors/BehandlingInspekt\303\270r.kt" | 15 +- ...agerFraInntektsmeldingInspekt\303\270r.kt" | 3 +- .../InntektsgrunnlagInspekt\303\270r.kt" | 6 +- .../InntektshistorikkInspekt\303\270r.kt" | 6 +- .../inspectors/OpptjeningInspekt\303\270r.kt" | 12 +- .../inspectors/PersonInspekt\303\270r.kt" | 27 +- .../RefusjonsopplysningInspekt\303\270r.kt" | 7 +- .../inspectors/SubsumsjonInspekt\303\270r.kt" | 203 +- .../SykdomshistorikkInspekt\303\270r.kt" | 3 +- .../TestArbeidsgiverInspekt\303\270r.kt" | 212 +- ...Vilk\303\245rgrunnlagsinspekt\303\270r.kt" | 17 +- .../no/nav/helse/person/AbstractPersonTest.kt | 148 +- .../no/nav/helse/person/AktivitetsloggTest.kt | 64 +- .../helse/person/ForespurtOpplysningTest.kt | 26 +- .../no/nav/helse/person/KodetAktivitetTest.kt | 4 +- .../no/nav/helse/person/OpptjeningTest.kt | 200 +- .../nav/helse/person/SpesifikkKontekstTest.kt | 56 +- .../helse/person/SykmeldingsperioderTest.kt | 66 +- .../person/UtbetalingsakerBuilderTest.kt | 72 +- ...\303\245rsgrunnlagHistorikkInnslagTest.kt" | 79 +- .../Vilk\303\245rsgrunnlagHistorikkTest.kt" | 222 +- .../Bel\303\270pstidslinjeTest.kt" | 134 +- .../builders/UtbetalingsdagerBuilderTest.kt | 6 +- .../InfotrygdInntektsopplysningTest.kt | 26 +- .../InfotrygdhistorikkElementTest.kt | 146 +- .../InfotrygdhistorikkTest.kt | 338 ++- .../UtbetalingsperiodeTest.kt | 29 +- .../ArbeidsgiverInntektsopplysningTest.kt | 401 +++- .../person/inntekt/IkkeRapportertTest.kt | 5 +- .../person/inntekt/InntektsgrunnlagTest.kt | 666 ++++-- .../person/inntekt/InntektshistorikkTest.kt | 38 +- .../person/inntekt/InntektsopplysningTest.kt | 116 +- .../person/inntekt/NyInntektUnderveisTest.kt | 21 +- .../inntekt/PensjonsgivendeInntektTest.kt | 15 +- .../nav/helse/person/inntekt/RefusjonTest.kt | 38 +- .../RefusjonTilBel\303\270pstidslinjeTest.kt" | 146 +- ...nshistorikkTilRefusjonsopplysningerTest.kt | 739 ++++-- .../inntekt/RefusjonsopplysningerTest.kt | 820 +++++-- .../inntekt/Refusjonsverkt\303\270y.kt" | 37 +- .../inntekt/SkattInntektsgrunnlagTest.kt | 11 +- .../Skj\303\270nnsmessigFastsattTest.kt" | 61 +- ...nntektsmeldingTilRefusjonstidslinjeTest.kt | 70 +- .../refusjon/Refusjonsservit\303\270rTest.kt" | 17 +- .../nav/helse/serde/PersonDataBuilderTest.kt | 162 +- .../helse/spleis/e2e/AbstractEndToEndTest.kt | 20 +- .../spleis/e2e/AnmodningOmForkastingTest.kt | 57 +- .../spleis/e2e/AnnullerUtbetalingTest.kt | 80 +- .../e2e/ArbeidsopplysningerKorrigertTest.kt | 52 +- .../spleis/e2e/AvsluttetMedVedtaktE2ETest.kt | 99 +- .../e2e/AvsluttetUtenUtbetalingE2ETest.kt | 54 +- .../AvvisningEtterFylte70\303\205rTest.kt" | 32 +- ...vvisningF\303\270rFylte18\303\205rTest.kt" | 24 +- .../helse/spleis/e2e/DeleGrunnlagsdataTest.kt | 50 +- .../spleis/e2e/D\303\270dsmeldingE2E.kt" | 12 +- .../helse/spleis/e2e/EnArbeidsgiverTest.kt | 165 +- .../spleis/e2e/EndaEnGodkjenningsbehovTest.kt | 303 ++- .../nav/helse/spleis/e2e/FeriepengeE2ETest.kt | 473 +++- .../spleis/e2e/FjerneGodkjenningsbehovTest.kt | 42 +- ...orkastForlengelseAvForkastetPeriodeTest.kt | 156 +- .../e2e/ForkastSykmeldingsperioderTest.kt | 16 +- .../nav/helse/spleis/e2e/ForkasteAuuTest.kt | 50 +- .../no/nav/helse/spleis/e2e/ForkastingTest.kt | 75 +- .../no/nav/helse/spleis/e2e/FrilanserTest.kt | 69 +- .../helse/spleis/e2e/GodkjenningsbehovTest.kt | 244 +- .../e2e/Grunnbel\303\270psreguleringTest.kt" | 58 +- .../nav/helse/spleis/e2e/HendelseAsserts.kt | 395 +++- .../nav/helse/spleis/e2e/HendelseFactories.kt | 178 +- .../nav/helse/spleis/e2e/HendelseHandlers.kt | 477 +++- .../nav/helse/spleis/e2e/HendelseHelpers.kt | 21 +- .../e2e/Ingenting\303\205SimulereE2ETest.kt" | 18 +- .../helse/spleis/e2e/KunEnArbeidsgiverTest.kt | 78 +- .../nav/helse/spleis/e2e/MaksdatoE2ETest.kt | 20 +- .../MakstidIAvventerBlokkerendePeriodeTest.kt | 4 +- .../ManglerVilk\303\245rsgrunnlagE2ETest.kt" | 96 +- .../no/nav/helse/spleis/e2e/MedlemskapE2E.kt | 25 +- .../nav/helse/spleis/e2e/MinimumInntektE2E.kt | 64 +- .../nav/helse/spleis/e2e/OpptjeningE2ETest.kt | 82 +- .../spleis/e2e/SamletSykdomsgradE2ETest.kt | 21 +- .../SkatteinntekterlagLagtTilGrunnE2ETest.kt | 131 +- .../e2e/Skj\303\246ringstidspunktE2ETest.kt" | 130 +- .../nav/helse/spleis/e2e/SubsumsjonE2ETest.kt | 1399 ++++++++++-- .../spleis/e2e/TestObservat\303\270r.kt" | 113 +- .../spleis/e2e/UtbetalingFeiletE2ETest.kt | 57 +- .../spleis/e2e/UtbetalingOgAnnulleringTest.kt | 52 +- .../no/nav/helse/spleis/e2e/UtbetalingTest.kt | 43 +- .../no/nav/helse/spleis/e2e/VarselE2ETest.kt | 66 +- .../e2e/VarselOmFlereInntektsmeldingerTest.kt | 10 +- .../VarselVedNegativtBel\303\270pE2ETest.kt" | 61 +- .../e2e/VedtaksperiodeForkastetE2ETest.kt | 129 +- .../spleis/e2e/VedtaksperiodeOpprettetTest.kt | 7 +- .../spleis/e2e/VedtaksperiodeVenterTest.kt | 148 +- .../e2e/Vilk\303\245rsgrunnlagE2ETest.kt" | 90 +- .../OppdaterteArbeidsgiveropplysningerTest.kt | 226 +- .../TrengerArbeidsgiveropplysningerTest.kt | 670 ++++-- .../BehandlingForkastetEventTest.kt | 37 +- .../behandlinger/BehandlingLukketEventTest.kt | 51 +- .../BehandlingOpprettetEventTest.kt | 59 +- .../e2e/behandlinger/BehandlingerE2ETest.kt | 279 ++- .../BrukerutbetalingerTest.kt | 2 +- .../DelvisRefusjonRevurderingTest.kt | 52 +- .../brukerutbetaling/DelvisRefusjonTest.kt | 79 +- .../FullRefusjonTilNullRefusjonE2ETest.kt | 41 +- .../FlereArbeidsgivereArbeidsforholdTest.kt | 215 +- .../FlereArbeidsgivereFlytTest.kt | 234 +- .../FlereArbeidsgivereForlengelserTest.kt | 94 +- .../FlereArbeidsgivereGhostTest.kt | 680 +++++- .../FlereArbeidsgivereTest.kt | 426 +++- .../FlereArbeidsgivereUlikFomTest.kt | 533 ++++- .../FlereArbeidsgivereWarningsTest.kt | 59 +- .../FlereUkjenteArbeidsgivereTest.kt | 273 ++- ...edtaksperioderForFlereArbeidsgivereTest.kt | 82 +- .../DobbelbehandlingIInfotrygdTest.kt | 20 +- .../infotrygd/ForlengelseFraInfotrygdTest.kt | 90 +- .../infotrygd/InfotrygdKorrigererE2ETest.kt | 60 +- .../spleis/e2e/infotrygd/InfotrygdTest.kt | 66 +- .../e2e/infotrygd/InfotrygdendringE2ETest.kt | 82 +- .../infotrygd/InfotrygdhistorikkEndretTest.kt | 30 +- ...nnelseForReduksjonEllerIkkeUtbetaltTest.kt | 116 +- .../FlereSkj\303\246ringstidspunktTest.kt" | 88 +- .../inntektsmelding/InntektsmeldingE2ETest.kt | 786 +++++-- .../InntektsmeldingKommerIkkeE2ETest.kt | 277 ++- .../InntektsmeldingOgFerieE2ETest.kt | 142 +- .../KorrigerendeInntektsmeldingTest.kt | 183 +- .../ReplayInntektsmeldingE2ETest.kt | 89 +- .../DokumentH\303\245ndteringTest.kt" | 252 +- ...OverstyrUtkastTilRevurderingFlereAGTest.kt | 257 ++- .../OverstyrUtkastTilRevurderingTest.kt | 131 +- ...enbrukeTidsn\303\246reOpplysningerTest.kt" | 529 ++++- .../MinimumSykdomsgradVurdertFlereAGTest.kt | 55 +- .../MinimumSykdomsgradVurdertTest.kt | 125 +- .../e2e/overstyring/NavUtbetalerAgpTest.kt | 192 +- .../overstyring/OverstyrArbeidsforholdTest.kt | 251 +- .../OverstyrArbeidsgiveropplysningerTest.kt | 623 +++-- .../OverstyrArbeidsgiverperiodeTest.kt | 66 +- .../overstyring/OverstyrGhostInntektTest.kt | 28 +- .../OverstyrInntektFlereArbeidsgivereTest.kt | 61 +- .../e2e/overstyring/OverstyrInntektTest.kt | 58 +- .../OverstyrTidslinjeFlereAGTest.kt | 15 +- .../e2e/overstyring/OverstyrTidslinjeTest.kt | 451 +++- .../Skj\303\270nnsmessigFastsettelseTest.kt" | 429 +++- ...sopplysningerP\303\245BehandlingerTest.kt" | 394 ++-- ...MigrereUbrukteRefusjonsopplysningerTest.kt | 333 ++- .../refusjon/RefusjonsopplysningerE2ETest.kt | 65 +- ...opplysningerP\303\245BehandlingE2ETest.kt" | 906 ++++++-- .../refusjon/RevurderingAvRefusjonE2ETest.kt | 14 +- ...UtenUtbetalingEtterInfotrygdEndringTest.kt | 184 +- ...gningAvAvsluttetUtenUtbetalingNyE2ETest.kt | 716 +++++- .../RevurderInntektFlereArbeidsgivereTest.kt | 193 +- .../e2e/revurdering/RevurderInntektTest.kt | 48 +- .../RevurderKorrigertSoknadTest.kt | 185 +- ...ertS\303\270knadFlereArbeidsgivereTest.kt" | 248 +- ...RevurderTidslinjeFlereArbeidsgivereTest.kt | 129 +- .../e2e/revurdering/RevurderTidslinjeTest.kt | 303 ++- .../RevurdereArbeidsforholdTest.kt | 279 ++- .../revurdering/RevurdereGhostInntektTest.kt | 168 +- .../e2e/revurdering/RevurderingFerieTest.kt | 21 +- .../RevurderingFlereAGV2E2ETest.kt | 232 +- .../RevurderingInntektV2E2ETest.kt | 231 +- .../RevurderingOutOfOrderGapTest.kt | 309 ++- .../e2e/revurdering/RevurderingV2E2ETest.kt | 519 ++++- .../RevurderingseventyrEventTest.kt | 69 +- .../AndreS\303\270knadstyperTest.kt" | 14 +- .../AnnulleringOgUtbetalingTest.kt" | 198 +- .../ArbeidsledigS\303\270knadTest.kt" | 22 +- .../ForeldetS\303\270knadE2ETest.kt" | 94 +- .../e2e/s\303\270knad/FriskmeldtE2ETest.kt" | 29 +- .../KorrigertS\303\270knadTest.kt" | 328 ++- .../OutOfOrderS\303\270knadTest.kt" | 40 +- .../S\303\270knadArbeidsgiverE2ETest.kt" | 506 ++++- ...3\270knadMedDagerUtenforPeriodeE2ETest.kt" | 107 +- .../NyArbeidsgiverUnderveisTest.kt | 67 +- ...ilkommenInntektF\303\270rsteRakettTest.kt" | 18 +- .../tilkommen_inntekt/TilkommenInntektTest.kt | 127 +- .../ytelser/InstitusjonsoppholdBehovTest.kt | 36 +- .../e2e/ytelser/OmsorgspengerE2ETest.kt | 62 +- .../ytelser/Oppl\303\246ringspengeE2ETest.kt" | 53 +- .../spleis/e2e/ytelser/PleiepengerE2ETest.kt | 53 +- .../spleis/e2e/ytelser/YtelserE2ETest.kt | 276 ++- .../helse/sykdomstidslinje/BesteDagTest.kt | 44 +- .../sykdomstidslinje/ForeldetSykedagTest.kt | 20 +- .../sykdomstidslinje/HendelsekildeTest.kt | 15 +- .../L\303\245stePerioderTest.kt" | 51 +- .../sykdomstidslinje/OverlapMergeTest.kt | 3 +- .../helse/sykdomstidslinje/SimpleMergeTest.kt | 2 +- .../Skj\303\246ringstidspunktTest.kt" | 188 +- .../sykdomstidslinje/SykdomshistorikkTest.kt | 6 +- .../sykdomstidslinje/SykdomstidslinjeTest.kt | 42 +- .../no/nav/helse/testhelpers/Asserts.kt | 4 +- .../no/nav/helse/testhelpers/Inntekter.kt | 40 +- .../helse/testhelpers/Sykdomstidslinjer.kt | 85 +- .../no/nav/helse/testhelpers/TestEvent.kt | 6 +- .../helse/testhelpers/TestSykdomstidlinje.kt | 33 +- .../UtbetalingstidslinjerBuilderTest.kt | 4 +- .../nav/helse/tournament/DagturneringTest.kt | 81 +- .../Turneringsn\303\270kkelTest.kt" | 18 +- .../utbetalingslinjer/OppdragBuilderTest.kt | 28 +- .../helse/utbetalingslinjer/OppdragTest.kt | 870 +++---- .../UtbetalingslinjeForskjellTest.kt | 556 +++-- .../helse/utbetalingstidslinje/AlderTest.kt | 10 +- .../ArbeidsgiverperiodeTest.kt | 81 +- .../ArbeidsgiverperiodesubsumsjonTest.kt | 57 +- .../AvvisAndreYtelserFilterTest.kt | 16 +- ...visDagerEtterD\303\270dsdatofilterTest.kt" | 13 +- .../BegrunnelseDtoTest.kt | 19 +- .../FeriepengeberegnerTest.kt | 171 +- .../FeriepengedatoerTest.kt | 67 +- .../MaksimumSykepengedagerfilterTest.kt | 281 ++- ...mUtbetalingFilterFlereArbeidsgivereTest.kt | 25 +- .../MaksimumUtbetalingFilterHendelseTest.kt | 3 +- .../SykdomsgradfilterTest.kt | 32 +- .../UtbetalingstidslinjeBuilderTest.kt | 910 ++++---- .../UtbetalingstidslinjeTest.kt | 71 +- ...303\270vdSkj\303\246ringstidspunktTest.kt" | 60 +- .../Create\303\230konomiTest.kt" | 46 +- .../\303\270konomi/\303\230konomiDagTest.kt" | 20 +- sykepenger-opprydding-dev/build.gradle.kts | 7 +- .../nav/helse/opprydding/SlettPersonRiver.kt | 9 +- .../kotlin/no/nav/helse/opprydding/AppTest.kt | 32 +- .../kotlin/no/nav/helse/opprydding/DBTest.kt | 3 +- .../helse/opprydding/PersonRepositoryTest.kt | 16 +- .../src/main/kotlin/no/nav/helse/Dato.kt | 8 +- .../kotlin/no/nav/helse/hendelser/Periode.kt | 31 +- .../helse/serde/DeserializationException.kt | 3 +- .../no/nav/helse/serde/ObjectMappers.kt | 9 +- .../kotlin/no/nav/helse/serde/PersonData.kt | 257 ++- .../no/nav/helse/serde/PersonDataBuilder.kt | 659 +++--- .../no/nav/helse/serde/SerialisertPerson.kt | 5 +- .../no/nav/helse/serde/SetDeserializer.kt | 2 +- .../helse/serde/migration/JsonMigration.kt | 14 +- .../V279AvsluttettidspunktVedtakFattet.kt | 76 +- .../migration/V280HengendeRevurderinger.kt | 46 +- ...vsluttedePerioderMedUberegnetGenerasjon.kt | 45 +- .../migration/V282HengendeRevurderinger.kt | 47 +- ...egningsgrunnlagP\303\245\303\230konomi.kt" | 6 +- ...erPeriodeArbeidsgiverInntektsopplysning.kt | 17 +- .../migration/V285LoggeRareAnnulleringer.kt | 51 +- ...V286Annullerte\303\205pneRevurderinger.kt" | 41 +- ...lerte\303\205pneRevurderingerEnGangTil.kt" | 29 +- ...rfl\303\270digeUberegnedeRevurderinger.kt" | 38 +- ...vsluttetTidspunktForkastedeGenerasjoner.kt | 34 +- .../V290FikseForbrukteDagerSomErNull.kt | 21 +- ...gj\303\270ringerSomErRevurderingFeilet.kt" | 49 +- .../serde/migration/V292AnnullertPeriode.kt | 73 +- ...3AvsluttetUberegnedeOmgj\303\270ringer.kt" | 9 +- .../migration/V294RenameTilBehandlinger.kt | 7 +- .../helse/serde/migration/V295BumpVersjon.kt | 4 +- ...246ringstidspunktP\303\245Behandlinger.kt" | 11 +- ...ndledePerioderMed\303\205penBehandling.kt" | 109 +- ...enmeldingsdagerP\303\245Vedtaksperiode.kt" | 4 +- ...gerFraSykdomstidslinjeTilVedtaksperiode.kt | 9 +- ...302MaksdatoresultatP\303\245Behandling.kt" | 2 +- ...piereMaksdatoFraUtbetalingTilBehandling.kt | 195 +- ...04FjerneArbeidsledigSykmeldingsperioder.kt | 4 +- ...ameSykepengegrunnlagTilInntektsgrunnlag.kt | 9 +- ...6RefusjonstidslinjeP\303\245Behandling.kt" | 3 +- ...nstidslinjeP\303\245Behandlingsendring.kt" | 2 +- ...8HendelseIdP\303\245Infotrygdhistorikk.kt" | 2 +- ...309LeggeTilUbrukteRefusjonsopplysninger.kt | 2 +- ...idsstempelP\303\245Refusjonsopplysning.kt" | 72 +- ...opplysningForDeaktiverteArbeidsforhold.kt" | 73 +- .../kotlin/no/nav/helse/serde/DagDataTest.kt | 15 +- .../nav/helse/serde/VedtaksperiodeDataTest.kt | 8 +- .../serde/migration/JsonMigrationTest.kt | 16 +- .../helse/serde/migration/MigrationTest.kt | 22 +- .../V280HengendeRevurderingerTest.kt | 4 +- ...ttedePerioderMedUberegnetGenerasjonTest.kt | 5 +- .../V282HengendeRevurderingerTest.kt | 4 +- ...ngsgrunnlagP\303\245\303\230konomiTest.kt" | 5 +- ...riodeArbeidsgiverInntektsopplysningTest.kt | 5 +- .../V285LoggeRareAnnulleringerTest.kt | 4 +- ...Annullerte\303\205pneRevurderingerTest.kt" | 5 +- ...Annullerte\303\205pneRevurderingerTest.kt" | 5 +- ...303\270digeUberegnedeRevurderingerTest.kt" | 5 +- ...ttetTidspunktForkastedeGenerasjonerTest.kt | 5 +- .../V290FikseForbrukteDagerSomErNullTest.kt | 5 +- ...03\270ringerSomErRevurderingFeiletTest.kt" | 5 +- .../migration/V292AnnullertPeriodeTest.kt | 4 +- ...luttetUberegnedeOmgj\303\270ringerTest.kt" | 5 +- .../V294RenameTilBehandlingerTest.kt | 4 +- ...ingstidspunktP\303\245BehandlingerTest.kt" | 5 +- ...ldingsdagerP\303\245VedtaksperiodeTest.kt" | 5 +- ...raSykdomstidslinjeTilVedtaksperiodeTest.kt | 10 +- ...aksdatoresultatP\303\245BehandlingTest.kt" | 5 +- ...eMaksdatoFraUtbetalingTilBehandlingTest.kt | 5 +- ...erneArbeidsledigSykmeldingsperioderTest.kt | 10 +- ...SykepengegrunnlagTilInntektsmeldingTest.kt | 5 +- ...usjonstidslinjeP\303\245BehandlingTest.kt" | 5 +- ...tempelP\303\245RefusjonsopplysningTest.kt" | 13 +- .../kotlin/no/nav/helse/dto/UtbetalingDto.kt | 17 +- .../dto/deserialisering/UtbetalingInnDto.kt | 3 +- .../deserialisering/UtbetalingsdagInnDto.kt | 10 +- .../dto/serialisering/UtbetalingsdagUtDto.kt | 10 +- .../Utbetalingsavgj\303\270relseHendelse.kt" | 24 +- .../utbetalingslinjer/Fagomr\303\245de.kt" | 24 +- .../utbetalingslinjer/Feriepengegrunnlag.kt | 8 +- .../no/nav/helse/utbetalingslinjer/Oppdrag.kt | 115 +- .../helse/utbetalingslinjer/OppdragBuilder.kt | 18 +- .../nav/helse/utbetalingslinjer/Satstype.kt | 5 +- .../nav/helse/utbetalingslinjer/Utbetaling.kt | 242 +- .../UtbetalingkladdBuilder.kt | 33 +- .../utbetalingslinjer/Utbetalingsaker.kt | 1 + .../utbetalingslinjer/Utbetalingslinje.kt | 74 +- .../UtbetalingsreferanseBuilder.kt | 4 +- .../utbetalingstidslinje/Utbetalingsdag.kt | 34 +- .../Utbetalingstidslinje.kt | 53 +- .../no/nav/helse/\303\270konomi/Inntekt.kt" | 14 +- .../nav/helse/\303\270konomi/Prosentdel.kt" | 45 +- .../helse/\303\270konomi/\303\230konomi.kt" | 104 +- .../helse/utbetalingslinjer/UtbetalingTest.kt | 328 ++- .../\303\270konomi/Ny\303\230konomiTest.kt" | 55 +- .../helse/\303\270konomi/ProsentdelTest.kt" | 14 +- .../\303\270konomi/\303\230konomiTest.kt" | 105 +- .../UtbetalingstidslinjeInspekt\303\270r.kt" | 29 +- .../\303\230konomiInspekt\303\270r.kt" | 1 + .../UtbetalingstidslinjerBuilder.kt | 76 +- 705 files changed, 47226 insertions(+), 14400 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..8355792f0c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,95 @@ +# This .editorconfig section approximates ktfmt's formatting rules. You can include it in an +# existing .editorconfig file or use it standalone by copying it to /.editorconfig +# and making sure your editor is set to read settings from .editorconfig files. +# +# It includes editor-specific config options for IntelliJ IDEA. +# +# If any option is wrong, PR are welcome + +[{*.kt,*.kts}] +indent_style = space +insert_final_newline = true +max_line_length = 100 +indent_size = 4 +ij_continuation_indent_size = 4 +ij_java_names_count_to_use_import_on_demand = 9999 +ij_kotlin_align_in_columns_case_branch = false +ij_kotlin_align_multiline_binary_operation = false +ij_kotlin_align_multiline_extends_list = false +ij_kotlin_align_multiline_method_parentheses = false +ij_kotlin_align_multiline_parameters = true +ij_kotlin_align_multiline_parameters_in_calls = false +ij_kotlin_allow_trailing_comma = false +ij_kotlin_allow_trailing_comma_on_call_site = false +ij_kotlin_assignment_wrap = normal +ij_kotlin_blank_lines_after_class_header = 0 +ij_kotlin_blank_lines_around_block_when_branches = 0 +ij_kotlin_blank_lines_before_declaration_with_comment_or_annotation_on_separate_line = 1 +ij_kotlin_block_comment_at_first_column = true +ij_kotlin_call_parameters_new_line_after_left_paren = true +ij_kotlin_call_parameters_right_paren_on_new_line = false +ij_kotlin_call_parameters_wrap = on_every_item +ij_kotlin_catch_on_new_line = false +ij_kotlin_class_annotation_wrap = split_into_lines +ij_kotlin_code_style_defaults = KOTLIN_OFFICIAL +ij_kotlin_continuation_indent_for_chained_calls = true +ij_kotlin_continuation_indent_for_expression_bodies = true +ij_kotlin_continuation_indent_in_argument_lists = true +ij_kotlin_continuation_indent_in_elvis = false +ij_kotlin_continuation_indent_in_if_conditions = false +ij_kotlin_continuation_indent_in_parameter_lists = false +ij_kotlin_continuation_indent_in_supertype_lists = false +ij_kotlin_else_on_new_line = false +ij_kotlin_enum_constants_wrap = off +ij_kotlin_extends_list_wrap = normal +ij_kotlin_field_annotation_wrap = off +ij_kotlin_finally_on_new_line = false +ij_kotlin_if_rparen_on_new_line = false +ij_kotlin_import_nested_classes = false +ij_kotlin_imports_layout = * +ij_kotlin_insert_whitespaces_in_simple_one_line_method = true +ij_kotlin_keep_blank_lines_before_right_brace = 2 +ij_kotlin_keep_blank_lines_in_code = 2 +ij_kotlin_keep_blank_lines_in_declarations = 2 +ij_kotlin_keep_first_column_comment = true +ij_kotlin_keep_indents_on_empty_lines = false +ij_kotlin_keep_line_breaks = true +ij_kotlin_lbrace_on_next_line = false +ij_kotlin_line_comment_add_space = false +ij_kotlin_line_comment_at_first_column = true +ij_kotlin_method_annotation_wrap = split_into_lines +ij_kotlin_method_call_chain_wrap = normal +ij_kotlin_method_parameters_new_line_after_left_paren = true +ij_kotlin_method_parameters_right_paren_on_new_line = true +ij_kotlin_method_parameters_wrap = on_every_item +ij_kotlin_name_count_to_use_star_import = 9999 +ij_kotlin_name_count_to_use_star_import_for_members = 9999 +ij_kotlin_parameter_annotation_wrap = off +ij_kotlin_space_after_comma = true +ij_kotlin_space_after_extend_colon = true +ij_kotlin_space_after_type_colon = true +ij_kotlin_space_before_catch_parentheses = true +ij_kotlin_space_before_comma = false +ij_kotlin_space_before_extend_colon = true +ij_kotlin_space_before_for_parentheses = true +ij_kotlin_space_before_if_parentheses = true +ij_kotlin_space_before_lambda_arrow = true +ij_kotlin_space_before_type_colon = false +ij_kotlin_space_before_when_parentheses = true +ij_kotlin_space_before_while_parentheses = true +ij_kotlin_spaces_around_additive_operators = true +ij_kotlin_spaces_around_assignment_operators = true +ij_kotlin_spaces_around_equality_operators = true +ij_kotlin_spaces_around_function_type_arrow = true +ij_kotlin_spaces_around_logical_operators = true +ij_kotlin_spaces_around_multiplicative_operators = true +ij_kotlin_spaces_around_range = false +ij_kotlin_spaces_around_relational_operators = true +ij_kotlin_spaces_around_unary_operator = false +ij_kotlin_spaces_around_when_arrow = true +ij_kotlin_variable_annotation_wrap = off +ij_kotlin_while_on_new_line = false +ij_kotlin_wrap_elvis_expressions = 1 +ij_kotlin_wrap_expression_body_functions = 1 +ij_kotlin_wrap_first_method_in_call_chain = false + diff --git a/doc/fimkt/flereIM_kortTid.md b/doc/fimkt/flereIM_kortTid.md index 6745ec57f8..e3bbbd547f 100644 --- a/doc/fimkt/flereIM_kortTid.md +++ b/doc/fimkt/flereIM_kortTid.md @@ -31,4 +31,4 @@ Vi ønsker altså at de tilfellene der begge/alle IM _ikke_ har satt arbeidsforholdID, så skal vi _ikke_ sette varsler og dermed automatisere. Dette forutsetter at vi bruker dager fra IM 2 / den sist mottatte inntektsmeldingen. -Rel. venting: vi vil _i alle tilfeller_ vente i 30 minutter før vi sender IM fra spedisjon til spleis. \ No newline at end of file +Rel. venting: vi vil _i alle tilfeller_ vente i 30 minutter før vi sender IM fra spedisjon til spleis. diff --git a/doc/tilstandsmaskin/eksperimenterITilstandsdiagram.md b/doc/tilstandsmaskin/eksperimenterITilstandsdiagram.md index c66646d81e..5c64d9f7a0 100644 --- a/doc/tilstandsmaskin/eksperimenterITilstandsdiagram.md +++ b/doc/tilstandsmaskin/eksperimenterITilstandsdiagram.md @@ -72,4 +72,4 @@ stateDiagram-v2 -``` \ No newline at end of file +``` diff --git a/jobs/build.gradle.kts b/jobs/build.gradle.kts index 06d98a45d0..543f40d15d 100644 --- a/jobs/build.gradle.kts +++ b/jobs/build.gradle.kts @@ -37,9 +37,10 @@ tasks { manifest { attributes["Main-Class"] = mainClass - attributes["Class-Path"] = configurations.runtimeClasspath.get().joinToString(separator = " ") { - it.name - } + attributes["Class-Path"] = + configurations.runtimeClasspath.get().joinToString(separator = " ") { + it.name + } } } } diff --git a/jobs/src/main/kotlin/no/nav/helse/spleis/jobs/App.kt b/jobs/src/main/kotlin/no/nav/helse/spleis/jobs/App.kt index 99217f20a3..3b1132e27c 100644 --- a/jobs/src/main/kotlin/no/nav/helse/spleis/jobs/App.kt +++ b/jobs/src/main/kotlin/no/nav/helse/spleis/jobs/App.kt @@ -8,6 +8,10 @@ import java.time.Duration import java.time.LocalDate import java.time.LocalDateTime import java.util.UUID +import kotlin.system.measureTimeMillis +import kotlin.time.DurationUnit +import kotlin.time.ExperimentalTime +import kotlin.time.measureTime import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking import kotliquery.Session @@ -21,10 +25,6 @@ import no.nav.helse.serde.tilSerialisertPerson import org.apache.kafka.clients.producer.ProducerRecord import org.intellij.lang.annotations.Language import org.slf4j.LoggerFactory -import kotlin.system.measureTimeMillis -import kotlin.time.DurationUnit -import kotlin.time.ExperimentalTime -import kotlin.time.measureTime val log = LoggerFactory.getLogger("no.nav.helse.spleis.gc.App") val sikkerlogg = LoggerFactory.getLogger("tjenestekall") @@ -39,7 +39,8 @@ fun main(cliArgs: Array) { ) } - val args = cliArgs.takeIf(Array<*>::isNotEmpty)?.toList() ?: System.getenv("RUNTIME_OPTS").split(" ") + val args = + cliArgs.takeIf(Array<*>::isNotEmpty)?.toList() ?: System.getenv("RUNTIME_OPTS").split(" ") if (args.isEmpty()) return log.error("Provide a task name as CLI argument") val factory by lazy { ConsumerProducerFactory(AivenConfig.default) } @@ -87,11 +88,18 @@ private fun migrateV2Task(arbeidId: String) { val dto = SerialisertPerson(data).tilPersonDto() val gjenopprettetPerson = Person.gjenopprett(EmptyLog, dto) val resultat = gjenopprettetPerson.dto().tilPersonData().tilSerialisertPerson() - check(1 == txSession.run(queryOf("UPDATE person SET skjema_versjon=:skjemaversjon, data=:data WHERE fnr=:ident", mapOf( - "skjemaversjon" to resultat.skjemaVersjon, - "data" to resultat.json, - "ident" to fnr - )).asUpdate)) + check( + 1 == txSession.run( + queryOf( + "UPDATE person SET skjema_versjon=:skjemaversjon, data=:data WHERE fnr=:ident", + mapOf( + "skjemaversjon" to resultat.skjemaVersjon, + "data" to resultat.json, + "ident" to fnr + ) + ).asUpdate + ) + ) } log.info("[$migreringCounter] Utført på $time ms") } @@ -116,26 +124,36 @@ private fun fyllArbeidstabell(session: Session, arbeidId: String) { """ session.run(queryOf(query, arbeidId).asExecute) } + private fun hentArbeid(session: Session, arbeidId: String, size: Int = 500): List { @Language("PostgreSQL") val query = """ select fnr from arbeidstabell where arbeid_startet IS NULL and arbeid_id = ? limit $size for update skip locked; """ + @Language("PostgreSQL") val oppdater = "update arbeidstabell set arbeid_startet=now() where arbeid_id=? and fnr IN(%s)" return session.transaction { txSession -> txSession.run(queryOf(query, arbeidId).map { it.long("fnr") }.asList).also { personer -> if (personer.isNotEmpty()) { - txSession.run(queryOf(String.format(oppdater, personer.joinToString { "?" }), arbeidId, *personer.toTypedArray()).asUpdate) + txSession.run( + queryOf( + String.format(oppdater, personer.joinToString { "?" }), + arbeidId, + *personer.toTypedArray() + ).asUpdate + ) } } } } + private fun arbeidFullført(session: Session, arbeidId: String, fnr: Long) { @Language("PostgreSQL") val query = "update arbeidstabell set arbeid_ferdig=now() where arbeid_id=? and fnr=?" session.run(queryOf(query, arbeidId, fnr).asUpdate) } + private fun arbeidFinnes(session: Session, arbeidId: String): Boolean { @Language("PostgreSQL") val query = "SELECT COUNT(1) as antall FROM arbeidstabell where arbeid_id=?" @@ -156,7 +174,11 @@ private fun klargjørEllerVentPåTilgjengeligArbeid(session: Session, arbeidId: } } -fun opprettOgUtførArbeid(arbeidId: String, size: Int = 1, arbeider: (session: Session, fnr: Long) -> Unit) { +fun opprettOgUtførArbeid( + arbeidId: String, + size: Int = 1, + arbeider: (session: Session, fnr: Long) -> Unit +) { DataSourceConfiguration(DbUser.MIGRATE).dataSource(maximumPoolSize = 1).use { ds -> sessionOf(ds).use { session -> klargjørEllerVentPåTilgjengeligArbeid(session, arbeidId) @@ -273,12 +295,18 @@ private fun lagAvstemming(fnr: String) = """ private class DataSourceConfiguration(dbUsername: DbUser) { private val env = System.getenv() - private val gcpProjectId = requireNotNull(env["GCP_TEAM_PROJECT_ID"]) { "gcp project id must be set" } - private val databaseRegion = requireNotNull(env["DATABASE_REGION"]) { "database region must be set" } - private val databaseInstance = requireNotNull(env["DATABASE_INSTANCE"]) { "database instance must be set" } - private val databaseUsername = requireNotNull(env["${dbUsername}_USERNAME"]) { "database username must be set" } - private val databasePassword = requireNotNull(env["${dbUsername}_PASSWORD"]) { "database password must be set"} - private val databaseName = requireNotNull(env["${dbUsername}_DATABASE"]) { "database name must be set"} + private val gcpProjectId = + requireNotNull(env["GCP_TEAM_PROJECT_ID"]) { "gcp project id must be set" } + private val databaseRegion = + requireNotNull(env["DATABASE_REGION"]) { "database region must be set" } + private val databaseInstance = + requireNotNull(env["DATABASE_INSTANCE"]) { "database instance must be set" } + private val databaseUsername = + requireNotNull(env["${dbUsername}_USERNAME"]) { "database username must be set" } + private val databasePassword = + requireNotNull(env["${dbUsername}_PASSWORD"]) { "database password must be set" } + private val databaseName = + requireNotNull(env["${dbUsername}_DATABASE"]) { "database name must be set" } private val hikariConfig = HikariConfig().apply { jdbcUrl = String.format( diff --git "a/jobs/src/main/kotlin/no/nav/helse/spleis/jobs/MigrereGrunnbel\303\270p.kt" "b/jobs/src/main/kotlin/no/nav/helse/spleis/jobs/MigrereGrunnbel\303\270p.kt" index ca1828cde0..afe2e47a4c 100644 --- "a/jobs/src/main/kotlin/no/nav/helse/spleis/jobs/MigrereGrunnbel\303\270p.kt" +++ "b/jobs/src/main/kotlin/no/nav/helse/spleis/jobs/MigrereGrunnbel\303\270p.kt" @@ -57,16 +57,18 @@ private fun finnGrunnbeløp(person: PersonInnDto): List { val historikk = person.vilkårsgrunnlagHistorikk.historikk if (historikk.isEmpty()) return emptyList() val siste = historikk.first() - return siste.vilkårsgrunnlag.filterNot { it.inntektsgrunnlag.vurdertInfotrygd }.map { - spleisVilkårsgrunnlag -> Grunnbeløp( - skjæringstidspunkt = spleisVilkårsgrunnlag.skjæringstidspunkt, - `6G` = spleisVilkårsgrunnlag.inntektsgrunnlag.`6G`.beløp - ) - } + return siste.vilkårsgrunnlag.filterNot { it.inntektsgrunnlag.vurdertInfotrygd } + .map { spleisVilkårsgrunnlag -> + Grunnbeløp( + skjæringstidspunkt = spleisVilkårsgrunnlag.skjæringstidspunkt, + `6G` = spleisVilkårsgrunnlag.inntektsgrunnlag.`6G`.beløp + ) + } } -private fun fødselsnummerSomString(fnr: Long) = fnr.toString().let { if (it.length == 11) it else "0$it" } +private fun fødselsnummerSomString(fnr: Long) = + fnr.toString().let { if (it.length == 11) it else "0$it" } private data class GrunnbeløpEvent( val fødselsnummer: String, @@ -74,11 +76,14 @@ private data class GrunnbeløpEvent( ) { @JsonProperty("@event_name") val eventName: String = "grunnbeløp" + @JsonProperty("@id") val id: UUID = UUID.randomUUID() + @JsonProperty("@opprettet") val opprettet: LocalDateTime = LocalDateTime.now() } + private data class Grunnbeløp( val skjæringstidspunkt: LocalDate, val `6G`: Double diff --git a/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Aktivitet.kt b/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Aktivitet.kt index 30fed9fd6e..0bbd4fa53a 100644 --- a/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Aktivitet.kt +++ b/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Aktivitet.kt @@ -27,13 +27,16 @@ sealed class Aktivitet( override fun compareTo(other: Aktivitet) = this.tidsstempel.compareTo(other.tidsstempel) .let { if (it == 0) other.alvorlighetsgrad.compareTo(this.alvorlighetsgrad) else it } - override fun toString() = label + " \t" + tidsstempel.format(tidsstempelformat) + " \t" + melding + meldingerString() + override fun toString() = + label + " \t" + tidsstempel.format(tidsstempelformat) + " \t" + melding + meldingerString() private fun meldingerString(): String { return kontekster.joinToString(separator = "") { " (${it.melding()})" } } - operator fun contains(kontekst: Aktivitetskontekst) = kontekst.toSpesifikkKontekst() in kontekster + operator fun contains(kontekst: Aktivitetskontekst) = + kontekst.toSpesifikkKontekst() in kontekster + class Info private constructor( id: UUID, kontekster: List, @@ -54,7 +57,11 @@ sealed class Aktivitet( tidsstempel: LocalDateTime = LocalDateTime.now() ) : Aktivitet(id, 25, 'W', melding, tidsstempel, kontekster) { companion object { - internal fun opprett(kontekster: List, kode: Varselkode, melding: String) = + internal fun opprett( + kontekster: List, + kode: Varselkode, + melding: String + ) = Varsel(UUID.randomUUID(), kontekster, kode, melding = melding) } } @@ -68,8 +75,14 @@ sealed class Aktivitet( tidsstempel: LocalDateTime = LocalDateTime.now() ) : Aktivitet(id, 50, 'N', melding, tidsstempel, kontekster) { companion object { - internal fun opprett(type: Behovtype, kontekster: List, melding: String, detaljer: Map) = Behov( - UUID.randomUUID(), type, kontekster, melding, detaljer) + internal fun opprett( + type: Behovtype, + kontekster: List, + melding: String, + detaljer: Map + ) = Behov( + UUID.randomUUID(), type, kontekster, melding, detaljer + ) fun utbetalingshistorikk( aktivitetslogg: IAktivitetslogg, @@ -77,9 +90,9 @@ sealed class Aktivitet( ) { aktivitetslogg.behov( Behovtype.Sykepengehistorikk, "Trenger sykepengehistorikk fra Infotrygd", mapOf( - "historikkFom" to periode.start.toString(), - "historikkTom" to periode.endInclusive.toString() - ) + "historikkFom" to periode.start.toString(), + "historikkTom" to periode.endInclusive.toString() + ) ) } @@ -87,9 +100,9 @@ sealed class Aktivitet( aktivitetslogg.behov( Behovtype.Foreldrepenger, "Trenger informasjon om foreldrepengeytelser fra FPSAK", mapOf( - "foreldrepengerFom" to periode.start.toString(), - "foreldrepengerTom" to periode.endInclusive.toString() - ) + "foreldrepengerFom" to periode.start.toString(), + "foreldrepengerTom" to periode.endInclusive.toString() + ) ) } @@ -97,9 +110,9 @@ sealed class Aktivitet( aktivitetslogg.behov( Behovtype.Pleiepenger, "Trenger informasjon om pleiepengeytelser fra Infotrygd", mapOf( - "pleiepengerFom" to periode.start.toString(), - "pleiepengerTom" to periode.endInclusive.toString() - ) + "pleiepengerFom" to periode.start.toString(), + "pleiepengerTom" to periode.endInclusive.toString() + ) ) } @@ -107,9 +120,9 @@ sealed class Aktivitet( aktivitetslogg.behov( Behovtype.Omsorgspenger, "Trenger informasjon om omsorgspengerytelser fra Infotrygd", mapOf( - "omsorgspengerFom" to periode.start.toString(), - "omsorgspengerTom" to periode.endInclusive.toString() - ) + "omsorgspengerFom" to periode.start.toString(), + "omsorgspengerTom" to periode.endInclusive.toString() + ) ) } @@ -117,19 +130,22 @@ sealed class Aktivitet( aktivitetslogg.behov( Behovtype.Opplæringspenger, "Trenger informasjon om opplæringspengerytelser fra Infotrygd", mapOf( - "opplæringspengerFom" to periode.start.toString(), - "opplæringspengerTom" to periode.endInclusive.toString() - ) + "opplæringspengerFom" to periode.start.toString(), + "opplæringspengerTom" to periode.endInclusive.toString() + ) ) } - fun institusjonsopphold(aktivitetslogg: IAktivitetslogg, periode: ClosedRange) { + fun institusjonsopphold( + aktivitetslogg: IAktivitetslogg, + periode: ClosedRange + ) { aktivitetslogg.behov( Behovtype.Institusjonsopphold, "Trenger informasjon om institusjonsopphold fra Inst2", mapOf( - "institusjonsoppholdFom" to periode.start.toString(), - "institusjonsoppholdTom" to periode.endInclusive.toString() - ) + "institusjonsoppholdFom" to periode.start.toString(), + "institusjonsoppholdTom" to periode.endInclusive.toString() + ) ) } @@ -187,41 +203,58 @@ sealed class Aktivitet( } fun arbeidsforhold(aktivitetslogg: IAktivitetslogg, skjæringstidspunkt: LocalDate) { - aktivitetslogg.behov(Behovtype.ArbeidsforholdV2, "Trenger informasjon om arbeidsforhold", mapOf( + aktivitetslogg.behov( + Behovtype.ArbeidsforholdV2, "Trenger informasjon om arbeidsforhold", mapOf( "skjæringstidspunkt" to skjæringstidspunkt.toString() - )) + ) + ) } fun dagpenger(aktivitetslogg: IAktivitetslogg, fom: LocalDate, tom: LocalDate) { aktivitetslogg.behov( Behovtype.Dagpenger, "Trenger informasjon om dagpenger", mapOf( - "periodeFom" to fom.toString(), - "periodeTom" to tom.toString() - ) + "periodeFom" to fom.toString(), + "periodeTom" to tom.toString() + ) ) } - fun arbeidsavklaringspenger(aktivitetslogg: IAktivitetslogg, fom: LocalDate, tom: LocalDate) { + fun arbeidsavklaringspenger( + aktivitetslogg: IAktivitetslogg, + fom: LocalDate, + tom: LocalDate + ) { aktivitetslogg.behov( - Behovtype.Arbeidsavklaringspenger, "Trenger informasjon om arbeidsavklaringspenger", mapOf( + Behovtype.Arbeidsavklaringspenger, + "Trenger informasjon om arbeidsavklaringspenger", + mapOf( "periodeFom" to fom.toString(), "periodeTom" to tom.toString() ) ) } - fun medlemskap(aktivitetslogg: IAktivitetslogg, skjæringstidspunkt: LocalDate, fom: LocalDate, tom: LocalDate) { + fun medlemskap( + aktivitetslogg: IAktivitetslogg, + skjæringstidspunkt: LocalDate, + fom: LocalDate, + tom: LocalDate + ) { aktivitetslogg.behov( Behovtype.Medlemskap, "Trenger informasjon om medlemskap", mapOf( - "skjæringstidspunkt" to skjæringstidspunkt.toString(), - "medlemskapPeriodeFom" to fom.toString(), - "medlemskapPeriodeTom" to tom.toString() - ) + "skjæringstidspunkt" to skjæringstidspunkt.toString(), + "medlemskapPeriodeFom" to fom.toString(), + "medlemskapPeriodeTom" to tom.toString() + ) ) } fun godkjenning(aktivitetslogg: IAktivitetslogg, godkjenningsbehov: Map) { - aktivitetslogg.behov(Behovtype.Godkjenning, "Forespør godkjenning fra saksbehandler", godkjenningsbehov) + aktivitetslogg.behov( + Behovtype.Godkjenning, + "Forespør godkjenning fra saksbehandler", + godkjenningsbehov + ) } } @@ -259,7 +292,11 @@ sealed class Aktivitet( tidsstempel: LocalDateTime = LocalDateTime.now() ) : Aktivitet(id, 75, 'E', melding, tidsstempel, kontekster) { companion object { - internal fun opprett(kontekster: List, kode: Varselkode, melding: String) = + internal fun opprett( + kontekster: List, + kode: Varselkode, + melding: String + ) = FunksjonellFeil(UUID.randomUUID(), kontekster, kode, melding) } } @@ -275,4 +312,4 @@ sealed class Aktivitet( LogiskFeil(UUID.randomUUID(), kontekster, melding) } } -} \ No newline at end of file +} diff --git a/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Aktivitetslogg.kt b/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Aktivitetslogg.kt index 4690be63ba..ed7bff1b95 100644 --- a/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Aktivitetslogg.kt +++ b/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Aktivitetslogg.kt @@ -46,11 +46,13 @@ class Aktivitetslogg( forelder?.add(aktivitet) } - private fun MutableList.toSpesifikk() = this.map { it.toSpesifikkKontekst() } + private fun MutableList.toSpesifikk() = + this.map { it.toSpesifikkKontekst() } override fun harVarslerEllerVerre() = varsel.isNotEmpty() || harFunksjonelleFeilEllerVerre() - override fun harFunksjonelleFeilEllerVerre() = funksjonellFeil.isNotEmpty() || logiskFeil.isNotEmpty() + override fun harFunksjonelleFeilEllerVerre() = + funksjonellFeil.isNotEmpty() || logiskFeil.isNotEmpty() override fun barn() = Aktivitetslogg(this).also { it.kontekster.addAll(this.kontekster) } @@ -76,11 +78,12 @@ class Aktivitetslogg( class AktivitetException internal constructor(private val aktivitetslogg: Aktivitetslogg) : RuntimeException(aktivitetslogg.toString()) { - fun kontekst() = aktivitetslogg.kontekster.fold(mutableMapOf()) { result, kontekst -> - result.apply { putAll(kontekst.toSpesifikkKontekst().kontekstMap) } - } + fun kontekst() = + aktivitetslogg.kontekster.fold(mutableMapOf()) { result, kontekst -> + result.apply { putAll(kontekst.toSpesifikkKontekst().kontekstMap) } + } fun aktivitetslogg() = aktivitetslogg } -} \ No newline at end of file +} diff --git a/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/IAktivitetslogg.kt b/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/IAktivitetslogg.kt index 40ed9eb6d6..f6d711f689 100644 --- a/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/IAktivitetslogg.kt +++ b/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/IAktivitetslogg.kt @@ -2,7 +2,12 @@ package no.nav.helse.person.aktivitetslogg interface IAktivitetslogg { fun info(melding: String, vararg params: Any?) - fun behov(type: Aktivitet.Behov.Behovtype, melding: String, detaljer: Map = emptyMap()) + fun behov( + type: Aktivitet.Behov.Behovtype, + melding: String, + detaljer: Map = emptyMap() + ) + fun varsel(kode: Varselkode) fun funksjonellFeil(kode: Varselkode) fun logiskFeil(melding: String, vararg params: Any?): Nothing diff --git a/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/SpesifikkKontekst.kt b/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/SpesifikkKontekst.kt index a10b62f0ac..de50c7c924 100644 --- a/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/SpesifikkKontekst.kt +++ b/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/SpesifikkKontekst.kt @@ -1,8 +1,12 @@ package no.nav.helse.person.aktivitetslogg -data class SpesifikkKontekst(val kontekstType: String, val kontekstMap: Map = mapOf()) { +data class SpesifikkKontekst( + val kontekstType: String, + val kontekstMap: Map = mapOf() +) { fun melding() = kontekstType + kontekstMap.entries.joinToString(separator = "") { " ${it.key}: ${it.value}" } - fun sammeType(other: Aktivitetskontekst) = this.kontekstType == other.toSpesifikkKontekst().kontekstType -} \ No newline at end of file + fun sammeType(other: Aktivitetskontekst) = + this.kontekstType == other.toSpesifikkKontekst().kontekstType +} diff --git a/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Varselkode.kt b/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Varselkode.kt index 9b9e0dc629..d388afeecf 100644 --- a/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Varselkode.kt +++ b/sykepenger-aktivitetslogg/src/main/kotlin/no/nav/helse/person/aktivitetslogg/Varselkode.kt @@ -10,9 +10,18 @@ enum class Varselkode( val avviklet: Boolean = false ) { - RV_SY_1("Korrigert sykmelding er lagt til grunn - kontroller dagene i sykmeldingsperioden", avviklet = true), - RV_SY_2("Mottatt en sykmelding som er skrevet tidligere enn den som er lagt til grunn, vurder sykmeldingene og gjør eventuelle justeringer", avviklet = true), - RV_SY_3("Mottatt flere sykmeldinger for perioden - den første sykmeldingen som ble mottatt er lagt til grunn. Utbetal kun hvis det blir korrekt", avviklet = true), + RV_SY_1( + "Korrigert sykmelding er lagt til grunn - kontroller dagene i sykmeldingsperioden", + avviklet = true + ), + RV_SY_2( + "Mottatt en sykmelding som er skrevet tidligere enn den som er lagt til grunn, vurder sykmeldingene og gjør eventuelle justeringer", + avviklet = true + ), + RV_SY_3( + "Mottatt flere sykmeldinger for perioden - den første sykmeldingen som ble mottatt er lagt til grunn. Utbetal kun hvis det blir korrekt", + avviklet = true + ), // SØ: Søknad RV_SØ_1("Søknaden inneholder permittering. Vurder om permittering har konsekvens for rett til sykepenger"), @@ -28,19 +37,40 @@ enum class Varselkode( RV_SØ_11("Mottatt søknad out of order", avviklet = true), RV_SØ_12("Mottatt overlappende søknad", avviklet = true), RV_SØ_13("Overlappende søknad starter før, eller slutter etter, opprinnelig periode"), - RV_SØ_14("Mottatt flere søknader for annen periode enn siste skjæringstidspunkt", avviklet = true), - RV_SØ_15("Mottatt flere søknader for perioden - siste søknad inneholder arbeidsdag", avviklet = true), - RV_SØ_16("Mottatt flere søknader for perioden - det støttes ikke før replay av hendelser er på plass", avviklet = true), + RV_SØ_14( + "Mottatt flere søknader for annen periode enn siste skjæringstidspunkt", + avviklet = true + ), + RV_SØ_15( + "Mottatt flere søknader for perioden - siste søknad inneholder arbeidsdag", + avviklet = true + ), + RV_SØ_16( + "Mottatt flere søknader for perioden - det støttes ikke før replay av hendelser er på plass", + avviklet = true + ), RV_SØ_17("Søker er ikke gammel nok på søknadstidspunktet til å søke sykepenger uten fullmakt fra verge"), RV_SØ_18("Søknaden inneholder andre inntektskilder enn ANDRE_ARBEIDSFORHOLD", avviklet = true), RV_SØ_19("Søknad forlenger en forkastet periode", avviklet = true), RV_SØ_20("Søknad overlapper med, eller er før, en forkastet vedtaksperiode", avviklet = true), RV_SØ_21("Bruker har oppgitt at de har jobbet mindre enn sykmelding tilsier", avviklet = true), RV_SØ_22("Søknaden inneholder en Papirsykmeldingsperiode"), - RV_SØ_23("Korrigert søknad er mottatt med nye opplysninger - kontroller dagene i sykmeldingsperioden", avviklet = true), - RV_SØ_24("Mottatt flere søknade for perioden - den første søknaden som ble mottatt er lagt til grunn. Utbetal kun hvis det blir korrekt", avviklet = true), - RV_SØ_25("Permisjon oppgitt i perioden i søknaden. Vurder rett til sykepenger og korriger sykmeldingsperioden", avviklet = true), - RV_SØ_26("Søknaden inneholder Feriedager utenfor perioden søknaden gjelder for", avviklet = true), + RV_SØ_23( + "Korrigert søknad er mottatt med nye opplysninger - kontroller dagene i sykmeldingsperioden", + avviklet = true + ), + RV_SØ_24( + "Mottatt flere søknade for perioden - den første søknaden som ble mottatt er lagt til grunn. Utbetal kun hvis det blir korrekt", + avviklet = true + ), + RV_SØ_25( + "Permisjon oppgitt i perioden i søknaden. Vurder rett til sykepenger og korriger sykmeldingsperioden", + avviklet = true + ), + RV_SØ_26( + "Søknaden inneholder Feriedager utenfor perioden søknaden gjelder for", + avviklet = true + ), RV_SØ_27("Mottatt søknad out of order innenfor 18 dager til neste"), RV_SØ_28("Søknad har mindre enn 20 dagers gap til en forkastet periode"), RV_SØ_29("Søknaden er opprettet fra en utenlandsk sykmelding"), @@ -55,8 +85,14 @@ enum class Varselkode( RV_SØ_38("Søknad forlenger en forkastet periode hos annen arbeidsgiver"), RV_SØ_39("Støtter ikke søknadstypen"), - RV_SØ_40("Støtter ikke søknadstypen for forlengelser vilkårsprøvd i Infotrygd", avviklet = true), - RV_SØ_41("Støtter kun søknadstypen hvor den aktuelle arbeidsgiveren er den eneste i sykepengegrunnlaget", avviklet = true), + RV_SØ_40( + "Støtter ikke søknadstypen for forlengelser vilkårsprøvd i Infotrygd", + avviklet = true + ), + RV_SØ_41( + "Støtter kun søknadstypen hvor den aktuelle arbeidsgiveren er den eneste i sykepengegrunnlaget", + avviklet = true + ), // Arbeidsledig søknader RV_SØ_42("Støtter ikke førstegangsbehandlinger for arbeidsledigsøknader"), @@ -66,11 +102,20 @@ enum class Varselkode( // OO: Out-of-order RV_OO_1("Det er behandlet en søknad i Speil for en senere periode enn denne."), - RV_OO_2("Saken må revurderes fordi det har blitt behandlet en tidligere periode som kan ha betydning.", avviklet = true), + RV_OO_2( + "Saken må revurderes fordi det har blitt behandlet en tidligere periode som kan ha betydning.", + avviklet = true + ), // IM: Inntektsmelding - RV_IM_1("Vi har mottatt en inntektsmelding i en løpende sykmeldingsperiode med oppgitt første/bestemmende fraværsdag som er ulik tidligere fastsatt skjæringstidspunkt.", avviklet = true), - RV_IM_2("Første fraværsdag i inntektsmeldingen er ulik skjæringstidspunktet. Kontrollér at inntektsmeldingen er knyttet til riktig periode.", avviklet = true), + RV_IM_1( + "Vi har mottatt en inntektsmelding i en løpende sykmeldingsperiode med oppgitt første/bestemmende fraværsdag som er ulik tidligere fastsatt skjæringstidspunkt.", + avviklet = true + ), + RV_IM_2( + "Første fraværsdag i inntektsmeldingen er ulik skjæringstidspunktet. Kontrollér at inntektsmeldingen er knyttet til riktig periode.", + avviklet = true + ), RV_IM_3("Inntektsmeldingen og vedtaksløsningen er uenige om beregningen av arbeidsgiverperioden. Undersøk hva som er riktig arbeidsgiverperiode."), RV_IM_4("Det er mottatt flere inntektsmeldinger på samme skjæringstidspunkt. Undersøk at arbeidsgiverperioden, sykepengegrunnlaget og refusjonsopplysningene er riktige"), RV_IM_5("Sykmeldte har oppgitt ferie første dag i arbeidsgiverperioden.", avviklet = true), @@ -78,18 +123,51 @@ enum class Varselkode( RV_IM_7("Brukeren har opphold i naturalytelser"), RV_IM_8("Arbeidsgiver har redusert utbetaling av arbeidsgiverperioden"), RV_IM_9("ArbeidsforholdsID fra inntektsmeldingen er utfylt", avviklet = true), - RV_IM_10("Første fraværsdag i inntektsmeldingen er forskjellig fra foregående tilstøtende periode", avviklet = true), - RV_IM_11("Første fraværsdag i inntektsmeldingen er ulik første fraværsdag i sykdomsperioden", avviklet = true), - RV_IM_12("Første fraværsdag i inntektsmeldingen er utenfor søknadsperioden. Kontroller at inntektsmeldingen er knyttet til riktig periode", avviklet = true), - RV_IM_13("Første fraværsdag i inntektsmeldingen er utenfor sykmeldingsperioden", avviklet = true), - RV_IM_14("Første fraværsdag oppgitt i inntektsmeldingen er ulik den systemet har beregnet. Utbetal kun hvis dagsatsen er korrekt", avviklet = true), - RV_IM_15("Første fraværsdag oppgitt i inntektsmeldingen er ulik den systemet har beregnet. Vurder hvilken inntektsmelding som skal legges til grunn, og utbetal kun hvis dagsatsen er korrekt i forhold til denne.", avviklet = true), + RV_IM_10( + "Første fraværsdag i inntektsmeldingen er forskjellig fra foregående tilstøtende periode", + avviklet = true + ), + RV_IM_11( + "Første fraværsdag i inntektsmeldingen er ulik første fraværsdag i sykdomsperioden", + avviklet = true + ), + RV_IM_12( + "Første fraværsdag i inntektsmeldingen er utenfor søknadsperioden. Kontroller at inntektsmeldingen er knyttet til riktig periode", + avviklet = true + ), + RV_IM_13( + "Første fraværsdag i inntektsmeldingen er utenfor sykmeldingsperioden", + avviklet = true + ), + RV_IM_14( + "Første fraværsdag oppgitt i inntektsmeldingen er ulik den systemet har beregnet. Utbetal kun hvis dagsatsen er korrekt", + avviklet = true + ), + RV_IM_15( + "Første fraværsdag oppgitt i inntektsmeldingen er ulik den systemet har beregnet. Vurder hvilken inntektsmelding som skal legges til grunn, og utbetal kun hvis dagsatsen er korrekt i forhold til denne.", + avviklet = true + ), RV_IM_16("Inntektsmelding inneholder ikke arbeidsgiverperiode", avviklet = true), - RV_IM_17("Inntektsmelding inneholder ikke arbeidsgiverperiode. Vurder om arbeidsgiverperioden beregnes riktig", avviklet = true), - RV_IM_18("Inntektsmeldingen mangler arbeidsgiverperiode. Vurder om vilkårene for sykepenger er oppfylt, og om det skal være arbeidsgiverperiode", avviklet = true), - RV_IM_19("Mottatt flere inntektsmeldinger - den andre inntektsmeldingen som ble mottatt er lagt til grunn. Utbetal kun hvis det blir korrekt.", avviklet = true), - RV_IM_20("Finner ikke informasjon om refusjon i inntektsmelding og personen har brukerutbetaling", avviklet = true), - RV_IM_21("Inntektsmeldingen mangler ikke arbeidsgiverperiode. Vurder om vilkårene for sykepenger er oppfylt, og om det skal være arbeidsgiverperiode", avviklet = true), + RV_IM_17( + "Inntektsmelding inneholder ikke arbeidsgiverperiode. Vurder om arbeidsgiverperioden beregnes riktig", + avviklet = true + ), + RV_IM_18( + "Inntektsmeldingen mangler arbeidsgiverperiode. Vurder om vilkårene for sykepenger er oppfylt, og om det skal være arbeidsgiverperiode", + avviklet = true + ), + RV_IM_19( + "Mottatt flere inntektsmeldinger - den andre inntektsmeldingen som ble mottatt er lagt til grunn. Utbetal kun hvis det blir korrekt.", + avviklet = true + ), + RV_IM_20( + "Finner ikke informasjon om refusjon i inntektsmelding og personen har brukerutbetaling", + avviklet = true + ), + RV_IM_21( + "Inntektsmeldingen mangler ikke arbeidsgiverperiode. Vurder om vilkårene for sykepenger er oppfylt, og om det skal være arbeidsgiverperiode", + avviklet = true + ), RV_IM_22("Det er mottatt flere inntektsmeldinger på kort tid for samme arbeidsgiver"), RV_IM_23("Arbeidsgiver har oppgitt hullete arbeidsgiverperiode og begrunnelse for redusert utbetaling i arbeidsgiverperiode"), RV_IM_24("Det har kommet ny inntektsmelding, vurder om arbeidsgiverperiode er riktig"), @@ -100,19 +178,43 @@ enum class Varselkode( RV_ST_1("Sykdomstidslinjen inneholder ustøttet dag.", avviklet = true), // RE: Refusjon - RV_RE_1("Fant ikke refusjonsgrad for perioden. Undersøk oppgitt refusjon før du utbetaler.", avviklet = true), + RV_RE_1( + "Fant ikke refusjonsgrad for perioden. Undersøk oppgitt refusjon før du utbetaler.", + avviklet = true + ), RV_RE_2("Mangler refusjonsopplysninger", avviklet = true), // IT: Infotrygd - RV_IT_1("Det er utbetalt en periode i Infotrygd etter perioden du skal behandle nå. Undersøk at antall forbrukte dager og grunnlag i Infotrygd er riktig", funksjonellFeilTekst = "Det er utbetalt en nyere periode i Infotrygd"), - RV_IT_2("Perioden er lagt inn i Infotrygd, men ikke utbetalt. Fjern fra Infotrygd hvis det utbetales via speil.", avviklet = true), + RV_IT_1( + "Det er utbetalt en periode i Infotrygd etter perioden du skal behandle nå. Undersøk at antall forbrukte dager og grunnlag i Infotrygd er riktig", + funksjonellFeilTekst = "Det er utbetalt en nyere periode i Infotrygd" + ), + RV_IT_2( + "Perioden er lagt inn i Infotrygd, men ikke utbetalt. Fjern fra Infotrygd hvis det utbetales via speil.", + avviklet = true + ), RV_IT_3("Utbetaling i Infotrygd overlapper med vedtaksperioden"), // funksjonellFeil RV_IT_4("Det er registrert utbetaling på nødnummer", avviklet = true), // funksjonellFeil - RV_IT_5("Mangler inntekt for første utbetalingsdag i en av infotrygdperiodene", avviklet = true), // funksjonellFeil - RV_IT_6("Det er en ugyldig utbetalingsperiode i Infotrygd (mangler fom- eller tomdato)", avviklet = true), - RV_IT_7("Det er en ugyldig utbetalingsperiode i Infotrygd (fom er nyere enn tom)", avviklet = true), - RV_IT_8("Det er en ugyldig utbetalingsperiode i Infotrygd (utbetalingsgrad mangler)", avviklet = true), - RV_IT_9("Det er en ugyldig utbetalingsperiode i Infotrygd (utbetalingsgrad er mindre eller lik 0)", avviklet = true), + RV_IT_5( + "Mangler inntekt for første utbetalingsdag i en av infotrygdperiodene", + avviklet = true + ), // funksjonellFeil + RV_IT_6( + "Det er en ugyldig utbetalingsperiode i Infotrygd (mangler fom- eller tomdato)", + avviklet = true + ), + RV_IT_7( + "Det er en ugyldig utbetalingsperiode i Infotrygd (fom er nyere enn tom)", + avviklet = true + ), + RV_IT_8( + "Det er en ugyldig utbetalingsperiode i Infotrygd (utbetalingsgrad mangler)", + avviklet = true + ), + RV_IT_9( + "Det er en ugyldig utbetalingsperiode i Infotrygd (utbetalingsgrad er mindre eller lik 0)", + avviklet = true + ), RV_IT_10("Det er en ugyldig utbetalingsperiode i Infotrygd", avviklet = true), RV_IT_11("Det er registrert bruk av på nødnummer", avviklet = true), RV_IT_12("Organisasjonsnummer for inntektsopplysning fra Infotrygd mangler", avviklet = true), @@ -120,49 +222,118 @@ enum class Varselkode( RV_IT_14("Forlenger en Infotrygdperiode på tvers av arbeidsgivere"), RV_IT_15("Personen er ikke registrert som normal arbeidstaker i Infotrygd", avviklet = true), RV_IT_16("Støtter ikke saker med vilkårsgrunnlag i Infotrygd", avviklet = true), - RV_IT_17("Forespurt overstyring av inntekt hvor skjæringstidspunktet ligger i infotrygd", avviklet = true), - RV_IT_18("Avslutter perioden fordi tilstøtende, eller nyere periode, gikk til Infotrygd", avviklet = true), - RV_IT_19("Dagsatsen har endret seg minst én gang i en historisk, sammenhengende periode i Infotrygd.", avviklet = true), - RV_IT_20("Det er en utbetalingsperiode som er lagt inn i Infotrygd uten at inntektsopplysninger er registrert.", avviklet = true), - RV_IT_21("Det er lagt inn flere inntekter i Infotrygd med samme fom-dato, den seneste er lagt til grunn. Kontroller sykepengegrunnlaget.", avviklet = true), - RV_IT_22("Det er lagt inn statslønn i Infotrygd, undersøk at utbetalingen blir riktig.", avviklet = true), - RV_IT_23("Direkte overgang fra Infotrygd. Dagsatsen har endret seg minst én gang i Infotrygd. Kontroller at sykepengegrunnlaget er riktig.", avviklet = true), + RV_IT_17( + "Forespurt overstyring av inntekt hvor skjæringstidspunktet ligger i infotrygd", + avviklet = true + ), + RV_IT_18( + "Avslutter perioden fordi tilstøtende, eller nyere periode, gikk til Infotrygd", + avviklet = true + ), + RV_IT_19( + "Dagsatsen har endret seg minst én gang i en historisk, sammenhengende periode i Infotrygd.", + avviklet = true + ), + RV_IT_20( + "Det er en utbetalingsperiode som er lagt inn i Infotrygd uten at inntektsopplysninger er registrert.", + avviklet = true + ), + RV_IT_21( + "Det er lagt inn flere inntekter i Infotrygd med samme fom-dato, den seneste er lagt til grunn. Kontroller sykepengegrunnlaget.", + avviklet = true + ), + RV_IT_22( + "Det er lagt inn statslønn i Infotrygd, undersøk at utbetalingen blir riktig.", + avviklet = true + ), + RV_IT_23( + "Direkte overgang fra Infotrygd. Dagsatsen har endret seg minst én gang i Infotrygd. Kontroller at sykepengegrunnlaget er riktig.", + avviklet = true + ), RV_IT_24("Forkaster perioden fordi vi har oppdaget utbetalinger i Infotrygd", avviklet = true), - RV_IT_25("Har utbetalt periode i Infotrygd nærmere enn 18 dager fra første dag", avviklet = true), - RV_IT_26("Infotrygd inneholder utbetalinger med varierende dagsats for en sammenhengende periode", avviklet = true), - RV_IT_27("Opplysninger fra Infotrygd har endret seg etter at vedtaket ble fattet. Undersøk om det er overlapp med periode fra Infotrygd.", avviklet = true), + RV_IT_25( + "Har utbetalt periode i Infotrygd nærmere enn 18 dager fra første dag", + avviklet = true + ), + RV_IT_26( + "Infotrygd inneholder utbetalinger med varierende dagsats for en sammenhengende periode", + avviklet = true + ), + RV_IT_27( + "Opplysninger fra Infotrygd har endret seg etter at vedtaket ble fattet. Undersøk om det er overlapp med periode fra Infotrygd.", + avviklet = true + ), RV_IT_28("Perioden er en direkte overgang fra periode i Infotrygd", avviklet = true), - RV_IT_29("Perioden er lagt inn i Infotrygd - men mangler inntektsopplysninger. Fjern perioden fra SP UB hvis du utbetaler via speil.", avviklet = true), - RV_IT_30("Perioden er lagt inn i Infotrygd, men ikke utbetalt. Fjern fra Infotrygd hvis det utbetales via speil.", avviklet = true), - RV_IT_31("Perioden forlenger en behandling i Infotrygd, og har historikk fra ny løsning: Undersøk at antall dager igjen er beregnet riktig.", avviklet = true), - RV_IT_32("Perioden forlenger en behandling i ny løsning, og har historikk i Infotrygd også: Undersøk at antall dager igjen er beregnet riktig.", avviklet = true), + RV_IT_29( + "Perioden er lagt inn i Infotrygd - men mangler inntektsopplysninger. Fjern perioden fra SP UB hvis du utbetaler via speil.", + avviklet = true + ), + RV_IT_30( + "Perioden er lagt inn i Infotrygd, men ikke utbetalt. Fjern fra Infotrygd hvis det utbetales via speil.", + avviklet = true + ), + RV_IT_31( + "Perioden forlenger en behandling i Infotrygd, og har historikk fra ny løsning: Undersøk at antall dager igjen er beregnet riktig.", + avviklet = true + ), + RV_IT_32( + "Perioden forlenger en behandling i ny løsning, og har historikk i Infotrygd også: Undersøk at antall dager igjen er beregnet riktig.", + avviklet = true + ), RV_IT_33("Skjæringstidspunktet har endret seg som følge av historikk fra Infotrygd"), RV_IT_34("Avslutter perioden fordi tidligere periode gikk til Infotrygd", avviklet = true), - RV_IT_35("Det er en utbetalingsperiode i Infotrygd som mangler fom- eller tomdato", avviklet = true), - RV_IT_36("Periode som før var uten utbetalingsdager har nå utbetalingsdager etter endringer fra Infotrygd", avviklet = true), + RV_IT_35( + "Det er en utbetalingsperiode i Infotrygd som mangler fom- eller tomdato", + avviklet = true + ), + RV_IT_36( + "Periode som før var uten utbetalingsdager har nå utbetalingsdager etter endringer fra Infotrygd", + avviklet = true + ), RV_IT_37("Det er en utbetaling i Infotrygd nærmere enn 18 dager"), RV_IT_38("En utbetaling i Infotrygd har medført at perioden nå vil utbetales"), // VV: Vilkårsvurdering RV_VV_1("Bruker har ikke registrert opptjening hos arbeidsgiver"), RV_VV_2("Flere arbeidsgivere, ulikt starttidspunkt for sykefraværet eller ikke fravær fra alle arbeidsforhold"), - RV_VV_3("Første utbetalingsdag er i Infotrygd og mellom 1. og 16. mai. Kontroller at riktig grunnbeløp er brukt.", avviklet = true), + RV_VV_3( + "Første utbetalingsdag er i Infotrygd og mellom 1. og 16. mai. Kontroller at riktig grunnbeløp er brukt.", + avviklet = true + ), RV_VV_4("Minst én dag uten utbetaling på grunn av sykdomsgrad under 20 %. Vurder å sende vedtaksbrev fra Infotrygd"), RV_VV_5("Bruker mangler nødvendig inntekt ved validering av Vilkårsgrunnlag", avviklet = true), RV_VV_8("Den sykmeldte har skiftet arbeidsgiver, og det er beregnet at den nye arbeidsgiveren mottar refusjon lik forrige. Kontroller at dagsatsen blir riktig."), RV_VV_9("Bruker er fortsatt syk 26 uker etter maksdato"), RV_VV_10("Fant ikke vilkårsgrunnlag. Kan ikke vilkårsprøve på nytt etter ny informasjon fra saksbehandler."), - RV_VV_11("Vilkårsgrunnlaget ligger i infotrygd. Det er ikke støttet i revurdering eller overstyring.", avviklet = true), - RV_VV_12("Kan ikke overstyre inntekt uten at det foreligger et vilkårsgrunnlag", avviklet = true), - RV_VV_13("26 uker siden forrige utbetaling av sykepenger, vurder om vilkårene for sykepenger er oppfylt", avviklet = true), - RV_VV_14("Denne personen har en utbetaling for samme periode for en annen arbeidsgiver. Kontroller at beregningene for begge arbeidsgiverne er korrekte.", avviklet = true), + RV_VV_11( + "Vilkårsgrunnlaget ligger i infotrygd. Det er ikke støttet i revurdering eller overstyring.", + avviklet = true + ), + RV_VV_12( + "Kan ikke overstyre inntekt uten at det foreligger et vilkårsgrunnlag", + avviklet = true + ), + RV_VV_13( + "26 uker siden forrige utbetaling av sykepenger, vurder om vilkårene for sykepenger er oppfylt", + avviklet = true + ), + RV_VV_14( + "Denne personen har en utbetaling for samme periode for en annen arbeidsgiver. Kontroller at beregningene for begge arbeidsgiverne er korrekte.", + avviklet = true + ), RV_VV_15("Maks antall sykepengedager er nådd i perioden", avviklet = true), - RV_VV_16("Søknaden inneholder egenmeldingsdager som ikke er oppgitt i inntektsmeldingen. Vurder om arbeidsgiverperioden beregnes riktig", avviklet = true), + RV_VV_16( + "Søknaden inneholder egenmeldingsdager som ikke er oppgitt i inntektsmeldingen. Vurder om arbeidsgiverperioden beregnes riktig", + avviklet = true + ), RV_VV_17("Det er beregnet utbetaling under 20% total sykdomsgrad"), // VV: Opptjeningsvurdering RV_OV_1("Perioden er avslått på grunn av manglende opptjening"), - RV_OV_2("Opptjeningsvurdering må gjøres manuelt fordi opplysningene fra AA-registeret er ufullstendige", avviklet = true), + RV_OV_2( + "Opptjeningsvurdering må gjøres manuelt fordi opplysningene fra AA-registeret er ufullstendige", + avviklet = true + ), RV_OV_3("Det er ikke registrert inntekt i måneden før skjæringstidspunktet"), // MV: Medlemskapsvurdering @@ -171,15 +342,28 @@ enum class Varselkode( RV_MV_3("Arbeid utenfor Norge oppgitt i søknaden"), // IV: Inntektsvurdering - RV_IV_1("Bruker har flere inntektskilder de siste tre månedene enn arbeidsforhold som er oppdaget i Aa-registeret.", avviklet = true), + RV_IV_1( + "Bruker har flere inntektskilder de siste tre månedene enn arbeidsforhold som er oppdaget i Aa-registeret.", + avviklet = true + ), + @Deprecated("Denne skal ikke være i bruk i Spleis mer, brukes av spinnvill") - RV_IV_2("Har mer enn 25 % avvik. Dette støttes foreløpig ikke i Speil. Du må derfor annullere periodene.", funksjonellFeilTekst = "Har mer enn 25 % avvik"), + RV_IV_2( + "Har mer enn 25 % avvik. Dette støttes foreløpig ikke i Speil. Du må derfor annullere periodene.", + funksjonellFeilTekst = "Har mer enn 25 % avvik" + ), RV_IV_3("Fant frilanserinntekt på en arbeidsgiver de siste 3 månedene"), RV_IV_4("Finnes inntekter fra flere virksomheter siste tre måneder", avviklet = true), RV_IV_5("Har inntekt på flere arbeidsgivere med forskjellig fom dato", avviklet = true), - RV_IV_6("Inntekter fra mer enn én arbeidsgiver i A-ordningen siste tre måneder. Kontroller om brukeren har flere arbeidsforhold på sykmeldingstidspunktet. Flere arbeidsforhold støttes ikke av systemet.", avviklet = true), + RV_IV_6( + "Inntekter fra mer enn én arbeidsgiver i A-ordningen siste tre måneder. Kontroller om brukeren har flere arbeidsforhold på sykmeldingstidspunktet. Flere arbeidsforhold støttes ikke av systemet.", + avviklet = true + ), RV_IV_7("Det er gjenbrukt inntektsopplysninger "), - RV_IV_8("Perioden har flere skjæringstidspunkter og det er dager hvor inntekten derfor er satt til 0 kr", avviklet = true), + RV_IV_8( + "Perioden har flere skjæringstidspunkter og det er dager hvor inntekten derfor er satt til 0 kr", + avviklet = true + ), RV_IV_9("Tilkommen inntekt som ikke er støttet"), RV_IV_10("Det er foreslått inntekt fra A-ordningen for én arbeidsgiver"), RV_IV_11("Perioden inneholder flere skjæringstidspunkt"), @@ -187,8 +371,14 @@ enum class Varselkode( // SV: Sykepengegrunnlagsvurdering RV_SV_1("Perioden er avslått på grunn av at inntekt er under krav til minste sykepengegrunnlag"), RV_SV_2("Minst en arbeidsgiver inngår ikke i sykepengegrunnlaget"), - RV_SV_3("Mangler inntekt for sykepengegrunnlag som følge av at skjæringstidspunktet har endret seg", avviklet = true), - RV_SV_4("Brukeren har flere inntekter de siste tre måneder. Kontroller om brukeren har flere arbeidsforhold eller andre ytelser på sykmeldingstidspunktet som påvirker utbetalingen.", avviklet = true), + RV_SV_3( + "Mangler inntekt for sykepengegrunnlag som følge av at skjæringstidspunktet har endret seg", + avviklet = true + ), + RV_SV_4( + "Brukeren har flere inntekter de siste tre måneder. Kontroller om brukeren har flere arbeidsforhold eller andre ytelser på sykmeldingstidspunktet som påvirker utbetalingen.", + avviklet = true + ), RV_SV_5("Det har tilkommet nye inntekter"), // AY: Andre ytelser @@ -205,15 +395,27 @@ enum class Varselkode( // SI: Simulering RV_SI_1("Feil under simulering", avviklet = true), - RV_SI_2("Simulering av revurdert utbetaling feilet. Utbetalingen må annulleres", avviklet = true), + RV_SI_2( + "Simulering av revurdert utbetaling feilet. Utbetalingen må annulleres", + avviklet = true + ), RV_SI_3("Det er simulert et negativt beløp."), RV_SI_4("Ingenting ble simulert", avviklet = true), - RV_SI_5("Simulering har endret dagsats eller antall på én eller flere utbetalingslinjer", avviklet = true), + RV_SI_5( + "Simulering har endret dagsats eller antall på én eller flere utbetalingslinjer", + avviklet = true + ), RV_SI_6("Simulering inneholder ikke alle periodene som skal betales", avviklet = true), - RV_SI_7("Simulering kom frem til et annet totalbeløp. Kontroller beløpet til utbetaling", avviklet = true), + RV_SI_7( + "Simulering kom frem til et annet totalbeløp. Kontroller beløpet til utbetaling", + avviklet = true + ), // UT: Utbetaling - RV_UT_1("Utbetaling av revurdert periode ble avvist av saksbehandler. Utbetalingen må annulleres", avviklet = true), + RV_UT_1( + "Utbetaling av revurdert periode ble avvist av saksbehandler. Utbetalingen må annulleres", + avviklet = true + ), RV_UT_2("Utbetalingen ble gjennomført, men med advarsel"), RV_UT_3("Feil ved utbetalingstidslinjebygging"), RV_UT_4("Finner ingen utbetaling å annullere", avviklet = true), @@ -239,17 +441,29 @@ enum class Varselkode( RV_UT_24("Utbetalingen er avvist, men perioden kan ikke forkastes. Overstyr perioden, eller annuller sykefraværstilfellet om nødvendig"), // OS: Oppdragsystemet - RV_OS_1("Utbetalingen forlenger et tidligere oppdrag som opphørte alle utbetalte dager. Sjekk simuleringen.", avviklet = true), + RV_OS_1( + "Utbetalingen forlenger et tidligere oppdrag som opphørte alle utbetalte dager. Sjekk simuleringen.", + avviklet = true + ), RV_OS_2("Utbetalingens fra og med-dato er endret. Kontroller simuleringen"), RV_OS_3("Endrer tidligere oppdrag. Kontroller simuleringen."), // RV: Revurdering RV_RV_1("Denne perioden var tidligere regnet som innenfor arbeidsgiverperioden"), RV_RV_2("Forkaster avvist revurdering ettersom vedtaksperioden ikke har tidligere utbetalte utbetalinger."), - RV_RV_3("Forespurt revurdering av inntekt hvor personen har flere arbeidsgivere (inkl. ghosts)", avviklet= true), + RV_RV_3( + "Forespurt revurdering av inntekt hvor personen har flere arbeidsgivere (inkl. ghosts)", + avviklet = true + ), RV_RV_4("Revurdering er igangsatt og må fullføres", avviklet = true), - RV_RV_5("Validering av ytelser ved revurdering feilet. Utbetalingen må annulleres", avviklet = true), - RV_RV_6("Det er oppgitt ny informasjon om ferie i søknaden som det ikke har blitt opplyst om tidligere. Tidligere periode må revurderes.", avviklet = true), + RV_RV_5( + "Validering av ytelser ved revurdering feilet. Utbetalingen må annulleres", + avviklet = true + ), + RV_RV_6( + "Det er oppgitt ny informasjon om ferie i søknaden som det ikke har blitt opplyst om tidligere. Tidligere periode må revurderes.", + avviklet = true + ), RV_RV_7("En tidligere periode er annullert. Den må være utbetalt i Infotrygd før denne perioden kan behandles."), // VT: Vedtaksperiodetilstand @@ -267,7 +481,10 @@ enum class Varselkode( RV_AN_1("Avslutter perioden på grunn av tilbakestilling", avviklet = true), RV_AN_2("Feil i vilkårsgrunnlag i AVVENTER_VILKÅRSPRØVING_ARBEIDSGIVERSØKNAD", avviklet = true), RV_AN_3("Feil i vilkårsgrunnlag i AVVENTER_VILKÅRSPRØVING_GAP", avviklet = true), - RV_AN_4("Personen har blitt tilbakestilt og kan derfor ha avvik i historikken fra infotrygd.", avviklet = true), + RV_AN_4( + "Personen har blitt tilbakestilt og kan derfor ha avvik i historikken fra infotrygd.", + avviklet = true + ), RV_AN_5("Personen har blitt behandlet på en tidligere ident"), // YS: Yrkesskade @@ -275,11 +492,12 @@ enum class Varselkode( ; init { - require(this.name.matches(regex)) {"Ugyldig varselkode-format: ${this.name}"} + require(this.name.matches(regex)) { "Ugyldig varselkode-format: ${this.name}" } } internal fun varsel(kontekster: List): Aktivitet.Varsel = Aktivitet.Varsel.opprett(kontekster, this, varseltekst) + internal fun funksjonellFeil(kontekster: List): Aktivitet.FunksjonellFeil = Aktivitet.FunksjonellFeil.opprett(kontekster, this, funksjonellFeilTekst) @@ -299,7 +517,7 @@ enum class Varselkode( val `Støtter ikke søknadstypen` = RV_SØ_39 val `Støtter ikke førstegangsbehandlinger for arbeidsledigsøknader` = RV_SØ_42 - val `Arbeidsledigsøknad er lagt til grunn` = RV_SØ_43 + val `Arbeidsledigsøknad er lagt til grunn` = RV_SØ_43 fun IAktivitetslogg.varsel(varselkode: Varselkode, detaljer: String) { varsel(varselkode) diff --git a/sykepenger-api-dto/src/main/kotlin/no/nav/helse/dto/SpannerPersonDto.kt b/sykepenger-api-dto/src/main/kotlin/no/nav/helse/dto/SpannerPersonDto.kt index 6604ee20c0..433431f2e3 100644 --- a/sykepenger-api-dto/src/main/kotlin/no/nav/helse/dto/SpannerPersonDto.kt +++ b/sykepenger-api-dto/src/main/kotlin/no/nav/helse/dto/SpannerPersonDto.kt @@ -66,6 +66,7 @@ data class SpannerPersonDto( val fom: LocalDate, val tom: LocalDate ) + data class PersonutbetalingsperiodeData( val orgnr: String, val fom: LocalDate, @@ -73,6 +74,7 @@ data class SpannerPersonDto( val grad: Double, val inntekt: Int ) + data class ArbeidsgiverutbetalingsperiodeData( val orgnr: String, val fom: LocalDate, @@ -128,6 +130,7 @@ data class SpannerPersonDto( val orgnummer: String, val beløpstidslinje: BeløpstidslinjeData ) + data class ArbeidsgiverInntektsopplysningData( val orgnummer: String, val fom: LocalDate, @@ -250,7 +253,7 @@ data class SpannerPersonDto( val dato: LocalDate? ) { init { - check (dato != null || (fom != null && tom != null)) { + check(dato != null || (fom != null && tom != null)) { "enten må dato være satt eller så må både fom og tom være satt" } } @@ -330,6 +333,7 @@ data class SpannerPersonDto( val arbeidsgiverOppdrag: OppdragData?, val personOppdrag: OppdragData? ) + data class VedtaksperiodeData( val id: UUID, val tilstand: TilstandType, @@ -346,19 +350,22 @@ data class SpannerPersonDto( private val vilkårsgrunnlag: VilkårsgrunnlagElementData?, private val utbetaling: UtbetalingData? ) { - val gjeldende = behandlinger.last().endringer.last().let { gjeldendeEndring -> Gjeldende( - skjæringstidspunkt = skjæringstidspunkt, - arbeidsgiverperiode = gjeldendeEndring.arbeidsgiverperiode, - refusjonstidslinje = gjeldendeEndring.refusjonstidslinje.perioder, - utbetalingstidslinje = gjeldendeEndring.utbetalingstidslinje.dager, - forbrukteDager = gjeldendeEndring.maksdatoresultat.forbrukteDagerAntall, - gjenståendeDager = gjeldendeEndring.maksdatoresultat.gjenståendeDager, - maksdato = gjeldendeEndring.maksdatoresultat.maksdato, - sykdomstidslinje = gjeldendeEndring.sykdomstidslinje.dager, - arbeidsgiverInntektsopplysninger = vilkårsgrunnlag?.inntektsgrunnlag?.arbeidsgiverInntektsopplysninger ?: emptyList(), - personOppdrag = utbetaling?.personOppdrag?.takeUnless { it.linjer.isEmpty() }, - arbeidsgiverOppdrag = utbetaling?.arbeidsgiverOppdrag?.takeUnless { it.linjer.isEmpty() } - ) } + val gjeldende = behandlinger.last().endringer.last().let { gjeldendeEndring -> + Gjeldende( + skjæringstidspunkt = skjæringstidspunkt, + arbeidsgiverperiode = gjeldendeEndring.arbeidsgiverperiode, + refusjonstidslinje = gjeldendeEndring.refusjonstidslinje.perioder, + utbetalingstidslinje = gjeldendeEndring.utbetalingstidslinje.dager, + forbrukteDager = gjeldendeEndring.maksdatoresultat.forbrukteDagerAntall, + gjenståendeDager = gjeldendeEndring.maksdatoresultat.gjenståendeDager, + maksdato = gjeldendeEndring.maksdatoresultat.maksdato, + sykdomstidslinje = gjeldendeEndring.sykdomstidslinje.dager, + arbeidsgiverInntektsopplysninger = vilkårsgrunnlag?.inntektsgrunnlag?.arbeidsgiverInntektsopplysninger + ?: emptyList(), + personOppdrag = utbetaling?.personOppdrag?.takeUnless { it.linjer.isEmpty() }, + arbeidsgiverOppdrag = utbetaling?.arbeidsgiverOppdrag?.takeUnless { it.linjer.isEmpty() } + ) + } enum class TilstandType { AVVENTER_HISTORIKK, @@ -414,12 +421,15 @@ data class SpannerPersonDto( val gjenståendeDager: Int, val grunnlag: UtbetalingstidslinjeData ) { - val forbrukteDagerAntall = forbrukteDager.sumOf { it.fom.datesUntil(it.tom).count() + 1 } + val forbrukteDagerAntall = + forbrukteDager.sumOf { it.fom.datesUntil(it.tom).count() + 1 } } + data class DokumentsporingData( val dokumentId: UUID, val dokumenttype: DokumentTypeData ) + enum class DokumentTypeData { Sykmelding, Søknad, @@ -449,6 +459,7 @@ data class SpannerPersonDto( UBEREGNET, UBEREGNET_OMGJØRING, UBEREGNET_REVURDERING, BEREGNET, BEREGNET_OMGJØRING, BEREGNET_REVURDERING, VEDTAK_FATTET, REVURDERT_VEDTAK_AVVIST, VEDTAK_IVERKSATT, AVSLUTTET_UTEN_VEDTAK, ANNULLERT_PERIODE, TIL_INFOTRYGD } + enum class AvsenderData { SYKMELDT, ARBEIDSGIVER, SAKSBEHANDLER, SYSTEM } @@ -479,6 +490,7 @@ data class SpannerPersonDto( val maksdatoresultat: MaksdatoresultatData ) } + data class DataForSimuleringData( val totalbeløp: Int, val perioder: List @@ -586,6 +598,7 @@ data class SpannerPersonDto( ANNULLERT, FORKASTET } + data class VurderingData( val godkjent: Boolean, val ident: String, @@ -687,7 +700,14 @@ data class SpannerPersonDto( } data class BeløpstidslinjeData(val perioder: List) - data class BeløpstidslinjeperiodeData(val fom: LocalDate, val tom: LocalDate, val dagligBeløp: Double, val meldingsreferanseId: UUID, val avsender: AvsenderData, val tidsstempel: LocalDateTime) + data class BeløpstidslinjeperiodeData( + val fom: LocalDate, + val tom: LocalDate, + val dagligBeløp: Double, + val meldingsreferanseId: UUID, + val avsender: AvsenderData, + val tidsstempel: LocalDateTime + ) } fun PersonUtDto.tilSpannerPersonDto(): SpannerPersonDto { @@ -699,7 +719,12 @@ fun PersonUtDto.tilSpannerPersonDto(): SpannerPersonDto { arbeidsgivere = this.arbeidsgivere.map { it.tilPersonData(vilkårsgrunnlagHistorikkDto) }, infotrygdhistorikk = this.infotrygdhistorikk.elementer.map { it.tilPersonData() }, vilkårsgrunnlagHistorikk = vilkårsgrunnlagHistorikkDto, - minimumSykdomsgradVurdering = minimumSykdomsgradVurdering.perioder.map { SpannerPersonDto.MinimumSykdomsgradVurderingPeriode(it.fom, it.tom) }, + minimumSykdomsgradVurdering = minimumSykdomsgradVurdering.perioder.map { + SpannerPersonDto.MinimumSykdomsgradVurderingPeriode( + it.fom, + it.tom + ) + }, dødsdato = this.alder.dødsdato ) } @@ -714,8 +739,12 @@ private fun ArbeidsgiverUtDto.tilPersonData(vilkårsgrunnlagHistorikk: List val gjeldendeEndring = vedtaksperiode.behandlinger.behandlinger.last().endringer.last() - val vilkårsgrunnlag = gjeldendeEndring.vilkårsgrunnlagId?.let { vilkårsgrunnlagId -> vilkårsgrunnlagHistorikk.flatMap { it.vilkårsgrunnlag }.first { it.vilkårsgrunnlagId == vilkårsgrunnlagId } } - val utbetaling = gjeldendeEndring.utbetalingId?.let { utbetalingId -> utbetalingerDto.first { it.id == utbetalingId } } + val vilkårsgrunnlag = gjeldendeEndring.vilkårsgrunnlagId?.let { vilkårsgrunnlagId -> + vilkårsgrunnlagHistorikk.flatMap { it.vilkårsgrunnlag } + .first { it.vilkårsgrunnlagId == vilkårsgrunnlagId } + } + val utbetaling = + gjeldendeEndring.utbetalingId?.let { utbetalingId -> utbetalingerDto.first { it.id == utbetalingId } } vedtaksperiode.tilPersonData(vilkårsgrunnlag, utbetaling) }, forkastede = this.forkastede.map { it.tilPersonData() }, @@ -753,6 +782,7 @@ private fun SykdomshistorikkElementDto.tilPersonData() = SpannerPersonDto.Sykdom hendelseSykdomstidslinje = this.hendelseSykdomstidslinje.tilPersonData(), beregnetSykdomstidslinje = this.beregnetSykdomstidslinje.tilPersonData(), ) + private fun SykdomstidslinjeDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData( dager = dager.map { it.tilPersonData() }.forkortSykdomstidslinje(), @@ -762,7 +792,12 @@ private fun SykdomstidslinjeDto.tilPersonData() = it.tom ) }, - periode = this.periode?.let { SpannerPersonDto.ArbeidsgiverData.PeriodeData(it.fom, it.tom) } + periode = this.periode?.let { + SpannerPersonDto.ArbeidsgiverData.PeriodeData( + it.fom, + it.tom + ) + } ) private fun List.forkortSykdomstidslinje(): List { @@ -783,7 +818,13 @@ private fun SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData.utvid private fun SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData.kanUtvidesMed(other: SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData): Boolean { // alle verdier må være like (untatt datoene) - val utenDatoer = { dag: SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData -> dag.copy(fom = null, tom = null, dato = LocalDate.EPOCH) } + val utenDatoer = { dag: SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData -> + dag.copy( + fom = null, + tom = null, + dato = LocalDate.EPOCH + ) + } return utenDatoer(this) == utenDatoer(other) && (dato ?: tom!!).nesteDag == other.dato } @@ -798,6 +839,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.AndreYtelserDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = when (this.ytelse) { SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.AAP -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ANDRE_YTELSER_AAP @@ -816,6 +858,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ArbeidIkkeGjenopptattDagDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEID_IKKE_GJENOPPTATT_DAG, kilde = this.kilde.tilPersonData(), @@ -826,6 +869,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ArbeidsdagDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEIDSDAG, kilde = this.kilde.tilPersonData(), @@ -836,6 +880,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ArbeidsgiverHelgedagDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEIDSGIVERDAG, kilde = this.kilde.tilPersonData(), @@ -846,6 +891,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ArbeidsgiverdagDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEIDSGIVERDAG, kilde = this.kilde.tilPersonData(), @@ -856,6 +902,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.FeriedagDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.FERIEDAG, kilde = this.kilde.tilPersonData(), @@ -866,6 +913,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ForeldetSykedagDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.FORELDET_SYKEDAG, kilde = this.kilde.tilPersonData(), @@ -876,6 +924,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.FriskHelgedagDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.FRISK_HELGEDAG, kilde = this.kilde.tilPersonData(), @@ -886,6 +935,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.PermisjonsdagDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.PERMISJONSDAG, kilde = this.kilde.tilPersonData(), @@ -896,6 +946,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ProblemDagDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.PROBLEMDAG, kilde = this.kilde.tilPersonData(), @@ -906,6 +957,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.SykHelgedagDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG, kilde = this.kilde.tilPersonData(), @@ -916,6 +968,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.SykedagDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG, kilde = this.kilde.tilPersonData(), @@ -926,6 +979,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.SykedagNavDto -> SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.DagData( type = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG_NAV, kilde = this.kilde.tilPersonData(), @@ -937,12 +991,14 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { tom = null ) } + private fun HendelseskildeDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.SykdomstidslinjeData.KildeData( type = this.type, id = this.meldingsreferanseId, tidsstempel = this.tidsstempel ) + private fun RefusjonUtDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.RefusjonData( meldingsreferanseId = this.meldingsreferanseId, førsteFraværsdag = this.førsteFraværsdag, @@ -957,6 +1013,7 @@ private fun RefusjonUtDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.Re endringerIRefusjon = this.endringerIRefusjon.map { it.tilPersonData() }, tidsstempel = this.tidsstempel ) + private fun EndringIRefusjonDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.RefusjonData.EndringIRefusjonData( beløp = this.beløp.beløp, @@ -966,10 +1023,12 @@ private fun EndringIRefusjonDto.tilPersonData() = private fun SykmeldingsperioderDto.tilPersonData() = perioder.map { SpannerPersonDto.ArbeidsgiverData.SykmeldingsperiodeData(it.fom, it.tom) } + private fun ForkastetVedtaksperiodeUtDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.ForkastetVedtaksperiodeData( vedtaksperiode = this.vedtaksperiode.tilPersonData() ) + private fun VedtaksperiodeUtDto.tilPersonData( vilkårsgrunnlag: VilkårsgrunnlagElementData? = null, utbetaling: UtbetalingData? = null @@ -1010,14 +1069,14 @@ private fun VedtaksperiodeUtDto.tilPersonData( ) private fun utledVenteårsak(venteårsak: LazyVedtaksperiodeVenterDto): SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.VedtaksperiodeVenterDto? { - try { + try { return venteårsak.value?.tilPersonData() } catch (e: Exception) { return SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.VedtaksperiodeVenterDto( ventetSiden = LocalDateTime.now(), venterTil = LocalDateTime.MAX, venterPå = SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.VenterPåDto( - vedtaksperiodeId = "00000000-0000-0000-0000-000000000000".let { UUID.fromString(it) }, + vedtaksperiodeId = "00000000-0000-0000-0000-000000000000".let { UUID.fromString(it) }, organisasjonsnummer = "ORGNUMMER", venteårsak = SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.VenteårsakDto( hva = "Hjelp - kræsj", @@ -1034,17 +1093,20 @@ private fun VedtaksperiodeVenterDto.tilPersonData() = venterTil = venterTil, venterPå = venterPå.tilPersonData() ) + private fun VenterPåDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.VenterPåDto( vedtaksperiodeId = vedtaksperiodeId, organisasjonsnummer = organisasjonsnummer, venteårsak = venteårsak.tilPersonData() ) + private fun VenteårsakDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.VenteårsakDto( hva = hva, hvorfor = hvorfor ) + private fun BehandlingUtDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.BehandlingData( id = this.id, @@ -1067,6 +1129,7 @@ private fun BehandlingUtDto.tilPersonData() = kilde = this.kilde.tilPersonData(), endringer = this.endringer.map { it.tilPersonData() }, ) + private fun BehandlingkildeDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.KildeData( meldingsreferanseId = this.meldingsreferanseId, @@ -1074,12 +1137,14 @@ private fun BehandlingkildeDto.tilPersonData() = registrert = this.registert, avsender = this.avsender.tilPersonData() ) + private fun AvsenderDto.tilPersonData() = when (this) { AvsenderDto.ARBEIDSGIVER -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.AvsenderData.ARBEIDSGIVER AvsenderDto.SAKSBEHANDLER -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.AvsenderData.SAKSBEHANDLER AvsenderDto.SYKMELDT -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.AvsenderData.SYKMELDT AvsenderDto.SYSTEM -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.AvsenderData.SYSTEM } + private fun BehandlingendringUtDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.EndringData( id = id, @@ -1104,23 +1169,41 @@ private fun BehandlingendringUtDto.tilPersonData() = }, maksdatoresultat = maksdatoresultat.tilPersonData() ) -private fun MaksdatoresultatUtDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.MaksdatoresultatData( - vurdertTilOgMed = vurdertTilOgMed, - bestemmelse = when (bestemmelse) { - MaksdatobestemmelseDto.IKKE_VURDERT -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseDto.IKKE_VURDERT - MaksdatobestemmelseDto.ORDINÆR_RETT -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseDto.ORDINÆR_RETT - MaksdatobestemmelseDto.BEGRENSET_RETT -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseDto.BEGRENSET_RETT - MaksdatobestemmelseDto.SYTTI_ÅR -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseDto.SYTTI_ÅR - }, - startdatoTreårsvindu = startdatoTreårsvindu, - startdatoSykepengerettighet = startdatoSykepengerettighet, - forbrukteDager = forbrukteDager.map { SpannerPersonDto.ArbeidsgiverData.PeriodeData(it.fom, it.tom) }, - oppholdsdager = oppholdsdager.map { SpannerPersonDto.ArbeidsgiverData.PeriodeData(it.fom, it.tom) }, - avslåtteDager = avslåtteDager.map { SpannerPersonDto.ArbeidsgiverData.PeriodeData(it.fom, it.tom) }, - maksdato = maksdato, - gjenståendeDager = gjenståendeDager, - grunnlag = grunnlag.tilPersonData() -) + +private fun MaksdatoresultatUtDto.tilPersonData() = + SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.MaksdatoresultatData( + vurdertTilOgMed = vurdertTilOgMed, + bestemmelse = when (bestemmelse) { + MaksdatobestemmelseDto.IKKE_VURDERT -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseDto.IKKE_VURDERT + MaksdatobestemmelseDto.ORDINÆR_RETT -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseDto.ORDINÆR_RETT + MaksdatobestemmelseDto.BEGRENSET_RETT -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseDto.BEGRENSET_RETT + MaksdatobestemmelseDto.SYTTI_ÅR -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseDto.SYTTI_ÅR + }, + startdatoTreårsvindu = startdatoTreårsvindu, + startdatoSykepengerettighet = startdatoSykepengerettighet, + forbrukteDager = forbrukteDager.map { + SpannerPersonDto.ArbeidsgiverData.PeriodeData( + it.fom, + it.tom + ) + }, + oppholdsdager = oppholdsdager.map { + SpannerPersonDto.ArbeidsgiverData.PeriodeData( + it.fom, + it.tom + ) + }, + avslåtteDager = avslåtteDager.map { + SpannerPersonDto.ArbeidsgiverData.PeriodeData( + it.fom, + it.tom + ) + }, + maksdato = maksdato, + gjenståendeDager = gjenståendeDager, + grunnlag = grunnlag.tilPersonData() + ) + private fun DokumentsporingDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.DokumentsporingData( dokumentId = this.id, @@ -1140,6 +1223,7 @@ private fun DokumentsporingDto.tilPersonData() = DokumenttypeDto.AndreYtelser -> SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.AndreYtelser } ) + private fun UtbetalingUtDto.tilPersonData() = UtbetalingData( id = this.id, korrelasjonsId = this.korrelasjonsId, @@ -1203,7 +1287,13 @@ private fun SpannerPersonDto.UtbetalingstidslinjeData.UtbetalingsdagData.utvideM private fun SpannerPersonDto.UtbetalingstidslinjeData.UtbetalingsdagData.kanUtvidesMed(other: SpannerPersonDto.UtbetalingstidslinjeData.UtbetalingsdagData): Boolean { // alle verdier må være like (untatt datoene) - val utenDatoer = { dag: SpannerPersonDto.UtbetalingstidslinjeData.UtbetalingsdagData -> dag.copy(fom = null, tom = null, dato = LocalDate.EPOCH) } + val utenDatoer = { dag: SpannerPersonDto.UtbetalingstidslinjeData.UtbetalingsdagData -> + dag.copy( + fom = null, + tom = null, + dato = LocalDate.EPOCH + ) + } return utenDatoer(this) == utenDatoer(other) && (dato ?: tom!!).nesteDag == other.dato } @@ -1267,6 +1357,7 @@ private fun UtbetalingVurderingDto.tilPersonData() = UtbetalingData.VurderingDat tidspunkt = tidspunkt, automatiskBehandling = automatiskBehandling ) + private fun OppdragUtDto.tilPersonData() = SpannerPersonDto.OppdragData( mottaker = this.mottaker, fagområde = when (this.fagområde) { @@ -1293,11 +1384,13 @@ private fun OppdragUtDto.tilPersonData() = SpannerPersonDto.OppdragData( erSimulert = this.erSimulert, simuleringsResultat = this.simuleringsResultat?.tilPersonData() ) + private fun EndringskodeDto.tilPersonData() = when (this) { EndringskodeDto.ENDR -> "ENDR" EndringskodeDto.NY -> "NY" EndringskodeDto.UEND -> "UEND" } + private fun UtbetalingslinjeUtDto.tilPersonData() = SpannerPersonDto.UtbetalingslinjeData( fom = this.fom, tom = this.tom, @@ -1317,12 +1410,14 @@ private fun UtbetalingslinjeUtDto.tilPersonData() = SpannerPersonDto.Utbetalings datoStatusFom = this.datoStatusFom, statuskode = this.statuskode ) + private fun KlassekodeDto.tilPersonData() = when (this) { KlassekodeDto.RefusjonFeriepengerIkkeOpplysningspliktig -> "SPREFAGFER-IOP" KlassekodeDto.RefusjonIkkeOpplysningspliktig -> "SPREFAG-IOP" KlassekodeDto.SykepengerArbeidstakerFeriepenger -> "SPATFER" KlassekodeDto.SykepengerArbeidstakerOrdinær -> "SPATORD" } + private fun SimuleringResultatDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData( totalbeløp = this.totalbeløp, @@ -1365,6 +1460,7 @@ private fun SimuleringResultatDto.tilPersonData() = ) } ) + private fun FeriepengeUtDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.FeriepengeutbetalingData( infotrygdFeriepengebeløpPerson = this.infotrygdFeriepengebeløpPerson, @@ -1380,6 +1476,7 @@ private fun FeriepengeUtDto.tilPersonData() = sendTilOppdrag = sendTilOppdrag, sendPersonoppdragTilOS = sendPersonoppdragTilOS ) + private fun UtbetaltDagDto.tilPersonData() = SpannerPersonDto.ArbeidsgiverData.FeriepengeutbetalingData.UtbetaltDagData( type = when (this) { @@ -1392,6 +1489,7 @@ private fun UtbetaltDagDto.tilPersonData() = dato = dato, beløp = beløp ) + private fun InfotrygdhistorikkelementUtDto.tilPersonData() = SpannerPersonDto.InfotrygdhistorikkElementData( id = this.id, @@ -1404,11 +1502,13 @@ private fun InfotrygdhistorikkelementUtDto.tilPersonData() = arbeidskategorikoder = arbeidskategorikoder, oppdatert = oppdatert ) + private fun InfotrygdFerieperiodeDto.tilPersonData() = SpannerPersonDto.InfotrygdhistorikkElementData.FerieperiodeData( fom = this.periode.fom, tom = this.periode.tom ) + private fun InfotrygdArbeidsgiverutbetalingsperiodeUtDto.tilPersonData() = SpannerPersonDto.InfotrygdhistorikkElementData.ArbeidsgiverutbetalingsperiodeData( orgnr = this.orgnr, @@ -1417,6 +1517,7 @@ private fun InfotrygdArbeidsgiverutbetalingsperiodeUtDto.tilPersonData() = grad = this.grad.prosent, inntekt = this.inntekt.dagligInt.beløp ) + private fun InfotrygdPersonutbetalingsperiodeUtDto.tilPersonData() = SpannerPersonDto.InfotrygdhistorikkElementData.PersonutbetalingsperiodeData( orgnr = this.orgnr, @@ -1425,6 +1526,7 @@ private fun InfotrygdPersonutbetalingsperiodeUtDto.tilPersonData() = grad = this.grad.prosent, inntekt = this.inntekt.dagligInt.beløp ) + private fun InfotrygdInntektsopplysningUtDto.tilPersonData() = SpannerPersonDto.InfotrygdhistorikkElementData.InntektsopplysningData( orgnr = this.orgnummer, @@ -1434,11 +1536,13 @@ private fun InfotrygdInntektsopplysningUtDto.tilPersonData() = refusjonTom = refusjonTom, lagret = lagret ) + private fun VilkårsgrunnlagInnslagUtDto.tilPersonData() = VilkårsgrunnlagInnslagData( id = this.id, opprettet = this.opprettet, vilkårsgrunnlag = this.vilkårsgrunnlag.map { it.tilPersonData() } ) + private fun VilkårsgrunnlagUtDto.tilPersonData() = VilkårsgrunnlagElementData( skjæringstidspunkt = this.skjæringstidspunkt, type = when (this) { @@ -1488,6 +1592,7 @@ private fun OpptjeningUtDto.tilPersonData() = ) } ) + private fun InntektsgrunnlagUtDto.tilPersonData() = VilkårsgrunnlagElementData.InntektsgrunnlagData( grunnbeløp = this.`6G`.årlig.beløp, @@ -1514,10 +1619,11 @@ private fun ArbeidsgiverInntektsopplysningUtDto.tilPersonData() = } ) -private fun NyInntektUnderveisDto.tilPersonData() = VilkårsgrunnlagElementData.NyInntektUnderveisData( - orgnummer = this.orgnummer, - beløpstidslinje = this.beløpstidslinje.tilPersonData() -) +private fun NyInntektUnderveisDto.tilPersonData() = + VilkårsgrunnlagElementData.NyInntektUnderveisData( + orgnummer = this.orgnummer, + beløpstidslinje = this.beløpstidslinje.tilPersonData() + ) private fun InntektsopplysningUtDto.tilPersonData() = VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData( @@ -1570,6 +1676,7 @@ private fun InntektsopplysningUtDto.tilPersonData() = InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.Arbeidsgiver -> SpannerPersonDto.ArbeidsgiverData.InntektsmeldingData.KildeData.Arbeidsgiver InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.AOrdningen -> SpannerPersonDto.ArbeidsgiverData.InntektsmeldingData.KildeData.AOrdningen } + else -> null } ) @@ -1599,6 +1706,7 @@ private fun SkatteopplysningDto.tilPersonDataSkattopplysning() = beskrivelse = beskrivelse, tidsstempel = tidsstempel ) + private fun BeløpstidslinjeDto.tilPersonData() = SpannerPersonDto.BeløpstidslinjeData( perioder = this.perioder.map { SpannerPersonDto.BeløpstidslinjeperiodeData( @@ -1610,4 +1718,4 @@ private fun BeløpstidslinjeDto.tilPersonData() = SpannerPersonDto.Beløpstidsli tidsstempel = it.kilde.tidsstempel ) } -) \ No newline at end of file +) diff --git a/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLHendelse.kt b/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLHendelse.kt index 3da540be1c..777e8cc45b 100644 --- a/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLHendelse.kt +++ b/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLHendelse.kt @@ -16,7 +16,11 @@ enum class GraphQLHendelsetype { Ukjent } -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "__typename") +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.PROPERTY, + property = "__typename" +) interface GraphQLHendelse { val id: String val eksternDokumentId: String @@ -61,6 +65,7 @@ data class GraphQLSoknadFrilans( ) : GraphQLHendelse { override val type = GraphQLHendelsetype.SendtSoknadFrilans } + data class GraphQLSoknadSelvstendig( override val id: String, override val eksternDokumentId: String, @@ -71,6 +76,7 @@ data class GraphQLSoknadSelvstendig( ) : GraphQLHendelse { override val type = GraphQLHendelsetype.SendtSoknadSelvstendig } + data class GraphQLSoknadArbeidsledig( override val id: String, override val eksternDokumentId: String, @@ -101,4 +107,4 @@ data class GraphQLSykmelding( val rapportertDato: LocalDateTime ) : GraphQLHendelse { override val type = GraphQLHendelsetype.NySoknad -} \ No newline at end of file +} diff --git a/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLTidslinjeperiode.kt b/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLTidslinjeperiode.kt index 4570e5053f..6f3cc2b2dd 100644 --- a/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLTidslinjeperiode.kt +++ b/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLTidslinjeperiode.kt @@ -99,9 +99,11 @@ enum class GraphQLUtbetalingstatus { GodkjentUtenUtbetaling, IkkeGodkjent, Overfort, + @Deprecated("skal slettes") Sendt, Ubetalt, + @Deprecated("skal slettes") UtbetalingFeilet, Utbetalt @@ -175,7 +177,11 @@ data class GraphQLDag( val begrunnelser: List? ) -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "__typename") +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.PROPERTY, + property = "__typename" +) interface GraphQLTidslinjeperiode { val behandlingId: UUID val kilde: UUID @@ -206,7 +212,7 @@ data class GraphQLUberegnetPeriode( override val periodetilstand: GraphQLPeriodetilstand, override val skjaeringstidspunkt: LocalDate, override val hendelser: List - ) : GraphQLTidslinjeperiode +) : GraphQLTidslinjeperiode data class GraphQLPeriodevilkar( val sykepengedager: Sykepengedager, diff --git a/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLVilkarsgrunnlag.kt b/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLVilkarsgrunnlag.kt index f06fb00fb3..75fe36690d 100644 --- a/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLVilkarsgrunnlag.kt +++ b/sykepenger-api-graphql/src/main/kotlin/no/nav/helse/spleis/graphql/dto/GraphQLVilkarsgrunnlag.kt @@ -4,7 +4,11 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo import java.time.LocalDate import java.util.UUID -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "__typename") +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.PROPERTY, + property = "__typename" +) interface GraphQLVilkarsgrunnlag { val id: UUID val skjaeringstidspunkt: LocalDate @@ -29,7 +33,9 @@ data class GraphQLSpleisVilkarsgrunnlag( val oppfyllerKravOmOpptjening: Boolean, val oppfyllerKravOmMedlemskap: Boolean? ) : GraphQLVilkarsgrunnlag { - val skjonnsmessigFastsattAarlig: Double? = inntekter.filter{ it.deaktivert != true }.mapNotNull { it.skjonnsmessigFastsatt }.takeIf(List<*>::isNotEmpty)?.sumOf { it.belop } + val skjonnsmessigFastsattAarlig: Double? = + inntekter.filter { it.deaktivert != true }.mapNotNull { it.skjonnsmessigFastsatt } + .takeIf(List<*>::isNotEmpty)?.sumOf { it.belop } } data class GraphQLInfotrygdVilkarsgrunnlag( diff --git a/sykepenger-api-graphql/src/test/kotlin/no/nav/helse/spleis/graphql/SchemaGenerator.kt b/sykepenger-api-graphql/src/test/kotlin/no/nav/helse/spleis/graphql/SchemaGenerator.kt index 0b86a45cfb..33862f1f5e 100644 --- a/sykepenger-api-graphql/src/test/kotlin/no/nav/helse/spleis/graphql/SchemaGenerator.kt +++ b/sykepenger-api-graphql/src/test/kotlin/no/nav/helse/spleis/graphql/SchemaGenerator.kt @@ -7,9 +7,11 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import io.ktor.client.request.post import io.ktor.client.request.setBody import io.ktor.client.statement.bodyAsText -import io.ktor.server.application.install import io.ktor.server.testing.testApplication import java.nio.file.Paths +import kotlin.io.path.absolutePathString +import kotlin.io.path.readText +import kotlin.io.path.writeText import no.nav.helse.spleis.graphql.dto.GraphQLPerson import org.intellij.lang.annotations.Language import org.junit.jupiter.api.Assertions.assertFalse @@ -18,9 +20,6 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable import org.skyscreamer.jsonassert.JSONCompare import org.skyscreamer.jsonassert.JSONCompareMode.STRICT -import kotlin.io.path.absolutePathString -import kotlin.io.path.readText -import kotlin.io.path.writeText internal class SchemaGenerator { @@ -42,10 +41,15 @@ internal class SchemaGenerator { } } - val schemaPath = Paths.get("${Paths.get("").absolutePathString()}/../sykepenger-api/src/main/resources/graphql-schema.json") + val schemaPath = Paths.get( + "${ + Paths.get("").absolutePathString() + }/../sykepenger-api/src/main/resources/graphql-schema.json" + ) val gammeltSchema = schemaPath.readText() val response = client.post("/graphql") { setBody(IntrospectionQuery) }.bodyAsText() - val nyttSchema = jacksonObjectMapper().registerModule(JavaTimeModule()).readTree(response) as ObjectNode + val nyttSchema = + jacksonObjectMapper().registerModule(JavaTimeModule()).readTree(response) as ObjectNode assertTrue(nyttSchema.path("data").path("__schema").isObject) { "Noe er galt med det nytt schema" @@ -70,6 +74,7 @@ internal class SchemaGenerator { {"query":"\n query IntrospectionQuery {\n __schema {\n queryType { name }\n mutationType { name }\n subscriptionType { name }\n types {\n ...FullType\n }\n directives {\n name\n description\n locations\n args {\n ...InputValue\n }\n }\n }\n }\n fragment FullType on __Type {\n kind\n name\n description\n fields(includeDeprecated: true) {\n name\n description\n args {\n ...InputValue\n }\n type {\n ...TypeRef\n }\n isDeprecated\n deprecationReason\n }\n inputFields {\n ...InputValue\n }\n interfaces {\n ...TypeRef\n }\n enumValues(includeDeprecated: true) {\n name\n description\n isDeprecated\n deprecationReason\n }\n possibleTypes {\n ...TypeRef\n }\n }\n fragment InputValue on __InputValue {\n name\n description\n type { ...TypeRef }\n defaultValue\n }\n fragment TypeRef on __Type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n }\n ","operationName":"IntrospectionQuery"} """ - private fun erLik(før: String, etter: String) = !JSONCompare.compareJSON(før, etter, STRICT).failed() + private fun erLik(før: String, etter: String) = + !JSONCompare.compareJSON(før, etter, STRICT).failed() } } diff --git a/sykepenger-api/build.gradle.kts b/sykepenger-api/build.gradle.kts index 81d6f334f8..a52f69febf 100644 --- a/sykepenger-api/build.gradle.kts +++ b/sykepenger-api/build.gradle.kts @@ -79,9 +79,10 @@ tasks { manifest { attributes["Main-Class"] = mainClass - attributes["Class-Path"] = configurations.runtimeClasspath.get().joinToString(separator = " ") { - it.name - } + attributes["Class-Path"] = + configurations.runtimeClasspath.get().joinToString(separator = " ") { + it.name + } } finalizedBy(":sykepenger-api:remove_spleis_api_db_container") } diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/App.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/App.kt index 2f325d7a97..87cf6e9bbb 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/App.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/App.kt @@ -21,15 +21,15 @@ import no.nav.helse.spleis.dao.HendelseDao import no.nav.helse.spleis.dao.PersonDao import no.nav.helse.spleis.graphql.Api.installGraphQLApi import org.slf4j.LoggerFactory -import kotlin.text.get -internal val nyObjectmapper get() = jacksonObjectMapper() - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .registerModule(JavaTimeModule()) - .setDefaultPrettyPrinter(DefaultPrettyPrinter().apply { - indentArraysWith(DefaultPrettyPrinter.FixedSpaceIndenter.instance) - indentObjectsWith(DefaultIndenter(" ", "\n")) - }) +internal val nyObjectmapper + get() = jacksonObjectMapper() + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .registerModule(JavaTimeModule()) + .setDefaultPrettyPrinter(DefaultPrettyPrinter().apply { + indentArraysWith(DefaultPrettyPrinter.FixedSpaceIndenter.instance) + indentObjectsWith(DefaultIndenter(" ", "\n")) + }) internal val objectMapper = nyObjectmapper internal val logg = LoggerFactory.getLogger("no.nav.helse.spleis.api.Application") @@ -41,7 +41,13 @@ fun main() { val meterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT) val config = ApplicationConfiguration(meterRegistry) - val app = createApp(config.azureConfig, config.speedClient, config.spekematClient, { config.dataSource }, meterRegistry) + val app = createApp( + config.azureConfig, + config.speedClient, + config.spekematClient, + { config.dataSource }, + meterRegistry + ) app.start(wait = true) } @@ -81,7 +87,10 @@ internal fun Application.lagApplikasjonsmodul( dataSourceProvider: () -> DataSource, meterRegistry: PrometheusMeterRegistry ) { - requestResponseTracing(LoggerFactory.getLogger("no.nav.helse.spleis.api.Tracing"), meterRegistry) + requestResponseTracing( + LoggerFactory.getLogger("no.nav.helse.spleis.api.Tracing"), + meterRegistry + ) val hendelseDao = HendelseDao(dataSourceProvider, meterRegistry) val personDao = PersonDao(dataSourceProvider, meterRegistry) @@ -89,4 +98,4 @@ internal fun Application.lagApplikasjonsmodul( spannerApi(hendelseDao, personDao) sporingApi(hendelseDao, personDao) installGraphQLApi(speedClient, spekematClient, hendelseDao, personDao, meterRegistry) -} \ No newline at end of file +} diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/Nais.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/Nais.kt index f8dd87ffb5..9cdeed3627 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/Nais.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/Nais.kt @@ -2,7 +2,6 @@ package no.nav.helse.spleis import io.ktor.http.ContentType import io.ktor.server.application.Application -import io.ktor.server.application.call import io.ktor.server.application.install import io.ktor.server.metrics.micrometer.MicrometerMetrics import io.ktor.server.response.respond diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/RequestResponseTracing.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/RequestResponseTracing.kt index f001df86b2..1a490ec9a7 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/RequestResponseTracing.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/RequestResponseTracing.kt @@ -1,7 +1,7 @@ package no.nav.helse.spleis -import io.ktor.http.* -import io.ktor.http.content.* +import io.ktor.http.HttpStatusCode +import io.ktor.http.content.OutgoingContent import io.ktor.server.application.Application import io.ktor.server.application.ApplicationCallPipeline import io.ktor.server.application.call @@ -9,7 +9,7 @@ import io.ktor.server.plugins.callid.callId import io.ktor.server.request.httpMethod import io.ktor.server.request.uri import io.ktor.server.response.ApplicationSendPipeline -import io.ktor.util.* +import io.ktor.util.toMap import io.micrometer.core.instrument.Counter import io.micrometer.core.instrument.MeterRegistry import io.micrometer.core.instrument.Timer @@ -27,7 +27,10 @@ internal fun Application.requestResponseTracing(logger: Logger, registry: MeterR .map { (key, values) -> keyValue("req_header_$key", values.joinToString(separator = ";")) }.toTypedArray() - logger.info("incoming callId=${call.callId} method=${call.request.httpMethod.value} uri=${call.request.uri}", *headers) + logger.info( + "incoming callId=${call.callId} method=${call.request.httpMethod.value} uri=${call.request.uri}", + *headers + ) val timer = Timer.start(registry) try { diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/SpekematClient.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/SpekematClient.kt index 44c6c3c3cd..e9bf41d3a0 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/SpekematClient.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/SpekematClient.kt @@ -24,6 +24,7 @@ class SpekematClient( baseUrl: String? = null ) { private val baseUrl = baseUrl ?: "http://spekemat" + private companion object { private val logg = LoggerFactory.getLogger(this::class.java) private val sikkerlogg = LoggerFactory.getLogger("tjenestekall") @@ -36,10 +37,15 @@ class SpekematClient( sikkerlogg.info(it, kv("callId", callId), kv("fødselsnummer", fnr)) } val request = lagRequest(fnr, callId) - val response = httpClient.send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)) + val response = + httpClient.send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)) val responseBody = response.body() val statusCode = response.statusCode() - sikkerlogg.info("mottok $statusCode:\n$responseBody", kv("fødselsnummer", fnr), kv("callId", callId)) + sikkerlogg.info( + "mottok $statusCode:\n$responseBody", + kv("fødselsnummer", fnr), + kv("callId", callId) + ) if (statusCode != 200) throw SpekematClientException("Fikk uventet http statuskode fra spekemat: $statusCode. Forventet HTTP 200 OK") return parsePølsefabrikker(responseBody) } @@ -83,12 +89,17 @@ class SpekematClient( .header("Accept", "application/json") .header("Content-Type", "application/json") .header(CALL_ID_HEADER, callId) - .header("Authorization", "Bearer ${tokenProvider.bearerToken(scope).getOrThrow().token}") + .header( + "Authorization", + "Bearer ${tokenProvider.bearerToken(scope).getOrThrow().token}" + ) .POST(HttpRequest.BodyPublishers.ofString(requestBody)) .build() } } -class SpekematClientException(override val message: String, override val cause: Throwable? = null) : RuntimeException() + +class SpekematClientException(override val message: String, override val cause: Throwable? = null) : + RuntimeException() @JsonIgnoreProperties(ignoreUnknown = true) private data class PølserResponse(val yrkesaktiviteter: List) @@ -96,10 +107,12 @@ private data class YrkesaktivitetDto( val yrkesaktivitetidentifikator: String, val rader: List ) + private data class PølseradDto( val pølser: List, val kildeTilRad: UUID ) + private data class PølseDto( val vedtaksperiodeId: UUID, val behandlingId: UUID, @@ -107,4 +120,5 @@ private data class PølseDto( // tingen som gjorde at behandlingen ble opprettet val kilde: UUID ) -private enum class Pølsestatus { ÅPEN, LUKKET, FORKASTET } \ No newline at end of file + +private enum class Pølsestatus { ÅPEN, LUKKET, FORKASTET } diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/SpleisApi.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/SpleisApi.kt index 6495a98f49..467ea42e1c 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/SpleisApi.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/SpleisApi.kt @@ -29,7 +29,9 @@ internal fun Application.spannerApi(hendelseDao: HendelseDao, personDao: PersonD post("/api/person-json") { val request = call.receive() withContext(Dispatchers.IO) { - val serialisertPerson = personDao.hentPersonFraFnr(request.fødselsnummer.toLong()) ?: throw NotFoundException("Kunne ikke finne person for fødselsnummer") + val serialisertPerson = + personDao.hentPersonFraFnr(request.fødselsnummer.toLong()) + ?: throw NotFoundException("Kunne ikke finne person for fødselsnummer") val dto = serialisertPerson.tilPersonDto() val person = Person.gjenopprett(EmptyLog, dto) call.respond(person.dto().tilSpannerPersonDto()) @@ -38,7 +40,8 @@ internal fun Application.spannerApi(hendelseDao: HendelseDao, personDao: PersonD get("/api/hendelse-json/{hendelse}") { withContext(Dispatchers.IO) { - val hendelseId = call.parameters["hendelse"] ?: throw IllegalArgumentException("Kall Mangler hendelse referanse") + val hendelseId = call.parameters["hendelse"] + ?: throw IllegalArgumentException("Kall Mangler hendelse referanse") val meldingsReferanse = try { UUID.fromString(hendelseId) @@ -47,7 +50,8 @@ internal fun Application.spannerApi(hendelseDao: HendelseDao, personDao: PersonD } val hendelse = - hendelseDao.hentHendelse(meldingsReferanse) ?: throw NotFoundException("Kunne ikke finne hendelse for hendelsereferanse = $hendelseId") + hendelseDao.hentHendelse(meldingsReferanse) + ?: throw NotFoundException("Kunne ikke finne hendelse for hendelsereferanse = $hendelseId") call.respondText(hendelse, ContentType.Application.Json) } @@ -61,8 +65,10 @@ internal fun Application.sporingApi(hendelseDao: HendelseDao, personDao: PersonD authenticate { get("/api/vedtaksperioder") { withContext(Dispatchers.IO) { - val fnr = call.request.header("fnr")?.toLong() ?: throw BadRequestException("mangler fnr") - val person = personDao.hentPersonFraFnr(fnr) ?: throw NotFoundException("Kunne ikke finne person for fødselsnummer") + val fnr = call.request.header("fnr")?.toLong() + ?: throw BadRequestException("mangler fnr") + val person = personDao.hentPersonFraFnr(fnr) + ?: throw NotFoundException("Kunne ikke finne person for fødselsnummer") val dto = person.tilPersonDto() call.respond(serializePersonForSporing(Person.gjenopprett(EmptyLog, dto))) } @@ -74,4 +80,4 @@ internal fun Application.sporingApi(hendelseDao: HendelseDao, personDao: PersonD @JsonIgnoreProperties(ignoreUnknown = true) private data class PersonRequest( val fødselsnummer: String -) \ No newline at end of file +) diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/config/ApplicationConfiguration.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/config/ApplicationConfiguration.kt index a42249d14d..3b53bea94f 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/config/ApplicationConfiguration.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/config/ApplicationConfiguration.kt @@ -11,14 +11,18 @@ import com.github.navikt.tbd_libs.naisful.postgres.jdbcUrlWithGoogleSocketFactor import com.github.navikt.tbd_libs.speed.SpeedClient import com.zaxxer.hikari.HikariConfig import com.zaxxer.hikari.HikariDataSource -import io.ktor.server.auth.jwt.* +import io.ktor.server.auth.jwt.JWTAuthenticationProvider +import io.ktor.server.auth.jwt.JWTPrincipal import io.micrometer.core.instrument.MeterRegistry -import no.nav.helse.spleis.SpekematClient -import no.nav.helse.spleis.objectMapper import java.net.URI import java.net.http.HttpClient +import no.nav.helse.spleis.SpekematClient +import no.nav.helse.spleis.objectMapper -internal class ApplicationConfiguration(meterRegistry: MeterRegistry, env: Map = System.getenv()) { +internal class ApplicationConfiguration( + meterRegistry: MeterRegistry, + env: Map = System.getenv() +) { internal val azureConfig = AzureAdAppConfig( clientId = env.getValue("AZURE_APP_CLIENT_ID"), issuer = env.getValue("AZURE_OPENID_CONFIG_ISSUER"), diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/HendelseDao.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/HendelseDao.kt index 5082a4a5b1..d60362123b 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/HendelseDao.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/HendelseDao.kt @@ -11,7 +11,10 @@ import no.nav.helse.spleis.dto.HendelseDTO import no.nav.helse.spleis.objectMapper import org.intellij.lang.annotations.Language -internal class HendelseDao(private val dataSource: () -> DataSource, private val meterRegistry: MeterRegistry) { +internal class HendelseDao( + private val dataSource: () -> DataSource, + private val meterRegistry: MeterRegistry +) { fun hentHendelse(meldingsReferanse: UUID): String? { return sessionOf(dataSource()).use { session -> @@ -50,6 +53,7 @@ internal class HendelseDao(private val dataSource: () -> DataSource, private val tom = LocalDate.parse(node.path("tom").asText()), rapportertdato = LocalDateTime.parse(node.path("@opprettet").asText()), ) + Meldingstype.NY_SØKNAD_FRILANS -> HendelseDTO.nyFrilanssøknad( id = node.path("@id").asText(), eksternDokumentId = node.path("id").asText(), @@ -57,6 +61,7 @@ internal class HendelseDao(private val dataSource: () -> DataSource, private val tom = LocalDate.parse(node.path("tom").asText()), rapportertdato = LocalDateTime.parse(node.path("@opprettet").asText()), ) + Meldingstype.NY_SØKNAD_SELVSTENDIG -> HendelseDTO.nySelvstendigsøknad( id = node.path("@id").asText(), eksternDokumentId = node.path("id").asText(), @@ -64,6 +69,7 @@ internal class HendelseDao(private val dataSource: () -> DataSource, private val tom = LocalDate.parse(node.path("tom").asText()), rapportertdato = LocalDateTime.parse(node.path("@opprettet").asText()), ) + Meldingstype.NY_SØKNAD_ARBEIDSLEDIG -> HendelseDTO.nyArbeidsledigsøknad( id = node.path("@id").asText(), eksternDokumentId = node.path("id").asText(), @@ -71,6 +77,7 @@ internal class HendelseDao(private val dataSource: () -> DataSource, private val tom = LocalDate.parse(node.path("tom").asText()), rapportertdato = LocalDateTime.parse(node.path("@opprettet").asText()), ) + Meldingstype.SENDT_SØKNAD_NAV -> HendelseDTO.sendtSøknadNav( id = node.path("@id").asText(), eksternDokumentId = node.path("id").asText(), @@ -79,6 +86,7 @@ internal class HendelseDao(private val dataSource: () -> DataSource, private val rapportertdato = LocalDateTime.parse(node.path("@opprettet").asText()), sendtNav = LocalDateTime.parse(node.path("sendtNav").asText()) ) + Meldingstype.SENDT_SØKNAD_FRILANS -> HendelseDTO.sendtSøknadFrilans( id = node.path("@id").asText(), eksternDokumentId = node.path("id").asText(), @@ -87,6 +95,7 @@ internal class HendelseDao(private val dataSource: () -> DataSource, private val rapportertdato = LocalDateTime.parse(node.path("@opprettet").asText()), sendtNav = LocalDateTime.parse(node.path("sendtNav").asText()) ) + Meldingstype.SENDT_SØKNAD_SELVSTENDIG -> HendelseDTO.sendtSøknadSelvstendig( id = node.path("@id").asText(), eksternDokumentId = node.path("id").asText(), @@ -95,6 +104,7 @@ internal class HendelseDao(private val dataSource: () -> DataSource, private val rapportertdato = LocalDateTime.parse(node.path("@opprettet").asText()), sendtNav = LocalDateTime.parse(node.path("sendtNav").asText()) ) + Meldingstype.SENDT_SØKNAD_ARBEIDSLEDIG -> HendelseDTO.sendtSøknadArbeidsledig( id = node.path("@id").asText(), eksternDokumentId = node.path("id").asText(), @@ -103,20 +113,25 @@ internal class HendelseDao(private val dataSource: () -> DataSource, private val rapportertdato = LocalDateTime.parse(node.path("@opprettet").asText()), sendtNav = LocalDateTime.parse(node.path("sendtNav").asText()) ) + Meldingstype.SENDT_SØKNAD_ARBEIDSGIVER -> HendelseDTO.sendtSøknadArbeidsgiver( id = node.path("@id").asText(), eksternDokumentId = node.path("id").asText(), fom = LocalDate.parse(node.path("fom").asText()), tom = LocalDate.parse(node.path("tom").asText()), rapportertdato = LocalDateTime.parse(node.path("@opprettet").asText()), - sendtArbeidsgiver = LocalDateTime.parse(node.path("sendtArbeidsgiver").asText()) + sendtArbeidsgiver = LocalDateTime.parse( + node.path("sendtArbeidsgiver").asText() + ) ) + Meldingstype.INNTEKTSMELDING -> HendelseDTO.inntektsmelding( id = node.path("@id").asText(), eksternDokumentId = node.path("inntektsmeldingId").asText(), mottattDato = LocalDateTime.parse(node.path("@opprettet").asText()), beregnetInntekt = node.path("beregnetInntekt").asDouble() ) + Meldingstype.SYKEPENGEGRUNNLAG_FOR_ARBEIDSGIVER -> HendelseDTO.inntektFraAOrdningen( id = node.path("@id").asText(), mottattDato = LocalDateTime.parse(node.path("@opprettet").asText()) diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/PersonDao.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/PersonDao.kt index fb61a79a3c..200b66b0e3 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/PersonDao.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/PersonDao.kt @@ -7,11 +7,19 @@ import kotliquery.queryOf import kotliquery.sessionOf import no.nav.helse.serde.SerialisertPerson -internal class PersonDao(private val dataSource: () -> DataSource, private val meterRegistry: MeterRegistry) { +internal class PersonDao( + private val dataSource: () -> DataSource, + private val meterRegistry: MeterRegistry +) { fun hentPersonFraFnr(fødselsnummer: Long) = - hentPerson(queryOf("SELECT data FROM person WHERE id = (SELECT person_id FROM person_alias WHERE fnr=:fnr);", mapOf( - "fnr" to fødselsnummer - ))) + hentPerson( + queryOf( + "SELECT data FROM person WHERE id = (SELECT person_id FROM person_alias WHERE fnr=:fnr);", + mapOf( + "fnr" to fødselsnummer + ) + ) + ) private fun hentPerson(query: Query) = sessionOf(dataSource()) diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/PostgresProbe.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/PostgresProbe.kt index e3261da0e4..2920607248 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/PostgresProbe.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dao/PostgresProbe.kt @@ -1,6 +1,6 @@ package no.nav.helse.spleis.dao -import io.micrometer.core.instrument.Counter.* +import io.micrometer.core.instrument.Counter.builder import io.micrometer.core.instrument.MeterRegistry object PostgresProbe { diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dto/HendelseDTO.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dto/HendelseDTO.kt index f53d9ff146..acbf7c9aad 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dto/HendelseDTO.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/dto/HendelseDTO.kt @@ -35,7 +35,13 @@ data class HendelseDTO( ) { companion object { - fun nySøknad(id: String, eksternDokumentId: String, fom: LocalDate, tom: LocalDate, rapportertdato: LocalDateTime) = HendelseDTO( + fun nySøknad( + id: String, + eksternDokumentId: String, + fom: LocalDate, + tom: LocalDate, + rapportertdato: LocalDateTime + ) = HendelseDTO( type = HendelsetypeDto.NY_SØKNAD, id = id, eksternDokumentId = eksternDokumentId, @@ -43,7 +49,14 @@ data class HendelseDTO( tom = tom, rapportertdato = rapportertdato, ) - fun nyFrilanssøknad(id: String, eksternDokumentId: String, fom: LocalDate, tom: LocalDate, rapportertdato: LocalDateTime) = HendelseDTO( + + fun nyFrilanssøknad( + id: String, + eksternDokumentId: String, + fom: LocalDate, + tom: LocalDate, + rapportertdato: LocalDateTime + ) = HendelseDTO( type = HendelsetypeDto.NY_SØKNAD_FRILANS, id = id, eksternDokumentId = eksternDokumentId, @@ -51,7 +64,14 @@ data class HendelseDTO( tom = tom, rapportertdato = rapportertdato, ) - fun nySelvstendigsøknad(id: String, eksternDokumentId: String, fom: LocalDate, tom: LocalDate, rapportertdato: LocalDateTime) = HendelseDTO( + + fun nySelvstendigsøknad( + id: String, + eksternDokumentId: String, + fom: LocalDate, + tom: LocalDate, + rapportertdato: LocalDateTime + ) = HendelseDTO( type = HendelsetypeDto.NY_SØKNAD_SELVSTENDIG, id = id, eksternDokumentId = eksternDokumentId, @@ -59,7 +79,14 @@ data class HendelseDTO( tom = tom, rapportertdato = rapportertdato, ) - fun nyArbeidsledigsøknad(id: String, eksternDokumentId: String, fom: LocalDate, tom: LocalDate, rapportertdato: LocalDateTime) = HendelseDTO( + + fun nyArbeidsledigsøknad( + id: String, + eksternDokumentId: String, + fom: LocalDate, + tom: LocalDate, + rapportertdato: LocalDateTime + ) = HendelseDTO( type = HendelsetypeDto.NY_SØKNAD_ARBEIDSLEDIG, id = id, eksternDokumentId = eksternDokumentId, @@ -67,7 +94,15 @@ data class HendelseDTO( tom = tom, rapportertdato = rapportertdato, ) - fun sendtSøknadNav(id: String, eksternDokumentId: String, fom: LocalDate, tom: LocalDate, rapportertdato: LocalDateTime, sendtNav: LocalDateTime) = HendelseDTO( + + fun sendtSøknadNav( + id: String, + eksternDokumentId: String, + fom: LocalDate, + tom: LocalDate, + rapportertdato: LocalDateTime, + sendtNav: LocalDateTime + ) = HendelseDTO( type = HendelsetypeDto.SENDT_SØKNAD_NAV, id = id, eksternDokumentId = eksternDokumentId, @@ -76,7 +111,15 @@ data class HendelseDTO( rapportertdato = rapportertdato, sendtNav = sendtNav, ) - fun sendtSøknadFrilans(id: String, eksternDokumentId: String, fom: LocalDate, tom: LocalDate, rapportertdato: LocalDateTime, sendtNav: LocalDateTime) = HendelseDTO( + + fun sendtSøknadFrilans( + id: String, + eksternDokumentId: String, + fom: LocalDate, + tom: LocalDate, + rapportertdato: LocalDateTime, + sendtNav: LocalDateTime + ) = HendelseDTO( type = HendelsetypeDto.SENDT_SØKNAD_FRILANS, id = id, eksternDokumentId = eksternDokumentId, @@ -85,7 +128,15 @@ data class HendelseDTO( rapportertdato = rapportertdato, sendtNav = sendtNav, ) - fun sendtSøknadSelvstendig(id: String, eksternDokumentId: String, fom: LocalDate, tom: LocalDate, rapportertdato: LocalDateTime, sendtNav: LocalDateTime) = HendelseDTO( + + fun sendtSøknadSelvstendig( + id: String, + eksternDokumentId: String, + fom: LocalDate, + tom: LocalDate, + rapportertdato: LocalDateTime, + sendtNav: LocalDateTime + ) = HendelseDTO( type = HendelsetypeDto.SENDT_SØKNAD_SELVSTENDIG, id = id, eksternDokumentId = eksternDokumentId, @@ -94,7 +145,15 @@ data class HendelseDTO( rapportertdato = rapportertdato, sendtNav = sendtNav, ) - fun sendtSøknadArbeidsledig(id: String, eksternDokumentId: String, fom: LocalDate, tom: LocalDate, rapportertdato: LocalDateTime, sendtNav: LocalDateTime) = HendelseDTO( + + fun sendtSøknadArbeidsledig( + id: String, + eksternDokumentId: String, + fom: LocalDate, + tom: LocalDate, + rapportertdato: LocalDateTime, + sendtNav: LocalDateTime + ) = HendelseDTO( type = HendelsetypeDto.SENDT_SØKNAD_ARBEIDSLEDIG, id = id, eksternDokumentId = eksternDokumentId, @@ -103,7 +162,15 @@ data class HendelseDTO( rapportertdato = rapportertdato, sendtNav = sendtNav, ) - fun sendtSøknadArbeidsgiver(id: String, eksternDokumentId: String, fom: LocalDate, tom: LocalDate, rapportertdato: LocalDateTime, sendtArbeidsgiver: LocalDateTime) = HendelseDTO( + + fun sendtSøknadArbeidsgiver( + id: String, + eksternDokumentId: String, + fom: LocalDate, + tom: LocalDate, + rapportertdato: LocalDateTime, + sendtArbeidsgiver: LocalDateTime + ) = HendelseDTO( type = HendelsetypeDto.SENDT_SØKNAD_ARBEIDSGIVER, id = id, eksternDokumentId = eksternDokumentId, @@ -112,13 +179,20 @@ data class HendelseDTO( rapportertdato = rapportertdato, sendtArbeidsgiver = sendtArbeidsgiver, ) - fun inntektsmelding(id: String, eksternDokumentId: String, mottattDato: LocalDateTime, beregnetInntekt: Double) = HendelseDTO( + + fun inntektsmelding( + id: String, + eksternDokumentId: String, + mottattDato: LocalDateTime, + beregnetInntekt: Double + ) = HendelseDTO( type = HendelsetypeDto.INNTEKTSMELDING, id = id, eksternDokumentId = eksternDokumentId, mottattDato = mottattDato, beregnetInntekt = beregnetInntekt ) + fun inntektFraAOrdningen(id: String, mottattDato: LocalDateTime) = HendelseDTO( type = HendelsetypeDto.INNTEKT_FRA_AORDNINGEN, id = id, diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/Api.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/Api.kt index 5acff52d8c..ca176a638e 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/Api.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/Api.kt @@ -4,25 +4,35 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties import com.fasterxml.jackson.databind.jsontype.NamedType import com.github.navikt.tbd_libs.result_object.getOrThrow import com.github.navikt.tbd_libs.speed.SpeedClient -import io.ktor.http.* import io.ktor.http.ContentType.Application.Json -import io.ktor.server.application.* -import io.ktor.server.auth.* -import io.ktor.server.auth.jwt.* -import io.ktor.server.plugins.callid.* -import io.ktor.server.request.* -import io.ktor.server.response.* -import io.ktor.server.routing.* +import io.ktor.http.HttpStatusCode +import io.ktor.server.application.Application +import io.ktor.server.auth.authenticate +import io.ktor.server.auth.jwt.JWTPrincipal +import io.ktor.server.auth.principal +import io.ktor.server.plugins.callid.callId +import io.ktor.server.request.receiveText +import io.ktor.server.response.respond +import io.ktor.server.response.respondText +import io.ktor.server.routing.post +import io.ktor.server.routing.routing import io.micrometer.core.instrument.MeterRegistry +import java.util.UUID import net.logstash.logback.argument.StructuredArguments.keyValue import no.nav.helse.spleis.SpekematClient import no.nav.helse.spleis.dao.HendelseDao import no.nav.helse.spleis.dao.PersonDao -import no.nav.helse.spleis.graphql.dto.* +import no.nav.helse.spleis.graphql.dto.GraphQLArbeidsgiver +import no.nav.helse.spleis.graphql.dto.GraphQLBeregnetPeriode +import no.nav.helse.spleis.graphql.dto.GraphQLGhostPeriode +import no.nav.helse.spleis.graphql.dto.GraphQLInfotrygdVilkarsgrunnlag +import no.nav.helse.spleis.graphql.dto.GraphQLPerson +import no.nav.helse.spleis.graphql.dto.GraphQLSpleisVilkarsgrunnlag +import no.nav.helse.spleis.graphql.dto.GraphQLUberegnetPeriode +import no.nav.helse.spleis.graphql.dto.GraphQLUtbetaling import no.nav.helse.spleis.nyObjectmapper import no.nav.helse.spleis.objectMapper import org.slf4j.LoggerFactory -import java.util.* internal object Api { private val logger = LoggerFactory.getLogger(Api::class.java) @@ -30,10 +40,15 @@ internal object Api { private val schema = Api::class.java.getResource("/graphql-schema.json")!!.readText() private val fraQueryRegex = "person\\(fnr:\"(\\d+)\"\\)".toRegex() private val sifferRegex = "\\d+".toRegex() - private val String.fnr get() = objectMapper.readTree(this.replace(" ", "").replace("\n", "")).let { body -> - val fraVariables = body.path("variables").fields().asSequence().singleOrNull { (_, value) -> value.asText().matches(sifferRegex) }?.value?.asText() - fraVariables ?: fraQueryRegex.find(body.path("query").asText())?.groupValues?.lastOrNull() - } + private val String.fnr + get() = objectMapper.readTree(this.replace(" ", "").replace("\n", "")).let { body -> + val fraVariables = body.path("variables").fields().asSequence() + .singleOrNull { (_, value) -> value.asText().matches(sifferRegex) }?.value?.asText() + fraVariables ?: fraQueryRegex.find( + body.path("query").asText() + )?.groupValues?.lastOrNull() + } + private data class Response(val data: Data) private data class Data(val person: GraphQLPerson?) @@ -42,37 +57,71 @@ internal object Api { it.registerSubtypes(NamedType(GraphQLUberegnetPeriode::class.java)) it.registerSubtypes(NamedType(GraphQLInfotrygdVilkarsgrunnlag::class.java)) it.registerSubtypes(NamedType(GraphQLSpleisVilkarsgrunnlag::class.java)) - it.setMixIns(mapOf( - GraphQLArbeidsgiver::class.java to GraphQLArbeidsgiverMixin::class.java, - GraphQLUtbetaling::class.java to GraphQLUtbetalingMixin::class.java, - GraphQLGhostPeriode::class.java to GraphQLGhostPeriodeMixin::class.java - )) + it.setMixIns( + mapOf( + GraphQLArbeidsgiver::class.java to GraphQLArbeidsgiverMixin::class.java, + GraphQLUtbetaling::class.java to GraphQLUtbetalingMixin::class.java, + GraphQLGhostPeriode::class.java to GraphQLGhostPeriodeMixin::class.java + ) + ) } - internal fun Application.installGraphQLApi(speedClient: SpeedClient, spekematClient: SpekematClient, hendelseDao: HendelseDao, personDao: PersonDao, meterRegistry: MeterRegistry) { + internal fun Application.installGraphQLApi( + speedClient: SpeedClient, + spekematClient: SpekematClient, + hendelseDao: HendelseDao, + personDao: PersonDao, + meterRegistry: MeterRegistry + ) { routing { authenticate(optional = true) { post("/graphql") { val ident = call.receiveText().fnr ?: return@post call.respondText(schema, Json) - call.principal() ?: return@post call.respond(HttpStatusCode.Unauthorized) + call.principal() + ?: return@post call.respond(HttpStatusCode.Unauthorized) try { val callId = call.callId ?: UUID.randomUUID().toString() - val (_, aktørId) = speedClient.hentFødselsnummerOgAktørId(ident, callId).getOrThrow() + val (_, aktørId) = speedClient.hentFødselsnummerOgAktørId(ident, callId) + .getOrThrow() - val person = personResolver(spekematClient, personDao, hendelseDao, ident, aktørId, callId, meterRegistry) - call.respondText(graphQLV2ObjectMapper.writeValueAsString(Response(Data(person))), Json) + val person = personResolver( + spekematClient, + personDao, + hendelseDao, + ident, + aktørId, + callId, + meterRegistry + ) + call.respondText( + graphQLV2ObjectMapper.writeValueAsString( + Response( + Data( + person + ) + ) + ), Json + ) } catch (err: Exception) { logger.error("callId=${call.callId} Kunne ikke lage JSON for Spesialist, sjekk tjenestekall-indeksen!") - sikkerlogger.error("callId=${call.callId} {} Kunne ikke lage JSON for Spesialist: ${err.javaClass.simpleName} - ${err.message}", keyValue("fødselsnummer", ident), err) - call.respondText(graphQLV2ObjectMapper.writeValueAsString(mapOf( - "errors" to listOf( + sikkerlogger.error( + "callId=${call.callId} {} Kunne ikke lage JSON for Spesialist: ${err.javaClass.simpleName} - ${err.message}", + keyValue("fødselsnummer", ident), + err + ) + call.respondText( + graphQLV2ObjectMapper.writeValueAsString( mapOf( - "message" to "Det har skjedd en feil 😵‍💫 Det er logget, og vi er kanskje på saken! 🫡", - "locations" to emptyList(), - "path" to emptyList() + "errors" to listOf( + mapOf( + "message" to "Det har skjedd en feil 😵‍💫 Det er logget, og vi er kanskje på saken! 🫡", + "locations" to emptyList(), + "path" to emptyList() + ) + ) ) ) - ))) + ) } } } @@ -81,8 +130,10 @@ internal object Api { @JsonIgnoreProperties("id") private class GraphQLArbeidsgiverMixin + @JsonIgnoreProperties("status", "type") private class GraphQLUtbetalingMixin + @JsonIgnoreProperties("organisasjonsnummer") private class GraphQLGhostPeriodeMixin } diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/Mapping.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/Mapping.kt index e23710eccb..4554ed6175 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/Mapping.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/Mapping.kt @@ -1,5 +1,6 @@ package no.nav.helse.spleis.graphql +import no.nav.helse.spleis.graphql.dto.Utbetalingtype as GraphQLUtbetalingtype import java.time.LocalDate import java.util.UUID import no.nav.helse.person.UtbetalingInntektskilde @@ -44,7 +45,6 @@ import no.nav.helse.spleis.graphql.dto.GraphQLUtbetaling import no.nav.helse.spleis.graphql.dto.GraphQLUtbetalingsdagType import no.nav.helse.spleis.graphql.dto.GraphQLUtbetalingsinfo import no.nav.helse.spleis.graphql.dto.GraphQLUtbetalingstatus -import no.nav.helse.spleis.graphql.dto.Utbetalingtype as GraphQLUtbetalingtype import no.nav.helse.spleis.graphql.dto.GraphQLVurdering import no.nav.helse.spleis.speil.builders.SykepengegrunnlagsgrenseDTO import no.nav.helse.spleis.speil.dto.AnnullertPeriode @@ -238,6 +238,7 @@ private fun mapHendelse(hendelse: HendelseDTO) = when (hendelse.type) { tom = hendelse.tom!!, rapportertDato = hendelse.rapportertdato!! ) + HendelsetypeDto.SENDT_SØKNAD_NAV -> GraphQLSoknadNav( id = hendelse.id, eksternDokumentId = hendelse.eksternDokumentId, @@ -246,6 +247,7 @@ private fun mapHendelse(hendelse: HendelseDTO) = when (hendelse.type) { rapportertDato = hendelse.rapportertdato!!, sendtNav = hendelse.sendtNav!! ) + HendelsetypeDto.SENDT_SØKNAD_FRILANS -> GraphQLSoknadFrilans( id = hendelse.id, eksternDokumentId = hendelse.eksternDokumentId, @@ -254,6 +256,7 @@ private fun mapHendelse(hendelse: HendelseDTO) = when (hendelse.type) { rapportertDato = hendelse.rapportertdato!!, sendtNav = hendelse.sendtNav!! ) + HendelsetypeDto.SENDT_SØKNAD_SELVSTENDIG -> GraphQLSoknadSelvstendig( id = hendelse.id, eksternDokumentId = hendelse.eksternDokumentId, @@ -262,6 +265,7 @@ private fun mapHendelse(hendelse: HendelseDTO) = when (hendelse.type) { rapportertDato = hendelse.rapportertdato!!, sendtNav = hendelse.sendtNav!! ) + HendelsetypeDto.SENDT_SØKNAD_ARBEIDSLEDIG -> GraphQLSoknadArbeidsledig( id = hendelse.id, eksternDokumentId = hendelse.eksternDokumentId, @@ -270,6 +274,7 @@ private fun mapHendelse(hendelse: HendelseDTO) = when (hendelse.type) { rapportertDato = hendelse.rapportertdato!!, sendtNav = hendelse.sendtNav!! ) + HendelsetypeDto.SENDT_SØKNAD_ARBEIDSGIVER -> GraphQLSoknadArbeidsgiver( id = hendelse.id, eksternDokumentId = hendelse.eksternDokumentId, @@ -278,17 +283,20 @@ private fun mapHendelse(hendelse: HendelseDTO) = when (hendelse.type) { rapportertDato = hendelse.rapportertdato!!, sendtArbeidsgiver = hendelse.sendtArbeidsgiver!! ) + HendelsetypeDto.INNTEKTSMELDING -> GraphQLInntektsmelding( id = hendelse.id, eksternDokumentId = hendelse.eksternDokumentId, mottattDato = hendelse.mottattDato!!, beregnetInntekt = hendelse.beregnetInntekt!! ) + HendelsetypeDto.INNTEKT_FRA_AORDNINGEN -> GraphQLInntektFraAOrdningen( id = hendelse.id, eksternDokumentId = hendelse.eksternDokumentId, mottattDato = hendelse.mottattDato!! ) + else -> null } @@ -342,6 +350,7 @@ internal fun mapTidslinjeperiode(periode: SpeilTidslinjeperiode, hendelser: List hendelser = periode.hendelser.tilHendelseDTO(hendelser) ) } + private fun mapBeregnetPeriode(periode: BeregnetPeriode, hendelser: List) = GraphQLBeregnetPeriode( behandlingId = periode.behandlingId, @@ -365,6 +374,7 @@ private fun mapBeregnetPeriode(periode: BeregnetPeriode, hendelser: List) = GraphQLBeregnetPeriode( behandlingId = periode.behandlingId, @@ -400,6 +410,7 @@ private fun mapAnnullertPeriode(periode: AnnullertPeriode, hendelser: List.tilHendelseDTO(hendelser: List): List { return this .mapNotNull { dokumentId -> hendelser.firstOrNull { hendelseDTO -> hendelseDTO.id == dokumentId.toString() } } @@ -423,17 +434,18 @@ private fun mapTilstand(tilstand: Periodetilstand) = when (tilstand) { Periodetilstand.AvventerInntektsopplysninger -> GraphQLPeriodetilstand.AvventerInntektsopplysninger } -private fun mapArbeidsgiverRefusjon(arbeidsgiverrefusjon: Arbeidsgiverrefusjon) = GraphQLArbeidsgiverrefusjon( - arbeidsgiver = arbeidsgiverrefusjon.arbeidsgiver, - refusjonsopplysninger = arbeidsgiverrefusjon.refusjonsopplysninger.map { - GraphQLRefusjonselement( - fom = it.fom, - tom = it.tom, - belop = it.beløp, - meldingsreferanseId = it.meldingsreferanseId - ) - } -) +private fun mapArbeidsgiverRefusjon(arbeidsgiverrefusjon: Arbeidsgiverrefusjon) = + GraphQLArbeidsgiverrefusjon( + arbeidsgiver = arbeidsgiverrefusjon.arbeidsgiver, + refusjonsopplysninger = arbeidsgiverrefusjon.refusjonsopplysninger.map { + GraphQLRefusjonselement( + fom = it.fom, + tom = it.tom, + belop = it.beløp, + meldingsreferanseId = it.meldingsreferanseId + ) + } + ) private fun mapInntekt(inntekt: Arbeidsgiverinntekt) = GraphQLArbeidsgiverinntekt( arbeidsgiver = inntekt.organisasjonsnummer, @@ -469,33 +481,47 @@ private fun Inntekt.tilGraphQLOmregnetArsinntekt() = GraphQLOmregnetArsinntekt( ) internal fun mapVilkårsgrunnlag(id: UUID, vilkårsgrunnlag: Vilkårsgrunnlag) = - when (vilkårsgrunnlag) { - is SpleisVilkårsgrunnlag -> GraphQLSpleisVilkarsgrunnlag( - id = id, - skjaeringstidspunkt = vilkårsgrunnlag.skjæringstidspunkt, - omregnetArsinntekt = vilkårsgrunnlag.omregnetÅrsinntekt, - sykepengegrunnlag = vilkårsgrunnlag.sykepengegrunnlag, - inntekter = vilkårsgrunnlag.inntekter.map { inntekt -> mapInntekt(inntekt) }, - grunnbelop = vilkårsgrunnlag.grunnbeløp, - sykepengegrunnlagsgrense = mapSykepengergrunnlagsgrense(vilkårsgrunnlag.sykepengegrunnlagsgrense), - antallOpptjeningsdagerErMinst = vilkårsgrunnlag.antallOpptjeningsdagerErMinst, - opptjeningFra = vilkårsgrunnlag.opptjeningFra, - oppfyllerKravOmMinstelonn = vilkårsgrunnlag.oppfyllerKravOmMinstelønn, - oppfyllerKravOmOpptjening = vilkårsgrunnlag.oppfyllerKravOmOpptjening, - oppfyllerKravOmMedlemskap = vilkårsgrunnlag.oppfyllerKravOmMedlemskap, - arbeidsgiverrefusjoner = vilkårsgrunnlag.arbeidsgiverrefusjoner.map{ refusjon -> mapArbeidsgiverRefusjon(refusjon)} - ) - is InfotrygdVilkårsgrunnlag -> GraphQLInfotrygdVilkarsgrunnlag( - id = id, - skjaeringstidspunkt = vilkårsgrunnlag.skjæringstidspunkt, - omregnetArsinntekt = vilkårsgrunnlag.beregningsgrunnlag, // For infotrygd har vi ikke noe konsept for hvorvidt en inntekt er skjønnsfastsatt - sykepengegrunnlag = vilkårsgrunnlag.sykepengegrunnlag, - inntekter = vilkårsgrunnlag.inntekter.map { inntekt -> mapInntekt(inntekt) }, - arbeidsgiverrefusjoner = vilkårsgrunnlag.arbeidsgiverrefusjoner.map{ refusjon -> mapArbeidsgiverRefusjon(refusjon)} - ) - else -> throw IllegalStateException("har ikke mapping for vilkårsgrunnlag ${vilkårsgrunnlag::class.simpleName ?: "[ukjent klassenavn]"}") - } + when (vilkårsgrunnlag) { + is SpleisVilkårsgrunnlag -> GraphQLSpleisVilkarsgrunnlag( + id = id, + skjaeringstidspunkt = vilkårsgrunnlag.skjæringstidspunkt, + omregnetArsinntekt = vilkårsgrunnlag.omregnetÅrsinntekt, + sykepengegrunnlag = vilkårsgrunnlag.sykepengegrunnlag, + inntekter = vilkårsgrunnlag.inntekter.map { inntekt -> mapInntekt(inntekt) }, + grunnbelop = vilkårsgrunnlag.grunnbeløp, + sykepengegrunnlagsgrense = mapSykepengergrunnlagsgrense(vilkårsgrunnlag.sykepengegrunnlagsgrense), + antallOpptjeningsdagerErMinst = vilkårsgrunnlag.antallOpptjeningsdagerErMinst, + opptjeningFra = vilkårsgrunnlag.opptjeningFra, + oppfyllerKravOmMinstelonn = vilkårsgrunnlag.oppfyllerKravOmMinstelønn, + oppfyllerKravOmOpptjening = vilkårsgrunnlag.oppfyllerKravOmOpptjening, + oppfyllerKravOmMedlemskap = vilkårsgrunnlag.oppfyllerKravOmMedlemskap, + arbeidsgiverrefusjoner = vilkårsgrunnlag.arbeidsgiverrefusjoner.map { refusjon -> + mapArbeidsgiverRefusjon( + refusjon + ) + } + ) + + is InfotrygdVilkårsgrunnlag -> GraphQLInfotrygdVilkarsgrunnlag( + id = id, + skjaeringstidspunkt = vilkårsgrunnlag.skjæringstidspunkt, + omregnetArsinntekt = vilkårsgrunnlag.beregningsgrunnlag, // For infotrygd har vi ikke noe konsept for hvorvidt en inntekt er skjønnsfastsatt + sykepengegrunnlag = vilkårsgrunnlag.sykepengegrunnlag, + inntekter = vilkårsgrunnlag.inntekter.map { inntekt -> mapInntekt(inntekt) }, + arbeidsgiverrefusjoner = vilkårsgrunnlag.arbeidsgiverrefusjoner.map { refusjon -> + mapArbeidsgiverRefusjon( + refusjon + ) + } + ) + + else -> throw IllegalStateException("har ikke mapping for vilkårsgrunnlag ${vilkårsgrunnlag::class.simpleName ?: "[ukjent klassenavn]"}") + } private fun mapSykepengergrunnlagsgrense(sykepengegrunnlagsgrenseDTO: SykepengegrunnlagsgrenseDTO) = - GraphQLSykepengegrunnlagsgrense(sykepengegrunnlagsgrenseDTO.grunnbeløp, sykepengegrunnlagsgrenseDTO.grense, sykepengegrunnlagsgrenseDTO.virkningstidspunkt) \ No newline at end of file + GraphQLSykepengegrunnlagsgrense( + sykepengegrunnlagsgrenseDTO.grunnbeløp, + sykepengegrunnlagsgrenseDTO.grense, + sykepengegrunnlagsgrenseDTO.virkningstidspunkt + ) diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/PersonQuery.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/PersonQuery.kt index e9a8545a43..50fce1cc09 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/PersonQuery.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/graphql/PersonQuery.kt @@ -18,11 +18,16 @@ import no.nav.helse.spleis.speil.dto.PersonDTO import no.nav.helse.spleis.speil.serializePersonForSpeil private object ApiMetrikker { - fun målDatabase(meterRegistry: MeterRegistry, block: () -> SerialisertPerson?): SerialisertPerson? = mål(meterRegistry, "hent_person", block) + fun målDatabase( + meterRegistry: MeterRegistry, + block: () -> SerialisertPerson? + ): SerialisertPerson? = mål(meterRegistry, "hent_person", block) - fun målDeserialisering(meterRegistry: MeterRegistry, block: () -> Person): Person = mål(meterRegistry, "deserialiser_person", block) + fun målDeserialisering(meterRegistry: MeterRegistry, block: () -> Person): Person = + mål(meterRegistry, "deserialiser_person", block) - fun målByggSnapshot(meterRegistry: MeterRegistry, block: () -> PersonDTO): PersonDTO = mål(meterRegistry, "bygg_snapshot", block) + fun målByggSnapshot(meterRegistry: MeterRegistry, block: () -> PersonDTO): PersonDTO = + mål(meterRegistry, "bygg_snapshot", block) private fun mål(meterRegistry: MeterRegistry, operasjon: String, block: () -> R): R { val timer = Timer.start(meterRegistry) @@ -37,19 +42,47 @@ private object ApiMetrikker { } } -internal fun personResolver(spekematClient: SpekematClient, personDao: PersonDao, hendelseDao: HendelseDao, fnr: String, aktørId: String, callId: String, meterRegistry: MeterRegistry): GraphQLPerson? { - return ApiMetrikker.målDatabase(meterRegistry) { personDao.hentPersonFraFnr(fnr.toLong()) }?.let { serialisertPerson -> - val spekemat = spekematClient.hentSpekemat(fnr, callId) - ApiMetrikker.målDeserialisering(meterRegistry) { - val dto = serialisertPerson.tilPersonDto() - Person.gjenopprett(EmptyLog, dto) +internal fun personResolver( + spekematClient: SpekematClient, + personDao: PersonDao, + hendelseDao: HendelseDao, + fnr: String, + aktørId: String, + callId: String, + meterRegistry: MeterRegistry +): GraphQLPerson? { + return ApiMetrikker.målDatabase(meterRegistry) { personDao.hentPersonFraFnr(fnr.toLong()) } + ?.let { serialisertPerson -> + val spekemat = spekematClient.hentSpekemat(fnr, callId) + ApiMetrikker.målDeserialisering(meterRegistry) { + val dto = serialisertPerson.tilPersonDto() + Person.gjenopprett(EmptyLog, dto) + } + .let { + ApiMetrikker.målByggSnapshot(meterRegistry) { + serializePersonForSpeil( + it, + spekemat + ) + } + } + .let { person -> + mapTilDto( + person, + fnr, + aktørId, + hendelseDao.hentHendelser(fnr.toLong()) + ) + } } - .let { ApiMetrikker.målByggSnapshot(meterRegistry) { serializePersonForSpeil(it, spekemat) } } - .let { person -> mapTilDto(person, fnr, aktørId, hendelseDao.hentHendelser(fnr.toLong())) } - } } -private fun mapTilDto(person: PersonDTO, fnr: String, aktørId: String, hendelser: List) = +private fun mapTilDto( + person: PersonDTO, + fnr: String, + aktørId: String, + hendelser: List +) = GraphQLPerson( aktorId = aktørId, fodselsnummer = fnr, @@ -60,7 +93,12 @@ private fun mapTilDto(person: PersonDTO, fnr: String, aktørId: String, hendelse generasjoner = arbeidsgiver.generasjoner.map { generasjon -> GraphQLGenerasjon( id = generasjon.id, - perioder = generasjon.perioder.map { periode -> mapTidslinjeperiode(periode, hendelser) }, + perioder = generasjon.perioder.map { periode -> + mapTidslinjeperiode( + periode, + hendelser + ) + }, kildeTilGenerasjon = generasjon.kildeTilGenerasjon ) }, @@ -90,5 +128,10 @@ private fun mapTilDto(person: PersonDTO, fnr: String, aktørId: String, hendelse }, dodsdato = person.dødsdato, versjon = person.versjon, - vilkarsgrunnlag = person.vilkårsgrunnlag.map { (id, vilkårsgrunnlag) -> mapVilkårsgrunnlag(id, vilkårsgrunnlag) } - ) \ No newline at end of file + vilkarsgrunnlag = person.vilkårsgrunnlag.map { (id, vilkårsgrunnlag) -> + mapVilkårsgrunnlag( + id, + vilkårsgrunnlag + ) + } + ) diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/ArbeidsgiverBuilder.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/ArbeidsgiverBuilder.kt index d930330ce1..5c6f9cc135 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/ArbeidsgiverBuilder.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/ArbeidsgiverBuilder.kt @@ -10,11 +10,22 @@ internal class ArbeidsgiverBuilder( private val pølsepakke: SpekematDTO.PølsepakkeDTO? ) { - internal fun build(alder: AlderDTO, vilkårsgrunnlagHistorikk: IVilkårsgrunnlagHistorikk): ArbeidsgiverDTO { + internal fun build( + alder: AlderDTO, + vilkårsgrunnlagHistorikk: IVilkårsgrunnlagHistorikk + ): ArbeidsgiverDTO { return ArbeidsgiverDTO( id = arbeidsgiverUtDto.id, organisasjonsnummer = arbeidsgiverUtDto.organisasjonsnummer, - generasjoner = pølsepakke?.let { SpeilGenerasjonerBuilder(arbeidsgiverUtDto.organisasjonsnummer, alder, arbeidsgiverUtDto, vilkårsgrunnlagHistorikk, pølsepakke).build() } ?: emptyList() + generasjoner = pølsepakke?.let { + SpeilGenerasjonerBuilder( + arbeidsgiverUtDto.organisasjonsnummer, + alder, + arbeidsgiverUtDto, + vilkårsgrunnlagHistorikk, + pølsepakke + ).build() + } ?: emptyList() ) } @@ -23,9 +34,10 @@ internal class ArbeidsgiverBuilder( // rader hvor alle pølser er kopiert fra forrige rad - eller blir kopiert til neste rad - kan i praksis fjernes // det betyr at vi bare behøver vurdere pølsepakker med minst tre rader siden den vi skal vurdere én rad mot to andre if (size <= 2) return this - val pølseFinnesIRad = { rad: SpekematDTO.PølsepakkeDTO.PølseradDTO, pølse: SpekematDTO.PølsepakkeDTO.PølseradDTO.PølseDTO -> - rad.pølser.any { it.behandlingId == pølse.behandlingId } - } + val pølseFinnesIRad = + { rad: SpekematDTO.PølsepakkeDTO.PølseradDTO, pølse: SpekematDTO.PølsepakkeDTO.PølseradDTO.PølseDTO -> + rad.pølser.any { it.behandlingId == pølse.behandlingId } + } val iterator = this.asReversed().iterator() var forrige = iterator.next() diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/Bindevev.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/Bindevev.kt index fca55d772b..1a02816a11 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/Bindevev.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/Bindevev.kt @@ -64,7 +64,8 @@ internal data class IOmregnetÅrsinntekt( kilde = kilde.toDTO(), beløp = beløp, månedsbeløp = månedsbeløp, - inntekterFraAOrdningen = inntekterFraAOrdningen?.sortedBy { it.måned }?.map { it.toDTO() } + inntekterFraAOrdningen = inntekterFraAOrdningen?.sortedBy { it.måned } + ?.map { it.toDTO() } ) } } diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/PersonBuilder.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/PersonBuilder.kt index 4024ed1a73..39636e2f0a 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/PersonBuilder.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/PersonBuilder.kt @@ -13,15 +13,22 @@ internal class PersonBuilder( internal fun build(): PersonDTO { val alder = AlderDTO(personUtDto.alder.fødselsdato, personUtDto.alder.dødsdato) - val vilkårsgrunnlagHistorikk = VilkårsgrunnlagBuilder(personUtDto.vilkårsgrunnlagHistorikk).build() + val vilkårsgrunnlagHistorikk = + VilkårsgrunnlagBuilder(personUtDto.vilkårsgrunnlagHistorikk).build() val arbeidsgivere = personUtDto.arbeidsgivere .map { arbeidsgiverDto -> - ArbeidsgiverBuilder(arbeidsgiverDto, pølsepakke.pakker.singleOrNull { it.yrkesaktivitetidentifikator == arbeidsgiverDto.organisasjonsnummer }) + ArbeidsgiverBuilder( + arbeidsgiverDto, + pølsepakke.pakker.singleOrNull { it.yrkesaktivitetidentifikator == arbeidsgiverDto.organisasjonsnummer }) } .map { it.build(alder, vilkårsgrunnlagHistorikk) } .let { arbeidsgivere -> - arbeidsgivere.map { it - .medGhostperioderOgNyeInntektsforholdperioder(vilkårsgrunnlagHistorikk, arbeidsgivere) + arbeidsgivere.map { + it + .medGhostperioderOgNyeInntektsforholdperioder( + vilkårsgrunnlagHistorikk, + arbeidsgivere + ) } } .filterNot { it.erTom(vilkårsgrunnlagHistorikk) } diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/SpeilGenerasjonerBuilder.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/SpeilGenerasjonerBuilder.kt index 8b73bbb2ee..b7452ce3e7 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/SpeilGenerasjonerBuilder.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/SpeilGenerasjonerBuilder.kt @@ -52,9 +52,11 @@ internal class SpeilGenerasjonerBuilder( private fun mapPerioder(): List { val aktive = arbeidsgiverUtDto.vedtaksperioder.flatMap { mapVedtaksperiode(it) } - val forkastede = arbeidsgiverUtDto.forkastede.flatMap { mapVedtaksperiode(it.vedtaksperiode) } + val forkastede = + arbeidsgiverUtDto.forkastede.flatMap { mapVedtaksperiode(it.vedtaksperiode) } return aktive + forkastede } + private fun mapVedtaksperiode(vedtaksperiode: VedtaksperiodeUtDto): List { var forrigeGenerasjon: SpeilTidslinjeperiode? = null return vedtaksperiode.behandlinger.behandlinger.mapNotNull { generasjon -> @@ -64,28 +66,54 @@ internal class SpeilGenerasjonerBuilder( BehandlingtilstandDto.BEREGNET_REVURDERING, BehandlingtilstandDto.REVURDERT_VEDTAK_AVVIST, BehandlingtilstandDto.VEDTAK_FATTET, - BehandlingtilstandDto.VEDTAK_IVERKSATT -> mapBeregnetPeriode(vedtaksperiode, generasjon) + BehandlingtilstandDto.VEDTAK_IVERKSATT -> mapBeregnetPeriode( + vedtaksperiode, + generasjon + ) + BehandlingtilstandDto.UBEREGNET, BehandlingtilstandDto.UBEREGNET_OMGJØRING, BehandlingtilstandDto.UBEREGNET_REVURDERING, - BehandlingtilstandDto.AVSLUTTET_UTEN_VEDTAK -> mapUberegnetPeriode(vedtaksperiode, generasjon) - BehandlingtilstandDto.TIL_INFOTRYGD -> mapTilInfotrygdperiode(vedtaksperiode, forrigeGenerasjon, generasjon) - BehandlingtilstandDto.ANNULLERT_PERIODE -> mapAnnullertPeriode(vedtaksperiode, generasjon) + BehandlingtilstandDto.AVSLUTTET_UTEN_VEDTAK -> mapUberegnetPeriode( + vedtaksperiode, + generasjon + ) + + BehandlingtilstandDto.TIL_INFOTRYGD -> mapTilInfotrygdperiode( + vedtaksperiode, + forrigeGenerasjon, + generasjon + ) + + BehandlingtilstandDto.ANNULLERT_PERIODE -> mapAnnullertPeriode( + vedtaksperiode, + generasjon + ) }.also { forrigeGenerasjon = it } } } - private fun mapTilInfotrygdperiode(vedtaksperiode: VedtaksperiodeUtDto, forrigePeriode: SpeilTidslinjeperiode?, generasjon: BehandlingUtDto): UberegnetPeriode? { + private fun mapTilInfotrygdperiode( + vedtaksperiode: VedtaksperiodeUtDto, + forrigePeriode: SpeilTidslinjeperiode?, + generasjon: BehandlingUtDto + ): UberegnetPeriode? { if (forrigePeriode == null) return null // todo: her kan vi mappe perioder som tas ut av Speil return mapUberegnetPeriode(vedtaksperiode, generasjon, Periodetilstand.Annullert) } - private fun mapUberegnetPeriode(vedtaksperiode: VedtaksperiodeUtDto, generasjon: BehandlingUtDto, periodetilstand: Periodetilstand? = null): UberegnetPeriode { + private fun mapUberegnetPeriode( + vedtaksperiode: VedtaksperiodeUtDto, + generasjon: BehandlingUtDto, + periodetilstand: Periodetilstand? = null + ): UberegnetPeriode { val sisteEndring = generasjon.endringer.last() - val sykdomstidslinje = SykdomstidslinjeBuilder(sisteEndring.sykdomstidslinje, sisteEndring.periode).build() - val utbetalingstidslinje = UtbetalingstidslinjeBuilder(sisteEndring.utbetalingstidslinje).build() + val sykdomstidslinje = + SykdomstidslinjeBuilder(sisteEndring.sykdomstidslinje, sisteEndring.periode).build() + val utbetalingstidslinje = + UtbetalingstidslinjeBuilder(sisteEndring.utbetalingstidslinje).build() return UberegnetPeriode( vedtaksperiodeId = vedtaksperiode.id, behandlingId = generasjon.id, @@ -100,29 +128,38 @@ internal class SpeilGenerasjonerBuilder( oppdatert = sisteEndring.tidsstempel, skjæringstidspunkt = vedtaksperiode.skjæringstidspunkt, hendelser = dokumenterTilOgMedDenneGenerasjonen(vedtaksperiode, generasjon), - periodetilstand = periodetilstand ?: generasjon.avsluttet?.let { Periodetilstand.IngenUtbetaling } ?: when (vedtaksperiode.tilstand) { - is VedtaksperiodetilstandDto.AVVENTER_REVURDERING -> Periodetilstand.UtbetaltVenterPåAnnenPeriode - is VedtaksperiodetilstandDto.AVVENTER_BLOKKERENDE_PERIODE -> Periodetilstand.VenterPåAnnenPeriode - - is VedtaksperiodetilstandDto.AVVENTER_HISTORIKK, - is VedtaksperiodetilstandDto.AVVENTER_HISTORIKK_REVURDERING, - is VedtaksperiodetilstandDto.AVVENTER_VILKÅRSPRØVING, - is VedtaksperiodetilstandDto.AVVENTER_VILKÅRSPRØVING_REVURDERING -> Periodetilstand.ForberederGodkjenning - - is VedtaksperiodetilstandDto.AVVENTER_INNTEKTSMELDING -> Periodetilstand.AvventerInntektsopplysninger - is VedtaksperiodetilstandDto.AVVENTER_INFOTRYGDHISTORIKK -> Periodetilstand.ManglerInformasjon - else -> error("Forventer ikke mappingregel for ${vedtaksperiode.tilstand}") - } + periodetilstand = periodetilstand + ?: generasjon.avsluttet?.let { Periodetilstand.IngenUtbetaling } + ?: when (vedtaksperiode.tilstand) { + is VedtaksperiodetilstandDto.AVVENTER_REVURDERING -> Periodetilstand.UtbetaltVenterPåAnnenPeriode + is VedtaksperiodetilstandDto.AVVENTER_BLOKKERENDE_PERIODE -> Periodetilstand.VenterPåAnnenPeriode + + is VedtaksperiodetilstandDto.AVVENTER_HISTORIKK, + is VedtaksperiodetilstandDto.AVVENTER_HISTORIKK_REVURDERING, + is VedtaksperiodetilstandDto.AVVENTER_VILKÅRSPRØVING, + is VedtaksperiodetilstandDto.AVVENTER_VILKÅRSPRØVING_REVURDERING -> Periodetilstand.ForberederGodkjenning + + is VedtaksperiodetilstandDto.AVVENTER_INNTEKTSMELDING -> Periodetilstand.AvventerInntektsopplysninger + is VedtaksperiodetilstandDto.AVVENTER_INFOTRYGDHISTORIKK -> Periodetilstand.ManglerInformasjon + else -> error("Forventer ikke mappingregel for ${vedtaksperiode.tilstand}") + } ) } - private fun mapBeregnetPeriode(vedtaksperiode: VedtaksperiodeUtDto, generasjon: BehandlingUtDto): BeregnetPeriode { + + private fun mapBeregnetPeriode( + vedtaksperiode: VedtaksperiodeUtDto, + generasjon: BehandlingUtDto + ): BeregnetPeriode { val sisteEndring = generasjon.endringer.last() - val utbetaling = utbetalinger.singleOrNull { it.id == sisteEndring.utbetalingId } ?: error("Fant ikke tilhørende utbetaling for vedtaksperiodeId=${vedtaksperiode.id}") - val utbetalingstidslinje = UtbetalingstidslinjeBuilder(sisteEndring.utbetalingstidslinje).build() + val utbetaling = utbetalinger.singleOrNull { it.id == sisteEndring.utbetalingId } + ?: error("Fant ikke tilhørende utbetaling for vedtaksperiodeId=${vedtaksperiode.id}") + val utbetalingstidslinje = + UtbetalingstidslinjeBuilder(sisteEndring.utbetalingstidslinje).build() val skjæringstidspunkt = sisteEndring.skjæringstidspunkt val sisteSykepengedag = utbetalingstidslinje.sisteNavDag()?.dato ?: sisteEndring.periode.tom - val sykdomstidslinje = SykdomstidslinjeBuilder(sisteEndring.sykdomstidslinje, sisteEndring.periode).build() + val sykdomstidslinje = + SykdomstidslinjeBuilder(sisteEndring.sykdomstidslinje, sisteEndring.periode).build() return BeregnetPeriode( vedtaksperiodeId = vedtaksperiode.id, behandlingId = generasjon.id, @@ -136,7 +173,11 @@ internal class SpeilGenerasjonerBuilder( opprettet = vedtaksperiode.opprettet, behandlingOpprettet = generasjon.endringer.first().tidsstempel, oppdatert = vedtaksperiode.oppdatert, - periodetilstand = utledePeriodetilstand(vedtaksperiode.tilstand, utbetaling, utbetalingstidslinje), + periodetilstand = utledePeriodetilstand( + vedtaksperiode.tilstand, + utbetaling, + utbetalingstidslinje + ), skjæringstidspunkt = skjæringstidspunkt, hendelser = dokumenterTilOgMedDenneGenerasjonen(vedtaksperiode, generasjon), beregningId = utbetaling.id, @@ -146,7 +187,10 @@ internal class SpeilGenerasjonerBuilder( ) } - private fun mapAnnullertPeriode(vedtaksperiode: VedtaksperiodeUtDto, generasjon: BehandlingUtDto): AnnullertPeriode { + private fun mapAnnullertPeriode( + vedtaksperiode: VedtaksperiodeUtDto, + generasjon: BehandlingUtDto + ): AnnullertPeriode { val sisteEndring = generasjon.endringer.last() val annulleringen = annulleringer.single { it.id == sisteEndring.utbetalingId } return AnnullertPeriode( @@ -158,7 +202,13 @@ internal class SpeilGenerasjonerBuilder( opprettet = generasjon.endringer.first().tidsstempel, // feltet gir ikke mening for annullert periode: vilkår = BeregnetPeriode.Vilkår( - sykepengedager = BeregnetPeriode.Sykepengedager(sisteEndring.periode.fom, LocalDate.MAX, null, null, false), + sykepengedager = BeregnetPeriode.Sykepengedager( + sisteEndring.periode.fom, + LocalDate.MAX, + null, + null, + false + ), alder = alder.let { val alderSisteSykedag = it.alderPåDato(sisteEndring.periode.tom) BeregnetPeriode.Alder(alderSisteSykedag, alderSisteSykedag < 70) @@ -187,7 +237,10 @@ internal class SpeilGenerasjonerBuilder( ) } - private fun dokumenterTilOgMedDenneGenerasjonen(vedtaksperiode: VedtaksperiodeUtDto, generasjon: BehandlingUtDto): Set { + private fun dokumenterTilOgMedDenneGenerasjonen( + vedtaksperiode: VedtaksperiodeUtDto, + generasjon: BehandlingUtDto + ): Set { return vedtaksperiode.behandlinger.behandlinger .asSequence() .takeWhile { it.id != generasjon.id } @@ -200,23 +253,45 @@ internal class SpeilGenerasjonerBuilder( private fun List.sisteNavDag() = lastOrNull { it.type == UtbetalingstidslinjedagType.NavDag } - private fun utledePeriodetilstand(periodetilstand: VedtaksperiodetilstandDto, utbetalingDTO: Utbetaling, avgrensetUtbetalingstidslinje: List) = + private fun utledePeriodetilstand( + periodetilstand: VedtaksperiodetilstandDto, + utbetalingDTO: Utbetaling, + avgrensetUtbetalingstidslinje: List + ) = when (utbetalingDTO.status) { Utbetalingstatus.IkkeGodkjent -> Periodetilstand.RevurderingFeilet Utbetalingstatus.Utbetalt, Utbetalingstatus.GodkjentUtenUtbetaling -> when { - avgrensetUtbetalingstidslinje.none { it.utbetalingsinfo()?.harUtbetaling() == true } -> Periodetilstand.IngenUtbetaling + avgrensetUtbetalingstidslinje.none { + it.utbetalingsinfo()?.harUtbetaling() == true + } -> Periodetilstand.IngenUtbetaling + else -> Periodetilstand.Utbetalt } + Utbetalingstatus.Ubetalt -> when { - periodetilstand in setOf(VedtaksperiodetilstandDto.AVVENTER_GODKJENNING_REVURDERING, VedtaksperiodetilstandDto.AVVENTER_GODKJENNING) -> Periodetilstand.TilGodkjenning - periodetilstand in setOf(VedtaksperiodetilstandDto.AVVENTER_HISTORIKK_REVURDERING, VedtaksperiodetilstandDto.AVVENTER_SIMULERING, VedtaksperiodetilstandDto.AVVENTER_SIMULERING_REVURDERING) -> Periodetilstand.ForberederGodkjenning + periodetilstand in setOf( + VedtaksperiodetilstandDto.AVVENTER_GODKJENNING_REVURDERING, + VedtaksperiodetilstandDto.AVVENTER_GODKJENNING + ) -> Periodetilstand.TilGodkjenning + + periodetilstand in setOf( + VedtaksperiodetilstandDto.AVVENTER_HISTORIKK_REVURDERING, + VedtaksperiodetilstandDto.AVVENTER_SIMULERING, + VedtaksperiodetilstandDto.AVVENTER_SIMULERING_REVURDERING + ) -> Periodetilstand.ForberederGodkjenning + periodetilstand in setOf(VedtaksperiodetilstandDto.AVVENTER_HISTORIKK) -> Periodetilstand.ForberederGodkjenning periodetilstand == VedtaksperiodetilstandDto.AVVENTER_REVURDERING -> Periodetilstand.UtbetaltVenterPåAnnenPeriode // flere AG; en annen AG har laget utbetaling på vegne av *denne* (revurdering) - periodetilstand in setOf(VedtaksperiodetilstandDto.AVVENTER_BLOKKERENDE_PERIODE, VedtaksperiodetilstandDto.AVVENTER_INNTEKTSMELDING) -> Periodetilstand.VenterPåAnnenPeriode // flere AG; en annen AG har laget utbetaling på vegne av *denne* (førstegangsvurdering) + periodetilstand in setOf( + VedtaksperiodetilstandDto.AVVENTER_BLOKKERENDE_PERIODE, + VedtaksperiodetilstandDto.AVVENTER_INNTEKTSMELDING + ) -> Periodetilstand.VenterPåAnnenPeriode // flere AG; en annen AG har laget utbetaling på vegne av *denne* (førstegangsvurdering) else -> error("har ikke mappingregel for utbetalingstatus ${utbetalingDTO.status} og periodetilstand=$periodetilstand") } + Utbetalingstatus.Godkjent, Utbetalingstatus.Overført -> Periodetilstand.TilUtbetaling + else -> error("har ikke mappingregel for ${utbetalingDTO.status}") } @@ -247,7 +322,12 @@ internal class SpeilGenerasjonerBuilder( private fun mapUtbetalinger(): List { return arbeidsgiverUtDto.utbetalinger - .filter { it.type in setOf(UtbetalingtypeDto.REVURDERING, UtbetalingtypeDto.UTBETALING) } + .filter { + it.type in setOf( + UtbetalingtypeDto.REVURDERING, + UtbetalingtypeDto.UTBETALING + ) + } .mapNotNull { Utbetaling( id = it.id, @@ -383,8 +463,12 @@ internal class SpeilGenerasjonerBuilder( return allePerioder } - private fun mapRadTilSpeilGenerasjon(rad: SpekematDTO.PølsepakkeDTO.PølseradDTO, generasjoner: List): SpeilGenerasjonDTO { - val perioder = rad.pølser.mapNotNull { pølse -> generasjoner.firstOrNull { it.behandlingId == pølse.behandlingId } } + private fun mapRadTilSpeilGenerasjon( + rad: SpekematDTO.PølsepakkeDTO.PølseradDTO, + generasjoner: List + ): SpeilGenerasjonDTO { + val perioder = + rad.pølser.mapNotNull { pølse -> generasjoner.firstOrNull { it.behandlingId == pølse.behandlingId } } return SpeilGenerasjonDTO( id = UUID.randomUUID(), kildeTilGenerasjon = rad.kildeTilRad, diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/TidslinjeBuilder.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/TidslinjeBuilder.kt index f56ff3159d..4583c024f8 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/TidslinjeBuilder.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/TidslinjeBuilder.kt @@ -2,6 +2,7 @@ package no.nav.helse.spleis.speil.builders import java.time.LocalDate import java.util.UUID +import kotlin.math.roundToInt import no.nav.helse.dto.HendelseskildeDto import no.nav.helse.dto.PeriodeDto import no.nav.helse.dto.SykdomstidslinjeDagDto @@ -18,7 +19,6 @@ import no.nav.helse.spleis.speil.dto.SykdomstidslinjedagType import no.nav.helse.spleis.speil.dto.UtbetalingsdagDTO import no.nav.helse.spleis.speil.dto.UtbetalingstidslinjedagType import no.nav.helse.spleis.speil.dto.UtbetalingstidslinjedagUtenGrad -import kotlin.math.roundToInt internal class SykdomstidslinjeBuilder(private val dto: SykdomstidslinjeDto, periode: PeriodeDto) { private val tidslinje by lazy { @@ -27,7 +27,7 @@ internal class SykdomstidslinjeBuilder(private val dto: SykdomstidslinjeDto, per dto.dager.firstOrNull { it.dato == dag }?.let { tilDagDto(it) } ?: Sykdomstidslinjedag( dagen = dag, type = SykdomstidslinjedagType.ARBEIDSDAG, - kilde = Sykdomstidslinjedag.SykdomstidslinjedagKilde( + kilde = Sykdomstidslinjedag.SykdomstidslinjedagKilde( type = SykdomstidslinjedagKildetype.Ukjent, id = UUID.randomUUID() ), @@ -45,36 +45,42 @@ internal class SykdomstidslinjeBuilder(private val dto: SykdomstidslinjeDto, per kilde = it.kilde.tilKildeDTO(), grad = null ) + SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.AAP -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.ANDRE_YTELSER_AAP, kilde = it.kilde.tilKildeDTO(), grad = null ) + SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Omsorgspenger -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.ANDRE_YTELSER_OMSORGSPENGER, kilde = it.kilde.tilKildeDTO(), grad = null ) + SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Pleiepenger -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.ANDRE_YTELSER_PLEIEPENGER, kilde = it.kilde.tilKildeDTO(), grad = null ) + SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Svangerskapspenger -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.ANDRE_YTELSER_SVANGERSKAPSPENGER, kilde = it.kilde.tilKildeDTO(), grad = null ) + SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Opplæringspenger -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.ANDRE_YTELSER_OPPLÆRINGSPENGER, kilde = it.kilde.tilKildeDTO(), grad = null ) + SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Dagpenger -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.ANDRE_YTELSER_DAGPENGER, @@ -82,78 +88,91 @@ internal class SykdomstidslinjeBuilder(private val dto: SykdomstidslinjeDto, per grad = null ) } + is SykdomstidslinjeDagDto.ArbeidIkkeGjenopptattDagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.ARBEID_IKKE_GJENOPPTATT_DAG, kilde = it.kilde.tilKildeDTO(), grad = null ) + is SykdomstidslinjeDagDto.ArbeidsdagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.ARBEIDSDAG, kilde = it.kilde.tilKildeDTO(), grad = null ) + is SykdomstidslinjeDagDto.ArbeidsgiverHelgedagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.ARBEIDSGIVERDAG, kilde = it.kilde.tilKildeDTO(), grad = it.grad.prosent.roundToInt() ) + is SykdomstidslinjeDagDto.ArbeidsgiverdagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.ARBEIDSGIVERDAG, kilde = it.kilde.tilKildeDTO(), grad = it.grad.prosent.roundToInt() ) + is SykdomstidslinjeDagDto.FeriedagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.FERIEDAG, kilde = it.kilde.tilKildeDTO(), grad = null ) + is SykdomstidslinjeDagDto.ForeldetSykedagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.FORELDET_SYKEDAG, kilde = it.kilde.tilKildeDTO(), grad = it.grad.prosent.roundToInt() ) + is SykdomstidslinjeDagDto.FriskHelgedagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.FRISK_HELGEDAG, kilde = it.kilde.tilKildeDTO(), grad = null ) + is SykdomstidslinjeDagDto.PermisjonsdagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.PERMISJONSDAG, kilde = it.kilde.tilKildeDTO(), grad = null ) + is SykdomstidslinjeDagDto.ProblemDagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.UBESTEMTDAG, kilde = it.kilde.tilKildeDTO(), grad = null ) + is SykdomstidslinjeDagDto.SykHelgedagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.SYK_HELGEDAG, kilde = it.kilde.tilKildeDTO(), grad = it.grad.prosent.roundToInt() ) + is SykdomstidslinjeDagDto.SykedagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.SYKEDAG, kilde = it.kilde.tilKildeDTO(), grad = it.grad.prosent.roundToInt() ) + is SykdomstidslinjeDagDto.SykedagNavDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.SYKEDAG_NAV, kilde = it.kilde.tilKildeDTO(), grad = it.grad.prosent.roundToInt() ) + is SykdomstidslinjeDagDto.UkjentDagDto -> Sykdomstidslinjedag( dagen = it.dato, type = SykdomstidslinjedagType.ARBEIDSDAG, @@ -182,9 +201,22 @@ internal class UtbetalingstidslinjeBuilder(private val dto: Utbetalingstidslinje private val utbetalingstidslinje by lazy { dto.dager.map { when (it) { - is UtbetalingsdagUtDto.ArbeidsdagDto -> UtbetalingstidslinjedagUtenGrad(type = UtbetalingstidslinjedagType.Arbeidsdag, dato = it.dato) - is UtbetalingsdagUtDto.ArbeidsgiverperiodeDagDto -> UtbetalingstidslinjedagUtenGrad(type = UtbetalingstidslinjedagType.ArbeidsgiverperiodeDag, dato = it.dato) - is UtbetalingsdagUtDto.ArbeidsgiverperiodeDagNavDto -> mapUtbetalingsdag(it.dato, UtbetalingstidslinjedagType.ArbeidsgiverperiodeDag, it.økonomi) + is UtbetalingsdagUtDto.ArbeidsdagDto -> UtbetalingstidslinjedagUtenGrad( + type = UtbetalingstidslinjedagType.Arbeidsdag, + dato = it.dato + ) + + is UtbetalingsdagUtDto.ArbeidsgiverperiodeDagDto -> UtbetalingstidslinjedagUtenGrad( + type = UtbetalingstidslinjedagType.ArbeidsgiverperiodeDag, + dato = it.dato + ) + + is UtbetalingsdagUtDto.ArbeidsgiverperiodeDagNavDto -> mapUtbetalingsdag( + it.dato, + UtbetalingstidslinjedagType.ArbeidsgiverperiodeDag, + it.økonomi + ) + is UtbetalingsdagUtDto.AvvistDagDto -> AvvistDag( type = UtbetalingstidslinjedagType.AvvistDag, dato = it.dato, @@ -192,13 +224,27 @@ internal class UtbetalingstidslinjeBuilder(private val dto: Utbetalingstidslinje totalGrad = it.økonomi.totalGrad.prosent.toInt() ) - is UtbetalingsdagUtDto.ForeldetDagDto -> UtbetalingstidslinjedagUtenGrad(type = UtbetalingstidslinjedagType.ForeldetDag, dato = it.dato) + is UtbetalingsdagUtDto.ForeldetDagDto -> UtbetalingstidslinjedagUtenGrad( + type = UtbetalingstidslinjedagType.ForeldetDag, + dato = it.dato + ) + is UtbetalingsdagUtDto.FridagDto -> UtbetalingstidslinjedagUtenGrad( type = if (it.dato.erHelg()) UtbetalingstidslinjedagType.Helgedag else UtbetalingstidslinjedagType.Feriedag, dato = it.dato ) - is UtbetalingsdagUtDto.NavDagDto -> mapUtbetalingsdag(it.dato, UtbetalingstidslinjedagType.NavDag, it.økonomi) - is UtbetalingsdagUtDto.NavHelgDagDto -> UtbetalingstidslinjedagUtenGrad(type = UtbetalingstidslinjedagType.NavHelgDag, dato = it.dato) + + is UtbetalingsdagUtDto.NavDagDto -> mapUtbetalingsdag( + it.dato, + UtbetalingstidslinjedagType.NavDag, + it.økonomi + ) + + is UtbetalingsdagUtDto.NavHelgDagDto -> UtbetalingstidslinjedagUtenGrad( + type = UtbetalingstidslinjedagType.NavHelgDag, + dato = it.dato + ) + is UtbetalingsdagUtDto.UkjentDagDto -> UtbetalingstidslinjedagUtenGrad( type = UtbetalingstidslinjedagType.UkjentDag, dato = it.dato @@ -208,7 +254,11 @@ internal class UtbetalingstidslinjeBuilder(private val dto: Utbetalingstidslinje } } - private fun mapUtbetalingsdag(dato: LocalDate, type: UtbetalingstidslinjedagType, økonomi: ØkonomiUtDto): UtbetalingsdagDTO { + private fun mapUtbetalingsdag( + dato: LocalDate, + type: UtbetalingstidslinjedagType, + økonomi: ØkonomiUtDto + ): UtbetalingsdagDTO { return UtbetalingsdagDTO( type = type, dato = dato, diff --git "a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/Vilk\303\245rsgrunnlagBuilder.kt" "b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/Vilk\303\245rsgrunnlagBuilder.kt" index 0d9e3dd1bf..b7219b2516 100644 --- "a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/Vilk\303\245rsgrunnlagBuilder.kt" +++ "b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/builders/Vilk\303\245rsgrunnlagBuilder.kt" @@ -31,7 +31,9 @@ internal abstract class IVilkårsgrunnlag( val id: UUID ) { abstract fun toDTO(): Vilkårsgrunnlag - fun inngårIkkeISammenligningsgrunnlag(organisasjonsnummer: String) = inntekter.none { it.arbeidsgiver == organisasjonsnummer } + fun inngårIkkeISammenligningsgrunnlag(organisasjonsnummer: String) = + inntekter.none { it.arbeidsgiver == organisasjonsnummer } + open fun potensiellGhostperiode( organisasjonsnummer: String, sykefraværstilfeller: Map>> @@ -39,7 +41,9 @@ internal abstract class IVilkårsgrunnlag( if (inntekter.size < 2 || this.skjæringstidspunkt !in sykefraværstilfeller) return null val inntekten = inntekter.firstOrNull { it.arbeidsgiver == organisasjonsnummer } if (inntekten == null) return null - val sisteDag = minOf(inntekten.tom, sykefraværstilfeller.getValue(skjæringstidspunkt).maxOf { it.endInclusive }) + val sisteDag = minOf( + inntekten.tom, + sykefraværstilfeller.getValue(skjæringstidspunkt).maxOf { it.endInclusive }) return GhostPeriodeDTO( id = UUID.randomUUID(), fom = inntekten.fom, @@ -68,7 +72,15 @@ internal class ISpleisGrunnlag( val oppfyllerKravOmMinstelønn: Boolean, val oppfyllerKravOmOpptjening: Boolean, val oppfyllerKravOmMedlemskap: Boolean? -) : IVilkårsgrunnlag(skjæringstidspunkt, beregningsgrunnlag, sykepengegrunnlag, inntekter, refusjonsopplysningerPerArbeidsgiver, nyeInntekterUnderveis, id) { +) : IVilkårsgrunnlag( + skjæringstidspunkt, + beregningsgrunnlag, + sykepengegrunnlag, + inntekter, + refusjonsopplysningerPerArbeidsgiver, + nyeInntekterUnderveis, + id +) { override fun toDTO(): Vilkårsgrunnlag { return SpleisVilkårsgrunnlag( @@ -113,7 +125,15 @@ internal class IInfotrygdGrunnlag( refusjonsopplysningerPerArbeidsgiver: List, sykepengegrunnlag: Double, id: UUID -) : IVilkårsgrunnlag(skjæringstidspunkt, beregningsgrunnlag, sykepengegrunnlag, inntekter, refusjonsopplysningerPerArbeidsgiver, emptyList(), id) { +) : IVilkårsgrunnlag( + skjæringstidspunkt, + beregningsgrunnlag, + sykepengegrunnlag, + inntekter, + refusjonsopplysningerPerArbeidsgiver, + emptyList(), + id +) { override fun toDTO(): Vilkårsgrunnlag { return InfotrygdVilkårsgrunnlag( @@ -125,7 +145,10 @@ internal class IInfotrygdGrunnlag( ) } - override fun potensiellGhostperiode(organisasjonsnummer: String, sykefraværstilfeller: Map>>) = null + override fun potensiellGhostperiode( + organisasjonsnummer: String, + sykefraværstilfeller: Map>> + ) = null } internal class IVilkårsgrunnlagHistorikk(private val tilgjengeligeVilkårsgrunnlag: List>) { @@ -149,6 +172,7 @@ internal class IVilkårsgrunnlagHistorikk(private val tilgjengeligeVilkårsgrunn ) } } ?: emptyList() + internal fun potensielleGhostsperioder( organisasjonsnummer: String, sykefraværstilfeller: Map>> @@ -195,17 +219,19 @@ internal class VilkårsgrunnlagBuilder(vilkårsgrunnlagHistorikk: Vilkårsgrunnl MedlemskapsvurderingDto.VetIkke -> null } - val begrensning = SykepengegrunnlagsgrenseDTO.fra6GBegrensning(grunnlagsdata.inntektsgrunnlag.`6G`) - val overstyringer = grunnlagsdata.inntektsgrunnlag.arbeidsgiverInntektsopplysninger.mapNotNull { - when (it.inntektsopplysning) { - is InntektsopplysningUtDto.IkkeRapportertDto -> null - is InntektsopplysningUtDto.InfotrygdDto -> null - is InntektsopplysningUtDto.InntektsmeldingDto -> null - is InntektsopplysningUtDto.SaksbehandlerDto -> it.inntektsopplysning.hendelseId - is InntektsopplysningUtDto.SkattSykepengegrunnlagDto -> null - is InntektsopplysningUtDto.SkjønnsmessigFastsattDto -> it.inntektsopplysning.hendelseId - } - }.toSet() + val begrensning = + SykepengegrunnlagsgrenseDTO.fra6GBegrensning(grunnlagsdata.inntektsgrunnlag.`6G`) + val overstyringer = + grunnlagsdata.inntektsgrunnlag.arbeidsgiverInntektsopplysninger.mapNotNull { + when (it.inntektsopplysning) { + is InntektsopplysningUtDto.IkkeRapportertDto -> null + is InntektsopplysningUtDto.InfotrygdDto -> null + is InntektsopplysningUtDto.InntektsmeldingDto -> null + is InntektsopplysningUtDto.SaksbehandlerDto -> it.inntektsopplysning.hendelseId + is InntektsopplysningUtDto.SkattSykepengegrunnlagDto -> null + is InntektsopplysningUtDto.SkjønnsmessigFastsattDto -> it.inntektsopplysning.hendelseId + } + }.toSet() return ISpleisGrunnlag( skjæringstidspunkt = grunnlagsdata.skjæringstidspunkt, @@ -238,19 +264,52 @@ internal class VilkårsgrunnlagBuilder(vilkårsgrunnlagHistorikk: Vilkårsgrunnl } private fun inntekter(dto: InntektsgrunnlagUtDto): List { - return dto.arbeidsgiverInntektsopplysninger.map { mapInntekt(it) } + dto.deaktiverteArbeidsforhold.map { mapInntekt(it, true) } + return dto.arbeidsgiverInntektsopplysninger.map { mapInntekt(it) } + dto.deaktiverteArbeidsforhold.map { + mapInntekt( + it, + true + ) + } } - private fun mapInntekt(dto: ArbeidsgiverInntektsopplysningUtDto, deaktivert: Boolean = false): IArbeidsgiverinntekt { - return mapInntekt(dto.orgnummer, dto.gjelder.fom, dto.gjelder.tom, dto.inntektsopplysning, deaktivert) + private fun mapInntekt( + dto: ArbeidsgiverInntektsopplysningUtDto, + deaktivert: Boolean = false + ): IArbeidsgiverinntekt { + return mapInntekt( + dto.orgnummer, + dto.gjelder.fom, + dto.gjelder.tom, + dto.inntektsopplysning, + deaktivert + ) } - private fun mapInntekt(orgnummer: String, fom: LocalDate, tom: LocalDate, io: InntektsopplysningUtDto, deaktivert: Boolean): IArbeidsgiverinntekt { + private fun mapInntekt( + orgnummer: String, + fom: LocalDate, + tom: LocalDate, + io: InntektsopplysningUtDto, + deaktivert: Boolean + ): IArbeidsgiverinntekt { val omregnetÅrsinntekt = when (io) { - is InntektsopplysningUtDto.IkkeRapportertDto -> IOmregnetÅrsinntekt(IInntektkilde.IkkeRapportert, 0.0, 0.0, null) - is InntektsopplysningUtDto.InfotrygdDto -> IOmregnetÅrsinntekt(IInntektkilde.Infotrygd, io.beløp.årlig.beløp, io.beløp.månedligDouble.beløp, null) + is InntektsopplysningUtDto.IkkeRapportertDto -> IOmregnetÅrsinntekt( + IInntektkilde.IkkeRapportert, + 0.0, + 0.0, + null + ) + + is InntektsopplysningUtDto.InfotrygdDto -> IOmregnetÅrsinntekt( + IInntektkilde.Infotrygd, + io.beløp.årlig.beløp, + io.beløp.månedligDouble.beløp, + null + ) + is InntektsopplysningUtDto.InntektsmeldingDto -> { - val kilde = if (io.kilde == InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.AOrdningen) IInntektkilde.AOrdningen else IInntektkilde.Inntektsmelding + val kilde = + if (io.kilde == InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.AOrdningen) IInntektkilde.AOrdningen else IInntektkilde.Inntektsmelding IOmregnetÅrsinntekt( kilde, io.beløp.årlig.beløp, @@ -258,18 +317,29 @@ internal class VilkårsgrunnlagBuilder(vilkårsgrunnlagHistorikk: Vilkårsgrunnl null ) } - is InntektsopplysningUtDto.SaksbehandlerDto -> IOmregnetÅrsinntekt(IInntektkilde.Saksbehandler, io.beløp.årlig.beløp, io.beløp.månedligDouble.beløp, null) + + is InntektsopplysningUtDto.SaksbehandlerDto -> IOmregnetÅrsinntekt( + IInntektkilde.Saksbehandler, + io.beløp.årlig.beløp, + io.beløp.månedligDouble.beløp, + null + ) + is InntektsopplysningUtDto.SkattSykepengegrunnlagDto -> IOmregnetÅrsinntekt( - IInntektkilde.AOrdningen, io.beløp.årlig.beløp, io.beløp.månedligDouble.beløp, io.inntektsopplysninger - .groupBy { it.måned } - .mapValues { (_, verdier) -> verdier.sumOf { it.beløp.beløp } } - .map { (måned, månedligSum) -> - IInntekterFraAOrdningen( - måned = måned, - sum = månedligSum - ) - } + IInntektkilde.AOrdningen, + io.beløp.årlig.beløp, + io.beløp.månedligDouble.beløp, + io.inntektsopplysninger + .groupBy { it.måned } + .mapValues { (_, verdier) -> verdier.sumOf { it.beløp.beløp } } + .map { (måned, månedligSum) -> + IInntekterFraAOrdningen( + måned = måned, + sum = månedligSum + ) + } ) + is InntektsopplysningUtDto.SkjønnsmessigFastsattDto -> inntekter.getValue(io.overstyrtInntekt) }.also { inntekter[io.id] = it @@ -284,6 +354,7 @@ internal class VilkårsgrunnlagBuilder(vilkårsgrunnlagHistorikk: Vilkårsgrunnl årlig = io.beløp.årlig.beløp, månedlig = io.beløp.månedligDouble.beløp ) + else -> null }, deaktivert = deaktivert diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/ArbeidsgiverDTO.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/ArbeidsgiverDTO.kt index 7d2e68bd94..b881e085f6 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/ArbeidsgiverDTO.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/ArbeidsgiverDTO.kt @@ -17,18 +17,26 @@ data class ArbeidsgiverDTO( fun List.sykefraværstilfeller() = this .flatMap { arbeidsgiver -> arbeidsgiver.generasjoner.firstOrNull()?.perioder?.map { periode -> - periode.skjæringstidspunkt to (periode.fom .. periode.tom) + periode.skjæringstidspunkt to (periode.fom..periode.tom) } ?: emptyList() }.groupBy({ it.first }) { it.second } } - internal fun erTom(vilkårsgrunnlagHistorikk: IVilkårsgrunnlagHistorikk) = ghostPerioder.isEmpty() + + internal fun erTom(vilkårsgrunnlagHistorikk: IVilkårsgrunnlagHistorikk) = + ghostPerioder.isEmpty() && nyeInntektsforhold.isEmpty() && generasjoner.isEmpty() && vilkårsgrunnlagHistorikk.inngårIkkeISammenligningsgrunnlag(organisasjonsnummer) - internal fun medGhostperioderOgNyeInntektsforholdperioder(vilkårsgrunnlagHistorikk: IVilkårsgrunnlagHistorikk, arbeidsgivere: List): ArbeidsgiverDTO { + internal fun medGhostperioderOgNyeInntektsforholdperioder( + vilkårsgrunnlagHistorikk: IVilkårsgrunnlagHistorikk, + arbeidsgivere: List + ): ArbeidsgiverDTO { val sykefraværstilfeller = arbeidsgivere.sykefraværstilfeller() - val potensielleGhostperioder = vilkårsgrunnlagHistorikk.potensielleGhostsperioder(organisasjonsnummer, sykefraværstilfeller) + val potensielleGhostperioder = vilkårsgrunnlagHistorikk.potensielleGhostsperioder( + organisasjonsnummer, + sykefraværstilfeller + ) val ghostsperioder = fjernHelgepølser(potensielleGhostperioder.flatMap { ghostperiode -> fjernDagerMedSykdom(ghostperiode, GhostPeriodeDTO::brytOpp) @@ -40,18 +48,23 @@ data class ArbeidsgiverDTO( ) } - private fun fjernDagerMedSykdom(ghostperiode: Ting, oppbrytningsfunksjon: Ting.(ClosedRange) -> List): List { + private fun fjernDagerMedSykdom( + ghostperiode: Ting, + oppbrytningsfunksjon: Ting.(ClosedRange) -> List + ): List { if (generasjoner.isEmpty()) return listOf(ghostperiode) val tidslinjeperioderFraNyesteGenerasjon = generasjoner .first() .perioder .sortedBy { it.fom } - val oppslittetPølser = tidslinjeperioderFraNyesteGenerasjon.fold(listOf(ghostperiode)) { resultat, vedtaksperiode -> - val tidligereGhostperioder = resultat.dropLast(1) - val sisteGhostperiode = resultat.lastOrNull() - val tidslinjeperiode = vedtaksperiode.fom..vedtaksperiode.tom - tidligereGhostperioder + (sisteGhostperiode?.oppbrytningsfunksjon(tidslinjeperiode) ?: emptyList()) - } + val oppslittetPølser = + tidslinjeperioderFraNyesteGenerasjon.fold(listOf(ghostperiode)) { resultat, vedtaksperiode -> + val tidligereGhostperioder = resultat.dropLast(1) + val sisteGhostperiode = resultat.lastOrNull() + val tidslinjeperiode = vedtaksperiode.fom..vedtaksperiode.tom + tidligereGhostperioder + (sisteGhostperiode?.oppbrytningsfunksjon(tidslinjeperiode) + ?: emptyList()) + } return oppslittetPølser } @@ -60,4 +73,4 @@ data class ArbeidsgiverDTO( val periode = ghostperiode.fom til ghostperiode.tom periode.count() <= 2 && periode.start.erHelg() && periode.endInclusive.erHelg() } -} \ No newline at end of file +} diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/GenerasjonerDTO.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/GenerasjonerDTO.kt index baded30b6b..92934ef5b5 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/GenerasjonerDTO.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/GenerasjonerDTO.kt @@ -65,7 +65,10 @@ sealed class SpeilTidslinjeperiode : Comparable { abstract val skjæringstidspunkt: LocalDate abstract val hendelser: Set - internal open fun registrerBruk(vilkårsgrunnlaghistorikk: IVilkårsgrunnlagHistorikk, organisasjonsnummer: String): SpeilTidslinjeperiode { + internal open fun registrerBruk( + vilkårsgrunnlaghistorikk: IVilkårsgrunnlagHistorikk, + organisasjonsnummer: String + ): SpeilTidslinjeperiode { return this } @@ -81,7 +84,11 @@ sealed class SpeilTidslinjeperiode : Comparable { sykefraværstilfeller.forEach { (_, perioder) -> out.add(perioder.first().medPeriodetype(Tidslinjeperiodetype.FØRSTEGANGSBEHANDLING)) perioder.zipWithNext { forrige, nåværende -> - if (forrige is BeregnetPeriode) out.add(nåværende.medPeriodetype(Tidslinjeperiodetype.FORLENGELSE)) + if (forrige is BeregnetPeriode) out.add( + nåværende.medPeriodetype( + Tidslinjeperiodetype.FORLENGELSE + ) + ) else out.add(nåværende.medPeriodetype(Tidslinjeperiodetype.FØRSTEGANGSBEHANDLING)) } } @@ -152,7 +159,10 @@ data class BeregnetPeriode( val periodevilkår: Vilkår, val vilkårsgrunnlagId: UUID ) : SpeilTidslinjeperiode() { - override fun registrerBruk(vilkårsgrunnlaghistorikk: IVilkårsgrunnlagHistorikk, organisasjonsnummer: String): BeregnetPeriode { + override fun registrerBruk( + vilkårsgrunnlaghistorikk: IVilkårsgrunnlagHistorikk, + organisasjonsnummer: String + ): BeregnetPeriode { val vilkårsgrunnlag = vilkårsgrunnlagId.let { vilkårsgrunnlaghistorikk.leggIBøtta(it) } if (vilkårsgrunnlag !is ISpleisGrunnlag) return this return this.copy(hendelser = this.hendelser + vilkårsgrunnlag.overstyringer) @@ -203,12 +213,15 @@ data class AnnullertPeriode( val beregningId: UUID, val utbetaling: Utbetaling ) : SpeilTidslinjeperiode() { - override val sammenslåttTidslinje: List = emptyList() // feltet gir ikke mening for annullert periode + override val sammenslåttTidslinje: List = + emptyList() // feltet gir ikke mening for annullert periode override val erForkastet = true override val skjæringstidspunkt = fom // feltet gir ikke mening for annullert periode override val periodetype = Tidslinjeperiodetype.FØRSTEGANGSBEHANDLING // feltet gir ikke mening for annullert periode - override val inntektskilde = UtbetalingInntektskilde.EN_ARBEIDSGIVER // feltet gir ikke mening for annullert periode + override val inntektskilde = + UtbetalingInntektskilde.EN_ARBEIDSGIVER // feltet gir ikke mening for annullert periode + override fun medPeriodetype(periodetype: Tidslinjeperiodetype): SpeilTidslinjeperiode { return this } diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/GhostPeriodeDTO.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/GhostPeriodeDTO.kt index ee5691684b..42cfb9ed60 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/GhostPeriodeDTO.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/GhostPeriodeDTO.kt @@ -14,23 +14,35 @@ data class GhostPeriodeDTO( val deaktivert: Boolean ) { - internal fun brytOpp(tidslinjeperiode: ClosedRange) = brytOpp(this, fom, tom, tidslinjeperiode, GhostPeriodeDTO::til, GhostPeriodeDTO::fra) + internal fun brytOpp(tidslinjeperiode: ClosedRange) = + brytOpp(this, fom, tom, tidslinjeperiode, GhostPeriodeDTO::til, GhostPeriodeDTO::fra) internal fun til(other: ClosedRange) = copy( id = UUID.randomUUID(), tom = other.start.forrigeDag ) + internal fun fra(other: ClosedRange) = copy( id = UUID.randomUUID(), fom = other.endInclusive.nesteDag ) } -internal fun brytOpp(ting: Ting, fom: LocalDate, tom: LocalDate, tidslinjeperiode: ClosedRange, tilFunksjon: Ting.(ClosedRange) -> Ting, fraFunksjon: Ting.(ClosedRange) -> Ting): List = when { +internal fun brytOpp( + ting: Ting, + fom: LocalDate, + tom: LocalDate, + tidslinjeperiode: ClosedRange, + tilFunksjon: Ting.(ClosedRange) -> Ting, + fraFunksjon: Ting.(ClosedRange) -> Ting +): List = when { // trimmer ingenting tidslinjeperiode.erUtenfor(fom, tom) -> listOf(ting) // trimmer i midten - tidslinjeperiode.erInni(fom, tom) -> listOf(ting.tilFunksjon(tidslinjeperiode), ting.fraFunksjon(tidslinjeperiode)) + tidslinjeperiode.erInni(fom, tom) -> listOf( + ting.tilFunksjon(tidslinjeperiode), + ting.fraFunksjon(tidslinjeperiode) + ) // trimmer i slutten tidslinjeperiode.overlapperMedHale(fom, tom) -> listOf(ting.tilFunksjon(tidslinjeperiode)) // trimmer i starten @@ -45,8 +57,9 @@ internal fun ClosedRange.erUtenfor(fom: LocalDate, tom: LocalDate) = internal fun ClosedRange.erInni(fom: LocalDate, tom: LocalDate) = this.start > fom && this.endInclusive < tom + internal fun ClosedRange.overlapperMedHale(fom: LocalDate, tom: LocalDate) = this.start > fom && this.endInclusive >= tom internal fun ClosedRange.overlapperMedSnute(fom: LocalDate, tom: LocalDate) = - this.start <= fom && this.endInclusive < tom \ No newline at end of file + this.start <= fom && this.endInclusive < tom diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/NyttInntektsforholdPeriodeDTO.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/NyttInntektsforholdPeriodeDTO.kt index e5973beea8..045d15cbc9 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/NyttInntektsforholdPeriodeDTO.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/NyttInntektsforholdPeriodeDTO.kt @@ -13,14 +13,22 @@ data class NyttInntektsforholdPeriodeDTO( val månedligBeløp: Double, val skjæringstidspunkt: LocalDate ) { - internal fun brytOpp(tidslinjeperiode: ClosedRange) = brytOpp(this, fom, tom, tidslinjeperiode, NyttInntektsforholdPeriodeDTO::til, NyttInntektsforholdPeriodeDTO::fra) + internal fun brytOpp(tidslinjeperiode: ClosedRange) = brytOpp( + this, + fom, + tom, + tidslinjeperiode, + NyttInntektsforholdPeriodeDTO::til, + NyttInntektsforholdPeriodeDTO::fra + ) internal fun til(other: ClosedRange) = copy( id = UUID.randomUUID(), tom = other.start.forrigeDag ) + internal fun fra(other: ClosedRange) = copy( id = UUID.randomUUID(), fom = other.endInclusive.nesteDag ) -} \ No newline at end of file +} diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/TidslinjeDTO.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/TidslinjeDTO.kt index 8e3c8f038d..e40fd5307b 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/TidslinjeDTO.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/speil/dto/TidslinjeDTO.kt @@ -18,9 +18,9 @@ data class SammenslåttDag( */ fun sammeGrunnlag(other: SammenslåttDag) = this.dagen == other.dagen - && this.sykdomstidslinjedagtype == other.sykdomstidslinjedagtype - && this.kilde == other.kilde - && this.grad == grad + && this.sykdomstidslinjedagtype == other.sykdomstidslinjedagtype + && this.kilde == other.kilde + && this.grad == grad } enum class SykdomstidslinjedagType { diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/sporing/PersonBuilder.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/sporing/PersonBuilder.kt index 26963d37fa..bf6aac68a5 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/sporing/PersonBuilder.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/sporing/PersonBuilder.kt @@ -16,20 +16,25 @@ internal class PersonBuilder(private val person: Person) { private fun mapArbeidsgiver(arbeidsgiverDto: ArbeidsgiverUtDto): ArbeidsgiverDTO { val perioderBuilder = arbeidsgiverDto.vedtaksperioder.map { mapVedtaksperiode(it, false) } - val forkastetPerioderBuilder = arbeidsgiverDto.vedtaksperioder.map { mapVedtaksperiode(it, true) } + val forkastetPerioderBuilder = + arbeidsgiverDto.vedtaksperioder.map { mapVedtaksperiode(it, true) } - val perioder = (perioderBuilder + forkastetPerioderBuilder).sortedBy { it.fom }.toMutableList() + val perioder = + (perioderBuilder + forkastetPerioderBuilder).sortedBy { it.fom }.toMutableList() return ArbeidsgiverDTO( organisasjonsnummer = arbeidsgiverDto.organisasjonsnummer, vedtaksperioder = perioder.onEachIndexed { index, denne -> val erForlengelse = if (index > 0) perioder[index - 1].forlenger(denne) else false - val erForlenget = if (perioder.size > (index + 1)) denne.forlenger(perioder[index + 1]) else false - perioder[index] = denne.copy(periodetype = when { - !erForlengelse && !erForlenget -> PeriodetypeDTO.GAP_SISTE - !erForlengelse && erForlenget -> PeriodetypeDTO.GAP - erForlengelse && !erForlenget -> PeriodetypeDTO.FORLENGELSE_SISTE - else -> PeriodetypeDTO.FORLENGELSE - }) + val erForlenget = + if (perioder.size > (index + 1)) denne.forlenger(perioder[index + 1]) else false + perioder[index] = denne.copy( + periodetype = when { + !erForlengelse && !erForlenget -> PeriodetypeDTO.GAP_SISTE + !erForlengelse && erForlenget -> PeriodetypeDTO.GAP + erForlengelse && !erForlenget -> PeriodetypeDTO.FORLENGELSE_SISTE + else -> PeriodetypeDTO.FORLENGELSE + } + ) } ) } @@ -42,5 +47,6 @@ internal class PersonBuilder(private val person: Person) { forkastet = forkastet ) - private fun VedtaksperiodeDTO.forlenger(other: VedtaksperiodeDTO) = this.tom.erRettFør(other.fom) + private fun VedtaksperiodeDTO.forlenger(other: VedtaksperiodeDTO) = + this.tom.erRettFør(other.fom) } diff --git a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/sporing/SporingDTO.kt b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/sporing/SporingDTO.kt index 5e740b6b7a..cf1abeb3c8 100644 --- a/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/sporing/SporingDTO.kt +++ b/sykepenger-api/src/main/kotlin/no/nav/helse/spleis/sporing/SporingDTO.kt @@ -1,7 +1,7 @@ package no.nav.helse.spleis.sporing import java.time.LocalDate -import java.util.* +import java.util.UUID data class PersonDTO( val fødselsnummer: String, diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/Datoer.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/Datoer.kt index c42eb02644..0380e171d3 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/Datoer.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/Datoer.kt @@ -67,17 +67,20 @@ private fun DayOfWeek.checkDayOfWeek(dato: LocalDate) = dato.also { sealed interface Ukedag { // mandag den 1.januar infix fun den(dato: LocalDate) = dato.also { - check(it.dayOfWeek == when (this) { - mandag -> MONDAY - tirsdag -> TUESDAY - onsdag -> WEDNESDAY - torsdag -> THURSDAY - fredag -> FRIDAY - lørdag -> SATURDAY - søndag -> SUNDAY - }) { "Forventet at $dato skulle være $this, men var ${dato.dayOfWeek}" } + check( + it.dayOfWeek == when (this) { + mandag -> MONDAY + tirsdag -> TUESDAY + onsdag -> WEDNESDAY + torsdag -> THURSDAY + fredag -> FRIDAY + lørdag -> SATURDAY + søndag -> SUNDAY + } + ) { "Forventet at $dato skulle være $this, men var ${dato.dayOfWeek}" } } } + object mandag : Ukedag object tirsdag : Ukedag object onsdag : Ukedag @@ -88,4 +91,4 @@ object søndag : Ukedag // 1.januar til tirsdag den 2.januar infix fun LocalDate.til(ukedag: Ukedag) = this to ukedag -infix fun Pair.den(other: LocalDate) = this.first til this.second.den(other) \ No newline at end of file +infix fun Pair.den(other: LocalDate) = this.first til this.second.den(other) diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/GjenopprettFraJson.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/GjenopprettFraJson.kt index c68d72f2be..757fc24b47 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/GjenopprettFraJson.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/GjenopprettFraJson.kt @@ -9,6 +9,7 @@ internal fun gjenopprettFraJSON(fil: String, jurist: Subsumsjonslogg = EmptyLog) val json = fil.readResource() return gjenopprettFraJSONtekst(json, jurist) } + internal fun gjenopprettFraJSONtekst(json: String, jurist: Subsumsjonslogg = EmptyLog): Person { val serialisertPerson = SerialisertPerson(json) val dto = serialisertPerson.tilPersonDto() @@ -16,4 +17,5 @@ internal fun gjenopprettFraJSONtekst(json: String, jurist: Subsumsjonslogg = Emp } private fun String.readResource() = - object {}.javaClass.getResource(this)?.readText(Charsets.UTF_8) ?: error("did not find resource <$this>") \ No newline at end of file + object {}.javaClass.getResource(this)?.readText(Charsets.UTF_8) + ?: error("did not find resource <$this>") diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AbstractObservableTest.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AbstractObservableTest.kt index e12c6df1c4..c2d6295853 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AbstractObservableTest.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AbstractObservableTest.kt @@ -59,8 +59,15 @@ internal abstract class AbstractObservableTest { protected lateinit var person: Person internal lateinit var observatør: TestObservatør - private val Int.vedtaksperiode: IdInnhenter get() = IdInnhenter { orgnummer -> this.vedtaksperiode(orgnummer) } - private fun Int.vedtaksperiode(orgnummer: String) = observatør.vedtaksperiode(orgnummer, this - 1) + private val Int.vedtaksperiode: IdInnhenter + get() = IdInnhenter { orgnummer -> + this.vedtaksperiode( + orgnummer + ) + } + + private fun Int.vedtaksperiode(orgnummer: String) = + observatør.vedtaksperiode(orgnummer, this - 1) protected fun sykmelding( id: UUID = SYKMELDING_ID, @@ -117,8 +124,16 @@ internal abstract class AbstractObservableTest { id: UUID = INNTEKTSMELDING_ID, arbeidsgiverperioder: List = listOf(Periode(FOM, TOM)), beregnetInntekt: Inntekt = INNTEKT, - førsteFraværsdag: LocalDate = arbeidsgiverperioder.maxOfOrNull { it.start } ?: LocalDate.of(2018, 1, 1), - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + førsteFraværsdag: LocalDate = arbeidsgiverperioder.maxOfOrNull { it.start } ?: LocalDate.of( + 2018, + 1, + 1 + ), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), orgnummer: String = ORGNUMMER, harOpphørAvNaturalytelser: Boolean = false, harFlereInntektsmeldinger: Boolean = false, @@ -139,17 +154,34 @@ internal abstract class AbstractObservableTest { vedtaksperiodeIdInnhenter: IdInnhenter = 1.vedtaksperiode, medlemskapstatus: Medlemskapsvurdering.Medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja, orgnummer: String = ORGNUMMER, - arbeidsforhold: List = listOf(Vilkårsgrunnlag.Arbeidsforhold(orgnummer, FOM.minusYears(1), type = Arbeidsforholdtype.ORDINÆRT)), + arbeidsforhold: List = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer, + FOM.minusYears(1), + type = Arbeidsforholdtype.ORDINÆRT + ) + ), inntektsvurderingForSykepengegrunnlag: InntektForSykepengegrunnlag = InntektForSykepengegrunnlag( - inntekter = inntektperioderForSykepengegrunnlag { - Periode(FOM.minusMonths(3), FOM.minusDays(1)) inntekter { - ORGNUMMER inntekt INNTEKT - } - }), - inntekterForOpptjeningsvurdering: InntekterForOpptjeningsvurdering = InntekterForOpptjeningsvurdering(listOf( - ArbeidsgiverInntekt(ORGNUMMER, listOf(ArbeidsgiverInntekt.MånedligInntekt(YearMonth.from(FOM.minusMonths(1)), - INNTEKT, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "kontantytelse", "fastloenn"))) - )) + inntekter = inntektperioderForSykepengegrunnlag { + Periode(FOM.minusMonths(3), FOM.minusDays(1)) inntekter { + ORGNUMMER inntekt INNTEKT + } + }), + inntekterForOpptjeningsvurdering: InntekterForOpptjeningsvurdering = InntekterForOpptjeningsvurdering( + listOf( + ArbeidsgiverInntekt( + ORGNUMMER, listOf( + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.from(FOM.minusMonths(1)), + INNTEKT, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "kontantytelse", + "fastloenn" + ) + ) + ) + ) + ) ): Vilkårsgrunnlag = Vilkårsgrunnlag( meldingsreferanseId = UUID.randomUUID(), vedtaksperiodeId = vedtaksperiodeIdInnhenter.id(orgnummer).toString(), diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/Applikasjonsservere.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/Applikasjonsservere.kt index 63f31a905b..38d5223605 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/Applikasjonsservere.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/Applikasjonsservere.kt @@ -33,8 +33,11 @@ import org.junit.jupiter.api.Assertions internal class Applikasjonsservere(private val poolSize: Int) { constructor() : this(POOL_SIZE) + companion object { - private val JUNIT_PARALLELISM = System.getProperty("junit.jupiter.execution.parallel.config.fixed.parallelism")?.toInt() ?: 1 + private val JUNIT_PARALLELISM = + System.getProperty("junit.jupiter.execution.parallel.config.fixed.parallelism")?.toInt() + ?: 1 private const val MIN_POOL_SIZE = 1 private val MAX_POOL_SIZE = Runtime.getRuntime().availableProcessors() @@ -59,10 +62,14 @@ internal class Applikasjonsservere(private val poolSize: Int) { } fun nyAppserver(): Applikasjonserver { - return tilgjengelige.poll(20, TimeUnit.SECONDS) ?: throw RuntimeException("Ventet i 20 sekunder uten å få en ledig appserver") + return tilgjengelige.poll(20, TimeUnit.SECONDS) + ?: throw RuntimeException("Ventet i 20 sekunder uten å få en ledig appserver") } - fun kjørTest(testdata: (TestDataSource) -> Unit, testblokk: suspend BlackboxTestContext.() -> Unit) { + fun kjørTest( + testdata: (TestDataSource) -> Unit, + testblokk: suspend BlackboxTestContext.() -> Unit + ) { val appserver = nyAppserver() try { appserver.kjørTest(testdata, testblokk) @@ -93,20 +100,34 @@ internal class Applikasjonsservere(private val poolSize: Int) { Applikasjonserver(navn, azureConfig, issuer) } - internal class Applikasjonserver(private val navn: String, azureConfig: AzureAdAppConfig, issuer: Issuer) { + internal class Applikasjonserver( + private val navn: String, + azureConfig: AzureAdAppConfig, + issuer: Issuer + ) { private val randomPort = ServerSocket(0).use { it.localPort } private lateinit var testDataSource: TestDataSource private val registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT) private val speedClient = mockk() private val spekematClient = mockk() private val app = - createApp(azureConfig, speedClient, spekematClient, { testDataSource.ds }, registry, randomPort) + createApp( + azureConfig, + speedClient, + spekematClient, + { testDataSource.ds }, + registry, + randomPort + ) private val client = lagHttpklient(randomPort) private val testContext = BlackboxTestContext(client, issuer) private var startetOpp = false - fun kjørTest(testdata: (TestDataSource) -> Unit = {}, testblokk: suspend BlackboxTestContext.() -> Unit) { + fun kjørTest( + testdata: (TestDataSource) -> Unit = {}, + testblokk: suspend BlackboxTestContext.() -> Unit + ) { testDataSource = databaseContainer.nyTilkobling() try { startOpp(testdata) @@ -194,4 +215,4 @@ internal class Applikasjonsservere(private val poolSize: Int) { }.also(testBlock) } } -} \ No newline at end of file +} diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AzureTokenStub.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AzureTokenStub.kt index 8999e49950..b22a436d88 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AzureTokenStub.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/AzureTokenStub.kt @@ -23,7 +23,8 @@ internal class AzureTokenStub( wireMockServer.start() ventPåServeroppstart() wireMockServer.stubFor( - WireMock.get(WireMock.urlPathEqualTo(jwksPath)).willReturn(WireMock.okJson(issuer.jwks)) + WireMock.get(WireMock.urlPathEqualTo(jwksPath)) + .willReturn(WireMock.okJson(issuer.jwks)) ) continuation.resume(true) // returnerer true bare for å ha en verdi } @@ -41,4 +42,4 @@ internal class AzureTokenStub( false } } -} \ No newline at end of file +} diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/DB.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/DB.kt index a9efa5d402..c1a1ac19be 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/DB.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/DB.kt @@ -3,4 +3,5 @@ package no.nav.helse.spleis import com.github.navikt.tbd_libs.test_support.CleanupStrategy import com.github.navikt.tbd_libs.test_support.DatabaseContainers -val databaseContainer = DatabaseContainers.container("spleis-api", CleanupStrategy.tables("person, melding")) +val databaseContainer = + DatabaseContainers.container("spleis-api", CleanupStrategy.tables("person, melding")) diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/JwtStub.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/JwtStub.kt index 8180a2db39..02dc213fe7 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/JwtStub.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/JwtStub.kt @@ -9,48 +9,50 @@ import java.util.Base64 import org.intellij.lang.annotations.Language class Issuer(val navn: String) { - companion object { - private const val SUBJECT = "en_saksbehandler_ident" - private val GROUPS = listOf("sykepenger-saksbehandler-gruppe").toTypedArray() - val AUDIENCE = "spleis_azure_ad_app_id" - } - - private val privateKey: RSAPrivateKey - private val publicKey: RSAPublicKey - - init { - val keyPairGenerator = KeyPairGenerator.getInstance("RSA") - keyPairGenerator.initialize(512) - - val keyPair = keyPairGenerator.genKeyPair() - privateKey = keyPair.private as RSAPrivateKey - publicKey = keyPair.public as RSAPublicKey - } - - fun createToken(audience: String = AUDIENCE): String { - val algorithm = Algorithm.RSA256(publicKey, privateKey) - - return JWT.create() - .withIssuer(navn) - .withAudience(audience) - .withKeyId("key-1234") - .withSubject(SUBJECT) - .withArrayClaim("groups", GROUPS) - .sign(algorithm) - } - - @Language("JSON") - val jwks = """ + companion object { + private const val SUBJECT = "en_saksbehandler_ident" + private val GROUPS = listOf("sykepenger-saksbehandler-gruppe").toTypedArray() + val AUDIENCE = "spleis_azure_ad_app_id" + } + + private val privateKey: RSAPrivateKey + private val publicKey: RSAPublicKey + + init { + val keyPairGenerator = KeyPairGenerator.getInstance("RSA") + keyPairGenerator.initialize(512) + + val keyPair = keyPairGenerator.genKeyPair() + privateKey = keyPair.private as RSAPrivateKey + publicKey = keyPair.public as RSAPublicKey + } + + fun createToken(audience: String = AUDIENCE): String { + val algorithm = Algorithm.RSA256(publicKey, privateKey) + + return JWT.create() + .withIssuer(navn) + .withAudience(audience) + .withKeyId("key-1234") + .withSubject(SUBJECT) + .withArrayClaim("groups", GROUPS) + .sign(algorithm) + } + + @Language("JSON") + val jwks = """ { "keys": [ { "kty": "RSA", "alg": "RS256", "kid": "key-1234", - "e": "${Base64.getUrlEncoder().encodeToString(publicKey.publicExponent.toByteArray())}", + "e": "${ + Base64.getUrlEncoder().encodeToString(publicKey.publicExponent.toByteArray()) + }", "n": "${Base64.getUrlEncoder().encodeToString(publicKey.modulus.toByteArray())}" } ] } """ -} \ No newline at end of file +} diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/LokalePayload.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/LokalePayload.kt index 4ad72f77d1..e715e4396d 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/LokalePayload.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/LokalePayload.kt @@ -53,10 +53,12 @@ private class LokaleClaim(private val verdi: String) : Claim { override fun asDouble() = 0.0 override fun asString() = verdi override fun asDate() = Date.from(Instant.EPOCH) + @Suppress("UNCHECKED_CAST") override fun asArray(clazz: Class?) = emptyArray() as Array + @Suppress("UNCHECKED_CAST") override fun asList(clazz: Class?) = emptyList() as List override fun asMap() = emptyMap() override fun `as`(clazz: Class?) = throw NotImplementedError() -} \ No newline at end of file +} diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/RestApiTest.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/RestApiTest.kt index be7e8209cf..190790e32e 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/RestApiTest.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/RestApiTest.kt @@ -47,7 +47,7 @@ internal class RestApiTest { } @Test - fun `hent personJson med fnr`() = blackboxTestApplication{ + fun `hent personJson med fnr`() = blackboxTestApplication { "/api/person-json".httpPost(HttpStatusCode.OK, mapOf("fødselsnummer" to UNG_PERSON_FNR)) } @@ -63,15 +63,15 @@ internal class RestApiTest { @Test fun `request med manglende eller feil access token`() = blackboxTestApplication { - val query = """ + val query = """ { person(fnr: \"${UNG_PERSON_FNR}\") { } } """ - val body = """{"query": "$query"}""" + val body = """{"query": "$query"}""" - val annenIssuer = Issuer("annen") + val annenIssuer = Issuer("annen") post(body, HttpStatusCode.Unauthorized, accessToken = null) post(body, HttpStatusCode.Unauthorized, accessToken = issuer.createToken("feil_audience")) @@ -101,14 +101,24 @@ internal class RestApiTest { ), orgnummer = ORGNUMMER, beregnetInntekt = 12000.månedlig, - arbeidsgiverperioder = listOf(Periode(LocalDate.of(2018, 9, 10), LocalDate.of(2018, 9, 10).plusDays(16))), + arbeidsgiverperioder = listOf( + Periode( + LocalDate.of(2018, 9, 10), + LocalDate.of(2018, 9, 10).plusDays(16) + ) + ), begrunnelseForReduksjonEllerIkkeUtbetalt = null, harFlereInntektsmeldinger = false, harOpphørAvNaturalytelser = false, - avsendersystem = Inntektsmelding.Avsendersystem.NavPortal(vedtaksperiodeId, LocalDate.EPOCH, true), + avsendersystem = Inntektsmelding.Avsendersystem.NavPortal( + vedtaksperiodeId, + LocalDate.EPOCH, + true + ), mottatt = LocalDateTime.now() ) - val person = Person(Personidentifikator(UNG_PERSON_FNR), UNG_PERSON_FØDSELSDATO.alder, EmptyLog) + val person = + Person(Personidentifikator(UNG_PERSON_FNR), UNG_PERSON_FØDSELSDATO.alder, EmptyLog) person.håndter(sykmelding, Aktivitetslogg()) person.håndter(inntektsmelding, Aktivitetslogg()) testDataSource.ds.lagrePerson(UNG_PERSON_FNR, person) @@ -118,10 +128,18 @@ internal class RestApiTest { private fun DataSource.lagrePerson(fødselsnummer: String, person: Person) { val serialisertPerson = person.dto().tilPersonData().tilSerialisertPerson() sessionOf(this, returnGeneratedKey = true).use { - val personId = it.run(queryOf("INSERT INTO person (fnr, skjema_versjon, data) VALUES (?, ?, (to_json(?::json)))", - fødselsnummer.toLong(), serialisertPerson.skjemaVersjon, serialisertPerson.json).asUpdateAndReturnGeneratedKey) - it.run(queryOf("INSERT INTO person_alias (fnr, person_id) VALUES (?, ?);", - fødselsnummer.toLong(), personId!!).asExecute) + val personId = it.run( + queryOf( + "INSERT INTO person (fnr, skjema_versjon, data) VALUES (?, ?, (to_json(?::json)))", + fødselsnummer.toLong(), serialisertPerson.skjemaVersjon, serialisertPerson.json + ).asUpdateAndReturnGeneratedKey + ) + it.run( + queryOf( + "INSERT INTO person_alias (fnr, person_id) VALUES (?, ?);", + fødselsnummer.toLong(), personId!! + ).asExecute + ) } } diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/Retry.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/Retry.kt index 027e72eb30..621d5da3d1 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/Retry.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/Retry.kt @@ -16,5 +16,8 @@ fun retry(timeout: Duration = Duration.ofSeconds(5), whatToRetry: () -> T): } runBlocking { delay(100L) } } while ((System.currentTimeMillis() - starttime) < timeout.toMillis()) - throw RuntimeException("Gav opp å vente på OK resultat etter ${timeout.toMillis()} ms", exception) -} \ No newline at end of file + throw RuntimeException( + "Gav opp å vente på OK resultat etter ${timeout.toMillis()} ms", + exception + ) +} diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/SpekematClientTest.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/SpekematClientTest.kt index 5120998a25..98dc2ffc8f 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/SpekematClientTest.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/SpekematClientTest.kt @@ -11,7 +11,7 @@ import io.mockk.mockk import java.net.http.HttpClient import java.time.LocalDateTime import org.intellij.lang.annotations.Language -import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class SpekematClientTest { @@ -22,11 +22,20 @@ class SpekematClientTest { } } private var httpClientMock = mockk() - private val client = SpekematClient(httpClientMock, azureTokenProvider, "scope-til-spekemat", jacksonObjectMapper()) + private val client = SpekematClient( + httpClientMock, + azureTokenProvider, + "scope-til-spekemat", + jacksonObjectMapper() + ) @Test fun `tolker response fra spekemat`() { - every { httpClientMock.send(any(), any()) } returns MockHttpResponse(responsFraSpekemat, 200, mapOf("callId" to "liksom call id")) + every { httpClientMock.send(any(), any()) } returns MockHttpResponse( + responsFraSpekemat, + 200, + mapOf("callId" to "liksom call id") + ) val result = client.hentSpekemat("fnr", "callId") assertEquals(1, result.pakker.size) assertEquals(1, result.pakker.single().rader.size) @@ -60,4 +69,4 @@ private const val responsFraSpekemat = """{ ] } ] -}""" \ No newline at end of file +}""" diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/AbstractE2ETest.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/AbstractE2ETest.kt index c7890ecf03..b0a0181230 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/AbstractE2ETest.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/AbstractE2ETest.kt @@ -78,6 +78,7 @@ internal abstract class AbstractE2ETest { person.addObserver(observatør) person.addObserver(spekemat) } + protected fun createOvergangFraInfotrygdPerson() = createTestPerson { jurist -> gjenopprettFraJSON("/personer/infotrygdforlengelse.json", jurist) } @@ -90,8 +91,15 @@ internal abstract class AbstractE2ETest { hendelselogg = Aktivitetslogg() } - protected val Int.vedtaksperiode: IdInnhenter get() = IdInnhenter { orgnummer -> this.vedtaksperiode(orgnummer) } - protected fun Int.vedtaksperiode(orgnummer: String) = observatør.vedtaksperiode(orgnummer, this - 1) + protected val Int.vedtaksperiode: IdInnhenter + get() = IdInnhenter { orgnummer -> + this.vedtaksperiode( + orgnummer + ) + } + + protected fun Int.vedtaksperiode(orgnummer: String) = + observatør.vedtaksperiode(orgnummer, this - 1) protected val UUID.vedtaksperiode get() = IdInnhenter { _ -> this } @@ -105,13 +113,26 @@ internal abstract class AbstractE2ETest { observatør.ventendeReplays().forEach { (orgnr, vedtaksperiodeId) -> hendelselogg = Aktivitetslogg() - person.håndter(fabrikker.getValue(orgnr).lagInntektsmeldingReplayUtført(vedtaksperiodeId), hendelselogg) + person.håndter( + fabrikker.getValue(orgnr).lagInntektsmeldingReplayUtført(vedtaksperiodeId), + hendelselogg + ) } } protected fun håndterSøknad(periode: Periode, orgnummer: String = a1): UUID { - return håndterSøknad(Søknad.Søknadsperiode.Sykdom(periode.start, periode.endInclusive, 100.prosent), sykmeldingSkrevet = periode.start.atStartOfDay(), sendtTilNAV = periode.endInclusive.atStartOfDay(), orgnummer = orgnummer) + return håndterSøknad( + Søknad.Søknadsperiode.Sykdom( + periode.start, + periode.endInclusive, + 100.prosent + ), + sykmeldingSkrevet = periode.start.atStartOfDay(), + sendtTilNAV = periode.endInclusive.atStartOfDay(), + orgnummer = orgnummer + ) } + protected fun håndterSøknad( vararg perioder: Søknad.Søknadsperiode, sykmeldingSkrevet: LocalDateTime = 1.januar.atStartOfDay(), @@ -130,7 +151,10 @@ internal abstract class AbstractE2ETest { søknad.håndter(Person::håndter) val behov = hendelselogg.infotrygdhistorikkbehov() - if (behov != null) håndterUtbetalingshistorikk(behov.vedtaksperiodeId, orgnummer = behov.orgnummer) + if (behov != null) håndterUtbetalingshistorikk( + behov.vedtaksperiodeId, + orgnummer = behov.orgnummer + ) return søknadId } @@ -230,6 +254,7 @@ internal abstract class AbstractE2ETest { begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, id = meldingsreferanseId, ) + false -> fabrikker.getValue(orgnummer).lagInntektsmelding( arbeidsgiverperioder = arbeidsgiverperioder, beregnetInntekt = beregnetInntekt, @@ -259,9 +284,15 @@ internal abstract class AbstractE2ETest { } protected fun håndterVilkårsgrunnlag(arbeidsgivere: List> = listOf(a1 to INNTEKT)) { - håndterVilkårsgrunnlag(inntekter = arbeidsgivere, arbeidsforhold = arbeidsgivere.map { (orgnr, _) -> orgnr to EPOCH }) + håndterVilkårsgrunnlag( + inntekter = arbeidsgivere, + arbeidsforhold = arbeidsgivere.map { (orgnr, _) -> orgnr to EPOCH }) } - protected fun håndterVilkårsgrunnlag(inntekter: List> = listOf(a1 to INNTEKT), arbeidsforhold: List> = listOf(a1 to EPOCH)) { + + protected fun håndterVilkårsgrunnlag( + inntekter: List> = listOf(a1 to INNTEKT), + arbeidsforhold: List> = listOf(a1 to EPOCH) + ) { val behov = hendelselogg.vilkårsgrunnlagbehov() ?: error("Fant ikke vilkårsgrunnlagbehov") håndterVilkårsgrunnlag( vedtaksperiodeId = behov.vedtaksperiodeId.vedtaksperiode, @@ -287,7 +318,12 @@ internal abstract class AbstractE2ETest { Vilkårsgrunnlag.Arbeidsforhold(orgnr, oppstart, type = Arbeidsforholdtype.ORDINÆRT) }, inntekter = InntektForSykepengegrunnlag( - inntekter = inntekter.map { (orgnr, inntekt) -> grunnlag(orgnr, behov.skjæringstidspunkt, (1..3).map { inntekt }) } + inntekter = inntekter.map { (orgnr, inntekt) -> + grunnlag( + orgnr, + behov.skjæringstidspunkt, + (1..3).map { inntekt }) + } ), orgnummer = behov.orgnummer ) @@ -332,17 +368,30 @@ internal abstract class AbstractE2ETest { protected fun håndterYtelser() { val ytelsebehov = hendelselogg.ytelserbehov() ?: error("Fant ikke ytelserbehov") - fabrikker.getValue(ytelsebehov.orgnummer).lagYtelser(vedtaksperiodeId = ytelsebehov.vedtaksperiodeId).håndter(Person::håndter) + fabrikker.getValue(ytelsebehov.orgnummer) + .lagYtelser(vedtaksperiodeId = ytelsebehov.vedtaksperiodeId).håndter(Person::håndter) } protected fun håndterSimulering() { val behov = hendelselogg.simuleringbehov() ?: error("Fant ikke simuleringsbehov") behov.oppdrag.forEach { - håndterSimulering(behov.vedtaksperiodeId.vedtaksperiode, behov.utbetalingId, it.fagsystemId, it.fagområde, behov.orgnummer) + håndterSimulering( + behov.vedtaksperiodeId.vedtaksperiode, + behov.utbetalingId, + it.fagsystemId, + it.fagområde, + behov.orgnummer + ) } } - protected fun håndterSimulering(vedtaksperiodeId: IdInnhenter, utbetalingId: UUID, fagsystemId: String, fagområde: String, orgnummer: String) { + protected fun håndterSimulering( + vedtaksperiodeId: IdInnhenter, + utbetalingId: UUID, + fagsystemId: String, + fagområde: String, + orgnummer: String + ) { (fabrikker.getValue(orgnummer).lagSimulering( vedtaksperiodeId = vedtaksperiodeId.id(orgnummer), utbetalingId = utbetalingId, @@ -357,8 +406,14 @@ internal abstract class AbstractE2ETest { personfabrikk.lagDødsmelding(dødsdato).håndter(Person::håndter) } - protected fun håndterMinimumSykdomsgradsvurderingMelding(perioderMedMinimumSykdomsgradVurdertOK: Set = emptySet(), perioderMedMinimumSykdomsgradVurdertIkkeOK: Set = emptySet()) { - personfabrikk.lagMinimumSykdomsgradsvurderingMelding(perioderMedMinimumSykdomsgradVurdertOK, perioderMedMinimumSykdomsgradVurdertIkkeOK).håndter(Person::håndter) + protected fun håndterMinimumSykdomsgradsvurderingMelding( + perioderMedMinimumSykdomsgradVurdertOK: Set = emptySet(), + perioderMedMinimumSykdomsgradVurdertIkkeOK: Set = emptySet() + ) { + personfabrikk.lagMinimumSykdomsgradsvurderingMelding( + perioderMedMinimumSykdomsgradVurdertOK, + perioderMedMinimumSykdomsgradVurdertIkkeOK + ).håndter(Person::håndter) } protected fun håndterYtelserTilGodkjenning() { @@ -370,33 +425,64 @@ internal abstract class AbstractE2ETest { } } - protected fun håndterOverstyrTidslinje(dager: List, meldingsreferanseId: UUID = UUID.randomUUID(), orgnummer: String = a1) { + protected fun håndterOverstyrTidslinje( + dager: List, + meldingsreferanseId: UUID = UUID.randomUUID(), + orgnummer: String = a1 + ) { (fabrikker.getValue(orgnummer).lagHåndterOverstyrTidslinje( overstyringsdager = dager, meldingsreferanseId = meldingsreferanseId )).håndter(Person::håndter) } - protected fun tilGodkjenning(fom: LocalDate, tom: LocalDate, orgnummer: String = a1, vedtaksperiode: Int = 1) { + + protected fun tilGodkjenning( + fom: LocalDate, + tom: LocalDate, + orgnummer: String = a1, + vedtaksperiode: Int = 1 + ) { håndterSøknad(fom til tom, orgnummer) håndterInntektsmelding(fom, orgnummer = orgnummer, vedtaksperiode = vedtaksperiode) håndterVilkårsgrunnlag() håndterYtelserTilGodkjenning() } + protected fun forlengTilGodkjenning(fom: LocalDate, tom: LocalDate, orgnummer: String = a1) { håndterSøknad(fom til tom, orgnummer) håndterYtelserTilGodkjenning() } - protected fun tilYtelser(fom: LocalDate, tom: LocalDate, vararg orgnummerOgVedtaksperioder: Pair) { + + protected fun tilYtelser( + fom: LocalDate, + tom: LocalDate, + vararg orgnummerOgVedtaksperioder: Pair + ) { orgnummerOgVedtaksperioder.forEach { håndterSøknad(fom til tom, it.first) } - orgnummerOgVedtaksperioder.forEach { håndterInntektsmelding(fom, orgnummer = it.first, vedtaksperiode = it.second) } + orgnummerOgVedtaksperioder.forEach { + håndterInntektsmelding( + fom, + orgnummer = it.first, + vedtaksperiode = it.second + ) + } håndterVilkårsgrunnlag() } - protected fun tilGodkjenning(fom: LocalDate, tom: LocalDate, vararg orgnummerOgVedtaksperioder: Pair) { + + protected fun tilGodkjenning( + fom: LocalDate, + tom: LocalDate, + vararg orgnummerOgVedtaksperioder: Pair + ) { tilYtelser(fom, tom, *orgnummerOgVedtaksperioder) håndterYtelserTilGodkjenning() } - protected fun nyeVedtak(fom: LocalDate, tom: LocalDate, vararg orgnummerOgVedtaksperioder: Pair) { + protected fun nyeVedtak( + fom: LocalDate, + tom: LocalDate, + vararg orgnummerOgVedtaksperioder: Pair + ) { tilYtelser(fom, tom, *orgnummerOgVedtaksperioder) orgnummerOgVedtaksperioder.forEach { håndterYtelserTilGodkjenning() @@ -404,6 +490,7 @@ internal abstract class AbstractE2ETest { håndterUtbetalt() } } + protected fun forlengVedtak(fom: LocalDate, tom: LocalDate, vararg orgnumre: String) { orgnumre.forEach { håndterSøknad(fom til tom, it) } orgnumre.forEach { @@ -412,12 +499,23 @@ internal abstract class AbstractE2ETest { håndterUtbetalt() } } - protected fun nyttVedtak(fom: LocalDate, tom: LocalDate, orgnummer: String = a1, vedtaksperiode: Int = 1): Utbetalingbehov { + + protected fun nyttVedtak( + fom: LocalDate, + tom: LocalDate, + orgnummer: String = a1, + vedtaksperiode: Int = 1 + ): Utbetalingbehov { tilGodkjenning(fom, tom, orgnummer to vedtaksperiode) håndterUtbetalingsgodkjenning() return håndterUtbetalt() } - protected fun forlengVedtak(fom: LocalDate, tom: LocalDate, orgnummer: String = a1): Utbetalingbehov { + + protected fun forlengVedtak( + fom: LocalDate, + tom: LocalDate, + orgnummer: String = a1 + ): Utbetalingbehov { forlengTilGodkjenning(fom, tom, orgnummer) håndterUtbetalingsgodkjenning() return håndterUtbetalt() @@ -427,7 +525,8 @@ internal abstract class AbstractE2ETest { skjæringstidspunkt: LocalDate, opplysninger: List ) { - personfabrikk.lagOverstyrArbeidsforhold(skjæringstidspunkt, *opplysninger.toTypedArray()).håndter(Person::håndter) + personfabrikk.lagOverstyrArbeidsforhold(skjæringstidspunkt, *opplysninger.toTypedArray()) + .håndter(Person::håndter) } protected fun håndterOverstyrArbeidsgiveropplysninger( @@ -435,15 +534,25 @@ internal abstract class AbstractE2ETest { opplysninger: List, meldingsreferanseId: UUID = UUID.randomUUID() ) { - personfabrikk.lagOverstyrArbeidsgiveropplysninger(skjæringstidspunkt, opplysninger, meldingsreferanseId).håndter(Person::håndter) + personfabrikk.lagOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt, + opplysninger, + meldingsreferanseId + ).håndter(Person::håndter) } + protected fun håndterSkjønnsmessigFastsettelse( skjæringstidspunkt: LocalDate, opplysninger: List, meldingsreferanseId: UUID = UUID.randomUUID() ) { - personfabrikk.lagSkjønnsmessigFastsettelse(skjæringstidspunkt, opplysninger, meldingsreferanseId).håndter(Person::håndter) + personfabrikk.lagSkjønnsmessigFastsettelse( + skjæringstidspunkt, + opplysninger, + meldingsreferanseId + ).håndter(Person::håndter) } + protected fun håndterUtbetalingsgodkjenning(utbetalingGodkjent: Boolean = true) { val behov = hendelselogg.godkjenningbehov() ?: error("Fant ikke godkjenningsbehov") fabrikker.getValue(behov.orgnummer).lagUtbetalingsgodkjenning( @@ -453,6 +562,7 @@ internal abstract class AbstractE2ETest { utbetalingId = behov.utbetalingId ).håndter(Person::håndter) } + protected fun håndterUtbetalt(status: Oppdragstatus = Oppdragstatus.AKSEPTERT): Utbetalingbehov { val behov = hendelselogg.utbetalingbehov() ?: error("Fant ikke utbetalingbehov") behov.oppdrag.forEach { @@ -464,19 +574,23 @@ internal abstract class AbstractE2ETest { } return behov } + protected fun håndterVilkårsgrunnlagTilUtbetalt(status: Oppdragstatus = Oppdragstatus.AKSEPTERT) { håndterVilkårsgrunnlagTilGodkjenning() håndterUtbetalingsgodkjenning() håndterUtbetalt(status) } + protected fun håndterYtelserTilGodkjent() { håndterYtelserTilGodkjenning() håndterUtbetalingsgodkjenning() } + protected fun håndterYtelserTilUtbetalt(status: Oppdragstatus = Oppdragstatus.AKSEPTERT): Utbetalingbehov { håndterYtelserTilGodkjent() return håndterUtbetalt(status) } + protected fun håndterAnnullerUtbetaling(behov: Utbetalingbehov) { fabrikker.getValue(behov.orgnummer).lagAnnullering(behov.utbetalingId) .håndter(Person::håndter) @@ -491,6 +605,7 @@ internal abstract class AbstractE2ETest { } } + private fun IAktivitetslogg.infotrygdhistorikkbehov() = ønsketBehov(setOf(Aktivitet.Behov.Behovtype.Sykepengehistorikk))?.single()?.let { ubesvarteBehov.remove(it) @@ -499,17 +614,32 @@ internal abstract class AbstractE2ETest { orgnummer = it.kontekst().getValue("organisasjonsnummer") ) } + private fun IAktivitetslogg.vilkårsgrunnlagbehov() = - ønsketBehov(setOf(Aktivitet.Behov.Behovtype.InntekterForSykepengegrunnlag, Aktivitet.Behov.Behovtype.ArbeidsforholdV2, Aktivitet.Behov.Behovtype.Medlemskap))?.let { + ønsketBehov( + setOf( + Aktivitet.Behov.Behovtype.InntekterForSykepengegrunnlag, + Aktivitet.Behov.Behovtype.ArbeidsforholdV2, + Aktivitet.Behov.Behovtype.Medlemskap + ) + )?.let { ubesvarteBehov.removeAll(it) - val (vedtaksperiodeId, behovene) = it.groupBy { UUID.fromString(it.kontekst().getValue("vedtaksperiodeId")) }.entries.single() + val (vedtaksperiodeId, behovene) = it.groupBy { + UUID.fromString( + it.kontekst().getValue("vedtaksperiodeId") + ) + }.entries.single() Vilkårsgrunnlagbehov( vedtaksperiodeId = vedtaksperiodeId, orgnummer = behovene.first().kontekst().getValue("organisasjonsnummer"), - skjæringstidspunkt = LocalDate.parse(behovene.first().detaljer().getValue("skjæringstidspunkt") as String) + skjæringstidspunkt = LocalDate.parse( + behovene.first().detaljer().getValue("skjæringstidspunkt") as String + ) ) } - private fun IAktivitetslogg.ytelserbehov() = ønsketBehov(setOf( + + private fun IAktivitetslogg.ytelserbehov() = ønsketBehov( + setOf( Aktivitet.Behov.Behovtype.Foreldrepenger, Aktivitet.Behov.Behovtype.Pleiepenger, Aktivitet.Behov.Behovtype.Omsorgspenger, @@ -517,21 +647,32 @@ internal abstract class AbstractE2ETest { Aktivitet.Behov.Behovtype.Institusjonsopphold, Aktivitet.Behov.Behovtype.Arbeidsavklaringspenger, Aktivitet.Behov.Behovtype.Dagpenger - )) + ) + ) ?.let { ubesvarteBehov.removeAll(it) - val (vedtaksperiodeId, behovene) = it.groupBy { UUID.fromString(it.kontekst().getValue("vedtaksperiodeId")) }.entries.single() + val (vedtaksperiodeId, behovene) = it.groupBy { + UUID.fromString( + it.kontekst().getValue("vedtaksperiodeId") + ) + }.entries.single() Ytelserbehov( vedtaksperiodeId = vedtaksperiodeId, orgnummer = it.first().kontekst().getValue("organisasjonsnummer") ) } + private fun IAktivitetslogg.simuleringbehov() = ønsketBehov(setOf(Aktivitet.Behov.Behovtype.Simulering)) ?.let { ubesvarteBehov.removeAll(it) - val (utbetalingId, oppdrag) = it.groupBy { UUID.fromString(it.kontekst().getValue("utbetalingId")) }.entries.single() - val vedtaksperiodeId = UUID.fromString(oppdrag.first().kontekst().getValue("vedtaksperiodeId")) + val (utbetalingId, oppdrag) = it.groupBy { + UUID.fromString( + it.kontekst().getValue("utbetalingId") + ) + }.entries.single() + val vedtaksperiodeId = + UUID.fromString(oppdrag.first().kontekst().getValue("vedtaksperiodeId")) val orgnummer = oppdrag.first().kontekst().getValue("organisasjonsnummer") Simuleringbehov( vedtaksperiodeId = vedtaksperiodeId, @@ -545,19 +686,26 @@ internal abstract class AbstractE2ETest { } ) } - private fun IAktivitetslogg.godkjenningbehov() = ønsketBehov(setOf(Aktivitet.Behov.Behovtype.Godkjenning))?.single()?.let { - ubesvarteBehov.remove(it) - Godkjenningbehov( - vedtaksperiodeId = UUID.fromString(it.kontekst().getValue("vedtaksperiodeId")), - orgnummer = it.kontekst().getValue("organisasjonsnummer"), - utbetalingId = UUID.fromString(it.kontekst().getValue("utbetalingId")) - ) - } + + private fun IAktivitetslogg.godkjenningbehov() = + ønsketBehov(setOf(Aktivitet.Behov.Behovtype.Godkjenning))?.single()?.let { + ubesvarteBehov.remove(it) + Godkjenningbehov( + vedtaksperiodeId = UUID.fromString(it.kontekst().getValue("vedtaksperiodeId")), + orgnummer = it.kontekst().getValue("organisasjonsnummer"), + utbetalingId = UUID.fromString(it.kontekst().getValue("utbetalingId")) + ) + } + private fun IAktivitetslogg.utbetalingbehov() = ønsketBehov(setOf(Aktivitet.Behov.Behovtype.Utbetaling)) ?.let { ubesvarteBehov.removeAll(it) - val (utbetalingId, oppdrag) = it.groupBy { UUID.fromString(it.kontekst().getValue("utbetalingId")) }.entries.single() + val (utbetalingId, oppdrag) = it.groupBy { + UUID.fromString( + it.kontekst().getValue("utbetalingId") + ) + }.entries.single() val orgnummer = oppdrag.first().kontekst().getValue("organisasjonsnummer") Utbetalingbehov( orgnummer = orgnummer, @@ -575,33 +723,39 @@ internal abstract class AbstractE2ETest { val vedtaksperiodeId: UUID, val orgnummer: String ) + data class Vilkårsgrunnlagbehov( val vedtaksperiodeId: UUID, val orgnummer: String, val skjæringstidspunkt: LocalDate ) + data class Ytelserbehov( val vedtaksperiodeId: UUID, val orgnummer: String ) + data class Simuleringbehov( val vedtaksperiodeId: UUID, val orgnummer: String, val utbetalingId: UUID, val oppdrag: List ) + data class Godkjenningbehov( val vedtaksperiodeId: UUID, val orgnummer: String, val utbetalingId: UUID ) + data class Utbetalingbehov( val orgnummer: String, val utbetalingId: UUID, val oppdrag: List ) + data class Oppdragbehov( val fagområde: String, val fagsystemId: String ) -} \ No newline at end of file +} diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/GraphQLApiTest.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/GraphQLApiTest.kt index 4717f9da9f..e8fa9cad29 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/GraphQLApiTest.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/GraphQLApiTest.kt @@ -24,13 +24,13 @@ import javax.sql.DataSource import kotliquery.queryOf import kotliquery.sessionOf import no.nav.helse.Alder.Companion.alder +import no.nav.helse.Personidentifikator import no.nav.helse.etterlevelse.Subsumsjonslogg.Companion.EmptyLog import no.nav.helse.person.Person import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Simulering +import no.nav.helse.person.aktivitetslogg.Aktivitetslogg import no.nav.helse.serde.tilPersonData import no.nav.helse.serde.tilSerialisertPerson -import no.nav.helse.Personidentifikator -import no.nav.helse.person.aktivitetslogg.Aktivitetslogg import no.nav.helse.spleis.AbstractObservableTest import no.nav.helse.spleis.LokalePayload import no.nav.helse.spleis.SpekematClient @@ -92,7 +92,10 @@ internal class GraphQLApiTest : AbstractObservableTest() { person.addObserver(spekemat) val spekematClient = mockk() - spleisApiTestApplication(spekematClient = spekematClient, testdata = opprettTestdata(person)) { + spleisApiTestApplication( + spekematClient = spekematClient, + testdata = opprettTestdata(person) + ) { every { spekematClient.hentSpekemat(UNG_PERSON_FNR, any()) } returns spekemat.resultat() val query = URI("https://raw.githubusercontent.com/navikt/helse-spesialist/master/spesialist-api/src/main/resources/graphql/hentSnapshot.graphql").toURL() @@ -116,12 +119,15 @@ internal class GraphQLApiTest : AbstractObservableTest() { } private companion object { - private val UUIDRegex = "\\b[0-9a-f]{8}\\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\\b[0-9a-f]{12}\\b".toRegex() + private val UUIDRegex = + "\\b[0-9a-f]{8}\\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\\b[0-9a-f]{12}\\b".toRegex() private val NullUUID = "00000000-0000-0000-0000-000000000000" private val LocalDateTimeRegex = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}".toRegex() - private val LocalDateTimePrecisionRegex = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+".toRegex() + private val LocalDateTimePrecisionRegex = + "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+".toRegex() private val LocalDateTimeMandagsfrø = "2018-01-01T00:00:00" - private val TidsstempelRegex = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}".toRegex() + private val TidsstempelRegex = + "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}".toRegex() private val TidsstempelMandagsfrø = "2018-01-01 00:00:00.000" private val FagsystemIdRegex = "[A-Z,2-7]{26}".toRegex() private val FagsystemId = "ZZZZZZZZZZZZZZZZZZZZZZZZZZ" @@ -759,13 +765,16 @@ internal class GraphQLApiTest : AbstractObservableTest() { } } """ + private fun assertHeltLike(forventet: String, faktisk: String) = JSONAssert.assertEquals(forventet, faktisk, STRICT) private fun assertIngenFærreFelt(forventet: String, faktisk: String) = JSONAssert.assertEquals(forventet, faktisk, STRICT_ORDER) + private fun String.readResource() = - object {}.javaClass.getResource(this)?.readText(Charsets.UTF_8) ?: throw RuntimeException("Fant ikke filen på $this") + object {}.javaClass.getResource(this)?.readText(Charsets.UTF_8) + ?: throw RuntimeException("Fant ikke filen på $this") private fun speedClient() = mockk { every { hentFødselsnummerOgAktørId(any(), any()) } returns IdentResponse( @@ -776,14 +785,29 @@ internal class GraphQLApiTest : AbstractObservableTest() { ).ok() } - private fun spleisApiTestApplication(speedClient: SpeedClient = speedClient(), spekematClient: SpekematClient = mockk(), testdata: (TestDataSource) -> Unit = { }, testblokk: suspend TestContext.() -> Unit) { + private fun spleisApiTestApplication( + speedClient: SpeedClient = speedClient(), + spekematClient: SpekematClient = mockk(), + testdata: (TestDataSource) -> Unit = { }, + testblokk: suspend TestContext.() -> Unit + ) { val testDataSource = databaseContainer.nyTilkobling() testdata(testDataSource) - lagTestapplikasjon(speedClient = speedClient, spekematClient = spekematClient, testDataSource = testDataSource, testblokk) + lagTestapplikasjon( + speedClient = speedClient, + spekematClient = spekematClient, + testDataSource = testDataSource, + testblokk + ) databaseContainer.droppTilkobling(testDataSource) } - private fun lagTestapplikasjon(speedClient: SpeedClient, spekematClient: SpekematClient, testDataSource: TestDataSource, testblokk: suspend TestContext.() -> Unit) { + private fun lagTestapplikasjon( + speedClient: SpeedClient, + spekematClient: SpekematClient, + testDataSource: TestDataSource, + testblokk: suspend TestContext.() -> Unit + ) { val meterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT) naisfulTestApp( testApplicationModule = { @@ -821,7 +845,7 @@ internal class GraphQLApiTest : AbstractObservableTest() { } private fun opprettTestdata(person: Person): (TestDataSource) -> Unit { - return fun (testDataSource: TestDataSource) { + return fun(testDataSource: TestDataSource) { observatør = TestObservatør().also { person.addObserver(it) } person.håndter(sykmelding(), Aktivitetslogg()) person.håndter(utbetalinghistorikk(), Aktivitetslogg()) @@ -836,9 +860,18 @@ internal class GraphQLApiTest : AbstractObservableTest() { val utbetalingId = UUID.fromString(simuleringsbehov.kontekst().getValue("utbetalingId")) val fagsystemId = simuleringsbehov.detaljer().getValue("fagsystemId") as String val fagområde = simuleringsbehov.detaljer().getValue("fagområde") as String - person.håndter(simulering(utbetalingId = utbetalingId, fagsystemId = fagsystemId, fagområde = fagområde), Aktivitetslogg()) + person.håndter( + simulering( + utbetalingId = utbetalingId, + fagsystemId = fagsystemId, + fagområde = fagområde + ), Aktivitetslogg() + ) person.håndter(utbetalingsgodkjenning(utbetalingId = utbetalingId), Aktivitetslogg()) - person.håndter(utbetaling(utbetalingId = utbetalingId, fagsystemId = fagsystemId), Aktivitetslogg()) + person.håndter( + utbetaling(utbetalingId = utbetalingId, fagsystemId = fagsystemId), + Aktivitetslogg() + ) lagrePerson(testDataSource.ds, UNG_PERSON_FNR, person) lagreSykmelding( @@ -869,10 +902,18 @@ internal class GraphQLApiTest : AbstractObservableTest() { private fun lagrePerson(dataSource: DataSource, fødselsnummer: String, person: Person) { val serialisertPerson = person.dto().tilPersonData().tilSerialisertPerson() sessionOf(dataSource, returnGeneratedKey = true).use { - val personId = it.run(queryOf("INSERT INTO person (fnr, skjema_versjon, data) VALUES (?, ?, (to_json(?::json)))", - fødselsnummer.toLong(), serialisertPerson.skjemaVersjon, serialisertPerson.json).asUpdateAndReturnGeneratedKey) - it.run(queryOf("INSERT INTO person_alias (fnr, person_id) VALUES (?, ?)", - fødselsnummer.toLong(), personId!!).asExecute) + val personId = it.run( + queryOf( + "INSERT INTO person (fnr, skjema_versjon, data) VALUES (?, ?, (to_json(?::json)))", + fødselsnummer.toLong(), serialisertPerson.skjemaVersjon, serialisertPerson.json + ).asUpdateAndReturnGeneratedKey + ) + it.run( + queryOf( + "INSERT INTO person_alias (fnr, person_id) VALUES (?, ?)", + fødselsnummer.toLong(), personId!! + ).asExecute + ) } } @@ -897,7 +938,13 @@ internal class GraphQLApiTest : AbstractObservableTest() { } } - private fun lagreInntektsmelding(dataSource: DataSource, fødselsnummer: String, meldingsReferanse: UUID, beregnetInntekt: Inntekt, førsteFraværsdag: LocalDate) { + private fun lagreInntektsmelding( + dataSource: DataSource, + fødselsnummer: String, + meldingsReferanse: UUID, + beregnetInntekt: Inntekt, + førsteFraværsdag: LocalDate + ) { lagreHendelse( dataSource = dataSource, fødselsnummer = fødselsnummer, @@ -915,7 +962,13 @@ internal class GraphQLApiTest : AbstractObservableTest() { ) } - private fun lagreSykmelding(dataSource: DataSource, fødselsnummer: String, meldingsReferanse: UUID, fom: LocalDate, tom: LocalDate) { + private fun lagreSykmelding( + dataSource: DataSource, + fødselsnummer: String, + meldingsReferanse: UUID, + fom: LocalDate, + tom: LocalDate + ) { lagreHendelse( dataSource = dataSource, fødselsnummer = fødselsnummer, @@ -932,7 +985,14 @@ internal class GraphQLApiTest : AbstractObservableTest() { ) } - private fun lagreSøknadNav(dataSource: DataSource, fødselsnummer: String, meldingsReferanse: UUID, fom: LocalDate, tom: LocalDate, sendtNav: LocalDateTime) { + private fun lagreSøknadNav( + dataSource: DataSource, + fødselsnummer: String, + meldingsReferanse: UUID, + fom: LocalDate, + tom: LocalDate, + sendtNav: LocalDateTime + ) { lagreHendelse( dataSource = dataSource, fødselsnummer = fødselsnummer, diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBehandlingerBuilderTest.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBehandlingerBuilderTest.kt index 17cafcc158..22564430e0 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBehandlingerBuilderTest.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBehandlingerBuilderTest.kt @@ -88,12 +88,31 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { fun `im som aldri kom`() = Toggle.InntektsmeldingSomIkkeKommer.enable { val inntektFraSkatt = 10000.månedlig val søknadId = håndterSøknad(1.januar til 31.januar, orgnummer = a1) - val inntektFraSkattId = håndterSykepengegrunnlagForArbeidsgiver(skjæringstidspunkt = 1.januar, skatteinntekter = listOf( - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 12), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 11), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 10), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", "") + val inntektFraSkattId = håndterSykepengegrunnlagForArbeidsgiver( + skjæringstidspunkt = 1.januar, skatteinntekter = listOf( + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 12), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 11), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 10), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" ) ) + ) generasjoner(a1) { assertEquals(1, size) 0.generasjon { @@ -110,8 +129,10 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { val imA1 = håndterInntektsmelding(1.januar, orgnummer = a1) val imA2 = håndterInntektsmelding(1.januar, orgnummer = a2) - val søknadA1Forlengelse = håndterSøknad(Sykdom(26.januar, 31.januar, 100.prosent), orgnummer = a1) - val søknadA2Forlengelse = håndterSøknad(Sykdom(26.januar, 31.januar, 100.prosent), orgnummer = a2) + val søknadA1Forlengelse = + håndterSøknad(Sykdom(26.januar, 31.januar, 100.prosent), orgnummer = a1) + val søknadA2Forlengelse = + håndterSøknad(Sykdom(26.januar, 31.januar, 100.prosent), orgnummer = a2) håndterVilkårsgrunnlagTilUtbetalt() håndterYtelserTilUtbetalt() @@ -121,9 +142,9 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { val skjønnsfastsettelse = UUID.randomUUID() håndterSkjønnsmessigFastsettelse( 1.januar, listOf( - OverstyrtArbeidsgiveropplysning(a1, INNTEKT + 500.daglig), - OverstyrtArbeidsgiveropplysning(a2, INNTEKT - 500.daglig), - ), skjønnsfastsettelse + OverstyrtArbeidsgiveropplysning(a1, INNTEKT + 500.daglig), + OverstyrtArbeidsgiveropplysning(a2, INNTEKT - 500.daglig), + ), skjønnsfastsettelse ) håndterYtelserTilUtbetalt() håndterYtelserTilUtbetalt() @@ -174,11 +195,16 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { } 1.generasjon { assertEquals(1, size) - uberegnetPeriode(0) fra 1.januar til 10.januar medTilstand IngenUtbetaling medHendelser setOf(søknad, im) + uberegnetPeriode(0) fra 1.januar til 10.januar medTilstand IngenUtbetaling medHendelser setOf( + søknad, + im + ) } 2.generasjon { assertEquals(1, size) - uberegnetPeriode(0) fra 1.januar til 10.januar medTilstand IngenUtbetaling medHendelser setOf(søknad) + uberegnetPeriode(0) fra 1.januar til 10.januar medTilstand IngenUtbetaling medHendelser setOf( + søknad + ) } } } @@ -188,22 +214,43 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { val søknad1 = håndterSøknad(Sykdom(1.januar, 24.januar, 100.prosent)) val inntektsmeldingbeløp1 = INNTEKT val søknad2 = håndterSøknad(Sykdom(25.januar, søndag den 11.februar, 100.prosent)) - val inntektsmelding1 = håndterInntektsmelding(listOf(25.januar til fredag den 9.februar), beregnetInntekt = inntektsmeldingbeløp1, vedtaksperiode = 2) - val inntektsmeldingbeløp2 = INNTEKT*1.1 - val inntektsmelding2 = håndterInntektsmelding(1.januar, beregnetInntekt = inntektsmeldingbeløp2, vedtaksperiode = 1) + val inntektsmelding1 = håndterInntektsmelding( + listOf(25.januar til fredag den 9.februar), + beregnetInntekt = inntektsmeldingbeløp1, + vedtaksperiode = 2 + ) + val inntektsmeldingbeløp2 = INNTEKT * 1.1 + val inntektsmelding2 = håndterInntektsmelding( + 1.januar, + beregnetInntekt = inntektsmeldingbeløp2, + vedtaksperiode = 1 + ) håndterVilkårsgrunnlag() generasjoner { assertEquals(2, size) 0.generasjon { assertEquals(2, size) - uberegnetPeriode(0) medTilstand ForberederGodkjenning medHendelser setOf(søknad2, inntektsmelding1) - uberegnetPeriode(1) medTilstand IngenUtbetaling medHendelser setOf(søknad1, inntektsmelding1, inntektsmelding2) + uberegnetPeriode(0) medTilstand ForberederGodkjenning medHendelser setOf( + søknad2, + inntektsmelding1 + ) + uberegnetPeriode(1) medTilstand IngenUtbetaling medHendelser setOf( + søknad1, + inntektsmelding1, + inntektsmelding2 + ) } 1.generasjon { assertEquals(2, size) - uberegnetPeriode(0) medTilstand IngenUtbetaling medHendelser setOf(søknad2, inntektsmelding1) - uberegnetPeriode(1) medTilstand IngenUtbetaling medHendelser setOf(søknad1, inntektsmelding1) + uberegnetPeriode(0) medTilstand IngenUtbetaling medHendelser setOf( + søknad2, + inntektsmelding1 + ) + uberegnetPeriode(1) medTilstand IngenUtbetaling medHendelser setOf( + søknad1, + inntektsmelding1 + ) } } } @@ -244,7 +291,10 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { fun `syk nav-dager i to korte perioder`() { håndterSøknad(Sykdom(1.januar, 15.januar, 100.prosent), Ferie(1.januar, 15.januar)) håndterSøknad(Sykdom(16.januar, 20.januar, 100.prosent), Ferie(16.januar, 20.januar)) - håndterInntektsmelding(1.januar, begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening") + håndterInntektsmelding( + 1.januar, + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening" + ) generasjoner { assertEquals(2, size) 0.generasjon { @@ -264,7 +314,12 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { fun `Manglende generasjon når det kommer IM som endrer AGP ved å endre dager i forkant av perioden`() { håndterSøknad(Sykdom(7.august, 20.august, 100.prosent)) håndterSøknad(Sykdom(21.august, 1.september, 100.prosent)) - håndterInntektsmelding(arbeidsgiverperioder = listOf(24.juli til 25.juli, 7.august til 20.august),) + håndterInntektsmelding( + arbeidsgiverperioder = listOf( + 24.juli til 25.juli, + 7.august til 20.august + ), + ) håndterVilkårsgrunnlagTilGodkjenning() håndterUtbetalingsgodkjenning() håndterUtbetalt() @@ -274,10 +329,12 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { håndterYtelserTilUtbetalt() // 21 & 22.August agp -- denne blir ikke en generasjon - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(24.juli, Dagtype.Egenmeldingsdag), - ManuellOverskrivingDag(25.juli, Dagtype.Egenmeldingsdag) - )) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(24.juli, Dagtype.Egenmeldingsdag), + ManuellOverskrivingDag(25.juli, Dagtype.Egenmeldingsdag) + ) + ) håndterYtelserTilGodkjenning() // 21 & 22.August utbetalingsdager @@ -310,8 +367,8 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { fun `avvik i inntekt slik at dager avslås pga minsteinntekt`() { val beregnetInntekt = halvG.beløp(1.januar) nyttVedtak(1.januar, 31.januar) - forlengVedtak(1.februar, 28.februar) - håndterInntektsmelding(1.januar, beregnetInntekt = beregnetInntekt - 1.daglig,) + forlengVedtak(1.februar, 28.februar) + håndterInntektsmelding(1.januar, beregnetInntekt = beregnetInntekt - 1.daglig) håndterYtelserTilUtbetalt() håndterYtelserTilGodkjenning() generasjoner { @@ -334,12 +391,18 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { nyttVedtak(1.januar, 31.januar) forlengVedtak(1.februar, 28.februar) forlengVedtak(1.mars, 31.mars) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 500.daglig, ""))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 500.daglig, "")) + ) håndterYtelserTilGodkjenning() håndterUtbetalingsgodkjenning() håndterUtbetalt() håndterYtelserTilGodkjenning() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 550.daglig, ""))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 550.daglig, "")) + ) håndterYtelserTilGodkjenning() generasjoner { assertEquals(3, size) @@ -368,11 +431,17 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { nyttVedtak(1.januar, 31.januar) forlengVedtak(1.februar, 28.februar) forlengVedtak(1.mars, 31.mars) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 500.daglig, ""))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 500.daglig, "")) + ) håndterYtelserTilUtbetalt() håndterYtelserTilUtbetalt() håndterYtelserTilUtbetalt() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 2.daglig, ""))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 2.daglig, "")) + ) håndterYtelserTilGodkjenning() generasjoner { assertEquals(3, size) @@ -386,7 +455,7 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { assertEquals(3, size) beregnetPeriode(0) avType REVURDERING fra 1.mars til 31.mars medTilstand Utbetalt beregnetPeriode(1) avType REVURDERING fra 1.februar til 28.februar medTilstand Utbetalt - beregnetPeriode(2) avType REVURDERING fra 1.januar til 31.januar medTilstand Utbetalt + beregnetPeriode(2) avType REVURDERING fra 1.januar til 31.januar medTilstand Utbetalt } 2.generasjon { assertEquals(3, size) @@ -401,7 +470,10 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { fun `periodetype ved enkel revurdering`() { nyttVedtak(1.januar, 31.januar) forlengVedtak(1.februar, 28.februar) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 500.0.daglig, ""))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 500.0.daglig, "")) + ) håndterYtelserTilGodkjenning() generasjoner { 0.generasjon { @@ -420,7 +492,7 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { @Test fun `person med foreldet dager`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), sendtTilNAV = 1.juni.atStartOfDay()) - håndterInntektsmelding(1.januar,) + håndterInntektsmelding(1.januar) håndterVilkårsgrunnlagTilGodkjenning() håndterUtbetalingsgodkjenning() håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent)) @@ -468,7 +540,10 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { nyttVedtak(1.januar(2017), 31.januar(2017), orgnummer = a2) håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), orgnummer = a1,) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + orgnummer = a1, + ) håndterVilkårsgrunnlag( inntekter = listOf(a1 to INNTEKT), arbeidsforhold = listOf(a1 to EPOCH, a2 to 1.desember(2017)) @@ -478,8 +553,12 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { generasjoner(a1) { 0.generasjon { val vilkårsgrunnlag = beregnetPeriode(0).vilkårsgrunnlag() - val inntektsgrunnlag = vilkårsgrunnlag.inntekter.firstOrNull { it.organisasjonsnummer == a2 } - assertEquals(Inntekt(Inntektkilde.IkkeRapportert, 0.0, 0.0, null), inntektsgrunnlag?.omregnetÅrsinntekt) + val inntektsgrunnlag = + vilkårsgrunnlag.inntekter.firstOrNull { it.organisasjonsnummer == a2 } + assertEquals( + Inntekt(Inntektkilde.IkkeRapportert, 0.0, 0.0, null), + inntektsgrunnlag?.omregnetÅrsinntekt + ) } } } @@ -489,16 +568,32 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { nyttVedtak(1.januar, 31.januar) forlengVedtak(1.februar, 28.februar) - håndterOverstyrTidslinje((29.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((29.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelserTilUtbetalt() håndterYtelserTilGodkjenning() håndterUtbetalingsgodkjenning() - håndterOverstyrTidslinje((29.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Sykedag, 100) }) + håndterOverstyrTidslinje((29.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Sykedag, + 100 + ) + }) håndterYtelserTilUtbetalt() håndterYtelserTilGodkjenning() håndterUtbetalingsgodkjenning() - håndterOverstyrTidslinje((27.februar til 28.februar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((27.februar til 28.februar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelserTilGodkjenning() generasjoner { @@ -535,7 +630,12 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { nyttVedtak(1.januar, 31.januar) nyttVedtak(2.februar, 28.februar, vedtaksperiode = 2) - håndterOverstyrTidslinje((27.februar til 28.februar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((27.februar til 28.februar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelserTilGodkjenning() generasjoner { @@ -643,7 +743,12 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { nyttVedtak(1.januar, 31.januar) forlengVedtak(1.februar, 28.februar) - håndterOverstyrTidslinje((29.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((29.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelserTilUtbetalt() håndterYtelserTilGodkjenning() håndterUtbetalingsgodkjenning() @@ -661,7 +766,7 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { 1.generasjon { assertEquals(2, size) beregnetPeriode(0) er Utbetalingstatus.Utbetalt avType UTBETALING fra (1.februar til 28.februar) medAntallDager 28 forkastet false medTilstand Utbetalt - beregnetPeriode(1) er Utbetalingstatus.Utbetalt avType UTBETALING fra (1.januar til 31.januar) medAntallDager 31 forkastet false medTilstand Utbetalt + beregnetPeriode(1) er Utbetalingstatus.Utbetalt avType UTBETALING fra (1.januar til 31.januar) medAntallDager 31 forkastet false medTilstand Utbetalt } } } @@ -671,13 +776,23 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { nyttVedtak(1.januar, 31.januar) forlengVedtak(1.februar, 28.februar) - håndterOverstyrTidslinje((29.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((29.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelserTilUtbetalt() håndterYtelserTilGodkjenning() håndterUtbetalingsgodkjenning() forlengVedtak(1.mars, 31.mars) - håndterOverstyrTidslinje((1.mars til 31.mars).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((1.mars til 31.mars).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelserTilUtbetalt() generasjoner { @@ -717,7 +832,7 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { fun `kort periode med forlengelse`() { håndterSøknad(Sykdom(1.januar, 15.januar, 100.prosent)) håndterSøknad(Sykdom(16.januar, 15.februar, 100.prosent)) - håndterInntektsmelding(1.januar,) + håndterInntektsmelding(1.januar) håndterVilkårsgrunnlagTilGodkjenning() generasjoner { @@ -739,12 +854,17 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { håndterSøknad(Sykdom(1.januar, 15.januar, 100.prosent)) håndterSøknad(Sykdom(16.januar, 15.februar, 100.prosent)) - håndterInntektsmelding(1.januar,) + håndterInntektsmelding(1.januar) håndterVilkårsgrunnlagTilGodkjenning() håndterUtbetalingsgodkjenning() håndterUtbetalt() - håndterOverstyrTidslinje((13.februar til 14.februar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((13.februar til 14.februar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelserTilGodkjenning() generasjoner { @@ -858,7 +978,12 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent)) håndterYtelserTilGodkjenning() - håndterOverstyrTidslinje((29.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((29.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelserTilGodkjenning() generasjoner { @@ -878,7 +1003,7 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { @Test fun `periode uten utbetaling - kun ferie`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(17.januar, 31.januar)) - håndterInntektsmelding(1.januar,) + håndterInntektsmelding(1.januar) generasjoner { assertEquals(2, size) 0.generasjon { @@ -924,7 +1049,12 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { fun `får riktig vilkår per periode ved revurdering av siste periode`() { nyttVedtak(1.januar, 31.januar) forlengVedtak(1.februar, 28.februar) - håndterOverstyrTidslinje((27.februar til 28.februar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((27.februar til 28.februar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelserTilGodkjenning() generasjoner { @@ -932,7 +1062,13 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { assertEquals(2, size) beregnetPeriode(0).assertAldersvilkår(true, 26) beregnetPeriode(1).assertAldersvilkår(true, 25) - beregnetPeriode(0).assertSykepengedagerVilkår(29, 219, 1.januar(2019), 1.januar, true) + beregnetPeriode(0).assertSykepengedagerVilkår( + 29, + 219, + 1.januar(2019), + 1.januar, + true + ) beregnetPeriode(1).assertSykepengedagerVilkår(11, 237, 28.desember, 1.januar, true) } 1.generasjon { @@ -947,17 +1083,28 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { fun `får riktig vilkår per periode ved revurdering av første periode`() { nyttVedtak(1.januar, 31.januar) forlengVedtak(1.februar, 28.februar) - håndterOverstyrTidslinje((30.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((30.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelserTilGodkjenning() generasjoner { 0.generasjon { - uberegnetPeriode(0) medTilstand UtbetaltVenterPåAnnenPeriode + uberegnetPeriode(0) medTilstand UtbetaltVenterPåAnnenPeriode beregnetPeriode(1).assertAldersvilkår(true, 25) // Revurdering av tidligere periode medfører at alle perioder berørt av revurderingen deler den samme utbetalingen, og derfor ender opp med samme // gjenstående dager, forbrukte dager og maksdato. Kan muligens skrives om i modellen slik at disse tallene kan fiskes ut fra utbetalingen gitt en // periode - beregnetPeriode(1).assertSykepengedagerVilkår(9, 239, 1.januar(2019), 1.januar, true) + beregnetPeriode(1).assertSykepengedagerVilkår( + 9, + 239, + 1.januar(2019), + 1.januar, + true + ) } 1.generasjon { beregnetPeriode(0).assertSykepengedagerVilkår(31, 217, 28.desember, 1.januar, true) @@ -977,8 +1124,14 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { generasjoner { 0.generasjon { assertEquals(1, size) - assertEquals(0, this.perioder.first().sammenslåttTidslinje[16].utbetalingsinfo!!.arbeidsgiverbeløp) - assertEquals(2161, this.perioder.first().sammenslåttTidslinje[16].utbetalingsinfo!!.personbeløp) + assertEquals( + 0, + this.perioder.first().sammenslåttTidslinje[16].utbetalingsinfo!!.arbeidsgiverbeløp + ) + assertEquals( + 2161, + this.perioder.first().sammenslåttTidslinje[16].utbetalingsinfo!!.personbeløp + ) assertEquals(0, beregnetPeriode(0).utbetaling.arbeidsgiverNettoBeløp) assertEquals(23771, beregnetPeriode(0).utbetaling.personNettoBeløp) } @@ -1032,7 +1185,7 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { } } - håndterInntektsmelding(1.januar,) + håndterInntektsmelding(1.januar) generasjoner { 0.generasjon { assertEquals(2, size) @@ -1120,7 +1273,18 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { fun `revurdering av tidligere skjæringstidspunkt - opphører refusjon som treffer flere perioder`() { nyttVedtak(1.januar, 31.januar) forlengVedtak(1.februar, 28.februar) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT, "", null, listOf(Triple(1.januar, null, INGEN))))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT, + "", + null, + listOf(Triple(1.januar, null, INGEN)) + ) + ) + ) håndterYtelserTilUtbetalt() håndterYtelserTilUtbetalt() @@ -1203,8 +1367,16 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { @Test fun `En arbeidsgiver korrigerer inn litt mer ferie i ferien sin`() { nyeVedtak(1.januar, 31.januar, a1 to 1, a2 to 1) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Ferie(1.februar, 28.februar), orgnummer = a1) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Ferie(1.februar, 27.februar), orgnummer = a2) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + Ferie(1.februar, 28.februar), + orgnummer = a1 + ) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + Ferie(1.februar, 27.februar), + orgnummer = a2 + ) håndterYtelser() håndterUtbetalingsgodkjenning() @@ -1214,7 +1386,11 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { håndterUtbetalingsgodkjenning() håndterUtbetalt() - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Ferie(1.februar, 28.februar), orgnummer = a2) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + Ferie(1.februar, 28.februar), + orgnummer = a2 + ) håndterYtelser() håndterUtbetalingsgodkjenning() @@ -1249,7 +1425,10 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { håndterYtelserTilGodkjenning() - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(31.januar, Dagtype.Feriedag)), orgnummer = a1) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(31.januar, Dagtype.Feriedag)), + orgnummer = a1 + ) håndterYtelserTilGodkjenning() generasjoner(a1) { @@ -1281,7 +1460,10 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { @Test fun `lage generasjoner når a2 er i Avventer historikk revurdering og har blitt tildelt utbetaling`() { nyeVedtak(1.januar, 31.januar, a1 to 1, a2 to 1) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Dagtype.Feriedag)), orgnummer = a1) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(17.januar, Dagtype.Feriedag)), + orgnummer = a1 + ) håndterYtelserTilUtbetalt() generasjoner(a1) { 0.generasjon { @@ -1302,7 +1484,10 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { nyeVedtak(1.januar, 31.januar, a1 to 1, a2 to 1) forlengVedtak(1.februar, 28.februar, a1, a2) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Dagtype.Feriedag)), orgnummer = a1) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(17.januar, Dagtype.Feriedag)), + orgnummer = a1 + ) håndterYtelser() generasjoner(a1) { @@ -1384,7 +1569,12 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { @Test fun `revurdering til kun ferie`() { nyttVedtak(1.januar, 31.januar) - håndterOverstyrTidslinje((17.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((17.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelserTilUtbetalt() generasjoner { @@ -1855,22 +2045,34 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { val søknad = håndterSøknad(Sykdom(4.januar, 20.januar, 100.prosent)) val im = håndterInntektsmelding(listOf(4.januar til 19.januar)) val overstyring = UUID.randomUUID() - håndterOverstyrTidslinje(4.januar.til(19.januar).map { ManuellOverskrivingDag(it, Dagtype.SykedagNav, 100) }, meldingsreferanseId = overstyring) + håndterOverstyrTidslinje( + 4.januar.til(19.januar).map { ManuellOverskrivingDag(it, Dagtype.SykedagNav, 100) }, + meldingsreferanseId = overstyring + ) håndterVilkårsgrunnlagTilUtbetalt() generasjoner { assertEquals(3, size) 0.generasjon { assertEquals(1, size) - beregnetPeriode(0) er Utbetalingstatus.Utbetalt avType UTBETALING fra (4.januar til 20.januar) medTilstand Utbetalt medHendelser setOf(søknad, im, overstyring) + beregnetPeriode(0) er Utbetalingstatus.Utbetalt avType UTBETALING fra (4.januar til 20.januar) medTilstand Utbetalt medHendelser setOf( + søknad, + im, + overstyring + ) } 1.generasjon { assertEquals(1, size) - uberegnetPeriode(0) fra 4.januar til 20.januar medTilstand IngenUtbetaling medHendelser setOf(søknad, im) + uberegnetPeriode(0) fra 4.januar til 20.januar medTilstand IngenUtbetaling medHendelser setOf( + søknad, + im + ) } 2.generasjon { assertEquals(1, size) - uberegnetPeriode(0) fra 4.januar til 20.januar medTilstand IngenUtbetaling medHendelser setOf(søknad) + uberegnetPeriode(0) fra 4.januar til 20.januar medTilstand IngenUtbetaling medHendelser setOf( + søknad + ) } } } @@ -2008,7 +2210,10 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { håndterVilkårsgrunnlagTilGodkjenning() håndterUtbetalingsgodkjenning() - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Søknad.Søknadsperiode.Arbeid(1.februar, 28.februar)) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + Søknad.Søknadsperiode.Arbeid(1.februar, 28.februar) + ) nyttVedtak(2.mars, 31.mars, vedtaksperiode = 3) @@ -2035,8 +2240,8 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { @Test fun `bygge generasjon mens periode er i Avventer historikk og forrige arbeidsgiver er utbetalt`() { - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent) , orgnummer = a1) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent) , orgnummer = a2) + håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) + håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a2) håndterInntektsmelding(1.januar, orgnummer = a1) håndterInntektsmelding(1.januar, orgnummer = a2) håndterVilkårsgrunnlag(arbeidsgivere = listOf(a1 to INNTEKT, a2 to INNTEKT)) @@ -2074,7 +2279,10 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { } } - private fun BeregnetPeriode.assertAldersvilkår(expectedOppfylt: Boolean, expectedAlderSisteSykedag: Int) { + private fun BeregnetPeriode.assertAldersvilkår( + expectedOppfylt: Boolean, + expectedAlderSisteSykedag: Int + ) { assertEquals(expectedOppfylt, periodevilkår.alder.oppfylt) assertEquals(expectedAlderSisteSykedag, periodevilkår.alder.alderSisteSykedag) } @@ -2128,6 +2336,7 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { assertEquals(antall, sammenslåttTidslinje.size) return this } + infix fun T.harTidslinje(dager: Pair): T { val (periode, dagtype) = dager val periodeUtenHelg = periode.filterNot { it.erHelg() } @@ -2186,18 +2395,28 @@ internal class SpeilBehandlingerBuilderTest : AbstractE2ETest() { assertEquals(periode.endInclusive, this.tom) return this } + infix fun T.fra(fom: LocalDate): T { assertEquals(fom, this.fom) return this } + infix fun T.til(tom: LocalDate): T { assertEquals(tom, this.tom) return this } } - private fun generasjoner(organisasjonsnummer: String = a1, block: Arbeidsgivergenerasjoner.() -> Unit = {}) { + private fun generasjoner( + organisasjonsnummer: String = a1, + block: Arbeidsgivergenerasjoner.() -> Unit = {} + ) { val d = speilApi() - Arbeidsgivergenerasjoner(organisasjonsnummer, d.vilkårsgrunnlag, d.arbeidsgivere.singleOrNull { it.organisasjonsnummer == organisasjonsnummer }?.generasjoner ?: emptyList()).apply(block) + Arbeidsgivergenerasjoner( + organisasjonsnummer, + d.vilkårsgrunnlag, + d.arbeidsgivere.singleOrNull { it.organisasjonsnummer == organisasjonsnummer }?.generasjoner + ?: emptyList() + ).apply(block) } } diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBuilderFlereAGTest.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBuilderFlereAGTest.kt index bbed92aa69..d869e85524 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBuilderFlereAGTest.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBuilderFlereAGTest.kt @@ -56,7 +56,8 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { val perioder = speilJson.arbeidsgivere.single { it.organisasjonsnummer == a2 }.ghostPerioder - val spleisVilkårsgrunnlagId = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId + val spleisVilkårsgrunnlagId = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId assertEquals(1, perioder.size) val actual = perioder.first() val expected = GhostPeriodeDTO( @@ -76,7 +77,11 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { håndterSøknad(Sykdom(4.januar, 31.januar, 100.prosent), orgnummer = a2) håndterInntektsmelding(1.januar, orgnummer = a1) - håndterInntektsmelding(listOf(4.januar til 19.januar), beregnetInntekt = 5000.månedlig, orgnummer = a2) + håndterInntektsmelding( + listOf(4.januar til 19.januar), + beregnetInntekt = 5000.månedlig, + orgnummer = a2 + ) håndterVilkårsgrunnlag( inntekter = listOf(a1 to INNTEKT, a2 to 5000.månedlig, a3 to 10000.månedlig), @@ -85,7 +90,8 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { håndterYtelserTilGodkjenning() val speilJson1 = speilApi() - val spleisVilkårsgrunnlagId = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId + val spleisVilkårsgrunnlagId = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId speilJson1.arbeidsgivere.single { it.organisasjonsnummer == a1 }.ghostPerioder.also { ghostPerioder -> assertEquals(1, ghostPerioder.size) @@ -134,13 +140,27 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { @Test fun `sender med ghost tidslinjer til speil med flere arbeidsgivere ulik skjæringstidspunkt`() { - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Arbeid(25.januar, 31.januar), orgnummer = a1) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Arbeid(25.januar, 31.januar), + orgnummer = a1 + ) håndterSøknad(Sykdom(1.januar, 24.januar, 100.prosent), orgnummer = a2) håndterSøknad(Sykdom(29.januar, 31.januar, 100.prosent), orgnummer = a2) håndterInntektsmelding(1.januar, orgnummer = a1, vedtaksperiode = 1) - håndterInntektsmelding(1.januar, beregnetInntekt = 5000.månedlig, orgnummer = a2, vedtaksperiode = 1) - håndterInntektsmelding(29.januar, beregnetInntekt = 5000.månedlig, orgnummer = a2, vedtaksperiode = 2) + håndterInntektsmelding( + 1.januar, + beregnetInntekt = 5000.månedlig, + orgnummer = a2, + vedtaksperiode = 1 + ) + håndterInntektsmelding( + 29.januar, + beregnetInntekt = 5000.månedlig, + orgnummer = a2, + vedtaksperiode = 2 + ) håndterVilkårsgrunnlag( inntekter = listOf(a1 to INNTEKT, a2 to 5000.månedlig, a3 to 10000.månedlig), @@ -162,7 +182,8 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { håndterUtbetalingsgodkjenning() val speilJson1 = speilApi() - val spleisVilkårsgrunnlagId = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId + val spleisVilkårsgrunnlagId = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId speilJson1.arbeidsgivere.single { it.organisasjonsnummer == a1 }.ghostPerioder.also { ghostPerioder -> assertEquals(0, ghostPerioder.size) @@ -197,8 +218,12 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { håndterYtelserTilGodkjenning() val speilJson = speilApi() - assertEquals(emptyList(), speilJson.arbeidsgivere.single { it.organisasjonsnummer == a1 }.ghostPerioder) - val spleisVilkårsgrunnlagId = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.februar }.vilkårsgrunnlagId + assertEquals( + emptyList(), + speilJson.arbeidsgivere.single { it.organisasjonsnummer == a1 }.ghostPerioder + ) + val spleisVilkårsgrunnlagId = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.februar }.vilkårsgrunnlagId val perioder = speilJson.arbeidsgivere.find { it.organisasjonsnummer == a2 }?.ghostPerioder assertEquals(1, perioder?.size) val actual = perioder!!.first() @@ -216,7 +241,11 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { @Test fun `skal ikke lage ghosts for gamle arbeidsgivere`() { - håndterSøknad(Sykdom(1.januar(2017), 20.januar(2017), 100.prosent), sendtTilNAV = 20.januar(2017).atStartOfDay(), orgnummer = a3) + håndterSøknad( + Sykdom(1.januar(2017), 20.januar(2017), 100.prosent), + sendtTilNAV = 20.januar(2017).atStartOfDay(), + orgnummer = a3 + ) håndterInntektsmelding(1.januar(2017), orgnummer = a3) håndterVilkårsgrunnlag(arbeidsgivere = listOf(a3 to INNTEKT)) håndterYtelserTilUtbetalt() @@ -227,8 +256,12 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { håndterYtelserTilGodkjenning() val speilJson = speilApi() - assertEquals(emptyList(), speilJson.arbeidsgivere.single { it.organisasjonsnummer == a1 }.ghostPerioder) - val spleisVilkårsgrunnlagId = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId + assertEquals( + emptyList(), + speilJson.arbeidsgivere.single { it.organisasjonsnummer == a1 }.ghostPerioder + ) + val spleisVilkårsgrunnlagId = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId val perioder = speilJson.arbeidsgivere.single { it.organisasjonsnummer == a2 }.ghostPerioder assertEquals(1, perioder.size) val actual = perioder.first() @@ -242,7 +275,10 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { ) assertEquals(expected, actual) - assertEquals(emptyList(), speilJson.arbeidsgivere.single { it.organisasjonsnummer == a3 }.ghostPerioder) + assertEquals( + emptyList(), + speilJson.arbeidsgivere.single { it.organisasjonsnummer == a3 }.ghostPerioder + ) } @Test @@ -258,7 +294,8 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { ) val perioder = speilJson.arbeidsgivere.find { it.organisasjonsnummer == a2 }?.ghostPerioder - val spleisVilkårsgrunnlagId = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 3.januar }.vilkårsgrunnlagId + val spleisVilkårsgrunnlagId = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 3.januar }.vilkårsgrunnlagId assertEquals(1, perioder?.size) val actual = perioder!!.first() @@ -283,7 +320,8 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { ) håndterYtelserTilGodkjenning() val personDto = speilApi() - val ghostpølser = personDto.arbeidsgivere.single { it.organisasjonsnummer == a1 }.ghostPerioder + val ghostpølser = + personDto.arbeidsgivere.single { it.organisasjonsnummer == a1 }.ghostPerioder assertEquals(0, ghostpølser.size) } @@ -294,11 +332,15 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { håndterVilkårsgrunnlag(arbeidsgivere = listOf(a1 to INNTEKT, a2 to 1000.månedlig)) håndterYtelserTilGodkjenning() - håndterOverstyrArbeidsforhold(1.januar, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + 1.januar, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring")) + ) håndterYtelserTilGodkjenning() val personDto = speilApi() - val vilkårsgrunnlagId = (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val vilkårsgrunnlagId = + (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId val vilkårsgrunnlag = personDto.vilkårsgrunnlag[vilkårsgrunnlagId] assertEquals(listOf(a1, a2), vilkårsgrunnlag?.inntekter?.map { it.organisasjonsnummer }) @@ -333,11 +375,15 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { ) håndterYtelserTilGodkjenning() - håndterOverstyrArbeidsforhold(1.januar, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + 1.januar, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring")) + ) håndterYtelserTilGodkjenning() val personDto = speilApi() - val vilkårsgrunnlagId = (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val vilkårsgrunnlagId = + (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId val vilkårsgrunnlag = personDto.vilkårsgrunnlag[vilkårsgrunnlagId] assertEquals(listOf(a1, a2), vilkårsgrunnlag?.inntekter?.map { it.organisasjonsnummer }) @@ -353,11 +399,15 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { ) håndterYtelserTilGodkjenning() val skjæringstidspunkt = 1.januar - håndterOverstyrArbeidsforhold(skjæringstidspunkt, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + skjæringstidspunkt, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring")) + ) håndterYtelserTilGodkjenning() val personDto = speilApi() - val vilkårsgrunnlagId = (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val vilkårsgrunnlagId = + (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId val vilkårsgrunnlag = personDto.vilkårsgrunnlag[vilkårsgrunnlagId] val forventet = listOf( @@ -412,12 +462,16 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { håndterInntektsmelding(1.januar, orgnummer = a1) håndterVilkårsgrunnlag(arbeidsgivere = listOf(a1 to INNTEKT, a2 to 10000.månedlig)) håndterYtelserTilGodkjenning() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a2, 9000.månedlig, ""))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a2, 9000.månedlig, "")) + ) håndterYtelserTilGodkjenning() val speilJson = speilApi() val perioder = speilJson.arbeidsgivere.single { it.organisasjonsnummer == a2 }.ghostPerioder - val spleisVilkårsgrunnlagId = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId + val spleisVilkårsgrunnlagId = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId assertEquals(1, perioder.size) val actual = perioder.first() val expected = GhostPeriodeDTO( @@ -447,7 +501,8 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { assertEquals(1, arbeidsgiverA1?.generasjoner?.single()?.perioder?.size) val beregnetPeriode = arbeidsgiverA1?.generasjoner?.single()?.perioder?.single() assertInstanceOf(BeregnetPeriode::class.java, beregnetPeriode) - val spleisVilkårsgrunnlagId = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId + val spleisVilkårsgrunnlagId = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId val arbeidsgiverA2 = speilJson.arbeidsgivere.singleOrNull { it.organisasjonsnummer == a2 } assertEquals(0, arbeidsgiverA2?.generasjoner?.size) val perioder = arbeidsgiverA2?.ghostPerioder @@ -475,7 +530,8 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { håndterUtbetalingsgodkjenning(utbetalingGodkjent = false) val personDto = speilApi() - val ghostPerioder = personDto.arbeidsgivere.singleOrNull { it.organisasjonsnummer == a2 }?.ghostPerioder + val ghostPerioder = + personDto.arbeidsgivere.singleOrNull { it.organisasjonsnummer == a2 }?.ghostPerioder assertNull(ghostPerioder) } @@ -485,15 +541,22 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { håndterInntektsmelding(1.januar, orgnummer = a1) håndterVilkårsgrunnlag(arbeidsgivere = listOf(a1 to INNTEKT, a2 to 10000.månedlig)) håndterYtelserTilGodkjenning() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, 30000.månedlig, ""))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, 30000.månedlig, "")) + ) håndterYtelserTilGodkjenning() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a2, 9000.månedlig, ""))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a2, 9000.månedlig, "")) + ) håndterYtelserTilGodkjenning() val speilJson = speilApi() val perioder = speilJson.arbeidsgivere.single { it.organisasjonsnummer == a2 }.ghostPerioder - val spleisVilkårsgrunnlagId = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId + val spleisVilkårsgrunnlagId = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId assertEquals(1, perioder.size) val actual = perioder.first() val expected = GhostPeriodeDTO( @@ -526,7 +589,8 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { assertEquals(2, perioder.size) val skjæringstidspunkt = 1.januar - val spleisVilkårsgrunnlagId = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId + val spleisVilkårsgrunnlagId = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId perioder[0].also { actual -> val expected = GhostPeriodeDTO( id = actual.id, @@ -556,25 +620,31 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { nyeVedtak(1.januar, 31.januar, a1 to 1, a2 to 1) val personDto = speilApi() - val speilVilkårsgrunnlagIdForAG1 = (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId - val speilVilkårsgrunnlagIdForAG2 = (personDto.arbeidsgivere.last().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId - val vilkårsgrunnlag = personDto.vilkårsgrunnlag[speilVilkårsgrunnlagIdForAG1] as? SpleisVilkårsgrunnlag - val vilkårsgrunnlag2 = personDto.vilkårsgrunnlag[speilVilkårsgrunnlagIdForAG2] as? SpleisVilkårsgrunnlag + val speilVilkårsgrunnlagIdForAG1 = + (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val speilVilkårsgrunnlagIdForAG2 = + (personDto.arbeidsgivere.last().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val vilkårsgrunnlag = + personDto.vilkårsgrunnlag[speilVilkårsgrunnlagIdForAG1] as? SpleisVilkårsgrunnlag + val vilkårsgrunnlag2 = + personDto.vilkårsgrunnlag[speilVilkårsgrunnlagIdForAG2] as? SpleisVilkårsgrunnlag assertEquals(vilkårsgrunnlag, vilkårsgrunnlag2) assertTrue(vilkårsgrunnlag!!.arbeidsgiverrefusjoner.isNotEmpty()) - val arbeidsgiverrefusjonForAG1 = vilkårsgrunnlag.arbeidsgiverrefusjoner.find { it.arbeidsgiver == a1 }!! - val arbeidsgiverrefusjonForAG2 = vilkårsgrunnlag.arbeidsgiverrefusjoner.find { it.arbeidsgiver == a2 }!! + val arbeidsgiverrefusjonForAG1 = + vilkårsgrunnlag.arbeidsgiverrefusjoner.find { it.arbeidsgiver == a1 }!! + val arbeidsgiverrefusjonForAG2 = + vilkårsgrunnlag.arbeidsgiverrefusjoner.find { it.arbeidsgiver == a2 }!! val refusjonsopplysningerForAG1 = arbeidsgiverrefusjonForAG1.refusjonsopplysninger.single() val refusjonsopplysningerForAG2 = arbeidsgiverrefusjonForAG2.refusjonsopplysninger.single() assertEquals(1.januar, refusjonsopplysningerForAG1.fom) assertEquals(null, refusjonsopplysningerForAG1.tom) - assertEquals(48000.månedlig,refusjonsopplysningerForAG1.beløp.månedlig) + assertEquals(48000.månedlig, refusjonsopplysningerForAG1.beløp.månedlig) assertEquals(1.januar, refusjonsopplysningerForAG2.fom) assertEquals(null, refusjonsopplysningerForAG2.tom) - assertEquals(48000.månedlig,refusjonsopplysningerForAG2.beløp.månedlig) + assertEquals(48000.månedlig, refusjonsopplysningerForAG2.beløp.månedlig) } @Test @@ -587,14 +657,21 @@ internal class SpeilBuilderFlereAGTest : AbstractE2ETest() { håndterInntektsmelding(1.januar, orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterInntektsmelding(listOf(17.januar til 26.januar, 1.februar til 6.februar), orgnummer = a2) - håndterInntektsmelding(listOf(17.januar til 26.januar, 1.februar til 6.februar), orgnummer = a2) + håndterInntektsmelding( + listOf(17.januar til 26.januar, 1.februar til 6.februar), + orgnummer = a2 + ) + håndterInntektsmelding( + listOf(17.januar til 26.januar, 1.februar til 6.februar), + orgnummer = a2 + ) håndterVilkårsgrunnlag(arbeidsgivere = listOf(a1 to INNTEKT, a2 to INNTEKT)) håndterYtelserTilGodkjenning() val speilJson = speilApi() - val spleisVilkårsgrunnlagId = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId + val spleisVilkårsgrunnlagId = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.single { it.skjæringstidspunkt == 1.januar }.vilkårsgrunnlagId speilJson.arbeidsgivere.single { it.organisasjonsnummer == a1 }.ghostPerioder.also { perioder -> assertEquals(2, perioder.size) diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBuilderTest.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBuilderTest.kt index acc2f85a2b..8b30d2b661 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBuilderTest.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/SpeilBuilderTest.kt @@ -54,49 +54,91 @@ internal class SpeilBuilderTest : AbstractE2ETest() { // Totalgraden er her 15.81748468089681 // På avslagsdager tar vi toInt() -> 15 // Dette er nok fordi 19.99 skal gi avslag på minumum sykdomsgrad, og da er det rart å vise 20% i Speil - speilApi().assertTotalgrad(15, 17.januar til 19.januar, 22.januar til 26.januar, 29.januar til 31.januar) + speilApi().assertTotalgrad( + 15, + 17.januar til 19.januar, + 22.januar til 26.januar, + 29.januar til 31.januar + ) håndterMinimumSykdomsgradsvurderingMelding(perioderMedMinimumSykdomsgradVurdertOK = setOf(17.januar til 31.januar)) håndterYtelser() // På utbetalingsdager tar vi toRoundInt() -> 16 - speilApi().assertTotalgrad(16, 17.januar til 19.januar, 22.januar til 26.januar, 29.januar til 31.januar) + speilApi().assertTotalgrad( + 16, + 17.januar til 19.januar, + 22.januar til 26.januar, + 29.januar til 31.januar + ) } private fun PersonDTO.assertTotalgrad(forventet: Int, vararg perioder: Periode) { val totalgrader = (arbeidsgivere[0] - .generasjoner[0] - .perioder[0] as BeregnetPeriode) - .sammenslåttTidslinje - .filter { sammenslåttDag -> perioder.any { sammenslåttDag.dagen in it } } - .map { it.utbetalingsinfo?.totalGrad } - assertTrue(totalgrader.all { it == forventet }) { "Her er det noe som ikke er $forventet: $totalgrader"} + .generasjoner[0] + .perioder[0] as BeregnetPeriode) + .sammenslåttTidslinje + .filter { sammenslåttDag -> perioder.any { sammenslåttDag.dagen in it } } + .map { it.utbetalingsinfo?.totalGrad } + assertTrue(totalgrader.all { it == forventet }) { "Her er det noe som ikke er $forventet: $totalgrader" } } @Test fun `lager NyeInntektsforhold-pølse for tilkommen inntekt`() { nyttVedtak(1.januar, 31.januar) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), tilkomneInntekter = listOf(TilkommenInntekt(fom = 1.februar, tom = 28.februar, orgnummer = "a24", råttBeløp = 10000))) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + tilkomneInntekter = listOf( + TilkommenInntekt( + fom = 1.februar, + tom = 28.februar, + orgnummer = "a24", + råttBeløp = 10000 + ) + ) + ) håndterYtelser() - val nyeInntektsforholdPølse = speilApi().arbeidsgivere.find { it.organisasjonsnummer == "a24" }?.nyeInntektsforhold!!.single() - assertEquals(1.februar til 28.februar, nyeInntektsforholdPølse.fom til nyeInntektsforholdPølse.tom) + val nyeInntektsforholdPølse = + speilApi().arbeidsgivere.find { it.organisasjonsnummer == "a24" }?.nyeInntektsforhold!!.single() + assertEquals( + 1.februar til 28.februar, + nyeInntektsforholdPølse.fom til nyeInntektsforholdPølse.tom + ) assertEquals(1.januar, nyeInntektsforholdPølse.skjæringstidspunkt) assertEquals(10000.0 / 20, nyeInntektsforholdPølse.dagligBeløp) assertEquals(10833, nyeInntektsforholdPølse.månedligBeløp.toInt()) - assertEquals(emptyList(), speilApi().arbeidsgivere.find { it.organisasjonsnummer == "a24" }?.ghostPerioder) + assertEquals( + emptyList(), + speilApi().arbeidsgivere.find { it.organisasjonsnummer == "a24" }?.ghostPerioder + ) } @Test fun `kan lage NyeInntektsforhold-pølse med peker til riktig vilkårsgrunnlag før noe er utbetalt`() { tilGodkjenning(1.januar, 31.januar) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), tilkomneInntekter = listOf(TilkommenInntekt(fom = 1.februar, tom = 28.februar, orgnummer = "a24", råttBeløp = 10000))) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + tilkomneInntekter = listOf( + TilkommenInntekt( + fom = 1.februar, + tom = 28.februar, + orgnummer = "a24", + råttBeløp = 10000 + ) + ) + ) - val nyeInntektsforholdPølser = speilApi().arbeidsgivere.find { it.organisasjonsnummer == "a24" }?.nyeInntektsforhold!!.single() - assertEquals(1.februar til 28.februar, nyeInntektsforholdPølser.fom til nyeInntektsforholdPølser.tom) + val nyeInntektsforholdPølser = + speilApi().arbeidsgivere.find { it.organisasjonsnummer == "a24" }?.nyeInntektsforhold!!.single() + assertEquals( + 1.februar til 28.februar, + nyeInntektsforholdPølser.fom til nyeInntektsforholdPølser.tom + ) - val førstegangs = speilApi().arbeidsgivere.find { it.organisasjonsnummer == "a1" }!!.generasjoner.single().perioder.find { it.fom == 1.januar } as BeregnetPeriode + val førstegangs = + speilApi().arbeidsgivere.find { it.organisasjonsnummer == "a1" }!!.generasjoner.single().perioder.find { it.fom == 1.januar } as BeregnetPeriode val vilkårsgrunnlagIdFørstegangssøknad = førstegangs.vilkårsgrunnlagId val vilkårsgrunnlag = speilApi().vilkårsgrunnlag.keys assertEquals(1, vilkårsgrunnlag.size) @@ -120,12 +162,16 @@ internal class SpeilBuilderTest : AbstractE2ETest() { }, meldingsreferanseId = id) håndterYtelserTilGodkjenning() val speilJson = speilApi() - val tidslinje = speilJson.arbeidsgivere.single().generasjoner.single().perioder.single().sammenslåttTidslinje + val tidslinje = + speilJson.arbeidsgivere.single().generasjoner.single().perioder.single().sammenslåttTidslinje val forventetFørstedag = SammenslåttDag( dagen = 1.januar, sykdomstidslinjedagtype = SykdomstidslinjedagType.SYKEDAG_NAV, utbetalingstidslinjedagtype = UtbetalingstidslinjedagType.ArbeidsgiverperiodeDag, - kilde = Sykdomstidslinjedag.SykdomstidslinjedagKilde(SykdomstidslinjedagKildetype.Saksbehandler, id), + kilde = Sykdomstidslinjedag.SykdomstidslinjedagKilde( + SykdomstidslinjedagKildetype.Saksbehandler, + id + ), grad = 100, utbetalingsinfo = Utbetalingsinfo( personbeløp = 0, @@ -139,7 +185,7 @@ internal class SpeilBuilderTest : AbstractE2ETest() { @Test fun `nav skal ikke utbetale agp for kort periode likevel - perioden går så til AUU`() { håndterSøknad(1.januar til 16.januar) - håndterInntektsmelding(1.januar, begrunnelseForReduksjonEllerIkkeUtbetalt = "ja",) + håndterInntektsmelding(1.januar, begrunnelseForReduksjonEllerIkkeUtbetalt = "ja") håndterVilkårsgrunnlag() håndterYtelserTilGodkjenning() val idOverstyring = UUID.randomUUID() @@ -154,7 +200,10 @@ internal class SpeilBuilderTest : AbstractE2ETest() { dagen = 1.januar, sykdomstidslinjedagtype = SykdomstidslinjedagType.SYKEDAG, utbetalingstidslinjedagtype = UtbetalingstidslinjedagType.ArbeidsgiverperiodeDag, // ingen utbetalingstidslinje - kilde = Sykdomstidslinjedag.SykdomstidslinjedagKilde(SykdomstidslinjedagKildetype.Saksbehandler, idOverstyring), + kilde = Sykdomstidslinjedag.SykdomstidslinjedagKilde( + SykdomstidslinjedagKildetype.Saksbehandler, + idOverstyring + ), grad = 100, utbetalingsinfo = null ) @@ -164,7 +213,7 @@ internal class SpeilBuilderTest : AbstractE2ETest() { @Test fun `Viser inntektsgrunnlag for arbeidsforhold som startet innen 3 måneder før skjæringstidspunktet, selvom vi ikke har inntekt`() { håndterSøknad(Sykdom(1.januar, 15.mars, 100.prosent), orgnummer = a1) - håndterInntektsmelding(1.januar, orgnummer = a1,) + håndterInntektsmelding(1.januar, orgnummer = a1) håndterVilkårsgrunnlag( inntekter = listOf(a1 to 31000.månedlig), arbeidsforhold = listOf(a1 to EPOCH, a2 to 25.november(2017)) @@ -175,10 +224,14 @@ internal class SpeilBuilderTest : AbstractE2ETest() { val personDto = speilApi() - assertEquals(listOf(a1, a2).map(String::toString), personDto.arbeidsgivere.map { it.organisasjonsnummer }) + assertEquals( + listOf(a1, a2).map(String::toString), + personDto.arbeidsgivere.map { it.organisasjonsnummer }) - val vilkårsgrunnlagId = (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId - val arbeidsgiverInntektA2 = personDto.vilkårsgrunnlag[vilkårsgrunnlagId]?.inntekter?.first { it.organisasjonsnummer == a2 } + val vilkårsgrunnlagId = + (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val arbeidsgiverInntektA2 = + personDto.vilkårsgrunnlag[vilkårsgrunnlagId]?.inntekter?.first { it.organisasjonsnummer == a2 } assertEquals(0.0, arbeidsgiverInntektA2?.omregnetÅrsinntekt?.beløp) assertEquals(Inntektkilde.IkkeRapportert, arbeidsgiverInntektA2?.omregnetÅrsinntekt?.kilde) @@ -189,11 +242,13 @@ internal class SpeilBuilderTest : AbstractE2ETest() { createOvergangFraInfotrygdPerson() forlengVedtak(1.mars, 31.mars) - val infotrygdVilkårsgrunnlag = dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.first { it.skjæringstidspunkt == 1.januar } + val infotrygdVilkårsgrunnlag = + dto().vilkårsgrunnlagHistorikk.historikk.first().vilkårsgrunnlag.first { it.skjæringstidspunkt == 1.januar } val infotrygdVilkårsgrunnlagId = infotrygdVilkårsgrunnlag.vilkårsgrunnlagId val personDto = speilApi() - val speilVilkårsgrunnlagId = (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val speilVilkårsgrunnlagId = + (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId assertEquals(speilVilkårsgrunnlagId, infotrygdVilkårsgrunnlagId) } @@ -213,7 +268,8 @@ internal class SpeilBuilderTest : AbstractE2ETest() { fun `beregnet periode peker på et vilkårsgrunnlag`() { nyttVedtak(1.januar, 31.januar) val personDto = speilApi() - val speilVilkårsgrunnlagId = (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val speilVilkårsgrunnlagId = + (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId val vilkårsgrunnlag = personDto.vilkårsgrunnlag[speilVilkårsgrunnlagId] assertTrue(vilkårsgrunnlag is SpleisVilkårsgrunnlag) } @@ -222,8 +278,10 @@ internal class SpeilBuilderTest : AbstractE2ETest() { fun `refusjon ligger på vilkårsgrunnlaget`() { nyttVedtak(1.januar, 31.januar) val personDto = speilApi() - val speilVilkårsgrunnlagId = (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId - val vilkårsgrunnlag = personDto.vilkårsgrunnlag[speilVilkårsgrunnlagId] as? SpleisVilkårsgrunnlag + val speilVilkårsgrunnlagId = + (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val vilkårsgrunnlag = + personDto.vilkårsgrunnlag[speilVilkårsgrunnlagId] as? SpleisVilkårsgrunnlag assertTrue(vilkårsgrunnlag!!.arbeidsgiverrefusjoner.isNotEmpty()) val arbeidsgiverrefusjon = vilkårsgrunnlag.arbeidsgiverrefusjoner.single() assertEquals(a1, arbeidsgiverrefusjon.arbeidsgiver) @@ -231,7 +289,7 @@ internal class SpeilBuilderTest : AbstractE2ETest() { assertEquals(1.januar, refusjonsopplysning.fom) assertEquals(null, refusjonsopplysning.tom) - assertEquals(INNTEKT,refusjonsopplysning.beløp.månedlig) + assertEquals(INNTEKT, refusjonsopplysning.beløp.månedlig) } @Test @@ -239,8 +297,10 @@ internal class SpeilBuilderTest : AbstractE2ETest() { createOvergangFraInfotrygdPerson() forlengVedtak(1.mars, 31.mars) val personDto = speilApi() - val speilVilkårsgrunnlagId = (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId - val vilkårsgrunnlag = personDto.vilkårsgrunnlag[speilVilkårsgrunnlagId] as? InfotrygdVilkårsgrunnlag + val speilVilkårsgrunnlagId = + (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val vilkårsgrunnlag = + personDto.vilkårsgrunnlag[speilVilkårsgrunnlagId] as? InfotrygdVilkårsgrunnlag assertTrue(vilkårsgrunnlag!!.arbeidsgiverrefusjoner.isNotEmpty()) val arbeidsgiverrefusjon = vilkårsgrunnlag.arbeidsgiverrefusjoner.single() assertEquals(a1, arbeidsgiverrefusjon.arbeidsgiver) @@ -256,15 +316,20 @@ internal class SpeilBuilderTest : AbstractE2ETest() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent)) val inntektsmeldingId = håndterInntektsmelding( listOf(1.januar til 16.januar), - refusjon = Inntektsmelding.Refusjon(INNTEKT, null, endringerIRefusjon = listOf( - Inntektsmelding.Refusjon.EndringIRefusjon(INGEN, 1.februar))), + refusjon = Inntektsmelding.Refusjon( + INNTEKT, null, endringerIRefusjon = listOf( + Inntektsmelding.Refusjon.EndringIRefusjon(INGEN, 1.februar) + ) + ), ) håndterVilkårsgrunnlag() håndterYtelserTilGodkjenning() val personDto = speilApi() - val speilVilkårsgrunnlagId = (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId - val vilkårsgrunnlag = personDto.vilkårsgrunnlag[speilVilkårsgrunnlagId] as? SpleisVilkårsgrunnlag + val speilVilkårsgrunnlagId = + (personDto.arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val vilkårsgrunnlag = + personDto.vilkårsgrunnlag[speilVilkårsgrunnlagId] as? SpleisVilkårsgrunnlag assertTrue(vilkårsgrunnlag!!.arbeidsgiverrefusjoner.isNotEmpty()) val arbeidsgiverrefusjon = vilkårsgrunnlag.arbeidsgiverrefusjoner.single() assertEquals(a1, arbeidsgiverrefusjon.arbeidsgiver) @@ -297,15 +362,23 @@ internal class SpeilBuilderTest : AbstractE2ETest() { generasjoner.last().also { eldsteGenerasjon -> assertEquals(1, eldsteGenerasjon.perioder.size) - val vilkårsgrunnlagId = (eldsteGenerasjon.perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val vilkårsgrunnlagId = + (eldsteGenerasjon.perioder.first() as BeregnetPeriode).vilkårsgrunnlagId val vilkårsgrunnlag = speil.vilkårsgrunnlag[vilkårsgrunnlagId] as? SpleisVilkårsgrunnlag - assertEquals(INNTEKT, vilkårsgrunnlag!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.single().beløp.månedlig) + assertEquals( + INNTEKT, + vilkårsgrunnlag!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.single().beløp.månedlig + ) } generasjoner.first().also { nyesteGenerasjon -> assertEquals(1, nyesteGenerasjon.perioder.size) - val vilkårsgrunnlagId = (nyesteGenerasjon.perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val vilkårsgrunnlagId = + (nyesteGenerasjon.perioder.first() as BeregnetPeriode).vilkårsgrunnlagId val vilkårsgrunnlag = speil.vilkårsgrunnlag[vilkårsgrunnlagId] as? SpleisVilkårsgrunnlag - assertEquals(20000.månedlig, vilkårsgrunnlag!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.single().beløp.månedlig) + assertEquals( + 20000.månedlig, + vilkårsgrunnlag!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.single().beløp.månedlig + ) } } @@ -321,15 +394,25 @@ internal class SpeilBuilderTest : AbstractE2ETest() { håndterYtelserTilGodkjent() håndterYtelserTilGodkjenning() - val januarVilkårsgrunnlagId = (speilApi().arbeidsgivere.first().generasjoner.last().perioder.last() as BeregnetPeriode).vilkårsgrunnlagId - val februarVilkårsgrunnlagId = (speilApi().arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId + val januarVilkårsgrunnlagId = + (speilApi().arbeidsgivere.first().generasjoner.last().perioder.last() as BeregnetPeriode).vilkårsgrunnlagId + val februarVilkårsgrunnlagId = + (speilApi().arbeidsgivere.first().generasjoner.first().perioder.first() as BeregnetPeriode).vilkårsgrunnlagId val vilkårsgrunnlag = speilApi().vilkårsgrunnlag - assertEquals(1, vilkårsgrunnlag[januarVilkårsgrunnlagId]!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.size) - assertEquals(2, vilkårsgrunnlag[februarVilkårsgrunnlagId]!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.size) + assertEquals( + 1, + vilkårsgrunnlag[januarVilkårsgrunnlagId]!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.size + ) + assertEquals( + 2, + vilkårsgrunnlag[februarVilkårsgrunnlagId]!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.size + ) - val førsteRefusjonsopplysning = vilkårsgrunnlag[februarVilkårsgrunnlagId]!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.first() - val sisteRefusjonsopplysning = vilkårsgrunnlag[februarVilkårsgrunnlagId]!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.last() + val førsteRefusjonsopplysning = + vilkårsgrunnlag[februarVilkårsgrunnlagId]!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.first() + val sisteRefusjonsopplysning = + vilkårsgrunnlag[februarVilkårsgrunnlagId]!!.arbeidsgiverrefusjoner.single().refusjonsopplysninger.last() assertEquals(1.januar, førsteRefusjonsopplysning.fom) assertEquals(31.januar, førsteRefusjonsopplysning.tom) @@ -343,7 +426,8 @@ internal class SpeilBuilderTest : AbstractE2ETest() { @Test fun `hendelser på uberegnet periode`() { val søknadId = håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent)) - val periode = speilApi().arbeidsgivere.single().generasjoner.single().perioder.single() as UberegnetPeriode + val periode = + speilApi().arbeidsgivere.single().generasjoner.single().perioder.single() as UberegnetPeriode assertEquals(setOf(søknadId), periode.hendelser) } @@ -353,25 +437,41 @@ internal class SpeilBuilderTest : AbstractE2ETest() { val inntektSkatt = 31000.0 * 2 val inntektSkjønnsfastsatt = 31000 * 1.5 håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent)) - håndterInntektsmelding(1.januar, beregnetInntekt = inntektIm.månedlig,) + håndterInntektsmelding(1.januar, beregnetInntekt = inntektIm.månedlig) håndterVilkårsgrunnlag(arbeidsgivere = listOf(a1 to inntektSkatt.månedlig)) håndterYtelserTilGodkjenning() håndterSkjønnsmessigFastsettelse( skjæringstidspunkt = 1.januar, - opplysninger = listOf(OverstyrtArbeidsgiveropplysning(a1, inntektSkjønnsfastsatt.månedlig)) + opplysninger = listOf( + OverstyrtArbeidsgiveropplysning( + a1, + inntektSkjønnsfastsatt.månedlig + ) + ) ) håndterYtelserTilGodkjenning() val personDto = speilApi() - val vilkårsgrunnlagId = (personDto.arbeidsgivere.single().generasjoner.single().perioder.single() as BeregnetPeriode).vilkårsgrunnlagId - val vilkårsgrunnlag = (personDto.vilkårsgrunnlag[vilkårsgrunnlagId] as SpleisVilkårsgrunnlag) + val vilkårsgrunnlagId = + (personDto.arbeidsgivere.single().generasjoner.single().perioder.single() as BeregnetPeriode).vilkårsgrunnlagId + val vilkårsgrunnlag = + (personDto.vilkårsgrunnlag[vilkårsgrunnlagId] as SpleisVilkårsgrunnlag) assertEquals(inntektIm * 12, vilkårsgrunnlag.omregnetÅrsinntekt) assertEquals(inntektSkjønnsfastsatt * 12, vilkårsgrunnlag.beregningsgrunnlag) - assertEquals(inntektSkjønnsfastsatt * 12, vilkårsgrunnlag.inntekter.single().skjønnsmessigFastsatt!!.årlig) + assertEquals( + inntektSkjønnsfastsatt * 12, + vilkårsgrunnlag.inntekter.single().skjønnsmessigFastsatt!!.årlig + ) - assertEquals(inntektSkjønnsfastsatt, vilkårsgrunnlag.inntekter.single().skjønnsmessigFastsatt!!.månedlig) + assertEquals( + inntektSkjønnsfastsatt, + vilkårsgrunnlag.inntekter.single().skjønnsmessigFastsatt!!.månedlig + ) - assertEquals(Inntektkilde.Inntektsmelding.name, vilkårsgrunnlag.inntekter.single().omregnetÅrsinntekt.kilde.name) + assertEquals( + Inntektkilde.Inntektsmelding.name, + vilkårsgrunnlag.inntekter.single().omregnetÅrsinntekt.kilde.name + ) assertEquals(inntektIm * 12, vilkårsgrunnlag.inntekter.single().omregnetÅrsinntekt.beløp) assertEquals(inntektIm, vilkårsgrunnlag.inntekter.single().omregnetÅrsinntekt.månedsbeløp) } @@ -383,18 +483,25 @@ internal class SpeilBuilderTest : AbstractE2ETest() { håndterInntektsmelding(1.januar, orgnummer = a2, beregnetInntekt = 22966.54.månedlig) håndterInntektsmelding(1.januar, orgnummer = a1, beregnetInntekt = 18199.7.månedlig) - håndterVilkårsgrunnlag(arbeidsgivere = listOf(a1 to 18199.7.månedlig, a2 to 22966.54.månedlig)) + håndterVilkårsgrunnlag( + arbeidsgivere = listOf( + a1 to 18199.7.månedlig, + a2 to 22966.54.månedlig + ) + ) håndterYtelser() val personDto = speilApi() - assertEquals(20, + assertEquals( + 20, (personDto .arbeidsgivere[0] .generasjoner[0] .perioder[0] as BeregnetPeriode) .sammenslåttTidslinje[28] .utbetalingsinfo!! - .totalGrad) + .totalGrad + ) } @Test @@ -404,30 +511,58 @@ internal class SpeilBuilderTest : AbstractE2ETest() { håndterInntektsmelding(1.januar, orgnummer = a2, beregnetInntekt = 22966.54.månedlig) håndterInntektsmelding(1.januar, orgnummer = a1, beregnetInntekt = 18199.7.månedlig) - håndterVilkårsgrunnlag(arbeidsgivere = listOf(a1 to 18199.7.månedlig, a2 to 22966.54.månedlig)) + håndterVilkårsgrunnlag( + arbeidsgivere = listOf( + a1 to 18199.7.månedlig, + a2 to 22966.54.månedlig + ) + ) håndterYtelser() val personDto = speilApi() - assertEquals(19, + assertEquals( + 19, (personDto .arbeidsgivere[0] .generasjoner[0] .perioder[0] as BeregnetPeriode) .sammenslåttTidslinje[28] .utbetalingsinfo!! - .totalGrad) + .totalGrad + ) } @Test fun `Skatteinntekt vises som AO`() { håndterSøknad(1.januar til 31.januar) - håndterPåminnelse(tilstand = TilstandType.AVVENTER_INNTEKTSMELDING, tilstandsendringstidspunkt = LocalDateTime.now().minusMonths(4L)) + håndterPåminnelse( + tilstand = TilstandType.AVVENTER_INNTEKTSMELDING, + tilstandsendringstidspunkt = LocalDateTime.now().minusMonths(4L) + ) håndterSykepengegrunnlagForArbeidsgiver( skjæringstidspunkt = 1.januar, skatteinntekter = listOf( - ArbeidsgiverInntekt.MånedligInntekt(desember(2017), 31000.månedlig, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(november(2017), 31000.månedlig, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(oktober(2017), 31000.månedlig, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", "") + ArbeidsgiverInntekt.MånedligInntekt( + desember(2017), + 31000.månedlig, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + november(2017), + 31000.månedlig, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + oktober(2017), + 31000.månedlig, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ) ) ) håndterVilkårsgrunnlag() diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/Spekemat.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/Spekemat.kt index 1b0eaa320e..63c608e6a2 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/Spekemat.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/graphql/Spekemat.kt @@ -14,6 +14,7 @@ class Spekemat : PersonObserver { fun resultat() = SpekematDTO( pakker = arbeidsgivere.mapNotNull { resultat(it.key) } ) + fun resultat(orgnr: String) = arbeidsgivere.getValue(orgnr).pakke().mapTilPølsepakkeDTO(orgnr) private fun List.mapTilPølsepakkeDTO(orgnr: String) = @@ -62,4 +63,4 @@ class Spekemat : PersonObserver { arbeidsgivere.getValue(event.organisasjonsnummer) .oppdaterPølse(event.vedtaksperiodeId, event.behandlingId, Pølsestatus.FORKASTET) } -} \ No newline at end of file +} diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/ArbeidsgiverHendelsefabrikk.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/ArbeidsgiverHendelsefabrikk.kt index 9d27e14fca..cca1d47334 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/ArbeidsgiverHendelsefabrikk.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/ArbeidsgiverHendelsefabrikk.kt @@ -116,7 +116,11 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri arbeidsgiverperioder: List, beregnetInntekt: Inntekt, førsteFraværsdag: LocalDate? = arbeidsgiverperioder.maxOf { it.start }, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), harOpphørAvNaturalytelser: Boolean = false, begrunnelseForReduksjonEllerIkkeUtbetalt: String? = null, id: UUID = UUID.randomUUID(), @@ -141,7 +145,11 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri return inntektsmeldinggenerator() } - internal fun lagSykepengegrunnlagForArbeidsgiver(vedtaksperiodeId: UUID, skjæringstidspunkt: LocalDate, inntekter: List): SykepengegrunnlagForArbeidsgiver { + internal fun lagSykepengegrunnlagForArbeidsgiver( + vedtaksperiodeId: UUID, + skjæringstidspunkt: LocalDate, + inntekter: List + ): SykepengegrunnlagForArbeidsgiver { return SykepengegrunnlagForArbeidsgiver( meldingsreferanseId = UUID.randomUUID(), vedtaksperiodeId = vedtaksperiodeId, @@ -155,7 +163,11 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri arbeidsgiverperioder: List, beregnetInntekt: Inntekt, vedtaksperiodeId: UUID, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), harOpphørAvNaturalytelser: Boolean = false, begrunnelseForReduksjonEllerIkkeUtbetalt: String? = null, id: UUID = UUID.randomUUID(), @@ -172,7 +184,11 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, harOpphørAvNaturalytelser = harOpphørAvNaturalytelser, harFlereInntektsmeldinger = harFlereInntektsmeldinger, - avsendersystem = Inntektsmelding.Avsendersystem.NavPortal(vedtaksperiodeId, LocalDate.EPOCH, true), + avsendersystem = Inntektsmelding.Avsendersystem.NavPortal( + vedtaksperiodeId, + LocalDate.EPOCH, + true + ), mottatt = mottatt ) } @@ -181,7 +197,12 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri } internal fun lagInntektsmeldingReplayUtført(vedtaksperiodeId: UUID) = - InntektsmeldingerReplay(UUID.randomUUID(), organisasjonsnummer, vedtaksperiodeId, emptyList()) + InntektsmeldingerReplay( + UUID.randomUUID(), + organisasjonsnummer, + vedtaksperiodeId, + emptyList() + ) internal fun lagUtbetalingshistorikk( vedtaksperiodeId: UUID, @@ -336,6 +357,7 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri vedtakFattetTidspunkt = vedtakFattetTidspunkt, automatisert = automatisert ) + internal fun lagKanIkkeBehandlesHer( vedtaksperiodeId: UUID, utbetalingId: UUID, @@ -383,7 +405,12 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri meldingsreferanseId = UUID.randomUUID() ) - internal fun lagPåminnelse(vedtaksperiodeId: UUID, tilstand: TilstandType, tilstandsendringstidspunkt: LocalDateTime, reberegning: Boolean = false) = + internal fun lagPåminnelse( + vedtaksperiodeId: UUID, + tilstand: TilstandType, + tilstandsendringstidspunkt: LocalDateTime, + reberegning: Boolean = false + ) = Påminnelse( UUID.randomUUID(), organisasjonsnummer, @@ -419,11 +446,14 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri force = force ) - internal fun lagHåndterOverstyrTidslinje(overstyringsdager: List, meldingsreferanseId: UUID = UUID.randomUUID()) = + internal fun lagHåndterOverstyrTidslinje( + overstyringsdager: List, + meldingsreferanseId: UUID = UUID.randomUUID() + ) = OverstyrTidslinje( meldingsreferanseId = meldingsreferanseId, organisasjonsnummer = organisasjonsnummer, dager = overstyringsdager, opprettet = LocalDateTime.now() ) -} \ No newline at end of file +} diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/Inntekter.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/Inntekter.kt index 71a6d3a5b8..6d6e7faefa 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/Inntekter.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/Inntekter.kt @@ -6,7 +6,8 @@ import no.nav.helse.hendelser.Periode import no.nav.helse.økonomi.Inntekt import no.nav.helse.økonomi.Inntekt.Companion.månedlig -internal fun inntektperioderForSykepengegrunnlag(block: Inntektperioder.() -> Unit) = Inntektperioder(block).inntekter() +internal fun inntektperioderForSykepengegrunnlag(block: Inntektperioder.() -> Unit) = + Inntektperioder(block).inntekter() internal class Inntektperioder(block: Inntektperioder.() -> Unit) { private val liste = mutableListOf>>() @@ -25,15 +26,16 @@ internal class Inntektperioder(block: Inntektperioder.() -> Unit) { this.map(YearMonth::from) .distinct() .flatMap { yearMonth -> - Inntekter(block).toList().groupBy({ (arbeidsgiver, _) -> arbeidsgiver }) { (_, inntekt) -> - ArbeidsgiverInntekt.MånedligInntekt( - yearMonth, - inntekt, - ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, - "kontantytelse", - "fastloenn" - ) - }.toList() + Inntekter(block).toList() + .groupBy({ (arbeidsgiver, _) -> arbeidsgiver }) { (_, inntekt) -> + ArbeidsgiverInntekt.MånedligInntekt( + yearMonth, + inntekt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "kontantytelse", + "fastloenn" + ) + }.toList() } .groupBy({ (arbeidsgiver, _) -> arbeidsgiver }) { (_, inntekt) -> inntekt } .map { (arbeidsgiver, inntekter) -> diff --git a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/PersonHendelsefabrikk.kt b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/PersonHendelsefabrikk.kt index ff26853e6c..06f37bf6ae 100644 --- a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/PersonHendelsefabrikk.kt +++ b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/PersonHendelsefabrikk.kt @@ -29,7 +29,10 @@ import no.nav.helse.spleis.testhelpers.OverstyrtArbeidsgiveropplysning.Companion import no.nav.helse.økonomi.Inntekt internal class PersonHendelsefabrikk() { - internal fun lagMinimumSykdomsgradsvurderingMelding(perioderMedMinimumSykdomsgradVurdertOK: Set = emptySet(), perioderMedMinimumSykdomsgradVurdertIkkeOK: Set = emptySet()) = + internal fun lagMinimumSykdomsgradsvurderingMelding( + perioderMedMinimumSykdomsgradVurdertOK: Set = emptySet(), + perioderMedMinimumSykdomsgradVurdertIkkeOK: Set = emptySet() + ) = MinimumSykdomsgradsvurderingMelding( perioderMedMinimumSykdomsgradVurdertOK = perioderMedMinimumSykdomsgradVurdertOK, perioderMedMinimumSykdomsgradVurdertIkkeOK = perioderMedMinimumSykdomsgradVurdertIkkeOK, @@ -41,33 +44,56 @@ internal class PersonHendelsefabrikk() { meldingsreferanseId = UUID.randomUUID(), dødsdato = dødsdato ) - internal fun lagOverstyrArbeidsforhold(skjæringstidspunkt: LocalDate, vararg overstyrteArbeidsforhold: OverstyrArbeidsforhold.ArbeidsforholdOverstyrt) = + + internal fun lagOverstyrArbeidsforhold( + skjæringstidspunkt: LocalDate, + vararg overstyrteArbeidsforhold: OverstyrArbeidsforhold.ArbeidsforholdOverstyrt + ) = OverstyrArbeidsforhold( meldingsreferanseId = UUID.randomUUID(), skjæringstidspunkt = skjæringstidspunkt, overstyrteArbeidsforhold = overstyrteArbeidsforhold.toList(), opprettet = LocalDateTime.now() ) + internal fun lagPåminnelse() = PersonPåminnelse( meldingsreferanseId = UUID.randomUUID() ) - internal fun lagSkjønnsmessigFastsettelse(skjæringstidspunkt: LocalDate, arbeidsgiveropplysninger: List, meldingsreferanseId: UUID) = + internal fun lagSkjønnsmessigFastsettelse( + skjæringstidspunkt: LocalDate, + arbeidsgiveropplysninger: List, + meldingsreferanseId: UUID + ) = SkjønnsmessigFastsettelse( meldingsreferanseId = meldingsreferanseId, skjæringstidspunkt = skjæringstidspunkt, - arbeidsgiveropplysninger = arbeidsgiveropplysninger.medSkjønnsmessigFastsattInntekt(meldingsreferanseId, skjæringstidspunkt), + arbeidsgiveropplysninger = arbeidsgiveropplysninger.medSkjønnsmessigFastsattInntekt( + meldingsreferanseId, + skjæringstidspunkt + ), opprettet = LocalDateTime.now() ) - internal fun lagOverstyrArbeidsgiveropplysninger(skjæringstidspunkt: LocalDate, arbeidsgiveropplysninger: List, meldingsreferanseId: UUID) : OverstyrArbeidsgiveropplysninger { + internal fun lagOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt: LocalDate, + arbeidsgiveropplysninger: List, + meldingsreferanseId: UUID + ): OverstyrArbeidsgiveropplysninger { val opprettet = LocalDateTime.now() return OverstyrArbeidsgiveropplysninger( meldingsreferanseId = meldingsreferanseId, skjæringstidspunkt = skjæringstidspunkt, - arbeidsgiveropplysninger = arbeidsgiveropplysninger.medSaksbehandlerinntekt(meldingsreferanseId, skjæringstidspunkt), - refusjonstidslinjer = arbeidsgiveropplysninger.refusjonstidslinjer(skjæringstidspunkt, meldingsreferanseId, opprettet), + arbeidsgiveropplysninger = arbeidsgiveropplysninger.medSaksbehandlerinntekt( + meldingsreferanseId, + skjæringstidspunkt + ), + refusjonstidslinjer = arbeidsgiveropplysninger.refusjonstidslinjer( + skjæringstidspunkt, + meldingsreferanseId, + opprettet + ), opprettet = opprettet ) } @@ -91,22 +117,58 @@ internal class OverstyrtArbeidsgiveropplysning( private val refusjonsopplysninger: List>? = null, private val gjelder: Periode? = null ) { - private fun refusjonsopplysninger(skjæringstidspunkt: LocalDate) = refusjonsopplysninger ?: listOf(Triple(skjæringstidspunkt, null, inntekt)) + private fun refusjonsopplysninger(skjæringstidspunkt: LocalDate) = + refusjonsopplysninger ?: listOf(Triple(skjæringstidspunkt, null, inntekt)) + internal companion object { - private fun List.tilArbeidsgiverInntektsopplysning(meldingsreferanseId: UUID, skjæringstidspunkt: LocalDate, inntektsopplysning: (overstyrtArbeidsgiveropplysning: OverstyrtArbeidsgiveropplysning) -> Inntektsopplysning) = + private fun List.tilArbeidsgiverInntektsopplysning( + meldingsreferanseId: UUID, + skjæringstidspunkt: LocalDate, + inntektsopplysning: (overstyrtArbeidsgiveropplysning: OverstyrtArbeidsgiveropplysning) -> Inntektsopplysning + ) = map { ArbeidsgiverInntektsopplysning( orgnummer = it.orgnummer, gjelder = it.gjelder ?: (skjæringstidspunkt til LocalDate.MAX), inntektsopplysning = inntektsopplysning(it), - refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { it.refusjonsopplysninger(skjæringstidspunkt).forEach { (fom, tom, refusjonsbeløp) -> leggTil(Refusjonsopplysning(meldingsreferanseId, fom, tom, refusjonsbeløp, SAKSBEHANDLER, LocalDateTime.now()), LocalDateTime.now()) } }.build() + refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { + it.refusjonsopplysninger( + skjæringstidspunkt + ).forEach { (fom, tom, refusjonsbeløp) -> + leggTil( + Refusjonsopplysning( + meldingsreferanseId, + fom, + tom, + refusjonsbeløp, + SAKSBEHANDLER, + LocalDateTime.now() + ), LocalDateTime.now() + ) + } + }.build() ) } - internal fun List.medSaksbehandlerinntekt(meldingsreferanseId: UUID, skjæringstidspunkt: LocalDate) = tilArbeidsgiverInntektsopplysning(meldingsreferanseId, skjæringstidspunkt) { - checkNotNull(it.forklaring) { "Forklaring må settes på Saksbehandlerinntekt"} - Saksbehandler(skjæringstidspunkt, meldingsreferanseId, it.inntekt, it.forklaring, it.subsumsjon, LocalDateTime.now()) + + internal fun List.medSaksbehandlerinntekt( + meldingsreferanseId: UUID, + skjæringstidspunkt: LocalDate + ) = tilArbeidsgiverInntektsopplysning(meldingsreferanseId, skjæringstidspunkt) { + checkNotNull(it.forklaring) { "Forklaring må settes på Saksbehandlerinntekt" } + Saksbehandler( + skjæringstidspunkt, + meldingsreferanseId, + it.inntekt, + it.forklaring, + it.subsumsjon, + LocalDateTime.now() + ) } - internal fun List.medSkjønnsmessigFastsattInntekt(meldingsreferanseId: UUID, skjæringstidspunkt: LocalDate): List { + + internal fun List.medSkjønnsmessigFastsattInntekt( + meldingsreferanseId: UUID, + skjæringstidspunkt: LocalDate + ): List { forEach { check(it.refusjonsopplysninger == null) { "Skal ikke sette refusjonspplysnger på Skjønnsmessig fastsatt inntekt" } check(it.forklaring == null) { "Skal ikke sette forklaring på Skjønnsmessig fastsatt inntekt" } @@ -127,12 +189,22 @@ internal class OverstyrtArbeidsgiveropplysning( } } - internal fun List.refusjonstidslinjer(skjæringstidspunkt: LocalDate, meldingsreferanseId: UUID, opprettet: LocalDateTime) = this.associateBy { it.orgnummer }.mapValues { (_, opplysning) -> + internal fun List.refusjonstidslinjer( + skjæringstidspunkt: LocalDate, + meldingsreferanseId: UUID, + opprettet: LocalDateTime + ) = this.associateBy { it.orgnummer }.mapValues { (_, opplysning) -> val defaultRefusjonFom = opplysning.gjelder?.start ?: skjæringstidspunkt - val strekkbar = opplysning.refusjonsopplysninger(defaultRefusjonFom).any { (_,tom) -> tom == null } - opplysning.refusjonsopplysninger(defaultRefusjonFom).fold(Beløpstidslinje()) { acc, (fom, tom, beløp) -> - acc + Beløpstidslinje.fra(fom til (tom ?: fom), beløp, Kilde(meldingsreferanseId, SAKSBEHANDLER, opprettet)) - } to strekkbar + val strekkbar = + opplysning.refusjonsopplysninger(defaultRefusjonFom).any { (_, tom) -> tom == null } + opplysning.refusjonsopplysninger(defaultRefusjonFom) + .fold(Beløpstidslinje()) { acc, (fom, tom, beløp) -> + acc + Beløpstidslinje.fra( + fom til (tom ?: fom), + beløp, + Kilde(meldingsreferanseId, SAKSBEHANDLER, opprettet) + ) + } to strekkbar } } -} \ No newline at end of file +} diff --git "a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/TestObservat\303\270r.kt" "b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/TestObservat\303\270r.kt" index 87e1b80038..cf70f4e995 100644 --- "a/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/TestObservat\303\270r.kt" +++ "b/sykepenger-api/src/test/kotlin/no/nav/helse/spleis/testhelpers/TestObservat\303\270r.kt" @@ -17,13 +17,18 @@ internal class TestObservatør : PersonObserver { private val tilstandsendringer = mutableMapOf>() private val utbetalteVedtaksperioder = mutableListOf() private val vedtaksperioder = mutableMapOf>() - private val vedtaksperiodeendringer = mutableMapOf>() + private val vedtaksperiodeendringer = + mutableMapOf>() private val ventendeReplays = mutableListOf>() fun hendelseider(vedtaksperiodeId: UUID) = - vedtaksperiodeendringer[vedtaksperiodeId]?.last()?.hendelser ?: fail { "VedtaksperiodeId $vedtaksperiodeId har ingen hendelser tilknyttet" } + vedtaksperiodeendringer[vedtaksperiodeId]?.last()?.hendelser + ?: fail { "VedtaksperiodeId $vedtaksperiodeId har ingen hendelser tilknyttet" } - fun sisteVedtaksperiode() = IdInnhenter { orgnummer -> vedtaksperioder.getValue(orgnummer).last() } - fun vedtaksperiode(orgnummer: String, indeks: Int) = vedtaksperioder.getValue(orgnummer).toList()[indeks] + fun sisteVedtaksperiode() = + IdInnhenter { orgnummer -> vedtaksperioder.getValue(orgnummer).last() } + + fun vedtaksperiode(orgnummer: String, indeks: Int) = + vedtaksperioder.getValue(orgnummer).toList()[indeks] fun ventendeReplays() = ventendeReplays.toList().also { ventendeReplays.clear() @@ -49,9 +54,11 @@ internal class TestObservatør : PersonObserver { override fun vedtaksperiodeEndret(event: VedtaksperiodeEndretEvent) { vedtaksperiodeendringer.getOrPut(event.vedtaksperiodeId) { mutableListOf(event) }.add(event) - vedtaksperioder.getOrPut(event.organisasjonsnummer) { mutableSetOf() }.add(event.vedtaksperiodeId) + vedtaksperioder.getOrPut(event.organisasjonsnummer) { mutableSetOf() } + .add(event.vedtaksperiodeId) if (event.gjeldendeTilstand != event.forrigeTilstand) { - tilstandsendringer.getOrPut(event.vedtaksperiodeId) { mutableListOf(TilstandType.START) }.add(event.gjeldendeTilstand) + tilstandsendringer.getOrPut(event.vedtaksperiodeId) { mutableListOf(TilstandType.START) } + .add(event.gjeldendeTilstand) } if (event.gjeldendeTilstand == TilstandType.AVSLUTTET) utbetalteVedtaksperioder.add(event.vedtaksperiodeId) } diff --git a/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Subsumsjon.kt b/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Subsumsjon.kt index a95ea1115e..63fd35d427 100644 --- a/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Subsumsjon.kt +++ b/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Subsumsjon.kt @@ -22,6 +22,7 @@ data class Subsumsjon( punktum = punktum, bokstav = bokstav ) + companion object { fun enkelSubsumsjon( utfall: Utfall, @@ -49,6 +50,7 @@ data class Subsumsjon( kontekster = kontekster ) } + fun periodisertSubsumsjon( perioder: Collection>, lovverk: String, @@ -89,6 +91,7 @@ data class Subsumsjon( enum class Subsumsjonstype { ENKEL, PERIODISERT } + enum class Utfall { VILKAR_OPPFYLT, VILKAR_IKKE_OPPFYLT, VILKAR_UAVKLART, VILKAR_BEREGNET } @@ -100,14 +103,32 @@ data class Subsumsjon( } } -data class Lovreferanse(val lovverk: String, val paragraf: Paragraf?, val ledd: Ledd?, val punktum: Punktum?, val bokstav: Bokstav?) { +data class Lovreferanse( + val lovverk: String, + val paragraf: Paragraf?, + val ledd: Ledd?, + val punktum: Punktum?, + val bokstav: Bokstav? +) { override fun toString(): String { - val parts = listOfNotNull(lovverk, paragraf?.toString(), ledd?.toString(), punktum?.toString(), bokstav?.toString()) + val parts = listOfNotNull( + lovverk, + paragraf?.toString(), + ledd?.toString(), + punktum?.toString(), + bokstav?.toString() + ) return parts.joinToString(separator = " ") } } -val folketrygdloven = Lovreferanse(lovverk = "folketrygdloven", paragraf = null, ledd = null, punktum = null, bokstav = null) +val folketrygdloven = Lovreferanse( + lovverk = "folketrygdloven", + paragraf = null, + ledd = null, + punktum = null, + bokstav = null +) fun Lovreferanse.paragraf(paragraf: Paragraf) = copy(paragraf = paragraf) @@ -128,4 +149,4 @@ val Lovreferanse.syvendePunktum get() = copy(punktum = Punktum.PUNKTUM_7) val Lovreferanse.bokstavA get() = copy(bokstav = Bokstav.BOKSTAV_A) val Lovreferanse.bokstavB get() = copy(bokstav = Bokstav.BOKSTAV_B) -val Lovreferanse.bokstavC get() = copy(bokstav = Bokstav.BOKSTAV_C) \ No newline at end of file +val Lovreferanse.bokstavC get() = copy(bokstav = Bokstav.BOKSTAV_C) diff --git a/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Subsumsjonslogg.kt b/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Subsumsjonslogg.kt index 19ead97e48..5f79522c13 100644 --- a/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Subsumsjonslogg.kt +++ b/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Subsumsjonslogg.kt @@ -127,7 +127,12 @@ fun `§ 8-3 ledd 1 punktum 2`( * @param beregningsgrunnlagÅrlig total inntekt på tvers av alle relevante arbeidsgivere * @param minimumInntektÅrlig minimum beløp [beregningsgrunnlagÅrlig] må være lik eller større enn for at vilkåret skal være [oppfylt] */ -fun `§ 8-3 ledd 2 punktum 1`(oppfylt: Boolean, skjæringstidspunkt: LocalDate, beregningsgrunnlagÅrlig: Double, minimumInntektÅrlig: Double) = +fun `§ 8-3 ledd 2 punktum 1`( + oppfylt: Boolean, + skjæringstidspunkt: LocalDate, + beregningsgrunnlagÅrlig: Double, + minimumInntektÅrlig: Double +) = Subsumsjon.enkelSubsumsjon( utfall = if (oppfylt) VILKAR_OPPFYLT else VILKAR_IKKE_OPPFYLT, lovverk = "folketrygdloven", @@ -153,7 +158,11 @@ fun `§ 8-3 ledd 2 punktum 1`(oppfylt: Boolean, skjæringstidspunkt: LocalDate, * @param utlandsperioder perioden burker har oppgitt å ha vært i utlandet * @param søknadsperioder perioder i søknaden som ligger til grunn */ -fun `§ 8-9 ledd 1`(oppfylt: Boolean, utlandsperioder: Collection>, søknadsperioder: List>) = +fun `§ 8-9 ledd 1`( + oppfylt: Boolean, + utlandsperioder: Collection>, + søknadsperioder: List> +) = Subsumsjon.periodisertSubsumsjon( perioder = utlandsperioder, lovverk = "folketrygdloven", @@ -161,7 +170,7 @@ fun `§ 8-9 ledd 1`(oppfylt: Boolean, utlandsperioder: Collection, dato: Collection>) = +fun `§ 8-11 ledd 1`( + vedtaksperiode: ClosedRange, + dato: Collection> +) = Subsumsjon.periodisertSubsumsjon( lovverk = "folketrygdloven", perioder = dato, @@ -234,7 +246,12 @@ fun `§ 8-11 ledd 1`(vedtaksperiode: ClosedRange, dato: Collection() - if (dagerOppfylt.isNotEmpty()) subsumsjoner.add(lagSubsumsjon(VILKAR_OPPFYLT, dagerOppfylt.first(), dagerOppfylt.last())) - if (dagerIkkeOppfylt.isNotEmpty()) subsumsjoner.add(lagSubsumsjon(VILKAR_IKKE_OPPFYLT, dagerIkkeOppfylt.first(), dagerIkkeOppfylt.last())) + if (dagerOppfylt.isNotEmpty()) subsumsjoner.add( + lagSubsumsjon( + VILKAR_OPPFYLT, + dagerOppfylt.first(), + dagerOppfylt.last() + ) + ) + if (dagerIkkeOppfylt.isNotEmpty()) subsumsjoner.add( + lagSubsumsjon( + VILKAR_IKKE_OPPFYLT, + dagerIkkeOppfylt.first(), + dagerIkkeOppfylt.last() + ) + ) return subsumsjoner } @@ -343,7 +372,11 @@ fun `§ 8-12 ledd 2`( * @param avvisteDager dager som vilkåret ikke er oppfylt for, hvis noen * @param tidslinjer alle tidslinjer på tvers av arbeidsgivere */ -fun `§ 8-13 ledd 1`(periode: ClosedRange, avvisteDager: Collection>, tidslinjer: List>): List { +fun `§ 8-13 ledd 1`( + periode: ClosedRange, + avvisteDager: Collection>, + tidslinjer: List> +): List { fun lagSubsumsjon(utfall: Utfall, dager: Collection>) = Subsumsjon.periodisertSubsumsjon( perioder = dager, @@ -361,7 +394,12 @@ fun `§ 8-13 ledd 1`(periode: ClosedRange, avvisteDager: Collection() val oppfylteDager = avvisteDager.trim(periode) if (oppfylteDager.isNotEmpty()) subsumsjoner.add(lagSubsumsjon(VILKAR_OPPFYLT, oppfylteDager)) - if (avvisteDager.isNotEmpty()) subsumsjoner.add(lagSubsumsjon(VILKAR_IKKE_OPPFYLT, avvisteDager)) + if (avvisteDager.isNotEmpty()) subsumsjoner.add( + lagSubsumsjon( + VILKAR_IKKE_OPPFYLT, + avvisteDager + ) + ) return subsumsjoner } @@ -375,7 +413,12 @@ fun `§ 8-13 ledd 1`(periode: ClosedRange, avvisteDager: Collection, tidslinjer: List>, grense: Double, dagerUnderGrensen: Collection>): Subsumsjon { +fun `§ 8-13 ledd 2`( + periode: ClosedRange, + tidslinjer: List>, + grense: Double, + dagerUnderGrensen: Collection> +): Subsumsjon { val tidslinjegrunnlag = tidslinjer.map { it.dager(periode) } val dagerUnderGrensenMap = dagerUnderGrensen.map { mapOf( @@ -412,7 +455,13 @@ fun `§ 8-13 ledd 2`(periode: ClosedRange, tidslinjer: List, forklaring: String, oppfylt: Boolean) = +fun `§ 8-15`( + skjæringstidspunkt: LocalDate, + organisasjonsnummer: String, + inntekterSisteTreMåneder: List, + forklaring: String, + oppfylt: Boolean +) = Subsumsjon.enkelSubsumsjon( utfall = if (oppfylt) VILKAR_OPPFYLT else VILKAR_IKKE_OPPFYLT, lovverk = "folketrygdloven", @@ -445,7 +494,12 @@ fun `§ 8-15`(skjæringstidspunkt: LocalDate, organisasjonsnummer: String, innte * @param inntekt inntekt for aktuell arbeidsgiver * @param dekningsgrunnlag maks dagsats før reduksjon til 6G og reduksjon for sykmeldingsgrad */ -fun `§ 8-16 ledd 1`(dato: Collection>, dekningsgrad: Double, inntekt: Double, dekningsgrunnlag: Double) = +fun `§ 8-16 ledd 1`( + dato: Collection>, + dekningsgrad: Double, + inntekt: Double, + dekningsgrunnlag: Double +) = Subsumsjon.periodisertSubsumsjon( perioder = dato, lovverk = "folketrygdloven", @@ -466,7 +520,11 @@ fun `§ 8-16 ledd 1`(dato: Collection>, dekningsgrad: Dou * @param oppfylt **true** dersom [dagen] er etter arbeidsgiverperioden * @param dagen aktuelle dagen for vurdering */ -fun `§ 8-17 ledd 1 bokstav a`(oppfylt: Boolean, dagen: Collection>, sykdomstidslinje: List) = +fun `§ 8-17 ledd 1 bokstav a`( + oppfylt: Boolean, + dagen: Collection>, + sykdomstidslinje: List +) = Subsumsjon.periodisertSubsumsjon( perioder = dagen, utfall = if (oppfylt) VILKAR_OPPFYLT else VILKAR_IKKE_OPPFYLT, @@ -518,7 +576,10 @@ fun `§ 8-17 ledd 1`( * * @param dato dagen vilkåret blir vurdert for */ -fun `§ 8-17 ledd 2`(dato: Collection>, sykdomstidslinje: List) = +fun `§ 8-17 ledd 2`( + dato: Collection>, + sykdomstidslinje: List +) = Subsumsjon.periodisertSubsumsjon( perioder = dato, lovverk = "folketrygdloven", @@ -564,7 +625,10 @@ fun `§ 8-19 første ledd`(dato: LocalDate, beregnetTidslinje: List>, beregnetTidslinje: List) = +fun `§ 8-19 andre ledd`( + dato: Collection>, + beregnetTidslinje: List +) = Subsumsjon.periodisertSubsumsjon( perioder = dato, lovverk = "folketrygdloven", @@ -803,7 +867,7 @@ fun `§ 8-29`( grunnlagForSykepengegrunnlagÅrlig: Double, inntektsopplysninger: List, organisasjonsnummer: String -) = Subsumsjon.enkelSubsumsjon( +) = Subsumsjon.enkelSubsumsjon( utfall = VILKAR_BEREGNET, lovverk = "folketrygdloven", versjon = LocalDate.of(2019, 1, 1), @@ -822,7 +886,14 @@ fun `§ 8-29`( fun `§ 8-33 ledd 1`() {} -fun `§ 8-33 ledd 3`(grunnlagForFeriepenger: Int, opptjeningsår: Year, prosentsats: Double, alder: Int, feriepenger: Double) {} +fun `§ 8-33 ledd 3`( + grunnlagForFeriepenger: Int, + opptjeningsår: Year, + prosentsats: Double, + alder: Int, + feriepenger: Double +) { +} /** * Vurdering av krav til minimum inntekt ved alder mellom 67 og 70 år @@ -946,9 +1017,22 @@ fun `§ 8-51 ledd 3`( ), kontekster = emptyList() ) + val subsumsjoner = mutableListOf() - if (dagerOppfylt.isNotEmpty()) subsumsjoner.add(lagSubsumsjon(VILKAR_OPPFYLT, dagerOppfylt.first(), dagerOppfylt.last())) - if (dagerIkkeOppfylt.isNotEmpty()) subsumsjoner.add(lagSubsumsjon(VILKAR_IKKE_OPPFYLT, dagerIkkeOppfylt.first(), dagerIkkeOppfylt.last())) + if (dagerOppfylt.isNotEmpty()) subsumsjoner.add( + lagSubsumsjon( + VILKAR_OPPFYLT, + dagerOppfylt.first(), + dagerOppfylt.last() + ) + ) + if (dagerIkkeOppfylt.isNotEmpty()) subsumsjoner.add( + lagSubsumsjon( + VILKAR_IKKE_OPPFYLT, + dagerIkkeOppfylt.first(), + dagerIkkeOppfylt.last() + ) + ) return subsumsjoner } @@ -995,7 +1079,10 @@ fun `fvl § 35 ledd 1`() = * * Lovdata: [lenke](https://lovdata.no/lov/1997-02-28-19/%C2%A78-48) */ -fun `§ 8-48 ledd 2 punktum 2`(dato: Collection>, sykdomstidslinje: List) = +fun `§ 8-48 ledd 2 punktum 2`( + dato: Collection>, + sykdomstidslinje: List +) = Subsumsjon.periodisertSubsumsjon( perioder = dato, utfall = VILKAR_IKKE_OPPFYLT, @@ -1013,7 +1100,10 @@ fun `§ 8-48 ledd 2 punktum 2`(dato: Collection>, sykdoms * * Lovdata: [lenke](https://lovdata.no/dokument/TRR/avgjorelse/trr-2006-4023) */ -fun `Trygderettens kjennelse 2006-4023`(dato: Collection>, sykdomstidslinje: List) = +fun `Trygderettens kjennelse 2006-4023`( + dato: Collection>, + sykdomstidslinje: List +) = Subsumsjon.periodisertSubsumsjon( perioder = dato, utfall = VILKAR_IKKE_OPPFYLT, @@ -1025,12 +1115,15 @@ fun `Trygderettens kjennelse 2006-4023`(dato: Collection> kontekster = emptyList() ) -internal class RangeIterator(start: LocalDate, private val end: LocalDate): Iterator { +internal class RangeIterator(start: LocalDate, private val end: LocalDate) : Iterator { private var currentDate = start + constructor(range: ClosedRange) : this(range.start, range.endInclusive) + fun subsetFom(fom: LocalDate) = apply { currentDate = maxOf(currentDate, fom) } + override fun hasNext() = end >= currentDate override fun next(): LocalDate { check(hasNext()) @@ -1053,7 +1146,13 @@ private fun ClosedRange.trim(periodeSomSkalTrimmesBort: ClosedRange kan nå enten trimme bort hale, snuten eller midten av . i sistnevnte // situasjon så vil resultatet være to perioder. val result = mutableListOf>() - if (this.start < periodeSomSkalTrimmesBort.start) result.add(this.start..periodeSomSkalTrimmesBort.start.minusDays(1)) - if (this.endInclusive > periodeSomSkalTrimmesBort.endInclusive) result.add(periodeSomSkalTrimmesBort.endInclusive.plusDays(1)..this.endInclusive) + if (this.start < periodeSomSkalTrimmesBort.start) result.add( + this.start..periodeSomSkalTrimmesBort.start.minusDays( + 1 + ) + ) + if (this.endInclusive > periodeSomSkalTrimmesBort.endInclusive) result.add( + periodeSomSkalTrimmesBort.endInclusive.plusDays(1)..this.endInclusive + ) return result -} \ No newline at end of file +} diff --git a/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Tidslinjedag.kt b/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Tidslinjedag.kt index ba31f34f57..e7843b807b 100644 --- a/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Tidslinjedag.kt +++ b/sykepenger-etterlevelse-api/src/main/kotlin/no/nav/helse/etterlevelse/Tidslinjedag.kt @@ -7,7 +7,8 @@ class Tidslinjedag( private val dagtype: String, private val grad: Int? ) { - private fun hørerTil(tidslinjeperiode: Tidslinjeperiode) = tidslinjeperiode.hørerTil(dato, dagtype, grad) + private fun hørerTil(tidslinjeperiode: Tidslinjeperiode) = + tidslinjeperiode.hørerTil(dato, dagtype, grad) fun erRettFør(dato: LocalDate) = this.dato.plusDays(1) == dato @@ -16,17 +17,28 @@ class Tidslinjedag( companion object { fun List.dager(periode: ClosedRange? = null): List> { return this - .filter { it.dato >= (periode?.start ?: LocalDate.MIN) && it.dato <= (periode?.endInclusive ?: LocalDate.MAX) } + .filter { + it.dato >= (periode?.start + ?: LocalDate.MIN) && it.dato <= (periode?.endInclusive ?: LocalDate.MAX) + } .sortedBy { it.dato } .fold(mutableListOf()) { acc, nesteDag -> if (acc.isNotEmpty() && nesteDag.hørerTil(acc.last())) { acc.last().utvid(nesteDag.dato) } else { - acc.add(Tidslinjeperiode(nesteDag.dato, nesteDag.dato, nesteDag.dagtype, nesteDag.grad)) + acc.add( + Tidslinjeperiode( + nesteDag.dato, + nesteDag.dato, + nesteDag.dagtype, + nesteDag.grad + ) + ) } acc }.dager() } + private fun List.dager() = map { mapOf( "fom" to it.fom, @@ -47,7 +59,8 @@ class Tidslinjedag( this.tom = dato } - fun hørerTil(dato: LocalDate, dagtype: String, grad: Int?) = tom.plusDays(1) == dato && this.dagtype == dagtype && this.grad == grad + fun hørerTil(dato: LocalDate, dagtype: String, grad: Int?) = + tom.plusDays(1) == dato && this.dagtype == dagtype && this.grad == grad } -} \ No newline at end of file +} diff --git a/sykepenger-etterlevelse-api/src/test/kotlin/no/nav/helse/etterlevelse/EnkelSubsumsjonTest.kt b/sykepenger-etterlevelse-api/src/test/kotlin/no/nav/helse/etterlevelse/EnkelSubsumsjonTest.kt index 511ba90533..b2e50da52f 100644 --- a/sykepenger-etterlevelse-api/src/test/kotlin/no/nav/helse/etterlevelse/EnkelSubsumsjonTest.kt +++ b/sykepenger-etterlevelse-api/src/test/kotlin/no/nav/helse/etterlevelse/EnkelSubsumsjonTest.kt @@ -48,7 +48,18 @@ internal class EnkelSubsumsjonTest { Subsumsjonskontekst(KontekstType.Vedtaksperiode, "vedtaksperiodeId") ) ) { - Subsumsjon.enkelSubsumsjon(utfall, lovverk, versjon, paragraf, ledd, punktum, bokstav, input, output, kontekster).also { + Subsumsjon.enkelSubsumsjon( + utfall, + lovverk, + versjon, + paragraf, + ledd, + punktum, + bokstav, + input, + output, + kontekster + ).also { vurderinger.add(it) } } diff --git a/sykepenger-etterlevelse-api/src/test/kotlin/no/nav/helse/etterlevelse/LovverkTest.kt b/sykepenger-etterlevelse-api/src/test/kotlin/no/nav/helse/etterlevelse/LovverkTest.kt index 84d52eb834..d39954379d 100644 --- a/sykepenger-etterlevelse-api/src/test/kotlin/no/nav/helse/etterlevelse/LovverkTest.kt +++ b/sykepenger-etterlevelse-api/src/test/kotlin/no/nav/helse/etterlevelse/LovverkTest.kt @@ -7,6 +7,9 @@ class LovverkTest { @Test fun tostring() { assertEquals("folketrygdloven", folketrygdloven.toString()) - assertEquals("folketrygdloven § 8-2 2. ledd 1. punktum bokstav c", folketrygdloven.paragraf(Paragraf.PARAGRAF_8_2).annetLedd.førstePunktum.bokstavC.toString()) + assertEquals( + "folketrygdloven § 8-2 2. ledd 1. punktum bokstav c", + folketrygdloven.paragraf(Paragraf.PARAGRAF_8_2).annetLedd.førstePunktum.bokstavC.toString() + ) } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/build.gradle.kts b/sykepenger-mediators/build.gradle.kts index a15d0fb66e..6f19b3420a 100644 --- a/sykepenger-mediators/build.gradle.kts +++ b/sykepenger-mediators/build.gradle.kts @@ -51,18 +51,19 @@ tasks.withType { manifest { attributes["Main-Class"] = mainClass - attributes["Class-Path"] = configurations.runtimeClasspath.get().joinToString(separator = " ") { - it.name - } + attributes["Class-Path"] = + configurations.runtimeClasspath.get().joinToString(separator = " ") { + it.name + } } finalizedBy(":sykepenger-mediators:remove_spleis_mediators_db_container") } tasks.withType { - systemProperty("junit.jupiter.execution.parallel.enabled", "true") - systemProperty("junit.jupiter.execution.parallel.mode.default", "concurrent") - systemProperty("junit.jupiter.execution.parallel.config.strategy", "fixed") - systemProperty("junit.jupiter.execution.parallel.config.fixed.parallelism", "8") + systemProperty("junit.jupiter.execution.parallel.enabled", "true") + systemProperty("junit.jupiter.execution.parallel.mode.default", "concurrent") + systemProperty("junit.jupiter.execution.parallel.config.strategy", "fixed") + systemProperty("junit.jupiter.execution.parallel.config.fixed.parallelism", "8") } tasks.create("remove_spleis_mediators_db_container", DockerRemoveContainer::class) { diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/ApplicationBuilder.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/ApplicationBuilder.kt index 3a05775797..9f2a3eac52 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/ApplicationBuilder.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/ApplicationBuilder.kt @@ -16,12 +16,17 @@ import no.nav.helse.spleis.db.PersonDao import no.nav.helse.spleis.monitorering.MonitoreringRiver import no.nav.helse.spleis.monitorering.RegelmessigAvstemming -val meterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT, PrometheusRegistry.defaultRegistry, Clock.SYSTEM) +val meterRegistry = PrometheusMeterRegistry( + PrometheusConfig.DEFAULT, + PrometheusRegistry.defaultRegistry, + Clock.SYSTEM +) // Understands how to build our application server class ApplicationBuilder(env: Map) : RapidsConnection.StatusListener { private val factory = ConsumerProducerFactory(AivenConfig.default) - private val rapidsConnection = RapidApplication.create(env, factory, meterRegistry = meterRegistry) + private val rapidsConnection = + RapidApplication.create(env, factory, meterRegistry = meterRegistry) // Håndter on-prem og gcp database tilkobling forskjellig private val dataSourceBuilder = DataSourceBuilder(env) @@ -29,7 +34,8 @@ class ApplicationBuilder(env: Map) : RapidsConnection.StatusList private val hendelseRepository = HendelseRepository(dataSourceBuilder.dataSource) private val personDao = PersonDao(dataSourceBuilder.dataSource, STØTTER_IDENTBYTTE) - private val subsumsjonsproducer = Subsumsjonproducer.KafkaSubsumsjonproducer("tbd.subsumsjon.v1", factory.createProducer()) + private val subsumsjonsproducer = + Subsumsjonproducer.KafkaSubsumsjonproducer("tbd.subsumsjon.v1", factory.createProducer()) private val hendelseMediator = HendelseMediator( hendelseRepository = hendelseRepository, @@ -57,6 +63,7 @@ class ApplicationBuilder(env: Map) : RapidsConnection.StatusList } private fun versjonAvKode(env: Map): String { - return env["NAIS_APP_IMAGE"] ?: throw IllegalArgumentException("NAIS_APP_IMAGE env variable is missing") + return env["NAIS_APP_IMAGE"] + ?: throw IllegalArgumentException("NAIS_APP_IMAGE env variable is missing") } } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/Avstemmer.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/Avstemmer.kt index f5f4509ac2..1e72a287a9 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/Avstemmer.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/Avstemmer.kt @@ -20,6 +20,7 @@ class Avstemmer(private val person: PersonUtDto) { .registerModule(JavaTimeModule()) .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) } + private val melding = mapTilMelding(person) fun tilJsonMessage() = JsonMessage.newMessage("person_avstemt", mapper.convertValue(melding)) @@ -31,7 +32,11 @@ class Avstemmer(private val person: PersonUtDto) { AvstemtArbeidsgiver( organisasjonsnummer = arbeidsgiver.organisasjonsnummer, vedtaksperioder = arbeidsgiver.vedtaksperioder.map { mapTilVedtaksperiode(it) }, - forkastedeVedtaksperioder = arbeidsgiver.forkastede.map { mapTilVedtaksperiode(it.vedtaksperiode) }, + forkastedeVedtaksperioder = arbeidsgiver.forkastede.map { + mapTilVedtaksperiode( + it.vedtaksperiode + ) + }, utbetalinger = arbeidsgiver.utbetalinger.map { utbetaling -> AvstemtUtbetaling( id = utbetaling.id, @@ -95,6 +100,7 @@ data class AvstemtVedtaksperiode( val skjæringstidspunkt: LocalDate, val utbetalinger: List ) + data class AvstemtUtbetaling( val id: UUID, val type: String, @@ -104,6 +110,7 @@ data class AvstemtUtbetaling( val avsluttet: LocalDateTime?, val vurdering: AvstemtVurdering? ) + data class AvstemtVurdering( val ident: String, val tidspunkt: LocalDateTime, diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/BehovMediator.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/BehovMediator.kt index 68e20b0f1f..24a02ff7fb 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/BehovMediator.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/BehovMediator.kt @@ -8,15 +8,20 @@ import no.nav.helse.spleis.meldinger.model.HendelseMessage import org.slf4j.Logger internal class BehovMediator(private val sikkerLogg: Logger) { - internal fun håndter(context: MessageContext, message: HendelseMessage, aktivitetslogg: Aktivitetslogg) { + internal fun håndter( + context: MessageContext, + message: HendelseMessage, + aktivitetslogg: Aktivitetslogg + ) { if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return if (aktivitetslogg.behov.isEmpty()) return aktivitetslogg .behov .groupBy { it.kontekster } .forEach { (kontekster, behovMedSammeKontekster) -> - val kontekstMap = kontekster.fold(emptyMap()) { result, item -> result + item.kontekstMap } - val behovMap = behovMedSammeKontekster + val kontekstMap = + kontekster.fold(emptyMap()) { result, item -> result + item.kontekstMap } + val behovMap = behovMedSammeKontekster .groupBy({ it.type.name }, { it.detaljer() }) .ikkeTillatUnikeDetaljerPåSammeBehov(kontekstMap, behovMedSammeKontekster) @@ -28,7 +33,10 @@ internal class BehovMediator(private val sikkerLogg: Logger) { } } - private fun Map>>.ikkeTillatUnikeDetaljerPåSammeBehov(kontekst: Map, behovliste: List) = + private fun Map>>.ikkeTillatUnikeDetaljerPåSammeBehov( + kontekst: Map, + behovliste: List + ) = mapValues { (_, detaljerList) -> // tillater duplikate detaljer-maps, så lenge de er like detaljerList diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/DatadelingMediator.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/DatadelingMediator.kt index ae77a548ee..0dcd09e6a7 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/DatadelingMediator.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/DatadelingMediator.kt @@ -30,8 +30,12 @@ internal class DatadelingMediator( is Aktivitet.LogiskFeil -> aktivitetMap("LOGISK_FEIL", aktivitet) is Aktivitet.FunksjonellFeil -> { if (aktivitet.kode.avviklet) sikkerlogg.warn("${aktivitet.kode} er ikke avviklet, men i bruk i spleis. Endre?") - aktivitetMap("FUNKSJONELL_FEIL", aktivitet) + mapOf("varselkode" to aktivitet.kode.name) + aktivitetMap( + "FUNKSJONELL_FEIL", + aktivitet + ) + mapOf("varselkode" to aktivitet.kode.name) } + is Aktivitet.Varsel -> { if (aktivitet.kode.avviklet) sikkerlogg.warn("${aktivitet.kode} er ikke avviklet, men i bruk i spleis. Endre?") aktivitetMap("VARSEL", aktivitet) + mapOf("varselkode" to aktivitet.kode.name) @@ -64,4 +68,4 @@ internal class DatadelingMediator( ) ).toJson() } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/HendelseMediator.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/HendelseMediator.kt index d1664e02ac..d15cc84e0a 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/HendelseMediator.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/HendelseMediator.kt @@ -101,7 +101,10 @@ internal class HendelseMediator( message.behandle(this, context) } catch (err: Aktivitetslogg.AktivitetException) { withMDC(err.kontekst()) { - sikkerLogg.error("alvorlig feil i aktivitetslogg: ${err.message}\n\t${message.toJson()}", err) + sikkerLogg.error( + "alvorlig feil i aktivitetslogg: ${err.message}\n\t${message.toJson()}", + err + ) } } } @@ -113,7 +116,12 @@ internal class HendelseMediator( context: MessageContext, historiskeFolkeregisteridenter: Set ) { - opprettPersonOgHåndter(personopplysninger, message, context, historiskeFolkeregisteridenter) { person, aktivitetslogg -> + opprettPersonOgHåndter( + personopplysninger, + message, + context, + historiskeFolkeregisteridenter + ) { person, aktivitetslogg -> HendelseProbe.onSykmelding() person.håndter(sykmelding, aktivitetslogg) } @@ -126,7 +134,12 @@ internal class HendelseMediator( context: MessageContext, historiskeFolkeregisteridenter: Set ) { - opprettPersonOgHåndter(personopplysninger, message, context, historiskeFolkeregisteridenter) { person, aktivitetslogg -> + opprettPersonOgHåndter( + personopplysninger, + message, + context, + historiskeFolkeregisteridenter + ) { person, aktivitetslogg -> HendelseProbe.onSykmelding() person.håndter(sykmelding, aktivitetslogg) } @@ -139,7 +152,12 @@ internal class HendelseMediator( context: MessageContext, historiskeFolkeregisteridenter: Set ) { - opprettPersonOgHåndter(personopplysninger, message, context, historiskeFolkeregisteridenter) { person, aktivitetslogg -> + opprettPersonOgHåndter( + personopplysninger, + message, + context, + historiskeFolkeregisteridenter + ) { person, aktivitetslogg -> HendelseProbe.onSykmelding() person.håndter(sykmelding, aktivitetslogg) } @@ -152,7 +170,12 @@ internal class HendelseMediator( context: MessageContext, historiskeFolkeregisteridenter: Set ) { - opprettPersonOgHåndter(personopplysninger, message, context, historiskeFolkeregisteridenter) { person, aktivitetslogg -> + opprettPersonOgHåndter( + personopplysninger, + message, + context, + historiskeFolkeregisteridenter + ) { person, aktivitetslogg -> HendelseProbe.onSykmelding() person.håndter(sykmelding, aktivitetslogg) } @@ -165,7 +188,12 @@ internal class HendelseMediator( context: MessageContext, historiskeFolkeregisteridenter: Set ) { - opprettPersonOgHåndter(personopplysninger, message, context, historiskeFolkeregisteridenter) { person, aktivitetslogg -> + opprettPersonOgHåndter( + personopplysninger, + message, + context, + historiskeFolkeregisteridenter + ) { person, aktivitetslogg -> HendelseProbe.onSøknadArbeidsgiver() person.håndter(søknad, aktivitetslogg) } @@ -178,7 +206,12 @@ internal class HendelseMediator( context: MessageContext, historiskeFolkeregisteridenter: Set ) { - opprettPersonOgHåndter(personopplysninger, message, context, historiskeFolkeregisteridenter) { person, aktivitetslogg -> + opprettPersonOgHåndter( + personopplysninger, + message, + context, + historiskeFolkeregisteridenter + ) { person, aktivitetslogg -> HendelseProbe.onSøknadNav() person.håndter(søknad, aktivitetslogg) } @@ -191,7 +224,12 @@ internal class HendelseMediator( context: MessageContext, historiskeFolkeregisteridenter: Set ) { - opprettPersonOgHåndter(personopplysninger, message, context, historiskeFolkeregisteridenter) { person, aktivitetslogg -> + opprettPersonOgHåndter( + personopplysninger, + message, + context, + historiskeFolkeregisteridenter + ) { person, aktivitetslogg -> HendelseProbe.onSøknadFrilans() person.håndter(søknad, aktivitetslogg) } @@ -204,7 +242,12 @@ internal class HendelseMediator( context: MessageContext, historiskeFolkeregisteridenter: Set ) { - opprettPersonOgHåndter(personopplysninger, message, context, historiskeFolkeregisteridenter) { person, aktivitetslogg -> + opprettPersonOgHåndter( + personopplysninger, + message, + context, + historiskeFolkeregisteridenter + ) { person, aktivitetslogg -> HendelseProbe.onSøknadFrilans() person.håndter(søknad, aktivitetslogg) } @@ -217,34 +260,61 @@ internal class HendelseMediator( context: MessageContext, historiskeFolkeregisteridenter: Set ) { - opprettPersonOgHåndter(personopplysninger, message, context, historiskeFolkeregisteridenter) { person, aktivitetslogg -> + opprettPersonOgHåndter( + personopplysninger, + message, + context, + historiskeFolkeregisteridenter + ) { person, aktivitetslogg -> HendelseProbe.onSøknadFrilans() person.håndter(søknad, aktivitetslogg) } } - override fun behandle(personopplysninger: Personopplysninger, message: InntektsmeldingMessage, inntektsmelding: Inntektsmelding, context: MessageContext) { - opprettPersonOgHåndter(personopplysninger, message, context, emptySet()) { person, aktivitetslogg -> + override fun behandle( + personopplysninger: Personopplysninger, + message: InntektsmeldingMessage, + inntektsmelding: Inntektsmelding, + context: MessageContext + ) { + opprettPersonOgHåndter( + personopplysninger, + message, + context, + emptySet() + ) { person, aktivitetslogg -> HendelseProbe.onInntektsmelding() person.håndter(inntektsmelding, aktivitetslogg) } } - override fun behandle(message: InntektsmeldingerReplayMessage, replays: InntektsmeldingerReplay, context: MessageContext) { + override fun behandle( + message: InntektsmeldingerReplayMessage, + replays: InntektsmeldingerReplay, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onInntektsmeldingReplay() person.håndter(replays, aktivitetslogg) } } - override fun behandle(message: UtbetalingshistorikkMessage, utbetalingshistorikk: Utbetalingshistorikk, context: MessageContext) { + override fun behandle( + message: UtbetalingshistorikkMessage, + utbetalingshistorikk: Utbetalingshistorikk, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onUtbetalingshistorikk() person.håndter(utbetalingshistorikk, aktivitetslogg) } } - override fun behandle(message: UtbetalingshistorikkForFeriepengerMessage, utbetalingshistorikkForFeriepenger: UtbetalingshistorikkForFeriepenger, context: MessageContext) { + override fun behandle( + message: UtbetalingshistorikkForFeriepengerMessage, + utbetalingshistorikkForFeriepenger: UtbetalingshistorikkForFeriepenger, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onUtbetalingshistorikkForFeriepenger() person.håndter(utbetalingshistorikkForFeriepenger, aktivitetslogg) @@ -268,48 +338,76 @@ internal class HendelseMediator( } } - override fun behandle(message: VilkårsgrunnlagMessage, vilkårsgrunnlag: Vilkårsgrunnlag, context: MessageContext) { + override fun behandle( + message: VilkårsgrunnlagMessage, + vilkårsgrunnlag: Vilkårsgrunnlag, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onVilkårsgrunnlag() person.håndter(vilkårsgrunnlag, aktivitetslogg) } } - override fun behandle(message: SimuleringMessage, simulering: Simulering, context: MessageContext) { + override fun behandle( + message: SimuleringMessage, + simulering: Simulering, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onSimulering() person.håndter(simulering, aktivitetslogg) } } - override fun behandle(message: UtbetalingsgodkjenningMessage, utbetalingsgodkjenning: Utbetalingsgodkjenning, context: MessageContext) { + override fun behandle( + message: UtbetalingsgodkjenningMessage, + utbetalingsgodkjenning: Utbetalingsgodkjenning, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onUtbetalingsgodkjenning() person.håndter(utbetalingsgodkjenning, aktivitetslogg) } } - override fun behandle(message: UtbetalingMessage, utbetaling: UtbetalingHendelse, context: MessageContext) { + override fun behandle( + message: UtbetalingMessage, + utbetaling: UtbetalingHendelse, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onUtbetaling() person.håndter(utbetaling, aktivitetslogg) } } - override fun behandle(message: UtbetalingpåminnelseMessage, påminnelse: Utbetalingpåminnelse, context: MessageContext) { + override fun behandle( + message: UtbetalingpåminnelseMessage, + påminnelse: Utbetalingpåminnelse, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> person.håndter(påminnelse, aktivitetslogg) } } - override fun behandle(message: PåminnelseMessage, påminnelse: Påminnelse, context: MessageContext) { + override fun behandle( + message: PåminnelseMessage, + påminnelse: Påminnelse, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onPåminnelse(påminnelse) person.håndter(påminnelse, aktivitetslogg) } } - override fun behandle(message: PersonPåminnelseMessage, påminnelse: PersonPåminnelse, context: MessageContext) { + override fun behandle( + message: PersonPåminnelseMessage, + påminnelse: PersonPåminnelse, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> person.håndter(påminnelse, aktivitetslogg) } @@ -320,20 +418,28 @@ internal class HendelseMediator( anmodning: AnmodningOmForkasting, context: MessageContext ) { - hentPersonOgHåndter(message, context) {person, aktivitetslogg -> + hentPersonOgHåndter(message, context) { person, aktivitetslogg -> person.håndter(anmodning, aktivitetslogg) } } - override fun behandle(message: AnnulleringMessage, annullerUtbetaling: AnnullerUtbetaling, context: MessageContext) { + override fun behandle( + message: AnnulleringMessage, + annullerUtbetaling: AnnullerUtbetaling, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onAnnullerUtbetaling() person.håndter(annullerUtbetaling, aktivitetslogg) } } - override fun behandle(message: AvstemmingMessage, personidentifikator: Personidentifikator, context: MessageContext) { - person(personidentifikator, message, emptySet(), EmptyLog, null) { person -> + override fun behandle( + message: AvstemmingMessage, + personidentifikator: Personidentifikator, + context: MessageContext + ) { + person(personidentifikator, message, emptySet(), EmptyLog, null) { person -> val dto = person.dto() val avstemmer = Avstemmer(dto) context.publish(avstemmer.tilJsonMessage().toJson().also { @@ -346,34 +452,54 @@ internal class HendelseMediator( hentPersonOgHåndter(message, context) { _, _ -> /* intentionally left blank */ } } - override fun behandle(message: OverstyrTidslinjeMessage, overstyrTidslinje: OverstyrTidslinje, context: MessageContext) { + override fun behandle( + message: OverstyrTidslinjeMessage, + overstyrTidslinje: OverstyrTidslinje, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onOverstyrTidslinje() person.håndter(overstyrTidslinje, aktivitetslogg) } } - override fun behandle(message: OverstyrArbeidsgiveropplysningerMessage, overstyrArbeidsgiveropplysninger: OverstyrArbeidsgiveropplysninger, context: MessageContext) { + override fun behandle( + message: OverstyrArbeidsgiveropplysningerMessage, + overstyrArbeidsgiveropplysninger: OverstyrArbeidsgiveropplysninger, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onOverstyrArbeidsgiveropplysninger() person.håndter(overstyrArbeidsgiveropplysninger, aktivitetslogg) } } - override fun behandle(message: OverstyrArbeidsforholdMessage, overstyrArbeidsforhold: OverstyrArbeidsforhold, context: MessageContext) { + override fun behandle( + message: OverstyrArbeidsforholdMessage, + overstyrArbeidsforhold: OverstyrArbeidsforhold, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> HendelseProbe.onOverstyrArbeidsforhold() person.håndter(overstyrArbeidsforhold, aktivitetslogg) } } - override fun behandle(message: GrunnbeløpsreguleringMessage, grunnbeløpsregulering: Grunnbeløpsregulering, context: MessageContext) { + override fun behandle( + message: GrunnbeløpsreguleringMessage, + grunnbeløpsregulering: Grunnbeløpsregulering, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> person.håndter(grunnbeløpsregulering, aktivitetslogg) } } - override fun behandle(message: DødsmeldingMessage, dødsmelding: Dødsmelding, context: MessageContext) { + override fun behandle( + message: DødsmeldingMessage, + dødsmelding: Dødsmelding, + context: MessageContext + ) { hentPersonOgHåndter(message, context) { person, aktivitetslogg -> person.håndter(dødsmelding, aktivitetslogg) } @@ -386,13 +512,23 @@ internal class HendelseMediator( gamleIdenter: Set, context: MessageContext ) { - hentPersonOgHåndter(nyPersonidentifikator, null, message, context, gamleIdenter) { person, aktivitetslogg -> + hentPersonOgHåndter( + nyPersonidentifikator, + null, + message, + context, + gamleIdenter + ) { person, aktivitetslogg -> if (støtterIdentbytte) { person.håndter(identOpphørt, aktivitetslogg, nyPersonidentifikator) } - context.publish(JsonMessage.newMessage("slackmelding", mapOf( - "melding" to "Det er en person som har byttet ident." - )).toJson()) + context.publish( + JsonMessage.newMessage( + "slackmelding", mapOf( + "melding" to "Det er en person som har byttet ident." + ) + ).toJson() + ) } } @@ -428,6 +564,7 @@ internal class HendelseMediator( person.håndter(forkastSykmeldingsperioder, aktivitetslogg) } } + override fun behandle( message: AvbruttSøknadMessage, avbruttSøknad: AvbruttSøknad, @@ -438,6 +575,7 @@ internal class HendelseMediator( person.håndter(avbruttSøknad, aktivitetslogg) } } + override fun behandle( message: AvbruttArbeidsledigSøknadMessage, avbruttSøknad: AvbruttSøknad, @@ -479,7 +617,14 @@ internal class HendelseMediator( handler: (Person, IAktivitetslogg) -> Unit ) { val personidentifikator = Personidentifikator(message.meldingsporing.fødselsnummer) - hentPersonOgHåndter(personidentifikator, personopplysninger, message, context, historiskeFolkeregisteridenter, handler) + hentPersonOgHåndter( + personidentifikator, + personopplysninger, + message, + context, + historiskeFolkeregisteridenter, + handler + ) } private fun hentPersonOgHåndter( @@ -490,6 +635,7 @@ internal class HendelseMediator( val personidentifikator = Personidentifikator(message.meldingsporing.fødselsnummer) hentPersonOgHåndter(personidentifikator, null, message, context, handler = handler) } + private fun hentPersonOgHåndter( personidentifikator: Personidentifikator, personopplysninger: Personopplysninger?, @@ -504,15 +650,35 @@ internal class HendelseMediator( val subsumsjonMediator = SubsumsjonMediator(message, versjonAvKode) val personMediator = PersonMediator(message) val datadelingMediator = DatadelingMediator(aktivitetslogg, message) - person(personidentifikator, message, historiskeFolkeregisteridenter, subsumsjonMediator, personopplysninger) { person -> + person( + personidentifikator, + message, + historiskeFolkeregisteridenter, + subsumsjonMediator, + personopplysninger + ) { person -> person.addObserver(personMediator) person.addObserver(VedtaksperiodeProbe) handler(person, aktivitetslogg) } - ferdigstill(context, personMediator, subsumsjonMediator, datadelingMediator, message, aktivitetslogg) + ferdigstill( + context, + personMediator, + subsumsjonMediator, + datadelingMediator, + message, + aktivitetslogg + ) } - private fun person(personidentifikator: Personidentifikator, message: HendelseMessage, historiskeFolkeregisteridenter: Set, subsumsjonslogg: Subsumsjonslogg, personopplysninger: Personopplysninger?, block: (Person) -> Unit) { + private fun person( + personidentifikator: Personidentifikator, + message: HendelseMessage, + historiskeFolkeregisteridenter: Set, + subsumsjonslogg: Subsumsjonslogg, + personopplysninger: Personopplysninger?, + block: (Person) -> Unit + ) { personDao.hentEllerOpprettPerson( subsumsjonslogg = subsumsjonslogg, personidentifikator = personidentifikator, @@ -551,6 +717,7 @@ internal interface IHendelseMediator { context: MessageContext, historiskeFolkeregisteridenter: Set ) + fun behandle( personopplysninger: Personopplysninger, message: NyFrilansSøknadMessage, @@ -558,6 +725,7 @@ internal interface IHendelseMediator { context: MessageContext, historiskeFolkeregisteridenter: Set ) + fun behandle( personopplysninger: Personopplysninger, message: NySelvstendigSøknadMessage, @@ -565,6 +733,7 @@ internal interface IHendelseMediator { context: MessageContext, historiskeFolkeregisteridenter: Set ) + fun behandle( personopplysninger: Personopplysninger, message: NyArbeidsledigSøknadMessage, @@ -572,6 +741,7 @@ internal interface IHendelseMediator { context: MessageContext, historiskeFolkeregisteridenter: Set ) + fun behandle( personopplysninger: Personopplysninger, message: SendtSøknadArbeidsgiverMessage, @@ -579,6 +749,7 @@ internal interface IHendelseMediator { context: MessageContext, historiskeFolkeregisteridenter: Set ) + fun behandle( personopplysninger: Personopplysninger, message: SendtSøknadFrilansMessage, @@ -586,6 +757,7 @@ internal interface IHendelseMediator { context: MessageContext, historiskeFolkeregisteridenter: Set ) + fun behandle( personopplysninger: Personopplysninger, message: SendtSøknadSelvstendigMessage, @@ -593,6 +765,7 @@ internal interface IHendelseMediator { context: MessageContext, historiskeFolkeregisteridenter: Set ) + fun behandle( personopplysninger: Personopplysninger, message: SendtSøknadArbeidsledigMessage, @@ -600,6 +773,7 @@ internal interface IHendelseMediator { context: MessageContext, historiskeFolkeregisteridenter: Set ) + fun behandle( personopplysninger: Personopplysninger, message: SendtSøknadNavMessage, @@ -607,28 +781,120 @@ internal interface IHendelseMediator { context: MessageContext, historiskeFolkeregisteridenter: Set ) - fun behandle(personopplysninger: Personopplysninger, message: InntektsmeldingMessage, inntektsmelding: Inntektsmelding, context: MessageContext) - fun behandle(message: InntektsmeldingerReplayMessage, replays: InntektsmeldingerReplay, context: MessageContext) - fun behandle(message: UtbetalingpåminnelseMessage, påminnelse: Utbetalingpåminnelse, context: MessageContext) + + fun behandle( + personopplysninger: Personopplysninger, + message: InntektsmeldingMessage, + inntektsmelding: Inntektsmelding, + context: MessageContext + ) + + fun behandle( + message: InntektsmeldingerReplayMessage, + replays: InntektsmeldingerReplay, + context: MessageContext + ) + + fun behandle( + message: UtbetalingpåminnelseMessage, + påminnelse: Utbetalingpåminnelse, + context: MessageContext + ) + fun behandle(message: PåminnelseMessage, påminnelse: Påminnelse, context: MessageContext) - fun behandle(message: PersonPåminnelseMessage, påminnelse: PersonPåminnelse, context: MessageContext) - fun behandle(message: AnmodningOmForkastingMessage, anmodning: AnmodningOmForkasting, context: MessageContext) - fun behandle(message: UtbetalingshistorikkMessage, utbetalingshistorikk: Utbetalingshistorikk, context: MessageContext) - fun behandle(message: UtbetalingshistorikkForFeriepengerMessage, utbetalingshistorikkForFeriepenger: UtbetalingshistorikkForFeriepenger, context: MessageContext) + fun behandle( + message: PersonPåminnelseMessage, + påminnelse: PersonPåminnelse, + context: MessageContext + ) + + fun behandle( + message: AnmodningOmForkastingMessage, + anmodning: AnmodningOmForkasting, + context: MessageContext + ) + + fun behandle( + message: UtbetalingshistorikkMessage, + utbetalingshistorikk: Utbetalingshistorikk, + context: MessageContext + ) + + fun behandle( + message: UtbetalingshistorikkForFeriepengerMessage, + utbetalingshistorikkForFeriepenger: UtbetalingshistorikkForFeriepenger, + context: MessageContext + ) + fun behandle(message: YtelserMessage, ytelser: Ytelser, context: MessageContext) - fun behandle(message: SykepengegrunnlagForArbeidsgiverMessage, sykepengegrunnlagForArbeidsgiver: SykepengegrunnlagForArbeidsgiver, context: MessageContext) - fun behandle(message: VilkårsgrunnlagMessage, vilkårsgrunnlag: Vilkårsgrunnlag, context: MessageContext) - fun behandle(message: UtbetalingsgodkjenningMessage, utbetalingsgodkjenning: Utbetalingsgodkjenning, context: MessageContext) - fun behandle(message: UtbetalingMessage, utbetaling: UtbetalingHendelse, context: MessageContext) + fun behandle( + message: SykepengegrunnlagForArbeidsgiverMessage, + sykepengegrunnlagForArbeidsgiver: SykepengegrunnlagForArbeidsgiver, + context: MessageContext + ) + + fun behandle( + message: VilkårsgrunnlagMessage, + vilkårsgrunnlag: Vilkårsgrunnlag, + context: MessageContext + ) + + fun behandle( + message: UtbetalingsgodkjenningMessage, + utbetalingsgodkjenning: Utbetalingsgodkjenning, + context: MessageContext + ) + + fun behandle( + message: UtbetalingMessage, + utbetaling: UtbetalingHendelse, + context: MessageContext + ) + fun behandle(message: SimuleringMessage, simulering: Simulering, context: MessageContext) - fun behandle(message: AnnulleringMessage, annullerUtbetaling: AnnullerUtbetaling, context: MessageContext) - fun behandle(message: AvstemmingMessage, personidentifikator: Personidentifikator, context: MessageContext) + fun behandle( + message: AnnulleringMessage, + annullerUtbetaling: AnnullerUtbetaling, + context: MessageContext + ) + + fun behandle( + message: AvstemmingMessage, + personidentifikator: Personidentifikator, + context: MessageContext + ) + fun behandle(message: MigrateMessage, migrate: Migrate, context: MessageContext) - fun behandle(message: OverstyrTidslinjeMessage, overstyrTidslinje: OverstyrTidslinje, context: MessageContext) - fun behandle(message: OverstyrArbeidsgiveropplysningerMessage, overstyrArbeidsgiveropplysninger: OverstyrArbeidsgiveropplysninger, context: MessageContext) - fun behandle(message: OverstyrArbeidsforholdMessage, overstyrArbeidsforhold: OverstyrArbeidsforhold, context: MessageContext) - fun behandle(message: GrunnbeløpsreguleringMessage, grunnbeløpsregulering: Grunnbeløpsregulering, context: MessageContext) - fun behandle(message: InfotrygdendringMessage, infotrygdEndring: Infotrygdendring, context: MessageContext) + fun behandle( + message: OverstyrTidslinjeMessage, + overstyrTidslinje: OverstyrTidslinje, + context: MessageContext + ) + + fun behandle( + message: OverstyrArbeidsgiveropplysningerMessage, + overstyrArbeidsgiveropplysninger: OverstyrArbeidsgiveropplysninger, + context: MessageContext + ) + + fun behandle( + message: OverstyrArbeidsforholdMessage, + overstyrArbeidsforhold: OverstyrArbeidsforhold, + context: MessageContext + ) + + fun behandle( + message: GrunnbeløpsreguleringMessage, + grunnbeløpsregulering: Grunnbeløpsregulering, + context: MessageContext + ) + + fun behandle( + message: InfotrygdendringMessage, + infotrygdEndring: Infotrygdendring, + context: MessageContext + ) + fun behandle(message: DødsmeldingMessage, dødsmelding: Dødsmelding, context: MessageContext) fun behandle( nyPersonidentifikator: Personidentifikator, @@ -637,10 +903,40 @@ internal interface IHendelseMediator { gamleIdenter: Set, context: MessageContext ) - fun behandle(message: UtbetalingshistorikkEtterInfotrygdendringMessage, utbetalingshistorikkEtterInfotrygdendring: UtbetalingshistorikkEtterInfotrygdendring, context: MessageContext) - fun behandle(message: ForkastSykmeldingsperioderMessage, forkastSykmeldingsperioder: ForkastSykmeldingsperioder, context: MessageContext) - fun behandle(avbruttSøknadMessage: AvbruttSøknadMessage, avbruttSøknad: AvbruttSøknad, context: MessageContext) - fun behandle(avbruttArbeidsledigSøknadMessage: AvbruttArbeidsledigSøknadMessage, avbruttSøknad: AvbruttSøknad, context: MessageContext) - fun behandle(message: SkjønnsmessigFastsettelseMessage, skjønnsmessigFastsettelse: SkjønnsmessigFastsettelse, context: MessageContext) - fun behandle(message: MinimumSykdomsgradVurdertMessage, minimumSykdomsgradsvurdering: MinimumSykdomsgradsvurderingMelding, context: MessageContext) + + fun behandle( + message: UtbetalingshistorikkEtterInfotrygdendringMessage, + utbetalingshistorikkEtterInfotrygdendring: UtbetalingshistorikkEtterInfotrygdendring, + context: MessageContext + ) + + fun behandle( + message: ForkastSykmeldingsperioderMessage, + forkastSykmeldingsperioder: ForkastSykmeldingsperioder, + context: MessageContext + ) + + fun behandle( + avbruttSøknadMessage: AvbruttSøknadMessage, + avbruttSøknad: AvbruttSøknad, + context: MessageContext + ) + + fun behandle( + avbruttArbeidsledigSøknadMessage: AvbruttArbeidsledigSøknadMessage, + avbruttSøknad: AvbruttSøknad, + context: MessageContext + ) + + fun behandle( + message: SkjønnsmessigFastsettelseMessage, + skjønnsmessigFastsettelse: SkjønnsmessigFastsettelse, + context: MessageContext + ) + + fun behandle( + message: MinimumSykdomsgradVurdertMessage, + minimumSykdomsgradsvurdering: MinimumSykdomsgradsvurderingMelding, + context: MessageContext + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/MessageMediator.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/MessageMediator.kt index c60ab0b12b..e60c1bfc31 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/MessageMediator.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/MessageMediator.kt @@ -149,13 +149,24 @@ internal class MessageMediator( } } - override fun onRiverError(riverName: String, problems: MessageProblems, context: MessageContext, metadata: MessageMetadata) { + override fun onRiverError( + riverName: String, + problems: MessageProblems, + context: MessageContext, + metadata: MessageMetadata + ) { riverErrors.add(riverName to problems) } fun afterRiverHandling(message: String) { if (messageRecognized || riverErrors.isEmpty()) return - sikkerLogg.warn("kunne ikke gjenkjenne melding:\n\t$message\n\nProblemer:\n${riverErrors.joinToString(separator = "\n") { "${it.first}:\n${it.second}" }}") + sikkerLogg.warn( + "kunne ikke gjenkjenne melding:\n\t$message\n\nProblemer:\n${ + riverErrors.joinToString( + separator = "\n" + ) { "${it.first}:\n${it.second}" } + }" + ) } private fun severeErrorHandler(err: Exception, message: HendelseMessage) { @@ -167,7 +178,11 @@ internal class MessageMediator( errorHandler(err, message.toJson(), message.secureDiagnosticinfo()) } - private fun errorHandler(err: Exception, message: String, context: Map = emptyMap()) { + private fun errorHandler( + err: Exception, + message: String, + context: Map = emptyMap() + ) { log.error("alvorlig feil: ${err.message} (se sikkerlogg for melding)", err) withMDC(context) { sikkerLogg.error("alvorlig feil: ${err.message}\n\t$message", err) } } @@ -180,7 +195,12 @@ internal class MessageMediator( rapidsConnection.register(this) } - override fun onMessage(message: String, context: MessageContext, metadata: MessageMetadata, meterRegistry: MeterRegistry) { + override fun onMessage( + message: String, + context: MessageContext, + metadata: MessageMetadata, + meterRegistry: MeterRegistry + ) { beforeRiverHandling() notifyMessage(message, context, metadata, meterRegistry) afterRiverHandling(message) @@ -203,5 +223,10 @@ internal class MessageMediator( internal interface IMessageMediator { fun onRecognizedMessage(message: HendelseMessage, context: MessageContext) - fun onRiverError(riverName: String, problems: MessageProblems, context: MessageContext, metadata: MessageMetadata) + fun onRiverError( + riverName: String, + problems: MessageProblems, + context: MessageContext, + metadata: MessageMetadata + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/PersonMediator.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/PersonMediator.kt index e8cce062bb..60d92ead10 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/PersonMediator.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/PersonMediator.kt @@ -5,6 +5,8 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import java.time.LocalDate +import java.util.UUID import no.nav.helse.Personidentifikator import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.Påminnelse @@ -13,13 +15,12 @@ import no.nav.helse.person.PersonObserver.FørsteFraværsdag import no.nav.helse.person.TilstandType import no.nav.helse.spleis.meldinger.model.HendelseMessage import org.slf4j.LoggerFactory -import java.time.LocalDate -import java.util.* internal class PersonMediator( private val message: HendelseMessage ) : PersonObserver { private val meldinger = mutableListOf() + private companion object { private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") private val objectMapper = jacksonObjectMapper() @@ -53,143 +54,205 @@ internal class PersonMediator( trengerArbeidsgiverperiode: Boolean, erPotensiellForespørsel: Boolean ) { - queueMessage(JsonMessage.newMessage("trenger_inntektsmelding_replay", mapOf( - "organisasjonsnummer" to organisasjonsnummer, - "vedtaksperiodeId" to vedtaksperiodeId, - "skjæringstidspunkt" to skjæringstidspunkt, - "sykmeldingsperioder" to sykmeldingsperioder.map { - mapOf( - "fom" to it.start, - "tom" to it.endInclusive - ) - }, - "egenmeldingsperioder" to egenmeldingsperioder.map { - mapOf( - "fom" to it.start, - "tom" to it.endInclusive - ) - }, - "førsteFraværsdager" to førsteFraværsdager.map { - mapOf( - "organisasjonsnummer" to it.organisasjonsnummer, - "førsteFraværsdag" to it.førsteFraværsdag - ) - }, - "trengerArbeidsgiverperiode" to trengerArbeidsgiverperiode, - "potensiellForespørsel" to erPotensiellForespørsel - ))) + queueMessage( + JsonMessage.newMessage( + "trenger_inntektsmelding_replay", mapOf( + "organisasjonsnummer" to organisasjonsnummer, + "vedtaksperiodeId" to vedtaksperiodeId, + "skjæringstidspunkt" to skjæringstidspunkt, + "sykmeldingsperioder" to sykmeldingsperioder.map { + mapOf( + "fom" to it.start, + "tom" to it.endInclusive + ) + }, + "egenmeldingsperioder" to egenmeldingsperioder.map { + mapOf( + "fom" to it.start, + "tom" to it.endInclusive + ) + }, + "førsteFraværsdager" to førsteFraværsdager.map { + mapOf( + "organisasjonsnummer" to it.organisasjonsnummer, + "førsteFraværsdag" to it.førsteFraværsdag + ) + }, + "trengerArbeidsgiverperiode" to trengerArbeidsgiverperiode, + "potensiellForespørsel" to erPotensiellForespørsel + ) + ) + ) } override fun inntektsmeldingFørSøknad(event: PersonObserver.InntektsmeldingFørSøknadEvent) { - queueMessage(JsonMessage.newMessage("inntektsmelding_før_søknad", mapOf( - "inntektsmeldingId" to event.inntektsmeldingId, - "relevante_sykmeldingsperioder" to event.relevanteSykmeldingsperioder.map { periode -> - mapOf( - "fom" to periode.start, - "tom" to periode.endInclusive - ) - }, - "organisasjonsnummer" to event.organisasjonsnummer - ))) + queueMessage( + JsonMessage.newMessage( + "inntektsmelding_før_søknad", mapOf( + "inntektsmeldingId" to event.inntektsmeldingId, + "relevante_sykmeldingsperioder" to event.relevanteSykmeldingsperioder.map { periode -> + mapOf( + "fom" to periode.start, + "tom" to periode.endInclusive + ) + }, + "organisasjonsnummer" to event.organisasjonsnummer + ) + ) + ) } - override fun inntektsmeldingIkkeHåndtert(inntektsmeldingId: UUID, organisasjonsnummer: String, harPeriodeInnenfor16Dager: Boolean) { - queueMessage(JsonMessage.newMessage("inntektsmelding_ikke_håndtert", mapOf( - "inntektsmeldingId" to inntektsmeldingId, - "organisasjonsnummer" to organisasjonsnummer, - "harPeriodeInnenfor16Dager" to harPeriodeInnenfor16Dager - ))) + override fun inntektsmeldingIkkeHåndtert( + inntektsmeldingId: UUID, + organisasjonsnummer: String, + harPeriodeInnenfor16Dager: Boolean + ) { + queueMessage( + JsonMessage.newMessage( + "inntektsmelding_ikke_håndtert", mapOf( + "inntektsmeldingId" to inntektsmeldingId, + "organisasjonsnummer" to organisasjonsnummer, + "harPeriodeInnenfor16Dager" to harPeriodeInnenfor16Dager + ) + ) + ) } - override fun inntektsmeldingHåndtert(inntektsmeldingId: UUID, vedtaksperiodeId: UUID, organisasjonsnummer: String) { - queueMessage(JsonMessage.newMessage("inntektsmelding_håndtert", mapOf( - "inntektsmeldingId" to inntektsmeldingId, - "organisasjonsnummer" to organisasjonsnummer, - "vedtaksperiodeId" to vedtaksperiodeId - ))) + override fun inntektsmeldingHåndtert( + inntektsmeldingId: UUID, + vedtaksperiodeId: UUID, + organisasjonsnummer: String + ) { + queueMessage( + JsonMessage.newMessage( + "inntektsmelding_håndtert", mapOf( + "inntektsmeldingId" to inntektsmeldingId, + "organisasjonsnummer" to organisasjonsnummer, + "vedtaksperiodeId" to vedtaksperiodeId + ) + ) + ) } - override fun søknadHåndtert(søknadId: UUID, vedtaksperiodeId: UUID, organisasjonsnummer: String) { - queueMessage(JsonMessage.newMessage("søknad_håndtert", mapOf( - "søknadId" to søknadId, - "organisasjonsnummer" to organisasjonsnummer, - "vedtaksperiodeId" to vedtaksperiodeId - ))) + + override fun søknadHåndtert( + søknadId: UUID, + vedtaksperiodeId: UUID, + organisasjonsnummer: String + ) { + queueMessage( + JsonMessage.newMessage( + "søknad_håndtert", mapOf( + "søknadId" to søknadId, + "organisasjonsnummer" to organisasjonsnummer, + "vedtaksperiodeId" to vedtaksperiodeId + ) + ) + ) } override fun vedtaksperiodeAnnullert(vedtaksperiodeAnnullertEvent: PersonObserver.VedtaksperiodeAnnullertEvent) { - queueMessage(JsonMessage.newMessage("vedtaksperiode_annullert", mapOf( - "fom" to vedtaksperiodeAnnullertEvent.fom, - "tom" to vedtaksperiodeAnnullertEvent.tom, - "vedtaksperiodeId" to vedtaksperiodeAnnullertEvent.vedtaksperiodeId, - "behandlingId" to vedtaksperiodeAnnullertEvent.behandlingId, - "organisasjonsnummer" to vedtaksperiodeAnnullertEvent.organisasjonsnummer - ))) + queueMessage( + JsonMessage.newMessage( + "vedtaksperiode_annullert", mapOf( + "fom" to vedtaksperiodeAnnullertEvent.fom, + "tom" to vedtaksperiodeAnnullertEvent.tom, + "vedtaksperiodeId" to vedtaksperiodeAnnullertEvent.vedtaksperiodeId, + "behandlingId" to vedtaksperiodeAnnullertEvent.behandlingId, + "organisasjonsnummer" to vedtaksperiodeAnnullertEvent.organisasjonsnummer + ) + ) + ) } override fun overlappendeInfotrygdperioder(event: PersonObserver.OverlappendeInfotrygdperioder) { queueMessage( JsonMessage.newMessage( "overlappende_infotrygdperioder", mutableMapOf( - "infotrygdhistorikkHendelseId" to event.infotrygdhistorikkHendelseId, - "vedtaksperioder" to event.overlappendeInfotrygdperioder.map { it -> - mapOf("organisasjonsnummer" to it.organisasjonsnummer, - "vedtaksperiodeId" to it.vedtaksperiodeId, - "vedtaksperiodeFom" to it.vedtaksperiodeFom, - "vedtaksperiodeTom" to it.vedtaksperiodeTom, - "vedtaksperiodetilstand" to it.vedtaksperiodetilstand, - "infotrygdperioder" to it.infotrygdperioder.map { infotrygdperiode -> - mapOf( - "fom" to infotrygdperiode.fom, - "tom" to infotrygdperiode.tom, - "type" to infotrygdperiode.type, - "organisasjonsnummer" to infotrygdperiode.orgnummer - ) - } - ) - }, - ) + "infotrygdhistorikkHendelseId" to event.infotrygdhistorikkHendelseId, + "vedtaksperioder" to event.overlappendeInfotrygdperioder.map { it -> + mapOf("organisasjonsnummer" to it.organisasjonsnummer, + "vedtaksperiodeId" to it.vedtaksperiodeId, + "vedtaksperiodeFom" to it.vedtaksperiodeFom, + "vedtaksperiodeTom" to it.vedtaksperiodeTom, + "vedtaksperiodetilstand" to it.vedtaksperiodetilstand, + "infotrygdperioder" to it.infotrygdperioder.map { infotrygdperiode -> + mapOf( + "fom" to infotrygdperiode.fom, + "tom" to infotrygdperiode.tom, + "type" to infotrygdperiode.type, + "organisasjonsnummer" to infotrygdperiode.orgnummer + ) + } + ) + }, + ) ) ) } - override fun vedtaksperiodePåminnet(vedtaksperiodeId: UUID, organisasjonsnummer: String, påminnelse: Påminnelse) { - queueMessage(JsonMessage.newMessage("vedtaksperiode_påminnet", påminnelse.toOutgoingMessage())) + override fun vedtaksperiodePåminnet( + vedtaksperiodeId: UUID, + organisasjonsnummer: String, + påminnelse: Påminnelse + ) { + queueMessage( + JsonMessage.newMessage( + "vedtaksperiode_påminnet", + påminnelse.toOutgoingMessage() + ) + ) } - override fun vedtaksperiodeIkkePåminnet(vedtaksperiodeId: UUID, organisasjonsnummer: String, nåværendeTilstand: TilstandType) { - queueMessage(JsonMessage.newMessage("vedtaksperiode_ikke_påminnet", mapOf( - "organisasjonsnummer" to organisasjonsnummer, - "vedtaksperiodeId" to vedtaksperiodeId, - "tilstand" to nåværendeTilstand - ))) + override fun vedtaksperiodeIkkePåminnet( + vedtaksperiodeId: UUID, + organisasjonsnummer: String, + nåværendeTilstand: TilstandType + ) { + queueMessage( + JsonMessage.newMessage( + "vedtaksperiode_ikke_påminnet", mapOf( + "organisasjonsnummer" to organisasjonsnummer, + "vedtaksperiodeId" to vedtaksperiodeId, + "tilstand" to nåværendeTilstand + ) + ) + ) } override fun annullering(event: PersonObserver.UtbetalingAnnullertEvent) { - queueMessage(JsonMessage.newMessage("utbetaling_annullert", mutableMapOf( - "organisasjonsnummer" to event.organisasjonsnummer, - "utbetalingId" to event.utbetalingId, - "korrelasjonsId" to event.korrelasjonsId, - "fom" to event.fom, - "tom" to event.tom, - "tidspunkt" to event.annullertAvSaksbehandler, - "epost" to event.saksbehandlerEpost, - "ident" to event.saksbehandlerIdent, - "arbeidsgiverFagsystemId" to event.arbeidsgiverFagsystemId, - "personFagsystemId" to event.personFagsystemId - ))) + queueMessage( + JsonMessage.newMessage( + "utbetaling_annullert", mutableMapOf( + "organisasjonsnummer" to event.organisasjonsnummer, + "utbetalingId" to event.utbetalingId, + "korrelasjonsId" to event.korrelasjonsId, + "fom" to event.fom, + "tom" to event.tom, + "tidspunkt" to event.annullertAvSaksbehandler, + "epost" to event.saksbehandlerEpost, + "ident" to event.saksbehandlerIdent, + "arbeidsgiverFagsystemId" to event.arbeidsgiverFagsystemId, + "personFagsystemId" to event.personFagsystemId + ) + ) + ) } override fun utbetalingEndret(event: PersonObserver.UtbetalingEndretEvent) { - queueMessage(JsonMessage.newMessage("utbetaling_endret", mapOf( - "organisasjonsnummer" to event.organisasjonsnummer, - "utbetalingId" to event.utbetalingId, - "type" to event.type, - "forrigeStatus" to event.forrigeStatus, - "gjeldendeStatus" to event.gjeldendeStatus, - "arbeidsgiverOppdrag" to event.arbeidsgiverOppdrag, - "personOppdrag" to event.personOppdrag, - "korrelasjonsId" to event.korrelasjonsId - ))) + queueMessage( + JsonMessage.newMessage( + "utbetaling_endret", mapOf( + "organisasjonsnummer" to event.organisasjonsnummer, + "utbetalingId" to event.utbetalingId, + "type" to event.type, + "forrigeStatus" to event.forrigeStatus, + "gjeldendeStatus" to event.gjeldendeStatus, + "arbeidsgiverOppdrag" to event.arbeidsgiverOppdrag, + "personOppdrag" to event.personOppdrag, + "korrelasjonsId" to event.korrelasjonsId + ) + ) + ) } override fun nyVedtaksperiodeUtbetaling( @@ -197,11 +260,15 @@ internal class PersonMediator( utbetalingId: UUID, vedtaksperiodeId: UUID ) { - queueMessage(JsonMessage.newMessage("vedtaksperiode_ny_utbetaling", mapOf( - "organisasjonsnummer" to organisasjonsnummer, - "vedtaksperiodeId" to vedtaksperiodeId, - "utbetalingId" to utbetalingId - ))) + queueMessage( + JsonMessage.newMessage( + "vedtaksperiode_ny_utbetaling", mapOf( + "organisasjonsnummer" to organisasjonsnummer, + "vedtaksperiodeId" to vedtaksperiodeId, + "utbetalingId" to utbetalingId + ) + ) + ) } override fun overstyringIgangsatt(event: PersonObserver.OverstyringIgangsatt) { @@ -234,8 +301,12 @@ internal class PersonMediator( queueMessage(utbetalingAvsluttet("utbetaling_uten_utbetaling", event)) } - private fun utbetalingAvsluttet(eventName: String, event: PersonObserver.UtbetalingUtbetaltEvent) = - JsonMessage.newMessage(eventName, mapOf( + private fun utbetalingAvsluttet( + eventName: String, + event: PersonObserver.UtbetalingUtbetaltEvent + ) = + JsonMessage.newMessage( + eventName, mapOf( "organisasjonsnummer" to event.organisasjonsnummer, "utbetalingId" to event.utbetalingId, "korrelasjonsId" to event.korrelasjonsId, @@ -253,27 +324,36 @@ internal class PersonMediator( "arbeidsgiverOppdrag" to event.arbeidsgiverOppdrag, "personOppdrag" to event.personOppdrag, "utbetalingsdager" to event.utbetalingsdager - )) + ) + ) override fun feriepengerUtbetalt(event: PersonObserver.FeriepengerUtbetaltEvent) = - queueMessage(JsonMessage.newMessage("feriepenger_utbetalt", mapOf( - "organisasjonsnummer" to event.organisasjonsnummer, - "arbeidsgiverOppdrag" to event.arbeidsgiverOppdrag, - "personOppdrag" to event.personOppdrag, - ))) + queueMessage( + JsonMessage.newMessage( + "feriepenger_utbetalt", mapOf( + "organisasjonsnummer" to event.organisasjonsnummer, + "arbeidsgiverOppdrag" to event.arbeidsgiverOppdrag, + "personOppdrag" to event.personOppdrag, + ) + ) + ) override fun vedtaksperiodeEndret(event: PersonObserver.VedtaksperiodeEndretEvent) { - queueMessage(JsonMessage.newMessage("vedtaksperiode_endret", mapOf( - "organisasjonsnummer" to event.organisasjonsnummer, - "vedtaksperiodeId" to event.vedtaksperiodeId, - "gjeldendeTilstand" to event.gjeldendeTilstand, - "forrigeTilstand" to event.forrigeTilstand, - "hendelser" to event.hendelser, - "makstid" to event.makstid, - "fom" to event.fom, - "tom" to event.tom, - "skjæringstidspunkt" to event.skjæringstidspunkt - ))) + queueMessage( + JsonMessage.newMessage( + "vedtaksperiode_endret", mapOf( + "organisasjonsnummer" to event.organisasjonsnummer, + "vedtaksperiodeId" to event.vedtaksperiodeId, + "gjeldendeTilstand" to event.gjeldendeTilstand, + "forrigeTilstand" to event.forrigeTilstand, + "hendelser" to event.hendelser, + "makstid" to event.makstid, + "fom" to event.fom, + "tom" to event.tom, + "skjæringstidspunkt" to event.skjæringstidspunkt + ) + ) + ) } override fun vedtaksperioderVenter(eventer: List) { @@ -303,13 +383,17 @@ internal class PersonMediator( } override fun vedtaksperiodeOpprettet(event: PersonObserver.VedtaksperiodeOpprettet) { - queueMessage(JsonMessage.newMessage("vedtaksperiode_opprettet", mapOf( - "organisasjonsnummer" to event.organisasjonsnummer, - "vedtaksperiodeId" to event.vedtaksperiodeId, - "skjæringstidspunkt" to event.skjæringstidspunkt, - "fom" to event.periode.start, - "tom" to event.periode.endInclusive - ))) + queueMessage( + JsonMessage.newMessage( + "vedtaksperiode_opprettet", mapOf( + "organisasjonsnummer" to event.organisasjonsnummer, + "vedtaksperiodeId" to event.vedtaksperiodeId, + "skjæringstidspunkt" to event.skjæringstidspunkt, + "fom" to event.periode.start, + "tom" to event.periode.endInclusive + ) + ) + ) } override fun vedtaksperiodeForkastet(event: PersonObserver.VedtaksperiodeForkastetEvent) { @@ -317,51 +401,67 @@ internal class PersonMediator( } override fun nyBehandling(event: PersonObserver.BehandlingOpprettetEvent) { - queueMessage(JsonMessage.newMessage("behandling_opprettet", mutableMapOf( - "organisasjonsnummer" to event.organisasjonsnummer, - "vedtaksperiodeId" to event.vedtaksperiodeId, - "behandlingId" to event.behandlingId, - "søknadIder" to event.søknadIder, - "type" to event.type, - "fom" to event.fom, - "tom" to event.tom, - "kilde" to mapOf( - "meldingsreferanseId" to event.kilde.meldingsreferanseId, - "innsendt" to event.kilde.innsendt, - "registrert" to event.kilde.registert, - "avsender" to event.kilde.avsender + queueMessage( + JsonMessage.newMessage( + "behandling_opprettet", mutableMapOf( + "organisasjonsnummer" to event.organisasjonsnummer, + "vedtaksperiodeId" to event.vedtaksperiodeId, + "behandlingId" to event.behandlingId, + "søknadIder" to event.søknadIder, + "type" to event.type, + "fom" to event.fom, + "tom" to event.tom, + "kilde" to mapOf( + "meldingsreferanseId" to event.kilde.meldingsreferanseId, + "innsendt" to event.kilde.innsendt, + "registrert" to event.kilde.registert, + "avsender" to event.kilde.avsender + ) ) - ))) + ) + ) } override fun behandlingForkastet(event: PersonObserver.BehandlingForkastetEvent) { - queueMessage(JsonMessage.newMessage("behandling_forkastet", mapOf( - "organisasjonsnummer" to event.organisasjonsnummer, - "vedtaksperiodeId" to event.vedtaksperiodeId, - "behandlingId" to event.behandlingId, - "automatiskBehandling" to event.automatiskBehandling - ))) + queueMessage( + JsonMessage.newMessage( + "behandling_forkastet", mapOf( + "organisasjonsnummer" to event.organisasjonsnummer, + "vedtaksperiodeId" to event.vedtaksperiodeId, + "behandlingId" to event.behandlingId, + "automatiskBehandling" to event.automatiskBehandling + ) + ) + ) } override fun behandlingLukket(event: PersonObserver.BehandlingLukketEvent) { - queueMessage(JsonMessage.newMessage("behandling_lukket", mapOf( - "organisasjonsnummer" to event.organisasjonsnummer, - "vedtaksperiodeId" to event.vedtaksperiodeId, - "behandlingId" to event.behandlingId - ))) + queueMessage( + JsonMessage.newMessage( + "behandling_lukket", mapOf( + "organisasjonsnummer" to event.organisasjonsnummer, + "vedtaksperiodeId" to event.vedtaksperiodeId, + "behandlingId" to event.behandlingId + ) + ) + ) } override fun avsluttetUtenVedtak(event: PersonObserver.AvsluttetUtenVedtakEvent) { - queueMessage(JsonMessage.newMessage("avsluttet_uten_vedtak", mapOf( - "organisasjonsnummer" to event.organisasjonsnummer, - "vedtaksperiodeId" to event.vedtaksperiodeId, - "behandlingId" to event.behandlingId, - "fom" to event.periode.start, - "tom" to event.periode.endInclusive, - "skjæringstidspunkt" to event.skjæringstidspunkt, - "hendelser" to event.hendelseIder, - "avsluttetTidspunkt" to event.avsluttetTidspunkt - ))) + queueMessage( + JsonMessage.newMessage( + "avsluttet_uten_vedtak", mapOf( + "organisasjonsnummer" to event.organisasjonsnummer, + "vedtaksperiodeId" to event.vedtaksperiodeId, + "behandlingId" to event.behandlingId, + "fom" to event.periode.start, + "tom" to event.periode.endInclusive, + "skjæringstidspunkt" to event.skjæringstidspunkt, + "hendelser" to event.hendelseIder, + "avsluttetTidspunkt" to event.avsluttetTidspunkt + ) + ) + ) } override fun avsluttetMedVedtak(event: PersonObserver.AvsluttetMedVedtakEvent) { @@ -392,6 +492,7 @@ internal class PersonMediator( ) } ) + is PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn -> mutableMapOf( "fastsatt" to fakta.fastsatt, "omregnetÅrsinntekt" to fakta.omregnetÅrsinntekt, @@ -405,25 +506,36 @@ internal class PersonMediator( }, "skjønnsfastsatt" to fakta.skjønnsfastsatt ) - is PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd-> mapOf( + + is PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd -> mapOf( "fastsatt" to fakta.fastsatt, "omregnetÅrsinntekt" to fakta.omregnetÅrsinntekt ) } - ))) + ) + ) + ) } override fun vedtaksperiodeIkkeFunnet(event: PersonObserver.VedtaksperiodeIkkeFunnetEvent) { - queueMessage(JsonMessage.newMessage("vedtaksperiode_ikke_funnet", mapOf( - "organisasjonsnummer" to event.organisasjonsnummer, - "vedtaksperiodeId" to event.vedtaksperiodeId - ))) + queueMessage( + JsonMessage.newMessage( + "vedtaksperiode_ikke_funnet", mapOf( + "organisasjonsnummer" to event.organisasjonsnummer, + "vedtaksperiodeId" to event.vedtaksperiodeId + ) + ) + ) } override fun sykefraværstilfelleIkkeFunnet(event: PersonObserver.SykefraværstilfelleIkkeFunnet) { - queueMessage(JsonMessage.newMessage("sykefraværstilfelle_ikke_funnet", mapOf( - "skjæringstidspunkt" to event.skjæringstidspunkt, - ))) + queueMessage( + JsonMessage.newMessage( + "sykefraværstilfelle_ikke_funnet", mapOf( + "skjæringstidspunkt" to event.skjæringstidspunkt, + ) + ) + ) } override fun skatteinntekterLagtTilGrunn(event: PersonObserver.SkatteinntekterLagtTilGrunnEvent) { @@ -431,15 +543,30 @@ internal class PersonMediator( } override fun trengerArbeidsgiveropplysninger(event: PersonObserver.TrengerArbeidsgiveropplysningerEvent) { - queueMessage(JsonMessage.newMessage("trenger_opplysninger_fra_arbeidsgiver", event.toJsonMap())) + queueMessage( + JsonMessage.newMessage( + "trenger_opplysninger_fra_arbeidsgiver", + event.toJsonMap() + ) + ) } override fun trengerIkkeArbeidsgiveropplysninger(event: PersonObserver.TrengerIkkeArbeidsgiveropplysningerEvent) { - queueMessage(JsonMessage.newMessage("trenger_ikke_opplysninger_fra_arbeidsgiver", event.toJsonMap())) + queueMessage( + JsonMessage.newMessage( + "trenger_ikke_opplysninger_fra_arbeidsgiver", + event.toJsonMap() + ) + ) } override fun arbeidsgiveropplysningerKorrigert(event: PersonObserver.ArbeidsgiveropplysningerKorrigertEvent) { - queueMessage(JsonMessage.newMessage("arbeidsgiveropplysninger_korrigert", event.toJsonMap())) + queueMessage( + JsonMessage.newMessage( + "arbeidsgiveropplysninger_korrigert", + event.toJsonMap() + ) + ) } override fun utkastTilVedtak(event: PersonObserver.UtkastTilVedtakEvent) { @@ -449,7 +576,8 @@ internal class PersonMediator( "skjæringstidspunkt" to event.skjæringstidspunkt, "tags" to event.tags ) - if (event.`6G` != null) utkastTilVedtak["sykepengegrunnlagsfakta"] = mapOf("6G" to event.`6G`) + if (event.`6G` != null) utkastTilVedtak["sykepengegrunnlagsfakta"] = + mapOf("6G" to event.`6G`) queueMessage(JsonMessage.newMessage("utkast_til_vedtak", utkastTilVedtak.toMap())) } @@ -458,10 +586,13 @@ internal class PersonMediator( } private fun queueMessage(outgoingMessage: JsonMessage) { - queueMessage(message.meldingsporing.fødselsnummer, leggPåStandardfelter(outgoingMessage).toJson()) + queueMessage( + message.meldingsporing.fødselsnummer, + leggPåStandardfelter(outgoingMessage).toJson() + ) } - private data class Pakke ( + private data class Pakke( private val fødselsnummer: String, private val eventName: String, private val blob: String, diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/Personopplysninger.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/Personopplysninger.kt index e3770120b3..6a0488c8a1 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/Personopplysninger.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/Personopplysninger.kt @@ -16,5 +16,6 @@ internal class Personopplysninger internal constructor( dødsdato: LocalDate? ) : this(personidentifikator, Alder(fødselsdato, dødsdato)) - fun person(subsumsjonslogg: Subsumsjonslogg) = Person(personidentifikator, alder, subsumsjonslogg) -} \ No newline at end of file + fun person(subsumsjonslogg: Subsumsjonslogg) = + Person(personidentifikator, alder, subsumsjonslogg) +} diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/PostgresProbe.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/PostgresProbe.kt index c000abd4da..d15f740c22 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/PostgresProbe.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/PostgresProbe.kt @@ -9,6 +9,6 @@ object PostgresProbe { .register(meterRegistry) fun hendelseSkrevetTilDb() { - counter.increment() + counter.increment() } } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/SubsumsjonMediator.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/SubsumsjonMediator.kt index ff8f785abe..fc176088ed 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/SubsumsjonMediator.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/SubsumsjonMediator.kt @@ -18,12 +18,16 @@ import java.time.LocalDateTime interface Subsumsjonproducer { fun send(fnr: String, melding: String) - class KafkaSubsumsjonproducer(private val topic: String, private val producer: KafkaProducer) : Subsumsjonproducer { + class KafkaSubsumsjonproducer( + private val topic: String, + private val producer: KafkaProducer + ) : Subsumsjonproducer { override fun send(fnr: String, melding: String) { producer.send(ProducerRecord(topic, fnr, melding)) } } } + internal class SubsumsjonMediator( private val message: HendelseMessage, private val versjonAvKode: String @@ -51,7 +55,8 @@ internal class SubsumsjonMediator( input = subsumsjon.input, output = subsumsjon.output, utfall = subsumsjon.utfall.name - )) + ) + ) } private fun bekreftAtSubsumsjonerHarKnytningTilBehandling(subsumsjon: Subsumsjon) { @@ -59,12 +64,20 @@ internal class SubsumsjonMediator( check(kritiskeTyper.all { kritiskType -> subsumsjon.kontekster.count { it.type == kritiskType } == 1 }) { - "en av $kritiskeTyper mangler/har duplikat:\n${subsumsjon.kontekster.joinToString(separator = "\n")}" + "en av $kritiskeTyper mangler/har duplikat:\n${ + subsumsjon.kontekster.joinToString( + separator = "\n" + ) + }" } // todo: sjekker for mindre enn 1 også ettersom noen subsumsjoner skjer på arbeidsgivernivå. det burde vi forsøke å flytte/fikse slik at // alt kan subsummeres i kontekst av en behandling. check(subsumsjon.kontekster.count { it.type == KontekstType.Vedtaksperiode } <= 1) { - "det er flere kontekster av ${KontekstType.Vedtaksperiode}:\n${subsumsjon.kontekster.joinToString(separator = "\n")}" + "det er flere kontekster av ${KontekstType.Vedtaksperiode}:\n${ + subsumsjon.kontekster.joinToString( + separator = "\n" + ) + }" } } @@ -102,14 +115,20 @@ internal class SubsumsjonMediator( this["input"] = event.input this["output"] = event.output this["utfall"] = event.utfall - if (event.ledd != null) { this["ledd"] = event.ledd } - if (event.punktum != null) { this["punktum"] = event.punktum } - if (event.bokstav != null) { this["bokstav"] = event.bokstav } + if (event.ledd != null) { + this["ledd"] = event.ledd + } + if (event.punktum != null) { + this["punktum"] = event.punktum + } + if (event.bokstav != null) { + this["bokstav"] = event.bokstav + } } )) } - private fun KontekstType.tilEkstern() = when(this) { + private fun KontekstType.tilEkstern() = when (this) { KontekstType.Fødselsnummer -> "fodselsnummer" KontekstType.Organisasjonsnummer -> "organisasjonsnummer" KontekstType.Vedtaksperiode -> "vedtaksperiode" diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/VedtaksperiodeProbe.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/VedtaksperiodeProbe.kt index 1344258b05..f71c3e951b 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/VedtaksperiodeProbe.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/VedtaksperiodeProbe.kt @@ -29,14 +29,21 @@ object VedtaksperiodeProbe : PersonObserver { ) } - override fun vedtaksperiodePåminnet(vedtaksperiodeId: UUID, organisasjonsnummer: String, påminnelse: Påminnelse) { + override fun vedtaksperiodePåminnet( + vedtaksperiodeId: UUID, + organisasjonsnummer: String, + påminnelse: Påminnelse + ) { log.debug( "mottok påminnelse for vedtaksperiode: $vedtaksperiodeId", keyValue("påminnelsenr", "${påminnelse.antallGangerPåminnet()}"), keyValue("påminnelsestidspunkt", påminnelse.påminnelsestidspunkt().toString()), keyValue("vedtaksperiodeId", vedtaksperiodeId), keyValue("tilstand", påminnelse.tilstand().name), - keyValue("tilstandsendringstidspunkt", påminnelse.tilstandsendringstidspunkt().toString()), + keyValue( + "tilstandsendringstidspunkt", + påminnelse.tilstandsendringstidspunkt().toString() + ), keyValue("nestePåminnelsestidspunkt", påminnelse.nestePåminnelsestidspunkt().toString()) ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/db/HendelseRepository.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/db/HendelseRepository.kt index c00b106d8b..d0a4b9c7bd 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/db/HendelseRepository.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/db/HendelseRepository.kt @@ -12,7 +12,6 @@ import no.nav.helse.spleis.db.HendelseRepository.Meldingstype.ANMODNING_OM_FORKA import no.nav.helse.spleis.db.HendelseRepository.Meldingstype.AVBRUTT_SØKNAD import no.nav.helse.spleis.db.HendelseRepository.Meldingstype.DØDSMELDING import no.nav.helse.spleis.db.HendelseRepository.Meldingstype.FORKAST_SYKMELDINGSPERIODER -import no.nav.helse.spleis.db.HendelseRepository.Meldingstype.GJENOPPLIV_VILKÅRSGRUNNLAG import no.nav.helse.spleis.db.HendelseRepository.Meldingstype.GRUNNBELØPSREGULERING import no.nav.helse.spleis.db.HendelseRepository.Meldingstype.IDENT_OPPHØRT import no.nav.helse.spleis.db.HendelseRepository.Meldingstype.INNTEKTSMELDING @@ -87,7 +86,12 @@ internal class HendelseRepository(private val dataSource: DataSource) { melding.lagreMelding(this) } - internal fun lagreMelding(melding: HendelseMessage, personidentifikator: Personidentifikator, meldingId: UUID, json: String) { + internal fun lagreMelding( + melding: HendelseMessage, + personidentifikator: Personidentifikator, + meldingId: UUID, + json: String + ) { val meldingtype = meldingstype(melding) ?: return sessionOf(dataSource).use { session -> session.run( @@ -105,14 +109,20 @@ internal class HendelseRepository(private val dataSource: DataSource) { } fun markerSomBehandlet(meldingId: UUID) = sessionOf(dataSource).use { session -> - session.run(queryOf("UPDATE melding SET behandlet_tidspunkt=now() WHERE melding_id = ? AND behandlet_tidspunkt IS NULL", - meldingId.toString() - ).asUpdate) + session.run( + queryOf( + "UPDATE melding SET behandlet_tidspunkt=now() WHERE melding_id = ? AND behandlet_tidspunkt IS NULL", + meldingId.toString() + ).asUpdate + ) } fun erBehandlet(meldingId: UUID) = sessionOf(dataSource).use { session -> session.run( - queryOf("SELECT behandlet_tidspunkt FROM melding WHERE melding_id = ?", meldingId.toString()) + queryOf( + "SELECT behandlet_tidspunkt FROM melding WHERE melding_id = ?", + meldingId.toString() + ) .map { it.localDateTimeOrNull("behandlet_tidspunkt") }.asSingle ) != null } @@ -169,9 +179,11 @@ internal class HendelseRepository(private val dataSource: DataSource) { Hendelse( meldingsreferanseId = UUID.fromString(it.string("melding_id")), meldingstype = it.string("melding_type"), - lestDato = it.instant("lest_dato").atZone(ZoneId.systemDefault()).toLocalDateTime() + lestDato = it.instant("lest_dato").atZone(ZoneId.systemDefault()) + .toLocalDateTime() ) - }.asList).associateBy { it.meldingsreferanseId } + }.asList + ).associateBy { it.meldingsreferanseId } } } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/db/PersonDao.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/db/PersonDao.kt index b063c9a827..176986aabd 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/db/PersonDao.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/db/PersonDao.kt @@ -15,10 +15,14 @@ import no.nav.helse.spleis.meldinger.model.HendelseMessage import org.intellij.lang.annotations.Language import org.slf4j.LoggerFactory -internal class PersonDao(private val dataSource: DataSource, private val STØTTER_IDENTBYTTE: Boolean) { +internal class PersonDao( + private val dataSource: DataSource, + private val STØTTER_IDENTBYTTE: Boolean +) { private companion object { private val sikkerlogg = LoggerFactory.getLogger("tjenestekall") } + fun hentEllerOpprettPerson( subsumsjonslogg: Subsumsjonslogg, personidentifikator: Personidentifikator, @@ -45,10 +49,22 @@ internal class PersonDao(private val dataSource: DataSource, private val STØTTE */ sessionOf(dataSource, returnGeneratedKey = true).use { it.transaction { txSession -> - val (personId, person) = hentPersonEllerOpprettNy(txSession, subsumsjonslogg, hendelseRepository, personidentifikator, lagNyPerson, historiskeFolkeregisteridenter) + val (personId, person) = hentPersonEllerOpprettNy( + txSession, + subsumsjonslogg, + hendelseRepository, + personidentifikator, + lagNyPerson, + historiskeFolkeregisteridenter + ) ?: return fantIkkePerson(personidentifikator) - knyttPersonTilHistoriskeIdenter(txSession, personId, personidentifikator, historiskeFolkeregisteridenter) + knyttPersonTilHistoriskeIdenter( + txSession, + personId, + personidentifikator, + historiskeFolkeregisteridenter + ) val personUt = person.also(håndterPerson).dto() @@ -61,20 +77,57 @@ internal class PersonDao(private val dataSource: DataSource, private val STØTTE } } - private fun hentPersonEllerOpprettNy(txSession: Session, subsumsjonslogg: Subsumsjonslogg, hendelseRepository: HendelseRepository, personidentifikator: Personidentifikator, lagNyPerson: () -> Person?, historiskeFolkeregisteridenter: Set): Pair? { - return gjenopprettFraTidligereBehandling(txSession, subsumsjonslogg, hendelseRepository, personidentifikator, historiskeFolkeregisteridenter) ?: opprettNyPerson(txSession, lagNyPerson) + private fun hentPersonEllerOpprettNy( + txSession: Session, + subsumsjonslogg: Subsumsjonslogg, + hendelseRepository: HendelseRepository, + personidentifikator: Personidentifikator, + lagNyPerson: () -> Person?, + historiskeFolkeregisteridenter: Set + ): Pair? { + return gjenopprettFraTidligereBehandling( + txSession, + subsumsjonslogg, + hendelseRepository, + personidentifikator, + historiskeFolkeregisteridenter + ) ?: opprettNyPerson(txSession, lagNyPerson) } - private fun gjenopprettFraTidligereBehandling(txSession: Session, subsumsjonslogg: Subsumsjonslogg, hendelseRepository: HendelseRepository, personidentifikator: Personidentifikator, historiskeFolkeregisteridenter: Set): Pair? { - val (personId, serialisertPerson, tidligerePersoner) = hentPersonOgLåsPersonForBehandling(txSession, personidentifikator, historiskeFolkeregisteridenter) - ?: hentPersonFraHistoriskeIdenter(txSession, personidentifikator, historiskeFolkeregisteridenter) + private fun gjenopprettFraTidligereBehandling( + txSession: Session, + subsumsjonslogg: Subsumsjonslogg, + hendelseRepository: HendelseRepository, + personidentifikator: Personidentifikator, + historiskeFolkeregisteridenter: Set + ): Pair? { + val (personId, serialisertPerson, tidligerePersoner) = hentPersonOgLåsPersonForBehandling( + txSession, + personidentifikator, + historiskeFolkeregisteridenter + ) + ?: hentPersonFraHistoriskeIdenter( + txSession, + personidentifikator, + historiskeFolkeregisteridenter + ) ?: return null - val tidligereBehandlinger = tidligerePersoner.map { tidligerePerson -> Person.gjenopprett(subsumsjonslogg, tidligerePerson.tilPersonDto()) } - val personInn = serialisertPerson.tilPersonDto { hendelseRepository.hentAlleHendelser(personidentifikator) } + val tidligereBehandlinger = tidligerePersoner.map { tidligerePerson -> + Person.gjenopprett( + subsumsjonslogg, + tidligerePerson.tilPersonDto() + ) + } + val personInn = serialisertPerson.tilPersonDto { + hendelseRepository.hentAlleHendelser(personidentifikator) + } return personId to Person.gjenopprett(subsumsjonslogg, personInn, tidligereBehandlinger) } - private fun opprettNyPerson(txSession: Session, lagNyPerson: () -> Person?): Pair? { + private fun opprettNyPerson( + txSession: Session, + lagNyPerson: () -> Person? + ): Pair? { val person = lagNyPerson() ?: return null val personId = opprettNyPersonversjon(txSession, person.personidentifikator, 0, "{}") return personId to person @@ -84,7 +137,11 @@ internal class PersonDao(private val dataSource: DataSource, private val STØTTE sikkerlogg.info("fant ikke person $personidentifikator, oppretter heller ingen ny person") } - private fun hentTidligereBehandledeIdenter(session: Session, personId: Long, historiskeFolkeregisteridenter: Set): List { + private fun hentTidligereBehandledeIdenter( + session: Session, + personId: Long, + historiskeFolkeregisteridenter: Set + ): List { if (historiskeFolkeregisteridenter.isEmpty()) return emptyList() @Language("PostgreSQL") val statement = """ @@ -95,26 +152,43 @@ internal class PersonDao(private val dataSource: DataSource, private val STØTTE """ // forventer én rad tilbake ellers kastes en exception siden vi da kan knytte // flere ulike person-rader til samme person, og personen må merges manuelt - return session.run(queryOf(statement, *historiskeFolkeregisteridenter.map { it.toLong() }.toTypedArray()) - .map { it.long("id") to SerialisertPerson(it.string("data")) }.asList) + return session.run(queryOf( + statement, + *historiskeFolkeregisteridenter.map { it.toLong() }.toTypedArray() + ) + .map { it.long("id") to SerialisertPerson(it.string("data")) }.asList + ) .distinctBy { (id, _) -> id } .filterNot { (id, _) -> id == personId } .map { (_, person) -> person } } - private fun hentPersonOgLåsPersonForBehandling(session: Session, personidentifikator: Personidentifikator, historiskeFolkeregisteridenter: Set): Triple>? { + private fun hentPersonOgLåsPersonForBehandling( + session: Session, + personidentifikator: Personidentifikator, + historiskeFolkeregisteridenter: Set + ): Triple>? { @Language("PostgreSQL") val statement = "SELECT id, data FROM person WHERE fnr = ? FOR UPDATE" val (personId, person) = session.run(queryOf(statement, personidentifikator.toLong()).map { it.long("id") to SerialisertPerson(it.string("data")) }.asList).singleOrNullOrThrow() ?: return null - return Triple(personId, person, hentTidligereBehandledeIdenter(session, personId, historiskeFolkeregisteridenter)) + return Triple( + personId, + person, + hentTidligereBehandledeIdenter(session, personId, historiskeFolkeregisteridenter) + ) } - private fun hentPersonFraHistoriskeIdenter(session: Session, personidentifikator: Personidentifikator, historiskeFolkeregisteridenter: Set): Triple>? { + private fun hentPersonFraHistoriskeIdenter( + session: Session, + personidentifikator: Personidentifikator, + historiskeFolkeregisteridenter: Set + ): Triple>? { if (!STØTTER_IDENTBYTTE) return null val identer = historiskeFolkeregisteridenter.plusElement(personidentifikator) + @Language("PostgreSQL") val statement = """ SELECT p.id, p.data FROM person p @@ -132,10 +206,20 @@ internal class PersonDao(private val dataSource: DataSource, private val STØTTE ?.let { (personId, person) -> Triple(personId, person, emptyList()) } } - private fun knyttPersonTilHistoriskeIdenter(session: Session, personId: Long, personidentifikator: Personidentifikator, historiskeFolkeregisteridenter: Set) { - val identer = if (STØTTER_IDENTBYTTE) historiskeFolkeregisteridenter.plusElement(personidentifikator) else setOf(personidentifikator) + private fun knyttPersonTilHistoriskeIdenter( + session: Session, + personId: Long, + personidentifikator: Personidentifikator, + historiskeFolkeregisteridenter: Set + ) { + val identer = + if (STØTTER_IDENTBYTTE) historiskeFolkeregisteridenter.plusElement(personidentifikator) else setOf( + personidentifikator + ) + @Language("PostgreSQL") - val statement = """INSERT INTO person_alias(fnr, person_id) VALUES ${identer.joinToString { "(?, $personId)" }} ON CONFLICT DO NOTHING;""" + val statement = + """INSERT INTO person_alias(fnr, person_id) VALUES ${identer.joinToString { "(?, $personId)" }} ON CONFLICT DO NOTHING;""" session.run(queryOf(statement, *identer.map { it.toLong() }.toTypedArray()).asExecute) } @@ -143,17 +227,33 @@ internal class PersonDao(private val dataSource: DataSource, private val STØTTE if (size < 2) this.firstOrNull() else throw IllegalStateException("Listen inneholder mer enn ett element!") - private fun opprettNyPersonversjon(session: Session, personidentifikator: Personidentifikator, skjemaVersjon: Int, personJson: String): Long { + private fun opprettNyPersonversjon( + session: Session, + personidentifikator: Personidentifikator, + skjemaVersjon: Int, + personJson: String + ): Long { @Language("PostgreSQL") - val statement = """ INSERT INTO person (fnr, skjema_versjon, data) VALUES (:fnr, :skjemaversjon, :data) """ - return checkNotNull(session.run(queryOf(statement, mapOf( - "fnr" to personidentifikator.toLong(), - "skjemaversjon" to skjemaVersjon, - "data" to personJson - )).asUpdateAndReturnGeneratedKey)) { "klarte ikke inserte person" } + val statement = + """ INSERT INTO person (fnr, skjema_versjon, data) VALUES (:fnr, :skjemaversjon, :data) """ + return checkNotNull( + session.run( + queryOf( + statement, mapOf( + "fnr" to personidentifikator.toLong(), + "skjemaversjon" to skjemaVersjon, + "data" to personJson + ) + ).asUpdateAndReturnGeneratedKey + ) + ) { "klarte ikke inserte person" } } - private fun oppdaterAvstemmingtidspunkt(session: Session, message: HendelseMessage, personidentifikator: Personidentifikator) { + private fun oppdaterAvstemmingtidspunkt( + session: Session, + message: HendelseMessage, + personidentifikator: Personidentifikator + ) { if (message !is AvstemmingMessage) return @Language("PostgreSQL") val statement = "UPDATE person SET sist_avstemt = now() WHERE fnr = :fnr" @@ -162,20 +262,33 @@ internal class PersonDao(private val dataSource: DataSource, private val STØTTE internal fun manglerAvstemming(): Int { @Language("PostgresSQL") - val statement = "SELECT count(1) FROM person WHERE sist_avstemt::date < now()::date - interval '31 DAYS'" + val statement = + "SELECT count(1) FROM person WHERE sist_avstemt::date < now()::date - interval '31 DAYS'" return sessionOf(dataSource).use { session -> session.run(queryOf(statement).map { row -> row.int(1) }.asSingle) ?: 0 } } - private fun oppdaterPersonversjon(session: Session, personId: Long, skjemaVersjon: Int, personJson: String) { + private fun oppdaterPersonversjon( + session: Session, + personId: Long, + skjemaVersjon: Int, + personJson: String + ) { @Language("PostgreSQL") - val statement = """ UPDATE person SET skjema_versjon=:skjemaversjon, data=:data WHERE id=:personId; """ - check(1 == session.run(queryOf(statement, mapOf( - "skjemaversjon" to skjemaVersjon, - "data" to personJson, - "personId" to personId - )).asUpdate)) { + val statement = + """ UPDATE person SET skjema_versjon=:skjemaversjon, data=:data WHERE id=:personId; """ + check( + 1 == session.run( + queryOf( + statement, mapOf( + "skjemaversjon" to skjemaVersjon, + "data" to personJson, + "personId" to personId + ) + ).asUpdate + ) + ) { "Forventet å påvirke én og bare én rad!" } } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AnmodningOmForkastingRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AnmodningOmForkastingRiver.kt index f01e4bdf23..9213e7914f 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AnmodningOmForkastingRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AnmodningOmForkastingRiver.kt @@ -21,8 +21,10 @@ internal open class AnmodningOmForkastingRiver( message.interestedIn("force") } - override fun createMessage(packet: JsonMessage) = AnmodningOmForkastingMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = AnmodningOmForkastingMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AnnullerUtbetalingerRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AnnullerUtbetalingerRiver.kt index 8f371d3745..6f68323f98 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AnnullerUtbetalingerRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AnnullerUtbetalingerRiver.kt @@ -26,8 +26,10 @@ internal class AnnullerUtbetalingerRiver( ) } - override fun createMessage(packet: JsonMessage) = AnnulleringMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = AnnulleringMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/ArbeidsgiverBehovRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/ArbeidsgiverBehovRiver.kt index fde386a873..0642121f13 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/ArbeidsgiverBehovRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/ArbeidsgiverBehovRiver.kt @@ -1,4 +1,3 @@ - package no.nav.helse.spleis.meldinger import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AvbruttS\303\270knadRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AvbruttS\303\270knadRiver.kt" index cb26243f43..e4b15e6776 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AvbruttS\303\270knadRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/AvbruttS\303\270knadRiver.kt" @@ -23,8 +23,10 @@ internal class AvbruttSøknadRiver( message.require("tom", JsonNode::asLocalDate) } - override fun createMessage(packet: JsonMessage) = AvbruttSøknadMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = AvbruttSøknadMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fnr"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/BehovRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/BehovRiver.kt index d36e1cc557..e493a15a0f 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/BehovRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/BehovRiver.kt @@ -1,8 +1,6 @@ - package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode -import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.person.aktivitetslogg.Aktivitet diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/D\303\270dsmeldingerRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/D\303\270dsmeldingerRiver.kt" index 7fbf8d7718..1b668bcf03 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/D\303\270dsmeldingerRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/D\303\270dsmeldingerRiver.kt" @@ -9,10 +9,10 @@ import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.DødsmeldingMessage -internal class DødsmeldingerRiver ( +internal class DødsmeldingerRiver( rapidsConnection: RapidsConnection, messageMediator: IMessageMediator - ) : HendelseRiver(rapidsConnection, messageMediator) { +) : HendelseRiver(rapidsConnection, messageMediator) { override val eventName = "dødsmelding" override val riverName = "Dødsmelding" @@ -22,8 +22,10 @@ internal class DødsmeldingerRiver ( message.require("dødsdato", JsonNode::asLocalDate) } - override fun createMessage(packet: JsonMessage) = DødsmeldingMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = DødsmeldingMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) -} \ No newline at end of file + ) + ) +} diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/ForkastSykmeldingsperioderRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/ForkastSykmeldingsperioderRiver.kt index ce5a844168..a9c62ba8d1 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/ForkastSykmeldingsperioderRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/ForkastSykmeldingsperioderRiver.kt @@ -23,8 +23,10 @@ internal class ForkastSykmeldingsperioderRiver( message.require("tom", JsonNode::asLocalDate) } - override fun createMessage(packet: JsonMessage) = ForkastSykmeldingsperioderMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = ForkastSykmeldingsperioderMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Grunnbel\303\270psreguleringRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Grunnbel\303\270psreguleringRiver.kt" index f0e958fec9..453614f71b 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Grunnbel\303\270psreguleringRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Grunnbel\303\270psreguleringRiver.kt" @@ -19,8 +19,10 @@ internal class GrunnbeløpsreguleringRiver( message.requireKey("fødselsnummer", "skjæringstidspunkt") } - override fun createMessage(packet: JsonMessage) = GrunnbeløpsreguleringMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = GrunnbeløpsreguleringMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/HendelseRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/HendelseRiver.kt index 0468071c95..11a29c350b 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/HendelseRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/HendelseRiver.kt @@ -16,7 +16,10 @@ import no.nav.helse.spleis.meldinger.model.HendelseMessage import no.nav.helse.spleis.withMDC import org.slf4j.LoggerFactory -internal abstract class HendelseRiver(rapidsConnection: RapidsConnection, private val messageMediator: IMessageMediator) : River.PacketValidation { +internal abstract class HendelseRiver( + rapidsConnection: RapidsConnection, + private val messageMediator: IMessageMediator +) : River.PacketValidation { protected val river = River(rapidsConnection) protected abstract val eventName: String protected abstract val riverName: String @@ -40,12 +43,19 @@ internal abstract class HendelseRiver(rapidsConnection: RapidsConnection, privat override fun name() = this@HendelseRiver::class.simpleName ?: "ukjent" - override fun onPacket(packet: JsonMessage, context: MessageContext, metadata: MessageMetadata, meterRegistry: MeterRegistry) { - withMDC(mapOf( - "river_name" to riverName, - "melding_type" to eventName, - "melding_id" to packet["@id"].asText() - )) { + override fun onPacket( + packet: JsonMessage, + context: MessageContext, + metadata: MessageMetadata, + meterRegistry: MeterRegistry + ) { + withMDC( + mapOf( + "river_name" to riverName, + "melding_type" to eventName, + "melding_id" to packet["@id"].asText() + ) + ) { val timer = Timer.start(meterRegistry) @@ -66,7 +76,11 @@ internal abstract class HendelseRiver(rapidsConnection: RapidsConnection, privat } } - override fun onError(problems: MessageProblems, context: MessageContext, metadata: MessageMetadata) { + override fun onError( + problems: MessageProblems, + context: MessageContext, + metadata: MessageMetadata + ) { messageMediator.onRiverError(riverName, problems, context, metadata) } } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/IdentOpph\303\270rtRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/IdentOpph\303\270rtRiver.kt" index dc10ee316d..0e61907e2a 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/IdentOpph\303\270rtRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/IdentOpph\303\270rtRiver.kt" @@ -7,7 +7,7 @@ import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.IdentOpphørtMessage -internal class IdentOpphørtRiver ( +internal class IdentOpphørtRiver( rapidsConnection: RapidsConnection, messageMediator: IMessageMediator ) : HendelseRiver(rapidsConnection, messageMediator) { @@ -24,8 +24,10 @@ internal class IdentOpphørtRiver ( } } - override fun createMessage(packet: JsonMessage) = IdentOpphørtMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = IdentOpphørtMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) -} \ No newline at end of file + ) + ) +} diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InfotrygdendringerRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InfotrygdendringerRiver.kt index 6c9f17da10..60d81b3d64 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InfotrygdendringerRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InfotrygdendringerRiver.kt @@ -8,10 +8,10 @@ import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.InfotrygdendringMessage -internal class InfotrygdendringerRiver ( +internal class InfotrygdendringerRiver( rapidsConnection: RapidsConnection, messageMediator: IMessageMediator - ) : HendelseRiver(rapidsConnection, messageMediator) { +) : HendelseRiver(rapidsConnection, messageMediator) { override val eventName = "infotrygdendring" override val riverName = "Infotrygdendring" @@ -22,12 +22,14 @@ internal class InfotrygdendringerRiver ( message.require("endringsmeldingId", ::requireLong) } - override fun createMessage(packet: JsonMessage) = InfotrygdendringMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = InfotrygdendringMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) private fun requireLong(node: JsonNode) { require(node.asLong() > 0) } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InntektsmeldingerReplayRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InntektsmeldingerReplayRiver.kt index b5bab80f83..56ddf348a3 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InntektsmeldingerReplayRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InntektsmeldingerReplayRiver.kt @@ -60,8 +60,10 @@ internal open class InntektsmeldingerReplayRiver( } } - override fun createMessage(packet: JsonMessage) = InntektsmeldingerReplayMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = InntektsmeldingerReplayMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InntektsmeldingerRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InntektsmeldingerRiver.kt index 24b6cac69b..8e20a10eab 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InntektsmeldingerRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/InntektsmeldingerRiver.kt @@ -2,11 +2,11 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.asOptionalLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.Personidentifikator import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing @@ -65,8 +65,10 @@ internal open class InntektsmeldingerRiver( ) return InntektsmeldingMessage( packet = packet, - personopplysninger = Personopplysninger(Personidentifikator(meldingsporing.fødselsnummer), - fødselsdato, dødsdato), + personopplysninger = Personopplysninger( + Personidentifikator(meldingsporing.fødselsnummer), + fødselsdato, dødsdato + ), meldingsporing = meldingsporing ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/MigrateRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/MigrateRiver.kt index e4f109321e..be9752c833 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/MigrateRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/MigrateRiver.kt @@ -8,7 +8,8 @@ import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.MigrateMessage -internal class MigrateRiver(rapidsConnection: RapidsConnection, messageMediator: IMessageMediator) : HendelseRiver(rapidsConnection, messageMediator) { +internal class MigrateRiver(rapidsConnection: RapidsConnection, messageMediator: IMessageMediator) : + HendelseRiver(rapidsConnection, messageMediator) { override val eventName = "json_migrate" override val riverName = "JSON Migrate" @@ -17,10 +18,12 @@ internal class MigrateRiver(rapidsConnection: RapidsConnection, messageMediator: message.require("fødselsnummer", ::requireLong) } - override fun createMessage(packet: JsonMessage) = MigrateMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = MigrateMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) private fun requireLong(node: JsonNode) { require(node.asLong() > 0) diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/MinimumSykdomsgradVurdertRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/MinimumSykdomsgradVurdertRiver.kt index 2e7890d4b7..58d85ac0ec 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/MinimumSykdomsgradVurdertRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/MinimumSykdomsgradVurdertRiver.kt @@ -2,9 +2,9 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.MinimumSykdomsgradVurdertMessage @@ -28,9 +28,11 @@ internal class MinimumSykdomsgradVurdertRiver( } } - override fun createMessage(packet: JsonMessage) = MinimumSykdomsgradVurdertMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = MinimumSykdomsgradVurdertMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeArbeidsledigS\303\270knaderRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeArbeidsledigS\303\270knaderRiver.kt" index b777a4edba..14587295fb 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeArbeidsledigS\303\270knaderRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeArbeidsledigS\303\270knaderRiver.kt" @@ -21,8 +21,10 @@ internal class NyeArbeidsledigSøknaderRiver( message.forbid("arbeidsgiver.orgnummer") } - override fun createMessage(packet: JsonMessage) = NyArbeidsledigSøknadMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = NyArbeidsledigSøknadMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fnr"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeFrilansS\303\270knaderRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeFrilansS\303\270knaderRiver.kt" index 4dcfe082e1..f0f0e9e616 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeFrilansS\303\270knaderRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeFrilansS\303\270knaderRiver.kt" @@ -6,7 +6,6 @@ import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.NyFrilansSøknadMessage -import no.nav.helse.spleis.meldinger.model.NySøknadMessage internal class NyeFrilansSøknaderRiver( rapidsConnection: RapidsConnection, @@ -22,8 +21,10 @@ internal class NyeFrilansSøknaderRiver( message.forbid("arbeidsgiver.orgnummer") } - override fun createMessage(packet: JsonMessage) = NyFrilansSøknadMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = NyFrilansSøknadMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fnr"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeSelvstendigS\303\270knaderRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeSelvstendigS\303\270knaderRiver.kt" index 910c254172..6791c9608b 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeSelvstendigS\303\270knaderRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeSelvstendigS\303\270knaderRiver.kt" @@ -21,8 +21,10 @@ internal class NyeSelvstendigSøknaderRiver( message.forbid("arbeidsgiver.orgnummer") } - override fun createMessage(packet: JsonMessage) = NySelvstendigSøknadMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = NySelvstendigSøknadMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fnr"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeS\303\270knaderRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeS\303\270knaderRiver.kt" index 06cfa96981..0d0abca8da 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeS\303\270knaderRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/NyeS\303\270knaderRiver.kt" @@ -20,8 +20,10 @@ internal class NyeSøknaderRiver( message.interestedIn("fremtidig_søknad") } - override fun createMessage(packet: JsonMessage) = NySøknadMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = NySøknadMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fnr"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrArbeidsforholdRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrArbeidsforholdRiver.kt index 704ef8f826..6b4f0227a3 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrArbeidsforholdRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrArbeidsforholdRiver.kt @@ -2,9 +2,9 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.OverstyrArbeidsforholdMessage @@ -12,15 +12,17 @@ import no.nav.helse.spleis.meldinger.model.OverstyrArbeidsforholdMessage internal class OverstyrArbeidsforholdRiver( rapidsConnection: RapidsConnection, messageMediator: IMessageMediator -): HendelseRiver(rapidsConnection, messageMediator) { +) : HendelseRiver(rapidsConnection, messageMediator) { override val eventName = "overstyr_arbeidsforhold" override val riverName = "Overstyr arbeidsforhold" - override fun createMessage(packet: JsonMessage) = OverstyrArbeidsforholdMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = OverstyrArbeidsforholdMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) override fun validate(message: JsonMessage) { message.requireKey("fødselsnummer") diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrArbeidsgiveropplysningerRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrArbeidsgiveropplysningerRiver.kt index d5fed247d2..2f645f2ca1 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrArbeidsgiveropplysningerRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrArbeidsgiveropplysningerRiver.kt @@ -12,16 +12,18 @@ import no.nav.helse.spleis.meldinger.model.OverstyrArbeidsgiveropplysningerMessa internal class OverstyrArbeidsgiveropplysningerRiver( rapidsConnection: RapidsConnection, messageMediator: IMessageMediator -): HendelseRiver(rapidsConnection, messageMediator) { +) : HendelseRiver(rapidsConnection, messageMediator) { override val eventName = "overstyr_inntekt_og_refusjon" override val riverName = "Overstyr inntekt og refusjon" - override fun createMessage(packet: JsonMessage) = OverstyrArbeidsgiveropplysningerMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = OverstyrArbeidsgiveropplysningerMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) override fun validate(message: JsonMessage) { message.requireKey("fødselsnummer") @@ -44,18 +46,19 @@ internal class OverstyrArbeidsgiveropplysningerRiver( interestedIn("tom", JsonNode::asLocalDate) interestedIn("subsumsjon") { require(it.path("paragraf").gyldigTekst) } interestedIn("subsumsjon.paragraf") - interestedIn("subsumsjon.ledd") { require(it.gyldigInt) } + interestedIn("subsumsjon.ledd") { require(it.gyldigInt) } interestedIn("subsumsjon.bokstav") { require(it.gyldigTekst) } requireArray("refusjonsopplysninger") { require("fom", JsonNode::asLocalDate) interestedIn("tom", JsonNode::asLocalDate) - require("beløp") { require(it.gyldigDouble)} + require("beløp") { require(it.gyldigDouble) } } } require("arbeidsgivere") { arbeidsgiveropplysning -> - val organisasjonsnummer = arbeidsgiveropplysning.map { it.path("organisasjonsnummer").asText() } + val organisasjonsnummer = + arbeidsgiveropplysning.map { it.path("organisasjonsnummer").asText() } require(organisasjonsnummer.size == organisasjonsnummer.toSet().size) { "Duplikate organisasjonsnummer $organisasjonsnummer" } } } } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrTidlinjeRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrTidlinjeRiver.kt index 7eef4b5151..c3ae57e5b7 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrTidlinjeRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/OverstyrTidlinjeRiver.kt @@ -1,9 +1,9 @@ package no.nav.helse.spleis.meldinger -import no.nav.helse.hendelser.Dagtype import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import no.nav.helse.hendelser.Dagtype import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.OverstyrTidslinjeMessage @@ -25,8 +25,10 @@ internal class OverstyrTidlinjeRiver( message.require("dager") { require(!it.isEmpty) } } - override fun createMessage(packet: JsonMessage) = OverstyrTidslinjeMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = OverstyrTidslinjeMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/PersonAvstemmingRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/PersonAvstemmingRiver.kt index 39006c2657..2c31834853 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/PersonAvstemmingRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/PersonAvstemmingRiver.kt @@ -20,10 +20,12 @@ internal class PersonAvstemmingRiver( message.require("fødselsnummer", ::requireLong) } - override fun createMessage(packet: JsonMessage) = AvstemmingMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = AvstemmingMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) private fun requireLong(node: JsonNode) { require(node.asLong() > 0) diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/PersonP\303\245minnelserRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/PersonP\303\245minnelserRiver.kt" index a509bc6f10..d3672b1e04 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/PersonP\303\245minnelserRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/PersonP\303\245minnelserRiver.kt" @@ -18,8 +18,10 @@ internal class PersonPåminnelserRiver( message.requireKey("fødselsnummer") } - override fun createMessage(packet: JsonMessage) = PersonPåminnelseMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = PersonPåminnelseMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/P\303\245minnelserRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/P\303\245minnelserRiver.kt" index d9f1c70b7e..ac4fe5e1c6 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/P\303\245minnelserRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/P\303\245minnelserRiver.kt" @@ -1,12 +1,12 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode -import java.time.LocalDateTime -import no.nav.helse.person.TilstandType import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import java.time.LocalDateTime +import no.nav.helse.person.TilstandType import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.PåminnelseMessage @@ -19,11 +19,22 @@ internal class PåminnelserRiver( override val riverName = "Påminnelse" init { - river.precondition { packet -> packet.require("påminnelsestidspunkt") { require(it.asLocalDateTime() > LocalDateTime.now().minusHours(24)) } } + river.precondition { packet -> + packet.require("påminnelsestidspunkt") { + require( + it.asLocalDateTime() > LocalDateTime.now().minusHours(24) + ) + } + } } override fun validate(message: JsonMessage) { - message.requireKey("antallGangerPåminnet", "vedtaksperiodeId", "organisasjonsnummer", "fødselsnummer") + message.requireKey( + "antallGangerPåminnet", + "vedtaksperiodeId", + "organisasjonsnummer", + "fødselsnummer" + ) message.require("tilstandsendringstidspunkt", JsonNode::asLocalDateTime) message.require("påminnelsestidspunkt", JsonNode::asLocalDateTime) message.require("nestePåminnelsestidspunkt", JsonNode::asLocalDateTime) @@ -31,8 +42,10 @@ internal class PåminnelserRiver( message.interestedIn("ønskerReberegning") } - override fun createMessage(packet: JsonMessage) = PåminnelseMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = PåminnelseMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtArbeidsgiverS\303\270knaderRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtArbeidsgiverS\303\270knaderRiver.kt" index f17bc199a5..e182ceea9b 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtArbeidsgiverS\303\270knaderRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtArbeidsgiverS\303\270knaderRiver.kt" @@ -2,10 +2,10 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.SendtSøknadArbeidsgiverMessage @@ -24,18 +24,41 @@ internal class SendtArbeidsgiverSøknaderRiver( require("tom", JsonNode::asLocalDate) } message.requireArray("fravar") { - requireAny("type", listOf("UTDANNING_FULLTID", "UTDANNING_DELTID", "PERMISJON", "FERIE", "UTLANDSOPPHOLD")) + requireAny( + "type", + listOf( + "UTDANNING_FULLTID", + "UTDANNING_DELTID", + "PERMISJON", + "FERIE", + "UTLANDSOPPHOLD" + ) + ) require("fom", JsonNode::asLocalDate) interestedIn("tom") { it.asLocalDate() } } - message.interestedIn("sporsmal", "arbeidGjenopptatt", "andreInntektskilder", "permitteringer", "merknaderFraSykmelding", "korrigerer", "opprinneligSendt", "utenlandskSykmelding", "sendTilGosys", "egenmeldingsdagerFraSykmelding", "inntektFraNyttArbeidsforhold") + message.interestedIn( + "sporsmal", + "arbeidGjenopptatt", + "andreInntektskilder", + "permitteringer", + "merknaderFraSykmelding", + "korrigerer", + "opprinneligSendt", + "utenlandskSykmelding", + "sendTilGosys", + "egenmeldingsdagerFraSykmelding", + "inntektFraNyttArbeidsforhold" + ) message.requireValue("status", "SENDT") message.require("sendtArbeidsgiver", JsonNode::asLocalDateTime) message.forbid("sendtNav") } - override fun createMessage(packet: JsonMessage) = SendtSøknadArbeidsgiverMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = SendtSøknadArbeidsgiverMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fnr"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtArbeidsledigS\303\270knaderRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtArbeidsledigS\303\270knaderRiver.kt" index 0df385b1ff..c06dd6d6dd 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtArbeidsledigS\303\270knaderRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtArbeidsledigS\303\270knaderRiver.kt" @@ -2,10 +2,10 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.SendtSøknadArbeidsledigMessage @@ -22,11 +22,27 @@ internal class SendtArbeidsledigSøknaderRiver( message.forbid("arbeidsgiver.orgnummer") message.require("sendtNav", JsonNode::asLocalDateTime) message.interestedIn("egenmeldingsdagerFraSykmelding") { egenmeldinger -> egenmeldinger.map { it.asLocalDate() } } - message.interestedIn("tidligereArbeidsgiverOrgnummer", "sporsmal", "arbeidGjenopptatt", "friskmeldt", "andreInntektskilder", "permitteringer", "merknaderFraSykmelding", "opprinneligSendt", "utenlandskSykmelding", "sendTilGosys", "fravar", "papirsykmeldinger", "inntektFraNyttArbeidsforhold") + message.interestedIn( + "tidligereArbeidsgiverOrgnummer", + "sporsmal", + "arbeidGjenopptatt", + "friskmeldt", + "andreInntektskilder", + "permitteringer", + "merknaderFraSykmelding", + "opprinneligSendt", + "utenlandskSykmelding", + "sendTilGosys", + "fravar", + "papirsykmeldinger", + "inntektFraNyttArbeidsforhold" + ) } - override fun createMessage(packet: JsonMessage) = SendtSøknadArbeidsledigMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = SendtSøknadArbeidsledigMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fnr"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtFrilansS\303\270knaderRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtFrilansS\303\270knaderRiver.kt" index 05d37fa526..50d8bf6c41 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtFrilansS\303\270knaderRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtFrilansS\303\270knaderRiver.kt" @@ -2,10 +2,10 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.SendtSøknadFrilansMessage @@ -22,11 +22,25 @@ internal class SendtFrilansSøknaderRiver( message.forbid("arbeidsgiver.orgnummer") message.require("sendtNav", JsonNode::asLocalDateTime) message.interestedIn("egenmeldingsdagerFraSykmelding") { egenmeldinger -> egenmeldinger.map { it.asLocalDate() } } - message.interestedIn("sporsmal", "arbeidGjenopptatt", "andreInntektskilder", "permitteringer", "merknaderFraSykmelding", "opprinneligSendt", "utenlandskSykmelding", "sendTilGosys", "fravar", "papirsykmeldinger", "inntektFraNyttArbeidsforhold") + message.interestedIn( + "sporsmal", + "arbeidGjenopptatt", + "andreInntektskilder", + "permitteringer", + "merknaderFraSykmelding", + "opprinneligSendt", + "utenlandskSykmelding", + "sendTilGosys", + "fravar", + "papirsykmeldinger", + "inntektFraNyttArbeidsforhold" + ) } - override fun createMessage(packet: JsonMessage) = SendtSøknadFrilansMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = SendtSøknadFrilansMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fnr"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtNavS\303\270knaderRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtNavS\303\270knaderRiver.kt" index 63175c89d4..b838176eb9 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtNavS\303\270knaderRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtNavS\303\270knaderRiver.kt" @@ -24,7 +24,16 @@ internal class SendtNavSøknaderRiver( require("tom", JsonNode::asLocalDate) } message.requireArray("fravar") { - requireAny("type", listOf("UTDANNING_FULLTID", "UTDANNING_DELTID", "PERMISJON", "FERIE", "UTLANDSOPPHOLD")) + requireAny( + "type", + listOf( + "UTDANNING_FULLTID", + "UTDANNING_DELTID", + "PERMISJON", + "FERIE", + "UTLANDSOPPHOLD" + ) + ) require("fom", JsonNode::asLocalDate) interestedIn("tom") { it.asLocalDate() } } @@ -38,11 +47,22 @@ internal class SendtNavSøknaderRiver( require("tom") { JsonNode::asLocalDate } } } - message.interestedIn("sporsmal", "arbeidGjenopptatt", "andreInntektskilder", "permitteringer", "merknaderFraSykmelding", "opprinneligSendt", "utenlandskSykmelding", "sendTilGosys") + message.interestedIn( + "sporsmal", + "arbeidGjenopptatt", + "andreInntektskilder", + "permitteringer", + "merknaderFraSykmelding", + "opprinneligSendt", + "utenlandskSykmelding", + "sendTilGosys" + ) } - override fun createMessage(packet: JsonMessage) = SendtSøknadNavMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = SendtSøknadNavMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fnr"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtSelvstendigS\303\270knaderRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtSelvstendigS\303\270knaderRiver.kt" index 96541a5fa9..f2e6e68ac6 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtSelvstendigS\303\270knaderRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SendtSelvstendigS\303\270knaderRiver.kt" @@ -2,10 +2,10 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.SendtSøknadSelvstendigMessage @@ -22,11 +22,25 @@ internal class SendtSelvstendigSøknaderRiver( message.forbid("arbeidsgiver.orgnummer") message.require("sendtNav", JsonNode::asLocalDateTime) message.interestedIn("egenmeldingsdagerFraSykmelding") { egenmeldinger -> egenmeldinger.map { it.asLocalDate() } } - message.interestedIn("sporsmal", "arbeidGjenopptatt", "andreInntektskilder", "permitteringer", "merknaderFraSykmelding", "opprinneligSendt", "utenlandskSykmelding", "sendTilGosys", "fravar", "papirsykmeldinger", "inntektFraNyttArbeidsforhold") + message.interestedIn( + "sporsmal", + "arbeidGjenopptatt", + "andreInntektskilder", + "permitteringer", + "merknaderFraSykmelding", + "opprinneligSendt", + "utenlandskSykmelding", + "sendTilGosys", + "fravar", + "papirsykmeldinger", + "inntektFraNyttArbeidsforhold" + ) } - override fun createMessage(packet: JsonMessage) = SendtSøknadSelvstendigMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = SendtSøknadSelvstendigMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fnr"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SimuleringerRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SimuleringerRiver.kt index 8891d0eca9..6596f731ad 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SimuleringerRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SimuleringerRiver.kt @@ -1,9 +1,9 @@ package no.nav.helse.spleis.meldinger -import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Simulering import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Simulering import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.SimuleringMessage @@ -34,8 +34,10 @@ internal class SimuleringerRiver( } } - override fun createMessage(packet: JsonMessage) = SimuleringMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = SimuleringMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Skj\303\270nnsmessigFastsettelseRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Skj\303\270nnsmessigFastsettelseRiver.kt" index 4bc1dc4cc3..6c1c32218b 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Skj\303\270nnsmessigFastsettelseRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Skj\303\270nnsmessigFastsettelseRiver.kt" @@ -2,9 +2,9 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.SkjønnsmessigFastsettelseMessage @@ -12,16 +12,18 @@ import no.nav.helse.spleis.meldinger.model.SkjønnsmessigFastsettelseMessage internal class SkjønnsmessigFastsettelseRiver( rapidsConnection: RapidsConnection, messageMediator: IMessageMediator -): HendelseRiver(rapidsConnection, messageMediator) { +) : HendelseRiver(rapidsConnection, messageMediator) { override val eventName = "skjønnsmessig_fastsettelse" override val riverName = "Skjønnsmessig fastsettelse" - override fun createMessage(packet: JsonMessage) = SkjønnsmessigFastsettelseMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = SkjønnsmessigFastsettelseMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) override fun validate(message: JsonMessage) { message.requireKey("fødselsnummer") @@ -32,7 +34,8 @@ internal class SkjønnsmessigFastsettelseRiver( require("årlig") { require(it.gyldigDouble) } } message.require("arbeidsgivere") { arbeidsgiveropplysning -> - val organisasjonsnummer = arbeidsgiveropplysning.map { it.path("organisasjonsnummer").asText() } + val organisasjonsnummer = + arbeidsgiveropplysning.map { it.path("organisasjonsnummer").asText() } require(organisasjonsnummer.size == organisasjonsnummer.toSet().size) { "Duplikate organisasjonsnummer $organisasjonsnummer" } } } @@ -41,4 +44,4 @@ internal class SkjønnsmessigFastsettelseRiver( private val JsonNode.gyldigTekst get() = isTextual && asText().isNotBlank() private val JsonNode.gyldigDouble get() = isNumber || asText().toDoubleOrNull() != null } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SykepengegrunnlagForArbeidsgiverRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SykepengegrunnlagForArbeidsgiverRiver.kt index 1223af029e..8080c6ac06 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SykepengegrunnlagForArbeidsgiverRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/SykepengegrunnlagForArbeidsgiverRiver.kt @@ -6,7 +6,7 @@ import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.asYearMonth import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection -import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.* +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.InntekterForSykepengegrunnlagForArbeidsgiver import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.SykepengegrunnlagForArbeidsgiverMessage @@ -21,19 +21,32 @@ internal class SykepengegrunnlagForArbeidsgiverRiver( override fun validate(message: JsonMessage) { message.requireKey("vedtaksperiodeId", "tilstand") - message.require("${InntekterForSykepengegrunnlagForArbeidsgiver.name}.skjæringstidspunkt", JsonNode::asLocalDate) + message.require( + "${InntekterForSykepengegrunnlagForArbeidsgiver.name}.skjæringstidspunkt", + JsonNode::asLocalDate + ) message.requireArray("@løsning.${InntekterForSykepengegrunnlagForArbeidsgiver.name}") { require("årMåned", JsonNode::asYearMonth) requireArray("inntektsliste") { requireKey("beløp") - requireAny("inntektstype", listOf("LOENNSINNTEKT", "NAERINGSINNTEKT", "PENSJON_ELLER_TRYGD", "YTELSE_FRA_OFFENTLIGE")) + requireAny( + "inntektstype", + listOf( + "LOENNSINNTEKT", + "NAERINGSINNTEKT", + "PENSJON_ELLER_TRYGD", + "YTELSE_FRA_OFFENTLIGE" + ) + ) interestedIn("orgnummer", "fødselsnummer", "fordel", "beskrivelse") } } } - override fun createMessage(packet: JsonMessage) = SykepengegrunnlagForArbeidsgiverMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = SykepengegrunnlagForArbeidsgiverMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/S\303\270knadRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/S\303\270knadRiver.kt" index 15f175b25d..22a12e71cc 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/S\303\270knadRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/S\303\270knadRiver.kt" @@ -2,9 +2,9 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator internal abstract class SøknadRiver( diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingerRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingerRiver.kt index d81b6e6d22..6465dc8817 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingerRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingerRiver.kt @@ -1,11 +1,11 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode -import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Utbetaling import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Utbetaling import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.UtbetalingMessage @@ -29,13 +29,22 @@ internal class UtbetalingerRiver( override fun validate(message: JsonMessage) { message.requireKey("@løsning.${Utbetaling.name}") message.requireAny("@løsning.${Utbetaling.name}.status", gyldigeStatuser) - message.requireKey("${Utbetaling.name}.fagsystemId", "utbetalingId", "@løsning.${Utbetaling.name}.beskrivelse") + message.requireKey( + "${Utbetaling.name}.fagsystemId", + "utbetalingId", + "@løsning.${Utbetaling.name}.beskrivelse" + ) message.requireKey("@løsning.${Utbetaling.name}.avstemmingsnøkkel") - message.require("@løsning.${Utbetaling.name}.overføringstidspunkt", JsonNode::asLocalDateTime) + message.require( + "@løsning.${Utbetaling.name}.overføringstidspunkt", + JsonNode::asLocalDateTime + ) } - override fun createMessage(packet: JsonMessage) = UtbetalingMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = UtbetalingMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Utbetalingp\303\245minnelserRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Utbetalingp\303\245minnelserRiver.kt" index 569ad7ef19..7bbcaf677e 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Utbetalingp\303\245minnelserRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Utbetalingp\303\245minnelserRiver.kt" @@ -2,13 +2,13 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID -import no.nav.helse.utbetalingslinjer.Utbetalingstatus +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.UtbetalingpåminnelseMessage +import no.nav.helse.utbetalingslinjer.Utbetalingstatus internal class UtbetalingpåminnelserRiver( rapidsConnection: RapidsConnection, @@ -18,13 +18,20 @@ internal class UtbetalingpåminnelserRiver( override val riverName = "Utbetalingpåminnelse" override fun validate(message: JsonMessage) { - message.requireKey("antallGangerPåminnet", "utbetalingId", "organisasjonsnummer", "fødselsnummer") + message.requireKey( + "antallGangerPåminnet", + "utbetalingId", + "organisasjonsnummer", + "fødselsnummer" + ) message.require("endringstidspunkt", JsonNode::asLocalDateTime) message.requireAny("status", Utbetalingstatus.entries.map(Enum<*>::name)) } - override fun createMessage(packet: JsonMessage) = UtbetalingpåminnelseMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = UtbetalingpåminnelseMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingsgodkjenningerRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingsgodkjenningerRiver.kt index 8e278e2b94..32b0bc6ab9 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingsgodkjenningerRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingsgodkjenningerRiver.kt @@ -1,11 +1,11 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode -import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Godkjenning import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Godkjenning import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.UtbetalingsgodkjenningMessage @@ -26,8 +26,10 @@ internal class UtbetalingsgodkjenningerRiver( message.requireKey("@løsning.${Godkjenning.name}.automatiskBehandling") } - override fun createMessage(packet: JsonMessage) = UtbetalingsgodkjenningMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = UtbetalingsgodkjenningMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkEtterInfotrygdendringRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkEtterInfotrygdendringRiver.kt index 3854f1f9dc..03fc5a796a 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkEtterInfotrygdendringRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkEtterInfotrygdendringRiver.kt @@ -1,9 +1,9 @@ package no.nav.helse.spleis.meldinger -import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Sykepengehistorikk import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Sykepengehistorikk import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.UtbetalingshistorikkRiver.Companion.validerSykepengehistorikk @@ -27,8 +27,11 @@ internal class UtbetalingshistorikkEtterInfotrygdendringRiver( validerSykepengehistorikk(message) } - override fun createMessage(packet: JsonMessage) = UtbetalingshistorikkEtterInfotrygdendringMessage(packet, Meldingsporing( - id = packet["@id"].asText().toUUID(), - fødselsnummer = packet["fødselsnummer"].asText() - )) + override fun createMessage(packet: JsonMessage) = + UtbetalingshistorikkEtterInfotrygdendringMessage( + packet, Meldingsporing( + id = packet["@id"].asText().toUUID(), + fødselsnummer = packet["fødselsnummer"].asText() + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkForFeriepengerRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkForFeriepengerRiver.kt index 25b0dc973a..096cceb705 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkForFeriepengerRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkForFeriepengerRiver.kt @@ -1,11 +1,11 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode -import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.SykepengehistorikkForFeriepenger import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.SykepengehistorikkForFeriepenger import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.UtbetalingshistorikkForFeriepengerMessage @@ -24,10 +24,12 @@ internal class UtbetalingshistorikkForFeriepengerRiver( validerSykepengehistorikk(message) } - override fun createMessage(packet: JsonMessage) = UtbetalingshistorikkForFeriepengerMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = UtbetalingshistorikkForFeriepengerMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) internal companion object { fun validerSykepengehistorikk(message: JsonMessage) { @@ -37,7 +39,10 @@ internal class UtbetalingshistorikkForFeriepengerRiver( interestedIn("fom", JsonNode::asLocalDate) interestedIn("tom", JsonNode::asLocalDate) requireKey("dagsats", "utbetalingsGrad", "orgnummer") - requireAny("typeKode", listOf("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "O", "S", "")) + requireAny( + "typeKode", + listOf("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "O", "S", "") + ) } message.requireArray("@løsning.${SykepengehistorikkForFeriepenger.name}.feriepengehistorikk") { interestedIn("fom", JsonNode::asLocalDate) diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkRiver.kt index 022b12ead3..bc2e11019c 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/UtbetalingshistorikkRiver.kt @@ -1,13 +1,13 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode -import java.time.LocalDateTime -import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Sykepengehistorikk import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import java.time.LocalDateTime +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Sykepengehistorikk import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.UtbetalingshistorikkMessage @@ -22,7 +22,11 @@ internal class UtbetalingshistorikkRiver( init { river.precondition { message -> message.require("@behov") { require(it.size() == behov.size) } - message.require("@besvart") { require(it.asLocalDateTime() > LocalDateTime.now().minusHours(1)) } + message.require("@besvart") { + require( + it.asLocalDateTime() > LocalDateTime.now().minusHours(1) + ) + } message.forbid("fagsystemId") } } @@ -32,10 +36,12 @@ internal class UtbetalingshistorikkRiver( validerSykepengehistorikk(message) } - override fun createMessage(packet: JsonMessage) = UtbetalingshistorikkMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = UtbetalingshistorikkMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) internal companion object { fun validerSykepengehistorikk(message: JsonMessage) { diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Vilk\303\245rsgrunnlagRiver.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Vilk\303\245rsgrunnlagRiver.kt" index dca485b253..28ed64b35e 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Vilk\303\245rsgrunnlagRiver.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/Vilk\303\245rsgrunnlagRiver.kt" @@ -1,12 +1,15 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode -import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.* import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.asYearMonth import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.ArbeidsforholdV2 +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.InntekterForOpptjeningsvurdering +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.InntekterForSykepengegrunnlag +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Medlemskap import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.VilkårsgrunnlagMessage @@ -15,24 +18,50 @@ internal class VilkårsgrunnlagRiver( rapidsConnection: RapidsConnection, messageMediator: IMessageMediator ) : ArbeidsgiverBehovRiver(rapidsConnection, messageMediator) { - override val behov = listOf(InntekterForSykepengegrunnlag, InntekterForOpptjeningsvurdering, ArbeidsforholdV2, Medlemskap) + override val behov = listOf( + InntekterForSykepengegrunnlag, + InntekterForOpptjeningsvurdering, + ArbeidsforholdV2, + Medlemskap + ) override val riverName = "Vilkårsgrunnlag" override fun validate(message: JsonMessage) { message.requireKey("vedtaksperiodeId", "tilstand") - message.require("${InntekterForSykepengegrunnlag.name}.skjæringstidspunkt", JsonNode::asLocalDate) - message.require("${InntekterForOpptjeningsvurdering.name}.skjæringstidspunkt", JsonNode::asLocalDate) + message.require( + "${InntekterForSykepengegrunnlag.name}.skjæringstidspunkt", + JsonNode::asLocalDate + ) + message.require( + "${InntekterForOpptjeningsvurdering.name}.skjæringstidspunkt", + JsonNode::asLocalDate + ) message.require("${ArbeidsforholdV2.name}.skjæringstidspunkt", JsonNode::asLocalDate) message.require("${Medlemskap.name}.skjæringstidspunkt", JsonNode::asLocalDate) message.interestedIn("@løsning.${Medlemskap.name}.resultat.svar") { - require(it.asText() in listOf("JA", "NEI", "UAVKLART", "UAVKLART_MED_BRUKERSPORSMAAL")) { "svar (${it.asText()}) er ikke JA, NEI, UAVKLART, eller UAVKLART_MED_BRUKERSPORSMAAL" } + require( + it.asText() in listOf( + "JA", + "NEI", + "UAVKLART", + "UAVKLART_MED_BRUKERSPORSMAAL" + ) + ) { "svar (${it.asText()}) er ikke JA, NEI, UAVKLART, eller UAVKLART_MED_BRUKERSPORSMAAL" } } message.requireArray("@løsning.${InntekterForSykepengegrunnlag.name}") { require("årMåned", JsonNode::asYearMonth) requireArray("inntektsliste") { requireKey("beløp") - requireAny("inntektstype", listOf("LOENNSINNTEKT", "NAERINGSINNTEKT", "PENSJON_ELLER_TRYGD", "YTELSE_FRA_OFFENTLIGE")) + requireAny( + "inntektstype", + listOf( + "LOENNSINNTEKT", + "NAERINGSINNTEKT", + "PENSJON_ELLER_TRYGD", + "YTELSE_FRA_OFFENTLIGE" + ) + ) interestedIn("orgnummer", "fødselsnummer", "fordel", "beskrivelse") } } @@ -40,20 +69,33 @@ internal class VilkårsgrunnlagRiver( require("årMåned", JsonNode::asYearMonth) requireArray("inntektsliste") { requireKey("beløp") - requireAny("inntektstype", listOf("LOENNSINNTEKT", "NAERINGSINNTEKT", "PENSJON_ELLER_TRYGD", "YTELSE_FRA_OFFENTLIGE")) + requireAny( + "inntektstype", + listOf( + "LOENNSINNTEKT", + "NAERINGSINNTEKT", + "PENSJON_ELLER_TRYGD", + "YTELSE_FRA_OFFENTLIGE" + ) + ) interestedIn("orgnummer", "fødselsnummer", "fordel", "beskrivelse") } } - message.requireArray("@løsning.${ArbeidsforholdV2.name}"){ + message.requireArray("@løsning.${ArbeidsforholdV2.name}") { requireKey("orgnummer") - requireAny("type", listOf("FORENKLET_OPPGJØRSORDNING", "FRILANSER", "MARITIMT", "ORDINÆRT")) + requireAny( + "type", + listOf("FORENKLET_OPPGJØRSORDNING", "FRILANSER", "MARITIMT", "ORDINÆRT") + ) require("ansattSiden", JsonNode::asLocalDate) interestedIn("ansattTil", JsonNode::asLocalDate) } } - override fun createMessage(packet: JsonMessage) = VilkårsgrunnlagMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = VilkårsgrunnlagMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/YtelserRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/YtelserRiver.kt index c7ffef7e01..5c662ea416 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/YtelserRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/YtelserRiver.kt @@ -2,11 +2,17 @@ package no.nav.helse.spleis.meldinger import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.ArrayNode -import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.* import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Arbeidsavklaringspenger +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Dagpenger +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Foreldrepenger +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Institusjonsopphold +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Omsorgspenger +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Opplæringspenger +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Pleiepenger import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.YtelserMessage @@ -73,8 +79,10 @@ internal class YtelserRiver( } } - override fun createMessage(packet: JsonMessage) = YtelserMessage(packet, Meldingsporing( + override fun createMessage(packet: JsonMessage) = YtelserMessage( + packet, Meldingsporing( id = packet["@id"].asText().toUUID(), fødselsnummer = packet["fødselsnummer"].asText() - )) + ) + ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AnmodningOmForkastingMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AnmodningOmForkastingMessage.kt index 9ea76f2d13..d3aa6b3055 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AnmodningOmForkastingMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AnmodningOmForkastingMessage.kt @@ -1,14 +1,17 @@ package no.nav.helse.spleis.meldinger.model -import java.util.UUID -import no.nav.helse.hendelser.AnmodningOmForkasting import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import java.util.UUID +import no.nav.helse.hendelser.AnmodningOmForkasting import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing // Understands a JSON message representing a Påminnelse -internal class AnmodningOmForkastingMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class AnmodningOmForkastingMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val vedtaksperiodeId = packet["vedtaksperiodeId"].asText().let { UUID.fromString(it) } private val organisasjonsnummer = packet["organisasjonsnummer"].asText() diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AnnulleringMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AnnulleringMessage.kt index 6a977218b8..42f44528d8 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AnnulleringMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AnnulleringMessage.kt @@ -1,14 +1,17 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode -import no.nav.helse.hendelser.AnnullerUtbetaling import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.AnnullerUtbetaling import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class AnnulleringMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class AnnulleringMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val organisasjonsnummer = packet["organisasjonsnummer"].asText() private val utbetalingId = packet["utbetalingId"].asText().trim().toUUID() diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvbruttArbeidsledigS\303\270knadMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvbruttArbeidsledigS\303\270knadMessage.kt" index a5b9137eb9..16ec1baa88 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvbruttArbeidsledigS\303\270knadMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvbruttArbeidsledigS\303\270knadMessage.kt" @@ -1,15 +1,18 @@ package no.nav.helse.spleis.meldinger.model +import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage +import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.hendelser.AvbruttSøknad import no.nav.helse.hendelser.til import no.nav.helse.person.Arbeidsledig -import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext -import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class AvbruttArbeidsledigSøknadMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class AvbruttArbeidsledigSøknadMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val organisasjonsnummer = packet["tidligereArbeidsgiverOrgnummer"].asText(Arbeidsledig) private val periode = packet["fom"].asLocalDate() til packet["tom"].asLocalDate() diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvbruttS\303\270knadMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvbruttS\303\270knadMessage.kt" index 090430fbac..dd8ade0ceb 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvbruttS\303\270knadMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvbruttS\303\270knadMessage.kt" @@ -1,14 +1,17 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.AvbruttSøknad -import no.nav.helse.hendelser.til import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.AvbruttSøknad +import no.nav.helse.hendelser.til import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class AvbruttSøknadMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class AvbruttSøknadMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val organisasjonsnummer = packet["arbeidsgiver.orgnummer"].asText() private val periode = packet["fom"].asLocalDate() til packet["tom"].asLocalDate() diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvstemmingMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvstemmingMessage.kt index d49fd45524..5ac87d974a 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvstemmingMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/AvstemmingMessage.kt @@ -6,7 +6,8 @@ import no.nav.helse.Personidentifikator import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class AvstemmingMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class AvstemmingMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : + HendelseMessage(packet) { override fun behandle(mediator: IHendelseMediator, context: MessageContext) { mediator.behandle(this, Personidentifikator(meldingsporing.fødselsnummer), context) diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/BehovMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/BehovMessage.kt index 4901bd56ae..d1a50bf893 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/BehovMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/BehovMessage.kt @@ -2,7 +2,6 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import no.nav.helse.spleis.Meldingsporing // Understands a JSON message representing a Need with solution internal sealed class BehovMessage(packet: JsonMessage) : HendelseMessage(packet) { diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/D\303\270dsmeldingMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/D\303\270dsmeldingMessage.kt" index 474130b81b..b8ef041173 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/D\303\270dsmeldingMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/D\303\270dsmeldingMessage.kt" @@ -1,21 +1,26 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.Dødsmelding import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.Dødsmelding import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class DødsmeldingMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class DødsmeldingMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { - private val dødsdato = packet["dødsdato"].asLocalDate() + private val dødsdato = packet["dødsdato"].asLocalDate() override fun behandle(mediator: IHendelseMediator, context: MessageContext) { - mediator.behandle(this, Dødsmelding( + mediator.behandle( + this, Dødsmelding( meldingsreferanseId = meldingsporing.id, dødsdato = dødsdato - ), context) + ), context + ) } } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/ForkastSykmeldingsperioderMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/ForkastSykmeldingsperioderMessage.kt index cdd42ed50b..39287b44f3 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/ForkastSykmeldingsperioderMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/ForkastSykmeldingsperioderMessage.kt @@ -1,14 +1,17 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.ForkastSykmeldingsperioder -import no.nav.helse.hendelser.til import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.ForkastSykmeldingsperioder +import no.nav.helse.hendelser.til import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class ForkastSykmeldingsperioderMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class ForkastSykmeldingsperioderMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val organisasjonsnummer = packet["organisasjonsnummer"].asText() private val periode = packet["fom"].asLocalDate() til packet["tom"].asLocalDate() diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Grunnbel\303\270psreguleringMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Grunnbel\303\270psreguleringMessage.kt" index 5e56ad6cc5..f71e28520b 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Grunnbel\303\270psreguleringMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Grunnbel\303\270psreguleringMessage.kt" @@ -1,13 +1,16 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.Grunnbeløpsregulering import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.Grunnbeløpsregulering import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class GrunnbeløpsreguleringMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class GrunnbeløpsreguleringMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val skjæringstidspunkt = packet["skjæringstidspunkt"].asLocalDate() diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/HendelseMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/HendelseMessage.kt index d13c97dec5..384bd5a53d 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/HendelseMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/HendelseMessage.kt @@ -23,12 +23,19 @@ internal sealed class HendelseMessage(private val packet: JsonMessage) : Aktivit internal abstract fun behandle(mediator: IHendelseMediator, context: MessageContext) final override fun toSpesifikkKontekst() = - SpesifikkKontekst(kontekstnavn, mapOf( + SpesifikkKontekst( + kontekstnavn, mapOf( "meldingsreferanseId" to meldingsporing.id.toString() - )) + ) + ) internal fun lagreMelding(repository: HendelseRepository) { - repository.lagreMelding(this, Personidentifikator(meldingsporing.fødselsnummer), meldingsporing.id, toJson()) + repository.lagreMelding( + this, + Personidentifikator(meldingsporing.fødselsnummer), + meldingsporing.id, + toJson() + ) } internal fun logReplays(logger: Logger, size: Int) { @@ -41,11 +48,22 @@ internal sealed class HendelseMessage(private val packet: JsonMessage) : Aktivit internal fun logRecognized(insecureLog: Logger, safeLog: Logger) { insecureLog.info("gjenkjente {} med id={}", this::class.simpleName, meldingsporing.id) - safeLog.info("gjenkjente {} med id={} for fnr={}:\n{}", this::class.simpleName, meldingsporing.id, meldingsporing.fødselsnummer, toJson()) + safeLog.info( + "gjenkjente {} med id={} for fnr={}:\n{}", + this::class.simpleName, + meldingsporing.id, + meldingsporing.fødselsnummer, + toJson() + ) } internal fun logDuplikat(logger: Logger) { - logger.warn("Har mottatt duplikat {} med id={} for fnr={}", this::class.simpleName, meldingsporing.id, meldingsporing.fødselsnummer) + logger.warn( + "Har mottatt duplikat {} med id={} for fnr={}", + this::class.simpleName, + meldingsporing.id, + meldingsporing.fødselsnummer + ) } internal fun secureDiagnosticinfo() = mapOf( @@ -69,44 +87,48 @@ internal fun asPeriode(jsonNode: JsonNode): Periode { return Periode(fom, tom) } -private val HendelseMessage.kontekstnavn get() = when (this) { - is AnmodningOmForkastingMessage -> "AnmodningOmForkasting" - is AnnulleringMessage -> "AnnullerUtbetaling" - is AvbruttArbeidsledigSøknadMessage, - is AvbruttSøknadMessage -> "AvbruttSøknad" - is AvstemmingMessage -> "Avstemming" - is SimuleringMessage -> "Simulering" - is SykepengegrunnlagForArbeidsgiverMessage -> "SykepengegrunnlagForArbeidsgiver" - is UtbetalingMessage -> "UtbetalingHendelse" - is UtbetalingsgodkjenningMessage -> "Utbetalingsgodkjenning" - is UtbetalingshistorikkEtterInfotrygdendringMessage -> "UtbetalingshistorikkEtterInfotrygdendring" - is UtbetalingshistorikkForFeriepengerMessage -> "UtbetalingshistorikkForFeriepenger" - is UtbetalingshistorikkMessage -> "Utbetalingshistorikk" - is VilkårsgrunnlagMessage -> "Vilkårsgrunnlag" - is YtelserMessage -> "Ytelser" - is DødsmeldingMessage -> "Dødsmelding" - is ForkastSykmeldingsperioderMessage -> "ForkastSykmeldingsperioder" - is GrunnbeløpsreguleringMessage -> "Grunnbeløpsregulering" - is IdentOpphørtMessage -> "IdentOpphørt" - is InfotrygdendringMessage -> "Infotrygdendring" - is InntektsmeldingMessage -> "Inntektsmelding" - is InntektsmeldingerReplayMessage -> "InntektsmeldingerReplay" - is MigrateMessage -> "Migrate" - is MinimumSykdomsgradVurdertMessage -> "MinimumSykdomsgradsvurderingMelding" - is OverstyrArbeidsforholdMessage -> "OverstyrArbeidsforhold" - is OverstyrArbeidsgiveropplysningerMessage -> "OverstyrArbeidsgiveropplysninger" - is OverstyrTidslinjeMessage -> "OverstyrTidslinje" - is PersonPåminnelseMessage -> "PersonPåminnelse" - is PåminnelseMessage -> "Påminnelse" - is SkjønnsmessigFastsettelseMessage -> "SkjønnsmessigFastsettelse" - is NyArbeidsledigSøknadMessage, - is NyFrilansSøknadMessage, - is NySelvstendigSøknadMessage, - is NySøknadMessage -> "Sykmelding" - is SendtSøknadArbeidsgiverMessage, - is SendtSøknadArbeidsledigMessage, - is SendtSøknadFrilansMessage, - is SendtSøknadNavMessage, - is SendtSøknadSelvstendigMessage -> "Søknad" - is UtbetalingpåminnelseMessage -> "Utbetalingpåminnelse" -} \ No newline at end of file +private val HendelseMessage.kontekstnavn + get() = when (this) { + is AnmodningOmForkastingMessage -> "AnmodningOmForkasting" + is AnnulleringMessage -> "AnnullerUtbetaling" + is AvbruttArbeidsledigSøknadMessage, + is AvbruttSøknadMessage -> "AvbruttSøknad" + + is AvstemmingMessage -> "Avstemming" + is SimuleringMessage -> "Simulering" + is SykepengegrunnlagForArbeidsgiverMessage -> "SykepengegrunnlagForArbeidsgiver" + is UtbetalingMessage -> "UtbetalingHendelse" + is UtbetalingsgodkjenningMessage -> "Utbetalingsgodkjenning" + is UtbetalingshistorikkEtterInfotrygdendringMessage -> "UtbetalingshistorikkEtterInfotrygdendring" + is UtbetalingshistorikkForFeriepengerMessage -> "UtbetalingshistorikkForFeriepenger" + is UtbetalingshistorikkMessage -> "Utbetalingshistorikk" + is VilkårsgrunnlagMessage -> "Vilkårsgrunnlag" + is YtelserMessage -> "Ytelser" + is DødsmeldingMessage -> "Dødsmelding" + is ForkastSykmeldingsperioderMessage -> "ForkastSykmeldingsperioder" + is GrunnbeløpsreguleringMessage -> "Grunnbeløpsregulering" + is IdentOpphørtMessage -> "IdentOpphørt" + is InfotrygdendringMessage -> "Infotrygdendring" + is InntektsmeldingMessage -> "Inntektsmelding" + is InntektsmeldingerReplayMessage -> "InntektsmeldingerReplay" + is MigrateMessage -> "Migrate" + is MinimumSykdomsgradVurdertMessage -> "MinimumSykdomsgradsvurderingMelding" + is OverstyrArbeidsforholdMessage -> "OverstyrArbeidsforhold" + is OverstyrArbeidsgiveropplysningerMessage -> "OverstyrArbeidsgiveropplysninger" + is OverstyrTidslinjeMessage -> "OverstyrTidslinje" + is PersonPåminnelseMessage -> "PersonPåminnelse" + is PåminnelseMessage -> "Påminnelse" + is SkjønnsmessigFastsettelseMessage -> "SkjønnsmessigFastsettelse" + is NyArbeidsledigSøknadMessage, + is NyFrilansSøknadMessage, + is NySelvstendigSøknadMessage, + is NySøknadMessage -> "Sykmelding" + + is SendtSøknadArbeidsgiverMessage, + is SendtSøknadArbeidsledigMessage, + is SendtSøknadFrilansMessage, + is SendtSøknadNavMessage, + is SendtSøknadSelvstendigMessage -> "Søknad" + + is UtbetalingpåminnelseMessage -> "Utbetalingpåminnelse" + } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/IdentOpph\303\270rtMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/IdentOpph\303\270rtMessage.kt" index e01fd02b87..814f171e2f 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/IdentOpph\303\270rtMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/IdentOpph\303\270rtMessage.kt" @@ -1,22 +1,26 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.IdentOpphørt import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.Personidentifikator +import no.nav.helse.hendelser.IdentOpphørt import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class IdentOpphørtMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class IdentOpphørtMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val nyttFødselsnummer = packet["nye_identer.fødselsnummer"].asText() - private val gamleIdenter = packet["gamle_identer"].map { Personidentifikator(it.path("ident").asText()) }.toSet() + private val gamleIdenter = + packet["gamle_identer"].map { Personidentifikator(it.path("ident").asText()) }.toSet() override fun behandle(mediator: IHendelseMediator, context: MessageContext) { mediator.behandle( Personidentifikator(nyttFødselsnummer), this, IdentOpphørt( - meldingsreferanseId = meldingsporing.id - ), gamleIdenter, context + meldingsreferanseId = meldingsporing.id + ), gamleIdenter, context ) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InfotrygdendringMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InfotrygdendringMessage.kt index 8133962a2e..9bf5d2ef49 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InfotrygdendringMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InfotrygdendringMessage.kt @@ -1,17 +1,22 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.Infotrygdendring import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.Infotrygdendring import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class InfotrygdendringMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class InfotrygdendringMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { override fun behandle(mediator: IHendelseMediator, context: MessageContext) { - mediator.behandle(this, Infotrygdendring( + mediator.behandle( + this, Infotrygdendring( meldingsreferanseId = meldingsporing.id - ), context) + ), context + ) } } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingMessage.kt index f2f3ee825d..a8c6fc2dc9 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingMessage.kt @@ -22,7 +22,8 @@ internal open class InntektsmeldingMessage( override val meldingsporing: Meldingsporing ) : HendelseMessage(packet) { private val refusjon = Inntektsmelding.Refusjon( - beløp = packet["refusjon.beloepPrMnd"].takeUnless(JsonNode::isMissingOrNull)?.asDouble()?.månedlig, + beløp = packet["refusjon.beloepPrMnd"].takeUnless(JsonNode::isMissingOrNull) + ?.asDouble()?.månedlig, opphørsdato = packet["refusjon.opphoersdato"].asOptionalLocalDate(), endringerIRefusjon = packet["endringIRefusjoner"].map { Inntektsmelding.Refusjon.EndringIRefusjon( @@ -31,7 +32,8 @@ internal open class InntektsmeldingMessage( ) } ) - private val vedtaksperiodeId = packet["vedtaksperiodeId"].takeIf(JsonNode::isTextual)?.asText()?.let { UUID.fromString(it) } + private val vedtaksperiodeId = packet["vedtaksperiodeId"].takeIf(JsonNode::isTextual)?.asText() + ?.let { UUID.fromString(it) } private val orgnummer = packet["virksomhetsnummer"].asText() private val mottatt = packet["mottattDato"].asLocalDateTime() @@ -43,7 +45,8 @@ internal open class InntektsmeldingMessage( private val harOpphørAvNaturalytelser = packet["opphoerAvNaturalytelser"].size() > 0 private val harFlereInntektsmeldinger = packet["harFlereInntektsmeldinger"].asBoolean(false) private val inntektsdato = packet["inntektsdato"].asOptionalLocalDate() - private val avsendersystem = packet["avsenderSystem"].tilAvsendersystem(vedtaksperiodeId, inntektsdato, førsteFraværsdag) + private val avsendersystem = + packet["avsenderSystem"].tilAvsendersystem(vedtaksperiodeId, inntektsdato, førsteFraværsdag) protected val inntektsmelding get() = Inntektsmelding( @@ -64,19 +67,26 @@ internal open class InntektsmeldingMessage( } internal companion object { - internal fun JsonNode.tilAvsendersystem(vedtaksperiodeId: UUID?, inntektsdato: LocalDate?, førsteFraværsdag: LocalDate?): Inntektsmelding.Avsendersystem { - val navn = path("navn").takeUnless { it.isMissingOrNull() }?.asText() ?: return Inntektsmelding.Avsendersystem.LPS(førsteFraværsdag) + internal fun JsonNode.tilAvsendersystem( + vedtaksperiodeId: UUID?, + inntektsdato: LocalDate?, + førsteFraværsdag: LocalDate? + ): Inntektsmelding.Avsendersystem { + val navn = path("navn").takeUnless { it.isMissingOrNull() }?.asText() + ?: return Inntektsmelding.Avsendersystem.LPS(førsteFraværsdag) return when (navn) { "NAV_NO" -> Inntektsmelding.Avsendersystem.NavPortal( vedtaksperiodeId = checkNotNull(vedtaksperiodeId) { "Inntektsmelding med avsender NAV_NO skal ha vedtaksperiodeId " }, inntektsdato = checkNotNull(inntektsdato) { "Inntektsmelding med avsender NAV_NO skal ha inntektsdato " }, forespurt = true ) + "NAV_NO_SELVBESTEMT" -> Inntektsmelding.Avsendersystem.NavPortal( vedtaksperiodeId = checkNotNull(vedtaksperiodeId) { "Inntektsmelding med avsender NAV_NO_SELVBESTEMT skal ha vedtaksperiodeId " }, inntektsdato = checkNotNull(inntektsdato) { "Inntektsmelding med avsender NAV_NO_SELVBESTEMT skal ha inntektsdato " }, forespurt = false ) + "AltinnPortal" -> Inntektsmelding.Avsendersystem.Altinn(førsteFraværsdag) else -> Inntektsmelding.Avsendersystem.LPS(førsteFraværsdag) } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingerReplayMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingerReplayMessage.kt index 513f4baf59..02bcfcce05 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingerReplayMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/InntektsmeldingerReplayMessage.kt @@ -17,7 +17,10 @@ import no.nav.helse.spleis.meldinger.model.InntektsmeldingMessage.Companion.tilA import no.nav.helse.økonomi.Inntekt.Companion.månedlig // Understands a JSON message representing an Inntektsmelding replay -internal class InntektsmeldingerReplayMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class InntektsmeldingerReplayMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val organisasjonsnummer = packet["organisasjonsnummer"].asText() private val vedtaksperiodeId = UUID.fromString(packet["vedtaksperiodeId"].asText()) override val skalDuplikatsjekkes = false @@ -33,10 +36,12 @@ internal class InntektsmeldingerReplayMessage(packet: JsonMessage, override val init { packet["inntektsmeldinger"].forEach { inntektsmelding -> - inntektsmeldinger.add(inntektsmeldingReplay( - inntektsmelding.path("internDokumentId").asText().toUUID(), - inntektsmelding.path("inntektsmelding") - )) + inntektsmeldinger.add( + inntektsmeldingReplay( + inntektsmelding.path("internDokumentId").asText().toUUID(), + inntektsmelding.path("inntektsmelding") + ) + ) } } @@ -46,7 +51,8 @@ internal class InntektsmeldingerReplayMessage(packet: JsonMessage, override val private fun inntektsmeldingReplay(internDokumentId: UUID, packet: JsonNode): Inntektsmelding { val refusjon = Inntektsmelding.Refusjon( - beløp = packet.path("refusjon").path("beloepPrMnd").takeUnless(JsonNode::isMissingOrNull)?.asDouble()?.månedlig, + beløp = packet.path("refusjon").path("beloepPrMnd") + .takeUnless(JsonNode::isMissingOrNull)?.asDouble()?.månedlig, opphørsdato = packet.path("refusjon").path("opphoersdato").asOptionalLocalDate(), endringerIRefusjon = packet["endringIRefusjoner"].map { Inntektsmelding.Refusjon.EndringIRefusjon( @@ -60,10 +66,16 @@ internal class InntektsmeldingerReplayMessage(packet: JsonMessage, override val val førsteFraværsdag = packet.path("foersteFravaersdag").asOptionalLocalDate() val beregnetInntekt = packet.path("beregnetInntekt").asDouble() val arbeidsgiverperioder = packet.path("arbeidsgiverperioder").map(::asPeriode) - val begrunnelseForReduksjonEllerIkkeUtbetalt = packet.path("begrunnelseForReduksjonEllerIkkeUtbetalt").takeIf(JsonNode::isTextual)?.asText() + val begrunnelseForReduksjonEllerIkkeUtbetalt = + packet.path("begrunnelseForReduksjonEllerIkkeUtbetalt").takeIf(JsonNode::isTextual) + ?.asText() val harOpphørAvNaturalytelser = packet.path("opphoerAvNaturalytelser").size() > 0 val harFlereInntektsmeldinger = packet.path("harFlereInntektsmeldinger").asBoolean(false) - val avsendersystem = packet.path("avsenderSystem").tilAvsendersystem(null, null, førsteFraværsdag) // Vi skal ikke replaye portalIM så om det feiler her er noe gæli + val avsendersystem = packet.path("avsenderSystem").tilAvsendersystem( + null, + null, + førsteFraværsdag + ) // Vi skal ikke replaye portalIM så om det feiler her er noe gæli return Inntektsmelding( meldingsreferanseId = internDokumentId, diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/MigrateMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/MigrateMessage.kt index 6b59014c0b..758ec68958 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/MigrateMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/MigrateMessage.kt @@ -1,16 +1,18 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.Migrate import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.Migrate import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class MigrateMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class MigrateMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : + HendelseMessage(packet) { - private val migrate get() = Migrate( - meldingsreferanseId = meldingsporing.id - ) + private val migrate + get() = Migrate( + meldingsreferanseId = meldingsporing.id + ) override fun behandle(mediator: IHendelseMediator, context: MessageContext) { mediator.behandle(this, migrate, context) diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/MinimumSykdomsgradVurdertMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/MinimumSykdomsgradVurdertMessage.kt index 71553d6d9a..ef87cfb566 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/MinimumSykdomsgradVurdertMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/MinimumSykdomsgradVurdertMessage.kt @@ -1,14 +1,19 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.MinimumSykdomsgradsvurderingMelding import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.MinimumSykdomsgradsvurderingMelding import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class MinimumSykdomsgradVurdertMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { - private val perioderMedMinimumSykdomsgradVurdertOK = packet["perioderMedMinimumSykdomsgradVurdertOk"].map(::asPeriode) - private val perioderMedMinimumSykdomsgradVurdertIkkeOK = packet["perioderMedMinimumSykdomsgradVurdertIkkeOk"].map(::asPeriode) +internal class MinimumSykdomsgradVurdertMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { + private val perioderMedMinimumSykdomsgradVurdertOK = + packet["perioderMedMinimumSykdomsgradVurdertOk"].map(::asPeriode) + private val perioderMedMinimumSykdomsgradVurdertIkkeOK = + packet["perioderMedMinimumSykdomsgradVurdertIkkeOk"].map(::asPeriode) override fun behandle(mediator: IHendelseMediator, context: MessageContext) { @@ -23,4 +28,4 @@ internal class MinimumSykdomsgradVurdertMessage(packet: JsonMessage, override va ) } -} \ No newline at end of file +} diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyArbeidsledigS\303\270knadMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyArbeidsledigS\303\270knadMessage.kt" index f626ff94db..8ecee2469e 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyArbeidsledigS\303\270knadMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyArbeidsledigS\303\270knadMessage.kt" @@ -1,17 +1,33 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode -import no.nav.helse.person.Arbeidsledig import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.Personidentifikator +import no.nav.helse.person.Arbeidsledig import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.Personopplysninger -internal class NyArbeidsledigSøknadMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing, private val builder: NySøknadBuilder = NySøknadBuilder()) : SøknadMessage(packet, builder, packet["tidligereArbeidsgiverOrgnummer"].asText(Arbeidsledig)) { - override fun _behandle(mediator: IHendelseMediator, personopplysninger: Personopplysninger, packet: JsonMessage, context: MessageContext) { +internal class NyArbeidsledigSøknadMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing, + private val builder: NySøknadBuilder = NySøknadBuilder() +) : SøknadMessage(packet, builder, packet["tidligereArbeidsgiverOrgnummer"].asText(Arbeidsledig)) { + override fun _behandle( + mediator: IHendelseMediator, + personopplysninger: Personopplysninger, + packet: JsonMessage, + context: MessageContext + ) { builder.fremtidigSøknad(packet["fremtidig_søknad"].asBoolean()) - mediator.behandle(personopplysninger, this, builder.build(meldingsporing), context, packet["historiskeFolkeregisteridenter"].map(JsonNode::asText).map{ Personidentifikator(it) }.toSet()) + mediator.behandle( + personopplysninger, + this, + builder.build(meldingsporing), + context, + packet["historiskeFolkeregisteridenter"].map(JsonNode::asText) + .map { Personidentifikator(it) }.toSet() + ) } } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyFrilansS\303\270knadMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyFrilansS\303\270knadMessage.kt" index 4ceea7d0c1..d6bf0471ec 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyFrilansS\303\270knadMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyFrilansS\303\270knadMessage.kt" @@ -1,17 +1,33 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode -import no.nav.helse.person.Frilans import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.Personidentifikator +import no.nav.helse.person.Frilans import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.Personopplysninger -internal class NyFrilansSøknadMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing, private val builder: NySøknadBuilder = NySøknadBuilder()) : SøknadMessage(packet, builder, Frilans) { - override fun _behandle(mediator: IHendelseMediator, personopplysninger: Personopplysninger, packet: JsonMessage, context: MessageContext) { +internal class NyFrilansSøknadMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing, + private val builder: NySøknadBuilder = NySøknadBuilder() +) : SøknadMessage(packet, builder, Frilans) { + override fun _behandle( + mediator: IHendelseMediator, + personopplysninger: Personopplysninger, + packet: JsonMessage, + context: MessageContext + ) { builder.fremtidigSøknad(packet["fremtidig_søknad"].asBoolean()) - mediator.behandle(personopplysninger, this, builder.build(meldingsporing), context, packet["historiskeFolkeregisteridenter"].map(JsonNode::asText).map{ Personidentifikator(it)}.toSet()) + mediator.behandle( + personopplysninger, + this, + builder.build(meldingsporing), + context, + packet["historiskeFolkeregisteridenter"].map(JsonNode::asText) + .map { Personidentifikator(it) }.toSet() + ) } } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NySelvstendigS\303\270knadMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NySelvstendigS\303\270knadMessage.kt" index ad499d963e..d77ac15920 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NySelvstendigS\303\270knadMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NySelvstendigS\303\270knadMessage.kt" @@ -1,17 +1,32 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode -import no.nav.helse.person.Selvstendig import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.Personidentifikator +import no.nav.helse.person.Selvstendig import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.Personopplysninger -internal class NySelvstendigSøknadMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing, private val builder: NySøknadBuilder = NySøknadBuilder()) : SøknadMessage(packet, builder, Selvstendig) { - override fun _behandle(mediator: IHendelseMediator, personopplysninger: Personopplysninger, packet: JsonMessage, context: MessageContext) { +internal class NySelvstendigSøknadMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing, + private val builder: NySøknadBuilder = NySøknadBuilder() +) : SøknadMessage(packet, builder, Selvstendig) { + override fun _behandle( + mediator: IHendelseMediator, + personopplysninger: Personopplysninger, + packet: JsonMessage, + context: MessageContext + ) { builder.fremtidigSøknad(packet["fremtidig_søknad"].asBoolean()) - mediator.behandle(personopplysninger, this, builder.build(meldingsporing), context, packet["historiskeFolkeregisteridenter"].map(JsonNode::asText).map { Personidentifikator(it) } .toSet()) + mediator.behandle( + personopplysninger, + this, + builder.build(meldingsporing), + context, + packet["historiskeFolkeregisteridenter"].map(JsonNode::asText) + .map { Personidentifikator(it) }.toSet()) } } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyS\303\270knadBuilder.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyS\303\270knadBuilder.kt" index 1ab1e48d97..0390a15b98 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyS\303\270knadBuilder.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyS\303\270knadBuilder.kt" @@ -10,10 +10,12 @@ internal class NySøknadBuilder : SøknadBuilder() { private var fremtidigSøknad = false override fun periode(fom: LocalDate, tom: LocalDate, grad: Int, arbeidshelse: Int?) = apply { - sykemeldingsperioder.add(Sykmeldingsperiode( - fom = fom, - tom = tom - )) + sykemeldingsperioder.add( + Sykmeldingsperiode( + fom = fom, + tom = tom + ) + ) } internal fun fremtidigSøknad(erFremtidig: Boolean) { diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyS\303\270knadMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyS\303\270knadMessage.kt" index 27113e50ee..254b441668 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyS\303\270knadMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/NyS\303\270knadMessage.kt" @@ -9,10 +9,25 @@ import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.Personopplysninger // Understands a JSON message representing a Ny Søknad -internal class NySøknadMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing, private val builder: NySøknadBuilder = NySøknadBuilder()) : SøknadMessage(packet, builder) { +internal class NySøknadMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing, + private val builder: NySøknadBuilder = NySøknadBuilder() +) : SøknadMessage(packet, builder) { - override fun _behandle(mediator: IHendelseMediator, personopplysninger: Personopplysninger, packet: JsonMessage, context: MessageContext) { + override fun _behandle( + mediator: IHendelseMediator, + personopplysninger: Personopplysninger, + packet: JsonMessage, + context: MessageContext + ) { builder.fremtidigSøknad(packet["fremtidig_søknad"].asBoolean()) - mediator.behandle(personopplysninger, this, builder.build(meldingsporing), context, packet["historiskeFolkeregisteridenter"].map(JsonNode::asText).map { Personidentifikator(it) } .toSet()) + mediator.behandle( + personopplysninger, + this, + builder.build(meldingsporing), + context, + packet["historiskeFolkeregisteridenter"].map(JsonNode::asText) + .map { Personidentifikator(it) }.toSet()) } } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrArbeidsforholdMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrArbeidsforholdMessage.kt index 484fcc86d2..4c996b036e 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrArbeidsforholdMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrArbeidsforholdMessage.kt @@ -1,13 +1,16 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.OverstyrArbeidsforhold import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.OverstyrArbeidsforhold import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class OverstyrArbeidsforholdMessage(val packet: JsonMessage, override val meldingsporing: Meldingsporing): HendelseMessage(packet) { +internal class OverstyrArbeidsforholdMessage( + val packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val skjæringstidspunkt = packet["skjæringstidspunkt"].asLocalDate() private val overstyrteArbeidsforhold = packet["overstyrteArbeidsforhold"] diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrArbeidsgiveropplysningerMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrArbeidsgiveropplysningerMessage.kt index 3c31362edf..da8a0a28ba 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrArbeidsgiveropplysningerMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrArbeidsgiveropplysningerMessage.kt @@ -24,7 +24,10 @@ import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.økonomi.Inntekt.Companion.månedlig -internal class OverstyrArbeidsgiveropplysningerMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class OverstyrArbeidsgiveropplysningerMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val skjæringstidspunkt = packet["skjæringstidspunkt"].asLocalDate() private val arbeidsgiveropplysninger = packet.arbeidsgiveropplysninger(skjæringstidspunkt) @@ -33,19 +36,20 @@ internal class OverstyrArbeidsgiveropplysningerMessage(packet: JsonMessage, over override fun behandle(mediator: IHendelseMediator, context: MessageContext) = mediator.behandle( this, OverstyrArbeidsgiveropplysninger( - meldingsreferanseId = meldingsporing.id, - skjæringstidspunkt = skjæringstidspunkt, - arbeidsgiveropplysninger = arbeidsgiveropplysninger, - opprettet = opprettet, - refusjonstidslinjer = refusjonstidslinjer - ), + meldingsreferanseId = meldingsporing.id, + skjæringstidspunkt = skjæringstidspunkt, + arbeidsgiveropplysninger = arbeidsgiveropplysninger, + opprettet = opprettet, + refusjonstidslinjer = refusjonstidslinjer + ), context ) private companion object { private fun JsonMessage.arbeidsgiveropplysninger(skjæringstidspunkt: LocalDate): List { - val arbeidsgivere = get("arbeidsgivere").takeUnless { it.isMissingOrNull() } ?: return emptyList() + val arbeidsgivere = + get("arbeidsgivere").takeUnless { it.isMissingOrNull() } ?: return emptyList() val id = UUID.fromString(get("@id").asText()) val opprettet = get("@opprettet").asLocalDateTime() return arbeidsgivere.map { arbeidsgiveropplysning -> @@ -54,12 +58,32 @@ internal class OverstyrArbeidsgiveropplysningerMessage(packet: JsonMessage, over val forklaring = arbeidsgiveropplysning["forklaring"].asText() val subsumsjon = arbeidsgiveropplysning.path("subsumsjon").asSubsumsjon() - val fom = arbeidsgiveropplysning.path("fom").takeIf(JsonNode::isTextual)?.asLocalDate() ?: skjæringstidspunkt - val tom = arbeidsgiveropplysning.path("tom").takeIf(JsonNode::isTextual)?.asLocalDate() ?: LocalDate.MAX - val saksbehandlerinntekt = Saksbehandler(skjæringstidspunkt, id, månedligInntekt, forklaring, subsumsjon, opprettet) - val refusjonsopplysninger = arbeidsgiveropplysning["refusjonsopplysninger"].asRefusjonsopplysninger(id, opprettet) + val fom = + arbeidsgiveropplysning.path("fom").takeIf(JsonNode::isTextual)?.asLocalDate() + ?: skjæringstidspunkt + val tom = + arbeidsgiveropplysning.path("tom").takeIf(JsonNode::isTextual)?.asLocalDate() + ?: LocalDate.MAX + val saksbehandlerinntekt = Saksbehandler( + skjæringstidspunkt, + id, + månedligInntekt, + forklaring, + subsumsjon, + opprettet + ) + val refusjonsopplysninger = + arbeidsgiveropplysning["refusjonsopplysninger"].asRefusjonsopplysninger( + id, + opprettet + ) - ArbeidsgiverInntektsopplysning(orgnummer, fom til tom, saksbehandlerinntekt, refusjonsopplysninger) + ArbeidsgiverInntektsopplysning( + orgnummer, + fom til tom, + saksbehandlerinntekt, + refusjonsopplysninger + ) } } @@ -71,7 +95,10 @@ internal class OverstyrArbeidsgiveropplysningerMessage(packet: JsonMessage, over ) } - private fun JsonNode.asRefusjonsopplysninger(meldingsreferanseId: UUID, opprettet: LocalDateTime) = RefusjonsopplysningerBuilder().also { builder -> + private fun JsonNode.asRefusjonsopplysninger( + meldingsreferanseId: UUID, + opprettet: LocalDateTime + ) = RefusjonsopplysningerBuilder().also { builder -> this.map { refusjonsopplysning -> builder.leggTil( Refusjonsopplysning( @@ -81,26 +108,35 @@ internal class OverstyrArbeidsgiveropplysningerMessage(packet: JsonMessage, over beløp = refusjonsopplysning.path("beløp").asDouble().månedlig, avsender = SAKSBEHANDLER, tidsstempel = opprettet - ), opprettet) + ), opprettet + ) } }.build() private fun JsonMessage.refusjonstidslinjer(): Map> { val id = UUID.fromString(get("@id").asText()) val opprettet = get("@opprettet").asLocalDateTime() - return get("arbeidsgivere").associateBy { it.path("organisasjonsnummer").asText() }.mapValues { (_, arbeidsgiver) -> - arbeidsgiver.path("refusjonsopplysninger").refusjonstidslinje(id, opprettet) - } + return get("arbeidsgivere").associateBy { it.path("organisasjonsnummer").asText() } + .mapValues { (_, arbeidsgiver) -> + arbeidsgiver.path("refusjonsopplysninger").refusjonstidslinje(id, opprettet) + } } - private fun JsonNode.refusjonstidslinje(meldingsreferanseId: UUID, opprettet: LocalDateTime) : Pair { + private fun JsonNode.refusjonstidslinje( + meldingsreferanseId: UUID, + opprettet: LocalDateTime + ): Pair { var strekkbar = false val refusjonstidslinje = this.fold(Beløpstidslinje()) { acc, node -> val fom = node.path("fom").asLocalDate() val tom = node.path("tom").asOptionalLocalDate() if (tom == null) strekkbar = true val beløp = node.path("beløp").asDouble().månedlig - val refusjonstidslinje = Beløpstidslinje.fra(fom til (tom ?: fom), beløp, Kilde(meldingsreferanseId, SAKSBEHANDLER, opprettet)) + val refusjonstidslinje = Beløpstidslinje.fra( + fom til (tom ?: fom), + beløp, + Kilde(meldingsreferanseId, SAKSBEHANDLER, opprettet) + ) refusjonstidslinje + acc } return refusjonstidslinje to strekkbar diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrTidslinjeMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrTidslinjeMessage.kt index 748aa4791e..c6e101839f 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrTidslinjeMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/OverstyrTidslinjeMessage.kt @@ -1,37 +1,42 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.Dagtype.Companion.dagtype -import no.nav.helse.hendelser.ManuellOverskrivingDag -import no.nav.helse.hendelser.OverstyrTidslinje import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.asOptionalLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.Dagtype.Companion.dagtype +import no.nav.helse.hendelser.ManuellOverskrivingDag +import no.nav.helse.hendelser.OverstyrTidslinje import no.nav.helse.hendelser.til import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class OverstyrTidslinjeMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class OverstyrTidslinjeMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val organisasjonsnummer = packet["organisasjonsnummer"].asText() private val dager = packet["dager"].flatMap { dag -> val fom = dag.path("dato").asLocalDate() val tom = dag.path("tom").asOptionalLocalDate()?.takeUnless { it < fom } ?: fom val periode = fom til tom - periode.map { dato -> ManuellOverskrivingDag( - dato = dato, - type = dag["type"].asText().dagtype, - grad = dag.get("grad")?.intValue() - )} + periode.map { dato -> + ManuellOverskrivingDag( + dato = dato, + type = dag["type"].asText().dagtype, + grad = dag.get("grad")?.intValue() + ) + } } override fun behandle(mediator: IHendelseMediator, context: MessageContext) = mediator.behandle( this, OverstyrTidslinje( - meldingsreferanseId = meldingsporing.id, - organisasjonsnummer = organisasjonsnummer, - dager = dager, - opprettet = opprettet - ), context + meldingsreferanseId = meldingsporing.id, + organisasjonsnummer = organisasjonsnummer, + dager = dager, + opprettet = opprettet + ), context ) } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/PersonP\303\245minnelseMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/PersonP\303\245minnelseMessage.kt" index efc919d158..c5bc4beeb9 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/PersonP\303\245minnelseMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/PersonP\303\245minnelseMessage.kt" @@ -1,13 +1,16 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.PersonPåminnelse import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.PersonPåminnelse import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing // Understands a JSON message representing a Påminnelse -internal class PersonPåminnelseMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class PersonPåminnelseMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val påminnelse get() = PersonPåminnelse(meldingsreferanseId = meldingsporing.id) diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/P\303\245minnelseMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/P\303\245minnelseMessage.kt" index 7938f1512b..7f11d52766 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/P\303\245minnelseMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/P\303\245minnelseMessage.kt" @@ -1,15 +1,16 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.Påminnelse -import no.nav.helse.person.TilstandType import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.Påminnelse +import no.nav.helse.person.TilstandType import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing // Understands a JSON message representing a Påminnelse -internal class PåminnelseMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class PåminnelseMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : + HendelseMessage(packet) { private val vedtaksperiodeId = packet["vedtaksperiodeId"].asText() private val organisasjonsnummer = packet["organisasjonsnummer"].asText() @@ -18,7 +19,8 @@ internal class PåminnelseMessage(packet: JsonMessage, override val meldingspori private val tilstandsendringstidspunkt = packet["tilstandsendringstidspunkt"].asLocalDateTime() private val påminnelsestidspunkt = packet["påminnelsestidspunkt"].asLocalDateTime() private val nestePåminnelsestidspunkt = packet["nestePåminnelsestidspunkt"].asLocalDateTime() - private val ønskerReberegning = packet["ønskerReberegning"].takeIf { it.isBoolean }?.booleanValue() ?: false + private val ønskerReberegning = + packet["ønskerReberegning"].takeIf { it.isBoolean }?.booleanValue() ?: false private val påminnelse get() = Påminnelse( diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadArbeidsgiverMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadArbeidsgiverMessage.kt" index af830c7957..91980b0e3c 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadArbeidsgiverMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadArbeidsgiverMessage.kt" @@ -2,19 +2,34 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.Personidentifikator import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.Personopplysninger // Understands a JSON message representing a Søknad that is only sent to the employer -internal class SendtSøknadArbeidsgiverMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing, private val builder: SendtSøknadBuilder = SendtSøknadBuilder()) : SøknadMessage(packet, builder) { +internal class SendtSøknadArbeidsgiverMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing, + private val builder: SendtSøknadBuilder = SendtSøknadBuilder() +) : SøknadMessage(packet, builder) { - override fun _behandle(mediator: IHendelseMediator, personopplysninger: Personopplysninger, packet: JsonMessage, context: MessageContext) { + override fun _behandle( + mediator: IHendelseMediator, + personopplysninger: Personopplysninger, + packet: JsonMessage, + context: MessageContext + ) { builder.sendt(packet["sendtArbeidsgiver"].asLocalDateTime()) SendtSøknadNavMessage.byggSendtSøknad(builder, packet) - mediator.behandle(personopplysninger, this, builder.build(meldingsporing), context, packet["historiskeFolkeregisteridenter"].map(JsonNode::asText).map { Personidentifikator(it) } .toSet()) + mediator.behandle( + personopplysninger, + this, + builder.build(meldingsporing), + context, + packet["historiskeFolkeregisteridenter"].map(JsonNode::asText) + .map { Personidentifikator(it) }.toSet()) } } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadArbeidsledigMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadArbeidsledigMessage.kt" index 1a4e4990e3..63aaca4c9f 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadArbeidsledigMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadArbeidsledigMessage.kt" @@ -1,22 +1,37 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode -import no.nav.helse.person.Arbeidsledig import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.asOptionalLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.Personidentifikator +import no.nav.helse.person.Arbeidsledig import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.Personopplysninger -internal class SendtSøknadArbeidsledigMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing, private val builder: SendtSøknadBuilder = SendtSøknadBuilder()) : SøknadMessage(packet, builder, packet["tidligereArbeidsgiverOrgnummer"].asText(Arbeidsledig)) { - override fun _behandle(mediator: IHendelseMediator, personopplysninger: Personopplysninger, packet: JsonMessage, context: MessageContext) { +internal class SendtSøknadArbeidsledigMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing, + private val builder: SendtSøknadBuilder = SendtSøknadBuilder() +) : SøknadMessage(packet, builder, packet["tidligereArbeidsgiverOrgnummer"].asText(Arbeidsledig)) { + override fun _behandle( + mediator: IHendelseMediator, + personopplysninger: Personopplysninger, + packet: JsonMessage, + context: MessageContext + ) { builder.sendt(packet["sendtNav"].asLocalDateTime()) builder.arbeidsledigsøknad() builder.arbeidsgjennopptatt(packet["friskmeldt"].asOptionalLocalDate()) SendtSøknadNavMessage.byggSendtSøknad(builder, packet) - mediator.behandle(personopplysninger, this, builder.build(meldingsporing), context, packet["historiskeFolkeregisteridenter"].map(JsonNode::asText).map { Personidentifikator(it) } .toSet()) + mediator.behandle( + personopplysninger, + this, + builder.build(meldingsporing), + context, + packet["historiskeFolkeregisteridenter"].map(JsonNode::asText) + .map { Personidentifikator(it) }.toSet()) } } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadBuilder.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadBuilder.kt" index 2086a7876a..6cb3a3c695 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadBuilder.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadBuilder.kt" @@ -55,13 +55,16 @@ internal class SendtSøknadBuilder : SøknadBuilder() { harAndreInntektskilder = andreInntektskilder } - internal fun ikkeJobbetIDetSisteFraAnnetArbeidsforhold(ikkeJobbetIDetSisteFraAnnetArbeidsforhold: Boolean) = apply { - this.ikkeJobbetIDetSisteFraAnnetArbeidsforhold = ikkeJobbetIDetSisteFraAnnetArbeidsforhold - } + internal fun ikkeJobbetIDetSisteFraAnnetArbeidsforhold(ikkeJobbetIDetSisteFraAnnetArbeidsforhold: Boolean) = + apply { + this.ikkeJobbetIDetSisteFraAnnetArbeidsforhold = + ikkeJobbetIDetSisteFraAnnetArbeidsforhold + } override fun utenlandskSykmelding(utenlandsk: Boolean) = apply { utenlandskSykmelding = utenlandsk } + override fun sendTilGosys(tilGosys: Boolean) = apply { sendTilGosys = tilGosys } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadFrilansMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadFrilansMessage.kt" index 4b896eacd5..a960f891e2 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadFrilansMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadFrilansMessage.kt" @@ -1,19 +1,34 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode -import no.nav.helse.person.Frilans import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.Personidentifikator +import no.nav.helse.person.Frilans import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.Personopplysninger -internal class SendtSøknadFrilansMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing, private val builder: SendtSøknadBuilder = SendtSøknadBuilder()) : SøknadMessage(packet, builder, Frilans) { - override fun _behandle(mediator: IHendelseMediator, personopplysninger: Personopplysninger, packet: JsonMessage, context: MessageContext) { +internal class SendtSøknadFrilansMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing, + private val builder: SendtSøknadBuilder = SendtSøknadBuilder() +) : SøknadMessage(packet, builder, Frilans) { + override fun _behandle( + mediator: IHendelseMediator, + personopplysninger: Personopplysninger, + packet: JsonMessage, + context: MessageContext + ) { builder.sendt(packet["sendtNav"].asLocalDateTime()) SendtSøknadNavMessage.byggSendtSøknad(builder, packet) - mediator.behandle(personopplysninger, this, builder.build(meldingsporing), context, packet["historiskeFolkeregisteridenter"].map(JsonNode::asText).map { Personidentifikator(it) } .toSet()) + mediator.behandle( + personopplysninger, + this, + builder.build(meldingsporing), + context, + packet["historiskeFolkeregisteridenter"].map(JsonNode::asText) + .map { Personidentifikator(it) }.toSet()) } } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadNavMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadNavMessage.kt" index e6da102f7f..3521608f7b 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadNavMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadNavMessage.kt" @@ -16,17 +16,34 @@ import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.Personopplysninger // Understands a JSON message representing a Søknad that is sent to NAV -internal class SendtSøknadNavMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing, private val builder: SendtSøknadBuilder = SendtSøknadBuilder()) : SøknadMessage(packet, builder) { +internal class SendtSøknadNavMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing, + private val builder: SendtSøknadBuilder = SendtSøknadBuilder() +) : SøknadMessage(packet, builder) { - override fun _behandle(mediator: IHendelseMediator, personopplysninger: Personopplysninger, packet: JsonMessage, context: MessageContext) { + override fun _behandle( + mediator: IHendelseMediator, + personopplysninger: Personopplysninger, + packet: JsonMessage, + context: MessageContext + ) { builder.sendt(packet["sendtNav"].asLocalDateTime()) byggSendtSøknad(builder, packet) - mediator.behandle(personopplysninger, this, builder.build(meldingsporing), context, packet["historiskeFolkeregisteridenter"].map(JsonNode::asText).map { Personidentifikator(it) } .toSet()) + mediator.behandle( + personopplysninger, + this, + builder.build(meldingsporing), + context, + packet["historiskeFolkeregisteridenter"].map(JsonNode::asText) + .map { Personidentifikator(it) }.toSet()) } internal companion object { internal fun byggSendtSøknad(builder: SendtSøknadBuilder, packet: JsonMessage) { - builder.permittert(packet["permitteringer"].takeIf(JsonNode::isArray)?.takeUnless { it.isEmpty }?.let { true } ?: false) + builder.permittert( + packet["permitteringer"].takeIf(JsonNode::isArray)?.takeUnless { it.isEmpty } + ?.let { true } ?: false) builder.egenmeldinger(packet["egenmeldingsdagerFraSykmelding"] .takeIf(JsonNode::isArray) ?.map { LocalDate.parse(it.asText()) } @@ -34,14 +51,26 @@ internal class SendtSøknadNavMessage(packet: JsonMessage, override val meldings ?: emptyList() ) packet["merknaderFraSykmelding"].takeIf(JsonNode::isArray)?.forEach { - builder.merknader(it.path("type").asText(), it.path("beskrivelse").takeUnless { it.isMissingOrNull() }?.asText()) + builder.merknader( + it.path("type").asText(), + it.path("beskrivelse").takeUnless { it.isMissingOrNull() }?.asText() + ) } packet["papirsykmeldinger"].forEach { - builder.papirsykmelding(fom = it.path("fom").asLocalDate(), tom = it.path("tom").asLocalDate()) + builder.papirsykmelding( + fom = it.path("fom").asLocalDate(), + tom = it.path("tom").asLocalDate() + ) } - val ikkeJobbetIDetSisteFraAnnetArbeidsforhold = harSvartNeiOmIkkeJobbetIDetSisteFraAnnetArbeidsforhold(packet["sporsmal"]) - builder.ikkeJobbetIDetSisteFraAnnetArbeidsforhold(ikkeJobbetIDetSisteFraAnnetArbeidsforhold) - val inntektskilder = andreInntektskilder(packet["andreInntektskilder"], ikkeJobbetIDetSisteFraAnnetArbeidsforhold) + val ikkeJobbetIDetSisteFraAnnetArbeidsforhold = + harSvartNeiOmIkkeJobbetIDetSisteFraAnnetArbeidsforhold(packet["sporsmal"]) + builder.ikkeJobbetIDetSisteFraAnnetArbeidsforhold( + ikkeJobbetIDetSisteFraAnnetArbeidsforhold + ) + val inntektskilder = andreInntektskilder( + packet["andreInntektskilder"], + ikkeJobbetIDetSisteFraAnnetArbeidsforhold + ) builder.inntektskilde(inntektskilder.isNotEmpty()) packet["inntektFraNyttArbeidsforhold"].takeIf(JsonNode::isArray)?.forEach { @@ -67,7 +96,10 @@ internal class SendtSøknadNavMessage(packet: JsonMessage, override val meldings builder.sendTilGosys(packet["sendTilGosys"].asBoolean(false)) } - private fun andreInntektskilder(andreInntektskilder: JsonNode, ikkeJobbetIDetSisteFraAnnetArbeidsforhold: Boolean): List { + private fun andreInntektskilder( + andreInntektskilder: JsonNode, + ikkeJobbetIDetSisteFraAnnetArbeidsforhold: Boolean + ): List { if (andreInntektskilder !is ArrayNode) return emptyList() // fjerner ANDRE_ARBEIDSFORHOLD dersom er satt til true return andreInntektskilder @@ -78,7 +110,10 @@ internal class SendtSøknadNavMessage(packet: JsonMessage, override val meldings private fun harSvartNeiOmIkkeJobbetIDetSisteFraAnnetArbeidsforhold(listeAvSpørsmål: JsonNode): Boolean { val svarene = spørsmål(listeAvSpørsmål) val svarPåOmJobbetIDetSiste = svarene - .firstOrNull { it.path("tag").asText() == "INNTEKTSKILDE_ANDRE_ARBEIDSFORHOLD_JOBBET_I_DET_SISTE" } + .firstOrNull { + it.path("tag") + .asText() == "INNTEKTSKILDE_ANDRE_ARBEIDSFORHOLD_JOBBET_I_DET_SISTE" + } ?.path("svar") ?.singleOrNull() return svarPåOmJobbetIDetSiste?.path("verdi")?.asText() == "NEI" diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadSelvstendigMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadSelvstendigMessage.kt" index 46ed33987f..4fa35b1666 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadSelvstendigMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SendtS\303\270knadSelvstendigMessage.kt" @@ -1,19 +1,34 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode -import no.nav.helse.person.Selvstendig import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.Personidentifikator +import no.nav.helse.person.Selvstendig import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.Personopplysninger -internal class SendtSøknadSelvstendigMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing, private val builder: SendtSøknadBuilder = SendtSøknadBuilder()) : SøknadMessage(packet, builder, Selvstendig) { - override fun _behandle(mediator: IHendelseMediator, personopplysninger: Personopplysninger, packet: JsonMessage, context: MessageContext) { +internal class SendtSøknadSelvstendigMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing, + private val builder: SendtSøknadBuilder = SendtSøknadBuilder() +) : SøknadMessage(packet, builder, Selvstendig) { + override fun _behandle( + mediator: IHendelseMediator, + personopplysninger: Personopplysninger, + packet: JsonMessage, + context: MessageContext + ) { builder.sendt(packet["sendtNav"].asLocalDateTime()) SendtSøknadNavMessage.byggSendtSøknad(builder, packet) - mediator.behandle(personopplysninger, this, builder.build(meldingsporing), context, packet["historiskeFolkeregisteridenter"].map(JsonNode::asText).map { Personidentifikator(it) } .toSet()) + mediator.behandle( + personopplysninger, + this, + builder.build(meldingsporing), + context, + packet["historiskeFolkeregisteridenter"].map(JsonNode::asText) + .map { Personidentifikator(it) }.toSet()) } } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SimuleringMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SimuleringMessage.kt index 8835d18214..670d644ba4 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SimuleringMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SimuleringMessage.kt @@ -1,20 +1,21 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode -import java.util.UUID -import no.nav.helse.hendelser.Simulering -import no.nav.helse.dto.SimuleringResultatDto -import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.isMissingOrNull +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import java.util.UUID +import no.nav.helse.dto.SimuleringResultatDto +import no.nav.helse.hendelser.Simulering +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.spleis.meldinger.model.SimuleringMessage.Simuleringstatus.OK import no.nav.helse.spleis.meldinger.model.SimuleringMessage.Simuleringstatus.valueOf -internal class SimuleringMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : BehovMessage(packet) { +internal class SimuleringMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : + BehovMessage(packet) { private val vedtaksperiodeId = packet["vedtaksperiodeId"].asText() private val organisasjonsnummer = packet["organisasjonsnummer"].asText() private val utbetalingId = UUID.fromString(packet["utbetalingId"].asText()) @@ -23,7 +24,8 @@ internal class SimuleringMessage(packet: JsonMessage, override val meldingsporin private val fagområde = packet["Simulering.fagområde"].asText() private val status = valueOf(packet["@løsning.${Behovtype.Simulering.name}.status"].asText()) private val simuleringOK = status == OK - private val melding = packet["@løsning.${Behovtype.Simulering.name}.feilmelding"].asText() + " (status=$status)" + private val melding = + packet["@løsning.${Behovtype.Simulering.name}.feilmelding"].asText() + " (status=$status)" private val simuleringResultat = packet["@løsning.${Behovtype.Simulering.name}.simulering"].takeUnless(JsonNode::isMissingOrNull) ?.let { @@ -49,12 +51,16 @@ internal class SimuleringMessage(packet: JsonMessage, override val meldingsporin beløp = detalj.path("belop").asInt(), klassekode = SimuleringResultatDto.Klassekode( kode = detalj.path("klassekode").asText(), - beskrivelse = detalj.path("klassekodeBeskrivelse").asText() + beskrivelse = detalj.path("klassekodeBeskrivelse") + .asText() ), uføregrad = detalj.path("uforegrad").asInt(), - utbetalingstype = detalj.path("utbetalingsType").asText(), - refunderesOrgnummer = detalj.path("refunderesOrgNr").asText(), - tilbakeføring = detalj.path("tilbakeforing").asBoolean(), + utbetalingstype = detalj.path("utbetalingsType") + .asText(), + refunderesOrgnummer = detalj.path("refunderesOrgNr") + .asText(), + tilbakeføring = detalj.path("tilbakeforing") + .asBoolean(), sats = SimuleringResultatDto.Sats( sats = detalj.path("sats").asDouble(), antall = detalj.path("antallSats").asInt(), diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Skj\303\270nnsmessigFastsettelseMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Skj\303\270nnsmessigFastsettelseMessage.kt" index 39f6e6e42b..4d693f908d 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Skj\303\270nnsmessigFastsettelseMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Skj\303\270nnsmessigFastsettelseMessage.kt" @@ -1,20 +1,23 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode +import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage +import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import java.time.LocalDate import no.nav.helse.hendelser.SkjønnsmessigFastsettelse import no.nav.helse.hendelser.til import no.nav.helse.person.inntekt.ArbeidsgiverInntektsopplysning import no.nav.helse.person.inntekt.Refusjonsopplysning.Refusjonsopplysninger import no.nav.helse.person.inntekt.SkjønnsmessigFastsatt -import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext -import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.økonomi.Inntekt.Companion.årlig -internal class SkjønnsmessigFastsettelseMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class SkjønnsmessigFastsettelseMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val skjæringstidspunkt = packet["skjæringstidspunkt"].asLocalDate() private val arbeidsgiveropplysninger = packet["arbeidsgivere"].asArbeidsgiveropplysninger() @@ -22,11 +25,11 @@ internal class SkjønnsmessigFastsettelseMessage(packet: JsonMessage, override v override fun behandle(mediator: IHendelseMediator, context: MessageContext) = mediator.behandle( this, SkjønnsmessigFastsettelse( - meldingsreferanseId = meldingsporing.id, - skjæringstidspunkt = skjæringstidspunkt, - arbeidsgiveropplysninger = arbeidsgiveropplysninger, - opprettet = opprettet - ), + meldingsreferanseId = meldingsporing.id, + skjæringstidspunkt = skjæringstidspunkt, + arbeidsgiveropplysninger = arbeidsgiveropplysninger, + opprettet = opprettet + ), context ) @@ -37,7 +40,12 @@ internal class SkjønnsmessigFastsettelseMessage(packet: JsonMessage, override v val skjønnsmessigFastsattInntekt = SkjønnsmessigFastsatt(skjæringstidspunkt, meldingsporing.id, årlig, opprettet) - ArbeidsgiverInntektsopplysning(orgnummer, skjæringstidspunkt til LocalDate.MAX, skjønnsmessigFastsattInntekt, Refusjonsopplysninger()) + ArbeidsgiverInntektsopplysning( + orgnummer, + skjæringstidspunkt til LocalDate.MAX, + skjønnsmessigFastsattInntekt, + Refusjonsopplysninger() + ) } } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SykepengegrunnlagForArbeidsgiverMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SykepengegrunnlagForArbeidsgiverMessage.kt index 62f3957e71..1ef855b48b 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SykepengegrunnlagForArbeidsgiverMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/SykepengegrunnlagForArbeidsgiverMessage.kt @@ -10,22 +10,31 @@ import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.InntekterFor import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing -internal class SykepengegrunnlagForArbeidsgiverMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : BehovMessage(packet) { +internal class SykepengegrunnlagForArbeidsgiverMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : BehovMessage(packet) { private val vedtaksperiodeId = packet["vedtaksperiodeId"].asText().let { UUID.fromString(it) } private val organisasjonsnummer = packet["organisasjonsnummer"].asText() - private val inntekterForSykepengegrunnlag = VilkårsgrunnlagMessage.mapSkatteopplysninger(packet["@løsning.${InntekterForSykepengegrunnlagForArbeidsgiver.name}"]) + private val inntekterForSykepengegrunnlag = + VilkårsgrunnlagMessage.mapSkatteopplysninger(packet["@løsning.${InntekterForSykepengegrunnlagForArbeidsgiver.name}"]) - private val skjæringstidspunkter = packet["${InntekterForSykepengegrunnlagForArbeidsgiver.name}.skjæringstidspunkt"].asLocalDate() + private val skjæringstidspunkter = + packet["${InntekterForSykepengegrunnlagForArbeidsgiver.name}.skjæringstidspunkt"].asLocalDate() - private val sykepengegrunnlagForArbeidsgiver get() = SykepengegrunnlagForArbeidsgiver( - meldingsreferanseId = meldingsporing.id, - vedtaksperiodeId = vedtaksperiodeId, - skjæringstidspunkt = skjæringstidspunkter, - orgnummer = organisasjonsnummer, - inntekter = if (inntekterForSykepengegrunnlag.isEmpty()) ArbeidsgiverInntekt(organisasjonsnummer, emptyList()) else inntekterForSykepengegrunnlag.single() - ) + private val sykepengegrunnlagForArbeidsgiver + get() = SykepengegrunnlagForArbeidsgiver( + meldingsreferanseId = meldingsporing.id, + vedtaksperiodeId = vedtaksperiodeId, + skjæringstidspunkt = skjæringstidspunkter, + orgnummer = organisasjonsnummer, + inntekter = if (inntekterForSykepengegrunnlag.isEmpty()) ArbeidsgiverInntekt( + organisasjonsnummer, + emptyList() + ) else inntekterForSykepengegrunnlag.single() + ) override fun behandle(mediator: IHendelseMediator, context: MessageContext) { mediator.behandle(this, sykepengegrunnlagForArbeidsgiver, context) diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/S\303\270knadBuilder.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/S\303\270knadBuilder.kt" index 1a0d67e6ae..dc9361870e 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/S\303\270knadBuilder.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/S\303\270knadBuilder.kt" @@ -2,8 +2,8 @@ package no.nav.helse.spleis.meldinger.model import java.time.LocalDate import java.time.LocalDateTime -import no.nav.helse.hendelser.Periode import kotlin.properties.Delegates +import no.nav.helse.hendelser.Periode internal abstract class SøknadBuilder { protected lateinit var sykmeldingSkrevet: LocalDateTime @@ -18,15 +18,23 @@ internal abstract class SøknadBuilder { protected var yrkesskade by Delegates.notNull() protected var innsendt: LocalDateTime? = null - internal fun sykmeldingSkrevet(sykmeldingSkrevet: LocalDateTime) = apply { this.sykmeldingSkrevet = sykmeldingSkrevet } + internal fun sykmeldingSkrevet(sykmeldingSkrevet: LocalDateTime) = + apply { this.sykmeldingSkrevet = sykmeldingSkrevet } + internal fun fødselsdato(fødselsdato: LocalDate) = apply { this.fødselsdato = fødselsdato } - internal fun organisasjonsnummer(organisasjonsnummer: String) = apply { this.organisasjonsnummer = organisasjonsnummer } + internal fun organisasjonsnummer(organisasjonsnummer: String) = + apply { this.organisasjonsnummer = organisasjonsnummer } + internal fun fom(fom: LocalDate) = apply { this.fom = fom } internal fun tom(tom: LocalDate) = apply { this.tom = tom } internal fun sendt(tidspunkt: LocalDateTime) = apply { this.innsendt = tidspunkt } internal fun permittert(permittert: Boolean) = apply { this.permittert = permittert } - internal fun egenmeldinger(egenmeldinger: List) = apply { this.egenmeldinger = egenmeldinger } - internal fun arbeidUtenforNorge(arbeidUtenforNorge: Boolean) = apply { this.arbeidUtenforNorge = arbeidUtenforNorge } + internal fun egenmeldinger(egenmeldinger: List) = + apply { this.egenmeldinger = egenmeldinger } + + internal fun arbeidUtenforNorge(arbeidUtenforNorge: Boolean) = + apply { this.arbeidUtenforNorge = arbeidUtenforNorge } + internal fun yrkesskade(yrkesskade: Boolean) = apply { this.yrkesskade = yrkesskade } internal fun fravær(type: String, fom: LocalDate, tom: LocalDate?) { when (type) { @@ -38,7 +46,12 @@ internal abstract class SøknadBuilder { internal open fun inntektskilde(andreInntektskilder: Boolean) = apply {} - internal abstract fun periode(fom: LocalDate, tom: LocalDate, grad: Int, arbeidshelse: Int?): SøknadBuilder + internal abstract fun periode( + fom: LocalDate, + tom: LocalDate, + grad: Int, + arbeidshelse: Int? + ): SøknadBuilder internal open fun permisjon(fom: LocalDate, tom: LocalDate) = apply {} internal open fun ferie(fom: LocalDate, tom: LocalDate) = apply {} diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/S\303\270knadMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/S\303\270knadMessage.kt" index 000de34eca..f50383b47a 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/S\303\270knadMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/S\303\270knadMessage.kt" @@ -2,10 +2,10 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.asOptionalLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.Personidentifikator import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Personopplysninger @@ -30,7 +30,12 @@ internal sealed class SøknadMessage( _behandle(mediator, personopplysninger, packet, context) } - protected abstract fun _behandle(mediator: IHendelseMediator, personopplysninger: Personopplysninger, packet: JsonMessage, context: MessageContext) + protected abstract fun _behandle( + mediator: IHendelseMediator, + personopplysninger: Personopplysninger, + packet: JsonMessage, + context: MessageContext + ) private fun bygg() { builder.fødselsdato(packet["fødselsdato"].asLocalDate()) diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingMessage.kt index 773051ed4a..6fb7bc09a3 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingMessage.kt @@ -1,24 +1,27 @@ package no.nav.helse.spleis.meldinger.model -import no.nav.helse.hendelser.UtbetalingHendelse -import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Utbetaling import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.toUUID +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import no.nav.helse.hendelser.UtbetalingHendelse +import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Utbetaling import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.utbetalingslinjer.Oppdragstatus -internal class UtbetalingMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : BehovMessage(packet) { +internal class UtbetalingMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : + BehovMessage(packet) { private val organisasjonsnummer = packet["organisasjonsnummer"].asText() private val fagsystemId = packet["${Utbetaling.name}.fagsystemId"].asText().trim() private val utbetalingId = packet["utbetalingId"].asText().toUUID() - private val status: Oppdragstatus = enumValueOf(packet["@løsning.${Utbetaling.name}.status"].asText()) + private val status: Oppdragstatus = + enumValueOf(packet["@løsning.${Utbetaling.name}.status"].asText()) private val beskrivelse = packet["@løsning.${Utbetaling.name}.beskrivelse"].asText() private val avstemmingsnøkkel = packet["@løsning.${Utbetaling.name}.avstemmingsnøkkel"].asLong() - private val overføringstidspunkt = packet["@løsning.${Utbetaling.name}.overføringstidspunkt"].asLocalDateTime() + private val overføringstidspunkt = + packet["@løsning.${Utbetaling.name}.overføringstidspunkt"].asLocalDateTime() override val skalDuplikatsjekkes = false private val utbetaling diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Utbetalingp\303\245minnelseMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Utbetalingp\303\245minnelseMessage.kt" index 80028340bb..0f9b94e5fc 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Utbetalingp\303\245minnelseMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Utbetalingp\303\245minnelseMessage.kt" @@ -1,16 +1,19 @@ package no.nav.helse.spleis.meldinger.model -import java.util.UUID -import no.nav.helse.hendelser.Utbetalingpåminnelse import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime -import no.nav.helse.utbetalingslinjer.Utbetalingstatus +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext +import java.util.UUID +import no.nav.helse.hendelser.Utbetalingpåminnelse import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing +import no.nav.helse.utbetalingslinjer.Utbetalingstatus // Understands a JSON message representing a UtbetalingpPåminnelse -internal class UtbetalingpåminnelseMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : HendelseMessage(packet) { +internal class UtbetalingpåminnelseMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : HendelseMessage(packet) { private val utbetalingId = UUID.fromString(packet["utbetalingId"].asText()) private val organisasjonsnummer = packet["organisasjonsnummer"].asText() diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingsgodkjenningMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingsgodkjenningMessage.kt index d91046ce15..c25ddb32fb 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingsgodkjenningMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingsgodkjenningMessage.kt @@ -1,24 +1,30 @@ package no.nav.helse.spleis.meldinger.model +import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage +import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import java.util.UUID import no.nav.helse.hendelser.Utbetalingsgodkjenning import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Godkjenning -import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext -import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing // Understands a JSON message representing a Godkjenning-behov -internal class UtbetalingsgodkjenningMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : BehovMessage(packet) { +internal class UtbetalingsgodkjenningMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : BehovMessage(packet) { private val utbetalingId = packet["utbetalingId"].asText() private val vedtaksperiodeId = packet["vedtaksperiodeId"].asText() private val organisasjonsnummer = packet["organisasjonsnummer"].asText() private val saksbehandler = packet["@løsning.${Godkjenning.name}.saksbehandlerIdent"].asText() - private val saksbehandlerEpost = packet["@løsning.${Godkjenning.name}.saksbehandlerEpost"].asText() - private val godkjenttidspunkt = packet["@løsning.${Godkjenning.name}.godkjenttidspunkt"].asLocalDateTime() + private val saksbehandlerEpost = + packet["@løsning.${Godkjenning.name}.saksbehandlerEpost"].asText() + private val godkjenttidspunkt = + packet["@løsning.${Godkjenning.name}.godkjenttidspunkt"].asLocalDateTime() private val utbetalingGodkjent = packet["@løsning.${Godkjenning.name}.godkjent"].asBoolean() - private val automatiskBehandling = packet["@løsning.${Godkjenning.name}.automatiskBehandling"].asBoolean() + private val automatiskBehandling = + packet["@løsning.${Godkjenning.name}.automatiskBehandling"].asBoolean() private val utbetalingsgodkjenning get() = Utbetalingsgodkjenning( diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkEtterInfotrygdendringMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkEtterInfotrygdendringMessage.kt index 4b880b1aae..3168696710 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkEtterInfotrygdendringMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkEtterInfotrygdendringMessage.kt @@ -14,7 +14,10 @@ import no.nav.helse.spleis.meldinger.model.UtbetalingshistorikkMessage.Companion import no.nav.helse.spleis.meldinger.model.UtbetalingshistorikkMessage.Companion.utbetalinger // Understands a JSON message representing an Ytelserbehov -internal class UtbetalingshistorikkEtterInfotrygdendringMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : BehovMessage(packet) { +internal class UtbetalingshistorikkEtterInfotrygdendringMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : BehovMessage(packet) { private val besvart = packet["@besvart"].asLocalDateTime() diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkForFeriepengerMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkForFeriepengerMessage.kt index 903c3be8fd..f9a65d9f0c 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkForFeriepengerMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkForFeriepengerMessage.kt @@ -13,52 +13,75 @@ import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing // Understands a JSON message representing an Ytelserbehov -internal class UtbetalingshistorikkForFeriepengerMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : BehovMessage(packet) { - private val skalBeregnesManuelt = packet["@løsning.${SykepengehistorikkForFeriepenger.name}.feriepengerSkalBeregnesManuelt"].asBoolean() +internal class UtbetalingshistorikkForFeriepengerMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : BehovMessage(packet) { + private val skalBeregnesManuelt = + packet["@løsning.${SykepengehistorikkForFeriepenger.name}.feriepengerSkalBeregnesManuelt"].asBoolean() - private val utbetalinger = packet["@løsning.${SykepengehistorikkForFeriepenger.name}.utbetalinger"] - .filter(::erGyldigPeriode) - .mapNotNull { utbetaling -> - val fom = utbetaling["fom"].asLocalDate() - val tom = utbetaling["tom"].asLocalDate() - when (utbetaling["typeKode"].asText()) { - "0", "1" -> { - val beløp = utbetaling["dagsats"].asInt() - val orgnummer = utbetaling["orgnummer"].asText() - val utbetalt = utbetaling["utbetalt"].asLocalDate() - UtbetalingshistorikkForFeriepenger.Utbetalingsperiode.Personutbetalingsperiode(orgnummer, fom, tom, beløp, utbetalt) - } - "5", "6" -> { - val beløp = utbetaling["dagsats"].asInt() - val orgnummer = utbetaling["orgnummer"].asText() - val utbetalt = utbetaling["utbetalt"].asLocalDate() - UtbetalingshistorikkForFeriepenger.Utbetalingsperiode.Arbeidsgiverutbetalingsperiode(orgnummer, fom, tom, beløp, utbetalt) + private val utbetalinger = + packet["@løsning.${SykepengehistorikkForFeriepenger.name}.utbetalinger"] + .filter(::erGyldigPeriode) + .mapNotNull { utbetaling -> + val fom = utbetaling["fom"].asLocalDate() + val tom = utbetaling["tom"].asLocalDate() + when (utbetaling["typeKode"].asText()) { + "0", "1" -> { + val beløp = utbetaling["dagsats"].asInt() + val orgnummer = utbetaling["orgnummer"].asText() + val utbetalt = utbetaling["utbetalt"].asLocalDate() + UtbetalingshistorikkForFeriepenger.Utbetalingsperiode.Personutbetalingsperiode( + orgnummer, + fom, + tom, + beløp, + utbetalt + ) + } + + "5", "6" -> { + val beløp = utbetaling["dagsats"].asInt() + val orgnummer = utbetaling["orgnummer"].asText() + val utbetalt = utbetaling["utbetalt"].asLocalDate() + UtbetalingshistorikkForFeriepenger.Utbetalingsperiode.Arbeidsgiverutbetalingsperiode( + orgnummer, + fom, + tom, + beløp, + utbetalt + ) + } + + else -> null } - else -> null } - } - private val feriepengehistorikk = packet["@løsning.${SykepengehistorikkForFeriepenger.name}.feriepengehistorikk"] - .map { feriepenge -> - UtbetalingshistorikkForFeriepenger.Feriepenger( - orgnummer = feriepenge["orgnummer"].asText(), - beløp = feriepenge["beløp"].asInt(), - fom = feriepenge["fom"].asLocalDate(), - tom = feriepenge["tom"].asLocalDate() - ) - } + private val feriepengehistorikk = + packet["@løsning.${SykepengehistorikkForFeriepenger.name}.feriepengehistorikk"] + .map { feriepenge -> + UtbetalingshistorikkForFeriepenger.Feriepenger( + orgnummer = feriepenge["orgnummer"].asText(), + beløp = feriepenge["beløp"].asInt(), + fom = feriepenge["fom"].asLocalDate(), + tom = feriepenge["tom"].asLocalDate() + ) + } - private val arbeidskategorikoder = packet["@løsning.${SykepengehistorikkForFeriepenger.name}.arbeidskategorikoder"] - .map { - val fom = it["fom"].asLocalDate() - val tom = it["tom"].asLocalDate() - val kode = it["kode"].asText() - UtbetalingshistorikkForFeriepenger.Arbeidskategorikoder.KodePeriode( - periode = Periode(fom, tom), - arbeidskategorikode = UtbetalingshistorikkForFeriepenger.Arbeidskategorikoder.Arbeidskategorikode.finn(kode) - ) - } - .let(UtbetalingshistorikkForFeriepenger::Arbeidskategorikoder) + private val arbeidskategorikoder = + packet["@løsning.${SykepengehistorikkForFeriepenger.name}.arbeidskategorikoder"] + .map { + val fom = it["fom"].asLocalDate() + val tom = it["tom"].asLocalDate() + val kode = it["kode"].asText() + UtbetalingshistorikkForFeriepenger.Arbeidskategorikoder.KodePeriode( + periode = Periode(fom, tom), + arbeidskategorikode = UtbetalingshistorikkForFeriepenger.Arbeidskategorikoder.Arbeidskategorikode.finn( + kode + ) + ) + } + .let(UtbetalingshistorikkForFeriepenger::Arbeidskategorikoder) private val opptjeningsår = packet["${SykepengehistorikkForFeriepenger.name}.historikkFom"] .asLocalDate() diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkMessage.kt index 6e7fbef8ea..3ce383ab6a 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/UtbetalingshistorikkMessage.kt @@ -23,10 +23,15 @@ import no.nav.helse.økonomi.Inntekt.Companion.månedlig import no.nav.helse.økonomi.Prosentdel.Companion.prosent // Understands a JSON message representing an Ytelserbehov -internal class UtbetalingshistorikkMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : BehovMessage(packet) { +internal class UtbetalingshistorikkMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : BehovMessage(packet) { companion object { - internal fun JsonMessage.harStatslønn() = this["@løsning.${Sykepengehistorikk.name}"].any { it["statslønn"].asBoolean() } + internal fun JsonMessage.harStatslønn() = + this["@løsning.${Sykepengehistorikk.name}"].any { it["statslønn"].asBoolean() } + internal fun JsonMessage.utbetalinger() = this["@løsning.${Sykepengehistorikk.name}"] .flatMap { it.path("utbetalteSykeperioder") } .filter(::erGyldigPeriode) @@ -36,16 +41,20 @@ internal class UtbetalingshistorikkMessage(packet: JsonMessage, override val mel when (utbetaling["typeKode"].asText()) { "0", "1" -> { val grad = utbetaling["utbetalingsGrad"].asInt().prosent - val inntekt = Utbetalingsperiode.inntekt(utbetaling["dagsats"].asInt().daglig, grad) + val inntekt = + Utbetalingsperiode.inntekt(utbetaling["dagsats"].asInt().daglig, grad) val orgnummer = utbetaling["orgnummer"].asText() PersonUtbetalingsperiode(orgnummer, fom, tom, grad, inntekt) } + "5", "6" -> { val grad = utbetaling["utbetalingsGrad"].asInt().prosent - val inntekt = Utbetalingsperiode.inntekt(utbetaling["dagsats"].asInt().daglig, grad) + val inntekt = + Utbetalingsperiode.inntekt(utbetaling["dagsats"].asInt().daglig, grad) val orgnummer = utbetaling["orgnummer"].asText() ArbeidsgiverUtbetalingsperiode(orgnummer, fom, tom, grad, inntekt) } + "9" -> Friperiode(fom, tom) else -> null } @@ -62,7 +71,8 @@ internal class UtbetalingshistorikkMessage(packet: JsonMessage, override val mel return utbetalingsGrad > 0 } - private fun erUtbetalingsperiode(node: JsonNode) = node["typeKode"].asText() in listOf("0", "1", "5", "6") + private fun erUtbetalingsperiode(node: JsonNode) = + node["typeKode"].asText() in listOf("0", "1", "5", "6") private fun harGyldigTidsintervall(node: JsonNode): Boolean { val fom = node["fom"].asOptionalLocalDate() @@ -70,14 +80,15 @@ internal class UtbetalingshistorikkMessage(packet: JsonMessage, override val mel return fom != null && tom != null && tom >= fom } - internal fun JsonMessage.arbeidskategorikoder() = this["@løsning.${Sykepengehistorikk.name}"] - .flatMap { element -> - element.path("utbetalteSykeperioder").mapNotNull { utbetaling -> - utbetaling["fom"].asOptionalLocalDate()?.let { - element.path("arbeidsKategoriKode").asText() to it + internal fun JsonMessage.arbeidskategorikoder() = + this["@løsning.${Sykepengehistorikk.name}"] + .flatMap { element -> + element.path("utbetalteSykeperioder").mapNotNull { utbetaling -> + utbetaling["fom"].asOptionalLocalDate()?.let { + element.path("arbeidsKategoriKode").asText() to it + } } - } - }.sortedBy { (_, dato) -> dato }.toMap() + }.sortedBy { (_, dato) -> dato }.toMap() internal fun JsonMessage.inntektshistorikk() = this["@løsning.${Sykepengehistorikk.name}"] .flatMap { it.path("inntektsopplysninger") } diff --git "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Vilk\303\245rsgrunnlagMessage.kt" "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Vilk\303\245rsgrunnlagMessage.kt" index 63bf3a1377..08b744f081 100644 --- "a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Vilk\303\245rsgrunnlagMessage.kt" +++ "b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/Vilk\303\245rsgrunnlagMessage.kt" @@ -2,6 +2,11 @@ package no.nav.helse.spleis.meldinger.model import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.ObjectNode +import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage +import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers.asOptionalLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers.asYearMonth +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.hendelser.ArbeidsgiverInntekt import no.nav.helse.hendelser.ArbeidsgiverInntekt.MånedligInntekt.Inntekttype import no.nav.helse.hendelser.InntektForSykepengegrunnlag @@ -12,24 +17,24 @@ import no.nav.helse.person.aktivitetslogg.Aktivitet import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.ArbeidsforholdV2 import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.InntekterForSykepengegrunnlag import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Behovtype.Medlemskap -import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext -import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate -import com.github.navikt.tbd_libs.rapids_and_rivers.asOptionalLocalDate -import com.github.navikt.tbd_libs.rapids_and_rivers.asYearMonth import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Meldingsporing import no.nav.helse.økonomi.Inntekt.Companion.månedlig // Understands a JSON message representing a Vilkårsgrunnlagsbehov -internal class VilkårsgrunnlagMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : BehovMessage(packet) { +internal class VilkårsgrunnlagMessage( + packet: JsonMessage, + override val meldingsporing: Meldingsporing +) : BehovMessage(packet) { private val vedtaksperiodeId = packet["vedtaksperiodeId"].asText() private val organisasjonsnummer = packet["organisasjonsnummer"].asText() - private val inntekterForSykepengegrunnlag = mapSkatteopplysninger(packet["@løsning.${InntekterForSykepengegrunnlag.name}"]) + private val inntekterForSykepengegrunnlag = + mapSkatteopplysninger(packet["@løsning.${InntekterForSykepengegrunnlag.name}"]) - private val inntekterForOpptjeningsvurdering = mapSkatteopplysninger(packet["@løsning.${Aktivitet.Behov.Behovtype.InntekterForOpptjeningsvurdering.name}"]) + private val inntekterForOpptjeningsvurdering = + mapSkatteopplysninger(packet["@løsning.${Aktivitet.Behov.Behovtype.InntekterForOpptjeningsvurdering.name}"]) private val arbeidsforhold = packet["@løsning.${ArbeidsforholdV2.name}"] .filterNot { it["orgnummer"].asText().isBlank() } .filter { @@ -51,12 +56,13 @@ internal class VilkårsgrunnlagMessage(packet: JsonMessage, override val melding ) } - private val medlemskapstatus = when (packet["@løsning.${Medlemskap.name}.resultat.svar"].asText()) { - "JA" -> Medlemskapsvurdering.Medlemskapstatus.Ja - "NEI" -> Medlemskapsvurdering.Medlemskapstatus.Nei - "UAVKLART_MED_BRUKERSPORSMAAL" -> Medlemskapsvurdering.Medlemskapstatus.UavklartMedBrukerspørsmål - else -> Medlemskapsvurdering.Medlemskapstatus.VetIkke - } + private val medlemskapstatus = + when (packet["@løsning.${Medlemskap.name}.resultat.svar"].asText()) { + "JA" -> Medlemskapsvurdering.Medlemskapstatus.Ja + "NEI" -> Medlemskapsvurdering.Medlemskapstatus.Nei + "UAVKLART_MED_BRUKERSPORSMAAL" -> Medlemskapsvurdering.Medlemskapstatus.UavklartMedBrukerspørsmål + else -> Medlemskapsvurdering.Medlemskapstatus.VetIkke + } private val skjæringstidspunkter = listOfNotNull( packet["${InntekterForSykepengegrunnlag.name}.skjæringstidspunkt"].asLocalDate(), @@ -77,7 +83,9 @@ internal class VilkårsgrunnlagMessage(packet: JsonMessage, override val melding inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = inntekterForSykepengegrunnlag ), - inntekterForOpptjeningsvurdering = no.nav.helse.hendelser.InntekterForOpptjeningsvurdering(inntekter = inntekterForOpptjeningsvurdering), + inntekterForOpptjeningsvurdering = no.nav.helse.hendelser.InntekterForOpptjeningsvurdering( + inntekter = inntekterForOpptjeningsvurdering + ), arbeidsforhold = arbeidsforhold ) @@ -107,17 +115,17 @@ internal class VilkårsgrunnlagMessage(packet: JsonMessage, override val melding (opplysning as ObjectNode).put("årMåned", måned.path("årMåned").asText()) } } - .groupBy({ inntekt -> inntekt.arbeidsgiver() }) { inntekt -> - ArbeidsgiverInntekt.MånedligInntekt( - yearMonth = inntekt["årMåned"].asYearMonth(), - inntekt = inntekt["beløp"].asDouble().månedlig, - type = inntekt["inntektstype"].asInntekttype(), - fordel = if (inntekt.path("fordel").isTextual) inntekt["fordel"].asText() else "", - beskrivelse = if (inntekt.path("beskrivelse").isTextual) inntekt["beskrivelse"].asText() else "" - ) - } - .map { (arbeidsgiver, inntekter) -> - ArbeidsgiverInntekt(arbeidsgiver, inntekter) - } + .groupBy({ inntekt -> inntekt.arbeidsgiver() }) { inntekt -> + ArbeidsgiverInntekt.MånedligInntekt( + yearMonth = inntekt["årMåned"].asYearMonth(), + inntekt = inntekt["beløp"].asDouble().månedlig, + type = inntekt["inntektstype"].asInntekttype(), + fordel = if (inntekt.path("fordel").isTextual) inntekt["fordel"].asText() else "", + beskrivelse = if (inntekt.path("beskrivelse").isTextual) inntekt["beskrivelse"].asText() else "" + ) + } + .map { (arbeidsgiver, inntekter) -> + ArbeidsgiverInntekt(arbeidsgiver, inntekter) + } } } diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/YtelserMessage.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/YtelserMessage.kt index 77743393bb..757d7e0abd 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/YtelserMessage.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/meldinger/model/YtelserMessage.kt @@ -24,7 +24,8 @@ import no.nav.helse.spleis.Meldingsporing import org.slf4j.LoggerFactory // Understands a JSON message representing an Ytelserbehov -internal class YtelserMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : BehovMessage(packet) { +internal class YtelserMessage(packet: JsonMessage, override val meldingsporing: Meldingsporing) : + BehovMessage(packet) { private companion object { private val sikkerlogg = LoggerFactory.getLogger("tjenestekall") @@ -37,11 +38,13 @@ internal class YtelserMessage(packet: JsonMessage, override val meldingsporing: private val dagpenger: List> private val ugyldigeDagpengeperioder: List> - private val foreldrepengerytelse = packet["@løsning.${Behovtype.Foreldrepenger.name}.Foreldrepengeytelse"] - .takeIf(JsonNode::isObject)?.path("perioder")?.map(::asGradertPeriode)?: emptyList() - private val svangerskapsytelse = packet["@løsning.${Behovtype.Foreldrepenger.name}.Svangerskapsytelse"] - .takeIf(JsonNode::isObject)?.path("perioder")?.map(::asGradertPeriode) - ?: emptyList() + private val foreldrepengerytelse = + packet["@løsning.${Behovtype.Foreldrepenger.name}.Foreldrepengeytelse"] + .takeIf(JsonNode::isObject)?.path("perioder")?.map(::asGradertPeriode) ?: emptyList() + private val svangerskapsytelse = + packet["@løsning.${Behovtype.Foreldrepenger.name}.Svangerskapsytelse"] + .takeIf(JsonNode::isObject)?.path("perioder")?.map(::asGradertPeriode) + ?: emptyList() private val foreldrepenger = Foreldrepenger(foreldrepengeytelse = foreldrepengerytelse) private val svangerskapspenger = Svangerskapspenger(svangerskapsytelse = svangerskapsytelse) @@ -55,12 +58,13 @@ internal class YtelserMessage(packet: JsonMessage, override val meldingsporing: private val opplæringspenger = Opplæringspenger(packet["@løsning.${Behovtype.Opplæringspenger.name}"].map(::asGradertPeriode)) - private val institusjonsopphold = Institusjonsopphold(packet["@løsning.${Behovtype.Institusjonsopphold.name}"].map { - Institusjonsoppholdsperiode( - it.path("startdato").asLocalDate(), - it.path("faktiskSluttdato").asOptionalLocalDate() - ) - }) + private val institusjonsopphold = + Institusjonsopphold(packet["@løsning.${Behovtype.Institusjonsopphold.name}"].map { + Institusjonsoppholdsperiode( + it.path("startdato").asLocalDate(), + it.path("faktiskSluttdato").asOptionalLocalDate() + ) + }) init { packet["@løsning.${Behovtype.Arbeidsavklaringspenger.name}.meldekortperioder"].map(::asDatePair) @@ -90,7 +94,12 @@ internal class YtelserMessage(packet: JsonMessage, override val meldingsporing: omsorgspenger = omsorgspenger, opplæringspenger = opplæringspenger, institusjonsopphold = institusjonsopphold, - arbeidsavklaringspenger = Arbeidsavklaringspenger(arbeidsavklaringspenger.map { Periode(it.first, it.second) }), + arbeidsavklaringspenger = Arbeidsavklaringspenger(arbeidsavklaringspenger.map { + Periode( + it.first, + it.second + ) + }), dagpenger = Dagpenger(dagpenger.map { Periode(it.first, it.second) }) ).also { if (ugyldigeArbeidsavklaringspengeperioder.isNotEmpty()) sikkerlogg.warn("Arena inneholdt en eller flere AAP-perioder med ugyldig fom/tom for") diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/monitorering/MonitoreringRiver.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/monitorering/MonitoreringRiver.kt index b120111fa6..92df9b8ae4 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/monitorering/MonitoreringRiver.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/monitorering/MonitoreringRiver.kt @@ -1,21 +1,21 @@ package no.nav.helse.spleis.monitorering import com.fasterxml.jackson.databind.JsonNode -import java.time.LocalDateTime import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers.River -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageMetadata +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import io.micrometer.core.instrument.MeterRegistry +import java.time.LocalDateTime import org.slf4j.LoggerFactory import org.slf4j.event.Level internal class MonitoreringRiver( rapidsConnection: RapidsConnection, vararg sjekker: Sjekk -): River.PacketListener { +) : River.PacketListener { private val sjekker = sjekker.toList() init { @@ -28,7 +28,12 @@ internal class MonitoreringRiver( }.register(this) } - override fun onPacket(packet: JsonMessage, context: MessageContext, metadata: MessageMetadata, meterRegistry: MeterRegistry) { + override fun onPacket( + packet: JsonMessage, + context: MessageContext, + metadata: MessageMetadata, + meterRegistry: MeterRegistry + ) { val nå = packet["@opprettet"].asLocalDateTime() val systemParticipatingServices = packet["system_participating_services"] try { @@ -46,12 +51,18 @@ internal class MonitoreringRiver( private companion object { private val sikkerlogg = LoggerFactory.getLogger("tjenestekall") - private fun slackmelding(melding: String, level: Level, systemParticipatingServices: JsonNode): String { - return JsonMessage.newMessage("slackmelding", mapOf( + private fun slackmelding( + melding: String, + level: Level, + systemParticipatingServices: JsonNode + ): String { + return JsonMessage.newMessage( + "slackmelding", mapOf( "melding" to melding, "level" to level, "system_participating_services" to systemParticipatingServices - )).toJson() + ) + ).toJson() } } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/monitorering/Sjekk.kt b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/monitorering/Sjekk.kt index 4ba0731fa6..2d056236dd 100644 --- a/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/monitorering/Sjekk.kt +++ b/sykepenger-mediators/src/main/kotlin/no/nav/helse/spleis/monitorering/Sjekk.kt @@ -9,7 +9,7 @@ internal interface Sjekk { fun skalSjekke(nå: LocalDateTime): Boolean } -internal class RegelmessigAvstemming(private val manglerAvstemming: () -> Int): Sjekk { +internal class RegelmessigAvstemming(private val manglerAvstemming: () -> Int) : Sjekk { override fun sjekk(): Pair? { val mangler = manglerAvstemming() if (mangler == 0) return null @@ -22,4 +22,4 @@ internal class RegelmessigAvstemming(private val manglerAvstemming: () -> Int): } } -fun String.flertallifiser(antall: Int) = if (antall == 1) this else "${this}er" \ No newline at end of file +fun String.flertallifiser(antall: Int) = if (antall == 1) this else "${this}er" diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/DatoerTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/DatoerTest.kt index 4f0fa72483..9f11c4cb1b 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/DatoerTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/DatoerTest.kt @@ -1,8 +1,8 @@ package no.nav.helse +import java.time.LocalDate import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -import java.time.LocalDate internal class DatoerTest { diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/behov/AktivitetsloggBehovTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/behov/AktivitetsloggBehovTest.kt index 7c7ce51e11..754c870461 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/behov/AktivitetsloggBehovTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/behov/AktivitetsloggBehovTest.kt @@ -20,7 +20,7 @@ internal class AktivitetsloggBehovTest { } @Test - fun `kan hente ut behov`(){ + fun `kan hente ut behov`() { val hendelse1 = aktivitetslogg.barn() hendelse1.kontekst(person) val arbeidsgiver1 = TestKontekst("Arbeidsgiver", "Arbeidsgiver 1") @@ -46,7 +46,7 @@ internal class AktivitetsloggBehovTest { private class TestKontekst( private val type: String, private val melding: String - ): Aktivitetskontekst { + ) : Aktivitetskontekst { override fun toSpesifikkKontekst() = SpesifikkKontekst(type, mapOf(type to melding)) } } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/BehovMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/BehovMediatorTest.kt index e5bbea7337..87e058f3fb 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/BehovMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/BehovMediatorTest.kt @@ -37,9 +37,10 @@ class BehovMediatorTest { .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) .registerModule(JavaTimeModule()) - private val eksempelmelding = MigrateMessage(JsonMessage.newMessage("testevent", emptyMap()).also { - it.requireKey("@event_name") - }, Meldingsporing(UUID.randomUUID(), fødselsnummer)) + private val eksempelmelding = + MigrateMessage(JsonMessage.newMessage("testevent", emptyMap()).also { + it.requireKey("@event_name") + }, Meldingsporing(UUID.randomUUID(), fødselsnummer)) } private val messages = mutableListOf>() @@ -78,8 +79,8 @@ class BehovMediatorTest { aktivitetslogg.kontekst(vedtaksperiode1) aktivitetslogg.behov( Sykepengehistorikk, "Trenger sykepengehistorikk", mapOf( - "historikkFom" to LocalDate.now() - ) + "historikkFom" to LocalDate.now() + ) ) aktivitetslogg.behov(Foreldrepenger, "Trenger foreldrepengeytelser") val arbeidsgiver2 = TestKontekst("Arbeidsgiver", "Arbeidsgiver 2") @@ -104,11 +105,17 @@ class BehovMediatorTest { assertDoesNotThrow { UUID.fromString(it["@behovId"].asText()) } assertTrue(it.hasNonNull("@opprettet")) assertDoesNotThrow { LocalDateTime.parse(it["@opprettet"].asText()) } - assertEquals(listOf("Sykepengehistorikk", "Foreldrepenger"), it["@behov"].map(JsonNode::asText)) + assertEquals( + listOf("Sykepengehistorikk", "Foreldrepenger"), + it["@behov"].map(JsonNode::asText) + ) assertEquals("behov", it["@event_name"].asText()) assertEquals("Arbeidsgiver 1", it["Arbeidsgiver"].asText()) assertEquals("Vedtaksperiode 1", it["Vedtaksperiode"].asText()) - assertEquals(LocalDate.now().toString(), it[Sykepengehistorikk.name]["historikkFom"].asText()) + assertEquals( + LocalDate.now().toString(), + it[Sykepengehistorikk.name]["historikkFom"].asText() + ) } objectMapper.readTree(messages[1].second).also { assertEquals("behov", it["@event_name"].asText()) @@ -134,13 +141,13 @@ class BehovMediatorTest { aktivitetslogg.kontekst(vedtaksperiode1) aktivitetslogg.behov( Sykepengehistorikk, "Trenger sykepengehistorikk", mapOf( - "historikkFom" to LocalDate.now() - ) + "historikkFom" to LocalDate.now() + ) ) aktivitetslogg.behov( Foreldrepenger, "Trenger foreldrepengeytelser", mapOf( - "historikkFom" to LocalDate.now() - ) + "historikkFom" to LocalDate.now() + ) ) assertDoesNotThrow { behovMediator.håndter(testRapid, eksempelmelding, aktivitetslogg) } @@ -155,13 +162,13 @@ class BehovMediatorTest { aktivitetslogg.kontekst(vedtaksperiode1) aktivitetslogg.behov( Sykepengehistorikk, "Trenger sykepengehistorikk", mapOf( - "historikkFom" to LocalDate.now().minusDays(1) - ) + "historikkFom" to LocalDate.now().minusDays(1) + ) ) aktivitetslogg.behov( Sykepengehistorikk, "Trenger sykepengehistorikk", mapOf( - "historikkFom" to LocalDate.now().minusDays(1) - ) + "historikkFom" to LocalDate.now().minusDays(1) + ) ) assertDoesNotThrow { behovMediator.håndter(testRapid, eksempelmelding, aktivitetslogg) } @@ -176,16 +183,22 @@ class BehovMediatorTest { aktivitetslogg.kontekst(vedtaksperiode1) aktivitetslogg.behov( Sykepengehistorikk, "Trenger sykepengehistorikk", mapOf( - "historikkFom" to LocalDate.now().minusDays(1) - ) + "historikkFom" to LocalDate.now().minusDays(1) + ) ) aktivitetslogg.behov( Sykepengehistorikk, "Trenger sykepengehistorikk", mapOf( - "historikkFom" to LocalDate.now().minusDays(2) - ) + "historikkFom" to LocalDate.now().minusDays(2) + ) ) - assertThrows { behovMediator.håndter(testRapid, eksempelmelding, aktivitetslogg) } + assertThrows { + behovMediator.håndter( + testRapid, + eksempelmelding, + aktivitetslogg + ) + } } @Test @@ -211,7 +224,13 @@ class BehovMediatorTest { aktivitetslogg.behov(Sykepengehistorikk, "Trenger sykepengehistorikk", mapOf("a" to 1)) aktivitetslogg.behov(Sykepengehistorikk, "Trenger sykepengehistorikk", mapOf("a" to 2)) - assertThrows { behovMediator.håndter(testRapid, eksempelmelding, aktivitetslogg) } + assertThrows { + behovMediator.håndter( + testRapid, + eksempelmelding, + aktivitetslogg + ) + } } private class TestKontekst( diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/Database.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/Database.kt index efac32d627..0559c08c2f 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/Database.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/Database.kt @@ -3,4 +3,5 @@ package no.nav.helse.spleis.mediator import com.github.navikt.tbd_libs.test_support.CleanupStrategy import com.github.navikt.tbd_libs.test_support.DatabaseContainers -val databaseContainer = DatabaseContainers.container("spleis-mediators", CleanupStrategy.tables("person, melding")) \ No newline at end of file +val databaseContainer = + DatabaseContainers.container("spleis-mediators", CleanupStrategy.tables("person, melding")) diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/DatadelingMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/DatadelingMediatorTest.kt index 36ab924d6c..8bad33559a 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/DatadelingMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/DatadelingMediatorTest.kt @@ -25,9 +25,10 @@ internal class DatadelingMediatorTest { private lateinit var aktivitetslogg: Aktivitetslogg private lateinit var datadelingMediator: DatadelingMediator - private val eksempelmelding = MigrateMessage(JsonMessage.newMessage("testevent", emptyMap()).also { - it.requireKey("@event_name") - }, Meldingsporing(UUID.randomUUID(), fødselsnummer)) + private val eksempelmelding = + MigrateMessage(JsonMessage.newMessage("testevent", emptyMap()).also { + it.requireKey("@event_name") + }, Meldingsporing(UUID.randomUUID(), fødselsnummer)) @BeforeEach fun beforeEach() { @@ -67,7 +68,8 @@ internal class DatadelingMediatorTest { aktivitetslogg.funksjonellFeil(RV_VT_1) try { aktivitetslogg.logiskFeil("Dette er en severe") - } catch (_: Exception) {} + } catch (_: Exception) { + } datadelingMediator.ferdigstill(testRapid) assertEquals(1, testRapid.inspektør.antall()) @@ -88,7 +90,10 @@ internal class DatadelingMediatorTest { aktivitetslogg.info("Dette er en infomelding") aktivitetslogg.varsel(RV_SØ_1) aktivitetslogg.funksjonellFeil(RV_VT_1) - try { aktivitetslogg.logiskFeil("Dette er en infomelding") } catch (_: Exception) {} + try { + aktivitetslogg.logiskFeil("Dette er en infomelding") + } catch (_: Exception) { + } datadelingMediator.ferdigstill(testRapid) val info = testRapid.inspektør.siste("aktivitetslogg_ny_aktivitet")["aktiviteter"] @@ -101,7 +106,7 @@ internal class DatadelingMediatorTest { private class TestKontekst( private val type: String, private val melding: String - ): Aktivitetskontekst { + ) : Aktivitetskontekst { override fun toSpesifikkKontekst() = SpesifikkKontekst(type, mapOf(type to melding)) } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/MessageMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/MessageMediatorTest.kt index 08860139aa..2d3a9e76d6 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/MessageMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/MessageMediatorTest.kt @@ -25,13 +25,41 @@ internal class MessageMediatorTest { @Test fun søknader() { - testRapid.sendTestMessage(meldingsfabrikk.lagNySøknad(SoknadsperiodeDTO(LocalDate.now(), LocalDate.now(), 100))) + testRapid.sendTestMessage( + meldingsfabrikk.lagNySøknad( + SoknadsperiodeDTO( + LocalDate.now(), + LocalDate.now(), + 100 + ) + ) + ) assertTrue(hendelseMediator.lestNySøknad) - testRapid.sendTestMessage(meldingsfabrikk.lagSøknadArbeidsgiver(listOf(SoknadsperiodeDTO(LocalDate.now(), LocalDate.now(), 100)))) + testRapid.sendTestMessage( + meldingsfabrikk.lagSøknadArbeidsgiver( + listOf( + SoknadsperiodeDTO( + LocalDate.now(), + LocalDate.now(), + 100 + ) + ) + ) + ) assertTrue(hendelseMediator.lestSendtSøknadArbeidsgiver) - testRapid.sendTestMessage(meldingsfabrikk.lagSøknadNav(perioder = listOf(SoknadsperiodeDTO(LocalDate.now(), LocalDate.now(), 100)))) + testRapid.sendTestMessage( + meldingsfabrikk.lagSøknadNav( + perioder = listOf( + SoknadsperiodeDTO( + LocalDate.now(), + LocalDate.now(), + 100 + ) + ) + ) + ) assertTrue(hendelseMediator.lestSendtSøknad) } @@ -39,9 +67,10 @@ internal class MessageMediatorTest { fun inntektsmeldinger() { testRapid.sendTestMessage( meldingsfabrikk.lagInntektsmelding( - listOf(Periode(LocalDate.now(), LocalDate.now())), - LocalDate.now() - )) + listOf(Periode(LocalDate.now(), LocalDate.now())), + LocalDate.now() + ) + ) assertTrue(hendelseMediator.lestInntektsmelding) } @@ -53,7 +82,12 @@ internal class MessageMediatorTest { @Test fun påminnelser() { - testRapid.sendTestMessage(meldingsfabrikk.lagPåminnelse(UUID.randomUUID(), TilstandType.START)) + testRapid.sendTestMessage( + meldingsfabrikk.lagPåminnelse( + UUID.randomUUID(), + TilstandType.START + ) + ) assertTrue(hendelseMediator.lestPåminnelse) } @@ -77,34 +111,69 @@ internal class MessageMediatorTest { @Test fun utbetalingpåminnelse() { - testRapid.sendTestMessage(meldingsfabrikk.lagUtbetalingpåminnelse(UUID.randomUUID(), Utbetalingstatus.IKKE_UTBETALT)) + testRapid.sendTestMessage( + meldingsfabrikk.lagUtbetalingpåminnelse( + UUID.randomUUID(), + Utbetalingstatus.IKKE_UTBETALT + ) + ) assertTrue(hendelseMediator.lestutbetalingpåminnelse) } @Test fun simuleringer() { - testRapid.sendTestMessage(meldingsfabrikk.lagSimulering(UUID.randomUUID(), TilstandType.START, SimuleringMessage.Simuleringstatus.OK, UUID.randomUUID())) + testRapid.sendTestMessage( + meldingsfabrikk.lagSimulering( + UUID.randomUUID(), + TilstandType.START, + SimuleringMessage.Simuleringstatus.OK, + UUID.randomUUID() + ) + ) assertTrue(hendelseMediator.lestSimulering) { "Skal lese OK simulering" } hendelseMediator.reset() - testRapid.sendTestMessage(meldingsfabrikk.lagSimulering(UUID.randomUUID(), TilstandType.START, SimuleringMessage.Simuleringstatus.FUNKSJONELL_FEIL, UUID.randomUUID())) + testRapid.sendTestMessage( + meldingsfabrikk.lagSimulering( + UUID.randomUUID(), + TilstandType.START, + SimuleringMessage.Simuleringstatus.FUNKSJONELL_FEIL, + UUID.randomUUID() + ) + ) assertTrue(hendelseMediator.lestSimulering) { "Skal lese simulering med feil" } hendelseMediator.reset() - testRapid.sendTestMessage(meldingsfabrikk.lagSimulering(UUID.randomUUID(), TilstandType.START, SimuleringMessage.Simuleringstatus.OPPDRAG_UR_ER_STENGT, UUID.randomUUID())) + testRapid.sendTestMessage( + meldingsfabrikk.lagSimulering( + UUID.randomUUID(), + TilstandType.START, + SimuleringMessage.Simuleringstatus.OPPDRAG_UR_ER_STENGT, + UUID.randomUUID() + ) + ) assertTrue(hendelseMediator.lestSimulering) { "Kan lese simuleringhendelse når Oppdrag/UR er stengt" } hendelseMediator.reset() } @Test fun utbetalingshistorikk() { - testRapid.sendTestMessage(meldingsfabrikk.lagUtbetalingshistorikk(UUID.randomUUID(), TilstandType.START)) + testRapid.sendTestMessage( + meldingsfabrikk.lagUtbetalingshistorikk( + UUID.randomUUID(), + TilstandType.START + ) + ) assertTrue(hendelseMediator.lestUtbetalingshistorikk) } @Test fun `ignorerer gammel utbetalingshistorikk`() { - val message = meldingsfabrikk.lagUtbetalingshistorikk(UUID.randomUUID(), TilstandType.START, besvart = LocalDateTime.now().minusHours(2)) + val message = meldingsfabrikk.lagUtbetalingshistorikk( + UUID.randomUUID(), + TilstandType.START, + besvart = LocalDateTime.now().minusHours(2) + ) testRapid.sendTestMessage(message) assertFalse(hendelseMediator.lestUtbetalingshistorikk) } @@ -121,13 +190,17 @@ internal class MessageMediatorTest { TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning( måned = YearMonth.of(2017, 12), inntekter = listOf( - TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning.Inntekt(32000.0, + TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning.Inntekt( + 32000.0, AbstractEndToEndMediatorTest.ORGNUMMER - )) - )), + ) + ) + ) + ), arbeidsforhold = emptyList(), medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja - )) + ) + ) assertTrue(hendelseMediator.lestVilkårsgrunnlag) } @@ -141,16 +214,17 @@ internal class MessageMediatorTest { fun utbetalingsgodkjenning() { testRapid.sendTestMessage( meldingsfabrikk.lagUtbetalingsgodkjenning( - vedtaksperiodeId = UUID.randomUUID(), - utbetalingId = UUID.randomUUID(), - tilstand = TilstandType.START, - utbetalingGodkjent = true, - saksbehandlerIdent = "en_saksbehandler", - saksbehandlerEpost = "en_saksbehandler@ikke.no", - automatiskBehandling = false, - makstidOppnådd = false, - godkjenttidspunkt = LocalDateTime.now() - )) + vedtaksperiodeId = UUID.randomUUID(), + utbetalingId = UUID.randomUUID(), + tilstand = TilstandType.START, + utbetalingGodkjent = true, + saksbehandlerIdent = "en_saksbehandler", + saksbehandlerEpost = "en_saksbehandler@ikke.no", + automatiskBehandling = false, + makstidOppnådd = false, + godkjenttidspunkt = LocalDateTime.now() + ) + ) assertTrue(hendelseMediator.lestUtbetalingsgodkjenning) } @@ -158,10 +232,11 @@ internal class MessageMediatorTest { fun utbetaling() { testRapid.sendTestMessage( meldingsfabrikk.lagUtbetaling( - fagsystemId = "qwer1234", - utbetalingId = UUID.randomUUID().toString(), - utbetalingOK = true - )) + fagsystemId = "qwer1234", + utbetalingId = UUID.randomUUID().toString(), + utbetalingOK = true + ) + ) assertTrue(hendelseMediator.lestUtbetaling) } @@ -190,7 +265,8 @@ internal class MessageMediatorTest { } private companion object { - private val meldingsfabrikk = TestMessageFactory("12121278911", "orgnr", 31000.0, 12.desember(1912)) + private val meldingsfabrikk = + TestMessageFactory("12121278911", "orgnr", 31000.0, 12.desember(1912)) private val testRapid = TestRapid() private val hendelseMediator = TestHendelseMediator() diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/MonitoreringRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/MonitoreringRiverTest.kt index 5e91fa8a74..1733f06cca 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/MonitoreringRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/MonitoreringRiverTest.kt @@ -27,8 +27,11 @@ internal class MonitoreringRiverTest { val slackMelding = sprute.inspektør.message(0) assertEquals("slackmelding", slackMelding.path("@event_name").asText()) assertEquals("ERROR", slackMelding.path("level").asText()) - assertEquals("\nDet er 2 personer som ikke er avstemt på over en måned!\n\n- Deres erbødig SPleis :bender_dance:", slackMelding.path("melding").asText()) + assertEquals( + "\nDet er 2 personer som ikke er avstemt på over en måned!\n\n- Deres erbødig SPleis :bender_dance:", + slackMelding.path("melding").asText() + ) val systemParticipatingServices = slackMelding.path("system_participating_services").size() assertEquals(2, systemParticipatingServices) } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/TestHendelseMediator.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/TestHendelseMediator.kt index d4839162ab..af2fe43d04 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/TestHendelseMediator.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/TestHendelseMediator.kt @@ -1,7 +1,9 @@ package no.nav.helse.spleis.mediator +import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import no.nav.helse.Personidentifikator import no.nav.helse.hendelser.AnmodningOmForkasting +import no.nav.helse.hendelser.AnnullerUtbetaling import no.nav.helse.hendelser.AvbruttSøknad import no.nav.helse.hendelser.Dødsmelding import no.nav.helse.hendelser.ForkastSykmeldingsperioder @@ -19,19 +21,17 @@ import no.nav.helse.hendelser.PersonPåminnelse import no.nav.helse.hendelser.Påminnelse import no.nav.helse.hendelser.Simulering import no.nav.helse.hendelser.SkjønnsmessigFastsettelse +import no.nav.helse.hendelser.SykepengegrunnlagForArbeidsgiver import no.nav.helse.hendelser.Sykmelding import no.nav.helse.hendelser.Søknad +import no.nav.helse.hendelser.UtbetalingHendelse +import no.nav.helse.hendelser.Utbetalingpåminnelse +import no.nav.helse.hendelser.Utbetalingsgodkjenning import no.nav.helse.hendelser.Utbetalingshistorikk import no.nav.helse.hendelser.UtbetalingshistorikkEtterInfotrygdendring import no.nav.helse.hendelser.UtbetalingshistorikkForFeriepenger import no.nav.helse.hendelser.Vilkårsgrunnlag import no.nav.helse.hendelser.Ytelser -import no.nav.helse.hendelser.AnnullerUtbetaling -import no.nav.helse.hendelser.UtbetalingHendelse -import no.nav.helse.hendelser.Utbetalingpåminnelse -import no.nav.helse.hendelser.Utbetalingsgodkjenning -import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext -import no.nav.helse.hendelser.SykepengegrunnlagForArbeidsgiver import no.nav.helse.spleis.IHendelseMediator import no.nav.helse.spleis.Personopplysninger import no.nav.helse.spleis.meldinger.model.AnmodningOmForkastingMessage @@ -40,8 +40,8 @@ import no.nav.helse.spleis.meldinger.model.AvbruttArbeidsledigSøknadMessage import no.nav.helse.spleis.meldinger.model.AvbruttSøknadMessage import no.nav.helse.spleis.meldinger.model.AvstemmingMessage import no.nav.helse.spleis.meldinger.model.DødsmeldingMessage -import no.nav.helse.spleis.meldinger.model.GrunnbeløpsreguleringMessage import no.nav.helse.spleis.meldinger.model.ForkastSykmeldingsperioderMessage +import no.nav.helse.spleis.meldinger.model.GrunnbeløpsreguleringMessage import no.nav.helse.spleis.meldinger.model.HendelseMessage import no.nav.helse.spleis.meldinger.model.IdentOpphørtMessage import no.nav.helse.spleis.meldinger.model.InfotrygdendringMessage @@ -146,7 +146,8 @@ internal class TestHendelseMediator : IHendelseMediator { private val lestReplayHendelserVerdi = ThreadLocal.withInitial { false } private val lestGrunnbeløpsreguleringVerdi = ThreadLocal.withInitial { false } private val lestInfotrygdendringVerdi = ThreadLocal.withInitial { false } - private val utbetalingshistorikkEtterInfotrygdendringMessageVerdi = ThreadLocal.withInitial { false } + private val utbetalingshistorikkEtterInfotrygdendringMessageVerdi = + ThreadLocal.withInitial { false } private val lestForkastSykmeldingsperioderMessageVerdi = ThreadLocal.withInitial { false } fun reset() { @@ -281,7 +282,12 @@ internal class TestHendelseMediator : IHendelseMediator { lestSendtSøknadVerdi.set(true) } - override fun behandle(personopplysninger: Personopplysninger, message: InntektsmeldingMessage, inntektsmelding: Inntektsmelding, context: MessageContext) { + override fun behandle( + personopplysninger: Personopplysninger, + message: InntektsmeldingMessage, + inntektsmelding: Inntektsmelding, + context: MessageContext + ) { lestInntektsmeldingVerdi.set(true) } @@ -289,9 +295,14 @@ internal class TestHendelseMediator : IHendelseMediator { message: InntektsmeldingerReplayMessage, replays: InntektsmeldingerReplay, context: MessageContext - ) {} + ) { + } - override fun behandle(message: DødsmeldingMessage, dødsmelding: Dødsmelding, context: MessageContext) { + override fun behandle( + message: DødsmeldingMessage, + dødsmelding: Dødsmelding, + context: MessageContext + ) { lestDødsmeldingVerdi.set(true) } @@ -301,17 +312,30 @@ internal class TestHendelseMediator : IHendelseMediator { identOpphørt: IdentOpphørt, gamleIdenter: Set, context: MessageContext - ) {} + ) { + } - override fun behandle(message: UtbetalingpåminnelseMessage, påminnelse: Utbetalingpåminnelse, context: MessageContext) { + override fun behandle( + message: UtbetalingpåminnelseMessage, + påminnelse: Utbetalingpåminnelse, + context: MessageContext + ) { lestutbetalingpåminnelseVerdi.set(true) } - override fun behandle(message: PåminnelseMessage, påminnelse: Påminnelse, context: MessageContext) { + override fun behandle( + message: PåminnelseMessage, + påminnelse: Påminnelse, + context: MessageContext + ) { lestPåminnelseVerdi.set(true) } - override fun behandle(message: PersonPåminnelseMessage, påminnelse: PersonPåminnelse, context: MessageContext) { + override fun behandle( + message: PersonPåminnelseMessage, + påminnelse: PersonPåminnelse, + context: MessageContext + ) { lestPersonpåminnelseVerdi.set(true) } @@ -323,11 +347,19 @@ internal class TestHendelseMediator : IHendelseMediator { lestAnmodningOmForkastingVerdi.set(true) } - override fun behandle(message: UtbetalingshistorikkMessage, utbetalingshistorikk: Utbetalingshistorikk, context: MessageContext) { + override fun behandle( + message: UtbetalingshistorikkMessage, + utbetalingshistorikk: Utbetalingshistorikk, + context: MessageContext + ) { lestUtbetalingshistorikkVerdi.set(true) } - override fun behandle(message: UtbetalingshistorikkForFeriepengerMessage, utbetalingshistorikkForFeriepenger: UtbetalingshistorikkForFeriepenger, context: MessageContext) { + override fun behandle( + message: UtbetalingshistorikkForFeriepengerMessage, + utbetalingshistorikkForFeriepenger: UtbetalingshistorikkForFeriepenger, + context: MessageContext + ) { lestUtbetalingshistorikkForFeriepengerVerdi.set(true) } @@ -335,27 +367,51 @@ internal class TestHendelseMediator : IHendelseMediator { lestYtelserVerdi.set(true) } - override fun behandle(message: VilkårsgrunnlagMessage, vilkårsgrunnlag: Vilkårsgrunnlag, context: MessageContext) { + override fun behandle( + message: VilkårsgrunnlagMessage, + vilkårsgrunnlag: Vilkårsgrunnlag, + context: MessageContext + ) { lestVilkårsgrunnlagVerdi.set(true) } - override fun behandle(message: UtbetalingsgodkjenningMessage, utbetalingsgodkjenning: Utbetalingsgodkjenning, context: MessageContext) { + override fun behandle( + message: UtbetalingsgodkjenningMessage, + utbetalingsgodkjenning: Utbetalingsgodkjenning, + context: MessageContext + ) { lestUtbetalingsgodkjenningVerdi.set(true) } - override fun behandle(message: UtbetalingMessage, utbetaling: UtbetalingHendelse, context: MessageContext) { + override fun behandle( + message: UtbetalingMessage, + utbetaling: UtbetalingHendelse, + context: MessageContext + ) { lestUtbetalingVerdi.set(true) } - override fun behandle(message: SimuleringMessage, simulering: Simulering, context: MessageContext) { + override fun behandle( + message: SimuleringMessage, + simulering: Simulering, + context: MessageContext + ) { lestSimuleringVerdi.set(true) } - override fun behandle(message: AnnulleringMessage, annullerUtbetaling: AnnullerUtbetaling, context: MessageContext) { + override fun behandle( + message: AnnulleringMessage, + annullerUtbetaling: AnnullerUtbetaling, + context: MessageContext + ) { lestAnnullerUtbetalingVerdi.set(true) } - override fun behandle(message: AvstemmingMessage, personidentifikator: Personidentifikator, context: MessageContext) { + override fun behandle( + message: AvstemmingMessage, + personidentifikator: Personidentifikator, + context: MessageContext + ) { lestAvstemmingVerdi.set(true) } @@ -363,19 +419,35 @@ internal class TestHendelseMediator : IHendelseMediator { lestMigrateVerdi.set(true) } - override fun behandle(message: OverstyrTidslinjeMessage, overstyrTidslinje: OverstyrTidslinje, context: MessageContext) { + override fun behandle( + message: OverstyrTidslinjeMessage, + overstyrTidslinje: OverstyrTidslinje, + context: MessageContext + ) { lestOverstyrTidslinjeVerdi.set(true) } - override fun behandle(message: OverstyrArbeidsgiveropplysningerMessage, overstyrArbeidsgiveropplysninger: OverstyrArbeidsgiveropplysninger, context: MessageContext) { + override fun behandle( + message: OverstyrArbeidsgiveropplysningerMessage, + overstyrArbeidsgiveropplysninger: OverstyrArbeidsgiveropplysninger, + context: MessageContext + ) { lestOverstyrArbeidsgiveropplysningserVerdi.set(true) } - override fun behandle(message: OverstyrArbeidsforholdMessage, overstyrArbeidsforhold: OverstyrArbeidsforhold, context: MessageContext) { + override fun behandle( + message: OverstyrArbeidsforholdMessage, + overstyrArbeidsforhold: OverstyrArbeidsforhold, + context: MessageContext + ) { lestOverstyrArbeidsforholdVerdi.set(true) } - override fun behandle(message: GrunnbeløpsreguleringMessage, grunnbeløpsregulering: Grunnbeløpsregulering, context: MessageContext) { + override fun behandle( + message: GrunnbeløpsreguleringMessage, + grunnbeløpsregulering: Grunnbeløpsregulering, + context: MessageContext + ) { lestGrunnbeløpsreguleringVerdi.set(true) } @@ -407,23 +479,27 @@ internal class TestHendelseMediator : IHendelseMediator { avbruttSøknadMessage: AvbruttSøknadMessage, avbruttSøknad: AvbruttSøknad, context: MessageContext - ) {} + ) { + } override fun behandle( avbruttArbeidsledigSøknadMessage: AvbruttArbeidsledigSøknadMessage, avbruttSøknad: AvbruttSøknad, context: MessageContext - ) {} + ) { + } override fun behandle( message: SkjønnsmessigFastsettelseMessage, skjønnsmessigFastsettelse: SkjønnsmessigFastsettelse, context: MessageContext - ) {} + ) { + } override fun behandle( message: MinimumSykdomsgradVurdertMessage, minimumSykdomsgradsvurdering: MinimumSykdomsgradsvurderingMelding, context: MessageContext - ) {} + ) { + } } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/TestMessageFactory.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/TestMessageFactory.kt index 46b71fb6b4..209f5219fb 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/TestMessageFactory.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/TestMessageFactory.kt @@ -51,11 +51,15 @@ internal class TestMessageFactory( .registerModule(JavaTimeModule()) .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - private fun SykepengesoknadDTO.toMapMedFelterFraSpedisjon(fødselsdato: LocalDate, historiskeFolkeregisteridenter: List): Map = + private fun SykepengesoknadDTO.toMapMedFelterFraSpedisjon( + fødselsdato: LocalDate, + historiskeFolkeregisteridenter: List + ): Map = objectMapper .convertValue>(this) .plus("fødselsdato" to "$fødselsdato") .plus("historiskeFolkeregisteridenter" to historiskeFolkeregisteridenter) + private fun Inntektsmelding.toMapMedFelterFraSpedisjon(fødselsdato: LocalDate): Map = objectMapper .convertValue>(this) @@ -87,7 +91,10 @@ internal class TestMessageFactory( opprettet = opprettet, sykmeldingSkrevet = fom.atStartOfDay() ) - return nyHendelse("ny_søknad", nySøknad.toMapMedFelterFraSpedisjon(fødselsdato, historiskeFolkeregisteridenter)) + return nyHendelse( + "ny_søknad", + nySøknad.toMapMedFelterFraSpedisjon(fødselsdato, historiskeFolkeregisteridenter) + ) } fun lagNySøknadFrilanser( @@ -115,8 +122,12 @@ internal class TestMessageFactory( opprettet = opprettet, sykmeldingSkrevet = fom.atStartOfDay() ) - return nyHendelse("ny_søknad_frilans", nySøknad.toMapMedFelterFraSpedisjon(fødselsdato, - historiskeFolkeregisteridenter)) + return nyHendelse( + "ny_søknad_frilans", nySøknad.toMapMedFelterFraSpedisjon( + fødselsdato, + historiskeFolkeregisteridenter + ) + ) } fun lagNySøknadSelvstendig( @@ -144,9 +155,14 @@ internal class TestMessageFactory( opprettet = opprettet, sykmeldingSkrevet = fom.atStartOfDay() ) - return nyHendelse("ny_søknad_selvstendig", nySøknad.toMapMedFelterFraSpedisjon(fødselsdato, - historiskeFolkeregisteridenter)) + return nyHendelse( + "ny_søknad_selvstendig", nySøknad.toMapMedFelterFraSpedisjon( + fødselsdato, + historiskeFolkeregisteridenter + ) + ) } + fun lagNySøknadArbeidsledig( vararg perioder: SoknadsperiodeDTO, opprettet: LocalDateTime = perioder.minOfOrNull { it.fom!! }!!.atStartOfDay(), @@ -174,8 +190,12 @@ internal class TestMessageFactory( opprettet = opprettet, sykmeldingSkrevet = fom.atStartOfDay() ) - return nyHendelse("ny_søknad_arbeidsledig", nySøknad.toMapMedFelterFraSpedisjon(fødselsdato, - historiskeFolkeregisteridenter)) + return nyHendelse( + "ny_søknad_arbeidsledig", nySøknad.toMapMedFelterFraSpedisjon( + fødselsdato, + historiskeFolkeregisteridenter + ) + ) } fun lagSøknadArbeidsgiver( @@ -200,8 +220,12 @@ internal class TestMessageFactory( opprettet = LocalDateTime.now(), sykmeldingSkrevet = fom.atStartOfDay() ) - return nyHendelse("sendt_søknad_arbeidsgiver", sendtSøknad.toMapMedFelterFraSpedisjon(fødselsdato, - historiskeFolkeregisteridenter)) + return nyHendelse( + "sendt_søknad_arbeidsgiver", sendtSøknad.toMapMedFelterFraSpedisjon( + fødselsdato, + historiskeFolkeregisteridenter + ) + ) } fun lagSøknadNav( @@ -248,8 +272,12 @@ internal class TestMessageFactory( egenmeldingsdagerFraSykmelding = egenmeldingerFraSykmelding, inntektFraNyttArbeidsforhold = inntektFraNyttArbeidsforhold ) - return nyHendelse("sendt_søknad_nav", sendtSøknad.toMapMedFelterFraSpedisjon(fødselsdato, - historiskeFolkeregisteridenter)) + return nyHendelse( + "sendt_søknad_nav", sendtSøknad.toMapMedFelterFraSpedisjon( + fødselsdato, + historiskeFolkeregisteridenter + ) + ) } private fun lagSpørsmål(ikkeJobbetIDetSisteFraAnnetArbeidsforhold: Boolean): List? { @@ -312,8 +340,12 @@ internal class TestMessageFactory( sendTilGosys = sendTilGosys, egenmeldingsdagerFraSykmelding = egenmeldingerFraSykmelding ) - return nyHendelse("sendt_søknad_frilans", sendtSøknad.toMapMedFelterFraSpedisjon(fødselsdato, - historiskeFolkeregisteridenter)) + return nyHendelse( + "sendt_søknad_frilans", sendtSøknad.toMapMedFelterFraSpedisjon( + fødselsdato, + historiskeFolkeregisteridenter + ) + ) } fun lagSøknadSelvstendig( @@ -356,8 +388,12 @@ internal class TestMessageFactory( sendTilGosys = sendTilGosys, egenmeldingsdagerFraSykmelding = egenmeldingerFraSykmelding ) - return nyHendelse("sendt_søknad_selvstendig", sendtSøknad.toMapMedFelterFraSpedisjon(fødselsdato, - historiskeFolkeregisteridenter)) + return nyHendelse( + "sendt_søknad_selvstendig", sendtSøknad.toMapMedFelterFraSpedisjon( + fødselsdato, + historiskeFolkeregisteridenter + ) + ) } fun lagSøknadArbeidsledig( @@ -402,8 +438,12 @@ internal class TestMessageFactory( sendTilGosys = sendTilGosys, egenmeldingsdagerFraSykmelding = egenmeldingerFraSykmelding ) - return nyHendelse("sendt_søknad_arbeidsledig", sendtSøknad.toMapMedFelterFraSpedisjon(fødselsdato, - historiskeFolkeregisteridenter)) + return nyHendelse( + "sendt_søknad_arbeidsledig", sendtSøknad.toMapMedFelterFraSpedisjon( + fødselsdato, + historiskeFolkeregisteridenter + ) + ) } private fun lagInntektsmelding( @@ -453,15 +493,15 @@ internal class TestMessageFactory( avsenderSystem: AvsenderSystem = AvsenderSystem("LPS", "V1.0") ) = nyHendelse( "inntektsmelding", lagInntektsmelding( - arbeidsgiverperiode, - førsteFraværsdag, - opphørAvNaturalytelser, - beregnetInntekt, - orgnummer, - opphørsdatoForRefusjon, - begrunnelseForReduksjonEllerIkkeUtbetalt, - avsenderSystem - ).toMapMedFelterFraSpedisjon(fødselsdato) + arbeidsgiverperiode, + førsteFraværsdag, + opphørAvNaturalytelser, + beregnetInntekt, + orgnummer, + opphørsdatoForRefusjon, + begrunnelseForReduksjonEllerIkkeUtbetalt, + avsenderSystem + ).toMapMedFelterFraSpedisjon(fødselsdato) ) fun lagInntektsmeldingReplay( @@ -494,12 +534,13 @@ internal class TestMessageFactory( fun lagUtbetalingshistorikkEtterInfotrygdendring(sykepengehistorikk: List = emptyList()): Pair { return nyHendelse( "behov", mutableMapOf( - "@behov" to listOf("Sykepengehistorikk"), - "fødselsnummer" to fødselsnummer, - "@løsning" to sykepengehistorikk.toJson(), - "@final" to true, - "@besvart" to LocalDateTime.now() - )) + "@behov" to listOf("Sykepengehistorikk"), + "fødselsnummer" to fødselsnummer, + "@løsning" to sykepengehistorikk.toJson(), + "@final" to true, + "@besvart" to LocalDateTime.now() + ) + ) } fun lagUtbetalingshistorikkForFeriepenger(testdata: UtbetalingshistorikkForFeriepengerTestdata) = @@ -864,7 +905,8 @@ internal class TestMessageFactory( ekstraFelter = mapOf( "InntekterForSykepengegrunnlagForArbeidsgiver" to mapOf( "skjæringstidspunkt" to skjæringstidspunkt - )) + ) + ) ) } @@ -1091,17 +1133,20 @@ internal class TestMessageFactory( ) } - fun lagUtbetalingpåminnelse(utbetalingId: UUID, status: Utbetalingstatus): Pair { + fun lagUtbetalingpåminnelse( + utbetalingId: UUID, + status: Utbetalingstatus + ): Pair { return nyHendelse( "utbetalingpåminnelse", mapOf( - "fødselsnummer" to fødselsnummer, - "organisasjonsnummer" to organisasjonsnummer, - "utbetalingId" to utbetalingId, - "status" to status.name, - "antallGangerPåminnet" to 0, - "endringstidspunkt" to LocalDateTime.now(), - "påminnelsestidspunkt" to LocalDateTime.now() - ) + "fødselsnummer" to fødselsnummer, + "organisasjonsnummer" to organisasjonsnummer, + "utbetalingId" to utbetalingId, + "status" to status.name, + "antallGangerPåminnet" to 0, + "endringstidspunkt" to LocalDateTime.now(), + "påminnelsestidspunkt" to LocalDateTime.now() + ) ) } @@ -1113,15 +1158,15 @@ internal class TestMessageFactory( ): Pair { return nyHendelse( "påminnelse", mapOf( - "fødselsnummer" to fødselsnummer, - "organisasjonsnummer" to orgnummer, - "vedtaksperiodeId" to vedtaksperiodeId, - "tilstand" to tilstand.name, - "antallGangerPåminnet" to 0, - "tilstandsendringstidspunkt" to tilstandsendringstidspunkt, - "påminnelsestidspunkt" to LocalDateTime.now(), - "nestePåminnelsestidspunkt" to LocalDateTime.now() - ) + "fødselsnummer" to fødselsnummer, + "organisasjonsnummer" to orgnummer, + "vedtaksperiodeId" to vedtaksperiodeId, + "tilstand" to tilstand.name, + "antallGangerPåminnet" to 0, + "tilstandsendringstidspunkt" to tilstandsendringstidspunkt, + "påminnelsestidspunkt" to LocalDateTime.now(), + "nestePåminnelsestidspunkt" to LocalDateTime.now() + ) ) } @@ -1132,11 +1177,11 @@ internal class TestMessageFactory( ): Pair { return nyHendelse( "forkast_sykmeldingsperioder", mapOf( - "fødselsnummer" to fødselsnummer, - "organisasjonsnummer" to orgnummer, - "fom" to fom.toString(), - "tom" to tom.toString() - ) + "fødselsnummer" to fødselsnummer, + "organisasjonsnummer" to orgnummer, + "fom" to fom.toString(), + "tom" to tom.toString() + ) ) } @@ -1144,27 +1189,27 @@ internal class TestMessageFactory( fun lagDødsmelding(dødsdato: LocalDate): Pair { return nyHendelse( "dødsmelding", mapOf( - "fødselsnummer" to fødselsnummer, - "dødsdato" to "$dødsdato" - ) + "fødselsnummer" to fødselsnummer, + "dødsdato" to "$dødsdato" + ) ) } fun lagPersonPåminnelse(): Pair { return nyHendelse( "person_påminnelse", mapOf( - "fødselsnummer" to fødselsnummer - ) + "fødselsnummer" to fødselsnummer + ) ) } fun lagAnmodningOmForkasting(vedtaksperiodeId: UUID = UUID.randomUUID()): Pair { return nyHendelse( "anmodning_om_forkasting", mapOf( - "fødselsnummer" to fødselsnummer, - "organisasjonsnummer" to organisasjonsnummer, - "vedtaksperiodeId" to vedtaksperiodeId - ) + "fødselsnummer" to fødselsnummer, + "organisasjonsnummer" to organisasjonsnummer, + "vedtaksperiodeId" to vedtaksperiodeId + ) ) } @@ -1197,44 +1242,44 @@ internal class TestMessageFactory( fun lagAnnullering(utbetalingId: String): Pair { return nyHendelse( "annullering", mapOf( - "fødselsnummer" to fødselsnummer, - "organisasjonsnummer" to organisasjonsnummer, - "utbetalingId" to utbetalingId, - "saksbehandler" to mapOf( - "navn" to "Siri Saksbhandler", - "epostaddresse" to "siri.saksbehandler@nav.no", - "oid" to "${UUID.randomUUID()}", - "ident" to "S1234567", - ) + "fødselsnummer" to fødselsnummer, + "organisasjonsnummer" to organisasjonsnummer, + "utbetalingId" to utbetalingId, + "saksbehandler" to mapOf( + "navn" to "Siri Saksbhandler", + "epostaddresse" to "siri.saksbehandler@nav.no", + "oid" to "${UUID.randomUUID()}", + "ident" to "S1234567", ) ) + ) } fun lagAvstemming() = nyHendelse( "person_avstemming", mapOf( - "fødselsnummer" to fødselsnummer, - ) + "fødselsnummer" to fødselsnummer, + ) ) fun lagMigrate() = nyHendelse( "json_migrate", mapOf( - "fødselsnummer" to fødselsnummer, - ) + "fødselsnummer" to fødselsnummer, + ) ) fun lagOverstyringTidslinje(dager: List): Pair { return nyHendelse( "overstyr_tidslinje", mutableMapOf( - "fødselsnummer" to fødselsnummer, - "organisasjonsnummer" to organisasjonsnummer, - "dager" to dager.map { - mapOf( - "dato" to it.dato, - "type" to it.type, - "grad" to it.grad - ) - } - )) + "fødselsnummer" to fødselsnummer, + "organisasjonsnummer" to organisasjonsnummer, + "dager" to dager.map { + mapOf( + "dato" to it.dato, + "type" to it.type, + "grad" to it.grad + ) + } + )) } @@ -1244,18 +1289,18 @@ internal class TestMessageFactory( ): Pair { return nyHendelse( "overstyr_arbeidsforhold", mutableMapOf( - "fødselsnummer" to fødselsnummer, - "skjæringstidspunkt" to skjæringstidspunkt, - "overstyrteArbeidsforhold" to overstyrteArbeidsforhold.map { - mutableMapOf( - "orgnummer" to it.orgnummer, - "deaktivert" to it.deaktivert - ).apply { - it.forklaring?.let { forklaring -> - this["forklaring"] = forklaring - } + "fødselsnummer" to fødselsnummer, + "skjæringstidspunkt" to skjæringstidspunkt, + "overstyrteArbeidsforhold" to overstyrteArbeidsforhold.map { + mutableMapOf( + "orgnummer" to it.orgnummer, + "deaktivert" to it.deaktivert + ).apply { + it.forklaring?.let { forklaring -> + this["forklaring"] = forklaring } - }) + } + }) ) } @@ -1264,21 +1309,21 @@ internal class TestMessageFactory( arbeidsgiveropplysninger: List ) = nyHendelse( "overstyr_inntekt_og_refusjon", mutableMapOf( - "fødselsnummer" to fødselsnummer, - "skjæringstidspunkt" to skjæringstidspunkt, - "arbeidsgivere" to arbeidsgiveropplysninger.map { arbeidgiver -> - mutableMapOf( - "organisasjonsnummer" to arbeidgiver.organisasjonsnummer, - "månedligInntekt" to arbeidgiver.månedligInntekt, - "forklaring" to arbeidgiver.forklaring, - "refusjonsopplysninger" to arbeidgiver.refusjonsopplysninger?.map { it.toMap } - ).apply { - arbeidgiver.subsumsjon?.let { - this["subsumsjon"] = it.toMap - } + "fødselsnummer" to fødselsnummer, + "skjæringstidspunkt" to skjæringstidspunkt, + "arbeidsgivere" to arbeidsgiveropplysninger.map { arbeidgiver -> + mutableMapOf( + "organisasjonsnummer" to arbeidgiver.organisasjonsnummer, + "månedligInntekt" to arbeidgiver.månedligInntekt, + "forklaring" to arbeidgiver.forklaring, + "refusjonsopplysninger" to arbeidgiver.refusjonsopplysninger?.map { it.toMap } + ).apply { + arbeidgiver.subsumsjon?.let { + this["subsumsjon"] = it.toMap } } - ) + } + ) ) fun lagMinimumSykdomsgradVurdert( @@ -1286,20 +1331,20 @@ internal class TestMessageFactory( perioderMedMinimumSykdomsgradVurdertIkkeOK: List> ) = nyHendelse( "minimum_sykdomsgrad_vurdert", mutableMapOf( - "fødselsnummer" to fødselsnummer, - "perioderMedMinimumSykdomsgradVurdertOk" to perioderMedMinimumSykdomsgradVurdertOK.map { - mutableMapOf( - "fom" to it.first, - "tom" to it.second - ) - }, - "perioderMedMinimumSykdomsgradVurdertIkkeOk" to perioderMedMinimumSykdomsgradVurdertIkkeOK.map { - mutableMapOf( - "fom" to it.first, - "tom" to it.second - ) - } - ) + "fødselsnummer" to fødselsnummer, + "perioderMedMinimumSykdomsgradVurdertOk" to perioderMedMinimumSykdomsgradVurdertOK.map { + mutableMapOf( + "fom" to it.first, + "tom" to it.second + ) + }, + "perioderMedMinimumSykdomsgradVurdertIkkeOk" to perioderMedMinimumSykdomsgradVurdertIkkeOK.map { + mutableMapOf( + "fom" to it.first, + "tom" to it.second + ) + } + ) ) fun lagSkjønnsmessigFastsettelse( @@ -1307,22 +1352,22 @@ internal class TestMessageFactory( skjønnsmessigFastsatt: List ) = nyHendelse( "skjønnsmessig_fastsettelse", mutableMapOf( - "fødselsnummer" to fødselsnummer, - "skjæringstidspunkt" to skjæringstidspunkt, - "arbeidsgivere" to skjønnsmessigFastsatt.map { arbeidgiver -> - mutableMapOf( - "organisasjonsnummer" to arbeidgiver.organisasjonsnummer, - "årlig" to arbeidgiver.årlig - ) - } - ) + "fødselsnummer" to fødselsnummer, + "skjæringstidspunkt" to skjæringstidspunkt, + "arbeidsgivere" to skjønnsmessigFastsatt.map { arbeidgiver -> + mutableMapOf( + "organisasjonsnummer" to arbeidgiver.organisasjonsnummer, + "årlig" to arbeidgiver.årlig + ) + } + ) ) internal fun lagInfotrygdendringer(endringsmeldingId: String = "1234567") = nyHendelse( "infotrygdendring", mutableMapOf( - "fødselsnummer" to fødselsnummer, - "endringsmeldingId" to endringsmeldingId - ) + "fødselsnummer" to fødselsnummer, + "endringsmeldingId" to endringsmeldingId + ) ) @@ -1339,19 +1384,20 @@ internal class TestMessageFactory( besvart: LocalDateTime = LocalDateTime.now() ) = nyHendelse( "behov", ekstraFelter + mutableMapOf( - "@behov" to behov, - "fødselsnummer" to fødselsnummer, - "organisasjonsnummer" to orgnummer, - "@løsning" to løsninger, - "@final" to true, - "@besvart" to besvart - ).apply { - tilstand?.let { this["tilstand"] = it.name } - vedtaksperiodeId?.let { this["vedtaksperiodeId"] = vedtaksperiodeId.toString() } - } + "@behov" to behov, + "fødselsnummer" to fødselsnummer, + "organisasjonsnummer" to orgnummer, + "@løsning" to løsninger, + "@final" to true, + "@besvart" to besvart + ).apply { + tilstand?.let { this["tilstand"] = it.name } + vedtaksperiodeId?.let { this["vedtaksperiodeId"] = vedtaksperiodeId.toString() } + } ) - fun lagIdentOpphørt(fnr: String, nyttFnr: String) = nyHendelse("ident_opphørt", mapOf( + fun lagIdentOpphørt(fnr: String, nyttFnr: String) = nyHendelse( + "ident_opphørt", mapOf( "fødselsnummer" to fnr, "nye_identer" to mapOf( "fødselsnummer" to nyttFnr, @@ -1361,5 +1407,6 @@ internal class TestMessageFactory( "gamle_identer" to listOf( mapOf("ident" to fnr, "type" to "FØDSELSNUMMER") ) - )) + ) + ) } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/VarseloppsamlerTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/VarseloppsamlerTest.kt index b14f98c463..b5ff9833d8 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/VarseloppsamlerTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/VarseloppsamlerTest.kt @@ -19,7 +19,10 @@ internal class VarseloppsamlerTest { fun `Samler opp varsler fra aktivitetslogg_ny_aktivitet`() { val varsel1 = UUID.randomUUID() val varsel2 = UUID.randomUUID() - val varsler = listOf(aktivietsloggNyAktivitet(varsel1, RV_IM_4), aktivietsloggNyAktivitet(varsel2, RV_IM_3)).varsler + val varsler = listOf( + aktivietsloggNyAktivitet(varsel1, RV_IM_4), + aktivietsloggNyAktivitet(varsel2, RV_IM_3) + ).varsler val forventetVarsel1 = Varsel( id = varsel1, @@ -45,8 +48,14 @@ internal class VarseloppsamlerTest { ) assertEquals(listOf(forventetVarsel1, forventetVarsel2), varsler) - assertEquals(forventetVarsel1, varsler.finn(UUID.fromString("fa51fb29-c9ca-4def-95fd-d93b0d8e5e0d"), RV_IM_4)) - assertEquals(forventetVarsel2, varsler.finn(UUID.fromString("fa51fb29-c9ca-4def-95fd-d93b0d8e5e0d"), RV_IM_3)) + assertEquals( + forventetVarsel1, + varsler.finn(UUID.fromString("fa51fb29-c9ca-4def-95fd-d93b0d8e5e0d"), RV_IM_4) + ) + assertEquals( + forventetVarsel2, + varsler.finn(UUID.fromString("fa51fb29-c9ca-4def-95fd-d93b0d8e5e0d"), RV_IM_3) + ) } internal companion object { @@ -54,11 +63,13 @@ internal class VarseloppsamlerTest { internal data class Varsel( private val id: UUID, private val varselkode: Varselkode, - private val kontekster: Map) { + private val kontekster: Map + ) { internal companion object { internal val List.unike get() = distinctBy { it.id } internal fun List.finn(vedtaksperiodeId: UUID, varselkode: Varselkode) = firstOrNull { it.kontekster.any { (key, value) -> key == "vedtaksperiodeId" && value == "$vedtaksperiodeId" } && it.varselkode == varselkode } + internal fun List.finn(vedtaksperiodeId: UUID) = filter { it.kontekster.any { (key, value) -> key == "vedtaksperiodeId" && value == "$vedtaksperiodeId" } } } @@ -66,17 +77,20 @@ internal class VarseloppsamlerTest { internal val List.varsler get() = flatMap { it.varsler }.unike - private val JsonNode.varsler get() = path("aktiviteter") - .filter { aktivitet -> aktivitet.path("nivå").asText() == "VARSEL" } - .map { varsel -> - val id = UUID.fromString(varsel.path("id").asText()) - val varselkode = Varselkode.valueOf(varsel.path("varselkode").asText()) - val kontekster = varsel.path("kontekster") - .map { it.path("kontekstmap") as ObjectNode } - .flatMap { kontekstmap -> kontekstmap.properties().map { it.key to it.value.asText() } } - .toMap() - Varsel(id, varselkode, kontekster) - } + private val JsonNode.varsler + get() = path("aktiviteter") + .filter { aktivitet -> aktivitet.path("nivå").asText() == "VARSEL" } + .map { varsel -> + val id = UUID.fromString(varsel.path("id").asText()) + val varselkode = Varselkode.valueOf(varsel.path("varselkode").asText()) + val kontekster = varsel.path("kontekster") + .map { it.path("kontekstmap") as ObjectNode } + .flatMap { kontekstmap -> + kontekstmap.properties().map { it.key to it.value.asText() } + } + .toMap() + Varsel(id, varselkode, kontekster) + } @Language("JSON") private val aktivitetsloggNyAktivitetTemplate = """ @@ -145,4 +159,4 @@ internal class VarseloppsamlerTest { jacksonObjectMapper().readTree(it) } } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/db/HendelseRepositoryTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/db/HendelseRepositoryTest.kt index 9f32284a1c..b868f28c73 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/db/HendelseRepositoryTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/db/HendelseRepositoryTest.kt @@ -20,6 +20,7 @@ import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test private val fnr = Personidentifikator("01011012345") + internal class HendelseRepositoryTest { private lateinit var dataSource: TestDataSource @@ -27,6 +28,7 @@ internal class HendelseRepositoryTest { internal fun setup() { dataSource = databaseContainer.nyTilkobling() } + @AfterEach internal fun tearDown() { databaseContainer.droppTilkobling(dataSource) @@ -74,10 +76,16 @@ private object TestMessages { """ val packet = json.somPacket { packet -> - packet.requireKey("@id", "@event_name", "@opprettet", "fødselsnummer", "skjæringstidspunkt") + packet.requireKey( + "@id", + "@event_name", + "@opprettet", + "fødselsnummer", + "skjæringstidspunkt" + ) packet.requireArbeidsgiveropplysninger() } return OverstyrArbeidsgiveropplysningerMessage(packet, Meldingsporing(id, fnr.toString())) } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AbstractEndToEndMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AbstractEndToEndMediatorTest.kt index 6b14745bdc..d7968cb46a 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AbstractEndToEndMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AbstractEndToEndMediatorTest.kt @@ -89,7 +89,8 @@ internal abstract class AbstractEndToEndMediatorTest() { private val objectMapper = jacksonObjectMapper().registerModule(JavaTimeModule()) } - protected val meldingsfabrikk = TestMessageFactory(UNG_PERSON_FNR_2018, ORGNUMMER, INNTEKT, UNG_PERSON_FØDSELSDATO) + protected val meldingsfabrikk = + TestMessageFactory(UNG_PERSON_FNR_2018, ORGNUMMER, INNTEKT, UNG_PERSON_FØDSELSDATO) protected lateinit var testRapid: TestRapid private lateinit var hendelseMediator: HendelseMediator private lateinit var messageMediator: MessageMediator @@ -136,8 +137,13 @@ internal abstract class AbstractEndToEndMediatorTest() { protected fun antallPersoner() = sessionOf(dataSource.ds).use { it.run(queryOf("SELECT COUNT(1) FROM person").map { it.long(1) }.asSingle) ?: 0 } + protected fun antallPersonalias(fnr: String? = null) = sessionOf(dataSource.ds).use { - it.run(queryOf("SELECT COUNT(1) FROM person_alias ${fnr?.let { "WHERE fnr=${fnr.toLong()}" } ?: "" }").map { it.long(1) }.asSingle) ?: 0 + it.run(queryOf("SELECT COUNT(1) FROM person_alias ${fnr?.let { "WHERE fnr=${fnr.toLong()}" } ?: ""}").map { + it.long( + 1 + ) + }.asSingle) ?: 0 } protected fun sendNySøknad( @@ -146,7 +152,12 @@ internal abstract class AbstractEndToEndMediatorTest() { orgnummer: String = ORGNUMMER, fnr: String = UNG_PERSON_FNR_2018 ): UUID { - val (id, message) = meldingsfabrikk.lagNySøknad(*perioder, opprettet = meldingOpprettet, orgnummer = orgnummer, fnr = fnr) + val (id, message) = meldingsfabrikk.lagNySøknad( + *perioder, + opprettet = meldingOpprettet, + orgnummer = orgnummer, + fnr = fnr + ) testRapid.sendTestMessage(message) return id.toUUID() } @@ -156,7 +167,11 @@ internal abstract class AbstractEndToEndMediatorTest() { meldingOpprettet: LocalDateTime = perioder.minOfOrNull { it.fom!! }!!.atStartOfDay(), fnr: String = UNG_PERSON_FNR_2018 ): UUID { - val (id, message) = meldingsfabrikk.lagNySøknadFrilanser(*perioder, opprettet = meldingOpprettet, fnr = fnr) + val (id, message) = meldingsfabrikk.lagNySøknadFrilanser( + *perioder, + opprettet = meldingOpprettet, + fnr = fnr + ) testRapid.sendTestMessage(message) return id.toUUID() } @@ -166,7 +181,11 @@ internal abstract class AbstractEndToEndMediatorTest() { meldingOpprettet: LocalDateTime = perioder.minOfOrNull { it.fom!! }!!.atStartOfDay(), fnr: String = UNG_PERSON_FNR_2018 ): UUID { - val (id, message) = meldingsfabrikk.lagNySøknadSelvstendig(*perioder, opprettet = meldingOpprettet, fnr = fnr) + val (id, message) = meldingsfabrikk.lagNySøknadSelvstendig( + *perioder, + opprettet = meldingOpprettet, + fnr = fnr + ) testRapid.sendTestMessage(message) return id.toUUID() } @@ -177,7 +196,12 @@ internal abstract class AbstractEndToEndMediatorTest() { fnr: String = UNG_PERSON_FNR_2018, tidligereArbeidsgiverOrgnummer: String? = null ): UUID { - val (id, message) = meldingsfabrikk.lagNySøknadArbeidsledig(*perioder, opprettet = meldingOpprettet, fnr = fnr, tidligereArbeidsgiverOrgnummer = tidligereArbeidsgiverOrgnummer) + val (id, message) = meldingsfabrikk.lagNySøknadArbeidsledig( + *perioder, + opprettet = meldingOpprettet, + fnr = fnr, + tidligereArbeidsgiverOrgnummer = tidligereArbeidsgiverOrgnummer + ) testRapid.sendTestMessage(message) return id.toUUID() } @@ -257,6 +281,7 @@ internal abstract class AbstractEndToEndMediatorTest() { } return id.toUUID() } + protected fun sendArbeidsledigsøknad( fnr: String = UNG_PERSON_FNR_2018, perioder: List, @@ -382,7 +407,10 @@ internal abstract class AbstractEndToEndMediatorTest() { } } - protected fun sendNyUtbetalingpåminnelse(utbetalingIndeks: Int, status: Utbetalingstatus = Utbetalingstatus.IKKE_UTBETALT) { + protected fun sendNyUtbetalingpåminnelse( + utbetalingIndeks: Int, + status: Utbetalingstatus = Utbetalingstatus.IKKE_UTBETALT + ) { val utbetalingId = testRapid.inspektør.utbetalingId(utbetalingIndeks) val (_, message) = meldingsfabrikk.lagUtbetalingpåminnelse(utbetalingId, status) testRapid.sendTestMessage(message) @@ -394,8 +422,16 @@ internal abstract class AbstractEndToEndMediatorTest() { orgnummer: String = ORGNUMMER, tilstandsendringstidspunkt: LocalDateTime = LocalDateTime.now() ): UUID { - val vedtaksperiodeId = if (vedtaksperiodeIndeks == -1) UUID.randomUUID() else testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks) - val (_, message) = meldingsfabrikk.lagPåminnelse(vedtaksperiodeId, tilstandType, orgnummer, tilstandsendringstidspunkt) + val vedtaksperiodeId = + if (vedtaksperiodeIndeks == -1) UUID.randomUUID() else testRapid.inspektør.vedtaksperiodeId( + vedtaksperiodeIndeks + ) + val (_, message) = meldingsfabrikk.lagPåminnelse( + vedtaksperiodeId, + tilstandType, + orgnummer, + tilstandsendringstidspunkt + ) testRapid.sendTestMessage(message) return vedtaksperiodeId } @@ -414,8 +450,13 @@ internal abstract class AbstractEndToEndMediatorTest() { val (_, message) = meldingsfabrikk.lagUtbetalingsgodkjenning( vedtaksperiodeId = testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks), orgnummer = orgnummer, - utbetalingId = UUID.fromString(testRapid.inspektør.etterspurteBehov(Godkjenning).path("utbetalingId").asText()), - tilstand = testRapid.inspektør.tilstandForEtterspurteBehov(vedtaksperiodeIndeks, Godkjenning), + utbetalingId = UUID.fromString( + testRapid.inspektør.etterspurteBehov(Godkjenning).path("utbetalingId").asText() + ), + tilstand = testRapid.inspektør.tilstandForEtterspurteBehov( + vedtaksperiodeIndeks, + Godkjenning + ), utbetalingGodkjent = godkjent, saksbehandlerIdent = saksbehandlerIdent, saksbehandlerEpost = saksbehandlerEpost, @@ -440,12 +481,25 @@ internal abstract class AbstractEndToEndMediatorTest() { assertTrue(testRapid.inspektør.harEtterspurteBehov(vedtaksperiodeIndeks, Pleiepenger)) assertTrue(testRapid.inspektør.harEtterspurteBehov(vedtaksperiodeIndeks, Omsorgspenger)) assertTrue(testRapid.inspektør.harEtterspurteBehov(vedtaksperiodeIndeks, Opplæringspenger)) - assertTrue(testRapid.inspektør.harEtterspurteBehov(vedtaksperiodeIndeks, Arbeidsavklaringspenger)) + assertTrue( + testRapid.inspektør.harEtterspurteBehov( + vedtaksperiodeIndeks, + Arbeidsavklaringspenger + ) + ) assertTrue(testRapid.inspektør.harEtterspurteBehov(vedtaksperiodeIndeks, Dagpenger)) - assertTrue(testRapid.inspektør.harEtterspurteBehov(vedtaksperiodeIndeks, Institusjonsopphold)) + assertTrue( + testRapid.inspektør.harEtterspurteBehov( + vedtaksperiodeIndeks, + Institusjonsopphold + ) + ) val (_, message) = meldingsfabrikk.lagYtelser( vedtaksperiodeId = testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks), - tilstand = testRapid.inspektør.tilstandForEtterspurteBehov(vedtaksperiodeIndeks, Foreldrepenger), + tilstand = testRapid.inspektør.tilstandForEtterspurteBehov( + vedtaksperiodeIndeks, + Foreldrepenger + ), pleiepenger = pleiepenger, omsorgspenger = omsorgspenger, opplæringspenger = opplæringspenger, @@ -462,7 +516,12 @@ internal abstract class AbstractEndToEndMediatorTest() { sykepengehistorikk: List = emptyList(), orgnummer: String? = null ) { - assertTrue(testRapid.inspektør.harEtterspurteBehov(vedtaksperiodeIndeks, Sykepengehistorikk)) + assertTrue( + testRapid.inspektør.harEtterspurteBehov( + vedtaksperiodeIndeks, + Sykepengehistorikk + ) + ) val (_, message) = meldingsfabrikk.lagUtbetalingshistorikk( testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks), TilstandType.AVVENTER_INNTEKTSMELDING, @@ -473,7 +532,9 @@ internal abstract class AbstractEndToEndMediatorTest() { } protected fun sendUtbetalingshistorikkEtterInfotrygdendring(sykepengehistorikk: List = emptyList()) { - val (_, message) = meldingsfabrikk.lagUtbetalingshistorikkEtterInfotrygdendring(sykepengehistorikk) + val (_, message) = meldingsfabrikk.lagUtbetalingshistorikkEtterInfotrygdendring( + sykepengehistorikk + ) testRapid.sendTestMessage(message) } @@ -491,7 +552,10 @@ internal abstract class AbstractEndToEndMediatorTest() { inntekter = listOf(InntekterForSykepengegrunnlagFraLøsning.Inntekt(INNTEKT, orgnummer)) ), ) { - val vedtaksperiodeId = if (vedtaksperiodeIndeks == -1) UUID.randomUUID() else testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks) + val vedtaksperiodeId = + if (vedtaksperiodeIndeks == -1) UUID.randomUUID() else testRapid.inspektør.vedtaksperiodeId( + vedtaksperiodeIndeks + ) val (_, message) = meldingsfabrikk.lagSykepengegrunnlagForArbeidsgiver( vedtaksperiodeId = vedtaksperiodeId, orgnummer = orgnummer, @@ -507,7 +571,12 @@ internal abstract class AbstractEndToEndMediatorTest() { skjæringstidspunkt: LocalDate = 1.januar, orgnummer: String = ORGNUMMER, arbeidsforhold: List = listOf( - Arbeidsforhold(orgnummer, 1.januar(2010), null, Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT) + Arbeidsforhold( + orgnummer, + 1.januar(2010), + null, + Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT + ) ), medlemskapstatus: Medlemskapsvurdering.Medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja, inntekterForSykepengegrunnlag: List = sykepengegrunnlag( @@ -517,21 +586,32 @@ internal abstract class AbstractEndToEndMediatorTest() { ) { assertTrue(testRapid.inspektør.harEtterspurteBehov(vedtaksperiodeIndeks, Medlemskap)) assertTrue(testRapid.inspektør.harEtterspurteBehov(vedtaksperiodeIndeks, ArbeidsforholdV2)) - assertTrue(testRapid.inspektør.harEtterspurteBehov(vedtaksperiodeIndeks, InntekterForSykepengegrunnlag)) + assertTrue( + testRapid.inspektør.harEtterspurteBehov( + vedtaksperiodeIndeks, + InntekterForSykepengegrunnlag + ) + ) val skjæringstidspunktFraBehov = - testRapid.inspektør.etterspurteBehov(Medlemskap).path("Medlemskap").path("skjæringstidspunkt").asLocalDate() + testRapid.inspektør.etterspurteBehov(Medlemskap).path("Medlemskap") + .path("skjæringstidspunkt").asLocalDate() val (_, message) = meldingsfabrikk.lagVilkårsgrunnlag( vedtaksperiodeId = testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks), skjæringstidspunkt = skjæringstidspunktFraBehov, - tilstand = testRapid.inspektør.tilstandForEtterspurteBehov(vedtaksperiodeIndeks, InntekterForSykepengegrunnlag), + tilstand = testRapid.inspektør.tilstandForEtterspurteBehov( + vedtaksperiodeIndeks, + InntekterForSykepengegrunnlag + ), inntekterForSykepengegrunnlag = inntekterForSykepengegrunnlag, inntekterForOpptjeningsvurdering = listOf( TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning( måned = YearMonth.from(skjæringstidspunktFraBehov.minusMonths(1)), inntekter = listOf( - TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning.Inntekt(32000.0, + TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning.Inntekt( + 32000.0, ORGNUMMER - )), + ) + ), ) ), arbeidsforhold = (arbeidsforhold), @@ -563,7 +643,10 @@ internal abstract class AbstractEndToEndMediatorTest() { val (_, message) = meldingsfabrikk.lagSimulering( vedtaksperiodeId = testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks), orgnummer = orgnummer, - tilstand = testRapid.inspektør.tilstandForEtterspurteBehov(vedtaksperiodeIndeks, Simulering), + tilstand = testRapid.inspektør.tilstandForEtterspurteBehov( + vedtaksperiodeIndeks, + Simulering + ), status = status, utbetalingId = UUID.fromString(behov.path("utbetalingId").asText()), fagsystemId = behov.path("Simulering").path("fagsystemId").asText(), @@ -577,7 +660,8 @@ internal abstract class AbstractEndToEndMediatorTest() { } protected fun sendEtterbetaling( - fagsystemId: String = testRapid.inspektør.etterspurteBehov(Utbetaling).path(Utbetaling.name).path("fagsystemId").asText(), + fagsystemId: String = testRapid.inspektør.etterspurteBehov(Utbetaling).path(Utbetaling.name) + .path("fagsystemId").asText(), gyldighetsdato: LocalDate ) { val (_, message) = meldingsfabrikk.lagEtterbetaling( @@ -588,7 +672,8 @@ internal abstract class AbstractEndToEndMediatorTest() { } protected fun sendEtterbetalingMedHistorikk( - fagsystemId: String = testRapid.inspektør.etterspurteBehov(Utbetaling).path(Utbetaling.name).path("fagsystemId").asText(), + fagsystemId: String = testRapid.inspektør.etterspurteBehov(Utbetaling).path(Utbetaling.name) + .path("fagsystemId").asText(), gyldighetsdato: LocalDate ) { val (_, message) = meldingsfabrikk.lagEtterbetalingMedHistorikk( @@ -630,7 +715,10 @@ internal abstract class AbstractEndToEndMediatorTest() { skjæringstidspunkt: LocalDate, overstyrteArbeidsforhold: List ) { - val (_, message) = meldingsfabrikk.lagOverstyrArbeidsforhold(skjæringstidspunkt, overstyrteArbeidsforhold) + val (_, message) = meldingsfabrikk.lagOverstyrArbeidsforhold( + skjæringstidspunkt, + overstyrteArbeidsforhold + ) testRapid.sendTestMessage(message) } @@ -673,7 +761,10 @@ internal abstract class AbstractEndToEndMediatorTest() { testRapid.sendTestMessage(message) } - protected fun nyttVedtak(fom: LocalDate = LocalDate.of(2018, 1, 1), tom: LocalDate = LocalDate.of(2018, 1, 31)) { + protected fun nyttVedtak( + fom: LocalDate = LocalDate.of(2018, 1, 1), + tom: LocalDate = LocalDate.of(2018, 1, 31) + ) { val soknadperiode = SoknadsperiodeDTO(fom, tom, sykmeldingsgrad = 100) sendNySøknad(soknadperiode) sendSøknad(perioder = listOf(soknadperiode)) @@ -693,11 +784,18 @@ internal abstract class AbstractEndToEndMediatorTest() { } protected fun assertTilstander(vedtaksperiodeIndeks: Int, vararg tilstand: String) { - assertEquals(tilstand.toList(), testRapid.inspektør.tilstander(testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks))) + assertEquals( + tilstand.toList(), + testRapid.inspektør.tilstander(testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks)) + ) } protected fun assertTilstand(vedtaksperiodeIndeks: Int, tilstand: String) { - assertEquals(tilstand, testRapid.inspektør.tilstander(testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks)).lastOrNull()) + assertEquals( + tilstand, + testRapid.inspektør.tilstander(testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks)) + .lastOrNull() + ) } protected fun assertUtbetalingTilstander(utbetalingIndeks: Int, vararg tilstand: String) { @@ -707,17 +805,28 @@ internal abstract class AbstractEndToEndMediatorTest() { ) } - protected fun assertIkkeForkastedeTilstander(vedtaksperiodeIndeks: Int, vararg tilstand: String) { + protected fun assertIkkeForkastedeTilstander( + vedtaksperiodeIndeks: Int, + vararg tilstand: String + ) { assertEquals( tilstand.toList(), - testRapid.inspektør.tilstanderUtenForkastede(testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks)) + testRapid.inspektør.tilstanderUtenForkastede( + testRapid.inspektør.vedtaksperiodeId( + vedtaksperiodeIndeks + ) + ) ) } protected fun assertForkastedeTilstander(vedtaksperiodeIndeks: Int, vararg tilstand: String) { assertEquals( tilstand.toList(), - testRapid.inspektør.forkastedeTilstander(testRapid.inspektør.vedtaksperiodeId(vedtaksperiodeIndeks)) + testRapid.inspektør.forkastedeTilstander( + testRapid.inspektør.vedtaksperiodeId( + vedtaksperiodeIndeks + ) + ) ) } @@ -735,8 +844,10 @@ internal abstract class AbstractEndToEndMediatorTest() { assertEquals(emptyList(), testRapid.inspektør.varsler()) } - private class InntektsmeldingerReplayObserver(private val testRapid: TestRapid, private val dataSource: HikariDataSource) - : TestRapid.TestRapidObserver { + private class InntektsmeldingerReplayObserver( + private val testRapid: TestRapid, + private val dataSource: HikariDataSource + ) : TestRapid.TestRapidObserver { private companion object { private val log = LoggerFactory.getLogger(InntektsmeldingerReplayObserver::class.java) private val objectMapper = jacksonObjectMapper() @@ -769,25 +880,49 @@ internal abstract class AbstractEndToEndMediatorTest() { orgnr = orgnr, vedtaksperiodeId = vedtaksperiodeId, skjæringstidspunkt = node.path("skjæringstidspunkt").asLocalDate(), - førsteFraværsdager = node.path("førsteFraværsdager").map { FørsteFraværsdag(it.path("organisasjonsnummer").textValue(), it.path("førsteFraværsdag").asLocalDate()) }, - sykmeldingsperioder = node.path("sykmeldingsperioder").map { no.nav.helse.spill_av_im.Periode(it.path("fom").asLocalDate(), it.path("tom").asLocalDate()) }, - egenmeldinger = node.path("egenmeldinger").map { no.nav.helse.spill_av_im.Periode(it.path("fom").asLocalDate(), it.path("tom").asLocalDate()) }, - harForespurtArbeidsgiverperiode = node.path("trengerArbeidsgiverperiode").booleanValue(), + førsteFraværsdager = node.path("førsteFraværsdager").map { + FørsteFraværsdag( + it.path("organisasjonsnummer").textValue(), + it.path("førsteFraværsdag").asLocalDate() + ) + }, + sykmeldingsperioder = node.path("sykmeldingsperioder").map { + no.nav.helse.spill_av_im.Periode( + it.path("fom").asLocalDate(), + it.path("tom").asLocalDate() + ) + }, + egenmeldinger = node.path("egenmeldinger").map { + no.nav.helse.spill_av_im.Periode( + it.path("fom").asLocalDate(), + it.path("tom").asLocalDate() + ) + }, + harForespurtArbeidsgiverperiode = node.path("trengerArbeidsgiverperiode") + .booleanValue(), erPotensiellForespørsel = node.path("potensiellForespørsel").booleanValue() ) val replayMessage = lagInntektsmeldingerReplayMessage(forespørsel) - log.info("lager inntektsmeldinger_replay-melding for {}", kv("vedtaksperiodeId", vedtaksperiodeId)) + log.info( + "lager inntektsmeldinger_replay-melding for {}", + kv("vedtaksperiodeId", vedtaksperiodeId) + ) testRapid.sendTestMessage(replayMessage.toJson()) } private fun finnInntektsmeldinger(fnr: String): List = sessionOf(dataSource).use { session -> - session.run(queryOf("SELECT data FROM melding WHERE fnr = ? AND melding_type = 'INNTEKTSMELDING' ORDER BY lest_dato ASC", fnr.toLong()).map { - objectMapper.readTree(it.string("data")) - }.asList) + session.run( + queryOf( + "SELECT data FROM melding WHERE fnr = ? AND melding_type = 'INNTEKTSMELDING' ORDER BY lest_dato ASC", + fnr.toLong() + ).map { + objectMapper.readTree(it.string("data")) + }.asList + ) } private fun lagInntektsmeldingerReplayMessage(forespørsel: Forespørsel): JsonMessage { @@ -801,7 +936,9 @@ internal abstract class AbstractEndToEndMediatorTest() { val im = objectMapper.treeToValue(node) forespørsel.erInntektsmeldingRelevant(im) } - .map { inntektsmelding -> inntektsmelding.path("@id").asText().toUUID() to inntektsmelding } + .map { inntektsmelding -> + inntektsmelding.path("@id").asText().toUUID() to inntektsmelding + } return JsonMessage.newMessage("inntektsmeldinger_replay", mapOf( "fødselsnummer" to forespørsel.fnr, @@ -816,4 +953,4 @@ internal abstract class AbstractEndToEndMediatorTest() { )) } } -} \ No newline at end of file +} diff --git "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/Akt\303\270rEndringE2ETest.kt" "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/Akt\303\270rEndringE2ETest.kt" index d5a0f34e0b..d0abf005a4 100644 --- "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/Akt\303\270rEndringE2ETest.kt" +++ "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/Akt\303\270rEndringE2ETest.kt" @@ -17,14 +17,45 @@ internal class AktørEndringE2ETest : AbstractEndToEndMediatorTest() { @Test fun `person får nytt fnr - behandling fortsetter på samme personjson`() { - val meldingsfabrikkFNR2 = TestMessageFactory(FNR2, ORGNUMMER, INNTEKT, UNG_PERSON_FØDSELSDATO) - sendSøknad(fnr = FNR1, perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100))) - sendSøknad(fnr = FNR2, perioder = listOf(SoknadsperiodeDTO(fom = 27.januar, tom = 31.januar, sykmeldingsgrad = 100)), historiskeFolkeregisteridenter = listOf(FNR1)) - sendSøknad(fnr = FNR2, perioder = listOf(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100)), historiskeFolkeregisteridenter = listOf(FNR1)) + val meldingsfabrikkFNR2 = + TestMessageFactory(FNR2, ORGNUMMER, INNTEKT, UNG_PERSON_FØDSELSDATO) + sendSøknad( + fnr = FNR1, + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendSøknad( + fnr = FNR2, + perioder = listOf( + SoknadsperiodeDTO( + fom = 27.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), + historiskeFolkeregisteridenter = listOf(FNR1) + ) + sendSøknad( + fnr = FNR2, + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.februar, + tom = 28.februar, + sykmeldingsgrad = 100 + ) + ), + historiskeFolkeregisteridenter = listOf(FNR1) + ) - meldingsfabrikkFNR2.lagInntektsmelding(listOf(Periode(3.januar, 18.januar)), 3.januar).also { (_, melding) -> - testRapid.sendTestMessage(melding) - } + meldingsfabrikkFNR2.lagInntektsmelding(listOf(Periode(3.januar, 18.januar)), 3.januar) + .also { (_, melding) -> + testRapid.sendTestMessage(melding) + } assertEquals(1, antallPersoner()) assertEquals(2, antallPersonalias()) @@ -37,16 +68,50 @@ internal class AktørEndringE2ETest : AbstractEndToEndMediatorTest() { assertEquals(FNR2, meldinger[4].path("fødselsnummer").asText()) assertEquals(FNR2, meldinger[5].path("fødselsnummer").asText()) - assertTilstander(0, "AVVENTER_INFOTRYGDHISTORIKK", "AVVENTER_INNTEKTSMELDING", "AVVENTER_BLOKKERENDE_PERIODE", "AVVENTER_VILKÅRSPRØVING") + assertTilstander( + 0, + "AVVENTER_INFOTRYGDHISTORIKK", + "AVVENTER_INNTEKTSMELDING", + "AVVENTER_BLOKKERENDE_PERIODE", + "AVVENTER_VILKÅRSPRØVING" + ) assertTilstander(1, "AVVENTER_INNTEKTSMELDING", "AVVENTER_BLOKKERENDE_PERIODE") } @Test fun `to ulike personer - finner sammenheng etterpå`() { - sendSøknad(fnr = FNR1, perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100))) - sendSøknad(fnr = FNR2, perioder = listOf(SoknadsperiodeDTO(fom = 27.januar, tom = 31.januar, sykmeldingsgrad = 100))) + sendSøknad( + fnr = FNR1, + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendSøknad( + fnr = FNR2, + perioder = listOf( + SoknadsperiodeDTO( + fom = 27.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) - sendSøknad(fnr = FNR2, perioder = listOf(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100)), historiskeFolkeregisteridenter = listOf(FNR1)) + sendSøknad( + fnr = FNR2, + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.februar, + tom = 28.februar, + sykmeldingsgrad = 100 + ) + ), + historiskeFolkeregisteridenter = listOf(FNR1) + ) assertEquals(2, antallPersoner()) assertEquals(2, antallPersonalias()) @@ -64,18 +129,38 @@ internal class AktørEndringE2ETest : AbstractEndToEndMediatorTest() { } testRapid.inspektør.siste("aktivitetslogg_ny_aktivitet").also { melding -> - val error = melding.path("aktiviteter").first { it.path("melding").asText() == "Personen har blitt behandlet på en tidligere ident" } + val error = melding.path("aktiviteter").first { + it.path("melding").asText() == "Personen har blitt behandlet på en tidligere ident" + } assertEquals("FUNKSJONELL_FEIL", error.path("nivå").asText()) } } @Test fun `endrer fødselsnummer ved opphørt ident`() { - sendSøknad(fnr = FNR1, perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100))) + sendSøknad( + fnr = FNR1, + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) sendIdentOpphørt(FNR1, FNR2) assertEquals(1, antallPersoner()) assertEquals(2, antallPersonalias()) - sendSøknad(fnr = FNR2, perioder = listOf(SoknadsperiodeDTO(fom = 27.januar, tom = 31.januar, sykmeldingsgrad = 100))) + sendSøknad( + fnr = FNR2, + perioder = listOf( + SoknadsperiodeDTO( + fom = 27.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) val meldinger = testRapid.inspektør.meldinger("vedtaksperiode_endret") assertEquals(3, meldinger.size) assertEquals(FNR1, meldinger[0].path("fødselsnummer").asText()) diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AndreInntektskilderTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AndreInntektskilderTest.kt index a3a4e0c0db..7b11d46835 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AndreInntektskilderTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AndreInntektskilderTest.kt @@ -12,7 +12,13 @@ internal class AndreInntektskilderTest : AbstractEndToEndMediatorTest() { @Test fun `andre arbeidsforhold - har jobbet siste 14 dager`() { sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 22.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 22.januar, + sykmeldingsgrad = 100 + ) + ), andreInntektskilder = listOf( InntektskildeDTO( type = InntektskildetypeDTO.ANDRE_ARBEIDSFORHOLD, @@ -28,7 +34,13 @@ internal class AndreInntektskilderTest : AbstractEndToEndMediatorTest() { @Test fun `andre arbeidsforhold - har ikke jobbet siste 14 dager`() { sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 22.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 22.januar, + sykmeldingsgrad = 100 + ) + ), andreInntektskilder = listOf( InntektskildeDTO( type = InntektskildetypeDTO.ANDRE_ARBEIDSFORHOLD, @@ -40,4 +52,4 @@ internal class AndreInntektskilderTest : AbstractEndToEndMediatorTest() { assertTilstander(0, "AVVENTER_INFOTRYGDHISTORIKK", "AVVENTER_INNTEKTSMELDING") } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsgiveropplysningerTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsgiveropplysningerTest.kt index 462fa08461..c7752af572 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsgiveropplysningerTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsgiveropplysningerTest.kt @@ -27,11 +27,21 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { fun `sender ut forventet event TrengerArbeidsgiveropplysninger ved en enkel førstegangsbehandling`() { sendNySøknad(SoknadsperiodeDTO(fom = 2.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 2.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 2.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), egenmeldingerFraSykmelding = listOf(1.januar) ) - Assertions.assertEquals(1, testRapid.inspektør.meldinger("trenger_opplysninger_fra_arbeidsgiver").size) - val trengerOpplysningerEvent = testRapid.inspektør.siste("trenger_opplysninger_fra_arbeidsgiver") + Assertions.assertEquals( + 1, + testRapid.inspektør.meldinger("trenger_opplysninger_fra_arbeidsgiver").size + ) + val trengerOpplysningerEvent = + testRapid.inspektør.siste("trenger_opplysninger_fra_arbeidsgiver") val faktiskResultat = trengerOpplysningerEvent.json( "@event_name", @@ -44,45 +54,69 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { "fødselsnummer" ) - JSONAssert.assertEquals(forventetResultatTrengerInntekt, faktiskResultat, JSONCompareMode.STRICT) + JSONAssert.assertEquals( + forventetResultatTrengerInntekt, + faktiskResultat, + JSONCompareMode.STRICT + ) } @Test fun `sender ut forventet event TrengerArbeidsgiveropplysninger ved to arbeidsgivere og gap kun hos den ene`() { - val a1 = "ag1" - val a2 = "ag2" - nyeVedtakForJanuar(a1, a2) - forlengMedFebruar(a1) - - sendNySøknad(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100), orgnummer = a2) - sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100)), - orgnummer = a2 - ) + val a1 = "ag1" + val a2 = "ag2" + nyeVedtakForJanuar(a1, a2) + forlengMedFebruar(a1) - val meldinger = testRapid.inspektør.meldinger("trenger_opplysninger_fra_arbeidsgiver") - Assertions.assertEquals(5, meldinger.size) - val trengerOpplysningerEvent = testRapid.inspektør.siste("trenger_opplysninger_fra_arbeidsgiver") - - val faktiskResultat = trengerOpplysningerEvent.json( - "@event_name", - "organisasjonsnummer", - "skjæringstidspunkt", - "førsteFraværsdager", - "sykmeldingsperioder", - "egenmeldingsperioder", - "forespurteOpplysninger", - "fødselsnummer" - ) + sendNySøknad( + SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100), + orgnummer = a2 + ) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.mars, + tom = 31.mars, + sykmeldingsgrad = 100 + ) + ), + orgnummer = a2 + ) - JSONAssert.assertEquals(forventetResultatFastsattInntekt, faktiskResultat, JSONCompareMode.STRICT) - } + val meldinger = testRapid.inspektør.meldinger("trenger_opplysninger_fra_arbeidsgiver") + Assertions.assertEquals(5, meldinger.size) + val trengerOpplysningerEvent = + testRapid.inspektør.siste("trenger_opplysninger_fra_arbeidsgiver") + + val faktiskResultat = trengerOpplysningerEvent.json( + "@event_name", + "organisasjonsnummer", + "skjæringstidspunkt", + "førsteFraværsdager", + "sykmeldingsperioder", + "egenmeldingsperioder", + "forespurteOpplysninger", + "fødselsnummer" + ) + + JSONAssert.assertEquals( + forventetResultatFastsattInntekt, + faktiskResultat, + JSONCompareMode.STRICT + ) + } @Test fun `sender med inntekt fra forrige skjæringstidspunkt`() { sendNySøknad(SoknadsperiodeDTO(fom = 2.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 2.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 2.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), egenmeldingerFraSykmelding = listOf(1.januar) ) sendInntektsmelding( @@ -97,7 +131,13 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { sendNySøknad(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.mars, + tom = 31.mars, + sykmeldingsgrad = 100 + ) + ), egenmeldingerFraSykmelding = emptyList() ) sendInntektsmelding( @@ -109,8 +149,12 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { sendSimulering(1, SimuleringMessage.Simuleringstatus.OK) sendUtbetalingsgodkjenning(1) sendUtbetaling() - Assertions.assertEquals(2, testRapid.inspektør.meldinger("trenger_opplysninger_fra_arbeidsgiver").size) - val trengerOpplysningerEvent = testRapid.inspektør.siste("trenger_opplysninger_fra_arbeidsgiver") + Assertions.assertEquals( + 2, + testRapid.inspektør.meldinger("trenger_opplysninger_fra_arbeidsgiver").size + ) + val trengerOpplysningerEvent = + testRapid.inspektør.siste("trenger_opplysninger_fra_arbeidsgiver") val faktiskResultat = trengerOpplysningerEvent.json( "@event_name", @@ -123,16 +167,29 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { "fødselsnummer" ) - JSONAssert.assertEquals(forventetResultatMedInntektFraForrigeSkjæringstidpunkt, faktiskResultat, JSONCompareMode.STRICT) + JSONAssert.assertEquals( + forventetResultatMedInntektFraForrigeSkjæringstidpunkt, + faktiskResultat, + JSONCompareMode.STRICT + ) } @Test fun `sender ut forventet event TrengerArbeidsgiveropplysninger ved førstegangsbehandling med kort gap til forrige`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar ) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -141,12 +198,19 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { sendNySøknad(SoknadsperiodeDTO(fom = 10.februar, tom = 10.mars, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 10.februar, tom = 10.mars, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 10.februar, + tom = 10.mars, + sykmeldingsgrad = 100 + ) + ) ) val meldinger = testRapid.inspektør.meldinger("trenger_opplysninger_fra_arbeidsgiver") Assertions.assertEquals(2, meldinger.size) - val trengerOpplysningerEvent = testRapid.inspektør.siste("trenger_opplysninger_fra_arbeidsgiver") + val trengerOpplysningerEvent = + testRapid.inspektør.siste("trenger_opplysninger_fra_arbeidsgiver") val faktiskResultat = trengerOpplysningerEvent.json( "@event_name", @@ -165,7 +229,15 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { @Test fun `Sender med forrige refusjonsopplysninger i forespørsel`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100))) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) sendInntektsmelding( arbeidsgiverperiode = listOf(Periode(1.januar, 16.januar)), 1.januar, @@ -178,8 +250,12 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { perioder = listOf(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100)) ) - Assertions.assertEquals(2, testRapid.inspektør.meldinger("trenger_opplysninger_fra_arbeidsgiver").size) - val trengerOpplysningerEvent = testRapid.inspektør.siste("trenger_opplysninger_fra_arbeidsgiver") + Assertions.assertEquals( + 2, + testRapid.inspektør.meldinger("trenger_opplysninger_fra_arbeidsgiver").size + ) + val trengerOpplysningerEvent = + testRapid.inspektør.siste("trenger_opplysninger_fra_arbeidsgiver") val faktiskResultat = trengerOpplysningerEvent.json( "@event_name", @@ -192,19 +268,43 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { "fødselsnummer" ) - JSONAssert.assertEquals(forventetResultatOpphørAvRefusjon, faktiskResultat, JSONCompareMode.STRICT) + JSONAssert.assertEquals( + forventetResultatOpphørAvRefusjon, + faktiskResultat, + JSONCompareMode.STRICT + ) } @Test fun `sender ut trenger_ikke_opplysninger_fra_arbeidsgiver ved out-of-order som fører til at vi ikke trenger opplysninger på siste periode`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100)) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100))) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.februar, + tom = 28.februar, + sykmeldingsgrad = 100 + ) + ) + ) sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100))) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) - Assertions.assertEquals(1, testRapid.inspektør.meldinger("trenger_ikke_opplysninger_fra_arbeidsgiver").size) - val trengerIkkeOpplysningerEvent = testRapid.inspektør.siste("trenger_ikke_opplysninger_fra_arbeidsgiver") + Assertions.assertEquals( + 1, + testRapid.inspektør.meldinger("trenger_ikke_opplysninger_fra_arbeidsgiver").size + ) + val trengerIkkeOpplysningerEvent = + testRapid.inspektør.siste("trenger_ikke_opplysninger_fra_arbeidsgiver") assertDoesNotThrow { UUID.fromString(trengerIkkeOpplysningerEvent["vedtaksperiodeId"].asText()) } assertTrue(trengerIkkeOpplysningerEvent["organisasjonsnummer"].asText().isNotBlank()) } @@ -441,9 +541,18 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { }""" private fun forlengMedFebruar(a1: String) { - sendNySøknad(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100), orgnummer = a1) + sendNySøknad( + SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100), + orgnummer = a1 + ) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.februar, + tom = 28.februar, + sykmeldingsgrad = 100 + ) + ), orgnummer = a1 ) sendYtelser(0, orgnummer = a1) @@ -453,15 +562,33 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { } private fun nyeVedtakForJanuar(a1: String, a2: String) { - sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100), orgnummer = a1) + sendNySøknad( + SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100), + orgnummer = a1 + ) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), orgnummer = a1 ) - sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100), orgnummer = a2) + sendNySøknad( + SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100), + orgnummer = a2 + ) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), orgnummer = a2 ) @@ -480,14 +607,24 @@ internal class ArbeidsgiveropplysningerTest : AbstractEndToEndMediatorTest() { skjæringstidspunkt = 1.januar, orgnummer = a1, arbeidsforhold = listOf( - TestMessageFactory.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - TestMessageFactory.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + TestMessageFactory.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + TestMessageFactory.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntekterForSykepengegrunnlag = sykepengegrunnlag( 1.januar, listOf( - TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(INNTEKT, a1), - TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(INNTEKT, a2), - ) + TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(INNTEKT, a1), + TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(INNTEKT, a2), + ) ) ) sendYtelser(0, orgnummer = a1) diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsledigMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsledigMediatorTest.kt index ce36e4fb69..cf2ded4b7e 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsledigMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsledigMediatorTest.kt @@ -10,18 +10,43 @@ internal class ArbeidsledigMediatorTest : AbstractEndToEndMediatorTest() { @Test fun `arbeidsledigsøknad`() { - sendNySøknadArbeidsledig(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + sendNySøknadArbeidsledig( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) sendArbeidsledigsøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) assertTilstander(0, "TIL_INFOTRYGD") } + @Test fun `overgang til arbeidsledig`() { nyttVedtak(1.januar, 31.januar) - sendNySøknadArbeidsledig(SoknadsperiodeDTO(fom = 1.februar, tom = 26.februar, sykmeldingsgrad = 100), tidligereArbeidsgiverOrgnummer = ORGNUMMER) + sendNySøknadArbeidsledig( + SoknadsperiodeDTO( + fom = 1.februar, + tom = 26.februar, + sykmeldingsgrad = 100 + ), tidligereArbeidsgiverOrgnummer = ORGNUMMER + ) sendArbeidsledigsøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.februar, tom = 26.februar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.februar, + tom = 26.februar, + sykmeldingsgrad = 100 + ) + ), tidligereArbeidsgiverOrgnummer = ORGNUMMER ) assertTilstander(1, "AVVENTER_BLOKKERENDE_PERIODE", "AVVENTER_HISTORIKK") diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsopplysningerKorrigertTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsopplysningerKorrigertTest.kt index e07ba4faa7..e60dbd7038 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsopplysningerKorrigertTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ArbeidsopplysningerKorrigertTest.kt @@ -14,19 +14,39 @@ internal class ArbeidsopplysningerKorrigertTest : AbstractEndToEndMediatorTest() fun `Sender ut arbeidsopplysninger_korrigert når arbeidsgiveropplysninger endres av en korrigerende IM`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) + val korrigertInntektsmelding = sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 31.januar)), + førsteFraværsdag = 1.januar, + beregnetInntekt = 30000.0 ) - val korrigertInntektsmelding = sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 31.januar)), førsteFraværsdag = 1.januar, beregnetInntekt = 30000.0) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) sendUtbetalingsgodkjenning(0) sendUtbetaling() - val korrigerendeInntektsmelding = sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 31.januar)), førsteFraværsdag = 1.januar, beregnetInntekt = 30500.0) + val korrigerendeInntektsmelding = sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 31.januar)), + førsteFraværsdag = 1.januar, + beregnetInntekt = 30500.0 + ) val event = testRapid.inspektør.siste("arbeidsgiveropplysninger_korrigert") - assertEquals(korrigertInntektsmelding.first, UUID.fromString(event["korrigertInntektsmeldingId"].asText())) - assertEquals(korrigerendeInntektsmelding.first, UUID.fromString(event["korrigerendeInntektsopplysningId"].asText())) + assertEquals( + korrigertInntektsmelding.first, + UUID.fromString(event["korrigertInntektsmeldingId"].asText()) + ) + assertEquals( + korrigerendeInntektsmelding.first, + UUID.fromString(event["korrigerendeInntektsopplysningId"].asText()) + ) assertEquals("INNTEKTSMELDING", event["korrigerendeInntektektsopplysningstype"].asText()) } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AvsluttetMedVedtakKontraktTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AvsluttetMedVedtakKontraktTest.kt index 81cb297acc..9a564f3fc6 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AvsluttetMedVedtakKontraktTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AvsluttetMedVedtakKontraktTest.kt @@ -19,9 +19,22 @@ internal class AvsluttetMedVedtakKontraktTest : AbstractEndToEndMediatorTest() { fun `vedtak med utbetaling`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) val søknadId = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + val (inntektsmeldingId, _) = sendInntektsmelding( + listOf( + Periode( + fom = 3.januar, + tom = 18.januar + ) + ), førsteFraværsdag = 3.januar ) - val (inntektsmeldingId,_) = sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -63,17 +76,38 @@ internal class AvsluttetMedVedtakKontraktTest : AbstractEndToEndMediatorTest() { """ assertVedtakFattet(forventet, forventetUtbetalingEventNavn = "utbetaling_utbetalt") } + @Test fun `vedtak med utbetaling hvor sykepengegrunnlaget er fastsatt ved skjønn`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) val søknadId = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + val (inntektsmeldingId, _) = sendInntektsmelding( + listOf( + Periode( + fom = 3.januar, + tom = 18.januar + ) + ), førsteFraværsdag = 3.januar, beregnetInntekt = 45000.00 ) - val (inntektsmeldingId,_) = sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar, beregnetInntekt = 45000.00) sendVilkårsgrunnlag(0) - val (skjønnsmessigFastsettelseId, _) = sendSkjønnsmessigFastsettelse(3.januar, listOf(TestMessageFactory.SkjønnsmessigFastsatt(ORGNUMMER, 47500.00 * 12))) + val (skjønnsmessigFastsettelseId, _) = sendSkjønnsmessigFastsettelse( + 3.januar, + listOf(TestMessageFactory.SkjønnsmessigFastsatt(ORGNUMMER, 47500.00 * 12)) + ) sendYtelser(0) - sendSimulering(0, SimuleringMessage.Simuleringstatus.OK, forventedeFagområder = setOf("SP", "SPREF")) + sendSimulering( + 0, + SimuleringMessage.Simuleringstatus.OK, + forventedeFagområder = setOf("SP", "SPREF") + ) sendUtbetalingsgodkjenning(0) sendUtbetaling() @Language("JSON") @@ -119,7 +153,13 @@ internal class AvsluttetMedVedtakKontraktTest : AbstractEndToEndMediatorTest() { fun `vedtak uten utbetaling`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) val søknadId = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ), fravær = listOf(FravarDTO(19.januar, 26.januar, FravarstypeDTO.FERIE)) ) @@ -149,9 +189,18 @@ internal class AvsluttetMedVedtakKontraktTest : AbstractEndToEndMediatorTest() { fun `vedtak med utbetaling uten utbetaling`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -160,7 +209,13 @@ internal class AvsluttetMedVedtakKontraktTest : AbstractEndToEndMediatorTest() { sendNySøknad(SoknadsperiodeDTO(fom = 27.januar, tom = 31.januar, sykmeldingsgrad = 100)) val søknadId = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 27.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 27.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), fravær = listOf(FravarDTO(fom = 27.januar, tom = 31.januar, FravarstypeDTO.FERIE)) ) sendYtelser(1) @@ -205,7 +260,8 @@ internal class AvsluttetMedVedtakKontraktTest : AbstractEndToEndMediatorTest() { private fun assertVedtakFattet(forventetMelding: String, forventetUtbetalingEventNavn: String) { val vedtakFattet = testRapid.assertUtgåendeMelding(forventetMelding) val vedtakFattetUtbetalingId = vedtakFattet.path("utbetalingId").asText() - val utbetalingEventUtbetalingId = testRapid.inspektør.siste(forventetUtbetalingEventNavn).path("utbetalingId").asText() + val utbetalingEventUtbetalingId = + testRapid.inspektør.siste(forventetUtbetalingEventNavn).path("utbetalingId").asText() assertEquals(vedtakFattetUtbetalingId, utbetalingEventUtbetalingId) } } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AvstemmingMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AvstemmingMediatorTest.kt index 5dedeca837..58bd67fe80 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AvstemmingMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/AvstemmingMediatorTest.kt @@ -19,9 +19,18 @@ internal class AvstemmingMediatorTest : AbstractEndToEndMediatorTest() { fun avstemming() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -31,57 +40,129 @@ internal class AvstemmingMediatorTest : AbstractEndToEndMediatorTest() { sendNySøknad(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100)) sendNySøknad(SoknadsperiodeDTO(fom = 1.april, tom = 30.april, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.februar, tom = 27.februar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.februar, + tom = 27.februar, + sykmeldingsgrad = 100 + ) + ) ) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.februar, + tom = 28.februar, + sykmeldingsgrad = 100 + ) + ) ) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.april, tom = 30.april, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.april, + tom = 30.april, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.april, tom = 16.april)), + førsteFraværsdag = 1.april ) - sendInntektsmelding(listOf(Periode(fom = 1.april, tom = 16.april)), førsteFraværsdag = 1.april) sendVilkårsgrunnlag(3, skjæringstidspunkt = 1.april) sendYtelser(3) sendAvstemming() val avstemt = testRapid.inspektør.siste("person_avstemt") val vedtaksperioder = avstemt.path("arbeidsgivere").path(0).path("vedtaksperioder") - val forkastedeVedtaksperioder = avstemt.path("arbeidsgivere").path(0).path("forkastedeVedtaksperioder") + val forkastedeVedtaksperioder = + avstemt.path("arbeidsgivere").path(0).path("forkastedeVedtaksperioder") val utbetalinger = avstemt.path("arbeidsgivere").path(0).path("utbetalinger") assertEquals(UNG_PERSON_FNR_2018, avstemt.path("fødselsnummer").asText()) assertEquals(1, avstemt.path("arbeidsgivere").size()) - assertEquals(ORGNUMMER, avstemt.path("arbeidsgivere").path(0).path("organisasjonsnummer").asText()) + assertEquals( + ORGNUMMER, + avstemt.path("arbeidsgivere").path(0).path("organisasjonsnummer").asText() + ) assertEquals(2, vedtaksperioder.size()) assertDoesNotThrow { UUID.fromString(vedtaksperioder.path(0).path("id").asText()) } assertEquals("AVSLUTTET", vedtaksperioder.path(0).path("tilstand").asText()) - assertDoesNotThrow { LocalDateTime.parse(vedtaksperioder.path(0).path("opprettet").asText()) } - assertDoesNotThrow { LocalDateTime.parse(vedtaksperioder.path(0).path("oppdatert").asText()) } + assertDoesNotThrow { + LocalDateTime.parse( + vedtaksperioder.path(0).path("opprettet").asText() + ) + } + assertDoesNotThrow { + LocalDateTime.parse( + vedtaksperioder.path(0).path("oppdatert").asText() + ) + } assertDoesNotThrow { UUID.fromString(vedtaksperioder.path(1).path("id").asText()) } assertEquals("AVVENTER_SIMULERING", vedtaksperioder.path(1).path("tilstand").asText()) - assertDoesNotThrow { LocalDateTime.parse(vedtaksperioder.path(1).path("opprettet").asText()) } - assertDoesNotThrow { LocalDateTime.parse(vedtaksperioder.path(1).path("oppdatert").asText()) } + assertDoesNotThrow { + LocalDateTime.parse( + vedtaksperioder.path(1).path("opprettet").asText() + ) + } + assertDoesNotThrow { + LocalDateTime.parse( + vedtaksperioder.path(1).path("oppdatert").asText() + ) + } assertEquals(2, forkastedeVedtaksperioder.size()) - assertDoesNotThrow { UUID.fromString(forkastedeVedtaksperioder.path(0).path("id").asText()) } + assertDoesNotThrow { + UUID.fromString( + forkastedeVedtaksperioder.path(0).path("id").asText() + ) + } assertEquals("TIL_INFOTRYGD", forkastedeVedtaksperioder.path(0).path("tilstand").asText()) - assertDoesNotThrow { LocalDateTime.parse(forkastedeVedtaksperioder.path(0).path("opprettet").asText()) } - assertDoesNotThrow { LocalDateTime.parse(forkastedeVedtaksperioder.path(0).path("oppdatert").asText()) } + assertDoesNotThrow { + LocalDateTime.parse( + forkastedeVedtaksperioder.path(0).path("opprettet").asText() + ) + } + assertDoesNotThrow { + LocalDateTime.parse( + forkastedeVedtaksperioder.path(0).path("oppdatert").asText() + ) + } - assertDoesNotThrow { UUID.fromString(forkastedeVedtaksperioder.path(1).path("id").asText()) } + assertDoesNotThrow { + UUID.fromString( + forkastedeVedtaksperioder.path(1).path("id").asText() + ) + } assertEquals("TIL_INFOTRYGD", forkastedeVedtaksperioder.path(1).path("tilstand").asText()) - assertDoesNotThrow { LocalDateTime.parse(forkastedeVedtaksperioder.path(1).path("opprettet").asText()) } - assertDoesNotThrow { LocalDateTime.parse(forkastedeVedtaksperioder.path(1).path("oppdatert").asText()) } + assertDoesNotThrow { + LocalDateTime.parse( + forkastedeVedtaksperioder.path(1).path("opprettet").asText() + ) + } + assertDoesNotThrow { + LocalDateTime.parse( + forkastedeVedtaksperioder.path(1).path("oppdatert").asText() + ) + } assertEquals(2, utbetalinger.size()) assertDoesNotThrow { UUID.fromString(utbetalinger.path(0).path("id").asText()) } assertEquals("UTBETALT", utbetalinger.path(0).path("status").asText()) assertEquals("UTBETALING", utbetalinger.path(0).path("type").asText()) assertEquals("O123456", utbetalinger.path(0).path("vurdering").path("ident").asText()) - assertEquals(false, utbetalinger.path(0).path("vurdering").path("automatiskBehandling").asBoolean()) + assertEquals( + false, + utbetalinger.path(0).path("vurdering").path("automatiskBehandling").asBoolean() + ) assertEquals(true, utbetalinger.path(0).path("vurdering").path("godkjent").asBoolean()) - assertDoesNotThrow { LocalDateTime.parse(utbetalinger.path(0).path("vurdering").path("tidspunkt").asText()) } + assertDoesNotThrow { + LocalDateTime.parse( + utbetalinger.path(0).path("vurdering").path("tidspunkt").asText() + ) + } assertDoesNotThrow { LocalDateTime.parse(utbetalinger.path(0).path("opprettet").asText()) } assertDoesNotThrow { LocalDateTime.parse(utbetalinger.path(0).path("oppdatert").asText()) } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/BehandlingerMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/BehandlingerMediatorTest.kt index dce7e362b9..a69ef40702 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/BehandlingerMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/BehandlingerMediatorTest.kt @@ -15,8 +15,19 @@ internal class BehandlingerMediatorTest : AbstractEndToEndMediatorTest() { @Test fun `vedtak iverksatt`() { - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100))) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar + ) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -39,8 +50,19 @@ internal class BehandlingerMediatorTest : AbstractEndToEndMediatorTest() { @Test fun `vedtak fattet`() { - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100))) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar + ) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -59,7 +81,15 @@ internal class BehandlingerMediatorTest : AbstractEndToEndMediatorTest() { @Test fun `avsluttet uten utbetaling`() { - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 10.januar, sykmeldingsgrad = 100))) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 10.januar, + sykmeldingsgrad = 100 + ) + ) + ) val behandlingOpprettet = testRapid.inspektør.meldinger("behandling_opprettet").single() val behandlingOpprettetIndeks = testRapid.inspektør.indeksFor(behandlingOpprettet) @@ -76,12 +106,15 @@ internal class BehandlingerMediatorTest : AbstractEndToEndMediatorTest() { @Test fun `vedtak annulleres`() { nyttVedtak(1.januar, 31.januar) - val utbetalingId = testRapid.inspektør.siste("utbetaling_utbetalt").path("utbetalingId").asText() + val utbetalingId = + testRapid.inspektør.siste("utbetaling_utbetalt").path("utbetalingId").asText() sendAnnullering(utbetalingId) val behandlingOpprettet = testRapid.inspektør.meldinger("behandling_opprettet") - val førsteBehandlingOpprettetIndeks = testRapid.inspektør.indeksFor(behandlingOpprettet.first()) - val sisteBehandlingOpprettetIndeks = testRapid.inspektør.indeksFor(behandlingOpprettet.last()) + val førsteBehandlingOpprettetIndeks = + testRapid.inspektør.indeksFor(behandlingOpprettet.first()) + val sisteBehandlingOpprettetIndeks = + testRapid.inspektør.indeksFor(behandlingOpprettet.last()) val behandlingLukket = testRapid.inspektør.meldinger("behandling_lukket").single() val behandlingLukketIndeks = testRapid.inspektør.indeksFor(behandlingLukket) val behandlingForkastet = testRapid.inspektør.meldinger("behandling_forkastet").single() diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/BehovkontraktTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/BehovkontraktTest.kt index 95babd2416..68a1398a9d 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/BehovkontraktTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/BehovkontraktTest.kt @@ -20,9 +20,18 @@ internal class BehovkontraktTest : AbstractEndToEndMediatorTest() { fun vilkårsgrunnlag() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) val behov = testRapid.inspektør.melding(testRapid.inspektør.antall() - 1) assertVedtaksperiodeBehov( behov, @@ -42,12 +51,21 @@ internal class BehovkontraktTest : AbstractEndToEndMediatorTest() { fun ytelser() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) val utbetalinghistorikkbehov = testRapid.inspektør.meldinger("behov").last() assertVedtaksperiodeBehov(utbetalinghistorikkbehov, Sykepengehistorikk) assertSykepengehistorikkdetaljer(utbetalinghistorikkbehov) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar + ) sendVilkårsgrunnlag(0) val behov = testRapid.inspektør.melding(testRapid.inspektør.antall() - 1) assertVedtaksperiodeBehov( @@ -73,9 +91,18 @@ internal class BehovkontraktTest : AbstractEndToEndMediatorTest() { fun simulering() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) val behov = testRapid.inspektør.melding(testRapid.inspektør.antall() - 1) @@ -87,9 +114,18 @@ internal class BehovkontraktTest : AbstractEndToEndMediatorTest() { fun godkjenning() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -102,9 +138,18 @@ internal class BehovkontraktTest : AbstractEndToEndMediatorTest() { fun utbetaling() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -118,21 +163,35 @@ internal class BehovkontraktTest : AbstractEndToEndMediatorTest() { fun annullering() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) sendUtbetalingsgodkjenning(0) sendUtbetaling() - sendAnnullering(testRapid.inspektør.etterspurteBehov(Utbetaling).path("utbetalingId").asText()) + sendAnnullering( + testRapid.inspektør.etterspurteBehov(Utbetaling).path("utbetalingId").asText() + ) val behov = testRapid.inspektør.melding(testRapid.inspektør.antall() - 1) assertUtbetalingBehov(behov, Utbetaling) assertUtbetalingdetaljer(behov, true) } - private fun assertVedtaksperiodeBehov(behov: JsonNode, vararg typer: Aktivitet.Behov.Behovtype) { + private fun assertVedtaksperiodeBehov( + behov: JsonNode, + vararg typer: Aktivitet.Behov.Behovtype + ) { assertBehov(behov, *typer) assertTrue(behov.path("vedtaksperiodeId").asText().isNotEmpty()) } @@ -165,15 +224,27 @@ internal class BehovkontraktTest : AbstractEndToEndMediatorTest() { } private fun assertInntekterForSykepengegrunnlagdetaljer(behov: JsonNode) { - assertDato(behov.path(InntekterForSykepengegrunnlag.name).path("skjæringstidspunkt").asText()) - assertÅrMåned(behov.path(InntekterForSykepengegrunnlag.name).path("beregningStart").asText()) - assertÅrMåned(behov.path(InntekterForSykepengegrunnlag.name).path("beregningSlutt").asText()) + assertDato( + behov.path(InntekterForSykepengegrunnlag.name).path("skjæringstidspunkt").asText() + ) + assertÅrMåned( + behov.path(InntekterForSykepengegrunnlag.name).path("beregningStart").asText() + ) + assertÅrMåned( + behov.path(InntekterForSykepengegrunnlag.name).path("beregningSlutt").asText() + ) } private fun assertInntekterForOpptjeningsvurderingdetaljer(behov: JsonNode) { - assertDato(behov.path(InntekterForOpptjeningsvurdering.name).path("skjæringstidspunkt").asText()) - assertÅrMåned(behov.path(InntekterForOpptjeningsvurdering.name).path("beregningStart").asText()) - assertÅrMåned(behov.path(InntekterForOpptjeningsvurdering.name).path("beregningSlutt").asText()) + assertDato( + behov.path(InntekterForOpptjeningsvurdering.name).path("skjæringstidspunkt").asText() + ) + assertÅrMåned( + behov.path(InntekterForOpptjeningsvurdering.name).path("beregningStart").asText() + ) + assertÅrMåned( + behov.path(InntekterForOpptjeningsvurdering.name).path("beregningSlutt").asText() + ) } private fun assertMedlemskapdetaljer(behov: JsonNode) { @@ -241,7 +312,10 @@ internal class BehovkontraktTest : AbstractEndToEndMediatorTest() { assertTrue(godkjenning.path("kanAvvises").isBoolean) assertTrue(godkjenning.path("omregnedeÅrsinntekter").isArray) assertFalse(godkjenning.path("omregnedeÅrsinntekter").isEmpty) - assertTrue(godkjenning.path("omregnedeÅrsinntekter").path(0).path("organisasjonsnummer").asText().isNotEmpty()) + assertTrue( + godkjenning.path("omregnedeÅrsinntekter").path(0).path("organisasjonsnummer").asText() + .isNotEmpty() + ) assertTrue(godkjenning.path("omregnedeÅrsinntekter").path(0).path("beløp").isDouble) assertTrue(godkjenning.path("behandlingId").asText().isNotEmpty()) assertTrue(godkjenning.path("perioderMedSammeSkjæringstidspunkt").isArray) diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FeriepengeMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FeriepengeMediatorTest.kt index 34567c6061..e531fb233b 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FeriepengeMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FeriepengeMediatorTest.kt @@ -21,150 +21,188 @@ import org.junit.jupiter.api.Test internal class FeriepengeMediatorTest : AbstractEndToEndMediatorTest() { @Test - fun `Beregner feriepenger korrekt for enkel spleisperiode med en utbetaling i infotrygd`() = Toggle.SendFeriepengeOppdrag.enable { - sendNySøknad(SoknadsperiodeDTO(fom = 1.juni(2020), tom = 30.juni(2020), sykmeldingsgrad = 100)) - sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.juni(2020), tom = 30.juni(2020), sykmeldingsgrad = 100)) - ) - sendInntektsmelding( - listOf(Periode(fom = 1.juni(2020), tom = 16.juni(2020))), - førsteFraværsdag = 1.juni(2020) - ) - sendVilkårsgrunnlag(0, skjæringstidspunkt = 1.juni(2020)) - sendYtelser(0) - sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) - sendUtbetalingsgodkjenning(0) - sendUtbetaling() - - sendUtbetalingshistorikkForFeriepenger( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata( - fom = 1.januar(2020), - tom = 31.desember(2020), - utbetalinger = listOf( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Utbetaling( - fom = 1.mars(2020), - tom = 31.mars(2020), - dagsats = 1431.0, - typekode = "5", - utbetalingsgrad = "100", - organisasjonsnummer = ORGNUMMER, - utbetalt = 4.april(2020) - ) - ), - feriepengehistorikk = listOf( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Feriepenger( - orgnummer = ORGNUMMER, - beløp = 3211, - fom = 1.mai(2021), - tom = 31.mai(2021) + fun `Beregner feriepenger korrekt for enkel spleisperiode med en utbetaling i infotrygd`() = + Toggle.SendFeriepengeOppdrag.enable { + sendNySøknad( + SoknadsperiodeDTO( + fom = 1.juni(2020), + tom = 30.juni(2020), + sykmeldingsgrad = 100 + ) + ) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.juni(2020), + tom = 30.juni(2020), + sykmeldingsgrad = 100 ) - ), - arbeidskategorikoder = listOf( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Arbeidskategori( - kode = "01", - fom = 1.mars(2020), - tom = 31.mars(2020) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.juni(2020), tom = 16.juni(2020))), + førsteFraværsdag = 1.juni(2020) + ) + sendVilkårsgrunnlag(0, skjæringstidspunkt = 1.juni(2020)) + sendYtelser(0) + sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) + sendUtbetalingsgodkjenning(0) + sendUtbetaling() + + sendUtbetalingshistorikkForFeriepenger( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata( + fom = 1.januar(2020), + tom = 31.desember(2020), + utbetalinger = listOf( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Utbetaling( + fom = 1.mars(2020), + tom = 31.mars(2020), + dagsats = 1431.0, + typekode = "5", + utbetalingsgrad = "100", + organisasjonsnummer = ORGNUMMER, + utbetalt = 4.april(2020) + ) + ), + feriepengehistorikk = listOf( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Feriepenger( + orgnummer = ORGNUMMER, + beløp = 3211, + fom = 1.mai(2021), + tom = 31.mai(2021) + ) + ), + arbeidskategorikoder = listOf( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Arbeidskategori( + kode = "01", + fom = 1.mars(2020), + tom = 31.mars(2020) + ) ) ) ) - ) - val behov = testRapid.inspektør.melding(testRapid.inspektør.antall() - 1) - val linjer = behov.path("Utbetaling").path("linjer") + val behov = testRapid.inspektør.melding(testRapid.inspektør.antall() - 1) + val linjer = behov.path("Utbetaling").path("linjer") - assertTrue(testRapid.inspektør.behovtypeSisteMelding(Aktivitet.Behov.Behovtype.Utbetaling)) - assertEquals(1, linjer.size()) - assertEquals("Utbetaling", behov.path("@behov")[0].asText()) - assertEquals(ORGNUMMER, behov.path("organisasjonsnummer").asText()) - assertTrue(behov.path("utbetalingId").asText().isNotBlank()) - assertEquals("SPREFAGFER-IOP", linjer[0].path("klassekode").asText()) - assertEquals("ENG", linjer[0].path("satstype").asText()) - assertEquals(1460, linjer[0].path("sats").asInt()) - assertEquals(1460, linjer[0].path("totalbeløp").asInt()) - } + assertTrue(testRapid.inspektør.behovtypeSisteMelding(Aktivitet.Behov.Behovtype.Utbetaling)) + assertEquals(1, linjer.size()) + assertEquals("Utbetaling", behov.path("@behov")[0].asText()) + assertEquals(ORGNUMMER, behov.path("organisasjonsnummer").asText()) + assertTrue(behov.path("utbetalingId").asText().isNotBlank()) + assertEquals("SPREFAGFER-IOP", linjer[0].path("klassekode").asText()) + assertEquals("ENG", linjer[0].path("satstype").asText()) + assertEquals(1460, linjer[0].path("sats").asInt()) + assertEquals(1460, linjer[0].path("totalbeløp").asInt()) + } @Test - fun `Ser bort fra perioder med arbeidskategori som ikke gir rett til feriepenger`() = Toggle.SendFeriepengeOppdrag.enable { - sendNySøknad(SoknadsperiodeDTO(fom = 1.juni(2020), tom = 30.juni(2020), sykmeldingsgrad = 100)) - sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.juni(2020), tom = 30.juni(2020), sykmeldingsgrad = 100)) - ) - sendInntektsmelding( - listOf(Periode(fom = 1.juni(2020), tom = 16.juni(2020))), - førsteFraværsdag = 1.juni(2020) - ) - sendVilkårsgrunnlag(0, skjæringstidspunkt = 1.juni(2020)) - sendYtelser(0) - sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) - sendUtbetalingsgodkjenning(0) - sendUtbetaling() + fun `Ser bort fra perioder med arbeidskategori som ikke gir rett til feriepenger`() = + Toggle.SendFeriepengeOppdrag.enable { + sendNySøknad( + SoknadsperiodeDTO( + fom = 1.juni(2020), + tom = 30.juni(2020), + sykmeldingsgrad = 100 + ) + ) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.juni(2020), + tom = 30.juni(2020), + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.juni(2020), tom = 16.juni(2020))), + førsteFraværsdag = 1.juni(2020) + ) + sendVilkårsgrunnlag(0, skjæringstidspunkt = 1.juni(2020)) + sendYtelser(0) + sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) + sendUtbetalingsgodkjenning(0) + sendUtbetaling() - sendUtbetalingshistorikkForFeriepenger( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata( - fom = 1.januar(2020), - tom = 31.desember(2020), - utbetalinger = listOf( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Utbetaling( - fom = 1.januar(2020), - tom = 31.januar(2020), - utbetalt = 31.januar(2020), - dagsats = 1431.0, - typekode = "5", - utbetalingsgrad = "100", - organisasjonsnummer = ORGNUMMER + sendUtbetalingshistorikkForFeriepenger( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata( + fom = 1.januar(2020), + tom = 31.desember(2020), + utbetalinger = listOf( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Utbetaling( + fom = 1.januar(2020), + tom = 31.januar(2020), + utbetalt = 31.januar(2020), + dagsats = 1431.0, + typekode = "5", + utbetalingsgrad = "100", + organisasjonsnummer = ORGNUMMER + ), + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Utbetaling( + fom = 1.mars(2020), + tom = 31.mars(2020), + utbetalt = 31.mars(2020), + dagsats = 1431.0, + typekode = "5", + utbetalingsgrad = "100", + organisasjonsnummer = ORGNUMMER + ) ), - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Utbetaling( - fom = 1.mars(2020), - tom = 31.mars(2020), - utbetalt = 31.mars(2020), - dagsats = 1431.0, - typekode = "5", - utbetalingsgrad = "100", - organisasjonsnummer = ORGNUMMER - ) - ), - feriepengehistorikk = listOf( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Feriepenger( - orgnummer = ORGNUMMER, - beløp = 3211, - fom = 1.mai(2021), - tom = 31.mai(2021) - ) - ), - arbeidskategorikoder = listOf( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Arbeidskategori( - kode = "07", - fom = 1.januar(2020), - tom = 31.januar(2020) + feriepengehistorikk = listOf( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Feriepenger( + orgnummer = ORGNUMMER, + beløp = 3211, + fom = 1.mai(2021), + tom = 31.mai(2021) + ) ), - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Arbeidskategori( - kode = "01", - fom = 1.mars(2020), - tom = 31.mars(2020) + arbeidskategorikoder = listOf( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Arbeidskategori( + kode = "07", + fom = 1.januar(2020), + tom = 31.januar(2020) + ), + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Arbeidskategori( + kode = "01", + fom = 1.mars(2020), + tom = 31.mars(2020) + ) ) ) ) - ) - val behov = testRapid.inspektør.melding(testRapid.inspektør.antall() - 1) - val linjer = behov.path("Utbetaling").path("linjer") + val behov = testRapid.inspektør.melding(testRapid.inspektør.antall() - 1) + val linjer = behov.path("Utbetaling").path("linjer") - assertTrue(testRapid.inspektør.behovtypeSisteMelding(Aktivitet.Behov.Behovtype.Utbetaling)) - assertEquals(1, linjer.size()) - assertEquals("Utbetaling", behov.path("@behov")[0].asText()) - assertEquals(ORGNUMMER, behov.path("organisasjonsnummer").asText()) - assertTrue(behov.path("utbetalingId").asText().isNotBlank()) - assertEquals("SPREFAGFER-IOP", linjer[0].path("klassekode").asText()) - assertEquals("ENG", linjer[0].path("satstype").asText()) - assertEquals(1460, linjer[0].path("sats").asInt()) - assertEquals(1460, linjer[0].path("totalbeløp").asInt()) - } + assertTrue(testRapid.inspektør.behovtypeSisteMelding(Aktivitet.Behov.Behovtype.Utbetaling)) + assertEquals(1, linjer.size()) + assertEquals("Utbetaling", behov.path("@behov")[0].asText()) + assertEquals(ORGNUMMER, behov.path("organisasjonsnummer").asText()) + assertTrue(behov.path("utbetalingId").asText().isNotBlank()) + assertEquals("SPREFAGFER-IOP", linjer[0].path("klassekode").asText()) + assertEquals("ENG", linjer[0].path("satstype").asText()) + assertEquals(1460, linjer[0].path("sats").asInt()) + assertEquals(1460, linjer[0].path("totalbeløp").asInt()) + } @Test fun `Ukjent arbeidskategorikode tolkes som tom`() = Toggle.SendFeriepengeOppdrag.enable { - sendNySøknad(SoknadsperiodeDTO(fom = 1.juni(2020), tom = 30.juni(2020), sykmeldingsgrad = 100)) + sendNySøknad( + SoknadsperiodeDTO( + fom = 1.juni(2020), + tom = 30.juni(2020), + sykmeldingsgrad = 100 + ) + ) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.juni(2020), tom = 30.juni(2020), sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.juni(2020), + tom = 30.juni(2020), + sykmeldingsgrad = 100 + ) + ) ) sendInntektsmelding( listOf(Periode(fom = 1.juni(2020), tom = 16.juni(2020))), @@ -238,97 +276,110 @@ internal class FeriepengeMediatorTest : AbstractEndToEndMediatorTest() { } @Test - fun `Sjekker at orgnummer på utbetalingsbehov blir riktig med flere arbeidsgivere`() = Toggle.SendFeriepengeOppdrag.enable { - sendNySøknad(SoknadsperiodeDTO(fom = 1.juni(2020), tom = 30.juni(2020), sykmeldingsgrad = 100)) - sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.juni(2020), tom = 30.juni(2020), sykmeldingsgrad = 100)) - ) - sendInntektsmelding( - listOf(Periode(fom = 1.juni(2020), tom = 16.juni(2020))), - førsteFraværsdag = 1.juni(2020) - ) - sendVilkårsgrunnlag(0, skjæringstidspunkt = 1.juni(2020)) - sendYtelser(0) - sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) - sendUtbetalingsgodkjenning(0) - sendUtbetaling() + fun `Sjekker at orgnummer på utbetalingsbehov blir riktig med flere arbeidsgivere`() = + Toggle.SendFeriepengeOppdrag.enable { + sendNySøknad( + SoknadsperiodeDTO( + fom = 1.juni(2020), + tom = 30.juni(2020), + sykmeldingsgrad = 100 + ) + ) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.juni(2020), + tom = 30.juni(2020), + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.juni(2020), tom = 16.juni(2020))), + førsteFraværsdag = 1.juni(2020) + ) + sendVilkårsgrunnlag(0, skjæringstidspunkt = 1.juni(2020)) + sendYtelser(0) + sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) + sendUtbetalingsgodkjenning(0) + sendUtbetaling() - sendUtbetalingshistorikkForFeriepenger( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata( - fom = 1.januar(2020), - tom = 31.desember(2020), - utbetalinger = listOf( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Utbetaling( - fom = 1.mars(2020), - tom = 31.mars(2020), - utbetalt = 31.mars(2020), - dagsats = 1431.0, - typekode = "5", - utbetalingsgrad = "100", - organisasjonsnummer = ORGNUMMER + sendUtbetalingshistorikkForFeriepenger( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata( + fom = 1.januar(2020), + tom = 31.desember(2020), + utbetalinger = listOf( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Utbetaling( + fom = 1.mars(2020), + tom = 31.mars(2020), + utbetalt = 31.mars(2020), + dagsats = 1431.0, + typekode = "5", + utbetalingsgrad = "100", + organisasjonsnummer = ORGNUMMER + ), + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Utbetaling( + fom = 1.september(2020), + tom = 30.september(2020), + utbetalt = 30.september(2020), + dagsats = 546.0, + typekode = "5", + utbetalingsgrad = "100", + organisasjonsnummer = "321654987" + ) ), - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Utbetaling( - fom = 1.september(2020), - tom = 30.september(2020), - utbetalt = 30.september(2020), - dagsats = 546.0, - typekode = "5", - utbetalingsgrad = "100", - organisasjonsnummer = "321654987" - ) - ), - feriepengehistorikk = listOf( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Feriepenger( - orgnummer = ORGNUMMER, - beløp = 3211, - fom = 1.mai(2021), - tom = 31.mai(2021) + feriepengehistorikk = listOf( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Feriepenger( + orgnummer = ORGNUMMER, + beløp = 3211, + fom = 1.mai(2021), + tom = 31.mai(2021) + ), + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Feriepenger( + orgnummer = "321654987", + beløp = 1225, + fom = 1.mai(2021), + tom = 31.mai(2021) + ) ), - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Feriepenger( - orgnummer = "321654987", - beløp = 1225, - fom = 1.mai(2021), - tom = 31.mai(2021) - ) - ), - arbeidskategorikoder = listOf( - TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Arbeidskategori( - kode = "01", - fom = 1.mars(2020), - tom = 30.september(2020) + arbeidskategorikoder = listOf( + TestMessageFactory.UtbetalingshistorikkForFeriepengerTestdata.Arbeidskategori( + kode = "01", + fom = 1.mars(2020), + tom = 30.september(2020) + ) ) ) ) - ) - val behov1 = testRapid.inspektør.melding(testRapid.inspektør.antall() - 2) - val linjer1 = behov1.path("Utbetaling").path("linjer") + val behov1 = testRapid.inspektør.melding(testRapid.inspektør.antall() - 2) + val linjer1 = behov1.path("Utbetaling").path("linjer") - assertTrue(testRapid.inspektør.behovtypeSisteMelding(Aktivitet.Behov.Behovtype.Utbetaling)) - assertEquals(1, linjer1.size()) - assertEquals("Utbetaling", behov1.path("@behov")[0].asText()) - assertEquals(ORGNUMMER, behov1.path("organisasjonsnummer").asText()) - val utbetalingId1 = behov1.path("utbetalingId").asText() - assertTrue(utbetalingId1.isNotBlank()) - assertEquals("SPREFAGFER-IOP", linjer1[0].path("klassekode").asText()) - assertEquals("ENG", linjer1[0].path("satstype").asText()) - assertEquals(1460, linjer1[0].path("sats").asInt()) - assertEquals(1460, linjer1[0].path("totalbeløp").asInt()) + assertTrue(testRapid.inspektør.behovtypeSisteMelding(Aktivitet.Behov.Behovtype.Utbetaling)) + assertEquals(1, linjer1.size()) + assertEquals("Utbetaling", behov1.path("@behov")[0].asText()) + assertEquals(ORGNUMMER, behov1.path("organisasjonsnummer").asText()) + val utbetalingId1 = behov1.path("utbetalingId").asText() + assertTrue(utbetalingId1.isNotBlank()) + assertEquals("SPREFAGFER-IOP", linjer1[0].path("klassekode").asText()) + assertEquals("ENG", linjer1[0].path("satstype").asText()) + assertEquals(1460, linjer1[0].path("sats").asInt()) + assertEquals(1460, linjer1[0].path("totalbeløp").asInt()) - val behov2 = testRapid.inspektør.melding(testRapid.inspektør.antall() - 1) - val linjer2 = behov2.path("Utbetaling").path("linjer") + val behov2 = testRapid.inspektør.melding(testRapid.inspektør.antall() - 1) + val linjer2 = behov2.path("Utbetaling").path("linjer") - assertTrue(testRapid.inspektør.behovtypeSisteMelding(Aktivitet.Behov.Behovtype.Utbetaling)) - assertEquals(1, linjer2.size()) - assertEquals("Utbetaling", behov2.path("@behov")[0].asText()) - assertEquals("321654987", behov2.path("organisasjonsnummer").asText()) - val utbetalingId2 = behov2.path("utbetalingId").asText() - assertTrue(utbetalingId2.isNotBlank()) - assertEquals("SPREFAGFER-IOP", linjer2[0].path("klassekode").asText()) - assertEquals("ENG", linjer2[0].path("satstype").asText()) - assertEquals(-334, linjer2[0].path("sats").asInt()) - assertEquals(-334, linjer2[0].path("totalbeløp").asInt()) + assertTrue(testRapid.inspektør.behovtypeSisteMelding(Aktivitet.Behov.Behovtype.Utbetaling)) + assertEquals(1, linjer2.size()) + assertEquals("Utbetaling", behov2.path("@behov")[0].asText()) + assertEquals("321654987", behov2.path("organisasjonsnummer").asText()) + val utbetalingId2 = behov2.path("utbetalingId").asText() + assertTrue(utbetalingId2.isNotBlank()) + assertEquals("SPREFAGFER-IOP", linjer2[0].path("klassekode").asText()) + assertEquals("ENG", linjer2[0].path("satstype").asText()) + assertEquals(-334, linjer2[0].path("sats").asInt()) + assertEquals(-334, linjer2[0].path("totalbeløp").asInt()) - assertNotEquals(utbetalingId1, utbetalingId2) - } + assertNotEquals(utbetalingId1, utbetalingId2) + } } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FjerneGodkjenningsbehovOgVedtakFattetTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FjerneGodkjenningsbehovOgVedtakFattetTest.kt index eef7c5cc64..148bb17143 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FjerneGodkjenningsbehovOgVedtakFattetTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FjerneGodkjenningsbehovOgVedtakFattetTest.kt @@ -8,11 +8,19 @@ import org.intellij.lang.annotations.Language import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -internal class FjerneGodkjenningsbehovOgVedtakFattetTest: AbstractEndToEndMediatorTest() { +internal class FjerneGodkjenningsbehovOgVedtakFattetTest : AbstractEndToEndMediatorTest() { @Test fun `avsluttet uten vedtak`() { - val søknadId = sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 16.januar, sykmeldingsgrad = 100))) + val søknadId = sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 16.januar, + sykmeldingsgrad = 100 + ) + ) + ) @Language("JSON") val forventetAvsluttetUtenVedtak = """ @@ -34,4 +42,4 @@ internal class FjerneGodkjenningsbehovOgVedtakFattetTest: AbstractEndToEndMediat assertEquals(emptyList(), testRapid.inspektør.meldinger("avsluttet_med_vedtak")) } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FlereArbeidsgivereMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FlereArbeidsgivereMediatorTest.kt index 5f94f55219..c49948af03 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FlereArbeidsgivereMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FlereArbeidsgivereMediatorTest.kt @@ -15,9 +15,18 @@ internal class FlereArbeidsgivereMediatorTest : AbstractEndToEndMediatorTest() { fun `overstyring av arbeidsforhold fører til tilstandsendring`() { val a1 = "ag1" val a2 = "ag2" - sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100), orgnummer = a1) + sendNySøknad( + SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100), + orgnummer = a1 + ) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), orgnummer = a1 ) sendInntektsmelding(listOf(Periode(1.januar, 16.januar)), 1.januar, orgnummer = a1) @@ -26,24 +35,37 @@ internal class FlereArbeidsgivereMediatorTest : AbstractEndToEndMediatorTest() { skjæringstidspunkt = 1.januar, orgnummer = a1, arbeidsforhold = listOf( - TestMessageFactory.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - TestMessageFactory.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + TestMessageFactory.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + TestMessageFactory.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntekterForSykepengegrunnlag = sykepengegrunnlag( 1.januar, listOf( - TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(INNTEKT, a1), - TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(1000.0, a2), - ) + TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(INNTEKT, a1), + TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(1000.0, a2), + ) ) ) sendYtelser(0, orgnummer = a1) sendSimulering(0, orgnummer = a1, status = SimuleringMessage.Simuleringstatus.OK) - sendOverstyringArbeidsforhold(1.januar, listOf( + sendOverstyringArbeidsforhold( + 1.januar, listOf( TestMessageFactory.ArbeidsforholdOverstyrt( - a2, - true, - "forklaring" - ))) + a2, + true, + "forklaring" + ) + ) + ) sendYtelser(0, orgnummer = a1) sendSimulering(0, orgnummer = a1, status = SimuleringMessage.Simuleringstatus.OK) assertTilstander( diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ForkastetVedtaksperiodeTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ForkastetVedtaksperiodeTest.kt index 3cf95dfb51..5b066986a2 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ForkastetVedtaksperiodeTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/ForkastetVedtaksperiodeTest.kt @@ -19,13 +19,30 @@ internal class ForkastetVedtaksperiodeTest : AbstractEndToEndMediatorTest() { fun `vedtaksperiode_forkastet`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) val søknadId = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) val søknadId2 = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 27.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 27.januar, + sykmeldingsgrad = 100 + ) + ) ) - assertTilstander(0, "AVVENTER_INFOTRYGDHISTORIKK", "AVVENTER_INNTEKTSMELDING", "TIL_INFOTRYGD") + assertTilstander( + 0, + "AVVENTER_INFOTRYGDHISTORIKK", + "AVVENTER_INNTEKTSMELDING", + "TIL_INFOTRYGD" + ) assertTilstander(1, "TIL_INFOTRYGD") testRapid.assertAntallUtgåendeMeldinger("vedtaksperiode_forkastet", 2) @@ -74,16 +91,28 @@ internal class ForkastetVedtaksperiodeTest : AbstractEndToEndMediatorTest() { fun `historiskeFolkeregisteridenter test`() { val historiskFnr = "123" val nyttFnr = "111" - sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100), fnr = historiskFnr) + sendNySøknad( + SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100), + fnr = historiskFnr + ) sendSøknad( historiskFnr, listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)), historiskeFolkeregisteridenter = emptyList() ) - sendNySøknad(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100), fnr = nyttFnr) + sendNySøknad( + SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100), + fnr = nyttFnr + ) val søknadId2 = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.mars, + tom = 31.mars, + sykmeldingsgrad = 100 + ) + ), historiskeFolkeregisteridenter = listOf(historiskFnr), fnr = nyttFnr ) @@ -115,13 +144,25 @@ internal class ForkastetVedtaksperiodeTest : AbstractEndToEndMediatorTest() { fun `vedtaksperide_forkastet sender med flagg om den forkastede vedtaksperiode skal be om arbeidsgiveropplysninger`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) val søknadId1 = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), sendTilGosys = true ) sendNySøknad(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100)) val søknadId2 = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.februar, + tom = 28.februar, + sykmeldingsgrad = 100 + ) + ), sendTilGosys = true ) diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FrilanserTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FrilanserTest.kt index 967ca9248f..6c5f8c04cb 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FrilanserTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/FrilanserTest.kt @@ -9,9 +9,21 @@ internal class FrilanserTest : AbstractEndToEndMediatorTest() { @Test fun `frilansersøknad`() { - sendNySøknadFrilanser(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + sendNySøknadFrilanser( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) sendFrilanssøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) assertTilstander(0, "TIL_INFOTRYGD") } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/GenerellMeldingskontraktTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/GenerellMeldingskontraktTest.kt index 6211086b1d..c334163845 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/GenerellMeldingskontraktTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/GenerellMeldingskontraktTest.kt @@ -1,13 +1,13 @@ package no.nav.helse.spleis.mediator.e2e import com.fasterxml.jackson.databind.JsonNode +import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import java.time.LocalDate import java.time.LocalDateTime import java.util.UUID import no.nav.helse.flex.sykepengesoknad.kafka.SoknadsperiodeDTO import no.nav.helse.januar import no.nav.helse.person.aktivitetslogg.Aktivitet -import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate import no.nav.inntektsmeldingkontrakt.Periode import org.junit.jupiter.api.Assertions.assertDoesNotThrow import org.junit.jupiter.api.Assertions.assertEquals @@ -20,11 +20,22 @@ internal class GenerellMeldingskontraktTest : AbstractEndToEndMediatorTest() { fun `vedtaksperiode endret`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) val søknadId = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) - val vedtaksperiodeOpprettet = testRapid.inspektør.meldinger("vedtaksperiode_opprettet").single() + val vedtaksperiodeOpprettet = + testRapid.inspektør.meldinger("vedtaksperiode_opprettet").single() val vedtaksperiodeEndret = testRapid.inspektør.meldinger("vedtaksperiode_endret").first() - assertTrue(testRapid.inspektør.indeksFor(vedtaksperiodeOpprettet) < testRapid.inspektør.indeksFor(vedtaksperiodeEndret)) { + assertTrue( + testRapid.inspektør.indeksFor(vedtaksperiodeOpprettet) < testRapid.inspektør.indeksFor( + vedtaksperiodeEndret + ) + ) { "vedtaksperiode_opprettet må sendes på rapid før vedtaksperiode_endret" } assertVedtaksperiodeOpprettet(vedtaksperiodeOpprettet, søknadId, "sendt_søknad_nav") @@ -35,18 +46,35 @@ internal class GenerellMeldingskontraktTest : AbstractEndToEndMediatorTest() { fun `vedtaksperiode forkastet`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) val søknadId = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) val søknadId2 = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 27.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 27.januar, + sykmeldingsgrad = 100 + ) + ) ) val vedtaksperiodeForkastet = testRapid.inspektør.meldinger("vedtaksperiode_forkastet") assertEquals(2, vedtaksperiodeForkastet.size) assertVedtaksperiodeForkastet(vedtaksperiodeForkastet[0], søknadId2, "sendt_søknad_nav") assertVedtaksperiodeForkastet(vedtaksperiodeForkastet[1], søknadId2, "sendt_søknad_nav") - val vedtaksperiodeOpprettet = testRapid.inspektør.meldinger("vedtaksperiode_opprettet").last() - assertTrue(testRapid.inspektør.indeksFor(vedtaksperiodeOpprettet) < testRapid.inspektør.indeksFor(vedtaksperiodeForkastet[1])) { + val vedtaksperiodeOpprettet = + testRapid.inspektør.meldinger("vedtaksperiode_opprettet").last() + assertTrue( + testRapid.inspektør.indeksFor(vedtaksperiodeOpprettet) < testRapid.inspektør.indeksFor( + vedtaksperiodeForkastet[1] + ) + ) { "vedtaksperiode_opprettet må sendes på rapid før vedtaksperiode_forkastet" } } @@ -55,22 +83,44 @@ internal class GenerellMeldingskontraktTest : AbstractEndToEndMediatorTest() { fun `vedtaksperiode annullert`() { nyttVedtak() - sendAnnullering(testRapid.inspektør.etterspurteBehov(Aktivitet.Behov.Behovtype.Utbetaling).path("utbetalingId").asText()) + sendAnnullering( + testRapid.inspektør.etterspurteBehov(Aktivitet.Behov.Behovtype.Utbetaling) + .path("utbetalingId").asText() + ) - val meldingOmAnnullertVedtaksperiode = testRapid.inspektør.meldinger("vedtaksperiode_annullert").first() + val meldingOmAnnullertVedtaksperiode = + testRapid.inspektør.meldinger("vedtaksperiode_annullert").first() - assertEquals(LocalDate.of(2018, 1, 1), meldingOmAnnullertVedtaksperiode["fom"].asLocalDate()) - assertEquals(LocalDate.of(2018, 1, 31), meldingOmAnnullertVedtaksperiode["tom"].asLocalDate()) - assertEquals(UNG_PERSON_FNR_2018, meldingOmAnnullertVedtaksperiode["fødselsnummer"].asText()) + assertEquals( + LocalDate.of(2018, 1, 1), + meldingOmAnnullertVedtaksperiode["fom"].asLocalDate() + ) + assertEquals( + LocalDate.of(2018, 1, 31), + meldingOmAnnullertVedtaksperiode["tom"].asLocalDate() + ) + assertEquals( + UNG_PERSON_FNR_2018, + meldingOmAnnullertVedtaksperiode["fødselsnummer"].asText() + ) assertEquals(ORGNUMMER, meldingOmAnnullertVedtaksperiode["organisasjonsnummer"].asText()) - assertEquals(testRapid.inspektør.vedtaksperiodeId(0), UUID.fromString(meldingOmAnnullertVedtaksperiode["vedtaksperiodeId"].asText())) + assertEquals( + testRapid.inspektør.vedtaksperiodeId(0), + UUID.fromString(meldingOmAnnullertVedtaksperiode["vedtaksperiodeId"].asText()) + ) } @Test fun `behov`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) val (meldingId, _) = sendInntektsmelding( listOf(Periode(fom = 3.januar, tom = 18.januar)), @@ -88,13 +138,23 @@ internal class GenerellMeldingskontraktTest : AbstractEndToEndMediatorTest() { ) sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) val behov = testRapid.inspektør.siste("behov") assertBehov(behov, null, "inntektsmeldinger_replay") } - private fun assertVedtaksperiodeEndret(melding: JsonNode, originalMeldingId: UUID, originalMeldingtype: String) { + private fun assertVedtaksperiodeEndret( + melding: JsonNode, + originalMeldingId: UUID, + originalMeldingtype: String + ) { assertStandardinformasjon(melding) assertSporingsinformasjon(melding, originalMeldingId, originalMeldingtype) assertTrue(melding.path("fødselsnummer").asText().isNotEmpty()) @@ -108,7 +168,11 @@ internal class GenerellMeldingskontraktTest : AbstractEndToEndMediatorTest() { assertDatotid(melding.path("makstid").asText()) } - private fun assertVedtaksperiodeOpprettet(melding: JsonNode, originalMeldingId: UUID, originalMeldingtype: String) { + private fun assertVedtaksperiodeOpprettet( + melding: JsonNode, + originalMeldingId: UUID, + originalMeldingtype: String + ) { assertStandardinformasjon(melding) assertSporingsinformasjon(melding, originalMeldingId, originalMeldingtype) assertTrue(melding.path("fødselsnummer").asText().isNotEmpty()) @@ -119,7 +183,11 @@ internal class GenerellMeldingskontraktTest : AbstractEndToEndMediatorTest() { assertDato(melding.path("tom").asText()) } - private fun assertVedtaksperiodeForkastet(melding: JsonNode, originalMeldingId: UUID, originalMeldingtype: String) { + private fun assertVedtaksperiodeForkastet( + melding: JsonNode, + originalMeldingId: UUID, + originalMeldingtype: String + ) { assertStandardinformasjon(melding) assertSporingsinformasjon(melding, originalMeldingId, originalMeldingtype) assertTrue(melding.path("fødselsnummer").asText().isNotEmpty()) @@ -131,7 +199,11 @@ internal class GenerellMeldingskontraktTest : AbstractEndToEndMediatorTest() { assertTrue(melding.path("hendelser").isArray) } - private fun assertBehov(melding: JsonNode, originalMeldingId: UUID?, originalMeldingtype: String) { + private fun assertBehov( + melding: JsonNode, + originalMeldingId: UUID?, + originalMeldingtype: String + ) { assertStandardinformasjon(melding) assertSporingsinformasjon(melding, originalMeldingId, originalMeldingtype) assertTrue(melding.path("fødselsnummer").asText().isNotEmpty()) @@ -146,10 +218,20 @@ internal class GenerellMeldingskontraktTest : AbstractEndToEndMediatorTest() { assertDatotid(melding.path("@opprettet").asText()) } - private fun assertSporingsinformasjon(melding: JsonNode, originalMeldingId: UUID?, originalMeldingtype: String) { - assertEquals(originalMeldingtype, melding.path("@forårsaket_av").path("event_name").asText()) + private fun assertSporingsinformasjon( + melding: JsonNode, + originalMeldingId: UUID?, + originalMeldingtype: String + ) { + assertEquals( + originalMeldingtype, + melding.path("@forårsaket_av").path("event_name").asText() + ) if (originalMeldingId == null) return - assertEquals(originalMeldingId.toString(), melding.path("@forårsaket_av").path("id").asText()) + assertEquals( + originalMeldingId.toString(), + melding.path("@forårsaket_av").path("id").asText() + ) } private fun assertDato(tekst: String) { diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/HendelseYtelserMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/HendelseYtelserMediatorTest.kt index 3c2cf3a4ba..a8537de537 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/HendelseYtelserMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/HendelseYtelserMediatorTest.kt @@ -18,11 +18,23 @@ internal class HendelseYtelserMediatorTest : AbstractEndToEndMediatorTest() { fun `Periode med overlappende pleiepenger får varsel`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) - sendYtelser(vedtaksperiodeIndeks = 0, pleiepenger = listOf(PleiepengerTestdata(3.januar, 26.januar, 100))) + sendYtelser( + vedtaksperiodeIndeks = 0, + pleiepenger = listOf(PleiepengerTestdata(3.januar, 26.januar, 100)) + ) assertTilstander( 0, @@ -39,9 +51,18 @@ internal class HendelseYtelserMediatorTest : AbstractEndToEndMediatorTest() { fun `Periode med overlappende omsorgspenger får varsel`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser( vedtaksperiodeIndeks = 0, @@ -63,9 +84,18 @@ internal class HendelseYtelserMediatorTest : AbstractEndToEndMediatorTest() { fun `Periode med overlappende opplæringspenger får varsel`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser( vedtaksperiodeIndeks = 0, @@ -87,9 +117,18 @@ internal class HendelseYtelserMediatorTest : AbstractEndToEndMediatorTest() { fun `Periode med overlappende institusjonsopphold blir sendt til Infotrygd`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser( vedtaksperiodeIndeks = 0, @@ -117,32 +156,47 @@ internal class HendelseYtelserMediatorTest : AbstractEndToEndMediatorTest() { @Test fun `Arbeidskategorikode ulik 01 kaster perioden til Infotrygd`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100))) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar + ) sendVilkårsgrunnlag(0) - sendUtbetalingshistorikkEtterInfotrygdendring(listOf(UtbetalingshistorikkTestdata( - fom = 1.januar, - tom = 2.januar, - arbeidskategorikode = "07", - utbetalteSykeperioder = listOf( - UtbetalingshistorikkTestdata.UtbetaltSykeperiode( + sendUtbetalingshistorikkEtterInfotrygdendring( + listOf( + UtbetalingshistorikkTestdata( fom = 1.januar, tom = 2.januar, - dagsats = 1400.0, - typekode = "0", - utbetalingsgrad = "100", - organisasjonsnummer = ORGNUMMER - ) - ), - inntektsopplysninger = listOf( - UtbetalingshistorikkTestdata.Inntektsopplysninger( - sykepengerFom = 1.november(2017), - inntekt = 36000.0, - organisasjonsnummer = ORGNUMMER, - refusjonTilArbeidsgiver = true + arbeidskategorikode = "07", + utbetalteSykeperioder = listOf( + UtbetalingshistorikkTestdata.UtbetaltSykeperiode( + fom = 1.januar, + tom = 2.januar, + dagsats = 1400.0, + typekode = "0", + utbetalingsgrad = "100", + organisasjonsnummer = ORGNUMMER + ) + ), + inntektsopplysninger = listOf( + UtbetalingshistorikkTestdata.Inntektsopplysninger( + sykepengerFom = 1.november(2017), + inntekt = 36000.0, + organisasjonsnummer = ORGNUMMER, + refusjonTilArbeidsgiver = true + ) + ) ) ) - ))) + ) assertTilstander( 0, @@ -159,16 +213,27 @@ internal class HendelseYtelserMediatorTest : AbstractEndToEndMediatorTest() { fun `Passerer validering når utbetalte sykeperioder er tom`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) - ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) - val historikk = listOf(UtbetalingshistorikkTestdata( - fom = 1.januar, - tom = 26.januar, - arbeidskategorikode = "07", - utbetalteSykeperioder = emptyList(), - inntektsopplysninger = emptyList() - )) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar + ) + val historikk = listOf( + UtbetalingshistorikkTestdata( + fom = 1.januar, + tom = 26.januar, + arbeidskategorikode = "07", + utbetalteSykeperioder = emptyList(), + inntektsopplysninger = emptyList() + ) + ) sendVilkårsgrunnlag(0) sendYtelser(vedtaksperiodeIndeks = 0) @@ -187,34 +252,45 @@ internal class HendelseYtelserMediatorTest : AbstractEndToEndMediatorTest() { fun `Utbetalingsgrad 000 fører til ugyldig utbetalingsperiode i sykepengehistorikken`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) - val historikk = listOf(UtbetalingshistorikkTestdata( - fom = 1.januar, - tom = 2.januar, - arbeidskategorikode = "01", - utbetalteSykeperioder = listOf( - UtbetalingshistorikkTestdata.UtbetaltSykeperiode( - fom = 1.januar, - tom = 2.januar, - dagsats = 1400.0, - typekode = "5", - utbetalingsgrad = "000", - organisasjonsnummer = ORGNUMMER - ) - ), - inntektsopplysninger = listOf( - UtbetalingshistorikkTestdata.Inntektsopplysninger( - sykepengerFom = 1.januar, - inntekt = 36000.0, - organisasjonsnummer = ORGNUMMER, - refusjonTilArbeidsgiver = true + val historikk = listOf( + UtbetalingshistorikkTestdata( + fom = 1.januar, + tom = 2.januar, + arbeidskategorikode = "01", + utbetalteSykeperioder = listOf( + UtbetalingshistorikkTestdata.UtbetaltSykeperiode( + fom = 1.januar, + tom = 2.januar, + dagsats = 1400.0, + typekode = "5", + utbetalingsgrad = "000", + organisasjonsnummer = ORGNUMMER + ) + ), + inntektsopplysninger = listOf( + UtbetalingshistorikkTestdata.Inntektsopplysninger( + sykepengerFom = 1.januar, + inntekt = 36000.0, + organisasjonsnummer = ORGNUMMER, + refusjonTilArbeidsgiver = true + ) ) ) - )) + ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar + ) sendVilkårsgrunnlag(0) sendUtbetalingshistorikkEtterInfotrygdendring(historikk) sendYtelser(0) @@ -234,50 +310,61 @@ internal class HendelseYtelserMediatorTest : AbstractEndToEndMediatorTest() { fun `Marker ikke historiske ferieperioder som ugyldig basert på utbetalingsgrad`() { sendNySøknad(SoknadsperiodeDTO(fom = 9.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 9.januar, tom = 31.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 9.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) ) - val historikk = listOf(UtbetalingshistorikkTestdata( - fom = 1.januar, - tom = 8.januar, - arbeidskategorikode = "01", - utbetalteSykeperioder = listOf( - UtbetalingshistorikkTestdata.UtbetaltSykeperiode( - fom = 1.desember(2017), - tom = 5.desember(2017), - dagsats = 1400.0, - typekode = "5", - utbetalingsgrad = "100", - organisasjonsnummer = ORGNUMMER - ), - UtbetalingshistorikkTestdata.UtbetaltSykeperiode( - fom = 6.desember(2017), - tom = 10.desember(2017), - dagsats = 1400.0, - typekode = "9", - utbetalingsgrad = "", - organisasjonsnummer = ORGNUMMER - ), - UtbetalingshistorikkTestdata.UtbetaltSykeperiode( - fom = 11.desember(2017), - tom = 24.desember(2017), - dagsats = 1400.0, - typekode = "5", - utbetalingsgrad = "100", - organisasjonsnummer = ORGNUMMER + val historikk = listOf( + UtbetalingshistorikkTestdata( + fom = 1.januar, + tom = 8.januar, + arbeidskategorikode = "01", + utbetalteSykeperioder = listOf( + UtbetalingshistorikkTestdata.UtbetaltSykeperiode( + fom = 1.desember(2017), + tom = 5.desember(2017), + dagsats = 1400.0, + typekode = "5", + utbetalingsgrad = "100", + organisasjonsnummer = ORGNUMMER + ), + UtbetalingshistorikkTestdata.UtbetaltSykeperiode( + fom = 6.desember(2017), + tom = 10.desember(2017), + dagsats = 1400.0, + typekode = "9", + utbetalingsgrad = "", + organisasjonsnummer = ORGNUMMER + ), + UtbetalingshistorikkTestdata.UtbetaltSykeperiode( + fom = 11.desember(2017), + tom = 24.desember(2017), + dagsats = 1400.0, + typekode = "5", + utbetalingsgrad = "100", + organisasjonsnummer = ORGNUMMER + ), ), - ), - inntektsopplysninger = listOf( - UtbetalingshistorikkTestdata.Inntektsopplysninger( - sykepengerFom = 1.desember(2017), - inntekt = 36000.0, - organisasjonsnummer = ORGNUMMER, - refusjonTilArbeidsgiver = true + inntektsopplysninger = listOf( + UtbetalingshistorikkTestdata.Inntektsopplysninger( + sykepengerFom = 1.desember(2017), + inntekt = 36000.0, + organisasjonsnummer = ORGNUMMER, + refusjonTilArbeidsgiver = true + ) ) ) - )) + ) - sendInntektsmelding(listOf(Periode(fom = 9.januar, tom = 25.januar)), førsteFraværsdag = 9.januar) + sendInntektsmelding( + listOf(Periode(fom = 9.januar, tom = 25.januar)), + førsteFraværsdag = 9.januar + ) sendVilkårsgrunnlag(0) sendYtelser(0) diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InfotrygdendringTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InfotrygdendringTest.kt index e7946ffdd7..8f5041d3b8 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InfotrygdendringTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InfotrygdendringTest.kt @@ -20,7 +20,7 @@ internal class InfotrygdendringTest : AbstractEndToEndMediatorTest() { fun `sender infotrygdendring`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendInfotrygdendring() - val behov = testRapid.inspektør.melding(testRapid.inspektør.antall()-1) + val behov = testRapid.inspektør.melding(testRapid.inspektør.antall() - 1) assertBehov(behov) assertSykepengehistorikkdetaljer(behov) } @@ -34,7 +34,15 @@ internal class InfotrygdendringTest : AbstractEndToEndMediatorTest() { @Test fun `utgående melding om overlappende infotrygdutbetaling`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100))) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) sendInfotrygdendring() sendUtbetalingshistorikkEtterInfotrygdendring( listOf( @@ -56,19 +64,27 @@ internal class InfotrygdendringTest : AbstractEndToEndMediatorTest() { ) ) ) - val overlappendeInfotrygdperiodeEtterInfotrygdendringEvent = testRapid.inspektør.siste("overlappende_infotrygdperioder") + val overlappendeInfotrygdperiodeEtterInfotrygdendringEvent = + testRapid.inspektør.siste("overlappende_infotrygdperioder") assertNotNull(overlappendeInfotrygdperiodeEtterInfotrygdendringEvent) } private fun assertSykepengehistorikkdetaljer(behov: JsonNode) { - assertDato(behov.path(Aktivitet.Behov.Behovtype.Sykepengehistorikk.name).path("historikkFom").asText()) - assertDato(behov.path(Aktivitet.Behov.Behovtype.Sykepengehistorikk.name).path("historikkTom").asText()) + assertDato( + behov.path(Aktivitet.Behov.Behovtype.Sykepengehistorikk.name).path("historikkFom") + .asText() + ) + assertDato( + behov.path(Aktivitet.Behov.Behovtype.Sykepengehistorikk.name).path("historikkTom") + .asText() + ) } private fun assertDato(tekst: String) { assertTrue(tekst.isNotEmpty()) Assertions.assertDoesNotThrow { LocalDate.parse(tekst) } } + private fun assertDatotid(tekst: String) { assertTrue(tekst.isNotEmpty()) Assertions.assertDoesNotThrow { LocalDateTime.parse(tekst) } @@ -82,7 +98,10 @@ internal class InfotrygdendringTest : AbstractEndToEndMediatorTest() { assertDatotid(behov.path("@opprettet").asText()) assertTrue(id.isNotEmpty()) Assertions.assertDoesNotThrow { UUID.fromString(id) } - assertEquals(Aktivitet.Behov.Behovtype.Sykepengehistorikk.name, behov.path("@behov").firstOrNull()?.asText()) + assertEquals( + Aktivitet.Behov.Behovtype.Sykepengehistorikk.name, + behov.path("@behov").firstOrNull()?.asText() + ) } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InntekterFraSkattLagtTilGrunnKontraktTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InntekterFraSkattLagtTilGrunnKontraktTest.kt index b1d38a63f0..b1f5d0fa02 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InntekterFraSkattLagtTilGrunnKontraktTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InntekterFraSkattLagtTilGrunnKontraktTest.kt @@ -26,15 +26,26 @@ internal class InntekterFraSkattLagtTilGrunnKontraktTest : AbstractEndToEndMedia } """ - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100))) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) sendSykepengegrunnlagForArbeidsgiver( vedtaksperiodeIndeks = 0, skjæringstidspunkt = 1.januar, orgnummer = ORGNUMMER, inntekterForSykepengegrunnlag = sykepengegrunnlag( 1.januar, listOf( - TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(INNTEKT, ORGNUMMER), - ) + TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt( + INNTEKT, + ORGNUMMER + ), + ) ) ) testRapid.assertUtgåendeMelding(forventet) diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InntektsmeldingReplayTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InntektsmeldingReplayTest.kt index 63508e1933..dbd16a8f00 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InntektsmeldingReplayTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/InntektsmeldingReplayTest.kt @@ -1,5 +1,6 @@ package no.nav.helse.spleis.mediator.e2e +import no.nav.inntektsmeldingkontrakt.Periode as IMPeriode import no.nav.helse.april import no.nav.helse.februar import no.nav.helse.flex.sykepengesoknad.kafka.SoknadsperiodeDTO @@ -10,22 +11,25 @@ import no.nav.helse.mars import no.nav.helse.person.aktivitetslogg.Varselkode.RV_IM_8 import no.nav.helse.spleis.meldinger.model.SimuleringMessage.Simuleringstatus.OK import org.junit.jupiter.api.Test -import no.nav.inntektsmeldingkontrakt.Periode as IMPeriode -internal class InntektsmeldingReplayTest: AbstractEndToEndMediatorTest() { +internal class InntektsmeldingReplayTest : AbstractEndToEndMediatorTest() { @Test fun `inntektsmelding strekker periode tilbake - uoverstemmelse av refusjonsopplysninger etter replay av inntektsmeldinger`() { nyPeriode(12.februar(2024) til 16.februar(2024), a1) nyPeriode(17.februar(2024) til 3.mars(2024), a2) nyPeriode(4.mars(2024) til 24.mars(2024), a1) - sendInntektsmelding(listOf( - IMPeriode(12.februar(2024), 27.februar(2024)) - ), 4.mars(2024), orgnummer = a1) + sendInntektsmelding( + listOf( + IMPeriode(12.februar(2024), 27.februar(2024)) + ), 4.mars(2024), orgnummer = a1 + ) sendVilkårsgrunnlag(2, 12.februar(2024), orgnummer = a1) - sendInntektsmelding(listOf( - IMPeriode(12.februar(2024), 27.februar(2024)) - ), 12.februar(2024), orgnummer = a1) + sendInntektsmelding( + listOf( + IMPeriode(12.februar(2024), 27.februar(2024)) + ), 12.februar(2024), orgnummer = a1 + ) assertTilstand(0, "AVSLUTTET_UTEN_UTBETALING") assertTilstand(1, "AVSLUTTET_UTEN_UTBETALING") assertTilstand(2, "AVVENTER_HISTORIKK") @@ -39,7 +43,11 @@ internal class InntektsmeldingReplayTest: AbstractEndToEndMediatorTest() { nyPeriode(14.april til 23.april, a1) nyPeriode(14.april til 23.april, a2) - sendInntektsmelding(listOf(IMPeriode(29.mars, 13.april)), førsteFraværsdag = 29.mars, orgnummer = a1) + sendInntektsmelding( + listOf(IMPeriode(29.mars, 13.april)), + førsteFraværsdag = 29.mars, + orgnummer = a1 + ) nyPeriode(24.april til 30.april, a1) @@ -66,7 +74,10 @@ internal class InntektsmeldingReplayTest: AbstractEndToEndMediatorTest() { @Test fun `Får med oss informasjon fra inntektsmelding også når den kommer før søknad`() { nyPeriode(1.januar til 31.januar, ORGNUMMER) - sendInntektsmelding(listOf(IMPeriode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) + sendInntektsmelding( + listOf(IMPeriode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar + ) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, OK) @@ -75,7 +86,12 @@ internal class InntektsmeldingReplayTest: AbstractEndToEndMediatorTest() { assertTilstand(0, "AVSLUTTET") sykmelding(1.mars til 31.mars, ORGNUMMER) - sendInntektsmelding(emptyList(), førsteFraværsdag = 1.mars, orgnummer = ORGNUMMER, begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening") + sendInntektsmelding( + emptyList(), + førsteFraværsdag = 1.mars, + orgnummer = ORGNUMMER, + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening" + ) søknad(1.mars til 31.mars, ORGNUMMER) assertTilstand(1, "AVVENTER_VILKÅRSPRØVING") assertVarsel(1, RV_IM_8) @@ -86,11 +102,26 @@ internal class InntektsmeldingReplayTest: AbstractEndToEndMediatorTest() { søknad(periode, orgnr) } - private fun sykmelding(periode: Periode, orgnr: String) = sendNySøknad(SoknadsperiodeDTO(fom = periode.start, tom = periode.endInclusive, sykmeldingsgrad = 100), orgnummer = orgnr) - private fun søknad(periode: Periode, orgnr: String) = sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = periode.start, tom = periode.endInclusive, sykmeldingsgrad = 100)), orgnummer = orgnr) + private fun sykmelding(periode: Periode, orgnr: String) = sendNySøknad( + SoknadsperiodeDTO( + fom = periode.start, + tom = periode.endInclusive, + sykmeldingsgrad = 100 + ), orgnummer = orgnr + ) + + private fun søknad(periode: Periode, orgnr: String) = sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = periode.start, + tom = periode.endInclusive, + sykmeldingsgrad = 100 + ) + ), orgnummer = orgnr + ) private companion object { val a1 = "a1" val a2 = "a2" } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/KontraktAssertions.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/KontraktAssertions.kt index 815e2ec945..3364046bf3 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/KontraktAssertions.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/KontraktAssertions.kt @@ -44,35 +44,47 @@ internal object KontraktAssertions { assertOgFjern("system_participating_services") { check(it.isArray) } } - private fun Pair.assertOgFjernTemplates(template: String, assertOgFjern: (faktiskJson: ObjectNode, key: String) -> Unit) { + private fun Pair.assertOgFjernTemplates( + template: String, + assertOgFjern: (faktiskJson: ObjectNode, key: String) -> Unit + ) { val (faktiskJson, forventetJson) = this - val uuidTemplates = forventetJson.properties().filter { it.value.asText() == template }.map { it.key } + val uuidTemplates = + forventetJson.properties().filter { it.value.asText() == template }.map { it.key } uuidTemplates.forEach { forventetJson.remove(it) assertOgFjern(faktiskJson, it) } } - private fun Pair.assertOgFjernUUIDTemplates() = assertOgFjernTemplates("") { faktiskJson, key -> - faktiskJson.assertOgFjernUUID(key) - } - private fun Pair.assertOgFjernLocalDateTimeTemplates() = assertOgFjernTemplates("") { faktiskJson, key -> - faktiskJson.assertOgFjernLocalDateTime(key) - } + private fun Pair.assertOgFjernUUIDTemplates() = + assertOgFjernTemplates("") { faktiskJson, key -> + faktiskJson.assertOgFjernUUID(key) + } + + private fun Pair.assertOgFjernLocalDateTimeTemplates() = + assertOgFjernTemplates("") { faktiskJson, key -> + faktiskJson.assertOgFjernLocalDateTime(key) + } + + private fun ObjectNode.assertOgFjernUUID(key: String) = + assertOgFjern(key) { UUID.fromString(it.asText()) } + + private fun ObjectNode.assertOgFjernLocalDateTime(key: String) = + assertOgFjern(key) { LocalDateTime.parse(it.asText()) } - private fun ObjectNode.assertOgFjernUUID(key: String) = assertOgFjern(key) { UUID.fromString(it.asText()) } - private fun ObjectNode.assertOgFjernLocalDateTime(key: String) = assertOgFjern(key) { LocalDateTime.parse(it.asText()) } - internal fun ObjectNode.assertOgFjern(key: String, validation:(value: JsonNode) -> Unit) { + internal fun ObjectNode.assertOgFjern(key: String, validation: (value: JsonNode) -> Unit) { if (!key.contains(".")) { - assertDoesNotThrow({ validation(path(key))}, "$key er ikke på forventet format!") + assertDoesNotThrow({ validation(path(key)) }, "$key er ikke på forventet format!") remove(key) return } val sisteKey = key.split(".").last() - val objekt = key.substringBeforeLast(".").split(".").fold(this as JsonNode) { result, nestedKey -> result.path(nestedKey) } as ObjectNode + val objekt = key.substringBeforeLast(".").split(".") + .fold(this as JsonNode) { result, nestedKey -> result.path(nestedKey) } as ObjectNode assertDoesNotThrow { validation(objekt.path(sisteKey)) } objekt.remove(sisteKey) } private val objectMapper = jacksonObjectMapper() -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/KunEnArbeidsgiverMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/KunEnArbeidsgiverMediatorTest.kt index 0abba81ab8..36df624fef 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/KunEnArbeidsgiverMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/KunEnArbeidsgiverMediatorTest.kt @@ -32,7 +32,15 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { @Test fun `kort periode`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 10.januar, sykmeldingsgrad = 100)) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 10.januar, sykmeldingsgrad = 100))) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 10.januar, + sykmeldingsgrad = 100 + ) + ) + ) assertTilstander( 0, "AVVENTER_INFOTRYGDHISTORIKK", @@ -45,9 +53,18 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `ingen historie med Søknad først`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -72,10 +89,19 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `bare ferie`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ), fravær = listOf(FravarDTO(19.januar, 26.januar, FravarstypeDTO.FERIE)) ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar + ) assertTilstander( 0, "AVVENTER_INFOTRYGDHISTORIKK", @@ -90,10 +116,19 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `bare permisjon`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ), fravær = listOf(FravarDTO(19.januar, 26.januar, FravarstypeDTO.PERMISJON)) ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar + ) assertTilstander( 0, "AVVENTER_INFOTRYGDHISTORIKK", @@ -108,9 +143,18 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `ikke godkjent utbetaling`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -133,16 +177,31 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `Korrigert søknad medfører foreldede dager og ingen utbetaling`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) val søknadId = sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), sendtNav = 1.mai.atStartOfDay() ) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), sendtNav = 2.mai.atStartOfDay(), korrigerer = søknadId, opprinneligSendt = 1.mai.atStartOfDay() ) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar + ) sendVilkårsgrunnlag(0) assertTilstander( @@ -159,15 +218,26 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `perioder påvirket av annullering-event blir forkastet men forblir i Avsluttet`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) sendUtbetalingsgodkjenning(0) sendUtbetaling() - val utbetalingId = testRapid.inspektør.alleEtterspurteBehov(Utbetaling).last().path("utbetalingId").asText() + val utbetalingId = + testRapid.inspektør.alleEtterspurteBehov(Utbetaling).last().path("utbetalingId") + .asText() sendAnnullering(utbetalingId) sendUtbetaling() assertUtbetalingTilstander(0, "NY", "IKKE_UTBETALT", "OVERFØRT", "UTBETALT") @@ -195,9 +265,18 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `kan ikke utbetale på overstyrt utbetaling`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -222,13 +301,27 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `overstyring av tidslinje fra saksbehandler fører til tilstandsendring`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) - sendOverstyringTidslinje(listOf(ManuellOverskrivingDag(25.januar, Dagtype.Permisjonsdag), ManuellOverskrivingDag(26.januar, Dagtype.Feriedag))) + sendOverstyringTidslinje( + listOf( + ManuellOverskrivingDag(25.januar, Dagtype.Permisjonsdag), + ManuellOverskrivingDag(26.januar, Dagtype.Feriedag) + ) + ) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) sendUtbetalingsgodkjenning(0, true) @@ -255,9 +348,18 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `overstyring av inntekt fra saksbehandler fører til tilstandsendring`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar ) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -317,7 +419,13 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `Inntektsmelding med opphør av naturalytelser blir kastet til infotrygd`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) ) sendInntektsmelding( arbeidsgiverperiode = listOf(Periode(fom = 1.januar, tom = 16.januar)), @@ -343,9 +451,18 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `ignorerer teknisk feil ved simuleringer`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.TEKNISK_FEIL) @@ -362,10 +479,19 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { @Test fun `replayer inntektsmeldinger hvis er i gap og venter på inntektsmelding`() { - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar + ) sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 20.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 20.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 20.januar, + sykmeldingsgrad = 100 + ) + ) ) sendVilkårsgrunnlag(0) assertTilstander( @@ -374,13 +500,14 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { "AVVENTER_INNTEKTSMELDING", "AVVENTER_BLOKKERENDE_PERIODE", "AVVENTER_VILKÅRSPRØVING", - "AVVENTER_HISTORIKK") + "AVVENTER_HISTORIKK" + ) } @Test fun `Behandler ikke melding hvis den allerede er behandlet`() { val hendelseRepository: HendelseRepository = mockk(relaxed = true) - every { hendelseRepository.erBehandlet(any()) } returnsMany(listOf(false, true)) + every { hendelseRepository.erBehandlet(any()) } returnsMany (listOf(false, true)) MessageMediator( rapidsConnection = testRapid, @@ -388,7 +515,13 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { hendelseMediator = TestHendelseMediator() ) - val (meldingId, message) = meldingsfabrikk.lagNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 25.januar, sykmeldingsgrad = 100)) + val (meldingId, message) = meldingsfabrikk.lagNySøknad( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 25.januar, + sykmeldingsgrad = 100 + ) + ) testRapid.sendTestMessage(message) testRapid.sendTestMessage(message) verify(exactly = 1) { hendelseRepository.markerSomBehandlet(eq(meldingId.toUUID())) } @@ -398,7 +531,7 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { @Test fun `Behandler melding hvis den tidligere har prøvd å behandle melding, men kræsjet`() { val hendelseRepository: HendelseRepository = mockk(relaxed = true) - every { hendelseRepository.erBehandlet(any()) } returnsMany(listOf(false, false, true)) + every { hendelseRepository.erBehandlet(any()) } returnsMany (listOf(false, false, true)) MessageMediator( rapidsConnection = testRapid, @@ -406,9 +539,16 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { hendelseMediator = TestHendelseMediator() ) - val meldingId = sendNySøknad(SoknadsperiodeDTO(fom = 25.januar, tom = 1.januar, sykmeldingsgrad = 100)) + val meldingId = + sendNySøknad(SoknadsperiodeDTO(fom = 25.januar, tom = 1.januar, sykmeldingsgrad = 100)) verify(exactly = 0) { hendelseRepository.markerSomBehandlet(meldingId) } - val (_, message) = meldingsfabrikk.lagNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 25.januar, sykmeldingsgrad = 100)) + val (_, message) = meldingsfabrikk.lagNySøknad( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 25.januar, + sykmeldingsgrad = 100 + ) + ) val medSammeId = (jacksonObjectMapper().readTree(message) as ObjectNode).also { it.put("@id", meldingId.toString()) }.toString() @@ -423,7 +563,13 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { fun `delvis refusjon`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) sendInntektsmelding( listOf(Periode(fom = 3.januar, tom = 18.januar)), @@ -432,7 +578,11 @@ internal class KunEnArbeidsgiverMediatorTest : AbstractEndToEndMediatorTest() { ) sendVilkårsgrunnlag(0) sendYtelser(0) - sendSimulering(0, SimuleringMessage.Simuleringstatus.OK, forventedeFagområder = setOf("SPREF", "SP")) + sendSimulering( + 0, + SimuleringMessage.Simuleringstatus.OK, + forventedeFagområder = setOf("SPREF", "SP") + ) sendUtbetalingsgodkjenning(0) sendUtbetaling() assertUtbetalingTilstander(0, "NY", "IKKE_UTBETALT", "OVERFØRT", "UTBETALT") diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/MinimumSykdomsgradVurdertTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/MinimumSykdomsgradVurdertTest.kt index f7d45b00a5..8cd295bb57 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/MinimumSykdomsgradVurdertTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/MinimumSykdomsgradVurdertTest.kt @@ -14,25 +14,49 @@ internal class MinimumSykdomsgradVurdertTest : AbstractEndToEndMediatorTest() { fun `Overstyring av avslag pga minimum sykdomsgrad`() { val a1 = "ag1" val a2 = "ag2" - sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100), orgnummer = a1) + sendNySøknad( + SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100), + orgnummer = a1 + ) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), orgnummer = a1 ) - sendInntektsmelding(listOf(Periode(1.januar, 16.januar)), 1.januar, orgnummer = a1, beregnetInntekt = 19000.0) + sendInntektsmelding( + listOf(Periode(1.januar, 16.januar)), + 1.januar, + orgnummer = a1, + beregnetInntekt = 19000.0 + ) sendVilkårsgrunnlag( vedtaksperiodeIndeks = 0, skjæringstidspunkt = 1.januar, orgnummer = a1, arbeidsforhold = listOf( - TestMessageFactory.Arbeidsforhold(a1, LocalDate.EPOCH, null, TestMessageFactory.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT), - TestMessageFactory.Arbeidsforhold(a2, LocalDate.EPOCH, null, TestMessageFactory.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT) + TestMessageFactory.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + TestMessageFactory.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT + ), + TestMessageFactory.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + TestMessageFactory.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT + ) ), inntekterForSykepengegrunnlag = sykepengegrunnlag( 1.januar, listOf( - TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(19000.0, a1), - TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(81000.0, a2), - ) + TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(19000.0, a1), + TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(81000.0, a2), + ) ) ) sendYtelser(0, orgnummer = a1) @@ -65,4 +89,4 @@ internal class MinimumSykdomsgradVurdertTest : AbstractEndToEndMediatorTest() { "AVVENTER_GODKJENNING" ) } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/OverstyrArbeidsgiveropplysningerMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/OverstyrArbeidsgiveropplysningerMediatorTest.kt index 33b825e9de..53554895a9 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/OverstyrArbeidsgiveropplysningerMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/OverstyrArbeidsgiveropplysningerMediatorTest.kt @@ -14,9 +14,18 @@ internal class OverstyrArbeidsgiveropplysningerMediatorTest : AbstractEndToEndMe fun `overstyrer både inntekt og refusjon`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar ) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, OK) @@ -24,17 +33,21 @@ internal class OverstyrArbeidsgiveropplysningerMediatorTest : AbstractEndToEndMe sendUtbetaling() sendOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, - arbeidsgiveropplysninger = listOf(Arbeidsgiveropplysning( - organisasjonsnummer = ORGNUMMER, - månedligInntekt = INNTEKT *1.25, - forklaring = "forklaring", - subsumsjon = null, - refusjonsopplysninger = listOf(Refusjonsopplysning( - fom = 1.januar, - tom = null, - beløp = INNTEKT *1.25 - )) - )) + arbeidsgiveropplysninger = listOf( + Arbeidsgiveropplysning( + organisasjonsnummer = ORGNUMMER, + månedligInntekt = INNTEKT * 1.25, + forklaring = "forklaring", + subsumsjon = null, + refusjonsopplysninger = listOf( + Refusjonsopplysning( + fom = 1.januar, + tom = null, + beløp = INNTEKT * 1.25 + ) + ) + ) + ) ) sendYtelser(0) assertTilstander( @@ -53,4 +66,4 @@ internal class OverstyrArbeidsgiveropplysningerMediatorTest : AbstractEndToEndMe "AVVENTER_SIMULERING_REVURDERING" ) } -} \ No newline at end of file +} diff --git "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/P\303\245minnelserTest.kt" "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/P\303\245minnelserTest.kt" index 12ba8f7189..e0cf933e85 100644 --- "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/P\303\245minnelserTest.kt" +++ "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/P\303\245minnelserTest.kt" @@ -25,7 +25,13 @@ internal class PåminnelserTest : AbstractEndToEndMediatorTest() { fun `påminnelse når vedtaksperiode ikke finnes`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) val id = sendNyPåminnelse() val melding = testRapid.inspektør.meldinger("vedtaksperiode_ikke_funnet").single() @@ -38,12 +44,25 @@ internal class PåminnelserTest : AbstractEndToEndMediatorTest() { fun `påminnelse for feil tilstand`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) sendNyPåminnelse(0) - val vedtaksperiodeIkkePåminnet = testRapid.inspektør.meldinger("vedtaksperiode_ikke_påminnet").single() - assertEquals("vedtaksperiode_ikke_påminnet", vedtaksperiodeIkkePåminnet.path("@event_name").asText()) - assertEquals("AVVENTER_INNTEKTSMELDING", vedtaksperiodeIkkePåminnet.path("tilstand").asText()) + val vedtaksperiodeIkkePåminnet = + testRapid.inspektør.meldinger("vedtaksperiode_ikke_påminnet").single() + assertEquals( + "vedtaksperiode_ikke_påminnet", + vedtaksperiodeIkkePåminnet.path("@event_name").asText() + ) + assertEquals( + "AVVENTER_INNTEKTSMELDING", + vedtaksperiodeIkkePåminnet.path("tilstand").asText() + ) assertVedtaksperiodeIkkePåminnet(vedtaksperiodeIkkePåminnet) } @@ -51,10 +70,17 @@ internal class PåminnelserTest : AbstractEndToEndMediatorTest() { fun `påminnelse for riktig tilstand`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) sendNyPåminnelse(0, tilstandType = TilstandType.AVVENTER_INNTEKTSMELDING) - val vedtaksperiodePåminnet = testRapid.inspektør.meldinger("vedtaksperiode_påminnet").single() + val vedtaksperiodePåminnet = + testRapid.inspektør.meldinger("vedtaksperiode_påminnet").single() assertEquals("vedtaksperiode_påminnet", vedtaksperiodePåminnet.path("@event_name").asText()) assertEquals("AVVENTER_INNTEKTSMELDING", vedtaksperiodePåminnet.path("tilstand").asText()) assertVedtaksperiodePåminnet(vedtaksperiodePåminnet) @@ -64,16 +90,30 @@ internal class PåminnelserTest : AbstractEndToEndMediatorTest() { fun utbetalingpåminnelse() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) sendUtbetalingsgodkjenning(0) sendNyUtbetalingpåminnelse(0, Utbetalingstatus.OVERFØRT) assertUtbetalingTilstander(0, "NY", "IKKE_UTBETALT", "OVERFØRT") - assertEquals(2, (0 until testRapid.inspektør.antall()).filter { "Utbetaling" in testRapid.inspektør.melding(it).path("@behov").map(JsonNode::asText) }.size) + assertEquals( + 2, + (0 until testRapid.inspektør.antall()).filter { + "Utbetaling" in testRapid.inspektør.melding(it).path("@behov").map(JsonNode::asText) + }.size + ) } private fun assertVedtaksperiodePåminnet(melding: JsonNode) { diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/RevurderingAvsluttetUtenUtbetalingTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/RevurderingAvsluttetUtenUtbetalingTest.kt index 0be066dae4..cf2ee68344 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/RevurderingAvsluttetUtenUtbetalingTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/RevurderingAvsluttetUtenUtbetalingTest.kt @@ -17,39 +17,100 @@ internal class RevurderingAvsluttetUtenUtbetalingTest : AbstractEndToEndMediator fun `revurdering ved inntektsmelding for korte perioder`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 5.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 5.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 5.januar, + sykmeldingsgrad = 100 + ) + ) ) sendNySøknad(SoknadsperiodeDTO(fom = 6.januar, tom = 10.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 6.januar, tom = 10.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 6.januar, + tom = 10.januar, + sykmeldingsgrad = 100 + ) + ) ) sendNySøknad(SoknadsperiodeDTO(fom = 11.januar, tom = 17.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 11.januar, tom = 17.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 11.januar, + tom = 17.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar ) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) sendVilkårsgrunnlag(2) sendYtelser(2) sendSimulering(2, SimuleringMessage.Simuleringstatus.OK) - assertTilstander(0, "AVVENTER_INFOTRYGDHISTORIKK", "AVVENTER_INNTEKTSMELDING", "AVSLUTTET_UTEN_UTBETALING", "AVVENTER_BLOKKERENDE_PERIODE", "AVSLUTTET_UTEN_UTBETALING") - assertTilstander(1, "AVVENTER_INNTEKTSMELDING", "AVSLUTTET_UTEN_UTBETALING", "AVVENTER_BLOKKERENDE_PERIODE", "AVSLUTTET_UTEN_UTBETALING") - assertTilstander(2, "AVVENTER_INNTEKTSMELDING", "AVSLUTTET_UTEN_UTBETALING", "AVVENTER_BLOKKERENDE_PERIODE", "AVVENTER_VILKÅRSPRØVING", "AVVENTER_HISTORIKK", "AVVENTER_SIMULERING", "AVVENTER_GODKJENNING") + assertTilstander( + 0, + "AVVENTER_INFOTRYGDHISTORIKK", + "AVVENTER_INNTEKTSMELDING", + "AVSLUTTET_UTEN_UTBETALING", + "AVVENTER_BLOKKERENDE_PERIODE", + "AVSLUTTET_UTEN_UTBETALING" + ) + assertTilstander( + 1, + "AVVENTER_INNTEKTSMELDING", + "AVSLUTTET_UTEN_UTBETALING", + "AVVENTER_BLOKKERENDE_PERIODE", + "AVSLUTTET_UTEN_UTBETALING" + ) + assertTilstander( + 2, + "AVVENTER_INNTEKTSMELDING", + "AVSLUTTET_UTEN_UTBETALING", + "AVVENTER_BLOKKERENDE_PERIODE", + "AVVENTER_VILKÅRSPRØVING", + "AVVENTER_HISTORIKK", + "AVVENTER_SIMULERING", + "AVVENTER_GODKJENNING" + ) } @Test fun `revurdering ved inntektsmelding for korte perioder - endring av skjæringstidspunkt`() { sendNySøknad(SoknadsperiodeDTO(fom = 8.januar, tom = 10.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 8.januar, tom = 10.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 8.januar, + tom = 10.januar, + sykmeldingsgrad = 100 + ) + ) ) sendNySøknad(SoknadsperiodeDTO(fom = 11.januar, tom = 22.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 11.januar, tom = 22.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 11.januar, + tom = 22.januar, + sykmeldingsgrad = 100 + ) + ) ) sendNySøknad(SoknadsperiodeDTO(fom = 23.januar, tom = 23.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 23.januar, tom = 23.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 23.januar, + tom = 23.januar, + sykmeldingsgrad = 100 + ) + ) ) sendInntektsmelding( listOf( @@ -61,9 +122,30 @@ internal class RevurderingAvsluttetUtenUtbetalingTest : AbstractEndToEndMediator sendYtelser(1) sendSimulering(1, SimuleringMessage.Simuleringstatus.OK) - assertTilstander(0, "AVVENTER_INFOTRYGDHISTORIKK", "AVVENTER_INNTEKTSMELDING", "AVSLUTTET_UTEN_UTBETALING", "AVVENTER_BLOKKERENDE_PERIODE", "AVSLUTTET_UTEN_UTBETALING") - assertTilstander(1, "AVVENTER_INNTEKTSMELDING", "AVSLUTTET_UTEN_UTBETALING", "AVVENTER_BLOKKERENDE_PERIODE", "AVVENTER_VILKÅRSPRØVING", "AVVENTER_HISTORIKK", "AVVENTER_SIMULERING", "AVVENTER_GODKJENNING") - assertTilstander(2, "AVVENTER_INNTEKTSMELDING", "AVSLUTTET_UTEN_UTBETALING", "AVVENTER_BLOKKERENDE_PERIODE") + assertTilstander( + 0, + "AVVENTER_INFOTRYGDHISTORIKK", + "AVVENTER_INNTEKTSMELDING", + "AVSLUTTET_UTEN_UTBETALING", + "AVVENTER_BLOKKERENDE_PERIODE", + "AVSLUTTET_UTEN_UTBETALING" + ) + assertTilstander( + 1, + "AVVENTER_INNTEKTSMELDING", + "AVSLUTTET_UTEN_UTBETALING", + "AVVENTER_BLOKKERENDE_PERIODE", + "AVVENTER_VILKÅRSPRØVING", + "AVVENTER_HISTORIKK", + "AVVENTER_SIMULERING", + "AVVENTER_GODKJENNING" + ) + assertTilstander( + 2, + "AVVENTER_INNTEKTSMELDING", + "AVSLUTTET_UTEN_UTBETALING", + "AVVENTER_BLOKKERENDE_PERIODE" + ) } private val logCollector = LogCollector() @@ -86,7 +168,8 @@ internal class RevurderingAvsluttetUtenUtbetalingTest : AbstractEndToEndMediator logger.detachAndStopAllAppenders() } - private class LogCollector private constructor(private val messages: MutableList): AppenderBase(), Iterable by (messages) { + private class LogCollector private constructor(private val messages: MutableList) : + AppenderBase(), Iterable by (messages) { constructor() : this(mutableListOf()) override fun append(eventObject: ILoggingEvent) { diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/RevurderingseventyrkontraktTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/RevurderingseventyrkontraktTest.kt index 555efda302..69522dce7f 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/RevurderingseventyrkontraktTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/RevurderingseventyrkontraktTest.kt @@ -20,9 +20,18 @@ internal class RevurderingseventyrkontraktTest : AbstractEndToEndMediatorTest() fun `eventyr`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar ) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -31,7 +40,13 @@ internal class RevurderingseventyrkontraktTest : AbstractEndToEndMediatorTest() sendNySøknad(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.februar, tom = 28.februar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.februar, + tom = 28.februar, + sykmeldingsgrad = 100 + ) + ) ) sendYtelser(1) sendSimulering(1, SimuleringMessage.Simuleringstatus.OK) diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/SelvstendigMediatorTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/SelvstendigMediatorTest.kt index ff0501475d..1e54f517ae 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/SelvstendigMediatorTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/SelvstendigMediatorTest.kt @@ -9,9 +9,21 @@ internal class SelvstendigMediatorTest : AbstractEndToEndMediatorTest() { @Test fun `selvstendigsøknad`() { - sendNySøknadSelvstendig(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + sendNySøknadSelvstendig( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) sendSelvstendigsøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) assertTilstander(0, "TIL_INFOTRYGD") } diff --git "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/Skj\303\270nnsmessigFastsettelseMediatorTest.kt" "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/Skj\303\270nnsmessigFastsettelseMediatorTest.kt" index e0f0adda3b..2b872a62b6 100644 --- "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/Skj\303\270nnsmessigFastsettelseMediatorTest.kt" +++ "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/Skj\303\270nnsmessigFastsettelseMediatorTest.kt" @@ -53,8 +53,19 @@ internal class SkjønnsmessigFastsettelseMediatorTest : AbstractEndToEndMediator private fun vedtaOgSkjønnsmessigFastsett(årlig: Double) { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100))) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar + ) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, OK) @@ -71,4 +82,4 @@ internal class SkjønnsmessigFastsettelseMediatorTest : AbstractEndToEndMediator ) sendYtelser(0) } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/SpreOppgaverKontraktTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/SpreOppgaverKontraktTest.kt index 42db38b737..cd34969985 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/SpreOppgaverKontraktTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/SpreOppgaverKontraktTest.kt @@ -2,10 +2,10 @@ package no.nav.helse.spleis.mediator.e2e import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.ObjectNode +import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import java.time.LocalDate import no.nav.helse.flex.sykepengesoknad.kafka.SoknadsperiodeDTO import no.nav.helse.januar -import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDateTime import no.nav.inntektsmeldingkontrakt.Periode import org.junit.jupiter.api.Assertions.assertDoesNotThrow import org.junit.jupiter.api.Assertions.assertEquals @@ -18,7 +18,10 @@ internal class SpreOppgaverKontraktTest : AbstractEndToEndMediatorTest() { @Test fun `inntektmelding før søknad`() { sendNySøknad(SoknadsperiodeDTO(1.januar, 31.januar, 100)) - val (inntektsmeldingId, _) = sendInntektsmelding(listOf(Periode(1.januar, 16.januar)), 1.januar) + val (inntektsmeldingId, _) = sendInntektsmelding( + listOf(Periode(1.januar, 16.januar)), + 1.januar + ) val inntektsmeldingFørSøknad = testRapid.inspektør.siste("inntektsmelding_før_søknad") assertTrue(inntektsmeldingFørSøknad is ObjectNode) assertInntektsmeldingFørSøknad(inntektsmeldingFørSøknad) @@ -35,7 +38,13 @@ internal class SpreOppgaverKontraktTest : AbstractEndToEndMediatorTest() { fun `Sender ut inntektsmeldingHåndtertEvent når en vedtaksperiode har håndtert en inntektsmelding`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) ) val (inntektsmeldingId, _) = sendInntektsmelding( listOf(Periode(fom = 1.januar, tom = 16.januar)), @@ -47,8 +56,14 @@ internal class SpreOppgaverKontraktTest : AbstractEndToEndMediatorTest() { assertEquals(1, meldinger.size) meldinger[0].also { inntektsmeldingHåndtertEvent -> // håndtert inntekten fra im - assertEquals(inntektsmeldingId.toString(), inntektsmeldingHåndtertEvent["inntektsmeldingId"].asText()) - assertEquals(vedtaksperiodeId.toString(), inntektsmeldingHåndtertEvent["vedtaksperiodeId"].asText()) + assertEquals( + inntektsmeldingId.toString(), + inntektsmeldingHåndtertEvent["inntektsmeldingId"].asText() + ) + assertEquals( + vedtaksperiodeId.toString(), + inntektsmeldingHåndtertEvent["vedtaksperiodeId"].asText() + ) assertNotNull(inntektsmeldingHåndtertEvent["@opprettet"].asLocalDateTime()) } } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/UgyldigDataTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/UgyldigDataTest.kt index ca9fd417cf..5153d56b99 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/UgyldigDataTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/UgyldigDataTest.kt @@ -9,14 +9,30 @@ internal class UgyldigDataTest : AbstractEndToEndMediatorTest() { @Test fun `ny søknad - tom er før fom`() { - assertDoesNotThrow { sendNySøknad(SoknadsperiodeDTO(fom = 2.januar, tom = 1.januar, sykmeldingsgrad = 100)) } + assertDoesNotThrow { + sendNySøknad( + SoknadsperiodeDTO( + fom = 2.januar, + tom = 1.januar, + sykmeldingsgrad = 100 + ) + ) + } } @Test fun `sendt søknad - tom er før fom`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 2.januar, sykmeldingsgrad = 100)) - assertDoesNotThrow { sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 2.januar, tom = 1.januar, sykmeldingsgrad = 100)) - ) } + assertDoesNotThrow { + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 2.januar, + tom = 1.januar, + sykmeldingsgrad = 100 + ) + ) + ) + } } } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/UtbetalingkontraktTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/UtbetalingkontraktTest.kt index 9777d82b1c..17ace22750 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/UtbetalingkontraktTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/UtbetalingkontraktTest.kt @@ -32,9 +32,18 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { fun `ny utbetaling`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) val utbetalingEndret = testRapid.inspektør.siste("utbetaling_endret") @@ -56,9 +65,18 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { fun `utbetaling utbetalt`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -73,9 +91,18 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { fun `manuell behandling`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -92,9 +119,18 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { fun `automatisk behandling`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -110,8 +146,19 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { @Test fun `arbeid ikke gjenopptatt`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100))) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar + ) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -119,50 +166,92 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { sendUtbetaling() sendNySøknad(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100)) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100))) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.mars, + tom = 31.mars, + sykmeldingsgrad = 100 + ) + ) + ) sendInntektsmelding(listOf(Periode(fom = 1.mars, tom = 16.mars)), førsteFraværsdag = 1.mars) sendVilkårsgrunnlag(1) sendYtelser(1) sendSimulering(1, SimuleringMessage.Simuleringstatus.OK) - sendOverstyringTidslinje((1.februar til 28.februar).map { ManuellOverskrivingDag(it, Dagtype.ArbeidIkkeGjenopptattDag) }) + sendOverstyringTidslinje((1.februar til 28.februar).map { + ManuellOverskrivingDag( + it, + Dagtype.ArbeidIkkeGjenopptattDag + ) + }) sendYtelser(1) sendSimulering(1, SimuleringMessage.Simuleringstatus.OK) sendUtbetalingsgodkjenning(vedtaksperiodeIndeks = 1, automatiskBehandling = true) sendUtbetaling() val utbetaltEvent = testRapid.inspektør.siste("utbetaling_utbetalt") - val utbetalingsdager = utbetaltEvent["utbetalingsdager"].associate { it.path("dato").asLocalDate() to it.path("type").asText() } - (1.februar til 28.februar).forEach { assertEquals("ArbeidIkkeGjenopptattDag", utbetalingsdager[it]) } + val utbetalingsdager = utbetaltEvent["utbetalingsdager"].associate { + it.path("dato").asLocalDate() to it.path("type").asText() + } + (1.februar til 28.februar).forEach { + assertEquals( + "ArbeidIkkeGjenopptattDag", + utbetalingsdager[it] + ) + } } @Test fun `spleis sender korrekt grad (avrundet) ut`() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 30)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 30, faktiskGrad = 80)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 30, + faktiskGrad = 80 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar ) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) sendUtbetalingsgodkjenning(0, true) sendUtbetaling() val utbetaling = testRapid.inspektør.siste("utbetaling_utbetalt") - assertEquals(20.0, utbetaling.path("arbeidsgiverOppdrag").path("linjer").first().path("grad").asDouble()) + assertEquals( + 20.0, + utbetaling.path("arbeidsgiverOppdrag").path("linjer").first().path("grad").asDouble() + ) } @Test fun `Feriedager og permisjonsdager blir mappet riktig fra utbetalingstidslinjen for utbetaling_utbetalt`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ), fravær = listOf( FravarDTO(fom = 20.januar, tom = 21.januar, type = FravarstypeDTO.FERIE), FravarDTO(fom = 22.januar, tom = 22.januar, type = FravarstypeDTO.PERMISJON) ) ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar + ) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -170,18 +259,35 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { sendUtbetaling() val utbetaling = testRapid.inspektør.siste("utbetaling_utbetalt") - assertEquals(2, utbetaling.path("utbetalingsdager").toList().filter { it["type"].asText() == "Feriedag" }.size) - assertEquals(1, utbetaling.path("utbetalingsdager").toList().filter { it["type"].asText() == "Permisjonsdag" }.size) + assertEquals( + 2, + utbetaling.path("utbetalingsdager").toList() + .filter { it["type"].asText() == "Feriedag" }.size + ) + assertEquals( + 1, + utbetaling.path("utbetalingsdager").toList() + .filter { it["type"].asText() == "Permisjonsdag" }.size + ) } @Test fun `Feriedager og permisjonsdager blir mappet riktig fra utbetalingstidslinjen for utbetaling_uten_utbetaling`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ), fravær = listOf(FravarDTO(fom = 25.januar, tom = 26.januar, FravarstypeDTO.FERIE)) ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar + ) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -190,7 +296,13 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { sendNySøknad(SoknadsperiodeDTO(fom = 27.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 27.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 27.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), fravær = listOf(FravarDTO(fom = 27.januar, tom = 31.januar, FravarstypeDTO.PERMISJON)) ) sendYtelser(1) @@ -198,8 +310,16 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { val utbetaling = testRapid.inspektør.siste("utbetaling_uten_utbetaling") - assertEquals(2, utbetaling.path("utbetalingsdager").toList().filter { it["type"].asText() == "Feriedag" }.size) - assertEquals(5, utbetaling.path("utbetalingsdager").toList().filter { it["type"].asText() == "Permisjonsdag" }.size) + assertEquals( + 2, + utbetaling.path("utbetalingsdager").toList() + .filter { it["type"].asText() == "Feriedag" }.size + ) + assertEquals( + 5, + utbetaling.path("utbetalingsdager").toList() + .filter { it["type"].asText() == "Permisjonsdag" }.size + ) } @Test @@ -209,9 +329,18 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { SoknadsperiodeDTO(fom = 27.januar, tom = 30.januar, sykmeldingsgrad = 15) ) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100), SoknadsperiodeDTO(fom = 27.januar, tom = 30.januar, sykmeldingsgrad = 15)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ), SoknadsperiodeDTO(fom = 27.januar, tom = 30.januar, sykmeldingsgrad = 15) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -225,9 +354,18 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { fun `utbetaling uten utbetaling`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -236,7 +374,13 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { sendNySøknad(SoknadsperiodeDTO(fom = 27.januar, tom = 31.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 27.januar, tom = 31.januar, sykmeldingsgrad = 100)), + perioder = listOf( + SoknadsperiodeDTO( + fom = 27.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ), fravær = listOf(FravarDTO(fom = 27.januar, tom = 31.januar, FravarstypeDTO.FERIE)) ) sendYtelser(1) @@ -251,9 +395,18 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { fun `annullering full refusjon`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, SimuleringMessage.Simuleringstatus.OK) @@ -284,10 +437,16 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { } @Test - fun `annullering delvis refusjon`() { + fun `annullering delvis refusjon`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) sendInntektsmelding( listOf(Periode(fom = 3.januar, tom = 18.januar)), @@ -296,7 +455,11 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { ) sendVilkårsgrunnlag(0) sendYtelser(0) - sendSimulering(0, SimuleringMessage.Simuleringstatus.OK, forventedeFagområder = setOf("SPREF", "SP")) + sendSimulering( + 0, + SimuleringMessage.Simuleringstatus.OK, + forventedeFagområder = setOf("SPREF", "SP") + ) sendUtbetalingsgodkjenning(0) sendUtbetaling() sendAnnullering(utbetalingId.toString()) @@ -325,7 +488,13 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { fun `annullering ingen refusjon`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) ) sendInntektsmelding( listOf(Periode(fom = 3.januar, tom = 18.januar)), @@ -361,13 +530,19 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { private fun assertUtbetaltInkluderAvviste(melding: JsonNode) { assertUtbetalt(melding) - melding.path("utbetalingsdager").toList().filter { it["type"].asText() == "AvvistDag" }.also { avvisteDager -> - assertTrue(avvisteDager.isNotEmpty()) - assertTrue(avvisteDager.all { it.hasNonNull("begrunnelser") }) - } + melding.path("utbetalingsdager").toList().filter { it["type"].asText() == "AvvistDag" } + .also { avvisteDager -> + assertTrue(avvisteDager.isNotEmpty()) + assertTrue(avvisteDager.all { it.hasNonNull("begrunnelser") }) + } } - private fun assertUtbetalingEndret(melding: JsonNode, fra: String, til: String, annullering: Boolean = false) { + private fun assertUtbetalingEndret( + melding: JsonNode, + fra: String, + til: String, + annullering: Boolean = false + ) { assertTrue(melding.path("fødselsnummer").asText().isNotEmpty()) assertTrue(melding.path("organisasjonsnummer").asText().isNotEmpty()) assertTrue(melding.path("utbetalingId").asText().isNotEmpty()) @@ -464,14 +639,30 @@ internal class UtbetalingkontraktTest : AbstractEndToEndMediatorTest() { } } - private val arbeidsgiverFagsystemId get() = testRapid.inspektør.siste("utbetaling_utbetalt").path("arbeidsgiverOppdrag").path("fagsystemId").asText().also { check(it.matches( - FagsystemIdRegex - )) } - private val personFagsystemId get() = testRapid.inspektør.siste("utbetaling_utbetalt").path("personOppdrag").path("fagsystemId").asText().also { check(it.matches( - FagsystemIdRegex - )) } - private val utbetalingId get() = testRapid.inspektør.siste("utbetaling_utbetalt").path("utbetalingId").let { UUID.fromString(it.asText()) } - private val korrelasjonsId get() = testRapid.inspektør.siste("utbetaling_utbetalt").path("korrelasjonsId").let { UUID.fromString(it.asText()) } + private val arbeidsgiverFagsystemId + get() = testRapid.inspektør.siste("utbetaling_utbetalt").path("arbeidsgiverOppdrag") + .path("fagsystemId").asText().also { + check( + it.matches( + FagsystemIdRegex + ) + ) + } + private val personFagsystemId + get() = testRapid.inspektør.siste("utbetaling_utbetalt").path("personOppdrag") + .path("fagsystemId").asText().also { + check( + it.matches( + FagsystemIdRegex + ) + ) + } + private val utbetalingId + get() = testRapid.inspektør.siste("utbetaling_utbetalt").path("utbetalingId") + .let { UUID.fromString(it.asText()) } + private val korrelasjonsId + get() = testRapid.inspektør.siste("utbetaling_utbetalt").path("korrelasjonsId") + .let { UUID.fromString(it.asText()) } private companion object { diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/VedtaksperiodeVenterTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/VedtaksperiodeVenterTest.kt index 9726ec6f8e..25b1e096d5 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/VedtaksperiodeVenterTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/e2e/VedtaksperiodeVenterTest.kt @@ -12,13 +12,24 @@ import org.junit.jupiter.api.Test internal class VedtaksperiodeVenterTest : AbstractEndToEndMediatorTest() { @Test - fun `sender ut vedtaksperiode venter`(){ + fun `sender ut vedtaksperiode venter`() { assertAntallOgSisteÅrsak(0) sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) assertAntallOgSisteÅrsak(0) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100))) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) assertAntallOgSisteÅrsak(2, "INNTEKTSMELDING") - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar + ) assertAntallOgSisteÅrsak(2) sendVilkårsgrunnlag(0) assertAntallOgSisteÅrsak(3, "BEREGNING") @@ -33,26 +44,51 @@ internal class VedtaksperiodeVenterTest : AbstractEndToEndMediatorTest() { } @Test - fun `unngår å sende unødvendig vedtaksperiode venter når replay treffer`(){ - sendInntektsmelding(listOf(Periode(fom = 1.februar, tom = 16.februar)), førsteFraværsdag = 2.januar) - sendInntektsmelding(listOf(Periode(fom = 1.mars, tom = 16.mars)), førsteFraværsdag = 3.januar) + fun `unngår å sende unødvendig vedtaksperiode venter når replay treffer`() { + sendInntektsmelding( + listOf(Periode(fom = 1.februar, tom = 16.februar)), + førsteFraværsdag = 2.januar + ) + sendInntektsmelding( + listOf(Periode(fom = 1.mars, tom = 16.mars)), + førsteFraværsdag = 3.januar + ) sendNySøknad(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100)) assertAntallOgSisteÅrsak(0) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100))) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.mars, + tom = 31.mars, + sykmeldingsgrad = 100 + ) + ) + ) assertAntallOgSisteÅrsak(1) // Står i AVVENTER_VILKÅRSPRØVING som ikke implementerer venter sendVilkårsgrunnlag(0) assertAntallOgSisteÅrsak(2, "BEREGNING") } @Test - fun `replay som bommer på person som allerede har Infotrygdhistorikk`(){ + fun `replay som bommer på person som allerede har Infotrygdhistorikk`() { nyttVedtakJanuar() val antallVedtaksperiodeVenter = vedtaksperiodeVenter.size - sendInntektsmelding(listOf(Periode(fom = 1.februar, tom = 16.februar)), førsteFraværsdag = 1.februar) + sendInntektsmelding( + listOf(Periode(fom = 1.februar, tom = 16.februar)), + førsteFraværsdag = 1.februar + ) assertAntallOgSisteÅrsak(antallVedtaksperiodeVenter) sendNySøknad(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100)) assertAntallOgSisteÅrsak(antallVedtaksperiodeVenter) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.mars, tom = 31.mars, sykmeldingsgrad = 100))) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.mars, + tom = 31.mars, + sykmeldingsgrad = 100 + ) + ) + ) assertAntallOgSisteÅrsak(antallVedtaksperiodeVenter + 2, "INNTEKTSMELDING") } @@ -62,29 +98,54 @@ internal class VedtaksperiodeVenterTest : AbstractEndToEndMediatorTest() { val antallVedtaksperiodeVenter = vedtaksperiodeVenter.size sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) assertAntallOgSisteÅrsak(antallVedtaksperiodeVenter) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 50))) // Lavere grad + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 50 + ) + ) + ) // Lavere grad assertAntallOgSisteÅrsak(antallVedtaksperiodeVenter + 1, "BEREGNING") } private fun nyttVedtakJanuar() { sendNySøknad(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100)) - sendSøknad(perioder = listOf(SoknadsperiodeDTO(fom = 1.januar, tom = 31.januar, sykmeldingsgrad = 100))) - sendInntektsmelding(listOf(Periode(fom = 1.januar, tom = 16.januar)), førsteFraværsdag = 1.januar) + sendSøknad( + perioder = listOf( + SoknadsperiodeDTO( + fom = 1.januar, + tom = 31.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 1.januar, tom = 16.januar)), + førsteFraværsdag = 1.januar + ) sendVilkårsgrunnlag(0) sendYtelser(0) sendSimulering(0, OK) sendUtbetalingsgodkjenning(0) sendUtbetaling() } - private val vedtaksperiodeVenter get() = testRapid.inspektør.meldinger("vedtaksperioder_venter").flatMap { node -> - node.path("vedtaksperioder") - } + + private val vedtaksperiodeVenter + get() = testRapid.inspektør.meldinger("vedtaksperioder_venter").flatMap { node -> + node.path("vedtaksperioder") + } + private fun assertAntallOgSisteÅrsak(forventetAntall: Int, forventetÅrsak: String? = null) { val vedtaksperiodeVenter = vedtaksperiodeVenter assertEquals(forventetAntall, vedtaksperiodeVenter.size) forventetÅrsak?.let { - assertEquals(it, vedtaksperiodeVenter.last().path("venterPå").path("venteårsak").path("hva").asText()) + assertEquals( + it, + vedtaksperiodeVenter.last().path("venterPå").path("venteårsak").path("hva").asText() + ) } } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/etterlevelse/SubsumsjonTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/etterlevelse/SubsumsjonTest.kt index fedb831db1..cc0dfad92a 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/etterlevelse/SubsumsjonTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/etterlevelse/SubsumsjonTest.kt @@ -1,12 +1,12 @@ package no.nav.helse.spleis.mediator.etterlevelse +import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate +import com.github.navikt.tbd_libs.rapids_and_rivers.asYearMonth import java.time.LocalDate import java.time.YearMonth import no.nav.helse.desember import no.nav.helse.flex.sykepengesoknad.kafka.SoknadsperiodeDTO import no.nav.helse.januar -import com.github.navikt.tbd_libs.rapids_and_rivers.asLocalDate -import com.github.navikt.tbd_libs.rapids_and_rivers.asYearMonth import no.nav.helse.spleis.mediator.TestMessageFactory import no.nav.helse.spleis.mediator.TestMessageFactory.Arbeidsforhold.Arbeidsforholdtype import no.nav.helse.spleis.mediator.TestMessageFactory.Subsumsjon @@ -25,12 +25,15 @@ internal class SubsumsjonTest : AbstractEndToEndMediatorTest() { val a2 = "ag2" tilGodkjenningMedGhost(a2 = a2) - sendOverstyringArbeidsforhold(1.januar, listOf( + sendOverstyringArbeidsforhold( + 1.januar, listOf( TestMessageFactory.ArbeidsforholdOverstyrt( - a2, - true, - "Jeg, en saksbehandler, overstyrte pga 8-15" - ))) + a2, + true, + "Jeg, en saksbehandler, overstyrte pga 8-15" + ) + ) + ) val subsumsjon = subsumsjoner .map { it["subsumsjon"] } @@ -38,17 +41,24 @@ internal class SubsumsjonTest : AbstractEndToEndMediatorTest() { assertEquals("ag2", subsumsjon["input"]["organisasjonsnummer"].asText()) assertEquals(1.januar, subsumsjon["input"]["skjæringstidspunkt"].asLocalDate()) - val actualInntekterSisteTreMåneder = subsumsjon["input"]["inntekterSisteTreMåneder"].toList() + val actualInntekterSisteTreMåneder = + subsumsjon["input"]["inntekterSisteTreMåneder"].toList() actualInntekterSisteTreMåneder.forEachIndexed { index, inntekt -> - assertEquals(YearMonth.of(2017, 10).plusMonths(index.toLong()), inntekt["årMåned"].asYearMonth()) + assertEquals( + YearMonth.of(2017, 10).plusMonths(index.toLong()), + inntekt["årMåned"].asYearMonth() + ) assertEquals(1000.0, inntekt["beløp"].asDouble()) assertEquals("LØNNSINNTEKT", inntekt["type"].asText()) assertEquals("kontantytelse", inntekt["fordel"].asText()) assertEquals("fastloenn", inntekt["beskrivelse"].asText()) } - assertEquals("Jeg, en saksbehandler, overstyrte pga 8-15", subsumsjon["input"]["forklaring"].asText()) + assertEquals( + "Jeg, en saksbehandler, overstyrte pga 8-15", + subsumsjon["input"]["forklaring"].asText() + ) assertEquals(a2, subsumsjon["output"]["arbeidsforholdAvbrutt"].asText()) assertEquals("VILKAR_OPPFYLT", subsumsjon["utfall"].asText()) @@ -59,20 +69,26 @@ internal class SubsumsjonTest : AbstractEndToEndMediatorTest() { val a2 = "ag2" tilGodkjenningMedGhost(a2 = a2) - sendOverstyringArbeidsforhold(1.januar, listOf( + sendOverstyringArbeidsforhold( + 1.januar, listOf( TestMessageFactory.ArbeidsforholdOverstyrt( - a2, - true, - "Jeg, en saksbehandler, deaktiverer pga 8-15" - ))) + a2, + true, + "Jeg, en saksbehandler, deaktiverer pga 8-15" + ) + ) + ) sendYtelser(0, orgnummer = "ag1") sendSimulering(0, orgnummer = "ag1", status = OK) - sendOverstyringArbeidsforhold(1.januar, listOf( + sendOverstyringArbeidsforhold( + 1.januar, listOf( TestMessageFactory.ArbeidsforholdOverstyrt( - a2, - false, - "Jeg, en saksbehandler, overstyrte pga 8-15" - ))) + a2, + false, + "Jeg, en saksbehandler, overstyrte pga 8-15" + ) + ) + ) val subsumsjon = subsumsjoner .map { it["subsumsjon"] } @@ -80,17 +96,24 @@ internal class SubsumsjonTest : AbstractEndToEndMediatorTest() { assertEquals("ag2", subsumsjon["input"]["organisasjonsnummer"].asText()) assertEquals(1.januar, subsumsjon["input"]["skjæringstidspunkt"].asLocalDate()) - val actualInntekterSisteTreMåneder = subsumsjon["input"]["inntekterSisteTreMåneder"].toList() + val actualInntekterSisteTreMåneder = + subsumsjon["input"]["inntekterSisteTreMåneder"].toList() actualInntekterSisteTreMåneder.forEachIndexed { index, inntekt -> - assertEquals(YearMonth.of(2017, 10).plusMonths(index.toLong()), inntekt["årMåned"].asYearMonth()) + assertEquals( + YearMonth.of(2017, 10).plusMonths(index.toLong()), + inntekt["årMåned"].asYearMonth() + ) assertEquals(1000.0, inntekt["beløp"].asDouble()) assertEquals("LØNNSINNTEKT", inntekt["type"].asText()) assertEquals("kontantytelse", inntekt["fordel"].asText()) assertEquals("fastloenn", inntekt["beskrivelse"].asText()) } - assertEquals("Jeg, en saksbehandler, overstyrte pga 8-15", subsumsjon["input"]["forklaring"].asText()) + assertEquals( + "Jeg, en saksbehandler, overstyrte pga 8-15", + subsumsjon["input"]["forklaring"].asText() + ) assertEquals(a2, subsumsjon["output"]["aktivtArbeidsforhold"].asText()) assertEquals("VILKAR_IKKE_OPPFYLT", subsumsjon["utfall"].asText()) @@ -100,9 +123,18 @@ internal class SubsumsjonTest : AbstractEndToEndMediatorTest() { fun `subsumsjon-hendelser - med toggle`() { sendNySøknad(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) sendSøknad( - perioder = listOf(SoknadsperiodeDTO(fom = 3.januar, tom = 26.januar, sykmeldingsgrad = 100)) + perioder = listOf( + SoknadsperiodeDTO( + fom = 3.januar, + tom = 26.januar, + sykmeldingsgrad = 100 + ) + ) + ) + sendInntektsmelding( + listOf(Periode(fom = 3.januar, tom = 18.januar)), + førsteFraværsdag = 3.januar ) - sendInntektsmelding(listOf(Periode(fom = 3.januar, tom = 18.januar)), førsteFraværsdag = 3.januar) sendVilkårsgrunnlag(0) sendYtelser(0) @@ -146,13 +178,29 @@ internal class SubsumsjonTest : AbstractEndToEndMediatorTest() { assertEquals("ag2", subsumsjon["input"]["organisasjonsnummer"].asText()) assertEquals(1.januar, subsumsjon["input"]["skjæringstidspunkt"].asLocalDate()) assertEquals(1.desember(2017), subsumsjon["input"]["startdatoArbeidsforhold"].asLocalDate()) - assertEquals(1.januar, subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["dato"].asLocalDate()) - assertEquals(1100.0, subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["beløp"].asDouble()) - assertEquals("Jeg, en saksbehandler, overstyrte pga 8-28 b", subsumsjon["input"]["forklaring"].asText()) + assertEquals( + 1.januar, + subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["dato"].asLocalDate() + ) + assertEquals( + 1100.0, + subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["beløp"].asDouble() + ) + assertEquals( + "Jeg, en saksbehandler, overstyrte pga 8-28 b", + subsumsjon["input"]["forklaring"].asText() + ) - assertEquals(13200.0, subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrÅr"].asDouble()) - assertEquals(1100.0, subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrMåned"].asDouble()) + assertEquals( + 13200.0, + subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrÅr"].asDouble() + ) + assertEquals( + 1100.0, + subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrMåned"].asDouble() + ) } + @Test fun `Sender § 8-28 (3) c ved overstyring av ghost-inntekt`() { @@ -184,12 +232,27 @@ internal class SubsumsjonTest : AbstractEndToEndMediatorTest() { assertEquals(3, subsumsjon["ledd"].asInt()) assertEquals("ag2", subsumsjon["input"]["organisasjonsnummer"].asText()) assertEquals(1.januar, subsumsjon["input"]["skjæringstidspunkt"].asLocalDate()) - assertEquals(1.januar, subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["dato"].asLocalDate()) - assertEquals(1100.0, subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["beløp"].asDouble()) - assertEquals("Jeg, en saksbehandler, overstyrte pga 8-28 c", subsumsjon["input"]["forklaring"].asText()) + assertEquals( + 1.januar, + subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["dato"].asLocalDate() + ) + assertEquals( + 1100.0, + subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["beløp"].asDouble() + ) + assertEquals( + "Jeg, en saksbehandler, overstyrte pga 8-28 c", + subsumsjon["input"]["forklaring"].asText() + ) - assertEquals(13200.0, subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrÅr"].asDouble()) - assertEquals(1100.0, subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrMåned"].asDouble()) + assertEquals( + 13200.0, + subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrÅr"].asDouble() + ) + assertEquals( + 1100.0, + subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrMåned"].asDouble() + ) } @@ -225,16 +288,36 @@ internal class SubsumsjonTest : AbstractEndToEndMediatorTest() { assertNull(subsumsjon["bokstav"]) assertEquals("ag2", subsumsjon["input"]["organisasjonsnummer"].asText()) assertEquals(1.januar, subsumsjon["input"]["skjæringstidspunkt"].asLocalDate()) - assertEquals(1.januar, subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["dato"].asLocalDate()) - assertEquals(1100.0, subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["beløp"].asDouble()) - assertEquals("Jeg, en saksbehandler, overstyrte pga 8-28 (5)", subsumsjon["input"]["forklaring"].asText()) + assertEquals( + 1.januar, + subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["dato"].asLocalDate() + ) + assertEquals( + 1100.0, + subsumsjon["input"]["overstyrtInntektFraSaksbehandler"]["beløp"].asDouble() + ) + assertEquals( + "Jeg, en saksbehandler, overstyrte pga 8-28 (5)", + subsumsjon["input"]["forklaring"].asText() + ) - assertEquals(13200.0, subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrÅr"].asDouble()) - assertEquals(1100.0, subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrMåned"].asDouble()) + assertEquals( + 13200.0, + subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrÅr"].asDouble() + ) + assertEquals( + 1100.0, + subsumsjon["output"]["beregnetGrunnlagForSykepengegrunnlagPrMåned"].asDouble() + ) } - private fun tilGodkjenningMedGhost(a1: String = "ag1", a2: String = "ag2", fom: LocalDate = 1.januar, tom: LocalDate = 31.januar) { + private fun tilGodkjenningMedGhost( + a1: String = "ag1", + a2: String = "ag2", + fom: LocalDate = 1.januar, + tom: LocalDate = 31.januar + ) { sendNySøknad(SoknadsperiodeDTO(fom = fom, tom = tom, sykmeldingsgrad = 100), orgnummer = a1) sendSøknad( perioder = listOf(SoknadsperiodeDTO(fom = fom, tom = tom, sykmeldingsgrad = 100)), @@ -246,14 +329,24 @@ internal class SubsumsjonTest : AbstractEndToEndMediatorTest() { skjæringstidspunkt = fom, orgnummer = a1, arbeidsforhold = listOf( - TestMessageFactory.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - TestMessageFactory.Arbeidsforhold(a2, fom.minusMonths(1), null, Arbeidsforholdtype.ORDINÆRT) + TestMessageFactory.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + TestMessageFactory.Arbeidsforhold( + a2, + fom.minusMonths(1), + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntekterForSykepengegrunnlag = sykepengegrunnlag( fom, listOf( - TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(INNTEKT, a1), - TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(1000.0, a2), - ) + TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(INNTEKT, a1), + TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(1000.0, a2), + ) ) ) sendYtelser(0, orgnummer = a1) diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/etterlevelse/SubsumsjonsmeldingTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/etterlevelse/SubsumsjonsmeldingTest.kt index 0e6b84a855..1cb7498367 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/etterlevelse/SubsumsjonsmeldingTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/etterlevelse/SubsumsjonsmeldingTest.kt @@ -47,11 +47,13 @@ internal class SubsumsjonsmeldingTest { val subsumsjonen = `§ 8-17 ledd 2`( listOf(1.januar(2018).somPeriode()), MutableList(31) { Tidslinjedag((it + 1).januar, "NAVDAG", 100) } - ).copy(kontekster = listOf( - Subsumsjonskontekst(KontekstType.Fødselsnummer, "fnr"), - Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "orgnr"), - Subsumsjonskontekst(KontekstType.Vedtaksperiode, "vedtaksperiodeid"), - )) + ).copy( + kontekster = listOf( + Subsumsjonskontekst(KontekstType.Fødselsnummer, "fnr"), + Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "orgnr"), + Subsumsjonskontekst(KontekstType.Vedtaksperiode, "vedtaksperiodeid"), + ) + ) subsumsjonMediator.logg(subsumsjonen) val subsumsjoner = buildList { subsumsjonMediator.ferdigstill(object : Subsumsjonproducer { @@ -73,7 +75,8 @@ internal class SubsumsjonsmeldingTest { try { assertEquals(emptySet(), schema.validate(melding)) } catch (_: Exception) { - LoggerFactory.getLogger(SubsumsjonsmeldingTest::class.java).warn("Kunne ikke kjøre kontrakttest for subsumsjoner. Mangler du internett?") + LoggerFactory.getLogger(SubsumsjonsmeldingTest::class.java) + .warn("Kunne ikke kjøre kontrakttest for subsumsjoner. Mangler du internett?") } } } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/AnmodningOmForkastingRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/AnmodningOmForkastingRiverTest.kt index 673811a895..eff859bab5 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/AnmodningOmForkastingRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/AnmodningOmForkastingRiverTest.kt @@ -1,7 +1,7 @@ package no.nav.helse.spleis.mediator.meldinger -import java.util.UUID import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import java.util.UUID import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.meldinger.AnmodningOmForkastingRiver import org.intellij.lang.annotations.Language diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/AnnullerUtbetalingerRiverRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/AnnullerUtbetalingerRiverRiverTest.kt index 4aa935f76c..71c5bcd56a 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/AnnullerUtbetalingerRiverRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/AnnullerUtbetalingerRiverRiverTest.kt @@ -1,11 +1,11 @@ package no.nav.helse.spleis.mediator.meldinger import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import java.util.UUID import no.nav.helse.spleis.IMessageMediator +import no.nav.helse.spleis.meldinger.AnnullerUtbetalingerRiver import org.intellij.lang.annotations.Language import org.junit.jupiter.api.Test -import java.util.* -import no.nav.helse.spleis.meldinger.AnnullerUtbetalingerRiver internal class AnnullerUtbetalingerRiverRiverTest : RiverTest() { override fun river(rapidsConnection: RapidsConnection, mediator: IMessageMediator) { diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InfotrygdendringerRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InfotrygdendringerRiverTest.kt index 3c46f360ff..6dc8044b5d 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InfotrygdendringerRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InfotrygdendringerRiverTest.kt @@ -1,7 +1,7 @@ package no.nav.helse.spleis.mediator.meldinger -import java.time.LocalDate import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import java.time.LocalDate import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.mediator.TestMessageFactory import no.nav.helse.spleis.mediator.e2e.AbstractEndToEndMediatorTest.Companion.INNTEKT @@ -30,5 +30,6 @@ internal class InfotrygdendringerRiverTest : RiverTest() { InfotrygdendringerRiver(rapidsConnection, mediator) } - private val testMessageFactory = TestMessageFactory(UNG_PERSON_FNR_2018, ORGNUMMER, INNTEKT, LocalDate.of(1992, 2, 12)) -} \ No newline at end of file + private val testMessageFactory = + TestMessageFactory(UNG_PERSON_FNR_2018, ORGNUMMER, INNTEKT, LocalDate.of(1992, 2, 12)) +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InntektsmeldingMessageTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InntektsmeldingMessageTest.kt index 002e79b2b0..6c1e6d7250 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InntektsmeldingMessageTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InntektsmeldingMessageTest.kt @@ -17,14 +17,39 @@ internal class InntektsmeldingMessageTest { val vedtaksperiodeId = UUID.randomUUID() val inntektsdato = LocalDate.EPOCH val førsteFraværsdag = LocalDate.EPOCH.plusDays(1) - assertEquals(LPS(førsteFraværsdag), objectMapper.nullNode().tilAvsendersystem(null, null, førsteFraværsdag)) - assertEquals(LPS(førsteFraværsdag), objectMapper.missingNode().tilAvsendersystem(null, null, førsteFraværsdag)) - assertEquals(LPS(førsteFraværsdag), objectMapper.readTree(mangler).tilAvsendersystem(null, null, førsteFraværsdag)) - assertEquals(LPS(førsteFraværsdag), objectMapper.readTree(sattTilNull).tilAvsendersystem(null, null, førsteFraværsdag)) - assertEquals(NavPortal(vedtaksperiodeId, inntektsdato, true), objectMapper.readTree(navNo).tilAvsendersystem(vedtaksperiodeId, inntektsdato, null)) - assertEquals(NavPortal(vedtaksperiodeId, inntektsdato, false), objectMapper.readTree(navNoSelvbestemt).tilAvsendersystem(vedtaksperiodeId, inntektsdato, null)) - assertEquals(Altinn(førsteFraværsdag), objectMapper.readTree(altinn).tilAvsendersystem(null, null, førsteFraværsdag)) - assertEquals(LPS(førsteFraværsdag), objectMapper.readTree(hvaSomHelst).tilAvsendersystem(null, null, førsteFraværsdag)) + assertEquals( + LPS(førsteFraværsdag), + objectMapper.nullNode().tilAvsendersystem(null, null, førsteFraværsdag) + ) + assertEquals( + LPS(førsteFraværsdag), + objectMapper.missingNode().tilAvsendersystem(null, null, førsteFraværsdag) + ) + assertEquals( + LPS(førsteFraværsdag), + objectMapper.readTree(mangler).tilAvsendersystem(null, null, førsteFraværsdag) + ) + assertEquals( + LPS(førsteFraværsdag), + objectMapper.readTree(sattTilNull).tilAvsendersystem(null, null, førsteFraværsdag) + ) + assertEquals( + NavPortal(vedtaksperiodeId, inntektsdato, true), + objectMapper.readTree(navNo).tilAvsendersystem(vedtaksperiodeId, inntektsdato, null) + ) + assertEquals( + NavPortal(vedtaksperiodeId, inntektsdato, false), + objectMapper.readTree(navNoSelvbestemt) + .tilAvsendersystem(vedtaksperiodeId, inntektsdato, null) + ) + assertEquals( + Altinn(førsteFraværsdag), + objectMapper.readTree(altinn).tilAvsendersystem(null, null, førsteFraværsdag) + ) + assertEquals( + LPS(førsteFraværsdag), + objectMapper.readTree(hvaSomHelst).tilAvsendersystem(null, null, førsteFraværsdag) + ) } private companion object { @@ -36,4 +61,4 @@ internal class InntektsmeldingMessageTest { val altinn = """{ "navn": "AltinnPortal" }""" val hvaSomHelst = """{ "navn": "HvaSomHelst" }""" } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InntektsmeldingerRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InntektsmeldingerRiverTest.kt index b2b009d46b..354311bd69 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InntektsmeldingerRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/InntektsmeldingerRiverTest.kt @@ -1,16 +1,17 @@ package no.nav.helse.spleis.mediator.meldinger +import no.nav.inntektsmeldingkontrakt.Inntektsmelding as Inntektsmeldingkontrakt import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.databind.node.ObjectNode import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import java.math.BigDecimal import java.time.LocalDate import java.time.LocalDateTime import java.util.UUID import no.nav.helse.mai -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.meldinger.InntektsmeldingerRiver import no.nav.inntektsmeldingkontrakt.Arbeidsgivertype @@ -22,7 +23,6 @@ import no.nav.inntektsmeldingkontrakt.Periode import no.nav.inntektsmeldingkontrakt.Refusjon import no.nav.inntektsmeldingkontrakt.Status import org.junit.jupiter.api.Test -import no.nav.inntektsmeldingkontrakt.Inntektsmelding as Inntektsmeldingkontrakt internal class InntektsmeldingerRiverTest : RiverTest() { @@ -40,7 +40,12 @@ internal class InntektsmeldingerRiverTest : RiverTest() { arbeidsforholdId = null, beregnetInntekt = BigDecimal.ONE, refusjon = Refusjon(beloepPrMnd = BigDecimal.ONE, opphoersdato = LocalDate.now()), - endringIRefusjoner = listOf(EndringIRefusjon(endringsdato = LocalDate.now(), beloep = BigDecimal.ONE)), + endringIRefusjoner = listOf( + EndringIRefusjon( + endringsdato = LocalDate.now(), + beloep = BigDecimal.ONE + ) + ), opphoerAvNaturalytelser = emptyList(), gjenopptakelseNaturalytelser = emptyList(), arbeidsgiverperioder = listOf(Periode(fom = LocalDate.now(), tom = LocalDate.now())), @@ -65,7 +70,12 @@ internal class InntektsmeldingerRiverTest : RiverTest() { arbeidsforholdId = null, beregnetInntekt = BigDecimal.ONE, refusjon = Refusjon(beloepPrMnd = null, opphoersdato = null), - endringIRefusjoner = listOf(EndringIRefusjon(endringsdato = LocalDate.now(), beloep = BigDecimal.ONE)), + endringIRefusjoner = listOf( + EndringIRefusjon( + endringsdato = LocalDate.now(), + beloep = BigDecimal.ONE + ) + ), opphoerAvNaturalytelser = emptyList(), gjenopptakelseNaturalytelser = emptyList(), arbeidsgiverperioder = listOf(Periode(fom = LocalDate.now(), tom = LocalDate.now())), @@ -83,12 +93,20 @@ internal class InntektsmeldingerRiverTest : RiverTest() { private val ValidInntektsmeldingWithUnknownFieldsJson = ValidInntektsmelding.put(UUID.randomUUID().toString(), "foobar").toJson() - private val ValidInntektsmeldingMedOpphørAvNaturalytelser = ValidInntektsmelding.set( - "opphoerAvNaturalytelser", - listOf(OpphoerAvNaturalytelse(ELEKTRONISKKOMMUNIKASJON, LocalDate.now(), BigDecimal(589.00))).toJsonNode() - ).toJson() + private val ValidInntektsmeldingMedOpphørAvNaturalytelser = + ValidInntektsmelding.set( + "opphoerAvNaturalytelser", + listOf( + OpphoerAvNaturalytelse( + ELEKTRONISKKOMMUNIKASJON, + LocalDate.now(), + BigDecimal(589.00) + ) + ).toJsonNode() + ).toJson() - private val ValidInntektsmeldingMedVedtaksperiodeId = ValidInntektsmelding.put("vedtaksperiodeId", UUID.randomUUID().toString()).toJson() + private val ValidInntektsmeldingMedVedtaksperiodeId = + ValidInntektsmelding.put("vedtaksperiodeId", UUID.randomUUID().toString()).toJson() override fun river(rapidsConnection: RapidsConnection, mediator: IMessageMediator) { InntektsmeldingerRiver(rapidsConnection, mediator) @@ -108,6 +126,7 @@ internal class InntektsmeldingerRiverTest : RiverTest() { assertNoErrors(ValidInntektsmeldingMedOpphørAvNaturalytelser) assertNoErrors(ValidInntektsmeldingMedVedtaksperiodeId) } + private fun ObjectNode.toJson(): String = put("fødselsdato", "$fødselsdato").toString() } @@ -115,10 +134,11 @@ private val objectMapper = jacksonObjectMapper() .registerModule(JavaTimeModule()) .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) -private fun Inntektsmeldingkontrakt.asObjectNode(): ObjectNode = objectMapper.valueToTree(this).apply { - put("@id", UUID.randomUUID().toString()) - put("@event_name", "inntektsmelding") - put("@opprettet", LocalDateTime.now().toString()) -} +private fun Inntektsmeldingkontrakt.asObjectNode(): ObjectNode = + objectMapper.valueToTree(this).apply { + put("@id", UUID.randomUUID().toString()) + put("@event_name", "inntektsmelding") + put("@opprettet", LocalDateTime.now().toString()) + } private fun List.toJsonNode(): JsonNode = objectMapper.valueToTree(this) diff --git "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/NyeS\303\270knaderRiverTest.kt" "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/NyeS\303\270knaderRiverTest.kt" index 96b95ed678..00e1ed51a5 100644 --- "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/NyeS\303\270knaderRiverTest.kt" +++ "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/NyeS\303\270knaderRiverTest.kt" @@ -4,12 +4,11 @@ import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.databind.node.ObjectNode import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import java.time.LocalDate import java.time.LocalDateTime import java.util.UUID import no.nav.helse.desember -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection -import no.nav.helse.spleis.IMessageMediator import no.nav.helse.flex.sykepengesoknad.kafka.ArbeidsgiverDTO import no.nav.helse.flex.sykepengesoknad.kafka.ArbeidsgiverForskuttererDTO import no.nav.helse.flex.sykepengesoknad.kafka.ArbeidssituasjonDTO @@ -20,6 +19,7 @@ import no.nav.helse.flex.sykepengesoknad.kafka.SoknadsstatusDTO import no.nav.helse.flex.sykepengesoknad.kafka.SoknadstypeDTO import no.nav.helse.flex.sykepengesoknad.kafka.SykepengesoknadDTO import no.nav.helse.flex.sykepengesoknad.kafka.SykmeldingstypeDTO +import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.meldinger.NyeSøknaderRiver import org.junit.jupiter.api.Test @@ -47,23 +47,26 @@ internal class NyeSøknaderRiverTest : RiverTest() { sendtNav = null, sendtArbeidsgiver = LocalDateTime.now(), egenmeldinger = listOf(PeriodeDTO(fom = LocalDate.now(), tom = LocalDate.now())), - soknadsperioder = listOf(SoknadsperiodeDTO( - fom = LocalDate.now(), - tom = LocalDate.now(), - sykmeldingsgrad = 100, - faktiskGrad = 100, - avtaltTimer = Double.MIN_VALUE, - faktiskTimer = Double.MAX_VALUE, - sykmeldingstype = SykmeldingstypeDTO.AKTIVITET_IKKE_MULIG - )), + soknadsperioder = listOf( + SoknadsperiodeDTO( + fom = LocalDate.now(), + tom = LocalDate.now(), + sykmeldingsgrad = 100, + faktiskGrad = 100, + avtaltTimer = Double.MIN_VALUE, + faktiskTimer = Double.MAX_VALUE, + sykmeldingstype = SykmeldingstypeDTO.AKTIVITET_IKKE_MULIG + ) + ), fravar = listOf(FravarDTO(fom = LocalDate.now(), tom = LocalDate.now())) ) private val ValidNySøknad = ValidSøknad.copy(status = SoknadsstatusDTO.NY).toJson() private val ValidAvbruttSøknad = ValidSøknad.copy(status = SoknadsstatusDTO.AVBRUTT).toJson() private val ValidNySøknadUtenPerioder = ValidSøknad.copy(soknadsperioder = emptyList()).toJson() - private val ValidNySøknadWithUnknownFieldsJson = ValidSøknad.copy(status = SoknadsstatusDTO.NY).asObjectNode() - .put(UUID.randomUUID().toString(), "foobar").toJson() + private val ValidNySøknadWithUnknownFieldsJson = + ValidSøknad.copy(status = SoknadsstatusDTO.NY).asObjectNode() + .put(UUID.randomUUID().toString(), "foobar").toJson() override fun river(rapidsConnection: RapidsConnection, mediator: IMessageMediator) { NyeSøknaderRiver(rapidsConnection, mediator) @@ -82,15 +85,21 @@ internal class NyeSøknaderRiverTest : RiverTest() { assertNoErrors(ValidNySøknad) assertNoErrors(ValidNySøknadUtenPerioder) } - private fun SykepengesoknadDTO.toJson(): String = asObjectNode().medFelterFraSpedisjon().toString() + + private fun SykepengesoknadDTO.toJson(): String = + asObjectNode().medFelterFraSpedisjon().toString() + private fun ObjectNode.toJson(): String = medFelterFraSpedisjon().toString() private fun ObjectNode.medFelterFraSpedisjon() = put("fødselsdato", "$fødselsdato") } + private val objectMapper = jacksonObjectMapper() .registerModule(JavaTimeModule()) .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) -private fun SykepengesoknadDTO.asObjectNode(): ObjectNode = objectMapper.valueToTree(this).apply { - put("@id", UUID.randomUUID().toString()) - put("@event_name", if (this["status"].asText() == "NY") "ny_søknad" else "ukjent") - put("@opprettet", LocalDateTime.now().toString()) -} + +private fun SykepengesoknadDTO.asObjectNode(): ObjectNode = + objectMapper.valueToTree(this).apply { + put("@id", UUID.randomUUID().toString()) + put("@event_name", if (this["status"].asText() == "NY") "ny_søknad" else "ukjent") + put("@opprettet", LocalDateTime.now().toString()) + } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrArbeidsforholdRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrArbeidsforholdRiverTest.kt index 18418cd755..0c625c0548 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrArbeidsforholdRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrArbeidsforholdRiverTest.kt @@ -1,7 +1,7 @@ package no.nav.helse.spleis.mediator.meldinger -import no.nav.helse.januar import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import no.nav.helse.januar import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.mediator.TestMessageFactory import no.nav.helse.spleis.mediator.TestMessageFactory.ArbeidsforholdOverstyrt @@ -17,24 +17,25 @@ internal class OverstyrArbeidsforholdRiverTest : RiverTest() { OverstyrArbeidsforholdRiver(rapidsConnection, mediator) } - private val testMessageFactory = TestMessageFactory(UNG_PERSON_FNR_2018, ORGNUMMER, INNTEKT, UNG_PERSON_FØDSELSDATO) + private val testMessageFactory = + TestMessageFactory(UNG_PERSON_FNR_2018, ORGNUMMER, INNTEKT, UNG_PERSON_FØDSELSDATO) @Test fun `kan mappe melding om overstyring av arbeidsforhold til modell uten feil`() { assertNoErrors( testMessageFactory.lagOverstyrArbeidsforhold( 1.januar, listOf( - ArbeidsforholdOverstyrt( - ORGNUMMER, - false, - "Dette arbeidsforholdet gjelder" - ), - ArbeidsforholdOverstyrt( - "987654322", - true, - "Dette arbeidsforholdet gjelder ikke" - ), - ) + ArbeidsforholdOverstyrt( + ORGNUMMER, + false, + "Dette arbeidsforholdet gjelder" + ), + ArbeidsforholdOverstyrt( + "987654322", + true, + "Dette arbeidsforholdet gjelder ikke" + ), + ) ) ) } @@ -51,8 +52,8 @@ internal class OverstyrArbeidsforholdRiverTest : RiverTest() { assertErrors( testMessageFactory.lagOverstyrArbeidsforhold( 1.januar, listOf( - ArbeidsforholdOverstyrt(ORGNUMMER, false, null), - ) + ArbeidsforholdOverstyrt(ORGNUMMER, false, null), + ) ) ) diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrArbeidsgiveropplysningerRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrArbeidsgiveropplysningerRiverTest.kt index fa9d1c1fbc..82fa1b832b 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrArbeidsgiveropplysningerRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrArbeidsgiveropplysningerRiverTest.kt @@ -2,10 +2,10 @@ package no.nav.helse.spleis.mediator.meldinger import com.fasterxml.jackson.databind.node.ObjectNode import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import java.time.LocalDate import no.nav.helse.februar import no.nav.helse.januar -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.mediator.TestMessageFactory import no.nav.helse.spleis.mediator.TestMessageFactory.Arbeidsgiveropplysning @@ -27,13 +27,15 @@ internal class OverstyrArbeidsgiveropplysningerRiverTest : RiverTest() { assertNoErrors( testMessageFactory.lagOverstyrArbeidsgiveropplysninger( 1.januar, - listOf(Arbeidsgiveropplysning( - organisasjonsnummer = ORGNUMMER, - månedligInntekt = INNTEKT, - forklaring = "forklaring", - subsumsjon = Subsumsjon("8-15", null, null), - refusjonsopplysninger = listOf(Refusjonsopplysning(1.januar, null, 0.0)) - )) + listOf( + Arbeidsgiveropplysning( + organisasjonsnummer = ORGNUMMER, + månedligInntekt = INNTEKT, + forklaring = "forklaring", + subsumsjon = Subsumsjon("8-15", null, null), + refusjonsopplysninger = listOf(Refusjonsopplysning(1.januar, null, 0.0)) + ) + ) ) ) } @@ -52,12 +54,12 @@ internal class OverstyrArbeidsgiveropplysningerRiverTest : RiverTest() { refusjonsopplysninger = listOf(Refusjonsopplysning(1.januar, null, 0.0)) ), Arbeidsgiveropplysning( - organisasjonsnummer = "a2", - månedligInntekt = INNTEKT, - forklaring = "forklaring", - subsumsjon = Subsumsjon("8-15", null, null), - refusjonsopplysninger = listOf(Refusjonsopplysning(1.januar, null, 0.0)) - ) + organisasjonsnummer = "a2", + månedligInntekt = INNTEKT, + forklaring = "forklaring", + subsumsjon = Subsumsjon("8-15", null, null), + refusjonsopplysninger = listOf(Refusjonsopplysning(1.januar, null, 0.0)) + ) ) ) ) @@ -103,28 +105,33 @@ internal class OverstyrArbeidsgiveropplysningerRiverTest : RiverTest() { assertErrors( testMessageFactory.lagOverstyrArbeidsgiveropplysninger( 1.januar, - listOf(Arbeidsgiveropplysning( - organisasjonsnummer = ORGNUMMER, - månedligInntekt = INNTEKT, - forklaring = "forklaring", - subsumsjon = Subsumsjon("8-15", null, null), - refusjonsopplysninger = null - )) + listOf( + Arbeidsgiveropplysning( + organisasjonsnummer = ORGNUMMER, + månedligInntekt = INNTEKT, + forklaring = "forklaring", + subsumsjon = Subsumsjon("8-15", null, null), + refusjonsopplysninger = null + ) + ) ) ) } + @Test fun `refusjonsopplysninger kan være en tom liste`() { assertNoErrors( testMessageFactory.lagOverstyrArbeidsgiveropplysninger( 1.januar, - listOf(Arbeidsgiveropplysning( - organisasjonsnummer = ORGNUMMER, - månedligInntekt = INNTEKT, - forklaring = "forklaring", - subsumsjon = Subsumsjon("8-15", null, null), - refusjonsopplysninger = emptyList() - )) + listOf( + Arbeidsgiveropplysning( + organisasjonsnummer = ORGNUMMER, + månedligInntekt = INNTEKT, + forklaring = "forklaring", + subsumsjon = Subsumsjon("8-15", null, null), + refusjonsopplysninger = emptyList() + ) + ) ) ) } @@ -134,13 +141,15 @@ internal class OverstyrArbeidsgiveropplysningerRiverTest : RiverTest() { assertErrors( testMessageFactory.lagOverstyrArbeidsgiveropplysninger( 1.januar, - listOf(Arbeidsgiveropplysning( - organisasjonsnummer = ORGNUMMER, - månedligInntekt = INNTEKT, - forklaring = null, - subsumsjon = Subsumsjon("8-15", null, null), - refusjonsopplysninger = listOf(Refusjonsopplysning(1.januar, null, 0.0)) - )) + listOf( + Arbeidsgiveropplysning( + organisasjonsnummer = ORGNUMMER, + månedligInntekt = INNTEKT, + forklaring = null, + subsumsjon = Subsumsjon("8-15", null, null), + refusjonsopplysninger = listOf(Refusjonsopplysning(1.januar, null, 0.0)) + ) + ) ) ) } @@ -175,38 +184,49 @@ internal class OverstyrArbeidsgiveropplysningerRiverTest : RiverTest() { assertErrors( testMessageFactory.lagOverstyrArbeidsgiveropplysninger( 1.januar, - listOf(Arbeidsgiveropplysning( - organisasjonsnummer = ORGNUMMER, - månedligInntekt = INNTEKT, - forklaring = "forklaring", - subsumsjon = Subsumsjon(null, null, null), - refusjonsopplysninger = listOf(Refusjonsopplysning(1.januar, null, 0.0)) - )) + listOf( + Arbeidsgiveropplysning( + organisasjonsnummer = ORGNUMMER, + månedligInntekt = INNTEKT, + forklaring = "forklaring", + subsumsjon = Subsumsjon(null, null, null), + refusjonsopplysninger = listOf(Refusjonsopplysning(1.januar, null, 0.0)) + ) + ) ) ) } @Test fun `lager riktig format på OverstyrArbeidsgiveropplysninger-hendelsen`() { - val overstyrArbeidsgiveropplysninger = testMessageFactory.lagOverstyrArbeidsgiveropplysninger( - 1.januar, - listOf( - Arbeidsgiveropplysning( - organisasjonsnummer = ORGNUMMER, - månedligInntekt = INNTEKT, - forklaring = "forklaring", - subsumsjon = Subsumsjon("8-15", null, null), - refusjonsopplysninger = listOf(Refusjonsopplysning(1.januar, 31.januar, INNTEKT/2), Refusjonsopplysning(1.februar, null, 0.0)) - ), - Arbeidsgiveropplysning( - organisasjonsnummer = "987654322", - månedligInntekt = INNTEKT/2, - forklaring = "forklaring2", - subsumsjon = Subsumsjon("8-14", "1", "a"), - refusjonsopplysninger = listOf(Refusjonsopplysning(1.januar, null, INNTEKT/3) + val overstyrArbeidsgiveropplysninger = + testMessageFactory.lagOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + Arbeidsgiveropplysning( + organisasjonsnummer = ORGNUMMER, + månedligInntekt = INNTEKT, + forklaring = "forklaring", + subsumsjon = Subsumsjon("8-15", null, null), + refusjonsopplysninger = listOf( + Refusjonsopplysning( + 1.januar, + 31.januar, + INNTEKT / 2 + ), Refusjonsopplysning(1.februar, null, 0.0) + ) + ), + Arbeidsgiveropplysning( + organisasjonsnummer = "987654322", + månedligInntekt = INNTEKT / 2, + forklaring = "forklaring2", + subsumsjon = Subsumsjon("8-14", "1", "a"), + refusjonsopplysninger = listOf( + Refusjonsopplysning(1.januar, null, INNTEKT / 3) + ) + ) ) - )) - ) + ) @Language("json") val forventetResultat = """ @@ -254,7 +274,12 @@ internal class OverstyrArbeidsgiveropplysningerRiverTest : RiverTest() { }""" val faktiskResultat = - overstyrArbeidsgiveropplysninger.json("@event_name", "fødselsnummer", "skjæringstidspunkt", "arbeidsgivere") + overstyrArbeidsgiveropplysninger.json( + "@event_name", + "fødselsnummer", + "skjæringstidspunkt", + "arbeidsgivere" + ) JSONAssert.assertEquals(forventetResultat, faktiskResultat, STRICT) assertNoErrors(overstyrArbeidsgiveropplysninger) @@ -264,12 +289,14 @@ internal class OverstyrArbeidsgiveropplysningerRiverTest : RiverTest() { OverstyrArbeidsgiveropplysningerRiver(rapidsConnection, mediator) } - private val testMessageFactory = TestMessageFactory(UNG_PERSON_FNR_2018, ORGNUMMER, INNTEKT, LocalDate.of(1992, 2, 12)) + private val testMessageFactory = + TestMessageFactory(UNG_PERSON_FNR_2018, ORGNUMMER, INNTEKT, LocalDate.of(1992, 2, 12)) private companion object { private val objectMapper = jacksonObjectMapper() - private fun Pair.json(vararg behold: String) = (objectMapper.readTree(second) as ObjectNode).let { json -> - json.remove(json.fieldNames().asSequence().minus(behold.toSet()).toList()) - }.toString() + private fun Pair.json(vararg behold: String) = + (objectMapper.readTree(second) as ObjectNode).let { json -> + json.remove(json.fieldNames().asSequence().minus(behold.toSet()).toList()) + }.toString() } -} \ No newline at end of file +} diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrTidslinjeRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrTidslinjeRiverTest.kt index f65fdfb8b1..a035f4e264 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrTidslinjeRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/OverstyrTidslinjeRiverTest.kt @@ -1,7 +1,7 @@ package no.nav.helse.spleis.mediator.meldinger -import no.nav.helse.desember import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import no.nav.helse.desember import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.mediator.TestMessageFactory import no.nav.helse.spleis.meldinger.OverstyrTidlinjeRiver diff --git "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/SendtArbeidsgiverS\303\270knaderRiverTest.kt" "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/SendtArbeidsgiverS\303\270knaderRiverTest.kt" index 925313f9a3..c230a72c5e 100644 --- "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/SendtArbeidsgiverS\303\270knaderRiverTest.kt" +++ "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/SendtArbeidsgiverS\303\270knaderRiverTest.kt" @@ -1,7 +1,7 @@ package no.nav.helse.spleis.mediator.meldinger -import java.util.* import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import java.util.UUID import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.meldinger.SendtArbeidsgiverSøknaderRiver import org.intellij.lang.annotations.Language diff --git "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/SendtNavS\303\270knaderRiverTest.kt" "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/SendtNavS\303\270knaderRiverTest.kt" index f787909e6a..fc91d34560 100644 --- "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/SendtNavS\303\270knaderRiverTest.kt" +++ "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/SendtNavS\303\270knaderRiverTest.kt" @@ -137,8 +137,9 @@ internal class SendtNavSøknaderRiverTest : RiverTest() { arbeidsstedOrgnummer = "4", opplysningspliktigOrgnummer = "5", harJobbet = true - ) - )) + ) + ) + ) assertNoErrors(søknad) } @@ -180,15 +181,26 @@ internal class SendtNavSøknaderRiverTest : RiverTest() { fun `parser søknad med permitteringer`() { assertNoErrors(validSøknad().copy(permitteringer = emptyList()).toJson()) assertNoErrors(validSøknad().copy(permitteringer = null).toJson()) - assertNoErrors(validSøknad().copy(permitteringer = listOf(PeriodeDTO(1.januar, 31.januar))).toJson()) - assertNoErrors(validSøknad().copy(permitteringer = listOf(PeriodeDTO(1.januar, null))).toJson()) + assertNoErrors( + validSøknad().copy(permitteringer = listOf(PeriodeDTO(1.januar, 31.januar))).toJson() + ) + assertNoErrors( + validSøknad().copy(permitteringer = listOf(PeriodeDTO(1.januar, null))).toJson() + ) } @Test fun `parser søknad med egenmeldingsdager`() { assertNoErrors(validSøknad().copy(egenmeldingsdagerFraSykmelding = emptyList()).toJson()) assertNoErrors(validSøknad().copy(egenmeldingsdagerFraSykmelding = null).toJson()) - assertNoErrors(validSøknad().copy(egenmeldingsdagerFraSykmelding = listOf(1.januar, 2.januar)).toJson()) + assertNoErrors( + validSøknad().copy( + egenmeldingsdagerFraSykmelding = listOf( + 1.januar, + 2.januar + ) + ).toJson() + ) assertNoErrors(validSøknad().copy(egenmeldingsdagerFraSykmelding = listOf()).toJson()) assertIgnored(søknadMedRareEgenmeldinger) } @@ -197,10 +209,31 @@ internal class SendtNavSøknaderRiverTest : RiverTest() { fun `parser søknad med merknader (fra sykmelding)`() { assertNoErrors(validSøknad().copy(merknaderFraSykmelding = emptyList()).toJson()) assertNoErrors(validSøknad().copy(merknaderFraSykmelding = null).toJson()) - assertNoErrors(validSøknad().copy(merknaderFraSykmelding = listOf(MerknadDTO("UGYLDIG_TILBAKEDATERING", null))).toJson()) - assertNoErrors(validSøknad().copy(merknaderFraSykmelding = listOf(MerknadDTO("TILBAKEDATERING_KREVER_FLERE_OPPLYSNINGER", "En beskrivelse"))).toJson()) + assertNoErrors( + validSøknad().copy( + merknaderFraSykmelding = listOf( + MerknadDTO( + "UGYLDIG_TILBAKEDATERING", + null + ) + ) + ).toJson() + ) + assertNoErrors( + validSøknad().copy( + merknaderFraSykmelding = listOf( + MerknadDTO( + "TILBAKEDATERING_KREVER_FLERE_OPPLYSNINGER", + "En beskrivelse" + ) + ) + ).toJson() + ) } - private fun SykepengesoknadDTO.toJson(): String = asObjectNode().medFelterFraSpedisjon().toString() + + private fun SykepengesoknadDTO.toJson(): String = + asObjectNode().medFelterFraSpedisjon().toString() + private fun ObjectNode.toJson(): String = medFelterFraSpedisjon().toString() private fun ObjectNode.medFelterFraSpedisjon() = put("fødselsdato", "$fødselsdato") } @@ -209,11 +242,12 @@ private val objectMapper = jacksonObjectMapper() .registerModule(JavaTimeModule()) .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) -private fun SykepengesoknadDTO.asObjectNode(): ObjectNode = objectMapper.valueToTree(this).apply { - put("@id", UUID.randomUUID().toString()) - put("@event_name", if (this["status"].asText() == "SENDT") "sendt_søknad_nav" else "ukjent") - put("@opprettet", LocalDateTime.now().toString()) -} +private fun SykepengesoknadDTO.asObjectNode(): ObjectNode = + objectMapper.valueToTree(this).apply { + put("@id", UUID.randomUUID().toString()) + put("@event_name", if (this["status"].asText() == "SENDT") "sendt_søknad_nav" else "ukjent") + put("@opprettet", LocalDateTime.now().toString()) + } @Language("JSON") private val søknadMedRareEgenmeldinger = """ diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/TestMessageMediator.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/TestMessageMediator.kt index a5921922ac..bd234850b2 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/TestMessageMediator.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/TestMessageMediator.kt @@ -3,7 +3,6 @@ package no.nav.helse.spleis.mediator.meldinger import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageMetadata import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageProblems -import io.micrometer.core.instrument.MeterRegistry import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.meldinger.model.HendelseMessage @@ -25,7 +24,12 @@ internal class TestMessageMediator : IMessageMediator { recognizedMessage = true } - override fun onRiverError(riverName: String, problems: MessageProblems, context: MessageContext, metadata: MessageMetadata) { + override fun onRiverError( + riverName: String, + problems: MessageProblems, + context: MessageContext, + metadata: MessageMetadata + ) { riverError = true } } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/TestRapid.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/TestRapid.kt index eada48c777..50cfcfbfdb 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/TestRapid.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/TestRapid.kt @@ -5,12 +5,12 @@ import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageMetadata +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import io.micrometer.core.instrument.simple.SimpleMeterRegistry import java.util.UUID import no.nav.helse.person.TilstandType import no.nav.helse.person.aktivitetslogg.Aktivitet import no.nav.helse.person.aktivitetslogg.Varselkode -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.mediator.VarseloppsamlerTest.Companion.Varsel.Companion.finn import no.nav.helse.spleis.mediator.VarseloppsamlerTest.Companion.varsler import org.junit.jupiter.api.fail @@ -41,7 +41,12 @@ internal class TestRapid : RapidsConnection() { fun sendTestMessage(message: String) { log.info("sending message:\n\t$message") - notifyMessage(message, this, MessageMetadata("", -1, -1, null, emptyMap()), SimpleMeterRegistry()) + notifyMessage( + message, + this, + MessageMetadata("", -1, -1, null, emptyMap()), + SimpleMeterRegistry() + ) } override fun publish(message: String) { @@ -144,19 +149,23 @@ internal class TestRapid : RapidsConnection() { } } - private fun events(name: String, onEach: (JsonNode) -> Unit) = messages.forEachIndexed { indeks, _ -> - val message = melding(indeks) - if (name == message.path("@event_name").asText()) onEach(message) - } + private fun events(name: String, onEach: (JsonNode) -> Unit) = + messages.forEachIndexed { indeks, _ -> + val message = melding(indeks) + if (name == message.path("@event_name").asText()) onEach(message) + } internal fun behovtypeSisteMelding(behovtype: Aktivitet.Behov.Behovtype) = melding(antall() - 1)["@behov"][0].asText() == behovtype.toString() val vedtaksperiodeteller get() = vedtaksperiodeIder.size - fun melding(indeks: Int) = jsonmeldinger.getOrPut(indeks) { objectMapper.readTree(messages[indeks].second) } + fun melding(indeks: Int) = + jsonmeldinger.getOrPut(indeks) { objectMapper.readTree(messages[indeks].second) } + fun antall() = messages.size - fun indeksFor(melding: JsonNode) = jsonmeldinger.entries.firstOrNull { (_, other) -> other == melding }?.key ?: -1 + fun indeksFor(melding: JsonNode) = + jsonmeldinger.entries.firstOrNull { (_, other) -> other == melding }?.key ?: -1 fun siste(name: String) = meldinger(name).last() @@ -168,15 +177,22 @@ internal class TestRapid : RapidsConnection() { utbetalinger.elementAt(utbetalingIndeks).let { utbetalingId -> utbetalingtilstander[utbetalingId]?.toList() } ?: emptyList() + fun utbetalingtype(utbetalingIndeks: Int) = utbetalinger.elementAt(utbetalingIndeks).let { utbetalingId -> utbetalingtyper[utbetalingId] } ?: fail { "Finner ikke utbetaling" } + fun utbetalingId(utbetalingIndeks: Int) = utbetalinger.elementAt(utbetalingIndeks) - fun tilstander(vedtaksperiodeId: UUID) = tilstander[vedtaksperiodeId]?.toList() ?: emptyList() - fun tilstanderUtenForkastede(vedtaksperiodeId: UUID) = tilstanderUtenForkastede[vedtaksperiodeId]?.toList() ?: emptyList() - fun forkastedeTilstander(vedtaksperiodeId: UUID) = forkastedeTilstander[vedtaksperiodeId]?.toList() ?: emptyList() + fun tilstander(vedtaksperiodeId: UUID) = + tilstander[vedtaksperiodeId]?.toList() ?: emptyList() + + fun tilstanderUtenForkastede(vedtaksperiodeId: UUID) = + tilstanderUtenForkastede[vedtaksperiodeId]?.toList() ?: emptyList() + + fun forkastedeTilstander(vedtaksperiodeId: UUID) = + forkastedeTilstander[vedtaksperiodeId]?.toList() ?: emptyList() fun harEtterspurteBehov(vedtaksperiodeIndeks: Int, behovtype: Aktivitet.Behov.Behovtype) = behov[vedtaksperiodeId(vedtaksperiodeIndeks)]?.any { it.first == behovtype } ?: false @@ -187,10 +203,16 @@ internal class TestRapid : RapidsConnection() { fun alleEtterspurteBehov(behovtype: Aktivitet.Behov.Behovtype) = behovmeldinger.filter { it.first == behovtype }.map { it.second } - fun tilstandForEtterspurteBehov(vedtaksperiodeIndeks: Int, behovtype: Aktivitet.Behov.Behovtype) = - behov.getValue(vedtaksperiodeId(vedtaksperiodeIndeks)).last { it.first == behovtype }.second + fun tilstandForEtterspurteBehov( + vedtaksperiodeIndeks: Int, + behovtype: Aktivitet.Behov.Behovtype + ) = + behov.getValue(vedtaksperiodeId(vedtaksperiodeIndeks)) + .last { it.first == behovtype }.second + + fun varsel(vedtaksperiodeId: UUID, varselkode: Varselkode) = + varsler.finn(vedtaksperiodeId, varselkode) - fun varsel(vedtaksperiodeId: UUID, varselkode: Varselkode) = varsler.finn(vedtaksperiodeId, varselkode) fun varsler() = varsler fun varsler(vedtaksperiodeId: UUID) = varsler.finn(vedtaksperiodeId) } diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkEtterInfotrygdendringRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkEtterInfotrygdendringRiverTest.kt index 2f62f1c497..83bfaa02ab 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkEtterInfotrygdendringRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkEtterInfotrygdendringRiverTest.kt @@ -1,8 +1,8 @@ package no.nav.helse.spleis.mediator.meldinger +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import java.time.LocalDateTime import java.util.UUID -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.meldinger.UtbetalingshistorikkEtterInfotrygdendringRiver import org.intellij.lang.annotations.Language diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkForFeriepengerRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkForFeriepengerRiverTest.kt index 5603ec3fcd..bcade964da 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkForFeriepengerRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkForFeriepengerRiverTest.kt @@ -1,11 +1,11 @@ package no.nav.helse.spleis.mediator.meldinger import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import java.time.LocalDateTime import no.nav.helse.spleis.IMessageMediator +import no.nav.helse.spleis.meldinger.UtbetalingshistorikkForFeriepengerRiver import org.intellij.lang.annotations.Language import org.junit.jupiter.api.Test -import java.time.LocalDateTime -import no.nav.helse.spleis.meldinger.UtbetalingshistorikkForFeriepengerRiver internal class UtbetalingshistorikkForFeriepengerRiverTest : RiverTest() { override fun river(rapidsConnection: RapidsConnection, mediator: IMessageMediator) { @@ -14,7 +14,7 @@ internal class UtbetalingshistorikkForFeriepengerRiverTest : RiverTest() { @Test fun `Kan mappe om message til modell uten feil`() { - assertNoErrors(json) + assertNoErrors(json) } @Language("JSON") diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkRiverTest.kt index 2bce3725ac..0cccf2f2e9 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/UtbetalingshistorikkRiverTest.kt @@ -1,8 +1,8 @@ package no.nav.helse.spleis.mediator.meldinger +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import java.time.LocalDateTime import java.util.UUID -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.meldinger.UtbetalingshistorikkRiver import org.intellij.lang.annotations.Language diff --git "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/Vilk\303\245rsgrunnlagRiverTest.kt" "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/Vilk\303\245rsgrunnlagRiverTest.kt" index d0b5ae7f52..2d08d41449 100644 --- "a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/Vilk\303\245rsgrunnlagRiverTest.kt" +++ "b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/Vilk\303\245rsgrunnlagRiverTest.kt" @@ -1,28 +1,29 @@ package no.nav.helse.spleis.mediator.meldinger +import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import java.time.LocalDate +import java.time.YearMonth +import java.util.UUID import no.nav.helse.hendelser.Medlemskapsvurdering +import no.nav.helse.januar import no.nav.helse.person.TilstandType -import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.mediator.TestMessageFactory +import no.nav.helse.spleis.mediator.TestMessageFactory.Arbeidsforhold.Arbeidsforholdtype import no.nav.helse.spleis.mediator.e2e.AbstractEndToEndMediatorTest.Companion.INNTEKT import no.nav.helse.spleis.mediator.e2e.AbstractEndToEndMediatorTest.Companion.ORGNUMMER import no.nav.helse.spleis.mediator.e2e.AbstractEndToEndMediatorTest.Companion.UNG_PERSON_FNR_2018 -import org.junit.jupiter.api.Test -import java.time.LocalDate -import java.time.YearMonth -import java.util.* -import no.nav.helse.januar -import no.nav.helse.spleis.mediator.TestMessageFactory.Arbeidsforhold.Arbeidsforholdtype import no.nav.helse.spleis.mediator.e2e.AbstractEndToEndMediatorTest.Companion.UNG_PERSON_FØDSELSDATO import no.nav.helse.spleis.meldinger.VilkårsgrunnlagRiver +import org.junit.jupiter.api.Test internal class VilkårsgrunnlagRiverTest : RiverTest() { override fun river(rapidsConnection: RapidsConnection, mediator: IMessageMediator) { VilkårsgrunnlagRiver(rapidsConnection, mediator) } - private val testMessageFactory = TestMessageFactory(UNG_PERSON_FNR_2018, ORGNUMMER, INNTEKT, UNG_PERSON_FØDSELSDATO) + private val testMessageFactory = + TestMessageFactory(UNG_PERSON_FNR_2018, ORGNUMMER, INNTEKT, UNG_PERSON_FØDSELSDATO) @Test fun `Kan mappe om message med frilanser og inntekt til modell uten feil`() { @@ -33,17 +34,39 @@ internal class VilkårsgrunnlagRiverTest : RiverTest() { tilstand = TilstandType.START, inntekterForSykepengegrunnlag = listOf( TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning( - måned = YearMonth.of(2017, 12), - inntekter = listOf(TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(32000.0, ORGNUMMER)) - )), + måned = YearMonth.of(2017, 12), + inntekter = listOf( + TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt( + 32000.0, + ORGNUMMER + ) + ) + ) + ), inntekterForOpptjeningsvurdering = listOf( TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning( - måned = YearMonth.of(2017, 12), - inntekter = listOf(TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning.Inntekt(32000.0, ORGNUMMER)) - )), + måned = YearMonth.of(2017, 12), + inntekter = listOf( + TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning.Inntekt( + 32000.0, + ORGNUMMER + ) + ) + ) + ), arbeidsforhold = listOf( - TestMessageFactory.Arbeidsforhold(ORGNUMMER, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - TestMessageFactory.Arbeidsforhold(ORGNUMMER, LocalDate.EPOCH, null, Arbeidsforholdtype.FRILANSER) + TestMessageFactory.Arbeidsforhold( + ORGNUMMER, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + TestMessageFactory.Arbeidsforhold( + ORGNUMMER, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.FRILANSER + ) ), medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja ) @@ -59,18 +82,34 @@ internal class VilkårsgrunnlagRiverTest : RiverTest() { tilstand = TilstandType.START, inntekterForSykepengegrunnlag = listOf( TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning( - måned = YearMonth.of(2017, 12), - inntekter = listOf(TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt(32000.0, "987654322")) - )), + måned = YearMonth.of(2017, 12), + inntekter = listOf( + TestMessageFactory.InntekterForSykepengegrunnlagFraLøsning.Inntekt( + 32000.0, + "987654322" + ) + ) + ) + ), inntekterForOpptjeningsvurdering = listOf( TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning( måned = YearMonth.of(2017, 12), inntekter = listOf( - TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning.Inntekt(32000.0, + TestMessageFactory.InntekterForOpptjeningsvurderingFraLøsning.Inntekt( + 32000.0, ORGNUMMER - )), - )), - arbeidsforhold = listOf(TestMessageFactory.Arbeidsforhold(ORGNUMMER, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT)), + ) + ), + ) + ), + arbeidsforhold = listOf( + TestMessageFactory.Arbeidsforhold( + ORGNUMMER, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) + ), medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja ) ) diff --git a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/YtelserRiverTest.kt b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/YtelserRiverTest.kt index bf05253eeb..87130308cc 100644 --- a/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/YtelserRiverTest.kt +++ b/sykepenger-mediators/src/test/kotlin/no/nav/helse/spleis/mediator/meldinger/YtelserRiverTest.kt @@ -1,7 +1,7 @@ package no.nav.helse.spleis.mediator.meldinger -import java.util.UUID import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection +import java.util.UUID import no.nav.helse.spleis.IMessageMediator import no.nav.helse.spleis.meldinger.YtelserRiver import org.intellij.lang.annotations.Language @@ -28,12 +28,12 @@ internal class YtelserRiverTest : RiverTest() { } @Test - fun `Ignorerer løsning uten pleiepenger`(){ + fun `Ignorerer løsning uten pleiepenger`() { assertIgnored(utenPleiepenger) } @Test - fun `Ignorerer løsning uten omsorgspenger`(){ + fun `Ignorerer løsning uten omsorgspenger`() { assertIgnored(utenOmsorgspenger) } diff --git "a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/Bel\303\270pstidslinjeDto.kt" "b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/Bel\303\270pstidslinjeDto.kt" index f778ff71b2..7eaaea3741 100644 --- "a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/Bel\303\270pstidslinjeDto.kt" +++ "b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/Bel\303\270pstidslinjeDto.kt" @@ -6,11 +6,21 @@ import java.util.UUID data class BeløpstidslinjeDto(val perioder: List) { - data class BeløpstidslinjeperiodeDto(val fom: LocalDate, val tom: LocalDate, val dagligBeløp: Double, val kilde: BeløpstidslinjedagKildeDto) { + data class BeløpstidslinjeperiodeDto( + val fom: LocalDate, + val tom: LocalDate, + val dagligBeløp: Double, + val kilde: BeløpstidslinjedagKildeDto + ) { fun kanUtvidesAv(other: BeløpstidslinjeperiodeDto) = this.tom.plusDays(1) == other.fom && - this.kilde == other.kilde && - this.dagligBeløp == other.dagligBeløp + this.kilde == other.kilde && + this.dagligBeløp == other.dagligBeløp } - data class BeløpstidslinjedagKildeDto(val meldingsreferanseId: UUID, val avsender: AvsenderDto, val tidsstempel: LocalDateTime) + + data class BeløpstidslinjedagKildeDto( + val meldingsreferanseId: UUID, + val avsender: AvsenderDto, + val tidsstempel: LocalDateTime + ) } diff --git a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/PersonUtDto.kt b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/PersonUtDto.kt index 506cbd1992..16eb221232 100644 --- a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/PersonUtDto.kt +++ b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/PersonUtDto.kt @@ -33,30 +33,84 @@ sealed class SykdomstidslinjeDagDto { abstract val dato: LocalDate abstract val kilde: HendelseskildeDto - data class UkjentDagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto) : SykdomstidslinjeDagDto() - data class ArbeidsdagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto) : SykdomstidslinjeDagDto() - data class ArbeidsgiverdagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto, val grad: ProsentdelDto) : SykdomstidslinjeDagDto() - data class FeriedagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto) : SykdomstidslinjeDagDto() - data class ArbeidIkkeGjenopptattDagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto) : SykdomstidslinjeDagDto() - data class FriskHelgedagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto) : SykdomstidslinjeDagDto() - data class ArbeidsgiverHelgedagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto, val grad: ProsentdelDto) : SykdomstidslinjeDagDto() - data class SykedagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto, val grad: ProsentdelDto) : SykdomstidslinjeDagDto() - data class SykHelgedagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto, val grad: ProsentdelDto) : SykdomstidslinjeDagDto() - data class SykedagNavDto(override val dato: LocalDate, override val kilde: HendelseskildeDto, val grad: ProsentdelDto) : SykdomstidslinjeDagDto() - data class ForeldetSykedagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto, val grad: ProsentdelDto) : SykdomstidslinjeDagDto() - data class PermisjonsdagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto) : SykdomstidslinjeDagDto() + data class UkjentDagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto) : + SykdomstidslinjeDagDto() + + data class ArbeidsdagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto) : + SykdomstidslinjeDagDto() + + data class ArbeidsgiverdagDto( + override val dato: LocalDate, + override val kilde: HendelseskildeDto, + val grad: ProsentdelDto + ) : SykdomstidslinjeDagDto() + + data class FeriedagDto(override val dato: LocalDate, override val kilde: HendelseskildeDto) : + SykdomstidslinjeDagDto() + + data class ArbeidIkkeGjenopptattDagDto( + override val dato: LocalDate, + override val kilde: HendelseskildeDto + ) : SykdomstidslinjeDagDto() + + data class FriskHelgedagDto( + override val dato: LocalDate, + override val kilde: HendelseskildeDto + ) : SykdomstidslinjeDagDto() + + data class ArbeidsgiverHelgedagDto( + override val dato: LocalDate, + override val kilde: HendelseskildeDto, + val grad: ProsentdelDto + ) : SykdomstidslinjeDagDto() + + data class SykedagDto( + override val dato: LocalDate, + override val kilde: HendelseskildeDto, + val grad: ProsentdelDto + ) : SykdomstidslinjeDagDto() + + data class SykHelgedagDto( + override val dato: LocalDate, + override val kilde: HendelseskildeDto, + val grad: ProsentdelDto + ) : SykdomstidslinjeDagDto() + + data class SykedagNavDto( + override val dato: LocalDate, + override val kilde: HendelseskildeDto, + val grad: ProsentdelDto + ) : SykdomstidslinjeDagDto() + + data class ForeldetSykedagDto( + override val dato: LocalDate, + override val kilde: HendelseskildeDto, + val grad: ProsentdelDto + ) : SykdomstidslinjeDagDto() + + data class PermisjonsdagDto( + override val dato: LocalDate, + override val kilde: HendelseskildeDto + ) : SykdomstidslinjeDagDto() + data class ProblemDagDto( override val dato: LocalDate, override val kilde: HendelseskildeDto, val other: HendelseskildeDto, val melding: String ) : SykdomstidslinjeDagDto() - data class AndreYtelserDto(override val dato: LocalDate, override val kilde: HendelseskildeDto, val ytelse: YtelseDto) : SykdomstidslinjeDagDto() { + + data class AndreYtelserDto( + override val dato: LocalDate, + override val kilde: HendelseskildeDto, + val ytelse: YtelseDto + ) : SykdomstidslinjeDagDto() { enum class YtelseDto { Foreldrepenger, AAP, Omsorgspenger, Pleiepenger, Svangerskapspenger, Opplæringspenger, Dagpenger } } } + data class HendelseskildeDto( val type: String, val meldingsreferanseId: UUID, @@ -145,6 +199,7 @@ data class ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagDto( val orgnummer: String, val inntektsopplysninger: List ) + data class SkatteopplysningDto( val hendelseId: UUID, val beløp: InntektbeløpDto.MånedligDouble, @@ -154,6 +209,7 @@ data class SkatteopplysningDto( val beskrivelse: String, val tidsstempel: LocalDateTime ) + sealed class InntekttypeDto { data object LØNNSINNTEKT : InntekttypeDto() data object NÆRINGSINNTEKT : InntekttypeDto() @@ -177,6 +233,7 @@ data class FeriepengeberegnerDto( val utbetalteDager: List, val feriepengedager: List ) + sealed class UtbetaltDagDto { abstract val orgnummer: String abstract val dato: LocalDate @@ -187,16 +244,19 @@ sealed class UtbetaltDagDto { override val dato: LocalDate, override val beløp: Int ) : UtbetaltDagDto() + data class InfotrygdPerson( override val orgnummer: String, override val dato: LocalDate, override val beløp: Int ) : UtbetaltDagDto() + data class SpleisArbeidsgiver( override val orgnummer: String, override val dato: LocalDate, override val beløp: Int ) : UtbetaltDagDto() + data class SpleisPerson( override val orgnummer: String, override val dato: LocalDate, diff --git a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/VedtaksperiodeVenterDto.kt b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/VedtaksperiodeVenterDto.kt index 33c0229712..9469533a11 100644 --- a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/VedtaksperiodeVenterDto.kt +++ b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/VedtaksperiodeVenterDto.kt @@ -6,12 +6,16 @@ import java.util.UUID class LazyVedtaksperiodeVenterDto(private val evaluer: () -> VedtaksperiodeVenterDto?) { private var erEvaluert: Boolean = false private var evaluert: VedtaksperiodeVenterDto? = null - val value get() = if (erEvaluert) evaluert else { - evaluert = evaluer() - erEvaluert = true - evaluert - } - override fun equals(other: Any?) = other is LazyVedtaksperiodeVenterDto && other.value == this.value + val value + get() = if (erEvaluert) evaluert else { + evaluert = evaluer() + erEvaluert = true + evaluert + } + + override fun equals(other: Any?) = + other is LazyVedtaksperiodeVenterDto && other.value == this.value + override fun hashCode() = value.hashCode() } @@ -30,4 +34,4 @@ data class VenterPåDto( data class VenteårsakDto( val hva: String, val hvorfor: String? -) \ No newline at end of file +) diff --git a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/InntektsopplysningInnDto.kt b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/InntektsopplysningInnDto.kt index 516f4e569d..873ded882d 100644 --- a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/InntektsopplysningInnDto.kt +++ b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/InntektsopplysningInnDto.kt @@ -65,6 +65,7 @@ sealed class InntektsopplysningInnDto { AOrdningen } } + data class SkattSykepengegrunnlagDto( override val id: UUID, override val hendelseId: UUID, @@ -75,4 +76,4 @@ sealed class InntektsopplysningInnDto { ) : InntektsopplysningInnDto() { override val beløp: InntektbeløpDto.MånedligDouble? = null } -} \ No newline at end of file +} diff --git a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/MaksdatoresultatInnDto.kt b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/MaksdatoresultatInnDto.kt index a3120dc2b4..d0c5ece2a0 100644 --- a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/MaksdatoresultatInnDto.kt +++ b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/MaksdatoresultatInnDto.kt @@ -1,7 +1,7 @@ package no.nav.helse.dto.deserialisering -import no.nav.helse.dto.MaksdatobestemmelseDto import java.time.LocalDate +import no.nav.helse.dto.MaksdatobestemmelseDto import no.nav.helse.dto.PeriodeDto data class MaksdatoresultatInnDto( @@ -15,4 +15,4 @@ data class MaksdatoresultatInnDto( val maksdato: LocalDate, val gjenståendeDager: Int, val grunnlag: UtbetalingstidslinjeInnDto -) \ No newline at end of file +) diff --git "a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/Vilk\303\245rsgrunnlagInnDto.kt" "b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/Vilk\303\245rsgrunnlagInnDto.kt" index 27db6a996c..24ab05a224 100644 --- "a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/Vilk\303\245rsgrunnlagInnDto.kt" +++ "b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/Vilk\303\245rsgrunnlagInnDto.kt" @@ -18,9 +18,10 @@ sealed class VilkårsgrunnlagInnDto { val vurdertOk: Boolean, val meldingsreferanseId: UUID? ) : VilkårsgrunnlagInnDto() + data class Infotrygd( override val vilkårsgrunnlagId: UUID, override val skjæringstidspunkt: LocalDate, override val inntektsgrunnlag: InntektsgrunnlagInnDto ) : VilkårsgrunnlagInnDto() -} \ No newline at end of file +} diff --git a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/MaksdatoresultatUtDto.kt b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/MaksdatoresultatUtDto.kt index 84e0dbd553..18c7eee2ff 100644 --- a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/MaksdatoresultatUtDto.kt +++ b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/MaksdatoresultatUtDto.kt @@ -1,7 +1,7 @@ package no.nav.helse.dto.serialisering -import no.nav.helse.dto.MaksdatobestemmelseDto import java.time.LocalDate +import no.nav.helse.dto.MaksdatobestemmelseDto import no.nav.helse.dto.PeriodeDto data class MaksdatoresultatUtDto( @@ -15,4 +15,4 @@ data class MaksdatoresultatUtDto( val maksdato: LocalDate, val gjenståendeDager: Int, val grunnlag: UtbetalingstidslinjeUtDto -) \ No newline at end of file +) diff --git a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/RefusjonUtDto.kt b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/RefusjonUtDto.kt index f39feb5e3c..beb664b2c2 100644 --- a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/RefusjonUtDto.kt +++ b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/RefusjonUtDto.kt @@ -5,7 +5,6 @@ import java.time.LocalDateTime import java.util.UUID import no.nav.helse.dto.EndringIRefusjonDto import no.nav.helse.dto.InntektDto -import no.nav.helse.dto.InntektbeløpDto import no.nav.helse.dto.PeriodeDto data class RefusjonUtDto( @@ -16,4 +15,4 @@ data class RefusjonUtDto( val sisteRefusjonsdag: LocalDate?, val endringerIRefusjon: List, val tidsstempel: LocalDateTime -) \ No newline at end of file +) diff --git "a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/Vilk\303\245rsgrunnlagUtDto.kt" "b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/Vilk\303\245rsgrunnlagUtDto.kt" index b197dee740..35b2ae61d1 100644 --- "a/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/Vilk\303\245rsgrunnlagUtDto.kt" +++ "b/sykepenger-model-dto/src/main/kotlin/no/nav/helse/dto/serialisering/Vilk\303\245rsgrunnlagUtDto.kt" @@ -18,9 +18,10 @@ sealed class VilkårsgrunnlagUtDto { val vurdertOk: Boolean, val meldingsreferanseId: UUID? ) : VilkårsgrunnlagUtDto() + data class Infotrygd( override val vilkårsgrunnlagId: UUID, override val skjæringstidspunkt: LocalDate, override val inntektsgrunnlag: InntektsgrunnlagUtDto ) : VilkårsgrunnlagUtDto() -} \ No newline at end of file +} 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 50e369b725..583c5464a5 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/Alder.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/Alder.kt @@ -43,7 +43,8 @@ class Alder(val fødselsdato: LocalDate, val dødsdato: LocalDate?) { return YEARS.between(fødselsdato, dagen).toInt() } - private fun alderVedSluttenAvÅret(year: Year) = YEARS.between(Year.from(fødselsdato), year).toInt() + private fun alderVedSluttenAvÅret(year: Year) = + YEARS.between(Year.from(fødselsdato), year).toInt() // Forhøyet inntektskrav gjelder fra dagen _etter_ 67-årsdagen - se § 8-51 andre ledd der det spesifiseres _mellom_. internal fun forhøyetInntektskrav(dato: LocalDate) = dato > forhøyetInntektskravAlder @@ -51,11 +52,13 @@ class Alder(val fødselsdato: LocalDate, val dødsdato: LocalDate?) { internal fun begrunnelseForMinimumInntekt(skjæringstidspunkt: LocalDate) = if (forhøyetInntektskrav(skjæringstidspunkt)) Begrunnelse.MinimumInntektOver67 else Begrunnelse.MinimumInntekt - internal fun forUngForÅSøke(søknadstidspunkt: LocalDate) = alderPåDato(søknadstidspunkt) < MINSTEALDER_UTEN_FULLMAKT_FRA_VERGE + internal fun forUngForÅSøke(søknadstidspunkt: LocalDate) = + alderPåDato(søknadstidspunkt) < MINSTEALDER_UTEN_FULLMAKT_FRA_VERGE internal fun beregnFeriepenger(opptjeningsår: Year, beløp: Int): Double { val alderVedSluttenAvÅret = alderVedSluttenAvÅret(opptjeningsår) - val prosentsats = if (alderVedSluttenAvÅret < ALDER_FOR_FORHØYET_FERIEPENGESATS) 0.102 else 0.125 + val prosentsats = + if (alderVedSluttenAvÅret < ALDER_FOR_FORHØYET_FERIEPENGESATS) 0.102 else 0.125 val feriepenger = beløp * prosentsats //TODO: subsumsjonObserver.`§8-33 ledd 3`(beløp, opptjeningsår, prosentsats, alderVedSluttenAvÅret, feriepenger) return feriepenger @@ -71,21 +74,27 @@ class Alder(val fødselsdato: LocalDate, val dødsdato: LocalDate?) { minimumInntektÅrlig: Double, jurist: Subsumsjonslogg ) { - jurist.logg(`§ 8-51 ledd 2`( - oppfylt = oppfylt, - utfallFom = utfallFom, - utfallTom = utfallTom, - sekstisyvårsdag = redusertYtelseAlder, - periodeFom = periodeFom, - periodeTom = periodeTom, - beregningsgrunnlagÅrlig = beregningsgrunnlagÅrlig, - minimumInntektÅrlig = minimumInntektÅrlig - )) + jurist.logg( + `§ 8-51 ledd 2`( + oppfylt = oppfylt, + utfallFom = utfallFom, + utfallTom = utfallTom, + sekstisyvårsdag = redusertYtelseAlder, + periodeFom = periodeFom, + periodeTom = periodeTom, + beregningsgrunnlagÅrlig = beregningsgrunnlagÅrlig, + minimumInntektÅrlig = minimumInntektÅrlig + ) + ) } internal fun avvisDager(tidslinjer: List): List { if (dødsdato == null) return tidslinjer - return Utbetalingstidslinje.avvis(tidslinjer, listOf(dødsdato.nesteDag til LocalDate.MAX), listOf(Begrunnelse.EtterDødsdato)) + return Utbetalingstidslinje.avvis( + tidslinjer, + listOf(dødsdato.nesteDag til LocalDate.MAX), + listOf(Begrunnelse.EtterDødsdato) + ) } internal fun dto() = AlderDto(fødselsdato = fødselsdato, dødsdato = dødsdato) diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/Grunnbel\303\270p.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/Grunnbel\303\270p.kt" index dbffc575f9..7ee1eff509 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/Grunnbel\303\270p.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/Grunnbel\303\270p.kt" @@ -13,9 +13,13 @@ class Grunnbeløp private constructor(private val multiplier: Double) { 124028.årlig.gyldigFra(1.mai(2024), gyldigSomMinsteinntektKrav = 3.juni(2024)), 118620.årlig.gyldigFra(1.mai(2023), gyldigSomMinsteinntektKrav = 29.mai(2023)), 111477.årlig.gyldigFra(1.mai(2022), gyldigSomMinsteinntektKrav = 23.mai(2022)), - 106399.årlig.gyldigFra(1.mai(2021), gyldigSomMinsteinntektKrav = 24.mai(2021) ), - 101351.årlig.gyldigFra(1.mai(2020), virkningsdato = 21.september(2020), gyldigSomMinsteinntektKrav = 21.september(2020) ), - 99858.årlig.gyldigFra(1.mai(2019), gyldigSomMinsteinntektKrav = 27. mai(2019)), + 106399.årlig.gyldigFra(1.mai(2021), gyldigSomMinsteinntektKrav = 24.mai(2021)), + 101351.årlig.gyldigFra( + 1.mai(2020), + virkningsdato = 21.september(2020), + gyldigSomMinsteinntektKrav = 21.september(2020) + ), + 99858.årlig.gyldigFra(1.mai(2019), gyldigSomMinsteinntektKrav = 27.mai(2019)), 96883.årlig.gyldigFra(1.mai(2018)), 93634.årlig.gyldigFra(1.mai(2017)), 92576.årlig.gyldigFra(1.mai(2016)), @@ -102,8 +106,9 @@ class Grunnbeløp private constructor(private val multiplier: Double) { * kan settes til et tidspunkt etter virkningstidspunktet for for grunnbeløpet øvrig. * https://lovdata.no/forskrift/2021-05-21-1568/§6 **/ - fun minsteinntekt(dato: LocalDate) = HistoriskGrunnbeløp.gjeldendeMinsteinntektGrunnbeløp(grunnbeløp, dato) - .beløp(multiplier) + fun minsteinntekt(dato: LocalDate) = + HistoriskGrunnbeløp.gjeldendeMinsteinntektGrunnbeløp(grunnbeløp, dato) + .beløp(multiplier) companion object { val `6G` = Grunnbeløp(6.0) @@ -113,10 +118,15 @@ class Grunnbeløp private constructor(private val multiplier: Double) { val `2G` = Grunnbeløp(2.0) val `1G` = Grunnbeløp(1.0) - private fun Inntekt.gyldigFra(gyldigFra: LocalDate, virkningsdato: LocalDate = gyldigFra, gyldigSomMinsteinntektKrav: LocalDate = gyldigFra) = HistoriskGrunnbeløp(this, gyldigFra, virkningsdato, gyldigSomMinsteinntektKrav) + private fun Inntekt.gyldigFra( + gyldigFra: LocalDate, + virkningsdato: LocalDate = gyldigFra, + gyldigSomMinsteinntektKrav: LocalDate = gyldigFra + ) = HistoriskGrunnbeløp(this, gyldigFra, virkningsdato, gyldigSomMinsteinntektKrav) fun virkningstidspunktFor(beløp: Inntekt): LocalDate { - return `1G`.grunnbeløp.find { it.beløp(1.0) == beløp }?.virkningstidspunkt() ?: throw IllegalArgumentException("$beløp er ikke et Grunnbeløp") + return `1G`.grunnbeløp.find { it.beløp(1.0) == beløp }?.virkningstidspunkt() + ?: throw IllegalArgumentException("$beløp er ikke et Grunnbeløp") } } @@ -143,7 +153,7 @@ class Grunnbeløp private constructor(private val multiplier: Double) { val periode = 1.januar(år) til 31.desember(år) if (!gyldighetsperiode.overlapperMed(periode)) return INGEN val antallMånederSomDekkesAvGrunnbeløpet = gyldighetsperiode.subset(periode) - .let { it.endInclusive.monthValue - it.start.monthValue + 1} + .let { it.endInclusive.monthValue - it.start.monthValue + 1 } return beløp(antallMånederSomDekkesAvGrunnbeløpet.toDouble()) .månedlig .årlig @@ -151,7 +161,11 @@ class Grunnbeløp private constructor(private val multiplier: Double) { companion object { // TODO: Innføre startegy pattern - fun gjeldendeGrunnbeløp(grunnbeløper: List, dato: LocalDate, virkningFra: LocalDate): HistoriskGrunnbeløp { + fun gjeldendeGrunnbeløp( + grunnbeløper: List, + dato: LocalDate, + virkningFra: LocalDate + ): HistoriskGrunnbeløp { val virkningsdato = maxOf(dato, virkningFra) return grunnbeløper .filter { virkningsdato >= it.virkningsdato && dato >= it.gyldigFra } @@ -159,7 +173,10 @@ class Grunnbeløp private constructor(private val multiplier: Double) { ?: throw NoSuchElementException("Finner ingen grunnbeløp etter $dato") } - fun gjeldendeMinsteinntektGrunnbeløp(grunnbeløper: List, dato: LocalDate): HistoriskGrunnbeløp { + fun gjeldendeMinsteinntektGrunnbeløp( + grunnbeløper: List, + dato: LocalDate + ): HistoriskGrunnbeløp { return grunnbeløper .filter { dato >= it.gyldigMinsteinntektKrav } .maxByOrNull { it.gyldigMinsteinntektKrav } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/Teller.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/Teller.kt index c8b83eda9b..7eab8e6422 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/Teller.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/Teller.kt @@ -13,8 +13,13 @@ class Teller(private val grense: Int) { require(grense >= 0) { "grense må være større eller lik 0" } } - fun reset() { state(initiell) } - fun observer(observer: Observer) { this.observer = observer } + fun reset() { + state(initiell) + } + + fun observer(observer: Observer) { + this.observer = observer + } fun ferdig() = state == Ferdig @@ -61,6 +66,7 @@ class Teller(private val grense: Int) { companion object { val nullObserver = object : Observer {} } + fun onInc() {} fun onGrense() {} fun onReset() {} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/Toggle.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/Toggle.kt index bc9782cb64..914939f3bc 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/Toggle.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/Toggle.kt @@ -42,11 +42,15 @@ class Toggle private constructor(enabled: Boolean) { companion object { val InntektsmeldingSomIkkeKommer = fraEnv("INNTEKTSMELDING_SOM_IKKEKOMMER", false) - val SendFeriepengeOppdrag = fraEnv("SEND_FERIEPENGEOPPDRAG", false) // Denne MÅ settes til false når man er ferdig å kjøre feriepenger. Ref. den mystiske feriepengejobben som startet av seg selv (?) 08.08.2024 + val SendFeriepengeOppdrag = fraEnv( + "SEND_FERIEPENGEOPPDRAG", + false + ) // Denne MÅ settes til false når man er ferdig å kjøre feriepenger. Ref. den mystiske feriepengejobben som startet av seg selv (?) 08.08.2024 val LagreUbrukteRefusjonsopplysninger = Toggle(true) val LagreRefusjonsopplysningerPåBehandling = Toggle(true) - fun fraEnv(navn: String, defaultValue: Boolean) = Toggle(System.getenv(navn)?.lowercase()?.toBooleanStrictOrNull() ?: defaultValue) + fun fraEnv(navn: String, defaultValue: Boolean) = + Toggle(System.getenv(navn)?.lowercase()?.toBooleanStrictOrNull() ?: defaultValue) fun Iterable.enable(block: () -> Unit) { forEach(Toggle::enable) diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/BehandlingSubsumsjonslogg.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/BehandlingSubsumsjonslogg.kt index 789580fb60..ce42bffabf 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/BehandlingSubsumsjonslogg.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/BehandlingSubsumsjonslogg.kt @@ -36,21 +36,53 @@ class BehandlingSubsumsjonslogg( // todo: sjekker for mindre enn 1 også ettersom noen subsumsjoner skjer på arbeidsgivernivå. det burde vi forsøke å flytte/fikse slik at // alt kan subsummeres i kontekst av en behandling. check(kontekster.count { it.type == KontekstType.Vedtaksperiode } <= 1) { - "det er flere kontekster av ${KontekstType.Vedtaksperiode}:\n${kontekster.joinToString(separator = "\n")}" + "det er flere kontekster av ${KontekstType.Vedtaksperiode}:\n${ + kontekster.joinToString( + separator = "\n" + ) + }" } } fun medFødselsnummer(personidentifikator: String) = - kopierMedKontekst(listOf(Subsumsjonskontekst(KontekstType.Fødselsnummer, personidentifikator))) + kopierMedKontekst( + listOf( + Subsumsjonskontekst( + KontekstType.Fødselsnummer, + personidentifikator + ) + ) + ) fun medOrganisasjonsnummer(organisasjonsnummer: String) = - kopierMedKontekst(listOf(Subsumsjonskontekst(KontekstType.Organisasjonsnummer, organisasjonsnummer))) + kopierMedKontekst( + listOf( + Subsumsjonskontekst( + KontekstType.Organisasjonsnummer, + organisasjonsnummer + ) + ) + ) fun medVedtaksperiode(vedtaksperiodeId: UUID, hendelseIder: List) = - kopierMedKontekst(listOf(Subsumsjonskontekst(KontekstType.Vedtaksperiode, vedtaksperiodeId.toString())) + hendelseIder) + kopierMedKontekst( + listOf( + Subsumsjonskontekst( + KontekstType.Vedtaksperiode, + vedtaksperiodeId.toString() + ) + ) + hendelseIder + ) - fun medInntektsmelding(inntektsmeldingId: UUID) = kopierMedKontekst(listOf(Subsumsjonskontekst(KontekstType.Inntektsmelding, inntektsmeldingId.toString()))) + fun medInntektsmelding(inntektsmeldingId: UUID) = kopierMedKontekst( + listOf( + Subsumsjonskontekst( + KontekstType.Inntektsmelding, + inntektsmeldingId.toString() + ) + ) + ) private fun kopierMedKontekst(kontekster: List) = BehandlingSubsumsjonslogg(this, this.kontekster + kontekster) -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/SykdomstidslinjeBuilder.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/SykdomstidslinjeBuilder.kt index a9e4365f0e..8ad9b28132 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/SykdomstidslinjeBuilder.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/SykdomstidslinjeBuilder.kt @@ -8,7 +8,8 @@ import no.nav.helse.økonomi.Økonomi internal class SykdomstidslinjeBuilder(sykdomstidslinje: Sykdomstidslinje) { private val navdager = sykdomstidslinje.mapNotNull { dag -> when (dag) { - is Dag.AndreYtelser -> visit(dag.dato, when(dag.ytelse) { + is Dag.AndreYtelser -> visit( + dag.dato, when (dag.ytelse) { Dag.AndreYtelser.AnnenYtelse.Foreldrepenger -> "FORELDREPENGER" Dag.AndreYtelser.AnnenYtelse.AAP -> "ARBEIDSAVKLARINGSPENGER" Dag.AndreYtelser.AnnenYtelse.Omsorgspenger -> "OMSORGSPENGER" @@ -16,7 +17,9 @@ internal class SykdomstidslinjeBuilder(sykdomstidslinje: Sykdomstidslinje) { Dag.AndreYtelser.AnnenYtelse.Svangerskapspenger -> "SVANGERSKAPSPENGER" Dag.AndreYtelser.AnnenYtelse.Opplæringspenger -> "OPPLÆRINGSPENGER" Dag.AndreYtelser.AnnenYtelse.Dagpenger -> "DAGPENGER" - }, null) + }, null + ) + is Dag.Feriedag -> visit(dag.dato, "FERIEDAG", null) is Dag.Permisjonsdag -> visit(dag.dato, "PERMISJONSDAG", null) is Dag.SykHelgedag -> visit(dag.dato, "SYKEDAG", dag.økonomi) @@ -36,7 +39,7 @@ internal class SykdomstidslinjeBuilder(sykdomstidslinje: Sykdomstidslinje) { fun dager() = navdager.toList() private fun visit(dato: LocalDate, dagtype: String, økonomi: Økonomi?): Tidslinjedag { - val grad = økonomi?.brukAvrundetGrad { grad-> grad } + val grad = økonomi?.brukAvrundetGrad { grad -> grad } return Tidslinjedag(dato, dagtype, grad) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/UtbetalingstidslinjeBuilder.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/UtbetalingstidslinjeBuilder.kt index c0d5cbb813..d1ff6c02e1 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/UtbetalingstidslinjeBuilder.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/etterlevelse/UtbetalingstidslinjeBuilder.kt @@ -20,6 +20,7 @@ internal class UtbetalingstidslinjeBuilder(utbetalingstidslinje: Utbetalingstids visit(dag.dato, "FRIDAG", dag.økonomi) else null } + is Utbetalingsdag.NavDag -> visit(dag.dato, "NAVDAG", dag.økonomi) is Utbetalingsdag.NavHelgDag -> { if (forrigeDag?.erAvvistDag() == true) @@ -27,6 +28,7 @@ internal class UtbetalingstidslinjeBuilder(utbetalingstidslinje: Utbetalingstids else visit(dag.dato, "NAVDAG", dag.økonomi) } + is Utbetalingsdag.UkjentDag -> null }.also { forrigeDag = it } } @@ -39,8 +41,11 @@ internal class UtbetalingstidslinjeBuilder(utbetalingstidslinje: Utbetalingstids } companion object { - internal fun Utbetalingstidslinje.subsumsjonsformat(): List = UtbetalingstidslinjeBuilder(this).dager() - internal fun List.subsumsjonsformat(): List> = map { it.subsumsjonsformat() } - .filter { it.isNotEmpty() } + internal fun Utbetalingstidslinje.subsumsjonsformat(): List = + UtbetalingstidslinjeBuilder(this).dager() + + internal fun List.subsumsjonsformat(): List> = + map { it.subsumsjonsformat() } + .filter { it.isNotEmpty() } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnmodningOmForkasting.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnmodningOmForkasting.kt index e92a680962..c7179a7a1f 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnmodningOmForkasting.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnmodningOmForkasting.kt @@ -9,7 +9,7 @@ class AnmodningOmForkasting( organisasjonsnummer: String, private val vedtaksperiodeId: UUID, internal val force: Boolean -): Hendelse { +) : Hendelse { override val behandlingsporing = Behandlingsporing.Arbeidsgiver( organisasjonsnummer = organisasjonsnummer ) @@ -24,4 +24,4 @@ class AnmodningOmForkasting( } internal fun erRelevant(other: UUID) = other == vedtaksperiodeId -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnnenYtelseSomKanOppdatereHistorikk.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnnenYtelseSomKanOppdatereHistorikk.kt index 3c76495d2d..7dba24bf6b 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnnenYtelseSomKanOppdatereHistorikk.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnnenYtelseSomKanOppdatereHistorikk.kt @@ -36,7 +36,10 @@ abstract class AnnenYtelseSomKanOppdatereHistorikk { if (sammenhengendePerioder.size > 1) return false to FLERE_IKKE_SAMMENHENGENDE_INNSLAG val ytelseperiode = sammenhengendePerioder.single() val fullstendigOverlapp = ytelseperiode == vedtaksperiode - val ytelseIHalen = vedtaksperiode.overlapperMed(ytelseperiode) && ytelseperiode.slutterEtter(vedtaksperiode.endInclusive) + val ytelseIHalen = + vedtaksperiode.overlapperMed(ytelseperiode) && ytelseperiode.slutterEtter( + vedtaksperiode.endInclusive + ) if (!fullstendigOverlapp && !ytelseIHalen) return false to IKKE_I_HALEN_AV_VEDTAKSPERIODE if (this.any { it.grad != 100 }) return false to GRADERT_YTELSE if (skjæringstidspunkt > vedtaksperiode.start && skjæringstidspunkt > ytelseperiode.start) return false to FLYTTER_SKJÆRINGSTIDSPUNKT @@ -51,7 +54,11 @@ abstract class AnnenYtelseSomKanOppdatereHistorikk { skjæringstidspunkt: LocalDate, vedtaksperiodeRettEtter: Periode? ): Boolean { - val (skalOppdatereHistorikk, hvorforIkke) = ytelse.skalOppdatereHistorikk(vedtaksperiode, skjæringstidspunkt, vedtaksperiodeRettEtter) + val (skalOppdatereHistorikk, hvorforIkke) = ytelse.skalOppdatereHistorikk( + vedtaksperiode, + skjæringstidspunkt, + vedtaksperiodeRettEtter + ) if (hvorforIkke !in listOf(null, INGEN_YTELSE)) { aktivitetslogg.info("Legger ikke til ${ytelse.javaClass.simpleName.lowercase()} i historikken fordi $hvorforIkke") } @@ -60,7 +67,15 @@ abstract class AnnenYtelseSomKanOppdatereHistorikk { } } - internal abstract fun skalOppdatereHistorikk(vedtaksperiode: Periode, skjæringstidspunkt: LocalDate, vedtaksperiodeRettEtter: Periode? = null): Pair - internal abstract fun sykdomstidslinje(meldingsreferanseId: UUID, registrert: LocalDateTime): Sykdomstidslinje + internal abstract fun skalOppdatereHistorikk( + vedtaksperiode: Periode, + skjæringstidspunkt: LocalDate, + vedtaksperiodeRettEtter: Periode? = null + ): Pair + + internal abstract fun sykdomstidslinje( + meldingsreferanseId: UUID, + registrert: LocalDateTime + ): Sykdomstidslinje -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnnullerUtbetaling.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnnullerUtbetaling.kt index 6b521e80e0..30f987370c 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnnullerUtbetaling.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/AnnullerUtbetaling.kt @@ -24,7 +24,8 @@ class AnnullerUtbetaling( automatiskBehandling = erAutomatisk() ) - override val vurdering: Utbetaling.Vurdering = Utbetaling.Vurdering(true, saksbehandlerIdent, saksbehandlerEpost, opprettet, false) + override val vurdering: Utbetaling.Vurdering = + Utbetaling.Vurdering(true, saksbehandlerIdent, saksbehandlerEpost, opprettet, false) fun erAutomatisk() = this.saksbehandlerIdent == "Automatisk behandlet" } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Arbeidsavklaringspenger.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Arbeidsavklaringspenger.kt index 849b3b7fa8..06390ae440 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Arbeidsavklaringspenger.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Arbeidsavklaringspenger.kt @@ -6,7 +6,11 @@ import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import no.nav.helse.person.aktivitetslogg.Varselkode class Arbeidsavklaringspenger(val perioder: List) { - internal fun valider(aktivitetslogg: IAktivitetslogg, skjæringstidspunkt: LocalDate, periode: Periode): IAktivitetslogg { + internal fun valider( + aktivitetslogg: IAktivitetslogg, + skjæringstidspunkt: LocalDate, + periode: Periode + ): IAktivitetslogg { if (perioder.isEmpty()) { aktivitetslogg.info("Bruker har ingen arbeidsavklaringspenger") return aktivitetslogg diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/ArbeidsgiverInntekt.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/ArbeidsgiverInntekt.kt index 912ca02429..7734c6ed9d 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/ArbeidsgiverInntekt.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/ArbeidsgiverInntekt.kt @@ -34,13 +34,18 @@ class ArbeidsgiverInntekt( Inntektsmelding( dato = skjæringstidspunkt, hendelseId = meldingsreferanseId, - beløp = Skatteopplysning.omregnetÅrsinntekt(inntekter.map { it.somInntekt(meldingsreferanseId) }), + beløp = Skatteopplysning.omregnetÅrsinntekt(inntekter.map { + it.somInntekt( + meldingsreferanseId + ) + }), kilde = Inntektsmelding.Kilde.AOrdningen ) internal fun somEksterneSkatteinntekter() = inntekter.somEksterneSkatteinntekter() - internal fun omregnetÅrsinntekt(meldingsreferanseId: UUID) = Skatteopplysning.omregnetÅrsinntekt(inntekter.map { it.somInntekt(meldingsreferanseId) }).årlig + internal fun omregnetÅrsinntekt(meldingsreferanseId: UUID) = + Skatteopplysning.omregnetÅrsinntekt(inntekter.map { it.somInntekt(meldingsreferanseId) }).årlig internal companion object { internal fun List.avklarSykepengegrunnlag( @@ -51,9 +56,15 @@ class ArbeidsgiverInntekt( meldingsreferanseId: UUID, subsumsjonslogg: Subsumsjonslogg ): Inntektsgrunnlag { - val rapporterteInntekter = this.associateBy({ it.arbeidsgiver }) { it.tilSykepengegrunnlag(skjæringstidspunkt, meldingsreferanseId) } + val rapporterteInntekter = this.associateBy({ it.arbeidsgiver }) { + it.tilSykepengegrunnlag( + skjæringstidspunkt, + meldingsreferanseId + ) + } // tar utgangspunktet i inntekter som bare stammer fra orgnr vedkommende har registrert arbeidsforhold - val inntekterMedOpptjening = rapporterteArbeidsforhold.mapValues { (orgnummer, ikkeRapportert) -> ikkeRapportert + rapporterteInntekter[orgnummer] } + val inntekterMedOpptjening = + rapporterteArbeidsforhold.mapValues { (orgnummer, ikkeRapportert) -> ikkeRapportert + rapporterteInntekter[orgnummer] } return person.avklarSykepengegrunnlag( aktivitetslogg, skjæringstidspunkt, @@ -89,11 +100,15 @@ class ArbeidsgiverInntekt( ) companion object { - internal fun List.harInntektFor(måned: YearMonth) = this.any { it.yearMonth == måned && it.inntekt > Inntekt.INGEN} + internal fun List.harInntektFor(måned: YearMonth) = + this.any { it.yearMonth == måned && it.inntekt > Inntekt.INGEN } internal fun List.somEksterneSkatteinntekter(): List { return map { - PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt(it.yearMonth, it.inntekt.månedlig) + PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt( + it.yearMonth, + it.inntekt.månedlig + ) } } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/DagerFraInntektsmelding.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/DagerFraInntektsmelding.kt index 5a82f7dc95..5890c07fc4 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/DagerFraInntektsmelding.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/DagerFraInntektsmelding.kt @@ -46,20 +46,27 @@ internal class DagerFraInntektsmelding( ) { private companion object { private const val MAKS_ANTALL_DAGER_MELLOM_TIDLIGERE_OG_NY_AGP_FOR_HÅNDTERING_AV_DAGER = 10 - private const val MAKS_ANTALL_DAGER_MELLOM_FØRSTE_FRAVÆRSDAG_OG_AGP_FOR_HÅNDTERING_AV_DAGER = 20 + private const val MAKS_ANTALL_DAGER_MELLOM_FØRSTE_FRAVÆRSDAG_OG_AGP_FOR_HÅNDTERING_AV_DAGER = + 20 } // TODO: kilden må være av en type som arver SykdomshistorikkHendelse; altså BitAvInntektsmelding // krever nok at vi json-migrerer alle "Inntektsmelding" til "BitAvInntektsmelding" først - internal val kilde = Hendelseskilde("Inntektsmelding", hendelse.metadata.meldingsreferanseId, mottatt) - private val dokumentsporing = Dokumentsporing.inntektsmeldingDager(hendelse.metadata.meldingsreferanseId) - private val begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt.takeUnless { it.isNullOrBlank() } + internal val kilde = + Hendelseskilde("Inntektsmelding", hendelse.metadata.meldingsreferanseId, mottatt) + private val dokumentsporing = + Dokumentsporing.inntektsmeldingDager(hendelse.metadata.meldingsreferanseId) + private val begrunnelseForReduksjonEllerIkkeUtbetalt = + begrunnelseForReduksjonEllerIkkeUtbetalt.takeUnless { it.isNullOrBlank() } private val arbeidsgiverperiode = arbeidsgiverperioder.periode() private val overlappsperiode = when { // første fraværsdag er oppgitt etter arbeidsgiverperioden arbeidsgiverperiode == null || førsteFraværsdag != null && førsteFraværsdag > arbeidsgiverperiode.endInclusive.nesteDag -> førsteFraværsdag?.somPeriode() // kant-i-kant - førsteFraværsdag?.forrigeDag == arbeidsgiverperiode.endInclusive -> arbeidsgiverperiode.oppdaterTom(arbeidsgiverperiode.endInclusive.nesteDag) + førsteFraværsdag?.forrigeDag == arbeidsgiverperiode.endInclusive -> arbeidsgiverperiode.oppdaterTom( + arbeidsgiverperiode.endInclusive.nesteDag + ) + else -> arbeidsgiverperiode } private val sykdomstidslinje = lagSykdomstidslinje() @@ -73,12 +80,13 @@ internal class DagerFraInntektsmelding( val gjenståendeDager get() = _gjenståendeDager.toSet() private val håndterteDager = mutableSetOf() - private val ignorerDager: Boolean get() { - if (begrunnelseForReduksjonEllerIkkeUtbetalt == null) return false - if (begrunnelseForReduksjonEllerIkkeUtbetalt in ikkeStøttedeBegrunnelserForReduksjon) return true - if (hulleteArbeidsgiverperiode()) return true - return false - } + private val ignorerDager: Boolean + get() { + if (begrunnelseForReduksjonEllerIkkeUtbetalt == null) return false + if (begrunnelseForReduksjonEllerIkkeUtbetalt in ikkeStøttedeBegrunnelserForReduksjon) return true + if (hulleteArbeidsgiverperiode()) return true + return false + } private var harValidert: Periode? = null private fun lagSykdomstidslinje(): Sykdomstidslinje { @@ -94,7 +102,9 @@ internal class DagerFraInntektsmelding( if (ignorerDager) return Sykdomstidslinje() if (arbeidsgiverperiodenKanIkkeTolkes()) return null - val arbeidsdager = arbeidsgiverperiode?.let { Sykdomstidslinje.arbeidsdager(arbeidsgiverperiode, kilde) } ?: Sykdomstidslinje() + val arbeidsdager = + arbeidsgiverperiode?.let { Sykdomstidslinje.arbeidsdager(arbeidsgiverperiode, kilde) } + ?: Sykdomstidslinje() val friskHelg = friskHelgMellomFørsteFraværsdagOgArbeidsgiverperioden() return arbeidsdager.merge(lagArbeidsgivertidslinje(), Dag.replace).merge(friskHelg) } @@ -108,14 +118,18 @@ internal class DagerFraInntektsmelding( private fun friskHelgMellomFørsteFraværsdagOgArbeidsgiverperioden(): Sykdomstidslinje { if (førsteFraværsdag == null) return Sykdomstidslinje() if (arbeidsgiverperiode?.erRettFør(førsteFraværsdag) != true) return Sykdomstidslinje() - val helgen = arbeidsgiverperiode.periodeMellom(førsteFraværsdag) ?: return Sykdomstidslinje() + val helgen = + arbeidsgiverperiode.periodeMellom(førsteFraværsdag) ?: return Sykdomstidslinje() return Sykdomstidslinje.arbeidsdager(helgen, kilde) } private fun lagArbeidsgivertidslinje(): Sykdomstidslinje { val agp = arbeidsgiverperioder.map(::arbeidsgiverdager).merge() if (begrunnelseForReduksjonEllerIkkeUtbetalt == null) return agp - return agp.merge(arbeidsgiverperiodeNavSkalUtbetale().map(::sykedagerNav).merge(), Dag.replace) + return agp.merge( + arbeidsgiverperiodeNavSkalUtbetale().map(::sykedagerNav).merge(), + Dag.replace + ) } private fun arbeidsgiverperiodeNavSkalUtbetale(): List { @@ -123,13 +137,17 @@ internal class DagerFraInntektsmelding( return listOfNotNull(førsteFraværsdag?.somPeriode()) } - private fun arbeidsgiverdager(periode: Periode) = Sykdomstidslinje.arbeidsgiverdager(periode.start, periode.endInclusive, 100.prosent, kilde) - private fun sykedagerNav(periode: Periode) = Sykdomstidslinje.sykedagerNav(periode.start, periode.endInclusive, 100.prosent, kilde) + private fun arbeidsgiverdager(periode: Periode) = + Sykdomstidslinje.arbeidsgiverdager(periode.start, periode.endInclusive, 100.prosent, kilde) - internal fun alleredeHåndtert(behandlinger: Behandlinger) = behandlinger.dokumentHåndtert(dokumentsporing) + private fun sykedagerNav(periode: Periode) = + Sykdomstidslinje.sykedagerNav(periode.start, periode.endInclusive, 100.prosent, kilde) + + internal fun alleredeHåndtert(behandlinger: Behandlinger) = + behandlinger.dokumentHåndtert(dokumentsporing) internal fun vurdertTilOgMed(dato: LocalDate) { - _gjenståendeDager.removeAll { gjenstående -> gjenstående <= dato} + _gjenståendeDager.removeAll { gjenstående -> gjenstående <= dato } } internal fun leggTilArbeidsdagerFør(dato: LocalDate) { @@ -141,7 +159,7 @@ internal class DagerFraInntektsmelding( _gjenståendeDager.addAll(arbeidsdagerFør) } - private fun overlappendeDager(periode: Periode) = periode.intersect(_gjenståendeDager) + private fun overlappendeDager(periode: Periode) = periode.intersect(_gjenståendeDager) private fun periodeRettFør(periode: Periode) = _gjenståendeDager.periodeRettFør(periode.start) @@ -152,14 +170,19 @@ internal class DagerFraInntektsmelding( } internal fun skalHåndteresAv(periode: Periode): Boolean { - val vedtaksperiodeRettFør = _gjenståendeDager.isNotEmpty() && periode.endInclusive.erRettFør(_gjenståendeDager.first()) - return skalHåndtere(periode) || vedtaksperiodeRettFør || tomSykdomstidslinjeMenSkalValidere(periode) || egenmeldingerIForkantAvPerioden(periode) + val vedtaksperiodeRettFør = + _gjenståendeDager.isNotEmpty() && periode.endInclusive.erRettFør(_gjenståendeDager.first()) + return skalHåndtere(periode) || vedtaksperiodeRettFør || tomSykdomstidslinjeMenSkalValidere( + periode + ) || egenmeldingerIForkantAvPerioden(periode) } private fun tomSykdomstidslinjeMenSkalValidere(periode: Periode) = - (opprinneligPeriode == null && skalValideresAv(periode)).also { if (it) { - harValidert = periode - }} + (opprinneligPeriode == null && skalValideresAv(periode)).also { + if (it) { + harValidert = periode + } + } // om vedtaksperioden ikke direkte overlapper med gjenståendeDager, men gjenståendeDager er ikke tom, og vedtaksperioden overlapper // med første fraværsdag, betyr det at inntektsmeldingen informerer om egenmeldinger vi ikke har søknad for. @@ -167,29 +190,53 @@ internal class DagerFraInntektsmelding( private fun egenmeldingerIForkantAvPerioden(periode: Periode) = (overlappsperiode != null && overlappsperiode.overlapperMed(periode) && _gjenståendeDager.isNotEmpty()) - internal fun skalHåndteresAvRevurdering(periode: Periode, sammenhengende: Periode, arbeidsgiverperiode: Arbeidsgiverperiode?): Boolean { + internal fun skalHåndteresAvRevurdering( + periode: Periode, + sammenhengende: Periode, + arbeidsgiverperiode: Arbeidsgiverperiode? + ): Boolean { if (skalHåndtere(periode)) return true // vedtaksperiodene før dagene skal bare håndtere dagene om de nye opplyste dagene er nærmere enn 10 dager fra forrige AGP-beregning if (opprinneligPeriode == null || arbeidsgiverperiode == null) return false - val periodeMellomForrigeAgpOgNyAgp = arbeidsgiverperiode.omsluttendePeriode?.periodeMellom(opprinneligPeriode.start) ?: return false - return periodeMellomForrigeAgpOgNyAgp.count() <= MAKS_ANTALL_DAGER_MELLOM_TIDLIGERE_OG_NY_AGP_FOR_HÅNDTERING_AV_DAGER && sammenhengende.contains(periodeMellomForrigeAgpOgNyAgp) + val periodeMellomForrigeAgpOgNyAgp = + arbeidsgiverperiode.omsluttendePeriode?.periodeMellom(opprinneligPeriode.start) + ?: return false + return periodeMellomForrigeAgpOgNyAgp.count() <= MAKS_ANTALL_DAGER_MELLOM_TIDLIGERE_OG_NY_AGP_FOR_HÅNDTERING_AV_DAGER && sammenhengende.contains( + periodeMellomForrigeAgpOgNyAgp + ) } internal fun harBlittHåndtertAv(periode: Periode) = håndterteDager.any { it in periode } - internal fun bitAvInntektsmelding(aktivitetslogg: IAktivitetslogg, vedtaksperiode: Periode): BitAvInntektsmelding? { + internal fun bitAvInntektsmelding( + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Periode + ): BitAvInntektsmelding? { val sykdomstidslinje = håndterDager(aktivitetslogg, vedtaksperiode) ?: return null return BitAvInntektsmelding(hendelse.metadata, sykdomstidslinje) } - internal fun tomBitAvInntektsmelding(aktivitetslogg: IAktivitetslogg, vedtaksperiode: Periode): BitAvInntektsmelding { + internal fun tomBitAvInntektsmelding( + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Periode + ): BitAvInntektsmelding { håndterDager(aktivitetslogg, vedtaksperiode) return BitAvInntektsmelding(hendelse.metadata, Sykdomstidslinje()) } - private fun håndterDager(aktivitetslogg: IAktivitetslogg, vedtaksperiode: Periode): Sykdomstidslinje? { + private fun håndterDager( + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Periode + ): Sykdomstidslinje? { val periode = håndterDagerFør(vedtaksperiode) ?: return null - if (periode.start != vedtaksperiode.start) aktivitetslogg.info("Perioden ble strukket tilbake fra ${vedtaksperiode.start} til ${periode.start} (${ChronoUnit.DAYS.between(periode.start, vedtaksperiode.start)} dager)") + if (periode.start != vedtaksperiode.start) aktivitetslogg.info( + "Perioden ble strukket tilbake fra ${vedtaksperiode.start} til ${periode.start} (${ + ChronoUnit.DAYS.between( + periode.start, + vedtaksperiode.start + ) + } dager)" + ) val sykdomstidslinje = samletSykdomstidslinje(periode) håndterteDager.addAll(periode.toList()) @@ -199,6 +246,7 @@ internal class DagerFraInntektsmelding( private fun samletSykdomstidslinje(periode: Periode) = (arbeidsdagertidslinje() + sykdomstidslinje).subset(periode) + private fun arbeidsdagertidslinje() = arbeidsdager.map { Sykdomstidslinje.arbeidsdager(it, it, kilde) }.merge() @@ -209,7 +257,9 @@ internal class DagerFraInntektsmelding( return periode } - private fun skalValideresAv(periode: Periode) = overlappsperiode?.overlapperMed(periode) == true || ikkeUtbetaltAGPOgAGPOverlapper(periode) + private fun skalValideresAv(periode: Periode) = + overlappsperiode?.overlapperMed(periode) == true || ikkeUtbetaltAGPOgAGPOverlapper(periode) + private fun ikkeUtbetaltAGPOgAGPOverlapper(periode: Periode): Boolean { if (begrunnelseForReduksjonEllerIkkeUtbetalt == null) return false if (arbeidsgiverperiode == null) return false @@ -217,7 +267,11 @@ internal class DagerFraInntektsmelding( return arbeidsgiverperiode.overlapperMed(periode) } - internal fun valider(aktivitetslogg: IAktivitetslogg, periode: Periode, gammelAgp: Arbeidsgiverperiode? = null) { + internal fun valider( + aktivitetslogg: IAktivitetslogg, + periode: Periode, + gammelAgp: Arbeidsgiverperiode? = null + ) { if (!skalValideresAv(periode)) return if (harOpphørAvNaturalytelser) aktivitetslogg.funksjonellFeil(Varselkode.RV_IM_7) if (harFlereInntektsmeldinger) aktivitetslogg.varsel(Varselkode.RV_IM_22) @@ -227,8 +281,12 @@ internal class DagerFraInntektsmelding( private fun validerBegrunnelseForReduksjonEllerIkkeUtbetalt(aktivitetslogg: IAktivitetslogg) { if (begrunnelseForReduksjonEllerIkkeUtbetalt == null) return - aktivitetslogg.info("Arbeidsgiver har redusert utbetaling av arbeidsgiverperioden på grunn av: %s".format(begrunnelseForReduksjonEllerIkkeUtbetalt)) - if (!kjenteBegrunnelserForReduksjon.contains(begrunnelseForReduksjonEllerIkkeUtbetalt)){ + aktivitetslogg.info( + "Arbeidsgiver har redusert utbetaling av arbeidsgiverperioden på grunn av: %s".format( + begrunnelseForReduksjonEllerIkkeUtbetalt + ) + ) + if (!kjenteBegrunnelserForReduksjon.contains(begrunnelseForReduksjonEllerIkkeUtbetalt)) { aktivitetslogg.info("Kjenner ikke til betydning av $begrunnelseForReduksjonEllerIkkeUtbetalt") } if (hulleteArbeidsgiverperiode()) aktivitetslogg.funksjonellFeil(RV_IM_23) @@ -243,14 +301,28 @@ internal class DagerFraInntektsmelding( return arbeidsgiverperioder.size > 1 && (førsteFraværsdag == null || førsteFraværsdag in arbeidsgiverperiode!!) } - internal fun validerArbeidsgiverperiode(aktivitetslogg: IAktivitetslogg, periode: Periode, beregnetArbeidsgiverperiode: Arbeidsgiverperiode?) { + internal fun validerArbeidsgiverperiode( + aktivitetslogg: IAktivitetslogg, + periode: Periode, + beregnetArbeidsgiverperiode: Arbeidsgiverperiode? + ) { if (!skalValideresAv(periode)) return - if (_gjenståendeDager.isNotEmpty()) return validator.validerFeilaktigNyArbeidsgiverperiode(aktivitetslogg, periode, beregnetArbeidsgiverperiode) - if (beregnetArbeidsgiverperiode != null) validerArbeidsgiverperiode(aktivitetslogg, beregnetArbeidsgiverperiode) + if (_gjenståendeDager.isNotEmpty()) return validator.validerFeilaktigNyArbeidsgiverperiode( + aktivitetslogg, + periode, + beregnetArbeidsgiverperiode + ) + if (beregnetArbeidsgiverperiode != null) validerArbeidsgiverperiode( + aktivitetslogg, + beregnetArbeidsgiverperiode + ) if (arbeidsgiverperioder.isEmpty()) aktivitetslogg.info("Inntektsmeldingen mangler arbeidsgiverperiode. Vurder om vilkårene for sykepenger er oppfylt, og om det skal være arbeidsgiverperiode") } - private fun validerArbeidsgiverperiode(aktivitetslogg: IAktivitetslogg, arbeidsgiverperiode: Arbeidsgiverperiode) { + private fun validerArbeidsgiverperiode( + aktivitetslogg: IAktivitetslogg, + arbeidsgiverperiode: Arbeidsgiverperiode + ) { if (arbeidsgiverperiode.sammenlign(arbeidsgiverperioder)) return validator.uenigOmArbeidsgiverperiode(aktivitetslogg) } @@ -266,7 +338,8 @@ internal class DagerFraInntektsmelding( val erRettFør = overlappsperiode.erRettFør(sykmeldingsperiode) if (erRettFør) return@mapNotNull sykmeldingsperiode val dagerMellom = - overlappsperiode.periodeMellom(sykmeldingsperiode.start)?.count() ?: return@mapNotNull null + overlappsperiode.periodeMellom(sykmeldingsperiode.start)?.count() + ?: return@mapNotNull null if (dagerMellom < MINIMALT_TILLATT_AVSTAND_TIL_INFOTRYGD) sykmeldingsperiode else null } } @@ -276,17 +349,28 @@ internal class DagerFraInntektsmelding( return overlappsperiode.overlapperMed(periode) } - private fun validerOverstigerMaksimaltTillatAvstandMellomTidligereAGP(aktivitetslogg: IAktivitetslogg, gammelAgp: Arbeidsgiverperiode?) { + private fun validerOverstigerMaksimaltTillatAvstandMellomTidligereAGP( + aktivitetslogg: IAktivitetslogg, + gammelAgp: Arbeidsgiverperiode? + ) { if (!overstigerMaksimaltTillatAvstandMellomTidligereAGP(gammelAgp)) return - aktivitetslogg.varsel(Varselkode.RV_IM_24, "Ignorerer dager fra inntektsmelding fordi perioden mellom gammel agp og opplyst agp er mer enn 10 dager") + aktivitetslogg.varsel( + Varselkode.RV_IM_24, + "Ignorerer dager fra inntektsmelding fordi perioden mellom gammel agp og opplyst agp er mer enn 10 dager" + ) } + private fun overstigerMaksimaltTillatAvstandMellomTidligereAGP(gammelAgp: Arbeidsgiverperiode?): Boolean { if (opprinneligPeriode == null) return false - val periodeMellom = gammelAgp?.omsluttendePeriode?.periodeMellom(opprinneligPeriode.start) ?: return false + val periodeMellom = + gammelAgp?.omsluttendePeriode?.periodeMellom(opprinneligPeriode.start) ?: return false return periodeMellom.count() > MAKS_ANTALL_DAGER_MELLOM_TIDLIGERE_OG_NY_AGP_FOR_HÅNDTERING_AV_DAGER } - internal fun erKorrigeringForGammel(aktivitetslogg: IAktivitetslogg, gammelAgp: Arbeidsgiverperiode?): Boolean { + internal fun erKorrigeringForGammel( + aktivitetslogg: IAktivitetslogg, + gammelAgp: Arbeidsgiverperiode? + ): Boolean { if (opprinneligPeriode == null) return true if (gammelAgp == null) return false if (overstigerMaksimaltTillatAvstandMellomTidligereAGP(gammelAgp)) return true @@ -304,9 +388,13 @@ internal class DagerFraInntektsmelding( return Revurderingseventyr.arbeidsgiverperiode(hendelse, dagene.start, dagene) } - internal class BitAvInntektsmelding(val metadata: HendelseMetadata, private val sykdomstidslinje: Sykdomstidslinje): SykdomshistorikkHendelse { + internal class BitAvInntektsmelding( + val metadata: HendelseMetadata, + private val sykdomstidslinje: Sykdomstidslinje + ) : SykdomshistorikkHendelse { override fun oppdaterFom(other: Periode) = other.oppdaterFom(sykdomstidslinje().periode() ?: other) + override fun sykdomstidslinje() = sykdomstidslinje } @@ -331,7 +419,8 @@ internal class DagerFraInntektsmelding( "BeskjedGittForSent", "IkkeLoenn" ) - internal val kjenteBegrunnelserForReduksjon = støttedeBegrunnelserForReduksjon + ikkeStøttedeBegrunnelserForReduksjon + internal val kjenteBegrunnelserForReduksjon = + støttedeBegrunnelserForReduksjon + ikkeStøttedeBegrunnelserForReduksjon internal enum class FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetalt { ARBEIDSGIVER_VIL_IKKE_DEKKE_NY_AGP_TROSS_GAP, @@ -358,21 +447,41 @@ internal class DagerFraInntektsmelding( } private sealed interface Validator { - fun validerFeilaktigNyArbeidsgiverperiode(aktivitetslogg: IAktivitetslogg, vedtaksperiode: Periode, beregnetArbeidsgiverperiode: Arbeidsgiverperiode?) + fun validerFeilaktigNyArbeidsgiverperiode( + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Periode, + beregnetArbeidsgiverperiode: Arbeidsgiverperiode? + ) + fun uenigOmArbeidsgiverperiode(aktivitetslogg: IAktivitetslogg) } - private data object ForespurtPortalinntektsmeldingUtenArbeidsgiverperiodeValidering: Validator { - override fun validerFeilaktigNyArbeidsgiverperiode(aktivitetslogg: IAktivitetslogg, vedtaksperiode: Periode, beregnetArbeidsgiverperiode: Arbeidsgiverperiode?) {} + private data object ForespurtPortalinntektsmeldingUtenArbeidsgiverperiodeValidering : + Validator { + override fun validerFeilaktigNyArbeidsgiverperiode( + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Periode, + beregnetArbeidsgiverperiode: Arbeidsgiverperiode? + ) { + } + override fun uenigOmArbeidsgiverperiode(aktivitetslogg: IAktivitetslogg) {} } - private data object DefaultValidering: Validator { - override fun validerFeilaktigNyArbeidsgiverperiode(aktivitetslogg: IAktivitetslogg, vedtaksperiode: Periode, beregnetArbeidsgiverperiode: Arbeidsgiverperiode?) { - beregnetArbeidsgiverperiode?.validerFeilaktigNyArbeidsgiverperiode(vedtaksperiode, aktivitetslogg) + private data object DefaultValidering : Validator { + override fun validerFeilaktigNyArbeidsgiverperiode( + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Periode, + beregnetArbeidsgiverperiode: Arbeidsgiverperiode? + ) { + beregnetArbeidsgiverperiode?.validerFeilaktigNyArbeidsgiverperiode( + vedtaksperiode, + aktivitetslogg + ) } + override fun uenigOmArbeidsgiverperiode(aktivitetslogg: IAktivitetslogg) { aktivitetslogg.varsel(Varselkode.RV_IM_3) } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Dagpenger.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Dagpenger.kt index abb51ab0e4..cfcd683966 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Dagpenger.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Dagpenger.kt @@ -6,7 +6,11 @@ import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import no.nav.helse.person.aktivitetslogg.Varselkode.RV_AY_4 class Dagpenger(val perioder: List) { - internal fun valider(aktivitetslogg: IAktivitetslogg, skjæringstidspunkt: LocalDate, periode: Periode): IAktivitetslogg { + internal fun valider( + aktivitetslogg: IAktivitetslogg, + skjæringstidspunkt: LocalDate, + periode: Periode + ): IAktivitetslogg { if (perioder.isEmpty()) { aktivitetslogg.info("Bruker har ingen dagpenger") return aktivitetslogg diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Foreldrepenger.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Foreldrepenger.kt index bd8bee6045..90e8a56a22 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Foreldrepenger.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Foreldrepenger.kt @@ -12,18 +12,28 @@ import no.nav.helse.sykdomstidslinje.Sykdomstidslinje class Foreldrepenger( private val foreldrepengeytelse: List -): AnnenYtelseSomKanOppdatereHistorikk() { +) : AnnenYtelseSomKanOppdatereHistorikk() { private val perioder get() = foreldrepengeytelse.map { it.periode } - internal fun valider(aktivitetslogg: IAktivitetslogg, sykdomsperiode: Periode, erForlengelse: Boolean) { + internal fun valider( + aktivitetslogg: IAktivitetslogg, + sykdomsperiode: Periode, + erForlengelse: Boolean + ) { if (foreldrepengeytelse.isEmpty()) return aktivitetslogg.info("Bruker har ingen foreldrepenger") varselHvisOverlapperMedForeldrepenger(aktivitetslogg, erForlengelse, sykdomsperiode) varselHvisForlengerForeldrepengerMerEnn14Dager(aktivitetslogg, sykdomsperiode) } - private fun varselHvisOverlapperMedForeldrepenger(aktivitetslogg: IAktivitetslogg, erForlengelse: Boolean, sykdomsperiode: Periode) { - val overlappsperiode = if (erForlengelse) sykdomsperiode else sykdomsperiode.familieYtelserPeriode - val overlapperMedForeldrepenger = perioder.any { ytelse -> ytelse.overlapperMed(overlappsperiode) } + private fun varselHvisOverlapperMedForeldrepenger( + aktivitetslogg: IAktivitetslogg, + erForlengelse: Boolean, + sykdomsperiode: Periode + ) { + val overlappsperiode = + if (erForlengelse) sykdomsperiode else sykdomsperiode.familieYtelserPeriode + val overlapperMedForeldrepenger = + perioder.any { ytelse -> ytelse.overlapperMed(overlappsperiode) } if (overlapperMedForeldrepenger) { aktivitetslogg.varsel(Varselkode.`Overlapper med foreldrepenger`) } else { @@ -31,28 +41,52 @@ class Foreldrepenger( } } - private fun varselHvisForlengerForeldrepengerMerEnn14Dager(aktivitetslogg: IAktivitetslogg, sykdomsperiode: Periode) { - val foreldrepengeperiodeFør = foreldrepengeytelse.lastOrNull { it.periode.endInclusive < sykdomsperiode.start } ?: return - val harForeldrepengerAlleDager = foreldrepengeperiodeFør.periode.erRettFør(sykdomsperiode) && foreldrepengeperiodeFør.periode.count() > 14 && foreldrepengeperiodeFør.grad == 100 + private fun varselHvisForlengerForeldrepengerMerEnn14Dager( + aktivitetslogg: IAktivitetslogg, + sykdomsperiode: Periode + ) { + val foreldrepengeperiodeFør = + foreldrepengeytelse.lastOrNull { it.periode.endInclusive < sykdomsperiode.start } + ?: return + val harForeldrepengerAlleDager = + foreldrepengeperiodeFør.periode.erRettFør(sykdomsperiode) && foreldrepengeperiodeFør.periode.count() > 14 && foreldrepengeperiodeFør.grad == 100 if (!harForeldrepengerAlleDager) return aktivitetslogg.varsel(Varselkode.`Forlenger foreldrepenger med mer enn 14 dager`) } - override fun sykdomstidslinje(meldingsreferanseId: UUID, registrert: LocalDateTime): Sykdomstidslinje { + override fun sykdomstidslinje( + meldingsreferanseId: UUID, + registrert: LocalDateTime + ): Sykdomstidslinje { if (foreldrepengeytelse.isEmpty()) return Sykdomstidslinje() - require(foreldrepengeytelse.map { it.periode }.grupperSammenhengendePerioder().size == 1) {"Ikke trygt å kalle sykdomstidslinjen til ${this.javaClass.simpleName} når det er huller i ytelser"} - val hendelseskilde = SykdomshistorikkHendelse.Hendelseskilde(Ytelser::class, meldingsreferanseId, registrert) + require(foreldrepengeytelse.map { it.periode } + .grupperSammenhengendePerioder().size == 1) { "Ikke trygt å kalle sykdomstidslinjen til ${this.javaClass.simpleName} når det er huller i ytelser" } + val hendelseskilde = + SykdomshistorikkHendelse.Hendelseskilde(Ytelser::class, meldingsreferanseId, registrert) val førsteDag = foreldrepengeytelse.map { it.periode }.minOf { it.start } val sisteDag = foreldrepengeytelse.map { it.periode }.maxOf { it.endInclusive } - val sykdomstidslinje = Sykdomstidslinje.andreYtelsedager(førsteDag, sisteDag, hendelseskilde, Dag.AndreYtelser.AnnenYtelse.Foreldrepenger) + val sykdomstidslinje = Sykdomstidslinje.andreYtelsedager( + førsteDag, + sisteDag, + hendelseskilde, + Dag.AndreYtelser.AnnenYtelse.Foreldrepenger + ) return sykdomstidslinje } - override fun skalOppdatereHistorikk(vedtaksperiode: Periode, skjæringstidspunkt: LocalDate, vedtaksperiodeRettEtter: Periode?): Pair { - return foreldrepengeytelse.skalOppdatereHistorikkIHalen(vedtaksperiode, skjæringstidspunkt, vedtaksperiodeRettEtter) + override fun skalOppdatereHistorikk( + vedtaksperiode: Periode, + skjæringstidspunkt: LocalDate, + vedtaksperiodeRettEtter: Periode? + ): Pair { + return foreldrepengeytelse.skalOppdatereHistorikkIHalen( + vedtaksperiode, + skjæringstidspunkt, + vedtaksperiodeRettEtter + ) } internal fun perioder(): List { return foreldrepengeytelse.map { it.periode } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/ForkastSykmeldingsperioder.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/ForkastSykmeldingsperioder.kt index ee3e7d8ebd..a60d4915b0 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/ForkastSykmeldingsperioder.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/ForkastSykmeldingsperioder.kt @@ -8,7 +8,7 @@ class ForkastSykmeldingsperioder( meldingsreferanseId: UUID, organisasjonsnummer: String, private val periode: Periode -): Hendelse { +) : Hendelse { override val behandlingsporing = Behandlingsporing.Arbeidsgiver( organisasjonsnummer = organisasjonsnummer ) @@ -26,4 +26,4 @@ class ForkastSykmeldingsperioder( internal fun forkast(sykdomsperioder: Sykmeldingsperioder) { sykdomsperioder.fjern(periode) } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Grunnbel\303\270psregulering.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Grunnbel\303\270psregulering.kt" index 8afa5dd0cb..8ec887b20a 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Grunnbel\303\270psregulering.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Grunnbel\303\270psregulering.kt" @@ -10,7 +10,7 @@ class Grunnbeløpsregulering( meldingsreferanseId: UUID, private val skjæringstidspunkt: LocalDate, private val opprettet: LocalDateTime -): Hendelse, OverstyrInntektsgrunnlag { +) : Hendelse, OverstyrInntektsgrunnlag { override val behandlingsporing = Behandlingsporing.IngenArbeidsgiver override val metadata = HendelseMetadata( @@ -31,4 +31,4 @@ class Grunnbeløpsregulering( ) ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Hendelse.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Hendelse.kt index ad19534bf3..9b3d65cf45 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Hendelse.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Hendelse.kt @@ -13,6 +13,7 @@ enum class Avsender { SAKSBEHANDLER -> AvsenderDto.SAKSBEHANDLER SYSTEM -> AvsenderDto.SYSTEM } + companion object { fun gjenopprett(dto: AvsenderDto): Avsender { return when (dto) { @@ -48,4 +49,4 @@ data class HendelseMetadata( // sann hvis et system har sendt meldingen på eget initiativ val automatiskBehandling: Boolean -) \ No newline at end of file +) diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Inntektsmelding.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Inntektsmelding.kt index ebd715998d..a3e36fd782 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Inntektsmelding.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Inntektsmelding.kt @@ -60,45 +60,74 @@ class Inntektsmelding( ) private val arbeidsgiverperioder = arbeidsgiverperioder.grupperSammenhengendePerioder() - private val dager get() = DagerFraInntektsmelding( - arbeidsgiverperioder = this.arbeidsgiverperioder, - førsteFraværsdag = type.førsteFraværsdagForHåndteringAvDager(this), - mottatt = metadata.registrert, - begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, - avsendersystem = avsendersystem, - harFlereInntektsmeldinger = harFlereInntektsmeldinger, - harOpphørAvNaturalytelser = harOpphørAvNaturalytelser, - hendelse = this - ) + private val dager + get() = DagerFraInntektsmelding( + arbeidsgiverperioder = this.arbeidsgiverperioder, + førsteFraværsdag = type.førsteFraværsdagForHåndteringAvDager(this), + mottatt = metadata.registrert, + begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, + avsendersystem = avsendersystem, + harFlereInntektsmeldinger = harFlereInntektsmeldinger, + harOpphørAvNaturalytelser = harOpphørAvNaturalytelser, + hendelse = this + ) private var håndtertInntekt = false private val dokumentsporing = Dokumentsporing.inntektsmeldingInntekt(meldingsreferanseId) - internal fun addInntekt(inntektshistorikk: Inntektshistorikk, aktivitetslogg: IAktivitetslogg, alternativInntektsdato: LocalDate) { - val inntektsdato = type.alternativInntektsdatoForInntekthistorikk(this, alternativInntektsdato) ?: return - if (!inntektshistorikk.leggTil(InntektsmeldingInntekt(inntektsdato, metadata.meldingsreferanseId, beregnetInntekt))) return + internal fun addInntekt( + inntektshistorikk: Inntektshistorikk, + aktivitetslogg: IAktivitetslogg, + alternativInntektsdato: LocalDate + ) { + val inntektsdato = + type.alternativInntektsdatoForInntekthistorikk(this, alternativInntektsdato) ?: return + if (!inntektshistorikk.leggTil( + InntektsmeldingInntekt( + inntektsdato, + metadata.meldingsreferanseId, + beregnetInntekt + ) + )) return aktivitetslogg.info("Lagrer inntekt på alternativ inntektsdato $inntektsdato") } - internal fun addInntekt(inntektshistorikk: Inntektshistorikk, subsumsjonslogg: Subsumsjonslogg): LocalDate { + internal fun addInntekt( + inntektshistorikk: Inntektshistorikk, + subsumsjonslogg: Subsumsjonslogg + ): LocalDate { subsumsjonslogg.logg(`§ 8-10 ledd 3`(beregnetInntekt.årlig, beregnetInntekt.daglig)) val inntektsdato = type.inntektsdato(this) - inntektshistorikk.leggTil(InntektsmeldingInntekt(inntektsdato, metadata.meldingsreferanseId, beregnetInntekt)) + inntektshistorikk.leggTil( + InntektsmeldingInntekt( + inntektsdato, + metadata.meldingsreferanseId, + beregnetInntekt + ) + ) return inntektsdato } internal fun skjæringstidspunkt(person: Person) = type.skjæringstidspunkt(this, person) - private val refusjonsElement get() = Refusjonshistorikk.Refusjon( - meldingsreferanseId = metadata.meldingsreferanseId, - førsteFraværsdag = type.refusjonsdato(this), - arbeidsgiverperioder = arbeidsgiverperioder, - beløp = refusjon.beløp, - sisteRefusjonsdag = refusjon.opphørsdato, - endringerIRefusjon = refusjon.endringerIRefusjon.map { it.tilEndring() }, - tidsstempel = metadata.registrert - ) + private val refusjonsElement + get() = Refusjonshistorikk.Refusjon( + meldingsreferanseId = metadata.meldingsreferanseId, + førsteFraværsdag = type.refusjonsdato(this), + arbeidsgiverperioder = arbeidsgiverperioder, + beløp = refusjon.beløp, + sisteRefusjonsdag = refusjon.opphørsdato, + endringerIRefusjon = refusjon.endringerIRefusjon.map { it.tilEndring() }, + tidsstempel = metadata.registrert + ) - internal val refusjonsservitør get() = Refusjonsservitør.fra(refusjon.refusjonstidslinje(type.refusjonsdato(this), arbeidsgiverperioder, metadata.meldingsreferanseId, metadata.innsendt)) + internal val refusjonsservitør + get() = Refusjonsservitør.fra( + refusjon.refusjonstidslinje( + type.refusjonsdato( + this + ), arbeidsgiverperioder, metadata.meldingsreferanseId, metadata.innsendt + ) + ) internal fun leggTilRefusjon(refusjonshistorikk: Refusjonshistorikk) { refusjonshistorikk.leggTilRefusjon(refusjonsElement) @@ -109,18 +138,28 @@ class Inntektsmelding( return behandlinger.oppdaterDokumentsporing(dokumentsporing) } - internal fun nyeArbeidsgiverInntektsopplysninger(builder: ArbeidsgiverInntektsopplysningerOverstyringer, skjæringstidspunkt: LocalDate) { + internal fun nyeArbeidsgiverInntektsopplysninger( + builder: ArbeidsgiverInntektsopplysningerOverstyringer, + skjæringstidspunkt: LocalDate + ) { val refusjonshistorikk = Refusjonshistorikk() refusjonshistorikk.leggTilRefusjon(refusjonsElement) // startskuddet dikterer hvorvidt refusjonsopplysningene skal strekkes tilbake til å fylle gråsonen (perioden mellom skjæringstidspunkt og første refusjonsopplysning) // inntektsdato er den dagen refusjonsopplysningen i IM gjelder fom slik at det blir ingen strekking da, bare dersom skjæringstidspunkt brukes - val startskudd = if (builder.ingenRefusjonsopplysninger(behandlingsporing.organisasjonsnummer)) skjæringstidspunkt else type.refusjonsdato(this) + val startskudd = + if (builder.ingenRefusjonsopplysninger(behandlingsporing.organisasjonsnummer)) skjæringstidspunkt else type.refusjonsdato( + this + ) val inntektGjelder = skjæringstidspunkt til LocalDate.MAX builder.leggTilInntekt( ArbeidsgiverInntektsopplysning( behandlingsporing.organisasjonsnummer, inntektGjelder, - InntektsmeldingInntekt(type.inntektsdato(this), metadata.meldingsreferanseId, beregnetInntekt), + InntektsmeldingInntekt( + type.inntektsdato(this), + metadata.meldingsreferanseId, + beregnetInntekt + ), refusjonshistorikk.refusjonsopplysninger(startskudd) ) ) @@ -128,9 +167,13 @@ class Inntektsmelding( } sealed interface Avsendersystem { - data class Altinn(internal val førsteFraværsdag: LocalDate?): Avsendersystem - data class LPS(internal val førsteFraværsdag: LocalDate?): Avsendersystem - data class NavPortal(internal val vedtaksperiodeId: UUID, internal val inntektsdato: LocalDate, internal val forespurt: Boolean): Avsendersystem + data class Altinn(internal val førsteFraværsdag: LocalDate?) : Avsendersystem + data class LPS(internal val førsteFraværsdag: LocalDate?) : Avsendersystem + data class NavPortal( + internal val vedtaksperiodeId: UUID, + internal val inntektsdato: LocalDate, + internal val forespurt: Boolean + ) : Avsendersystem } class Refusjon( @@ -139,7 +182,12 @@ class Inntektsmelding( val endringerIRefusjon: List = emptyList() ) { - internal fun refusjonstidslinje(førsteFraværsdag: LocalDate?, arbeidsgiverperioder: List, meldingsreferanseId: UUID, tidsstempel: LocalDateTime): Beløpstidslinje { + internal fun refusjonstidslinje( + førsteFraværsdag: LocalDate?, + arbeidsgiverperioder: List, + meldingsreferanseId: UUID, + tidsstempel: LocalDateTime + ): Beløpstidslinje { val kilde = Kilde(meldingsreferanseId, ARBEIDSGIVER, tidsstempel) val startskuddet = startskuddet(førsteFraværsdag, arbeidsgiverperioder) val opphørIRefusjon = opphørsdato?.let { @@ -147,25 +195,39 @@ class Inntektsmelding( EndringIRefusjon(Inntekt.INGEN, sisteRefusjonsdag.nesteDag) } - val hovedopplysning = EndringIRefusjon(beløp ?: Inntekt.INGEN, startskuddet).takeUnless { it.endringsdato == opphørIRefusjon?.endringsdato } - val alleRefusjonsopplysninger = listOfNotNull(opphørIRefusjon, hovedopplysning, *endringerIRefusjon.toTypedArray()) - .sortedBy { it.endringsdato } - .filter { it.endringsdato >= startskuddet } - .filter { it.endringsdato <= (opphørIRefusjon?.endringsdato ?: LocalDate.MAX) } - - check(alleRefusjonsopplysninger.isNotEmpty()) {"Inntektsmeldingen inneholder ingen refusjonsopplysninger. Hvordan er dette mulig?"} - - val sisteBit = Beløpstidslinje.fra(alleRefusjonsopplysninger.last().endringsdato.somPeriode(), alleRefusjonsopplysninger.last().beløp, kilde) + val hovedopplysning = EndringIRefusjon( + beløp ?: Inntekt.INGEN, + startskuddet + ).takeUnless { it.endringsdato == opphørIRefusjon?.endringsdato } + val alleRefusjonsopplysninger = + listOfNotNull(opphørIRefusjon, hovedopplysning, *endringerIRefusjon.toTypedArray()) + .sortedBy { it.endringsdato } + .filter { it.endringsdato >= startskuddet } + .filter { it.endringsdato <= (opphørIRefusjon?.endringsdato ?: LocalDate.MAX) } + + check(alleRefusjonsopplysninger.isNotEmpty()) { "Inntektsmeldingen inneholder ingen refusjonsopplysninger. Hvordan er dette mulig?" } + + val sisteBit = Beløpstidslinje.fra( + alleRefusjonsopplysninger.last().endringsdato.somPeriode(), + alleRefusjonsopplysninger.last().beløp, + kilde + ) val refusjonstidslinje = alleRefusjonsopplysninger .zipWithNext { nåværende, neste -> - Beløpstidslinje.fra(nåværende.endringsdato.somPeriode().oppdaterTom(neste.endringsdato.forrigeDag), nåværende.beløp, kilde) + Beløpstidslinje.fra( + nåværende.endringsdato.somPeriode() + .oppdaterTom(neste.endringsdato.forrigeDag), nåværende.beløp, kilde + ) } .fold(sisteBit) { acc, beløpstidslinje -> acc + beløpstidslinje } return refusjonstidslinje } - private fun startskuddet(førsteFraværsdag: LocalDate?, arbeidsgiverperioder: List) = + private fun startskuddet( + førsteFraværsdag: LocalDate?, + arbeidsgiverperioder: List + ) = if (førsteFraværsdag == null) arbeidsgiverperioder.maxOf { it.start } else arbeidsgiverperioder.map { it.start }.plus(førsteFraværsdag).max() @@ -174,7 +236,8 @@ class Inntektsmelding( internal val endringsdato: LocalDate ) { - internal fun tilEndring() = Refusjonshistorikk.Refusjon.EndringIRefusjon(beløp, endringsdato) + internal fun tilEndring() = + Refusjonshistorikk.Refusjon.EndringIRefusjon(beløp, endringsdato) internal companion object { internal fun List.minOf(opphørsdato: LocalDate?) = @@ -197,21 +260,34 @@ class Inntektsmelding( ) { if (håndtertNå()) return aktivitetslogg.info("Inntektsmelding ikke håndtert") - val relevanteSykmeldingsperioder = sykmeldingsperioder.overlappendePerioder(dager) + sykmeldingsperioder.perioderInnenfor16Dager(dager) + val relevanteSykmeldingsperioder = + sykmeldingsperioder.overlappendePerioder(dager) + sykmeldingsperioder.perioderInnenfor16Dager( + dager + ) val overlapperMedForkastet = forkastede.overlapperMed(dager) if (relevanteSykmeldingsperioder.isNotEmpty() && !overlapperMedForkastet) { - person.emitInntektsmeldingFørSøknadEvent(metadata.meldingsreferanseId, relevanteSykmeldingsperioder, behandlingsporing.organisasjonsnummer) + person.emitInntektsmeldingFørSøknadEvent( + metadata.meldingsreferanseId, + relevanteSykmeldingsperioder, + behandlingsporing.organisasjonsnummer + ) return aktivitetslogg.info("Inntektsmelding er relevant for sykmeldingsperioder $relevanteSykmeldingsperioder") } - person.emitInntektsmeldingIkkeHåndtert(this, behandlingsporing.organisasjonsnummer, dager.harPeriodeInnenfor16Dager(vedtaksperioder)) + person.emitInntektsmeldingIkkeHåndtert( + this, + behandlingsporing.organisasjonsnummer, + dager.harPeriodeInnenfor16Dager(vedtaksperioder) + ) } + private fun håndtertNå() = håndtertInntekt internal fun subsumsjonskontekst() = Subsumsjonskontekst( type = KontekstType.Inntektsmelding, verdi = metadata.meldingsreferanseId.toString() ) - internal fun skalOppdatereVilkårsgrunnlag(sykdomstidslinjeperiode: Periode?) = type.skalOppdatereVilkårsgrunnlag(this, sykdomstidslinjeperiode) + internal fun skalOppdatereVilkårsgrunnlag(sykdomstidslinjeperiode: Periode?) = + type.skalOppdatereVilkårsgrunnlag(this, sykdomstidslinjeperiode) private lateinit var type: Type @@ -219,27 +295,48 @@ class Inntektsmelding( fun vedtaksperiode(vedtaksperiodeId: UUID): ForenkletVedtaksperiode? fun inntektsmeldingIkkeHåndtert(inntektsmelding: Inntektsmelding) - data class ForenkletVedtaksperiode(val førsteFraværsdag: () -> LocalDate?, val skjæringstidspunkt: () -> LocalDate, val erForlengelse: () -> Boolean) - data class DefaultValideringsgrunnlag(private val vedtaksperioder: List, private val person: Person): Valideringsgrunnlag { + data class ForenkletVedtaksperiode( + val førsteFraværsdag: () -> LocalDate?, + val skjæringstidspunkt: () -> LocalDate, + val erForlengelse: () -> Boolean + ) + + data class DefaultValideringsgrunnlag( + private val vedtaksperioder: List, + private val person: Person + ) : Valideringsgrunnlag { override fun vedtaksperiode(vedtaksperiodeId: UUID): ForenkletVedtaksperiode? { val vedtaksperiode = vedtaksperioder.finn(vedtaksperiodeId) ?: return null - return ForenkletVedtaksperiode(vedtaksperiode::førsteFraværsdag, vedtaksperiode::skjæringstidspunkt, vedtaksperiode::erForlengelse) + return ForenkletVedtaksperiode( + vedtaksperiode::førsteFraværsdag, + vedtaksperiode::skjæringstidspunkt, + vedtaksperiode::erForlengelse + ) } override fun inntektsmeldingIkkeHåndtert(inntektsmelding: Inntektsmelding) { if (inntektsmelding.arbeidsgiverperioder.isEmpty()) { - return person.emitInntektsmeldingIkkeHåndtert(inntektsmelding, inntektsmelding.orgnummer, true) + return person.emitInntektsmeldingIkkeHåndtert( + inntektsmelding, + inntektsmelding.orgnummer, + true + ) } person.emitInntektsmeldingIkkeHåndtert( hendelse = inntektsmelding, organisasjonsnummer = inntektsmelding.orgnummer, - harPeriodeInnenfor16Dager = vedtaksperioder.påvirkerArbeidsgiverperiode(inntektsmelding.arbeidsgiverperioder.periode()!!) + harPeriodeInnenfor16Dager = vedtaksperioder.påvirkerArbeidsgiverperiode( + inntektsmelding.arbeidsgiverperioder.periode()!! + ) ) } } } - internal fun valider(valideringsgrunnlag: Valideringsgrunnlag, aktivitetslogg: IAktivitetslogg): Boolean { + internal fun valider( + valideringsgrunnlag: Valideringsgrunnlag, + aktivitetslogg: IAktivitetslogg + ): Boolean { val førsteValidering = !::type.isInitialized this.type = when (avsendersystem) { is Avsendersystem.Altinn -> KlassiskInntektsmelding(avsendersystem.førsteFraværsdag) @@ -260,59 +357,127 @@ class Inntektsmelding( } } - internal fun valider(vedtaksperioder: List, aktivitetslogg: IAktivitetslogg, person: Person) = - valider(Valideringsgrunnlag.DefaultValideringsgrunnlag(vedtaksperioder, person), aktivitetslogg) + internal fun valider( + vedtaksperioder: List, + aktivitetslogg: IAktivitetslogg, + person: Person + ) = + valider( + Valideringsgrunnlag.DefaultValideringsgrunnlag(vedtaksperioder, person), + aktivitetslogg + ) private sealed interface Type { - fun valider(inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg, inntektsmeldingIkkeHåndtert: () -> Unit): Boolean - fun skalOppdatereVilkårsgrunnlag(inntektsmelding: Inntektsmelding, sykdomstidslinjeperiode: Periode?): Boolean + fun valider( + inntektsmelding: Inntektsmelding, + aktivitetslogg: IAktivitetslogg, + inntektsmeldingIkkeHåndtert: () -> Unit + ): Boolean + + fun skalOppdatereVilkårsgrunnlag( + inntektsmelding: Inntektsmelding, + sykdomstidslinjeperiode: Periode? + ): Boolean + fun inntektsdato(inntektsmelding: Inntektsmelding): LocalDate - fun alternativInntektsdatoForInntekthistorikk(inntektsmelding: Inntektsmelding, alternativInntektsdato: LocalDate): LocalDate? + fun alternativInntektsdatoForInntekthistorikk( + inntektsmelding: Inntektsmelding, + alternativInntektsdato: LocalDate + ): LocalDate? + fun refusjonsdato(inntektsmelding: Inntektsmelding): LocalDate fun førsteFraværsdagForHåndteringAvDager(inntektsmelding: Inntektsmelding): LocalDate? fun skjæringstidspunkt(inntektsmelding: Inntektsmelding, person: Person): LocalDate } - private data class KlassiskInntektsmelding(private val førsteFraværsdag: LocalDate?): Type { - override fun valider(inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg, inntektsmeldingIkkeHåndtert: () -> Unit): Boolean { + private data class KlassiskInntektsmelding(private val førsteFraværsdag: LocalDate?) : Type { + override fun valider( + inntektsmelding: Inntektsmelding, + aktivitetslogg: IAktivitetslogg, + inntektsmeldingIkkeHåndtert: () -> Unit + ): Boolean { if (inntektsmelding.arbeidsgiverperioder.isEmpty() && førsteFraværsdag == null) error("Arbeidsgiverperiode er tom og førsteFraværsdag er null") return true } - override fun skalOppdatereVilkårsgrunnlag(inntektsmelding: Inntektsmelding, sykdomstidslinjeperiode: Periode?): Boolean { + + override fun skalOppdatereVilkårsgrunnlag( + inntektsmelding: Inntektsmelding, + sykdomstidslinjeperiode: Periode? + ): Boolean { if (sykdomstidslinjeperiode == null) return false // har ikke noe sykdom for arbeidsgiveren return inntektsdato(inntektsmelding) in sykdomstidslinjeperiode } + override fun inntektsdato(inntektsmelding: Inntektsmelding): LocalDate { if (førsteFraværsdag != null && (inntektsmelding.arbeidsgiverperioder.isEmpty() || førsteFraværsdag > inntektsmelding.arbeidsgiverperioder.last().endInclusive.nesteDag)) return førsteFraværsdag return inntektsmelding.arbeidsgiverperioder.maxOf { it.start } } - override fun alternativInntektsdatoForInntekthistorikk(inntektsmelding: Inntektsmelding, alternativInntektsdato: LocalDate) = alternativInntektsdato.takeUnless { it == inntektsdato(inntektsmelding) } + + override fun alternativInntektsdatoForInntekthistorikk( + inntektsmelding: Inntektsmelding, + alternativInntektsdato: LocalDate + ) = alternativInntektsdato.takeUnless { it == inntektsdato(inntektsmelding) } + override fun refusjonsdato(inntektsmelding: Inntektsmelding): LocalDate { return if (førsteFraværsdag == null) inntektsmelding.arbeidsgiverperioder.maxOf { it.start } else inntektsmelding.arbeidsgiverperioder.map { it.start }.plus(førsteFraværsdag).max() } - override fun førsteFraværsdagForHåndteringAvDager(inntektsmelding: Inntektsmelding) = førsteFraværsdag + + override fun førsteFraværsdagForHåndteringAvDager(inntektsmelding: Inntektsmelding) = + førsteFraværsdag + override fun skjæringstidspunkt(inntektsmelding: Inntektsmelding, person: Person) = - person.beregnSkjæringstidspunkt()().beregnSkjæringstidspunkt(inntektsdato(inntektsmelding).somPeriode()) + person.beregnSkjæringstidspunkt()().beregnSkjæringstidspunkt( + inntektsdato( + inntektsmelding + ).somPeriode() + ) } - private data object ForkastetPortalinntektsmelding: Type { - override fun valider(inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg, inntektsmeldingIkkeHåndtert: () -> Unit): Boolean { + private data object ForkastetPortalinntektsmelding : Type { + override fun valider( + inntektsmelding: Inntektsmelding, + aktivitetslogg: IAktivitetslogg, + inntektsmeldingIkkeHåndtert: () -> Unit + ): Boolean { aktivitetslogg.funksjonellFeil(Varselkode.RV_IM_26) aktivitetslogg.info("Inntektsmelding ikke håndtert") inntektsmeldingIkkeHåndtert() return false } - override fun skalOppdatereVilkårsgrunnlag(inntektsmelding: Inntektsmelding, sykdomstidslinjeperiode: Periode?) = error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") - override fun inntektsdato(inntektsmelding: Inntektsmelding) = error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") - override fun alternativInntektsdatoForInntekthistorikk(inntektsmelding: Inntektsmelding, alternativInntektsdato: LocalDate) = error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") - override fun refusjonsdato(inntektsmelding: Inntektsmelding) = error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") - override fun førsteFraværsdagForHåndteringAvDager(inntektsmelding: Inntektsmelding) = error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") - override fun skjæringstidspunkt(inntektsmelding: Inntektsmelding, person: Person) = error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") + + override fun skalOppdatereVilkårsgrunnlag( + inntektsmelding: Inntektsmelding, + sykdomstidslinjeperiode: Periode? + ) = error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") + + override fun inntektsdato(inntektsmelding: Inntektsmelding) = + error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") + + override fun alternativInntektsdatoForInntekthistorikk( + inntektsmelding: Inntektsmelding, + alternativInntektsdato: LocalDate + ) = error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") + + override fun refusjonsdato(inntektsmelding: Inntektsmelding) = + error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") + + override fun førsteFraværsdagForHåndteringAvDager(inntektsmelding: Inntektsmelding) = + error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") + + override fun skjæringstidspunkt(inntektsmelding: Inntektsmelding, person: Person) = + error("Forventer ikke videre behandling av portalinntektsmelding for forkastet periode") } - private abstract class PortalInntektsmeldings(private val minimalVedtaksperiode: Valideringsgrunnlag.ForenkletVedtaksperiode, private val inntektsdato: LocalDate) : Type { - override fun skalOppdatereVilkårsgrunnlag(inntektsmelding: Inntektsmelding, sykdomstidslinjeperiode: Periode?) = true + private abstract class PortalInntektsmeldings( + private val minimalVedtaksperiode: Valideringsgrunnlag.ForenkletVedtaksperiode, + private val inntektsdato: LocalDate + ) : Type { + override fun skalOppdatereVilkårsgrunnlag( + inntektsmelding: Inntektsmelding, + sykdomstidslinjeperiode: Periode? + ) = true + override fun inntektsdato(inntektsmelding: Inntektsmelding): LocalDate { val skjæringstidspunkt = minimalVedtaksperiode.skjæringstidspunkt() if (skjæringstidspunkt != inntektsdato) { @@ -324,10 +489,20 @@ class Inntektsmelding( } return skjæringstidspunkt } - override fun alternativInntektsdatoForInntekthistorikk(inntektsmelding: Inntektsmelding, alternativInntektsdato: LocalDate) = null - override fun refusjonsdato(inntektsmelding: Inntektsmelding) = minimalVedtaksperiode.førsteFraværsdag() ?: minimalVedtaksperiode.skjæringstidspunkt() - override fun førsteFraværsdagForHåndteringAvDager(inntektsmelding: Inntektsmelding) = minimalVedtaksperiode.førsteFraværsdag() - override fun skjæringstidspunkt(inntektsmelding: Inntektsmelding, person: Person) = minimalVedtaksperiode.skjæringstidspunkt() + + override fun alternativInntektsdatoForInntekthistorikk( + inntektsmelding: Inntektsmelding, + alternativInntektsdato: LocalDate + ) = null + + override fun refusjonsdato(inntektsmelding: Inntektsmelding) = + minimalVedtaksperiode.førsteFraværsdag() ?: minimalVedtaksperiode.skjæringstidspunkt() + + override fun førsteFraværsdagForHåndteringAvDager(inntektsmelding: Inntektsmelding) = + minimalVedtaksperiode.førsteFraværsdag() + + override fun skjæringstidspunkt(inntektsmelding: Inntektsmelding, person: Person) = + minimalVedtaksperiode.skjæringstidspunkt() private companion object { private val sikkerlogg = LoggerFactory.getLogger("tjenestekall") @@ -335,12 +510,26 @@ class Inntektsmelding( } } - private data class ForespurtPortalinntektsmelding(private val minimalVedtaksperiode: Valideringsgrunnlag.ForenkletVedtaksperiode, private val inntektsdato: LocalDate) : PortalInntektsmeldings(minimalVedtaksperiode, inntektsdato) { - override fun valider(inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg, inntektsmeldingIkkeHåndtert: () -> Unit): Boolean = true + private data class ForespurtPortalinntektsmelding( + private val minimalVedtaksperiode: Valideringsgrunnlag.ForenkletVedtaksperiode, + private val inntektsdato: LocalDate + ) : PortalInntektsmeldings(minimalVedtaksperiode, inntektsdato) { + override fun valider( + inntektsmelding: Inntektsmelding, + aktivitetslogg: IAktivitetslogg, + inntektsmeldingIkkeHåndtert: () -> Unit + ): Boolean = true } - private data class SelvbestemtPortalinntektsmelding(private val minimalVedtaksperiode: Valideringsgrunnlag.ForenkletVedtaksperiode, private val inntektsdato: LocalDate) : PortalInntektsmeldings(minimalVedtaksperiode, inntektsdato) { - override fun valider(inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg, inntektsmeldingIkkeHåndtert: () -> Unit): Boolean { + private data class SelvbestemtPortalinntektsmelding( + private val minimalVedtaksperiode: Valideringsgrunnlag.ForenkletVedtaksperiode, + private val inntektsdato: LocalDate + ) : PortalInntektsmeldings(minimalVedtaksperiode, inntektsdato) { + override fun valider( + inntektsmelding: Inntektsmelding, + aktivitetslogg: IAktivitetslogg, + inntektsmeldingIkkeHåndtert: () -> Unit + ): Boolean { if (!minimalVedtaksperiode.erForlengelse()) return true sikkerlogg.info("Håndterer ikke selvbestemt inntektsmelding siden den traff en forlengelse. InntektsmeldingId: ${inntektsmelding.metadata.meldingsreferanseId}") inntektsmeldingIkkeHåndtert() diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Institusjonsopphold.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Institusjonsopphold.kt index 3c80c26496..35fd3f49bf 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Institusjonsopphold.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Institusjonsopphold.kt @@ -15,7 +15,8 @@ class Institusjonsopphold( aktivitetslogg.info("Bruker har ingen institusjonsoppholdsperioder") return false } - return perioder.map(Institusjonsoppholdsperiode::tilPeriode).any { opphold -> opphold.overlapperMed(sykdomsperiode) }.also { overlapper -> + return perioder.map(Institusjonsoppholdsperiode::tilPeriode) + .any { opphold -> opphold.overlapperMed(sykdomsperiode) }.also { overlapper -> if (!overlapper) aktivitetslogg.info("Bruker har institusjonsoppholdsperioder, men det slår ikke ut på overlappssjekken") } } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Medlemskapsvurdering.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Medlemskapsvurdering.kt index 28bf469976..8863b3a99f 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Medlemskapsvurdering.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Medlemskapsvurdering.kt @@ -13,14 +13,17 @@ class Medlemskapsvurdering( aktivitetslogg.info("Bruker er medlem av Folketrygden") true } + Medlemskapstatus.Nei -> { aktivitetslogg.varsel(RV_MV_2) false } + Medlemskapstatus.UavklartMedBrukerspørsmål -> { aktivitetslogg.varsel(RV_MV_1) true } + Medlemskapstatus.VetIkke -> { aktivitetslogg.info("Bruker er VetIkke-medlem av Folketrygden") true diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/MinimumSykdomsgradsvurderingMelding.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/MinimumSykdomsgradsvurderingMelding.kt index 6ccd6aed5f..46adca5c3d 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/MinimumSykdomsgradsvurderingMelding.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/MinimumSykdomsgradsvurderingMelding.kt @@ -46,17 +46,20 @@ class MinimumSykdomsgradsvurderingMelding( internal fun periodeForEndring(): Periode { - val alle = perioderMedMinimumSykdomsgradVurdertOK + perioderMedMinimumSykdomsgradVurdertIkkeOK + val alle = + perioderMedMinimumSykdomsgradVurdertOK + perioderMedMinimumSykdomsgradVurdertIkkeOK return Periode(alle.minOf { it.start }, alle.maxOf { it.endInclusive }) } fun valider(): Boolean { if (perioderMedMinimumSykdomsgradVurdertOK.isEmpty() && perioderMedMinimumSykdomsgradVurdertIkkeOK.isEmpty()) return false - if (perioderMedMinimumSykdomsgradVurdertOK.containsAll(perioderMedMinimumSykdomsgradVurdertIkkeOK) && perioderMedMinimumSykdomsgradVurdertIkkeOK.containsAll( + if (perioderMedMinimumSykdomsgradVurdertOK.containsAll( + perioderMedMinimumSykdomsgradVurdertIkkeOK + ) && perioderMedMinimumSykdomsgradVurdertIkkeOK.containsAll( perioderMedMinimumSykdomsgradVurdertOK ) ) return false return true } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Omsorgspenger.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Omsorgspenger.kt index 3e463f1934..90e92dbb09 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Omsorgspenger.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Omsorgspenger.kt @@ -6,15 +6,21 @@ import no.nav.helse.person.aktivitetslogg.IAktivitetslogg class Omsorgspenger( private val perioder: List ) { - internal fun overlapper(aktivitetslogg: IAktivitetslogg, sykdomsperiode: Periode, erForlengelse: Boolean): Boolean { + internal fun overlapper( + aktivitetslogg: IAktivitetslogg, + sykdomsperiode: Periode, + erForlengelse: Boolean + ): Boolean { if (perioder.isEmpty()) { aktivitetslogg.info("Bruker har ingen omsorgspengeytelser") return false } - val overlappsperiode = if (erForlengelse) sykdomsperiode else sykdomsperiode.familieYtelserPeriode - return perioder.any { ytelse -> ytelse.periode.overlapperMed(overlappsperiode) }.also { overlapper -> - if (!overlapper) aktivitetslogg.info("Bruker har omsorgspengeytelser, men det slår ikke ut på overlappssjekken") - } + val overlappsperiode = + if (erForlengelse) sykdomsperiode else sykdomsperiode.familieYtelserPeriode + return perioder.any { ytelse -> ytelse.periode.overlapperMed(overlappsperiode) } + .also { overlapper -> + if (!overlapper) aktivitetslogg.info("Bruker har omsorgspengeytelser, men det slår ikke ut på overlappssjekken") + } } internal fun perioder(): List { diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Oppl\303\246ringspenger.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Oppl\303\246ringspenger.kt" index 37709f2e08..9e49f8caa4 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Oppl\303\246ringspenger.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Oppl\303\246ringspenger.kt" @@ -6,15 +6,21 @@ import no.nav.helse.person.aktivitetslogg.IAktivitetslogg class Opplæringspenger( private val perioder: List ) { - internal fun overlapper(aktivitetslogg: IAktivitetslogg, sykdomsperiode: Periode, erForlengelse: Boolean): Boolean { + internal fun overlapper( + aktivitetslogg: IAktivitetslogg, + sykdomsperiode: Periode, + erForlengelse: Boolean + ): Boolean { if (perioder.isEmpty()) { aktivitetslogg.info("Bruker har ingen opplæringspengeytelser") return false } - val overlappsperiode = if (erForlengelse) sykdomsperiode else sykdomsperiode.familieYtelserPeriode - return perioder.any { ytelse -> ytelse.periode.overlapperMed(overlappsperiode) }.also { overlapper -> - if (!overlapper) aktivitetslogg.info("Bruker har opplæringspengeytelser, men det slår ikke ut på overlappssjekken") - } + val overlappsperiode = + if (erForlengelse) sykdomsperiode else sykdomsperiode.familieYtelserPeriode + return perioder.any { ytelse -> ytelse.periode.overlapperMed(overlappsperiode) } + .also { overlapper -> + if (!overlapper) aktivitetslogg.info("Bruker har opplæringspengeytelser, men det slår ikke ut på overlappssjekken") + } } internal fun perioder(): List { diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrArbeidsforhold.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrArbeidsforhold.kt index 107f298be5..39dd9cc24f 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrArbeidsforhold.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrArbeidsforhold.kt @@ -23,9 +23,13 @@ class OverstyrArbeidsforhold( automatiskBehandling = false ) - override fun erRelevant(skjæringstidspunkt: LocalDate) = this.skjæringstidspunkt == skjæringstidspunkt + override fun erRelevant(skjæringstidspunkt: LocalDate) = + this.skjæringstidspunkt == skjæringstidspunkt - internal fun overstyr(inntektsgrunnlag: Inntektsgrunnlag, subsumsjonslogg: Subsumsjonslogg): Inntektsgrunnlag { + internal fun overstyr( + inntektsgrunnlag: Inntektsgrunnlag, + subsumsjonslogg: Subsumsjonslogg + ): Inntektsgrunnlag { return overstyrteArbeidsforhold.fold(inntektsgrunnlag) { acc, overstyring -> overstyring.overstyr(acc, subsumsjonslogg) } @@ -42,7 +46,10 @@ class OverstyrArbeidsforhold( private val deaktivert: Boolean, private val forklaring: String ) { - internal fun overstyr(inntektsgrunnlag: Inntektsgrunnlag, subsumsjonslogg: Subsumsjonslogg) = when (deaktivert) { + internal fun overstyr( + inntektsgrunnlag: Inntektsgrunnlag, + subsumsjonslogg: Subsumsjonslogg + ) = when (deaktivert) { true -> inntektsgrunnlag.deaktiver(orgnummer, forklaring, subsumsjonslogg) else -> inntektsgrunnlag.aktiver(orgnummer, forklaring, subsumsjonslogg) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrArbeidsgiveropplysninger.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrArbeidsgiveropplysninger.kt index 5b8b9da9eb..6d38aa0931 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrArbeidsgiveropplysninger.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrArbeidsgiveropplysninger.kt @@ -31,7 +31,8 @@ class OverstyrArbeidsgiveropplysninger( automatiskBehandling = false ) - override fun erRelevant(skjæringstidspunkt: LocalDate) = this.skjæringstidspunkt == skjæringstidspunkt + override fun erRelevant(skjæringstidspunkt: LocalDate) = + this.skjæringstidspunkt == skjæringstidspunkt internal fun overstyr(builder: Inntektsgrunnlag.ArbeidsgiverInntektsopplysningerOverstyringer) { arbeidsgiveropplysninger.forEach { builder.leggTilInntekt(it) } @@ -39,10 +40,18 @@ class OverstyrArbeidsgiveropplysninger( internal fun overstyr(nyInntektUnderveis: List): List { val kilde = Kilde(metadata.meldingsreferanseId, Avsender.SAKSBEHANDLER, metadata.registrert) - return arbeidsgiveropplysninger.overstyrTilkommendeInntekter(nyInntektUnderveis, skjæringstidspunkt, kilde) + return arbeidsgiveropplysninger.overstyrTilkommendeInntekter( + nyInntektUnderveis, + skjæringstidspunkt, + kilde + ) } - internal fun arbeidsgiveropplysningerKorrigert(person: Person, orgnummer: String, hendelseId: UUID) { + internal fun arbeidsgiveropplysningerKorrigert( + person: Person, + orgnummer: String, + hendelseId: UUID + ) { if (arbeidsgiveropplysninger.any { it.gjelder(orgnummer) }) { person.arbeidsgiveropplysningerKorrigert( PersonObserver.ArbeidsgiveropplysningerKorrigertEvent( @@ -59,11 +68,17 @@ class OverstyrArbeidsgiveropplysninger( orgnummer: String, eksisterendeRefusjonstidslinje: Beløpstidslinje ): Refusjonsservitør? { - val (refusjonstidslinjeFraOverstyring, strekkbar) = refusjonstidslinjer[orgnummer] ?: return null + val (refusjonstidslinjeFraOverstyring, strekkbar) = refusjonstidslinjer[orgnummer] + ?: return null if (refusjonstidslinjeFraOverstyring.isEmpty()) return null val refusjonstidslinje = if (strekkbar) refusjonstidslinjeFraOverstyring - else refusjonstidslinjeFraOverstyring + eksisterendeRefusjonstidslinje.fraOgMed(refusjonstidslinjeFraOverstyring.last().dato.nesteDag) - return Refusjonsservitør.fra(startdatoer = startdatoer, refusjonstidslinje = refusjonstidslinje) + else refusjonstidslinjeFraOverstyring + eksisterendeRefusjonstidslinje.fraOgMed( + refusjonstidslinjeFraOverstyring.last().dato.nesteDag + ) + return Refusjonsservitør.fra( + startdatoer = startdatoer, + refusjonstidslinje = refusjonstidslinje + ) } } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrTidslinje.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrTidslinje.kt index 5338d24992..8982372a29 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrTidslinje.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/OverstyrTidslinje.kt @@ -52,7 +52,11 @@ class OverstyrTidslinje( registrert = LocalDateTime.now(), automatiskBehandling = false ) - private val kilde = SykdomshistorikkHendelse.Hendelseskilde(this::class, metadata.meldingsreferanseId, metadata.innsendt) + private val kilde = SykdomshistorikkHendelse.Hendelseskilde( + this::class, + metadata.meldingsreferanseId, + metadata.innsendt + ) private val periode: Periode private var sykdomstidslinje: Sykdomstidslinje @@ -66,74 +70,87 @@ class OverstyrTidslinje( grad = it.grad!!.prosent, // Sykedager må ha grad kilde = kilde ) + Dagtype.Feriedag -> Sykdomstidslinje.feriedager( førsteDato = it.dato, sisteDato = it.dato, kilde = kilde ) + Dagtype.ArbeidIkkeGjenopptattDag -> Sykdomstidslinje.arbeidIkkeGjenopptatt( førsteDato = it.dato, sisteDato = it.dato, kilde = kilde ) + Dagtype.Permisjonsdag -> Sykdomstidslinje.permisjonsdager( førsteDato = it.dato, sisteDato = it.dato, kilde = kilde ) + Dagtype.Arbeidsdag -> Sykdomstidslinje.arbeidsdager( førsteDato = it.dato, sisteDato = it.dato, kilde = kilde ) + Dagtype.Egenmeldingsdag -> Sykdomstidslinje.arbeidsgiverdager( førsteDato = it.dato, sisteDato = it.dato, grad = 100.prosent, kilde = kilde ) + Dagtype.SykedagNav -> Sykdomstidslinje.sykedagerNav( førsteDato = it.dato, sisteDato = it.dato, grad = it.grad!!.prosent, // Sykedager må ha grad kilde = kilde ) + Dagtype.Foreldrepengerdag -> Sykdomstidslinje.andreYtelsedager( førsteDato = it.dato, sisteDato = it.dato, kilde = kilde, ytelse = Foreldrepenger ) + Dagtype.AAPdag -> Sykdomstidslinje.andreYtelsedager( førsteDato = it.dato, sisteDato = it.dato, kilde = kilde, ytelse = AAP ) + Dagtype.Omsorgspengerdag -> Sykdomstidslinje.andreYtelsedager( førsteDato = it.dato, sisteDato = it.dato, kilde = kilde, ytelse = Omsorgspenger ) + Dagtype.Pleiepengerdag -> Sykdomstidslinje.andreYtelsedager( førsteDato = it.dato, sisteDato = it.dato, kilde = kilde, ytelse = Pleiepenger ) + Dagtype.Svangerskapspengerdag -> Sykdomstidslinje.andreYtelsedager( førsteDato = it.dato, sisteDato = it.dato, kilde = kilde, ytelse = Svangerskapspenger ) + Dagtype.Opplaringspengerdag -> Sykdomstidslinje.andreYtelsedager( førsteDato = it.dato, sisteDato = it.dato, kilde = kilde, ytelse = Opplæringspenger ) + Dagtype.Dagpengerdag -> Sykdomstidslinje.andreYtelsedager( førsteDato = it.dato, sisteDato = it.dato, @@ -147,7 +164,8 @@ class OverstyrTidslinje( } } - override fun erRelevant(other: Periode) = other.oppdaterFom(other.start.forrigeDag).overlapperMed(periode()) + override fun erRelevant(other: Periode) = + other.oppdaterFom(other.start.forrigeDag).overlapperMed(periode()) override fun sykdomstidslinje() = sykdomstidslinje override fun trimSykdomstidslinje(fom: LocalDate) { diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Pleiepenger.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Pleiepenger.kt index 7b7d05052e..0a1edd4e4a 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Pleiepenger.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Pleiepenger.kt @@ -6,15 +6,21 @@ import no.nav.helse.person.aktivitetslogg.IAktivitetslogg class Pleiepenger( private val perioder: List ) { - internal fun overlapper(aktivitetslogg: IAktivitetslogg, sykdomsperiode: Periode, erForlengelse: Boolean): Boolean { + internal fun overlapper( + aktivitetslogg: IAktivitetslogg, + sykdomsperiode: Periode, + erForlengelse: Boolean + ): Boolean { if (perioder.isEmpty()) { aktivitetslogg.info("Bruker har ingen pleiepengeytelser") return false } - val overlappsperiode = if (erForlengelse) sykdomsperiode else sykdomsperiode.familieYtelserPeriode - return perioder.any { ytelse -> ytelse.periode.overlapperMed(overlappsperiode) }.also { overlapper -> - if (!overlapper) aktivitetslogg.info("Bruker har pleiepengeytelser, men det slår ikke ut på overlappssjekken") - } + val overlappsperiode = + if (erForlengelse) sykdomsperiode else sykdomsperiode.familieYtelserPeriode + return perioder.any { ytelse -> ytelse.periode.overlapperMed(overlappsperiode) } + .also { overlapper -> + if (!overlapper) aktivitetslogg.info("Bruker har pleiepengeytelser, men det slår ikke ut på overlappssjekken") + } } internal fun perioder(): List { diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/P\303\245minnelse.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/P\303\245minnelse.kt" index 65145bbd42..3e1e6732be 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/P\303\245minnelse.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/P\303\245minnelse.kt" @@ -42,17 +42,19 @@ class Påminnelse( return nå >= beregnetMakstid(tilstandsendringstidspunkt) } - internal fun erRelevant(vedtaksperiodeId: UUID) = vedtaksperiodeId.toString() == this.vedtaksperiodeId + internal fun erRelevant(vedtaksperiodeId: UUID) = + vedtaksperiodeId.toString() == this.vedtaksperiodeId internal fun skalReberegnes() = ønskerReberegning - internal fun gjelderTilstand(aktivitetslogg: IAktivitetslogg, tilstandType: TilstandType) = (tilstandType == tilstand).also { - if (!it) { - aktivitetslogg.info("Påminnelse var ikke aktuell i tilstand: ${tilstandType.name} da den gjaldt: ${tilstand.name}") + internal fun gjelderTilstand(aktivitetslogg: IAktivitetslogg, tilstandType: TilstandType) = + (tilstandType == tilstand).also { + if (!it) { + aktivitetslogg.info("Påminnelse var ikke aktuell i tilstand: ${tilstandType.name} da den gjaldt: ${tilstand.name}") + } } - } - internal fun harVentet3MånederEllerMer() = nå.minusMonths(3) >= tilstandsendringstidspunkt + internal fun harVentet3MånederEllerMer() = nå.minusMonths(3) >= tilstandsendringstidspunkt internal fun vedtaksperiodeIkkeFunnet(observer: PersonObserver) { observer.vedtaksperiodeIkkeFunnet( diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Revurderingseventyr.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Revurderingseventyr.kt index 959a671264..356a4d00c7 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Revurderingseventyr.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Revurderingseventyr.kt @@ -32,20 +32,116 @@ class Revurderingseventyr private constructor( ) { internal companion object { - fun nyPeriode(hendelse: Hendelse, skjæringstidspunkt: LocalDate, periodeForEndring: Periode) = Revurderingseventyr(NyPeriode, skjæringstidspunkt, periodeForEndring, hendelse) - fun arbeidsforhold(hendelse: Hendelse, skjæringstidspunkt: LocalDate) = Revurderingseventyr(Arbeidsforhold, skjæringstidspunkt, skjæringstidspunkt.somPeriode(), hendelse) - fun korrigertSøknad(hendelse: Hendelse, skjæringstidspunkt: LocalDate, periodeForEndring: Periode) = Revurderingseventyr(KorrigertSøknad, skjæringstidspunkt, periodeForEndring, hendelse) - fun reberegning(hendelse: Hendelse, skjæringstidspunkt: LocalDate, periodeForEndring: Periode) = Revurderingseventyr(Reberegning, skjæringstidspunkt, periodeForEndring, hendelse) - fun sykdomstidslinje(hendelse: Hendelse, skjæringstidspunkt: LocalDate, periodeForEndring: Periode) = Revurderingseventyr(Sykdomstidslinje, skjæringstidspunkt, periodeForEndring, hendelse) - fun arbeidsgiveropplysninger(hendelse: Hendelse, skjæringstidspunkt: LocalDate, endringsdato: LocalDate) = Revurderingseventyr(Arbeidsgiveropplysninger, skjæringstidspunkt, endringsdato.somPeriode(), hendelse) - fun skjønnsmessigFastsettelse(hendelse: Hendelse, skjæringstidspunkt: LocalDate, endringsdato: LocalDate) = Revurderingseventyr(SkjønssmessigFastsettelse, skjæringstidspunkt, endringsdato.somPeriode(), hendelse) - fun arbeidsgiverperiode(hendelse: Hendelse, skjæringstidspunkt: LocalDate, periodeForEndring: Periode) = Revurderingseventyr(Arbeidsgiverperiode, skjæringstidspunkt, periodeForEndring, hendelse) - fun infotrygdendring(hendelse: Hendelse, skjæringstidspunkt: LocalDate, periodeForEndring: Periode) = Revurderingseventyr(RevurderingÅrsak.Infotrygdendring, skjæringstidspunkt, periodeForEndring, hendelse) - fun korrigertInntektsmeldingInntektsopplysninger(hendelse: Hendelse, skjæringstidspunkt: LocalDate, endringsdato: LocalDate) = Revurderingseventyr(KorrigertInntektsmeldingInntektsopplysninger, skjæringstidspunkt, endringsdato.somPeriode(), hendelse) - fun refusjonsopplysninger(hendelse: Hendelse, skjæringstidspunkt: LocalDate, periode: Periode) = Revurderingseventyr(RevurderingÅrsak.Refusjonsopplysninger, skjæringstidspunkt, periode, hendelse) - fun grunnbeløpsregulering(hendelse: Hendelse, skjæringstidspunkt: LocalDate) = Revurderingseventyr(Grunnbeløpsregulering, skjæringstidspunkt, skjæringstidspunkt.somPeriode(), hendelse) - fun annullering(hendelse: Hendelse, periode: Periode) = Revurderingseventyr(Annullering, periode.start, periode, hendelse) - fun minimumSykdomsgradVurdert(hendelse: Hendelse, periode: Periode) = Revurderingseventyr(MinimumSykdomsgradVurdert, periode.start, periode, hendelse) + fun nyPeriode( + hendelse: Hendelse, + skjæringstidspunkt: LocalDate, + periodeForEndring: Periode + ) = Revurderingseventyr(NyPeriode, skjæringstidspunkt, periodeForEndring, hendelse) + + fun arbeidsforhold(hendelse: Hendelse, skjæringstidspunkt: LocalDate) = Revurderingseventyr( + Arbeidsforhold, + skjæringstidspunkt, + skjæringstidspunkt.somPeriode(), + hendelse + ) + + fun korrigertSøknad( + hendelse: Hendelse, + skjæringstidspunkt: LocalDate, + periodeForEndring: Periode + ) = Revurderingseventyr(KorrigertSøknad, skjæringstidspunkt, periodeForEndring, hendelse) + + fun reberegning( + hendelse: Hendelse, + skjæringstidspunkt: LocalDate, + periodeForEndring: Periode + ) = Revurderingseventyr(Reberegning, skjæringstidspunkt, periodeForEndring, hendelse) + + fun sykdomstidslinje( + hendelse: Hendelse, + skjæringstidspunkt: LocalDate, + periodeForEndring: Periode + ) = Revurderingseventyr(Sykdomstidslinje, skjæringstidspunkt, periodeForEndring, hendelse) + + fun arbeidsgiveropplysninger( + hendelse: Hendelse, + skjæringstidspunkt: LocalDate, + endringsdato: LocalDate + ) = Revurderingseventyr( + Arbeidsgiveropplysninger, + skjæringstidspunkt, + endringsdato.somPeriode(), + hendelse + ) + + fun skjønnsmessigFastsettelse( + hendelse: Hendelse, + skjæringstidspunkt: LocalDate, + endringsdato: LocalDate + ) = Revurderingseventyr( + SkjønssmessigFastsettelse, + skjæringstidspunkt, + endringsdato.somPeriode(), + hendelse + ) + + fun arbeidsgiverperiode( + hendelse: Hendelse, + skjæringstidspunkt: LocalDate, + periodeForEndring: Periode + ) = Revurderingseventyr( + Arbeidsgiverperiode, + skjæringstidspunkt, + periodeForEndring, + hendelse + ) + + fun infotrygdendring( + hendelse: Hendelse, + skjæringstidspunkt: LocalDate, + periodeForEndring: Periode + ) = Revurderingseventyr( + RevurderingÅrsak.Infotrygdendring, + skjæringstidspunkt, + periodeForEndring, + hendelse + ) + + fun korrigertInntektsmeldingInntektsopplysninger( + hendelse: Hendelse, + skjæringstidspunkt: LocalDate, + endringsdato: LocalDate + ) = Revurderingseventyr( + KorrigertInntektsmeldingInntektsopplysninger, + skjæringstidspunkt, + endringsdato.somPeriode(), + hendelse + ) + + fun refusjonsopplysninger( + hendelse: Hendelse, + skjæringstidspunkt: LocalDate, + periode: Periode + ) = Revurderingseventyr( + RevurderingÅrsak.Refusjonsopplysninger, + skjæringstidspunkt, + periode, + hendelse + ) + + fun grunnbeløpsregulering(hendelse: Hendelse, skjæringstidspunkt: LocalDate) = + Revurderingseventyr( + Grunnbeløpsregulering, + skjæringstidspunkt, + skjæringstidspunkt.somPeriode(), + hendelse + ) + + fun annullering(hendelse: Hendelse, periode: Periode) = + Revurderingseventyr(Annullering, periode.start, periode, hendelse) + + fun minimumSykdomsgradVurdert(hendelse: Hendelse, periode: Periode) = + Revurderingseventyr(MinimumSykdomsgradVurdert, periode.start, periode, hendelse) fun tidligsteEventyr(a: Revurderingseventyr?, b: Revurderingseventyr?) = when { b == null || (a != null && a.periodeForEndring.start <= b.periodeForEndring.start) -> a @@ -55,19 +151,36 @@ class Revurderingseventyr private constructor( private val vedtaksperioder = mutableListOf() - internal fun inngåSomRevurdering(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg, periode: Periode) = + internal fun inngåSomRevurdering( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg, + periode: Periode + ) = inngå(vedtaksperiode, aktivitetslogg, TypeEndring.REVURDERING, periode) - internal fun inngåSomEndring(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg, periode: Periode) = + internal fun inngåSomEndring( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg, + periode: Periode + ) = inngå(vedtaksperiode, aktivitetslogg, TypeEndring.ENDRING, periode) - internal fun inngåVedSaksbehandlerendring(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg, periode: Periode) { + internal fun inngåVedSaksbehandlerendring( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg, + periode: Periode + ) { if (hendelse.metadata.avsender != Avsender.SAKSBEHANDLER) return if (!periode.overlapperMed(periodeForEndring)) return inngåSomEndring(vedtaksperiode, aktivitetslogg, periode) } - private fun inngå(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg, typeEndring: TypeEndring, periode: Periode) { + private fun inngå( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg, + typeEndring: TypeEndring, + periode: Periode + ) { hvorfor.dersomInngått(aktivitetslogg, vedtaksperioder.isEmpty()) vedtaksperiode.inngåIRevurderingseventyret(vedtaksperioder, typeEndring.name) } @@ -78,11 +191,20 @@ class Revurderingseventyr private constructor( internal fun sendOverstyringIgangsattEvent(person: Person) { if (vedtaksperioder.isEmpty()) return - hvorfor.emitOverstyringIgangsattEvent(person, vedtaksperioder.toList(), skjæringstidspunkt, periodeForEndring, hendelse.metadata.meldingsreferanseId) + hvorfor.emitOverstyringIgangsattEvent( + person, + vedtaksperioder.toList(), + skjæringstidspunkt, + periodeForEndring, + hendelse.metadata.meldingsreferanseId + ) } - internal fun loggDersomKorrigerendeSøknad(aktivitetslogg: IAktivitetslogg, loggMelding: String) { - if (hvorfor == KorrigertSøknad){ + internal fun loggDersomKorrigerendeSøknad( + aktivitetslogg: IAktivitetslogg, + loggMelding: String + ) { + if (hvorfor == KorrigertSøknad) { aktivitetslogg.info(loggMelding) } } @@ -96,7 +218,13 @@ class Revurderingseventyr private constructor( fun dersomInngått(aktivitetslogg: IAktivitetslogg, ingenAndrePåmeldt: Boolean) {} - fun emitOverstyringIgangsattEvent(person: Person, vedtaksperioder: List, skjæringstidspunkt: LocalDate, periodeForEndring: Periode, meldingsreferanseId: UUID) { + fun emitOverstyringIgangsattEvent( + person: Person, + vedtaksperioder: List, + skjæringstidspunkt: LocalDate, + periodeForEndring: Periode, + meldingsreferanseId: UUID + ) { person.emitOverstyringIgangsattEvent( PersonObserver.OverstyringIgangsatt( årsak = navn(), @@ -114,7 +242,7 @@ class Revurderingseventyr private constructor( override fun navn() = "ARBEIDSGIVERPERIODE" } - data object Infotrygdendring: RevurderingÅrsak { + data object Infotrygdendring : RevurderingÅrsak { override fun navn(): String { return "INFOTRYGDENDRING" } @@ -135,12 +263,17 @@ class Revurderingseventyr private constructor( data object Arbeidsforhold : RevurderingÅrsak { override fun navn() = "ARBEIDSFORHOLD" } + data object Grunnbeløpsregulering : RevurderingÅrsak { override fun navn() = "GRUNNBELØPSREGULERING" } + data object Annullering : RevurderingÅrsak { override fun navn() = "ANNULLERING" - override fun dersomInngått(aktivitetslogg: IAktivitetslogg, ingenAndrePåmeldt: Boolean) { + override fun dersomInngått( + aktivitetslogg: IAktivitetslogg, + ingenAndrePåmeldt: Boolean + ) { aktivitetslogg.varsel(RV_RV_7) } } @@ -156,7 +289,8 @@ class Revurderingseventyr private constructor( skjæringstidspunkt: LocalDate, periodeForEndring: Periode, meldingsreferanseId: UUID - ) { /* trenger ikke fortelle om en reberegning */ } + ) { /* trenger ikke fortelle om en reberegning */ + } override fun navn() = "REBEREGNING" } @@ -167,8 +301,14 @@ class Revurderingseventyr private constructor( data object KorrigertInntektsmeldingInntektsopplysninger : RevurderingÅrsak { - override fun dersomInngått(aktivitetslogg: IAktivitetslogg, ingenAndrePåmeldt: Boolean) { - if (ingenAndrePåmeldt) aktivitetslogg.varsel(RV_IM_4, "Inngår i revurdering på grunn av korrigert inntektsmelding") + override fun dersomInngått( + aktivitetslogg: IAktivitetslogg, + ingenAndrePåmeldt: Boolean + ) { + if (ingenAndrePåmeldt) aktivitetslogg.varsel( + RV_IM_4, + "Inngår i revurdering på grunn av korrigert inntektsmelding" + ) aktivitetslogg.info("korrigert inntektsmelding trigget revurdering på grunn av inntektsopplysninger") } @@ -183,4 +323,4 @@ class Revurderingseventyr private constructor( override fun navn() = "REFUSJONSOPPLYSNINGER" } } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Skj\303\270nnsmessigFastsettelse.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Skj\303\270nnsmessigFastsettelse.kt" index 7347293397..db5337a97f 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Skj\303\270nnsmessigFastsettelse.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Skj\303\270nnsmessigFastsettelse.kt" @@ -25,5 +25,6 @@ class SkjønnsmessigFastsettelse( arbeidsgiveropplysninger.forEach { builder.leggTilInntekt(it) } } - override fun erRelevant(skjæringstidspunkt: LocalDate) = this.skjæringstidspunkt == skjæringstidspunkt + override fun erRelevant(skjæringstidspunkt: LocalDate) = + this.skjæringstidspunkt == skjæringstidspunkt } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Svangerskapspenger.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Svangerskapspenger.kt index a5945ee243..1c9de7a2b7 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Svangerskapspenger.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Svangerskapspenger.kt @@ -7,15 +7,21 @@ class Svangerskapspenger( private val svangerskapsytelse: List ) { - internal fun overlapper(aktivitetslogg: IAktivitetslogg, sykdomsperiode: Periode, erForlengelse: Boolean): Boolean { + internal fun overlapper( + aktivitetslogg: IAktivitetslogg, + sykdomsperiode: Periode, + erForlengelse: Boolean + ): Boolean { if (svangerskapsytelse.isEmpty()) { aktivitetslogg.info("Bruker har ingen svangerskapsytelser") return false } - val overlappsperiode = if (erForlengelse) sykdomsperiode else sykdomsperiode.familieYtelserPeriode - return svangerskapsytelse.any { ytelse -> ytelse.periode.overlapperMed(overlappsperiode) }.also { overlapper -> - if (!overlapper) aktivitetslogg.info("Bruker har svangerskapsytelser, men det slår ikke ut på overlappssjekken") - } + val overlappsperiode = + if (erForlengelse) sykdomsperiode else sykdomsperiode.familieYtelserPeriode + return svangerskapsytelse.any { ytelse -> ytelse.periode.overlapperMed(overlappsperiode) } + .also { overlapper -> + if (!overlapper) aktivitetslogg.info("Bruker har svangerskapsytelser, men det slår ikke ut på overlappssjekken") + } } internal fun perioder(): List { diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/SykdomshistorikkHendelse.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/SykdomshistorikkHendelse.kt index 96aa725e13..d707cfe914 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/SykdomshistorikkHendelse.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/SykdomshistorikkHendelse.kt @@ -11,7 +11,9 @@ import kotlin.reflect.KClass internal typealias Melding = KClass interface SykdomshistorikkHendelse { - fun revurderingseventyr(skjæringstidspunkt: LocalDate, periode: Periode): Revurderingseventyr? = null + fun revurderingseventyr(skjæringstidspunkt: LocalDate, periode: Periode): Revurderingseventyr? = + null + fun oppdaterFom(other: Periode): Periode fun sykdomstidslinje(): Sykdomstidslinje @@ -27,12 +29,19 @@ interface SykdomshistorikkHendelse { ) : this(kildenavn(hendelse), meldingsreferanseId, tidsstempel) companion object { - internal val INGEN = Hendelseskilde(SykdomshistorikkHendelse::class, UUID.randomUUID(), LocalDateTime.now()) + internal val INGEN = Hendelseskilde( + SykdomshistorikkHendelse::class, + UUID.randomUUID(), + LocalDateTime.now() + ) private fun kildenavn(hendelse: Melding): String = hendelse.simpleName ?: "Ukjent" - internal fun tidligsteTidspunktFor(kilder: List, type: Melding): LocalDateTime { + internal fun tidligsteTidspunktFor( + kilder: List, + type: Melding + ): LocalDateTime { check(kilder.all { it.erAvType(type) }) return kilder.first().tidsstempel } @@ -47,13 +56,18 @@ interface SykdomshistorikkHendelse { } override fun toString() = type - override fun equals(other: Any?) = other is Hendelseskilde && type == other.type && tidsstempel == other.tidsstempel && meldingsreferanseId == other.meldingsreferanseId + override fun equals(other: Any?) = + other is Hendelseskilde && type == other.type && tidsstempel == other.tidsstempel && meldingsreferanseId == other.meldingsreferanseId + override fun hashCode() = Objects.hash(type, tidsstempel, meldingsreferanseId) internal fun meldingsreferanseId() = meldingsreferanseId internal fun erAvType(meldingstype: Melding) = this.type == kildenavn(meldingstype) + // 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 toJson() = + mapOf("type" to type, "id" to meldingsreferanseId, "tidsstempel" to tidsstempel) + internal fun dto() = HendelseskildeDto(type, meldingsreferanseId, tidsstempel) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/SykepengegrunnlagForArbeidsgiver.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/SykepengegrunnlagForArbeidsgiver.kt index 448ecbe692..34adf3bd37 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/SykepengegrunnlagForArbeidsgiver.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/SykepengegrunnlagForArbeidsgiver.kt @@ -30,16 +30,35 @@ class SykepengegrunnlagForArbeidsgiver( ) } - internal fun erRelevant(aktivitetslogg: IAktivitetslogg, other: UUID, skjæringstidspunktVedtaksperiode: LocalDate): Boolean { + internal fun erRelevant( + aktivitetslogg: IAktivitetslogg, + other: UUID, + skjæringstidspunktVedtaksperiode: LocalDate + ): Boolean { if (other != vedtaksperiodeId) return false if (skjæringstidspunktVedtaksperiode == skjæringstidspunkt) return true aktivitetslogg.info("Vilkårsgrunnlag var relevant for Vedtaksperiode, men skjæringstidspunktene var ulikte: [$skjæringstidspunkt, $skjæringstidspunktVedtaksperiode]") return false } - internal fun lagreInntekt(inntektshistorikk: Inntektshistorikk, refusjonshistorikk: Refusjonshistorikk) { - inntektshistorikk.leggTil(inntekter.somInntektsmelding(skjæringstidspunkt, metadata.meldingsreferanseId)) - val refusjon = Refusjonshistorikk.Refusjon(metadata.meldingsreferanseId, skjæringstidspunkt, emptyList(), INGEN, null, emptyList()) + internal fun lagreInntekt( + inntektshistorikk: Inntektshistorikk, + refusjonshistorikk: Refusjonshistorikk + ) { + inntektshistorikk.leggTil( + inntekter.somInntektsmelding( + skjæringstidspunkt, + metadata.meldingsreferanseId + ) + ) + val refusjon = Refusjonshistorikk.Refusjon( + metadata.meldingsreferanseId, + skjæringstidspunkt, + emptyList(), + INGEN, + null, + emptyList() + ) refusjonshistorikk.leggTilRefusjon(refusjon) } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Sykmelding.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Sykmelding.kt index 78d32b49fb..0766e5ee3b 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Sykmelding.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Sykmelding.kt @@ -25,7 +25,8 @@ class Sykmelding( ) } - private val opprinneligPeriode = checkNotNull(Sykmeldingsperiode.periode(sykeperioder)) { "må ha minst én periode" } + private val opprinneligPeriode = + checkNotNull(Sykmeldingsperiode.periode(sykeperioder)) { "må ha minst én periode" } private var sykmeldingsperiode: Periode? = opprinneligPeriode internal fun periode() = opprinneligPeriode @@ -34,7 +35,10 @@ class Sykmelding( sykmeldingsperiode = sykmeldingsperiode?.beholdDagerEtter(dato) } - internal fun oppdaterSykmeldingsperioder(aktivitetslogg: IAktivitetslogg, perioder: List): List { + internal fun oppdaterSykmeldingsperioder( + aktivitetslogg: IAktivitetslogg, + perioder: List + ): List { val periode = sykmeldingsperiode if (periode == null) { aktivitetslogg.info("Sykmeldingsperiode har allerede blitt tidligere håndtert, mistenker korrigert sykmelding") @@ -49,7 +53,9 @@ class Sykmelding( class Sykmeldingsperiode(fom: LocalDate, tom: LocalDate) { private val periode = fom til tom + internal companion object { - internal fun periode(perioder: List) = perioder.map { it.periode }.periode() + internal fun periode(perioder: List) = + perioder.map { it.periode }.periode() } } diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/S\303\270knad.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/S\303\270knad.kt" index 587f1e461e..3346b42533 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/S\303\270knad.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/S\303\270knad.kt" @@ -70,7 +70,8 @@ class Søknad( automatiskBehandling = false ) - private val kilde: Hendelseskilde = Hendelseskilde(this::class, metadata.meldingsreferanseId, sykmeldingSkrevet) + private val kilde: Hendelseskilde = + Hendelseskilde(this::class, metadata.meldingsreferanseId, sykmeldingSkrevet) private val sykdomsperiode: Periode private var sykdomstidslinje: Sykdomstidslinje @@ -80,12 +81,16 @@ class Søknad( init { if (perioder.isEmpty()) error("Søknad må inneholde perioder") - sykdomsperiode = Søknadsperiode.sykdomsperiode(perioder) ?: error("Søknad inneholder ikke sykdomsperioder") + sykdomsperiode = Søknadsperiode.sykdomsperiode(perioder) + ?: error("Søknad inneholder ikke sykdomsperioder") if (perioder.inneholderDagerEtter(sykdomsperiode.endInclusive)) error("Søknad inneholder dager etter siste sykdomsdag") sykdomstidslinje = perioder .map { it.sykdomstidslinje(sykdomsperiode, avskjæringsdato(), kilde) } - .filter { it.periode()?.start?.isAfter(sykdomsperiode.start.minusDays(tidslinjegrense)) ?: false } + .filter { + it.periode()?.start?.isAfter(sykdomsperiode.start.minusDays(tidslinjegrense)) + ?: false + } .merge(Dagturnering.SØKNAD::beste) .subset(sykdomsperiode) } @@ -102,16 +107,30 @@ class Søknad( internal fun delvisOverlappende(other: Periode) = other.delvisOverlappMed(sykdomsperiode) - internal fun valider(aktivitetslogg: IAktivitetslogg, vilkårsgrunnlag: VilkårsgrunnlagElement?, subsumsjonslogg: Subsumsjonslogg): IAktivitetslogg { + internal fun valider( + aktivitetslogg: IAktivitetslogg, + vilkårsgrunnlag: VilkårsgrunnlagElement?, + subsumsjonslogg: Subsumsjonslogg + ): IAktivitetslogg { valider(aktivitetslogg, subsumsjonslogg) validerInntektskilder(aktivitetslogg, vilkårsgrunnlag) søknadstype.valider(aktivitetslogg, vilkårsgrunnlag, orgnummer, sykdomstidslinje.periode()) return aktivitetslogg } - private fun valider(aktivitetslogg: IAktivitetslogg, subsumsjonslogg: Subsumsjonslogg): IAktivitetslogg { - val utlandsopphold = perioder.filterIsInstance().map { it.periode } - subsumsjonslogg.logg(`§ 8-9 ledd 1`(false, utlandsopphold, this.perioder.subsumsjonsFormat())) + private fun valider( + aktivitetslogg: IAktivitetslogg, + subsumsjonslogg: Subsumsjonslogg + ): IAktivitetslogg { + val utlandsopphold = + perioder.filterIsInstance().map { it.periode } + subsumsjonslogg.logg( + `§ 8-9 ledd 1`( + false, + utlandsopphold, + this.perioder.subsumsjonsFormat() + ) + ) perioder.forEach { it.valider(this, aktivitetslogg) } if (permittert) aktivitetslogg.varsel(RV_SØ_1) validerTilkomneInntekter(aktivitetslogg) @@ -132,12 +151,18 @@ class Søknad( private fun validerTilkomneInntekter(aktivitetslogg: IAktivitetslogg) { if (tilkomneInntekter.isEmpty()) return - if (tålerTilkommenInntekt()) aktivitetslogg.varsel(RV_SV_5) else aktivitetslogg.varsel(RV_IV_9) + if (tålerTilkommenInntekt()) aktivitetslogg.varsel(RV_SV_5) else aktivitetslogg.varsel( + RV_IV_9 + ) } - private fun tålerTilkommenInntekt() = perioder.none { it is Søknadsperiode.Ferie || it is Søknadsperiode.Permisjon } + private fun tålerTilkommenInntekt() = + perioder.none { it is Søknadsperiode.Ferie || it is Søknadsperiode.Permisjon } - private fun validerInntektskilder(aktivitetslogg: IAktivitetslogg, vilkårsgrunnlag: VilkårsgrunnlagElement?) { + private fun validerInntektskilder( + aktivitetslogg: IAktivitetslogg, + vilkårsgrunnlag: VilkårsgrunnlagElement? + ) { if (ikkeJobbetIDetSisteFraAnnetArbeidsforhold) aktivitetslogg.varsel(RV_SØ_44) if (!andreInntektskilder) return if (vilkårsgrunnlag == null) return aktivitetslogg.funksjonellFeil(RV_SØ_10) @@ -154,14 +179,21 @@ class Søknad( return false } - internal fun forUng(aktivitetslogg: IAktivitetslogg, alder: Alder) = alder.forUngForÅSøke(metadata.innsendt.toLocalDate()).also { - if (it) aktivitetslogg.funksjonellFeil(RV_SØ_17) - } + internal fun forUng(aktivitetslogg: IAktivitetslogg, alder: Alder) = + alder.forUngForÅSøke(metadata.innsendt.toLocalDate()).also { + if (it) aktivitetslogg.funksjonellFeil(RV_SØ_17) + } + private fun avskjæringsdato(): LocalDate = (opprinneligSendt ?: metadata.innsendt).toLocalDate().minusMonths(3).withDayOfMonth(1) - internal fun lagVedtaksperiode(aktivitetslogg: IAktivitetslogg, person: Person, arbeidsgiver: Arbeidsgiver, subsumsjonslogg: Subsumsjonslogg): Vedtaksperiode { + internal fun lagVedtaksperiode( + aktivitetslogg: IAktivitetslogg, + person: Person, + arbeidsgiver: Arbeidsgiver, + subsumsjonslogg: Subsumsjonslogg + ): Vedtaksperiode { requireNotNull(sykdomstidslinje.periode()) { "ugyldig søknad: tidslinjen er tom" } return Vedtaksperiode( søknad = this, @@ -180,9 +212,11 @@ class Søknad( } internal fun nyeInntekterUnderveis(aktivitetslogg: IAktivitetslogg): List { - val tilkommetkilde = Kilde(metadata.meldingsreferanseId, Avsender.SYKMELDT, metadata.registrert) + val tilkommetkilde = + Kilde(metadata.meldingsreferanseId, Avsender.SYKMELDT, metadata.registrert) return if (!tålerTilkommenInntekt()) emptyList() else tilkomneInntekter.map { tilkommenInntekt -> - tilkommenInntekt.beløpstidslinje(tilkommetkilde).also { tilkommenInntekt.loggMetadata(aktivitetslogg) } + tilkommenInntekt.beløpstidslinje(tilkommetkilde) + .also { tilkommenInntekt.loggMetadata(aktivitetslogg) } } } @@ -195,6 +229,7 @@ class Søknad( "DELVIS_GODKJENT" ) } + internal fun valider(aktivitetslogg: IAktivitetslogg) { if (type !in tilbakedateringer) return aktivitetslogg.varsel(RV_SØ_3) @@ -209,7 +244,9 @@ class Søknad( ) { private val periode = fom til tom private val antallVirkedager = (fom til tom.nesteDag).ukedager() - private val smurtBeløp = if (råttBeløp == null) Inntekt.INGEN else (råttBeløp / antallVirkedager).daglig + private val smurtBeløp = + if (råttBeløp == null) Inntekt.INGEN else (råttBeløp / antallVirkedager).daglig + internal fun beløpstidslinje(kilde: Kilde) = NyInntektUnderveis( orgnummer = orgnummer, beløpstidslinje = Beløpstidslinje(periode.map { @@ -230,18 +267,27 @@ class Søknad( periode: Periode? ) { if (this == Arbeidstaker) return - if (this != Arbeidsledig) return aktivitetslogg.funksjonellFeil(`Støtter ikke søknadstypen`) - if (vilkårsgrunnlag == null) return aktivitetslogg.funksjonellFeil(`Støtter ikke førstegangsbehandlinger for arbeidsledigsøknader`) - if (vilkårsgrunnlag.refusjonsopplysninger(orgnummer).overlappendeEllerSenereRefusjonsopplysninger(periode).all { it.beløp == Inntekt.INGEN }) { + if (this != Arbeidsledig) return aktivitetslogg.funksjonellFeil( + `Støtter ikke søknadstypen` + ) + if (vilkårsgrunnlag == null) return aktivitetslogg.funksjonellFeil( + `Støtter ikke førstegangsbehandlinger for arbeidsledigsøknader` + ) + if (vilkårsgrunnlag.refusjonsopplysninger(orgnummer) + .overlappendeEllerSenereRefusjonsopplysninger(periode) + .all { it.beløp == Inntekt.INGEN }) { return aktivitetslogg.info("Arbeidsledigsøknad lagt til grunn og vi har ikke registrert refusjon i søknadstidsrommet") } aktivitetslogg.varsel(`Arbeidsledigsøknad er lagt til grunn`) } + override fun equals(other: Any?): Boolean { if (other !is Søknadstype) return false return this.type == other.type } + override fun hashCode() = type.hashCode() + companion object { val Arbeidstaker = Søknadstype("ARBEIDSTAKERE") val Arbeidsledig = Søknadstype("ARBEIDSLEDIG") @@ -289,11 +335,19 @@ class Søknad( } } - internal abstract fun sykdomstidslinje(sykdomsperiode: Periode, avskjæringsdato: LocalDate, kilde: Hendelseskilde): Sykdomstidslinje + internal abstract fun sykdomstidslinje( + sykdomsperiode: Periode, + avskjæringsdato: LocalDate, + kilde: Hendelseskilde + ): Sykdomstidslinje internal open fun valider(søknad: Søknad, aktivitetslogg: IAktivitetslogg) {} - internal fun valider(søknad: Søknad, aktivitetslogg: IAktivitetslogg, varselkode: Varselkode) { + internal fun valider( + søknad: Søknad, + aktivitetslogg: IAktivitetslogg, + varselkode: Varselkode + ) { if (periode.utenfor(søknad.sykdomsperiode)) aktivitetslogg.varsel(varselkode) } @@ -307,28 +361,58 @@ class Søknad( private val sykdomsgrad = søknadsgrad ?: sykmeldingsgrad init { - if (søknadsgrad != null && søknadsgrad > sykmeldingsgrad) throw IllegalStateException("Bruker har oppgitt at de har jobbet mindre enn sykmelding tilsier") + if (søknadsgrad != null && søknadsgrad > sykmeldingsgrad) throw IllegalStateException( + "Bruker har oppgitt at de har jobbet mindre enn sykmelding tilsier" + ) } - override fun sykdomstidslinje(sykdomsperiode: Periode, avskjæringsdato: LocalDate, kilde: Hendelseskilde) = - Sykdomstidslinje.sykedager(periode.start, periode.endInclusive, avskjæringsdato, sykdomsgrad, kilde) + override fun sykdomstidslinje( + sykdomsperiode: Periode, + avskjæringsdato: LocalDate, + kilde: Hendelseskilde + ) = + Sykdomstidslinje.sykedager( + periode.start, + periode.endInclusive, + avskjæringsdato, + sykdomsgrad, + kilde + ) } class Ferie(fom: LocalDate, tom: LocalDate) : Søknadsperiode(fom, tom) { - override fun sykdomstidslinje(sykdomsperiode: Periode, avskjæringsdato: LocalDate, kilde: Hendelseskilde) = - Sykdomstidslinje.feriedager(periode.start, periode.endInclusive, kilde).subset(sykdomsperiode.oppdaterTom(periode)) + override fun sykdomstidslinje( + sykdomsperiode: Periode, + avskjæringsdato: LocalDate, + kilde: Hendelseskilde + ) = + Sykdomstidslinje.feriedager(periode.start, periode.endInclusive, kilde) + .subset(sykdomsperiode.oppdaterTom(periode)) } class Papirsykmelding(fom: LocalDate, tom: LocalDate) : Søknadsperiode(fom, tom) { - override fun sykdomstidslinje(sykdomsperiode: Periode, avskjæringsdato: LocalDate, kilde: Hendelseskilde) = - Sykdomstidslinje.problemdager(periode.start, periode.endInclusive, kilde, "Papirdager ikke støttet") + override fun sykdomstidslinje( + sykdomsperiode: Periode, + avskjæringsdato: LocalDate, + kilde: Hendelseskilde + ) = + Sykdomstidslinje.problemdager( + periode.start, + periode.endInclusive, + kilde, + "Papirdager ikke støttet" + ) override fun valider(søknad: Søknad, aktivitetslogg: IAktivitetslogg) = aktivitetslogg.funksjonellFeil(RV_SØ_22) } class Permisjon(fom: LocalDate, tom: LocalDate) : Søknadsperiode(fom, tom) { - override fun sykdomstidslinje(sykdomsperiode: Periode, avskjæringsdato: LocalDate, kilde: Hendelseskilde) = + override fun sykdomstidslinje( + sykdomsperiode: Periode, + avskjæringsdato: LocalDate, + kilde: Hendelseskilde + ) = Sykdomstidslinje.permisjonsdager(periode.start, periode.endInclusive, kilde) override fun valider(søknad: Søknad, aktivitetslogg: IAktivitetslogg) { @@ -340,12 +424,20 @@ class Søknad( override fun valider(søknad: Søknad, aktivitetslogg: IAktivitetslogg) = valider(søknad, aktivitetslogg, RV_SØ_7) - override fun sykdomstidslinje(sykdomsperiode: Periode, avskjæringsdato: LocalDate, kilde: Hendelseskilde) = + override fun sykdomstidslinje( + sykdomsperiode: Periode, + avskjæringsdato: LocalDate, + kilde: Hendelseskilde + ) = Sykdomstidslinje.arbeidsdager(periode.start, periode.endInclusive, kilde) } class Utlandsopphold(fom: LocalDate, tom: LocalDate) : Søknadsperiode(fom, tom) { - override fun sykdomstidslinje(sykdomsperiode: Periode, avskjæringsdato: LocalDate, kilde: Hendelseskilde) = + override fun sykdomstidslinje( + sykdomsperiode: Periode, + avskjæringsdato: LocalDate, + kilde: Hendelseskilde + ) = Sykdomstidslinje.ukjent(periode.start, periode.endInclusive, kilde) override fun valider(søknad: Søknad, aktivitetslogg: IAktivitetslogg) { @@ -353,15 +445,22 @@ class Søknad( aktivitetslogg.varsel(RV_SØ_8) } - private fun alleUtlandsdagerErFerie(søknad:Søknad):Boolean { + private fun alleUtlandsdagerErFerie(søknad: Søknad): Boolean { val feriePerioder = søknad.perioder.filterIsInstance() - return this.periode.all { utlandsdag -> feriePerioder.any { ferie -> ferie.periode.contains(utlandsdag)} } + return this.periode.all { utlandsdag -> + feriePerioder.any { ferie -> + ferie.periode.contains( + utlandsdag + ) + } + } } } } private class ForeldetSubsumsjonsgrunnlag(sykdomstidslinje: Sykdomstidslinje) { - private val foreldedeDager = sykdomstidslinje.filterIsInstance().map { it.dato } + private val foreldedeDager = + sykdomstidslinje.filterIsInstance().map { it.dato } fun build() = foreldedeDager.grupperSammenhengendePerioder() } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Utbetalingshistorikk.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Utbetalingshistorikk.kt index 864f89b4ad..93eb5dfcaf 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Utbetalingshistorikk.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Utbetalingshistorikk.kt @@ -25,7 +25,10 @@ class Utbetalingshistorikk( automatiskBehandling = true ) - internal fun oppdaterHistorikk(aktivitetslogg: IAktivitetslogg, historikk: Infotrygdhistorikk): Boolean { + internal fun oppdaterHistorikk( + aktivitetslogg: IAktivitetslogg, + historikk: Infotrygdhistorikk + ): Boolean { aktivitetslogg.info("Oppdaterer Infotrygdhistorikk") if (!historikk.oppdaterHistorikk(element)) return false.also { aktivitetslogg.info("Oppfrisket Infotrygdhistorikk medførte ingen endringer") } aktivitetslogg.info("Oppfrisket Infotrygdhistorikk ble lagret") diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/UtbetalingshistorikkEtterInfotrygdendring.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/UtbetalingshistorikkEtterInfotrygdendring.kt index 830e25bceb..83d593120e 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/UtbetalingshistorikkEtterInfotrygdendring.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/UtbetalingshistorikkEtterInfotrygdendring.kt @@ -21,7 +21,10 @@ class UtbetalingshistorikkEtterInfotrygdendring( automatiskBehandling = true ) - internal fun oppdaterHistorikk(aktivitetslogg: IAktivitetslogg, historikk: Infotrygdhistorikk): Boolean { + internal fun oppdaterHistorikk( + aktivitetslogg: IAktivitetslogg, + historikk: Infotrygdhistorikk + ): Boolean { aktivitetslogg.info("Oppdaterer Infotrygdhistorikk etter infotrygendring") if (!historikk.oppdaterHistorikk(element)) return false.also { aktivitetslogg.info("Oppfrisket Infotrygdhistorikk medførte ingen endringer etter infotrygdendring") } aktivitetslogg.info("Oppfrisket Infotrygdhistorikk ble lagret etter infotrygdendring") diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/UtbetalingshistorikkForFeriepenger.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/UtbetalingshistorikkForFeriepenger.kt index 7f5771fbd8..2b534facc2 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/UtbetalingshistorikkForFeriepenger.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/UtbetalingshistorikkForFeriepenger.kt @@ -37,21 +37,32 @@ class UtbetalingshistorikkForFeriepenger( internal fun utbetalteFeriepengerTilArbeidsgiver(orgnummer: String) = feriepengehistorikk.utbetalteFeriepengerTilArbeidsgiver(orgnummer, opptjeningsår) - internal fun harRettPåFeriepenger(dato: LocalDate, orgnummer: String) = arbeidskategorikoder.harRettPåFeriepenger(dato, orgnummer) + internal fun harRettPåFeriepenger(dato: LocalDate, orgnummer: String) = + arbeidskategorikoder.harRettPåFeriepenger(dato, orgnummer) internal fun sikreAtArbeidsgivereEksisterer(opprettManglendeArbeidsgiver: (String) -> Unit) { utbetalinger.forEach { it.sikreAtArbeidsgivereEksisterer(opprettManglendeArbeidsgiver) } } - private fun erUtbetaltEtterFeriepengekjøringIT(sisteKjøringIInfotrygd: LocalDate, utbetalt: LocalDate) = sisteKjøringIInfotrygd <= utbetalt + private fun erUtbetaltEtterFeriepengekjøringIT( + sisteKjøringIInfotrygd: LocalDate, + utbetalt: LocalDate + ) = sisteKjøringIInfotrygd <= utbetalt internal fun grunnlagForFeriepenger(sisteKjøringIInfotrygd: LocalDate): List { return utbetalinger - .filterNot { dag -> erUtbetaltEtterFeriepengekjøringIT(sisteKjøringIInfotrygd, dag.utbetalt) } + .filterNot { dag -> + erUtbetaltEtterFeriepengekjøringIT( + sisteKjøringIInfotrygd, + dag.utbetalt + ) + } .groupBy { it.orgnr } .map { (arbeidsgiver, dager) -> - val arbeidsgiverdager = dager.filterIsInstance() - val persondager = dager.filterIsInstance() + val arbeidsgiverdager = + dager.filterIsInstance() + val persondager = + dager.filterIsInstance() val grunnlag = Feriepengegrunnlag( arbeidsgiverUtbetalteDager = arbeidsgiverdager.flatMap { periode -> @@ -86,10 +97,21 @@ class UtbetalingshistorikkForFeriepenger( ) { internal companion object { internal fun Iterable.utbetalteFeriepengerTilPerson(opptjeningsår: Year) = - filter { it.orgnummer.all('0'::equals) }.filter { Year.from(it.fom) == opptjeningsår.plusYears(1) }.map { it.beløp } - - internal fun Iterable.utbetalteFeriepengerTilArbeidsgiver(orgnummer: String, opptjeningsår: Year) = - filter { it.orgnummer == orgnummer }.filter { Year.from(it.fom) == opptjeningsår.plusYears(1) }.map { it.beløp } + filter { it.orgnummer.all('0'::equals) }.filter { + Year.from(it.fom) == opptjeningsår.plusYears( + 1 + ) + }.map { it.beløp } + + internal fun Iterable.utbetalteFeriepengerTilArbeidsgiver( + orgnummer: String, + opptjeningsår: Year + ) = + filter { it.orgnummer == orgnummer }.filter { + Year.from(it.fom) == opptjeningsår.plusYears( + 1 + ) + }.map { it.beløp } } } @@ -126,7 +148,8 @@ class UtbetalingshistorikkForFeriepenger( class Arbeidskategorikoder( private val arbeidskategorikoder: List ) { - internal fun harRettPåFeriepenger(dato: LocalDate, orgnummer: String) = arbeidskategorikoder.kodeForDato(dato).girRettTilFeriepenger(orgnummer) + internal fun harRettPåFeriepenger(dato: LocalDate, orgnummer: String) = + arbeidskategorikoder.kodeForDato(dato).girRettTilFeriepenger(orgnummer) class KodePeriode( private val periode: Periode, @@ -138,7 +161,10 @@ class UtbetalingshistorikkForFeriepenger( } } - enum class Arbeidskategorikode(private val kode: String, internal val girRettTilFeriepenger: (String) -> Boolean) { + enum class Arbeidskategorikode( + private val kode: String, + internal val girRettTilFeriepenger: (String) -> Boolean + ) { Arbeidstaker("01", { true }), ArbeidstakerSelvstendig("03", { it != "0" }), Sjømenn("04", { true }), @@ -173,7 +199,8 @@ class UtbetalingshistorikkForFeriepenger( Tom("", { false }); companion object { - fun finn(kode: String) = entries.firstOrNull { it.kode.trim() == kode.trim() } ?: Tom + fun finn(kode: String) = + entries.firstOrNull { it.kode.trim() == kode.trim() } ?: Tom } } } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Validation.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Validation.kt index 0a6b6af952..403ff5c5cc 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Validation.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Validation.kt @@ -3,12 +3,16 @@ package no.nav.helse.hendelser import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import no.nav.helse.person.aktivitetslogg.Varselkode -internal class Validation private constructor(private val aktivitetslogg: IAktivitetslogg) : IAktivitetslogg by(aktivitetslogg) { +internal class Validation private constructor(private val aktivitetslogg: IAktivitetslogg) : + IAktivitetslogg by (aktivitetslogg) { private var hasErrors = false private var errorBlock: Validation.() -> Unit = {} internal companion object { - internal inline fun validation(aktivitetslogg: IAktivitetslogg, block: Validation.() -> Unit) { + internal inline fun validation( + aktivitetslogg: IAktivitetslogg, + block: Validation.() -> Unit + ) { Validation(aktivitetslogg).apply(block) } } @@ -27,7 +31,8 @@ internal class Validation private constructor(private val aktivitetslogg: IAktiv if (!harFunksjonelleFeilEllerVerre()) successBlock(this) } - override fun harFunksjonelleFeilEllerVerre() = hasErrors || aktivitetslogg.harFunksjonelleFeilEllerVerre() + override fun harFunksjonelleFeilEllerVerre() = + hasErrors || aktivitetslogg.harFunksjonelleFeilEllerVerre() private fun onValidationFailed(kode: Varselkode?) { hasErrors = true diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Vilk\303\245rsgrunnlag.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Vilk\303\245rsgrunnlag.kt" index 33f6ba6bf9..6db2bc9bac 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Vilk\303\245rsgrunnlag.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Vilk\303\245rsgrunnlag.kt" @@ -47,9 +47,16 @@ class Vilkårsgrunnlag( private var grunnlagsdata: VilkårsgrunnlagHistorikk.Grunnlagsdata? = null private val opptjeningsgrunnlag = arbeidsforhold.opptjeningsgrunnlag() - private val harInntektMånedenFørSkjæringstidspunkt = inntekterForOpptjeningsvurdering.harInntektI(YearMonth.from(skjæringstidspunkt).minusMonths(1)) + private val harInntektMånedenFørSkjæringstidspunkt = + inntekterForOpptjeningsvurdering.harInntektI( + YearMonth.from(skjæringstidspunkt).minusMonths(1) + ) - internal fun erRelevant(aktivitetslogg: IAktivitetslogg, other: UUID, skjæringstidspunktVedtaksperiode: LocalDate): Boolean { + internal fun erRelevant( + aktivitetslogg: IAktivitetslogg, + other: UUID, + skjæringstidspunktVedtaksperiode: LocalDate + ): Boolean { if (other.toString() != vedtaksperiodeId) return false if (skjæringstidspunktVedtaksperiode == skjæringstidspunkt) return true aktivitetslogg.info("Vilkårsgrunnlag var relevant for Vedtaksperiode, men skjæringstidspunktene var ulikte: [$skjæringstidspunkt, $skjæringstidspunktVedtaksperiode]") @@ -59,13 +66,19 @@ class Vilkårsgrunnlag( private fun opptjening(): Opptjening { return Opptjening.nyOpptjening( grunnlag = opptjeningsgrunnlag.map { (orgnummer, ansattPerioder) -> - Opptjening.ArbeidsgiverOpptjeningsgrunnlag(orgnummer, ansattPerioder.map { it.tilDomeneobjekt() }) + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + orgnummer, + ansattPerioder.map { it.tilDomeneobjekt() }) }, skjæringstidspunkt = skjæringstidspunkt ) } - internal fun avklarSykepengegrunnlag(person: Person, aktivitetslogg: IAktivitetslogg, subsumsjonslogg: Subsumsjonslogg): Inntektsgrunnlag { + internal fun avklarSykepengegrunnlag( + person: Person, + aktivitetslogg: IAktivitetslogg, + subsumsjonslogg: Subsumsjonslogg + ): Inntektsgrunnlag { val rapporterteArbeidsforhold = opptjeningsgrunnlag.mapValues { (_, ansattPerioder) -> SkattSykepengegrunnlag( hendelseId = metadata.meldingsreferanseId, @@ -74,18 +87,40 @@ class Vilkårsgrunnlag( ansattPerioder = ansattPerioder.map { it.somAnsattPeriode() } ) } - return inntektsvurderingForSykepengegrunnlag.inntekter.avklarSykepengegrunnlag(aktivitetslogg, person, rapporterteArbeidsforhold, skjæringstidspunkt, metadata.meldingsreferanseId, subsumsjonslogg) + return inntektsvurderingForSykepengegrunnlag.inntekter.avklarSykepengegrunnlag( + aktivitetslogg, + person, + rapporterteArbeidsforhold, + skjæringstidspunkt, + metadata.meldingsreferanseId, + subsumsjonslogg + ) } - internal fun valider(aktivitetslogg: IAktivitetslogg, inntektsgrunnlag: Inntektsgrunnlag, subsumsjonslogg: Subsumsjonslogg): IAktivitetslogg { + internal fun valider( + aktivitetslogg: IAktivitetslogg, + inntektsgrunnlag: Inntektsgrunnlag, + subsumsjonslogg: Subsumsjonslogg + ): IAktivitetslogg { val sykepengegrunnlagOk = inntektsgrunnlag.valider(aktivitetslogg) - arbeidsforhold.forEach { it.validerFrilans(aktivitetslogg, skjæringstidspunkt, arbeidsforhold, inntektsvurderingForSykepengegrunnlag) } + arbeidsforhold.forEach { + it.validerFrilans( + aktivitetslogg, + skjæringstidspunkt, + arbeidsforhold, + inntektsvurderingForSykepengegrunnlag + ) + } val opptjening = opptjening() subsumsjonslogg.logg(opptjening.subsumsjon) if (!harInntektMånedenFørSkjæringstidspunkt) { aktivitetslogg.varsel(Varselkode.RV_OV_3) - } else if (!inntektsvurderingForSykepengegrunnlag.inntekter.harInntektI(YearMonth.from(skjæringstidspunkt.minusMonths(1)))) { + } else if (!inntektsvurderingForSykepengegrunnlag.inntekter.harInntektI( + YearMonth.from( + skjæringstidspunkt.minusMonths(1) + ) + )) { aktivitetslogg.info("Har inntekt måneden før skjæringstidspunkt med inntekter for opptjeningsvurdering, men ikke med inntekter for sykepengegrunnlag") } @@ -118,7 +153,12 @@ class Vilkårsgrunnlag( ORDINÆRT } - constructor(orgnummer: String, ansattFom: LocalDate, ansattTom: LocalDate? = null, type: Arbeidsforholdtype) : this(orgnummer, ansattFom til (ansattTom ?: LocalDate.MAX), type) + constructor( + orgnummer: String, + ansattFom: LocalDate, + ansattTom: LocalDate? = null, + type: Arbeidsforholdtype + ) : this(orgnummer, ansattFom til (ansattTom ?: LocalDate.MAX), type) init { check(orgnummer.isNotBlank()) @@ -131,25 +171,48 @@ class Vilkårsgrunnlag( inntektsvurderingForSykepengegrunnlag: InntektForSykepengegrunnlag ) { if (type != Arbeidsforholdtype.FRILANSER) return - harFrilansinntekterDeSiste3Månedene(aktivitetslogg, skjæringstidspunkt, inntektsvurderingForSykepengegrunnlag) - sjekkFrilansArbeidsforholdMotAndreArbeidsforhold(aktivitetslogg, skjæringstidspunkt, andre) + harFrilansinntekterDeSiste3Månedene( + aktivitetslogg, + skjæringstidspunkt, + inntektsvurderingForSykepengegrunnlag + ) + sjekkFrilansArbeidsforholdMotAndreArbeidsforhold( + aktivitetslogg, + skjæringstidspunkt, + andre + ) } - private fun harFrilansinntekterDeSiste3Månedene(aktivitetslogg: IAktivitetslogg, skjæringstidspunkt: LocalDate, inntektForSykepengegrunnlag: InntektForSykepengegrunnlag) { + private fun harFrilansinntekterDeSiste3Månedene( + aktivitetslogg: IAktivitetslogg, + skjæringstidspunkt: LocalDate, + inntektForSykepengegrunnlag: InntektForSykepengegrunnlag + ) { val finnerFrilansinntektDeSiste3Månedene = (1..3).any { antallMånederFør -> val måned = skjæringstidspunkt.yearMonth.minusMonths(antallMånederFør.toLong()) val månedenSomPeriode = måned.atDay(1) til måned.atEndOfMonth() val ansattIMåneden = ansettelseperiode.overlapperMed(månedenSomPeriode) - ansattIMåneden && inntektForSykepengegrunnlag.inntekter.harInntektFor(orgnummer, måned) + ansattIMåneden && inntektForSykepengegrunnlag.inntekter.harInntektFor( + orgnummer, + måned + ) } if (finnerFrilansinntektDeSiste3Månedene) aktivitetslogg.funksjonellFeil(RV_IV_3) } - private fun sjekkFrilansArbeidsforholdMotAndreArbeidsforhold(aktivitetslogg: IAktivitetslogg, skjæringstidspunkt: LocalDate, andre: List) { + private fun sjekkFrilansArbeidsforholdMotAndreArbeidsforhold( + aktivitetslogg: IAktivitetslogg, + skjæringstidspunkt: LocalDate, + andre: List + ) { if (skjæringstidspunkt !in ansettelseperiode) return aktivitetslogg.info("Vedkommende har et aktivt frilansoppdrag på skjæringstidspunktet") - if (andre.count { it.orgnummer == this.orgnummer && it.ansettelseperiode.overlapperMed(this.ansettelseperiode) } > 1) { + if (andre.count { + it.orgnummer == this.orgnummer && it.ansettelseperiode.overlapperMed( + this.ansettelseperiode + ) + } > 1) { aktivitetslogg.info("Vedkommende har andre overlappende arbeidsforhold i samme virksomhet hvor vedkommende har frilansoppdrag") } } @@ -161,9 +224,12 @@ class Vilkårsgrunnlag( ) internal fun somAnsattPeriode() = - AnsattPeriode(ansattFom = ansettelseperiode.start, ansattTom = ansettelseperiode.endInclusive.takeUnless { it == LocalDate.MAX }) + AnsattPeriode( + ansattFom = ansettelseperiode.start, + ansattTom = ansettelseperiode.endInclusive.takeUnless { it == LocalDate.MAX }) - private fun kanBrukes() = type != Arbeidsforholdtype.FRILANSER // filtrerer ut frilans-arbeidsforhold enn så lenge + private fun kanBrukes() = + type != Arbeidsforholdtype.FRILANSER // filtrerer ut frilans-arbeidsforhold enn så lenge internal companion object { internal fun Iterable.opptjeningsgrunnlag(): Map> { diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Ytelser.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Ytelser.kt index 2fdd4baa0e..0960234218 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Ytelser.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/hendelser/Ytelser.kt @@ -37,9 +37,10 @@ class Ytelser( ) } - private val YTELSER_SOM_KAN_OPPDATERE_HISTORIKK: List = listOf( - foreldrepenger - ) + private val YTELSER_SOM_KAN_OPPDATERE_HISTORIKK: List = + listOf( + foreldrepenger + ) private lateinit var sykdomstidslinje: Sykdomstidslinje companion object { @@ -48,18 +49,43 @@ class Ytelser( internal fun erRelevant(other: UUID) = other.toString() == vedtaksperiodeId - internal fun valider(aktivitetslogg: IAktivitetslogg, periode: Periode, skjæringstidspunkt: LocalDate, maksdato: LocalDate, erForlengelse: Boolean ): Boolean { + internal fun valider( + aktivitetslogg: IAktivitetslogg, + periode: Periode, + skjæringstidspunkt: LocalDate, + maksdato: LocalDate, + erForlengelse: Boolean + ): Boolean { if (periode.start > maksdato) return true val periodeForOverlappsjekk = periode.start til minOf(periode.endInclusive, maksdato) arbeidsavklaringspenger.valider(aktivitetslogg, skjæringstidspunkt, periodeForOverlappsjekk) dagpenger.valider(aktivitetslogg, skjæringstidspunkt, periodeForOverlappsjekk) foreldrepenger.valider(aktivitetslogg, periodeForOverlappsjekk, erForlengelse) - if (svangerskapspenger.overlapper(aktivitetslogg, periodeForOverlappsjekk, erForlengelse)) aktivitetslogg.varsel(Varselkode.`Overlapper med svangerskapspenger`) - if (pleiepenger.overlapper(aktivitetslogg, periodeForOverlappsjekk, erForlengelse)) aktivitetslogg.varsel(Varselkode.`Overlapper med pleiepenger`) - if (omsorgspenger.overlapper(aktivitetslogg, periodeForOverlappsjekk, erForlengelse)) aktivitetslogg.varsel(Varselkode.`Overlapper med omsorgspenger`) - if (opplæringspenger.overlapper(aktivitetslogg, periodeForOverlappsjekk, erForlengelse)) aktivitetslogg.varsel(Varselkode.`Overlapper med opplæringspenger`) - if (institusjonsopphold.overlapper(aktivitetslogg, periodeForOverlappsjekk)) aktivitetslogg.funksjonellFeil(Varselkode.`Overlapper med institusjonsopphold`) + if (svangerskapspenger.overlapper( + aktivitetslogg, + periodeForOverlappsjekk, + erForlengelse + )) aktivitetslogg.varsel(Varselkode.`Overlapper med svangerskapspenger`) + if (pleiepenger.overlapper( + aktivitetslogg, + periodeForOverlappsjekk, + erForlengelse + )) aktivitetslogg.varsel(Varselkode.`Overlapper med pleiepenger`) + if (omsorgspenger.overlapper( + aktivitetslogg, + periodeForOverlappsjekk, + erForlengelse + )) aktivitetslogg.varsel(Varselkode.`Overlapper med omsorgspenger`) + if (opplæringspenger.overlapper( + aktivitetslogg, + periodeForOverlappsjekk, + erForlengelse + )) aktivitetslogg.varsel(Varselkode.`Overlapper med opplæringspenger`) + if (institusjonsopphold.overlapper( + aktivitetslogg, + periodeForOverlappsjekk + )) aktivitetslogg.funksjonellFeil(Varselkode.`Overlapper med institusjonsopphold`) return !aktivitetslogg.harFunksjonelleFeilEllerVerre() } @@ -72,7 +98,13 @@ class Ytelser( oppdaterHistorikk: () -> Unit ) { val sykdomstidslinjer = YTELSER_SOM_KAN_OPPDATERE_HISTORIKK.mapNotNull { ytelse -> - if (!ytelse.skalOppdatereHistorikk(aktivitetslogg, ytelse, periode, skjæringstidspunkt, periodeRettEtter)) null + if (!ytelse.skalOppdatereHistorikk( + aktivitetslogg, + ytelse, + periode, + skjæringstidspunkt, + periodeRettEtter + )) null else ytelse.sykdomstidslinje(metadata.meldingsreferanseId, metadata.registrert) } if (sykdomstidslinjer.isEmpty()) return @@ -89,7 +121,8 @@ class Ytelser( } internal fun avgrensTil(periode: Periode): Ytelser { - sykdomstidslinje = sykdomstidslinje.fraOgMed(periode.start).fremTilOgMed(periode.endInclusive) + sykdomstidslinje = + sykdomstidslinje.fraOgMed(periode.start).fremTilOgMed(periode.endInclusive) return this } @@ -134,4 +167,4 @@ data class AndreYtelserPerioder( if (omsorgspenger.isNotEmpty()) return false return true } -} \ 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 f1bfd1e1f9..99c9fb2b37 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 @@ -121,7 +121,11 @@ internal class Arbeidsgiver private constructor( private val yrkesaktivitet: Yrkesaktivitet, private val subsumsjonslogg: Subsumsjonslogg ) : Aktivitetskontekst, UtbetalingObserver { - internal constructor(person: Person, yrkesaktivitet: Yrkesaktivitet, subsumsjonslogg: Subsumsjonslogg) : this( + internal constructor( + person: Person, + yrkesaktivitet: Yrkesaktivitet, + subsumsjonslogg: Subsumsjonslogg + ) : this( person = person, organisasjonsnummer = yrkesaktivitet.identifikator(), id = UUID.randomUUID(), @@ -156,13 +160,18 @@ internal class Arbeidsgiver private constructor( ) internal companion object { - internal fun List.finn(yrkesaktivitet: Yrkesaktivitet) = find { it.erSammeYrkesaktivitet(yrkesaktivitet) } + internal fun List.finn(yrkesaktivitet: Yrkesaktivitet) = + find { it.erSammeYrkesaktivitet(yrkesaktivitet) } internal fun List.tidligsteDato(): LocalDate { - return mapNotNull { it.sykdomstidslinje().periode()?.start }.minOrNull() ?: LocalDate.now() + return mapNotNull { it.sykdomstidslinje().periode()?.start }.minOrNull() + ?: LocalDate.now() } - internal fun List.igangsettOverstyring(revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg) { + internal fun List.igangsettOverstyring( + revurdering: Revurderingseventyr, + aktivitetslogg: IAktivitetslogg + ) { forEach { arbeidsgiver -> arbeidsgiver.looper { it.igangsettOverstyring(revurdering, aktivitetslogg) @@ -177,22 +186,39 @@ internal class Arbeidsgiver private constructor( aktivitetslogg: IAktivitetslogg, sisteUtbetalteDagIInfotrygd: LocalDate? ) { - forEach { arbeidsgiver -> arbeidsgiver.migrerUbrukteRefusjonsopplysninger(aktivitetslogg, sisteUtbetalteDagIInfotrygd) } + forEach { arbeidsgiver -> + arbeidsgiver.migrerUbrukteRefusjonsopplysninger( + aktivitetslogg, + sisteUtbetalteDagIInfotrygd + ) + } } internal fun List.migrerRefusjonsopplysningerPåBehandlinger( aktivitetslogg: IAktivitetslogg, vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet: (LocalDate) -> VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement? ) { - forEach { arbeidsgiver -> arbeidsgiver.migrerRefusjonsopplysningerPåBehandlinger(aktivitetslogg, vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet) } + forEach { arbeidsgiver -> + arbeidsgiver.migrerRefusjonsopplysningerPåBehandlinger( + aktivitetslogg, + vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet + ) + } } - internal fun List.beregnSkjæringstidspunkt(infotrygdhistorikk: Infotrygdhistorikk):() -> Skjæringstidspunkt = { - infotrygdhistorikk.skjæringstidspunkt(map(Arbeidsgiver::sykdomstidslinje)) - } + internal fun List.beregnSkjæringstidspunkt(infotrygdhistorikk: Infotrygdhistorikk): () -> Skjæringstidspunkt = + { + infotrygdhistorikk.skjæringstidspunkt(map(Arbeidsgiver::sykdomstidslinje)) + } internal fun List.beregnSkjæringstidspunkter(infotrygdhistorikk: Infotrygdhistorikk) { - forEach { it.vedtaksperioder.beregnSkjæringstidspunkter(beregnSkjæringstidspunkt(infotrygdhistorikk), it.beregnArbeidsgiverperiode(Subsumsjonslogg.EmptyLog)) } + forEach { + it.vedtaksperioder.beregnSkjæringstidspunkter( + beregnSkjæringstidspunkt( + infotrygdhistorikk + ), it.beregnArbeidsgiverperiode(Subsumsjonslogg.EmptyLog) + ) + } } internal fun List.aktiveSkjæringstidspunkter(): Set { @@ -205,19 +231,35 @@ internal class Arbeidsgiver private constructor( infotrygdhistorikk: Infotrygdhistorikk ) { forEach { arbeidsgiver -> - arbeidsgiver.håndterHistorikkFraInfotrygd(hendelse, aktivitetslogg, infotrygdhistorikk) + arbeidsgiver.håndterHistorikkFraInfotrygd( + hendelse, + aktivitetslogg, + infotrygdhistorikk + ) } } - internal fun List.håndter(overstyrInntektsgrunnlag: OverstyrInntektsgrunnlag, aktivitetslogg: IAktivitetslogg) = + internal fun List.håndter( + overstyrInntektsgrunnlag: OverstyrInntektsgrunnlag, + aktivitetslogg: IAktivitetslogg + ) = any { it.håndter(overstyrInntektsgrunnlag, aktivitetslogg) } - internal fun List.håndterOverstyringAvRefusjon(hendelse: OverstyrArbeidsgiveropplysninger, aktivitetslogg: IAktivitetslogg) { + internal fun List.håndterOverstyringAvRefusjon( + hendelse: OverstyrArbeidsgiveropplysninger, + aktivitetslogg: IAktivitetslogg + ) { forEach { arbeidsgiver -> - val vedtaksperioderPåSkjæringstidspunkt = arbeidsgiver.vedtaksperioder.filter(MED_SKJÆRINGSTIDSPUNKT(hendelse.skjæringstidspunkt)) + val vedtaksperioderPåSkjæringstidspunkt = + arbeidsgiver.vedtaksperioder.filter(MED_SKJÆRINGSTIDSPUNKT(hendelse.skjæringstidspunkt)) val refusjonstidslinje = vedtaksperioderPåSkjæringstidspunkt.refusjonstidslinje() - val startdatoer = vedtaksperioderPåSkjæringstidspunkt.startdatoerPåSammenhengendeVedtaksperioder() - val servitør = hendelse.refusjonsservitør(startdatoer, arbeidsgiver.organisasjonsnummer, refusjonstidslinje) ?: return@forEach + val startdatoer = + vedtaksperioderPåSkjæringstidspunkt.startdatoerPåSammenhengendeVedtaksperioder() + val servitør = hendelse.refusjonsservitør( + startdatoer, + arbeidsgiver.organisasjonsnummer, + refusjonstidslinje + ) ?: return@forEach arbeidsgiver.håndter(hendelse, aktivitetslogg, servitør) } } @@ -230,14 +272,28 @@ internal class Arbeidsgiver private constructor( internal fun Iterable.førsteFraværsdager(skjæringstidspunkt: LocalDate) = mapNotNull { arbeidsgiver -> - val førsteFraværsdag = arbeidsgiver.finnFørsteFraværsdag(skjæringstidspunkt) ?: return@mapNotNull null + val førsteFraværsdag = + arbeidsgiver.finnFørsteFraværsdag(skjæringstidspunkt) ?: return@mapNotNull null PersonObserver.FørsteFraværsdag(arbeidsgiver.organisasjonsnummer, førsteFraværsdag) } - internal fun List.avklarSykepengegrunnlag(aktivitetslogg: IAktivitetslogg, skjæringstidspunkt: LocalDate, skatteopplysninger: Map) = - mapNotNull { arbeidsgiver -> arbeidsgiver.avklarSykepengegrunnlag(skjæringstidspunkt, skatteopplysninger[arbeidsgiver.organisasjonsnummer], aktivitetslogg) } + internal fun List.avklarSykepengegrunnlag( + aktivitetslogg: IAktivitetslogg, + skjæringstidspunkt: LocalDate, + skatteopplysninger: Map + ) = + mapNotNull { arbeidsgiver -> + arbeidsgiver.avklarSykepengegrunnlag( + skjæringstidspunkt, + skatteopplysninger[arbeidsgiver.organisasjonsnummer], + aktivitetslogg + ) + } - internal fun List.validerTilstand(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) = forEach { it.vedtaksperioder.validerTilstand(hendelse, aktivitetslogg) } + internal fun List.validerTilstand( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) = forEach { it.vedtaksperioder.validerTilstand(hendelse, aktivitetslogg) } internal fun Iterable.beregnFeriepengerForAlleArbeidsgivere( personidentifikator: Personidentifikator, @@ -245,32 +301,51 @@ internal class Arbeidsgiver private constructor( utbetalingshistorikkForFeriepenger: UtbetalingshistorikkForFeriepenger, aktivitetslogg: IAktivitetslogg ) { - forEach { it.utbetalFeriepenger( - personidentifikator, - feriepengeberegner, - utbetalingshistorikkForFeriepenger, - aktivitetslogg - ) } + forEach { + it.utbetalFeriepenger( + personidentifikator, + feriepengeberegner, + utbetalingshistorikkForFeriepenger, + aktivitetslogg + ) + } } internal fun Iterable.avventerSøknad(periode: Periode) = this .any { it.sykmeldingsperioder.avventerSøknad(periode) } - private fun Iterable.sistePeriodeSomHarPågåendeUtbetaling() = vedtaksperioder(HAR_PÅGÅENDE_UTBETALINGER).maxOrNull() - private fun Iterable.harPågåeneUtbetaling() = any { it.utbetalinger.any { utbetaling -> utbetaling.erInFlight() } } - private fun Iterable.førsteAuuSomVilUtbetales() = nåværendeVedtaksperioder(AUU_SOM_VIL_UTBETALES).minOrNull() - internal fun Iterable.gjenopptaBehandling(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) { + private fun Iterable.sistePeriodeSomHarPågåendeUtbetaling() = + vedtaksperioder(HAR_PÅGÅENDE_UTBETALINGER).maxOrNull() + + private fun Iterable.harPågåeneUtbetaling() = + any { it.utbetalinger.any { utbetaling -> utbetaling.erInFlight() } } + + private fun Iterable.førsteAuuSomVilUtbetales() = + nåværendeVedtaksperioder(AUU_SOM_VIL_UTBETALES).minOrNull() + + internal fun Iterable.gjenopptaBehandling( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) { if (harPågåeneUtbetaling()) return aktivitetslogg.info("Stopper gjenoppta behandling pga. pågående utbetaling") val periodeSomSkalGjenopptas = periodeSomSkalGjenopptas() ?: return checkBareEnPeriodeTilGodkjenningSamtidig(periodeSomSkalGjenopptas) periodeSomSkalGjenopptas.gjenopptaBehandling(hendelse, aktivitetslogg) } - internal fun Iterable.nestemann() = sistePeriodeSomHarPågåendeUtbetaling() ?: periodeSomSkalGjenopptas() ?: førsteAuuSomVilUtbetales() + internal fun Iterable.nestemann() = + sistePeriodeSomHarPågåendeUtbetaling() ?: periodeSomSkalGjenopptas() + ?: førsteAuuSomVilUtbetales() - private fun Iterable.periodeSomSkalGjenopptas() = flatMap { it.vedtaksperioder }.nestePeriodeSomSkalGjenopptas() - private fun Iterable.checkBareEnPeriodeTilGodkjenningSamtidig(periodeSomSkalGjenopptas: Vedtaksperiode) = flatMap { it.vedtaksperioder }.checkBareEnPeriodeTilGodkjenningSamtidig(periodeSomSkalGjenopptas) + private fun Iterable.periodeSomSkalGjenopptas() = + flatMap { it.vedtaksperioder }.nestePeriodeSomSkalGjenopptas() + + private fun Iterable.checkBareEnPeriodeTilGodkjenningSamtidig( + periodeSomSkalGjenopptas: Vedtaksperiode + ) = flatMap { it.vedtaksperioder }.checkBareEnPeriodeTilGodkjenningSamtidig( + periodeSomSkalGjenopptas + ) internal fun søppelbøtte( arbeidsgivere: List, @@ -278,7 +353,8 @@ internal class Arbeidsgiver private constructor( aktivitetslogg: IAktivitetslogg, filter: VedtaksperiodeFilter ) { - arbeidsgivere.flatMap { it.søppelbøtte(hendelse, aktivitetslogg, filter) }.forEach { it.buildAndEmit() } + arbeidsgivere.flatMap { it.søppelbøtte(hendelse, aktivitetslogg, filter) } + .forEach { it.buildAndEmit() } } internal fun gjenopprett( @@ -290,9 +366,10 @@ internal class Arbeidsgiver private constructor( ): Arbeidsgiver { val vedtaksperioder = mutableListOf() val forkastede = mutableListOf() - val utbetalinger = dto.utbetalinger.fold(emptyList()) { result, utbetaling -> - result.plusElement(Utbetaling.gjenopprett(utbetaling, result)) - } + val utbetalinger = + dto.utbetalinger.fold(emptyList()) { result, utbetaling -> + result.plusElement(Utbetaling.gjenopprett(utbetaling, result)) + } val arbeidsgiver = Arbeidsgiver( person = person, id = dto.id, @@ -303,15 +380,38 @@ internal class Arbeidsgiver private constructor( vedtaksperioder = vedtaksperioder, forkastede = forkastede, utbetalinger = utbetalinger.toMutableList(), - feriepengeutbetalinger = dto.feriepengeutbetalinger.map { Feriepengeutbetaling.gjenopprett(alder, it) }.toMutableList(), + feriepengeutbetalinger = dto.feriepengeutbetalinger.map { + Feriepengeutbetaling.gjenopprett( + alder, + it + ) + }.toMutableList(), refusjonshistorikk = Refusjonshistorikk.gjenopprett(dto.refusjonshistorikk), ubrukteRefusjonsopplysninger = Refusjonsservitør.gjenopprett(dto.ubrukteRefusjonsopplysninger), yrkesaktivitet = dto.organisasjonsnummer.tilYrkesaktivitet(), subsumsjonslogg = subsumsjonslogg ) val utbetalingerMap = utbetalinger.associateBy(Utbetaling::id) - vedtaksperioder.addAll(dto.vedtaksperioder.map { Vedtaksperiode.gjenopprett(person, arbeidsgiver, it, subsumsjonslogg, grunnlagsdata, utbetalingerMap) }) - forkastede.addAll(dto.forkastede.map { ForkastetVedtaksperiode.gjenopprett(person, arbeidsgiver, it, subsumsjonslogg, grunnlagsdata, utbetalingerMap) }) + vedtaksperioder.addAll(dto.vedtaksperioder.map { + Vedtaksperiode.gjenopprett( + person, + arbeidsgiver, + it, + subsumsjonslogg, + grunnlagsdata, + utbetalingerMap + ) + }) + forkastede.addAll(dto.forkastede.map { + ForkastetVedtaksperiode.gjenopprett( + person, + arbeidsgiver, + it, + subsumsjonslogg, + grunnlagsdata, + utbetalingerMap + ) + }) return arbeidsgiver } } @@ -321,31 +421,63 @@ internal class Arbeidsgiver private constructor( sisteUtbetalteDagIInfotrygd: LocalDate? ) { aktivitetslogg.kontekst(this) - val sisteVedtaksperiode = vedtaksperioder.sistePeriodeRelevantForMigreringAvUbrukteRefusjonsopplysninger() - val stardatoPåSammenhengendeVedtaksperioder = sisteVedtaksperiode?.let { startdatoPåSammenhengendeVedtaksperioder(it) } - val sisteTom = listOfNotNull(sisteVedtaksperiode?.periode()?.endInclusive, sisteUtbetalteDagIInfotrygd).maxOrNull() - val refusjonsservitørFraRefusjonshistorikk = refusjonshistorikk.refusjonsservitør(stardatoPåSammenhengendeVedtaksperioder = stardatoPåSammenhengendeVedtaksperioder, fom = sisteTom?.nesteDag) + val sisteVedtaksperiode = + vedtaksperioder.sistePeriodeRelevantForMigreringAvUbrukteRefusjonsopplysninger() + val stardatoPåSammenhengendeVedtaksperioder = + sisteVedtaksperiode?.let { startdatoPåSammenhengendeVedtaksperioder(it) } + val sisteTom = listOfNotNull( + sisteVedtaksperiode?.periode()?.endInclusive, + sisteUtbetalteDagIInfotrygd + ).maxOrNull() + val refusjonsservitørFraRefusjonshistorikk = refusjonshistorikk.refusjonsservitør( + stardatoPåSammenhengendeVedtaksperioder = stardatoPåSammenhengendeVedtaksperioder, + fom = sisteTom?.nesteDag + ) refusjonsservitørFraRefusjonshistorikk.servér(ubrukteRefusjonsopplysninger, aktivitetslogg) if (sisteVedtaksperiode == null) return - val refusjonsservitørFraSisteInntektsgrunnlag = sisteVedtaksperiode.refusjonsservitørForUbrukteRefusjonsopplysninger(sisteUtbetalteDagIInfotrygd) ?: return - refusjonsservitørFraSisteInntektsgrunnlag.servér(ubrukteRefusjonsopplysninger, aktivitetslogg) + val refusjonsservitørFraSisteInntektsgrunnlag = + sisteVedtaksperiode.refusjonsservitørForUbrukteRefusjonsopplysninger( + sisteUtbetalteDagIInfotrygd + ) ?: return + refusjonsservitørFraSisteInntektsgrunnlag.servér( + ubrukteRefusjonsopplysninger, + aktivitetslogg + ) } private fun migrerRefusjonsopplysningerPåBehandlinger( aktivitetslogg: IAktivitetslogg, vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet: (LocalDate) -> VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement? - ) = vedtaksperioder.migrerRefusjonsopplysningerPåBehandlinger(aktivitetslogg, organisasjonsnummer, vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet) + ) = vedtaksperioder.migrerRefusjonsopplysningerPåBehandlinger( + aktivitetslogg, + organisasjonsnummer, + vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet + ) - private fun erSammeYrkesaktivitet(yrkesaktivitet: Yrkesaktivitet) = this.yrkesaktivitet == yrkesaktivitet + private fun erSammeYrkesaktivitet(yrkesaktivitet: Yrkesaktivitet) = + this.yrkesaktivitet == yrkesaktivitet - internal fun refusjonsopplysninger(skjæringstidspunkt: LocalDate) = refusjonshistorikk.refusjonsopplysninger(skjæringstidspunkt) + internal fun refusjonsopplysninger(skjæringstidspunkt: LocalDate) = + refusjonshistorikk.refusjonsopplysninger(skjæringstidspunkt) - internal fun kanBeregneSykepengegrunnlag(skjæringstidspunkt: LocalDate) = avklarSykepengegrunnlag(skjæringstidspunkt) != null + internal fun kanBeregneSykepengegrunnlag(skjæringstidspunkt: LocalDate) = + avklarSykepengegrunnlag(skjæringstidspunkt) != null - internal fun avklarSykepengegrunnlag(skjæringstidspunkt: LocalDate, skattSykepengegrunnlag: SkattSykepengegrunnlag? = null, aktivitetslogg: IAktivitetslogg? = null) : ArbeidsgiverInntektsopplysning? { + internal fun avklarSykepengegrunnlag( + skjæringstidspunkt: LocalDate, + skattSykepengegrunnlag: SkattSykepengegrunnlag? = null, + aktivitetslogg: IAktivitetslogg? = null + ): ArbeidsgiverInntektsopplysning? { val førsteFraværsdag = finnFørsteFraværsdag(skjæringstidspunkt) - return yrkesaktivitet.avklarSykepengegrunnlag(skjæringstidspunkt, førsteFraværsdag, inntektshistorikk, skattSykepengegrunnlag, refusjonshistorikk, aktivitetslogg) + return yrkesaktivitet.avklarSykepengegrunnlag( + skjæringstidspunkt, + førsteFraværsdag, + inntektshistorikk, + skattSykepengegrunnlag, + refusjonshistorikk, + aktivitetslogg + ) } internal fun organisasjonsnummer() = organisasjonsnummer @@ -364,7 +496,15 @@ internal class Arbeidsgiver private constructor( forbrukteSykedager: Int, gjenståendeSykedager: Int, periode: Periode - ) = lagNyUtbetaling(aktivitetslogg, utbetalingstidslinje, maksdato, forbrukteSykedager, gjenståendeSykedager, periode, Utbetalingtype.UTBETALING) + ) = lagNyUtbetaling( + aktivitetslogg, + utbetalingstidslinje, + maksdato, + forbrukteSykedager, + gjenståendeSykedager, + periode, + Utbetalingtype.UTBETALING + ) internal fun lagRevurdering( aktivitetslogg: IAktivitetslogg, @@ -374,7 +514,15 @@ internal class Arbeidsgiver private constructor( gjenståendeSykedager: Int, periode: Periode ): Utbetaling { - return lagNyUtbetaling(aktivitetslogg, utbetalingstidslinje, maksdato, forbrukteSykedager, gjenståendeSykedager, periode, Utbetalingtype.REVURDERING) + return lagNyUtbetaling( + aktivitetslogg, + utbetalingstidslinje, + maksdato, + forbrukteSykedager, + gjenståendeSykedager, + periode, + Utbetalingtype.REVURDERING + ) } private fun lagNyUtbetaling( @@ -408,7 +556,11 @@ internal class Arbeidsgiver private constructor( return utbetalingen } - private fun nyUtbetaling(aktivitetslogg: IAktivitetslogg, utbetalingen: Utbetaling, annulleringer: List = emptyList()) { + private fun nyUtbetaling( + aktivitetslogg: IAktivitetslogg, + utbetalingen: Utbetaling, + annulleringer: List = emptyList() + ) { utbetalinger.lastOrNull()?.forkast(aktivitetslogg) annulleringer.plus(utbetalingen).forEach { utbetaling -> check(utbetalinger.tillaterOpprettelseAvUtbetaling(utbetaling)) { "Har laget en overlappende utbetaling" } @@ -450,38 +602,85 @@ internal class Arbeidsgiver private constructor( avbruttSøknad.avbryt(sykmeldingsperioder) } - internal fun håndter(forkastSykmeldingsperioder: ForkastSykmeldingsperioder, aktivitetslogg: IAktivitetslogg) { + internal fun håndter( + forkastSykmeldingsperioder: ForkastSykmeldingsperioder, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.kontekst(this) forkastSykmeldingsperioder.forkast(sykmeldingsperioder) } - internal fun håndter(anmodningOmForkasting: AnmodningOmForkasting, aktivitetslogg: IAktivitetslogg) { + internal fun håndter( + anmodningOmForkasting: AnmodningOmForkasting, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.kontekst(this) håndter(anmodningOmForkasting) { håndter(anmodningOmForkasting, aktivitetslogg) } } - internal fun vurderOmSøknadIkkeKanHåndteres(aktivitetslogg: IAktivitetslogg, vedtaksperiode: Vedtaksperiode, arbeidsgivere: List): Boolean { + internal fun vurderOmSøknadIkkeKanHåndteres( + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Vedtaksperiode, + arbeidsgivere: List + ): Boolean { // sjekker først egen arbeidsgiver først - return yrkesaktivitet.erYrkesaktivitetenIkkeStøttet(aktivitetslogg) || this.harForkastetVedtaksperiodeSomBlokkererBehandling(aktivitetslogg, vedtaksperiode) - || arbeidsgivere.any { it !== this && it.harForkastetVedtaksperiodeSomBlokkererBehandling(aktivitetslogg, vedtaksperiode) } - || ForkastetVedtaksperiode.harKortGapTilForkastet(forkastede, aktivitetslogg, vedtaksperiode) + return yrkesaktivitet.erYrkesaktivitetenIkkeStøttet(aktivitetslogg) || this.harForkastetVedtaksperiodeSomBlokkererBehandling( + aktivitetslogg, + vedtaksperiode + ) + || arbeidsgivere.any { + it !== this && it.harForkastetVedtaksperiodeSomBlokkererBehandling( + aktivitetslogg, + vedtaksperiode + ) + } + || ForkastetVedtaksperiode.harKortGapTilForkastet( + forkastede, + aktivitetslogg, + vedtaksperiode + ) } - private fun harForkastetVedtaksperiodeSomBlokkererBehandling(aktivitetslogg: IAktivitetslogg, vedtaksperiode: Vedtaksperiode): Boolean { - return ForkastetVedtaksperiode.forlengerForkastet(forkastede, aktivitetslogg, vedtaksperiode) - || ForkastetVedtaksperiode.harOverlappendeForkastetPeriode(forkastede, vedtaksperiode, aktivitetslogg) - || ForkastetVedtaksperiode.harNyereForkastetPeriode(forkastede, vedtaksperiode, aktivitetslogg) + private fun harForkastetVedtaksperiodeSomBlokkererBehandling( + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Vedtaksperiode + ): Boolean { + return ForkastetVedtaksperiode.forlengerForkastet( + forkastede, + aktivitetslogg, + vedtaksperiode + ) + || ForkastetVedtaksperiode.harOverlappendeForkastetPeriode( + forkastede, + vedtaksperiode, + aktivitetslogg + ) + || ForkastetVedtaksperiode.harNyereForkastetPeriode( + forkastede, + vedtaksperiode, + aktivitetslogg + ) } - internal fun håndter(søknad: Søknad, aktivitetslogg: IAktivitetslogg, arbeidsgivere: List, infotrygdhistorikk: Infotrygdhistorikk) { + internal fun håndter( + søknad: Søknad, + aktivitetslogg: IAktivitetslogg, + arbeidsgivere: List, + infotrygdhistorikk: Infotrygdhistorikk + ) { aktivitetslogg.kontekst(this) søknad.slettSykmeldingsperioderSomDekkes(sykmeldingsperioder) opprettVedtaksperiodeOgHåndter(søknad, aktivitetslogg, arbeidsgivere, infotrygdhistorikk) } - private fun opprettVedtaksperiodeOgHåndter(søknad: Søknad, aktivitetslogg: IAktivitetslogg, arbeidsgivere: List, infotrygdhistorikk: Infotrygdhistorikk) { + private fun opprettVedtaksperiodeOgHåndter( + søknad: Søknad, + aktivitetslogg: IAktivitetslogg, + arbeidsgivere: List, + infotrygdhistorikk: Infotrygdhistorikk + ) { håndter(søknad) { håndter(søknad, aktivitetslogg, arbeidsgivere, infotrygdhistorikk) } if (søknad.noenHarHåndtert() && !aktivitetslogg.harFunksjonelleFeilEllerVerre()) return val vedtaksperiode = søknad.lagVedtaksperiode(aktivitetslogg, person, this, subsumsjonslogg) @@ -499,7 +698,11 @@ internal class Arbeidsgiver private constructor( håndter(replays) { håndter(replays, aktivitetslogg) } } - internal fun håndter(inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg, vedtaksperiodeIdForReplay: UUID? = null) { + internal fun håndter( + inntektsmelding: Inntektsmelding, + aktivitetslogg: IAktivitetslogg, + vedtaksperiodeIdForReplay: UUID? = null + ) { aktivitetslogg.kontekst(this) if (vedtaksperiodeIdForReplay != null) aktivitetslogg.info("Replayer inntektsmelding.") @@ -508,28 +711,53 @@ internal class Arbeidsgiver private constructor( håndter(inntektsmelding) { håndter(dager, aktivitetslogg) } if (!inntektsmelding.valider(vedtaksperioder, aktivitetslogg, person)) return - if (vedtaksperiodeIdForReplay == null) håndter(inntektsmelding, aktivitetslogg, inntektsmelding.refusjonsservitør) + if (vedtaksperiodeIdForReplay == null) håndter( + inntektsmelding, + aktivitetslogg, + inntektsmelding.refusjonsservitør + ) val dagoverstyring = dager.revurderingseventyr() val refusjonsoverstyring = vedtaksperioder.refusjonseventyr(inntektsmelding) - addInntektsmelding(inntektsmelding, aktivitetslogg, Revurderingseventyr.tidligsteEventyr(dagoverstyring, refusjonsoverstyring)) + addInntektsmelding( + inntektsmelding, + aktivitetslogg, + Revurderingseventyr.tidligsteEventyr(dagoverstyring, refusjonsoverstyring) + ) - inntektsmelding.ikkeHåndert(aktivitetslogg, person, vedtaksperioder, forkastede, sykmeldingsperioder, dager) + inntektsmelding.ikkeHåndert( + aktivitetslogg, + person, + vedtaksperioder, + forkastede, + sykmeldingsperioder, + dager + ) } internal fun refusjonstidslinje(vedtaksperiode: Vedtaksperiode): Beløpstidslinje { - val startdatoPåSammenhengendeVedtaksperioder = startdatoPåSammenhengendeVedtaksperioder(vedtaksperiode) - return ubrukteRefusjonsopplysninger.servér(startdatoPåSammenhengendeVedtaksperioder, vedtaksperiode.periode()) + val startdatoPåSammenhengendeVedtaksperioder = + startdatoPåSammenhengendeVedtaksperioder(vedtaksperiode) + return ubrukteRefusjonsopplysninger.servér( + startdatoPåSammenhengendeVedtaksperioder, + vedtaksperiode.periode() + ) } internal fun refusjonstidslinjeForTmpMigrering(vedtaksperiode: Vedtaksperiode): Beløpstidslinje { - val startdatoPåSammenhengendeVedtaksperioder = startdatoPåSammenhengendeVedtaksperioder(vedtaksperiode) - val søkevindu = startdatoPåSammenhengendeVedtaksperioder til vedtaksperiode.periode().endInclusive - val fraRefusjonshistorikk = refusjonshistorikk.beløpstidslinje(søkevindu).subset(vedtaksperiode.periode()) + val startdatoPåSammenhengendeVedtaksperioder = + startdatoPåSammenhengendeVedtaksperioder(vedtaksperiode) + val søkevindu = + startdatoPåSammenhengendeVedtaksperioder til vedtaksperiode.periode().endInclusive + val fraRefusjonshistorikk = + refusjonshistorikk.beløpstidslinje(søkevindu).subset(vedtaksperiode.periode()) return fraRefusjonshistorikk } - internal fun inntektsmeldingFerdigbehandlet(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) { + internal fun inntektsmeldingFerdigbehandlet( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.kontekst(this) aktivitetslogg.info("Inntektsmelding ferdigbehandlet") håndter(hendelse) { inntektsmeldingFerdigbehandlet(hendelse, aktivitetslogg) } @@ -541,7 +769,13 @@ internal class Arbeidsgiver private constructor( infotrygdhistorikk: Infotrygdhistorikk ) { aktivitetslogg.kontekst(this) - håndter(hendelse) { håndterHistorikkFraInfotrygd(hendelse, aktivitetslogg, infotrygdhistorikk) } + håndter(hendelse) { + håndterHistorikkFraInfotrygd( + hendelse, + aktivitetslogg, + infotrygdhistorikk + ) + } } internal fun håndter( @@ -553,7 +787,10 @@ internal class Arbeidsgiver private constructor( håndter(ytelser) { håndter(ytelser, aktivitetslogg, infotrygdhistorikk) } } - internal fun håndter(utbetalingsavgjørelse: Behandlingsavgjørelse, aktivitetslogg: IAktivitetslogg) { + internal fun håndter( + utbetalingsavgjørelse: Behandlingsavgjørelse, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.kontekst(this) utbetalinger.forEach { it.håndter(utbetalingsavgjørelse, aktivitetslogg) } håndter(utbetalingsavgjørelse) { @@ -565,7 +802,10 @@ internal class Arbeidsgiver private constructor( sykepengegrunnlagForArbeidsgiver.lagreInntekt(inntektshistorikk, refusjonshistorikk) } - internal fun håndter(sykepengegrunnlagForArbeidsgiver: SykepengegrunnlagForArbeidsgiver, aktivitetslogg: IAktivitetslogg) { + internal fun håndter( + sykepengegrunnlagForArbeidsgiver: SykepengegrunnlagForArbeidsgiver, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.kontekst(this) håndter(sykepengegrunnlagForArbeidsgiver) { håndter(sykepengegrunnlagForArbeidsgiver, aktivitetslogg) @@ -589,12 +829,25 @@ internal class Arbeidsgiver private constructor( internal fun håndter(utbetalingHendelse: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg) { aktivitetslogg.kontekst(this) - if (feriepengeutbetalinger.gjelderFeriepengeutbetaling(utbetalingHendelse)) return håndterFeriepengeUtbetaling(utbetalingHendelse, aktivitetslogg) + if (feriepengeutbetalinger.gjelderFeriepengeutbetaling(utbetalingHendelse)) return håndterFeriepengeUtbetaling( + utbetalingHendelse, + aktivitetslogg + ) håndterUtbetaling(utbetalingHendelse, aktivitetslogg) } - private fun håndterFeriepengeUtbetaling(utbetalingHendelse: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg) { - feriepengeutbetalinger.forEach { it.håndter(utbetalingHendelse, aktivitetslogg, organisasjonsnummer, person) } + private fun håndterFeriepengeUtbetaling( + utbetalingHendelse: UtbetalingHendelse, + aktivitetslogg: IAktivitetslogg + ) { + feriepengeutbetalinger.forEach { + it.håndter( + utbetalingHendelse, + aktivitetslogg, + organisasjonsnummer, + person + ) + } } private fun håndterUtbetaling(utbetaling: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg) { @@ -605,8 +858,14 @@ internal class Arbeidsgiver private constructor( person.gjenopptaBehandling(aktivitetslogg) } - internal fun nyAnnullering(hendelse: AnnullerUtbetaling, aktivitetslogg: IAktivitetslogg, utbetalingSomSkalAnnulleres: Utbetaling): Utbetaling? { - val annullering = utbetalingSomSkalAnnulleres.annuller(hendelse, aktivitetslogg, utbetalinger.toList()) ?: return null + internal fun nyAnnullering( + hendelse: AnnullerUtbetaling, + aktivitetslogg: IAktivitetslogg, + utbetalingSomSkalAnnulleres: Utbetaling + ): Utbetaling? { + val annullering = + utbetalingSomSkalAnnulleres.annuller(hendelse, aktivitetslogg, utbetalinger.toList()) + ?: return null nyUtbetaling(aktivitetslogg, annullering) annullering.håndter(hendelse, aktivitetslogg) looper { vedtaksperiode -> vedtaksperiode.nyAnnullering(aktivitetslogg, annullering) } @@ -646,7 +905,8 @@ internal class Arbeidsgiver private constructor( utbetalingstidslinje: Utbetalingstidslinje, ident: String, ) { - val builder = UtbetalingsdagerBuilder(sykdomshistorikk.sykdomstidslinje(), utbetalingstidslinje) + val builder = + UtbetalingsdagerBuilder(sykdomshistorikk.sykdomstidslinje(), utbetalingstidslinje) person.utbetalingUtbetalt( PersonObserver.UtbetalingUtbetaltEvent( organisasjonsnummer = organisasjonsnummer, @@ -662,8 +922,12 @@ internal class Arbeidsgiver private constructor( epost = epost, tidspunkt = tidspunkt, automatiskBehandling = automatiskBehandling, - arbeidsgiverOppdrag = PersonObserver.UtbetalingUtbetaltEvent.OppdragEventDetaljer.mapOppdrag(arbeidsgiverOppdrag), - personOppdrag = PersonObserver.UtbetalingUtbetaltEvent.OppdragEventDetaljer.mapOppdrag(personOppdrag), + arbeidsgiverOppdrag = PersonObserver.UtbetalingUtbetaltEvent.OppdragEventDetaljer.mapOppdrag( + arbeidsgiverOppdrag + ), + personOppdrag = PersonObserver.UtbetalingUtbetaltEvent.OppdragEventDetaljer.mapOppdrag( + personOppdrag + ), utbetalingsdager = builder.result(), ident = ident ) @@ -687,7 +951,8 @@ internal class Arbeidsgiver private constructor( utbetalingstidslinje: Utbetalingstidslinje, epost: String, ) { - val builder = UtbetalingsdagerBuilder(sykdomshistorikk.sykdomstidslinje(), utbetalingstidslinje) + val builder = + UtbetalingsdagerBuilder(sykdomshistorikk.sykdomstidslinje(), utbetalingstidslinje) person.utbetalingUtenUtbetaling( PersonObserver.UtbetalingUtbetaltEvent( organisasjonsnummer = organisasjonsnummer, @@ -702,8 +967,12 @@ internal class Arbeidsgiver private constructor( epost = epost, tidspunkt = tidspunkt, automatiskBehandling = automatiskBehandling, - arbeidsgiverOppdrag = PersonObserver.UtbetalingUtbetaltEvent.OppdragEventDetaljer.mapOppdrag(arbeidsgiverOppdrag), - personOppdrag = PersonObserver.UtbetalingUtbetaltEvent.OppdragEventDetaljer.mapOppdrag(personOppdrag), + arbeidsgiverOppdrag = PersonObserver.UtbetalingUtbetaltEvent.OppdragEventDetaljer.mapOppdrag( + arbeidsgiverOppdrag + ), + personOppdrag = PersonObserver.UtbetalingUtbetaltEvent.OppdragEventDetaljer.mapOppdrag( + personOppdrag + ), utbetalingsdager = builder.result(), ident = ident, korrelasjonsId = korrelasjonsId @@ -771,14 +1040,21 @@ internal class Arbeidsgiver private constructor( } } - private fun håndter(overstyrInntektsgrunnlag: OverstyrInntektsgrunnlag, aktivitetslogg: IAktivitetslogg): Boolean { + private fun håndter( + overstyrInntektsgrunnlag: OverstyrInntektsgrunnlag, + aktivitetslogg: IAktivitetslogg + ): Boolean { aktivitetslogg.kontekst(this) return énHarHåndtert(overstyrInntektsgrunnlag) { håndter(it, aktivitetslogg) } } - internal fun håndter(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg, servitør: Refusjonsservitør) { + internal fun håndter( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg, + servitør: Refusjonsservitør + ) { håndter(hendelse) { håndter(hendelse, aktivitetslogg, servitør) } @@ -786,7 +1062,10 @@ internal class Arbeidsgiver private constructor( servitør.servér(ubrukteRefusjonsopplysninger, aktivitetslogg) } - internal fun oppdaterSykdom(hendelse: SykdomshistorikkHendelse, aktivitetslogg: IAktivitetslogg): Sykdomstidslinje { + internal fun oppdaterSykdom( + hendelse: SykdomshistorikkHendelse, + aktivitetslogg: IAktivitetslogg + ): Sykdomstidslinje { return sykdomshistorikk.håndter(hendelse, aktivitetslogg) } @@ -796,7 +1075,7 @@ internal class Arbeidsgiver private constructor( } private fun sykdomstidslinjeInkludertForkastet(sykdomstidslinje: Sykdomstidslinje): Sykdomstidslinje { - return forkastede + return forkastede .slåSammenSykdomstidslinjer(sykdomstidslinje) .merge(sykdomstidslinje(), replace) } @@ -808,7 +1087,10 @@ internal class Arbeidsgiver private constructor( val samletTidslinje = person.infotrygdhistorikk .sykdomstidslinje(organisasjonsnummer) .merge(sykdomstidslinje, replace) - return arbeidsgiverperiodeberegner.resultat(samletTidslinje, person.infotrygdhistorikk.betaltePerioder(organisasjonsnummer)) + return arbeidsgiverperiodeberegner.resultat( + samletTidslinje, + person.infotrygdhistorikk.betaltePerioder(organisasjonsnummer) + ) } internal fun beregnArbeidsgiverperiode(jurist: Subsumsjonslogg) = { vedtaksperiode: Periode -> @@ -820,26 +1102,46 @@ internal class Arbeidsgiver private constructor( ?: emptyList() } - private fun arbeidsgiverperiode(periode: Periode, sykdomstidslinje: Sykdomstidslinje): Arbeidsgiverperiode? { + private fun arbeidsgiverperiode( + periode: Periode, + sykdomstidslinje: Sykdomstidslinje + ): Arbeidsgiverperiode? { val arbeidsgiverperioder = arbeidsgiverperiodeFor(sykdomstidslinje) return arbeidsgiverperioder.finn(periode)?.somArbeidsgiverperiode() } + internal fun arbeidsgiverperiode(periode: Periode) = arbeidsgiverperiode(periode, sykdomstidslinje()) - internal fun arbeidsgiverperiodeInkludertForkastet(periode: Periode, sykdomstidslinje: Sykdomstidslinje) = + + internal fun arbeidsgiverperiodeInkludertForkastet( + periode: Periode, + sykdomstidslinje: Sykdomstidslinje + ) = arbeidsgiverperiode(periode, sykdomstidslinjeInkludertForkastet(sykdomstidslinje)) internal fun arbeidsgiverperiodeHensyntattEgenmeldinger(periode: Periode): Arbeidsgiverperiode? { val egenmeldingsperioder = vedtaksperioder.egenmeldingsperioder() if (egenmeldingsperioder.isEmpty()) return arbeidsgiverperiode(periode) - val tøyseteKilde = SykdomshistorikkHendelse.Hendelseskilde(Søknad::class, UUID.randomUUID(), LocalDateTime.now()) + val tøyseteKilde = SykdomshistorikkHendelse.Hendelseskilde( + Søknad::class, + UUID.randomUUID(), + LocalDateTime.now() + ) val egenmeldingstidslinje = egenmeldingsperioder - .map { Sykdomstidslinje.arbeidsgiverdager(it.start, it.endInclusive, 100.prosent, tøyseteKilde) } + .map { + Sykdomstidslinje.arbeidsgiverdager( + it.start, + it.endInclusive, + 100.prosent, + tøyseteKilde + ) + } .merge() .fremTilOgMed(periode.endInclusive) - val sykdomstidslinjeMedEgenmeldinger = egenmeldingstidslinje.merge(sykdomstidslinje(), replace) + val sykdomstidslinjeMedEgenmeldinger = + egenmeldingstidslinje.merge(sykdomstidslinje(), replace) return arbeidsgiverperiode(periode, sykdomstidslinjeMedEgenmeldinger) } @@ -849,7 +1151,8 @@ internal class Arbeidsgiver private constructor( * tilstøter både foran og bak. */ internal fun finnSammenhengendeVedtaksperioder(vedtaksperiode: Vedtaksperiode): List { - val (perioderFør, perioderEtter) = vedtaksperioder.sorted().partition { it før vedtaksperiode } + val (perioderFør, perioderEtter) = vedtaksperioder.sorted() + .partition { it før vedtaksperiode } val sammenhengendePerioder = mutableListOf(vedtaksperiode) perioderFør.reversed().forEach { if (it.erVedtaksperiodeRettFør(sammenhengendePerioder.first())) @@ -862,13 +1165,20 @@ internal class Arbeidsgiver private constructor( return sammenhengendePerioder } - internal fun startdatoPåSammenhengendeVedtaksperioder(vedtaksperiode: Vedtaksperiode) = finnSammenhengendeVedtaksperioder(vedtaksperiode).periode().start + internal fun startdatoPåSammenhengendeVedtaksperioder(vedtaksperiode: Vedtaksperiode) = + finnSammenhengendeVedtaksperioder(vedtaksperiode).periode().start - private fun addInntektsmelding(inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg, overstyring: Revurderingseventyr?) { + private fun addInntektsmelding( + inntektsmelding: Inntektsmelding, + aktivitetslogg: IAktivitetslogg, + overstyring: Revurderingseventyr? + ) { inntektsmelding.leggTilRefusjon(refusjonshistorikk) - val subsumsjonsloggMedInntektsmeldingkontekst = subsumsjonsloggMedInntektsmeldingkontekst(inntektsmelding) - val inntektsdato = inntektsmelding.addInntekt(inntektshistorikk, subsumsjonsloggMedInntektsmeldingkontekst) + val subsumsjonsloggMedInntektsmeldingkontekst = + subsumsjonsloggMedInntektsmeldingkontekst(inntektsmelding) + val inntektsdato = + inntektsmelding.addInntekt(inntektshistorikk, subsumsjonsloggMedInntektsmeldingkontekst) val sykdomstidslinjeperiode = sykdomstidslinje().periode() val skjæringstidspunkt = inntektsmelding.skjæringstidspunkt(person) @@ -904,19 +1214,27 @@ internal class Arbeidsgiver private constructor( aktivitetslogg, subsumsjonsloggMedInntektsmeldingkontekst ) - val overstyringFraInntektsmelding = Revurderingseventyr.tidligsteEventyr(inntektoverstyring, overstyring) - if (overstyringFraInntektsmelding != null) person.igangsettOverstyring(overstyringFraInntektsmelding, aktivitetslogg) + val overstyringFraInntektsmelding = + Revurderingseventyr.tidligsteEventyr(inntektoverstyring, overstyring) + if (overstyringFraInntektsmelding != null) person.igangsettOverstyring( + overstyringFraInntektsmelding, + aktivitetslogg + ) håndter(inntektsmelding) { - håndtertInntektPåSkjæringstidspunktet(skjæringstidspunkt, inntektsmelding, aktivitetslogg) + håndtertInntektPåSkjæringstidspunktet( + skjæringstidspunkt, + inntektsmelding, + aktivitetslogg + ) } } private fun subsumsjonsloggMedInntektsmeldingkontekst(inntektsmelding: Inntektsmelding) = BehandlingSubsumsjonslogg( subsumsjonslogg, listOf( - Subsumsjonskontekst(KontekstType.Fødselsnummer, person.personidentifikator.toString()), - Subsumsjonskontekst(KontekstType.Organisasjonsnummer, organisasjonsnummer) - ) + inntektsmelding.subsumsjonskontekst() + Subsumsjonskontekst(KontekstType.Fødselsnummer, person.personidentifikator.toString()), + Subsumsjonskontekst(KontekstType.Organisasjonsnummer, organisasjonsnummer) + ) + inntektsmelding.subsumsjonskontekst() ) internal fun lagreTidsnærInntektsmelding( @@ -929,17 +1247,33 @@ internal class Arbeidsgiver private constructor( ) { if (this.organisasjonsnummer != orgnummer) return setOfNotNull(finnFørsteFraværsdag(skjæringstidspunkt), skjæringstidspunkt).forEach { dato -> - inntektsmelding.kopierTidsnærOpplysning(dato, aktivitetslogg, nyArbeidsgiverperiode, inntektshistorikk) + inntektsmelding.kopierTidsnærOpplysning( + dato, + aktivitetslogg, + nyArbeidsgiverperiode, + inntektshistorikk + ) // TODO: lagre refusjonsopplysninger inni inntektsmelding-opplysningen? refusjonsopplysninger.lagreTidsnær(dato, refusjonshistorikk) } } - private fun søppelbøtte(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg, filter: VedtaksperiodeFilter): List { + private fun søppelbøtte( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg, + filter: VedtaksperiodeFilter + ): List { aktivitetslogg.kontekst(this) - val perioder: List> = vedtaksperioder - .filter(filter) - .mapNotNull { vedtaksperiode -> vedtaksperiode.forkast(hendelse, aktivitetslogg, utbetalinger)?.let { vedtaksperiode to it } } + val perioder: List> = + vedtaksperioder + .filter(filter) + .mapNotNull { vedtaksperiode -> + vedtaksperiode.forkast( + hendelse, + aktivitetslogg, + utbetalinger + )?.let { vedtaksperiode to it } + } vedtaksperioder.removeAll(perioder.map { it.first }) forkastede.addAll(perioder.map { ForkastetVedtaksperiode(it.first) }) @@ -952,9 +1286,14 @@ internal class Arbeidsgiver private constructor( vedtaksperioder.sort() } - private fun registrerForkastetVedtaksperiode(vedtaksperiode: Vedtaksperiode, hendelse: SykdomstidslinjeHendelse, aktivitetslogg: IAktivitetslogg) { + private fun registrerForkastetVedtaksperiode( + vedtaksperiode: Vedtaksperiode, + hendelse: SykdomstidslinjeHendelse, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.info("Oppretter forkastet vedtaksperiode ettersom Søknad inneholder errors") - val vedtaksperiodeForkastetEventBuilder = vedtaksperiode.forkast(hendelse, aktivitetslogg, utbetalinger) + val vedtaksperiodeForkastetEventBuilder = + vedtaksperiode.forkast(hendelse, aktivitetslogg, utbetalinger) vedtaksperiodeForkastetEventBuilder!!.buildAndEmit() forkastede.add(ForkastetVedtaksperiode(vedtaksperiode)) } @@ -984,45 +1323,69 @@ internal class Arbeidsgiver private constructor( } override fun toSpesifikkKontekst(): SpesifikkKontekst { - return SpesifikkKontekst("Arbeidsgiver", mapOf("organisasjonsnummer" to organisasjonsnummer)) + return SpesifikkKontekst( + "Arbeidsgiver", + mapOf("organisasjonsnummer" to organisasjonsnummer) + ) } internal fun lås(periode: Periode) { sykdomshistorikk.sykdomstidslinje().lås(periode) } + internal fun låsOpp(periode: Periode) { sykdomshistorikk.sykdomstidslinje().låsOpp(periode) } + internal fun bekreftErLåst(periode: Periode) { sykdomshistorikk.sykdomstidslinje().bekreftErLåst(periode) } + internal fun bekreftErÅpen(periode: Periode) { sykdomshistorikk.sykdomstidslinje().bekreftErÅpen(periode) } - internal fun finnFørsteFraværsdag(skjæringstidspunkt: LocalDate, vedtaksperiodeFilter: VedtaksperiodeFilter = { true }): LocalDate? { - val førstePeriodeMedUtbetaling = vedtaksperioder.filter(vedtaksperiodeFilter).firstOrNull(SKAL_INNGÅ_I_SYKEPENGEGRUNNLAG(skjæringstidspunkt)) - ?: vedtaksperioder.filter(vedtaksperiodeFilter).firstOrNull(MED_SKJÆRINGSTIDSPUNKT(skjæringstidspunkt)) + internal fun finnFørsteFraværsdag( + skjæringstidspunkt: LocalDate, + vedtaksperiodeFilter: VedtaksperiodeFilter = { true } + ): LocalDate? { + val førstePeriodeMedUtbetaling = vedtaksperioder.filter(vedtaksperiodeFilter) + .firstOrNull(SKAL_INNGÅ_I_SYKEPENGEGRUNNLAG(skjæringstidspunkt)) + ?: vedtaksperioder.filter(vedtaksperiodeFilter) + .firstOrNull(MED_SKJÆRINGSTIDSPUNKT(skjæringstidspunkt)) ?: return null return sykdomstidslinje().sisteSkjæringstidspunkt(førstePeriodeMedUtbetaling.periode()) } - private fun finnAlternativInntektsdato(inntektsdato: LocalDate, skjæringstidspunkt: LocalDate): LocalDate? { + private fun finnAlternativInntektsdato( + inntektsdato: LocalDate, + skjæringstidspunkt: LocalDate + ): LocalDate? { if (inntektsdato <= skjæringstidspunkt) return null - return sykdomstidslinje().sisteSkjæringstidspunkt(inntektsdato.somPeriode())?.takeUnless { it == inntektsdato } + return sykdomstidslinje().sisteSkjæringstidspunkt(inntektsdato.somPeriode()) + ?.takeUnless { it == inntektsdato } } - private fun håndter(hendelse: Hendelsetype, håndterer: Vedtaksperiode.(Hendelsetype) -> Unit) { + private fun håndter( + hendelse: Hendelsetype, + håndterer: Vedtaksperiode.(Hendelsetype) -> Unit + ) { looper { håndterer(it, hendelse) } } - private fun énHarHåndtert(hendelse: Hendelsetype, håndterer: Vedtaksperiode.(Hendelsetype) -> Boolean): Boolean { + private fun énHarHåndtert( + hendelse: Hendelsetype, + håndterer: Vedtaksperiode.(Hendelsetype) -> Boolean + ): Boolean { var håndtert = false looper { håndtert = håndtert || håndterer(it, hendelse) } return håndtert } - private fun noenHarHåndtert(hendelse: Hendelsetype, håndterer: Vedtaksperiode.(Hendelsetype) -> Boolean): Boolean { + private fun noenHarHåndtert( + hendelse: Hendelsetype, + håndterer: Vedtaksperiode.(Hendelsetype) -> Boolean + ): Boolean { var håndtert = false looper { håndtert = håndterer(it, hendelse) || håndtert } return håndtert @@ -1046,16 +1409,27 @@ internal class Arbeidsgiver private constructor( return vedtaksperioder.filter { it.periode() in arbeidsgiverperiode } } - internal fun sendOppdatertForespørselOmArbeidsgiveropplysningerForNestePeriode(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) { - vedtaksperioder.sendOppdatertForespørselOmArbeidsgiveropplysningerForNestePeriode(vedtaksperiode, aktivitetslogg) + internal fun sendOppdatertForespørselOmArbeidsgiveropplysningerForNestePeriode( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) { + vedtaksperioder.sendOppdatertForespørselOmArbeidsgiveropplysningerForNestePeriode( + vedtaksperiode, + aktivitetslogg + ) } fun vedtaksperioderKnyttetTilArbeidsgiverperiodeInkludertForkastede(arbeidsgiverperiode: Arbeidsgiverperiode?): List { if (arbeidsgiverperiode == null) return emptyList() - return ForkastetVedtaksperiode.hørerTilArbeidsgiverperiode(forkastede, vedtaksperioder, arbeidsgiverperiode) + return ForkastetVedtaksperiode.hørerTilArbeidsgiverperiode( + forkastede, + vedtaksperioder, + arbeidsgiverperiode + ) } - internal fun vedtaksperioderEtter(dato: LocalDate) = vedtaksperioder.filter { it.slutterEtter(dato) } + internal fun vedtaksperioderEtter(dato: LocalDate) = + vedtaksperioder.filter { it.slutterEtter(dato) } internal fun dto(nestemann: Vedtaksperiode?) = ArbeidsgiverUtDto( id = id, @@ -1070,4 +1444,4 @@ internal class Arbeidsgiver private constructor( refusjonshistorikk = refusjonshistorikk.dto(), ubrukteRefusjonsopplysninger = ubrukteRefusjonsopplysninger.dto() ) -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/BehandlingObserver.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/BehandlingObserver.kt index 5991ffb09f..bb9c44af91 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/BehandlingObserver.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/BehandlingObserver.kt @@ -16,11 +16,13 @@ internal interface BehandlingObserver { periode: Periode, dokumentsporing: Set ) + fun vedtakIverksatt( aktivitetslogg: IAktivitetslogg, vedtakFattetTidspunkt: LocalDateTime, behandling: Behandlinger.Behandling ) + fun vedtakAnnullert(aktivitetslogg: IAktivitetslogg, behandlingId: UUID) fun behandlingLukket(behandlingId: UUID) fun behandlingForkastet(behandlingId: UUID, hendelse: Hendelse) @@ -39,4 +41,4 @@ internal interface BehandlingObserver { fun utkastTilVedtak( utkastTilVedtak: PersonObserver.UtkastTilVedtakEvent ) -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Behandlinger.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Behandlinger.kt index c0be4d87dd..0375feb56e 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Behandlinger.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Behandlinger.kt @@ -110,21 +110,46 @@ import no.nav.helse.økonomi.Inntekt internal class Behandlinger private constructor(behandlinger: List) { internal constructor() : this(emptyList()) + companion object { - internal fun Map.berik(builder: UtkastTilVedtakBuilder) = mapValues { (_, behandlinger) -> behandlinger.behandlinger.last() }.berik(builder) - fun gjenopprett(dto: BehandlingerInnDto, grunnlagsdata: Map, utbetalinger: Map) = Behandlinger( - behandlinger = dto.behandlinger.map { Behandling.gjenopprett(it, grunnlagsdata, utbetalinger) } + internal fun Map.berik(builder: UtkastTilVedtakBuilder) = + mapValues { (_, behandlinger) -> behandlinger.behandlinger.last() }.berik(builder) + + fun gjenopprett( + dto: BehandlingerInnDto, + grunnlagsdata: Map, + utbetalinger: Map + ) = Behandlinger( + behandlinger = dto.behandlinger.map { + Behandling.gjenopprett( + it, + grunnlagsdata, + utbetalinger + ) + } ) } + private val utbetalingene get() = behandlinger.mapNotNull(Behandling::utbetaling) private val behandlinger = behandlinger.toMutableList() private val siste get() = behandlinger.lastOrNull()?.utbetaling() private val observatører = mutableListOf() - internal fun initiellBehandling(sykmeldingsperiode: Periode, sykdomstidslinje: Sykdomstidslinje, dokumentsporing: Dokumentsporing, søknad: Søknad) { + internal fun initiellBehandling( + sykmeldingsperiode: Periode, + sykdomstidslinje: Sykdomstidslinje, + dokumentsporing: Dokumentsporing, + søknad: Søknad + ) { check(behandlinger.isEmpty()) - val behandling = Behandling.nyBehandling(this.observatører, sykdomstidslinje, dokumentsporing, sykmeldingsperiode, søknad) + val behandling = Behandling.nyBehandling( + this.observatører, + sykdomstidslinje, + dokumentsporing, + sykmeldingsperiode, + søknad + ) leggTilNyBehandling(behandling) } @@ -138,8 +163,14 @@ internal class Behandlinger private constructor(behandlinger: List) hendelser = hendelseIder() ) - internal fun arbeidsgiverperiode() = ArbeidsgiverperiodeForVedtaksperiode(periode(), behandlinger.last().arbeidsgiverperiode) - internal fun lagUtbetalingstidslinje(faktaavklarteInntekter: ArbeidsgiverFaktaavklartInntekt, subsumsjonslogg: Subsumsjonslogg) = behandlinger.last().lagUtbetalingstidslinje(faktaavklarteInntekter, subsumsjonslogg) + internal fun arbeidsgiverperiode() = + ArbeidsgiverperiodeForVedtaksperiode(periode(), behandlinger.last().arbeidsgiverperiode) + + internal fun lagUtbetalingstidslinje( + faktaavklarteInntekter: ArbeidsgiverFaktaavklartInntekt, + subsumsjonslogg: Subsumsjonslogg + ) = behandlinger.last().lagUtbetalingstidslinje(faktaavklarteInntekter, subsumsjonslogg) + internal fun utbetalingstidslinje() = behandlinger.last().utbetalingstidslinje() internal fun skjæringstidspunkt() = behandlinger.last().skjæringstidspunkt @@ -153,18 +184,26 @@ internal class Behandlinger private constructor(behandlinger: List) internal fun harUtbetalinger() = siste?.harUtbetalinger() == true internal fun erUbetalt() = siste?.erUbetalt() == true - internal fun kanForkastes(aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = + internal fun kanForkastes( + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = behandlinger.last().kanForkastes(aktivitetslogg, arbeidsgiverUtbetalinger) - internal fun håndterUtbetalinghendelse(hendelse: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg) = behandlinger.any { it.håndterUtbetalinghendelse(hendelse, aktivitetslogg) } + internal fun håndterUtbetalinghendelse( + hendelse: UtbetalingHendelse, + aktivitetslogg: IAktivitetslogg + ) = behandlinger.any { it.håndterUtbetalinghendelse(hendelse, aktivitetslogg) } internal fun behandlingVenter(builder: VedtaksperiodeVenter.Builder) { behandlinger.last().behandlingVenter(builder) } - internal fun validerFerdigBehandlet(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) = behandlinger.last().validerFerdigBehandlet(hendelse, aktivitetslogg) + internal fun validerFerdigBehandlet(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) = + behandlinger.last().validerFerdigBehandlet(hendelse, aktivitetslogg) - internal fun gjelderIkkeFor(hendelse: UtbetalingsavgjørelseHendelse) = siste?.gjelderFor(hendelse) != true + internal fun gjelderIkkeFor(hendelse: UtbetalingsavgjørelseHendelse) = + siste?.gjelderFor(hendelse) != true internal fun erHistorikkEndretSidenBeregning(infotrygdhistorikk: Infotrygdhistorikk) = infotrygdhistorikk.harEndretHistorikk(siste!!) @@ -182,21 +221,45 @@ internal class Behandlinger private constructor(behandlinger: List) internal fun simuler(aktivitetslogg: IAktivitetslogg) = siste!!.simuler(aktivitetslogg) - internal fun godkjenning(aktivitetslogg: IAktivitetslogg, builder: UtkastTilVedtakBuilder, organisasjonsnummer: String) { + internal fun godkjenning( + aktivitetslogg: IAktivitetslogg, + builder: UtkastTilVedtakBuilder, + organisasjonsnummer: String + ) { if (behandlinger.grunnbeløpsregulert()) builder.grunnbeløpsregulert() behandlinger.last().godkjenning(aktivitetslogg, builder, organisasjonsnummer) } - internal fun håndterAnnullering(arbeidsgiver: Arbeidsgiver, hendelse: AnnullerUtbetaling, aktivitetslogg: IAktivitetslogg, andreBehandlinger: List): Utbetaling? { - val annullering = behandlinger.last().annuller(arbeidsgiver, hendelse, aktivitetslogg, this.behandlinger.toList()) ?: return null + internal fun håndterAnnullering( + arbeidsgiver: Arbeidsgiver, + hendelse: AnnullerUtbetaling, + aktivitetslogg: IAktivitetslogg, + andreBehandlinger: List + ): Utbetaling? { + val annullering = behandlinger.last() + .annuller(arbeidsgiver, hendelse, aktivitetslogg, this.behandlinger.toList()) + ?: return null andreBehandlinger.forEach { it.kobleAnnulleringTilAndre(arbeidsgiver, hendelse, aktivitetslogg, annullering) } return annullering } - private fun kobleAnnulleringTilAndre(arbeidsgiver: Arbeidsgiver, hendelse: AnnullerUtbetaling, aktivitetslogg: IAktivitetslogg, annullering: Utbetaling) { - leggTilNyBehandling(behandlinger.last().annuller(arbeidsgiver, hendelse, aktivitetslogg, annullering, behandlinger.toList())) + private fun kobleAnnulleringTilAndre( + arbeidsgiver: Arbeidsgiver, + hendelse: AnnullerUtbetaling, + aktivitetslogg: IAktivitetslogg, + annullering: Utbetaling + ) { + leggTilNyBehandling( + behandlinger.last().annuller( + arbeidsgiver, + hendelse, + aktivitetslogg, + annullering, + behandlinger.toList() + ) + ) } internal fun nyUtbetaling( @@ -207,16 +270,31 @@ internal class Behandlinger private constructor(behandlinger: List) maksdatoresultat: Maksdatoresultat, utbetalingstidslinje: Utbetalingstidslinje ): Utbetalingstidslinje { - return behandlinger.last().utbetaling(vedtaksperiodeSomLagerUtbetaling, arbeidsgiver, grunnlagsdata, aktivitetslogg, maksdatoresultat, utbetalingstidslinje) + return behandlinger.last().utbetaling( + vedtaksperiodeSomLagerUtbetaling, + arbeidsgiver, + grunnlagsdata, + aktivitetslogg, + maksdatoresultat, + utbetalingstidslinje + ) } - internal fun forkast(arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) { - leggTilNyBehandling(behandlinger.last().forkastVedtaksperiode(arbeidsgiver, hendelse, aktivitetslogg)) + internal fun forkast( + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) { + leggTilNyBehandling( + behandlinger.last().forkastVedtaksperiode(arbeidsgiver, hendelse, aktivitetslogg) + ) behandlinger.last().forkastetBehandling(hendelse) } + internal fun forkastUtbetaling(aktivitetslogg: IAktivitetslogg) { behandlinger.last().forkastUtbetaling(aktivitetslogg) } + internal fun harIkkeUtbetaling() = behandlinger.last().harIkkeUtbetaling() internal fun migrerRefusjonsopplysninger( @@ -225,29 +303,51 @@ internal class Behandlinger private constructor(behandlinger: List) vedManglendeInntektsgrunnlagPåSisteEndring: () -> Beløpstidslinje, vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet: (LocalDate) -> VilkårsgrunnlagElement? ) = - behandlinger.forEach { it.migrerRefusjonsopplysninger(aktivitetslogg, orgnummer, vedManglendeInntektsgrunnlagPåSisteEndring, vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet) } + behandlinger.forEach { + it.migrerRefusjonsopplysninger( + aktivitetslogg, + orgnummer, + vedManglendeInntektsgrunnlagPåSisteEndring, + vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet + ) + } - fun vedtakFattet(arbeidsgiver: Arbeidsgiver, utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, aktivitetslogg: IAktivitetslogg) { + fun vedtakFattet( + arbeidsgiver: Arbeidsgiver, + utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, + aktivitetslogg: IAktivitetslogg + ) { this.behandlinger.last().vedtakFattet(arbeidsgiver, utbetalingsavgjørelse, aktivitetslogg) } + fun bekreftAvsluttetBehandlingMedVedtak(arbeidsgiver: Arbeidsgiver) { bekreftAvsluttetBehandling(arbeidsgiver) check(erFattetVedtak()) { "forventer at behandlingen skal ha fattet vedtak" } } + private fun erFattetVedtak(): Boolean { return behandlinger.last().erFattetVedtak() } + private fun bekreftAvsluttetBehandling(arbeidsgiver: Arbeidsgiver) { arbeidsgiver.bekreftErLåst(periode()) check(erAvsluttet()) { "forventer at utbetaling skal være avsluttet" } } - fun avsluttUtenVedtak(arbeidsgiver: Arbeidsgiver, aktivitetslogg: IAktivitetslogg, utbetalingstidslinje: Utbetalingstidslinje) { - check(behandlinger.last().utbetaling() == null) { "Forventet ikke at perioden har fått utbetaling: kun perioder innenfor arbeidsgiverperioden skal sendes hit. " } - this.behandlinger.last().avsluttUtenVedtak(arbeidsgiver, aktivitetslogg, utbetalingstidslinje) + + fun avsluttUtenVedtak( + arbeidsgiver: Arbeidsgiver, + aktivitetslogg: IAktivitetslogg, + utbetalingstidslinje: Utbetalingstidslinje + ) { + check( + behandlinger.last().utbetaling() == null + ) { "Forventet ikke at perioden har fått utbetaling: kun perioder innenfor arbeidsgiverperioden skal sendes hit. " } + this.behandlinger.last() + .avsluttUtenVedtak(arbeidsgiver, aktivitetslogg, utbetalingstidslinje) bekreftAvsluttetBehandling(arbeidsgiver) } @@ -256,8 +356,20 @@ internal class Behandlinger private constructor(behandlinger: List) // sørger for ny behandling når vedtaksperioden går ut av Avsluttet/AUU, // men bare hvis det ikke er laget en ny allerede fra før - fun sikreNyBehandling(arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List) { - leggTilNyBehandling(behandlinger.last().sikreNyBehandling(arbeidsgiver, hendelse, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode)) + fun sikreNyBehandling( + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ) { + leggTilNyBehandling( + behandlinger.last().sikreNyBehandling( + arbeidsgiver, + hendelse, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) + ) } private fun leggTilNyBehandling(behandling: Behandling?) { @@ -280,20 +392,32 @@ internal class Behandlinger private constructor(behandlinger: List) } } - internal fun subsumsjonslogg(subsumsjonslogg: Subsumsjonslogg, vedtaksperiodeId: UUID, fødselsnummer: String, organisasjonsnummer: String) = - BehandlingSubsumsjonslogg(subsumsjonslogg, listOf( + internal fun subsumsjonslogg( + subsumsjonslogg: Subsumsjonslogg, + vedtaksperiodeId: UUID, + fødselsnummer: String, + organisasjonsnummer: String + ) = + BehandlingSubsumsjonslogg( + subsumsjonslogg, listOf( Subsumsjonskontekst(KontekstType.Fødselsnummer, fødselsnummer), Subsumsjonskontekst(KontekstType.Organisasjonsnummer, organisasjonsnummer), Subsumsjonskontekst(KontekstType.Vedtaksperiode, vedtaksperiodeId.toString()), - ) + behandlinger.dokumentsporing.tilSubsumsjonsformat()) + ) + behandlinger.dokumentsporing.tilSubsumsjonsformat() + ) internal fun hendelseIder() = behandlinger.dokumentsporing internal fun dokumentsporing() = behandlinger.dokumentsporing.ider() internal fun søknadIder() = behandlinger.dokumentsporing.søknadIder() - internal fun sisteInntektsmeldingDagerId() = behandlinger.dokumentsporing.sisteInntektsmeldingDagerId() - internal fun harHåndtertDagerTidligere() = behandlinger.dokumentsporing.sisteInntektsmeldingDagerId() != null - internal fun harHåndtertInntektTidligere() = behandlinger.dokumentsporing.sisteInntektsmeldingInntektId() != null + internal fun sisteInntektsmeldingDagerId() = + behandlinger.dokumentsporing.sisteInntektsmeldingDagerId() + + internal fun harHåndtertDagerTidligere() = + behandlinger.dokumentsporing.sisteInntektsmeldingDagerId() != null + + internal fun harHåndtertInntektTidligere() = + behandlinger.dokumentsporing.sisteInntektsmeldingInntektId() != null internal fun oppdaterDokumentsporing(dokument: Dokumentsporing): Boolean { return behandlinger.last().oppdaterDokumentsporing(dokument) @@ -303,13 +427,20 @@ internal class Behandlinger private constructor(behandlinger: List) behandlinger.any { it.dokumentHåndtert(dokumentsporing) } internal fun håndterer(dokumentsporing: Dokumentsporing) = - behandlinger.lastOrNull()?.takeUnless { it.erAvsluttet() }?.dokumentHåndtert(dokumentsporing) == true + behandlinger.lastOrNull()?.takeUnless { it.erAvsluttet() } + ?.dokumentHåndtert(dokumentsporing) == true internal fun harGjenbrukbareOpplysninger(organisasjonsnummer: String) = behandlinger.harGjenbrukbareOpplysninger(organisasjonsnummer) - internal fun lagreGjenbrukbareOpplysninger(skjæringstidspunkt: LocalDate, organisasjonsnummer: String, arbeidsgiver: Arbeidsgiver, aktivitetslogg: IAktivitetslogg) = - behandlinger.lagreGjenbrukbareOpplysninger(skjæringstidspunkt, organisasjonsnummer, arbeidsgiver, + internal fun lagreGjenbrukbareOpplysninger( + skjæringstidspunkt: LocalDate, + organisasjonsnummer: String, + arbeidsgiver: Arbeidsgiver, + aktivitetslogg: IAktivitetslogg + ) = + behandlinger.lagreGjenbrukbareOpplysninger( + skjæringstidspunkt, organisasjonsnummer, arbeidsgiver, aktivitetslogg ) @@ -321,13 +452,34 @@ internal class Behandlinger private constructor(behandlinger: List) beregnArbeidsgiverperiode: (Periode) -> List, refusjonstidslinje: Beløpstidslinje ) { - behandlinger.last().håndterRefusjonsopplysninger(arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode, refusjonstidslinje)?.also { + behandlinger.last().håndterRefusjonsopplysninger( + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode, + refusjonstidslinje + )?.also { leggTilNyBehandling(it) } } - fun håndterEndring(person: Person, arbeidsgiver: Arbeidsgiver, hendelse: SykdomshistorikkHendelse, aktivitetslogg: IAktivitetslogg, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List, validering: () -> Unit) { - behandlinger.last().håndterEndring(arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode)?.also { + fun håndterEndring( + person: Person, + arbeidsgiver: Arbeidsgiver, + hendelse: SykdomshistorikkHendelse, + aktivitetslogg: IAktivitetslogg, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List, + validering: () -> Unit + ) { + behandlinger.last().håndterEndring( + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + )?.also { leggTilNyBehandling(it) } person.sykdomshistorikkEndret() @@ -335,21 +487,34 @@ internal class Behandlinger private constructor(behandlinger: List) hendelse.igangsettOverstyring(person, aktivitetslogg) } - private fun SykdomshistorikkHendelse.igangsettOverstyring(person: Person, aktivitetslogg: IAktivitetslogg) { + private fun SykdomshistorikkHendelse.igangsettOverstyring( + person: Person, + aktivitetslogg: IAktivitetslogg + ) { revurderingseventyr(skjæringstidspunkt(), periode()) ?.takeIf { behandlinger.endretSykdomshistorikkFra(this) } - ?.let { revurderingseventyr -> person.igangsettOverstyring(revurderingseventyr, aktivitetslogg) } + ?.let { revurderingseventyr -> + person.igangsettOverstyring( + revurderingseventyr, + aktivitetslogg + ) + } } internal fun sendSkatteinntekterLagtTilGrunn( sykepengegrunnlagForArbeidsgiver: SykepengegrunnlagForArbeidsgiver, person: Person ) { - behandlinger.last().sendSkatteinntekterLagtTilGrunn(sykepengegrunnlagForArbeidsgiver, person) + behandlinger.last() + .sendSkatteinntekterLagtTilGrunn(sykepengegrunnlagForArbeidsgiver, person) } - fun beregnSkjæringstidspunkt(beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List) { - behandlinger.last().beregnSkjæringstidspunkt(beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + fun beregnSkjæringstidspunkt( + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ) { + behandlinger.last() + .beregnSkjæringstidspunkt(beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) } fun erUtbetaltPåForskjelligeUtbetalinger(other: Behandlinger): Boolean { @@ -362,14 +527,22 @@ internal class Behandlinger private constructor(behandlinger: List) val registert: LocalDateTime, val avsender: Avsender ) { - constructor(metadata: HendelseMetadata): this(metadata.meldingsreferanseId, metadata.innsendt, metadata.registrert, metadata.avsender) - constructor(sykdomshistorikkHendelse: SykdomshistorikkHendelse) : this(when (sykdomshistorikkHendelse) { - is DagerFraInntektsmelding.BitAvInntektsmelding -> sykdomshistorikkHendelse.metadata - is Søknad -> sykdomshistorikkHendelse.metadata - is OverstyrTidslinje -> sykdomshistorikkHendelse.metadata - is Ytelser -> sykdomshistorikkHendelse.metadata - else -> error("ukjent sykdomshistorikkhendelse: ${sykdomshistorikkHendelse::class.simpleName}") - }) + constructor(metadata: HendelseMetadata) : this( + metadata.meldingsreferanseId, + metadata.innsendt, + metadata.registrert, + metadata.avsender + ) + + constructor(sykdomshistorikkHendelse: SykdomshistorikkHendelse) : this( + when (sykdomshistorikkHendelse) { + is DagerFraInntektsmelding.BitAvInntektsmelding -> sykdomshistorikkHendelse.metadata + is Søknad -> sykdomshistorikkHendelse.metadata + is OverstyrTidslinje -> sykdomshistorikkHendelse.metadata + is Ytelser -> sykdomshistorikkHendelse.metadata + else -> error("ukjent sykdomshistorikkhendelse: ${sykdomshistorikkHendelse::class.simpleName}") + } + ) fun view() = BehandlingkildeView(meldingsreferanseId, innsendt, registert, avsender) @@ -410,7 +583,21 @@ internal class Behandlinger private constructor(behandlinger: List) val arbeidsgiverperiode get() = gjeldende.arbeidsgiverperiode val skjæringstidspunkt get() = gjeldende.skjæringstidspunkt - constructor(observatører: List, tilstand: Tilstand, endringer: List, avsluttet: LocalDateTime?, kilde: Behandlingkilde) : this(UUID.randomUUID(), tilstand, endringer.toMutableList(), null, avsluttet, kilde, observatører) { + constructor( + observatører: List, + tilstand: Tilstand, + endringer: List, + avsluttet: LocalDateTime?, + kilde: Behandlingkilde + ) : this( + UUID.randomUUID(), + tilstand, + endringer.toMutableList(), + null, + avsluttet, + kilde, + observatører + ) { check(observatører.isNotEmpty()) { "må ha minst én observatør for å registrere en behandling" } @@ -458,8 +645,12 @@ internal class Behandlinger private constructor(behandlinger: List) fun behandlingVenter(builder: VedtaksperiodeVenter.Builder) { builder.behandlingVenter(id) } + fun utbetalingstidslinje() = gjeldende.utbetalingstidslinje - fun lagUtbetalingstidslinje(faktaavklarteInntekter: ArbeidsgiverFaktaavklartInntekt, subsumsjonslogg: Subsumsjonslogg): Utbetalingstidslinje { + fun lagUtbetalingstidslinje( + faktaavklarteInntekter: ArbeidsgiverFaktaavklartInntekt, + subsumsjonslogg: Subsumsjonslogg + ): Utbetalingstidslinje { val builder = UtbetalingstidslinjeBuilderVedtaksperiode( faktaavklarteInntekter = faktaavklarteInntekter, regler = ArbeidsgiverRegler.Companion.NormalArbeidstaker, @@ -473,7 +664,11 @@ internal class Behandlinger private constructor(behandlinger: List) sykepengegrunnlagForArbeidsgiver: SykepengegrunnlagForArbeidsgiver, person: Person ) { - person.sendSkatteinntekterLagtTilGrunn(sykepengegrunnlagForArbeidsgiver.skatteinntekterLagtTilGrunnEvent(this.id)) + person.sendSkatteinntekterLagtTilGrunn( + sykepengegrunnlagForArbeidsgiver.skatteinntekterLagtTilGrunnEvent( + this.id + ) + ) } internal fun håndterRefusjonsopplysninger( @@ -486,9 +681,18 @@ internal class Behandlinger private constructor(behandlinger: List) ): Behandling? { if (Toggle.LagreRefusjonsopplysningerPåBehandling.disabled) return null val nyeRefusjonsopplysningerForPerioden = nyRefusjonstidslinje.subset(periode) - val benyttetRefusjonsopplysninger = (gjeldende.refusjonstidslinje + nyeRefusjonsopplysningerForPerioden).fyll(periode) + val benyttetRefusjonsopplysninger = + (gjeldende.refusjonstidslinje + nyeRefusjonsopplysningerForPerioden).fyll(periode) if (benyttetRefusjonsopplysninger == gjeldende.refusjonstidslinje) return null // Ingen endring - return this.tilstand.håndterRefusjonsopplysninger(arbeidsgiver, this, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode, benyttetRefusjonsopplysninger) + return this.tilstand.håndterRefusjonsopplysninger( + arbeidsgiver, + this, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode, + benyttetRefusjonsopplysninger + ) } // TODO: se på om det er nødvendig å støtte Dokumentsporing som et sett; eventuelt om Behandling må ha et sett @@ -523,7 +727,11 @@ internal class Behandlinger private constructor(behandlinger: List) maksdatoresultat = maksdatoresultat ) - private fun skjæringstidspunkt(beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, sykdomstidslinje: Sykdomstidslinje = this.sykdomstidslinje, periode: Periode = this.periode): LocalDate { + private fun skjæringstidspunkt( + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + sykdomstidslinje: Sykdomstidslinje = this.sykdomstidslinje, + periode: Periode = this.periode + ): LocalDate { val sisteSykedag = sykdomstidslinje.lastOrNull { // uttømmende when-blokk (uten else) med hensikt, fordi om nye det lages nye // dagtyper så vil det bli compile error og vi blir tvunget til å måtte ta stilling til den @@ -534,6 +742,7 @@ internal class Behandlinger private constructor(behandlinger: List) is SykHelgedag, is Sykedag, is SykedagNav -> true + is Dag.AndreYtelser, is Dag.ArbeidIkkeGjenopptattDag, is Dag.Arbeidsdag, @@ -553,7 +762,12 @@ internal class Behandlinger private constructor(behandlinger: List) companion object { val IKKE_FASTSATT_SKJÆRINGSTIDSPUNKT = LocalDate.MIN val List.dokumentsporing get() = map { it.dokumentsporing }.toSet() - fun gjenopprett(dto: BehandlingendringInnDto, grunnlagsdata: Map, utbetalinger: Map, erAvsluttetUtenVedtak: Boolean): Endring { + fun gjenopprett( + dto: BehandlingendringInnDto, + grunnlagsdata: Map, + utbetalinger: Map, + erAvsluttetUtenVedtak: Boolean + ): Endring { val periode = Periode.gjenopprett(dto.periode) val utbetaling = dto.utbetalingId?.let { utbetalinger.getValue(it) } return Endring( @@ -565,30 +779,45 @@ internal class Behandlinger private constructor(behandlinger: List) utbetaling = utbetaling, dokumentsporing = Dokumentsporing.gjenopprett(dto.dokumentsporing), sykdomstidslinje = Sykdomstidslinje.gjenopprett(dto.sykdomstidslinje), - utbetalingstidslinje = migrerUtbetalingstidslinje(dto, utbetaling, erAvsluttetUtenVedtak), + utbetalingstidslinje = migrerUtbetalingstidslinje( + dto, + utbetaling, + erAvsluttetUtenVedtak + ), refusjonstidslinje = Beløpstidslinje.gjenopprett(dto.refusjonstidslinje), skjæringstidspunkt = dto.skjæringstidspunkt, arbeidsgiverperiode = dto.arbeidsgiverperiode.map { Periode.gjenopprett(it) }, - maksdatoresultat = dto.maksdatoresultat.let { Maksdatoresultat.gjenopprett(it) } + maksdatoresultat = dto.maksdatoresultat.let { + Maksdatoresultat.gjenopprett( + it + ) + } ) } internal fun SykdomshistorikkHendelse.dokumentsporingOrNull(): Dokumentsporing? { return when (this) { - is DagerFraInntektsmelding.BitAvInntektsmelding -> inntektsmeldingDager(metadata.meldingsreferanseId) + is DagerFraInntektsmelding.BitAvInntektsmelding -> inntektsmeldingDager( + metadata.meldingsreferanseId + ) + is Søknad -> søknad(metadata.meldingsreferanseId) is OverstyrTidslinje -> overstyrTidslinje(metadata.meldingsreferanseId) is Ytelser -> andreYtelser(metadata.meldingsreferanseId) else -> null } } + internal fun Hendelse.dokumentsporingOrNull(): Dokumentsporing? { return when (this) { is Inntektsmelding -> inntektsmeldingInntekt(metadata.meldingsreferanseId) is SykepengegrunnlagForArbeidsgiver -> inntektFraAOrdingen(metadata.meldingsreferanseId) is Søknad -> søknad(metadata.meldingsreferanseId) is OverstyrArbeidsforhold -> overstyrArbeidsforhold(metadata.meldingsreferanseId) - is OverstyrArbeidsgiveropplysninger -> overstyrArbeidsgiveropplysninger(metadata.meldingsreferanseId) + is OverstyrArbeidsgiveropplysninger -> overstyrArbeidsgiveropplysninger( + metadata.meldingsreferanseId + ) + is OverstyrTidslinje -> overstyrTidslinje(metadata.meldingsreferanseId) is Grunnbeløpsregulering -> grunnbeløpendring(metadata.meldingsreferanseId) is Ytelser -> andreYtelser(metadata.meldingsreferanseId) @@ -619,16 +848,29 @@ internal class Behandlinger private constructor(behandlinger: List) } } - internal fun SykdomshistorikkHendelse.dokumentsporing(): Dokumentsporing = checkNotNull(dokumentsporingOrNull()) { - "Mangler dokumentsporing for ${this::class.simpleName}" - } - internal fun Hendelse.dokumentsporing(): Dokumentsporing = checkNotNull(dokumentsporingOrNull()) { - "Mangler dokumentsporing for ${this::class.simpleName}" - } + internal fun SykdomshistorikkHendelse.dokumentsporing(): Dokumentsporing = + checkNotNull(dokumentsporingOrNull()) { + "Mangler dokumentsporing for ${this::class.simpleName}" + } + + internal fun Hendelse.dokumentsporing(): Dokumentsporing = + checkNotNull(dokumentsporingOrNull()) { + "Mangler dokumentsporing for ${this::class.simpleName}" + } - private fun migrerUtbetalingstidslinje(dto: BehandlingendringInnDto, utbetaling: Utbetaling?, erAvsluttetUtenVedtak: Boolean): Utbetalingstidslinje { - if (dto.utbetalingstidslinje != null) return Utbetalingstidslinje.gjenopprett(dto.utbetalingstidslinje!!) - if (utbetaling != null) return utbetaling.utbetalingstidslinje.subset(Periode.gjenopprett(dto.periode)) + private fun migrerUtbetalingstidslinje( + dto: BehandlingendringInnDto, + utbetaling: Utbetaling?, + erAvsluttetUtenVedtak: Boolean + ): Utbetalingstidslinje { + if (dto.utbetalingstidslinje != null) return Utbetalingstidslinje.gjenopprett( + dto.utbetalingstidslinje!! + ) + if (utbetaling != null) return utbetaling.utbetalingstidslinje.subset( + Periode.gjenopprett( + dto.periode + ) + ) if (erAvsluttetUtenVedtak) { try { val builder = UtbetalingstidslinjeBuilderVedtaksperiode( @@ -640,7 +882,11 @@ internal class Behandlinger private constructor(behandlinger: List) refusjonsopplysninger = Refusjonsopplysninger() ), regler = ArbeidsgiverRegler.Companion.NormalArbeidstaker, - arbeidsgiverperiode = dto.arbeidsgiverperiode.map { Periode.gjenopprett(it) }, + arbeidsgiverperiode = dto.arbeidsgiverperiode.map { + Periode.gjenopprett( + it + ) + }, refusjonstidslinje = Beløpstidslinje() ) return builder.result(Sykdomstidslinje.gjenopprett(dto.sykdomstidslinje)) @@ -659,7 +905,8 @@ internal class Behandlinger private constructor(behandlinger: List) return this.sykdomstidslinje.erRettFør(neste.sykdomstidslinje) } - override fun toString() = "$periode - $dokumentsporing - ${sykdomstidslinje.toShortString()}${utbetaling?.let { " - $it" } ?: ""}" + override fun toString() = + "$periode - $dokumentsporing - ${sykdomstidslinje.toShortString()}${utbetaling?.let { " - $it" } ?: ""}" /* kopierer dataklassen og lager ny, men sørger for at den nye endringen får ny id og tidsstempel (!!) */ private fun kopierMed( @@ -690,7 +937,10 @@ internal class Behandlinger private constructor(behandlinger: List) maksdatoresultat = maksdatoresultat, ) - internal fun kopierMedNyttSkjæringstidspunkt(beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List): Endring? { + internal fun kopierMedNyttSkjæringstidspunkt( + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ): Endring? { val nyttSkjæringstidspunkt = skjæringstidspunkt(beregnSkjæringstidspunkt) val arbeidsgiverperiode = beregnArbeidsgiverperiode(this.periode) if (nyttSkjæringstidspunkt == this.skjæringstidspunkt && arbeidsgiverperiode == this.arbeidsgiverperiode) return null @@ -714,7 +964,11 @@ internal class Behandlinger private constructor(behandlinger: List) utbetalingstidslinje = Utbetalingstidslinje(), refusjonstidslinje = this.refusjonstidslinje.fyll(periode), periode = periode, - skjæringstidspunkt = skjæringstidspunkt(beregnSkjæringstidspunkt, sykdomstidslinje, periode), + skjæringstidspunkt = skjæringstidspunkt( + beregnSkjæringstidspunkt, + sykdomstidslinje, + periode + ), arbeidsgiverperiode = beregnArbeidsgiverperiode(this.periode), maksdatoresultat = Maksdatoresultat.IkkeVurdert ) @@ -727,7 +981,11 @@ internal class Behandlinger private constructor(behandlinger: List) utbetaling = null, utbetalingstidslinje = Utbetalingstidslinje(), maksdatoresultat = Maksdatoresultat.IkkeVurdert, - skjæringstidspunkt = beregnSkjæringstidspunkt?.let { skjæringstidspunkt(beregnSkjæringstidspunkt) } ?: this.skjæringstidspunkt, + skjæringstidspunkt = beregnSkjæringstidspunkt?.let { + skjæringstidspunkt( + beregnSkjæringstidspunkt + ) + } ?: this.skjæringstidspunkt, arbeidsgiverperiode = beregnArbeidsgiverperiode(this.periode) ) @@ -739,19 +997,33 @@ internal class Behandlinger private constructor(behandlinger: List) ) = kopierMed( dokumentsporing = dokument, refusjonstidslinje = refusjonstidslinje, - skjæringstidspunkt = beregnSkjæringstidspunkt?.let { skjæringstidspunkt(beregnSkjæringstidspunkt) } ?: this.skjæringstidspunkt, + skjæringstidspunkt = beregnSkjæringstidspunkt?.let { + skjæringstidspunkt( + beregnSkjæringstidspunkt + ) + } ?: this.skjæringstidspunkt, arbeidsgiverperiode = beregnArbeidsgiverperiode(this.periode) ) - internal fun kopierMedUtbetaling(maksdatoresultat: Maksdatoresultat, utbetalingstidslinje: Utbetalingstidslinje, utbetaling: Utbetaling, grunnlagsdata: VilkårsgrunnlagElement) = kopierMed( + + internal fun kopierMedUtbetaling( + maksdatoresultat: Maksdatoresultat, + utbetalingstidslinje: Utbetalingstidslinje, + utbetaling: Utbetaling, + grunnlagsdata: VilkårsgrunnlagElement + ) = kopierMed( grunnlagsdata = grunnlagsdata, utbetaling = utbetaling, utbetalingstidslinje = utbetalingstidslinje.subset(this.periode), maksdatoresultat = maksdatoresultat ) - internal fun kopierDokument(dokument: Dokumentsporing) = kopierMed(dokumentsporing = dokument) - internal fun kopierMedUtbetalingstidslinje(utbetalingstidslinje: Utbetalingstidslinje) = kopierMed( - utbetalingstidslinje = utbetalingstidslinje.subset(this.periode) - ) + + internal fun kopierDokument(dokument: Dokumentsporing) = + kopierMed(dokumentsporing = dokument) + + internal fun kopierMedUtbetalingstidslinje(utbetalingstidslinje: Utbetalingstidslinje) = + kopierMed( + utbetalingstidslinje = utbetalingstidslinje.subset(this.periode) + ) fun forkastUtbetaling(aktivitetslogg: IAktivitetslogg) { utbetaling?.forkast(aktivitetslogg) @@ -765,16 +1037,21 @@ internal class Behandlinger private constructor(behandlinger: List) checkNotNull(utbetaling) { "Forventet ikke manglende utbetaling ved godkjenningsbehov" } checkNotNull(grunnlagsdata) { "Forventet ikke manglende vilkårsgrunnlag ved godkjenningsbehov" } aktivitetslogg.kontekst(utbetaling) - utkastTilVedtakBuilder.utbetalingstidslinje(utbetalingstidslinje).utbetaling(utbetaling).sykdomstidslinje(sykdomstidslinje) + utkastTilVedtakBuilder.utbetalingstidslinje(utbetalingstidslinje) + .utbetaling(utbetaling).sykdomstidslinje(sykdomstidslinje) grunnlagsdata.berik(utkastTilVedtakBuilder) behandling.observatører.forEach { it.utkastTilVedtak(utkastTilVedtakBuilder.buildUtkastTilVedtak()) } - Aktivitet.Behov.godkjenning(aktivitetslogg, utkastTilVedtakBuilder.buildGodkjenningsbehov()) + Aktivitet.Behov.godkjenning( + aktivitetslogg, + utkastTilVedtakBuilder.buildGodkjenningsbehov() + ) } internal fun berik(builder: UtkastTilVedtakBuilder) { checkNotNull(utbetaling) { "Forventet ikke manglende utbetaling ved utkast til vedtak" } checkNotNull(grunnlagsdata) { "Forventet ikke manglende vilkårsgrunnlag ved utkast til vedtak" } - builder.utbetalingstidslinje(utbetalingstidslinje).utbetaling(utbetaling).sykdomstidslinje(sykdomstidslinje) + builder.utbetalingstidslinje(utbetalingstidslinje).utbetaling(utbetaling) + .sykdomstidslinje(sykdomstidslinje) grunnlagsdata.berik(builder) } @@ -817,20 +1094,52 @@ internal class Behandlinger private constructor(behandlinger: List) internal fun erInFlight() = erFattetVedtak() && !erAvsluttet() internal fun erAvsluttet() = avsluttet != null - internal fun klarForUtbetaling() = this.tilstand in setOf(Tilstand.Uberegnet, Tilstand.UberegnetOmgjøring, Tilstand.UberegnetRevurdering) - internal fun harÅpenBehandling() = this.tilstand in setOf(Tilstand.UberegnetRevurdering, Tilstand.UberegnetOmgjøring, Tilstand.AnnullertPeriode, Tilstand.TilInfotrygd) - internal fun harIkkeUtbetaling() = this.tilstand in setOf(Tilstand.Uberegnet, Tilstand.UberegnetOmgjøring, Tilstand.TilInfotrygd) + internal fun klarForUtbetaling() = this.tilstand in setOf( + Tilstand.Uberegnet, + Tilstand.UberegnetOmgjøring, + Tilstand.UberegnetRevurdering + ) + + internal fun harÅpenBehandling() = this.tilstand in setOf( + Tilstand.UberegnetRevurdering, + Tilstand.UberegnetOmgjøring, + Tilstand.AnnullertPeriode, + Tilstand.TilInfotrygd + ) + + internal fun harIkkeUtbetaling() = this.tilstand in setOf( + Tilstand.Uberegnet, + Tilstand.UberegnetOmgjøring, + Tilstand.TilInfotrygd + ) - internal fun vedtakFattet(arbeidsgiver: Arbeidsgiver, utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, aktivitetslogg: IAktivitetslogg) { - if (utbetalingsavgjørelse.avvist) return tilstand.vedtakAvvist(this, arbeidsgiver, utbetalingsavgjørelse, aktivitetslogg) + internal fun vedtakFattet( + arbeidsgiver: Arbeidsgiver, + utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, + aktivitetslogg: IAktivitetslogg + ) { + if (utbetalingsavgjørelse.avvist) return tilstand.vedtakAvvist( + this, + arbeidsgiver, + utbetalingsavgjørelse, + aktivitetslogg + ) tilstand.vedtakFattet(this, arbeidsgiver, utbetalingsavgjørelse, aktivitetslogg) } - internal fun avsluttUtenVedtak(arbeidsgiver: Arbeidsgiver, aktivitetslogg: IAktivitetslogg, utbetalingstidslinje: Utbetalingstidslinje) { + internal fun avsluttUtenVedtak( + arbeidsgiver: Arbeidsgiver, + aktivitetslogg: IAktivitetslogg, + utbetalingstidslinje: Utbetalingstidslinje + ) { tilstand.avsluttUtenVedtak(this, arbeidsgiver, aktivitetslogg, utbetalingstidslinje) } - internal fun forkastVedtaksperiode(arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg): Behandling? { + internal fun forkastVedtaksperiode( + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ): Behandling? { return tilstand.forkastVedtaksperiode(this, arbeidsgiver, hendelse, aktivitetslogg) } @@ -842,15 +1151,20 @@ internal class Behandlinger private constructor(behandlinger: List) ) { val sisteEndringId = endringer.last().id endringer.forEach { endring -> - val vilkårsgrunnlag = endring.grunnlagsdata ?: vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet(skjæringstidspunkt) + val vilkårsgrunnlag = + endring.grunnlagsdata ?: vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet( + skjæringstidspunkt + ) val refusjonstidslinje = when { vilkårsgrunnlag == null && endring.id == sisteEndringId -> vedManglendeInntektsgrunnlagPåSisteEndring().also { if (this.tilstand !is Tilstand.AvsluttetUtenVedtak) { aktivitetslogg.info("Siste endring ${endring.id} har ikke vilkårsgrunnlag. Migrerer inn refusjonsopplysninger fra nabolaget og ubrukte refusjonsopplysninger") } } + vilkårsgrunnlag == null -> Beløpstidslinje() - else -> vilkårsgrunnlag.inntektsgrunnlag.refusjonsopplysninger(orgnummer).beløpstidslinje().fyll(periode) + else -> vilkårsgrunnlag.inntektsgrunnlag.refusjonsopplysninger(orgnummer) + .beløpstidslinje().fyll(periode) } endring.refusjonstidslinje = refusjonstidslinje } @@ -887,8 +1201,13 @@ internal class Behandlinger private constructor(behandlinger: List) ) } - private fun håndterAnnullering(arbeidsgiver: Arbeidsgiver, hendelse: AnnullerUtbetaling, aktivitetslogg: IAktivitetslogg): Utbetaling? { - val utbetaling = checkNotNull(gjeldende.utbetaling) { "forventer å ha en tidligere utbetaling" } + private fun håndterAnnullering( + arbeidsgiver: Arbeidsgiver, + hendelse: AnnullerUtbetaling, + aktivitetslogg: IAktivitetslogg + ): Utbetaling? { + val utbetaling = + checkNotNull(gjeldende.utbetaling) { "forventer å ha en tidligere utbetaling" } return arbeidsgiver.nyAnnullering(hendelse, aktivitetslogg, utbetaling) } @@ -912,6 +1231,7 @@ internal class Behandlinger private constructor(behandlinger: List) Tilstand.BeregnetOmgjøring ) } + private fun lagUtbetaling( vedtaksperiodeSomLagerUtbetaling: UUID, arbeidsgiver: Arbeidsgiver, @@ -933,6 +1253,7 @@ internal class Behandlinger private constructor(behandlinger: List) Tilstand.Beregnet ) } + private fun lagRevurdering( vedtaksperiodeSomLagerUtbetaling: UUID, arbeidsgiver: Arbeidsgiver, @@ -953,6 +1274,7 @@ internal class Behandlinger private constructor(behandlinger: List) Tilstand.BeregnetRevurdering ) } + private fun lagUtbetaling( vedtaksperiodeSomLagerUtbetaling: UUID, arbeidsgiver: Arbeidsgiver, @@ -963,9 +1285,24 @@ internal class Behandlinger private constructor(behandlinger: List) strategi: (Arbeidsgiver, aktivitetslogg: IAktivitetslogg, utbetalingstidslinje: Utbetalingstidslinje, maksdato: LocalDate, forbrukteSykedager: Int, gjenståendeSykedager: Int, periode: Periode) -> Utbetaling, nyTilstand: Tilstand ): Utbetalingstidslinje { - val denNyeUtbetalingen = strategi(arbeidsgiver, aktivitetslogg, utbetalingstidslinje, maksdatoresultat.maksdato, maksdatoresultat.antallForbrukteDager, maksdatoresultat.gjenståendeDager, periode) + val denNyeUtbetalingen = strategi( + arbeidsgiver, + aktivitetslogg, + utbetalingstidslinje, + maksdatoresultat.maksdato, + maksdatoresultat.antallForbrukteDager, + maksdatoresultat.gjenståendeDager, + periode + ) denNyeUtbetalingen.nyVedtaksperiodeUtbetaling(vedtaksperiodeSomLagerUtbetaling) - nyEndring(gjeldende.kopierMedUtbetaling(maksdatoresultat, utbetalingstidslinje, denNyeUtbetalingen, grunnlagsdata)) + nyEndring( + gjeldende.kopierMedUtbetaling( + maksdatoresultat, + utbetalingstidslinje, + denNyeUtbetalingen, + grunnlagsdata + ) + ) tilstand(nyTilstand, aktivitetslogg) return utbetalingstidslinje.subset(periode) } @@ -1000,12 +1337,32 @@ internal class Behandlinger private constructor(behandlinger: List) endringer.add(endring) } - fun beregnSkjæringstidspunkt(beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List) { - tilstand.beregnSkjæringstidspunkt(this, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + fun beregnSkjæringstidspunkt( + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ) { + tilstand.beregnSkjæringstidspunkt( + this, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) } - fun håndterEndring(arbeidsgiver: Arbeidsgiver, hendelse: SykdomshistorikkHendelse, aktivitetslogg: IAktivitetslogg, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List): Behandling? { - return tilstand.håndterEndring(this, arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + fun håndterEndring( + arbeidsgiver: Arbeidsgiver, + hendelse: SykdomshistorikkHendelse, + aktivitetslogg: IAktivitetslogg, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ): Behandling? { + return tilstand.håndterEndring( + this, + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) } private fun håndtereEndring( @@ -1016,13 +1373,24 @@ internal class Behandlinger private constructor(behandlinger: List) beregnArbeidsgiverperiode: (Periode) -> List ): Endring { val oppdatertPeriode = hendelse.oppdaterFom(endringer.last().periode) - val sykdomstidslinje = arbeidsgiver.oppdaterSykdom(hendelse, aktivitetslogg).subset(oppdatertPeriode) - return endringer.last().kopierMedEndring(oppdatertPeriode, hendelse.dokumentsporing(), sykdomstidslinje, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + val sykdomstidslinje = + arbeidsgiver.oppdaterSykdom(hendelse, aktivitetslogg).subset(oppdatertPeriode) + return endringer.last().kopierMedEndring( + oppdatertPeriode, + hendelse.dokumentsporing(), + sykdomstidslinje, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) } - private fun oppdaterMedRefusjonstidslinje(hendelse: Hendelse?, nyeRefusjonsopplysninger: Beløpstidslinje) { + private fun oppdaterMedRefusjonstidslinje( + hendelse: Hendelse?, + nyeRefusjonsopplysninger: Beløpstidslinje + ) { val dokumentsporing = dokumentsporingForRefusjonstidslinje(hendelse) - val endring = endringer.last().kopierMedRefusjonstidslinje(dokumentsporing, nyeRefusjonsopplysninger) + val endring = endringer.last() + .kopierMedRefusjonstidslinje(dokumentsporing, nyeRefusjonsopplysninger) nyEndring(endring) } @@ -1031,8 +1399,14 @@ internal class Behandlinger private constructor(behandlinger: List) else -> hendelse?.dokumentsporing() } ?: endringer.last().dokumentsporing - private fun oppdaterMedNyttSkjæringstidspunkt(beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List) { - val endring = endringer.last().kopierMedNyttSkjæringstidspunkt(beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) ?: return + private fun oppdaterMedNyttSkjæringstidspunkt( + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ) { + val endring = endringer.last().kopierMedNyttSkjæringstidspunkt( + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) ?: return nyEndring(endring) } @@ -1044,10 +1418,17 @@ internal class Behandlinger private constructor(behandlinger: List) beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, arbeidsgiverperioder: (Periode) -> List ) { - val endring = håndtereEndring(arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, arbeidsgiverperioder) + val endring = håndtereEndring( + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + arbeidsgiverperioder + ) if (endring == gjeldende) return nyEndring(endring) } + private fun nyBehandlingMedEndring( arbeidsgiver: Arbeidsgiver, hendelse: SykdomshistorikkHendelse, @@ -1060,7 +1441,15 @@ internal class Behandlinger private constructor(behandlinger: List) return Behandling( observatører = this.observatører, tilstand = starttilstand, - endringer = listOf(håndtereEndring(arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode)), + endringer = listOf( + håndtereEndring( + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) + ), avsluttet = null, kilde = Behandlingkilde(hendelse) ) @@ -1079,12 +1468,14 @@ internal class Behandlinger private constructor(behandlinger: List) return Behandling( observatører = this.observatører, tilstand = starttilstand, - endringer = listOf(endringer.last().kopierMedRefusjonstidslinje( - dokumentsporing, - nyRefusjonstidslinje, - beregnSkjæringstidspunkt, - beregnArbeidsgiverperiode - )), + endringer = listOf( + endringer.last().kopierMedRefusjonstidslinje( + dokumentsporing, + nyRefusjonstidslinje, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) + ), avsluttet = null, kilde = hendelse?.let { Behandlingkilde(it.metadata) } ?: kilde ) @@ -1101,18 +1492,33 @@ internal class Behandlinger private constructor(behandlinger: List) return Behandling( observatører = this.observatører, tilstand = starttilstand, - endringer = listOf(endringer.last().kopierUtenUtbetaling(beregnSkjæringstidspunkt, beregnArbeidsgiverperiode)), + endringer = listOf( + endringer.last() + .kopierUtenUtbetaling(beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + ), avsluttet = null, kilde = Behandlingkilde(hendelse.metadata) ) } - private fun nyAnnullertBehandling(arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, annullering: Utbetaling, grunnlagsdata: VilkårsgrunnlagElement): Behandling { + private fun nyAnnullertBehandling( + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + annullering: Utbetaling, + grunnlagsdata: VilkårsgrunnlagElement + ): Behandling { arbeidsgiver.låsOpp(periode) return Behandling( observatører = this.observatører, tilstand = Tilstand.AnnullertPeriode, - endringer = listOf(this.gjeldende.kopierMedUtbetaling(Maksdatoresultat.IkkeVurdert, Utbetalingstidslinje(), annullering, grunnlagsdata)), + endringer = listOf( + this.gjeldende.kopierMedUtbetaling( + Maksdatoresultat.IkkeVurdert, + Utbetalingstidslinje(), + annullering, + grunnlagsdata + ) + ), avsluttet = LocalDateTime.now(), kilde = Behandlingkilde(hendelse.metadata) ) @@ -1124,25 +1530,39 @@ internal class Behandlinger private constructor(behandlinger: List) beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List ): Behandling? { - return tilstand.sikreNyBehandling(this, arbeidsgiver, hendelse, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + return tilstand.sikreNyBehandling( + this, + arbeidsgiver, + hendelse, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) } fun tillaterNyBehandling(other: Behandling): Boolean { return tilstand.tillaterNyBehandling(this, other) } - fun håndterUtbetalinghendelse(hendelse: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg): Boolean { + fun håndterUtbetalinghendelse( + hendelse: UtbetalingHendelse, + aktivitetslogg: IAktivitetslogg + ): Boolean { return tilstand.håndterUtbetalinghendelse(this, hendelse, aktivitetslogg) } - fun kanForkastes(aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List): Boolean { + fun kanForkastes( + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ): Boolean { return tilstand.kanForkastes(this, aktivitetslogg, arbeidsgiverUtbetalinger) } - private fun behandlingLukket(arbeidsgiver: Arbeidsgiver, ) { + + private fun behandlingLukket(arbeidsgiver: Arbeidsgiver) { arbeidsgiver.lås(periode) check(observatører.isNotEmpty()) { "behandlingen har ingen registrert observatør" } observatører.forEach { it.behandlingLukket(id) } } + private fun vedtakIverksatt(aktivitetslogg: IAktivitetslogg) { check(observatører.isNotEmpty()) { "behandlingen har ingen registrert observatør" } observatører.forEach { it.vedtakIverksatt(aktivitetslogg, vedtakFattet!!, this) } @@ -1150,12 +1570,31 @@ internal class Behandlinger private constructor(behandlinger: List) private fun avsluttetUtenVedtak(aktivitetslogg: IAktivitetslogg) { check(observatører.isNotEmpty()) { "behandlingen har ingen registrert observatør" } - observatører.forEach { it.avsluttetUtenVedtak(aktivitetslogg, id, avsluttet!!, periode, dokumentsporing.ider()) } + observatører.forEach { + it.avsluttetUtenVedtak( + aktivitetslogg, + id, + avsluttet!!, + periode, + dokumentsporing.ider() + ) + } } private fun emitNyBehandlingOpprettet(type: PersonObserver.BehandlingOpprettetEvent.Type) { check(observatører.isNotEmpty()) { "behandlingen har ingen registrert observatør" } - observatører.forEach { it.nyBehandling(id, periode, kilde.meldingsreferanseId, kilde.innsendt, kilde.registert, kilde.avsender, type, endringer.dokumentsporing.søknadIder()) } + observatører.forEach { + it.nyBehandling( + id, + periode, + kilde.meldingsreferanseId, + kilde.innsendt, + kilde.registert, + kilde.avsender, + type, + endringer.dokumentsporing.søknadIder() + ) + } } internal fun forkastetBehandling(hendelse: Hendelse) { @@ -1170,40 +1609,84 @@ internal class Behandlinger private constructor(behandlinger: List) observatører.forEach { it.vedtakAnnullert(aktivitetslogg, id) } } - internal fun godkjenning(aktivitetslogg: IAktivitetslogg, builder: UtkastTilVedtakBuilder, organisasjonsnummer: String) { - builder.behandlingId(id).periode(arbeidsgiverperiode, periode).hendelseIder(dokumentsporing.ider()).skjæringstidspunkt(skjæringstidspunkt) + internal fun godkjenning( + aktivitetslogg: IAktivitetslogg, + builder: UtkastTilVedtakBuilder, + organisasjonsnummer: String + ) { + builder.behandlingId(id).periode(arbeidsgiverperiode, periode) + .hendelseIder(dokumentsporing.ider()).skjæringstidspunkt(skjæringstidspunkt) gjeldende.godkjenning(aktivitetslogg, this, builder) } internal fun berik(builder: UtkastTilVedtakBuilder) { - builder.behandlingId(id).periode(arbeidsgiverperiode, periode).hendelseIder(dokumentsporing.ider()).skjæringstidspunkt(skjæringstidspunkt) + builder.behandlingId(id).periode(arbeidsgiverperiode, periode) + .hendelseIder(dokumentsporing.ider()).skjæringstidspunkt(skjæringstidspunkt) gjeldende.berik(builder) } - fun annuller(arbeidsgiver: Arbeidsgiver, hendelse: AnnullerUtbetaling, aktivitetslogg: IAktivitetslogg, behandlinger: List): Utbetaling? { + fun annuller( + arbeidsgiver: Arbeidsgiver, + hendelse: AnnullerUtbetaling, + aktivitetslogg: IAktivitetslogg, + behandlinger: List + ): Utbetaling? { val sisteVedtak = behandlinger.lastOrNull { it.erFattetVedtak() } ?: return null return sisteVedtak.håndterAnnullering(arbeidsgiver, hendelse, aktivitetslogg) } - fun annuller(arbeidsgiver: Arbeidsgiver, hendelse: AnnullerUtbetaling, aktivitetslogg: IAktivitetslogg, annullering: Utbetaling, andreBehandlinger: List): Behandling? { - val sisteVedtak = andreBehandlinger.lastOrNull { behandlingen -> behandlingen.erFattetVedtak() } ?: return null + + fun annuller( + arbeidsgiver: Arbeidsgiver, + hendelse: AnnullerUtbetaling, + aktivitetslogg: IAktivitetslogg, + annullering: Utbetaling, + andreBehandlinger: List + ): Behandling? { + val sisteVedtak = + andreBehandlinger.lastOrNull { behandlingen -> behandlingen.erFattetVedtak() } + ?: return null if (true != sisteVedtak.utbetaling()?.hørerSammen(annullering)) return null - return tilstand.annuller(this, arbeidsgiver, hendelse, aktivitetslogg, annullering, checkNotNull(sisteVedtak.gjeldende.grunnlagsdata)) + return tilstand.annuller( + this, + arbeidsgiver, + hendelse, + aktivitetslogg, + annullering, + checkNotNull(sisteVedtak.gjeldende.grunnlagsdata) + ) } - private fun tillaterOverlappendeUtbetalingerForkasting(aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List): Boolean { - val overlappendeUtbetalinger = arbeidsgiverUtbetalinger.filter { it.overlapperMed(periode) } - return Utbetaling.kanForkastes(overlappendeUtbetalinger, arbeidsgiverUtbetalinger).also { - if (!it) aktivitetslogg.info("[kanForkastes] Kan i utgangspunktet ikke forkastes ettersom perioden har ${overlappendeUtbetalinger.size} overlappende utbetalinger") - } + private fun tillaterOverlappendeUtbetalingerForkasting( + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ): Boolean { + val overlappendeUtbetalinger = + arbeidsgiverUtbetalinger.filter { it.overlapperMed(periode) } + return Utbetaling.kanForkastes(overlappendeUtbetalinger, arbeidsgiverUtbetalinger) + .also { + if (!it) aktivitetslogg.info("[kanForkastes] Kan i utgangspunktet ikke forkastes ettersom perioden har ${overlappendeUtbetalinger.size} overlappende utbetalinger") + } } + /* hvorvidt en AUU- (eller har vært-auu)-periode kan forkastes */ - private fun kanForkastingAvKortPeriodeTillates(aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List): Boolean { - return tillaterOverlappendeUtbetalingerForkasting(aktivitetslogg, arbeidsgiverUtbetalinger) + private fun kanForkastingAvKortPeriodeTillates( + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ): Boolean { + return tillaterOverlappendeUtbetalingerForkasting( + aktivitetslogg, + arbeidsgiverUtbetalinger + ) } - internal fun validerFerdigBehandlet(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) = tilstand.validerFerdigBehandlet(this, hendelse, aktivitetslogg) + internal fun validerFerdigBehandlet(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) = + tilstand.validerFerdigBehandlet(this, hendelse, aktivitetslogg) - private fun valideringFeilet(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg, feil: String) { + private fun valideringFeilet( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg, + feil: String + ) { // Om de er hendelsen vi håndterer nå som har skapt situasjonen feiler vi fremfor å gå videre. if (kilde.meldingsreferanseId == hendelse.metadata.meldingsreferanseId) error(feil) // Om det er krøll fra tidligere logger vi bare @@ -1212,9 +1695,17 @@ internal class Behandlinger private constructor(behandlinger: List) internal companion object { val List.sykmeldingsperiode get() = first().periode - val List.dokumentsporing get() = map { it.dokumentsporing }.takeUnless { it.isEmpty() }?.reduce(Set::plus) ?: emptySet() + val List.dokumentsporing + get() = map { it.dokumentsporing }.takeUnless { it.isEmpty() } + ?.reduce(Set::plus) ?: emptySet() - fun nyBehandling(observatører: List, sykdomstidslinje: Sykdomstidslinje, dokumentsporing: Dokumentsporing, sykmeldingsperiode: Periode, søknad: Søknad) = + fun nyBehandling( + observatører: List, + sykdomstidslinje: Sykdomstidslinje, + dokumentsporing: Dokumentsporing, + sykmeldingsperiode: Periode, + søknad: Søknad + ) = Behandling( observatører = observatører, tilstand = Tilstand.Uberegnet, @@ -1238,18 +1729,41 @@ internal class Behandlinger private constructor(behandlinger: List) avsluttet = null, kilde = Behandlingkilde(søknad.metadata) ) + fun List.jurist(jurist: BehandlingSubsumsjonslogg, vedtaksperiodeId: UUID) = jurist.medVedtaksperiode(vedtaksperiodeId, dokumentsporing.tilSubsumsjonsformat()) - internal fun List.harGjenbrukbareOpplysninger(organisasjonsnummer: String) = forrigeEndringMedGjenbrukbareOpplysninger(organisasjonsnummer) != null - internal fun List.lagreGjenbrukbareOpplysninger(skjæringstidspunkt: LocalDate, organisasjonsnummer: String, arbeidsgiver: Arbeidsgiver, aktivitetslogg: IAktivitetslogg) { - val (forrigeEndring, vilkårsgrunnlag) = forrigeEndringMedGjenbrukbareOpplysninger(organisasjonsnummer) ?: return - val nyArbeidsgiverperiode = forrigeEndring.arbeidsgiverperiodeEndret(gjeldendeEndring()) + internal fun List.harGjenbrukbareOpplysninger(organisasjonsnummer: String) = + forrigeEndringMedGjenbrukbareOpplysninger(organisasjonsnummer) != null + + internal fun List.lagreGjenbrukbareOpplysninger( + skjæringstidspunkt: LocalDate, + organisasjonsnummer: String, + arbeidsgiver: Arbeidsgiver, + aktivitetslogg: IAktivitetslogg + ) { + val (forrigeEndring, vilkårsgrunnlag) = forrigeEndringMedGjenbrukbareOpplysninger( + organisasjonsnummer + ) ?: return + val nyArbeidsgiverperiode = + forrigeEndring.arbeidsgiverperiodeEndret(gjeldendeEndring()) // Herfra bruker vi "gammel" løype - kanskje noe kan skrus på fra det punktet her om en skulle skru på dette - vilkårsgrunnlag.lagreTidsnæreInntekter(skjæringstidspunkt, arbeidsgiver, aktivitetslogg, nyArbeidsgiverperiode) + vilkårsgrunnlag.lagreTidsnæreInntekter( + skjæringstidspunkt, + arbeidsgiver, + aktivitetslogg, + nyArbeidsgiverperiode + ) } - private fun List.forrigeEndringMedGjenbrukbareOpplysninger(organisasjonsnummer: String): Pair? = - forrigeEndringMed { it.grunnlagsdata?.harGjenbrukbareOpplysninger(organisasjonsnummer) == true }?.let { it to it.grunnlagsdata!! } + + private fun List.forrigeEndringMedGjenbrukbareOpplysninger( + organisasjonsnummer: String + ): Pair? = + forrigeEndringMed { + it.grunnlagsdata?.harGjenbrukbareOpplysninger( + organisasjonsnummer + ) == true + }?.let { it to it.grunnlagsdata!! } // hvorvidt man delte samme utbetaling før fun List.erUtbetaltPåForskjelligeUtbetalinger(other: List): Boolean { @@ -1259,7 +1773,8 @@ internal class Behandlinger private constructor(behandlinger: List) val utbetalingThis = checkNotNull(forrigeIverksatteThis.utbetaling()) { "forventer at det skal være en utbetaling på en behandling som er iverksatt" } - val utbetalingOther = forrigeIverksatteOther.utbetaling() ?: return true // forrige periode kan være AUU + val utbetalingOther = forrigeIverksatteOther.utbetaling() + ?: return true // forrige periode kan være AUU return !utbetalingOther.hørerSammen(utbetalingThis) } @@ -1272,6 +1787,7 @@ internal class Behandlinger private constructor(behandlinger: List) endring.takeIf { predikat(it) } } } + private fun List.forrigeOgGjeldendeEndring(): Pair { val gjeldendeEndring = gjeldendeEndring() return forrigeEndringMed { it.tidsstempel < gjeldendeEndring.tidsstempel } to gjeldendeEndring @@ -1285,17 +1801,33 @@ internal class Behandlinger private constructor(behandlinger: List) } internal fun List.grunnbeløpsregulert(): Boolean { - val gjeldende = gjeldendeEndring().takeIf { it.grunnlagsdata != null } ?: return false - val forrige = forrigeEndringMed { it.tidsstempel < gjeldende.tidsstempel && it.grunnlagsdata != null } ?: return false + val gjeldende = + gjeldendeEndring().takeIf { it.grunnlagsdata != null } ?: return false + val forrige = + forrigeEndringMed { it.tidsstempel < gjeldende.tidsstempel && it.grunnlagsdata != null } + ?: return false if (forrige.skjæringstidspunkt != gjeldende.skjæringstidspunkt) return false - return listOf(forrige.grunnlagsdata!!, gjeldende.grunnlagsdata!!).harUlikeGrunnbeløp() + return listOf( + forrige.grunnlagsdata!!, + gjeldende.grunnlagsdata!! + ).harUlikeGrunnbeløp() } - internal fun Map.berik(builder: UtkastTilVedtakBuilder) = forEach { (vedtaksperiodeId, behandling) -> - builder.relevantPeriode(vedtaksperiodeId, behandling.id, behandling.skjæringstidspunkt, behandling.periode) - } + internal fun Map.berik(builder: UtkastTilVedtakBuilder) = + forEach { (vedtaksperiodeId, behandling) -> + builder.relevantPeriode( + vedtaksperiodeId, + behandling.id, + behandling.skjæringstidspunkt, + behandling.periode + ) + } - internal fun gjenopprett(dto: BehandlingInnDto, grunnlagsdata: Map, utbetalinger: Map): Behandling { + internal fun gjenopprett( + dto: BehandlingInnDto, + grunnlagsdata: Map, + utbetalinger: Map + ): Behandling { return Behandling( id = dto.id, tilstand = when (dto.tilstand) { @@ -1312,7 +1844,14 @@ internal class Behandlinger private constructor(behandlinger: List) BehandlingtilstandDto.VEDTAK_FATTET -> Tilstand.VedtakFattet BehandlingtilstandDto.VEDTAK_IVERKSATT -> Tilstand.VedtakIverksatt }, - endringer = dto.endringer.map { Endring.gjenopprett(it, grunnlagsdata, utbetalinger, dto.tilstand == BehandlingtilstandDto.AVSLUTTET_UTEN_VEDTAK) }.toMutableList(), + endringer = dto.endringer.map { + Endring.gjenopprett( + it, + grunnlagsdata, + utbetalinger, + dto.tilstand == BehandlingtilstandDto.AVSLUTTET_UTEN_VEDTAK + ) + }.toMutableList(), vedtakFattet = dto.vedtakFattet, avsluttet = dto.avsluttet, kilde = Behandlingkilde.gjenopprett(dto.kilde), @@ -1320,10 +1859,12 @@ internal class Behandlinger private constructor(behandlinger: List) ) } } + internal sealed interface Tilstand { fun behandlingOpprettet(behandling: Behandling) { error("Forventer ikke å opprette behandling i tilstand ${this.javaClass.simpleName}") } + fun entering(behandling: Behandling, aktivitetslogg: IAktivitetslogg) {} fun leaving(behandling: Behandling) {} fun annuller( @@ -1336,11 +1877,24 @@ internal class Behandlinger private constructor(behandlinger: List) ): Behandling? { return null } - fun forkastVedtaksperiode(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg): Behandling? { + + fun forkastVedtaksperiode( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ): Behandling? { behandling.tilstand(TilInfotrygd, aktivitetslogg) return null } - fun beregnSkjæringstidspunkt(behandling: Behandling, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List) {} + + fun beregnSkjæringstidspunkt( + behandling: Behandling, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ) { + } + fun håndterRefusjonsopplysninger( arbeidsgiver: Arbeidsgiver, behandling: Behandling, @@ -1353,6 +1907,7 @@ internal class Behandlinger private constructor(behandlinger: List) aktivitetslogg.info("Har ikke implementert håndtering av refusjonsopplysninger i behandlingstilstand $this") // TODO: dette kan bli en error når vi har fått migrert alle refusjonsopplysninger til den nye metoden return null } + fun håndterEndring( behandling: Behandling, arbeidsgiver: Arbeidsgiver, @@ -1363,6 +1918,7 @@ internal class Behandlinger private constructor(behandlinger: List) ): Behandling? { error("Har ikke implementert håndtering av endring i $this") } + fun vedtakAvvist( behandling: Behandling, arbeidsgiver: Arbeidsgiver, @@ -1371,18 +1927,33 @@ internal class Behandlinger private constructor(behandlinger: List) ) { error("Kan ikke avvise vedtak for behandling i $this") } - fun vedtakFattet(behandling: Behandling, arbeidsgiver: Arbeidsgiver, utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, aktivitetslogg: IAktivitetslogg) { + + fun vedtakFattet( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, + aktivitetslogg: IAktivitetslogg + ) { error("Kan ikke fatte vedtak for behandling i $this") } - fun avsluttUtenVedtak(behandling: Behandling, arbeidsgiver: Arbeidsgiver, aktivitetslogg: IAktivitetslogg, utbetalingstidslinje: Utbetalingstidslinje) { + + fun avsluttUtenVedtak( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + aktivitetslogg: IAktivitetslogg, + utbetalingstidslinje: Utbetalingstidslinje + ) { error("Kan ikke avslutte uten vedtak for behandling i $this") } + fun avsluttMedVedtak(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { error("Kan ikke avslutte behandling i $this") } + fun utenUtbetaling(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { error("Støtter ikke å forkaste utbetaling utbetaling i $this") } + fun utbetaling( behandling: Behandling, vedtaksperiodeSomLagerUtbetaling: UUID, @@ -1394,33 +1965,72 @@ internal class Behandlinger private constructor(behandlinger: List) ): Utbetalingstidslinje { error("Støtter ikke å opprette utbetaling i $this") } - fun oppdaterDokumentsporing(behandling: Behandling, dokument: Dokumentsporing): Boolean { + + fun oppdaterDokumentsporing( + behandling: Behandling, + dokument: Dokumentsporing + ): Boolean { error("Støtter ikke å oppdatere dokumentsporing med $dokument i $this") } - fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List): Boolean - fun sikreNyBehandling(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List): Behandling? { + + fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ): Boolean + + fun sikreNyBehandling( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ): Behandling? { return null } + fun tillaterNyBehandling(behandling: Behandling, other: Behandling): Boolean = false - fun håndterUtbetalinghendelse(behandling: Behandling, hendelse: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg) = false - fun validerFerdigBehandlet(behandling: Behandling, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) { - behandling.valideringFeilet(hendelse, aktivitetslogg, "Behandling ${behandling.id} burde vært ferdig behandlet, men står i tilstand ${behandling.tilstand::class.simpleName}") + fun håndterUtbetalinghendelse( + behandling: Behandling, + hendelse: UtbetalingHendelse, + aktivitetslogg: IAktivitetslogg + ) = false + + fun validerFerdigBehandlet( + behandling: Behandling, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) { + behandling.valideringFeilet( + hendelse, + aktivitetslogg, + "Behandling ${behandling.id} burde vært ferdig behandlet, men står i tilstand ${behandling.tilstand::class.simpleName}" + ) } data object Uberegnet : Tilstand { - override fun behandlingOpprettet(behandling: Behandling) = behandling.emitNyBehandlingOpprettet(PersonObserver.BehandlingOpprettetEvent.Type.Søknad) + override fun behandlingOpprettet(behandling: Behandling) = + behandling.emitNyBehandlingOpprettet(PersonObserver.BehandlingOpprettetEvent.Type.Søknad) + override fun entering(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { check(behandling.utbetaling() == null) { "skal ikke ha utbetaling og være uberegnet samtidig" } } - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = true + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = true override fun beregnSkjæringstidspunkt( behandling: Behandling, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List ) { - behandling.oppdaterMedNyttSkjæringstidspunkt(beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + behandling.oppdaterMedNyttSkjæringstidspunkt( + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) } override fun håndterRefusjonsopplysninger( @@ -1436,15 +2046,35 @@ internal class Behandlinger private constructor(behandlinger: List) return null } - override fun håndterEndring(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: SykdomshistorikkHendelse, aktivitetslogg: IAktivitetslogg, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List): Behandling? { - behandling.oppdaterMedEndring(arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + override fun håndterEndring( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: SykdomshistorikkHendelse, + aktivitetslogg: IAktivitetslogg, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ): Behandling? { + behandling.oppdaterMedEndring( + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) return null } - override fun oppdaterDokumentsporing(behandling: Behandling, dokument: Dokumentsporing) = + override fun oppdaterDokumentsporing( + behandling: Behandling, + dokument: Dokumentsporing + ) = behandling.kopierMedDokument(dokument) - override fun utenUtbetaling(behandling: Behandling, aktivitetslogg: IAktivitetslogg) {} + override fun utenUtbetaling( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg + ) { + } override fun utbetaling( behandling: Behandling, @@ -1455,17 +2085,32 @@ internal class Behandlinger private constructor(behandlinger: List) maksdatoresultat: Maksdatoresultat, utbetalingstidslinje: Utbetalingstidslinje ): Utbetalingstidslinje { - return behandling.lagUtbetaling(vedtaksperiodeSomLagerUtbetaling, arbeidsgiver, grunnlagsdata, aktivitetslogg, maksdatoresultat, utbetalingstidslinje) + return behandling.lagUtbetaling( + vedtaksperiodeSomLagerUtbetaling, + arbeidsgiver, + grunnlagsdata, + aktivitetslogg, + maksdatoresultat, + utbetalingstidslinje + ) } - override fun avsluttUtenVedtak(behandling: Behandling, arbeidsgiver: Arbeidsgiver, aktivitetslogg: IAktivitetslogg, utbetalingstidslinje: Utbetalingstidslinje) { + override fun avsluttUtenVedtak( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + aktivitetslogg: IAktivitetslogg, + utbetalingstidslinje: Utbetalingstidslinje + ) { behandling.behandlingLukket(arbeidsgiver) behandling.kopierMedUtbetalingstidslinje(utbetalingstidslinje) behandling.tilstand(AvsluttetUtenVedtak, aktivitetslogg) } } + data object UberegnetOmgjøring : Tilstand by (Uberegnet) { - override fun behandlingOpprettet(behandling: Behandling) = behandling.emitNyBehandlingOpprettet(PersonObserver.BehandlingOpprettetEvent.Type.Omgjøring) + override fun behandlingOpprettet(behandling: Behandling) = + behandling.emitNyBehandlingOpprettet(PersonObserver.BehandlingOpprettetEvent.Type.Omgjøring) + override fun utbetaling( behandling: Behandling, vedtaksperiodeSomLagerUtbetaling: UUID, @@ -1475,15 +2120,37 @@ internal class Behandlinger private constructor(behandlinger: List) maksdatoresultat: Maksdatoresultat, utbetalingstidslinje: Utbetalingstidslinje ): Utbetalingstidslinje { - return behandling.lagOmgjøring(vedtaksperiodeSomLagerUtbetaling, arbeidsgiver, grunnlagsdata, aktivitetslogg, maksdatoresultat, utbetalingstidslinje) + return behandling.lagOmgjøring( + vedtaksperiodeSomLagerUtbetaling, + arbeidsgiver, + grunnlagsdata, + aktivitetslogg, + maksdatoresultat, + utbetalingstidslinje + ) } - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = - behandling.kanForkastingAvKortPeriodeTillates(aktivitetslogg, arbeidsgiverUtbetalinger) + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = + behandling.kanForkastingAvKortPeriodeTillates( + aktivitetslogg, + arbeidsgiverUtbetalinger + ) } + data object UberegnetRevurdering : Tilstand by (Uberegnet) { - override fun behandlingOpprettet(behandling: Behandling) = behandling.emitNyBehandlingOpprettet(PersonObserver.BehandlingOpprettetEvent.Type.Revurdering) - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = false + override fun behandlingOpprettet(behandling: Behandling) = + behandling.emitNyBehandlingOpprettet(PersonObserver.BehandlingOpprettetEvent.Type.Revurdering) + + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = false + override fun annuller( behandling: Behandling, arbeidsgiver: Arbeidsgiver, @@ -1492,7 +2159,14 @@ internal class Behandlinger private constructor(behandlinger: List) annullering: Utbetaling, grunnlagsdata: VilkårsgrunnlagElement ): Behandling? { - behandling.nyEndring(behandling.gjeldende.kopierMedUtbetaling(Maksdatoresultat.IkkeVurdert, Utbetalingstidslinje(), annullering, grunnlagsdata)) + behandling.nyEndring( + behandling.gjeldende.kopierMedUtbetaling( + Maksdatoresultat.IkkeVurdert, + Utbetalingstidslinje(), + annullering, + grunnlagsdata + ) + ) behandling.tilstand(AnnullertPeriode, aktivitetslogg) return null } @@ -1506,20 +2180,42 @@ internal class Behandlinger private constructor(behandlinger: List) maksdatoresultat: Maksdatoresultat, utbetalingstidslinje: Utbetalingstidslinje ): Utbetalingstidslinje { - return behandling.lagRevurdering(vedtaksperiodeSomLagerUtbetaling, arbeidsgiver, grunnlagsdata, aktivitetslogg, maksdatoresultat, utbetalingstidslinje) + return behandling.lagRevurdering( + vedtaksperiodeSomLagerUtbetaling, + arbeidsgiver, + grunnlagsdata, + aktivitetslogg, + maksdatoresultat, + utbetalingstidslinje + ) } } + data object Beregnet : Tilstand { override fun entering(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { checkNotNull(behandling.gjeldende.utbetaling) checkNotNull(behandling.gjeldende.grunnlagsdata) } - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = true + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = true - override fun forkastVedtaksperiode(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg): Behandling? { + override fun forkastVedtaksperiode( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ): Behandling? { behandling.gjeldende.forkastUtbetaling(aktivitetslogg) - return super.forkastVedtaksperiode(behandling, arbeidsgiver, hendelse, aktivitetslogg) + return super.forkastVedtaksperiode( + behandling, + arbeidsgiver, + hendelse, + aktivitetslogg + ) } override fun beregnSkjæringstidspunkt( @@ -1527,7 +2223,10 @@ internal class Behandlinger private constructor(behandlinger: List) beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List ) { - behandling.oppdaterMedNyttSkjæringstidspunkt(beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + behandling.oppdaterMedNyttSkjæringstidspunkt( + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) } override fun håndterRefusjonsopplysninger( @@ -1543,67 +2242,165 @@ internal class Behandlinger private constructor(behandlinger: List) return null } - override fun håndterEndring(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: SykdomshistorikkHendelse, aktivitetslogg: IAktivitetslogg, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List): Behandling? { + override fun håndterEndring( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: SykdomshistorikkHendelse, + aktivitetslogg: IAktivitetslogg, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ): Behandling? { behandling.gjeldende.forkastUtbetaling(aktivitetslogg) - behandling.oppdaterMedEndring(arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + behandling.oppdaterMedEndring( + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) behandling.tilstand(Uberegnet, aktivitetslogg) return null } - override fun oppdaterDokumentsporing(behandling: Behandling, dokument: Dokumentsporing) = + override fun oppdaterDokumentsporing( + behandling: Behandling, + dokument: Dokumentsporing + ) = behandling.kopierMedDokument(dokument) - override fun utenUtbetaling(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { + override fun utenUtbetaling( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg + ) { behandling.utenUtbetaling(aktivitetslogg) behandling.tilstand(Uberegnet, aktivitetslogg) } - override fun vedtakAvvist(behandling: Behandling, arbeidsgiver: Arbeidsgiver, utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, aktivitetslogg: IAktivitetslogg) { + override fun vedtakAvvist( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, + aktivitetslogg: IAktivitetslogg + ) { // perioden kommer til å bli kastet til infotrygd } - override fun vedtakFattet(behandling: Behandling, arbeidsgiver: Arbeidsgiver, utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, aktivitetslogg: IAktivitetslogg) { + override fun vedtakFattet( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, + aktivitetslogg: IAktivitetslogg + ) { behandling.vedtakFattet = utbetalingsavgjørelse.avgjørelsestidspunkt behandling.behandlingLukket(arbeidsgiver) - behandling.tilstand(if (behandling.gjeldende.utbetaling?.erAvsluttet() == true) VedtakIverksatt else VedtakFattet, aktivitetslogg) + behandling.tilstand( + if (behandling.gjeldende.utbetaling?.erAvsluttet() == true) VedtakIverksatt else VedtakFattet, + aktivitetslogg + ) } } + data object BeregnetOmgjøring : Tilstand by (Beregnet) { - override fun håndterEndring(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: SykdomshistorikkHendelse, aktivitetslogg: IAktivitetslogg, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List): Behandling? { + override fun håndterEndring( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: SykdomshistorikkHendelse, + aktivitetslogg: IAktivitetslogg, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ): Behandling? { behandling.gjeldende.forkastUtbetaling(aktivitetslogg) - behandling.oppdaterMedEndring(arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + behandling.oppdaterMedEndring( + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) behandling.tilstand(UberegnetOmgjøring, aktivitetslogg) return null } - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = - behandling.kanForkastingAvKortPeriodeTillates(aktivitetslogg, arbeidsgiverUtbetalinger) - override fun utenUtbetaling(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { + + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = + behandling.kanForkastingAvKortPeriodeTillates( + aktivitetslogg, + arbeidsgiverUtbetalinger + ) + + override fun utenUtbetaling( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg + ) { behandling.utenUtbetaling(aktivitetslogg) behandling.tilstand(UberegnetOmgjøring, aktivitetslogg) } } + data object BeregnetRevurdering : Tilstand by (Beregnet) { - override fun forkastVedtaksperiode(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg): Behandling? { + override fun forkastVedtaksperiode( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ): Behandling? { behandling.gjeldende.forkastUtbetaling(aktivitetslogg) - return super.forkastVedtaksperiode(behandling, arbeidsgiver, hendelse, aktivitetslogg) + return super.forkastVedtaksperiode( + behandling, + arbeidsgiver, + hendelse, + aktivitetslogg + ) } - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = false - override fun annuller(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: AnnullerUtbetaling, aktivitetslogg: IAktivitetslogg, annullering: Utbetaling, grunnlagsdata: VilkårsgrunnlagElement): Behandling? { + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = false + + override fun annuller( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: AnnullerUtbetaling, + aktivitetslogg: IAktivitetslogg, + annullering: Utbetaling, + grunnlagsdata: VilkårsgrunnlagElement + ): Behandling? { behandling.gjeldende.utbetaling!!.forkast(aktivitetslogg) - behandling.nyEndring(behandling.gjeldende.kopierMedUtbetaling(Maksdatoresultat.IkkeVurdert, Utbetalingstidslinje(), annullering, grunnlagsdata)) + behandling.nyEndring( + behandling.gjeldende.kopierMedUtbetaling( + Maksdatoresultat.IkkeVurdert, + Utbetalingstidslinje(), + annullering, + grunnlagsdata + ) + ) behandling.tilstand(AnnullertPeriode, aktivitetslogg) return null } - override fun utenUtbetaling(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { + override fun utenUtbetaling( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg + ) { behandling.utenUtbetaling(aktivitetslogg) behandling.tilstand(UberegnetRevurdering, aktivitetslogg) } - override fun vedtakAvvist(behandling: Behandling, arbeidsgiver: Arbeidsgiver, utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, aktivitetslogg: IAktivitetslogg) { + + override fun vedtakAvvist( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + utbetalingsavgjørelse: UtbetalingsavgjørelseHendelse, + aktivitetslogg: IAktivitetslogg + ) { behandling.behandlingLukket(arbeidsgiver) behandling.tilstand(RevurdertVedtakAvvist, aktivitetslogg) } + override fun håndterEndring( behandling: Behandling, arbeidsgiver: Arbeidsgiver, @@ -1613,56 +2410,135 @@ internal class Behandlinger private constructor(behandlinger: List) beregnArbeidsgiverperiode: (Periode) -> List ): Behandling? { behandling.gjeldende.forkastUtbetaling(aktivitetslogg) - behandling.oppdaterMedEndring(arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + behandling.oppdaterMedEndring( + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) behandling.tilstand(UberegnetRevurdering, aktivitetslogg) return null } } + data object RevurdertVedtakAvvist : Tilstand { - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = false + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = false - override fun forkastVedtaksperiode(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg): Behandling { + override fun forkastVedtaksperiode( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ): Behandling { error("Kan ikke forkaste i tilstand ${this.javaClass.simpleName}") } - override fun sikreNyBehandling(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List): Behandling { - return behandling.sikreNyBehandling(arbeidsgiver, UberegnetRevurdering, hendelse, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + override fun sikreNyBehandling( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ): Behandling { + return behandling.sikreNyBehandling( + arbeidsgiver, + UberegnetRevurdering, + hendelse, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) } - override fun annuller(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: AnnullerUtbetaling, aktivitetslogg: IAktivitetslogg, annullering: Utbetaling, grunnlagsdata: VilkårsgrunnlagElement): Behandling { - return behandling.nyAnnullertBehandling(arbeidsgiver, hendelse, annullering, grunnlagsdata) + override fun annuller( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: AnnullerUtbetaling, + aktivitetslogg: IAktivitetslogg, + annullering: Utbetaling, + grunnlagsdata: VilkårsgrunnlagElement + ): Behandling { + return behandling.nyAnnullertBehandling( + arbeidsgiver, + hendelse, + annullering, + grunnlagsdata + ) } - override fun tillaterNyBehandling(behandling: Behandling, other: Behandling): Boolean { + + override fun tillaterNyBehandling( + behandling: Behandling, + other: Behandling + ): Boolean { return true } } + data object VedtakFattet : Tilstand { override fun entering(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { checkNotNull(behandling.gjeldende.utbetaling) checkNotNull(behandling.gjeldende.grunnlagsdata) } - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = false - override fun forkastVedtaksperiode(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg): Behandling? { + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = false + + override fun forkastVedtaksperiode( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ): Behandling? { error("Kan ikke forkaste i tilstand ${this.javaClass.simpleName}") } - override fun tillaterNyBehandling(behandling: Behandling, other: Behandling): Boolean { + override fun tillaterNyBehandling( + behandling: Behandling, + other: Behandling + ): Boolean { return true } - override fun sikreNyBehandling(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List): Behandling { - return behandling.sikreNyBehandling(arbeidsgiver, UberegnetRevurdering, hendelse, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + override fun sikreNyBehandling( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ): Behandling { + return behandling.sikreNyBehandling( + arbeidsgiver, + UberegnetRevurdering, + hendelse, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) } - override fun håndterUtbetalinghendelse(behandling: Behandling, hendelse: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg): Boolean { - val utbetaling = checkNotNull(behandling.gjeldende.utbetaling) { "forventer utbetaling" } + override fun håndterUtbetalinghendelse( + behandling: Behandling, + hendelse: UtbetalingHendelse, + aktivitetslogg: IAktivitetslogg + ): Boolean { + val utbetaling = + checkNotNull(behandling.gjeldende.utbetaling) { "forventer utbetaling" } if (!utbetaling.gjelderFor(hendelse)) return false if (utbetaling.erAvsluttet()) avsluttMedVedtak(behandling, aktivitetslogg) return true } - override fun utenUtbetaling(behandling: Behandling, aktivitetslogg: IAktivitetslogg) {} + override fun utenUtbetaling( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg + ) { + } override fun håndterEndring( behandling: Behandling, @@ -1672,9 +2548,19 @@ internal class Behandlinger private constructor(behandlinger: List) beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List ) = - behandling.nyBehandlingMedEndring(arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode, UberegnetRevurdering) + behandling.nyBehandlingMedEndring( + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode, + UberegnetRevurdering + ) - override fun avsluttMedVedtak(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { + override fun avsluttMedVedtak( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg + ) { behandling.tilstand(VedtakIverksatt, aktivitetslogg) } } @@ -1685,7 +2571,13 @@ internal class Behandlinger private constructor(behandlinger: List) behandling.avsluttet = LocalDateTime.now() behandling.avsluttetUtenVedtak(aktivitetslogg) } - override fun forkastVedtaksperiode(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg): Behandling { + + override fun forkastVedtaksperiode( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ): Behandling { arbeidsgiver.låsOpp(behandling.periode) return Behandling( observatører = behandling.observatører, @@ -1705,18 +2597,47 @@ internal class Behandlinger private constructor(behandlinger: List) beregnArbeidsgiverperiode: (Periode) -> List, nyeRefusjonsopplysninger: Beløpstidslinje ): Behandling { - return behandling.nyBehandlingMedRefusjonstidslinje(arbeidsgiver, hendelse, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode, nyeRefusjonsopplysninger, UberegnetOmgjøring) + return behandling.nyBehandlingMedRefusjonstidslinje( + arbeidsgiver, + hendelse, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode, + nyeRefusjonsopplysninger, + UberegnetOmgjøring + ) } - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = - behandling.kanForkastingAvKortPeriodeTillates(aktivitetslogg, arbeidsgiverUtbetalinger) + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = + behandling.kanForkastingAvKortPeriodeTillates( + aktivitetslogg, + arbeidsgiverUtbetalinger + ) - override fun tillaterNyBehandling(behandling: Behandling, other: Behandling): Boolean { + override fun tillaterNyBehandling( + behandling: Behandling, + other: Behandling + ): Boolean { return true } - override fun sikreNyBehandling(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List): Behandling { - return behandling.sikreNyBehandling(arbeidsgiver, UberegnetOmgjøring, hendelse, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + override fun sikreNyBehandling( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ): Behandling { + return behandling.sikreNyBehandling( + arbeidsgiver, + UberegnetOmgjøring, + hendelse, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) } override fun håndterEndring( @@ -1727,19 +2648,36 @@ internal class Behandlinger private constructor(behandlinger: List) beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List ): Behandling { - return behandling.nyBehandlingMedEndring(arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode, UberegnetOmgjøring) + return behandling.nyBehandlingMedEndring( + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode, + UberegnetOmgjøring + ) } - override fun validerFerdigBehandlet(behandling: Behandling, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) { + override fun validerFerdigBehandlet( + behandling: Behandling, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) { if (behandling.avsluttet != null && behandling.vedtakFattet == null) return - behandling.valideringFeilet(hendelse, aktivitetslogg, "Behandling ${behandling.id} er ferdig behandlet i tilstand AvsluttetUtenVedtak, men med uventede tidsstempler.") + behandling.valideringFeilet( + hendelse, + aktivitetslogg, + "Behandling ${behandling.id} er ferdig behandlet i tilstand AvsluttetUtenVedtak, men med uventede tidsstempler." + ) } } + data object VedtakIverksatt : Tilstand { override fun entering(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { behandling.avsluttet = LocalDateTime.now() behandling.vedtakIverksatt(aktivitetslogg) } + override fun annuller( behandling: Behandling, arbeidsgiver: Arbeidsgiver, @@ -1748,19 +2686,50 @@ internal class Behandlinger private constructor(behandlinger: List) annullering: Utbetaling, grunnlagsdata: VilkårsgrunnlagElement ): Behandling { - return behandling.nyAnnullertBehandling(arbeidsgiver, hendelse, annullering, grunnlagsdata) + return behandling.nyAnnullertBehandling( + arbeidsgiver, + hendelse, + annullering, + grunnlagsdata + ) } - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = false - override fun forkastVedtaksperiode(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg): Behandling { + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = false + + override fun forkastVedtaksperiode( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ): Behandling { error("Kan ikke forkaste i tilstand ${this.javaClass.simpleName}") } - override fun tillaterNyBehandling(behandling: Behandling, other: Behandling): Boolean { + + override fun tillaterNyBehandling( + behandling: Behandling, + other: Behandling + ): Boolean { return true } - override fun sikreNyBehandling(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List): Behandling { - return behandling.sikreNyBehandling(arbeidsgiver, UberegnetRevurdering, hendelse, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) + override fun sikreNyBehandling( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ): Behandling { + return behandling.sikreNyBehandling( + arbeidsgiver, + UberegnetRevurdering, + hendelse, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) } override fun håndterRefusjonsopplysninger( @@ -1773,7 +2742,14 @@ internal class Behandlinger private constructor(behandlinger: List) nyeRefusjonsopplysninger: Beløpstidslinje ): Behandling? { if (behandling.gjeldende.refusjonstidslinje.isEmpty()) return null // TODO: Denne kan vi fjerne når vi har migrert inn refusjonsopplysninger på alle perioder. - return behandling.nyBehandlingMedRefusjonstidslinje(arbeidsgiver, hendelse, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode, nyeRefusjonsopplysninger, UberegnetRevurdering) + return behandling.nyBehandlingMedRefusjonstidslinje( + arbeidsgiver, + hendelse, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode, + nyeRefusjonsopplysninger, + UberegnetRevurdering + ) } override fun håndterEndring( @@ -1784,22 +2760,49 @@ internal class Behandlinger private constructor(behandlinger: List) beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List ) = - behandling.nyBehandlingMedEndring(arbeidsgiver, hendelse, aktivitetslogg, beregnSkjæringstidspunkt, beregnArbeidsgiverperiode, UberegnetRevurdering) + behandling.nyBehandlingMedEndring( + arbeidsgiver, + hendelse, + aktivitetslogg, + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode, + UberegnetRevurdering + ) - override fun validerFerdigBehandlet(behandling: Behandling, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) { + override fun validerFerdigBehandlet( + behandling: Behandling, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) { if (behandling.avsluttet != null && behandling.vedtakFattet != null) return - behandling.valideringFeilet(hendelse, aktivitetslogg, "Behandling ${behandling.id} er ferdig behandlet i tilstand VedtakIverksatt, men med uventede tidsstempler.") + behandling.valideringFeilet( + hendelse, + aktivitetslogg, + "Behandling ${behandling.id} er ferdig behandlet i tilstand VedtakIverksatt, men med uventede tidsstempler." + ) } } + data object AnnullertPeriode : Tilstand { override fun entering(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { behandling.avsluttet = LocalDateTime.now() } - override fun behandlingOpprettet(behandling: Behandling) = behandling.emitNyBehandlingOpprettet(PersonObserver.BehandlingOpprettetEvent.Type.Revurdering) - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List) = true + override fun behandlingOpprettet(behandling: Behandling) = + behandling.emitNyBehandlingOpprettet(PersonObserver.BehandlingOpprettetEvent.Type.Revurdering) + + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ) = true - override fun forkastVedtaksperiode(behandling: Behandling, arbeidsgiver: Arbeidsgiver, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg): Behandling? { + override fun forkastVedtaksperiode( + behandling: Behandling, + arbeidsgiver: Arbeidsgiver, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ): Behandling? { behandling.vedtakAnnullert(aktivitetslogg) return null } @@ -1815,11 +2818,15 @@ internal class Behandlinger private constructor(behandlinger: List) error("forventer ikke å annullere i $this") } } + data object TilInfotrygd : Tilstand { - override fun behandlingOpprettet(behandling: Behandling) = behandling.emitNyBehandlingOpprettet(PersonObserver.BehandlingOpprettetEvent.Type.Omgjøring) + override fun behandlingOpprettet(behandling: Behandling) = + behandling.emitNyBehandlingOpprettet(PersonObserver.BehandlingOpprettetEvent.Type.Omgjøring) + override fun entering(behandling: Behandling, aktivitetslogg: IAktivitetslogg) { behandling.avsluttet = LocalDateTime.now() } + override fun annuller( behandling: Behandling, arbeidsgiver: Arbeidsgiver, @@ -1830,13 +2837,26 @@ internal class Behandlinger private constructor(behandlinger: List) ): Behandling? { error("forventer ikke å annullere i $this") } - override fun kanForkastes(behandling: Behandling, aktivitetslogg: IAktivitetslogg, arbeidsgiverUtbetalinger: List): Boolean { + + override fun kanForkastes( + behandling: Behandling, + aktivitetslogg: IAktivitetslogg, + arbeidsgiverUtbetalinger: List + ): Boolean { error("forventer ikke å forkaste en periode som allerde er i $this") } - override fun validerFerdigBehandlet(behandling: Behandling, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) { + override fun validerFerdigBehandlet( + behandling: Behandling, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) { if (behandling.avsluttet != null && behandling.vedtakFattet == null) return - behandling.valideringFeilet(hendelse, aktivitetslogg, "Behandling ${behandling.id} er ferdig behandlet i tiltand TilInfotrygd, men med uventede tidsstempler.") + behandling.valideringFeilet( + hendelse, + aktivitetslogg, + "Behandling ${behandling.id} er ferdig behandlet i tiltand TilInfotrygd, men med uventede tidsstempler." + ) } } } @@ -1871,6 +2891,7 @@ internal data class BehandlingerView( val behandlinger: List, val hendelser: Set ) + internal data class BehandlingView( val id: UUID, val periode: Periode, @@ -1888,6 +2909,7 @@ internal data class BehandlingView( VEDTAK_FATTET, VEDTAK_IVERKSATT } } + internal data class BehandlingendringView( val id: UUID, val sykmeldingsperiode: Periode, @@ -1902,6 +2924,7 @@ internal data class BehandlingendringView( val arbeidsgiverperiode: List, val maksdatoresultat: Maksdatoresultat ) + internal data class BehandlingkildeView( val meldingsreferanseId: UUID, val innsendt: LocalDateTime, 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 f6f404603b..f97976c947 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 @@ -12,23 +12,46 @@ class Dokumentsporing private constructor(val id: UUID, val dokumentType: Dokume companion object { internal fun sykmelding(id: UUID) = Dokumentsporing(id, DokumentType.Sykmelding) internal fun søknad(id: UUID) = Dokumentsporing(id, DokumentType.Søknad) - internal fun inntektsmeldingInntekt(id: UUID) = Dokumentsporing(id, DokumentType.InntektsmeldingInntekt) - internal fun inntektsmeldingRefusjon(id: UUID) = Dokumentsporing(id, DokumentType.InntektsmeldingRefusjon) - internal fun inntektsmeldingDager(id: UUID) = Dokumentsporing(id, DokumentType.InntektsmeldingDager) - internal fun inntektFraAOrdingen(id: UUID) = Dokumentsporing(id, DokumentType.InntektFraAOrdningen) - internal fun overstyrTidslinje(id: UUID) = Dokumentsporing(id, DokumentType.OverstyrTidslinje) + internal fun inntektsmeldingInntekt(id: UUID) = + Dokumentsporing(id, DokumentType.InntektsmeldingInntekt) + + internal fun inntektsmeldingRefusjon(id: UUID) = + Dokumentsporing(id, DokumentType.InntektsmeldingRefusjon) + + internal fun inntektsmeldingDager(id: UUID) = + Dokumentsporing(id, DokumentType.InntektsmeldingDager) + + internal fun inntektFraAOrdingen(id: UUID) = + Dokumentsporing(id, DokumentType.InntektFraAOrdningen) + + internal fun overstyrTidslinje(id: UUID) = + Dokumentsporing(id, DokumentType.OverstyrTidslinje) + internal fun overstyrInntekt(id: UUID) = Dokumentsporing(id, DokumentType.OverstyrInntekt) internal fun overstyrRefusjon(id: UUID) = Dokumentsporing(id, DokumentType.OverstyrRefusjon) - internal fun overstyrArbeidsgiveropplysninger(id: UUID) = Dokumentsporing(id, DokumentType.OverstyrArbeidsgiveropplysninger) - internal fun overstyrArbeidsforhold(id: UUID) = Dokumentsporing(id, DokumentType.OverstyrArbeidsforhold) - internal fun skjønnsmessigFastsettelse(id: UUID) = Dokumentsporing(id, DokumentType.SkjønnsmessigFastsettelse) - internal fun grunnbeløpendring(id: UUID) = Dokumentsporing(id, DokumentType.SkjønnsmessigFastsettelse) // TODO: bytte DokumentType + internal fun overstyrArbeidsgiveropplysninger(id: UUID) = + Dokumentsporing(id, DokumentType.OverstyrArbeidsgiveropplysninger) + + internal fun overstyrArbeidsforhold(id: UUID) = + Dokumentsporing(id, DokumentType.OverstyrArbeidsforhold) + + internal fun skjønnsmessigFastsettelse(id: UUID) = + Dokumentsporing(id, DokumentType.SkjønnsmessigFastsettelse) + + internal fun grunnbeløpendring(id: UUID) = + Dokumentsporing(id, DokumentType.SkjønnsmessigFastsettelse) // TODO: bytte DokumentType + internal fun andreYtelser(id: UUID) = Dokumentsporing(id, DokumentType.AndreYtelser) internal fun Iterable.ider() = map { it.id }.toSet() - internal fun Iterable.søknadIder() = filter { it.dokumentType == DokumentType.Søknad }.map { it.id }.toSet() - internal fun Iterable.sisteInntektsmeldingDagerId() = lastOrNull { it.dokumentType == DokumentType.InntektsmeldingDager }?.id - internal fun Iterable.sisteInntektsmeldingInntektId() = lastOrNull { it.dokumentType == DokumentType.InntektsmeldingInntekt }?.id + internal fun Iterable.søknadIder() = + filter { it.dokumentType == DokumentType.Søknad }.map { it.id }.toSet() + + internal fun Iterable.sisteInntektsmeldingDagerId() = + lastOrNull { it.dokumentType == DokumentType.InntektsmeldingDager }?.id + + internal fun Iterable.sisteInntektsmeldingInntektId() = + lastOrNull { it.dokumentType == DokumentType.InntektsmeldingInntekt }?.id internal fun Iterable.tilSubsumsjonsformat() = map { Subsumsjonskontekst( @@ -78,9 +101,11 @@ class Dokumentsporing private constructor(val id: UUID, val dokumentType: Dokume if (other === this) return true return this.id == other.id && this.dokumentType == other.dokumentType } + override fun hashCode(): Int { return Objects.hash(id, dokumentType) } + override fun toString() = "$dokumentType ($id)" internal fun dto() = DokumentsporingDto( 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 528d4d3f11..d7b22a9a31 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 @@ -24,21 +24,51 @@ internal class ForkastetVedtaksperiode( internal fun List.overlapperMed(dagerFraInntektsmelding: DagerFraInntektsmelding) = perioder().any { dagerFraInntektsmelding.overlapperMed(it.periode()) } - internal fun harNyereForkastetPeriode(forkastede: Iterable, vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) = - Vedtaksperiode.harNyereForkastetPeriode(forkastede.perioder(), vedtaksperiode, aktivitetslogg) + internal fun harNyereForkastetPeriode( + forkastede: Iterable, + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) = + Vedtaksperiode.harNyereForkastetPeriode( + forkastede.perioder(), + vedtaksperiode, + aktivitetslogg + ) - internal fun harOverlappendeForkastetPeriode(forkastede: Iterable, vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) = - Vedtaksperiode.harOverlappendeForkastetPeriode(forkastede.perioder(), vedtaksperiode, aktivitetslogg) + internal fun harOverlappendeForkastetPeriode( + forkastede: Iterable, + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) = + Vedtaksperiode.harOverlappendeForkastetPeriode( + forkastede.perioder(), + vedtaksperiode, + aktivitetslogg + ) - internal fun forlengerForkastet(forkastede: Iterable, aktivitetslogg: IAktivitetslogg, vedtaksperiode: Vedtaksperiode) = + internal fun forlengerForkastet( + forkastede: Iterable, + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Vedtaksperiode + ) = Vedtaksperiode.forlengerForkastet(forkastede.perioder(), aktivitetslogg, vedtaksperiode) - internal fun Iterable.slåSammenSykdomstidslinjer(sykdomstidslinje: Sykdomstidslinje) = perioder().slåSammenForkastedeSykdomstidslinjer(sykdomstidslinje) + internal fun Iterable.slåSammenSykdomstidslinjer(sykdomstidslinje: Sykdomstidslinje) = + perioder().slåSammenForkastedeSykdomstidslinjer(sykdomstidslinje) - internal fun harKortGapTilForkastet(forkastede: Iterable, aktivitetslogg: IAktivitetslogg, vedtaksperiode: Vedtaksperiode) = - Vedtaksperiode.harKortGapTilForkastet(forkastede.perioder(), aktivitetslogg, vedtaksperiode) + internal fun harKortGapTilForkastet( + forkastede: Iterable, + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Vedtaksperiode + ) = + Vedtaksperiode.harKortGapTilForkastet( + forkastede.perioder(), + aktivitetslogg, + vedtaksperiode + ) - internal fun Iterable.erForkastet(vedtaksperiodeId: UUID) = perioder().inneholder(vedtaksperiodeId) + internal fun Iterable.erForkastet(vedtaksperiodeId: UUID) = + perioder().inneholder(vedtaksperiodeId) internal fun hørerTilArbeidsgiverperiode( forkastede: List, diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/MinimumSykdomsgradsvurdering.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/MinimumSykdomsgradsvurdering.kt index 6b7567e285..3b3c6b69e4 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/MinimumSykdomsgradsvurdering.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/MinimumSykdomsgradsvurdering.kt @@ -39,7 +39,8 @@ internal class MinimumSykdomsgradsvurdering(private val perioderMedMinimumSykdom internal companion object { fun gjenopprett(dto: MinimumSykdomsgradVurderingInnDto) = MinimumSykdomsgradsvurdering( - perioderMedMinimumSykdomsgradVurdertOK = dto.perioder.map { Periode.gjenopprett(it) }.toMutableSet() + perioderMedMinimumSykdomsgradVurdertOK = dto.perioder.map { Periode.gjenopprett(it) } + .toMutableSet() ) } -} \ 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 ecfb349d25..26f33e7bae 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 @@ -1,16 +1,16 @@ package no.nav.helse.person import java.time.LocalDate -import no.nav.helse.forrigeDag -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.dto.ArbeidsforholdDto import no.nav.helse.dto.ArbeidsgiverOpptjeningsgrunnlagDto import no.nav.helse.dto.deserialisering.OpptjeningInnDto import no.nav.helse.dto.serialisering.OpptjeningUtDto import no.nav.helse.etterlevelse.`§ 8-2 ledd 1` +import no.nav.helse.forrigeDag +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.person.Opptjening.ArbeidsgiverOpptjeningsgrunnlag import no.nav.helse.person.Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Arbeidsforhold.Companion.ansattVedSkjæringstidspunkt import no.nav.helse.person.Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Arbeidsforhold.Companion.opptjeningsperiode @@ -44,7 +44,8 @@ internal class Opptjening private constructor( arbeidsforhold.any { it.ansattVedSkjæringstidspunkt(orgnummer, skjæringstidspunkt) } internal fun opptjeningsdager() = opptjeningsdager - internal fun harTilstrekkeligAntallOpptjeningsdager(): Boolean = opptjeningsdager >= TILSTREKKELIG_ANTALL_OPPTJENINGSDAGER + internal fun harTilstrekkeligAntallOpptjeningsdager(): Boolean = + opptjeningsdager >= TILSTREKKELIG_ANTALL_OPPTJENINGSDAGER internal fun erOppfylt(): Boolean = harTilstrekkeligAntallOpptjeningsdager() @@ -55,7 +56,9 @@ internal class Opptjening private constructor( } internal fun opptjeningFom() = opptjeningsperiode.start - internal fun startdatoFor(orgnummer: String) = arbeidsforhold.startdatoFor(orgnummer, skjæringstidspunkt) + internal fun startdatoFor(orgnummer: String) = + arbeidsforhold.startdatoFor(orgnummer, skjæringstidspunkt) + internal fun overstyrArbeidsforhold(hendelse: OverstyrArbeidsforhold): Opptjening { return hendelse.overstyr(this) } @@ -68,9 +71,14 @@ internal class Opptjening private constructor( return Opptjening.nyOpptjening(arbeidsforhold.aktiver(orgnummer), skjæringstidspunkt) } - internal data class ArbeidsgiverOpptjeningsgrunnlag(val orgnummer: String, val ansattPerioder: List) { + internal data class ArbeidsgiverOpptjeningsgrunnlag( + val orgnummer: String, + val ansattPerioder: List + ) { internal fun ansattVedSkjæringstidspunkt(orgnummer: String, skjæringstidspunkt: LocalDate) = - this.orgnummer == orgnummer && ansattPerioder.ansattVedSkjæringstidspunkt(skjæringstidspunkt) + this.orgnummer == orgnummer && ansattPerioder.ansattVedSkjæringstidspunkt( + skjæringstidspunkt + ) private fun aktiver(orgnummer: String): ArbeidsgiverOpptjeningsgrunnlag { if (orgnummer != this.orgnummer) return this @@ -83,7 +91,8 @@ internal class Opptjening private constructor( } private fun inngårIOpptjening(opptjeningsperiode: Periode): ArbeidsgiverOpptjeningsgrunnlag? { - val perioder = ansattPerioder.filter { it.inngårIOpptjening(opptjeningsperiode) }.takeUnless { it.isEmpty() } ?: return null + val perioder = ansattPerioder.filter { it.inngårIOpptjening(opptjeningsperiode) } + .takeUnless { it.isEmpty() } ?: return null return ArbeidsgiverOpptjeningsgrunnlag(this.orgnummer, perioder) } @@ -94,7 +103,8 @@ internal class Opptjening private constructor( ) { val ansettelseperiode = ansattFom til (ansattTom ?: LocalDate.MAX) - internal fun gjelder(skjæringstidspunkt: LocalDate) = ansattFom <= skjæringstidspunkt && (ansattTom == null || ansattTom >= skjæringstidspunkt) + internal fun gjelder(skjæringstidspunkt: LocalDate) = + ansattFom <= skjæringstidspunkt && (ansattTom == null || ansattTom >= skjæringstidspunkt) private fun periode(skjæringstidspunkt: LocalDate): Periode? { if (deaktivert) return null @@ -103,9 +113,11 @@ internal class Opptjening private constructor( return ansettelseperiode.subset(opptjeningsperiode) } - internal fun deaktiver() = Arbeidsforhold(ansattFom = ansattFom, ansattTom = ansattTom, deaktivert = true) + internal fun deaktiver() = + Arbeidsforhold(ansattFom = ansattFom, ansattTom = ansattTom, deaktivert = true) - internal fun aktiver() = Arbeidsforhold(ansattFom = ansattFom, ansattTom = ansattTom, deaktivert = false) + internal fun aktiver() = + Arbeidsforhold(ansattFom = ansattFom, ansattTom = ansattTom, deaktivert = false) internal fun inngårIOpptjening(opptjeningsperiode: Periode): Boolean { return deaktivert || this.ansettelseperiode.overlapperMed(opptjeningsperiode) @@ -118,14 +130,17 @@ internal class Opptjening private constructor( .mapNotNull { it.periode(skjæringstidspunkt) } .sortedByDescending { it.endInclusive } val dagenFør = skjæringstidspunkt.forrigeDag.somPeriode() - if (grunnlag.firstOrNull()?.erRettFør(skjæringstidspunkt) != true) return dagenFør + if (grunnlag.firstOrNull() + ?.erRettFør(skjæringstidspunkt) != true) return dagenFør return grunnlag.fold(dagenFør) { resultat, periode -> if (!resultat.overlapperMed(periode) && !periode.erRettFør(resultat)) resultat else resultat + periode } } - internal fun Collection.ansattVedSkjæringstidspunkt(skjæringstidspunkt: LocalDate) = any { it.gjelder(skjæringstidspunkt) } + internal fun Collection.ansattVedSkjæringstidspunkt( + skjæringstidspunkt: LocalDate + ) = any { it.gjelder(skjæringstidspunkt) } internal fun Iterable.toEtterlevelseMap(orgnummer: String) = map { mapOf( @@ -152,10 +167,16 @@ internal class Opptjening private constructor( } companion object { - internal fun List.aktiver(orgnummer: String) = map { it.aktiver(orgnummer) } - internal fun List.deaktiver(orgnummer: String) = map { it.deaktiver(orgnummer) } + internal fun List.aktiver(orgnummer: String) = + map { it.aktiver(orgnummer) } - internal fun List.startdatoFor(orgnummer: String, skjæringstidspunkt: LocalDate) = this + internal fun List.deaktiver(orgnummer: String) = + map { it.deaktiver(orgnummer) } + + internal fun List.startdatoFor( + orgnummer: String, + skjæringstidspunkt: LocalDate + ) = this .singleOrNull { it.orgnummer == orgnummer } ?.ansattPerioder ?.opptjeningsperiode(skjæringstidspunkt) @@ -163,8 +184,10 @@ internal class Opptjening private constructor( internal fun List.opptjeningsperiode(skjæringstidspunkt: LocalDate) = flatMap { it.ansattPerioder }.opptjeningsperiode(skjæringstidspunkt) + internal fun List.inngårIOpptjening(opptjeningsperiode: Periode) = mapNotNull { it.inngårIOpptjening(opptjeningsperiode) } + internal fun List.arbeidsforholdForJurist() = flatMap { it.ansattPerioder.toEtterlevelseMap(it.orgnummer) } @@ -193,7 +216,10 @@ internal class Opptjening private constructor( ) } - internal fun nyOpptjening(grunnlag: List, skjæringstidspunkt: LocalDate): Opptjening { + internal fun nyOpptjening( + grunnlag: List, + skjæringstidspunkt: LocalDate + ): Opptjening { val opptjeningsperiode = grunnlag.opptjeningsperiode(skjæringstidspunkt) val arbeidsforhold = grunnlag.inngårIOpptjening(opptjeningsperiode) val opptjening = Opptjening(skjæringstidspunkt, arbeidsforhold, opptjeningsperiode) @@ -209,4 +235,4 @@ internal class Opptjening private constructor( ) } -internal data class OpptjeningView(val arbeidsforhold: List) \ No newline at end of file +internal data class OpptjeningView(val arbeidsforhold: List) 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 f71d209917..65404ac7c2 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 @@ -3,6 +3,7 @@ package no.nav.helse.person import java.time.LocalDate import java.time.LocalDateTime import java.util.UUID +import kotlin.math.roundToInt import no.nav.helse.Alder import no.nav.helse.Personidentifikator import no.nav.helse.Toggle @@ -83,7 +84,6 @@ import no.nav.helse.person.view.PersonView import no.nav.helse.utbetalingstidslinje.ArbeidsgiverRegler import no.nav.helse.utbetalingstidslinje.ArbeidsgiverRegler.Companion.NormalArbeidstaker import no.nav.helse.utbetalingstidslinje.Feriepengeberegner -import kotlin.math.roundToInt class Person private constructor( personidentifikator: Personidentifikator, @@ -164,14 +164,15 @@ class Person private constructor( private val observers = mutableListOf() internal fun view() = PersonView( - arbeidsgivere = arbeidsgivere.map{it.view()}, + arbeidsgivere = arbeidsgivere.map { it.view() }, vilkårsgrunnlaghistorikk = vilkårsgrunnlagHistorikk.view() ) fun håndter(sykmelding: Sykmelding, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler sykmelding") tidligereBehandlinger(sykmelding.behandlingsporing, aktivitetslogg, sykmelding.periode()) - val arbeidsgiver = finnEllerOpprettArbeidsgiver(sykmelding.behandlingsporing, aktivitetslogg) + val arbeidsgiver = + finnEllerOpprettArbeidsgiver(sykmelding.behandlingsporing, aktivitetslogg) arbeidsgiver.håndter(sykmelding, aktivitetslogg) håndterGjenoppta(sykmelding, aktivitetslogg) } @@ -184,16 +185,25 @@ class Person private constructor( håndterGjenoppta(avbruttSøknad, aktivitetslogg) } - fun håndter(forkastSykmeldingsperioder: ForkastSykmeldingsperioder, aktivitetslogg: IAktivitetslogg) { + fun håndter( + forkastSykmeldingsperioder: ForkastSykmeldingsperioder, + aktivitetslogg: IAktivitetslogg + ) { registrer(aktivitetslogg, "Behandler forkasting av sykmeldingsperioder") - finnArbeidsgiver(forkastSykmeldingsperioder.behandlingsporing, aktivitetslogg).håndter(forkastSykmeldingsperioder, aktivitetslogg) + finnArbeidsgiver(forkastSykmeldingsperioder.behandlingsporing, aktivitetslogg).håndter( + forkastSykmeldingsperioder, + aktivitetslogg + ) gjenopptaBehandling(aktivitetslogg) håndterGjenoppta(forkastSykmeldingsperioder, aktivitetslogg) } fun håndter(anmodningOmForkasting: AnmodningOmForkasting, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler anmodning om forkasting") - finnArbeidsgiver(anmodningOmForkasting.behandlingsporing, aktivitetslogg).håndter(anmodningOmForkasting, aktivitetslogg) + finnArbeidsgiver(anmodningOmForkasting.behandlingsporing, aktivitetslogg).håndter( + anmodningOmForkasting, + aktivitetslogg + ) håndterGjenoppta(anmodningOmForkasting, aktivitetslogg) } @@ -208,7 +218,8 @@ class Person private constructor( fun håndter(inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler inntektsmelding") - val arbeidsgiver = finnEllerOpprettArbeidsgiver(inntektsmelding.behandlingsporing, aktivitetslogg) + val arbeidsgiver = + finnEllerOpprettArbeidsgiver(inntektsmelding.behandlingsporing, aktivitetslogg) arbeidsgiver.håndter(inntektsmelding, aktivitetslogg) arbeidsgiver.inntektsmeldingFerdigbehandlet(inntektsmelding, aktivitetslogg) håndterGjenoppta(inntektsmelding, aktivitetslogg) @@ -223,26 +234,39 @@ class Person private constructor( fun håndter(melding: MinimumSykdomsgradsvurderingMelding, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler minimum sykdomsgradvurdering") melding.oppdater(this.minimumSykdomsgradsvurdering) - this.igangsettOverstyring(Revurderingseventyr.Companion.minimumSykdomsgradVurdert(melding, melding.periodeForEndring()), aktivitetslogg) + this.igangsettOverstyring( + Revurderingseventyr.Companion.minimumSykdomsgradVurdert( + melding, + melding.periodeForEndring() + ), aktivitetslogg + ) håndterGjenoppta(melding, aktivitetslogg) } - private fun tidligereBehandlinger(behandlingsporing: Behandlingsporing.Arbeidsgiver, aktivitetslogg: IAktivitetslogg, periode: Periode) { + private fun tidligereBehandlinger( + behandlingsporing: Behandlingsporing.Arbeidsgiver, + aktivitetslogg: IAktivitetslogg, + periode: Periode + ) { val cutoff = periode.start.minusMonths(6) - val andreBehandledeVedtaksperioder = tidligereBehandlinger.flatMap { it.vedtaksperioderEtter(cutoff) } + val andreBehandledeVedtaksperioder = + tidligereBehandlinger.flatMap { it.vedtaksperioderEtter(cutoff) } if (andreBehandledeVedtaksperioder.isNotEmpty()) { aktivitetslogg.funksjonellFeil(Varselkode.RV_AN_5) val msg = andreBehandledeVedtaksperioder.map { "vedtaksperiode(${it.periode()})" } - aktivitetslogg.info("""hendelse: ${behandlingsporing::class.java.simpleName} ($periode) kaster ut personen + aktivitetslogg.info( + """hendelse: ${behandlingsporing::class.java.simpleName} ($periode) kaster ut personen | tidligere behandlede identer: ${tidligereBehandlinger.map { it.personidentifikator }} | tidligere behandlede perioder: ${msg.joinToString { it }} - | cutoff: $cutoff""".trimMargin()) + | cutoff: $cutoff""".trimMargin() + ) } } - private fun vedtaksperioderEtter(dato: LocalDate) = arbeidsgivere.flatMap { it.vedtaksperioderEtter(dato) } + private fun vedtaksperioderEtter(dato: LocalDate) = + arbeidsgivere.flatMap { it.vedtaksperioderEtter(dato) } fun håndter(dødsmelding: Dødsmelding, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler dødsmelding") @@ -251,7 +275,11 @@ class Person private constructor( håndterGjenoppta(dødsmelding, aktivitetslogg) } - fun håndter(identOpphørt: IdentOpphørt, aktivitetslogg: IAktivitetslogg, nyPersonidentifikator: Personidentifikator) { + fun håndter( + identOpphørt: IdentOpphørt, + aktivitetslogg: IAktivitetslogg, + nyPersonidentifikator: Personidentifikator + ) { registrer(aktivitetslogg, "Behandler ident opphørt") aktivitetslogg.info("Person har byttet ident til $nyPersonidentifikator") this.personidentifikator = nyPersonidentifikator @@ -265,16 +293,23 @@ class Person private constructor( håndterGjenoppta(infotrygdendring, aktivitetslogg) } - fun håndter(utbetalingshistorikkEtterInfotrygdendring: UtbetalingshistorikkEtterInfotrygdendring, aktivitetslogg: IAktivitetslogg) = håndterHistorikkFraInfotrygd(utbetalingshistorikkEtterInfotrygdendring, aktivitetslogg) { + fun håndter( + utbetalingshistorikkEtterInfotrygdendring: UtbetalingshistorikkEtterInfotrygdendring, + aktivitetslogg: IAktivitetslogg + ) = håndterHistorikkFraInfotrygd(utbetalingshistorikkEtterInfotrygdendring, aktivitetslogg) { utbetalingshistorikkEtterInfotrygdendring.oppdaterHistorikk(aktivitetslogg, it) } fun håndter(utbetalingshistorikk: Utbetalingshistorikk, aktivitetslogg: IAktivitetslogg) = håndterHistorikkFraInfotrygd(utbetalingshistorikk, aktivitetslogg) { - utbetalingshistorikk.oppdaterHistorikk(aktivitetslogg, it) - } + utbetalingshistorikk.oppdaterHistorikk(aktivitetslogg, it) + } - private fun håndterHistorikkFraInfotrygd(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg, oppdatertHistorikk: (infotrygdhistorikk: Infotrygdhistorikk) -> Boolean) { + private fun håndterHistorikkFraInfotrygd( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg, + oppdatertHistorikk: (infotrygdhistorikk: Infotrygdhistorikk) -> Boolean + ) { registrer(aktivitetslogg, "Behandler historikk fra infotrygd") oppdatertHistorikk(infotrygdhistorikk) sykdomshistorikkEndret() @@ -288,13 +323,21 @@ class Person private constructor( if (!infotrygdhistorikk.harHistorikk()) return val hendelseId = infotrygdhistorikk.siste.hendelseId val perioder = infotrygdhistorikk.siste.perioder - val event = alleVedtaksperioder.fold(PersonObserver.OverlappendeInfotrygdperioder(emptyList(), hendelseId.toString())) { result, vedtaksperiode -> + val event = alleVedtaksperioder.fold( + PersonObserver.OverlappendeInfotrygdperioder( + emptyList(), + hendelseId.toString() + ) + ) { result, vedtaksperiode -> vedtaksperiode.overlappendeInfotrygdperioder(result, perioder) } emitOverlappendeInfotrygdperioder(event) } - fun håndter(utbetalingshistorikk: UtbetalingshistorikkForFeriepenger, aktivitetslogg: IAktivitetslogg) { + fun håndter( + utbetalingshistorikk: UtbetalingshistorikkForFeriepenger, + aktivitetslogg: IAktivitetslogg + ) { registrer(aktivitetslogg, "Behandler utbetalingshistorikk for feriepenger") if (Toggle.SendFeriepengeOppdrag.enabled) { @@ -312,11 +355,14 @@ class Person private constructor( val feriepengeberegner = Feriepengeberegner( alder = alder, opptjeningsår = utbetalingshistorikk.opptjeningsår, - grunnlagFraInfotrygd = utbetalingshistorikk.grunnlagForFeriepenger(DATO_FOR_SISTE_FERIEPENGEKJØRING_I_INFOTRYGD), + grunnlagFraInfotrygd = utbetalingshistorikk.grunnlagForFeriepenger( + DATO_FOR_SISTE_FERIEPENGEKJØRING_I_INFOTRYGD + ), grunnlagFraSpleis = grunnlagForFeriepenger() ) - val feriepengepengebeløpPersonUtbetaltAvInfotrygd = utbetalingshistorikk.utbetalteFeriepengerTilPerson() + val feriepengepengebeløpPersonUtbetaltAvInfotrygd = + utbetalingshistorikk.utbetalteFeriepengerTilPerson() val beregnetFeriepengebeløpPersonInfotrygd = feriepengeberegner.beregnFeriepengerForInfotrygdPerson().roundToInt() @@ -347,55 +393,86 @@ class Person private constructor( fun håndter(ytelser: Ytelser, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler historiske utbetalinger og inntekter") - finnArbeidsgiver(ytelser.behandlingsporing, aktivitetslogg).håndter(ytelser, aktivitetslogg, infotrygdhistorikk) + finnArbeidsgiver(ytelser.behandlingsporing, aktivitetslogg).håndter( + ytelser, + aktivitetslogg, + infotrygdhistorikk + ) håndterGjenoppta(ytelser, aktivitetslogg) } fun håndter(utbetalingsgodkjenning: Utbetalingsgodkjenning, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler utbetalingsgodkjenning") - finnArbeidsgiver(utbetalingsgodkjenning.behandlingsporing, aktivitetslogg).håndter(utbetalingsgodkjenning, aktivitetslogg) + finnArbeidsgiver(utbetalingsgodkjenning.behandlingsporing, aktivitetslogg).håndter( + utbetalingsgodkjenning, + aktivitetslogg + ) håndterGjenoppta(utbetalingsgodkjenning, aktivitetslogg) } fun håndter(vedtakFattet: VedtakFattet, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler vedtak fattet") - finnArbeidsgiver(vedtakFattet.behandlingsporing, aktivitetslogg).håndter(vedtakFattet, aktivitetslogg) + finnArbeidsgiver(vedtakFattet.behandlingsporing, aktivitetslogg).håndter( + vedtakFattet, + aktivitetslogg + ) håndterGjenoppta(vedtakFattet, aktivitetslogg) } fun håndter(kanIkkeBehandlesHer: KanIkkeBehandlesHer, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler kan ikke behandles her") - finnArbeidsgiver(kanIkkeBehandlesHer.behandlingsporing, aktivitetslogg).håndter(kanIkkeBehandlesHer, aktivitetslogg) + finnArbeidsgiver(kanIkkeBehandlesHer.behandlingsporing, aktivitetslogg).håndter( + kanIkkeBehandlesHer, + aktivitetslogg + ) håndterGjenoppta(kanIkkeBehandlesHer, aktivitetslogg) } - fun håndter(sykepengegrunnlagForArbeidsgiver: SykepengegrunnlagForArbeidsgiver, aktivitetslogg: IAktivitetslogg) { + fun håndter( + sykepengegrunnlagForArbeidsgiver: SykepengegrunnlagForArbeidsgiver, + aktivitetslogg: IAktivitetslogg + ) { registrer(aktivitetslogg, "Behandler sykepengegrunnlag for arbeidsgiver") - finnArbeidsgiver(sykepengegrunnlagForArbeidsgiver.behandlingsporing, aktivitetslogg).håndter(sykepengegrunnlagForArbeidsgiver, aktivitetslogg) + finnArbeidsgiver( + sykepengegrunnlagForArbeidsgiver.behandlingsporing, + aktivitetslogg + ).håndter(sykepengegrunnlagForArbeidsgiver, aktivitetslogg) håndterGjenoppta(sykepengegrunnlagForArbeidsgiver, aktivitetslogg) } fun håndter(vilkårsgrunnlag: Vilkårsgrunnlag, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler vilkårsgrunnlag") - finnArbeidsgiver(vilkårsgrunnlag.behandlingsporing, aktivitetslogg).håndter(vilkårsgrunnlag, aktivitetslogg) + finnArbeidsgiver(vilkårsgrunnlag.behandlingsporing, aktivitetslogg).håndter( + vilkårsgrunnlag, + aktivitetslogg + ) håndterGjenoppta(vilkårsgrunnlag, aktivitetslogg) } fun håndter(simulering: Simulering, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler simulering") - finnArbeidsgiver(simulering.behandlingsporing, aktivitetslogg).håndter(simulering, aktivitetslogg) + finnArbeidsgiver(simulering.behandlingsporing, aktivitetslogg).håndter( + simulering, + aktivitetslogg + ) håndterGjenoppta(simulering, aktivitetslogg) } fun håndter(utbetaling: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler utbetaling") - finnArbeidsgiver(utbetaling.behandlingsporing, aktivitetslogg).håndter(utbetaling, aktivitetslogg) + finnArbeidsgiver(utbetaling.behandlingsporing, aktivitetslogg).håndter( + utbetaling, + aktivitetslogg + ) håndterGjenoppta(utbetaling, aktivitetslogg) } fun håndter(påminnelse: Utbetalingpåminnelse, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler utbetalingpåminnelse") - finnArbeidsgiver(påminnelse.behandlingsporing, aktivitetslogg).håndter(påminnelse, aktivitetslogg) + finnArbeidsgiver(påminnelse.behandlingsporing, aktivitetslogg).håndter( + påminnelse, + aktivitetslogg + ) håndterGjenoppta(påminnelse, aktivitetslogg) } @@ -409,7 +486,10 @@ class Person private constructor( fun håndter(påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { try { registrer(aktivitetslogg, "Behandler påminnelse") - if (finnArbeidsgiver(påminnelse.behandlingsporing, aktivitetslogg).håndter(påminnelse, aktivitetslogg)) return håndterGjenoppta(påminnelse, aktivitetslogg) + if (finnArbeidsgiver(påminnelse.behandlingsporing, aktivitetslogg).håndter( + påminnelse, + aktivitetslogg + )) return håndterGjenoppta(påminnelse, aktivitetslogg) } catch (err: Aktivitetslogg.AktivitetException) { aktivitetslogg.funksjonellFeil(RV_AG_1) } @@ -419,7 +499,10 @@ class Person private constructor( fun håndter(hendelse: OverstyrTidslinje, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler Overstyr tidslinje") - finnArbeidsgiver(hendelse.behandlingsporing, aktivitetslogg).håndter(hendelse, aktivitetslogg) + finnArbeidsgiver(hendelse.behandlingsporing, aktivitetslogg).håndter( + hendelse, + aktivitetslogg + ) håndterGjenoppta(hendelse, aktivitetslogg) } @@ -450,13 +533,19 @@ class Person private constructor( fun håndter(hendelse: AnnullerUtbetaling, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler annulleringforespørsel") - finnArbeidsgiver(hendelse.behandlingsporing, aktivitetslogg).håndter(hendelse, aktivitetslogg) + finnArbeidsgiver(hendelse.behandlingsporing, aktivitetslogg).håndter( + hendelse, + aktivitetslogg + ) håndterGjenoppta(hendelse, aktivitetslogg) } fun håndter(hendelse: Grunnbeløpsregulering, aktivitetslogg: IAktivitetslogg) { registrer(aktivitetslogg, "Behandler grunnbeløpsendring") - if (arbeidsgivere.håndter(hendelse, aktivitetslogg)) return håndterGjenoppta(hendelse, aktivitetslogg) + if (arbeidsgivere.håndter(hendelse, aktivitetslogg)) return håndterGjenoppta( + hendelse, + aktivitetslogg + ) observers.forEach { hendelse.sykefraværstilfelleIkkeFunnet(it) } } @@ -468,12 +557,32 @@ class Person private constructor( observers.forEach { it.annullering(event) } } - internal fun vedtaksperiodePåminnet(vedtaksperiodeId: UUID, organisasjonsnummer: String, påminnelse: Påminnelse) { - observers.forEach { it.vedtaksperiodePåminnet(vedtaksperiodeId, organisasjonsnummer, påminnelse) } + internal fun vedtaksperiodePåminnet( + vedtaksperiodeId: UUID, + organisasjonsnummer: String, + påminnelse: Påminnelse + ) { + observers.forEach { + it.vedtaksperiodePåminnet( + vedtaksperiodeId, + organisasjonsnummer, + påminnelse + ) + } } - internal fun vedtaksperiodeIkkePåminnet(vedtaksperiodeId: UUID, organisasjonsnummer: String, tilstandType: TilstandType) { - observers.forEach { it.vedtaksperiodeIkkePåminnet(vedtaksperiodeId, organisasjonsnummer, tilstandType) } + internal fun vedtaksperiodeIkkePåminnet( + vedtaksperiodeId: UUID, + organisasjonsnummer: String, + tilstandType: TilstandType + ) { + observers.forEach { + it.vedtaksperiodeIkkePåminnet( + vedtaksperiodeId, + organisasjonsnummer, + tilstandType + ) + } } internal fun vedtaksperiodeForkastet(event: PersonObserver.VedtaksperiodeForkastetEvent) { @@ -584,20 +693,43 @@ class Person private constructor( aktivitetslogg.info(melding) } - private fun finnEllerOpprettArbeidsgiver(behandlingsporing: Behandlingsporing.Arbeidsgiver, aktivitetslogg: IAktivitetslogg) = - finnEllerOpprettArbeidsgiver(behandlingsporing.organisasjonsnummer.tilYrkesaktivitet(), aktivitetslogg) + private fun finnEllerOpprettArbeidsgiver( + behandlingsporing: Behandlingsporing.Arbeidsgiver, + aktivitetslogg: IAktivitetslogg + ) = + finnEllerOpprettArbeidsgiver( + behandlingsporing.organisasjonsnummer.tilYrkesaktivitet(), + aktivitetslogg + ) - private fun finnEllerOpprettArbeidsgiver(yrkesaktivitet: Yrkesaktivitet, aktivitetslogg: IAktivitetslogg) = + private fun finnEllerOpprettArbeidsgiver( + yrkesaktivitet: Yrkesaktivitet, + aktivitetslogg: IAktivitetslogg + ) = _arbeidsgivere.finnEllerOpprett(yrkesaktivitet, aktivitetslogg) - private fun finnArbeidsgiver(behandlingsporing: Behandlingsporing.Arbeidsgiver, aktivitetslogg: IAktivitetslogg) = + private fun finnArbeidsgiver( + behandlingsporing: Behandlingsporing.Arbeidsgiver, + aktivitetslogg: IAktivitetslogg + ) = behandlingsporing.organisasjonsnummer.tilYrkesaktivitet().let { yrkesaktivitet -> - arbeidsgivere.finn(yrkesaktivitet) ?: aktivitetslogg.logiskFeil("Finner ikke arbeidsgiver") + arbeidsgivere.finn(yrkesaktivitet) + ?: aktivitetslogg.logiskFeil("Finner ikke arbeidsgiver") } - private fun MutableList.finnEllerOpprett(yrkesaktivitet: Yrkesaktivitet, aktivitetslogg: IAktivitetslogg) = - finn(yrkesaktivitet) ?: Arbeidsgiver(this@Person, yrkesaktivitet, jurist).also { arbeidsgiver -> - aktivitetslogg.info("Ny arbeidsgiver med organisasjonsnummer %s for denne personen", yrkesaktivitet) + private fun MutableList.finnEllerOpprett( + yrkesaktivitet: Yrkesaktivitet, + aktivitetslogg: IAktivitetslogg + ) = + finn(yrkesaktivitet) ?: Arbeidsgiver( + this@Person, + yrkesaktivitet, + jurist + ).also { arbeidsgiver -> + aktivitetslogg.info( + "Ny arbeidsgiver med organisasjonsnummer %s for denne personen", + yrkesaktivitet + ) add(arbeidsgiver) } @@ -605,11 +737,22 @@ class Person private constructor( arbeidsgivere.nåværendeVedtaksperioder(filter).sorted() internal fun avventerSøknad(periode: Periode) = arbeidsgivere.avventerSøknad(periode) - internal fun vedtaksperioder(filter: VedtaksperiodeFilter) = arbeidsgivere.vedtaksperioder(filter).sorted() - internal fun førsteFraværsdager(skjæringstidspunkt: LocalDate) = arbeidsgivere.førsteFraværsdager(skjæringstidspunkt) + internal fun vedtaksperioder(filter: VedtaksperiodeFilter) = + arbeidsgivere.vedtaksperioder(filter).sorted() - internal fun forespurtInntektOgRefusjonsopplysninger(organisasjonsnummer: String, skjæringstidspunkt: LocalDate, periode: Periode) = - vilkårsgrunnlagHistorikk.forespurtInntektOgRefusjonsopplysninger(organisasjonsnummer, skjæringstidspunkt, periode) + internal fun førsteFraværsdager(skjæringstidspunkt: LocalDate) = + arbeidsgivere.førsteFraværsdager(skjæringstidspunkt) + + internal fun forespurtInntektOgRefusjonsopplysninger( + organisasjonsnummer: String, + skjæringstidspunkt: LocalDate, + periode: Periode + ) = + vilkårsgrunnlagHistorikk.forespurtInntektOgRefusjonsopplysninger( + organisasjonsnummer, + skjæringstidspunkt, + periode + ) internal fun vilkårsgrunnlagFor(skjæringstidspunkt: LocalDate) = vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(skjæringstidspunkt) @@ -627,22 +770,36 @@ class Person private constructor( skatteopplysninger: Map, subsumsjonslogg: Subsumsjonslogg ): Inntektsgrunnlag { - skatteopplysninger.keys.forEach { orgnr -> finnEllerOpprettArbeidsgiver(orgnr.tilYrkesaktivitet(), aktivitetslogg) } // oppretter evt. nye arbeidsgivere + skatteopplysninger.keys.forEach { orgnr -> + finnEllerOpprettArbeidsgiver( + orgnr.tilYrkesaktivitet(), + aktivitetslogg + ) + } // oppretter evt. nye arbeidsgivere return Inntektsgrunnlag.opprett( alder, - arbeidsgivere.avklarSykepengegrunnlag(aktivitetslogg, skjæringstidspunkt, skatteopplysninger), + arbeidsgivere.avklarSykepengegrunnlag( + aktivitetslogg, + skjæringstidspunkt, + skatteopplysninger + ), skjæringstidspunkt, subsumsjonslogg ) } - internal fun beregnSkjæringstidspunkt() = arbeidsgivere.beregnSkjæringstidspunkt(infotrygdhistorikk) + internal fun beregnSkjæringstidspunkt() = + arbeidsgivere.beregnSkjæringstidspunkt(infotrygdhistorikk) internal fun sykdomshistorikkEndret() { arbeidsgivere.beregnSkjæringstidspunkter(infotrygdhistorikk) } - internal fun søppelbøtte(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg, filter: VedtaksperiodeFilter) { + internal fun søppelbøtte( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg, + filter: VedtaksperiodeFilter + ) { infotrygdhistorikk.tøm() Arbeidsgiver.søppelbøtte(arbeidsgivere, hendelse, aktivitetslogg, filter) sykdomshistorikkEndret() @@ -656,20 +813,46 @@ class Person private constructor( organisasjonsnummer: String ) { observers.forEach { - it.inntektsmeldingFørSøknad(PersonObserver.InntektsmeldingFørSøknadEvent(meldingsreferanseId, relevanteSykmeldingsperioder, organisasjonsnummer)) + it.inntektsmeldingFørSøknad( + PersonObserver.InntektsmeldingFørSøknadEvent( + meldingsreferanseId, + relevanteSykmeldingsperioder, + organisasjonsnummer + ) + ) } } - internal fun emitInntektsmeldingIkkeHåndtert(meldingsreferanseId: UUID, organisasjonsnummer: String, harPeriodeInnenfor16Dager: Boolean) { + internal fun emitInntektsmeldingIkkeHåndtert( + meldingsreferanseId: UUID, + organisasjonsnummer: String, + harPeriodeInnenfor16Dager: Boolean + ) { observers.forEach { - it.inntektsmeldingIkkeHåndtert(meldingsreferanseId, organisasjonsnummer, harPeriodeInnenfor16Dager) + it.inntektsmeldingIkkeHåndtert( + meldingsreferanseId, + organisasjonsnummer, + harPeriodeInnenfor16Dager + ) } } - internal fun emitInntektsmeldingIkkeHåndtert(hendelse: Inntektsmelding, organisasjonsnummer: String, harPeriodeInnenfor16Dager: Boolean) = - emitInntektsmeldingIkkeHåndtert(hendelse.metadata.meldingsreferanseId, organisasjonsnummer, harPeriodeInnenfor16Dager) + internal fun emitInntektsmeldingIkkeHåndtert( + hendelse: Inntektsmelding, + organisasjonsnummer: String, + harPeriodeInnenfor16Dager: Boolean + ) = + emitInntektsmeldingIkkeHåndtert( + hendelse.metadata.meldingsreferanseId, + organisasjonsnummer, + harPeriodeInnenfor16Dager + ) - internal fun emitInntektsmeldingHåndtert(meldingsreferanseId: UUID, vedtaksperiodeId: UUID, organisasjonsnummer: String) { + internal fun emitInntektsmeldingHåndtert( + meldingsreferanseId: UUID, + vedtaksperiodeId: UUID, + organisasjonsnummer: String + ) { observers.forEach { it.inntektsmeldingHåndtert(meldingsreferanseId, vedtaksperiodeId, organisasjonsnummer) } @@ -681,7 +864,11 @@ class Person private constructor( } } - internal fun emitSøknadHåndtert(meldingsreferanseId: UUID, vedtaksperiodeId: UUID, organisasjonsnummer: String) { + internal fun emitSøknadHåndtert( + meldingsreferanseId: UUID, + vedtaksperiodeId: UUID, + organisasjonsnummer: String + ) { observers.forEach { it.søknadHåndtert(meldingsreferanseId, vedtaksperiodeId, organisasjonsnummer) } @@ -702,7 +889,12 @@ class Person private constructor( nyeInntekter.forEach { inntekt -> finnEllerOpprettArbeidsgiver(inntekt.orgnummer.tilYrkesaktivitet(), aktivitetslogg) } - val nyttGrunnlag = grunnlag.tilkomneInntekterFraSøknaden(aktivitetslogg, periode, nyeInntekter, subsumsjonslogg) ?: return + val nyttGrunnlag = grunnlag.tilkomneInntekterFraSøknaden( + aktivitetslogg, + periode, + nyeInntekter, + subsumsjonslogg + ) ?: return nyttVilkårsgrunnlag(aktivitetslogg, nyttGrunnlag) } @@ -717,7 +909,12 @@ class Person private constructor( aktivitetslogg.info("Fant ikke vilkårsgrunnlag på skjæringstidspunkt $skjæringstidspunkt") return null } - val (nyttGrunnlag, eventyr) = grunnlag.nyeArbeidsgiverInntektsopplysninger(this, inntektsmelding, aktivitetslogg, subsumsjonslogg) + val (nyttGrunnlag, eventyr) = grunnlag.nyeArbeidsgiverInntektsopplysninger( + this, + inntektsmelding, + aktivitetslogg, + subsumsjonslogg + ) nyttVilkårsgrunnlag(aktivitetslogg, nyttGrunnlag) return eventyr } @@ -728,8 +925,14 @@ class Person private constructor( skjæringstidspunkt: LocalDate, subsumsjonslogg: Subsumsjonslogg ) { - val grunnlag = vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(skjæringstidspunkt) ?: return aktivitetslogg.funksjonellFeil(RV_VV_10) - val (nyttGrunnlag, eventyr) = grunnlag.overstyrArbeidsgiveropplysninger(this, hendelse, aktivitetslogg, subsumsjonslogg) + val grunnlag = vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(skjæringstidspunkt) + ?: return aktivitetslogg.funksjonellFeil(RV_VV_10) + val (nyttGrunnlag, eventyr) = grunnlag.overstyrArbeidsgiveropplysninger( + this, + hendelse, + aktivitetslogg, + subsumsjonslogg + ) nyttVilkårsgrunnlag(aktivitetslogg, nyttGrunnlag) igangsettOverstyring(eventyr, aktivitetslogg) } @@ -741,8 +944,13 @@ class Person private constructor( skjæringstidspunkt: LocalDate, subsumsjonslogg: Subsumsjonslogg ) { - val grunnlag = vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(skjæringstidspunkt) ?: return aktivitetslogg.funksjonellFeil(RV_VV_10) - val (nyttGrunnlag, eventyr) = grunnlag.skjønnsmessigFastsettelse(hendelse, aktivitetslogg, subsumsjonslogg) + val grunnlag = vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(skjæringstidspunkt) + ?: return aktivitetslogg.funksjonellFeil(RV_VV_10) + val (nyttGrunnlag, eventyr) = grunnlag.skjønnsmessigFastsettelse( + hendelse, + aktivitetslogg, + subsumsjonslogg + ) nyttVilkårsgrunnlag(aktivitetslogg, nyttGrunnlag) igangsettOverstyring(eventyr, aktivitetslogg) } @@ -753,9 +961,18 @@ class Person private constructor( skjæringstidspunkt: LocalDate, subsumsjonslogg: Subsumsjonslogg ) { - val grunnlag = vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(skjæringstidspunkt) ?: return aktivitetslogg.funksjonellFeil(RV_VV_10) - nyttVilkårsgrunnlag(aktivitetslogg, grunnlag.overstyrArbeidsforhold(hendelse, aktivitetslogg, subsumsjonslogg)) - igangsettOverstyring(Revurderingseventyr.Companion.arbeidsforhold(hendelse, skjæringstidspunkt), aktivitetslogg) + val grunnlag = vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(skjæringstidspunkt) + ?: return aktivitetslogg.funksjonellFeil(RV_VV_10) + nyttVilkårsgrunnlag( + aktivitetslogg, + grunnlag.overstyrArbeidsforhold(hendelse, aktivitetslogg, subsumsjonslogg) + ) + igangsettOverstyring( + Revurderingseventyr.Companion.arbeidsforhold( + hendelse, + skjæringstidspunkt + ), aktivitetslogg + ) } internal fun vilkårsprøvEtterNyInformasjonFraSaksbehandler( @@ -764,17 +981,28 @@ class Person private constructor( skjæringstidspunkt: LocalDate, subsumsjonslogg: Subsumsjonslogg ) { - val grunnlag = vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(skjæringstidspunkt) ?: return aktivitetslogg.funksjonellFeil(RV_VV_10) - grunnlag.grunnbeløpsregulering(hendelse, aktivitetslogg, subsumsjonslogg)?.let { grunnbeløpsregulert -> - nyttVilkårsgrunnlag(aktivitetslogg, grunnbeløpsregulert) - igangsettOverstyring(Revurderingseventyr.Companion.grunnbeløpsregulering(hendelse, skjæringstidspunkt), aktivitetslogg) - } + val grunnlag = vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(skjæringstidspunkt) + ?: return aktivitetslogg.funksjonellFeil(RV_VV_10) + grunnlag.grunnbeløpsregulering(hendelse, aktivitetslogg, subsumsjonslogg) + ?.let { grunnbeløpsregulert -> + nyttVilkårsgrunnlag(aktivitetslogg, grunnbeløpsregulert) + igangsettOverstyring( + Revurderingseventyr.Companion.grunnbeløpsregulering( + hendelse, + skjæringstidspunkt + ), aktivitetslogg + ) + } } - private fun nyttVilkårsgrunnlag(aktivitetslogg: IAktivitetslogg, vilkårsgrunnlag: VilkårsgrunnlagElement) { + private fun nyttVilkårsgrunnlag( + aktivitetslogg: IAktivitetslogg, + vilkårsgrunnlag: VilkårsgrunnlagElement + ) { aktivitetslogg.kontekst(vilkårsgrunnlag) vilkårsgrunnlagHistorikk.lagre(vilkårsgrunnlag) } + private var gjenopptaBehandlingNy = false internal fun gjenopptaBehandling(aktivitetslogg: IAktivitetslogg) { @@ -794,7 +1022,9 @@ class Person private constructor( private fun håndterVedtaksperiodeVenter(hendelse: Hendelse) { when (hendelse) { - is Sykmelding -> { /* Sykmelding fører ikke til endringer i tiltander, så sender ikke signal etter håndtering av den */ } + is Sykmelding -> { /* Sykmelding fører ikke til endringer i tiltander, så sender ikke signal etter håndtering av den */ + } + else -> { val nestemann = arbeidsgivere.nestemann() ?: return val eventer = arbeidsgivere.venter(nestemann) @@ -808,7 +1038,10 @@ class Person private constructor( observers.forEach { it.behandlingUtført() } } - internal fun igangsettOverstyring(revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg) { + internal fun igangsettOverstyring( + revurdering: Revurderingseventyr, + aktivitetslogg: IAktivitetslogg + ) { arbeidsgivere.igangsettOverstyring(revurdering, aktivitetslogg) revurdering.sendOverstyringIgangsattEvent(this) ryddOppVilkårsgrunnlag(aktivitetslogg) @@ -819,17 +1052,41 @@ class Person private constructor( vilkårsgrunnlagHistorikk.oppdaterHistorikk(aktivitetslogg, skjæringstidspunkter) } - internal fun nyVedtaksperiodeUtbetaling(organisasjonsnummer: String, utbetalingId: UUID, vedtaksperiodeId: UUID) { - observers.forEach { it.nyVedtaksperiodeUtbetaling(organisasjonsnummer, utbetalingId, vedtaksperiodeId) } + internal fun nyVedtaksperiodeUtbetaling( + organisasjonsnummer: String, + utbetalingId: UUID, + vedtaksperiodeId: UUID + ) { + observers.forEach { + it.nyVedtaksperiodeUtbetaling( + organisasjonsnummer, + utbetalingId, + vedtaksperiodeId + ) + } } - internal fun vedtaksperiodeOpprettet(vedtaksperiodeId: UUID, organisasjonsnummer: String, periode: Periode, skjæringstidspunkt: LocalDate, opprettet: LocalDateTime) { - val event = PersonObserver.VedtaksperiodeOpprettet(vedtaksperiodeId, organisasjonsnummer, periode, skjæringstidspunkt, opprettet) + internal fun vedtaksperiodeOpprettet( + vedtaksperiodeId: UUID, + organisasjonsnummer: String, + periode: Periode, + skjæringstidspunkt: LocalDate, + opprettet: LocalDateTime + ) { + val event = PersonObserver.VedtaksperiodeOpprettet( + vedtaksperiodeId, + organisasjonsnummer, + periode, + skjæringstidspunkt, + opprettet + ) observers.forEach { it.vedtaksperiodeOpprettet(event) } } internal fun erBehandletIInfotrygd(vedtaksperiode: Periode): Boolean { - return infotrygdhistorikk.harUtbetaltI(vedtaksperiode) || infotrygdhistorikk.harFerieI(vedtaksperiode) + return infotrygdhistorikk.harUtbetaltI(vedtaksperiode) || infotrygdhistorikk.harFerieI( + vedtaksperiode + ) } internal fun vedtaksperiodeAnnullert(vedtaksperiodeAnnullertEvent: PersonObserver.VedtaksperiodeAnnullertEvent) { @@ -838,12 +1095,18 @@ class Person private constructor( internal fun migrerUbrukteRefusjonsopplysninger(aktivitetslogg: IAktivitetslogg) { aktivitetslogg.info("Migrerer ubrukte refusjonsopplysninger") - arbeidsgivere.migrerUbrukteRefusjonsopplysninger(aktivitetslogg, infotrygdhistorikk.sisteUtbetalteDag()) + arbeidsgivere.migrerUbrukteRefusjonsopplysninger( + aktivitetslogg, + infotrygdhistorikk.sisteUtbetalteDag() + ) } internal fun migrerRefusjonsopplysningerPåBehandlinger(aktivitetslogg: IAktivitetslogg) { aktivitetslogg.info("Migrerer refusjonsopplysninger på behandlinger") - arbeidsgivere.migrerRefusjonsopplysningerPåBehandlinger(aktivitetslogg, ::vilkårsgrunnlagFor) + arbeidsgivere.migrerRefusjonsopplysningerPåBehandlinger( + aktivitetslogg, + ::vilkårsgrunnlagFor + ) } fun dto() = PersonUtDto( diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/PersonObserver.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/PersonObserver.kt index a571f743d6..2e846ba915 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/PersonObserver.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/PersonObserver.kt @@ -53,7 +53,7 @@ interface PersonObserver { ) data class Venteårsak( - val hva : String, + val hva: String, val hvorfor: String? ) } @@ -91,6 +91,7 @@ interface PersonObserver { } ) } + data class InntektsmeldingFørSøknadEvent( val inntektsmeldingId: UUID, val relevanteSykmeldingsperioder: List, @@ -190,6 +191,7 @@ interface PersonObserver { val organisasjonsnummer: String, val førsteFraværsdag: LocalDate ) + sealed class ForespurtOpplysning { companion object { @@ -232,16 +234,28 @@ interface PersonObserver { } } - data class Inntektsdata(val skjæringstidspunkt: LocalDate, val kilde: Inntektsopplysningstype, val beløp: Double) - enum class Inntektsopplysningstype{ + data class Inntektsdata( + val skjæringstidspunkt: LocalDate, + val kilde: Inntektsopplysningstype, + val beløp: Double + ) + + enum class Inntektsopplysningstype { INNTEKTSMELDING, SAKSBEHANDLER } + data class Inntekt(val forslag: Inntektsdata?) : ForespurtOpplysning() - data class FastsattInntekt(val fastsattInntekt: no.nav.helse.økonomi.Inntekt) : ForespurtOpplysning() + data class FastsattInntekt(val fastsattInntekt: no.nav.helse.økonomi.Inntekt) : + ForespurtOpplysning() + object Arbeidsgiverperiode : ForespurtOpplysning() data class Refusjon(val forslag: List) : ForespurtOpplysning() { - data class Refusjonsforslag(val fom: LocalDate, val tom: LocalDate?, val månedligBeløp: Double) + data class Refusjonsforslag( + val fom: LocalDate, + val tom: LocalDate?, + val månedligBeløp: Double + ) } data class UtbetalingAnnullertEvent( @@ -256,6 +270,7 @@ interface PersonObserver { val saksbehandlerEpost: String, val saksbehandlerIdent: String ) + data class UtbetalingEndretEvent( val organisasjonsnummer: String, val utbetalingId: UUID, @@ -521,6 +536,7 @@ interface PersonObserver { Omgjøring, Revurdering } + data class Kilde( val meldingsreferanseId: UUID, val innsendt: LocalDateTime, @@ -540,17 +556,37 @@ interface PersonObserver { val fastsatt: String val omregnetÅrsinntekt: Double } - data class FastsattIInfotrygd(override val omregnetÅrsinntekt: Double) : Sykepengegrunnlagsfakta { + + data class FastsattIInfotrygd(override val omregnetÅrsinntekt: Double) : + Sykepengegrunnlagsfakta { override val fastsatt = "IInfotrygd" } - data class FastsattEtterHovedregel(override val omregnetÅrsinntekt: Double, val sykepengegrunnlag: Double, val `6G`: Double, val arbeidsgivere: List) : Sykepengegrunnlagsfakta { + + data class FastsattEtterHovedregel( + override val omregnetÅrsinntekt: Double, + val sykepengegrunnlag: Double, + val `6G`: Double, + val arbeidsgivere: List + ) : Sykepengegrunnlagsfakta { override val fastsatt = "EtterHovedregel" + data class Arbeidsgiver(val arbeidsgiver: String, val omregnetÅrsinntekt: Double) } - data class FastsattEtterSkjønn(override val omregnetÅrsinntekt: Double, val sykepengegrunnlag: Double, val `6G`: Double, val arbeidsgivere: List) : Sykepengegrunnlagsfakta { + + data class FastsattEtterSkjønn( + override val omregnetÅrsinntekt: Double, + val sykepengegrunnlag: Double, + val `6G`: Double, + val arbeidsgivere: List + ) : Sykepengegrunnlagsfakta { override val fastsatt = "EtterSkjønn" val skjønnsfastsatt = arbeidsgivere.sumOf { it.skjønnsfastsatt } - data class Arbeidsgiver(val arbeidsgiver: String, val omregnetÅrsinntekt: Double, val skjønnsfastsatt: Double) + + data class Arbeidsgiver( + val arbeidsgiver: String, + val omregnetÅrsinntekt: Double, + val skjønnsfastsatt: Double + ) } } @@ -615,10 +651,24 @@ interface PersonObserver { førsteFraværsdager: List, trengerArbeidsgiverperiode: Boolean, erPotensiellForespørsel: Boolean - ) {} + ) { + } + fun vedtaksperiodeOpprettet(event: VedtaksperiodeOpprettet) {} - fun vedtaksperiodePåminnet(vedtaksperiodeId: UUID, organisasjonsnummer: String, påminnelse: Påminnelse) {} - fun vedtaksperiodeIkkePåminnet(vedtaksperiodeId: UUID, organisasjonsnummer: String, nåværendeTilstand: TilstandType) {} + fun vedtaksperiodePåminnet( + vedtaksperiodeId: UUID, + organisasjonsnummer: String, + påminnelse: Påminnelse + ) { + } + + fun vedtaksperiodeIkkePåminnet( + vedtaksperiodeId: UUID, + organisasjonsnummer: String, + nåværendeTilstand: TilstandType + ) { + } + fun vedtaksperiodeEndret(event: VedtaksperiodeEndretEvent) {} fun vedtaksperioderVenter(eventer: List) {} fun vedtaksperiodeForkastet(event: VedtaksperiodeForkastetEvent) {} @@ -642,12 +692,26 @@ interface PersonObserver { organisasjonsnummer: String, utbetalingId: UUID, vedtaksperiodeId: UUID - ) {} + ) { + } + fun overstyringIgangsatt(event: OverstyringIgangsatt) {} fun overlappendeInfotrygdperioder(event: OverlappendeInfotrygdperioder) {} fun inntektsmeldingFørSøknad(event: InntektsmeldingFørSøknadEvent) {} - fun inntektsmeldingIkkeHåndtert(inntektsmeldingId: UUID, organisasjonsnummer: String, harPeriodeInnenfor16Dager: Boolean) {} - fun inntektsmeldingHåndtert(inntektsmeldingId: UUID, vedtaksperiodeId: UUID, organisasjonsnummer: String) {} + fun inntektsmeldingIkkeHåndtert( + inntektsmeldingId: UUID, + organisasjonsnummer: String, + harPeriodeInnenfor16Dager: Boolean + ) { + } + + fun inntektsmeldingHåndtert( + inntektsmeldingId: UUID, + vedtaksperiodeId: UUID, + organisasjonsnummer: String + ) { + } + fun skatteinntekterLagtTilGrunn(event: SkatteinntekterLagtTilGrunnEvent) {} fun søknadHåndtert(søknadId: UUID, vedtaksperiodeId: UUID, organisasjonsnummer: String) {} fun behandlingUtført() {} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/UtbetalingsakerBuilder.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/UtbetalingsakerBuilder.kt index 71813c9311..69515687fc 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/UtbetalingsakerBuilder.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/UtbetalingsakerBuilder.kt @@ -25,7 +25,13 @@ internal class UtbetalingsakerBuilder( val infotrygdbetalinger = utbetalteInfotrygdperioderMellomVedtaksperioder(vedtaksperiodene) return vedtaksperiodene - .groupBy { finnStartdatoForUtbetalingsakForVedtaksperiode(it, infotrygdbetalinger, vedtaksperiodene) } + .groupBy { + finnStartdatoForUtbetalingsakForVedtaksperiode( + it, + infotrygdbetalinger, + vedtaksperiodene + ) + } .map { (utbetalingsakensStartdato, perioder) -> Utbetalingsak( startperiode = utbetalingsakensStartdato, @@ -34,12 +40,21 @@ internal class UtbetalingsakerBuilder( } } - private fun finnStartdatoForUtbetalingsakForVedtaksperiode(vedtaksperiode: ArbeidsgiverperiodeForVedtaksperiode, infotrygdbetalinger: List, vedtaksperiodene: List): LocalDate { + private fun finnStartdatoForUtbetalingsakForVedtaksperiode( + vedtaksperiode: ArbeidsgiverperiodeForVedtaksperiode, + infotrygdbetalinger: List, + vedtaksperiodene: List + ): LocalDate { // eventuell infotrygdutbetaling som ligger mellom arbeidsgiverperioden og vedtaksperioden - val mellomliggendeInfotrygdutbetaling = infotrygdutbetalingEtterArbeidsgiverperiodenOgFørVedtaksperioden(infotrygdbetalinger, vedtaksperiode) - val infotrygdutbetalingsakStartdato = mellomliggendeInfotrygdutbetaling?.let { infotrygdDag -> - vedtaksperiodene.first { it.vedtaksperiode.start > infotrygdDag.endInclusive }.vedtaksperiode.start - } + val mellomliggendeInfotrygdutbetaling = + infotrygdutbetalingEtterArbeidsgiverperiodenOgFørVedtaksperioden( + infotrygdbetalinger, + vedtaksperiode + ) + val infotrygdutbetalingsakStartdato = + mellomliggendeInfotrygdutbetaling?.let { infotrygdDag -> + vedtaksperiodene.first { it.vedtaksperiode.start > infotrygdDag.endInclusive }.vedtaksperiode.start + } /* lar utbetalingsakene starte med enten: a) første dag i første vedtaksperiode etter mellomliggende infotrygdutbetaling b) første dag i arbeidsgiverperioden @@ -50,14 +65,17 @@ internal class UtbetalingsakerBuilder( ?: vedtaksperiode.vedtaksperiode.start } - private fun infotrygdutbetalingEtterArbeidsgiverperiodenOgFørVedtaksperioden(infotrygdbetalinger: List, vedtaksperiode: ArbeidsgiverperiodeForVedtaksperiode) = + private fun infotrygdutbetalingEtterArbeidsgiverperiodenOgFørVedtaksperioden( + infotrygdbetalinger: List, + vedtaksperiode: ArbeidsgiverperiodeForVedtaksperiode + ) = infotrygdbetalinger.lastOrNull { infotrygdperiode -> (vedtaksperiode.arbeidsgiverperioder.isEmpty() || infotrygdperiode.start > vedtaksperiode.arbeidsgiverperioder.last().endInclusive) - && infotrygdperiode.endInclusive < vedtaksperiode.vedtaksperiode.start + && infotrygdperiode.endInclusive < vedtaksperiode.vedtaksperiode.start } private fun utbetalteInfotrygdperioderMellomVedtaksperioder(vedtaksperiodene: List) = infotrygdbetalinger.flatMap { periode -> vedtaksperiodene.map { it.vedtaksperiode }.trim(periode) } -} \ No newline at end of file +} 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 c00a134c8b..ab6333c06b 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 @@ -1,5 +1,10 @@ package no.nav.helse.person +import java.time.LocalDate +import java.time.LocalDateTime +import java.time.YearMonth +import java.time.format.DateTimeFormatter +import java.util.UUID import net.logstash.logback.argument.StructuredArguments.kv import no.nav.helse.Grunnbeløp import no.nav.helse.Toggle @@ -11,23 +16,74 @@ import no.nav.helse.etterlevelse.Subsumsjonslogg import no.nav.helse.etterlevelse.Subsumsjonslogg.Companion.EmptyLog import no.nav.helse.etterlevelse.`fvl § 35 ledd 1` import no.nav.helse.etterlevelse.`§ 8-17 ledd 1 bokstav a - arbeidsgiversøknad` -import no.nav.helse.hendelser.* +import no.nav.helse.hendelser.AnmodningOmForkasting +import no.nav.helse.hendelser.AnnullerUtbetaling +import no.nav.helse.hendelser.Avsender +import no.nav.helse.hendelser.Behandlingsavgjørelse +import no.nav.helse.hendelser.DagerFraInntektsmelding +import no.nav.helse.hendelser.FunksjonelleFeilTilVarsler +import no.nav.helse.hendelser.Grunnbeløpsregulering +import no.nav.helse.hendelser.Hendelse +import no.nav.helse.hendelser.Inntektsmelding +import no.nav.helse.hendelser.InntektsmeldingerReplay +import no.nav.helse.hendelser.OverstyrArbeidsforhold +import no.nav.helse.hendelser.OverstyrArbeidsgiveropplysninger +import no.nav.helse.hendelser.OverstyrInntektsgrunnlag +import no.nav.helse.hendelser.OverstyrTidslinje +import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.Periode.Companion.grupperSammenhengendePerioderMedHensynTilHelg import no.nav.helse.hendelser.Periode.Companion.lik import no.nav.helse.hendelser.Periode.Companion.periode +import no.nav.helse.hendelser.Påminnelse +import no.nav.helse.hendelser.Revurderingseventyr +import no.nav.helse.hendelser.Simulering +import no.nav.helse.hendelser.SkjønnsmessigFastsettelse +import no.nav.helse.hendelser.SykdomshistorikkHendelse +import no.nav.helse.hendelser.SykdomstidslinjeHendelse +import no.nav.helse.hendelser.SykepengegrunnlagForArbeidsgiver +import no.nav.helse.hendelser.Sykmelding +import no.nav.helse.hendelser.Søknad +import no.nav.helse.hendelser.UtbetalingHendelse import no.nav.helse.hendelser.Validation.Companion.validation +import no.nav.helse.hendelser.Vilkårsgrunnlag +import no.nav.helse.hendelser.Ytelser import no.nav.helse.hendelser.Ytelser.Companion.familieYtelserPeriode +import no.nav.helse.hendelser.til import no.nav.helse.nesteDag import no.nav.helse.person.Behandlinger.Companion.berik import no.nav.helse.person.PersonObserver.Inntektsopplysningstype import no.nav.helse.person.PersonObserver.Inntektsopplysningstype.SAKSBEHANDLER import no.nav.helse.person.PersonObserver.Refusjon.Refusjonsforslag -import no.nav.helse.person.TilstandType.* +import no.nav.helse.person.TilstandType.AVSLUTTET +import no.nav.helse.person.TilstandType.AVSLUTTET_UTEN_UTBETALING +import no.nav.helse.person.TilstandType.AVVENTER_BLOKKERENDE_PERIODE +import no.nav.helse.person.TilstandType.AVVENTER_GODKJENNING +import no.nav.helse.person.TilstandType.AVVENTER_GODKJENNING_REVURDERING +import no.nav.helse.person.TilstandType.AVVENTER_HISTORIKK +import no.nav.helse.person.TilstandType.AVVENTER_HISTORIKK_REVURDERING +import no.nav.helse.person.TilstandType.AVVENTER_INFOTRYGDHISTORIKK +import no.nav.helse.person.TilstandType.AVVENTER_INNTEKTSMELDING +import no.nav.helse.person.TilstandType.AVVENTER_REVURDERING +import no.nav.helse.person.TilstandType.AVVENTER_SIMULERING +import no.nav.helse.person.TilstandType.AVVENTER_SIMULERING_REVURDERING +import no.nav.helse.person.TilstandType.AVVENTER_VILKÅRSPRØVING +import no.nav.helse.person.TilstandType.AVVENTER_VILKÅRSPRØVING_REVURDERING +import no.nav.helse.person.TilstandType.REVURDERING_FEILET +import no.nav.helse.person.TilstandType.START +import no.nav.helse.person.TilstandType.TIL_INFOTRYGD +import no.nav.helse.person.TilstandType.TIL_UTBETALING import no.nav.helse.person.Venteårsak.Companion.fordi import no.nav.helse.person.Venteårsak.Companion.utenBegrunnelse -import no.nav.helse.person.Venteårsak.Hva.* -import no.nav.helse.person.Venteårsak.Hvorfor.* -import no.nav.helse.person.aktivitetslogg.* +import no.nav.helse.person.Venteårsak.Hva.BEREGNING +import no.nav.helse.person.Venteårsak.Hva.GODKJENNING +import no.nav.helse.person.Venteårsak.Hva.HJELP +import no.nav.helse.person.Venteårsak.Hva.INNTEKTSMELDING +import no.nav.helse.person.Venteårsak.Hva.SØKNAD +import no.nav.helse.person.Venteårsak.Hva.UTBETALING +import no.nav.helse.person.Venteårsak.Hvorfor.FLERE_SKJÆRINGSTIDSPUNKT +import no.nav.helse.person.Venteårsak.Hvorfor.OVERSTYRING_IGANGSATT +import no.nav.helse.person.Venteårsak.Hvorfor.SKJÆRINGSTIDSPUNKT_FLYTTET_REVURDERING +import no.nav.helse.person.Venteårsak.Hvorfor.VIL_OMGJØRES import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Companion.arbeidsavklaringspenger import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Companion.arbeidsforhold import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Companion.dagpenger @@ -40,27 +96,62 @@ import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Companion.medlemskap import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Companion.omsorgspenger import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Companion.opplæringspenger import no.nav.helse.person.aktivitetslogg.Aktivitet.Behov.Companion.pleiepenger -import no.nav.helse.person.aktivitetslogg.Varselkode.* +import no.nav.helse.person.aktivitetslogg.Aktivitetskontekst +import no.nav.helse.person.aktivitetslogg.Aktivitetslogg +import no.nav.helse.person.aktivitetslogg.IAktivitetslogg +import no.nav.helse.person.aktivitetslogg.SpesifikkKontekst +import no.nav.helse.person.aktivitetslogg.Varselkode import no.nav.helse.person.aktivitetslogg.Varselkode.Companion.`Mottatt søknad som delvis overlapper` import no.nav.helse.person.aktivitetslogg.Varselkode.Companion.varsel +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_IM_24 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_IM_4 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_IT_38 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_IV_11 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_OO_1 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_RV_1 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_RV_2 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SV_2 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SØ_28 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SØ_29 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SØ_30 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SØ_31 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SØ_32 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SØ_33 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SØ_34 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SØ_35 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SØ_36 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SØ_37 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_SØ_38 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_UT_24 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_UT_5 +import no.nav.helse.person.aktivitetslogg.Varselkode.RV_VT_1 import no.nav.helse.person.beløp.Beløpstidslinje import no.nav.helse.person.beløp.Kilde import no.nav.helse.person.builders.UtkastTilVedtakBuilder -import no.nav.helse.person.infotrygdhistorikk.* +import no.nav.helse.person.infotrygdhistorikk.ArbeidsgiverUtbetalingsperiode +import no.nav.helse.person.infotrygdhistorikk.Friperiode +import no.nav.helse.person.infotrygdhistorikk.Infotrygdhistorikk +import no.nav.helse.person.infotrygdhistorikk.Infotrygdperiode +import no.nav.helse.person.infotrygdhistorikk.PersonUtbetalingsperiode import no.nav.helse.person.inntekt.Refusjonsopplysning.Refusjonsopplysninger import no.nav.helse.person.refusjon.Refusjonsservitør import no.nav.helse.sykdomstidslinje.Skjæringstidspunkt import no.nav.helse.sykdomstidslinje.Sykdomstidslinje import no.nav.helse.sykdomstidslinje.Sykdomstidslinje.Companion.slåSammenForkastedeSykdomstidslinjer import no.nav.helse.utbetalingslinjer.Utbetaling -import no.nav.helse.utbetalingstidslinje.* +import no.nav.helse.utbetalingstidslinje.ArbeidsgiverFaktaavklartInntekt +import no.nav.helse.utbetalingstidslinje.Arbeidsgiverperiode +import no.nav.helse.utbetalingstidslinje.AvvisDagerEtterDødsdatofilter +import no.nav.helse.utbetalingstidslinje.AvvisInngangsvilkårfilter +import no.nav.helse.utbetalingstidslinje.Maksdatoresultat +import no.nav.helse.utbetalingstidslinje.MaksimumSykepengedagerfilter +import no.nav.helse.utbetalingstidslinje.MaksimumUtbetalingFilter +import no.nav.helse.utbetalingstidslinje.Sykdomsgradfilter +import no.nav.helse.utbetalingstidslinje.Utbetalingstidslinje +import no.nav.helse.utbetalingstidslinje.UtbetalingstidslinjerFilter +import no.nav.helse.utbetalingstidslinje.Utbetalingstidslinjesubsumsjon import no.nav.helse.økonomi.Inntekt import org.slf4j.LoggerFactory -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.YearMonth -import java.time.format.DateTimeFormatter -import java.util.* internal class Vedtaksperiode private constructor( private val person: Person, @@ -95,16 +186,37 @@ internal class Vedtaksperiode private constructor( ) { registrerKontekst(aktivitetslogg) val periode = checkNotNull(sykdomstidslinje.periode()) { "sykdomstidslinjen er tom" } - person.vedtaksperiodeOpprettet(id, arbeidsgiver.organisasjonsnummer, periode, periode.start, opprettet) - behandlinger.initiellBehandling(sykmeldingsperiode, sykdomstidslinje, dokumentsporing, søknad) + person.vedtaksperiodeOpprettet( + id, + arbeidsgiver.organisasjonsnummer, + periode, + periode.start, + opprettet + ) + behandlinger.initiellBehandling( + sykmeldingsperiode, + sykdomstidslinje, + dokumentsporing, + søknad + ) } private val sykmeldingsperiode get() = behandlinger.sykmeldingsperiode() private val periode get() = behandlinger.periode() internal val sykdomstidslinje get() = behandlinger.sykdomstidslinje() - private val jurist get() = behandlinger.subsumsjonslogg(subsumsjonslogg, id, person.fødselsnummer, arbeidsgiver.organisasjonsnummer) + private val jurist + get() = behandlinger.subsumsjonslogg( + subsumsjonslogg, + id, + person.fødselsnummer, + arbeidsgiver.organisasjonsnummer + ) internal val skjæringstidspunkt get() = behandlinger.skjæringstidspunkt() - internal val førsteFraværsdag get() = arbeidsgiver.finnFørsteFraværsdag(skjæringstidspunkt, SAMMENHENGENDE_PERIODER_HOS_ARBEIDSGIVER(this)) + internal val førsteFraværsdag + get() = arbeidsgiver.finnFørsteFraværsdag( + skjæringstidspunkt, + SAMMENHENGENDE_PERIODER_HOS_ARBEIDSGIVER(this) + ) private val vilkårsgrunnlag get() = person.vilkårsgrunnlagFor(skjæringstidspunkt) private val hendelseIder get() = behandlinger.dokumentsporing() private val refusjonstidslinje get() = behandlinger.refusjonstidslinje() @@ -148,7 +260,12 @@ internal class Vedtaksperiode private constructor( behandlinger.validerFerdigBehandlet(hendelse, aktivitetslogg) } - internal fun håndter(søknad: Søknad, aktivitetslogg: IAktivitetslogg, arbeidsgivere: List, infotrygdhistorikk: Infotrygdhistorikk) { + internal fun håndter( + søknad: Søknad, + aktivitetslogg: IAktivitetslogg, + arbeidsgivere: List, + infotrygdhistorikk: Infotrygdhistorikk + ) { håndterSykdomstidslinjeHendelse(søknad, aktivitetslogg) { søknadHåndtert(søknad) tilstand.håndter(this, søknad, aktivitetslogg, arbeidsgivere, infotrygdhistorikk) @@ -176,23 +293,40 @@ internal class Vedtaksperiode private constructor( private fun inntektsmeldingHåndtert(inntektsmelding: Inntektsmelding): Boolean { if (!inntektsmelding.leggTil(behandlinger)) return true - person.emitInntektsmeldingHåndtert(inntektsmelding.metadata.meldingsreferanseId, id, arbeidsgiver.organisasjonsnummer) + person.emitInntektsmeldingHåndtert( + inntektsmelding.metadata.meldingsreferanseId, + id, + arbeidsgiver.organisasjonsnummer + ) return false } private fun søknadHåndtert(søknad: Søknad) { - person.emitSøknadHåndtert(søknad.metadata.meldingsreferanseId, id, arbeidsgiver.organisasjonsnummer) + person.emitSøknadHåndtert( + søknad.metadata.meldingsreferanseId, + id, + arbeidsgiver.organisasjonsnummer + ) } - internal fun håndter(anmodningOmForkasting: AnmodningOmForkasting, aktivitetslogg: IAktivitetslogg) { + internal fun håndter( + anmodningOmForkasting: AnmodningOmForkasting, + aktivitetslogg: IAktivitetslogg + ) { if (!anmodningOmForkasting.erRelevant(id)) return registrerKontekst(aktivitetslogg) if (anmodningOmForkasting.force) return forkast(anmodningOmForkasting, aktivitetslogg) tilstand.håndter(this, anmodningOmForkasting, aktivitetslogg) } - private fun etterkomAnmodningOmForkasting(anmodningOmForkasting: AnmodningOmForkasting, aktivitetslogg: IAktivitetslogg) { - if (!arbeidsgiver.kanForkastes(this, aktivitetslogg)) return aktivitetslogg.info("Kan ikke etterkomme anmodning om forkasting") + private fun etterkomAnmodningOmForkasting( + anmodningOmForkasting: AnmodningOmForkasting, + aktivitetslogg: IAktivitetslogg + ) { + if (!arbeidsgiver.kanForkastes( + this, + aktivitetslogg + )) return aktivitetslogg.info("Kan ikke etterkomme anmodning om forkasting") aktivitetslogg.info("Etterkommer anmodning om forkasting") forkast(anmodningOmForkasting, aktivitetslogg) } @@ -203,26 +337,37 @@ internal class Vedtaksperiode private constructor( tilstand.replayUtført(this, replays, aktivitetslogg) } - internal fun inntektsmeldingFerdigbehandlet(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) { + internal fun inntektsmeldingFerdigbehandlet( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) { registrerKontekst(aktivitetslogg) tilstand.inntektsmeldingFerdigbehandlet(this, hendelse, aktivitetslogg) } internal fun håndter(dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg) { - if (!tilstand.skalHåndtereDager(this, dager, aktivitetslogg) || dager.alleredeHåndtert(behandlinger)) + if (!tilstand.skalHåndtereDager(this, dager, aktivitetslogg) || dager.alleredeHåndtert( + behandlinger + )) return dager.vurdertTilOgMed(periode.endInclusive) registrerKontekst(aktivitetslogg) tilstand.håndter(this, dager, aktivitetslogg) dager.vurdertTilOgMed(periode.endInclusive) } - private fun skalHåndtereDagerRevurdering(dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg): Boolean { + private fun skalHåndtereDagerRevurdering( + dager: DagerFraInntektsmelding, + aktivitetslogg: IAktivitetslogg + ): Boolean { return skalHåndtereDager(dager, aktivitetslogg) { sammenhengende -> dager.skalHåndteresAvRevurdering(periode, sammenhengende, finnArbeidsgiverperiode()) } } - private fun skalHåndtereDagerAvventerInntektsmelding(dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg): Boolean { + private fun skalHåndtereDagerAvventerInntektsmelding( + dager: DagerFraInntektsmelding, + aktivitetslogg: IAktivitetslogg + ): Boolean { return skalHåndtereDager(dager, aktivitetslogg) { sammenhengende -> dager.skalHåndteresAv(sammenhengende) } @@ -242,21 +387,32 @@ internal class Vedtaksperiode private constructor( } private fun håndterDager(dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg) { - val hendelse = dager.bitAvInntektsmelding(aktivitetslogg, periode) ?: dager.tomBitAvInntektsmelding(aktivitetslogg, periode) + val hendelse = + dager.bitAvInntektsmelding(aktivitetslogg, periode) ?: dager.tomBitAvInntektsmelding( + aktivitetslogg, + periode + ) håndterDager(hendelse, aktivitetslogg) { dager.valider(aktivitetslogg, periode) dager.validerArbeidsgiverperiode(aktivitetslogg, periode, finnArbeidsgiverperiode()) } } - private fun håndterDagerUtenEndring(dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg) { + private fun håndterDagerUtenEndring( + dager: DagerFraInntektsmelding, + aktivitetslogg: IAktivitetslogg + ) { val hendelse = dager.tomBitAvInntektsmelding(aktivitetslogg, periode) håndterDager(hendelse, aktivitetslogg) { dager.valider(aktivitetslogg, periode, finnArbeidsgiverperiode()) } } - private fun håndterDager(hendelse: DagerFraInntektsmelding.BitAvInntektsmelding, aktivitetslogg: IAktivitetslogg, validering: () -> Unit) { + private fun håndterDager( + hendelse: DagerFraInntektsmelding.BitAvInntektsmelding, + aktivitetslogg: IAktivitetslogg, + validering: () -> Unit + ) { if (egenmeldingsperioder.isNotEmpty()) { aktivitetslogg.info("Forkaster egenmeldinger oppgitt i sykmelding etter at arbeidsgiverperiode fra inntektsmeldingen er håndtert: $egenmeldingsperioder") egenmeldingsperioder = emptyList() @@ -264,7 +420,11 @@ internal class Vedtaksperiode private constructor( oppdaterHistorikk(hendelse, aktivitetslogg, validering) } - internal fun håndterHistorikkFraInfotrygd(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg, infotrygdhistorikk: Infotrygdhistorikk) { + internal fun håndterHistorikkFraInfotrygd( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg, + infotrygdhistorikk: Infotrygdhistorikk + ) { registrerKontekst(aktivitetslogg) tilstand.håndter(this, hendelse, aktivitetslogg, infotrygdhistorikk) } @@ -279,18 +439,29 @@ internal class Vedtaksperiode private constructor( tilstand.håndter(person, arbeidsgiver, this, ytelser, aktivitetslogg, infotrygdhistorikk) } - internal fun håndter(utbetalingsavgjørelse: Behandlingsavgjørelse, aktivitetslogg: IAktivitetslogg) { + internal fun håndter( + utbetalingsavgjørelse: Behandlingsavgjørelse, + aktivitetslogg: IAktivitetslogg + ) { if (!utbetalingsavgjørelse.relevantVedtaksperiode(id)) return if (behandlinger.gjelderIkkeFor(utbetalingsavgjørelse)) return aktivitetslogg.info("Ignorerer løsning på utbetalingsavgjørelse, utbetalingid på løsningen matcher ikke vedtaksperiodens nåværende utbetaling") registrerKontekst(aktivitetslogg) tilstand.håndter(person, arbeidsgiver, this, utbetalingsavgjørelse, aktivitetslogg) } - internal fun håndter(sykepengegrunnlagForArbeidsgiver: SykepengegrunnlagForArbeidsgiver, aktivitetslogg: IAktivitetslogg) { - if (!sykepengegrunnlagForArbeidsgiver.erRelevant(aktivitetslogg, id, skjæringstidspunkt)) return + internal fun håndter( + sykepengegrunnlagForArbeidsgiver: SykepengegrunnlagForArbeidsgiver, + aktivitetslogg: IAktivitetslogg + ) { + if (!sykepengegrunnlagForArbeidsgiver.erRelevant( + aktivitetslogg, + id, + skjæringstidspunkt + )) return registrerKontekst(aktivitetslogg) tilstand.håndter(this, sykepengegrunnlagForArbeidsgiver, aktivitetslogg) } + internal fun håndter(vilkårsgrunnlag: Vilkårsgrunnlag, aktivitetslogg: IAktivitetslogg) { if (!vilkårsgrunnlag.erRelevant(aktivitetslogg, id, skjæringstidspunkt)) return registrerKontekst(aktivitetslogg) @@ -309,12 +480,25 @@ internal class Vedtaksperiode private constructor( tilstand.håndter(this, hendelse, aktivitetslogg) } - internal fun håndter(hendelse: AnnullerUtbetaling, aktivitetslogg: IAktivitetslogg, vedtaksperioder: List) { + internal fun håndter( + hendelse: AnnullerUtbetaling, + aktivitetslogg: IAktivitetslogg, + vedtaksperioder: List + ) { registrerKontekst(aktivitetslogg) - val annullering = behandlinger.håndterAnnullering(arbeidsgiver, hendelse, aktivitetslogg, vedtaksperioder.map { it.behandlinger }) ?: return + val annullering = behandlinger.håndterAnnullering( + arbeidsgiver, + hendelse, + aktivitetslogg, + vedtaksperioder.map { it.behandlinger }) ?: return aktivitetslogg.info("Forkaster denne, og senere perioder, som følge av annullering.") forkast(hendelse, aktivitetslogg) - person.igangsettOverstyring(Revurderingseventyr.Companion.annullering(hendelse, annullering.periode()), aktivitetslogg) + person.igangsettOverstyring( + Revurderingseventyr.Companion.annullering( + hendelse, + annullering.periode() + ), aktivitetslogg + ) } internal fun håndter(påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg): Boolean { @@ -329,29 +513,69 @@ internal class Vedtaksperiode private constructor( tilstand.nyAnnullering(this, aktivitetslogg) } - internal fun håndter(overstyrInntektsgrunnlag: OverstyrInntektsgrunnlag, aktivitetslogg: IAktivitetslogg): Boolean { + internal fun håndter( + overstyrInntektsgrunnlag: OverstyrInntektsgrunnlag, + aktivitetslogg: IAktivitetslogg + ): Boolean { if (!overstyrInntektsgrunnlag.erRelevant(skjæringstidspunkt)) return false if (vilkårsgrunnlag?.erArbeidsgiverRelevant(arbeidsgiver.organisasjonsnummer) != true) return false registrerKontekst(aktivitetslogg) // i praksis double-dispatch, kotlin-style when (overstyrInntektsgrunnlag) { - is Grunnbeløpsregulering -> person.vilkårsprøvEtterNyInformasjonFraSaksbehandler(overstyrInntektsgrunnlag, aktivitetslogg, skjæringstidspunkt, jurist) - is OverstyrArbeidsforhold -> person.vilkårsprøvEtterNyInformasjonFraSaksbehandler(overstyrInntektsgrunnlag, aktivitetslogg, skjæringstidspunkt, jurist) - is OverstyrArbeidsgiveropplysninger -> person.vilkårsprøvEtterNyInformasjonFraSaksbehandler(overstyrInntektsgrunnlag, aktivitetslogg, skjæringstidspunkt, jurist) - is SkjønnsmessigFastsettelse -> person.vilkårsprøvEtterNyInformasjonFraSaksbehandler(overstyrInntektsgrunnlag, aktivitetslogg, skjæringstidspunkt, jurist) + is Grunnbeløpsregulering -> person.vilkårsprøvEtterNyInformasjonFraSaksbehandler( + overstyrInntektsgrunnlag, + aktivitetslogg, + skjæringstidspunkt, + jurist + ) + + is OverstyrArbeidsforhold -> person.vilkårsprøvEtterNyInformasjonFraSaksbehandler( + overstyrInntektsgrunnlag, + aktivitetslogg, + skjæringstidspunkt, + jurist + ) + + is OverstyrArbeidsgiveropplysninger -> person.vilkårsprøvEtterNyInformasjonFraSaksbehandler( + overstyrInntektsgrunnlag, + aktivitetslogg, + skjæringstidspunkt, + jurist + ) + + is SkjønnsmessigFastsettelse -> person.vilkårsprøvEtterNyInformasjonFraSaksbehandler( + overstyrInntektsgrunnlag, + aktivitetslogg, + skjæringstidspunkt, + jurist + ) } return true } // 💡Må ikke forveksles med `førsteFraværsdag` 💡 // F.eks. januar med agp 1-10 & 16-21 så er `førsteFraværsdag` 16.januar, mens `startdatoPåSammenhengendeVedtaksperioder` er 1.januar - private val startdatoPåSammenhengendeVedtaksperioder get() = arbeidsgiver.startdatoPåSammenhengendeVedtaksperioder(this) + private val startdatoPåSammenhengendeVedtaksperioder + get() = arbeidsgiver.startdatoPåSammenhengendeVedtaksperioder( + this + ) - internal fun håndter(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg, servitør: Refusjonsservitør) { + internal fun håndter( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg, + servitør: Refusjonsservitør + ) { val refusjonstidslinje = servitør.servér(startdatoPåSammenhengendeVedtaksperioder, periode) if (refusjonstidslinje.isEmpty()) return - behandlinger.håndterRefusjonstidslinje(arbeidsgiver, hendelse, aktivitetslogg, person.beregnSkjæringstidspunkt(), arbeidsgiver.beregnArbeidsgiverperiode(jurist), refusjonstidslinje) + behandlinger.håndterRefusjonstidslinje( + arbeidsgiver, + hendelse, + aktivitetslogg, + person.beregnSkjæringstidspunkt(), + arbeidsgiver.beregnArbeidsgiverperiode(jurist), + refusjonstidslinje + ) } private fun påvirkerArbeidsgiverperioden(ny: Vedtaksperiode): Boolean { @@ -382,16 +606,35 @@ internal class Vedtaksperiode private constructor( private fun måInnhenteInntektEllerRefusjon(aktivitetslogg: IAktivitetslogg): Boolean { val arbeidsgiverperiode = finnArbeidsgiverperiode() ?: return false if (!arbeidsgiverperiode.forventerInntekt(periode)) return false - if (tilstand.arbeidsgiveropplysningerStrategi.harInntektOgRefusjon(this, arbeidsgiverperiode, aktivitetslogg)) return false + if (tilstand.arbeidsgiveropplysningerStrategi.harInntektOgRefusjon( + this, + arbeidsgiverperiode, + aktivitetslogg + )) return false return true } private fun harFlereSkjæringstidspunkt(): Boolean { val arbeidsgiverperiode = finnArbeidsgiverperiode() ?: return false if (!arbeidsgiverperiode.forventerInntekt(periode)) return false - val utbetalingsdagerFørSkjæringstidspunkt = Arbeidsgiverperiode.utbetalingsdagerFørSkjæringstidspunkt(skjæringstidspunkt, periode, arbeidsgiverperiode) + val utbetalingsdagerFørSkjæringstidspunkt = + Arbeidsgiverperiode.utbetalingsdagerFørSkjæringstidspunkt( + skjæringstidspunkt, + periode, + arbeidsgiverperiode + ) if (utbetalingsdagerFørSkjæringstidspunkt.isEmpty()) return false - sikkerlogg.warn("Har flere skjæringstidspunkt:\n\n (${id.toString().take(5).uppercase()}) $periode\nSkjæringstidspunkt: ${skjæringstidspunkt.format(datoformat)}\nArbeidsgiver: ${arbeidsgiver.organisasjonsnummer}\nUtbetalingsdager før skjæringstidspunkt: ${utbetalingsdagerFørSkjæringstidspunkt.joinToString { it.format(datoformat) }}\nSykdomstidslinje: ${sykdomstidslinje.toShortString()}") + sikkerlogg.warn( + "Har flere skjæringstidspunkt:\n\n (${ + id.toString().take(5).uppercase() + }) $periode\nSkjæringstidspunkt: ${skjæringstidspunkt.format(datoformat)}\nArbeidsgiver: ${arbeidsgiver.organisasjonsnummer}\nUtbetalingsdager før skjæringstidspunkt: ${ + utbetalingsdagerFørSkjæringstidspunkt.joinToString { + it.format( + datoformat + ) + } + }\nSykdomstidslinje: ${sykdomstidslinje.toShortString()}" + ) return true } @@ -399,7 +642,10 @@ internal class Vedtaksperiode private constructor( return vilkårsgrunnlag?.harTilkommendeInntekter() ?: false } - internal fun kanForkastes(arbeidsgiverUtbetalinger: List, aktivitetslogg: IAktivitetslogg): Boolean { + internal fun kanForkastes( + arbeidsgiverUtbetalinger: List, + aktivitetslogg: IAktivitetslogg + ): Boolean { if (!behandlinger.kanForkastes(aktivitetslogg, arbeidsgiverUtbetalinger)) { aktivitetslogg.info("[kanForkastes] Kan ikke forkastes fordi behandlinger nekter det") return false @@ -408,7 +654,11 @@ internal class Vedtaksperiode private constructor( return true } - internal fun forkast(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg, utbetalinger: List): VedtaksperiodeForkastetEventBuilder? { + internal fun forkast( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg, + utbetalinger: List + ): VedtaksperiodeForkastetEventBuilder? { registrerKontekst(aktivitetslogg) if (!kanForkastes(utbetalinger, aktivitetslogg)) return null aktivitetslogg.info("Forkaster vedtaksperiode: %s", this.id.toString()) @@ -419,14 +669,20 @@ internal class Vedtaksperiode private constructor( val sykmeldingsperioder = sykmeldingsperioderKnyttetTilArbeidsgiverperiode(arbeidsgiverperiodeHensyntarForkastede) val vedtaksperiodeForkastetEventBuilder = - VedtaksperiodeForkastetEventBuilder(tilstand.type, trengerArbeidsgiveropplysninger, sykmeldingsperioder) + VedtaksperiodeForkastetEventBuilder( + tilstand.type, + trengerArbeidsgiveropplysninger, + sykmeldingsperioder + ) tilstand(aktivitetslogg, TilInfotrygd) return vedtaksperiodeForkastetEventBuilder } private fun sykmeldingsperioderKnyttetTilArbeidsgiverperiode(arbeidsgiverperiode: Arbeidsgiverperiode?): List { val forkastedeVedtaksperioder = - arbeidsgiver.vedtaksperioderKnyttetTilArbeidsgiverperiodeInkludertForkastede(arbeidsgiverperiode) + arbeidsgiver.vedtaksperioderKnyttetTilArbeidsgiverperiodeInkludertForkastede( + arbeidsgiverperiode + ) return (forkastedeVedtaksperioder.map { it.sykmeldingsperiode } .filter { it.start < sykmeldingsperiode.endInclusive } + listOf(sykmeldingsperiode)).distinct() } @@ -451,7 +707,11 @@ internal class Vedtaksperiode private constructor( periode )) }.isNotEmpty(), - harPeriodeInnenfor16Dager = person.nåværendeVedtaksperioder { påvirkerArbeidsgiverperioden(it) } + harPeriodeInnenfor16Dager = person.nåværendeVedtaksperioder { + påvirkerArbeidsgiverperioden( + it + ) + } .isNotEmpty(), trengerArbeidsgiveropplysninger = trengerArbeidsgiveropplysninger, sykmeldingsperioder = sykmeldingsperioder @@ -461,7 +721,10 @@ internal class Vedtaksperiode private constructor( } private fun forkast(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) { - if (!arbeidsgiver.kanForkastes(this, aktivitetslogg)) return aktivitetslogg.info("Kan ikke etterkomme forkasting") + if (!arbeidsgiver.kanForkastes( + this, + aktivitetslogg + )) return aktivitetslogg.info("Kan ikke etterkomme forkasting") person.søppelbøtte(hendelse, aktivitetslogg, TIDLIGERE_OG_ETTERGØLGENDE(this)) } @@ -472,7 +735,10 @@ internal class Vedtaksperiode private constructor( igangsettOverstyringAvTidslinje(hendelse, aktivitetslogg) } - private fun igangsettOverstyringAvTidslinje(hendelse: OverstyrTidslinje, aktivitetslogg: IAktivitetslogg) { + private fun igangsettOverstyringAvTidslinje( + hendelse: OverstyrTidslinje, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.info("Igangsetter overstyring av tidslinje") val vedtaksperiodeTilRevurdering = arbeidsgiver.finnVedtaksperiodeFør(this) ?.takeIf { nyArbeidsgiverperiodeEtterEndring(it) } ?: this @@ -523,30 +789,60 @@ internal class Vedtaksperiode private constructor( tilstand.entering(this, event) } - private fun oppdaterHistorikk(hendelse: SykdomshistorikkHendelse, aktivitetslogg: IAktivitetslogg, validering: () -> Unit) { - behandlinger.håndterEndring(person, arbeidsgiver, hendelse, aktivitetslogg, person.beregnSkjæringstidspunkt(), arbeidsgiver.beregnArbeidsgiverperiode(jurist), validering) + private fun oppdaterHistorikk( + hendelse: SykdomshistorikkHendelse, + aktivitetslogg: IAktivitetslogg, + validering: () -> Unit + ) { + behandlinger.håndterEndring( + person, + arbeidsgiver, + hendelse, + aktivitetslogg, + person.beregnSkjæringstidspunkt(), + arbeidsgiver.beregnArbeidsgiverperiode(jurist), + validering + ) } - private fun håndterEgenmeldingsperioderFraOverlappendeSøknad(søknad: Søknad, aktivitetslogg: IAktivitetslogg) { + private fun håndterEgenmeldingsperioderFraOverlappendeSøknad( + søknad: Søknad, + aktivitetslogg: IAktivitetslogg + ) { val nyeEgenmeldingsperioder = søknad.egenmeldingsperioder() if (egenmeldingsperioder.lik(nyeEgenmeldingsperioder)) return if (nyeEgenmeldingsperioder.isEmpty()) return aktivitetslogg.info("Hadde egenmeldingsperioder $egenmeldingsperioder, men den overlappende søknaden har ingen.") - val sammenslåtteEgenmeldingsperioder = (egenmeldingsperioder + nyeEgenmeldingsperioder).grupperSammenhengendePerioderMedHensynTilHelg() + val sammenslåtteEgenmeldingsperioder = + (egenmeldingsperioder + nyeEgenmeldingsperioder).grupperSammenhengendePerioderMedHensynTilHelg() aktivitetslogg.info("Oppdaterer egenmeldingsperioder fra $egenmeldingsperioder til $sammenslåtteEgenmeldingsperioder") egenmeldingsperioder = sammenslåtteEgenmeldingsperioder } - private fun håndterSøknad(søknad: Søknad, aktivitetslogg: IAktivitetslogg, nesteTilstand: () -> Vedtaksperiodetilstand? = { null }) { + private fun håndterSøknad( + søknad: Søknad, + aktivitetslogg: IAktivitetslogg, + nesteTilstand: () -> Vedtaksperiodetilstand? = { null } + ) { oppdaterHistorikk(søknad, aktivitetslogg) { søknad.valider(aktivitetslogg, vilkårsgrunnlag, jurist) } if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return forkast(søknad, aktivitetslogg) - person.oppdaterVilkårsgrunnlagMedInntektene(skjæringstidspunkt, aktivitetslogg, periode, søknad.nyeInntekterUnderveis(aktivitetslogg), jurist) + person.oppdaterVilkårsgrunnlagMedInntektene( + skjæringstidspunkt, + aktivitetslogg, + periode, + søknad.nyeInntekterUnderveis(aktivitetslogg), + jurist + ) nesteTilstand()?.also { tilstand(aktivitetslogg, it) } } - private fun håndterOverlappendeSøknad(søknad: Søknad, aktivitetslogg: IAktivitetslogg, nesteTilstand: Vedtaksperiodetilstand? = null) { + private fun håndterOverlappendeSøknad( + søknad: Søknad, + aktivitetslogg: IAktivitetslogg, + nesteTilstand: Vedtaksperiodetilstand? = null + ) { if (søknad.delvisOverlappende(periode)) { aktivitetslogg.funksjonellFeil(`Mottatt søknad som delvis overlapper`) return forkast(søknad, aktivitetslogg) @@ -554,33 +850,62 @@ internal class Vedtaksperiode private constructor( aktivitetslogg.info("Håndterer overlappende søknad") håndterEgenmeldingsperioderFraOverlappendeSøknad(søknad, aktivitetslogg) håndterSøknad(søknad, aktivitetslogg) { nesteTilstand } - person.igangsettOverstyring(Revurderingseventyr.Companion.korrigertSøknad(søknad, skjæringstidspunkt, periode), aktivitetslogg) + person.igangsettOverstyring( + Revurderingseventyr.Companion.korrigertSøknad( + søknad, + skjæringstidspunkt, + periode + ), aktivitetslogg + ) } - private fun håndterOverlappendeSøknadRevurdering(søknad: Søknad, aktivitetslogg: IAktivitetslogg) { - if (søknad.delvisOverlappende(periode)) return aktivitetslogg.funksjonellFeil(`Mottatt søknad som delvis overlapper`) + private fun håndterOverlappendeSøknadRevurdering( + søknad: Søknad, + aktivitetslogg: IAktivitetslogg + ) { + if (søknad.delvisOverlappende(periode)) return aktivitetslogg.funksjonellFeil( + `Mottatt søknad som delvis overlapper` + ) if (søknad.sendtTilGosys()) return aktivitetslogg.funksjonellFeil(RV_SØ_30) if (søknad.utenlandskSykmelding()) return aktivitetslogg.funksjonellFeil(RV_SØ_29) else { aktivitetslogg.info("Søknad har trigget en revurdering") håndterEgenmeldingsperioderFraOverlappendeSøknad(søknad, aktivitetslogg) - person.oppdaterVilkårsgrunnlagMedInntektene(skjæringstidspunkt, aktivitetslogg, periode, søknad.nyeInntekterUnderveis(aktivitetslogg), jurist) + person.oppdaterVilkårsgrunnlagMedInntektene( + skjæringstidspunkt, + aktivitetslogg, + periode, + søknad.nyeInntekterUnderveis(aktivitetslogg), + jurist + ) oppdaterHistorikk(søknad, aktivitetslogg) { søknad.valider(aktivitetslogg, vilkårsgrunnlag, jurist) } } - person.igangsettOverstyring(Revurderingseventyr.Companion.korrigertSøknad(søknad, skjæringstidspunkt, periode), aktivitetslogg) + person.igangsettOverstyring( + Revurderingseventyr.Companion.korrigertSøknad( + søknad, + skjæringstidspunkt, + periode + ), aktivitetslogg + ) } - private fun håndtertInntektPåSkjæringstidspunktetOgVurderVarsel(hendelse: Inntektsmelding, aktivitetslogg: IAktivitetslogg) { + private fun håndtertInntektPåSkjæringstidspunktetOgVurderVarsel( + hendelse: Inntektsmelding, + aktivitetslogg: IAktivitetslogg + ) { val harHåndtertInntektTidligere = behandlinger.harHåndtertInntektTidligere() if (inntektsmeldingHåndtert(hendelse)) return if (!harHåndtertInntektTidligere) return aktivitetslogg.varsel(RV_IM_4) } - private fun håndterKorrigerendeInntektsmelding(dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg) { + private fun håndterKorrigerendeInntektsmelding( + dager: DagerFraInntektsmelding, + aktivitetslogg: IAktivitetslogg + ) { val korrigertInntektsmeldingId = behandlinger.sisteInntektsmeldingDagerId() val opprinneligAgp = finnArbeidsgiverperiode() if (dager.erKorrigeringForGammel(aktivitetslogg, opprinneligAgp)) { @@ -593,7 +918,10 @@ internal class Vedtaksperiode private constructor( val nyAgp = finnArbeidsgiverperiode() if (opprinneligAgp != null && !opprinneligAgp.klinLik(nyAgp)) { - aktivitetslogg.varsel(RV_IM_24, "Ny agp er utregnet til å være ulik tidligere utregnet agp i ${tilstand.type.name}") + aktivitetslogg.varsel( + RV_IM_24, + "Ny agp er utregnet til å være ulik tidligere utregnet agp i ${tilstand.type.name}" + ) korrigertInntektsmeldingId?.let { person.arbeidsgiveropplysningerKorrigert( PersonObserver.ArbeidsgiveropplysningerKorrigertEvent( @@ -606,19 +934,33 @@ internal class Vedtaksperiode private constructor( } } - private fun håndterVilkårsgrunnlag(vilkårsgrunnlag: Vilkårsgrunnlag, aktivitetslogg: IAktivitetslogg, nesteTilstand: Vedtaksperiodetilstand) { - val sykepengegrunnlag = vilkårsgrunnlag.avklarSykepengegrunnlag(person, aktivitetslogg, jurist) + private fun håndterVilkårsgrunnlag( + vilkårsgrunnlag: Vilkårsgrunnlag, + aktivitetslogg: IAktivitetslogg, + nesteTilstand: Vedtaksperiodetilstand + ) { + val sykepengegrunnlag = + vilkårsgrunnlag.avklarSykepengegrunnlag(person, aktivitetslogg, jurist) vilkårsgrunnlag.valider(aktivitetslogg, sykepengegrunnlag, jurist) val grunnlagsdata = vilkårsgrunnlag.grunnlagsdata() grunnlagsdata.validerFørstegangsvurdering(aktivitetslogg) person.lagreVilkårsgrunnlag(grunnlagsdata) aktivitetslogg.info("Vilkårsgrunnlag vurdert") - if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return forkast(vilkårsgrunnlag, aktivitetslogg) - arbeidsgiver.sendOppdatertForespørselOmArbeidsgiveropplysningerForNestePeriode(this, aktivitetslogg) + if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return forkast( + vilkårsgrunnlag, + aktivitetslogg + ) + arbeidsgiver.sendOppdatertForespørselOmArbeidsgiveropplysningerForNestePeriode( + this, + aktivitetslogg + ) tilstand(aktivitetslogg, nesteTilstand) } - private fun håndterUtbetalingHendelse(hendelse: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg) { + private fun håndterUtbetalingHendelse( + hendelse: UtbetalingHendelse, + aktivitetslogg: IAktivitetslogg + ) { if (!aktivitetslogg.harFunksjonelleFeilEllerVerre()) return aktivitetslogg.funksjonellFeil(RV_UT_5) } @@ -636,8 +978,18 @@ internal class Vedtaksperiode private constructor( private fun trengerVilkårsgrunnlag(aktivitetslogg: IAktivitetslogg) { val beregningSlutt = YearMonth.from(skjæringstidspunkt).minusMonths(1) - inntekterForSykepengegrunnlag(aktivitetslogg, skjæringstidspunkt, beregningSlutt.minusMonths(2), beregningSlutt) - inntekterForOpptjeningsvurdering(aktivitetslogg, skjæringstidspunkt, beregningSlutt, beregningSlutt) + inntekterForSykepengegrunnlag( + aktivitetslogg, + skjæringstidspunkt, + beregningSlutt.minusMonths(2), + beregningSlutt + ) + inntekterForOpptjeningsvurdering( + aktivitetslogg, + skjæringstidspunkt, + beregningSlutt, + beregningSlutt + ) arbeidsforhold(aktivitetslogg, skjæringstidspunkt) medlemskap(aktivitetslogg, skjæringstidspunkt, periode.start, periode.endInclusive) } @@ -645,7 +997,13 @@ internal class Vedtaksperiode private constructor( private fun trengerInntektFraSkatt(aktivitetslogg: IAktivitetslogg) { if (Toggle.InntektsmeldingSomIkkeKommer.enabled) { val beregningSlutt = YearMonth.from(skjæringstidspunkt).minusMonths(1) - inntekterForSykepengegrunnlagForArbeidsgiver(aktivitetslogg, skjæringstidspunkt, arbeidsgiver.organisasjonsnummer, beregningSlutt.minusMonths(2), beregningSlutt) + inntekterForSykepengegrunnlagForArbeidsgiver( + aktivitetslogg, + skjæringstidspunkt, + arbeidsgiver.organisasjonsnummer, + beregningSlutt.minusMonths(2), + beregningSlutt + ) } } @@ -656,16 +1014,24 @@ internal class Vedtaksperiode private constructor( } private fun sendTrengerArbeidsgiveropplysninger(arbeidsgiverperiode: Arbeidsgiverperiode? = finnArbeidsgiverperiode()) { - checkNotNull (arbeidsgiverperiode) { "Må ha arbeidsgiverperiode før vi sier dette." } - val forespurtInntektOgRefusjon = person.forespurtInntektOgRefusjonsopplysninger(arbeidsgiver.organisasjonsnummer, skjæringstidspunkt, periode) ?: listOf( + checkNotNull(arbeidsgiverperiode) { "Må ha arbeidsgiverperiode før vi sier dette." } + val forespurtInntektOgRefusjon = person.forespurtInntektOgRefusjonsopplysninger( + arbeidsgiver.organisasjonsnummer, + skjæringstidspunkt, + periode + ) ?: listOf( PersonObserver.Inntekt(forslag = null), PersonObserver.Refusjon(forslag = emptyList()) ) - val forespurteOpplysninger = forespurtInntektOgRefusjon + listOfNotNull(forespurtArbeidsgiverperiode(arbeidsgiverperiode)) + val forespurteOpplysninger = forespurtInntektOgRefusjon + listOfNotNull( + forespurtArbeidsgiverperiode(arbeidsgiverperiode) + ) val vedtaksperioder = when { // For å beregne riktig arbeidsgiverperiode/første fraværsdag - PersonObserver.Arbeidsgiverperiode in forespurteOpplysninger -> vedtaksperioderIArbeidsgiverperiodeTilOgMedDenne(arbeidsgiverperiode) + PersonObserver.Arbeidsgiverperiode in forespurteOpplysninger -> vedtaksperioderIArbeidsgiverperiodeTilOgMedDenne( + arbeidsgiverperiode + ) // Dersom vi ikke trenger å beregne arbeidsgiverperiode/første fravarsdag trenger vi bare denne sykemeldingsperioden else -> listOf(this) } @@ -686,7 +1052,8 @@ internal class Vedtaksperiode private constructor( private fun vedtaksperioderIArbeidsgiverperiodeTilOgMedDenne(arbeidsgiverperiode: Arbeidsgiverperiode?): List { if (arbeidsgiverperiode == null) return listOf(this) - return arbeidsgiver.vedtaksperioderKnyttetTilArbeidsgiverperiode(arbeidsgiverperiode).filter { it <= this } + return arbeidsgiver.vedtaksperioderKnyttetTilArbeidsgiverperiode(arbeidsgiverperiode) + .filter { it <= this } } private fun trengerIkkeArbeidsgiveropplysninger() { @@ -702,7 +1069,9 @@ internal class Vedtaksperiode private constructor( if (trengerArbeidsgiverperiode(arbeidsgiverperiode)) PersonObserver.Arbeidsgiverperiode else null private fun trengerArbeidsgiverperiode(arbeidsgiverperiode: Arbeidsgiverperiode?) = - arbeidsgiverperiode != null && arbeidsgiverperiode.forventerArbeidsgiverperiodeopplysning(periode) + arbeidsgiverperiode != null && arbeidsgiverperiode.forventerArbeidsgiverperiodeopplysning( + periode + ) && harIkkeFåttOpplysningerOmArbeidsgiverperiode(arbeidsgiverperiode) private fun harIkkeFåttOpplysningerOmArbeidsgiverperiode(arbeidsgiverperiode: Arbeidsgiverperiode) = @@ -714,7 +1083,9 @@ internal class Vedtaksperiode private constructor( val trengerArbeidsgiverperiode = trengerArbeidsgiverperiode(arbeidsgiverperiode) val vedtaksperioder = when { // For å beregne riktig arbeidsgiverperiode/første fraværsdag - trengerArbeidsgiverperiode -> vedtaksperioderIArbeidsgiverperiodeTilOgMedDenne(arbeidsgiverperiode) + trengerArbeidsgiverperiode -> vedtaksperioderIArbeidsgiverperiodeTilOgMedDenne( + arbeidsgiverperiode + ) // Dersom vi ikke trenger å beregne arbeidsgiverperiode/første fravarsdag trenger vi bare denne sykemeldingsperioden else -> listOf(this) } @@ -756,17 +1127,24 @@ internal class Vedtaksperiode private constructor( dokumentsporing: Set ) { if (finnArbeidsgiverperiode()?.dekkesAvArbeidsgiver(periode) != false) { - jurist.logg(`§ 8-17 ledd 1 bokstav a - arbeidsgiversøknad`(periode, sykdomstidslinje.subsumsjonsformat())) + jurist.logg( + `§ 8-17 ledd 1 bokstav a - arbeidsgiversøknad`( + periode, + sykdomstidslinje.subsumsjonsformat() + ) + ) } - person.avsluttetUtenVedtak(PersonObserver.AvsluttetUtenVedtakEvent( - organisasjonsnummer = arbeidsgiver.organisasjonsnummer, - vedtaksperiodeId = id, - behandlingId = behandlingId, - periode = periode, - hendelseIder = hendelseIder, - skjæringstidspunkt = skjæringstidspunkt, - avsluttetTidspunkt = tidsstempel - )) + person.avsluttetUtenVedtak( + PersonObserver.AvsluttetUtenVedtakEvent( + organisasjonsnummer = arbeidsgiver.organisasjonsnummer, + vedtaksperiodeId = id, + behandlingId = behandlingId, + periode = periode, + hendelseIder = hendelseIder, + skjæringstidspunkt = skjæringstidspunkt, + avsluttetTidspunkt = tidsstempel + ) + ) person.gjenopptaBehandling(aktivitetslogg) } @@ -778,31 +1156,43 @@ internal class Vedtaksperiode private constructor( val utkastTilVedtakBuilder = utkastTilVedtakBuilder() // Til ettertanke: Her er vi aldri innom "behandlinger"-nivå, så får ikke "Grunnbeløpsregulering"-tag, men AvsluttetMedVedtak har jo ikke tags nå uansett. behandling.berik(utkastTilVedtakBuilder) - person.avsluttetMedVedtak(utkastTilVedtakBuilder.buildAvsluttedMedVedtak(vedtakFattetTidspunkt, hendelseIder)) + person.avsluttetMedVedtak( + utkastTilVedtakBuilder.buildAvsluttedMedVedtak( + vedtakFattetTidspunkt, + hendelseIder + ) + ) person.gjenopptaBehandling(aktivitetslogg) } override fun vedtakAnnullert(aktivitetslogg: IAktivitetslogg, behandlingId: UUID) { - person.vedtaksperiodeAnnullert(PersonObserver.VedtaksperiodeAnnullertEvent(periode.start, periode.endInclusive, id, arbeidsgiver.organisasjonsnummer, - behandlingId - )) + person.vedtaksperiodeAnnullert( + PersonObserver.VedtaksperiodeAnnullertEvent( + periode.start, periode.endInclusive, id, arbeidsgiver.organisasjonsnummer, + behandlingId + ) + ) } override fun behandlingLukket(behandlingId: UUID) { - person.behandlingLukket(PersonObserver.BehandlingLukketEvent( - organisasjonsnummer = arbeidsgiver.organisasjonsnummer, - vedtaksperiodeId = id, - behandlingId = behandlingId - )) + person.behandlingLukket( + PersonObserver.BehandlingLukketEvent( + organisasjonsnummer = arbeidsgiver.organisasjonsnummer, + vedtaksperiodeId = id, + behandlingId = behandlingId + ) + ) } override fun behandlingForkastet(behandlingId: UUID, hendelse: Hendelse) { - person.behandlingForkastet(PersonObserver.BehandlingForkastetEvent( - organisasjonsnummer = arbeidsgiver.organisasjonsnummer, - vedtaksperiodeId = id, - behandlingId = behandlingId, - automatiskBehandling = hendelse.metadata.automatiskBehandling - )) + person.behandlingForkastet( + PersonObserver.BehandlingForkastetEvent( + organisasjonsnummer = arbeidsgiver.organisasjonsnummer, + vedtaksperiodeId = id, + behandlingId = behandlingId, + automatiskBehandling = hendelse.metadata.automatiskBehandling + ) + ) } override fun nyBehandling( @@ -823,7 +1213,12 @@ internal class Vedtaksperiode private constructor( fom = periode.start, tom = periode.endInclusive, type = type, - kilde = PersonObserver.BehandlingOpprettetEvent.Kilde(meldingsreferanseId, innsendt, registert, avsender) + kilde = PersonObserver.BehandlingOpprettetEvent.Kilde( + meldingsreferanseId, + innsendt, + registert, + avsender + ) ) person.nyBehandling(event) } @@ -832,20 +1227,45 @@ internal class Vedtaksperiode private constructor( person.utkastTilVedtak(utkastTilVedtak) } - private fun høstingsresultater(aktivitetslogg: IAktivitetslogg, simuleringtilstand: Vedtaksperiodetilstand, godkjenningtilstand: Vedtaksperiodetilstand) = when { + private fun høstingsresultater( + aktivitetslogg: IAktivitetslogg, + simuleringtilstand: Vedtaksperiodetilstand, + godkjenningtilstand: Vedtaksperiodetilstand + ) = when { behandlinger.harUtbetalinger() -> tilstand(aktivitetslogg, simuleringtilstand) { aktivitetslogg.info("""Saken oppfyller krav for behandling, settes til "Avventer simulering"""") } + else -> tilstand(aktivitetslogg, godkjenningtilstand) { aktivitetslogg.info("""Saken oppfyller krav for behandling, settes til "Avventer godkjenning" fordi ingenting skal utbetales""") } } - private fun Vedtaksperiodetilstand.påminnelse(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { - if (!påminnelse.gjelderTilstand(aktivitetslogg, type)) return vedtaksperiode.person.vedtaksperiodeIkkePåminnet(id, arbeidsgiver.organisasjonsnummer, type) - vedtaksperiode.person.vedtaksperiodePåminnet(id, arbeidsgiver.organisasjonsnummer, påminnelse) - val beregnetMakstid = { tilstandsendringstidspunkt: LocalDateTime -> makstid(tilstandsendringstidspunkt) } - if (påminnelse.nåddMakstid(beregnetMakstid)) return håndterMakstid(vedtaksperiode, påminnelse, aktivitetslogg) + private fun Vedtaksperiodetilstand.påminnelse( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { + if (!påminnelse.gjelderTilstand( + aktivitetslogg, + type + )) return vedtaksperiode.person.vedtaksperiodeIkkePåminnet( + id, + arbeidsgiver.organisasjonsnummer, + type + ) + vedtaksperiode.person.vedtaksperiodePåminnet( + id, + arbeidsgiver.organisasjonsnummer, + påminnelse + ) + val beregnetMakstid = + { tilstandsendringstidspunkt: LocalDateTime -> makstid(tilstandsendringstidspunkt) } + if (påminnelse.nåddMakstid(beregnetMakstid)) return håndterMakstid( + vedtaksperiode, + påminnelse, + aktivitetslogg + ) håndter(vedtaksperiode, påminnelse, aktivitetslogg) } @@ -854,14 +1274,19 @@ internal class Vedtaksperiode private constructor( private fun finnArbeidsgiverperiode() = arbeidsgiver.arbeidsgiverperiode(periode) - private fun finnArbeidsgiverperiodeHensyntarForkastede() = arbeidsgiver.arbeidsgiverperiodeInkludertForkastet(periode, sykdomstidslinje) + private fun finnArbeidsgiverperiodeHensyntarForkastede() = + arbeidsgiver.arbeidsgiverperiodeInkludertForkastet(periode, sykdomstidslinje) private fun forventerInntekt(): Boolean { return Arbeidsgiverperiode.forventerInntekt(finnArbeidsgiverperiode(), periode) } private fun trengerGodkjenning(aktivitetslogg: IAktivitetslogg) { - behandlinger.godkjenning(aktivitetslogg, utkastTilVedtakBuilder(), arbeidsgiver.organisasjonsnummer) + behandlinger.godkjenning( + aktivitetslogg, + utkastTilVedtakBuilder(), + arbeidsgiver.organisasjonsnummer + ) } private fun utkastTilVedtakBuilder(): UtkastTilVedtakBuilder { @@ -887,11 +1312,17 @@ internal class Vedtaksperiode private constructor( } - internal fun igangsettOverstyring(revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg) { + internal fun igangsettOverstyring( + revurdering: Revurderingseventyr, + aktivitetslogg: IAktivitetslogg + ) { if (revurdering.ikkeRelevant(periode)) return registrerKontekst(aktivitetslogg) tilstand.igangsettOverstyring(this, revurdering, aktivitetslogg) - tilstand.arbeidsgiveropplysningerStrategi.lagreGjenbrukbareOpplysninger(this, aktivitetslogg) + tilstand.arbeidsgiveropplysningerStrategi.lagreGjenbrukbareOpplysninger( + this, + aktivitetslogg + ) } internal fun inngåIRevurderingseventyret( @@ -909,7 +1340,11 @@ internal class Vedtaksperiode private constructor( ) } - internal fun håndtertInntektPåSkjæringstidspunktet(skjæringstidspunkt: LocalDate, inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg) { + internal fun håndtertInntektPåSkjæringstidspunktet( + skjæringstidspunkt: LocalDate, + inntektsmelding: Inntektsmelding, + aktivitetslogg: IAktivitetslogg + ) { if (skjæringstidspunkt != this.skjæringstidspunkt) return if (!forventerInntekt()) return registrerKontekst(aktivitetslogg) @@ -919,7 +1354,12 @@ internal class Vedtaksperiode private constructor( private fun vedtaksperiodeVenter(venterPå: Vedtaksperiode): VedtaksperiodeVenter? { val venteårsak = venterPå.venteårsak() ?: return null val builder = VedtaksperiodeVenter.Builder() - builder.venterPå(venterPå.id, venterPå.skjæringstidspunkt, venterPå.arbeidsgiver.organisasjonsnummer, venteårsak) + builder.venterPå( + venterPå.id, + venterPå.skjæringstidspunkt, + venterPå.arbeidsgiver.organisasjonsnummer, + venteårsak + ) builder.venter( vedtaksperiodeId = id, skjæringstidspunkt = skjæringstidspunkt, @@ -948,12 +1388,28 @@ internal class Vedtaksperiode private constructor( this.registrerKontekst(kopi) } - private fun oppdaterHistorikk(ytelser: Ytelser, aktivitetslogg: IAktivitetslogg, infotrygdhistorikk: Infotrygdhistorikk) { + private fun oppdaterHistorikk( + ytelser: Ytelser, + aktivitetslogg: IAktivitetslogg, + infotrygdhistorikk: Infotrygdhistorikk + ) { val vilkårsgrunnlag = requireNotNull(vilkårsgrunnlag) aktivitetslogg.kontekst(vilkårsgrunnlag) vilkårsgrunnlag.valider(aktivitetslogg, arbeidsgiver.organisasjonsnummer) - infotrygdhistorikk.valider(aktivitetslogg, periode, skjæringstidspunkt, arbeidsgiver.organisasjonsnummer) - ytelser.oppdaterHistorikk(aktivitetslogg, periode, skjæringstidspunkt, person.nåværendeVedtaksperioder(OVERLAPPENDE_ELLER_SENERE_MED_SAMME_SKJÆRINGSTIDSPUNKT(this)).firstOrNull()?.periode) { + infotrygdhistorikk.valider( + aktivitetslogg, + periode, + skjæringstidspunkt, + arbeidsgiver.organisasjonsnummer + ) + ytelser.oppdaterHistorikk( + aktivitetslogg, + periode, + skjæringstidspunkt, + person.nåværendeVedtaksperioder( + OVERLAPPENDE_ELLER_SENERE_MED_SAMME_SKJÆRINGSTIDSPUNKT(this) + ).firstOrNull()?.periode + ) { oppdaterHistorikk( ytelser.avgrensTil(periode), aktivitetslogg, @@ -962,22 +1418,46 @@ internal class Vedtaksperiode private constructor( } } - private fun lagNyUtbetaling(arbeidsgiverSomBeregner: Arbeidsgiver, aktivitetslogg: IAktivitetslogg, maksdatoresultat: Maksdatoresultat, utbetalingstidslinje: Utbetalingstidslinje, grunnlagsdata: VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement) { - behandlinger.nyUtbetaling(this.id, this.arbeidsgiver, grunnlagsdata, aktivitetslogg, maksdatoresultat, utbetalingstidslinje) - val subsumsjonen = Utbetalingstidslinjesubsumsjon(this.jurist, this.sykdomstidslinje, utbetalingstidslinje) + private fun lagNyUtbetaling( + arbeidsgiverSomBeregner: Arbeidsgiver, + aktivitetslogg: IAktivitetslogg, + maksdatoresultat: Maksdatoresultat, + utbetalingstidslinje: Utbetalingstidslinje, + grunnlagsdata: VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement + ) { + behandlinger.nyUtbetaling( + this.id, + this.arbeidsgiver, + grunnlagsdata, + aktivitetslogg, + maksdatoresultat, + utbetalingstidslinje + ) + val subsumsjonen = + Utbetalingstidslinjesubsumsjon(this.jurist, this.sykdomstidslinje, utbetalingstidslinje) subsumsjonen.subsummer(periode, person.regler) loggDersomViTrekkerTilbakePengerPåAnnenArbeidsgiver(arbeidsgiverSomBeregner, aktivitetslogg) } - private fun loggDersomViTrekkerTilbakePengerPåAnnenArbeidsgiver(arbeidsgiverSomBeregner: Arbeidsgiver, aktivitetslogg: IAktivitetslogg) { + private fun loggDersomViTrekkerTilbakePengerPåAnnenArbeidsgiver( + arbeidsgiverSomBeregner: Arbeidsgiver, + aktivitetslogg: IAktivitetslogg + ) { if (!behandlinger.trekkerTilbakePenger()) return - if (this.arbeidsgiver === arbeidsgiverSomBeregner && !person.blitt6GBegrensetSidenSist(skjæringstidspunkt)) return + if (this.arbeidsgiver === arbeidsgiverSomBeregner && !person.blitt6GBegrensetSidenSist( + skjæringstidspunkt + )) return aktivitetslogg.info("En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere") } private fun perioderDetSkalBeregnesUtbetalingFor(): List { // lag utbetaling for seg selv + andre overlappende perioder hos andre arbeidsgivere (som ikke er utbetalt/avsluttet allerede) - return person.nåværendeVedtaksperioder { it.erKandidatForUtbetaling(this, this.skjæringstidspunkt) }.filter { it.behandlinger.klarForUtbetaling() } + return person.nåværendeVedtaksperioder { + it.erKandidatForUtbetaling( + this, + this.skjæringstidspunkt + ) + }.filter { it.behandlinger.klarForUtbetaling() } } private fun perioderSomMåHensyntasVedBeregning(): List { @@ -990,7 +1470,10 @@ internal class Vedtaksperiode private constructor( } } - private fun erKandidatForUtbetaling(periodeSomBeregner: Vedtaksperiode, skjæringstidspunktet: LocalDate): Boolean { + private fun erKandidatForUtbetaling( + periodeSomBeregner: Vedtaksperiode, + skjæringstidspunktet: LocalDate + ): Boolean { if (this === periodeSomBeregner) return true if (!forventerInntekt()) return false return this.periode.overlapperMed(periodeSomBeregner.periode) && skjæringstidspunktet == this.skjæringstidspunkt && !this.tilstand.erFerdigBehandlet @@ -1001,9 +1484,9 @@ internal class Vedtaksperiode private constructor( if (vilkårsgrunnlag != null) return null return person.vedtaksperioder { it.arbeidsgiver.organisasjonsnummer != arbeidsgiver.organisasjonsnummer && - it.skjæringstidspunkt == skjæringstidspunkt && - it.forventerInntekt() && - !it.arbeidsgiver.kanBeregneSykepengegrunnlag(skjæringstidspunkt) + it.skjæringstidspunkt == skjæringstidspunkt && + it.forventerInntekt() && + !it.arbeidsgiver.kanBeregneSykepengegrunnlag(skjæringstidspunkt) }.minOrNull() } @@ -1011,14 +1494,15 @@ internal class Vedtaksperiode private constructor( val bereningsperiode = perioderSomMåHensyntasVedBeregning().periode() return person.vedtaksperioder { it.arbeidsgiver.organisasjonsnummer != arbeidsgiver.organisasjonsnummer && - it.skjæringstidspunkt == skjæringstidspunkt && - it.periode.overlapperMed(bereningsperiode) && - it.måInnhenteInntektEllerRefusjon(Aktivitetslogg()) + it.skjæringstidspunkt == skjæringstidspunkt && + it.periode.overlapperMed(bereningsperiode) && + it.måInnhenteInntektEllerRefusjon(Aktivitetslogg()) }.minOrNull() } private fun førstePeriodeAnnenArbeidsgiverSomTrengerInntektsmelding() = - førstePeriodeAnnenArbeidsgiverSomTrengerInntekt() ?: førstePeriodeAnnenArbeidsgiverSomTrengerRefusjonsopplysninger() + førstePeriodeAnnenArbeidsgiverSomTrengerInntekt() + ?: førstePeriodeAnnenArbeidsgiverSomTrengerRefusjonsopplysninger() private fun utbetalingstidslinje() = behandlinger.utbetalingstidslinje() @@ -1026,8 +1510,10 @@ internal class Vedtaksperiode private constructor( /** krever inntekt for vedtaksperioder med samme skjæringstidspunkt som det som beregnes, tillater manglende for AUU'er */ val inntekt = inntekt ?: defaultinntektForAUU() // todo: spleis må legge inn en IkkeRapportert-inntekt for alle auuer som finnes på skjæringstidspunktet når vi vilkårsprøver - ?: error("Det er en vedtaksperiode som ikke inngår i SP: ${arbeidsgiver.organisasjonsnummer} - $id - $periode." + - "Burde ikke arbeidsgiveren være kjent i sykepengegrunnlaget, enten i form av en skatteinntekt eller en tilkommet?") + ?: error( + "Det er en vedtaksperiode som ikke inngår i SP: ${arbeidsgiver.organisasjonsnummer} - $id - $periode." + + "Burde ikke arbeidsgiveren være kjent i sykepengegrunnlaget, enten i form av en skatteinntekt eller en tilkommet?" + ) return behandlinger.lagUtbetalingstidslinje(inntekt, jurist) } @@ -1044,9 +1530,13 @@ internal class Vedtaksperiode private constructor( } internal fun refusjonsservitørForUbrukteRefusjonsopplysninger(sisteUtbetalteDagIInfotrygd: LocalDate?): Refusjonsservitør? { - val beløpstidslinje = vilkårsgrunnlag?.refusjonsopplysninger(arbeidsgiver.organisasjonsnummer)?.beløpstidslinje() ?: return null - val fraOgMed = listOfNotNull(periode.endInclusive, sisteUtbetalteDagIInfotrygd).max().nesteDag - val ubruktDel = beløpstidslinje.fraOgMed(fraOgMed).takeUnless { it.isEmpty() } ?: return null + val beløpstidslinje = + vilkårsgrunnlag?.refusjonsopplysninger(arbeidsgiver.organisasjonsnummer) + ?.beløpstidslinje() ?: return null + val fraOgMed = + listOfNotNull(periode.endInclusive, sisteUtbetalteDagIInfotrygd).max().nesteDag + val ubruktDel = + beløpstidslinje.fraOgMed(fraOgMed).takeUnless { it.isEmpty() } ?: return null return Refusjonsservitør(mapOf(startdatoPåSammenhengendeVedtaksperioder to ubruktDel)) } @@ -1060,45 +1550,73 @@ internal class Vedtaksperiode private constructor( "krever vilkårsgrunnlag for ${skjæringstidspunkt}, men har ikke. Lages det utbetaling for en periode som ikke skal lage utbetaling?" } - val (maksdatofilter, beregnetTidslinjePerArbeidsgiver) = beregnUtbetalingstidslinjeForOverlappendeVedtaksperioder(aktivitetslogg, grunnlagsdata) + val (maksdatofilter, beregnetTidslinjePerArbeidsgiver) = beregnUtbetalingstidslinjeForOverlappendeVedtaksperioder( + aktivitetslogg, + grunnlagsdata + ) perioderDetSkalBeregnesUtbetalingFor.forEach { other -> - val utbetalingstidslinje = beregnetTidslinjePerArbeidsgiver.getValue(other.arbeidsgiver.organisasjonsnummer) - val maksdatoresultat = maksdatofilter.maksdatoresultatForVedtaksperiode(other.periode, other.jurist) - other.lagNyUtbetaling(this.arbeidsgiver, other.aktivitetsloggkopi(aktivitetslogg), maksdatoresultat, utbetalingstidslinje, grunnlagsdata) + val utbetalingstidslinje = + beregnetTidslinjePerArbeidsgiver.getValue(other.arbeidsgiver.organisasjonsnummer) + val maksdatoresultat = + maksdatofilter.maksdatoresultatForVedtaksperiode(other.periode, other.jurist) + other.lagNyUtbetaling( + this.arbeidsgiver, + other.aktivitetsloggkopi(aktivitetslogg), + maksdatoresultat, + utbetalingstidslinje, + grunnlagsdata + ) } return maksdatofilter.maksdatoresultatForVedtaksperiode(periode, EmptyLog) } - private fun beregnUtbetalingstidslinjeForOverlappendeVedtaksperioder(aktivitetslogg: IAktivitetslogg, grunnlagsdata: VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement): Pair> { + private fun beregnUtbetalingstidslinjeForOverlappendeVedtaksperioder( + aktivitetslogg: IAktivitetslogg, + grunnlagsdata: VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement + ): Pair> { val uberegnetTidslinjePerArbeidsgiver = utbetalingstidslinjePerArbeidsgiver(grunnlagsdata) - return filtrerUtbetalingstidslinjer(aktivitetslogg, uberegnetTidslinjePerArbeidsgiver, grunnlagsdata) + return filtrerUtbetalingstidslinjer( + aktivitetslogg, + uberegnetTidslinjePerArbeidsgiver, + grunnlagsdata + ) } private fun utbetalingstidslinjePerArbeidsgiver(grunnlagsdata: VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement): Map { - val perioderSomMåHensyntasVedBeregning = perioderSomMåHensyntasVedBeregning().groupBy { it.arbeidsgiver.organisasjonsnummer } + val perioderSomMåHensyntasVedBeregning = + perioderSomMåHensyntasVedBeregning().groupBy { it.arbeidsgiver.organisasjonsnummer } val faktaavklarteInntekter = grunnlagsdata.faktaavklarteInntekter() - val utbetalingstidslinjer = perioderSomMåHensyntasVedBeregning.mapValues { (arbeidsgiver, vedtaksperioder) -> - val inntektForArbeidsgiver = faktaavklarteInntekter.forArbeidsgiver(arbeidsgiver) - vedtaksperioder.map { it.lagUtbetalingstidslinje(inntektForArbeidsgiver) } - } + val utbetalingstidslinjer = + perioderSomMåHensyntasVedBeregning.mapValues { (arbeidsgiver, vedtaksperioder) -> + val inntektForArbeidsgiver = faktaavklarteInntekter.forArbeidsgiver(arbeidsgiver) + vedtaksperioder.map { it.lagUtbetalingstidslinje(inntektForArbeidsgiver) } + } // nå vi må lage en ghost-tidslinje per arbeidsgiver for de som eksisterer i sykepengegrunnlaget. // resultatet er én utbetalingstidslinje per arbeidsgiver som garantert dekker perioden ${vedtaksperiode.periode}, dog kan // andre arbeidsgivere dekke litt før/litt etter, avhengig av perioden til vedtaksperiodene som overlapper return faktaavklarteInntekter.medGhostOgNyeInntekterUnderveis(utbetalingstidslinjer) } - private fun filtrerUtbetalingstidslinjer(aktivitetslogg: IAktivitetslogg, uberegnetTidslinjePerArbeidsgiver: Map, grunnlagsdata: VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement): Pair> { + private fun filtrerUtbetalingstidslinjer( + aktivitetslogg: IAktivitetslogg, + uberegnetTidslinjePerArbeidsgiver: Map, + grunnlagsdata: VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement + ): Pair> { // grunnlaget for maksdatoberegning er alt som har skjedd før, frem til og med vedtaksperioden som // beregnes - val historisktidslinjePerArbeidsgiver = person.vedtaksperioder { it.periode.endInclusive < periode.start } - .groupBy { it.arbeidsgiver.organisasjonsnummer } - .mapValues { it.value.map { it.utbetalingstidslinje() }.reduce(Utbetalingstidslinje::plus) } + val historisktidslinjePerArbeidsgiver = + person.vedtaksperioder { it.periode.endInclusive < periode.start } + .groupBy { it.arbeidsgiver.organisasjonsnummer } + .mapValues { + it.value.map { it.utbetalingstidslinje() }.reduce(Utbetalingstidslinje::plus) + } val historisktidslinje = historisktidslinjePerArbeidsgiver.values .fold(person.infotrygdhistorikk.utbetalingstidslinje(), Utbetalingstidslinje::plus) - val maksdatofilter = MaksimumSykepengedagerfilter(person.alder, person.regler, historisktidslinje) + val maksdatofilter = + MaksimumSykepengedagerfilter(person.alder, person.regler, historisktidslinje) val filtere = listOf( Sykdomsgradfilter(person.minimumSykdomsgradsvurdering), AvvisDagerEtterDødsdatofilter(person.alder), @@ -1107,38 +1625,67 @@ internal class Vedtaksperiode private constructor( MaksimumUtbetalingFilter() ) - val kjørFilter = fun(tidslinjer: Map, filter: UtbetalingstidslinjerFilter): Map { + val kjørFilter = fun( + tidslinjer: Map, + filter: UtbetalingstidslinjerFilter + ): Map { val input = tidslinjer.entries.map { (key, value) -> key to value } - val result = filter.filter(input.map { (_, tidslinje) -> tidslinje }, periode, aktivitetslogg, jurist) + val result = filter.filter( + input.map { (_, tidslinje) -> tidslinje }, + periode, + aktivitetslogg, + jurist + ) return input.zip(result) { (arbeidsgiver, _), utbetalingstidslinje -> arbeidsgiver to utbetalingstidslinje }.toMap() } - val beregnetTidslinjePerArbeidsgiver = filtere.fold(uberegnetTidslinjePerArbeidsgiver) { tidslinjer, filter -> - kjørFilter(tidslinjer, filter) - } + val beregnetTidslinjePerArbeidsgiver = + filtere.fold(uberegnetTidslinjePerArbeidsgiver) { tidslinjer, filter -> + kjørFilter(tidslinjer, filter) + } return maksdatofilter to beregnetTidslinjePerArbeidsgiver.mapValues { (arbeidsgiver, resultat) -> - listOfNotNull(historisktidslinjePerArbeidsgiver[arbeidsgiver], resultat).reduce(Utbetalingstidslinje::plus) + listOfNotNull(historisktidslinjePerArbeidsgiver[arbeidsgiver], resultat).reduce( + Utbetalingstidslinje::plus + ) } } - private fun håndterOverstyringIgangsattRevurdering(revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg) { + private fun håndterOverstyringIgangsattRevurdering( + revurdering: Revurderingseventyr, + aktivitetslogg: IAktivitetslogg + ) { revurdering.inngåSomRevurdering(this, aktivitetslogg, periode) - behandlinger.sikreNyBehandling(arbeidsgiver, revurdering.hendelse, person.beregnSkjæringstidspunkt(), arbeidsgiver.beregnArbeidsgiverperiode(jurist)) + behandlinger.sikreNyBehandling( + arbeidsgiver, + revurdering.hendelse, + person.beregnSkjæringstidspunkt(), + arbeidsgiver.beregnArbeidsgiverperiode(jurist) + ) tilstand(aktivitetslogg, AvventerRevurdering) } - private fun håndterOverstyringIgangsattFørstegangsvurdering(revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg) { + private fun håndterOverstyringIgangsattFørstegangsvurdering( + revurdering: Revurderingseventyr, + aktivitetslogg: IAktivitetslogg + ) { revurdering.inngåSomEndring(this, aktivitetslogg, periode) behandlinger.forkastUtbetaling(aktivitetslogg) - if (måInnhenteInntektEllerRefusjon(aktivitetslogg)) return tilstand(aktivitetslogg, AvventerInntektsmelding) + if (måInnhenteInntektEllerRefusjon(aktivitetslogg)) return tilstand( + aktivitetslogg, + AvventerInntektsmelding + ) tilstand(aktivitetslogg, AvventerBlokkerendePeriode) } private fun periodeRettFørHarFåttInntektsmelding(): Boolean { val rettFør = arbeidsgiver.finnVedtaksperiodeRettFør(this) ?: return false - if (rettFør.tilstand in setOf(AvsluttetUtenUtbetaling, AvventerInfotrygdHistorikk, AvventerInntektsmelding)) return false + if (rettFør.tilstand in setOf( + AvsluttetUtenUtbetaling, + AvventerInfotrygdHistorikk, + AvventerInntektsmelding + )) return false // auu-er vil kunne ligge i Avventer blokkerende periode if (rettFør.tilstand == AvventerBlokkerendePeriode && !rettFør.forventerInntekt()) return false if (rettFør.skjæringstidspunkt != this.skjæringstidspunkt) return false @@ -1146,66 +1693,168 @@ internal class Vedtaksperiode private constructor( } private fun prioritertNabolag(): List { - val (nabolagFør, nabolagEtter) = this.arbeidsgiver.finnSammenhengendeVedtaksperioder(this).partition { it.periode.endInclusive < this.periode.start } + val (nabolagFør, nabolagEtter) = this.arbeidsgiver.finnSammenhengendeVedtaksperioder(this) + .partition { it.periode.endInclusive < this.periode.start } // Vi prioriterer refusjonsopplysninger fra perioder før oss før vi sjekker forlengelsene // Når vi ser på periodene før oss starter vi med den nærmeste return (nabolagFør.asReversed() + nabolagEtter) } private fun eksisterendeRefusjonsopplysningerForTmpMigrering(): Beløpstidslinje { - val refusjonstidslinjeFraNabolaget = prioritertNabolag().firstNotNullOfOrNull { it.refusjonstidslinje.takeUnless { refusjonstidslinje -> refusjonstidslinje.isEmpty() } } ?: Beløpstidslinje() + val refusjonstidslinjeFraNabolaget = + prioritertNabolag().firstNotNullOfOrNull { it.refusjonstidslinje.takeUnless { refusjonstidslinje -> refusjonstidslinje.isEmpty() } } + ?: Beløpstidslinje() val refusjonstidslinjeFraArbeidsgiver = arbeidsgiver.refusjonstidslinjeForTmpMigrering(this) return (refusjonstidslinjeFraArbeidsgiver + refusjonstidslinjeFraNabolaget).fyll(periode) } - private fun videreførEksisterendeRefusjonsopplysninger(hendelse: Hendelse? = null, aktivitetslogg: IAktivitetslogg) { + private fun videreførEksisterendeRefusjonsopplysninger( + hendelse: Hendelse? = null, + aktivitetslogg: IAktivitetslogg + ) { if (refusjonstidslinje.isNotEmpty()) return - val refusjonstidslinjeFraNabolaget = prioritertNabolag().firstNotNullOfOrNull { it.refusjonstidslinje.takeUnless { refusjonstidslinje -> refusjonstidslinje.isEmpty() } } ?: Beløpstidslinje() + val refusjonstidslinjeFraNabolaget = + prioritertNabolag().firstNotNullOfOrNull { it.refusjonstidslinje.takeUnless { refusjonstidslinje -> refusjonstidslinje.isEmpty() } } + ?: Beløpstidslinje() val refusjonstidslinjeFraArbeidsgiver = arbeidsgiver.refusjonstidslinje(this) - val benyttetRefusjonstidslinje = (refusjonstidslinjeFraArbeidsgiver + refusjonstidslinjeFraNabolaget).fyll(periode) + val benyttetRefusjonstidslinje = + (refusjonstidslinjeFraArbeidsgiver + refusjonstidslinjeFraNabolaget).fyll(periode) if (benyttetRefusjonstidslinje.isEmpty()) return - this.behandlinger.håndterRefusjonstidslinje(arbeidsgiver, hendelse, aktivitetslogg, person.beregnSkjæringstidspunkt(), arbeidsgiver.beregnArbeidsgiverperiode(jurist), benyttetRefusjonstidslinje) + this.behandlinger.håndterRefusjonstidslinje( + arbeidsgiver, + hendelse, + aktivitetslogg, + person.beregnSkjæringstidspunkt(), + arbeidsgiver.beregnArbeidsgiverperiode(jurist), + benyttetRefusjonstidslinje + ) } internal sealed class ArbeidsgiveropplysningerStrategi { - abstract fun harInntektOgRefusjon(vedtaksperiode: Vedtaksperiode, arbeidsgiverperiode: Arbeidsgiverperiode, aktivitetslogg: IAktivitetslogg): Boolean - abstract fun harRefusjonsopplysninger(vedtaksperiode: Vedtaksperiode, arbeidsgiverperiode: Arbeidsgiverperiode, refusjonsopplysninger: Refusjonsopplysninger, aktivitetslogg: IAktivitetslogg): Boolean - abstract fun lagreGjenbrukbareOpplysninger(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) + abstract fun harInntektOgRefusjon( + vedtaksperiode: Vedtaksperiode, + arbeidsgiverperiode: Arbeidsgiverperiode, + aktivitetslogg: IAktivitetslogg + ): Boolean + + abstract fun harRefusjonsopplysninger( + vedtaksperiode: Vedtaksperiode, + arbeidsgiverperiode: Arbeidsgiverperiode, + refusjonsopplysninger: Refusjonsopplysninger, + aktivitetslogg: IAktivitetslogg + ): Boolean + + abstract fun lagreGjenbrukbareOpplysninger( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) + + protected fun harEksisterendeInntektOgRefusjon( + vedtaksperiode: Vedtaksperiode, + arbeidsgiverperiode: Arbeidsgiverperiode, + aktivitetslogg: IAktivitetslogg + ) = + harEksisterendeInntekt(vedtaksperiode) && harRefusjonsopplysninger( + vedtaksperiode, + arbeidsgiverperiode, + eksisterendeRefusjonsopplysninger(vedtaksperiode), + aktivitetslogg + ) - protected fun harEksisterendeInntektOgRefusjon(vedtaksperiode: Vedtaksperiode, arbeidsgiverperiode: Arbeidsgiverperiode, aktivitetslogg: IAktivitetslogg) = - harEksisterendeInntekt(vedtaksperiode) && harRefusjonsopplysninger(vedtaksperiode, arbeidsgiverperiode, eksisterendeRefusjonsopplysninger(vedtaksperiode), aktivitetslogg) // Inntekt vi allerede har i vilkårsgrunnlag/inntektshistorikken på arbeidsgiver private fun harEksisterendeInntekt(vedtaksperiode: Vedtaksperiode): Boolean { // inntekt kreves så lenge det ikke finnes et vilkårsgrunnlag. // hvis det finnes et vilkårsgrunnlag så antas det at inntekten er representert der (vil vi slå ut på tilkommen inntekt-error senere hvis ikke) val vilkårsgrunnlag = vedtaksperiode.vilkårsgrunnlag - return vilkårsgrunnlag != null || vedtaksperiode.arbeidsgiver.kanBeregneSykepengegrunnlag(vedtaksperiode.skjæringstidspunkt) + return vilkårsgrunnlag != null || vedtaksperiode.arbeidsgiver.kanBeregneSykepengegrunnlag( + vedtaksperiode.skjæringstidspunkt + ) } + // Refusjonsopplysningene vi allerede har i vilkårsgrunnlag/ i refusjonshistorikken på arbeidsgiver - private fun eksisterendeRefusjonsopplysninger(vedtaksperiode: Vedtaksperiode) = when (val vilkårsgrunnlag = vedtaksperiode.vilkårsgrunnlag) { - null -> vedtaksperiode.arbeidsgiver.refusjonsopplysninger(vedtaksperiode.skjæringstidspunkt) - else -> vilkårsgrunnlag.refusjonsopplysninger(vedtaksperiode.arbeidsgiver.organisasjonsnummer) - } + private fun eksisterendeRefusjonsopplysninger(vedtaksperiode: Vedtaksperiode) = + when (val vilkårsgrunnlag = vedtaksperiode.vilkårsgrunnlag) { + null -> vedtaksperiode.arbeidsgiver.refusjonsopplysninger(vedtaksperiode.skjæringstidspunkt) + else -> vilkårsgrunnlag.refusjonsopplysninger(vedtaksperiode.arbeidsgiver.organisasjonsnummer) + } } - private data object FørInntektsmelding: ArbeidsgiveropplysningerStrategi() { - override fun harInntektOgRefusjon(vedtaksperiode: Vedtaksperiode, arbeidsgiverperiode: Arbeidsgiverperiode, aktivitetslogg: IAktivitetslogg) = + private data object FørInntektsmelding : ArbeidsgiveropplysningerStrategi() { + override fun harInntektOgRefusjon( + vedtaksperiode: Vedtaksperiode, + arbeidsgiverperiode: Arbeidsgiverperiode, + aktivitetslogg: IAktivitetslogg + ) = harEksisterendeInntektOgRefusjon(vedtaksperiode, arbeidsgiverperiode, aktivitetslogg) - override fun harRefusjonsopplysninger(vedtaksperiode: Vedtaksperiode, arbeidsgiverperiode: Arbeidsgiverperiode, refusjonsopplysninger: Refusjonsopplysninger, aktivitetslogg: IAktivitetslogg) = - Arbeidsgiverperiode.harNødvendigeRefusjonsopplysninger(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode, refusjonsopplysninger, arbeidsgiverperiode, aktivitetslogg, vedtaksperiode.arbeidsgiver.organisasjonsnummer) - override fun lagreGjenbrukbareOpplysninger(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) { /* Før vi har fått inntektmelding kan vi ikke lagre gjenbrukbare opplysninger 🙅‍ */} + + override fun harRefusjonsopplysninger( + vedtaksperiode: Vedtaksperiode, + arbeidsgiverperiode: Arbeidsgiverperiode, + refusjonsopplysninger: Refusjonsopplysninger, + aktivitetslogg: IAktivitetslogg + ) = + Arbeidsgiverperiode.harNødvendigeRefusjonsopplysninger( + vedtaksperiode.skjæringstidspunkt, + vedtaksperiode.periode, + refusjonsopplysninger, + arbeidsgiverperiode, + aktivitetslogg, + vedtaksperiode.arbeidsgiver.organisasjonsnummer + ) + + override fun lagreGjenbrukbareOpplysninger( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) { /* Før vi har fått inntektmelding kan vi ikke lagre gjenbrukbare opplysninger 🙅‍ */ + } } - private data object EtterInntektsmelding: ArbeidsgiveropplysningerStrategi() { - override fun harInntektOgRefusjon(vedtaksperiode: Vedtaksperiode, arbeidsgiverperiode: Arbeidsgiverperiode, aktivitetslogg: IAktivitetslogg) = - harEksisterendeInntektOgRefusjon(vedtaksperiode, arbeidsgiverperiode, aktivitetslogg) || vedtaksperiode.behandlinger.harGjenbrukbareOpplysninger(vedtaksperiode.arbeidsgiver.organisasjonsnummer) - override fun harRefusjonsopplysninger(vedtaksperiode: Vedtaksperiode, arbeidsgiverperiode: Arbeidsgiverperiode, refusjonsopplysninger: Refusjonsopplysninger, aktivitetslogg: IAktivitetslogg) = - Arbeidsgiverperiode.harNødvendigeRefusjonsopplysningerEtterInntektsmelding(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode, refusjonsopplysninger, arbeidsgiverperiode, aktivitetslogg, vedtaksperiode.arbeidsgiver.organisasjonsnummer) - override fun lagreGjenbrukbareOpplysninger(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) { + private data object EtterInntektsmelding : ArbeidsgiveropplysningerStrategi() { + override fun harInntektOgRefusjon( + vedtaksperiode: Vedtaksperiode, + arbeidsgiverperiode: Arbeidsgiverperiode, + aktivitetslogg: IAktivitetslogg + ) = + harEksisterendeInntektOgRefusjon( + vedtaksperiode, + arbeidsgiverperiode, + aktivitetslogg + ) || vedtaksperiode.behandlinger.harGjenbrukbareOpplysninger(vedtaksperiode.arbeidsgiver.organisasjonsnummer) + + override fun harRefusjonsopplysninger( + vedtaksperiode: Vedtaksperiode, + arbeidsgiverperiode: Arbeidsgiverperiode, + refusjonsopplysninger: Refusjonsopplysninger, + aktivitetslogg: IAktivitetslogg + ) = + Arbeidsgiverperiode.harNødvendigeRefusjonsopplysningerEtterInntektsmelding( + vedtaksperiode.skjæringstidspunkt, + vedtaksperiode.periode, + refusjonsopplysninger, + arbeidsgiverperiode, + aktivitetslogg, + vedtaksperiode.arbeidsgiver.organisasjonsnummer + ) + + override fun lagreGjenbrukbareOpplysninger( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) { val arbeidsgiverperiode = vedtaksperiode.finnArbeidsgiverperiode() ?: return - if (vedtaksperiode.tilstand == AvventerBlokkerendePeriode && !arbeidsgiverperiode.forventerInntekt(vedtaksperiode.periode)) return // En periode i AvventerBlokkerendePeriode som skal tilbake AvsluttetUtenUtbetaling trenger uansett ikke inntekt og/eller refusjon - if (harEksisterendeInntektOgRefusjon(vedtaksperiode, arbeidsgiverperiode, aktivitetslogg)) return // Trenger ikke lagre gjenbrukbare inntekter om vi har det vi trenger allerede - vedtaksperiode.behandlinger.lagreGjenbrukbareOpplysninger(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.arbeidsgiver.organisasjonsnummer, vedtaksperiode.arbeidsgiver, aktivitetslogg) // Ikke 100% at dette lagrer noe. F.eks. revurderinger med Infotryfd-vilkårsgrunnlag har ikke noe å gjenbruke + if (vedtaksperiode.tilstand == AvventerBlokkerendePeriode && !arbeidsgiverperiode.forventerInntekt( + vedtaksperiode.periode + )) return // En periode i AvventerBlokkerendePeriode som skal tilbake AvsluttetUtenUtbetaling trenger uansett ikke inntekt og/eller refusjon + if (harEksisterendeInntektOgRefusjon( + vedtaksperiode, + arbeidsgiverperiode, + aktivitetslogg + )) return // Trenger ikke lagre gjenbrukbare inntekter om vi har det vi trenger allerede + vedtaksperiode.behandlinger.lagreGjenbrukbareOpplysninger( + vedtaksperiode.skjæringstidspunkt, + vedtaksperiode.arbeidsgiver.organisasjonsnummer, + vedtaksperiode.arbeidsgiver, + aktivitetslogg + ) // Ikke 100% at dette lagrer noe. F.eks. revurderinger med Infotryfd-vilkårsgrunnlag har ikke noe å gjenbruke } } @@ -1219,17 +1868,31 @@ internal class Vedtaksperiode private constructor( fun håndterRevurdering(aktivitetslogg: IAktivitetslogg): IAktivitetslogg { return FunksjonelleFeilTilVarsler(aktivitetslogg) } - fun håndterFørstegangsbehandling(aktivitetslogg: IAktivitetslogg, vedtaksperiode: Vedtaksperiode): IAktivitetslogg { - if (vedtaksperiode.arbeidsgiver.kanForkastes(vedtaksperiode, Aktivitetslogg())) return aktivitetslogg + + fun håndterFørstegangsbehandling( + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Vedtaksperiode + ): IAktivitetslogg { + if (vedtaksperiode.arbeidsgiver.kanForkastes( + vedtaksperiode, + Aktivitetslogg() + )) return aktivitetslogg // Om førstegangsbehandling ikke kan forkastes (typisk Out of Order/ omgjøring av AUU) så håndteres det som om det er en revurdering return håndterRevurdering(aktivitetslogg) } fun entering(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) {} - fun makstid(vedtaksperiode: Vedtaksperiode, tilstandsendringstidspunkt: LocalDateTime): LocalDateTime = LocalDateTime.MAX + fun makstid( + vedtaksperiode: Vedtaksperiode, + tilstandsendringstidspunkt: LocalDateTime + ): LocalDateTime = LocalDateTime.MAX - fun håndterMakstid(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + fun håndterMakstid( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.funksjonellFeil(RV_VT_1) vedtaksperiode.forkast(påminnelse, aktivitetslogg) } @@ -1237,8 +1900,8 @@ internal class Vedtaksperiode private constructor( override fun toSpesifikkKontekst(): SpesifikkKontekst { return SpesifikkKontekst( "Tilstand", mapOf( - "tilstand" to type.name - ) + "tilstand" to type.name + ) ) } @@ -1246,7 +1909,10 @@ internal class Vedtaksperiode private constructor( fun venteårsak(vedtaksperiode: Vedtaksperiode): Venteårsak? // venter du på noe? - fun venter(vedtaksperiode: Vedtaksperiode, nestemann: Vedtaksperiode): VedtaksperiodeVenter? = null + fun venter( + vedtaksperiode: Vedtaksperiode, + nestemann: Vedtaksperiode + ): VedtaksperiodeVenter? = null fun håndter( vedtaksperiode: Vedtaksperiode, @@ -1256,19 +1922,32 @@ internal class Vedtaksperiode private constructor( infotrygdhistorikk: Infotrygdhistorikk ) - fun replayUtført(vedtaksperiode: Vedtaksperiode, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) {} + fun replayUtført( + vedtaksperiode: Vedtaksperiode, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) { + } + fun inntektsmeldingFerdigbehandlet( vedtaksperiode: Vedtaksperiode, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg - ) {} + ) { + } + fun skalHåndtereDager( vedtaksperiode: Vedtaksperiode, dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg ) = dager.skalHåndteresAv(vedtaksperiode.periode) - fun håndter(vedtaksperiode: Vedtaksperiode, dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg) { + + fun håndter( + vedtaksperiode: Vedtaksperiode, + dager: DagerFraInntektsmelding, + aktivitetslogg: IAktivitetslogg + ) { vedtaksperiode.håndterKorrigerendeInntektsmelding(dager, aktivitetslogg) } @@ -1276,7 +1955,8 @@ internal class Vedtaksperiode private constructor( vedtaksperiode: Vedtaksperiode, hendelse: Inntektsmelding, aktivitetslogg: IAktivitetslogg - ) {} + ) { + } fun håndter( vedtaksperiode: Vedtaksperiode, @@ -1285,7 +1965,12 @@ internal class Vedtaksperiode private constructor( ) { aktivitetslogg.info("Forventet ikke sykepengegrunnlag for arbeidsgiver i %s".format(type.name)) } - fun håndter(vedtaksperiode: Vedtaksperiode, vilkårsgrunnlag: Vilkårsgrunnlag, aktivitetslogg: IAktivitetslogg) { + + fun håndter( + vedtaksperiode: Vedtaksperiode, + vilkårsgrunnlag: Vilkårsgrunnlag, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.info("Forventet ikke vilkårsgrunnlag i %s".format(type.name)) } @@ -1294,7 +1979,8 @@ internal class Vedtaksperiode private constructor( anmodningOmForkasting: AnmodningOmForkasting, aktivitetslogg: IAktivitetslogg ) { - val kanForkastes = vedtaksperiode.arbeidsgiver.kanForkastes(vedtaksperiode, aktivitetslogg) + val kanForkastes = + vedtaksperiode.arbeidsgiver.kanForkastes(vedtaksperiode, aktivitetslogg) if (kanForkastes) return aktivitetslogg.info("Avslår anmodning om forkasting i ${type.name} (kan forkastes)") aktivitetslogg.info("Avslår anmodning om forkasting i ${type.name} (kan ikke forkastes)") } @@ -1304,7 +1990,8 @@ internal class Vedtaksperiode private constructor( hendelse: Hendelse, aktivitetslogg: IAktivitetslogg, infotrygdhistorikk: Infotrygdhistorikk - ) {} + ) { + } fun håndter( person: Person, @@ -1327,17 +2014,34 @@ internal class Vedtaksperiode private constructor( aktivitetslogg.info("Forventet ikke utbetalingsavgjørelse i %s".format(type.name)) } - fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) {} + fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { + } - fun håndter(vedtaksperiode: Vedtaksperiode, simulering: Simulering, aktivitetslogg: IAktivitetslogg) { + fun håndter( + vedtaksperiode: Vedtaksperiode, + simulering: Simulering, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.info("Forventet ikke simulering i %s".format(type.name)) } - fun håndter(vedtaksperiode: Vedtaksperiode, hendelse: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg) { + fun håndter( + vedtaksperiode: Vedtaksperiode, + hendelse: UtbetalingHendelse, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.info("Forventet ikke utbetaling i %s".format(type.name)) } - fun håndter(vedtaksperiode: Vedtaksperiode, hendelse: OverstyrTidslinje, aktivitetslogg: IAktivitetslogg) { + fun håndter( + vedtaksperiode: Vedtaksperiode, + hendelse: OverstyrTidslinje, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.info("Forventet ikke overstyring fra saksbehandler i %s".format(type.name)) } @@ -1345,7 +2049,8 @@ internal class Vedtaksperiode private constructor( vedtaksperiode: Vedtaksperiode, hendelse: OverstyrArbeidsgiveropplysninger, aktivitetslogg: IAktivitetslogg - ) {} + ) { + } fun nyAnnullering(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) {} @@ -1363,7 +2068,11 @@ internal class Vedtaksperiode private constructor( aktivitetslogg: IAktivitetslogg ) - fun beregnUtbetalinger(vedtaksperiode: Vedtaksperiode, ytelser: Ytelser, aktivitetslogg: IAktivitetslogg) { + fun beregnUtbetalinger( + vedtaksperiode: Vedtaksperiode, + ytelser: Ytelser, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.info("Etter å ha oppdatert sykdomshistorikken fra ytelser står vi nå i ${type.name}. Avventer beregning av utbetalinger.") } @@ -1383,28 +2092,57 @@ internal class Vedtaksperiode private constructor( arbeidsgivere: List, infotrygdhistorikk: Infotrygdhistorikk ) { - val harSenereUtbetalinger = vedtaksperiode.person.vedtaksperioder(NYERE_SKJÆRINGSTIDSPUNKT_MED_UTBETALING(vedtaksperiode)).isNotEmpty() - val harSenereAUU = vedtaksperiode.person.vedtaksperioder(NYERE_SKJÆRINGSTIDSPUNKT_UTEN_UTBETALING(vedtaksperiode)).isNotEmpty() + val harSenereUtbetalinger = vedtaksperiode.person.vedtaksperioder( + NYERE_SKJÆRINGSTIDSPUNKT_MED_UTBETALING(vedtaksperiode) + ).isNotEmpty() + val harSenereAUU = vedtaksperiode.person.vedtaksperioder( + NYERE_SKJÆRINGSTIDSPUNKT_UTEN_UTBETALING(vedtaksperiode) + ).isNotEmpty() if (harSenereUtbetalinger || harSenereAUU) { aktivitetslogg.varsel(RV_OO_1) } - vedtaksperiode.arbeidsgiver.vurderOmSøknadIkkeKanHåndteres(aktivitetslogg, vedtaksperiode, arbeidsgivere) - infotrygdhistorikk.valider(aktivitetslogg, vedtaksperiode.periode, vedtaksperiode.skjæringstidspunkt, vedtaksperiode.arbeidsgiver.organisasjonsnummer) + vedtaksperiode.arbeidsgiver.vurderOmSøknadIkkeKanHåndteres( + aktivitetslogg, + vedtaksperiode, + arbeidsgivere + ) + infotrygdhistorikk.valider( + aktivitetslogg, + vedtaksperiode.periode, + vedtaksperiode.skjæringstidspunkt, + vedtaksperiode.arbeidsgiver.organisasjonsnummer + ) vedtaksperiode.håndterSøknad(søknad, aktivitetslogg) vedtaksperiode.videreførEksisterendeRefusjonsopplysninger(søknad, aktivitetslogg) aktivitetslogg.info("Fullført behandling av søknad") - vedtaksperiode.person.igangsettOverstyring(Revurderingseventyr.Companion.nyPeriode(søknad, vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode), aktivitetslogg) + vedtaksperiode.person.igangsettOverstyring( + Revurderingseventyr.Companion.nyPeriode( + søknad, + vedtaksperiode.skjæringstidspunkt, + vedtaksperiode.periode + ), aktivitetslogg + ) if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return - vedtaksperiode.tilstand(aktivitetslogg, when { + vedtaksperiode.tilstand( + aktivitetslogg, when { !infotrygdhistorikk.harHistorikk() -> AvventerInfotrygdHistorikk vedtaksperiode.periodeRettFørHarFåttInntektsmelding() -> AvventerBlokkerendePeriode - periodeRettEtterHarFåttInntektsmelding(vedtaksperiode, aktivitetslogg) -> AvventerBlokkerendePeriode + periodeRettEtterHarFåttInntektsmelding( + vedtaksperiode, + aktivitetslogg + ) -> AvventerBlokkerendePeriode + else -> AvventerInntektsmelding - }) + } + ) } - private fun periodeRettEtterHarFåttInntektsmelding(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg): Boolean { - val rettEtter = vedtaksperiode.arbeidsgiver.finnVedtaksperiodeRettEtter(vedtaksperiode) ?: return false + private fun periodeRettEtterHarFåttInntektsmelding( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ): Boolean { + val rettEtter = vedtaksperiode.arbeidsgiver.finnVedtaksperiodeRettEtter(vedtaksperiode) + ?: return false // antagelse at om vi har en periode rett etter oss, og vi har tilstrekkelig informasjon til utbetaling, så har vi endt // opp med å gjenbruke tidsnære opplysninger og trenger derfor ikke egen IM return !rettEtter.måInnhenteInntektEllerRefusjon(aktivitetslogg) @@ -1414,7 +2152,8 @@ internal class Vedtaksperiode private constructor( vedtaksperiode: Vedtaksperiode, revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg - ) {} + ) { + } } internal data object AvventerInfotrygdHistorikk : Vedtaksperiodetilstand { @@ -1456,7 +2195,11 @@ internal class Vedtaksperiode private constructor( } } - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { vedtaksperiode.person.trengerHistorikkFraInfotrygd(aktivitetslogg) } @@ -1469,17 +2212,20 @@ internal class Vedtaksperiode private constructor( ) { vedtaksperiode.håndterOverlappendeSøknad(søknad, aktivitetslogg) } + override fun håndter( vedtaksperiode: Vedtaksperiode, dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg - ) {} + ) { + } override fun igangsettOverstyring( vedtaksperiode: Vedtaksperiode, revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg - ) {} + ) { + } } internal data object AvventerRevurdering : Vedtaksperiodetilstand { @@ -1503,7 +2249,10 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.behandlinger.forkastUtbetaling(aktivitetslogg) } - override fun venter(vedtaksperiode: Vedtaksperiode, nestemann: Vedtaksperiode): VedtaksperiodeVenter? { + override fun venter( + vedtaksperiode: Vedtaksperiode, + nestemann: Vedtaksperiode + ): VedtaksperiodeVenter? { val venterPå = tilstand(vedtaksperiode, Aktivitetslogg()).venterPå() ?: nestemann return vedtaksperiode.vedtaksperiodeVenter(venterPå) } @@ -1513,7 +2262,10 @@ internal class Vedtaksperiode private constructor( hendelse: Hendelse, aktivitetslogg: IAktivitetslogg ) { - tilstand(vedtaksperiode, aktivitetslogg).gjenopptaBehandling(vedtaksperiode, aktivitetslogg) + tilstand(vedtaksperiode, aktivitetslogg).gjenopptaBehandling( + vedtaksperiode, + aktivitetslogg + ) } override fun håndter( @@ -1543,9 +2295,18 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.håndterOverlappendeSøknadRevurdering(søknad, aktivitetslogg) } - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { if (påminnelse.skalReberegnes()) { - vedtaksperiode.behandlinger.lagreGjenbrukbareOpplysninger(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.arbeidsgiver.organisasjonsnummer, vedtaksperiode.arbeidsgiver, aktivitetslogg) + vedtaksperiode.behandlinger.lagreGjenbrukbareOpplysninger( + vedtaksperiode.skjæringstidspunkt, + vedtaksperiode.arbeidsgiver.organisasjonsnummer, + vedtaksperiode.arbeidsgiver, + aktivitetslogg + ) } vedtaksperiode.person.gjenopptaBehandling(aktivitetslogg) } @@ -1565,11 +2326,21 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.inntektsmeldingHåndtert(hendelse) } - private fun tilstand(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg): Tilstand { - if (vedtaksperiode.harFlereSkjæringstidspunkt()) return HarFlereSkjæringstidspunkt(vedtaksperiode) - if (vedtaksperiode.måInnhenteInntektEllerRefusjon(aktivitetslogg)) return TrengerInntektsmelding(vedtaksperiode) - val førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver = vedtaksperiode.førstePeriodeAnnenArbeidsgiverSomTrengerInntektsmelding() - if (førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver != null) return TrengerInntektsmeldingAnnenArbeidsgiver(førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver) + private fun tilstand( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ): Tilstand { + if (vedtaksperiode.harFlereSkjæringstidspunkt()) return HarFlereSkjæringstidspunkt( + vedtaksperiode + ) + if (vedtaksperiode.måInnhenteInntektEllerRefusjon(aktivitetslogg)) return TrengerInntektsmelding( + vedtaksperiode + ) + val førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver = + vedtaksperiode.førstePeriodeAnnenArbeidsgiverSomTrengerInntektsmelding() + if (førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver != null) return TrengerInntektsmeldingAnnenArbeidsgiver( + førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver + ) if (vedtaksperiode.vilkårsgrunnlag == null) return KlarForVilkårsprøving return KlarForBeregning } @@ -1580,7 +2351,8 @@ internal class Vedtaksperiode private constructor( fun gjenopptaBehandling(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) } - private data class TrengerInntektsmelding(private val vedtaksperiode: Vedtaksperiode): Tilstand { + private data class TrengerInntektsmelding(private val vedtaksperiode: Vedtaksperiode) : + Tilstand { override fun venterPå() = vedtaksperiode override fun venteårsak() = INNTEKTSMELDING fordi SKJÆRINGSTIDSPUNKT_FLYTTET_REVURDERING override fun gjenopptaBehandling( @@ -1591,7 +2363,8 @@ internal class Vedtaksperiode private constructor( } } - private data class HarFlereSkjæringstidspunkt(private val vedtaksperiode: Vedtaksperiode): Tilstand { + private data class HarFlereSkjæringstidspunkt(private val vedtaksperiode: Vedtaksperiode) : + Tilstand { override fun venterPå() = vedtaksperiode override fun venteårsak() = HJELP fordi FLERE_SKJÆRINGSTIDSPUNKT override fun gjenopptaBehandling( @@ -1602,7 +2375,8 @@ internal class Vedtaksperiode private constructor( } } - private data class TrengerInntektsmeldingAnnenArbeidsgiver(private val trengerInntektsmelding: Vedtaksperiode): Tilstand { + private data class TrengerInntektsmeldingAnnenArbeidsgiver(private val trengerInntektsmelding: Vedtaksperiode) : + Tilstand { override fun venteårsak() = trengerInntektsmelding.venteårsak() override fun venterPå() = trengerInntektsmelding override fun gjenopptaBehandling( @@ -1613,7 +2387,7 @@ internal class Vedtaksperiode private constructor( } } - private data object KlarForVilkårsprøving: Tilstand { + private data object KlarForVilkårsprøving : Tilstand { override fun venteårsak() = null override fun gjenopptaBehandling( vedtaksperiode: Vedtaksperiode, @@ -1625,7 +2399,7 @@ internal class Vedtaksperiode private constructor( } } - private data object KlarForBeregning: Tilstand { + private data object KlarForBeregning : Tilstand { override fun venteårsak() = null override fun gjenopptaBehandling( vedtaksperiode: Vedtaksperiode, @@ -1659,18 +2433,24 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.håndterOverstyringIgangsattRevurdering(revurdering, aktivitetslogg) } - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { påminnelse.eventyr(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode)?.also { aktivitetslogg.info("Reberegner perioden ettersom det er ønsket") vedtaksperiode.person.igangsettOverstyring(it, aktivitetslogg) } ?: vedtaksperiode.trengerYtelser(aktivitetslogg) } + override fun skalHåndtereDager( vedtaksperiode: Vedtaksperiode, dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg ) = vedtaksperiode.skalHåndtereDagerRevurdering(dager, aktivitetslogg) + override fun håndter( person: Person, arbeidsgiver: Arbeidsgiver, @@ -1693,8 +2473,18 @@ internal class Vedtaksperiode private constructor( if (vedtaksperiode.harTilkomneInntekter() && !ytelser.andreYtelserPerioder().erTom()) { aktivitetslogg.varsel(Varselkode.RV_IV_9) } - ytelser.valider(aktivitetslogg, vedtaksperiode.periode, vedtaksperiode.skjæringstidspunkt, maksdatoresultat.maksdato, vedtaksperiode.erForlengelse()) - vedtaksperiode.høstingsresultater(aktivitetslogg, AvventerSimuleringRevurdering, AvventerGodkjenningRevurdering) + ytelser.valider( + aktivitetslogg, + vedtaksperiode.periode, + vedtaksperiode.skjæringstidspunkt, + maksdatoresultat.maksdato, + vedtaksperiode.erForlengelse() + ) + vedtaksperiode.høstingsresultater( + aktivitetslogg, + AvventerSimuleringRevurdering, + AvventerGodkjenningRevurdering + ) } override fun håndter( @@ -1733,7 +2523,11 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.håndterOverstyringIgangsattRevurdering(revurdering, aktivitetslogg) } - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { vedtaksperiode.trengerVilkårsgrunnlag(aktivitetslogg) } @@ -1743,14 +2537,20 @@ internal class Vedtaksperiode private constructor( aktivitetslogg: IAktivitetslogg ) { val aktivitetslogg = håndterRevurdering(aktivitetslogg) - vedtaksperiode.håndterVilkårsgrunnlag(vilkårsgrunnlag, aktivitetslogg, AvventerHistorikkRevurdering) + vedtaksperiode.håndterVilkårsgrunnlag( + vilkårsgrunnlag, + aktivitetslogg, + AvventerHistorikkRevurdering + ) } + override fun skalHåndtereDager( vedtaksperiode: Vedtaksperiode, dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg ) = vedtaksperiode.skalHåndtereDagerRevurdering(dager, aktivitetslogg) + override fun håndter( vedtaksperiode: Vedtaksperiode, søknad: Søknad, @@ -1764,7 +2564,10 @@ internal class Vedtaksperiode private constructor( internal data object AvventerInntektsmelding : Vedtaksperiodetilstand { override val type: TilstandType = AVVENTER_INNTEKTSMELDING - override fun makstid(vedtaksperiode: Vedtaksperiode, tilstandsendringstidspunkt: LocalDateTime): LocalDateTime = + override fun makstid( + vedtaksperiode: Vedtaksperiode, + tilstandsendringstidspunkt: LocalDateTime + ): LocalDateTime = tilstandsendringstidspunkt.plusDays(180) override val arbeidsgiveropplysningerStrategi get(): ArbeidsgiveropplysningerStrategi = FørInntektsmelding @@ -1809,7 +2612,10 @@ internal class Vedtaksperiode private constructor( aktivitetslogg: IAktivitetslogg ) { vedtaksperiode.håndterDager(dager, aktivitetslogg) - if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return vedtaksperiode.forkast(dager.hendelse, aktivitetslogg) + if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return vedtaksperiode.forkast( + dager.hendelse, + aktivitetslogg + ) } override fun håndtertInntektPåSkjæringstidspunktet( @@ -1837,11 +2643,20 @@ internal class Vedtaksperiode private constructor( ) { vedtaksperiode.videreførEksisterendeRefusjonsopplysninger(aktivitetslogg = aktivitetslogg) vurderOmKanGåVidere(vedtaksperiode, revurdering.hendelse, aktivitetslogg) - if (vedtaksperiode.tilstand !in setOf(AvventerInntektsmelding, AvventerBlokkerendePeriode)) return - if (vedtaksperiode.tilstand == AvventerInntektsmelding && vedtaksperiode.sjekkTrengerArbeidsgiveropplysninger(aktivitetslogg)) { + if (vedtaksperiode.tilstand !in setOf( + AvventerInntektsmelding, + AvventerBlokkerendePeriode + )) return + if (vedtaksperiode.tilstand == AvventerInntektsmelding && vedtaksperiode.sjekkTrengerArbeidsgiveropplysninger( + aktivitetslogg + )) { vedtaksperiode.sendTrengerArbeidsgiveropplysninger() } - revurdering.inngåVedSaksbehandlerendring(vedtaksperiode, aktivitetslogg, vedtaksperiode.periode) + revurdering.inngåVedSaksbehandlerendring( + vedtaksperiode, + aktivitetslogg, + vedtaksperiode.periode + ) } override fun håndter( @@ -1853,7 +2668,12 @@ internal class Vedtaksperiode private constructor( validation(aktivitetslogg) { onValidationFailed { vedtaksperiode.forkast(hendelse, aktivitetslogg) } valider { - infotrygdhistorikk.valider(this, vedtaksperiode.periode, vedtaksperiode.skjæringstidspunkt, vedtaksperiode.arbeidsgiver.organisasjonsnummer) + infotrygdhistorikk.valider( + this, + vedtaksperiode.periode, + vedtaksperiode.skjæringstidspunkt, + vedtaksperiode.arbeidsgiver.organisasjonsnummer + ) } } } @@ -1866,8 +2686,15 @@ internal class Vedtaksperiode private constructor( aktivitetslogg.info("Håndterer sykepengegrunnlag for arbeidsgiver") aktivitetslogg.varsel(Varselkode.RV_IV_10) vedtaksperiode.arbeidsgiver.lagreInntekt(sykepengegrunnlagForArbeidsgiver) - vedtaksperiode.behandlinger.sendSkatteinntekterLagtTilGrunn(sykepengegrunnlagForArbeidsgiver, vedtaksperiode.person) - vedtaksperiode.behandlinger.oppdaterDokumentsporing(Dokumentsporing.inntektFraAOrdingen(sykepengegrunnlagForArbeidsgiver.metadata.meldingsreferanseId)) + vedtaksperiode.behandlinger.sendSkatteinntekterLagtTilGrunn( + sykepengegrunnlagForArbeidsgiver, + vedtaksperiode.person + ) + vedtaksperiode.behandlinger.oppdaterDokumentsporing( + Dokumentsporing.inntektFraAOrdingen( + sykepengegrunnlagForArbeidsgiver.metadata.meldingsreferanseId + ) + ) val ingenRefusjon = Beløpstidslinje.fra( periode = vedtaksperiode.periode, beløp = Inntekt.INGEN, @@ -1882,13 +2709,19 @@ internal class Vedtaksperiode private constructor( hendelse = sykepengegrunnlagForArbeidsgiver, aktivitetslogg = aktivitetslogg, beregnSkjæringstidspunkt = vedtaksperiode.person.beregnSkjæringstidspunkt(), - beregnArbeidsgiverperiode = vedtaksperiode.arbeidsgiver.beregnArbeidsgiverperiode(vedtaksperiode.jurist), + beregnArbeidsgiverperiode = vedtaksperiode.arbeidsgiver.beregnArbeidsgiverperiode( + vedtaksperiode.jurist + ), refusjonstidslinje = ingenRefusjon ) vedtaksperiode.tilstand(aktivitetslogg, AvventerBlokkerendePeriode) } - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { if (vedtaksperiode.periodeRettFørHarFåttInntektsmelding()) { aktivitetslogg.info("Periode ser ut til å feilaktig vente på inntektsmelding. ") return vedtaksperiode.tilstand(aktivitetslogg, AvventerBlokkerendePeriode) @@ -1919,7 +2752,11 @@ internal class Vedtaksperiode private constructor( vurderOmKanGåVidere(vedtaksperiode, hendelse, aktivitetslogg) } - override fun replayUtført(vedtaksperiode: Vedtaksperiode, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) { + override fun replayUtført( + vedtaksperiode: Vedtaksperiode, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) { if (vedtaksperiode.sjekkTrengerArbeidsgiveropplysninger(aktivitetslogg)) { vedtaksperiode.sendTrengerArbeidsgiveropplysninger() // ved out-of-order gir vi beskjed om at vi ikke trenger arbeidsgiveropplysninger for den seneste perioden lenger @@ -1946,8 +2783,15 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.etterkomAnmodningOmForkasting(anmodningOmForkasting, aktivitetslogg) } - private fun vurderOmKanGåVidere(vedtaksperiode: Vedtaksperiode, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) { - if (!vedtaksperiode.forventerInntekt()) return vedtaksperiode.tilstand(aktivitetslogg, AvsluttetUtenUtbetaling) + private fun vurderOmKanGåVidere( + vedtaksperiode: Vedtaksperiode, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) { + if (!vedtaksperiode.forventerInntekt()) return vedtaksperiode.tilstand( + aktivitetslogg, + AvsluttetUtenUtbetaling + ) if (vedtaksperiode.manglerNødvendigInntektVedTidligereBeregnetSykepengegrunnlag()) { aktivitetslogg.funksjonellFeil(RV_SV_2) return vedtaksperiode.forkast(hendelse, aktivitetslogg) @@ -1970,15 +2814,25 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.person.gjenopptaBehandling(aktivitetslogg) } - override fun makstid(vedtaksperiode: Vedtaksperiode, tilstandsendringstidspunkt: LocalDateTime) = when { - vedtaksperiode.person.avventerSøknad(vedtaksperiode.periode) -> tilstandsendringstidspunkt.plusDays(90) + override fun makstid( + vedtaksperiode: Vedtaksperiode, + tilstandsendringstidspunkt: LocalDateTime + ) = when { + vedtaksperiode.person.avventerSøknad(vedtaksperiode.periode) -> tilstandsendringstidspunkt.plusDays( + 90 + ) + else -> LocalDateTime.MAX } override fun venteårsak(vedtaksperiode: Vedtaksperiode): Venteårsak? { return tilstand(Aktivitetslogg(), vedtaksperiode).venteårsak() } - override fun venter(vedtaksperiode: Vedtaksperiode, nestemann: Vedtaksperiode): VedtaksperiodeVenter? { + + override fun venter( + vedtaksperiode: Vedtaksperiode, + nestemann: Vedtaksperiode + ): VedtaksperiodeVenter? { val venterPå = tilstand(Aktivitetslogg(), vedtaksperiode).venterPå() ?: nestemann return vedtaksperiode.vedtaksperiodeVenter(venterPå) } @@ -2006,9 +2860,15 @@ internal class Vedtaksperiode private constructor( dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg ) { - if (vedtaksperiode.forventerInntekt()) return vedtaksperiode.håndterKorrigerendeInntektsmelding(dager, aktivitetslogg) + if (vedtaksperiode.forventerInntekt()) return vedtaksperiode.håndterKorrigerendeInntektsmelding( + dager, + aktivitetslogg + ) vedtaksperiode.håndterDager(dager, aktivitetslogg) - if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return vedtaksperiode.forkast(dager.hendelse, aktivitetslogg) + if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return vedtaksperiode.forkast( + dager.hendelse, + aktivitetslogg + ) } override fun håndtertInntektPåSkjæringstidspunktet( @@ -2016,7 +2876,10 @@ internal class Vedtaksperiode private constructor( hendelse: Inntektsmelding, aktivitetslogg: IAktivitetslogg ) { - vedtaksperiode.håndtertInntektPåSkjæringstidspunktetOgVurderVarsel(hendelse, aktivitetslogg) + vedtaksperiode.håndtertInntektPåSkjæringstidspunktetOgVurderVarsel( + hendelse, + aktivitetslogg + ) } override fun gjenopptaBehandling( @@ -2024,10 +2887,21 @@ internal class Vedtaksperiode private constructor( hendelse: Hendelse, aktivitetslogg: IAktivitetslogg ) = - tilstand(aktivitetslogg, vedtaksperiode).gjenopptaBehandling(vedtaksperiode, hendelse, aktivitetslogg) + tilstand(aktivitetslogg, vedtaksperiode).gjenopptaBehandling( + vedtaksperiode, + hendelse, + aktivitetslogg + ) - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { - if (påminnelse.skalReberegnes()) return vedtaksperiode.tilstand(aktivitetslogg, AvventerInntektsmelding) + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { + if (påminnelse.skalReberegnes()) return vedtaksperiode.tilstand( + aktivitetslogg, + AvventerInntektsmelding + ) if (vedtaksperiode.harFlereSkjæringstidspunkt()) { aktivitetslogg.funksjonellFeil(RV_IV_11) return vedtaksperiode.forkast(påminnelse, aktivitetslogg) @@ -2060,8 +2934,15 @@ internal class Vedtaksperiode private constructor( aktivitetslogg: IAktivitetslogg ) { vedtaksperiode.behandlinger.forkastUtbetaling(aktivitetslogg) - if (vedtaksperiode.måInnhenteInntektEllerRefusjon(aktivitetslogg)) vedtaksperiode.tilstand(aktivitetslogg, AvventerInntektsmelding) - revurdering.inngåVedSaksbehandlerendring(vedtaksperiode, aktivitetslogg, vedtaksperiode.periode) + if (vedtaksperiode.måInnhenteInntektEllerRefusjon(aktivitetslogg)) vedtaksperiode.tilstand( + aktivitetslogg, + AvventerInntektsmelding + ) + revurdering.inngåVedSaksbehandlerendring( + vedtaksperiode, + aktivitetslogg, + vedtaksperiode.periode + ) } override fun beregnUtbetalinger( @@ -2072,7 +2953,13 @@ internal class Vedtaksperiode private constructor( super.beregnUtbetalinger(vedtaksperiode, ytelser, aktivitetslogg) if (!vedtaksperiode.forventerInntekt()) { // LOL vi skal til AUU så bare slenger på noen varsler her - ytelser.valider(aktivitetslogg, vedtaksperiode.periode, vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode.endInclusive, vedtaksperiode.erForlengelse()) + ytelser.valider( + aktivitetslogg, + vedtaksperiode.periode, + vedtaksperiode.skjæringstidspunkt, + vedtaksperiode.periode.endInclusive, + vedtaksperiode.erForlengelse() + ) } } @@ -2085,11 +2972,16 @@ internal class Vedtaksperiode private constructor( } if (!vedtaksperiode.forventerInntekt()) return ForventerIkkeInntekt if (vedtaksperiode.manglerNødvendigInntektVedTidligereBeregnetSykepengegrunnlag()) return ManglerNødvendigInntektVedTidligereBeregnetSykepengegrunnlag - if (vedtaksperiode.harFlereSkjæringstidspunkt()) return HarFlereSkjæringstidspunkt(vedtaksperiode) + if (vedtaksperiode.harFlereSkjæringstidspunkt()) return HarFlereSkjæringstidspunkt( + vedtaksperiode + ) if (vedtaksperiode.person.avventerSøknad(vedtaksperiode.periode)) return AvventerTidligereEllerOverlappendeSøknad - val førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver = vedtaksperiode.førstePeriodeAnnenArbeidsgiverSomTrengerInntektsmelding() - if (førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver != null) return TrengerInntektsmeldingAnnenArbeidsgiver(førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver) + val førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver = + vedtaksperiode.førstePeriodeAnnenArbeidsgiverSomTrengerInntektsmelding() + if (førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver != null) return TrengerInntektsmeldingAnnenArbeidsgiver( + førstePeriodeSomTrengerInntektsmeldingAnnenArbeidsgiver + ) if (vedtaksperiode.vilkårsgrunnlag == null) return KlarForVilkårsprøving return KlarForBeregning } @@ -2097,10 +2989,15 @@ internal class Vedtaksperiode private constructor( private sealed interface Tilstand { fun venteårsak(): Venteårsak? = null fun venterPå(): Vedtaksperiode? = null - fun gjenopptaBehandling(vedtaksperiode: Vedtaksperiode, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) + fun gjenopptaBehandling( + vedtaksperiode: Vedtaksperiode, + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) } - private data class HarFlereSkjæringstidspunkt(private val vedtaksperiode: Vedtaksperiode): Tilstand { + private data class HarFlereSkjæringstidspunkt(private val vedtaksperiode: Vedtaksperiode) : + Tilstand { override fun venterPå() = vedtaksperiode override fun venteårsak() = HJELP fordi FLERE_SKJÆRINGSTIDSPUNKT override fun gjenopptaBehandling( @@ -2113,7 +3010,8 @@ internal class Vedtaksperiode private constructor( return vedtaksperiode.forkast(hendelse, aktivitetslogg) } } - private data object AvventerTidligereEllerOverlappendeSøknad: Tilstand { + + private data object AvventerTidligereEllerOverlappendeSøknad : Tilstand { override fun venteårsak() = SØKNAD.utenBegrunnelse override fun gjenopptaBehandling( vedtaksperiode: Vedtaksperiode, @@ -2123,7 +3021,8 @@ internal class Vedtaksperiode private constructor( aktivitetslogg.info("Gjenopptar ikke behandling fordi minst én arbeidsgiver venter på søknad for sykmelding som er før eller overlapper med vedtaksperioden") } } - private data object ForventerIkkeInntekt: Tilstand { + + private data object ForventerIkkeInntekt : Tilstand { override fun gjenopptaBehandling( vedtaksperiode: Vedtaksperiode, hendelse: Hendelse, @@ -2132,7 +3031,9 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.tilstand(aktivitetslogg, AvsluttetUtenUtbetaling) } } - private data object ManglerNødvendigInntektVedTidligereBeregnetSykepengegrunnlag: Tilstand { + + private data object ManglerNødvendigInntektVedTidligereBeregnetSykepengegrunnlag : + Tilstand { override fun gjenopptaBehandling( vedtaksperiode: Vedtaksperiode, hendelse: Hendelse, @@ -2143,7 +3044,8 @@ internal class Vedtaksperiode private constructor( } } - private data class TrengerInntektsmeldingAnnenArbeidsgiver(private val trengerInntektsmelding: Vedtaksperiode): Tilstand { + private data class TrengerInntektsmeldingAnnenArbeidsgiver(private val trengerInntektsmelding: Vedtaksperiode) : + Tilstand { override fun venteårsak() = trengerInntektsmelding.venteårsak() override fun venterPå() = trengerInntektsmelding override fun gjenopptaBehandling( @@ -2155,7 +3057,7 @@ internal class Vedtaksperiode private constructor( } } - private data object KlarForVilkårsprøving: Tilstand { + private data object KlarForVilkårsprøving : Tilstand { override fun gjenopptaBehandling( vedtaksperiode: Vedtaksperiode, hendelse: Hendelse, @@ -2165,7 +3067,7 @@ internal class Vedtaksperiode private constructor( } } - private data object KlarForBeregning: Tilstand { + private data object KlarForBeregning : Tilstand { override fun gjenopptaBehandling( vedtaksperiode: Vedtaksperiode, hendelse: Hendelse, @@ -2185,7 +3087,11 @@ internal class Vedtaksperiode private constructor( override fun venteårsak(vedtaksperiode: Vedtaksperiode) = null - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { vedtaksperiode.trengerVilkårsgrunnlag(aktivitetslogg) } @@ -2196,7 +3102,11 @@ internal class Vedtaksperiode private constructor( arbeidsgivere: List, infotrygdhistorikk: Infotrygdhistorikk ) { - vedtaksperiode.håndterOverlappendeSøknad(søknad, aktivitetslogg, AvventerBlokkerendePeriode) + vedtaksperiode.håndterOverlappendeSøknad( + søknad, + aktivitetslogg, + AvventerBlokkerendePeriode + ) } override fun håndtertInntektPåSkjæringstidspunktet( @@ -2204,7 +3114,10 @@ internal class Vedtaksperiode private constructor( hendelse: Inntektsmelding, aktivitetslogg: IAktivitetslogg ) { - vedtaksperiode.håndtertInntektPåSkjæringstidspunktetOgVurderVarsel(hendelse, aktivitetslogg) + vedtaksperiode.håndtertInntektPåSkjæringstidspunktetOgVurderVarsel( + hendelse, + aktivitetslogg + ) } override fun håndter( @@ -2213,7 +3126,11 @@ internal class Vedtaksperiode private constructor( aktivitetslogg: IAktivitetslogg ) { val aktivitetslogg = håndterFørstegangsbehandling(aktivitetslogg, vedtaksperiode) - vedtaksperiode.håndterVilkårsgrunnlag(vilkårsgrunnlag, aktivitetslogg, AvventerHistorikk) + vedtaksperiode.håndterVilkårsgrunnlag( + vilkårsgrunnlag, + aktivitetslogg, + AvventerHistorikk + ) } override fun igangsettOverstyring( @@ -2221,7 +3138,10 @@ internal class Vedtaksperiode private constructor( revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg ) { - vedtaksperiode.håndterOverstyringIgangsattFørstegangsvurdering(revurdering, aktivitetslogg) + vedtaksperiode.håndterOverstyringIgangsattFørstegangsvurdering( + revurdering, + aktivitetslogg + ) } } @@ -2233,7 +3153,8 @@ internal class Vedtaksperiode private constructor( checkNotNull(vedtaksperiode.vilkårsgrunnlag) { "Forventer vilkårsgrunnlag for å beregne utbetaling" } vedtaksperiode.trengerYtelser(aktivitetslogg) aktivitetslogg.info("Forespør sykdoms- og inntektshistorikk") - val infotrygda = vedtaksperiode.vilkårsgrunnlag is VilkårsgrunnlagHistorikk.InfotrygdVilkårsgrunnlag + val infotrygda = + vedtaksperiode.vilkårsgrunnlag is VilkårsgrunnlagHistorikk.InfotrygdVilkårsgrunnlag if (vedtaksperiode.arbeidsgiver.harIngenSporingTilInntektsmeldingISykefraværet() && !infotrygda) { aktivitetslogg.info("Inntektsmeldingen kunne ikke tolkes. Vi har ingen dokumentsporing til inntektsmeldingen i sykefraværet.") } @@ -2251,7 +3172,11 @@ internal class Vedtaksperiode private constructor( arbeidsgivere: List, infotrygdhistorikk: Infotrygdhistorikk ) { - vedtaksperiode.håndterOverlappendeSøknad(søknad, aktivitetslogg, AvventerBlokkerendePeriode) + vedtaksperiode.håndterOverlappendeSøknad( + søknad, + aktivitetslogg, + AvventerBlokkerendePeriode + ) } override fun håndter( @@ -2262,7 +3187,11 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.revurderTidslinje(hendelse, aktivitetslogg) } - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { påminnelse.eventyr(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode)?.also { aktivitetslogg.info("Reberegner perioden ettersom det er ønsket") vedtaksperiode.person.igangsettOverstyring(it, aktivitetslogg) @@ -2275,8 +3204,16 @@ internal class Vedtaksperiode private constructor( aktivitetslogg: IAktivitetslogg, infotrygdhistorikk: Infotrygdhistorikk ) { - infotrygdhistorikk.valider(aktivitetslogg, vedtaksperiode.periode, vedtaksperiode.skjæringstidspunkt, vedtaksperiode.arbeidsgiver.organisasjonsnummer) - if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return vedtaksperiode.forkast(hendelse, aktivitetslogg) + infotrygdhistorikk.valider( + aktivitetslogg, + vedtaksperiode.periode, + vedtaksperiode.skjæringstidspunkt, + vedtaksperiode.arbeidsgiver.organisasjonsnummer + ) + if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return vedtaksperiode.forkast( + hendelse, + aktivitetslogg + ) if (vedtaksperiode.vilkårsgrunnlag != null) return aktivitetslogg.funksjonellFeil(Varselkode.RV_IT_33) vedtaksperiode.forkast(hendelse, aktivitetslogg) @@ -2292,7 +3229,10 @@ internal class Vedtaksperiode private constructor( ) { val aktivitetslogg = håndterFørstegangsbehandling(aktivitetslogg, vedtaksperiode) vedtaksperiode.oppdaterHistorikk(ytelser, aktivitetslogg, infotrygdhistorikk) - if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return vedtaksperiode.forkast(ytelser, aktivitetslogg) + if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return vedtaksperiode.forkast( + ytelser, + aktivitetslogg + ) vedtaksperiode.tilstand.beregnUtbetalinger(vedtaksperiode, ytelser, aktivitetslogg) } @@ -2305,9 +3245,22 @@ internal class Vedtaksperiode private constructor( if (vedtaksperiode.harTilkomneInntekter() && !ytelser.andreYtelserPerioder().erTom()) { aktivitetslogg.varsel(Varselkode.RV_IV_9) } - ytelser.valider(aktivitetslogg, vedtaksperiode.periode, vedtaksperiode.skjæringstidspunkt, maksdatoresultat.maksdato, vedtaksperiode.erForlengelse()) - if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return vedtaksperiode.forkast(ytelser, aktivitetslogg) - vedtaksperiode.høstingsresultater(aktivitetslogg, AvventerSimulering, AvventerGodkjenning) + ytelser.valider( + aktivitetslogg, + vedtaksperiode.periode, + vedtaksperiode.skjæringstidspunkt, + maksdatoresultat.maksdato, + vedtaksperiode.erForlengelse() + ) + if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return vedtaksperiode.forkast( + ytelser, + aktivitetslogg + ) + vedtaksperiode.høstingsresultater( + aktivitetslogg, + AvventerSimulering, + AvventerGodkjenning + ) } override fun igangsettOverstyring( @@ -2315,7 +3268,10 @@ internal class Vedtaksperiode private constructor( revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg ) { - vedtaksperiode.håndterOverstyringIgangsattFørstegangsvurdering(revurdering, aktivitetslogg) + vedtaksperiode.håndterOverstyringIgangsattFørstegangsvurdering( + revurdering, + aktivitetslogg + ) } } @@ -2336,7 +3292,10 @@ internal class Vedtaksperiode private constructor( revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg ) { - vedtaksperiode.håndterOverstyringIgangsattFørstegangsvurdering(revurdering, aktivitetslogg) + vedtaksperiode.håndterOverstyringIgangsattFørstegangsvurdering( + revurdering, + aktivitetslogg + ) } override fun håndter( @@ -2346,17 +3305,29 @@ internal class Vedtaksperiode private constructor( arbeidsgivere: List, infotrygdhistorikk: Infotrygdhistorikk ) { - vedtaksperiode.håndterOverlappendeSøknad(søknad, aktivitetslogg, AvventerBlokkerendePeriode) + vedtaksperiode.håndterOverlappendeSøknad( + søknad, + aktivitetslogg, + AvventerBlokkerendePeriode + ) } - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { påminnelse.eventyr(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode)?.also { aktivitetslogg.info("Reberegner perioden ettersom det er ønsket") vedtaksperiode.person.igangsettOverstyring(it, aktivitetslogg) } ?: trengerSimulering(vedtaksperiode, aktivitetslogg) } - override fun håndter(vedtaksperiode: Vedtaksperiode, simulering: Simulering, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + simulering: Simulering, + aktivitetslogg: IAktivitetslogg + ) { val aktivitetslogg = håndterFørstegangsbehandling(aktivitetslogg, vedtaksperiode) vedtaksperiode.behandlinger.valider(simulering, aktivitetslogg) if (!vedtaksperiode.behandlinger.erKlarForGodkjenning()) return aktivitetslogg.info("Kan ikke gå videre da begge oppdragene ikke er simulert.") @@ -2371,7 +3342,10 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.revurderTidslinje(hendelse, aktivitetslogg) } - private fun trengerSimulering(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) { + private fun trengerSimulering( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) { vedtaksperiode.behandlinger.simuler(aktivitetslogg) } } @@ -2383,7 +3357,8 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.behandlinger.simuler(aktivitetslogg) } - override fun venteårsak(vedtaksperiode: Vedtaksperiode) = UTBETALING fordi OVERSTYRING_IGANGSATT + override fun venteårsak(vedtaksperiode: Vedtaksperiode) = + UTBETALING fordi OVERSTYRING_IGANGSATT override fun igangsettOverstyring( vedtaksperiode: Vedtaksperiode, @@ -2398,19 +3373,29 @@ internal class Vedtaksperiode private constructor( nestemann: Vedtaksperiode ) = vedtaksperiode.vedtaksperiodeVenter(vedtaksperiode) - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { påminnelse.eventyr(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode)?.also { aktivitetslogg.info("Reberegner perioden ettersom det er ønsket") vedtaksperiode.person.igangsettOverstyring(it, aktivitetslogg) } ?: vedtaksperiode.behandlinger.simuler(aktivitetslogg) } + override fun skalHåndtereDager( vedtaksperiode: Vedtaksperiode, dager: DagerFraInntektsmelding, aktivitetslogg: IAktivitetslogg ) = vedtaksperiode.skalHåndtereDagerRevurdering(dager, aktivitetslogg) - override fun håndter(vedtaksperiode: Vedtaksperiode, simulering: Simulering, aktivitetslogg: IAktivitetslogg) { + + override fun håndter( + vedtaksperiode: Vedtaksperiode, + simulering: Simulering, + aktivitetslogg: IAktivitetslogg + ) { val aktivitetslogg = håndterRevurdering(aktivitetslogg) vedtaksperiode.behandlinger.valider(simulering, aktivitetslogg) if (!vedtaksperiode.behandlinger.erKlarForGodkjenning()) return aktivitetslogg.info("Kan ikke gå videre da begge oppdragene ikke er simulert.") @@ -2456,7 +3441,11 @@ internal class Vedtaksperiode private constructor( arbeidsgivere: List, infotrygdhistorikk: Infotrygdhistorikk ) { - vedtaksperiode.håndterOverlappendeSøknad(søknad, aktivitetslogg, AvventerBlokkerendePeriode) + vedtaksperiode.håndterOverlappendeSøknad( + søknad, + aktivitetslogg, + AvventerBlokkerendePeriode + ) if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) return } @@ -2467,18 +3456,30 @@ internal class Vedtaksperiode private constructor( utbetalingsavgjørelse: Behandlingsavgjørelse, aktivitetslogg: IAktivitetslogg ) { - vedtaksperiode.behandlinger.vedtakFattet(arbeidsgiver, utbetalingsavgjørelse, aktivitetslogg) + vedtaksperiode.behandlinger.vedtakFattet( + arbeidsgiver, + utbetalingsavgjørelse, + aktivitetslogg + ) if (vedtaksperiode.behandlinger.erAvvist()) { - return if (arbeidsgiver.kanForkastes(vedtaksperiode, aktivitetslogg)) vedtaksperiode.forkast(utbetalingsavgjørelse, aktivitetslogg) + return if (arbeidsgiver.kanForkastes( + vedtaksperiode, + aktivitetslogg + )) vedtaksperiode.forkast(utbetalingsavgjørelse, aktivitetslogg) else aktivitetslogg.varsel(RV_UT_24) } - vedtaksperiode.tilstand(aktivitetslogg, when { + vedtaksperiode.tilstand( + aktivitetslogg, when { vedtaksperiode.behandlinger.harUtbetalinger() -> TilUtbetaling else -> Avsluttet - }) + } + ) } - override fun nyAnnullering(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) { + override fun nyAnnullering( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) { vedtaksperiode.tilstand(aktivitetslogg, AvventerBlokkerendePeriode) } @@ -2490,7 +3491,11 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.revurderTidslinje(hendelse, aktivitetslogg) } - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { påminnelse.eventyr(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode)?.also { aktivitetslogg.info("Reberegner perioden ettersom det er ønsket") vedtaksperiode.person.igangsettOverstyring(it, aktivitetslogg) @@ -2518,7 +3523,10 @@ internal class Vedtaksperiode private constructor( revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg ) { - vedtaksperiode.håndterOverstyringIgangsattFørstegangsvurdering(revurdering, aktivitetslogg) + vedtaksperiode.håndterOverstyringIgangsattFørstegangsvurdering( + revurdering, + aktivitetslogg + ) } } @@ -2530,7 +3538,8 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.trengerGodkjenning(aktivitetslogg) } - override fun venteårsak(vedtaksperiode: Vedtaksperiode) = GODKJENNING fordi OVERSTYRING_IGANGSATT + override fun venteårsak(vedtaksperiode: Vedtaksperiode) = + GODKJENNING fordi OVERSTYRING_IGANGSATT override fun igangsettOverstyring( vedtaksperiode: Vedtaksperiode, @@ -2540,7 +3549,10 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.håndterOverstyringIgangsattRevurdering(revurdering, aktivitetslogg) } - override fun nyAnnullering(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) { + override fun nyAnnullering( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) { if (vedtaksperiode.behandlinger.erAvvist()) return vedtaksperiode.tilstand(aktivitetslogg, AvventerRevurdering) } @@ -2555,7 +3567,11 @@ internal class Vedtaksperiode private constructor( ) = vedtaksperiode.skalHåndtereDagerRevurdering(dager, aktivitetslogg) - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { påminnelse.eventyr(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode)?.also { aktivitetslogg.info("Reberegner perioden ettersom det er ønsket") vedtaksperiode.person.igangsettOverstyring(it, aktivitetslogg) @@ -2577,25 +3593,35 @@ internal class Vedtaksperiode private constructor( utbetalingsavgjørelse: Behandlingsavgjørelse, aktivitetslogg: IAktivitetslogg ) { - vedtaksperiode.behandlinger.vedtakFattet(arbeidsgiver, utbetalingsavgjørelse, aktivitetslogg) + vedtaksperiode.behandlinger.vedtakFattet( + arbeidsgiver, + utbetalingsavgjørelse, + aktivitetslogg + ) if (vedtaksperiode.behandlinger.erAvvist()) { if (utbetalingsavgjørelse.automatisert) { return aktivitetslogg.info("Revurderingen ble avvist automatisk - hindrer tilstandsendring for å unngå saker som blir stuck") } } - vedtaksperiode.tilstand(aktivitetslogg, when { + vedtaksperiode.tilstand( + aktivitetslogg, when { vedtaksperiode.behandlinger.erAvvist() -> RevurderingFeilet vedtaksperiode.behandlinger.harUtbetalinger() -> TilUtbetaling else -> Avsluttet - }) + } + ) } + override fun håndter( vedtaksperiode: Vedtaksperiode, hendelse: Hendelse, aktivitetslogg: IAktivitetslogg, infotrygdhistorikk: Infotrygdhistorikk ) { - if (vedtaksperiode.behandlinger.erHistorikkEndretSidenBeregning(infotrygdhistorikk)) return vedtaksperiode.tilstand(aktivitetslogg, AvventerRevurdering) { + if (vedtaksperiode.behandlinger.erHistorikkEndretSidenBeregning(infotrygdhistorikk)) return vedtaksperiode.tilstand( + aktivitetslogg, + AvventerRevurdering + ) { aktivitetslogg.info("Infotrygdhistorikken har endret seg, reberegner periode") } else aktivitetslogg.info("Infotrygdhistorikken er uendret, reberegner ikke periode") @@ -2660,10 +3686,21 @@ internal class Vedtaksperiode private constructor( } } - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { when { - vedtaksperiode.behandlinger.erUbetalt() -> vedtaksperiode.tilstand(aktivitetslogg, AvventerBlokkerendePeriode) - vedtaksperiode.behandlinger.erAvsluttet() -> vedtaksperiode.tilstand(aktivitetslogg, Avsluttet) + vedtaksperiode.behandlinger.erUbetalt() -> vedtaksperiode.tilstand( + aktivitetslogg, + AvventerBlokkerendePeriode + ) + + vedtaksperiode.behandlinger.erAvsluttet() -> vedtaksperiode.tilstand( + aktivitetslogg, + Avsluttet + ) } } } @@ -2675,23 +3712,37 @@ internal class Vedtaksperiode private constructor( private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") override fun entering(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) { - val arbeidsgiverperiode = vedtaksperiode.arbeidsgiver.arbeidsgiverperiodeHensyntattEgenmeldinger(vedtaksperiode.periode) + val arbeidsgiverperiode = + vedtaksperiode.arbeidsgiver.arbeidsgiverperiodeHensyntattEgenmeldinger( + vedtaksperiode.periode + ) if (arbeidsgiverperiode?.forventerInntekt(vedtaksperiode.periode) == true) { // Dersom egenmeldingene hinter til at perioden er utenfor AGP, da ønsker vi å sende en ekte forespørsel til arbeidsgiver om opplysninger vedtaksperiode.sendTrengerArbeidsgiveropplysninger(arbeidsgiverperiode) } - val utbetalingstidslinje = forsøkÅLageUtbetalingstidslinje(vedtaksperiode, aktivitetslogg) - vedtaksperiode.behandlinger.avsluttUtenVedtak(vedtaksperiode.arbeidsgiver, - aktivitetslogg, utbetalingstidslinje) + val utbetalingstidslinje = + forsøkÅLageUtbetalingstidslinje(vedtaksperiode, aktivitetslogg) + vedtaksperiode.behandlinger.avsluttUtenVedtak( + vedtaksperiode.arbeidsgiver, + aktivitetslogg, utbetalingstidslinje + ) vedtaksperiode.person.gjenopptaBehandling(aktivitetslogg) } - private fun forsøkÅLageUtbetalingstidslinje(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg): Utbetalingstidslinje { - val faktaavklarteInntekter = vedtaksperiode.vilkårsgrunnlag?.faktaavklarteInntekter()?.forArbeidsgiver(vedtaksperiode.arbeidsgiver.organisasjonsnummer) + private fun forsøkÅLageUtbetalingstidslinje( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ): Utbetalingstidslinje { + val faktaavklarteInntekter = vedtaksperiode.vilkårsgrunnlag?.faktaavklarteInntekter() + ?.forArbeidsgiver(vedtaksperiode.arbeidsgiver.organisasjonsnummer) return try { vedtaksperiode.lagUtbetalingstidslinje(faktaavklarteInntekter) } catch (err: Exception) { - sikkerLogg.warn("klarte ikke lage utbetalingstidslinje for auu: ${err.message}, {}", kv("vedtaksperiodeId", vedtaksperiode.id), err) + sikkerLogg.warn( + "klarte ikke lage utbetalingstidslinje for auu: ${err.message}, {}", + kv("vedtaksperiodeId", vedtaksperiode.id), + err + ) Utbetalingstidslinje() } } @@ -2722,10 +3773,18 @@ internal class Vedtaksperiode private constructor( revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg ) { - vedtaksperiode.behandlinger.sikreNyBehandling(vedtaksperiode.arbeidsgiver, revurdering.hendelse, vedtaksperiode.person.beregnSkjæringstidspunkt(), vedtaksperiode.arbeidsgiver.beregnArbeidsgiverperiode(vedtaksperiode.jurist)) + vedtaksperiode.behandlinger.sikreNyBehandling( + vedtaksperiode.arbeidsgiver, + revurdering.hendelse, + vedtaksperiode.person.beregnSkjæringstidspunkt(), + vedtaksperiode.arbeidsgiver.beregnArbeidsgiverperiode(vedtaksperiode.jurist) + ) if (vedtaksperiode.forventerInntekt()) { revurdering.inngåSomEndring(vedtaksperiode, aktivitetslogg, vedtaksperiode.periode) - revurdering.loggDersomKorrigerendeSøknad(aktivitetslogg, "Startet omgjøring grunnet korrigerende søknad") + revurdering.loggDersomKorrigerendeSøknad( + aktivitetslogg, + "Startet omgjøring grunnet korrigerende søknad" + ) vedtaksperiode.videreførEksisterendeRefusjonsopplysninger(aktivitetslogg = aktivitetslogg) aktivitetslogg.info(RV_RV_1.varseltekst) if (vedtaksperiode.måInnhenteInntektEllerRefusjon(aktivitetslogg)) { @@ -2754,8 +3813,15 @@ internal class Vedtaksperiode private constructor( ) { vedtaksperiode.håndterDager(dager, aktivitetslogg) if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) { - if (vedtaksperiode.arbeidsgiver.kanForkastes(vedtaksperiode, aktivitetslogg)) return vedtaksperiode.forkast(dager.hendelse, aktivitetslogg) - return vedtaksperiode.behandlinger.avsluttUtenVedtak(vedtaksperiode.arbeidsgiver, aktivitetslogg, forsøkÅLageUtbetalingstidslinje(vedtaksperiode, aktivitetslogg)) + if (vedtaksperiode.arbeidsgiver.kanForkastes( + vedtaksperiode, + aktivitetslogg + )) return vedtaksperiode.forkast(dager.hendelse, aktivitetslogg) + return vedtaksperiode.behandlinger.avsluttUtenVedtak( + vedtaksperiode.arbeidsgiver, + aktivitetslogg, + forsøkÅLageUtbetalingstidslinje(vedtaksperiode, aktivitetslogg) + ) } } @@ -2766,11 +3832,21 @@ internal class Vedtaksperiode private constructor( infotrygdhistorikk: Infotrygdhistorikk ) { if (!vedtaksperiode.forventerInntekt()) return - vedtaksperiode.behandlinger.sikreNyBehandling(vedtaksperiode.arbeidsgiver, hendelse, vedtaksperiode.person.beregnSkjæringstidspunkt(), vedtaksperiode.arbeidsgiver.beregnArbeidsgiverperiode(vedtaksperiode.jurist)) + vedtaksperiode.behandlinger.sikreNyBehandling( + vedtaksperiode.arbeidsgiver, + hendelse, + vedtaksperiode.person.beregnSkjæringstidspunkt(), + vedtaksperiode.arbeidsgiver.beregnArbeidsgiverperiode(vedtaksperiode.jurist) + ) val aktivitetslogg = håndterFørstegangsbehandling(aktivitetslogg, vedtaksperiode) - infotrygdhistorikk.valider(aktivitetslogg, vedtaksperiode.periode, vedtaksperiode.skjæringstidspunkt, vedtaksperiode.arbeidsgiver.organisasjonsnummer) + infotrygdhistorikk.valider( + aktivitetslogg, + vedtaksperiode.periode, + vedtaksperiode.skjæringstidspunkt, + vedtaksperiode.arbeidsgiver.organisasjonsnummer + ) if (aktivitetslogg.harFunksjonelleFeilEllerVerre()) { aktivitetslogg.info("Forkaster perioden fordi Infotrygdhistorikken ikke validerer") @@ -2782,15 +3858,25 @@ internal class Vedtaksperiode private constructor( } aktivitetslogg.varsel(RV_IT_38) vedtaksperiode.person.igangsettOverstyring( - Revurderingseventyr.Companion.infotrygdendring(hendelse, vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode), + Revurderingseventyr.Companion.infotrygdendring( + hendelse, + vedtaksperiode.skjæringstidspunkt, + vedtaksperiode.periode + ), aktivitetslogg ) } - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { forsøkÅLageUtbetalingstidslinje(vedtaksperiode, aktivitetslogg) - if (!vedtaksperiode.forventerInntekt() && vedtaksperiode.behandlinger.erAvsluttet()) return aktivitetslogg.info("Forventer ikke inntekt. Vil forbli i AvsluttetUtenUtbetaling") + if (!vedtaksperiode.forventerInntekt() && vedtaksperiode.behandlinger.erAvsluttet()) return aktivitetslogg.info( + "Forventer ikke inntekt. Vil forbli i AvsluttetUtenUtbetaling" + ) påminnelse.eventyr(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode)?.also { aktivitetslogg.info("Reberegner perioden ettersom det er ønsket") vedtaksperiode.person.igangsettOverstyring(it, aktivitetslogg) @@ -2842,7 +3928,12 @@ internal class Vedtaksperiode private constructor( revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg ) { - vedtaksperiode.behandlinger.sikreNyBehandling(vedtaksperiode.arbeidsgiver, revurdering.hendelse, vedtaksperiode.person.beregnSkjæringstidspunkt(), vedtaksperiode.arbeidsgiver.beregnArbeidsgiverperiode(vedtaksperiode.jurist)) + vedtaksperiode.behandlinger.sikreNyBehandling( + vedtaksperiode.arbeidsgiver, + revurdering.hendelse, + vedtaksperiode.person.beregnSkjæringstidspunkt(), + vedtaksperiode.arbeidsgiver.beregnArbeidsgiverperiode(vedtaksperiode.jurist) + ) vedtaksperiode.jurist.logg(`fvl § 35 ledd 1`()) revurdering.inngåSomRevurdering(vedtaksperiode, aktivitetslogg, vedtaksperiode.periode) vedtaksperiode.tilstand(aktivitetslogg, AvventerRevurdering) @@ -2866,7 +3957,11 @@ internal class Vedtaksperiode private constructor( vedtaksperiode.håndterOverlappendeSøknadRevurdering(søknad, aktivitetslogg) } - override fun håndter(vedtaksperiode: Vedtaksperiode, påminnelse: Påminnelse, aktivitetslogg: IAktivitetslogg) { + override fun håndter( + vedtaksperiode: Vedtaksperiode, + påminnelse: Påminnelse, + aktivitetslogg: IAktivitetslogg + ) { påminnelse.eventyr(vedtaksperiode.skjæringstidspunkt, vedtaksperiode.periode)?.also { aktivitetslogg.info("Reberegner perioden ettersom det er ønsket") vedtaksperiode.person.igangsettOverstyring(it, aktivitetslogg) @@ -2880,8 +3975,12 @@ internal class Vedtaksperiode private constructor( override fun entering(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) { vedtaksperiode.person.gjenopptaBehandling(aktivitetslogg) } + override fun venteårsak(vedtaksperiode: Vedtaksperiode): Venteårsak? { - if (vedtaksperiode.arbeidsgiver.kanForkastes(vedtaksperiode, Aktivitetslogg())) return null + if (vedtaksperiode.arbeidsgiver.kanForkastes( + vedtaksperiode, + Aktivitetslogg() + )) return null return HJELP.utenBegrunnelse } @@ -2903,7 +4002,10 @@ internal class Vedtaksperiode private constructor( hendelse: Hendelse, aktivitetslogg: IAktivitetslogg ) { - if (!vedtaksperiode.arbeidsgiver.kanForkastes(vedtaksperiode, Aktivitetslogg())) return aktivitetslogg.info("Gjenopptar ikke revurdering feilet fordi perioden har tidligere avsluttede utbetalinger. Må behandles manuelt vha annullering.") + if (!vedtaksperiode.arbeidsgiver.kanForkastes( + vedtaksperiode, + Aktivitetslogg() + )) return aktivitetslogg.info("Gjenopptar ikke revurdering feilet fordi perioden har tidligere avsluttede utbetalinger. Må behandles manuelt vha annullering.") aktivitetslogg.funksjonellFeil(RV_RV_2) vedtaksperiode.forkast(hendelse, aktivitetslogg) } @@ -2912,7 +4014,8 @@ internal class Vedtaksperiode private constructor( vedtaksperiode: Vedtaksperiode, revurdering: Revurderingseventyr, aktivitetslogg: IAktivitetslogg - ) {} + ) { + } } internal data object TilInfotrygd : Vedtaksperiodetilstand { @@ -2955,35 +4058,54 @@ internal class Vedtaksperiode private constructor( internal companion object { private val sikkerlogg = LoggerFactory.getLogger("tjenestekall") private val datoformat = DateTimeFormatter.ofPattern("dd-MM-yyyy") + // dersom "ny" slutter på en fredag, så starter ikke oppholdstelling før påfølgende mandag. // det kan derfor være mer enn 16 dager avstand mellom periodene, og arbeidsgiverperioden kan være den samme // Derfor bruker vi tallet 18 fremfor kanskje det forventende 16… internal const val MINIMALT_TILLATT_AVSTAND_TIL_INFOTRYGD = 18L - internal fun List.egenmeldingsperioder(): List = flatMap { it.egenmeldingsperioder } - internal fun List.arbeidsgiverperioder() = map { it.behandlinger.arbeidsgiverperiode() } - internal fun List.refusjonstidslinje() = fold(Beløpstidslinje()) { beløpstidslinje, vedtaksperiode -> - beløpstidslinje + vedtaksperiode.refusjonstidslinje - } + internal fun List.egenmeldingsperioder(): List = + flatMap { it.egenmeldingsperioder } + + internal fun List.arbeidsgiverperioder() = + map { it.behandlinger.arbeidsgiverperiode() } + + internal fun List.refusjonstidslinje() = + fold(Beløpstidslinje()) { beløpstidslinje, vedtaksperiode -> + beløpstidslinje + vedtaksperiode.refusjonstidslinje + } + internal fun List.finnSkjæringstidspunktFor(vedtaksperiodeId: UUID): LocalDate? { return firstOrNull { it.id == vedtaksperiodeId }?.skjæringstidspunkt } - internal fun List.finn(vedtaksperiodeId: UUID): Vedtaksperiode? = firstOrNull { it.id == vedtaksperiodeId } + + internal fun List.finn(vedtaksperiodeId: UUID): Vedtaksperiode? = + firstOrNull { it.id == vedtaksperiodeId } + internal fun List.startdatoerPåSammenhengendeVedtaksperioder(): Set { val startdatoer = mutableMapOf() this.forEach { vedtaksperiode -> if (vedtaksperiode.id in startdatoer) return@forEach - val sammenhendeVedtaksperioder = vedtaksperiode.arbeidsgiver.finnSammenhengendeVedtaksperioder(vedtaksperiode) - val startdatoPåSammenhengendeVedtaksperioder = sammenhendeVedtaksperioder.periode().start + val sammenhendeVedtaksperioder = + vedtaksperiode.arbeidsgiver.finnSammenhengendeVedtaksperioder(vedtaksperiode) + val startdatoPåSammenhengendeVedtaksperioder = + sammenhendeVedtaksperioder.periode().start startdatoer.putAll(sammenhendeVedtaksperioder.associate { it.id to startdatoPåSammenhengendeVedtaksperioder }) } return startdatoer.values.toSet() } + internal fun List.refusjonseventyr(hendelse: Hendelse) = firstOrNull { it.behandlinger.håndterer(Dokumentsporing.inntektsmeldingRefusjon(hendelse.metadata.meldingsreferanseId)) - }?.let { Revurderingseventyr.refusjonsopplysninger(hendelse, it.skjæringstidspunkt, it.periode) } + }?.let { + Revurderingseventyr.refusjonsopplysninger( + hendelse, + it.skjæringstidspunkt, + it.periode + ) + } internal fun List.sistePeriodeRelevantForMigreringAvUbrukteRefusjonsopplysninger(): Vedtaksperiode? { val sistePeriode = lastOrNull() ?: return null @@ -2996,33 +4118,45 @@ internal class Vedtaksperiode private constructor( orgnummer: String, vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet: (LocalDate) -> VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement? ) { - forEach { it.behandlinger.migrerRefusjonsopplysninger(aktivitetslogg, orgnummer, it::eksisterendeRefusjonsopplysningerForTmpMigrering, vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet) } + forEach { + it.behandlinger.migrerRefusjonsopplysninger( + aktivitetslogg, + orgnummer, + it::eksisterendeRefusjonsopplysningerForTmpMigrering, + vedManglendeVilkårsgrunnlagPåSkjæringstidspunktet + ) + } } // Fredet funksjonsnavn - internal val TIDLIGERE_OG_ETTERGØLGENDE = fun(segSelv: Vedtaksperiode): VedtaksperiodeFilter { - val medSammeAGP = MED_SAMME_AGP_OG_SKJÆRINGSTIDSPUNKT(segSelv) - return fun (other: Vedtaksperiode): Boolean { - if (other.periode.start >= segSelv.periode.start) return true // Forkaster nyere perioder på tvers av arbeidsgivere - return medSammeAGP(other) + internal val TIDLIGERE_OG_ETTERGØLGENDE = + fun(segSelv: Vedtaksperiode): VedtaksperiodeFilter { + val medSammeAGP = MED_SAMME_AGP_OG_SKJÆRINGSTIDSPUNKT(segSelv) + return fun(other: Vedtaksperiode): Boolean { + if (other.periode.start >= segSelv.periode.start) return true // Forkaster nyere perioder på tvers av arbeidsgivere + return medSammeAGP(other) + } } - } - internal val SAMMENHENGENDE_PERIODER_HOS_ARBEIDSGIVER= fun(segSelv: Vedtaksperiode): VedtaksperiodeFilter { - val sammenhengendeVedtaksperioder = segSelv.arbeidsgiver.finnSammenhengendeVedtaksperioder(segSelv) - return fun (other: Vedtaksperiode): Boolean { - return other in sammenhengendeVedtaksperioder + internal val SAMMENHENGENDE_PERIODER_HOS_ARBEIDSGIVER = + fun(segSelv: Vedtaksperiode): VedtaksperiodeFilter { + val sammenhengendeVedtaksperioder = + segSelv.arbeidsgiver.finnSammenhengendeVedtaksperioder(segSelv) + return fun(other: Vedtaksperiode): Boolean { + return other in sammenhengendeVedtaksperioder + } } - } - internal val MED_SAMME_AGP_OG_SKJÆRINGSTIDSPUNKT = fun(segSelv: Vedtaksperiode): VedtaksperiodeFilter { - val skjæringstidspunkt = segSelv.skjæringstidspunkt - val arbeidsgiverperiode = segSelv.finnArbeidsgiverperiode() - return fun (other: Vedtaksperiode): Boolean { - if (arbeidsgiverperiode != null && other.arbeidsgiver === segSelv.arbeidsgiver && other.periode in arbeidsgiverperiode) return true // Forkaster samme arbeidsgiverperiode (kun for samme arbeidsgiver) - return other.skjæringstidspunkt == skjæringstidspunkt // Forkaster alt med samme skjæringstidspunkt på tvers av arbeidsgivere + internal val MED_SAMME_AGP_OG_SKJÆRINGSTIDSPUNKT = + fun(segSelv: Vedtaksperiode): VedtaksperiodeFilter { + val skjæringstidspunkt = segSelv.skjæringstidspunkt + val arbeidsgiverperiode = segSelv.finnArbeidsgiverperiode() + return fun(other: Vedtaksperiode): Boolean { + if (arbeidsgiverperiode != null && other.arbeidsgiver === segSelv.arbeidsgiver && other.periode in arbeidsgiverperiode) return true // Forkaster samme arbeidsgiverperiode (kun for samme arbeidsgiver) + return other.skjæringstidspunkt == skjæringstidspunkt // Forkaster alt med samme skjæringstidspunkt på tvers av arbeidsgivere + } } - } - internal val HAR_PÅGÅENDE_UTBETALINGER: VedtaksperiodeFilter = { it.behandlinger.utbetales() } + internal val HAR_PÅGÅENDE_UTBETALINGER: VedtaksperiodeFilter = + { it.behandlinger.utbetales() } private val HAR_AVVENTENDE_GODKJENNING: VedtaksperiodeFilter = { it.tilstand == AvventerGodkjenning || it.tilstand == AvventerGodkjenningRevurdering @@ -3058,19 +4192,30 @@ internal class Vedtaksperiode private constructor( it.tilstand == AvsluttetUtenUtbetaling && it.forventerInntekt() } - internal val OVERLAPPENDE_ELLER_SENERE_MED_SAMME_SKJÆRINGSTIDSPUNKT = { segSelv: Vedtaksperiode -> - { vedtaksperiode: Vedtaksperiode -> - vedtaksperiode !== segSelv && vedtaksperiode.skjæringstidspunkt == segSelv.skjæringstidspunkt && vedtaksperiode.periode.start >= segSelv.periode.start + internal val OVERLAPPENDE_ELLER_SENERE_MED_SAMME_SKJÆRINGSTIDSPUNKT = + { segSelv: Vedtaksperiode -> + { vedtaksperiode: Vedtaksperiode -> + vedtaksperiode !== segSelv && vedtaksperiode.skjæringstidspunkt == segSelv.skjæringstidspunkt && vedtaksperiode.periode.start >= segSelv.periode.start + } } - } private fun sykmeldingsperioder(vedtaksperioder: List): List { return vedtaksperioder.map { it.sykmeldingsperiode } } - private fun egenmeldingsperioder(vedtaksperioder: List) = vedtaksperioder.flatMap { it.egenmeldingsperioder } - internal fun List.beregnSkjæringstidspunkter(beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, beregnArbeidsgiverperiode: (Periode) -> List) { - forEach { it.behandlinger.beregnSkjæringstidspunkt(beregnSkjæringstidspunkt, beregnArbeidsgiverperiode) } + private fun egenmeldingsperioder(vedtaksperioder: List) = + vedtaksperioder.flatMap { it.egenmeldingsperioder } + + internal fun List.beregnSkjæringstidspunkter( + beregnSkjæringstidspunkt: () -> Skjæringstidspunkt, + beregnArbeidsgiverperiode: (Periode) -> List + ) { + forEach { + it.behandlinger.beregnSkjæringstidspunkt( + beregnSkjæringstidspunkt, + beregnArbeidsgiverperiode + ) + } } internal fun List.harIngenSporingTilInntektsmeldingISykefraværet(): Boolean { @@ -3080,10 +4225,12 @@ internal class Vedtaksperiode private constructor( internal fun List.aktiveSkjæringstidspunkter(): Set { return map { it.skjæringstidspunkt }.toSet() } + internal fun Iterable.nåværendeVedtaksperiode(filter: VedtaksperiodeFilter) = firstOrNull(filter) - private fun Vedtaksperiode.erTidligereEnn(other: Vedtaksperiode): Boolean = this <= other || this.skjæringstidspunkt < other.skjæringstidspunkt + private fun Vedtaksperiode.erTidligereEnn(other: Vedtaksperiode): Boolean = + this <= other || this.skjæringstidspunkt < other.skjæringstidspunkt private fun Iterable.førstePeriode(): Vedtaksperiode? { var minste: Vedtaksperiode? = null @@ -3098,7 +4245,10 @@ internal class Vedtaksperiode private constructor( filter(IKKE_FERDIG_BEHANDLET).førstePeriode() - internal fun List.sendOppdatertForespørselOmArbeidsgiveropplysningerForNestePeriode(vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) { + internal fun List.sendOppdatertForespørselOmArbeidsgiveropplysningerForNestePeriode( + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) { val nestePeriode = this .firstOrNull { it.skjæringstidspunkt > vedtaksperiode.skjæringstidspunkt && it.forventerInntekt() } ?.takeIf { it.tilstand == AvventerInntektsmelding } @@ -3108,45 +4258,73 @@ internal class Vedtaksperiode private constructor( } } - internal fun Iterable.checkBareEnPeriodeTilGodkjenningSamtidig(periodeSomSkalGjenopptas: Vedtaksperiode) { - check(this.filterNot { it == periodeSomSkalGjenopptas }.none(HAR_AVVENTENDE_GODKJENNING)) { + internal fun Iterable.checkBareEnPeriodeTilGodkjenningSamtidig( + periodeSomSkalGjenopptas: Vedtaksperiode + ) { + check(this.filterNot { it == periodeSomSkalGjenopptas } + .none(HAR_AVVENTENDE_GODKJENNING)) { "Ugyldig situasjon! Flere perioder til godkjenning samtidig" } } internal fun List.venter(nestemann: Vedtaksperiode) = - mapNotNull { vedtaksperiode -> vedtaksperiode.tilstand.venter(vedtaksperiode, nestemann) } + mapNotNull { vedtaksperiode -> + vedtaksperiode.tilstand.venter( + vedtaksperiode, + nestemann + ) + } - internal fun List.validerTilstand(hendelse: Hendelse, aktivitetslogg: IAktivitetslogg) = forEach { it.validerTilstand(hendelse, aktivitetslogg) } + internal fun List.validerTilstand( + hendelse: Hendelse, + aktivitetslogg: IAktivitetslogg + ) = forEach { it.validerTilstand(hendelse, aktivitetslogg) } - internal fun harNyereForkastetPeriode(forkastede: Iterable, vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) = + internal fun harNyereForkastetPeriode( + forkastede: Iterable, + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) = forkastede .filter { it.periode.start > vedtaksperiode.periode.endInclusive } .onEach { - val sammeArbeidsgiver = it.arbeidsgiver.organisasjonsnummer == vedtaksperiode.arbeidsgiver.organisasjonsnummer + val sammeArbeidsgiver = + it.arbeidsgiver.organisasjonsnummer == vedtaksperiode.arbeidsgiver.organisasjonsnummer aktivitetslogg.funksjonellFeil(if (sammeArbeidsgiver) RV_SØ_31 else RV_SØ_32) aktivitetslogg.info("Søknaden ${vedtaksperiode.periode} er før en forkastet vedtaksperiode ${it.id} (${it.periode})") } .isNotEmpty() - internal fun harOverlappendeForkastetPeriode(forkastede: Iterable, vedtaksperiode: Vedtaksperiode, aktivitetslogg: IAktivitetslogg) = + internal fun harOverlappendeForkastetPeriode( + forkastede: Iterable, + vedtaksperiode: Vedtaksperiode, + aktivitetslogg: IAktivitetslogg + ) = forkastede .filter { it.periode.overlapperMed(vedtaksperiode.periode()) } .onEach { - val delvisOverlappende = !it.periode.inneholder(vedtaksperiode.periode) // hvorvidt vedtaksperioden strekker seg utenfor den forkastede - val sammeArbeidsgiver = it.arbeidsgiver.organisasjonsnummer == vedtaksperiode.arbeidsgiver.organisasjonsnummer - aktivitetslogg.funksjonellFeil(when { - delvisOverlappende && sammeArbeidsgiver -> RV_SØ_35 - delvisOverlappende && !sammeArbeidsgiver -> RV_SØ_36 - !delvisOverlappende && sammeArbeidsgiver -> RV_SØ_33 - !delvisOverlappende && !sammeArbeidsgiver -> RV_SØ_34 - else -> throw IllegalStateException("dette er ikke mulig med mindre noen har tullet til noe") - }) + val delvisOverlappende = + !it.periode.inneholder(vedtaksperiode.periode) // hvorvidt vedtaksperioden strekker seg utenfor den forkastede + val sammeArbeidsgiver = + it.arbeidsgiver.organisasjonsnummer == vedtaksperiode.arbeidsgiver.organisasjonsnummer + aktivitetslogg.funksjonellFeil( + when { + delvisOverlappende && sammeArbeidsgiver -> RV_SØ_35 + delvisOverlappende && !sammeArbeidsgiver -> RV_SØ_36 + !delvisOverlappende && sammeArbeidsgiver -> RV_SØ_33 + !delvisOverlappende && !sammeArbeidsgiver -> RV_SØ_34 + else -> throw IllegalStateException("dette er ikke mulig med mindre noen har tullet til noe") + } + ) aktivitetslogg.info("Søknad ${vedtaksperiode.periode} overlapper med en forkastet vedtaksperiode ${it.id} (${it.periode})") } .isNotEmpty() - internal fun harKortGapTilForkastet(forkastede: Iterable, aktivitetslogg: IAktivitetslogg, vedtaksperiode: Vedtaksperiode) = + internal fun harKortGapTilForkastet( + forkastede: Iterable, + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Vedtaksperiode + ) = forkastede .filter { other -> vedtaksperiode.påvirkerArbeidsgiverperioden(other) } .onEach { @@ -3155,11 +4333,16 @@ internal class Vedtaksperiode private constructor( } .isNotEmpty() - internal fun forlengerForkastet(forkastede: List, aktivitetslogg: IAktivitetslogg, vedtaksperiode: Vedtaksperiode) = + internal fun forlengerForkastet( + forkastede: List, + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Vedtaksperiode + ) = forkastede .filter { it.periode.erRettFør(vedtaksperiode.periode) } .onEach { - val sammeArbeidsgiver = it.arbeidsgiver.organisasjonsnummer == vedtaksperiode.arbeidsgiver.organisasjonsnummer + val sammeArbeidsgiver = + it.arbeidsgiver.organisasjonsnummer == vedtaksperiode.arbeidsgiver.organisasjonsnummer aktivitetslogg.funksjonellFeil(if (sammeArbeidsgiver) RV_SØ_37 else RV_SØ_38) aktivitetslogg.info("Søknad forlenger forkastet vedtaksperiode ${it.id}, vedtaksperiode periode: ${it.periode}") } @@ -3167,13 +4350,15 @@ internal class Vedtaksperiode private constructor( internal fun List.påvirkerArbeidsgiverperiode(periode: Periode): Boolean { return any { vedtaksperiode -> - val dagerMellom = periode.periodeMellom(vedtaksperiode.periode.start)?.count() ?: return@any false + val dagerMellom = + periode.periodeMellom(vedtaksperiode.periode.start)?.count() ?: return@any false return dagerMellom < MINIMALT_TILLATT_AVSTAND_TIL_INFOTRYGD } } internal fun List.slåSammenForkastedeSykdomstidslinjer(sykdomstidslinje: Sykdomstidslinje): Sykdomstidslinje = - map { it.sykdomstidslinje }.plusElement(sykdomstidslinje).slåSammenForkastedeSykdomstidslinjer() + map { it.sykdomstidslinje }.plusElement(sykdomstidslinje) + .slåSammenForkastedeSykdomstidslinjer() internal fun List.inneholder(id: UUID) = any { id == it.id } @@ -3215,7 +4400,11 @@ internal class Vedtaksperiode private constructor( VedtaksperiodetilstandDto.TIL_INFOTRYGD -> TilInfotrygd VedtaksperiodetilstandDto.TIL_UTBETALING -> TilUtbetaling }, - behandlinger = Behandlinger.gjenopprett(dto.behandlinger, grunnlagsdata, utbetalinger), + behandlinger = Behandlinger.gjenopprett( + dto.behandlinger, + grunnlagsdata, + utbetalinger + ), egenmeldingsperioder = dto.egenmeldingsperioder.map { egenmeldingsperiode -> egenmeldingsperiode.fom til egenmeldingsperiode.tom }, opprettet = dto.opprettet, oppdatert = dto.oppdatert, @@ -3245,12 +4434,14 @@ internal class Vedtaksperiode private constructor( type = "FRIPERIODE", orgnummer = null ) + is ArbeidsgiverUtbetalingsperiode -> PersonObserver.OverlappendeInfotrygdperiodeEtterInfotrygdendring.Infotrygdperiode( fom = it.periode.start, tom = it.periode.endInclusive, type = "ARBEIDSGIVERUTBETALING", orgnummer = it.orgnr ) + is PersonUtbetalingsperiode -> PersonObserver.OverlappendeInfotrygdperiodeEtterInfotrygdendring.Infotrygdperiode( fom = it.periode.start, tom = it.periode.endInclusive, @@ -3291,7 +4482,11 @@ internal class Vedtaksperiode private constructor( sykmeldingFom = this.sykmeldingsperiode.start, sykmeldingTom = this.sykmeldingsperiode.endInclusive, behandlinger = behandlinger.dto(), - venteårsak = LazyVedtaksperiodeVenterDto { nestemann?.let { tilstand.venter(this, it)?.dto() } }, + venteårsak = LazyVedtaksperiodeVenterDto { + nestemann?.let { + tilstand.venter(this, it)?.dto() + } + }, egenmeldingsperioder = egenmeldingsperioder.map { it.dto() }, opprettet = opprettet, oppdatert = oppdatert @@ -3299,6 +4494,7 @@ internal class Vedtaksperiode private constructor( } internal typealias VedtaksperiodeFilter = (Vedtaksperiode) -> Boolean + internal data class VedtaksperiodeView( val id: UUID, val periode: Periode, diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/VedtaksperiodeVenter.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/VedtaksperiodeVenter.kt index 8b020edc38..0fcb96810b 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/VedtaksperiodeVenter.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/VedtaksperiodeVenter.kt @@ -15,7 +15,8 @@ internal class VedtaksperiodeVenter private constructor( private val venterTil: LocalDateTime, private val venterPå: VenterPå, private val organisasjonsnummer: String, - private val hendelseIder: Set) { + private val hendelseIder: Set +) { internal fun event() = PersonObserver.VedtaksperiodeVenterEvent( @@ -27,7 +28,7 @@ internal class VedtaksperiodeVenter private constructor( venterTil = venterTil, venterPå = venterPå.event(), hendelser = hendelseIder - ) + ) fun dto() = VedtaksperiodeVenterDto( ventetSiden = ventetSiden, @@ -41,11 +42,17 @@ internal class VedtaksperiodeVenter private constructor( private lateinit var skjæringstidspunkt: LocalDate private lateinit var ventetSiden: LocalDateTime private lateinit var venterTil: LocalDateTime - private lateinit var orgnanisasjonsnummer : String + private lateinit var orgnanisasjonsnummer: String private lateinit var venterPå: VenterPå private val hendelseIder = mutableSetOf() - internal fun venter(vedtaksperiodeId: UUID, skjæringstidspunkt: LocalDate, orgnummer: String, ventetSiden: LocalDateTime, venterTil: LocalDateTime) { + internal fun venter( + vedtaksperiodeId: UUID, + skjæringstidspunkt: LocalDate, + orgnummer: String, + ventetSiden: LocalDateTime, + venterTil: LocalDateTime + ) { this.vedtaksperiodeId = vedtaksperiodeId this.skjæringstidspunkt = skjæringstidspunkt this.ventetSiden = ventetSiden @@ -61,12 +68,26 @@ internal class VedtaksperiodeVenter private constructor( this.hendelseIder.addAll(hendelseIder) } - internal fun venterPå(vedtaksperiodeId: UUID, skjæringstidspunkt: LocalDate, orgnummer: String, venteÅrsak: Venteårsak) { + internal fun venterPå( + vedtaksperiodeId: UUID, + skjæringstidspunkt: LocalDate, + orgnummer: String, + venteÅrsak: Venteårsak + ) { venterPå = VenterPå(vedtaksperiodeId, skjæringstidspunkt, orgnummer, venteÅrsak) } internal fun build() = - VedtaksperiodeVenter(vedtaksperiodeId, behandlingId, skjæringstidspunkt, ventetSiden, venterTil, venterPå, orgnanisasjonsnummer, hendelseIder.toSet()) + VedtaksperiodeVenter( + vedtaksperiodeId, + behandlingId, + skjæringstidspunkt, + ventetSiden, + venterTil, + venterPå, + orgnanisasjonsnummer, + hendelseIder.toSet() + ) } } @@ -81,12 +102,14 @@ internal class VenterPå( organisasjonsnummer = organisasjonsnummer, venteårsak = venteårsak.dto() ) + internal fun event() = PersonObserver.VedtaksperiodeVenterEvent.VenterPå( vedtaksperiodeId = vedtaksperiodeId, skjæringstidspunkt = skjæringstidspunkt, organisasjonsnummer = organisasjonsnummer, venteårsak = venteårsak.event() ) + override fun toString() = "vedtaksperiode $vedtaksperiodeId med skjæringstidspunkt $skjæringstidspunkt for arbeidsgiver $organisasjonsnummer som venter på $venteårsak" } @@ -94,15 +117,17 @@ internal class VenterPå( internal class Venteårsak private constructor( private val hva: Hva, private val hvorfor: Hvorfor?, -){ +) { fun dto() = VenteårsakDto(hva.name, hvorfor?.name) internal fun event() = PersonObserver.VedtaksperiodeVenterEvent.Venteårsak( hva = hva.name, hvorfor = hvorfor?.name ) + override fun toString() = - hva.name + if(hvorfor == null) "" else " fordi ${hvorfor.name}" + hva.name + if (hvorfor == null) "" else " fordi ${hvorfor.name}" + enum class Hva { GODKJENNING, SØKNAD, 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 f1b2910e82..8d59aa4a82 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" @@ -55,24 +55,41 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori historikk.add(0, nytt) } - internal fun oppdaterHistorikk(aktivitetslogg: IAktivitetslogg, sykefraværstilfeller: Set) { - val nyttInnslag = sisteInnlag()?.oppdaterHistorikk(aktivitetslogg, sykefraværstilfeller) ?: return + internal fun oppdaterHistorikk( + aktivitetslogg: IAktivitetslogg, + sykefraværstilfeller: Set + ) { + val nyttInnslag = + sisteInnlag()?.oppdaterHistorikk(aktivitetslogg, sykefraværstilfeller) ?: return if (nyttInnslag == sisteInnlag()) return historikk.add(0, nyttInnslag) } - internal fun forespurtInntektOgRefusjonsopplysninger(organisasjonsnummer: String, skjæringstidspunkt: LocalDate, periode: Periode): List? { - return sisteInnlag()?.forespurtInntektOgRefusjonsopplysninger(organisasjonsnummer, skjæringstidspunkt, periode) + internal fun forespurtInntektOgRefusjonsopplysninger( + organisasjonsnummer: String, + skjæringstidspunkt: LocalDate, + periode: Periode + ): List? { + return sisteInnlag()?.forespurtInntektOgRefusjonsopplysninger( + organisasjonsnummer, + skjæringstidspunkt, + periode + ) } internal fun vilkårsgrunnlagFor(skjæringstidspunkt: LocalDate) = sisteInnlag()?.vilkårsgrunnlagFor(skjæringstidspunkt) - internal fun avvisInngangsvilkår(tidslinjer: List, periode: Periode, subsumsjonslogg: Subsumsjonslogg) = + internal fun avvisInngangsvilkår( + tidslinjer: List, + periode: Periode, + subsumsjonslogg: Subsumsjonslogg + ) = sisteInnlag()?.avvis(tidslinjer, periode, subsumsjonslogg) ?: tidslinjer internal fun blitt6GBegrensetSidenSist(skjæringstidspunkt: LocalDate): Boolean { - if (sisteInnlag()?.vilkårsgrunnlagFor(skjæringstidspunkt)?.er6GBegrenset() == false) return false + if (sisteInnlag()?.vilkårsgrunnlagFor(skjæringstidspunkt) + ?.er6GBegrenset() == false) return false return forrigeInnslag()?.vilkårsgrunnlagFor(skjæringstidspunkt)?.er6GBegrenset() == false } @@ -87,17 +104,28 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori vilkårsgrunnlag.toMutableMap() ) - internal constructor(other: Innslag?, elementer: List) : this(other?.vilkårsgrunnlag?.toMap()?: emptyMap()) { + internal constructor( + other: Innslag?, + elementer: List + ) : this(other?.vilkårsgrunnlag?.toMap() ?: emptyMap()) { elementer.forEach { it.add(this) } } - internal fun view() = VilkårsgrunnlagInnslagView(vilkårsgrunnlag = vilkårsgrunnlag.map { it.value.view() }) + internal fun view() = + VilkårsgrunnlagInnslagView(vilkårsgrunnlag = vilkårsgrunnlag.map { it.value.view() }) - internal fun add(skjæringstidspunkt: LocalDate, vilkårsgrunnlagElement: VilkårsgrunnlagElement) { + internal fun add( + skjæringstidspunkt: LocalDate, + vilkårsgrunnlagElement: VilkårsgrunnlagElement + ) { vilkårsgrunnlag[skjæringstidspunkt] = vilkårsgrunnlagElement } - internal fun forespurtInntektOgRefusjonsopplysninger(organisasjonsnummer: String, skjæringstidspunkt: LocalDate, periode: Periode): List? { + internal fun forespurtInntektOgRefusjonsopplysninger( + organisasjonsnummer: String, + skjæringstidspunkt: LocalDate, + periode: Periode + ): List? { val fastsatteOpplysninger = vilkårsgrunnlagFor(skjæringstidspunkt) ?.forespurtInntektOgRefusjonsopplysninger(organisasjonsnummer, periode) @@ -113,7 +141,10 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori .filter { it < skjæringstidspunkt } .sortedDescending() .firstNotNullOfOrNull { - vilkårsgrunnlagFor(it)?.forespurtInntektOgRefusjonsopplysninger(organisasjonsnummer, periode) + vilkårsgrunnlagFor(it)?.forespurtInntektOgRefusjonsopplysninger( + organisasjonsnummer, + periode + ) } ?: return null val (_, refusjonForslag, inntektForslag) = forrigeFastsatteOpplysning @@ -126,10 +157,15 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori internal fun vilkårsgrunnlagFor(skjæringstidspunkt: LocalDate) = vilkårsgrunnlag[skjæringstidspunkt] - internal fun avvis(tidslinjer: List, periode: Periode, subsumsjonslogg: Subsumsjonslogg): List { + internal fun avvis( + tidslinjer: List, + periode: Periode, + subsumsjonslogg: Subsumsjonslogg + ): List { val skjæringstidspunktperioder = skjæringstidspunktperioder(vilkårsgrunnlag.values) return vilkårsgrunnlag.entries.fold(tidslinjer) { resultat, (skjæringstidspunkt, element) -> - val skjæringstidspunktperiode = checkNotNull(skjæringstidspunktperioder.singleOrNull { it.start == skjæringstidspunkt }) + val skjæringstidspunktperiode = + checkNotNull(skjæringstidspunktperioder.singleOrNull { it.start == skjæringstidspunkt }) element.avvis(resultat, skjæringstidspunktperiode, periode, subsumsjonslogg) } } @@ -143,7 +179,10 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori return this.vilkårsgrunnlag == other.vilkårsgrunnlag } - internal fun oppdaterHistorikk(aktivitetslogg: IAktivitetslogg, sykefraværstilfeller: Set): Innslag { + internal fun oppdaterHistorikk( + aktivitetslogg: IAktivitetslogg, + sykefraværstilfeller: Set + ): Innslag { val gyldigeVilkårsgrunnlag = beholdAktiveSkjæringstidspunkter(sykefraværstilfeller) val diff = this.vilkårsgrunnlag.size - gyldigeVilkårsgrunnlag.size if (diff > 0) aktivitetslogg.info("Fjernet $diff vilkårsgrunnlagselementer") @@ -161,7 +200,12 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori elementer: Map ): Innslag = Innslag(id, opprettet, elementer.toMutableMap()) - fun gjenopprett(alder: Alder, dto: VilkårsgrunnlagInnslagInnDto, inntekter: MutableMap, grunnlagsdata: MutableMap): Innslag { + fun gjenopprett( + alder: Alder, + dto: VilkårsgrunnlagInnslagInnDto, + inntekter: MutableMap, + grunnlagsdata: MutableMap + ): Innslag { return Innslag( id = dto.id, opprettet = dto.opprettet, @@ -191,7 +235,8 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori innslag.add(skjæringstidspunkt, this) } - internal open fun valider(aktivitetslogg: IAktivitetslogg, organisasjonsnummer: String) = true + internal open fun valider(aktivitetslogg: IAktivitetslogg, organisasjonsnummer: String) = + true internal fun view() = VilkårsgrunnlagView( vilkårsgrunnlagId = vilkårsgrunnlagId, @@ -212,14 +257,23 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori opptjening = opptjening?.view() ) - internal fun erArbeidsgiverRelevant(organisasjonsnummer: String) = inntektsgrunnlag.erArbeidsgiverRelevant(organisasjonsnummer) + internal fun erArbeidsgiverRelevant(organisasjonsnummer: String) = + inntektsgrunnlag.erArbeidsgiverRelevant(organisasjonsnummer) internal fun inntektskilde() = inntektsgrunnlag.inntektskilde() - internal fun forespurtInntektOgRefusjonsopplysninger(organisasjonsnummer: String, periode: Periode) = + internal fun forespurtInntektOgRefusjonsopplysninger( + organisasjonsnummer: String, + periode: Periode + ) = inntektsgrunnlag.forespurtInntektOgRefusjonsopplysninger(organisasjonsnummer, periode) - internal open fun avvis(tidslinjer: List, skjæringstidspunktperiode: Periode, periode: Periode, subsumsjonslogg: Subsumsjonslogg): List { + internal open fun avvis( + tidslinjer: List, + skjæringstidspunktperiode: Periode, + periode: Periode, + subsumsjonslogg: Subsumsjonslogg + ): List { return tidslinjer } @@ -232,18 +286,53 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori ) ) - internal fun overstyrArbeidsgiveropplysninger(person: Person, hendelse: OverstyrArbeidsgiveropplysninger, aktivitetslogg: IAktivitetslogg, subsumsjonslogg: Subsumsjonslogg): Pair { - val sykepengegrunnlag = inntektsgrunnlag.overstyrArbeidsgiveropplysninger(person, hendelse, opptjening, subsumsjonslogg) + internal fun overstyrArbeidsgiveropplysninger( + person: Person, + hendelse: OverstyrArbeidsgiveropplysninger, + aktivitetslogg: IAktivitetslogg, + subsumsjonslogg: Subsumsjonslogg + ): Pair { + val sykepengegrunnlag = inntektsgrunnlag.overstyrArbeidsgiveropplysninger( + person, + hendelse, + opptjening, + subsumsjonslogg + ) val endringsdato = sykepengegrunnlag.finnEndringsdato(this.inntektsgrunnlag) - val eventyr = Revurderingseventyr.Companion.arbeidsgiveropplysninger(hendelse, skjæringstidspunkt, endringsdato) - return kopierMed(aktivitetslogg, sykepengegrunnlag, opptjening, subsumsjonslogg) to eventyr + val eventyr = Revurderingseventyr.Companion.arbeidsgiveropplysninger( + hendelse, + skjæringstidspunkt, + endringsdato + ) + return kopierMed( + aktivitetslogg, + sykepengegrunnlag, + opptjening, + subsumsjonslogg + ) to eventyr } - internal fun skjønnsmessigFastsettelse(hendelse: SkjønnsmessigFastsettelse, aktivitetslogg: IAktivitetslogg, subsumsjonslogg: Subsumsjonslogg): Pair { - val sykepengegrunnlag = inntektsgrunnlag.skjønnsmessigFastsettelse(hendelse, opptjening, subsumsjonslogg) + + internal fun skjønnsmessigFastsettelse( + hendelse: SkjønnsmessigFastsettelse, + aktivitetslogg: IAktivitetslogg, + subsumsjonslogg: Subsumsjonslogg + ): Pair { + val sykepengegrunnlag = + inntektsgrunnlag.skjønnsmessigFastsettelse(hendelse, opptjening, subsumsjonslogg) val endringsdato = sykepengegrunnlag.finnEndringsdato(this.inntektsgrunnlag) - val eventyr = Revurderingseventyr.Companion.skjønnsmessigFastsettelse(hendelse, skjæringstidspunkt, endringsdato) - return kopierMed(aktivitetslogg, sykepengegrunnlag, opptjening, subsumsjonslogg) to eventyr + val eventyr = Revurderingseventyr.Companion.skjønnsmessigFastsettelse( + hendelse, + skjæringstidspunkt, + endringsdato + ) + return kopierMed( + aktivitetslogg, + sykepengegrunnlag, + opptjening, + subsumsjonslogg + ) to eventyr } + protected abstract fun kopierMed( aktivitetslogg: IAktivitetslogg, inntektsgrunnlag: Inntektsgrunnlag, @@ -272,8 +361,18 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori return kopierMed(aktivitetslogg, nyttSykepengegrunnlag, opptjening, subsumsjonslogg) } - internal fun tilkomneInntekterFraSøknaden(søknad: IAktivitetslogg, periode: Periode, nyeInntekter: List, subsumsjonslogg: Subsumsjonslogg): VilkårsgrunnlagElement? { - val sykepengegrunnlag = inntektsgrunnlag.tilkomneInntekterFraSøknaden(søknad, periode, nyeInntekter, subsumsjonslogg) ?: return null + internal fun tilkomneInntekterFraSøknaden( + søknad: IAktivitetslogg, + periode: Periode, + nyeInntekter: List, + subsumsjonslogg: Subsumsjonslogg + ): VilkårsgrunnlagElement? { + val sykepengegrunnlag = inntektsgrunnlag.tilkomneInntekterFraSøknaden( + søknad, + periode, + nyeInntekter, + subsumsjonslogg + ) ?: return null return kopierMed(søknad, sykepengegrunnlag, opptjening, EmptyLog) } @@ -282,14 +381,19 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori inntektsmelding: Inntektsmelding, aktivitetslogg: IAktivitetslogg, subsumsjonslogg: Subsumsjonslogg - ): Pair { + ): Pair { val sykepengegrunnlag = inntektsgrunnlag.nyeArbeidsgiverInntektsopplysninger( person, inntektsmelding, subsumsjonslogg ) val endringsdato = sykepengegrunnlag.finnEndringsdato(this.inntektsgrunnlag) - val eventyr = Revurderingseventyr.Companion.korrigertInntektsmeldingInntektsopplysninger(inntektsmelding, skjæringstidspunkt, endringsdato) + val eventyr = + Revurderingseventyr.Companion.korrigertInntektsmeldingInntektsopplysninger( + inntektsmelding, + skjæringstidspunkt, + endringsdato + ) return kopierMed(aktivitetslogg, sykepengegrunnlag, opptjening, EmptyLog) to eventyr } @@ -314,7 +418,12 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori aktivitetslogg: IAktivitetslogg, nyArbeidsgiverperiode: Boolean ) { - inntektsgrunnlag.lagreTidsnæreInntekter(skjæringstidspunkt, arbeidsgiver, aktivitetslogg, nyArbeidsgiverperiode) + inntektsgrunnlag.lagreTidsnæreInntekter( + skjæringstidspunkt, + arbeidsgiver, + aktivitetslogg, + nyArbeidsgiverperiode + ) } internal fun berik(builder: UtkastTilVedtakBuilder) { @@ -329,7 +438,8 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori .sorted() return skjæringstidspunkter .mapIndexed { index, skjæringstidspunkt -> - val sisteDag = skjæringstidspunkter.elementAtOrNull(index + 1)?.forrigeDag ?: LocalDate.MAX + val sisteDag = skjæringstidspunkter.elementAtOrNull(index + 1)?.forrigeDag + ?: LocalDate.MAX skjæringstidspunkt til sisteDag } } @@ -338,16 +448,30 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori return map { it.inntektsgrunnlag }.harUlikeGrunnbeløp() } - internal fun gjenopprett(alder: Alder, dto: VilkårsgrunnlagInnDto, inntekter: MutableMap): VilkårsgrunnlagElement { + internal fun gjenopprett( + alder: Alder, + dto: VilkårsgrunnlagInnDto, + inntekter: MutableMap + ): VilkårsgrunnlagElement { return when (dto) { - is VilkårsgrunnlagInnDto.Infotrygd -> InfotrygdVilkårsgrunnlag.gjenopprett(alder, dto, inntekter) - is VilkårsgrunnlagInnDto.Spleis -> Grunnlagsdata.gjenopprett(alder, dto, inntekter) + is VilkårsgrunnlagInnDto.Infotrygd -> InfotrygdVilkårsgrunnlag.gjenopprett( + alder, + dto, + inntekter + ) + + is VilkårsgrunnlagInnDto.Spleis -> Grunnlagsdata.gjenopprett( + alder, + dto, + inntekter + ) } } } internal fun dto(): VilkårsgrunnlagUtDto = dto(vilkårsgrunnlagId, skjæringstidspunkt, inntektsgrunnlag.dto()) + protected abstract fun dto( vilkårsgrunnlagId: UUID, skjæringstidspunkt: LocalDate, @@ -368,23 +492,47 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori val vurdertOk: Boolean, val meldingsreferanseId: UUID?, vilkårsgrunnlagId: UUID - ) : VilkårsgrunnlagElement(vilkårsgrunnlagId, skjæringstidspunkt, inntektsgrunnlag, opptjening) { + ) : VilkårsgrunnlagElement( + vilkårsgrunnlagId, + skjæringstidspunkt, + inntektsgrunnlag, + opptjening + ) { internal fun validerFørstegangsvurdering(aktivitetslogg: IAktivitetslogg) { inntektsgrunnlag.måHaRegistrertOpptjeningForArbeidsgivere(aktivitetslogg, opptjening) inntektsgrunnlag.markerFlereArbeidsgivere(aktivitetslogg) } - override fun valider(aktivitetslogg: IAktivitetslogg, organisasjonsnummer: String): Boolean { + override fun valider( + aktivitetslogg: IAktivitetslogg, + organisasjonsnummer: String + ): Boolean { inntektsgrunnlag.sjekkForNyArbeidsgiver(aktivitetslogg, opptjening, organisasjonsnummer) return !aktivitetslogg.harFunksjonelleFeilEllerVerre() } - override fun avvis(tidslinjer: List, skjæringstidspunktperiode: Periode, periode: Periode, subsumsjonslogg: Subsumsjonslogg): List { - val foreløpigAvvist = inntektsgrunnlag.avvis(tidslinjer, skjæringstidspunktperiode, periode, subsumsjonslogg) + override fun avvis( + tidslinjer: List, + skjæringstidspunktperiode: Periode, + periode: Periode, + subsumsjonslogg: Subsumsjonslogg + ): List { + val foreløpigAvvist = inntektsgrunnlag.avvis( + tidslinjer, + skjæringstidspunktperiode, + periode, + subsumsjonslogg + ) val begrunnelser = mutableListOf() - if (medlemskapstatus == Medlemskapsvurdering.Medlemskapstatus.Nei) begrunnelser.add(Begrunnelse.ManglerMedlemskap) + if (medlemskapstatus == Medlemskapsvurdering.Medlemskapstatus.Nei) begrunnelser.add( + Begrunnelse.ManglerMedlemskap + ) if (!opptjening!!.harTilstrekkeligAntallOpptjeningsdager()) begrunnelser.add(Begrunnelse.ManglerOpptjening) - return Utbetalingstidslinje.avvis(foreløpigAvvist, listOf(skjæringstidspunktperiode), begrunnelser) + return Utbetalingstidslinje.avvis( + foreløpigAvvist, + listOf(skjæringstidspunktperiode), + begrunnelser + ) } override fun vilkårsgrunnlagtype() = "Spleis" @@ -443,10 +591,19 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori ) internal companion object { - fun gjenopprett(alder: Alder, dto: VilkårsgrunnlagInnDto.Spleis, inntekter: MutableMap): Grunnlagsdata { + fun gjenopprett( + alder: Alder, + dto: VilkårsgrunnlagInnDto.Spleis, + inntekter: MutableMap + ): Grunnlagsdata { return Grunnlagsdata( skjæringstidspunkt = dto.skjæringstidspunkt, - inntektsgrunnlag = Inntektsgrunnlag.gjenopprett(alder, dto.skjæringstidspunkt, dto.inntektsgrunnlag, inntekter), + inntektsgrunnlag = Inntektsgrunnlag.gjenopprett( + alder, + dto.skjæringstidspunkt, + dto.inntektsgrunnlag, + inntekter + ), opptjening = Opptjening.gjenopprett(dto.skjæringstidspunkt, dto.opptjening), vilkårsgrunnlagId = dto.vilkårsgrunnlagId, medlemskapstatus = when (dto.medlemskapstatus) { @@ -514,10 +671,19 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori ) = VilkårsgrunnlagUtDto.Infotrygd(vilkårsgrunnlagId, skjæringstidspunkt, sykepengegrunnlag) internal companion object { - fun gjenopprett(alder: Alder, dto: VilkårsgrunnlagInnDto.Infotrygd, inntekter: MutableMap): InfotrygdVilkårsgrunnlag { + fun gjenopprett( + alder: Alder, + dto: VilkårsgrunnlagInnDto.Infotrygd, + inntekter: MutableMap + ): InfotrygdVilkårsgrunnlag { return InfotrygdVilkårsgrunnlag( skjæringstidspunkt = dto.skjæringstidspunkt, - inntektsgrunnlag = Inntektsgrunnlag.gjenopprett(alder, dto.skjæringstidspunkt, dto.inntektsgrunnlag, inntekter), + inntektsgrunnlag = Inntektsgrunnlag.gjenopprett( + alder, + dto.skjæringstidspunkt, + dto.inntektsgrunnlag, + inntekter + ), vilkårsgrunnlagId = dto.vilkårsgrunnlagId ) } @@ -526,10 +692,16 @@ internal class VilkårsgrunnlagHistorikk private constructor(private val histori internal companion object { - internal fun gjenopprett(alder: Alder, dto: VilkårsgrunnlaghistorikkInnDto, grunnlagsdata: MutableMap): VilkårsgrunnlagHistorikk { + internal fun gjenopprett( + alder: Alder, + dto: VilkårsgrunnlaghistorikkInnDto, + grunnlagsdata: MutableMap + ): VilkårsgrunnlagHistorikk { val inntekter = mutableMapOf() return VilkårsgrunnlagHistorikk( - historikk = dto.historikk.asReversed().map { Innslag.gjenopprett(alder, it, inntekter, grunnlagsdata) }.asReversed().toMutableList() + historikk = dto.historikk.asReversed() + .map { Innslag.gjenopprett(alder, it, inntekter, grunnlagsdata) }.asReversed() + .toMutableList() ) } } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Yrkesaktivitet.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Yrkesaktivitet.kt index 13f1b8ffcd..9066955a66 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Yrkesaktivitet.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Yrkesaktivitet.kt @@ -41,9 +41,14 @@ internal sealed interface Yrkesaktivitet { fun jurist(other: BehandlingSubsumsjonslogg): BehandlingSubsumsjonslogg = other.medOrganisasjonsnummer(this.toString()) + fun erYrkesaktivitetenIkkeStøttet(aktivitetslogg: IAktivitetslogg): Boolean - fun håndter(sykmelding: Sykmelding, aktivitetslogg: IAktivitetslogg, sykmeldingsperioder: Sykmeldingsperioder) { + fun håndter( + sykmelding: Sykmelding, + aktivitetslogg: IAktivitetslogg, + sykmeldingsperioder: Sykmeldingsperioder + ) { sykmeldingsperioder.lagre(sykmelding, aktivitetslogg) } @@ -57,7 +62,11 @@ internal sealed interface Yrkesaktivitet { refusjonshistorikk: Refusjonshistorikk, aktivitetslogg: IAktivitetslogg? ): ArbeidsgiverInntektsopplysning? { - val inntektsopplysning = inntektshistorikk.avklarSykepengegrunnlag(skjæringstidspunkt, førsteFraværsdag, skattSykepengegrunnlag) ?: return null + val inntektsopplysning = inntektshistorikk.avklarSykepengegrunnlag( + skjæringstidspunkt, + førsteFraværsdag, + skattSykepengegrunnlag + ) ?: return null return ArbeidsgiverInntektsopplysning( orgnummer = organisasjonsnummer, gjelder = skjæringstidspunkt til LocalDate.MAX, @@ -79,6 +88,7 @@ internal sealed interface Yrkesaktivitet { override fun identifikator() = organisasjonsnummer override fun toString() = identifikator() } + class Frilans : Yrkesaktivitet { override fun erYrkesaktivitetenIkkeStøttet(aktivitetslogg: IAktivitetslogg): Boolean { aktivitetslogg.funksjonellFeil(Varselkode.RV_SØ_39) @@ -97,6 +107,7 @@ internal sealed interface Yrkesaktivitet { override fun identifikator() = Frilans override fun toString() = identifikator() } + class Selvstendig : Yrkesaktivitet { override fun erYrkesaktivitetenIkkeStøttet(aktivitetslogg: IAktivitetslogg): Boolean { aktivitetslogg.funksjonellFeil(Varselkode.RV_SØ_39) @@ -111,16 +122,22 @@ internal sealed interface Yrkesaktivitet { if (this === other) return true return other is Selvstendig } + override fun identifikator() = Selvstendig override fun toString() = identifikator() } + class Arbeidsledig : Yrkesaktivitet { override fun erYrkesaktivitetenIkkeStøttet(aktivitetslogg: IAktivitetslogg): Boolean { aktivitetslogg.funksjonellFeil(Varselkode.RV_SØ_39) return true } - override fun håndter(sykmelding: Sykmelding, aktivitetslogg: IAktivitetslogg, sykmeldingsperioder: Sykmeldingsperioder) { + override fun håndter( + sykmelding: Sykmelding, + aktivitetslogg: IAktivitetslogg, + sykmeldingsperioder: Sykmeldingsperioder + ) { aktivitetslogg.info("Lagrer _ikke_ sykmeldingsperiode ${sykmelding.periode()} ettersom det er en sykmelding som arbeidsledig.") } @@ -132,8 +149,19 @@ internal sealed interface Yrkesaktivitet { refusjonshistorikk: Refusjonshistorikk, aktivitetslogg: IAktivitetslogg? ): ArbeidsgiverInntektsopplysning? { - val inntektsopplysning = inntektshistorikk.avklarSykepengegrunnlag(skjæringstidspunkt, førsteFraværsdag, skattSykepengegrunnlag) ?: return null - return super.avklarSykepengegrunnlag(skjæringstidspunkt, førsteFraværsdag, inntektshistorikk, skattSykepengegrunnlag, refusjonshistorikk, aktivitetslogg) + val inntektsopplysning = inntektshistorikk.avklarSykepengegrunnlag( + skjæringstidspunkt, + førsteFraværsdag, + skattSykepengegrunnlag + ) ?: return null + return super.avklarSykepengegrunnlag( + skjæringstidspunkt, + førsteFraværsdag, + inntektshistorikk, + skattSykepengegrunnlag, + refusjonshistorikk, + aktivitetslogg + ) } override fun hashCode(): Int { @@ -144,6 +172,7 @@ internal sealed interface Yrkesaktivitet { if (this === other) return true return other is Arbeidsledig } + override fun identifikator() = Arbeidsledig override fun toString() = identifikator() } diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/person/bel\303\270p/Bel\303\270pstidslinje.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/person/bel\303\270p/Bel\303\270pstidslinje.kt" index 666f505be7..0b8e861ef0 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/person/bel\303\270p/Bel\303\270pstidslinje.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/person/bel\303\270p/Bel\303\270pstidslinje.kt" @@ -11,14 +11,16 @@ import no.nav.helse.nesteDag import no.nav.helse.økonomi.Inntekt import no.nav.helse.økonomi.Inntekt.Companion.daglig -data class Beløpstidslinje(private val dager: SortedMap) : Collection by dager.values { - private constructor(dager: Map): this(dager.toSortedMap()) +data class Beløpstidslinje(private val dager: SortedMap) : + Collection by dager.values { + private constructor(dager: Map) : this(dager.toSortedMap()) - constructor(dager: List = emptyList()): this(dager.associateBy { it.dato }.toSortedMap().also { + constructor(dager: List = emptyList()) : this(dager.associateBy { it.dato } + .toSortedMap().also { require(dager.size == it.size) { "Forsøkte å opprette en beløpstidslinje med duplikate datoer. Det blir for rart for meg." } }) - internal constructor(vararg dager: Beløpsdag):this(dager.toList()) + internal constructor(vararg dager: Beløpsdag) : this(dager.toList()) private val periode = if (dager.isEmpty()) null else dager.firstKey() til dager.lastKey() internal val perioderMedBeløp by lazy { dager.keys.grupperSammenhengendePerioder() } @@ -34,9 +36,13 @@ data class Beløpstidslinje(private val dager: SortedMap) } } - operator fun plus(other: Beløpstidslinje) = merge(other, BevareEksisterendeOpplysningHvisLikeBeløp) + operator fun plus(other: Beløpstidslinje) = + merge(other, BevareEksisterendeOpplysningHvisLikeBeløp) - private fun merge(other: Beløpstidslinje, strategi: BesteRefusjonsopplysningstrategi): Beløpstidslinje { + private fun merge( + other: Beløpstidslinje, + strategi: BesteRefusjonsopplysningstrategi + ): Beløpstidslinje { val results = this.dager.toMutableMap() other.dager.forEach { (key, dag) -> results.merge(key, dag, strategi) @@ -44,19 +50,27 @@ data class Beløpstidslinje(private val dager: SortedMap) return Beløpstidslinje(results) } - internal operator fun minus(datoer: Iterable) = Beløpstidslinje(this.dager.filterKeys { it !in datoer }) + internal operator fun minus(datoer: Iterable) = + Beløpstidslinje(this.dager.filterKeys { it !in datoer }) + internal operator fun minus(other: Beløpstidslinje): Beløpstidslinje { if (other.periode == null) return this return this - other.periode } - internal operator fun minus(dato: LocalDate) = Beløpstidslinje(this.dager.filterKeys { it != dato }) + + internal operator fun minus(dato: LocalDate) = + Beløpstidslinje(this.dager.filterKeys { it != dato }) internal fun subset(periode: Periode): Beløpstidslinje { if (this.periode == null || !this.periode.overlapperMed(periode)) return Beløpstidslinje() - return Beløpstidslinje(dager.subMap(periode.start, periode.endInclusive.nesteDag).toSortedMap()) + return Beløpstidslinje( + dager.subMap(periode.start, periode.endInclusive.nesteDag).toSortedMap() + ) } - internal fun tilOgMed(dato: LocalDate) = Beløpstidslinje(dager.headMap(dato.nesteDag).toSortedMap()) + internal fun tilOgMed(dato: LocalDate) = + Beløpstidslinje(dager.headMap(dato.nesteDag).toSortedMap()) + internal fun fraOgMed(dato: LocalDate) = Beløpstidslinje(dager.tailMap(dato).toSortedMap()) private val førsteBeløpsdag = periode?.start?.let { dager.getValue(it) } @@ -68,12 +82,16 @@ data class Beløpstidslinje(private val dager: SortedMap) // Fyller alle hull i beløpstidslinjen (les UkjentDag) med beløp & kilde fra forrige Beløpsdag internal fun fyll(): Beløpstidslinje { var forrigeBeløpsdag = førsteBeløpsdag ?: return Beløpstidslinje() - val fylteDager = this.map { dag -> when (dag) { - is Beløpsdag -> dag.also { forrigeBeløpsdag = it } - is UkjentDag -> forrigeBeløpsdag.copy(dato = forrigeBeløpsdag.dato.nesteDag).also { forrigeBeløpsdag = it } - }} + val fylteDager = this.map { dag -> + when (dag) { + is Beløpsdag -> dag.also { forrigeBeløpsdag = it } + is UkjentDag -> forrigeBeløpsdag.copy(dato = forrigeBeløpsdag.dato.nesteDag) + .also { forrigeBeløpsdag = it } + } + } return Beløpstidslinje(fylteDager) } + internal fun fyll(periode: Periode) = fyll().strekk(periode).subset(periode) internal fun fyll(til: LocalDate) = fyll().strekkFrem(til).tilOgMed(til) @@ -109,21 +127,27 @@ data class Beløpstidslinje(private val dager: SortedMap) .fold(emptyList()) { result, dag -> when { result.isEmpty() -> listOf(dag) - result.last().kanUtvidesAv(dag) -> result.dropLast(1) + result.last().copy(tom = dag.tom) + result.last().kanUtvidesAv(dag) -> result.dropLast(1) + result.last() + .copy(tom = dag.tom) + else -> result.plusElement(dag) } } ) companion object { - private val BevareEksisterendeOpplysningHvisLikeBeløp: BesteRefusjonsopplysningstrategi = { venstre: Beløpsdag, høyre: Beløpsdag -> - when { - venstre.beløp == høyre.beløp -> venstre - venstre.kilde.tidsstempel > høyre.kilde.tidsstempel -> venstre - else -> høyre + private val BevareEksisterendeOpplysningHvisLikeBeløp: BesteRefusjonsopplysningstrategi = + { venstre: Beløpsdag, høyre: Beløpsdag -> + when { + venstre.beløp == høyre.beløp -> venstre + venstre.kilde.tidsstempel > høyre.kilde.tidsstempel -> venstre + else -> høyre + } } - } - fun fra(periode: Periode, beløp: Inntekt, kilde: Kilde) = Beløpstidslinje(periode.map { Beløpsdag(it, beløp, kilde) }) + + fun fra(periode: Periode, beløp: Inntekt, kilde: Kilde) = + Beløpstidslinje(periode.map { Beløpsdag(it, beløp, kilde) }) + internal fun gjenopprett(dto: BeløpstidslinjeDto) = Beløpstidslinje( dager = dto.perioder .flatMap { @@ -155,10 +179,13 @@ data class Beløpsdag( override val dato: LocalDate, override val beløp: Inntekt, override val kilde: Kilde -): Dag { +) : Dag { fun strekk(periode: Periode) = Beløpstidslinje(periode.map { copy(dato = it) }) - fun strekkTilbake(datoFør: LocalDate) = if (datoFør > dato) Beløpstidslinje() else strekk(datoFør til dato) - fun strekkFrem(datoEtter: LocalDate) = if (datoEtter < dato) Beløpstidslinje() else strekk(dato til datoEtter) + fun strekkTilbake(datoFør: LocalDate) = + if (datoFør > dato) Beløpstidslinje() else strekk(datoFør til dato) + + fun strekkFrem(datoEtter: LocalDate) = + if (datoEtter < dato) Beløpstidslinje() else strekk(dato til datoEtter) } data object UkjentDag : Dag { diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/builders/UtbetalingsdagerBuilder.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/builders/UtbetalingsdagerBuilder.kt index ebb4acd3b8..d04da57a80 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/builders/UtbetalingsdagerBuilder.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/builders/UtbetalingsdagerBuilder.kt @@ -11,21 +11,45 @@ import no.nav.helse.sykdomstidslinje.Sykdomstidslinje import no.nav.helse.utbetalingstidslinje.Utbetalingsdag import no.nav.helse.utbetalingstidslinje.Utbetalingstidslinje -internal class UtbetalingsdagerBuilder(private val sykdomstidslinje: Sykdomstidslinje, utbetalingstidslinje: Utbetalingstidslinje) { +internal class UtbetalingsdagerBuilder( + private val sykdomstidslinje: Sykdomstidslinje, + utbetalingstidslinje: Utbetalingstidslinje +) { private val utbetalingsdager = utbetalingstidslinje.map { dag -> when (dag) { - is Utbetalingsdag.Arbeidsdag -> PersonObserver.Utbetalingsdag(dag.dato, PersonObserver.Utbetalingsdag.Dagtype.Arbeidsdag) + is Utbetalingsdag.Arbeidsdag -> PersonObserver.Utbetalingsdag( + dag.dato, + PersonObserver.Utbetalingsdag.Dagtype.Arbeidsdag + ) + is Utbetalingsdag.ArbeidsgiverperiodeDag, - is Utbetalingsdag.ArbeidsgiverperiodedagNav -> PersonObserver.Utbetalingsdag(dag.dato, PersonObserver.Utbetalingsdag.Dagtype.ArbeidsgiverperiodeDag) - is Utbetalingsdag.NavDag -> PersonObserver.Utbetalingsdag(dag.dato, PersonObserver.Utbetalingsdag.Dagtype.NavDag) - is Utbetalingsdag.NavHelgDag -> PersonObserver.Utbetalingsdag(dag.dato, PersonObserver.Utbetalingsdag.Dagtype.NavHelgDag) + is Utbetalingsdag.ArbeidsgiverperiodedagNav -> PersonObserver.Utbetalingsdag( + dag.dato, + PersonObserver.Utbetalingsdag.Dagtype.ArbeidsgiverperiodeDag + ) + + is Utbetalingsdag.NavDag -> PersonObserver.Utbetalingsdag( + dag.dato, + PersonObserver.Utbetalingsdag.Dagtype.NavDag + ) + + is Utbetalingsdag.NavHelgDag -> PersonObserver.Utbetalingsdag( + dag.dato, + PersonObserver.Utbetalingsdag.Dagtype.NavHelgDag + ) + is Utbetalingsdag.Fridag -> { val (dagtype, begrunnelse) = when (sykdomstidslinje[dag.dato]) { is Dag.Permisjonsdag -> Permisjonsdag to null is Dag.Feriedag -> Feriedag to null is Dag.ArbeidIkkeGjenopptattDag -> ArbeidIkkeGjenopptattDag to null - is Dag.AndreYtelser -> AndreYtelser to eksternBegrunnelse(sykdomstidslinje[dag.dato])?.let { listOf(it) } + is Dag.AndreYtelser -> AndreYtelser to eksternBegrunnelse(sykdomstidslinje[dag.dato])?.let { + listOf( + it + ) + } + is Dag.Arbeidsdag, is Dag.ArbeidsgiverHelgedag, is Dag.Arbeidsgiverdag, @@ -39,22 +63,34 @@ internal class UtbetalingsdagerBuilder(private val sykdomstidslinje: Sykdomstids } PersonObserver.Utbetalingsdag(dag.dato, dagtype, begrunnelse) } + is Utbetalingsdag.AvvistDag -> { - PersonObserver.Utbetalingsdag(dag.dato, PersonObserver.Utbetalingsdag.Dagtype.AvvistDag, dag.begrunnelser.map { - PersonObserver.Utbetalingsdag.EksternBegrunnelseDTO.fraBegrunnelse(it) - }) + PersonObserver.Utbetalingsdag( + dag.dato, + PersonObserver.Utbetalingsdag.Dagtype.AvvistDag, + dag.begrunnelser.map { + PersonObserver.Utbetalingsdag.EksternBegrunnelseDTO.fraBegrunnelse(it) + }) } - is Utbetalingsdag.ForeldetDag -> PersonObserver.Utbetalingsdag(dag.dato, PersonObserver.Utbetalingsdag.Dagtype.ForeldetDag) - is Utbetalingsdag.UkjentDag -> PersonObserver.Utbetalingsdag(dag.dato, PersonObserver.Utbetalingsdag.Dagtype.UkjentDag) + + is Utbetalingsdag.ForeldetDag -> PersonObserver.Utbetalingsdag( + dag.dato, + PersonObserver.Utbetalingsdag.Dagtype.ForeldetDag + ) + + is Utbetalingsdag.UkjentDag -> PersonObserver.Utbetalingsdag( + dag.dato, + PersonObserver.Utbetalingsdag.Dagtype.UkjentDag + ) } } - internal fun result() : List { + internal fun result(): List { return utbetalingsdager } private fun eksternBegrunnelse(dag: Dag): PersonObserver.Utbetalingsdag.EksternBegrunnelseDTO? { - return when(dag) { + return when (dag) { is Dag.AndreYtelser -> dag.tilEksternBegrunnelse() else -> null } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/builders/UtkastTilVedtakBuilder.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/builders/UtkastTilVedtakBuilder.kt index 2baa822de1..cdf115b529 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/builders/UtkastTilVedtakBuilder.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/builders/UtkastTilVedtakBuilder.kt @@ -4,6 +4,7 @@ import java.math.RoundingMode import java.time.LocalDate import java.time.LocalDateTime import java.util.UUID +import kotlin.properties.Delegates import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.Periode.Companion.periode import no.nav.helse.person.PersonObserver @@ -16,7 +17,6 @@ import no.nav.helse.utbetalingstidslinje.ArbeidsgiverRegler.Companion.NormalArbe import no.nav.helse.utbetalingstidslinje.Utbetalingsdag import no.nav.helse.utbetalingstidslinje.Utbetalingstidslinje import no.nav.helse.økonomi.Inntekt -import kotlin.properties.Delegates internal class UtkastTilVedtakBuilder( private val vedtaksperiodeId: UUID, @@ -26,6 +26,7 @@ internal class UtkastTilVedtakBuilder( private val harPeriodeRettFør: Boolean ) { private val tags = mutableSetOf() + init { if (erForlengelse) tags.add(Tag.Forlengelse) else tags.add(Tag.Førstegangsbehandling) @@ -33,10 +34,28 @@ internal class UtkastTilVedtakBuilder( internal fun grunnbeløpsregulert() = apply { tags.add(Tag.Grunnbeløpsregulering) } - private data class RelevantPeriode(val vedtaksperiodeId: UUID, val behandlingId: UUID, val skjæringstidspunkt: LocalDate, val periode: Periode) + private data class RelevantPeriode( + val vedtaksperiodeId: UUID, + val behandlingId: UUID, + val skjæringstidspunkt: LocalDate, + val periode: Periode + ) + private val relevantePerioder = mutableSetOf() - internal fun relevantPeriode(vedtaksperiodeId: UUID, behandlingId: UUID, skjæringstidspunkt: LocalDate, periode: Periode) = apply { - relevantePerioder.add(RelevantPeriode(vedtaksperiodeId, behandlingId, skjæringstidspunkt, periode)) + internal fun relevantPeriode( + vedtaksperiodeId: UUID, + behandlingId: UUID, + skjæringstidspunkt: LocalDate, + periode: Periode + ) = apply { + relevantePerioder.add( + RelevantPeriode( + vedtaksperiodeId, + behandlingId, + skjæringstidspunkt, + periode + ) + ) } private lateinit var behandlingId: UUID @@ -46,15 +65,19 @@ internal class UtkastTilVedtakBuilder( internal fun periode(arbeidsgiverperiode: List, periode: Periode) = apply { this.periode = periode - val gjennomført = NormalArbeidstaker.arbeidsgiverperiodenGjennomført(arbeidsgiverperiode.periode()?.count() ?: 0) - val arbeidsgiverperiodePåstartetITidligerePeriode = arbeidsgiverperiode.isNotEmpty() && periode.start >= arbeidsgiverperiode.last().endInclusive + val gjennomført = NormalArbeidstaker.arbeidsgiverperiodenGjennomført( + arbeidsgiverperiode.periode()?.count() ?: 0 + ) + val arbeidsgiverperiodePåstartetITidligerePeriode = + arbeidsgiverperiode.isNotEmpty() && periode.start >= arbeidsgiverperiode.last().endInclusive if (!harPeriodeRettFør && gjennomført && arbeidsgiverperiodePåstartetITidligerePeriode) { tags.add(Tag.IngenNyArbeidsgiverperiode) } } private val hendelseIder = mutableSetOf() - internal fun hendelseIder(hendelseIder: Set) = apply { this.hendelseIder.addAll(hendelseIder) } + internal fun hendelseIder(hendelseIder: Set) = + apply { this.hendelseIder.addAll(hendelseIder) } private lateinit var skjæringstidspunkt: LocalDate internal fun skjæringstidspunkt(skjæringstidspunkt: LocalDate) = apply { @@ -62,7 +85,8 @@ internal class UtkastTilVedtakBuilder( } private lateinit var vilkårsgrunnlagId: UUID - internal fun vilkårsgrunnlagId(vilkårsgrunnlagId: UUID) = apply { this.vilkårsgrunnlagId = vilkårsgrunnlagId } + internal fun vilkårsgrunnlagId(vilkårsgrunnlagId: UUID) = + apply { this.vilkårsgrunnlagId = vilkårsgrunnlagId } private lateinit var utbetalingId: UUID private var revurdering by Delegates.notNull() @@ -96,16 +120,18 @@ internal class UtkastTilVedtakBuilder( tags.add(utbetalingstidslinje.behandlingsresultat) } - private val Utbetalingstidslinje.behandlingsresultat get(): Tag { - val avvistDag = any { it is Utbetalingsdag.AvvistDag || it is Utbetalingsdag.ForeldetDag } - val navDag = any { it is Utbetalingsdag.NavDag } + private val Utbetalingstidslinje.behandlingsresultat + get(): Tag { + val avvistDag = + any { it is Utbetalingsdag.AvvistDag || it is Utbetalingsdag.ForeldetDag } + val navDag = any { it is Utbetalingsdag.NavDag } - return when { - !navDag -> Tag.Avslag - navDag && avvistDag -> Tag.DelvisInnvilget - else -> Tag.Innvilget + return when { + !navDag -> Tag.Avslag + navDag && avvistDag -> Tag.DelvisInnvilget + else -> Tag.Innvilget + } } - } internal fun sykdomstidslinje(sykdomstidslinje: Sykdomstidslinje) = apply { if (sykdomstidslinje.any { it is Dag.Feriedag }) tags.add(Tag.Ferie) @@ -115,88 +141,139 @@ internal class UtkastTilVedtakBuilder( private lateinit var beregningsgrunnlag: Inntekt private var totalOmregnetÅrsinntekt by Delegates.notNull() private var seksG by Delegates.notNull() - internal fun sykepengegrunnlag(sykepengegrunnlag: Inntekt, beregningsgrunnlag: Inntekt, totalOmregnetÅrsinntekt: Inntekt, seksG: Inntekt, inngangsvilkårFraInfotrygd: Boolean) = apply { + internal fun sykepengegrunnlag( + sykepengegrunnlag: Inntekt, + beregningsgrunnlag: Inntekt, + totalOmregnetÅrsinntekt: Inntekt, + seksG: Inntekt, + inngangsvilkårFraInfotrygd: Boolean + ) = apply { this.sykepengegrunnlag = sykepengegrunnlag.årlig this.beregningsgrunnlag = beregningsgrunnlag this.totalOmregnetÅrsinntekt = totalOmregnetÅrsinntekt.årlig this.seksG = seksG.årlig - val toG = seksG/3 + val toG = seksG / 3 if (!inngangsvilkårFraInfotrygd && beregningsgrunnlag > seksG) tags.add(Tag.`6GBegrenset`) if (sykepengegrunnlag < toG) tags.add(Tag.SykepengegrunnlagUnder2G) if (inngangsvilkårFraInfotrygd) tags.add(Tag.InngangsvilkårFraInfotrygd) } - private data class Arbeidsgiverinntekt(val arbeidsgiver: String, val omregnedeÅrsinntekt: Double, val skjønnsfastsatt: Double?, val gjelder: Periode, val skatteopplysning: Boolean) + private data class Arbeidsgiverinntekt( + val arbeidsgiver: String, + val omregnedeÅrsinntekt: Double, + val skjønnsfastsatt: Double?, + val gjelder: Periode, + val skatteopplysning: Boolean + ) + private val arbeidsgiverinntekter = mutableSetOf() - internal fun arbeidsgiverinntekt(arbeidsgiver: String, omregnedeÅrsinntekt: Inntekt, skjønnsfastsatt: Inntekt?, gjelder: Periode, skatteopplysning: Boolean) = apply { - arbeidsgiverinntekter.add(Arbeidsgiverinntekt(arbeidsgiver, omregnedeÅrsinntekt.årlig, skjønnsfastsatt?.årlig, gjelder, skatteopplysning)) + internal fun arbeidsgiverinntekt( + arbeidsgiver: String, + omregnedeÅrsinntekt: Inntekt, + skjønnsfastsatt: Inntekt?, + gjelder: Periode, + skatteopplysning: Boolean + ) = apply { + arbeidsgiverinntekter.add( + Arbeidsgiverinntekt( + arbeidsgiver, + omregnedeÅrsinntekt.årlig, + skjønnsfastsatt?.årlig, + gjelder, + skatteopplysning + ) + ) } private val tilkomneArbeidsgivere = mutableSetOf() internal fun tilkommetInntekt(arbeidsgiver: String) { tilkomneArbeidsgivere.add(arbeidsgiver) } - + private val build by lazy { Build() } internal fun buildGodkjenningsbehov() = build.godkjenningsbehov internal fun buildUtkastTilVedtak() = build.utkastTilVedtak - internal fun buildAvsluttedMedVedtak(vedtakFattet: LocalDateTime, historiskeHendelseIder: Set) = build.avsluttetMedVedtak(vedtakFattet, historiskeHendelseIder) + internal fun buildAvsluttedMedVedtak( + vedtakFattet: LocalDateTime, + historiskeHendelseIder: Set + ) = build.avsluttetMedVedtak(vedtakFattet, historiskeHendelseIder) private inner class Build { - private val skjønnsfastsatt = arbeidsgiverinntekter.any { it.skjønnsfastsatt != null }.also { - if (it) check(arbeidsgiverinntekter.all { arbeidsgiver -> arbeidsgiver.skjønnsfastsatt != null }) { "Enten må ingen eller alle arbeidsgivere i sykepengegrunnlaget være skjønnsmessig fastsatt." } - } - private val perioderMedSammeSkjæringstidspunkt = relevantePerioder.filter { it.skjæringstidspunkt == skjæringstidspunkt } + private val skjønnsfastsatt = + arbeidsgiverinntekter.any { it.skjønnsfastsatt != null }.also { + if (it) check(arbeidsgiverinntekter.all { arbeidsgiver -> arbeidsgiver.skjønnsfastsatt != null }) { "Enten må ingen eller alle arbeidsgivere i sykepengegrunnlaget være skjønnsmessig fastsatt." } + } + private val perioderMedSammeSkjæringstidspunkt = + relevantePerioder.filter { it.skjæringstidspunkt == skjæringstidspunkt } init { check(arbeidsgiverinntekter.isNotEmpty()) { "Forventet ikke at det ikke er noen arbeidsgivere i sykepengegrunnlaget." } if (tilkomneArbeidsgivere.isNotEmpty()) tags.add(Tag.TilkommenInntekt) - if (arbeidsgiverinntekter.size + tilkomneArbeidsgivere.size == 1) tags.add(Tag.EnArbeidsgiver) else tags.add(Tag.FlereArbeidsgivere) - if (arbeidsgiverinntekter.single { it.arbeidsgiver == arbeidsgiver }.skatteopplysning) tags.add(Tag.InntektFraAOrdningenLagtTilGrunn) - } - - private val sykepengegrunnlagsfakta: PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta = when { - tags.contains(Tag.InngangsvilkårFraInfotrygd) -> PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd(totalOmregnetÅrsinntekt).also { - check(Tag.FlereArbeidsgivere !in tags) { "Skal ikke være mulig med vilkårsgrunnlag fra Infotrygd og flere arbeidsgivere!" } - } - skjønnsfastsatt -> PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn( - omregnetÅrsinntekt = totalOmregnetÅrsinntekt, - sykepengegrunnlag = sykepengegrunnlag, - `6G`= seksG, - arbeidsgivere = arbeidsgiverinntekter.map { PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn.Arbeidsgiver( - arbeidsgiver = it.arbeidsgiver, - omregnetÅrsinntekt = it.omregnedeÅrsinntekt, - skjønnsfastsatt = it.skjønnsfastsatt!! - )} + if (arbeidsgiverinntekter.size + tilkomneArbeidsgivere.size == 1) tags.add(Tag.EnArbeidsgiver) else tags.add( + Tag.FlereArbeidsgivere ) - else -> PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel( - omregnetÅrsinntekt = totalOmregnetÅrsinntekt, - sykepengegrunnlag = sykepengegrunnlag, - `6G`= seksG, - arbeidsgivere = arbeidsgiverinntekter.map { PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel.Arbeidsgiver( - arbeidsgiver = it.arbeidsgiver, - omregnetÅrsinntekt = it.omregnedeÅrsinntekt - )} + if (arbeidsgiverinntekter.single { it.arbeidsgiver == arbeidsgiver }.skatteopplysning) tags.add( + Tag.InntektFraAOrdningenLagtTilGrunn ) } - private val beregningsgrunnlagForAvsluttetMedVedtak: Double = sykepengegrunnlagsfakta.beregningsgrunnlagForAvsluttetMedVedtak().also { - check(it == beregningsgrunnlag.årlig) { "Beregningsgrunnlag ${beregningsgrunnlag.årlig} er noe annet enn beregningsgrunnlag beregnet fra sykepengegrunnlagsfakta $it" } - } + private val sykepengegrunnlagsfakta: PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta = + when { + tags.contains(Tag.InngangsvilkårFraInfotrygd) -> PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd( + totalOmregnetÅrsinntekt + ).also { + check(Tag.FlereArbeidsgivere !in tags) { "Skal ikke være mulig med vilkårsgrunnlag fra Infotrygd og flere arbeidsgivere!" } + } + + skjønnsfastsatt -> PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn( + omregnetÅrsinntekt = totalOmregnetÅrsinntekt, + sykepengegrunnlag = sykepengegrunnlag, + `6G` = seksG, + arbeidsgivere = arbeidsgiverinntekter.map { + PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn.Arbeidsgiver( + arbeidsgiver = it.arbeidsgiver, + omregnetÅrsinntekt = it.omregnedeÅrsinntekt, + skjønnsfastsatt = it.skjønnsfastsatt!! + ) + } + ) - private val inntektForAvsluttetMedVedtak: Double = sykepengegrunnlagsfakta.inntektForAvsluttetMedVedtak().also { - check(it == beregningsgrunnlag.månedlig) { "Inntekt ${beregningsgrunnlag.månedlig} er noe annet enn inntekt beregnet fra sykepengegrunnlagsfakta $it" } - } + else -> PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel( + omregnetÅrsinntekt = totalOmregnetÅrsinntekt, + sykepengegrunnlag = sykepengegrunnlag, + `6G` = seksG, + arbeidsgivere = arbeidsgiverinntekter.map { + PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel.Arbeidsgiver( + arbeidsgiver = it.arbeidsgiver, + omregnetÅrsinntekt = it.omregnedeÅrsinntekt + ) + } + ) + } - private val omregnetÅrsinntektPerArbeidsgiverForAvsluttedMedVedtak = sykepengegrunnlagsfakta.omregnetÅrsinntektPerArbeidsgiverForAvsluttedMedVedtak() + private val beregningsgrunnlagForAvsluttetMedVedtak: Double = + sykepengegrunnlagsfakta.beregningsgrunnlagForAvsluttetMedVedtak().also { + check(it == beregningsgrunnlag.årlig) { "Beregningsgrunnlag ${beregningsgrunnlag.årlig} er noe annet enn beregningsgrunnlag beregnet fra sykepengegrunnlagsfakta $it" } + } + + private val inntektForAvsluttetMedVedtak: Double = + sykepengegrunnlagsfakta.inntektForAvsluttetMedVedtak().also { + check(it == beregningsgrunnlag.månedlig) { "Inntekt ${beregningsgrunnlag.månedlig} er noe annet enn inntekt beregnet fra sykepengegrunnlagsfakta $it" } + } + + private val omregnetÅrsinntektPerArbeidsgiverForAvsluttedMedVedtak = + sykepengegrunnlagsfakta.omregnetÅrsinntektPerArbeidsgiverForAvsluttedMedVedtak() - private val sykepengegrunnlagsbegrensningForAvsluttetMedVedtak = sykepengegrunnlagsfakta.sykepengegrunnlagsbegrensningForAvsluttedMedVedtak(tags) + private val sykepengegrunnlagsbegrensningForAvsluttetMedVedtak = + sykepengegrunnlagsfakta.sykepengegrunnlagsbegrensningForAvsluttedMedVedtak(tags) - private val periodetypeForGodkjenningsbehov = sykepengegrunnlagsfakta.periodetypeForGodkjenningsbehov(tags) + private val periodetypeForGodkjenningsbehov = + sykepengegrunnlagsfakta.periodetypeForGodkjenningsbehov(tags) - private val omregnedeÅrsinntekterForGodkjenningsbehov = sykepengegrunnlagsfakta.omregnedeÅrsinntekterForGodkjenningsbehov(arbeidsgiver) + private val omregnedeÅrsinntekterForGodkjenningsbehov = + sykepengegrunnlagsfakta.omregnedeÅrsinntekterForGodkjenningsbehov(arbeidsgiver) val godkjenningsbehov = mapOf( "periodeFom" to "${periode.start}", @@ -227,6 +304,7 @@ internal class UtkastTilVedtakBuilder( "omregnetÅrsinntektTotalt" to sykepengegrunnlagsfakta.omregnetÅrsinntekt, "fastsatt" to sykepengegrunnlagsfakta.fastsatt ) + is PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel -> mapOf( "omregnetÅrsinntektTotalt" to sykepengegrunnlagsfakta.omregnetÅrsinntekt, "sykepengegrunnlag" to sykepengegrunnlag, @@ -239,6 +317,7 @@ internal class UtkastTilVedtakBuilder( ) } ) + is PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn -> mapOf( "omregnetÅrsinntektTotalt" to sykepengegrunnlagsfakta.omregnetÅrsinntekt, "6G" to seksG, @@ -260,47 +339,57 @@ internal class UtkastTilVedtakBuilder( skjæringstidspunkt = skjæringstidspunkt, behandlingId = behandlingId, tags = tags.utgående, - `6G`= when (val fakta = sykepengegrunnlagsfakta) { + `6G` = when (val fakta = sykepengegrunnlagsfakta) { is PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd -> null is PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel -> fakta.`6G` is PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn -> fakta.`6G` } ) - fun avsluttetMedVedtak(vedtakFattet: LocalDateTime, historiskeHendelseIder: Set) = PersonObserver.AvsluttetMedVedtakEvent( - organisasjonsnummer = arbeidsgiver, - vedtaksperiodeId = vedtaksperiodeId, - behandlingId = behandlingId, - periode = periode, - // Til ettertanke: AvsluttetMedVedtak har alle hendelseId'er ever på vedtaksperioden, mens godkjenningsbehov/utkast_til_vedtak har kun behandlingens - hendelseIder = hendelseIder + historiskeHendelseIder, - skjæringstidspunkt = skjæringstidspunkt, - sykepengegrunnlag = sykepengegrunnlag, - // Til ettertanke: Denne mappes ut i JSON som "grunnlagForSykepengegrunnlag" - beregningsgrunnlag = beregningsgrunnlagForAvsluttetMedVedtak, - // Til ettertanke: Den var jo uventet, men er jo slik det har vært 🤷‍ - // Til ettertanke: Denne hentet data fra sykepengegrunnlagsfakta som har to desimaler - // Til ettertanke: Denne mappes ut i JSON som "grunnlagForSykepengegrunnlagPerArbeidsgiver" - omregnetÅrsinntektPerArbeidsgiver = omregnetÅrsinntektPerArbeidsgiverForAvsluttedMedVedtak, - inntekt = inntektForAvsluttetMedVedtak, // TODO: Til ettertanke: What? 👀 Denne håper jeg ingen bruker - utbetalingId = utbetalingId, - sykepengegrunnlagsbegrensning = sykepengegrunnlagsbegrensningForAvsluttetMedVedtak, - vedtakFattetTidspunkt = vedtakFattet, - // Til ettertanke: Akkurat i avsluttet i vedtak blir beløp i sykepengegrunnlagsfakta avrundet til to desimaler. - sykepengegrunnlagsfakta = when (val fakta = sykepengegrunnlagsfakta) { - is PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd -> fakta.copy(omregnetÅrsinntekt = fakta.omregnetÅrsinntekt.toDesimaler) - is PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel -> fakta.copy( - omregnetÅrsinntekt = fakta.omregnetÅrsinntekt.toDesimaler, - `6G` = fakta.`6G`.toDesimaler, - arbeidsgivere = fakta.arbeidsgivere.map { it.copy(omregnetÅrsinntekt = it.omregnetÅrsinntekt.toDesimaler) } - ) - is PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn -> fakta.copy( - omregnetÅrsinntekt = fakta.omregnetÅrsinntekt.toDesimaler, - `6G` = fakta.`6G`.toDesimaler, - arbeidsgivere = fakta.arbeidsgivere.map { it.copy(omregnetÅrsinntekt = it.omregnetÅrsinntekt.toDesimaler, skjønnsfastsatt = it.skjønnsfastsatt.toDesimaler) } - ) - } - ) + fun avsluttetMedVedtak(vedtakFattet: LocalDateTime, historiskeHendelseIder: Set) = + PersonObserver.AvsluttetMedVedtakEvent( + organisasjonsnummer = arbeidsgiver, + vedtaksperiodeId = vedtaksperiodeId, + behandlingId = behandlingId, + periode = periode, + // Til ettertanke: AvsluttetMedVedtak har alle hendelseId'er ever på vedtaksperioden, mens godkjenningsbehov/utkast_til_vedtak har kun behandlingens + hendelseIder = hendelseIder + historiskeHendelseIder, + skjæringstidspunkt = skjæringstidspunkt, + sykepengegrunnlag = sykepengegrunnlag, + // Til ettertanke: Denne mappes ut i JSON som "grunnlagForSykepengegrunnlag" + beregningsgrunnlag = beregningsgrunnlagForAvsluttetMedVedtak, + // Til ettertanke: Den var jo uventet, men er jo slik det har vært 🤷‍ + // Til ettertanke: Denne hentet data fra sykepengegrunnlagsfakta som har to desimaler + // Til ettertanke: Denne mappes ut i JSON som "grunnlagForSykepengegrunnlagPerArbeidsgiver" + omregnetÅrsinntektPerArbeidsgiver = omregnetÅrsinntektPerArbeidsgiverForAvsluttedMedVedtak, + inntekt = inntektForAvsluttetMedVedtak, // TODO: Til ettertanke: What? 👀 Denne håper jeg ingen bruker + utbetalingId = utbetalingId, + sykepengegrunnlagsbegrensning = sykepengegrunnlagsbegrensningForAvsluttetMedVedtak, + vedtakFattetTidspunkt = vedtakFattet, + // Til ettertanke: Akkurat i avsluttet i vedtak blir beløp i sykepengegrunnlagsfakta avrundet til to desimaler. + sykepengegrunnlagsfakta = when (val fakta = sykepengegrunnlagsfakta) { + is PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd -> fakta.copy( + omregnetÅrsinntekt = fakta.omregnetÅrsinntekt.toDesimaler + ) + + is PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel -> fakta.copy( + omregnetÅrsinntekt = fakta.omregnetÅrsinntekt.toDesimaler, + `6G` = fakta.`6G`.toDesimaler, + arbeidsgivere = fakta.arbeidsgivere.map { it.copy(omregnetÅrsinntekt = it.omregnetÅrsinntekt.toDesimaler) } + ) + + is PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn -> fakta.copy( + omregnetÅrsinntekt = fakta.omregnetÅrsinntekt.toDesimaler, + `6G` = fakta.`6G`.toDesimaler, + arbeidsgivere = fakta.arbeidsgivere.map { + it.copy( + omregnetÅrsinntekt = it.omregnetÅrsinntekt.toDesimaler, + skjønnsfastsatt = it.skjønnsfastsatt.toDesimaler + ) + } + ) + } + ) } private enum class Tag { @@ -327,29 +416,37 @@ internal class UtkastTilVedtakBuilder( } private companion object { - private val Double.toDesimaler get() = toBigDecimal().setScale(2, RoundingMode.HALF_UP).toDouble() + private val Double.toDesimaler + get() = toBigDecimal().setScale(2, RoundingMode.HALF_UP).toDouble() private val Set.utgående get() = map { it.name }.toSet() - private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.beregningsgrunnlagForAvsluttetMedVedtak() = when (val fakta = this) { - is PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn -> fakta.skjønnsfastsatt - else -> fakta.omregnetÅrsinntekt - } + private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.beregningsgrunnlagForAvsluttetMedVedtak() = + when (val fakta = this) { + is PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn -> fakta.skjønnsfastsatt + else -> fakta.omregnetÅrsinntekt + } - private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.inntektForAvsluttetMedVedtak() = beregningsgrunnlagForAvsluttetMedVedtak() / 12 + private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.inntektForAvsluttetMedVedtak() = + beregningsgrunnlagForAvsluttetMedVedtak() / 12 - private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.omregnetÅrsinntektPerArbeidsgiverForAvsluttedMedVedtak(): Map = when (val fakta = this) { - is PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd -> emptyMap() - is PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel -> fakta.arbeidsgivere.associate { it.arbeidsgiver to it.omregnetÅrsinntekt.toDesimaler } - is PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn -> fakta.arbeidsgivere.associate { it.arbeidsgiver to it.skjønnsfastsatt.toDesimaler } - } + private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.omregnetÅrsinntektPerArbeidsgiverForAvsluttedMedVedtak(): Map = + when (val fakta = this) { + is PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd -> emptyMap() + is PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel -> fakta.arbeidsgivere.associate { it.arbeidsgiver to it.omregnetÅrsinntekt.toDesimaler } + is PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn -> fakta.arbeidsgivere.associate { it.arbeidsgiver to it.skjønnsfastsatt.toDesimaler } + } - private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.sykepengegrunnlagsbegrensningForAvsluttedMedVedtak(tags: Set) = when { + private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.sykepengegrunnlagsbegrensningForAvsluttedMedVedtak( + tags: Set + ) = when { this is PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd -> "VURDERT_I_INFOTRYGD" tags.contains(Tag.`6GBegrenset`) -> "ER_6G_BEGRENSET" else -> "ER_IKKE_6G_BEGRENSET" } - private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.periodetypeForGodkjenningsbehov(tags: Set): String { + private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.periodetypeForGodkjenningsbehov( + tags: Set + ): String { val erForlengelse = tags.contains(Tag.Forlengelse) return when { this is PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd -> if (erForlengelse) "INFOTRYGDFORLENGELSE" else "OVERGANG_FRA_IT" @@ -357,10 +454,29 @@ internal class UtkastTilVedtakBuilder( } } - private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.omregnedeÅrsinntekterForGodkjenningsbehov(arbeidsgiver: String): List> = when (val fakta = this) { - is PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd -> listOf(mapOf("organisasjonsnummer" to arbeidsgiver, "beløp" to fakta.omregnetÅrsinntekt)) - is PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel -> fakta.arbeidsgivere.map { mapOf("organisasjonsnummer" to it.arbeidsgiver, "beløp" to it.omregnetÅrsinntekt ) } - is PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn -> fakta.arbeidsgivere.map { mapOf("organisasjonsnummer" to it.arbeidsgiver, "beløp" to it.omregnetÅrsinntekt ) } // Nei, ikke bug at det er omregnetÅrsinntekt + private fun PersonObserver.UtkastTilVedtakEvent.Sykepengegrunnlagsfakta.omregnedeÅrsinntekterForGodkjenningsbehov( + arbeidsgiver: String + ): List> = when (val fakta = this) { + is PersonObserver.UtkastTilVedtakEvent.FastsattIInfotrygd -> listOf( + mapOf( + "organisasjonsnummer" to arbeidsgiver, + "beløp" to fakta.omregnetÅrsinntekt + ) + ) + + is PersonObserver.UtkastTilVedtakEvent.FastsattEtterHovedregel -> fakta.arbeidsgivere.map { + mapOf( + "organisasjonsnummer" to it.arbeidsgiver, + "beløp" to it.omregnetÅrsinntekt + ) + } + + is PersonObserver.UtkastTilVedtakEvent.FastsattEtterSkjønn -> fakta.arbeidsgivere.map { + mapOf( + "organisasjonsnummer" to it.arbeidsgiver, + "beløp" to it.omregnetÅrsinntekt + ) + } // Nei, ikke bug at det er omregnetÅrsinntekt } } } 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 174417b268..9b03ef80d7 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 @@ -26,7 +26,8 @@ internal class Infotrygdhistorikk private constructor( internal fun gjenopprett(dto: InfotrygdhistorikkInnDto): Infotrygdhistorikk { return Infotrygdhistorikk( - _elementer = dto.elementer.map { InfotrygdhistorikkElement.gjenopprett(it) }.toMutableList() + _elementer = dto.elementer.map { InfotrygdhistorikkElement.gjenopprett(it) } + .toMutableList() ) } } @@ -76,7 +77,7 @@ internal class Infotrygdhistorikk private constructor( internal fun harEndretHistorikk(utbetaling: Utbetaling): Boolean { if (!harHistorikk()) return false - val sisteElementSomFantesFørUtbetaling = _elementer.firstOrNull{ + val sisteElementSomFantesFørUtbetaling = _elementer.firstOrNull { it.erEldreEnn(utbetaling) } ?: return siste.erNyopprettet() return siste.erEndretUtbetaling(sisteElementSomFantesFørUtbetaling) 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 585aa3a7b1..aa9feca73d 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 @@ -30,7 +30,8 @@ class InfotrygdhistorikkElement private constructor( private set private val inntekter = Inntektsopplysning.sorter(inntekter) val perioder = Infotrygdperiode.sorter(perioder) - private val kilde = SykdomshistorikkHendelse.Hendelseskilde("Infotrygdhistorikk", id, tidsstempel) + private val kilde = + SykdomshistorikkHendelse.Hendelseskilde("Infotrygdhistorikk", id, tidsstempel) init { if (!erTom()) requireNotNull(hendelseId) { "HendelseID må være satt når elementet inneholder data" } @@ -60,7 +61,11 @@ class InfotrygdhistorikkElement private constructor( id = dto.id, tidsstempel = dto.tidsstempel, hendelseId = dto.hendelseId, - perioder = dto.arbeidsgiverutbetalingsperioder.map { ArbeidsgiverUtbetalingsperiode.gjenopprett(it) } + + perioder = dto.arbeidsgiverutbetalingsperioder.map { + ArbeidsgiverUtbetalingsperiode.gjenopprett( + it + ) + } + dto.personutbetalingsperioder.map { PersonUtbetalingsperiode.gjenopprett(it) } + dto.ferieperioder.map { Friperiode.gjenopprett(it) }, inntekter = dto.inntekter.map { Inntektsopplysning.gjenopprett(it) }, @@ -70,7 +75,8 @@ class InfotrygdhistorikkElement private constructor( } } - internal fun betaltePerioder(orgnummer: String? = null): List = perioder.utbetalingsperioder(orgnummer) + internal fun betaltePerioder(orgnummer: String? = null): List = + perioder.utbetalingsperioder(orgnummer) internal fun sykdomstidslinje(orgnummer: String): Sykdomstidslinje { return perioder @@ -89,14 +95,18 @@ class InfotrygdhistorikkElement private constructor( private fun erTom() = perioder.isEmpty() && inntekter.isEmpty() && arbeidskategorikoder.isEmpty() - internal fun valider(aktivitetslogg: IAktivitetslogg, periode: Periode, organisasjonsnummer: String): Boolean { + internal fun valider( + aktivitetslogg: IAktivitetslogg, + periode: Periode, + organisasjonsnummer: String + ): Boolean { validerBetaltRettFør(periode, aktivitetslogg) aktivitetslogg.info("Sjekker utbetalte perioder") perioder.forEach { it.valider(aktivitetslogg, organisasjonsnummer, periode) } return !aktivitetslogg.harFunksjonelleFeilEllerVerre() } - private fun validerBetaltRettFør(periode: Periode, aktivitetslogg: IAktivitetslogg){ + private fun validerBetaltRettFør(periode: Periode, aktivitetslogg: IAktivitetslogg) { if (!harBetaltRettFør(periode)) return aktivitetslogg.funksjonellFeil(RV_IT_14) } @@ -114,8 +124,12 @@ class InfotrygdhistorikkElement private constructor( return this.arbeidskategorikoder == other.arbeidskategorikoder } - private fun harLikePerioder(other: InfotrygdhistorikkElement) = likhet(this.perioder, other.perioder, Infotrygdperiode::funksjoneltLik) - private fun harLikeInntekter(other: InfotrygdhistorikkElement) = likhet(this.inntekter, other.inntekter, Inntektsopplysning::funksjoneltLik) + private fun harLikePerioder(other: InfotrygdhistorikkElement) = + likhet(this.perioder, other.perioder, Infotrygdperiode::funksjoneltLik) + + private fun harLikeInntekter(other: InfotrygdhistorikkElement) = + likhet(this.inntekter, other.inntekter, Inntektsopplysning::funksjoneltLik) + private fun likhet(one: List, two: List, comparator: (R, R) -> Boolean): Boolean { if (one.size != two.size) return false return one.zip(two, comparator).all { it } @@ -142,17 +156,21 @@ class InfotrygdhistorikkElement private constructor( internal fun erNyopprettet() = nyOpprettet - internal fun harUtbetaltI(periode: Periode) = betaltePerioder().any { it.overlapperMed(periode) } + internal fun harUtbetaltI(periode: Periode) = + betaltePerioder().any { it.overlapperMed(periode) } - internal fun harFerieI(periode: Periode) = perioder.filterIsInstance().any { it.overlapperMed(periode) } + internal fun harFerieI(periode: Periode) = + perioder.filterIsInstance().any { it.overlapperMed(periode) } internal fun dto() = InfotrygdhistorikkelementUtDto( id = this.id, tidsstempel = this.tidsstempel, hendelseId = this.hendelseId, ferieperioder = this.perioder.filterIsInstance().map { it.dto() }, - arbeidsgiverutbetalingsperioder = this.perioder.filterIsInstance().map { it.dto() }, - personutbetalingsperioder = this.perioder.filterIsInstance().map { it.dto() }, + arbeidsgiverutbetalingsperioder = this.perioder.filterIsInstance() + .map { it.dto() }, + personutbetalingsperioder = this.perioder.filterIsInstance() + .map { it.dto() }, inntekter = this.inntekter.map { it.dto() }, arbeidskategorikoder = this.arbeidskategorikoder, oppdatert = this.oppdatert diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Infotrygdperiode.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Infotrygdperiode.kt index 5f0f77c2fa..bb9d56e8c0 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Infotrygdperiode.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/infotrygdhistorikk/Infotrygdperiode.kt @@ -16,7 +16,11 @@ sealed class Infotrygdperiode(fom: LocalDate, tom: LocalDate) { internal open fun sykdomstidslinje(kilde: Hendelseskilde): Sykdomstidslinje = Sykdomstidslinje() internal open fun utbetalingstidslinje(): Utbetalingstidslinje = Utbetalingstidslinje() - internal fun valider(aktivitetslogg: IAktivitetslogg, organisasjonsnummer: String, periode: Periode) { + internal fun valider( + aktivitetslogg: IAktivitetslogg, + organisasjonsnummer: String, + periode: Periode + ) { validerHarBetaltTidligere(periode, aktivitetslogg) validerOverlapp(aktivitetslogg, periode) validerNyereOpplysninger(aktivitetslogg, organisasjonsnummer, periode) @@ -35,11 +39,19 @@ sealed class Infotrygdperiode(fom: LocalDate, tom: LocalDate) { private fun validerOverlapp(aktivitetslogg: IAktivitetslogg, periode: Periode) { if (!this.periode.overlapperMed(periode)) return - aktivitetslogg.info("Utbetaling i Infotrygd %s til %s overlapper med vedtaksperioden", this.periode.start, this.periode.endInclusive) + aktivitetslogg.info( + "Utbetaling i Infotrygd %s til %s overlapper med vedtaksperioden", + this.periode.start, + this.periode.endInclusive + ) aktivitetslogg.varsel(Varselkode.RV_IT_3) } - private fun validerNyereOpplysninger(aktivitetslogg: IAktivitetslogg, organisasjonsnummer: String, periode: Periode) { + private fun validerNyereOpplysninger( + aktivitetslogg: IAktivitetslogg, + organisasjonsnummer: String, + periode: Periode + ) { if (!gjelder(organisasjonsnummer)) return if (this.periode.start <= periode.endInclusive) return aktivitetslogg.varsel(Varselkode.RV_IT_1) @@ -56,12 +68,18 @@ sealed class Infotrygdperiode(fom: LocalDate, tom: LocalDate) { internal companion object { internal fun sorter(perioder: List) = - perioder.sortedWith(compareBy( { it.periode.start }, { it.periode.endInclusive }, { it::class.simpleName })) + perioder.sortedWith( + compareBy( + { it.periode.start }, + { it.periode.endInclusive }, + { it::class.simpleName }) + ) - internal fun List.utbetalingsperioder(organisasjonsnummer: String? = null) = this - .filterIsInstance() - .filter { organisasjonsnummer == null || it.gjelder(organisasjonsnummer) } - .map { it.periode } + internal fun List.utbetalingsperioder(organisasjonsnummer: String? = null) = + this + .filterIsInstance() + .filter { organisasjonsnummer == null || it.gjelder(organisasjonsnummer) } + .map { it.periode } internal fun List.harBetaltRettFør(other: Periode) = this .any { 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 01344c992b..7efd3b53ff 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 @@ -32,7 +32,13 @@ class Inntektsopplysning private constructor( internal companion object { internal fun sorter(inntekter: List) = - inntekter.sortedWith(compareBy({ it.sykepengerFom }, { it.inntekt }, { it.orgnummer }, { it.hashCode() })) + inntekter.sortedWith( + compareBy( + { it.sykepengerFom }, + { it.inntekt }, + { it.orgnummer }, + { it.hashCode() }) + ) internal fun gjenopprett(dto: InfotrygdInntektsopplysningInnDto): Inntektsopplysning { return Inntektsopplysning( 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 aa9dde7d16..fd794e8c32 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 @@ -26,6 +26,7 @@ sealed class Utbetalingsperiode( // inntektbeløpet i Infotrygd-utbetalingene er gradert; justerer derfor "opp igjen" fun inntekt(inntekt: Inntekt, grad: Prosentdel) = Inntekt.fraGradert(inntekt, grad) } + override fun sykdomstidslinje(kilde: SykdomshistorikkHendelse.Hendelseskilde): Sykdomstidslinje { return Sykdomstidslinje.sykedager(periode.start, periode.endInclusive, grad, kilde) } @@ -37,7 +38,10 @@ sealed class Utbetalingsperiode( private fun nyDag(builder: Utbetalingstidslinje.Builder, dato: LocalDate) { val økonomi = Økonomi.sykdomsgrad(grad) - if (dato.erHelg()) return builder.addHelg(dato, økonomi.inntekt(INGEN, `6G` = INGEN, refusjonsbeløp = INGEN)) + if (dato.erHelg()) return builder.addHelg( + dato, + økonomi.inntekt(INGEN, `6G` = INGEN, refusjonsbeløp = INGEN) + ) builder.addNAVdag(dato, økonomi.inntekt(inntekt, `6G` = INGEN, refusjonsbeløp = INGEN)) } @@ -50,7 +54,13 @@ sealed class Utbetalingsperiode( } } -class ArbeidsgiverUtbetalingsperiode(orgnr: String, fom: LocalDate, tom: LocalDate, grad: Prosentdel, inntekt: Inntekt) : +class ArbeidsgiverUtbetalingsperiode( + orgnr: String, + fom: LocalDate, + tom: LocalDate, + grad: Prosentdel, + inntekt: Inntekt +) : Utbetalingsperiode(orgnr, fom, tom, grad, inntekt) { internal fun dto() = InfotrygdArbeidsgiverutbetalingsperiodeUtDto( @@ -74,7 +84,13 @@ class ArbeidsgiverUtbetalingsperiode(orgnr: String, fom: LocalDate, tom: LocalDa } } -class PersonUtbetalingsperiode(orgnr: String, fom: LocalDate, tom: LocalDate, grad: Prosentdel, inntekt: Inntekt) : +class PersonUtbetalingsperiode( + orgnr: String, + fom: LocalDate, + tom: LocalDate, + grad: Prosentdel, + inntekt: Inntekt +) : Utbetalingsperiode(orgnr, fom, tom, grad, inntekt) { internal fun dto() = InfotrygdPersonutbetalingsperiodeUtDto( 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 d9f7044395..3b51ce3db3 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 @@ -39,6 +39,7 @@ data class ArbeidsgiverInntektsopplysning( private fun fastsattÅrsinntekt(acc: Inntekt, skjæringstidspunkt: LocalDate): Inntekt { return acc + beregningsgrunnlag(skjæringstidspunkt) } + private fun omregnetÅrsinntekt(acc: Inntekt, skjæringstidspunkt: LocalDate): Inntekt { return acc + omregnetÅrsinntekt(skjæringstidspunkt) } @@ -61,14 +62,18 @@ data class ArbeidsgiverInntektsopplysning( internal fun gjelder(organisasjonsnummer: String) = organisasjonsnummer == orgnummer private fun overstyr(overstyringer: List): ArbeidsgiverInntektsopplysning { - val overstyring = overstyringer.singleOrNull { it.orgnummer == this.orgnummer } ?: return this + val overstyring = + overstyringer.singleOrNull { it.orgnummer == this.orgnummer } ?: return this return overstyring.overstyrer(this) } private fun medBeløpstidslinje(kilde: Kilde): NyInntektUnderveis { - return NyInntektUnderveis(orgnummer = this.orgnummer, beløpstidslinje = Beløpstidslinje(gjelder.map { - Beløpsdag(it, inntektsopplysning.beløp, kilde) - })) + return NyInntektUnderveis( + orgnummer = this.orgnummer, + beløpstidslinje = Beløpstidslinje(gjelder.map { + Beløpsdag(it, inntektsopplysning.beløp, kilde) + }) + ) } private fun overstyrer(gammel: ArbeidsgiverInntektsopplysning): ArbeidsgiverInntektsopplysning { @@ -76,16 +81,34 @@ data class ArbeidsgiverInntektsopplysning( is Saksbehandler -> this.gjelder else -> gammel.gjelder } - return ArbeidsgiverInntektsopplysning(orgnummer = this.orgnummer, gjelder = nyGjelder, inntektsopplysning = gammel.inntektsopplysning.overstyresAv(this.inntektsopplysning), refusjonsopplysninger = gammel.refusjonsopplysninger.merge(this.refusjonsopplysninger)) + return ArbeidsgiverInntektsopplysning( + orgnummer = this.orgnummer, + gjelder = nyGjelder, + inntektsopplysning = gammel.inntektsopplysning.overstyresAv(this.inntektsopplysning), + refusjonsopplysninger = gammel.refusjonsopplysninger.merge(this.refusjonsopplysninger) + ) } - private fun rullTilbake() = ArbeidsgiverInntektsopplysning(this.orgnummer, gjelder = this.gjelder, this.inntektsopplysning.omregnetÅrsinntekt(), refusjonsopplysninger) + private fun rullTilbake() = ArbeidsgiverInntektsopplysning( + this.orgnummer, + gjelder = this.gjelder, + this.inntektsopplysning.omregnetÅrsinntekt(), + refusjonsopplysninger + ) private fun subsummer(subsumsjonslogg: Subsumsjonslogg, opptjening: Opptjening?) { - inntektsopplysning.subsumerSykepengegrunnlag(subsumsjonslogg, orgnummer, opptjening?.startdatoFor(orgnummer)) + inntektsopplysning.subsumerSykepengegrunnlag( + subsumsjonslogg, + orgnummer, + opptjening?.startdatoFor(orgnummer) + ) } - private fun deaktiver(forklaring: String, oppfylt: Boolean, subsumsjonslogg: Subsumsjonslogg): ArbeidsgiverInntektsopplysning { + private fun deaktiver( + forklaring: String, + oppfylt: Boolean, + subsumsjonslogg: Subsumsjonslogg + ): ArbeidsgiverInntektsopplysning { inntektsopplysning.subsumerArbeidsforhold(subsumsjonslogg, orgnummer, forklaring, oppfylt) return this } @@ -101,34 +124,73 @@ data class ArbeidsgiverInntektsopplysning( person: Person, saksbehandleroverstyring: OverstyrArbeidsgiveropplysninger ) { - inntektsopplysning.arbeidsgiveropplysningerKorrigert(person, orgnummer, saksbehandleroverstyring) + inntektsopplysning.arbeidsgiveropplysningerKorrigert( + person, + orgnummer, + saksbehandleroverstyring + ) } internal companion object { internal fun List.faktaavklarteInntekter() = this - .map { VilkårsprøvdSkjæringstidspunkt.FaktaavklartInntekt( - organisasjonsnummer = it.orgnummer, - fastsattÅrsinntekt = it.inntektsopplysning.fastsattÅrsinntekt(), - gjelder = it.gjelder, - refusjonsopplysninger = it.refusjonsopplysninger - ) } - internal fun List.validerSkjønnsmessigAltEllerIntet(skjæringstidspunkt: LocalDate) = + .map { + VilkårsprøvdSkjæringstidspunkt.FaktaavklartInntekt( + organisasjonsnummer = it.orgnummer, + fastsattÅrsinntekt = it.inntektsopplysning.fastsattÅrsinntekt(), + gjelder = it.gjelder, + refusjonsopplysninger = it.refusjonsopplysninger + ) + } + + internal fun List.validerSkjønnsmessigAltEllerIntet( + skjæringstidspunkt: LocalDate + ) = omregnetÅrsinntekter(skjæringstidspunkt, this).validerSkjønnsmessigAltEllerIntet() - internal fun List.finn(orgnummer: String) = firstOrNull { it.gjelder(orgnummer) } + internal fun List.finn(orgnummer: String) = + firstOrNull { it.gjelder(orgnummer) } - internal fun List.deaktiver(deaktiverte: List, orgnummer: String, forklaring: String, subsumsjonslogg: Subsumsjonslogg) = + internal fun List.deaktiver( + deaktiverte: List, + orgnummer: String, + forklaring: String, + subsumsjonslogg: Subsumsjonslogg + ) = this.fjernInntekt(deaktiverte, orgnummer, forklaring, true, subsumsjonslogg) - internal fun List.aktiver(aktiveres: List, orgnummer: String, forklaring: String, subsumsjonslogg: Subsumsjonslogg): Pair, List> { - val (deaktiverte, aktiverte) = this.fjernInntekt(aktiveres, orgnummer, forklaring, false, subsumsjonslogg) + internal fun List.aktiver( + aktiveres: List, + orgnummer: String, + forklaring: String, + subsumsjonslogg: Subsumsjonslogg + ): Pair, List> { + val (deaktiverte, aktiverte) = this.fjernInntekt( + aktiveres, + orgnummer, + forklaring, + false, + subsumsjonslogg + ) // Om inntektene i sykepengegrunnlaget var skjønnsmessig fastsatt før aktivering sikrer vi at alle "rulles tilbake" slik at vi ikke lager et sykepengegrunnlag med mix av SkjønnsmessigFastsatt & andre inntektstyper. - return deaktiverte to aktiverte.map { ArbeidsgiverInntektsopplysning(it.orgnummer, it.gjelder, it.inntektsopplysning.omregnetÅrsinntekt(), it.refusjonsopplysninger) } + return deaktiverte to aktiverte.map { + ArbeidsgiverInntektsopplysning( + it.orgnummer, + it.gjelder, + it.inntektsopplysning.omregnetÅrsinntekt(), + it.refusjonsopplysninger + ) + } } // flytter inntekt for *orgnummer* fra *this* til *deaktiverte* // aktive.deaktiver(deaktiverte, orgnummer) er direkte motsetning til deaktiverte.deaktiver(aktive, orgnummer) - private fun List.fjernInntekt(deaktiverte: List, orgnummer: String, forklaring: String, oppfylt: Boolean, subsumsjonslogg: Subsumsjonslogg): Pair, List> { + private fun List.fjernInntekt( + deaktiverte: List, + orgnummer: String, + forklaring: String, + oppfylt: Boolean, + subsumsjonslogg: Subsumsjonslogg + ): Pair, List> { val inntektsopplysning = checkNotNull(this.singleOrNull { it.orgnummer == orgnummer }) { "Kan ikke overstyre arbeidsforhold for en arbeidsgiver vi ikke kjenner til" }.deaktiver(forklaring, oppfylt, subsumsjonslogg) @@ -159,27 +221,51 @@ data class ArbeidsgiverInntektsopplysning( kilde: Kilde ): List { val somBeløpstidslinjer = this.mapNotNull { inntekt -> - if (!nyInntektUnderveis.erRelevantForOverstyring(skjæringstidspunkt, inntekt.gjelder)) null + if (!nyInntektUnderveis.erRelevantForOverstyring( + skjæringstidspunkt, + inntekt.gjelder + )) null else inntekt.medBeløpstidslinje(kilde) } return nyInntektUnderveis.merge(somBeløpstidslinjer) } - private fun erOmregnetÅrsinntektEndret(skjæringstidspunkt: LocalDate, før: List, etter: List): Boolean { - return Inntektsopplysning.erOmregnetÅrsinntektEndret(omregnetÅrsinntekter(skjæringstidspunkt, før), omregnetÅrsinntekter(skjæringstidspunkt, etter)) + private fun erOmregnetÅrsinntektEndret( + skjæringstidspunkt: LocalDate, + før: List, + etter: List + ): Boolean { + return Inntektsopplysning.erOmregnetÅrsinntektEndret( + omregnetÅrsinntekter( + skjæringstidspunkt, + før + ), omregnetÅrsinntekter(skjæringstidspunkt, etter) + ) } - private fun omregnetÅrsinntekter(skjæringstidspunkt: LocalDate, opplysninger: List): List { - return opplysninger.filter { it.gjelderPåSkjæringstidspunktet(skjæringstidspunkt) }.map { it.inntektsopplysning } + private fun omregnetÅrsinntekter( + skjæringstidspunkt: LocalDate, + opplysninger: List + ): List { + return opplysninger.filter { it.gjelderPåSkjæringstidspunktet(skjæringstidspunkt) } + .map { it.inntektsopplysning } } - internal fun List.sjekkForNyArbeidsgiver(aktivitetslogg: IAktivitetslogg, opptjening: Opptjening, orgnummer: String) { - val arbeidsforholdAktivePåSkjæringstidspunktet = singleOrNull { opptjening.ansattVedSkjæringstidspunkt(it.orgnummer) } ?: return + internal fun List.sjekkForNyArbeidsgiver( + aktivitetslogg: IAktivitetslogg, + opptjening: Opptjening, + orgnummer: String + ) { + val arbeidsforholdAktivePåSkjæringstidspunktet = + singleOrNull { opptjening.ansattVedSkjæringstidspunkt(it.orgnummer) } ?: return if (arbeidsforholdAktivePåSkjæringstidspunktet.orgnummer == orgnummer) return aktivitetslogg.varsel(Varselkode.RV_VV_8) } - internal fun List.måHaRegistrertOpptjeningForArbeidsgivere(aktivitetslogg: IAktivitetslogg, opptjening: Opptjening) { + internal fun List.måHaRegistrertOpptjeningForArbeidsgivere( + aktivitetslogg: IAktivitetslogg, + opptjening: Opptjening + ) { if (none { opptjening.startdatoFor(it.orgnummer) == null }) return aktivitetslogg.varsel(Varselkode.RV_VV_1) } @@ -189,20 +275,40 @@ data class ArbeidsgiverInntektsopplysning( } internal fun List.refusjonsopplysninger(organisasjonsnummer: String) = - singleOrNull{it.gjelder(organisasjonsnummer)}?.refusjonsopplysninger ?: Refusjonsopplysninger() + singleOrNull { it.gjelder(organisasjonsnummer) }?.refusjonsopplysninger + ?: Refusjonsopplysninger() - internal fun List.forespurtInntektOgRefusjonsopplysninger(skjæringstidspunkt: LocalDate, organisasjonsnummer: String, periode: Periode): Triple? { + internal fun List.forespurtInntektOgRefusjonsopplysninger( + skjæringstidspunkt: LocalDate, + organisasjonsnummer: String, + periode: Periode + ): Triple? { val fastsattOpplysning = singleOrNull { it.gjelder(organisasjonsnummer) } ?: return null - val inntekt = PersonObserver.FastsattInntekt(fastsattOpplysning.fastsattÅrsinntekt(skjæringstidspunkt)) - val forslag = inntektforslag(skjæringstidspunkt, fastsattOpplysning) - val refusjon = PersonObserver.Refusjon(forslag = fastsattOpplysning.refusjonsopplysninger.overlappendeEllerSenereRefusjonsopplysninger(periode) - .map { PersonObserver.Refusjon.Refusjonsforslag(it.fom, it.tom, it.beløp.månedlig) } + val inntekt = PersonObserver.FastsattInntekt( + fastsattOpplysning.fastsattÅrsinntekt(skjæringstidspunkt) ) + val forslag = inntektforslag(skjæringstidspunkt, fastsattOpplysning) + val refusjon = + PersonObserver.Refusjon(forslag = fastsattOpplysning.refusjonsopplysninger.overlappendeEllerSenereRefusjonsopplysninger( + periode + ) + .map { + PersonObserver.Refusjon.Refusjonsforslag( + it.fom, + it.tom, + it.beløp.månedlig + ) + } + ) return Triple(inntekt, refusjon, forslag) } - private fun inntektforslag(skjæringstidspunkt: LocalDate, arbeidsgiverInntektsopplysning: ArbeidsgiverInntektsopplysning): PersonObserver.Inntektsdata? { - val originalInntektsopplysning = arbeidsgiverInntektsopplysning.inntektsopplysning.omregnetÅrsinntekt() + private fun inntektforslag( + skjæringstidspunkt: LocalDate, + arbeidsgiverInntektsopplysning: ArbeidsgiverInntektsopplysning + ): PersonObserver.Inntektsdata? { + val originalInntektsopplysning = + arbeidsgiverInntektsopplysning.inntektsopplysning.omregnetÅrsinntekt() val type = when (originalInntektsopplysning) { is no.nav.helse.person.inntekt.Inntektsmelding -> PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING is Saksbehandler -> PersonObserver.Inntektsopplysningstype.SAKSBEHANDLER @@ -211,40 +317,52 @@ data class ArbeidsgiverInntektsopplysning( return PersonObserver.Inntektsdata( skjæringstidspunkt = skjæringstidspunkt, kilde = type, - beløp = originalInntektsopplysning.fastsattÅrsinntekt().månedlig) + beløp = originalInntektsopplysning.fastsattÅrsinntekt().månedlig + ) } private fun List.finnEndredeInntektsopplysninger(forrige: List): List { val forrigeInntektsopplysninger = forrige.map { it.inntektsopplysning } return filterNot { it.inntektsopplysning in forrigeInntektsopplysninger } } - internal fun List.subsummer(subsumsjonslogg: Subsumsjonslogg, opptjening: Opptjening? = null, forrige: List) { + + internal fun List.subsummer( + subsumsjonslogg: Subsumsjonslogg, + opptjening: Opptjening? = null, + forrige: List + ) { val endredeInntektsopplysninger = finnEndredeInntektsopplysninger(forrige) if (endredeInntektsopplysninger.isEmpty()) return endredeInntektsopplysninger.forEach { it.subsummer(subsumsjonslogg, opptjening) } } - internal fun List.berik(builder: UtkastTilVedtakBuilder) = this - .forEach { arbeidsgiver -> - builder.arbeidsgiverinntekt( - arbeidsgiver = arbeidsgiver.orgnummer, - omregnedeÅrsinntekt = arbeidsgiver.inntektsopplysning.omregnetÅrsinntekt().fastsattÅrsinntekt(), - skjønnsfastsatt = if (arbeidsgiver.inntektsopplysning is SkjønnsmessigFastsatt) arbeidsgiver.inntektsopplysning.fastsattÅrsinntekt() else null, - gjelder = arbeidsgiver.gjelder, - skatteopplysning = arbeidsgiver.inntektsopplysning.erSkatteopplysning() - ) - } + internal fun List.berik(builder: UtkastTilVedtakBuilder) = + this + .forEach { arbeidsgiver -> + builder.arbeidsgiverinntekt( + arbeidsgiver = arbeidsgiver.orgnummer, + omregnedeÅrsinntekt = arbeidsgiver.inntektsopplysning.omregnetÅrsinntekt() + .fastsattÅrsinntekt(), + skjønnsfastsatt = if (arbeidsgiver.inntektsopplysning is SkjønnsmessigFastsatt) arbeidsgiver.inntektsopplysning.fastsattÅrsinntekt() else null, + gjelder = arbeidsgiver.gjelder, + skatteopplysning = arbeidsgiver.inntektsopplysning.erSkatteopplysning() + ) + } internal fun List.harInntekt(organisasjonsnummer: String) = singleOrNull { it.orgnummer == organisasjonsnummer } != null - internal fun List.ingenRefusjonsopplysninger(organisasjonsnummer: String): Boolean { - val refusjonsopplysninger = singleOrNull { it.orgnummer == organisasjonsnummer }?.refusjonsopplysninger ?: Refusjonsopplysninger() + internal fun List.ingenRefusjonsopplysninger( + organisasjonsnummer: String + ): Boolean { + val refusjonsopplysninger = + singleOrNull { it.orgnummer == organisasjonsnummer }?.refusjonsopplysninger + ?: Refusjonsopplysninger() return refusjonsopplysninger.erTom } internal fun List.fastsattÅrsinntekt(skjæringstidspunkt: LocalDate) = - fold(INGEN) { acc, item -> item.fastsattÅrsinntekt(acc, skjæringstidspunkt)} + fold(INGEN) { acc, item -> item.fastsattÅrsinntekt(acc, skjæringstidspunkt) } internal fun List.totalOmregnetÅrsinntekt(skjæringstidspunkt: LocalDate) = fold(INGEN) { acc, item -> item.omregnetÅrsinntekt(acc, skjæringstidspunkt) } @@ -256,14 +374,20 @@ data class ArbeidsgiverInntektsopplysning( val gammel = other.singleOrNull { it.orgnummer == ny.orgnummer } when { gammel == null -> ny.gjelder.start - ny.inntektsopplysning != gammel.inntektsopplysning -> minOf(ny.gjelder.start, gammel.gjelder.start) + ny.inntektsopplysning != gammel.inntektsopplysning -> minOf( + ny.gjelder.start, + gammel.gjelder.start + ) + else -> ny.refusjonsopplysninger.finnFørsteDatoForEndring(gammel.refusjonsopplysninger) } } return endringsDatoer.minOrNull() } - internal fun List.harGjenbrukbareOpplysninger(organisasjonsnummer: String) = + internal fun List.harGjenbrukbareOpplysninger( + organisasjonsnummer: String + ) = singleOrNull { it.orgnummer == organisasjonsnummer }?.inntektsopplysning?.gjenbrukbarInntekt() != null internal fun List.lagreTidsnæreInntekter( @@ -284,11 +408,17 @@ data class ArbeidsgiverInntektsopplysning( } } - internal fun gjenopprett(dto: ArbeidsgiverInntektsopplysningInnDto, inntekter: MutableMap): ArbeidsgiverInntektsopplysning { + internal fun gjenopprett( + dto: ArbeidsgiverInntektsopplysningInnDto, + inntekter: MutableMap + ): ArbeidsgiverInntektsopplysning { return ArbeidsgiverInntektsopplysning( orgnummer = dto.orgnummer, gjelder = Periode.gjenopprett(dto.gjelder), - inntektsopplysning = Inntektsopplysning.gjenopprett(dto.inntektsopplysning, inntekter), + inntektsopplysning = Inntektsopplysning.gjenopprett( + dto.inntektsopplysning, + inntekter + ), refusjonsopplysninger = Refusjonsopplysninger.gjenopprett(dto.refusjonsopplysninger) ) } 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 44d235cd84..627e9e6bbe 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 @@ -21,7 +21,11 @@ internal data class ArbeidsgiverInntektsopplysningForSammenligningsgrunnlag( internal fun gjenopprett(dto: ArbeidsgiverInntektsopplysningForSammenligningsgrunnlagDto): ArbeidsgiverInntektsopplysningForSammenligningsgrunnlag { return ArbeidsgiverInntektsopplysningForSammenligningsgrunnlag( orgnummer = dto.orgnummer, - inntektsopplysninger = dto.inntektsopplysninger.map { Skatteopplysning.gjenopprett(it) } + inntektsopplysninger = dto.inntektsopplysninger.map { + Skatteopplysning.gjenopprett( + it + ) + } ) } } @@ -30,4 +34,4 @@ internal data class ArbeidsgiverInntektsopplysningForSammenligningsgrunnlag( orgnummer = this.orgnummer, inntektsopplysninger = this.inntektsopplysninger.map { it.dto() } ) -} \ 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 e7d6fd3667..4a560d302c 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 @@ -13,7 +13,11 @@ internal class IkkeRapportert( dato: LocalDate, tidsstempel: LocalDateTime ) : AvklarbarSykepengegrunnlag(id, hendelseId, dato, Inntekt.INGEN, tidsstempel) { - internal constructor(dato: LocalDate, hendelseId: UUID, tidsstempel: LocalDateTime) : this(UUID.randomUUID(), hendelseId, dato, tidsstempel) + internal constructor( + dato: LocalDate, + hendelseId: UUID, + tidsstempel: LocalDateTime + ) : this(UUID.randomUUID(), hendelseId, dato, tidsstempel) override fun kanOverstyresAv(ny: Inntektsopplysning) = true @@ -37,4 +41,4 @@ internal class IkkeRapportert( tidsstempel = dto.tidsstempel ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsgrunnlag.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsgrunnlag.kt index c1a82f8f85..f9b47f04c1 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsgrunnlag.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/Inntektsgrunnlag.kt @@ -73,15 +73,21 @@ internal class Inntektsgrunnlag private constructor( } private val `6G`: Inntekt = `6G` ?: Grunnbeløp.`6G`.beløp(skjæringstidspunkt, LocalDate.now()) + // sum av alle inntekter foruten skjønnsmessig fastsatt beløp; da brukes inntekten den fastsatte - private val omregnetÅrsinntekt = arbeidsgiverInntektsopplysninger.totalOmregnetÅrsinntekt(skjæringstidspunkt) + private val omregnetÅrsinntekt = + arbeidsgiverInntektsopplysninger.totalOmregnetÅrsinntekt(skjæringstidspunkt) + // summen av alle inntekter - private val beregningsgrunnlag = arbeidsgiverInntektsopplysninger.fastsattÅrsinntekt(skjæringstidspunkt) + private val beregningsgrunnlag = + arbeidsgiverInntektsopplysninger.fastsattÅrsinntekt(skjæringstidspunkt) private val sykepengegrunnlag = beregningsgrunnlag.coerceAtMost(this.`6G`) - private val begrensning = if (vurdertInfotrygd) VURDERT_I_INFOTRYGD else if (beregningsgrunnlag > this.`6G`) ER_6G_BEGRENSET else ER_IKKE_6G_BEGRENSET + private val begrensning = + if (vurdertInfotrygd) VURDERT_I_INFOTRYGD else if (beregningsgrunnlag > this.`6G`) ER_6G_BEGRENSET else ER_IKKE_6G_BEGRENSET private val forhøyetInntektskrav = alder.forhøyetInntektskrav(skjæringstidspunkt) - private val minsteinntekt = (if (forhøyetInntektskrav) `2G` else halvG).minsteinntekt(skjæringstidspunkt) + private val minsteinntekt = + (if (forhøyetInntektskrav) `2G` else halvG).minsteinntekt(skjæringstidspunkt) private val oppfyllerMinsteinntektskrav = beregningsgrunnlag >= minsteinntekt internal constructor( @@ -90,15 +96,24 @@ internal class Inntektsgrunnlag private constructor( skjæringstidspunkt: LocalDate, subsumsjonslogg: Subsumsjonslogg, vurdertInfotrygd: Boolean = false - ) : this(alder, skjæringstidspunkt, arbeidsgiverInntektsopplysninger, emptyList(), emptyList(), vurdertInfotrygd) { + ) : this( + alder, + skjæringstidspunkt, + arbeidsgiverInntektsopplysninger, + emptyList(), + emptyList(), + vurdertInfotrygd + ) { subsumsjonslogg.apply { arbeidsgiverInntektsopplysninger.subsummer(this, forrige = emptyList()) - logg(`§ 8-10 ledd 2 punktum 1`( - erBegrenset = begrensning == ER_6G_BEGRENSET, - maksimaltSykepengegrunnlagÅrlig = `6G`.årlig, - skjæringstidspunkt = skjæringstidspunkt, - beregningsgrunnlagÅrlig = beregningsgrunnlag.årlig - )) + logg( + `§ 8-10 ledd 2 punktum 1`( + erBegrenset = begrensning == ER_6G_BEGRENSET, + maksimaltSykepengegrunnlagÅrlig = `6G`.årlig, + skjæringstidspunkt = skjæringstidspunkt, + beregningsgrunnlagÅrlig = beregningsgrunnlag.årlig + ) + ) subsummerMinsteSykepengegrunnlag(alder, skjæringstidspunkt, this) } } @@ -109,20 +124,24 @@ internal class Inntektsgrunnlag private constructor( subsumsjonslogg: Subsumsjonslogg ) { if (alder.forhøyetInntektskrav(skjæringstidspunkt)) - subsumsjonslogg.logg(`§ 8-51 ledd 2`( - oppfylt = oppfyllerMinsteinntektskrav, - skjæringstidspunkt = skjæringstidspunkt, - alderPåSkjæringstidspunkt = alder.alderPåDato(skjæringstidspunkt), - beregningsgrunnlagÅrlig = beregningsgrunnlag.årlig, - minimumInntektÅrlig = minsteinntekt.årlig - )) + subsumsjonslogg.logg( + `§ 8-51 ledd 2`( + oppfylt = oppfyllerMinsteinntektskrav, + skjæringstidspunkt = skjæringstidspunkt, + alderPåSkjæringstidspunkt = alder.alderPåDato(skjæringstidspunkt), + beregningsgrunnlagÅrlig = beregningsgrunnlag.årlig, + minimumInntektÅrlig = minsteinntekt.årlig + ) + ) else - subsumsjonslogg.logg(`§ 8-3 ledd 2 punktum 1`( - oppfylt = oppfyllerMinsteinntektskrav, - skjæringstidspunkt = skjæringstidspunkt, - beregningsgrunnlagÅrlig = beregningsgrunnlag.årlig, - minimumInntektÅrlig = minsteinntekt.årlig - )) + subsumsjonslogg.logg( + `§ 8-3 ledd 2 punktum 1`( + oppfylt = oppfyllerMinsteinntektskrav, + skjæringstidspunkt = skjæringstidspunkt, + beregningsgrunnlagÅrlig = beregningsgrunnlag.årlig, + minimumInntektÅrlig = minsteinntekt.årlig + ) + ) } internal companion object { @@ -153,33 +172,72 @@ internal class Inntektsgrunnlag private constructor( vurdertInfotrygd: Boolean, `6G`: Inntekt? = null ): Inntektsgrunnlag { - return Inntektsgrunnlag(alder, skjæringstidspunkt, arbeidsgiverInntektsopplysninger, deaktiverteArbeidsforhold, emptyList(), vurdertInfotrygd, `6G`) + return Inntektsgrunnlag( + alder, + skjæringstidspunkt, + arbeidsgiverInntektsopplysninger, + deaktiverteArbeidsforhold, + emptyList(), + vurdertInfotrygd, + `6G` + ) } - fun gjenopprett(alder: Alder, skjæringstidspunkt: LocalDate, dto: InntektsgrunnlagInnDto, inntekter: MutableMap): Inntektsgrunnlag { + fun gjenopprett( + alder: Alder, + skjæringstidspunkt: LocalDate, + dto: InntektsgrunnlagInnDto, + inntekter: MutableMap + ): Inntektsgrunnlag { return Inntektsgrunnlag( alder = alder, skjæringstidspunkt = skjæringstidspunkt, - arbeidsgiverInntektsopplysninger = dto.arbeidsgiverInntektsopplysninger.map { ArbeidsgiverInntektsopplysning.gjenopprett(it, inntekter) }, - deaktiverteArbeidsforhold = dto.deaktiverteArbeidsforhold.map { ArbeidsgiverInntektsopplysning.gjenopprett(it, inntekter) }, - tilkommendeInntekter = dto.tilkommendeInntekter.map { NyInntektUnderveis.gjenopprett(it) }, + arbeidsgiverInntektsopplysninger = dto.arbeidsgiverInntektsopplysninger.map { + ArbeidsgiverInntektsopplysning.gjenopprett( + it, + inntekter + ) + }, + deaktiverteArbeidsforhold = dto.deaktiverteArbeidsforhold.map { + ArbeidsgiverInntektsopplysning.gjenopprett( + it, + inntekter + ) + }, + tilkommendeInntekter = dto.tilkommendeInntekter.map { + NyInntektUnderveis.gjenopprett( + it + ) + }, vurdertInfotrygd = dto.vurdertInfotrygd, `6G` = Inntekt.gjenopprett(dto.`6G`) ) } } - internal fun avvis(tidslinjer: List, skjæringstidspunktperiode: Periode, periode: Periode, subsumsjonslogg: Subsumsjonslogg): List { + internal fun avvis( + tidslinjer: List, + skjæringstidspunktperiode: Periode, + periode: Periode, + subsumsjonslogg: Subsumsjonslogg + ): List { val tidslinjeperiode = Utbetalingstidslinje.periode(tidslinjer) ?: return tidslinjer if (tidslinjeperiode.starterEtter(skjæringstidspunktperiode) || tidslinjeperiode.endInclusive < skjæringstidspunkt) return tidslinjer - val avvisningsperiode = skjæringstidspunktperiode.start til minOf(tidslinjeperiode.endInclusive, skjæringstidspunktperiode.endInclusive) + val avvisningsperiode = skjæringstidspunktperiode.start til minOf( + tidslinjeperiode.endInclusive, + skjæringstidspunktperiode.endInclusive + ) val avvisteDager = avvisningsperiode.filter { dato -> val faktor = if (alder.forhøyetInntektskrav(dato)) `2G` else halvG beregningsgrunnlag < faktor.minsteinntekt(skjæringstidspunkt) } if (avvisteDager.isEmpty()) return tidslinjer - val (avvisteDagerOver67, avvisteDagerTil67) = avvisteDager.partition { alder.forhøyetInntektskrav(it) } + val (avvisteDagerOver67, avvisteDagerTil67) = avvisteDager.partition { + alder.forhøyetInntektskrav( + it + ) + } if (avvisteDagerOver67.isNotEmpty()) { alder.fraOgMedFylte67( @@ -226,14 +284,28 @@ internal class Inntektsgrunnlag private constructor( internal fun harNødvendigInntektForVilkårsprøving(organisasjonsnummer: String) = arbeidsgiverInntektsopplysninger.harInntekt(organisasjonsnummer) - internal fun sjekkForNyArbeidsgiver(aktivitetslogg: IAktivitetslogg, opptjening: Opptjening?, orgnummer: String) { + internal fun sjekkForNyArbeidsgiver( + aktivitetslogg: IAktivitetslogg, + opptjening: Opptjening?, + orgnummer: String + ) { if (opptjening == null) return - arbeidsgiverInntektsopplysninger.sjekkForNyArbeidsgiver(aktivitetslogg, opptjening, orgnummer) + arbeidsgiverInntektsopplysninger.sjekkForNyArbeidsgiver( + aktivitetslogg, + opptjening, + orgnummer + ) } - internal fun måHaRegistrertOpptjeningForArbeidsgivere(aktivitetslogg: IAktivitetslogg, opptjening: Opptjening?) { + internal fun måHaRegistrertOpptjeningForArbeidsgivere( + aktivitetslogg: IAktivitetslogg, + opptjening: Opptjening? + ) { if (opptjening == null) return - arbeidsgiverInntektsopplysninger.måHaRegistrertOpptjeningForArbeidsgivere(aktivitetslogg, opptjening) + arbeidsgiverInntektsopplysninger.måHaRegistrertOpptjeningForArbeidsgivere( + aktivitetslogg, + opptjening + ) } internal fun markerFlereArbeidsgivere(aktivitetslogg: IAktivitetslogg) { @@ -241,7 +313,12 @@ internal class Inntektsgrunnlag private constructor( } internal fun aktiver(orgnummer: String, forklaring: String, subsumsjonslogg: Subsumsjonslogg) = - deaktiverteArbeidsforhold.aktiver(arbeidsgiverInntektsopplysninger, orgnummer, forklaring, subsumsjonslogg) + deaktiverteArbeidsforhold.aktiver( + arbeidsgiverInntektsopplysninger, + orgnummer, + forklaring, + subsumsjonslogg + ) .let { (deaktiverte, aktiverte) -> kopierSykepengegrunnlag( arbeidsgiverInntektsopplysninger = aktiverte, @@ -249,8 +326,17 @@ internal class Inntektsgrunnlag private constructor( ) } - internal fun deaktiver(orgnummer: String, forklaring: String, subsumsjonslogg: Subsumsjonslogg) = - arbeidsgiverInntektsopplysninger.deaktiver(deaktiverteArbeidsforhold, orgnummer, forklaring, subsumsjonslogg) + internal fun deaktiver( + orgnummer: String, + forklaring: String, + subsumsjonslogg: Subsumsjonslogg + ) = + arbeidsgiverInntektsopplysninger.deaktiver( + deaktiverteArbeidsforhold, + orgnummer, + forklaring, + subsumsjonslogg + ) .let { (aktiverte, deaktiverte) -> kopierSykepengegrunnlag( arbeidsgiverInntektsopplysninger = aktiverte, @@ -258,21 +344,53 @@ internal class Inntektsgrunnlag private constructor( ) } - internal fun overstyrArbeidsforhold(hendelse: OverstyrArbeidsforhold, subsumsjonslogg: Subsumsjonslogg): Inntektsgrunnlag { + internal fun overstyrArbeidsforhold( + hendelse: OverstyrArbeidsforhold, + subsumsjonslogg: Subsumsjonslogg + ): Inntektsgrunnlag { return hendelse.overstyr(this, subsumsjonslogg) } - internal fun overstyrArbeidsgiveropplysninger(person: Person, hendelse: OverstyrArbeidsgiveropplysninger, opptjening: Opptjening?, subsumsjonslogg: Subsumsjonslogg): Inntektsgrunnlag { - val builder = ArbeidsgiverInntektsopplysningerOverstyringer(skjæringstidspunkt, arbeidsgiverInntektsopplysninger, opptjening, subsumsjonslogg) + internal fun overstyrArbeidsgiveropplysninger( + person: Person, + hendelse: OverstyrArbeidsgiveropplysninger, + opptjening: Opptjening?, + subsumsjonslogg: Subsumsjonslogg + ): Inntektsgrunnlag { + val builder = ArbeidsgiverInntektsopplysningerOverstyringer( + skjæringstidspunkt, + arbeidsgiverInntektsopplysninger, + opptjening, + subsumsjonslogg + ) hendelse.overstyr(builder) val resultat = builder.resultat() val overstyrtTilkommenInntekt = tilkommendeInntekter.overstyr(hendelse) - arbeidsgiverInntektsopplysninger.forEach { it.arbeidsgiveropplysningerKorrigert(person, hendelse) } - return kopierSykepengegrunnlagOgValiderMinsteinntekt(resultat, deaktiverteArbeidsforhold, overstyrtTilkommenInntekt, subsumsjonslogg) + arbeidsgiverInntektsopplysninger.forEach { + it.arbeidsgiveropplysningerKorrigert( + person, + hendelse + ) + } + return kopierSykepengegrunnlagOgValiderMinsteinntekt( + resultat, + deaktiverteArbeidsforhold, + overstyrtTilkommenInntekt, + subsumsjonslogg + ) } - internal fun skjønnsmessigFastsettelse(hendelse: SkjønnsmessigFastsettelse, opptjening: Opptjening?, subsumsjonslogg: Subsumsjonslogg): Inntektsgrunnlag { - val builder = ArbeidsgiverInntektsopplysningerOverstyringer(skjæringstidspunkt, arbeidsgiverInntektsopplysninger, opptjening, subsumsjonslogg) + internal fun skjønnsmessigFastsettelse( + hendelse: SkjønnsmessigFastsettelse, + opptjening: Opptjening?, + subsumsjonslogg: Subsumsjonslogg + ): Inntektsgrunnlag { + val builder = ArbeidsgiverInntektsopplysningerOverstyringer( + skjæringstidspunkt, + arbeidsgiverInntektsopplysninger, + opptjening, + subsumsjonslogg + ) hendelse.overstyr(builder) val resultat = builder.resultat() return kopierSykepengegrunnlagOgValiderMinsteinntekt( @@ -286,9 +404,18 @@ internal class Inntektsgrunnlag private constructor( internal fun refusjonsopplysninger(organisasjonsnummer: String): Refusjonsopplysninger = arbeidsgiverInntektsopplysninger.refusjonsopplysninger(organisasjonsnummer) - internal fun tilkomneInntekterFraSøknaden(søknad: IAktivitetslogg, periode: Periode, nyeInntekter: List, subsumsjonslogg: Subsumsjonslogg): Inntektsgrunnlag? { + internal fun tilkomneInntekterFraSøknaden( + søknad: IAktivitetslogg, + periode: Periode, + nyeInntekter: List, + subsumsjonslogg: Subsumsjonslogg + ): Inntektsgrunnlag? { if (this.tilkommendeInntekter.isEmpty() && nyeInntekter.isEmpty()) return null - return kopierSykepengegrunnlag(arbeidsgiverInntektsopplysninger, deaktiverteArbeidsforhold, tilkommendeInntekter = this.tilkommendeInntekter.merge(periode, nyeInntekter)) + return kopierSykepengegrunnlag( + arbeidsgiverInntektsopplysninger, + deaktiverteArbeidsforhold, + tilkommendeInntekter = this.tilkommendeInntekter.merge(periode, nyeInntekter) + ) } internal fun harTilkommendeInntekter() = tilkommendeInntekter.isNotEmpty() @@ -298,7 +425,12 @@ internal class Inntektsgrunnlag private constructor( inntektsmelding: Inntektsmelding, subsumsjonslogg: Subsumsjonslogg ): Inntektsgrunnlag { - val builder = ArbeidsgiverInntektsopplysningerOverstyringer(skjæringstidspunkt, arbeidsgiverInntektsopplysninger, null, subsumsjonslogg) + val builder = ArbeidsgiverInntektsopplysningerOverstyringer( + skjæringstidspunkt, + arbeidsgiverInntektsopplysninger, + null, + subsumsjonslogg + ) inntektsmelding.nyeArbeidsgiverInntektsopplysninger(builder, skjæringstidspunkt) val resultat = builder.resultat() arbeidsgiverInntektsopplysninger @@ -318,8 +450,12 @@ internal class Inntektsgrunnlag private constructor( tilkommendeInntekter: List, subsumsjonslogg: Subsumsjonslogg ): Inntektsgrunnlag { - return kopierSykepengegrunnlag(arbeidsgiverInntektsopplysninger, deaktiverteArbeidsforhold, tilkommendeInntekter = tilkommendeInntekter).apply { - subsummerMinsteSykepengegrunnlag(alder, skjæringstidspunkt, subsumsjonslogg) + return kopierSykepengegrunnlag( + arbeidsgiverInntektsopplysninger, + deaktiverteArbeidsforhold, + tilkommendeInntekter = tilkommendeInntekter + ).apply { + subsummerMinsteSykepengegrunnlag(alder, skjæringstidspunkt, subsumsjonslogg) } } @@ -329,13 +465,13 @@ internal class Inntektsgrunnlag private constructor( nyttSkjæringstidspunkt: LocalDate = skjæringstidspunkt, tilkommendeInntekter: List = this.tilkommendeInntekter ) = Inntektsgrunnlag( - alder = alder, - skjæringstidspunkt = nyttSkjæringstidspunkt, - arbeidsgiverInntektsopplysninger = arbeidsgiverInntektsopplysninger, - deaktiverteArbeidsforhold = deaktiverteArbeidsforhold, - tilkommendeInntekter = tilkommendeInntekter, - vurdertInfotrygd = vurdertInfotrygd - ) + alder = alder, + skjæringstidspunkt = nyttSkjæringstidspunkt, + arbeidsgiverInntektsopplysninger = arbeidsgiverInntektsopplysninger, + deaktiverteArbeidsforhold = deaktiverteArbeidsforhold, + tilkommendeInntekter = tilkommendeInntekter, + vurdertInfotrygd = vurdertInfotrygd + ) internal fun grunnbeløpsregulering() = kopierSykepengegrunnlag( arbeidsgiverInntektsopplysninger, @@ -365,11 +501,11 @@ internal class Inntektsgrunnlag private constructor( override fun equals(other: Any?): Boolean { if (other !is Inntektsgrunnlag) return false return sykepengegrunnlag == other.sykepengegrunnlag - && arbeidsgiverInntektsopplysninger == other.arbeidsgiverInntektsopplysninger - && beregningsgrunnlag == other.beregningsgrunnlag - && begrensning == other.begrensning - && `6G` == other.`6G` - && deaktiverteArbeidsforhold == other.deaktiverteArbeidsforhold + && arbeidsgiverInntektsopplysninger == other.arbeidsgiverInntektsopplysninger + && beregningsgrunnlag == other.beregningsgrunnlag + && begrensning == other.begrensning + && `6G` == other.`6G` + && deaktiverteArbeidsforhold == other.deaktiverteArbeidsforhold } override fun hashCode(): Int { @@ -397,8 +533,18 @@ internal class Inntektsgrunnlag private constructor( fun harGjenbrukbareOpplysninger(organisasjonsnummer: String) = arbeidsgiverInntektsopplysninger.harGjenbrukbareOpplysninger(organisasjonsnummer) - fun lagreTidsnæreInntekter(skjæringstidspunkt: LocalDate, arbeidsgiver: Arbeidsgiver, aktivitetslogg: IAktivitetslogg, nyArbeidsgiverperiode: Boolean) { - arbeidsgiverInntektsopplysninger.lagreTidsnæreInntekter(skjæringstidspunkt, arbeidsgiver, aktivitetslogg, nyArbeidsgiverperiode) + fun lagreTidsnæreInntekter( + skjæringstidspunkt: LocalDate, + arbeidsgiver: Arbeidsgiver, + aktivitetslogg: IAktivitetslogg, + nyArbeidsgiverperiode: Boolean + ) { + arbeidsgiverInntektsopplysninger.lagreTidsnæreInntekter( + skjæringstidspunkt, + arbeidsgiver, + aktivitetslogg, + nyArbeidsgiverperiode + ) } enum class Begrensning { @@ -417,15 +563,30 @@ internal class Inntektsgrunnlag private constructor( nyeInntektsopplysninger.add(arbeidsgiverInntektsopplysning) } - internal fun ingenRefusjonsopplysninger(organisasjonsnummer: String) = opprinneligArbeidsgiverInntektsopplysninger.ingenRefusjonsopplysninger(organisasjonsnummer) + internal fun ingenRefusjonsopplysninger(organisasjonsnummer: String) = + opprinneligArbeidsgiverInntektsopplysninger.ingenRefusjonsopplysninger( + organisasjonsnummer + ) internal fun resultat(): List { - return opprinneligArbeidsgiverInntektsopplysninger.overstyrInntekter(skjæringstidspunkt, opptjening, nyeInntektsopplysninger, subsumsjonslogg) + return opprinneligArbeidsgiverInntektsopplysninger.overstyrInntekter( + skjæringstidspunkt, + opptjening, + nyeInntektsopplysninger, + subsumsjonslogg + ) } } - internal fun forespurtInntektOgRefusjonsopplysninger(organisasjonsnummer: String, periode: Periode) = - arbeidsgiverInntektsopplysninger.forespurtInntektOgRefusjonsopplysninger(skjæringstidspunkt, organisasjonsnummer, periode) + internal fun forespurtInntektOgRefusjonsopplysninger( + organisasjonsnummer: String, + periode: Periode + ) = + arbeidsgiverInntektsopplysninger.forespurtInntektOgRefusjonsopplysninger( + skjæringstidspunkt, + organisasjonsnummer, + periode + ) internal fun dto() = InntektsgrunnlagUtDto( arbeidsgiverInntektsopplysninger = this.arbeidsgiverInntektsopplysninger.map { it.dto() }, @@ -446,11 +607,17 @@ internal class Inntektsgrunnlag private constructor( skjæringstidspunkt = skjæringstidspunkt, `6G` = `6G`, inntekter = arbeidsgiverInntektsopplysninger.faktaavklarteInntekter(), - tilkommendeInntekter = this.tilkommendeInntekter.map { VilkårsprøvdSkjæringstidspunkt.NyInntektUnderveis(it.orgnummer, it.beløpstidslinje) } + tilkommendeInntekter = this.tilkommendeInntekter.map { + VilkårsprøvdSkjæringstidspunkt.NyInntektUnderveis( + it.orgnummer, + it.beløpstidslinje + ) + } ) fun harSkatteinntekterFor(organisasjonsnummer: String): Boolean = - arbeidsgiverInntektsopplysninger.finn(organisasjonsnummer)?.inntektsopplysning?.erSkatteopplysning() ?: false + arbeidsgiverInntektsopplysninger.finn(organisasjonsnummer)?.inntektsopplysning?.erSkatteopplysning() + ?: false } internal data class InntektsgrunnlagView( 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 836110895d..1e58757516 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 @@ -28,8 +28,16 @@ internal class Inntektshistorikk private constructor(private val historikk: Muta return true } - internal fun avklarSykepengegrunnlag(skjæringstidspunkt: LocalDate, førsteFraværsdag: LocalDate?, skattSykepengegrunnlag: SkattSykepengegrunnlag?): Inntektsopplysning? = - historikk.avklarSykepengegrunnlag(skjæringstidspunkt, førsteFraværsdag, skattSykepengegrunnlag) + internal fun avklarSykepengegrunnlag( + skjæringstidspunkt: LocalDate, + førsteFraværsdag: LocalDate?, + skattSykepengegrunnlag: SkattSykepengegrunnlag? + ): Inntektsopplysning? = + historikk.avklarSykepengegrunnlag( + skjæringstidspunkt, + førsteFraværsdag, + skattSykepengegrunnlag + ) internal fun dto() = InntektshistorikkUtDto( historikk = historikk.map { it.dto() } 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 34380f6080..408c5d1221 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 @@ -24,9 +24,16 @@ class Inntektsmelding internal constructor( tidsstempel: LocalDateTime, private val kilde: Kilde ) : Inntektsopplysning(id, hendelseId, dato, beløp, tidsstempel) { - internal constructor(dato: LocalDate, hendelseId: UUID, beløp: Inntekt, kilde: Kilde = Kilde.Arbeidsgiver, tidsstempel: LocalDateTime = LocalDateTime.now()) : this(UUID.randomUUID(), dato, hendelseId, beløp, tidsstempel, kilde) + internal constructor( + dato: LocalDate, + hendelseId: UUID, + beløp: Inntekt, + kilde: Kilde = Kilde.Arbeidsgiver, + tidsstempel: LocalDateTime = LocalDateTime.now() + ) : this(UUID.randomUUID(), dato, hendelseId, beløp, tidsstempel, kilde) - override fun gjenbrukbarInntekt(beløp: Inntekt?) = beløp?.let { Inntektsmelding(dato, hendelseId, it, kilde, tidsstempel) }?: this + override fun gjenbrukbarInntekt(beløp: Inntekt?) = + beløp?.let { Inntektsmelding(dato, hendelseId, it, kilde, tidsstempel) } ?: this internal fun view() = InntektsmeldingView( id = id, @@ -51,11 +58,13 @@ class Inntektsmelding internal constructor( return this } - internal fun kanLagres(other: Inntektsmelding) = this.hendelseId != other.hendelseId || this.dato != other.dato + internal fun kanLagres(other: Inntektsmelding) = + this.hendelseId != other.hendelseId || this.dato != other.dato override fun erSamme(other: Inntektsopplysning): Boolean { return other is Inntektsmelding && this.dato == other.dato && other.beløp == this.beløp } + override fun arbeidsgiveropplysningerKorrigert( person: Person, inntektsmelding: no.nav.helse.hendelser.Inntektsmelding @@ -68,6 +77,7 @@ class Inntektsmelding internal constructor( ) ) } + override fun arbeidsgiveropplysningerKorrigert( person: Person, orgnummer: String, @@ -111,7 +121,7 @@ class Inntektsmelding internal constructor( Arbeidsgiver, AOrdningen; - fun dto() = when(this) { + fun dto() = when (this) { Arbeidsgiver -> InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.Arbeidsgiver AOrdningen -> InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.AOrdningen } @@ -136,14 +146,24 @@ class Inntektsmelding internal constructor( ) } - internal fun List.finnInntektsmeldingForSkjæringstidspunkt(skjæringstidspunkt: LocalDate, førsteFraværsdag: LocalDate?): Inntektsmelding? { - val inntektsmeldinger = this.filter { it.dato == skjæringstidspunkt || it.dato == førsteFraværsdag } + internal fun List.finnInntektsmeldingForSkjæringstidspunkt( + skjæringstidspunkt: LocalDate, + førsteFraværsdag: LocalDate? + ): Inntektsmelding? { + val inntektsmeldinger = + this.filter { it.dato == skjæringstidspunkt || it.dato == førsteFraværsdag } return inntektsmeldinger.maxByOrNull { inntektsmelding -> inntektsmelding.tidsstempel } } - internal fun List.avklarSykepengegrunnlag(skjæringstidspunkt: LocalDate, førsteFraværsdag: LocalDate?, skattSykepengegrunnlag: SkattSykepengegrunnlag?): Inntektsopplysning? { - val inntektsmelding = finnInntektsmeldingForSkjæringstidspunkt(skjæringstidspunkt, førsteFraværsdag) - val skatt = skattSykepengegrunnlag?.takeIf { it.kanBrukes(skjæringstidspunkt) }?.somSykepengegrunnlag() ?: return inntektsmelding + internal fun List.avklarSykepengegrunnlag( + skjæringstidspunkt: LocalDate, + førsteFraværsdag: LocalDate?, + skattSykepengegrunnlag: SkattSykepengegrunnlag? + ): Inntektsopplysning? { + val inntektsmelding = + finnInntektsmeldingForSkjæringstidspunkt(skjæringstidspunkt, førsteFraværsdag) + val skatt = skattSykepengegrunnlag?.takeIf { it.kanBrukes(skjæringstidspunkt) } + ?.somSykepengegrunnlag() ?: return inntektsmelding return inntektsmelding?.avklarSykepengegrunnlag(skatt) ?: skatt } } 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 3d368cf946..a384942e6d 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 @@ -1,5 +1,6 @@ package no.nav.helse.person.inntekt +import no.nav.helse.hendelser.Inntektsmelding as InntektsmeldingHendelse import java.time.LocalDate import java.time.LocalDateTime import java.util.UUID @@ -14,7 +15,6 @@ import no.nav.helse.person.Person import no.nav.helse.person.aktivitetslogg.IAktivitetslogg import no.nav.helse.person.aktivitetslogg.Varselkode import no.nav.helse.økonomi.Inntekt -import no.nav.helse.hendelser.Inntektsmelding as InntektsmeldingHendelse sealed class Inntektsopplysning( val id: UUID, @@ -35,16 +35,19 @@ sealed class Inntektsopplysning( protected open fun kanOverstyresAv(ny: Inntektsopplysning): Boolean { // kun saksbehandlerinntekt eller annen inntektsmelding kan overstyre inntektsmelding-inntekt if (ny is SkjønnsmessigFastsatt) return true - if (ny is Saksbehandler){ + if (ny is Saksbehandler) { return when { // hvis inntekten er skjønnsmessig fastsatt og det overstyres til samme omregnede årsinntekt, så beholdes den skjønnsmessig fastsatte inntekten - this is SkjønnsmessigFastsatt && this.omregnetÅrsinntekt().fastsattÅrsinntekt() == ny.fastsattÅrsinntekt() -> false + this is SkjønnsmessigFastsatt && this.omregnetÅrsinntekt() + .fastsattÅrsinntekt() == ny.fastsattÅrsinntekt() -> false + this is SkjønnsmessigFastsatt -> true else -> ny.fastsattÅrsinntekt() != this.beløp } } if (ny !is Inntektsmelding) return false - val måned = this.dato.withDayOfMonth(1) til this.dato.withDayOfMonth(this.dato.lengthOfMonth()) + val måned = + this.dato.withDayOfMonth(1) til this.dato.withDayOfMonth(this.dato.lengthOfMonth()) return ny.dato in måned } @@ -54,6 +57,7 @@ sealed class Inntektsopplysning( internal open fun overstyrer(gammel: Saksbehandler): Inntektsopplysning { throw IllegalStateException("Kan ikke overstyre saksbehandler-inntekt") } + internal open fun overstyrer(gammel: SkjønnsmessigFastsatt): Inntektsopplysning { throw IllegalStateException("Kan ikke overstyre skjønnsmessig fastsatt-inntekt") } @@ -68,7 +72,12 @@ sealed class Inntektsopplysning( protected abstract fun erSamme(other: Inntektsopplysning): Boolean - internal open fun subsumerSykepengegrunnlag(subsumsjonslogg: Subsumsjonslogg, organisasjonsnummer: String, startdatoArbeidsforhold: LocalDate?) { } + internal open fun subsumerSykepengegrunnlag( + subsumsjonslogg: Subsumsjonslogg, + organisasjonsnummer: String, + startdatoArbeidsforhold: LocalDate? + ) { + } internal open fun subsumerArbeidsforhold( subsumsjonslogg: Subsumsjonslogg, @@ -76,13 +85,15 @@ sealed class Inntektsopplysning( forklaring: String, oppfylt: Boolean ) = apply { - subsumsjonslogg.logg(`§ 8-15`( - skjæringstidspunkt = dato, - organisasjonsnummer = organisasjonsnummer, - inntekterSisteTreMåneder = emptyList(), - forklaring = forklaring, - oppfylt = oppfylt - )) + subsumsjonslogg.logg( + `§ 8-15`( + skjæringstidspunkt = dato, + organisasjonsnummer = organisasjonsnummer, + inntekterSisteTreMåneder = emptyList(), + forklaring = forklaring, + oppfylt = oppfylt + ) + ) } internal open fun gjenbrukbarInntekt(beløp: Inntekt? = null): Inntektsmelding? = null @@ -111,21 +122,29 @@ sealed class Inntektsopplysning( internal open fun arbeidsgiveropplysningerKorrigert( person: Person, inntektsmelding: InntektsmeldingHendelse - ) {} + ) { + } internal open fun arbeidsgiveropplysningerKorrigert( person: Person, orgnummer: String, saksbehandlerOverstyring: OverstyrArbeidsgiveropplysninger - ) {} + ) { + } - internal open fun erSkatteopplysning() : Boolean = false + internal open fun erSkatteopplysning(): Boolean = false internal companion object { - internal fun erOmregnetÅrsinntektEndret(før: Inntektsopplysning, etter: Inntektsopplysning) = + internal fun erOmregnetÅrsinntektEndret( + før: Inntektsopplysning, + etter: Inntektsopplysning + ) = erOmregnetÅrsinntektEndret(listOf(før), listOf(etter)) - internal fun erOmregnetÅrsinntektEndret(før: List, etter: List) = + internal fun erOmregnetÅrsinntektEndret( + før: List, + etter: List + ) = omregnetÅrsinntekt(før) != omregnetÅrsinntekt(etter) private fun omregnetÅrsinntekt(liste: List) = liste @@ -138,18 +157,34 @@ sealed class Inntektsopplysning( } internal fun List.validerSkjønnsmessigAltEllerIntet() { - 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"} + 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 fun gjenopprett(dto: InntektsopplysningInnDto, inntekter: MutableMap): Inntektsopplysning { + internal fun gjenopprett( + dto: InntektsopplysningInnDto, + inntekter: MutableMap + ): Inntektsopplysning { val inntektsopplysning = inntekter.getOrPut(dto.id) { when (dto) { is InntektsopplysningInnDto.IkkeRapportertDto -> IkkeRapportert.gjenopprett(dto) is InntektsopplysningInnDto.InfotrygdDto -> Infotrygd.gjenopprett(dto) - is InntektsopplysningInnDto.InntektsmeldingDto -> Inntektsmelding.gjenopprett(dto) - is InntektsopplysningInnDto.SaksbehandlerDto -> Saksbehandler.gjenopprett(dto, inntekter) - is InntektsopplysningInnDto.SkattSykepengegrunnlagDto -> SkattSykepengegrunnlag.gjenopprett(dto) - is InntektsopplysningInnDto.SkjønnsmessigFastsattDto -> SkjønnsmessigFastsatt.gjenopprett(dto, inntekter) + is InntektsopplysningInnDto.InntektsmeldingDto -> Inntektsmelding.gjenopprett( + dto + ) + + is InntektsopplysningInnDto.SaksbehandlerDto -> Saksbehandler.gjenopprett( + dto, + inntekter + ) + + is InntektsopplysningInnDto.SkattSykepengegrunnlagDto -> SkattSykepengegrunnlag.gjenopprett( + dto + ) + + is InntektsopplysningInnDto.SkjønnsmessigFastsattDto -> SkjønnsmessigFastsatt.gjenopprett( + dto, + inntekter + ) } } return inntektsopplysning diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/NyInntektUnderveis.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/NyInntektUnderveis.kt index 0f24984368..5fe4ea147b 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/NyInntektUnderveis.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/inntekt/NyInntektUnderveis.kt @@ -8,8 +8,6 @@ import no.nav.helse.hendelser.Periode import no.nav.helse.hendelser.til import no.nav.helse.nesteDag import no.nav.helse.person.beløp.Beløpstidslinje -import kotlin.collections.filterNot -import kotlin.collections.plus data class NyInntektUnderveis( val orgnummer: String, @@ -19,6 +17,7 @@ data class NyInntektUnderveis( orgnummer = orgnummer, beløpstidslinje = beløpstidslinje.dto() ) + companion object { internal fun List.finnEndringsdato( tidligere: List @@ -32,13 +31,17 @@ data class NyInntektUnderveis( private fun List.førsteEndring(others: List): LocalDate? { val datoer = mapNotNull { nyInntektUnderveis -> - val other = others.find { it.orgnummer == nyInntektUnderveis.orgnummer } ?: return@mapNotNull null - nyInntektUnderveis.beløpstidslinje.førsteEndring(other.beløpstidslinje) - } + val other = others.find { it.orgnummer == nyInntektUnderveis.orgnummer } + ?: return@mapNotNull null + nyInntektUnderveis.beløpstidslinje.førsteEndring(other.beløpstidslinje) + } return datoer.minOrNull() } - internal fun List.erRelevantForOverstyring(skjæringstidspunkt: LocalDate, periode: Periode): Boolean { + internal fun List.erRelevantForOverstyring( + skjæringstidspunkt: LocalDate, + periode: Periode + ): Boolean { if (periode.start <= skjæringstidspunkt) return false val førsteDag = minOfOrNull { it.beløpstidslinje.first().dato } ?: return false val sisteDag = maxOfOrNull { it.beløpstidslinje.last().dato } ?: return false @@ -52,24 +55,35 @@ data class NyInntektUnderveis( internal fun List.merge(nyeInntekter: List): List { if (nyeInntekter.isEmpty()) return this - val periode = nyeInntekter.minOf { it.beløpstidslinje.first().dato } til nyeInntekter.maxOf { it.beløpstidslinje.last().dato } + val periode = + nyeInntekter.minOf { it.beløpstidslinje.first().dato } til nyeInntekter.maxOf { it.beløpstidslinje.last().dato } return merge(periode, nyeInntekter) } - fun List.merge(periode: Periode, nyeInntekter: List): List { + fun List.merge( + periode: Periode, + nyeInntekter: List + ): List { val tingViHar = overskrivTilkommetInntekterForPeriode(periode, nyeInntekter) val kjenteOrgnumreFraFør = map { it.orgnummer } val nyeTing = nyeInntekter.filter { it.orgnummer !in kjenteOrgnumreFraFør } return (tingViHar + nyeTing).filterNot { it.beløpstidslinje.isEmpty() } } - private fun List.overskrivTilkommetInntekterForPeriode(periode: Periode, nyeInntekter: List): List { + private fun List.overskrivTilkommetInntekterForPeriode( + periode: Periode, + nyeInntekter: List + ): List { return map { tilkommetInntekt -> // tom liste/null som resultat tolkes som av søknaden har fjernet inntekten i den angitte perioden - val nyTidslinje = nyeInntekter.firstOrNull { it.orgnummer == tilkommetInntekt.orgnummer }?.beløpstidslinje ?: Beløpstidslinje() + val nyTidslinje = + nyeInntekter.firstOrNull { it.orgnummer == tilkommetInntekt.orgnummer }?.beløpstidslinje + ?: Beløpstidslinje() - val tidslinjeFørPerioden = tilkommetInntekt.beløpstidslinje.tilOgMed(periode.start.forrigeDag) - val tidslinjeEtterPerioden = tilkommetInntekt.beløpstidslinje.fraOgMed(periode.endInclusive.nesteDag) + val tidslinjeFørPerioden = + tilkommetInntekt.beløpstidslinje.tilOgMed(periode.start.forrigeDag) + val tidslinjeEtterPerioden = + tilkommetInntekt.beløpstidslinje.fraOgMed(periode.endInclusive.nesteDag) tilkommetInntekt.copy(beløpstidslinje = tidslinjeFørPerioden + nyTidslinje + tidslinjeEtterPerioden) } } 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 ebcc199273..15bbe885cc 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 @@ -67,11 +67,13 @@ internal class Refusjonshistorikk { val opphørstidslinje = sisteRefusjonsdag ?.takeIf { it < tilOgMed } - ?.let { Beløpstidslinje.fra(it.nesteDag til tilOgMed, INGEN, kilde) } ?: Beløpstidslinje() + ?.let { Beløpstidslinje.fra(it.nesteDag til tilOgMed, INGEN, kilde) } + ?: Beløpstidslinje() if (sisteRefusjonsdag != null && sisteRefusjonsdag < startskuddet) return opphørstidslinje - val basistidslinje = Beløpstidslinje.fra(startskuddet til tilOgMed, beløp ?: INGEN, kilde) + val basistidslinje = + Beløpstidslinje.fra(startskuddet til tilOgMed, beløp ?: INGEN, kilde) val endringstidslinjer = endringerIRefusjon .filter { it.endringsdato > startskuddet } @@ -86,11 +88,13 @@ internal class Refusjonshistorikk { val kilde = Kilde(meldingsreferanseId, Avsender.ARBEIDSGIVER, tidsstempel) val opphørstidslinje = sisteRefusjonsdag - ?.let { Beløpstidslinje.fra(it.nesteDag.somPeriode(), INGEN, kilde) } ?: Beløpstidslinje() + ?.let { Beløpstidslinje.fra(it.nesteDag.somPeriode(), INGEN, kilde) } + ?: Beløpstidslinje() if (sisteRefusjonsdag != null && sisteRefusjonsdag < startskuddet) return opphørstidslinje - val basistidslinje = Beløpstidslinje.fra(startskuddet.somPeriode(), beløp ?: INGEN, kilde) + val basistidslinje = + Beløpstidslinje.fra(startskuddet.somPeriode(), beløp ?: INGEN, kilde) val endringstidslinjer = endringerIRefusjon .filter { it.endringsdato > startskuddet } @@ -106,7 +110,8 @@ internal class Refusjonshistorikk { add(refusjon) } - private fun Refusjon.utledetFørsteFraværsdag() = førsteFraværsdag ?: arbeidsgiverperioder.maxOf { it.start } + private fun Refusjon.utledetFørsteFraværsdag() = + førsteFraværsdag ?: arbeidsgiverperioder.maxOf { it.start } internal fun gjenopprett(dto: RefusjonInnDto): Refusjon { return Refusjon( @@ -115,7 +120,11 @@ internal class Refusjonshistorikk { arbeidsgiverperioder = dto.arbeidsgiverperioder.map { Periode.gjenopprett(it) }, beløp = dto.beløp?.let { Inntekt.gjenopprett(it) }, sisteRefusjonsdag = dto.sisteRefusjonsdag, - endringerIRefusjon = dto.endringerIRefusjon.map { EndringIRefusjon.gjenopprett(it) }, + endringerIRefusjon = dto.endringerIRefusjon.map { + EndringIRefusjon.gjenopprett( + it + ) + }, tidsstempel = dto.tidsstempel ) } @@ -131,21 +140,24 @@ internal class Refusjonshistorikk { internal val endringsdato: LocalDate ) { internal companion object { - internal fun List.beløp(dag: LocalDate) = sortedBy { it.endringsdato }.lastOrNull { dag >= it.endringsdato }?.beløp + internal fun List.beløp(dag: LocalDate) = + sortedBy { it.endringsdato }.lastOrNull { dag >= it.endringsdato }?.beløp internal fun Refusjonshistorikk.refusjonsopplysninger(skjæringstidspunkt: LocalDate): Refusjonsopplysninger { val refusjonsopplysningBuilder = RefusjonsopplysningerBuilder() val aktuelle = refusjoner.filter { it.startskuddet >= skjæringstidspunkt } val første = aktuelle.minByOrNull { it.startskuddet } if (første != null && første.startskuddet != skjæringstidspunkt) { - refusjonsopplysningBuilder.leggTil(Refusjonsopplysning( - meldingsreferanseId = første.meldingsreferanseId, - fom = skjæringstidspunkt, - tom = første.startskuddet.forrigeDag, - beløp = første.beløp ?: INGEN, - avsender = Avsender.ARBEIDSGIVER, - tidsstempel = første.tidsstempel - ), første.tidsstempel) + refusjonsopplysningBuilder.leggTil( + Refusjonsopplysning( + meldingsreferanseId = første.meldingsreferanseId, + fom = skjæringstidspunkt, + tom = første.startskuddet.forrigeDag, + beløp = første.beløp ?: INGEN, + avsender = Avsender.ARBEIDSGIVER, + tidsstempel = første.tidsstempel + ), første.tidsstempel + ) } aktuelle.leggTilRefusjonsopplysninger(refusjonsopplysningBuilder) return refusjonsopplysningBuilder.build() @@ -162,7 +174,8 @@ internal class Refusjonshistorikk { private fun Refusjon.leggTilRefusjoneropplysninger(refusjonsopplysningerBuilder: RefusjonsopplysningerBuilder) { // håndterer at inntektsmeldinger oppgir opphørsdato for refusjon til en dato FØR startskuddet - val sisteRefusjonsdag = sisteRefusjonsdag?.let { maxOf(it, startskuddet.forrigeDag) } + val sisteRefusjonsdag = + sisteRefusjonsdag?.let { maxOf(it, startskuddet.forrigeDag) } val hovedRefusjonsopplysning = EndringIRefusjon(beløp ?: INGEN, startskuddet) (endringerIRefusjon + hovedRefusjonsopplysning) @@ -183,31 +196,40 @@ internal class Refusjonshistorikk { } if (sisteRefusjonsdag == null) return - refusjonsopplysningerBuilder.leggTil(Refusjonsopplysning( - meldingsreferanseId = meldingsreferanseId, - fom = sisteRefusjonsdag.nesteDag, - tom = null, - beløp = INGEN, - avsender = Avsender.ARBEIDSGIVER, - tidsstempel = tidsstempel - ), tidsstempel) + refusjonsopplysningerBuilder.leggTil( + Refusjonsopplysning( + meldingsreferanseId = meldingsreferanseId, + fom = sisteRefusjonsdag.nesteDag, + tom = null, + beløp = INGEN, + avsender = Avsender.ARBEIDSGIVER, + tidsstempel = tidsstempel + ), tidsstempel + ) } internal fun Refusjonshistorikk.beløpstidslinje(søkevindu: Periode): Beløpstidslinje { val aktuelle = refusjoner.filter { it.startskuddet in søkevindu } - return aktuelle.sortedBy { it.tidsstempel }.map { it.beløpstidslinje(søkevindu.endInclusive) }.fold(Beløpstidslinje(), Beløpstidslinje::plus).subset(søkevindu) + return aktuelle.sortedBy { it.tidsstempel } + .map { it.beløpstidslinje(søkevindu.endInclusive) } + .fold(Beløpstidslinje(), Beløpstidslinje::plus).subset(søkevindu) } internal fun Refusjonshistorikk.refusjonsservitør( fom: LocalDate?, stardatoPåSammenhengendeVedtaksperioder: LocalDate? ): Refusjonsservitør { - val aktuelle = refusjoner.filter { it.startskuddet >= (stardatoPåSammenhengendeVedtaksperioder ?: LocalDate.MIN) } - return Refusjonsservitør(aktuelle.groupBy { it.startskuddet }.mapValues { (_, refusjoner) -> - val beløpstidslinje = refusjoner.map { it.beløpstidslinje() }.fold(Beløpstidslinje(), Beløpstidslinje::plus).fyll() - if (fom == null) beløpstidslinje - else beløpstidslinje.fraOgMed(fom) - }) + val aktuelle = refusjoner.filter { + it.startskuddet >= (stardatoPåSammenhengendeVedtaksperioder + ?: LocalDate.MIN) + } + return Refusjonsservitør(aktuelle.groupBy { it.startskuddet } + .mapValues { (_, refusjoner) -> + val beløpstidslinje = refusjoner.map { it.beløpstidslinje() } + .fold(Beløpstidslinje(), Beløpstidslinje::plus).fyll() + if (fom == null) beløpstidslinje + else beløpstidslinje.fraOgMed(fom) + }) } internal fun gjenopprett(dto: EndringIRefusjonDto): EndringIRefusjon { @@ -257,6 +279,7 @@ data class RefusjonView( val endringerIRefusjon: List, val tidsstempel: LocalDateTime ) + data class EndringIRefusjonView( val beløp: Inntekt, val endringsdato: LocalDate 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 b347d8d4a5..33d80a69b1 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 @@ -28,7 +28,7 @@ data class Refusjonsopplysning( val tidsstempel: LocalDateTime ) { init { - check(tom == null || tom <= tom) { "fom ($fom) kan ikke være etter tom ($tom) "} + check(tom == null || tom <= tom) { "fom ($fom) kan ikke være etter tom ($tom) " } } val periode = fom til (tom ?: LocalDate.MAX) @@ -48,7 +48,14 @@ data class Refusjonsopplysning( } } - private fun oppdatertTom(nyTom: LocalDate) = if (nyTom < fom) null else Refusjonsopplysning(meldingsreferanseId, fom, nyTom, beløp, avsender, tidsstempel) + private fun oppdatertTom(nyTom: LocalDate) = if (nyTom < fom) null else Refusjonsopplysning( + meldingsreferanseId, + fom, + nyTom, + beløp, + avsender, + tidsstempel + ) private fun begrensTil(dato: LocalDate): Refusjonsopplysning? { return if (dekker(dato)) oppdatertTom(dato.forrigeDag) @@ -69,23 +76,36 @@ data class Refusjonsopplysning( private fun funksjoneltLik(other: Refusjonsopplysning) = this.periode == other.periode && this.beløp == other.beløp - override fun toString() = "$periode, ${beløp.daglig} ($meldingsreferanseId), ($avsender), ($tidsstempel)" + override fun toString() = + "$periode, ${beløp.daglig} ($meldingsreferanseId), ($avsender), ($tidsstempel)" internal companion object { private fun List.mergeInnNyeOpplysninger(nyeOpplysninger: List): List { val begrensetFra = minOfOrNull { it.fom } ?: LocalDate.MIN return nyeOpplysninger - .fold(this) { resultat, nyOpplysning -> resultat.mergeInnNyOpplysning(nyOpplysning, begrensetFra) } + .fold(this) { resultat, nyOpplysning -> + resultat.mergeInnNyOpplysning( + nyOpplysning, + begrensetFra + ) + } .sortedBy { it.fom } } - private fun List.mergeInnNyOpplysning(nyOpplysning: Refusjonsopplysning, begrensetFra: LocalDate): List { + private fun List.mergeInnNyOpplysning( + nyOpplysning: Refusjonsopplysning, + begrensetFra: LocalDate + ): List { // begrenser refusjonsopplysningen slik at den ikke kan strekke tilbake i tid val nyOpplysningBegrensetStart = nyOpplysning.begrensetFra(begrensetFra) ?: return this // bevarer eksisterende opplysning hvis ny opplysning finnes fra før (dvs. vi bevarer meldingsreferanseId på forrige) if (any { it.funksjoneltLik(nyOpplysningBegrensetStart) }) return this // Beholder de delene som ikke dekkes av den nye opplysningen og legger til den nye opplysningen - return flatMap { eksisterendeOpplysning -> eksisterendeOpplysning.trim(nyOpplysningBegrensetStart.periode) }.plus(nyOpplysningBegrensetStart) + return flatMap { eksisterendeOpplysning -> + eksisterendeOpplysning.trim( + nyOpplysningBegrensetStart.periode + ) + }.plus(nyOpplysningBegrensetStart) } internal fun gjenopprett(dto: RefusjonsopplysningInnDto): Refusjonsopplysning { @@ -106,24 +126,29 @@ data class Refusjonsopplysning( val validerteRefusjonsopplysninger = refusjonsopplysninger.sortedBy { it.fom } internal val erTom = validerteRefusjonsopplysninger.isEmpty() - constructor(): this(emptyList()) + + constructor() : this(emptyList()) init { check(!validerteRefusjonsopplysninger.overlapper()) { "Refusjonsopplysninger skal ikke kunne inneholde overlappende informasjon: $refusjonsopplysninger" } } - internal fun lagreTidsnær(førsteFraværsdag: LocalDate, refusjonshistorikk: Refusjonshistorikk) { + internal fun lagreTidsnær( + førsteFraværsdag: LocalDate, + refusjonshistorikk: Refusjonshistorikk + ) { val relevanteRefusjonsopplysninger = validerteRefusjonsopplysninger.filter { (it.tom ?: LocalDate.MAX) >= førsteFraværsdag } if (relevanteRefusjonsopplysninger.isEmpty()) return val første = relevanteRefusjonsopplysninger.first() - val endringerIRefusjon = relevanteRefusjonsopplysninger.drop(1).map { refusjonsopplysning -> - Refusjonshistorikk.Refusjon.EndringIRefusjon( - endringsdato = refusjonsopplysning.fom, - beløp = refusjonsopplysning.beløp - ) - } + val endringerIRefusjon = + relevanteRefusjonsopplysninger.drop(1).map { refusjonsopplysning -> + Refusjonshistorikk.Refusjon.EndringIRefusjon( + endringsdato = refusjonsopplysning.fom, + beløp = refusjonsopplysning.beløp + ) + } val refusjon = Refusjonshistorikk.Refusjon( meldingsreferanseId = første.meldingsreferanseId, @@ -137,17 +162,27 @@ data class Refusjonsopplysning( } internal fun merge(other: Refusjonsopplysninger): Refusjonsopplysninger { - return Refusjonsopplysninger(validerteRefusjonsopplysninger.mergeInnNyeOpplysninger(other.validerteRefusjonsopplysninger)) - } - - internal fun beløpstidslinje() = validerteRefusjonsopplysninger.fold(Beløpstidslinje()) { samletBeløpstidslinje, refusjonsopplysning -> - samletBeløpstidslinje + Beløpstidslinje.fra( - periode = refusjonsopplysning.fom til (refusjonsopplysning.tom ?: refusjonsopplysning.fom), - beløp = refusjonsopplysning.beløp, - kilde = Kilde(refusjonsopplysning.meldingsreferanseId, refusjonsopplysning.avsender, refusjonsopplysning.tidsstempel) + return Refusjonsopplysninger( + validerteRefusjonsopplysninger.mergeInnNyeOpplysninger( + other.validerteRefusjonsopplysninger + ) ) } + internal fun beløpstidslinje() = + validerteRefusjonsopplysninger.fold(Beløpstidslinje()) { samletBeløpstidslinje, refusjonsopplysning -> + samletBeløpstidslinje + Beløpstidslinje.fra( + periode = refusjonsopplysning.fom til (refusjonsopplysning.tom + ?: refusjonsopplysning.fom), + beløp = refusjonsopplysning.beløp, + kilde = Kilde( + refusjonsopplysning.meldingsreferanseId, + refusjonsopplysning.avsender, + refusjonsopplysning.tidsstempel + ) + ) + } + override fun equals(other: Any?): Boolean { if (other !is Refusjonsopplysninger) return false return validerteRefusjonsopplysninger == other.validerteRefusjonsopplysninger @@ -158,10 +193,15 @@ data class Refusjonsopplysning( override fun toString() = validerteRefusjonsopplysninger.toString() - private fun hensyntattSisteOppholdagFørPerioden(sisteOppholdsdagFørPerioden: LocalDate?) = when (sisteOppholdsdagFørPerioden) { - null -> this - else -> Refusjonsopplysninger(validerteRefusjonsopplysninger.mapNotNull { it.begrensTil(sisteOppholdsdagFørPerioden )}) - } + private fun hensyntattSisteOppholdagFørPerioden(sisteOppholdsdagFørPerioden: LocalDate?) = + when (sisteOppholdsdagFørPerioden) { + null -> this + else -> Refusjonsopplysninger(validerteRefusjonsopplysninger.mapNotNull { + it.begrensTil( + sisteOppholdsdagFørPerioden + ) + }) + } private fun harNødvendigRefusjonsopplysninger( skjæringstidspunkt: LocalDate, @@ -173,8 +213,14 @@ data class Refusjonsopplysning( aktivitetslogg.info("Mangler refusjonsopplysninger på orgnummer $organisasjonsnummer for hele perioden (${utbetalingsdager.omsluttendePeriode})") } val dekkes = utbetalingsdager.filter { utbetalingsdag -> dekker(utbetalingsdag) } - val aksepteres = utbetalingsdager.filter { utbetalingsdag -> førsteRefusjonsopplysning.aksepterer(skjæringstidspunkt, utbetalingsdag) } - val mangler = (utbetalingsdager - dekkes - aksepteres).takeUnless { it.isEmpty() } ?: return true + val aksepteres = utbetalingsdager.filter { utbetalingsdag -> + førsteRefusjonsopplysning.aksepterer( + skjæringstidspunkt, + utbetalingsdag + ) + } + val mangler = + (utbetalingsdager - dekkes - aksepteres).takeUnless { it.isEmpty() } ?: return true aktivitetslogg.info("Mangler refusjonsopplysninger på orgnummer $organisasjonsnummer for periodene ${mangler.grupperSammenhengendePerioder()}") return false } @@ -185,10 +231,19 @@ data class Refusjonsopplysning( sisteOppholdsdagFørPerioden: LocalDate?, aktivitetslogg: IAktivitetslogg, organisasjonsnummer: String - ) = hensyntattSisteOppholdagFørPerioden(sisteOppholdsdagFørPerioden).harNødvendigRefusjonsopplysninger(skjæringstidspunkt, utbetalingsdager, aktivitetslogg, organisasjonsnummer) - internal fun refusjonsbeløpOrNull(dag: LocalDate) = validerteRefusjonsopplysninger.singleOrNull { it.dekker(dag) }?.beløp + ) = + hensyntattSisteOppholdagFørPerioden(sisteOppholdsdagFørPerioden).harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + utbetalingsdager, + aktivitetslogg, + organisasjonsnummer + ) + + internal fun refusjonsbeløpOrNull(dag: LocalDate) = + validerteRefusjonsopplysninger.singleOrNull { it.dekker(dag) }?.beløp - private fun førsteRefusjonsopplysning() = validerteRefusjonsopplysninger.minByOrNull { it.fom } + private fun førsteRefusjonsopplysning() = + validerteRefusjonsopplysninger.minByOrNull { it.fom } private fun dekker(dag: LocalDate) = validerteRefusjonsopplysninger.any { it.dekker(dag) } @@ -199,9 +254,11 @@ data class Refusjonsopplysning( other.validerteRefusjonsopplysninger.none { it.meldingsreferanseId == opplysning.meldingsreferanseId } } // fjerner de hvor perioden og beløpet dekkes av forrige - val nyeUlik = nye.filterNot { opplysning -> other.validerteRefusjonsopplysninger.any { - opplysning.periode in it.periode && opplysning.beløp == it.beløp - } } + val nyeUlik = nye.filterNot { opplysning -> + other.validerteRefusjonsopplysninger.any { + opplysning.periode in it.periode && opplysning.beløp == it.beløp + } + } // første nye ulike opplysning eller bare første nye opplysning return nyeUlik.firstOrNull()?.fom ?: nye.firstOrNull()?.fom } @@ -217,7 +274,10 @@ data class Refusjonsopplysning( internal companion object { private fun List.overlapper() = map { it.periode }.overlapper() internal fun List.gjennopprett() = Refusjonsopplysninger(this) - internal val Refusjonsopplysning.refusjonsopplysninger get() = Refusjonsopplysninger(listOf(this)) + internal val Refusjonsopplysning.refusjonsopplysninger + get() = Refusjonsopplysninger( + listOf(this) + ) internal fun gjenopprett(dto: RefusjonsopplysningerInnDto) = Refusjonsopplysninger( refusjonsopplysninger = dto.opplysninger.map { Refusjonsopplysning.gjenopprett(it) } @@ -225,16 +285,27 @@ data class Refusjonsopplysning( } class RefusjonsopplysningerBuilder { - private val refusjonsopplysninger = mutableListOf>() - fun leggTil(refusjonsopplysning: Refusjonsopplysning, tidsstempel: LocalDateTime) = apply { - refusjonsopplysninger.add(tidsstempel to refusjonsopplysning) - } + private val refusjonsopplysninger = + mutableListOf>() + + fun leggTil(refusjonsopplysning: Refusjonsopplysning, tidsstempel: LocalDateTime) = + apply { + refusjonsopplysninger.add(tidsstempel to refusjonsopplysning) + } private fun sorterteRefusjonsopplysninger() = refusjonsopplysninger - .sortedWith(compareBy({ (tidsstempel, _) -> tidsstempel }, { (_, refusjonsopplysning) -> refusjonsopplysning.fom })) + .sortedWith( + compareBy( + { (tidsstempel, _) -> tidsstempel }, + { (_, refusjonsopplysning) -> refusjonsopplysning.fom }) + ) .map { (_, refusjonsopplysning) -> refusjonsopplysning } - fun build() = Refusjonsopplysninger(emptyList().mergeInnNyeOpplysninger(sorterteRefusjonsopplysninger())) + fun build() = Refusjonsopplysninger( + emptyList().mergeInnNyeOpplysninger( + sorterteRefusjonsopplysninger() + ) + ) } internal fun dto() = RefusjonsopplysningerUtDto( @@ -250,4 +321,4 @@ data class Refusjonsopplysning( avsender = this.avsender.dto(), tidsstempel = this.tidsstempel ) -} \ 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 6e3c4e4445..531d26b57c 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 @@ -25,9 +25,17 @@ class Saksbehandler internal constructor( val overstyrtInntekt: Inntektsopplysning?, tidsstempel: LocalDateTime ) : Inntektsopplysning(id, hendelseId, dato, beløp, tidsstempel) { - constructor(dato: LocalDate, hendelseId: UUID, beløp: Inntekt, forklaring: String, subsumsjon: Subsumsjon?, tidsstempel: LocalDateTime) : this(UUID.randomUUID(), dato, hendelseId, beløp, forklaring, subsumsjon, null, tidsstempel) + constructor( + dato: LocalDate, + hendelseId: UUID, + beløp: Inntekt, + forklaring: String, + subsumsjon: Subsumsjon?, + tidsstempel: LocalDateTime + ) : this(UUID.randomUUID(), dato, hendelseId, beløp, forklaring, subsumsjon, null, tidsstempel) - override fun gjenbrukbarInntekt(beløp: Inntekt?) = overstyrtInntekt?.gjenbrukbarInntekt(beløp ?: this.beløp) + override fun gjenbrukbarInntekt(beløp: Inntekt?) = + overstyrtInntekt?.gjenbrukbarInntekt(beløp ?: this.beløp) override fun blirOverstyrtAv(ny: Inntektsopplysning): Inntektsopplysning { return ny.overstyrer(this) @@ -40,49 +48,77 @@ class Saksbehandler internal constructor( override fun overstyrer(gammel: SkjønnsmessigFastsatt) = kopierMed(gammel) private fun kopierMed(overstyrtInntekt: Inntektsopplysning) = - Saksbehandler(id, dato, hendelseId, beløp, forklaring, subsumsjon, overstyrtInntekt, tidsstempel) + Saksbehandler( + id, + dato, + hendelseId, + beløp, + forklaring, + subsumsjon, + overstyrtInntekt, + tidsstempel + ) override fun erSamme(other: Inntektsopplysning) = other is Saksbehandler && this.dato == other.dato && this.beløp == other.beløp - override fun subsumerSykepengegrunnlag(subsumsjonslogg: Subsumsjonslogg, organisasjonsnummer: String, startdatoArbeidsforhold: LocalDate?) { - if(subsumsjon == null) return + override fun subsumerSykepengegrunnlag( + subsumsjonslogg: Subsumsjonslogg, + organisasjonsnummer: String, + startdatoArbeidsforhold: LocalDate? + ) { + if (subsumsjon == null) return requireNotNull(forklaring) { "Det skal være en forklaring fra saksbehandler ved overstyring av inntekt" } if (subsumsjon.paragraf == Paragraf.PARAGRAF_8_28.ref && subsumsjon.ledd == Ledd.LEDD_3.nummer && subsumsjon.bokstav == Bokstav.BOKSTAV_B.ref.toString() ) { requireNotNull(startdatoArbeidsforhold) { "Fant ikke aktivt arbeidsforhold for skjæringstidspunktet i arbeidsforholdshistorikken" } - subsumsjonslogg.logg(`§ 8-28 ledd 3 bokstav b`( - organisasjonsnummer = organisasjonsnummer, - startdatoArbeidsforhold = startdatoArbeidsforhold, - overstyrtInntektFraSaksbehandler = mapOf("dato" to dato, "beløp" to beløp.månedlig), - skjæringstidspunkt = dato, - forklaring = forklaring, - grunnlagForSykepengegrunnlagÅrlig = fastsattÅrsinntekt().årlig, - grunnlagForSykepengegrunnlagMånedlig = fastsattÅrsinntekt().månedlig - )) + subsumsjonslogg.logg( + `§ 8-28 ledd 3 bokstav b`( + organisasjonsnummer = organisasjonsnummer, + startdatoArbeidsforhold = startdatoArbeidsforhold, + overstyrtInntektFraSaksbehandler = mapOf( + "dato" to dato, + "beløp" to beløp.månedlig + ), + skjæringstidspunkt = dato, + forklaring = forklaring, + grunnlagForSykepengegrunnlagÅrlig = fastsattÅrsinntekt().årlig, + grunnlagForSykepengegrunnlagMånedlig = fastsattÅrsinntekt().månedlig + ) + ) } else if (subsumsjon.paragraf == Paragraf.PARAGRAF_8_28.ref && subsumsjon.ledd == Ledd.LEDD_3.nummer && subsumsjon.bokstav == Bokstav.BOKSTAV_C.ref.toString() ) { - subsumsjonslogg.logg(`§ 8-28 ledd 3 bokstav c`( - organisasjonsnummer = organisasjonsnummer, - overstyrtInntektFraSaksbehandler = mapOf("dato" to dato, "beløp" to beløp.månedlig), - skjæringstidspunkt = dato, - forklaring = forklaring, - grunnlagForSykepengegrunnlagÅrlig = fastsattÅrsinntekt().årlig, - grunnlagForSykepengegrunnlagMånedlig = fastsattÅrsinntekt().månedlig - )) + subsumsjonslogg.logg( + `§ 8-28 ledd 3 bokstav c`( + organisasjonsnummer = organisasjonsnummer, + overstyrtInntektFraSaksbehandler = mapOf( + "dato" to dato, + "beløp" to beløp.månedlig + ), + skjæringstidspunkt = dato, + forklaring = forklaring, + grunnlagForSykepengegrunnlagÅrlig = fastsattÅrsinntekt().årlig, + grunnlagForSykepengegrunnlagMånedlig = fastsattÅrsinntekt().månedlig + ) + ) } else if (subsumsjon.paragraf == Paragraf.PARAGRAF_8_28.ref && subsumsjon.ledd == Ledd.LEDD_5.nummer) { - subsumsjonslogg.logg(`§ 8-28 ledd 5`( - organisasjonsnummer = organisasjonsnummer, - overstyrtInntektFraSaksbehandler = mapOf("dato" to dato, "beløp" to beløp.månedlig), - skjæringstidspunkt = dato, - forklaring = forklaring, - grunnlagForSykepengegrunnlagÅrlig = fastsattÅrsinntekt().årlig, - grunnlagForSykepengegrunnlagMånedlig = fastsattÅrsinntekt().månedlig - )) + subsumsjonslogg.logg( + `§ 8-28 ledd 5`( + organisasjonsnummer = organisasjonsnummer, + overstyrtInntektFraSaksbehandler = mapOf( + "dato" to dato, + "beløp" to beløp.månedlig + ), + skjæringstidspunkt = dato, + forklaring = forklaring, + grunnlagForSykepengegrunnlagÅrlig = fastsattÅrsinntekt().årlig, + grunnlagForSykepengegrunnlagMånedlig = fastsattÅrsinntekt().månedlig + ) + ) } } @@ -99,7 +135,10 @@ class Saksbehandler internal constructor( ) internal companion object { - fun gjenopprett(dto: InntektsopplysningInnDto.SaksbehandlerDto, inntekter: Map) = + fun gjenopprett( + dto: InntektsopplysningInnDto.SaksbehandlerDto, + inntekter: Map + ) = Saksbehandler( id = dto.id, hendelseId = dto.hendelseId, @@ -111,4 +150,4 @@ class Saksbehandler internal constructor( overstyrtInntekt = inntekter.getValue(dto.overstyrtInntekt) ) } -} \ No newline at end of file +} 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 afc2349ecd..2834debf66 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 @@ -1,5 +1,8 @@ package no.nav.helse.person.inntekt +import java.time.LocalDate +import java.time.LocalDateTime +import java.util.UUID import no.nav.helse.dto.AnsattPeriodeDto import no.nav.helse.dto.deserialisering.InntektsopplysningInnDto import no.nav.helse.dto.serialisering.InntektsopplysningUtDto @@ -11,9 +14,6 @@ import no.nav.helse.person.inntekt.AnsattPeriode.Companion.harArbeidsforholdNyer import no.nav.helse.person.inntekt.Skatteopplysning.Companion.sisteMåneder import no.nav.helse.person.inntekt.Skatteopplysning.Companion.subsumsjonsformat import no.nav.helse.økonomi.Inntekt -import java.time.LocalDate -import java.time.LocalDateTime -import java.util.* internal class SkattSykepengegrunnlag private constructor( id: UUID, @@ -32,7 +32,11 @@ internal class SkattSykepengegrunnlag private constructor( id = dto.id, hendelseId = dto.hendelseId, dato = dto.dato, - inntektsopplysninger = dto.inntektsopplysninger.map { Skatteopplysning.gjenopprett(it) }, + inntektsopplysninger = dto.inntektsopplysninger.map { + Skatteopplysning.gjenopprett( + it + ) + }, ansattPerioder = dto.ansattPerioder.map { AnsattPeriode.gjenopprett(it) }, tidsstempel = dto.tidsstempel ) @@ -46,7 +50,15 @@ internal class SkattSykepengegrunnlag private constructor( inntektsopplysninger: List, ansattPerioder: List, tidsstempel: LocalDateTime = LocalDateTime.now() - ) : this(id, hendelseId, dato, Skatteopplysning.omregnetÅrsinntekt(inntektsopplysninger), inntektsopplysninger, ansattPerioder, tidsstempel) + ) : this( + id, + hendelseId, + dato, + Skatteopplysning.omregnetÅrsinntekt(inntektsopplysninger), + inntektsopplysninger, + ansattPerioder, + tidsstempel + ) internal constructor( hendelseId: UUID, @@ -54,7 +66,14 @@ internal class SkattSykepengegrunnlag private constructor( inntektsopplysninger: List, ansattPerioder: List, tidsstempel: LocalDateTime = LocalDateTime.now() - ) : this(UUID.randomUUID(), hendelseId, dato, Skatteopplysning.sisteTreMåneder(dato, inntektsopplysninger), ansattPerioder, tidsstempel) + ) : this( + UUID.randomUUID(), + hendelseId, + dato, + Skatteopplysning.sisteTreMåneder(dato, inntektsopplysninger), + ansattPerioder, + tidsstempel + ) fun kanBrukes(skjæringstidspunkt: LocalDate): Boolean { if (this.dato != skjæringstidspunkt) return false @@ -90,20 +109,28 @@ internal class SkattSykepengegrunnlag private constructor( return ny.overstyrer(this) } - override fun subsumerSykepengegrunnlag(subsumsjonslogg: Subsumsjonslogg, organisasjonsnummer: String, startdatoArbeidsforhold: LocalDate?) { - subsumsjonslogg.logg(`§ 8-28 ledd 3 bokstav a`( - organisasjonsnummer = organisasjonsnummer, - skjæringstidspunkt = dato, - inntekterSisteTreMåneder = inntektsopplysninger.subsumsjonsformat(), - grunnlagForSykepengegrunnlagÅrlig = fastsattÅrsinntekt().årlig, - grunnlagForSykepengegrunnlagMånedlig = fastsattÅrsinntekt().månedlig - )) - subsumsjonslogg.logg(`§ 8-29`( - skjæringstidspunkt = dato, - grunnlagForSykepengegrunnlagÅrlig = fastsattÅrsinntekt().årlig, - inntektsopplysninger = inntektsopplysninger.subsumsjonsformat(), - organisasjonsnummer = organisasjonsnummer - )) + override fun subsumerSykepengegrunnlag( + subsumsjonslogg: Subsumsjonslogg, + organisasjonsnummer: String, + startdatoArbeidsforhold: LocalDate? + ) { + subsumsjonslogg.logg( + `§ 8-28 ledd 3 bokstav a`( + organisasjonsnummer = organisasjonsnummer, + skjæringstidspunkt = dato, + inntekterSisteTreMåneder = inntektsopplysninger.subsumsjonsformat(), + grunnlagForSykepengegrunnlagÅrlig = fastsattÅrsinntekt().årlig, + grunnlagForSykepengegrunnlagMånedlig = fastsattÅrsinntekt().månedlig + ) + ) + subsumsjonslogg.logg( + `§ 8-29`( + skjæringstidspunkt = dato, + grunnlagForSykepengegrunnlagÅrlig = fastsattÅrsinntekt().årlig, + inntektsopplysninger = inntektsopplysninger.subsumsjonsformat(), + organisasjonsnummer = organisasjonsnummer + ) + ) } override fun erSkatteopplysning(): Boolean = true @@ -114,13 +141,15 @@ internal class SkattSykepengegrunnlag private constructor( forklaring: String, oppfylt: Boolean ) = apply { - subsumsjonslogg.logg(`§ 8-15`( - skjæringstidspunkt = dato, - organisasjonsnummer = organisasjonsnummer, - inntekterSisteTreMåneder = inntektsopplysninger.subsumsjonsformat(), - forklaring = forklaring, - oppfylt = oppfylt - )) + subsumsjonslogg.logg( + `§ 8-15`( + skjæringstidspunkt = dato, + organisasjonsnummer = organisasjonsnummer, + inntekterSisteTreMåneder = inntektsopplysninger.subsumsjonsformat(), + forklaring = forklaring, + oppfylt = oppfylt + ) + ) } override fun erSamme(other: Inntektsopplysning): Boolean { @@ -138,6 +167,7 @@ internal class SkattSykepengegrunnlag private constructor( tidsstempel = this.tidsstempel ) } + override fun dto() = InntektsopplysningUtDto.SkattSykepengegrunnlagDto( id = id, @@ -153,14 +183,23 @@ class AnsattPeriode( private val ansattFom: LocalDate, private val ansattTom: LocalDate? ) { - fun gjelder(skjæringstidspunkt: LocalDate) = ansattFom <= skjæringstidspunkt && (ansattTom == null || ansattTom >= skjæringstidspunkt) + fun gjelder(skjæringstidspunkt: LocalDate) = + ansattFom <= skjæringstidspunkt && (ansattTom == null || ansattTom >= skjæringstidspunkt) + fun harArbeidetMindreEnn(skjæringstidspunkt: LocalDate, antallMåneder: Int) = ansattFom >= skjæringstidspunkt.withDayOfMonth(1).minusMonths(antallMåneder.toLong()) + companion object { - fun List.harArbeidsforholdNyereEnn(skjæringstidspunkt: LocalDate, antallMåneder: Int) = + fun List.harArbeidsforholdNyereEnn( + skjæringstidspunkt: LocalDate, + antallMåneder: Int + ) = harArbeidetMindreEnn(skjæringstidspunkt, antallMåneder).isNotEmpty() - private fun List.harArbeidetMindreEnn(skjæringstidspunkt: LocalDate, antallMåneder: Int) = this + private fun List.harArbeidetMindreEnn( + skjæringstidspunkt: LocalDate, + antallMåneder: Int + ) = this .filter { it.harArbeidetMindreEnn(skjæringstidspunkt, antallMåneder) } .filter { it.gjelder(skjæringstidspunkt) } @@ -171,4 +210,4 @@ class AnsattPeriode( } internal fun dto() = AnsattPeriodeDto(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 9cb9599ec6..ff826a3351 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 @@ -25,6 +25,7 @@ data class Skatteopplysning( NÆRINGSINNTEKT, PENSJON_ELLER_TRYGD, YTELSE_FRA_OFFENTLIGE; + fun somStreng() = when (this) { LØNNSINNTEKT -> "LØNNSINNTEKT" NÆRINGSINNTEKT -> "NÆRINGSINNTEKT" @@ -34,7 +35,11 @@ data class Skatteopplysning( } companion object { - fun sisteMåneder(dato: LocalDate, antallMåneder: Int, inntektsopplysninger: List) = + fun sisteMåneder( + dato: LocalDate, + antallMåneder: Int, + inntektsopplysninger: List + ) = inntektsopplysninger.filter { it.måned.isWithinRangeOf(dato, antallMåneder.toLong()) } fun sisteTreMåneder(dato: LocalDate, inntektsopplysninger: List) = 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 a31d84a6c6..b151cd50c2 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" @@ -15,13 +15,21 @@ class SkjønnsmessigFastsatt internal constructor( val overstyrtInntekt: Inntektsopplysning?, tidsstempel: LocalDateTime ) : Inntektsopplysning(id, hendelseId, dato, beløp, tidsstempel) { - constructor(dato: LocalDate, hendelseId: UUID, beløp: Inntekt, tidsstempel: LocalDateTime) : this(UUID.randomUUID(), dato, hendelseId, beløp, null, tidsstempel) + constructor( + dato: LocalDate, + hendelseId: UUID, + beløp: Inntekt, + tidsstempel: LocalDateTime + ) : this(UUID.randomUUID(), dato, hendelseId, beløp, null, tidsstempel) override fun omregnetÅrsinntekt(): Inntektsopplysning { return checkNotNull(overstyrtInntekt) { "overstyrt inntekt kan ikke være null" }.omregnetÅrsinntekt() } - override fun gjenbrukbarInntekt(beløp: Inntekt?) = checkNotNull(overstyrtInntekt) { "overstyrt inntekt kan ikke være null" }.gjenbrukbarInntekt(beløp) + override fun gjenbrukbarInntekt(beløp: Inntekt?) = + checkNotNull(overstyrtInntekt) { "overstyrt inntekt kan ikke være null" }.gjenbrukbarInntekt( + beløp + ) override fun blirOverstyrtAv(ny: Inntektsopplysning): Inntektsopplysning { return ny.overstyrer(this) @@ -38,6 +46,7 @@ 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 dto() = InntektsopplysningUtDto.SkjønnsmessigFastsattDto( id = id, @@ -49,7 +58,10 @@ class SkjønnsmessigFastsatt internal constructor( ) internal companion object { - fun gjenopprett(dto: InntektsopplysningInnDto.SkjønnsmessigFastsattDto, inntekter: Map) = + fun gjenopprett( + dto: InntektsopplysningInnDto.SkjønnsmessigFastsattDto, + inntekter: Map + ) = SkjønnsmessigFastsatt( id = dto.id, hendelseId = dto.hendelseId, @@ -59,4 +71,4 @@ class SkjønnsmessigFastsatt internal constructor( overstyrtInntekt = inntekter.getValue(dto.overstyrtInntekt) ) } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/person/refusjon/Refusjonsservit\303\270r.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/person/refusjon/Refusjonsservit\303\270r.kt" index 78d607b3f5..8e1f7b25bb 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/person/refusjon/Refusjonsservit\303\270r.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/person/refusjon/Refusjonsservit\303\270r.kt" @@ -15,15 +15,18 @@ internal class Refusjonsservitør(input: Map = empt internal operator fun get(dato: LocalDate) = refusjonsrester[dato] private fun leggTil(dato: LocalDate, beløpstidslinje: Beløpstidslinje) { - refusjonstidslinjer[dato] = refusjonstidslinjer.getOrDefault(dato, Beløpstidslinje()) + beløpstidslinje - refusjonsrester[dato] = refusjonsrester.getOrDefault(dato, Beløpstidslinje()) + beløpstidslinje + refusjonstidslinjer[dato] = + refusjonstidslinjer.getOrDefault(dato, Beløpstidslinje()) + beløpstidslinje + refusjonsrester[dato] = + refusjonsrester.getOrDefault(dato, Beløpstidslinje()) + beløpstidslinje } // Serverer refusjonstidslinjer til perioder internal fun servér(startdato: LocalDate, periode: Periode): Beløpstidslinje { val søkevindu = startdato til periode.endInclusive val aktuelle = refusjonstidslinjer.filterKeys { it in søkevindu } - val refusjonstidslinje = aktuelle.values.fold(Beløpstidslinje(), Beløpstidslinje::plus).fyll(periode.endInclusive) + val refusjonstidslinje = aktuelle.values.fold(Beløpstidslinje(), Beløpstidslinje::plus) + .fyll(periode.endInclusive) aktuelle.keys.forEach { dato -> if (!refusjonsrester.containsKey(dato)) return@forEach val nyVerdi = refusjonsrester.getValue(dato) - periode @@ -41,7 +44,9 @@ internal class Refusjonsservitør(input: Map = empt } } - internal fun dto() = RefusjonsservitørDto(refusjonsrester.mapValues { (_, beløpstidslinje) -> beløpstidslinje.dto() }) + internal fun dto() = + RefusjonsservitørDto(refusjonsrester.mapValues { (_, beløpstidslinje) -> beløpstidslinje.dto() }) + internal fun view() = RefusjonsservitørView(refusjonsrester.toMap()) internal companion object { @@ -52,18 +57,26 @@ internal class Refusjonsservitør(input: Map = empt return Refusjonsservitør(mapOf(refusjonstidslinje.first().dato to refusjonstidslinje)) } - internal fun fra(refusjonstidslinje: Beløpstidslinje, startdatoer: Collection): Refusjonsservitør { + internal fun fra( + refusjonstidslinje: Beløpstidslinje, + startdatoer: Collection + ): Refusjonsservitør { if (refusjonstidslinje.isEmpty() || startdatoer.isEmpty()) return Refusjonsservitør() val sorterteStartdatoer = startdatoer.toSortedSet() - val sisteBit = sorterteStartdatoer.last() to refusjonstidslinje.fraOgMed(sorterteStartdatoer.last()) - val refusjonsopplysningerPerStartdato = sorterteStartdatoer.zipWithNext { nåværende, neste -> - nåværende to refusjonstidslinje.subset(nåværende til neste.forrigeDag) - }.toMap() + sisteBit + val sisteBit = + sorterteStartdatoer.last() to refusjonstidslinje.fraOgMed(sorterteStartdatoer.last()) + val refusjonsopplysningerPerStartdato = + sorterteStartdatoer.zipWithNext { nåværende, neste -> + nåværende to refusjonstidslinje.subset(nåværende til neste.forrigeDag) + }.toMap() + sisteBit return Refusjonsservitør(refusjonsopplysningerPerStartdato) } - internal fun gjenopprett(dto: RefusjonsservitørDto) = Refusjonsservitør(dto.refusjonstidslinjer.mapValues { (_, beløpstidslinje) -> Beløpstidslinje.gjenopprett(beløpstidslinje) }.toSortedMap()) + internal fun gjenopprett(dto: RefusjonsservitørDto) = + Refusjonsservitør(dto.refusjonstidslinjer.mapValues { (_, beløpstidslinje) -> + Beløpstidslinje.gjenopprett(beløpstidslinje) + }.toSortedMap()) } } -data class RefusjonsservitørView(val refusjonstidslinjer: Map) \ No newline at end of file +data class RefusjonsservitørView(val refusjonstidslinjer: Map) 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 59b2abfb84..56ac549b75 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 @@ -53,6 +53,7 @@ sealed class Dag( is SykHelgedag, is Arbeidsgiverdag, is ArbeidsgiverHelgedag -> venstre + is Feriedag, is Permisjonsdag -> when (høyre) { is Sykedag, @@ -60,8 +61,10 @@ sealed class Dag( is SykHelgedag, is Arbeidsgiverdag, is ArbeidsgiverHelgedag -> høyre + else -> venstre } + else -> høyre } } @@ -77,9 +80,15 @@ sealed class Dag( fun gjenopprett(dag: SykdomstidslinjeDagDto): Dag { return when (dag) { is SykdomstidslinjeDagDto.AndreYtelserDto -> AndreYtelser.gjenopprett(dag) - is SykdomstidslinjeDagDto.ArbeidIkkeGjenopptattDagDto -> ArbeidIkkeGjenopptattDag.gjenopprett(dag) + is SykdomstidslinjeDagDto.ArbeidIkkeGjenopptattDagDto -> ArbeidIkkeGjenopptattDag.gjenopprett( + dag + ) + is SykdomstidslinjeDagDto.ArbeidsdagDto -> Arbeidsdag.gjenopprett(dag) - is SykdomstidslinjeDagDto.ArbeidsgiverHelgedagDto -> ArbeidsgiverHelgedag.gjenopprett(dag) + is SykdomstidslinjeDagDto.ArbeidsgiverHelgedagDto -> ArbeidsgiverHelgedag.gjenopprett( + dag + ) + is SykdomstidslinjeDagDto.ArbeidsgiverdagDto -> Arbeidsgiverdag.gjenopprett(dag) is SykdomstidslinjeDagDto.FeriedagDto -> Feriedag.gjenopprett(dag) is SykdomstidslinjeDagDto.ForeldetSykedagDto -> ForeldetSykedag.gjenopprett(dag) @@ -99,7 +108,10 @@ sealed class Dag( internal fun erHelg() = dato.erHelg() - internal fun problem(other: Dag, melding: String = "Kan ikke velge mellom ${name()} fra $kilde og ${other.name()} fra ${other.kilde}."): Dag = + internal fun problem( + other: Dag, + melding: String = "Kan ikke velge mellom ${name()} fra $kilde og ${other.name()} fra ${other.kilde}." + ): Dag = ProblemDag(dato, kilde, other.kilde, melding) override fun equals(other: Any?) = @@ -107,9 +119,11 @@ sealed class Dag( protected open fun equals(other: Dag) = this.dato == other.dato && this.kilde == other.kilde - protected open fun funksjoneltLik(other: Dag) = this.dato == other.dato && this::class == other::class + protected open fun funksjoneltLik(other: Dag) = + this.dato == other.dato && this::class == other::class - protected fun sammeGrad(økonomi: Økonomi, other: Økonomi) = økonomi.brukAvrundetGrad { it } == other.brukAvrundetGrad { it } + protected fun sammeGrad(økonomi: Økonomi, other: Økonomi) = + økonomi.brukAvrundetGrad { it } == other.brukAvrundetGrad { it } override fun hashCode() = dato.hashCode() * 37 + kilde.hashCode() * 41 + this::class.hashCode() @@ -119,7 +133,9 @@ sealed class Dag( dato: LocalDate, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.UkjentDagDto(dato, kilde) + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.UkjentDagDto(dato, kilde) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.UkjentDagDto): UkjentDag { return UkjentDag( @@ -134,7 +150,9 @@ sealed class Dag( dato: LocalDate, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.ArbeidsdagDto(dato, kilde) + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.ArbeidsdagDto(dato, kilde) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.ArbeidsdagDto): Arbeidsdag { return Arbeidsdag( @@ -150,8 +168,12 @@ sealed class Dag( val økonomi: Økonomi, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun funksjoneltLik(other: Dag) = dato == other.dato && other is Arbeidsgiverdag && sammeGrad(økonomi, other.økonomi) - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.ArbeidsgiverdagDto(dato, kilde, økonomi.dto().grad) + override fun funksjoneltLik(other: Dag) = + dato == other.dato && other is Arbeidsgiverdag && sammeGrad(økonomi, other.økonomi) + + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.ArbeidsgiverdagDto(dato, kilde, økonomi.dto().grad) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.ArbeidsgiverdagDto): Arbeidsgiverdag { return Arbeidsgiverdag( @@ -167,7 +189,9 @@ sealed class Dag( dato: LocalDate, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.FeriedagDto(dato, kilde) + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.FeriedagDto(dato, kilde) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.FeriedagDto): Feriedag { return Feriedag( @@ -182,7 +206,9 @@ sealed class Dag( dato: LocalDate, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.ArbeidIkkeGjenopptattDagDto(dato, kilde) + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.ArbeidIkkeGjenopptattDagDto(dato, kilde) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.ArbeidIkkeGjenopptattDagDto): ArbeidIkkeGjenopptattDag { return ArbeidIkkeGjenopptattDag( @@ -197,7 +223,9 @@ sealed class Dag( dato: LocalDate, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.FriskHelgedagDto(dato, kilde) + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.FriskHelgedagDto(dato, kilde) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.FriskHelgedagDto): FriskHelgedag { return FriskHelgedag( @@ -213,8 +241,12 @@ sealed class Dag( val økonomi: Økonomi, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun funksjoneltLik(other: Dag) = dato == other.dato && other is ArbeidsgiverHelgedag && sammeGrad(økonomi, other.økonomi) - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.ArbeidsgiverHelgedagDto(dato, kilde, økonomi.dto().grad) + override fun funksjoneltLik(other: Dag) = + dato == other.dato && other is ArbeidsgiverHelgedag && sammeGrad(økonomi, other.økonomi) + + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.ArbeidsgiverHelgedagDto(dato, kilde, økonomi.dto().grad) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.ArbeidsgiverHelgedagDto): ArbeidsgiverHelgedag { return ArbeidsgiverHelgedag( @@ -231,8 +263,12 @@ sealed class Dag( val økonomi: Økonomi, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun funksjoneltLik(other: Dag) = dato == other.dato && other is Sykedag && sammeGrad(økonomi, other.økonomi) - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.SykedagDto(dato, kilde, økonomi.dto().grad) + override fun funksjoneltLik(other: Dag) = + dato == other.dato && other is Sykedag && sammeGrad(økonomi, other.økonomi) + + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.SykedagDto(dato, kilde, økonomi.dto().grad) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.SykedagDto): Sykedag { return Sykedag( @@ -249,8 +285,12 @@ sealed class Dag( val økonomi: Økonomi, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun funksjoneltLik(other: Dag) = dato == other.dato && other is ForeldetSykedag && sammeGrad(økonomi, other.økonomi) - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.ForeldetSykedagDto(dato, kilde, økonomi.dto().grad) + override fun funksjoneltLik(other: Dag) = + dato == other.dato && other is ForeldetSykedag && sammeGrad(økonomi, other.økonomi) + + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.ForeldetSykedagDto(dato, kilde, økonomi.dto().grad) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.ForeldetSykedagDto): ForeldetSykedag { return ForeldetSykedag( @@ -267,8 +307,12 @@ sealed class Dag( val økonomi: Økonomi, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun funksjoneltLik(other: Dag) = dato == other.dato && other is SykHelgedag && sammeGrad(økonomi, other.økonomi) - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.SykHelgedagDto(dato, kilde, økonomi.dto().grad) + override fun funksjoneltLik(other: Dag) = + dato == other.dato && other is SykHelgedag && sammeGrad(økonomi, other.økonomi) + + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.SykHelgedagDto(dato, kilde, økonomi.dto().grad) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.SykHelgedagDto): SykHelgedag { return SykHelgedag( @@ -285,8 +329,12 @@ sealed class Dag( val økonomi: Økonomi, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun funksjoneltLik(other: Dag) = dato == other.dato && other is SykedagNav && sammeGrad(økonomi, other.økonomi) - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.SykedagNavDto(dato, kilde, økonomi.dto().grad) + override fun funksjoneltLik(other: Dag) = + dato == other.dato && other is SykedagNav && sammeGrad(økonomi, other.økonomi) + + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.SykedagNavDto(dato, kilde, økonomi.dto().grad) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.SykedagNavDto): SykedagNav { return SykedagNav( @@ -302,7 +350,9 @@ sealed class Dag( dato: LocalDate, kilde: Hendelseskilde ) : Dag(dato, kilde) { - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.PermisjonsdagDto(dato, kilde) + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.PermisjonsdagDto(dato, kilde) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.PermisjonsdagDto): Permisjonsdag { return Permisjonsdag( @@ -319,9 +369,19 @@ sealed class Dag( val other: Hendelseskilde, val melding: String ) : Dag(dato, kilde) { - internal constructor(dato: LocalDate, kilde: Hendelseskilde, melding: String) : this(dato, kilde, kilde, melding) - override fun funksjoneltLik(other: Dag) = dato == other.dato && other is ProblemDag && melding == other.melding - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.ProblemDagDto(dato, kilde, other.dto(), melding) + internal constructor(dato: LocalDate, kilde: Hendelseskilde, melding: String) : this( + dato, + kilde, + kilde, + melding + ) + + override fun funksjoneltLik(other: Dag) = + dato == other.dato && other is ProblemDag && melding == other.melding + + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.ProblemDagDto(dato, kilde, other.dto(), melding) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.ProblemDagDto): ProblemDag { return ProblemDag( @@ -352,6 +412,7 @@ sealed class Dag( Dagpenger -> YtelseDto.Dagpenger } } + internal fun tilEksternBegrunnelse(): PersonObserver.Utbetalingsdag.EksternBegrunnelseDTO { return when (ytelse) { Foreldrepenger -> AndreYtelserForeldrepenger @@ -363,8 +424,13 @@ sealed class Dag( Dagpenger -> AndreYtelserDagpenger } } - override fun funksjoneltLik(other: Dag) = dato == other.dato && other is AndreYtelser && ytelse == other.ytelse - override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = SykdomstidslinjeDagDto.AndreYtelserDto(dato, kilde, ytelse.dto()) + + override fun funksjoneltLik(other: Dag) = + dato == other.dato && other is AndreYtelser && ytelse == other.ytelse + + override fun dto(dato: LocalDate, kilde: HendelseskildeDto) = + SykdomstidslinjeDagDto.AndreYtelserDto(dato, kilde, ytelse.dto()) + internal companion object { fun gjenopprett(dto: SykdomstidslinjeDagDto.AndreYtelserDto): AndreYtelser { return AndreYtelser( diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Skj\303\246ringstidspunkt.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Skj\303\246ringstidspunkt.kt" index 613ade4b37..d68c652aa5 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Skj\303\246ringstidspunkt.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/sykdomstidslinje/Skj\303\246ringstidspunkt.kt" @@ -22,6 +22,7 @@ internal class Skjæringstidspunkt(private val personsykdomstidslinje: Sykdomsti fun beregnSkjæringstidspunkt(vedtaksperiode: Periode): LocalDate { return beregnSkjæringstidspunktOrNull(vedtaksperiode) ?: vedtaksperiode.start } + fun beregnSkjæringstidspunktOrNull(vedtaksperiode: Periode): LocalDate? { return finnSkjæringstidspunkt(vedtaksperiode)?.skjæringstidspunkt } @@ -62,7 +63,10 @@ internal class Skjæringstidspunkt(private val personsykdomstidslinje: Sykdomsti } } - private fun traverserTidslinjenBaklengs(søkeperiode: Periode, looper: (Søkekontekst, Dag, LocalDate) -> Søkekontekst): Søkekontekst { + private fun traverserTidslinjenBaklengs( + søkeperiode: Periode, + looper: (Søkekontekst, Dag, LocalDate) -> Søkekontekst + ): Søkekontekst { var gjeldendeDag = minOf(søkeperiode.endInclusive, personsykdomstidslinje.sisteDag()) var søkekontekst = Søkekontekst(Søketilstand.HarIkkeFunnetSkjæringstidspunkt, null) while (gjeldendeDag >= personsykdomstidslinje.førsteDag() && søkekontekst.skalFortsetteÅSøke()) { @@ -87,37 +91,60 @@ internal class Skjæringstidspunkt(private val personsykdomstidslinje: Sykdomsti dagen <= søkeperiode.start -> avsluttSøk() else -> tilstand.oppholdsdag(this) } + fun andreYtelser(dagen: LocalDate): Søkekontekst = tilstand.andreYtelser(this, dagen) - fun potensieltSkjæringstidspunkt(dagen: LocalDate): Søkekontekst = tilstand.potensieltSkjæringstidspunkt(this, dagen) - fun potensieltGyldigOppholdsperiode(dagen: LocalDate): Søkekontekst = tilstand.potensieltGyldigOppholdsperiode(this, dagen) + fun potensieltSkjæringstidspunkt(dagen: LocalDate): Søkekontekst = + tilstand.potensieltSkjæringstidspunkt(this, dagen) + + fun potensieltGyldigOppholdsperiode(dagen: LocalDate): Søkekontekst = + tilstand.potensieltGyldigOppholdsperiode(this, dagen) } private sealed interface Søketilstand { fun oppholdsdag(kontekst: Søkekontekst) = kontekst.avsluttSøk() - fun potensieltSkjæringstidspunkt(kontekst: Søkekontekst, dagen: LocalDate): Søkekontekst = kontekst.copy(tilstand = HarPotensieltSkjæringstidspunkt, skjæringstidspunkt = dagen) + fun potensieltSkjæringstidspunkt(kontekst: Søkekontekst, dagen: LocalDate): Søkekontekst = + kontekst.copy(tilstand = HarPotensieltSkjæringstidspunkt, skjæringstidspunkt = dagen) + // en dag som potensielt kan bygge bro mellom to sykdomsperioder (ferie, andre ytelser) - fun potensieltGyldigOppholdsperiode(kontekst: Søkekontekst, dagen: LocalDate) = kontekst.copy(tilstand = PotensieltGyldigOppholdsperiodeMellomSykdomsperioder) - fun andreYtelser(kontekst: Søkekontekst, dagen: LocalDate) = kontekst.copy(tilstand = AndreYtelser) + fun potensieltGyldigOppholdsperiode(kontekst: Søkekontekst, dagen: LocalDate) = + kontekst.copy(tilstand = PotensieltGyldigOppholdsperiodeMellomSykdomsperioder) + + fun andreYtelser(kontekst: Søkekontekst, dagen: LocalDate) = + kontekst.copy(tilstand = AndreYtelser) data object HarIkkeFunnetSkjæringstidspunkt : Søketilstand { // hopper over friskmelding i halen override fun oppholdsdag(kontekst: Søkekontekst) = kontekst // hopper over ukjent dager så lenge vi ikke har funnet noe som helst - override fun potensieltGyldigOppholdsperiode(kontekst: Søkekontekst, dagen: LocalDate) = kontekst + override fun potensieltGyldigOppholdsperiode(kontekst: Søkekontekst, dagen: LocalDate) = + kontekst } + data object HarPotensieltSkjæringstidspunkt : Søketilstand { - override fun andreYtelser(kontekst: Søkekontekst, dagen: LocalDate) = kontekst.avsluttSøk() + override fun andreYtelser(kontekst: Søkekontekst, dagen: LocalDate) = + kontekst.avsluttSøk() } + data object PotensieltGyldigOppholdsperiodeMellomSykdomsperioder : Søketilstand { - override fun andreYtelser(kontekst: Søkekontekst, dagen: LocalDate) = kontekst.avsluttSøk() + override fun andreYtelser(kontekst: Søkekontekst, dagen: LocalDate) = + kontekst.avsluttSøk() } + data object AndreYtelser : Søketilstand data object HarSkjæringstidspunkt : Søketilstand { - override fun potensieltSkjæringstidspunkt(kontekst: Søkekontekst, dagen: LocalDate): Søkekontekst = kontekst - override fun potensieltGyldigOppholdsperiode(kontekst: Søkekontekst, dagen: LocalDate): Søkekontekst = kontekst + override fun potensieltSkjæringstidspunkt( + kontekst: Søkekontekst, + dagen: LocalDate + ): Søkekontekst = kontekst + + override fun potensieltGyldigOppholdsperiode( + kontekst: Søkekontekst, + dagen: LocalDate + ): Søkekontekst = kontekst + override fun andreYtelser(kontekst: Søkekontekst, dagen: LocalDate) = kontekst } } -} \ No newline at end of file +} 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 6c8d521277..b70518b9ff 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 @@ -25,14 +25,19 @@ internal class Sykdomshistorikk private constructor( fun view() = SykdomshistorikkView(elementer = elementer.map { it.view() }) - internal fun håndter(hendelse: SykdomshistorikkHendelse, aktivitetslogg: IAktivitetslogg): Sykdomstidslinje { + internal fun håndter( + hendelse: SykdomshistorikkHendelse, + aktivitetslogg: IAktivitetslogg + ): Sykdomstidslinje { val s = hendelse.sykdomstidslinje() if (s.count() == 0) return sykdomstidslinje() val m = s.first().kilde.meldingsreferanseId() val nyttElement = Element.opprett(m, s) - val uhåndtertSykdomstidslinje = elementer.uhåndtertSykdomstidslinje(hendelse, aktivitetslogg) ?: return sykdomstidslinje() + val uhåndtertSykdomstidslinje = + elementer.uhåndtertSykdomstidslinje(hendelse, aktivitetslogg) + ?: return sykdomstidslinje() elementer.add(0, nyttElement.merge(this, uhåndtertSykdomstidslinje)) return sykdomstidslinje() } @@ -53,8 +58,12 @@ internal class Sykdomshistorikk private constructor( val beregnetSykdomstidslinje: Sykdomstidslinje = Sykdomstidslinje(), ) : Comparable { - internal fun merge(historikk: Sykdomshistorikk, uhåndtertSykdomstidslinje: Sykdomstidslinje): Element { - val beregnetSykdomstidslinje = mergeTidslinje(historikk.elementer.firstOrNull(), uhåndtertSykdomstidslinje) + internal fun merge( + historikk: Sykdomshistorikk, + uhåndtertSykdomstidslinje: Sykdomstidslinje + ): Element { + val beregnetSykdomstidslinje = + mergeTidslinje(historikk.elementer.firstOrNull(), uhåndtertSykdomstidslinje) return Element( id = this.id, hendelseId = this.hendelseId, @@ -65,31 +74,43 @@ internal class Sykdomshistorikk private constructor( } private fun mergeTidslinje(forrige: Element?, uhåndtertSykdomstidslinje: Sykdomstidslinje) = - forrige?.beregnetSykdomstidslinje?.merge(uhåndtertSykdomstidslinje, Dagturnering.TURNERING::beste) ?: uhåndtertSykdomstidslinje + forrige?.beregnetSykdomstidslinje?.merge( + uhåndtertSykdomstidslinje, + Dagturnering.TURNERING::beste + ) ?: uhåndtertSykdomstidslinje override fun compareTo(other: Element) = this.tidsstempel.compareTo(other.tidsstempel) override fun toString() = beregnetSykdomstidslinje.toString() - internal fun harHåndtert(hendelse: SykdomshistorikkHendelse) = hendelseId == hendelse.sykdomstidslinje().first().kilde.meldingsreferanseId() + internal fun harHåndtert(hendelse: SykdomshistorikkHendelse) = + hendelseId == hendelse.sykdomstidslinje().first().kilde.meldingsreferanseId() internal fun isEmpty(): Boolean = !beregnetSykdomstidslinje.iterator().hasNext() companion object { - internal fun List.uhåndtertSykdomstidslinje(hendelse: SykdomshistorikkHendelse, aktivitetslogg: IAktivitetslogg) : Sykdomstidslinje? { - if (hendelse.sykdomstidslinje().periode() == null) return null // tom sykdomstidslinje - val tidligere = filter { it.harHåndtert(hendelse) }.takeUnless { it.isEmpty() } ?: return hendelse.sykdomstidslinje() // Første gang vi ser hendelsen - val alleredeHåndtertSykdomstidslinje = tidligere.fold(Sykdomstidslinje()) { tidligereHåndtert, element -> - tidligereHåndtert + element.hendelseSykdomstidslinje - } - val uhåndtertSykdomstidslinje = hendelse.sykdomstidslinje() - alleredeHåndtertSykdomstidslinje + internal fun List.uhåndtertSykdomstidslinje( + hendelse: SykdomshistorikkHendelse, + aktivitetslogg: IAktivitetslogg + ): Sykdomstidslinje? { + if (hendelse.sykdomstidslinje() + .periode() == null) return null // tom sykdomstidslinje + val tidligere = filter { it.harHåndtert(hendelse) }.takeUnless { it.isEmpty() } + ?: return hendelse.sykdomstidslinje() // Første gang vi ser hendelsen + val alleredeHåndtertSykdomstidslinje = + tidligere.fold(Sykdomstidslinje()) { tidligereHåndtert, element -> + tidligereHåndtert + element.hendelseSykdomstidslinje + } + val uhåndtertSykdomstidslinje = + hendelse.sykdomstidslinje() - alleredeHåndtertSykdomstidslinje if (uhåndtertSykdomstidslinje.periode() == null) return null // Tom sykdomstidslinje, ikke noe nytt return uhåndtertSykdomstidslinje.also { - aktivitetslogg.info("Legger til bit nummer ${tidligere.size +1 } for ${it.periode()} i sykdomshistorikken") + aktivitetslogg.info("Legger til bit nummer ${tidligere.size + 1} for ${it.periode()} i sykdomshistorikken") } } - internal fun sykdomstidslinje(elementer: List) = elementer.first().beregnetSykdomstidslinje + internal fun sykdomstidslinje(elementer: List) = + elementer.first().beregnetSykdomstidslinje internal fun opprett( meldingsreferanseId: UUID, @@ -105,7 +126,9 @@ internal class Sykdomshistorikk private constructor( historikk: Sykdomshistorikk, perioder: List ): Element { - return Element(beregnetSykdomstidslinje = historikk.sykdomstidslinje().trim(perioder)) + return Element( + beregnetSykdomstidslinje = historikk.sykdomstidslinje().trim(perioder) + ) } internal fun gjenopprett(dto: SykdomshistorikkElementDto): Element { @@ -139,6 +162,7 @@ internal class Sykdomshistorikk private constructor( internal fun dto() = SykdomshistorikkDto( elementer = elementer.map { it.dto() } ) + internal companion object { internal fun gjenopprett(dto: SykdomshistorikkDto): Sykdomshistorikk { 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 4e58e34a32..39fe416fd1 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 @@ -46,12 +46,17 @@ class Sykdomstidslinje private constructor( val låstePerioder get() = _låstePerioder.toList() // Støtte for at perioden er lengre enn vi har dager for (Map-et er sparse) - private val periode: Periode? = periode ?: if (dager.size > 0) Periode(dager.firstKey(), dager.lastKey()) else null + private val periode: Periode? = + periode ?: if (dager.size > 0) Periode(dager.firstKey(), dager.lastKey()) else null internal constructor(dager: Map = emptyMap()) : this(dager.toSortedMap()) internal constructor(original: Sykdomstidslinje, spanningPeriode: Periode) : - this(original.dager, original.periode?.plus(spanningPeriode), original.låstePerioder.toMutableList()) + this( + original.dager, + original.periode?.plus(spanningPeriode), + original.låstePerioder.toMutableList() + ) internal fun periode() = periode internal fun førsteDag() = periode!!.start @@ -66,7 +71,8 @@ class Sykdomstidslinje private constructor( internal fun merge(other: Sykdomstidslinje, beste: BesteStrategy = default): Sykdomstidslinje { val nyeDager = dager.toMutableMap() - other.dager.filter { it.key !in låstePerioder }.forEach { (dato, dag) -> nyeDager.merge(dato, dag, beste) } + other.dager.filter { it.key !in låstePerioder } + .forEach { (dato, dag) -> nyeDager.merge(dato, dag, beste) } return Sykdomstidslinje( nyeDager.toSortedMap(), this.periode?.plus(other.periode) ?: other.periode, @@ -75,11 +81,16 @@ class Sykdomstidslinje private constructor( } internal operator fun plus(other: Sykdomstidslinje) = this.merge(other) - internal operator fun minus(other: Sykdomstidslinje) = Sykdomstidslinje(dager.filterNot { it.key in other.dager.keys }.toSortedMap()) + internal operator fun minus(other: Sykdomstidslinje) = + Sykdomstidslinje(dager.filterNot { it.key in other.dager.keys }.toSortedMap()) + internal operator fun get(dato: LocalDate): Dag = dager[dato] ?: UkjentDag(dato, INGEN) internal fun subset(periode: Periode) = if (this.periode == null || !periode.overlapperMed(this.periode)) Sykdomstidslinje() - else Sykdomstidslinje(dager.subMap(periode.start, periode.endInclusive.nesteDag), this.periode.subset(periode)) + else Sykdomstidslinje( + dager.subMap(periode.start, periode.endInclusive.nesteDag), + this.periode.subset(periode) + ) /** * Uten å utvide tidslinjen @@ -93,7 +104,11 @@ class Sykdomstidslinje private constructor( internal fun trim(perioder: List): Sykdomstidslinje { val forkast = perioder.flatten() val låstePerioder = låstePerioder.filterNot { it in perioder } - return Sykdomstidslinje(dager.filterKeys { it !in forkast }.toSortedMap(), null, låstePerioder.toMutableList()) + return Sykdomstidslinje( + dager.filterKeys { it !in forkast }.toSortedMap(), + null, + låstePerioder.toMutableList() + ) } internal fun erLåst(periode: Periode) = låstePerioder.contains(periode) @@ -111,6 +126,7 @@ class Sykdomstidslinje private constructor( internal fun bekreftErLåst(periode: Periode) { check(låstePerioder.any { it == periode }) { "$periode er ikke låst" } } + internal fun bekreftErÅpen(periode: Periode) { check(låstePerioder.none { it.overlapperMed(periode) }) { "hele eller deler av $periode er låst" } } @@ -131,7 +147,8 @@ class Sykdomstidslinje private constructor( internal fun erRettFør(other: Sykdomstidslinje): Boolean { if (this.dager.isEmpty() || other.dager.isEmpty()) return false - return this.sisteDag().erRettFør(other.førsteDag()) && !this.erSisteDagOppholdsdag() && !other.erFørsteDagOppholdsdag() + return this.sisteDag() + .erRettFør(other.førsteDag()) && !this.erSisteDagOppholdsdag() && !other.erFørsteDagOppholdsdag() } private fun erFørsteDagOppholdsdag() = erOppholdsdagtype(this.førsteDag()) @@ -140,6 +157,7 @@ class Sykdomstidslinje private constructor( is Arbeidsdag, is FriskHelgedag, is ArbeidIkkeGjenopptattDag -> true + else -> false } @@ -186,7 +204,9 @@ class Sykdomstidslinje private constructor( internal companion object { internal fun List.slåSammenForkastedeSykdomstidslinjer() = fold(Sykdomstidslinje()) { acc, sykdomstidslinje -> - val utenProblemdager = Sykdomstidslinje(sykdomstidslinje.dager.filter { (_, dag) -> dag !is ProblemDag }.toSortedMap(), sykdomstidslinje.periode) + val utenProblemdager = + Sykdomstidslinje(sykdomstidslinje.dager.filter { (_, dag) -> dag !is ProblemDag } + .toSortedMap(), sykdomstidslinje.periode) acc.merge(utenProblemdager, replace) } @@ -198,11 +218,26 @@ class Sykdomstidslinje private constructor( .merge(sammenhengendeSykdom) internal fun arbeidsdager(periode: Periode, kilde: Hendelseskilde) = - Sykdomstidslinje(periode.associateWith { if (it.erHelg()) FriskHelgedag(it, kilde) else Arbeidsdag(it, kilde) }) - internal fun ghostdager(periode: Periode) = - Sykdomstidslinje(periode.associateWith { if (it.erHelg()) UkjentDag(it, INGEN) else UkjentDag(it, INGEN) }) + Sykdomstidslinje(periode.associateWith { + if (it.erHelg()) FriskHelgedag( + it, + kilde + ) else Arbeidsdag(it, kilde) + }) - internal fun arbeidsdager(førsteDato: LocalDate, sisteDato: LocalDate, kilde: Hendelseskilde) = + internal fun ghostdager(periode: Periode) = + Sykdomstidslinje(periode.associateWith { + if (it.erHelg()) UkjentDag( + it, + INGEN + ) else UkjentDag(it, INGEN) + }) + + internal fun arbeidsdager( + førsteDato: LocalDate, + sisteDato: LocalDate, + kilde: Hendelseskilde + ) = arbeidsdager(Periode(førsteDato, sisteDato), kilde) internal fun sykedager( @@ -218,7 +253,11 @@ class Sykdomstidslinje private constructor( { it }, { Økonomi.sykdomsgrad(grad).let { økonomi -> - if (it.erHelg()) SykHelgedag(it, økonomi, kilde) else Sykedag(it, økonomi, kilde) + if (it.erHelg()) SykHelgedag( + it, + økonomi, + kilde + ) else Sykedag(it, økonomi, kilde) } } @@ -238,7 +277,11 @@ class Sykdomstidslinje private constructor( { it }, { Økonomi.sykdomsgrad(grad).let { økonomi -> - if (it.erHelg()) SykHelgedag(it, økonomi, kilde) else SykedagNav(it, økonomi, kilde) + if (it.erHelg()) SykHelgedag( + it, + økonomi, + kilde + ) else SykedagNav(it, økonomi, kilde) } } ) @@ -288,7 +331,11 @@ class Sykdomstidslinje private constructor( avskjæringsdato: LocalDate, økonomi: Økonomi, kilde: Hendelseskilde - ) = if (dato < avskjæringsdato) ForeldetSykedag(dato, økonomi, kilde) else Sykedag(dato, økonomi, kilde) + ) = if (dato < avskjæringsdato) ForeldetSykedag(dato, økonomi, kilde) else Sykedag( + dato, + økonomi, + kilde + ) internal fun arbeidsgiverdager( førsteDato: LocalDate, @@ -327,7 +374,11 @@ class Sykdomstidslinje private constructor( ) = Sykdomstidslinje( førsteDato.datesUntil(sisteDato.plusDays(1)) - .collect(toMap({ it }, { ArbeidIkkeGjenopptattDag(it, kilde) })) + .collect( + toMap( + { it }, + { ArbeidIkkeGjenopptattDag(it, kilde) }) + ) ) internal fun permisjonsdager( @@ -348,7 +399,11 @@ class Sykdomstidslinje private constructor( ) = Sykdomstidslinje( førsteDato.datesUntil(sisteDato.plusDays(1)) - .collect(toMap({ it }, { AndreYtelser(it, kilde, ytelse) })) + .collect( + toMap( + { it }, + { AndreYtelser(it, kilde, ytelse) }) + ) ) internal fun problemdager( @@ -359,7 +414,11 @@ class Sykdomstidslinje private constructor( ) = Sykdomstidslinje( førsteDato.datesUntil(sisteDato.plusDays(1)) - .collect(toMap({ it }, { ProblemDag(it, kilde, melding) })) + .collect( + toMap( + { it }, + { ProblemDag(it, kilde, melding) }) + ) ) internal fun gjenopprett(dto: SykdomstidslinjeDto): Sykdomstidslinje { diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/tournament/Dagturnering.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/tournament/Dagturnering.kt index bd9f0a3293..c8224159fc 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/tournament/Dagturnering.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/tournament/Dagturnering.kt @@ -9,7 +9,8 @@ internal class Dagturnering private constructor(private val source: String) { internal val TURNERING = Dagturnering("/dagturnering.csv") } - private val strategies: Map> = readStrategies() + private val strategies: Map> = + readStrategies() fun beste(venstre: Dag, høyre: Dag): Dag { val leftKey = Turneringsnøkkel.fraDag(venstre) @@ -33,7 +34,11 @@ internal class Dagturnering private constructor(private val source: String) { enumValueOf(key) to columnHeaders .zip(row) .filter { (_, cell) -> cell.isNotBlank() } - .associate { (columnHeader, cell) -> enumValueOf(columnHeader) to strategyFor(cell) } + .associate { (columnHeader, cell) -> + enumValueOf(columnHeader) to strategyFor( + cell + ) + } } } @@ -75,8 +80,20 @@ internal object Latest : Strategy() { internal object Impossible : Strategy() { override fun decide(row: Dag, column: Dag): Dag = - throw RuntimeException("Nøklene ${Turneringsnøkkel.fraDag(row)} + ${Turneringsnøkkel.fraDag(column)} er en ugyldig sammenligning") + throw RuntimeException( + "Nøklene ${Turneringsnøkkel.fraDag(row)} + ${ + Turneringsnøkkel.fraDag( + column + ) + } er en ugyldig sammenligning" + ) override fun decideInverse(row: Dag, column: Dag) = - throw RuntimeException("Nøklene ${Turneringsnøkkel.fraDag(row)} + ${Turneringsnøkkel.fraDag(column)} er en ugyldig sammenligning") + throw RuntimeException( + "Nøklene ${Turneringsnøkkel.fraDag(row)} + ${ + Turneringsnøkkel.fraDag( + column + ) + } er en ugyldig sammenligning" + ) } 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 7d72c167c7..b6f019332e 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 @@ -38,7 +38,8 @@ internal class Feriepengeutbetaling private constructor( var avstemmingsnøkkel: Long? = null companion object { - fun List.gjelderFeriepengeutbetaling(hendelse: UtbetalingHendelse) = any { hendelse.fagsystemId == it.oppdrag.fagsystemId || hendelse.fagsystemId == it.personoppdrag.fagsystemId } + fun List.gjelderFeriepengeutbetaling(hendelse: UtbetalingHendelse) = + any { hendelse.fagsystemId == it.oppdrag.fagsystemId || hendelse.fagsystemId == it.personoppdrag.fagsystemId } internal fun gjenopprett(alder: Alder, dto: FeriepengeInnDto): Feriepengeutbetaling { return Feriepengeutbetaling( @@ -65,13 +66,22 @@ internal class Feriepengeutbetaling private constructor( personoppdrag = personoppdrag ) - fun håndter(utbetalingHendelse: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg, organisasjonsnummer: String, person: Person) { - if (utbetalingHendelse.utbetalingId != this.utbetalingId || utbetalingHendelse.fagsystemId !in setOf(oppdrag.fagsystemId, personoppdrag.fagsystemId)) return + fun håndter( + utbetalingHendelse: UtbetalingHendelse, + aktivitetslogg: IAktivitetslogg, + organisasjonsnummer: String, + person: Person + ) { + if (utbetalingHendelse.utbetalingId != this.utbetalingId || utbetalingHendelse.fagsystemId !in setOf( + oppdrag.fagsystemId, + personoppdrag.fagsystemId + )) return aktivitetslogg.info("Behandler svar fra Oppdrag/UR/spenn for feriepenger") when (utbetalingHendelse.status) { Oppdragstatus.OVERFØRT, - Oppdragstatus.AKSEPTERT -> { } // all is good + Oppdragstatus.AKSEPTERT -> { + } // all is good Oppdragstatus.AKSEPTERT_MED_FEIL -> aktivitetslogg.varsel(RV_UT_2) Oppdragstatus.AVVIST, Oppdragstatus.FEIL -> aktivitetslogg.info("Utbetaling feilet med status ${utbetalingHendelse.status}. Feilmelding fra Oppdragsystemet: ${utbetalingHendelse.melding}") @@ -86,8 +96,12 @@ internal class Feriepengeutbetaling private constructor( person.feriepengerUtbetalt( PersonObserver.FeriepengerUtbetaltEvent( organisasjonsnummer = organisasjonsnummer, - arbeidsgiverOppdrag = PersonObserver.FeriepengerUtbetaltEvent.OppdragEventDetaljer.mapOppdrag(oppdrag), - personOppdrag = PersonObserver.FeriepengerUtbetaltEvent.OppdragEventDetaljer.mapOppdrag(personoppdrag) + arbeidsgiverOppdrag = PersonObserver.FeriepengerUtbetaltEvent.OppdragEventDetaljer.mapOppdrag( + oppdrag + ), + personOppdrag = PersonObserver.FeriepengerUtbetaltEvent.OppdragEventDetaljer.mapOppdrag( + personoppdrag + ) ) ) @@ -105,7 +119,11 @@ internal class Feriepengeutbetaling private constructor( ) } - private fun lagreInformasjon(hendelse: UtbetalingHendelse, aktivitetslogg: IAktivitetslogg, gikkBra: Boolean) { + private fun lagreInformasjon( + hendelse: UtbetalingHendelse, + aktivitetslogg: IAktivitetslogg, + gikkBra: Boolean + ) { overføringstidspunkt = hendelse.overføringstidspunkt avstemmingsnøkkel = hendelse.avstemmingsnøkkel aktivitetslogg.info("Data for feriepenger fra Oppdrag/UR: tidspunkt: $overføringstidspunkt, avstemmingsnøkkel $avstemmingsnøkkel og utbetalt ok: ${if (gikkBra) "ja" else "nei"}") @@ -129,20 +147,28 @@ internal class Feriepengeutbetaling private constructor( private val utbetalingshistorikkForFeriepenger: UtbetalingshistorikkForFeriepenger, private val tidligereFeriepengeutbetalinger: List ) { - private fun oppdrag(aktivitetslogg: IAktivitetslogg, fagområde: Fagområde, forrigeOppdrag: Oppdrag?, beløp: Int): Oppdrag { + private fun oppdrag( + aktivitetslogg: IAktivitetslogg, + fagområde: Fagområde, + forrigeOppdrag: Oppdrag?, + beløp: Int + ): Oppdrag { val (klassekode, mottaker) = when (fagområde) { Fagområde.SykepengerRefusjon -> Klassekode.RefusjonFeriepengerIkkeOpplysningspliktig to orgnummer Fagområde.Sykepenger -> Klassekode.SykepengerArbeidstakerFeriepenger to personidentifikator.toString() } - val fagsystemId = forrigeOppdrag?.fagsystemId ?: genererUtbetalingsreferanse(UUID.randomUUID()) + val fagsystemId = + forrigeOppdrag?.fagsystemId ?: genererUtbetalingsreferanse(UUID.randomUUID()) val nyttOppdrag = Oppdrag( mottaker = mottaker, fagområde = fagområde, linjer = listOf( Utbetalingslinje( - fom = utbetalingshistorikkForFeriepenger.opptjeningsår.plusYears(1).atMonth(Month.MAY).atDay(1), - tom = utbetalingshistorikkForFeriepenger.opptjeningsår.plusYears(1).atMonth(Month.MAY).atEndOfMonth(), + fom = utbetalingshistorikkForFeriepenger.opptjeningsår.plusYears(1) + .atMonth(Month.MAY).atDay(1), + tom = utbetalingshistorikkForFeriepenger.opptjeningsår.plusYears(1) + .atMonth(Month.MAY).atEndOfMonth(), satstype = Satstype.Engang, beløp = beløp, grad = null, @@ -163,12 +189,18 @@ internal class Feriepengeutbetaling private constructor( } private val Double.finere get() = "$this".padStart(10, ' ') - private val List.finere get() = joinToString(separator = "\n\t\t\t\t\t", prefix = "\n\t\t\t\t\t") {"$it (${it.count()} dager)" } + private val List.finere + get() = joinToString( + separator = "\n\t\t\t\t\t", + prefix = "\n\t\t\t\t\t" + ) { "$it (${it.count()} dager)" } internal fun build(aktivitetslogg: IAktivitetslogg): Feriepengeutbetaling { // Arbeidsgiver - val infotrygdHarUtbetaltTilArbeidsgiver = utbetalingshistorikkForFeriepenger.utbetalteFeriepengerTilArbeidsgiver(orgnummer) - val hvaViHarBeregnetAtInfotrygdHarUtbetaltTilArbeidsgiver = feriepengeberegner.beregnUtbetalteFeriepengerForInfotrygdArbeidsgiver(orgnummer) + val infotrygdHarUtbetaltTilArbeidsgiver = + utbetalingshistorikkForFeriepenger.utbetalteFeriepengerTilArbeidsgiver(orgnummer) + val hvaViHarBeregnetAtInfotrygdHarUtbetaltTilArbeidsgiver = + feriepengeberegner.beregnUtbetalteFeriepengerForInfotrygdArbeidsgiver(orgnummer) if (hvaViHarBeregnetAtInfotrygdHarUtbetaltTilArbeidsgiver.roundToInt() != 0 && hvaViHarBeregnetAtInfotrygdHarUtbetaltTilArbeidsgiver.roundToInt() !in infotrygdHarUtbetaltTilArbeidsgiver @@ -183,10 +215,14 @@ internal class Feriepengeutbetaling private constructor( ) } - val infotrygdFeriepengebeløpArbeidsgiver = feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver(orgnummer) - val spleisFeriepengebeløpArbeidsgiver = feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver(orgnummer) - val totaltFeriepengebeløpArbeidsgiver: Double = feriepengeberegner.beregnFeriepengerForArbeidsgiver(orgnummer) - val differanseMellomTotalOgAlleredeUtbetaltAvInfotrygd: Double = feriepengeberegner.beregnFeriepengedifferansenForArbeidsgiver(orgnummer) + val infotrygdFeriepengebeløpArbeidsgiver = + feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver(orgnummer) + val spleisFeriepengebeløpArbeidsgiver = + feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver(orgnummer) + val totaltFeriepengebeløpArbeidsgiver: Double = + feriepengeberegner.beregnFeriepengerForArbeidsgiver(orgnummer) + val differanseMellomTotalOgAlleredeUtbetaltAvInfotrygd: Double = + feriepengeberegner.beregnFeriepengedifferansenForArbeidsgiver(orgnummer) val arbeidsgiverbeløp = differanseMellomTotalOgAlleredeUtbetaltAvInfotrygd.roundToInt() val forrigeSendteArbeidsgiverOppdrag = @@ -195,15 +231,23 @@ internal class Feriepengeutbetaling private constructor( ?.oppdrag ?.takeIf { it.linjerUtenOpphør().isNotEmpty() } - val arbeidsgiveroppdrag = oppdrag(aktivitetslogg, Fagområde.SykepengerRefusjon, forrigeSendteArbeidsgiverOppdrag, arbeidsgiverbeløp) + val arbeidsgiveroppdrag = oppdrag( + aktivitetslogg, + Fagområde.SykepengerRefusjon, + forrigeSendteArbeidsgiverOppdrag, + arbeidsgiverbeløp + ) if (arbeidsgiverbeløp != 0 && orgnummer == "0") aktivitetslogg.info("Forventer ikke arbeidsgiveroppdrag til orgnummer \"0\".") - val sendArbeidsgiveroppdrag = skalSendeOppdrag(forrigeSendteArbeidsgiverOppdrag, arbeidsgiverbeløp) + val sendArbeidsgiveroppdrag = + skalSendeOppdrag(forrigeSendteArbeidsgiverOppdrag, arbeidsgiverbeløp) // Person - val infotrygdHarUtbetaltTilPerson = utbetalingshistorikkForFeriepenger.utbetalteFeriepengerTilPerson() - val hvaViHarBeregnetAtInfotrygdHarUtbetaltTilPerson = feriepengeberegner.beregnUtbetalteFeriepengerForInfotrygdPerson(orgnummer) + val infotrygdHarUtbetaltTilPerson = + utbetalingshistorikkForFeriepenger.utbetalteFeriepengerTilPerson() + val hvaViHarBeregnetAtInfotrygdHarUtbetaltTilPerson = + feriepengeberegner.beregnUtbetalteFeriepengerForInfotrygdPerson(orgnummer) if (hvaViHarBeregnetAtInfotrygdHarUtbetaltTilPerson.roundToInt() != 0 && hvaViHarBeregnetAtInfotrygdHarUtbetaltTilPerson.roundToInt() !in infotrygdHarUtbetaltTilPerson ) { @@ -217,12 +261,20 @@ internal class Feriepengeutbetaling private constructor( ) } - val differanseMellomTotalOgAlleredeUtbetaltAvInfotrygdTilPerson = feriepengeberegner.beregnFeriepengedifferansenForPerson(orgnummer) - val infotrygdFeriepengebeløpPerson = feriepengeberegner.beregnFeriepengerForInfotrygdPerson(orgnummer) - val spleisFeriepengebeløpPerson = feriepengeberegner.beregnFeriepengerForSpleisPerson(orgnummer) - val totaltFeriepengebeløpPerson = feriepengeberegner.beregnFeriepengerForPerson(orgnummer) - val hvaViHarBeregnetAtInfotrygdHarUtbetaltTilPersonForDenneAktuelleArbeidsgiver = feriepengeberegner.beregnUtbetalteFeriepengerForInfotrygdPersonForEnArbeidsgiver(orgnummer) - val personbeløp = differanseMellomTotalOgAlleredeUtbetaltAvInfotrygdTilPerson.roundToInt() + val differanseMellomTotalOgAlleredeUtbetaltAvInfotrygdTilPerson = + feriepengeberegner.beregnFeriepengedifferansenForPerson(orgnummer) + val infotrygdFeriepengebeløpPerson = + feriepengeberegner.beregnFeriepengerForInfotrygdPerson(orgnummer) + val spleisFeriepengebeløpPerson = + feriepengeberegner.beregnFeriepengerForSpleisPerson(orgnummer) + val totaltFeriepengebeløpPerson = + feriepengeberegner.beregnFeriepengerForPerson(orgnummer) + val hvaViHarBeregnetAtInfotrygdHarUtbetaltTilPersonForDenneAktuelleArbeidsgiver = + feriepengeberegner.beregnUtbetalteFeriepengerForInfotrygdPersonForEnArbeidsgiver( + orgnummer + ) + val personbeløp = + differanseMellomTotalOgAlleredeUtbetaltAvInfotrygdTilPerson.roundToInt() val forrigeSendtePersonOppdrag = tidligereFeriepengeutbetalinger @@ -230,7 +282,12 @@ internal class Feriepengeutbetaling private constructor( ?.personoppdrag ?.takeIf { it.linjerUtenOpphør().isNotEmpty() } - val personoppdrag = oppdrag(aktivitetslogg, Fagområde.Sykepenger, forrigeSendtePersonOppdrag, personbeløp) + val personoppdrag = oppdrag( + aktivitetslogg, + Fagområde.Sykepenger, + forrigeSendtePersonOppdrag, + personbeløp + ) val sendPersonoppdrag = skalSendeOppdrag(forrigeSendtePersonOppdrag, personbeløp) @@ -244,8 +301,14 @@ internal class Feriepengeutbetaling private constructor( """.trimIndent() ) - val arbeidsgiveroppdragdetaljer = PersonObserver.FeriepengerUtbetaltEvent.OppdragEventDetaljer.mapOppdrag(arbeidsgiveroppdrag).toString() - val personoppdragdetaljer = PersonObserver.FeriepengerUtbetaltEvent.OppdragEventDetaljer.mapOppdrag(personoppdrag).toString() + val arbeidsgiveroppdragdetaljer = + PersonObserver.FeriepengerUtbetaltEvent.OppdragEventDetaljer.mapOppdrag( + arbeidsgiveroppdrag + ).toString() + val personoppdragdetaljer = + PersonObserver.FeriepengerUtbetaltEvent.OppdragEventDetaljer.mapOppdrag( + personoppdrag + ).toString() // Logging aktivitetslogg.info( """ @@ -271,15 +334,23 @@ internal class Feriepengeutbetaling private constructor( Infotrygd-utbetalingen må korrigeres med: ${differanseMellomTotalOgAlleredeUtbetaltAvInfotrygdTilPerson.finere} - GENERELT: - ${feriepengeberegner.feriepengedatoer().let { datoer -> "Datoer vi skal utbetale feriepenger for (${datoer.size}): ${datoer.grupperSammenhengendePerioder().finere}"}} + ${ + feriepengeberegner.feriepengedatoer() + .let { datoer -> "Datoer vi skal utbetale feriepenger for (${datoer.size}): ${datoer.grupperSammenhengendePerioder().finere}" } + } - OPPDRAG: Skal sende arbeidsgiveroppdrag til OS: $sendArbeidsgiveroppdrag - Differanse fra forrige sendte arbeidsgoiveroppdrag: ${forrigeSendteArbeidsgiverOppdrag?.totalbeløp()?.minus(arbeidsgiveroppdrag.totalbeløp())} + Differanse fra forrige sendte arbeidsgoiveroppdrag: ${ + forrigeSendteArbeidsgiverOppdrag?.totalbeløp() + ?.minus(arbeidsgiveroppdrag.totalbeløp()) + } Arbeidsgiveroppdrag: $arbeidsgiveroppdragdetaljer Skal sende personoppdrag til OS: $sendPersonoppdrag - Differanse fra forrige sendte personoppdrag: ${forrigeSendtePersonOppdrag?.totalbeløp()?.minus(personoppdrag.totalbeløp())} + Differanse fra forrige sendte personoppdrag: ${ + forrigeSendtePersonOppdrag?.totalbeløp()?.minus(personoppdrag.totalbeløp()) + } Personoppdrag: $personoppdragdetaljer """ ) @@ -320,4 +391,4 @@ internal data class FeriepengeutbetalingView( val spleisFeriepengebeløpPerson: Double, val oppdrag: Oppdrag, val personoppdrag: Oppdrag -) \ No newline at end of file +) diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverRegler.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverRegler.kt index f4c86a9dbc..ff59653b67 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverRegler.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverRegler.kt @@ -2,7 +2,7 @@ package no.nav.helse.utbetalingstidslinje import no.nav.helse.økonomi.DekningsgradKilde -internal interface ArbeidsgiverRegler: DekningsgradKilde { +internal interface ArbeidsgiverRegler : DekningsgradKilde { fun burdeStarteNyArbeidsgiverperiode(oppholdsdagerBrukt: Int): Boolean fun arbeidsgiverperiodenGjennomført(arbeidsgiverperiodedagerBrukt: Int): Boolean override fun dekningsgrad(): Double @@ -10,7 +10,7 @@ internal interface ArbeidsgiverRegler: DekningsgradKilde { fun maksSykepengedagerOver67(): Int companion object { - internal object NormalArbeidstaker: ArbeidsgiverRegler { + internal object NormalArbeidstaker : ArbeidsgiverRegler { private const val arbeidsgiverperiodelengde = 16 private const val oppholdsdagerFørNyArbeidsgiverperiode = 16 diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiode.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiode.kt index ed3b85dca1..ab3ff8d037 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiode.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiode.kt @@ -14,7 +14,10 @@ import no.nav.helse.person.aktivitetslogg.Varselkode.RV_IM_3 import no.nav.helse.person.inntekt.Refusjonsopplysning import no.nav.helse.ukedager -internal class Arbeidsgiverperiode private constructor(private val perioder: List, førsteUtbetalingsdag: LocalDate?) : Iterable, Comparable { +internal class Arbeidsgiverperiode private constructor( + private val perioder: List, + førsteUtbetalingsdag: LocalDate? +) : Iterable, Comparable { constructor(perioder: List) : this(perioder, null) private val kjenteDager = mutableListOf() @@ -29,8 +32,18 @@ internal class Arbeidsgiverperiode private constructor(private val perioder: Lis } private val arbeidsgiverperioden get() = perioder.first().start til perioder.last().endInclusive - private val førsteKjente get() = listOfNotNull(perioder.firstOrNull()?.start, utbetalingsdager.firstOrNull()?.start, kjenteDager.firstOrNull()?.start).minOf { it } - private val sisteKjente get() = listOfNotNull(perioder.lastOrNull()?.endInclusive, utbetalingsdager.lastOrNull()?.endInclusive, kjenteDager.lastOrNull()?.endInclusive).maxOf { it } + private val førsteKjente + get() = listOfNotNull( + perioder.firstOrNull()?.start, + utbetalingsdager.firstOrNull()?.start, + kjenteDager.firstOrNull()?.start + ).minOf { it } + private val sisteKjente + get() = listOfNotNull( + perioder.lastOrNull()?.endInclusive, + utbetalingsdager.lastOrNull()?.endInclusive, + kjenteDager.lastOrNull()?.endInclusive + ).maxOf { it } private val innflytelseperioden get() = førsteKjente til sisteKjente internal fun fiktiv() = perioder.isEmpty() // Arbeidsperioden er gjennomført i Infotrygd @@ -80,13 +93,19 @@ internal class Arbeidsgiverperiode private constructor(private val perioder: Lis val mellomliggendePeriode = checkNotNull(a.periodeMellom(b.start)) { "forventer at det skal være dager mellom to utbetalingsperioder, enten pga. helg eller andre oppholdsdager" } - return oppholdsdager.any { oppholdsperiode -> oppholdsperiode.overlapperMed(mellomliggendePeriode) } + return oppholdsdager.any { oppholdsperiode -> + oppholdsperiode.overlapperMed( + mellomliggendePeriode + ) + } } internal fun dekkesAvArbeidsgiver(periode: Periode): Boolean { if (fiktiv()) return false val arbeidsgiversAnsvar = dagerSomarbeidsgiverUtbetaler() ?: return false - return (periode.overlapperMed(arbeidsgiversAnsvar) && arbeidsgiversAnsvar.slutterEtter(periode.endInclusive)) + return (periode.overlapperMed(arbeidsgiversAnsvar) && arbeidsgiversAnsvar.slutterEtter( + periode.endInclusive + )) } private fun dagerSomarbeidsgiverUtbetaler(): Periode? { @@ -101,19 +120,26 @@ internal class Arbeidsgiverperiode private constructor(private val perioder: Lis internal fun sammenlign(other: List): Boolean { if (fiktiv()) return true val thisSiste = this.perioder.last().endInclusive - val otherSiste = other.lastOrNull()?.endInclusive?.coerceAtMost(this.sisteKjente) ?: return false - return otherSiste == thisSiste || (thisSiste.erHelg() && otherSiste.erRettFør(thisSiste)) || (otherSiste.erHelg() && thisSiste.erRettFør(otherSiste)) + val otherSiste = + other.lastOrNull()?.endInclusive?.coerceAtMost(this.sisteKjente) ?: return false + return otherSiste == thisSiste || (thisSiste.erHelg() && otherSiste.erRettFør(thisSiste)) || (otherSiste.erHelg() && thisSiste.erRettFør( + otherSiste + )) } internal fun erFørsteUtbetalingsdagFørEllerLik(periode: Periode): Boolean { // forventer inntekt dersom vi overlapper med en utbetalingsperiode… if (utbetalingsdager.any { periode.overlapperMed(it) }) return true // …eller dersom det ikke har vært gap siden forrige utbetaling - val forrigeUtbetaling = utbetalingsdager.lastOrNull { other -> other.endInclusive < periode.endInclusive } ?: return false + val forrigeUtbetaling = + utbetalingsdager.lastOrNull { other -> other.endInclusive < periode.endInclusive } + ?: return false return oppholdsdager.none { it.overlapperMed(forrigeUtbetaling.endInclusive til periode.endInclusive) } } - override fun equals(other: Any?) = other is Arbeidsgiverperiode && other.førsteKjente == this.førsteKjente + override fun equals(other: Any?) = + other is Arbeidsgiverperiode && other.førsteKjente == this.førsteKjente + override fun hashCode() = førsteKjente.hashCode() override fun iterator(): Iterator { @@ -151,7 +177,10 @@ internal class Arbeidsgiverperiode private constructor(private val perioder: Lis return false } - internal fun validerFeilaktigNyArbeidsgiverperiode(vedtaksperiode: Periode, aktivitetslogg: IAktivitetslogg): IAktivitetslogg { + internal fun validerFeilaktigNyArbeidsgiverperiode( + vedtaksperiode: Periode, + aktivitetslogg: IAktivitetslogg + ): IAktivitetslogg { val sisteDagAgp = perioder.lastOrNull()?.endInclusive ?: return aktivitetslogg // Om det er én eller fler ukedager mellom beregnet AGP og vedtaksperioden som overlapper med dager fra inntektsmeldingen // tyder det på at arbeidsgiver tror det er ny arbeidsgiverperiode, men vi har beregnet at det _ikke_ er ny arbeidsgiverperiode. @@ -159,17 +188,20 @@ internal class Arbeidsgiverperiode private constructor(private val perioder: Lis return aktivitetslogg } - private fun utbetalingsdagerI(periode: Periode) = periode.filter { dag -> utbetalingsdager.any { utbetalingsperiode -> dag in utbetalingsperiode }} + private fun utbetalingsdagerI(periode: Periode) = + periode.filter { dag -> utbetalingsdager.any { utbetalingsperiode -> dag in utbetalingsperiode } } internal companion object { - internal fun fiktiv(førsteUtbetalingsdag: LocalDate) = Arbeidsgiverperiode(emptyList(), førsteUtbetalingsdag) + internal fun fiktiv(førsteUtbetalingsdag: LocalDate) = + Arbeidsgiverperiode(emptyList(), førsteUtbetalingsdag) internal fun forventerInntekt(arbeidsgiverperiode: Arbeidsgiverperiode?, periode: Periode) = arbeidsgiverperiode?.forventerInntekt(periode) ?: false - internal fun List.finn(periode: Periode) = lastOrNull { arbeidsgiverperiode -> - periode in arbeidsgiverperiode - } + internal fun List.finn(periode: Periode) = + lastOrNull { arbeidsgiverperiode -> + periode in arbeidsgiverperiode + } private fun Periode.justerForHelg() = when (endInclusive.dayOfWeek) { DayOfWeek.SATURDAY -> start til endInclusive.plusDays(1) @@ -185,21 +217,69 @@ internal class Arbeidsgiverperiode private constructor(private val perioder: Lis } } - private fun harNødvendigeRefusjonsopplysninger(skjæringstidspunkt: LocalDate, periode: Periode, refusjonsopplysninger: Refusjonsopplysning.Refusjonsopplysninger, arbeidsgiverperiode: Arbeidsgiverperiode, aktivitetslogg: IAktivitetslogg, organisasjonsnummer: String, sisteOppholdsdagFørUtbetalingsdager: () -> LocalDate?): Boolean { + private fun harNødvendigeRefusjonsopplysninger( + skjæringstidspunkt: LocalDate, + periode: Periode, + refusjonsopplysninger: Refusjonsopplysning.Refusjonsopplysninger, + arbeidsgiverperiode: Arbeidsgiverperiode, + aktivitetslogg: IAktivitetslogg, + organisasjonsnummer: String, + sisteOppholdsdagFørUtbetalingsdager: () -> LocalDate? + ): Boolean { val utbetalingsdager = arbeidsgiverperiode.utbetalingsdagerI(periode) if (utbetalingsdager.isEmpty()) return true - return refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt, utbetalingsdager, sisteOppholdsdagFørUtbetalingsdager(), aktivitetslogg, organisasjonsnummer) + return refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + utbetalingsdager, + sisteOppholdsdagFørUtbetalingsdager(), + aktivitetslogg, + organisasjonsnummer + ) } - internal fun harNødvendigeRefusjonsopplysninger(skjæringstidspunkt: LocalDate, periode: Periode, refusjonsopplysninger: Refusjonsopplysning.Refusjonsopplysninger, arbeidsgiverperiode: Arbeidsgiverperiode, aktivitetslogg: IAktivitetslogg, organisasjonsnummer: String) = - harNødvendigeRefusjonsopplysninger(skjæringstidspunkt, periode, refusjonsopplysninger, arbeidsgiverperiode, aktivitetslogg, organisasjonsnummer) { - arbeidsgiverperiode.oppholdsdager.flatten().lastOrNull { oppholdsdag -> oppholdsdag < periode.start } ?: arbeidsgiverperiode.firstOrNull()?.forrigeDag + internal fun harNødvendigeRefusjonsopplysninger( + skjæringstidspunkt: LocalDate, + periode: Periode, + refusjonsopplysninger: Refusjonsopplysning.Refusjonsopplysninger, + arbeidsgiverperiode: Arbeidsgiverperiode, + aktivitetslogg: IAktivitetslogg, + organisasjonsnummer: String + ) = + harNødvendigeRefusjonsopplysninger( + skjæringstidspunkt, + periode, + refusjonsopplysninger, + arbeidsgiverperiode, + aktivitetslogg, + organisasjonsnummer + ) { + arbeidsgiverperiode.oppholdsdager.flatten() + .lastOrNull { oppholdsdag -> oppholdsdag < periode.start } + ?: arbeidsgiverperiode.firstOrNull()?.forrigeDag } - internal fun harNødvendigeRefusjonsopplysningerEtterInntektsmelding(skjæringstidspunkt: LocalDate, periode: Periode, refusjonsopplysninger: Refusjonsopplysning.Refusjonsopplysninger, arbeidsgiverperiode: Arbeidsgiverperiode, aktivitetslogg: IAktivitetslogg, organisasjonsnummer: String) = - harNødvendigeRefusjonsopplysninger(skjæringstidspunkt, periode, refusjonsopplysninger, arbeidsgiverperiode, aktivitetslogg, organisasjonsnummer) { null } // Ved revurderinger hensyntar vi ikke oppholdsdager før utbetalignsdager - - internal fun utbetalingsdagerFørSkjæringstidspunkt(skjæringstidspunkt: LocalDate, periode: Periode, arbeidsgiverperiode: Arbeidsgiverperiode) = + internal fun harNødvendigeRefusjonsopplysningerEtterInntektsmelding( + skjæringstidspunkt: LocalDate, + periode: Periode, + refusjonsopplysninger: Refusjonsopplysning.Refusjonsopplysninger, + arbeidsgiverperiode: Arbeidsgiverperiode, + aktivitetslogg: IAktivitetslogg, + organisasjonsnummer: String + ) = + harNødvendigeRefusjonsopplysninger( + skjæringstidspunkt, + periode, + refusjonsopplysninger, + arbeidsgiverperiode, + aktivitetslogg, + organisasjonsnummer + ) { null } // Ved revurderinger hensyntar vi ikke oppholdsdager før utbetalignsdager + + internal fun utbetalingsdagerFørSkjæringstidspunkt( + skjæringstidspunkt: LocalDate, + periode: Periode, + arbeidsgiverperiode: Arbeidsgiverperiode + ) = arbeidsgiverperiode.utbetalingsdagerI(periode).filter { it < skjæringstidspunkt } } } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeberegner.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeberegner.kt index 2a7e946209..af2975b359 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeberegner.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeberegner.kt @@ -33,7 +33,10 @@ internal class Arbeidsgiverperiodeberegner( ).also { aktivArbeidsgiverperioderesultat = it } } - internal fun resultat(sykdomstidslinje: Sykdomstidslinje, infotrygdBetalteDager: List): List { + internal fun resultat( + sykdomstidslinje: Sykdomstidslinje, + infotrygdBetalteDager: List + ): List { sykdomstidslinje.forEach { dag -> when (dag) { is Dag.AndreYtelser -> tilstand.andreYtelser(this, dag.dato) @@ -50,10 +53,12 @@ internal class Arbeidsgiverperiodeberegner( ferdigstillTellingHvisInfotrygdHarUtbetalt(infotrygdBetalteDager, dag.dato) sykedag(dag.dato) } + is Dag.Sykedag -> { ferdigstillTellingHvisInfotrygdHarUtbetalt(infotrygdBetalteDager, dag.dato) sykedag(dag.dato) } + is Dag.SykedagNav -> sykedagNav(dag.dato) is Dag.UkjentDag -> { if (dag.dato.erHelg()) tilstand.feriedag(this, dag.dato) @@ -75,7 +80,10 @@ internal class Arbeidsgiverperiodeberegner( this.tilstand.entering(this) } - private fun ferdigstillTellingHvisInfotrygdHarUtbetalt(infotrygdBetalteDager: List, dato: LocalDate) { + private fun ferdigstillTellingHvisInfotrygdHarUtbetalt( + infotrygdBetalteDager: List, + dato: LocalDate + ) { if (infotrygdBetalteDager.any { dato in it }) arbeidsgiverperiodeteller.fullfør() } @@ -150,20 +158,29 @@ internal class Arbeidsgiverperiodeberegner( private interface Tilstand { fun entering(builder: Arbeidsgiverperiodeberegner) {} fun oppholdsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { - builder.aktivArbeidsgiverperioderesultat = builder.arbeidsgiverperiodeResultatet(dato).utvideMed( - dato = dato, - oppholdsperiode = dato - ) + builder.aktivArbeidsgiverperioderesultat = + builder.arbeidsgiverperiodeResultatet(dato).utvideMed( + dato = dato, + oppholdsperiode = dato + ) } + fun sykdomsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { - builder.aktivArbeidsgiverperioderesultat = builder.arbeidsgiverperiodeResultatet(dato).utvideMed( - dato = dato, - utbetalingsperiode = dato - ) + builder.aktivArbeidsgiverperioderesultat = + builder.arbeidsgiverperiodeResultatet(dato).utvideMed( + dato = dato, + utbetalingsperiode = dato + ) } - fun sykdomsdagNav(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = sykdomsdag(builder, dato) - fun egenmeldingsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = sykdomsdag(builder, dato) - fun foreldetDag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = sykdomsdag(builder, dato) + + fun sykdomsdagNav(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + sykdomsdag(builder, dato) + + fun egenmeldingsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + sykdomsdag(builder, dato) + + fun foreldetDag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + sykdomsdag(builder, dato) fun feriedagSomSyk(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) fun feriedag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) @@ -171,6 +188,7 @@ internal class Arbeidsgiverperiodeberegner( fun andreYtelser(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) fun leaving(builder: Arbeidsgiverperiodeberegner) {} } + private object Initiell : Tilstand { override fun oppholdsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { builder.aktivArbeidsgiverperioderesultat?.utvideMed( @@ -186,65 +204,84 @@ internal class Arbeidsgiverperiodeberegner( builder.tilstand.oppholdsdag(builder, dato) } - override fun feriedagMedSykmelding(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = feriedag(builder, dato) - override fun andreYtelser(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = feriedag(builder, dato) + override fun feriedagMedSykmelding(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + feriedag(builder, dato) + + override fun andreYtelser(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + feriedag(builder, dato) override fun feriedagSomSyk(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { throw IllegalStateException() } } + private object Arbeidsgiverperiode : Tilstand { override fun sykdomsdagNav( builder: Arbeidsgiverperiodeberegner, dato: LocalDate ) { - builder.aktivArbeidsgiverperioderesultat = builder.arbeidsgiverperiodeResultatet(dato).utvideMed( - dato = dato, - arbeidsgiverperiode = dato, - utbetalingsperiode = dato - ) + builder.aktivArbeidsgiverperioderesultat = + builder.arbeidsgiverperiodeResultatet(dato).utvideMed( + dato = dato, + arbeidsgiverperiode = dato, + utbetalingsperiode = dato + ) } override fun sykdomsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { - builder.aktivArbeidsgiverperioderesultat = builder.arbeidsgiverperiodeResultatet(dato).utvideMed( - dato = dato, - arbeidsgiverperiode = dato - ) + builder.aktivArbeidsgiverperioderesultat = + builder.arbeidsgiverperiodeResultatet(dato).utvideMed( + dato = dato, + arbeidsgiverperiode = dato + ) } - override fun feriedagSomSyk(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = sykdomsdag(builder, dato) - override fun foreldetDag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = sykdomsdag(builder, dato) + + override fun feriedagSomSyk(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + sykdomsdag(builder, dato) + + override fun foreldetDag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + sykdomsdag(builder, dato) override fun feriedagMedSykmelding(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { builder.arbeidsgiverperiodeteller.inc() builder.tilstand.feriedagSomSyk(builder, dato) } + override fun feriedag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { builder.fridager.add(dato) } - override fun andreYtelser(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = feriedag(builder, dato) + override fun andreYtelser(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + feriedag(builder, dato) } + private object ArbeidsgiverperiodeSisteDag : Tilstand { override fun sykdomsdagNav(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { - builder.aktivArbeidsgiverperioderesultat = builder.arbeidsgiverperiodeResultatet(dato).utvideMed( - dato = dato, - arbeidsgiverperiode = dato, - utbetalingsperiode = dato, - fullstendig = true - ) + builder.aktivArbeidsgiverperioderesultat = + builder.arbeidsgiverperiodeResultatet(dato).utvideMed( + dato = dato, + arbeidsgiverperiode = dato, + utbetalingsperiode = dato, + fullstendig = true + ) builder.tilstand(Utbetaling) } override fun sykdomsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { - builder.aktivArbeidsgiverperioderesultat = builder.arbeidsgiverperiodeResultatet(dato).utvideMed( - dato = dato, - arbeidsgiverperiode = dato, - fullstendig = true - ) + builder.aktivArbeidsgiverperioderesultat = + builder.arbeidsgiverperiodeResultatet(dato).utvideMed( + dato = dato, + arbeidsgiverperiode = dato, + fullstendig = true + ) builder.tilstand(Utbetaling) } - override fun feriedagSomSyk(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = sykdomsdag(builder, dato) - override fun foreldetDag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = sykdomsdag(builder, dato) + + override fun feriedagSomSyk(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + sykdomsdag(builder, dato) + + override fun foreldetDag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + sykdomsdag(builder, dato) override fun feriedagMedSykmelding(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { throw IllegalStateException("kan ikke ha fridag som siste dag i arbeidsgiverperioden") @@ -258,38 +295,65 @@ internal class Arbeidsgiverperiodeberegner( throw IllegalStateException("kan ikke ha andre ytelser som siste dag i arbeidsgiverperioden") } } + private object Utbetaling : Tilstand { private fun kjentDag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { - builder.aktivArbeidsgiverperioderesultat = builder.arbeidsgiverperiodeResultatet(dato).utvideMed( - dato = dato - ) + builder.aktivArbeidsgiverperioderesultat = + builder.arbeidsgiverperiodeResultatet(dato).utvideMed( + dato = dato + ) } - override fun egenmeldingsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = kjentDag(builder, dato) - override fun feriedag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = kjentDag(builder, dato) - override fun feriedagMedSykmelding(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = kjentDag(builder, dato) - override fun andreYtelser(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = kjentDag(builder, dato) - override fun feriedagSomSyk(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = kjentDag(builder, dato) + + override fun egenmeldingsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + kjentDag(builder, dato) + + override fun feriedag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + kjentDag(builder, dato) + + override fun feriedagMedSykmelding(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + kjentDag(builder, dato) + + override fun andreYtelser(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + kjentDag(builder, dato) + + override fun feriedagSomSyk(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + kjentDag(builder, dato) } private object ArbeidsgiverperiodeAvbrutt : Tilstand { override fun oppholdsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) { - builder.aktivArbeidsgiverperioderesultat = builder.arbeidsgiverperiodeResultatet(dato).utvideMed( - dato = dato, - oppholdsperiode = dato, - sisteDag = dato - ) + builder.aktivArbeidsgiverperioderesultat = + builder.arbeidsgiverperiodeResultatet(dato).utvideMed( + dato = dato, + oppholdsperiode = dato, + sisteDag = dato + ) builder.tilstand(Initiell) } - override fun feriedag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = oppholdsdag(builder, dato) - override fun feriedagMedSykmelding(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = oppholdsdag(builder, dato) - override fun andreYtelser(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = oppholdsdag(builder, dato) + override fun feriedag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + oppholdsdag(builder, dato) + + override fun feriedagMedSykmelding(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + oppholdsdag(builder, dato) + + override fun andreYtelser(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + oppholdsdag(builder, dato) - override fun sykdomsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = throw IllegalStateException() - override fun sykdomsdagNav(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = throw IllegalStateException() - override fun egenmeldingsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = throw IllegalStateException() - override fun foreldetDag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = throw IllegalStateException() - override fun feriedagSomSyk(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = throw IllegalStateException() + override fun sykdomsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + throw IllegalStateException() + + override fun sykdomsdagNav(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + throw IllegalStateException() + + override fun egenmeldingsdag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + throw IllegalStateException() + + override fun foreldetDag(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + throw IllegalStateException() + + override fun feriedagSomSyk(builder: Arbeidsgiverperiodeberegner, dato: LocalDate) = + throw IllegalStateException() override fun leaving(builder: Arbeidsgiverperiodeberegner) { builder.aktivArbeidsgiverperioderesultat?.let { @@ -300,9 +364,10 @@ internal class Arbeidsgiverperiodeberegner( } } -class ProblemdagException(melding: String) : RuntimeException("Forventet ikke ProblemDag i utbetalingstidslinjen. Melding: $melding") { +class ProblemdagException(melding: String) : + RuntimeException("Forventet ikke ProblemDag i utbetalingstidslinjen. Melding: $melding") { fun logg(aktivitetslogg: IAktivitetslogg) { aktivitetslogg.info("Feilmelding: $message") aktivitetslogg.funksjonellFeil(RV_UT_3) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeoppsamler.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeoppsamler.kt index e414af41b4..8f6a84da6d 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeoppsamler.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeoppsamler.kt @@ -7,6 +7,7 @@ internal interface Arbeidsgiverperiodeoppsamler { // det er sykdom på begge kanter av ferien, og dagen er mens vi teller de første 16 dagene, eller: // vi har telt 16 dager, og det er sykdom før ferien fun fridag(dato: LocalDate) + // en fridag som teller som påvirker oppholdstellingen; om vi f.eks. har 16 slike etter hverandre så ville // vi ha tilbakestilt arbeidsgiverperioden. fun fridagOppholdsdag(dato: LocalDate) diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperioderesultat.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperioderesultat.kt index 0980a84c5e..50348f2a2d 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperioderesultat.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperioderesultat.kt @@ -50,7 +50,10 @@ data class Arbeidsgiverperioderesultat( /** * subsummerer arbeidsgiverperioden, men bare dersom dagene overlapper med vedtaksperioden */ - internal fun subsummering(subsumsjonslogg: Subsumsjonslogg, sykdomstidslinje: Sykdomstidslinje) { + internal fun subsummering( + subsumsjonslogg: Subsumsjonslogg, + sykdomstidslinje: Sykdomstidslinje + ) { if (arbeidsgiverperiode.isEmpty()) return // subsummerer ikke Infotrygd-ting val vedtaksperiode = sykdomstidslinje.periode() ?: return @@ -66,11 +69,23 @@ data class Arbeidsgiverperioderesultat( // siste 16. agp-dag skal subsummeres med § 8-19 første ledd if (fullstendig && arbeidsgiverperiode.last().endInclusive in vedtaksperiode) - subsumsjonslogg.logg(`§ 8-19 første ledd`(arbeidsgiverperiode.last().endInclusive, sykdomstidslinjesubsumsjon)) + subsumsjonslogg.logg( + `§ 8-19 første ledd`( + arbeidsgiverperiode.last().endInclusive, + sykdomstidslinjesubsumsjon + ) + ) // første utbetalingsdag skal subsummeres med § 8-17 ledd 1 bokstav a (oppfylt = true) - utbetalingsperioder.firstOrNull()?.firstOrNull { !it.erHelg() }?.takeIf { it in vedtaksperiode }?.also { - subsumsjonslogg.logg(`§ 8-17 ledd 1 bokstav a`(oppfylt = true, dagen = listOf(it.rangeTo(it)), sykdomstidslinjesubsumsjon)) + utbetalingsperioder.firstOrNull()?.firstOrNull { !it.erHelg() } + ?.takeIf { it in vedtaksperiode }?.also { + subsumsjonslogg.logg( + `§ 8-17 ledd 1 bokstav a`( + oppfylt = true, + dagen = listOf(it.rangeTo(it)), + sykdomstidslinjesubsumsjon + ) + ) } // siste oppholdsdag som medfører at agp avbrytes subsummeres med § 8-19 fjerde ledd @@ -104,8 +119,10 @@ data class Arbeidsgiverperioderesultat( // dagen utvider siste periode else -> dropLast(1) + listOf(last().oppdaterTom(dato)) } - internal fun Iterable.finn(periode: Periode) = lastOrNull { arbeidsgiverperiode -> - periode.overlapperMed(arbeidsgiverperiode.omsluttendePeriode) - } + + internal fun Iterable.finn(periode: Periode) = + lastOrNull { arbeidsgiverperiode -> + periode.overlapperMed(arbeidsgiverperiode.omsluttendePeriode) + } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeteller.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeteller.kt index 886afe4e90..c7f19f9d6a 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeteller.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Arbeidsgiverperiodeteller.kt @@ -75,6 +75,7 @@ internal class Arbeidsgiverperiodeteller private constructor( companion object { val nullObserver = object : Observatør {} } + fun arbeidsgiverperiodeFerdig() {} fun arbeidsgiverperiodeAvbrutt() {} fun arbeidsgiverperiodedag() {} @@ -88,8 +89,10 @@ internal class Arbeidsgiverperiodeteller private constructor( fun reset(teller: Arbeidsgiverperiodeteller) { teller.state(Initiell) } + fun leaving(teller: Arbeidsgiverperiodeteller) {} } + private object Initiell : Tilstand { override fun entering(teller: Arbeidsgiverperiodeteller) { teller.observatør.arbeidsgiverperiodeAvbrutt() @@ -100,14 +103,17 @@ internal class Arbeidsgiverperiodeteller private constructor( teller.state(PåbegyntArbeidsgiverperiode) } } + private object PåbegyntArbeidsgiverperiode : Tilstand { override fun sykedag(teller: Arbeidsgiverperiodeteller) { teller.observatør.arbeidsgiverperiodedag() } + override fun ferdig(teller: Arbeidsgiverperiodeteller) { teller.state(ArbeidsgiverperiodeFerdig) } } + private object ArbeidsgiverperiodeFerdig : Tilstand { override fun entering(teller: Arbeidsgiverperiodeteller) { teller.observatør.arbeidsgiverperiodeFerdig() @@ -117,6 +123,7 @@ internal class Arbeidsgiverperiodeteller private constructor( teller.observatør.sykedag() } } + private object IngenTelling : Tilstand { override fun sykedag(teller: Arbeidsgiverperiodeteller) { teller.observatør.sykedag() diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisAndreYtelserFilter.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisAndreYtelserFilter.kt index 4a0ec3facd..e4324c0263 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisAndreYtelserFilter.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisAndreYtelserFilter.kt @@ -12,7 +12,7 @@ internal class AvvisAndreYtelserFilter( private val arbeidsavklaringspenger: List, private val opplæringspenger: List, private val omsorgspenger: List, -): UtbetalingstidslinjerFilter { +) : UtbetalingstidslinjerFilter { override fun filter( tidslinjer: List, diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisDagerEtterD\303\270dsdatofilter.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisDagerEtterD\303\270dsdatofilter.kt" index d9316139b8..cf0264482b 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisDagerEtterD\303\270dsdatofilter.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisDagerEtterD\303\270dsdatofilter.kt" @@ -8,7 +8,7 @@ import no.nav.helse.etterlevelse.Subsumsjonslogg internal class AvvisDagerEtterDødsdatofilter( private val alder: Alder, -): UtbetalingstidslinjerFilter { +) : UtbetalingstidslinjerFilter { override fun filter( tidslinjer: List, diff --git "a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisInngangsvilk\303\245rfilter.kt" "b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisInngangsvilk\303\245rfilter.kt" index d1423de089..d3c5b3bae4 100644 --- "a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisInngangsvilk\303\245rfilter.kt" +++ "b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/AvvisInngangsvilk\303\245rfilter.kt" @@ -8,7 +8,7 @@ import no.nav.helse.person.aktivitetslogg.IAktivitetslogg internal class AvvisInngangsvilkårfilter( private val vilkårsgrunnlagHistorikk: VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement -): UtbetalingstidslinjerFilter { +) : UtbetalingstidslinjerFilter { override fun filter( tidslinjer: List, @@ -17,6 +17,11 @@ internal class AvvisInngangsvilkårfilter( subsumsjonslogg: Subsumsjonslogg ): List { val beregningsperiode = tidslinjer.map { it.periode() }.periode()!! - return vilkårsgrunnlagHistorikk.avvis(tidslinjer, beregningsperiode, periode, subsumsjonslogg) + return vilkårsgrunnlagHistorikk.avvis( + tidslinjer, + beregningsperiode, + periode, + subsumsjonslogg + ) } -} \ No newline at end of file +} 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 fa5f8ccfb8..81852d2030 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 @@ -42,13 +42,25 @@ internal class Feriepengeberegner( private const val ANTALL_FERIEPENGEDAGER_I_OPPTJENINGSÅRET = 48 - private fun utbetalteDager(grunnlagFraInfotrygd: List, grunnlagFraSpleisPerson: List, opptjeningsår: Year): List { + private fun utbetalteDager( + grunnlagFraInfotrygd: List, + grunnlagFraSpleisPerson: List, + opptjeningsår: Year + ): List { val infotrygd = grunnlagFraInfotrygd.flatMap { arbeidsgiver -> arbeidsgiver.utbetalinger.flatMap { utbetaling -> utbetaling.arbeidsgiverUtbetalteDager.map { dag -> - InfotrygdArbeidsgiver(orgnummer = arbeidsgiver.orgnummer, dato = dag.dato, beløp = dag.beløp) + InfotrygdArbeidsgiver( + orgnummer = arbeidsgiver.orgnummer, + dato = dag.dato, + beløp = dag.beløp + ) } + utbetaling.personUtbetalteDager.map { dag -> - InfotrygdPerson(orgnummer = arbeidsgiver.orgnummer, dato = dag.dato, beløp = dag.beløp) + InfotrygdPerson( + orgnummer = arbeidsgiver.orgnummer, + dato = dag.dato, + beløp = dag.beløp + ) } } } @@ -56,9 +68,17 @@ internal class Feriepengeberegner( val spleis = grunnlagFraSpleisPerson.flatMap { arbeidsgiver -> arbeidsgiver.utbetalinger.flatMap { utbetaling -> utbetaling.arbeidsgiverUtbetalteDager.map { dag -> - SpleisArbeidsgiver(orgnummer = arbeidsgiver.orgnummer, dato = dag.dato, beløp = dag.beløp) + SpleisArbeidsgiver( + orgnummer = arbeidsgiver.orgnummer, + dato = dag.dato, + beløp = dag.beløp + ) } + utbetaling.personUtbetalteDager.map { dag -> - SpleisPerson(orgnummer = arbeidsgiver.orgnummer, dato = dag.dato, beløp = dag.beløp) + SpleisPerson( + orgnummer = arbeidsgiver.orgnummer, + dato = dag.dato, + beløp = dag.beløp + ) } } } @@ -72,26 +92,46 @@ internal class Feriepengeberegner( opptjeningsår: Year, grunnlagFraInfotrygd: List, grunnlagFraSpleis: List - ) : this(alder, opptjeningsår, utbetalteDager(grunnlagFraInfotrygd, grunnlagFraSpleis, opptjeningsår)) + ) : this( + alder, + opptjeningsår, + utbetalteDager(grunnlagFraInfotrygd, grunnlagFraSpleis, opptjeningsår) + ) internal fun gjelderForÅr(år: Year) = opptjeningsår == år internal fun feriepengedatoer() = feriepengedager().tilDato() internal fun beregnFeriepengerForInfotrygdPerson() = beregnForFilter(INFOTRYGD_PERSON) - internal fun beregnFeriepengerForInfotrygdPerson(orgnummer: String) = beregnForFilter(INFOTRYGD_PERSON and orgnummerFilter(orgnummer)) + internal fun beregnFeriepengerForInfotrygdPerson(orgnummer: String) = + beregnForFilter(INFOTRYGD_PERSON and orgnummerFilter(orgnummer)) + + internal fun beregnFeriepengerForInfotrygdArbeidsgiver() = + beregnForFilter(INFOTRYGD_ARBEIDSGIVER) + + internal fun beregnFeriepengerForInfotrygdArbeidsgiver(orgnummer: String) = + beregnForFilter(INFOTRYGD_ARBEIDSGIVER and orgnummerFilter(orgnummer)) - internal fun beregnFeriepengerForInfotrygdArbeidsgiver() = beregnForFilter(INFOTRYGD_ARBEIDSGIVER) - internal fun beregnFeriepengerForInfotrygdArbeidsgiver(orgnummer: String) = beregnForFilter(INFOTRYGD_ARBEIDSGIVER and orgnummerFilter(orgnummer)) internal fun beregnFeriepengerForSpleisArbeidsgiver() = beregnForFilter(SPLEIS_ARBEIDSGIVER) - internal fun beregnFeriepengerForSpleisArbeidsgiver(orgnummer: String) = beregnForFilter(SPLEIS_ARBEIDSGIVER and orgnummerFilter(orgnummer)) - internal fun beregnFeriepengerForSpleisPerson(orgnummer: String) = beregnForFilter(SPLEIS_PERSON and orgnummerFilter(orgnummer)) + internal fun beregnFeriepengerForSpleisArbeidsgiver(orgnummer: String) = + beregnForFilter(SPLEIS_ARBEIDSGIVER and orgnummerFilter(orgnummer)) + + internal fun beregnFeriepengerForSpleisPerson(orgnummer: String) = + beregnForFilter(SPLEIS_PERSON and orgnummerFilter(orgnummer)) + internal fun beregnFeriepengerForInfotrygd() = beregnForFilter(INFOTRYGD) - internal fun beregnFeriepengerForInfotrygd(orgnummer: String) = beregnForFilter(INFOTRYGD and orgnummerFilter(orgnummer)) - internal fun beregnFeriepengerForArbeidsgiver(orgnummer: String) = beregnForFilter(ARBEIDSGIVER and orgnummerFilter(orgnummer)) - internal fun beregnFeriepengerForPerson(orgnummer: String) = beregnForFilter(PERSON and orgnummerFilter(orgnummer)) + internal fun beregnFeriepengerForInfotrygd(orgnummer: String) = + beregnForFilter(INFOTRYGD and orgnummerFilter(orgnummer)) + + internal fun beregnFeriepengerForArbeidsgiver(orgnummer: String) = + beregnForFilter(ARBEIDSGIVER and orgnummerFilter(orgnummer)) + + internal fun beregnFeriepengerForPerson(orgnummer: String) = + beregnForFilter(PERSON and orgnummerFilter(orgnummer)) + internal fun beregnUtbetalteFeriepengerForInfotrygdArbeidsgiver(orgnummer: String): Double { val grunnlag = grunnlagForFeriepengerUtbetaltAvInfotrygdTilArbeidsgiver(orgnummer) return alder.beregnFeriepenger(opptjeningsår, grunnlag) } + internal fun beregnUtbetalteFeriepengerForInfotrygdPerson(orgnummer: String): Double { val grunnlag = grunnlagForFeriepengerUtbetaltAvInfotrygdTilPerson(orgnummer) return alder.beregnFeriepenger(opptjeningsår, grunnlag) @@ -103,27 +143,37 @@ internal class Feriepengeberegner( } internal fun beregnFeriepengedifferansenForArbeidsgiver(orgnummer: String): Double { - val grunnlag = feriepengedager().filter(ARBEIDSGIVER and orgnummerFilter(orgnummer)).summer() - val grunnlagUtbetaltAvInfotrygd = grunnlagForFeriepengerUtbetaltAvInfotrygdTilArbeidsgiver(orgnummer) + val grunnlag = + feriepengedager().filter(ARBEIDSGIVER and orgnummerFilter(orgnummer)).summer() + val grunnlagUtbetaltAvInfotrygd = + grunnlagForFeriepengerUtbetaltAvInfotrygdTilArbeidsgiver(orgnummer) return alder.beregnFeriepenger(opptjeningsår, grunnlag - grunnlagUtbetaltAvInfotrygd) } internal fun beregnFeriepengedifferansenForPerson(orgnummer: String): Double { val grunnlag = feriepengedager().filter(PERSON and orgnummerFilter(orgnummer)).summer() - val grunnlagUtbetaltAvInfotrygd = grunnlagForFeriepengerUtbetaltAvInfotrygdTilPerson(orgnummer) + val grunnlagUtbetaltAvInfotrygd = + grunnlagForFeriepengerUtbetaltAvInfotrygdTilPerson(orgnummer) return alder.beregnFeriepenger(opptjeningsår, grunnlag - grunnlagUtbetaltAvInfotrygd) } - private fun første48dageneUtbetaltIInfotrygd() = utbetalteDager.filter(INFOTRYGD).feriepengedager().flatMap { (_, dagListe) -> dagListe } + private fun første48dageneUtbetaltIInfotrygd() = + utbetalteDager.filter(INFOTRYGD).feriepengedager().flatMap { (_, dagListe) -> dagListe } private fun grunnlagForFeriepengerUtbetaltAvInfotrygdTilArbeidsgiver(orgnummer: String) = - første48dageneUtbetaltIInfotrygd().filter(INFOTRYGD_ARBEIDSGIVER and orgnummerFilter(orgnummer)).summer() + første48dageneUtbetaltIInfotrygd().filter( + INFOTRYGD_ARBEIDSGIVER and orgnummerFilter( + orgnummer + ) + ).summer() private fun grunnlagForFeriepengerUtbetaltAvInfotrygdTilPerson(orgnummer: String) = - første48dageneUtbetaltIInfotrygd().filter(INFOTRYGD_PERSON and orgnummerFilter(orgnummer)).summer() + første48dageneUtbetaltIInfotrygd().filter(INFOTRYGD_PERSON and orgnummerFilter(orgnummer)) + .summer() private fun grunnlagForFeriepengerUtbetaltAvInfotrygdTilPersonForArbeidsgiver(orgnummer: String): Int { - val itFeriepengedager = utbetalteDager.filter(INFOTRYGD).feriepengedager().flatMap { (_, dagListe) -> dagListe } + val itFeriepengedager = + utbetalteDager.filter(INFOTRYGD).feriepengedager().flatMap { (_, dagListe) -> dagListe } return itFeriepengedager.filter(INFOTRYGD_PERSON and orgnummerFilter(orgnummer)).summer() } @@ -132,7 +182,8 @@ internal class Feriepengeberegner( return alder.beregnFeriepenger(opptjeningsår, grunnlag) } - private fun feriepengedager() = utbetalteDager.feriepengedager().flatMap { (_, dagListe) -> dagListe } + private fun feriepengedager() = + utbetalteDager.feriepengedager().flatMap { (_, dagListe) -> dagListe } internal sealed class UtbetaltDag( val orgnummer: String, @@ -153,16 +204,25 @@ internal class Feriepengeberegner( internal fun List.summer() = sumOf { it.beløp } internal val INFOTRYGD_PERSON: UtbetaltDagSelector = { it is InfotrygdPerson } - internal val INFOTRYGD_ARBEIDSGIVER: UtbetaltDagSelector = { it is InfotrygdArbeidsgiver } + internal val INFOTRYGD_ARBEIDSGIVER: UtbetaltDagSelector = + { it is InfotrygdArbeidsgiver } internal val INFOTRYGD: UtbetaltDagSelector = INFOTRYGD_PERSON or INFOTRYGD_ARBEIDSGIVER internal val SPLEIS_ARBEIDSGIVER: UtbetaltDagSelector = { it is SpleisArbeidsgiver } internal val SPLEIS_PERSON: UtbetaltDagSelector = { it is SpleisPerson } - internal val ARBEIDSGIVER: UtbetaltDagSelector = INFOTRYGD_ARBEIDSGIVER or SPLEIS_ARBEIDSGIVER + internal val ARBEIDSGIVER: UtbetaltDagSelector = + INFOTRYGD_ARBEIDSGIVER or SPLEIS_ARBEIDSGIVER internal val PERSON: UtbetaltDagSelector = INFOTRYGD_PERSON or SPLEIS_PERSON - internal fun orgnummerFilter(orgnummer: String): UtbetaltDagSelector = { it.orgnummer == orgnummer } - internal fun opptjeningsårFilter(opptjeningsår: Year): UtbetaltDagSelector = { Year.from(it.dato) == opptjeningsår } - private infix fun (UtbetaltDagSelector).or(other: UtbetaltDagSelector): UtbetaltDagSelector = { this(it) || other(it) } - internal infix fun (UtbetaltDagSelector).and(other: UtbetaltDagSelector): UtbetaltDagSelector = { this(it) && other(it) } + internal fun orgnummerFilter(orgnummer: String): UtbetaltDagSelector = + { it.orgnummer == orgnummer } + + internal fun opptjeningsårFilter(opptjeningsår: Year): UtbetaltDagSelector = + { Year.from(it.dato) == opptjeningsår } + + private infix fun (UtbetaltDagSelector).or(other: UtbetaltDagSelector): UtbetaltDagSelector = + { this(it) || other(it) } + + internal infix fun (UtbetaltDagSelector).and(other: UtbetaltDagSelector): UtbetaltDagSelector = + { this(it) && other(it) } internal fun gjenopprett(dto: UtbetaltDagDto) = when (dto) { @@ -226,6 +286,7 @@ internal class Feriepengeberegner( } } } + internal class SpleisPerson( orgnummer: String, dato: LocalDate, diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Maksdatokontekst.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Maksdatokontekst.kt index da5c56ab4b..483baaeb00 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Maksdatokontekst.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Maksdatokontekst.kt @@ -27,8 +27,16 @@ internal data class Maksdatokontekst( val avslåtteDager: Set ) { companion object { - val TomKontekst = Maksdatokontekst(LocalDate.MIN, LocalDate.MIN, LocalDate.MIN, emptySet(), emptySet(), emptySet()) + val TomKontekst = Maksdatokontekst( + LocalDate.MIN, + LocalDate.MIN, + LocalDate.MIN, + emptySet(), + emptySet(), + emptySet() + ) } + internal val oppholdsteller = oppholdsdager.size internal val forbrukteDager = betalteDager.size @@ -38,7 +46,9 @@ internal data class Maksdatokontekst( internal fun erDagerOver67ÅrForbrukte(alder: Alder, regler: ArbeidsgiverRegler) = gjenståendeDagerOver67År(alder, regler) == 0 - internal fun gjenståendeDagerUnder67År(alder: Alder, regler: ArbeidsgiverRegler) = regler.maksSykepengedager() - forbrukteDager + internal fun gjenståendeDagerUnder67År(alder: Alder, regler: ArbeidsgiverRegler) = + regler.maksSykepengedager() - forbrukteDager + internal fun gjenståendeDagerOver67År(alder: Alder, regler: ArbeidsgiverRegler): Int { val redusertYtelseAlder = alder.redusertYtelseAlder val forbrukteDagerOver67 = betalteDager.count { it > redusertYtelseAlder } @@ -51,12 +61,22 @@ internal data class Maksdatokontekst( internal fun datoForTilstrekkeligOppholdOppnådd(tilstrekkeligOpphold: Int) = oppholdsdager.sorted().getOrNull(tilstrekkeligOpphold - 1) - internal fun fremdelesSykEtterTilstrekkeligOpphold(vedtaksperiode: Periode, tilstrekkeligOpphold: Int): Boolean { - val datoForTilstrekkeligOpphold = datoForTilstrekkeligOppholdOppnådd(tilstrekkeligOpphold) ?: return false + internal fun fremdelesSykEtterTilstrekkeligOpphold( + vedtaksperiode: Periode, + tilstrekkeligOpphold: Int + ): Boolean { + val datoForTilstrekkeligOpphold = + datoForTilstrekkeligOppholdOppnådd(tilstrekkeligOpphold) ?: return false return avslåtteDager.any { it > datoForTilstrekkeligOpphold && it in vedtaksperiode } } - internal fun begrunnelseForAvslåtteDager(alder: Alder, regler: ArbeidsgiverRegler, tilstrekkeligOpphold: Int): List> { - val datoForTilstrekkeligOppholdOppnådd = datoForTilstrekkeligOppholdOppnådd(tilstrekkeligOpphold) + + internal fun begrunnelseForAvslåtteDager( + alder: Alder, + regler: ArbeidsgiverRegler, + tilstrekkeligOpphold: Int + ): List> { + val datoForTilstrekkeligOppholdOppnådd = + datoForTilstrekkeligOppholdOppnådd(tilstrekkeligOpphold) return avslåtteDager.map { avslåttDag -> val begrunnelseForAvslåttDag = when { alder.mistetSykepengerett(avslåttDag) -> Begrunnelse.Over70 @@ -93,6 +113,7 @@ internal data class Maksdatokontekst( betalteDager = betalteDager.plus(dato), oppholdsdager = emptySet() ) + // tilgir forbrukte dager som følge av at treårsvinduet forskyves internal fun dekrementer(dato: LocalDate, nyStartdatoTreårsvindu: LocalDate) = copy( vurdertTilOgMed = dato, @@ -100,10 +121,12 @@ internal data class Maksdatokontekst( betalteDager = betalteDager.filter { it >= nyStartdatoTreårsvindu }.toSet() + dato, oppholdsdager = emptySet() ) + internal fun medOppholdsdag(dato: LocalDate) = copy( vurdertTilOgMed = dato, oppholdsdager = oppholdsdager + dato ) + internal fun medAvslåttDag(dato: LocalDate) = copy( vurdertTilOgMed = dato, avslåtteDager = this.avslåtteDager + dato, @@ -119,35 +142,45 @@ internal data class Maksdatokontekst( tidslinjegrunnlagsubsumsjon: List>, beregnetTidslinjesubsumsjon: List ): Maksdatoresultat { - fun LocalDate.forrigeVirkedagFør() = minusDays(when (dayOfWeek) { - SUNDAY -> 2 - MONDAY -> 3 - else -> 1 - }) + fun LocalDate.forrigeVirkedagFør() = minusDays( + when (dayOfWeek) { + SUNDAY -> 2 + MONDAY -> 3 + else -> 1 + } + ) + fun LocalDate.sisteVirkedagInklusiv() = when (dayOfWeek) { SATURDAY -> minusDays(1) SUNDAY -> minusDays(2) else -> this } - val førSyttiårsdagen = fun (subsumsjonslogg: Subsumsjonslogg, utfallTom: LocalDate) { - subsumsjonslogg.logg(`§ 8-3 ledd 1 punktum 2`( - oppfylt = true, - syttiårsdagen = alder.syttiårsdagen, - utfallFom = vedtaksperiode.start, - utfallTom = utfallTom, - tidslinjeFom = vedtaksperiode.start, - tidslinjeTom = vedtaksperiode.endInclusive, - avvistePerioder = emptyList() - )) + val førSyttiårsdagen = fun(subsumsjonslogg: Subsumsjonslogg, utfallTom: LocalDate) { + subsumsjonslogg.logg( + `§ 8-3 ledd 1 punktum 2`( + oppfylt = true, + syttiårsdagen = alder.syttiårsdagen, + utfallFom = vedtaksperiode.start, + utfallTom = utfallTom, + tidslinjeFom = vedtaksperiode.start, + tidslinjeTom = vedtaksperiode.endInclusive, + avvistePerioder = emptyList() + ) + ) } - val harNåddMaks = erDagerOver67ÅrForbrukte(alder, regler) || erDagerUnder67ÅrForbrukte(alder, regler) + val harNåddMaks = + erDagerOver67ÅrForbrukte(alder, regler) || erDagerUnder67ÅrForbrukte(alder, regler) val forrigeMaksdato = if (harNåddMaks) betalteDager.last() else null val forrigeVirkedag = forrigeMaksdato ?: vurdertTilOgMed.sisteVirkedagInklusiv() - val maksdatoOrdinærRett = forrigeVirkedag + gjenståendeDagerUnder67År(alder, regler).ukedager - val maksdatoBegrensetRett = maxOf(forrigeVirkedag, alder.redusertYtelseAlder.sisteVirkedagInklusiv()) + gjenståendeDagerOver67År(alder, regler).ukedager + val maksdatoOrdinærRett = + forrigeVirkedag + gjenståendeDagerUnder67År(alder, regler).ukedager + val maksdatoBegrensetRett = maxOf( + forrigeVirkedag, + alder.redusertYtelseAlder.sisteVirkedagInklusiv() + ) + gjenståendeDagerOver67År(alder, regler).ukedager val hjemmelsbegrunnelse: Maksdatoresultat.Bestemmelse val maksdato: LocalDate @@ -160,21 +193,39 @@ internal data class Maksdatokontekst( gjenståendeDager = gjenståendeDagerUnder67År(alder, regler) hjemmelsbegrunnelse = Maksdatoresultat.Bestemmelse.ORDINÆR_RETT - `§ 8-12 ledd 1 punktum 1`(vedtaksperiode, tidslinjegrunnlagsubsumsjon, beregnetTidslinjesubsumsjon, gjenståendeDager, forbrukteDager, maksdato, startdatoSykepengerettighet).forEach { + `§ 8-12 ledd 1 punktum 1`( + vedtaksperiode, + tidslinjegrunnlagsubsumsjon, + beregnetTidslinjesubsumsjon, + gjenståendeDager, + forbrukteDager, + maksdato, + startdatoSykepengerettighet + ).forEach { subsumsjonslogg.logg(it) } førSyttiårsdagen(subsumsjonslogg, vedtaksperiode.endInclusive) } + maksdatoBegrensetRett <= alder.syttiårsdagen.forrigeVirkedagFør() -> { maksdato = maksdatoBegrensetRett gjenståendeDager = ukedager(forrigeVirkedag, maksdato) hjemmelsbegrunnelse = Maksdatoresultat.Bestemmelse.BEGRENSET_RETT - `§ 8-51 ledd 3`(vedtaksperiode, tidslinjegrunnlagsubsumsjon, beregnetTidslinjesubsumsjon, gjenståendeDager, forbrukteDager, maksdato, startdatoSykepengerettighet).forEach { + `§ 8-51 ledd 3`( + vedtaksperiode, + tidslinjegrunnlagsubsumsjon, + beregnetTidslinjesubsumsjon, + gjenståendeDager, + forbrukteDager, + maksdato, + startdatoSykepengerettighet + ).forEach { subsumsjonslogg.logg(it) } førSyttiårsdagen(subsumsjonslogg, alder.syttiårsdagen.forrigeDag) } + else -> { maksdato = alder.syttiårsdagen.forrigeVirkedagFør() gjenståendeDager = ukedager(forrigeVirkedag, maksdato) @@ -184,22 +235,29 @@ internal data class Maksdatokontekst( førSyttiårsdagen(subsumsjonslogg, alder.syttiårsdagen.forrigeDag) } - val avvisteDagerFraOgMedSøtti = avslåtteDager.filter { alder.mistetSykepengerett(it) } + val avvisteDagerFraOgMedSøtti = + avslåtteDager.filter { alder.mistetSykepengerett(it) } if (avvisteDagerFraOgMedSøtti.isNotEmpty()) { - subsumsjonslogg.logg(`§ 8-3 ledd 1 punktum 2`( - oppfylt = false, - syttiårsdagen = alder.syttiårsdagen, - utfallFom = maxOf(alder.syttiårsdagen, vedtaksperiode.start), - utfallTom = vedtaksperiode.endInclusive, - tidslinjeFom = vedtaksperiode.start, - tidslinjeTom = vedtaksperiode.endInclusive, - avvistePerioder = avvisteDagerFraOgMedSøtti.grupperSammenhengendePerioder() - )) + subsumsjonslogg.logg( + `§ 8-3 ledd 1 punktum 2`( + oppfylt = false, + syttiårsdagen = alder.syttiårsdagen, + utfallFom = maxOf(alder.syttiårsdagen, vedtaksperiode.start), + utfallTom = vedtaksperiode.endInclusive, + tidslinjeFom = vedtaksperiode.start, + tidslinjeTom = vedtaksperiode.endInclusive, + avvistePerioder = avvisteDagerFraOgMedSøtti.grupperSammenhengendePerioder() + ) + ) } } } - val tidligsteDag = if (startdatoSykepengerettighet == LocalDate.MIN) startdatoTreårsvindu else minOf(startdatoTreårsvindu, startdatoSykepengerettighet) + val tidligsteDag = + if (startdatoSykepengerettighet == LocalDate.MIN) startdatoTreårsvindu else minOf( + startdatoTreårsvindu, + startdatoSykepengerettighet + ) return Maksdatoresultat( vurdertTilOgMed = vurdertTilOgMed, bestemmelse = hjemmelsbegrunnelse, @@ -213,4 +271,4 @@ internal data class Maksdatokontekst( grunnlag = samletGrunnlagstidslinje.subset(tidligsteDag til vurdertTilOgMed) ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumSykepengedagerfilter.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumSykepengedagerfilter.kt index 5b1d8ce552..6c28f3c3c6 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumSykepengedagerfilter.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumSykepengedagerfilter.kt @@ -19,7 +19,7 @@ internal class MaksimumSykepengedagerfilter( private val alder: Alder, private val arbeidsgiverRegler: ArbeidsgiverRegler, private val infotrygdtidslinje: Utbetalingstidslinje -): UtbetalingstidslinjerFilter { +) : UtbetalingstidslinjerFilter { private companion object { const val TILSTREKKELIG_OPPHOLD_I_SYKEDAGER = 26 * 7 @@ -37,8 +37,19 @@ internal class MaksimumSykepengedagerfilter( private val tidslinjegrunnlagsubsumsjon by lazy { tidslinjegrunnlag.subsumsjonsformat() } private val beregnetTidslinjesubsumsjon by lazy { beregnetTidslinje.subsumsjonsformat() } - internal fun maksdatoresultatForVedtaksperiode(periode: Periode, subsumsjonslogg: Subsumsjonslogg): Maksdatoresultat { - return sisteVurdering.avgrensTil(periode.endInclusive).beregnMaksdatoOgSubsummer(alder, arbeidsgiverRegler, periode, subsumsjonslogg, beregnetTidslinje, tidslinjegrunnlagsubsumsjon, beregnetTidslinjesubsumsjon) + internal fun maksdatoresultatForVedtaksperiode( + periode: Periode, + subsumsjonslogg: Subsumsjonslogg + ): Maksdatoresultat { + return sisteVurdering.avgrensTil(periode.endInclusive).beregnMaksdatoOgSubsummer( + alder, + arbeidsgiverRegler, + periode, + subsumsjonslogg, + beregnetTidslinje, + tidslinjegrunnlagsubsumsjon, + beregnetTidslinjesubsumsjon + ) } override fun filter( @@ -48,7 +59,8 @@ internal class MaksimumSykepengedagerfilter( subsumsjonslogg: Subsumsjonslogg ): List { this.subsumsjonslogg = subsumsjonslogg - tidslinjegrunnlag = tidslinjer + listOf(infotrygdtidslinje.fremTilOgMed(periode.endInclusive)) + tidslinjegrunnlag = + tidslinjer + listOf(infotrygdtidslinje.fremTilOgMed(periode.endInclusive)) beregnetTidslinje = tidslinjegrunnlag.reduce(Utbetalingstidslinje::plus) beregnetTidslinje.forEach { dag -> @@ -63,10 +75,12 @@ internal class MaksimumSykepengedagerfilter( if (alder.mistetSykepengerett(dag.dato)) state(State.ForGammel) state.betalbarDag(this, dag.dato) } + is Utbetalingsdag.NavHelgDag -> { if (alder.mistetSykepengerett(dag.dato)) state(State.ForGammel) state.sykdomshelg(this, dag.dato) } + is UkjentDag -> state.oppholdsdag(this, dag.dato) } } @@ -76,14 +90,28 @@ internal class MaksimumSykepengedagerfilter( * tidslinjer og de forventer at alle maksdatodager avslås, uavhengig av maksdatosak */ val begrunnelser = (maksdatosaker.plusElement(sisteVurdering)) - .flatMap { maksdatosak -> maksdatosak.begrunnelseForAvslåtteDager(alder, arbeidsgiverRegler, TILSTREKKELIG_OPPHOLD_I_SYKEDAGER) } + .flatMap { maksdatosak -> + maksdatosak.begrunnelseForAvslåtteDager( + alder, + arbeidsgiverRegler, + TILSTREKKELIG_OPPHOLD_I_SYKEDAGER + ) + } .groupBy(keySelector = { it.first }, valueTransform = { it.second }) - val avvisteTidslinjer = begrunnelser.entries.fold(tidslinjer) { result, (begrunnelse, dager) -> - Utbetalingstidslinje.avvis(result, dager.grupperSammenhengendePerioder(), listOf(begrunnelse)) - } + val avvisteTidslinjer = + begrunnelser.entries.fold(tidslinjer) { result, (begrunnelse, dager) -> + Utbetalingstidslinje.avvis( + result, + dager.grupperSammenhengendePerioder(), + listOf(begrunnelse) + ) + } - if (sisteVurdering.fremdelesSykEtterTilstrekkeligOpphold(periode, TILSTREKKELIG_OPPHOLD_I_SYKEDAGER)) { + if (sisteVurdering.fremdelesSykEtterTilstrekkeligOpphold( + periode, + TILSTREKKELIG_OPPHOLD_I_SYKEDAGER + )) { aktivitetslogg.funksjonellFeil(RV_VV_9) } if (sisteVurdering.harNåddMaks(periode)) @@ -105,21 +133,27 @@ internal class MaksimumSykepengedagerfilter( sisteVurdering = sisteVurdering.medOppholdsdag(dato) } - private fun subsummerTilstrekkeligOppholdNådd(dagen: LocalDate, oppholdFørDagen: Int = sisteVurdering.oppholdsteller): Boolean { + private fun subsummerTilstrekkeligOppholdNådd( + dagen: LocalDate, + oppholdFørDagen: Int = sisteVurdering.oppholdsteller + ): Boolean { // Nok opphold? 🤔 val harTilstrekkeligOpphold = oppholdFørDagen >= TILSTREKKELIG_OPPHOLD_I_SYKEDAGER - val gjenståendeSykepengedager = sisteVurdering.gjenståendeDagerUnder67År(alder, arbeidsgiverRegler) + val gjenståendeSykepengedager = + sisteVurdering.gjenståendeDagerUnder67År(alder, arbeidsgiverRegler) // Bare relevant om det er ny rett på sykepenger eller om vilkåret ikke er oppfylt if (harTilstrekkeligOpphold || gjenståendeSykepengedager == 0) { - subsumsjonslogg.logg(`§ 8-12 ledd 2`( - oppfylt = harTilstrekkeligOpphold, - dato = dagen, - gjenståendeSykepengedager = gjenståendeSykepengedager, - beregnetAntallOppholdsdager = oppholdFørDagen, - tilstrekkeligOppholdISykedager = TILSTREKKELIG_OPPHOLD_I_SYKEDAGER, - tidslinjegrunnlag = tidslinjegrunnlagsubsumsjon, - beregnetTidslinje = beregnetTidslinjesubsumsjon, - )) + subsumsjonslogg.logg( + `§ 8-12 ledd 2`( + oppfylt = harTilstrekkeligOpphold, + dato = dagen, + gjenståendeSykepengedager = gjenståendeSykepengedager, + beregnetAntallOppholdsdager = oppholdFørDagen, + tilstrekkeligOppholdISykedager = TILSTREKKELIG_OPPHOLD_I_SYKEDAGER, + tidslinjegrunnlag = tidslinjegrunnlagsubsumsjon, + beregnetTidslinje = beregnetTidslinjesubsumsjon, + ) + ) } return harTilstrekkeligOpphold } @@ -127,29 +161,42 @@ internal class MaksimumSykepengedagerfilter( private fun håndterBetalbarDag(dagen: LocalDate) { sisteVurdering = sisteVurdering.inkrementer(dagen) when { - sisteVurdering.erDagerUnder67ÅrForbrukte(alder, arbeidsgiverRegler) || sisteVurdering.erDagerOver67ÅrForbrukte(alder, arbeidsgiverRegler) -> state(Karantene) + sisteVurdering.erDagerUnder67ÅrForbrukte( + alder, + arbeidsgiverRegler + ) || sisteVurdering.erDagerOver67ÅrForbrukte(alder, arbeidsgiverRegler) -> state( + Karantene + ) + else -> state(Syk) } } + private fun håndterBetalbarDagEtterFerie(dagen: LocalDate) { håndterBetalbarDag(dagen) } + private fun håndterBetalbarDagEtterOpphold(dagen: LocalDate) { val oppholdFørDagen = sisteVurdering.oppholdsteller sisteVurdering = sisteVurdering.dekrementer(dagen, dagen.minusYears(HISTORISK_PERIODE_I_ÅR)) subsummerTilstrekkeligOppholdNådd(dagen, oppholdFørDagen = oppholdFørDagen) håndterBetalbarDag(dagen) } + private fun håndterBetalbarDagEtterMaksdato(dag: LocalDate) { sisteVurdering = sisteVurdering.medAvslåttDag(dag) } private interface State { fun betalbarDag(avgrenser: MaksimumSykepengedagerfilter, dagen: LocalDate) - fun avvistDag(avgrenser: MaksimumSykepengedagerfilter, dagen: LocalDate) = oppholdsdag(avgrenser, dagen) + fun avvistDag(avgrenser: MaksimumSykepengedagerfilter, dagen: LocalDate) = + oppholdsdag(avgrenser, dagen) + fun oppholdsdag(avgrenser: MaksimumSykepengedagerfilter, dagen: LocalDate) fun sykdomshelg(avgrenser: MaksimumSykepengedagerfilter, dagen: LocalDate) - fun fridag(avgrenser: MaksimumSykepengedagerfilter, dagen: LocalDate) = oppholdsdag(avgrenser, dagen) + fun fridag(avgrenser: MaksimumSykepengedagerfilter, dagen: LocalDate) = + oppholdsdag(avgrenser, dagen) + fun entering(avgrenser: MaksimumSykepengedagerfilter) {} fun leaving(avgrenser: MaksimumSykepengedagerfilter) {} @@ -235,7 +282,9 @@ internal class MaksimumSykepengedagerfilter( override fun oppholdsdag(avgrenser: MaksimumSykepengedagerfilter, dagen: LocalDate) { avgrenser.økOppholdstelling(dagen) - if (!avgrenser.subsummerTilstrekkeligOppholdNådd(dagen)) return avgrenser.state(Opphold) + if (!avgrenser.subsummerTilstrekkeligOppholdNådd(dagen)) return avgrenser.state( + Opphold + ) avgrenser.state(Initiell) } } @@ -308,7 +357,8 @@ internal class MaksimumSykepengedagerfilter( override fun oppholdsdag(avgrenser: MaksimumSykepengedagerfilter, dagen: LocalDate) {} - override fun leaving(avgrenser: MaksimumSykepengedagerfilter) = throw IllegalStateException("Kan ikke gå ut fra state ForGammel") + override fun leaving(avgrenser: MaksimumSykepengedagerfilter) = + throw IllegalStateException("Kan ikke gå ut fra state ForGammel") private fun over70(avgrenser: MaksimumSykepengedagerfilter, dagen: LocalDate) { avgrenser.håndterBetalbarDagEtterMaksdato(dagen) diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Sykdomsgradfilter.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Sykdomsgradfilter.kt index f0b8802355..aa5c614e08 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Sykdomsgradfilter.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Sykdomsgradfilter.kt @@ -28,19 +28,25 @@ internal class Sykdomsgradfilter(private val minimumSykdomsgradsvurdering: Minim val oppdaterte = Utbetalingstidslinje.totalSykdomsgrad(tidslinjer) val tentativtAvvistePerioder = Utbetalingsdag.dagerUnderGrensen(oppdaterte) - val avvistePerioder = minimumSykdomsgradsvurdering.fjernDagerSomSkalUtbetalesLikevel(tentativtAvvistePerioder) + val avvistePerioder = + minimumSykdomsgradsvurdering.fjernDagerSomSkalUtbetalesLikevel(tentativtAvvistePerioder) if (!avvistePerioder.containsAll(tentativtAvvistePerioder)) { aktivitetslogg.varsel(RV_VV_17) } - val avvisteTidslinjer = avvis(oppdaterte, avvistePerioder, listOf(Begrunnelse.MinimumSykdomsgrad)) + val avvisteTidslinjer = + avvis(oppdaterte, avvistePerioder, listOf(Begrunnelse.MinimumSykdomsgrad)) Prosentdel.subsumsjon(subsumsjonslogg) { grense -> logg(`§ 8-13 ledd 2`(periode, tidslinjerForSubsumsjon, grense, avvistePerioder)) } val avvisteDager = avvisteDager(avvisteTidslinjer, periode, Begrunnelse.MinimumSykdomsgrad) val harAvvisteDager = avvisteDager.isNotEmpty() - `§ 8-13 ledd 1`(periode, avvisteDager.map { it.dato }.grupperSammenhengendePerioderMedHensynTilHelg(), tidslinjerForSubsumsjon).forEach { + `§ 8-13 ledd 1`( + periode, + avvisteDager.map { it.dato }.grupperSammenhengendePerioderMedHensynTilHelg(), + tidslinjerForSubsumsjon + ).forEach { subsumsjonslogg.logg(it) } if (harAvvisteDager) aktivitetslogg.varsel(RV_VV_4) diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeBuilder.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeBuilder.kt index 8313182d62..17d34f0a6a 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeBuilder.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeBuilder.kt @@ -31,6 +31,7 @@ internal class VilkårsprøvdSkjæringstidspunkt( refusjonsopplysninger = inntekt.refusjonsopplysninger ) } + internal fun forArbeidsgiver(organisasjonsnummer: String): ArbeidsgiverFaktaavklartInntekt? { return inntekter[organisasjonsnummer] } @@ -40,9 +41,17 @@ internal class VilkårsprøvdSkjæringstidspunkt( } private fun ghosttidslinjer(utbetalingstidslinjer: Map>): Map { - val beregningsperiode = utbetalingstidslinjer.values.flatten().map { it.periode() }.periode()!! + val beregningsperiode = + utbetalingstidslinjer.values.flatten().map { it.periode() }.periode()!! return inntekter - .mapValues { (orgnr, v) -> v.ghosttidslinje(beregningsperiode, skjæringstidspunkt, `6G`, utbetalingstidslinjer[orgnr] ?: emptyList()) } + .mapValues { (orgnr, v) -> + v.ghosttidslinje( + beregningsperiode, + skjæringstidspunkt, + `6G`, + utbetalingstidslinjer[orgnr] ?: emptyList() + ) + } .filterValues { it.isNotEmpty() } } @@ -53,13 +62,16 @@ internal class VilkårsprøvdSkjæringstidspunkt( beregningsperiode.forEach { dato -> when (val beløpsdag = nyInntekt.beløpstidslinje[dato]) { is Beløpsdag -> { - addArbeidsdag(dato, Økonomi.ikkeBetalt().inntekt( + addArbeidsdag( + dato, Økonomi.ikkeBetalt().inntekt( aktuellDagsinntekt = beløpsdag.beløp, beregningsgrunnlag = INGEN, `6G` = `6G`, refusjonsbeløp = INGEN - )) + ) + ) } + is UkjentDag -> { addArbeidsdag(dato, Økonomi.ikkeBetalt()) } @@ -93,7 +105,8 @@ internal class ArbeidsgiverFaktaavklartInntekt( private val gjelder: Periode, private val refusjonsopplysninger: Refusjonsopplysning.Refusjonsopplysninger ) { - private val lagDefaultRefusjonsbeløpHvisMangler = { _: LocalDate, aktuellDagsinntekt: Inntekt -> aktuellDagsinntekt } + private val lagDefaultRefusjonsbeløpHvisMangler = + { _: LocalDate, aktuellDagsinntekt: Inntekt -> aktuellDagsinntekt } private val krevRefusjonsbeløpHvisMangler = { dato: LocalDate, _: Inntekt -> error("Har ingen refusjonsopplysninger på vilkårsgrunnlag for utbetalingsdag $dato") } @@ -107,7 +120,9 @@ internal class ArbeidsgiverFaktaavklartInntekt( if (!gjelderPåSkjæringstidspunktet(skjæringstidspunkt)) return INGEN return fastsattÅrsinntekt } - private fun gjelderPåSkjæringstidspunktet(skjæringstidspunkt: LocalDate) = skjæringstidspunkt == gjelder.start + + private fun gjelderPåSkjæringstidspunktet(skjæringstidspunkt: LocalDate) = + skjæringstidspunkt == gjelder.start internal fun medInntektHvisFinnes( dato: LocalDate, @@ -115,7 +130,13 @@ internal class ArbeidsgiverFaktaavklartInntekt( regler: ArbeidsgiverRegler, refusjonstidslinje: Beløpstidslinje ): Økonomi { - return medInntekt(dato, økonomi, regler, lagDefaultRefusjonsbeløpHvisMangler, refusjonstidslinje) + return medInntekt( + dato, + økonomi, + regler, + lagDefaultRefusjonsbeløpHvisMangler, + refusjonstidslinje + ) } internal fun medInntektEllersVarsel( @@ -127,10 +148,20 @@ internal class ArbeidsgiverFaktaavklartInntekt( return medInntekt(dato, økonomi, regler, krevRefusjonsbeløpHvisMangler, refusjonstidslinje) } - private fun medInntekt(dato: LocalDate, økonomi: Økonomi, regler: ArbeidsgiverRegler, refusjonsopplysningFinnesIkkeStrategi: (LocalDate, Inntekt) -> Inntekt, refusjonstidslinje: Beløpstidslinje): Økonomi { + private fun medInntekt( + dato: LocalDate, + økonomi: Økonomi, + regler: ArbeidsgiverRegler, + refusjonsopplysningFinnesIkkeStrategi: (LocalDate, Inntekt) -> Inntekt, + refusjonstidslinje: Beløpstidslinje + ): Økonomi { val aktuellDagsinntekt = fastsattÅrsinntekt(dato) val refusjonsbeløpFraInntektsgrunnlag = refusjonsopplysninger.refusjonsbeløpOrNull(dato) - val refusjonsbeløp = refusjonsbeløpFraInntektsgrunnlag ?: refusjonsopplysningFinnesIkkeStrategi(dato, aktuellDagsinntekt) + val refusjonsbeløp = + refusjonsbeløpFraInntektsgrunnlag ?: refusjonsopplysningFinnesIkkeStrategi( + dato, + aktuellDagsinntekt + ) loggUlikeRefusjonsbeløp(refusjonsbeløpFraInntektsgrunnlag, refusjonstidslinje[dato]) return økonomi.inntekt( aktuellDagsinntekt = aktuellDagsinntekt, @@ -141,16 +172,26 @@ internal class ArbeidsgiverFaktaavklartInntekt( ) } - private fun loggUlikeRefusjonsbeløp(refusjonsbeløpFraInntektsgrunnlag: Inntekt?, refusjonsdag: no.nav.helse.person.beløp.Dag) { + private fun loggUlikeRefusjonsbeløp( + refusjonsbeløpFraInntektsgrunnlag: Inntekt?, + refusjonsdag: no.nav.helse.person.beløp.Dag + ) { if (refusjonsbeløpFraInntektsgrunnlag == null) return if (refusjonsdag is UkjentDag) return if (refusjonsbeløpFraInntektsgrunnlag.rundTilDaglig() == refusjonsdag.beløp.rundTilDaglig()) return sikkerlogger.info("Fant ulike refusjonsbeløp på dato ${refusjonsdag.dato}. RefusjonsbeløpFraInntektsgrunnlag = ${refusjonsbeløpFraInntektsgrunnlag.daglig}, refusjonsbeløpFraTidslinje = ${refusjonsdag.beløp.daglig}") } - internal fun ghosttidslinje(beregningsperiode: Periode, skjæringstidspunkt: LocalDate, `6G`: Inntekt, arbeidsgiverlinjer: List): Utbetalingstidslinje { + internal fun ghosttidslinje( + beregningsperiode: Periode, + skjæringstidspunkt: LocalDate, + `6G`: Inntekt, + arbeidsgiverlinjer: List + ): Utbetalingstidslinje { // avdekker hvilken periode det er aktuelt å lage ghost-dager i - val aktueltGhostområde = if (gjelder.start <= beregningsperiode.endInclusive) listOf(beregningsperiode.subset(gjelder.start til LocalDate.MAX)) else emptyList() + val aktueltGhostområde = if (gjelder.start <= beregningsperiode.endInclusive) listOf( + beregningsperiode.subset(gjelder.start til LocalDate.MAX) + ) else emptyList() // fjerner perioder med registrert vedtaksperiode val ghostperioder = arbeidsgiverlinjer.fold(aktueltGhostområde) { result, linje -> @@ -163,17 +204,22 @@ internal class ArbeidsgiverFaktaavklartInntekt( periode.forEach { dag -> val aktuellDagsinntekt = fastsattÅrsinntekt(dag) if (dag.erHelg()) addFridag(dag, Økonomi.ikkeBetalt()) - else addArbeidsdag(dag, Økonomi.ikkeBetalt().inntekt( + else addArbeidsdag( + dag, Økonomi.ikkeBetalt().inntekt( aktuellDagsinntekt = aktuellDagsinntekt, beregningsgrunnlag = beregningsgrunnlag(skjæringstidspunkt), dekningsgrunnlag = INGEN, `6G` = `6G`, refusjonsbeløp = INGEN - )) + ) + ) } }.build() } - return (ghosttidslinje + arbeidsgiverlinjer).fold(Utbetalingstidslinje(), Utbetalingstidslinje::plus) + return (ghosttidslinje + arbeidsgiverlinjer).fold( + Utbetalingstidslinje(), + Utbetalingstidslinje::plus + ) } private companion object { @@ -201,31 +247,56 @@ internal class UtbetalingstidslinjeBuilderVedtaksperiode( if (erAGP(dag.dato)) arbeidsgiverperiodedag(builder, dag.dato, dag.økonomi) else helg(builder, dag.dato, dag.økonomi) } + is Dag.Arbeidsgiverdag -> { if (erAGP(dag.dato)) arbeidsgiverperiodedag(builder, dag.dato, dag.økonomi) - else avvistDag(builder, dag.dato, dag.økonomi.ikkeBetalt(), Begrunnelse.EgenmeldingUtenforArbeidsgiverperiode) + else avvistDag( + builder, + dag.dato, + dag.økonomi.ikkeBetalt(), + Begrunnelse.EgenmeldingUtenforArbeidsgiverperiode + ) } + is Dag.Sykedag -> { if (erAGP(dag.dato)) arbeidsgiverperiodedag(builder, dag.dato, dag.økonomi) else navDag(builder, dag.dato, dag.økonomi) } + is Dag.SykHelgedag -> { if (erAGP(dag.dato)) arbeidsgiverperiodedag(builder, dag.dato, dag.økonomi) else helg(builder, dag.dato, dag.økonomi) } + is Dag.SykedagNav -> { - if (erAGP(dag.dato)) builder.addArbeidsgiverperiodedagNav(dag.dato, faktaavklarteInntekter.medInntektEllersVarsel(dag.dato, dag.økonomi, regler, refusjonstidslinje)) + if (erAGP(dag.dato)) builder.addArbeidsgiverperiodedagNav( + dag.dato, + faktaavklarteInntekter.medInntektEllersVarsel( + dag.dato, + dag.økonomi, + regler, + refusjonstidslinje + ) + ) else when (dag.dato.erHelg()) { true -> helg(builder, dag.dato, dag.økonomi) false -> navDag(builder, dag.dato, dag.økonomi) } } + is Dag.AndreYtelser -> { // andreytelse-dagen er fridag hvis den overlapper med en agp-dag, eller om vedtaksperioden ikke har noen agp -- fordi andre ytelsen spiser opp alt - if (erAGP(dag.dato)) arbeidsgiverperiodedag(builder, dag.dato, Økonomi.ikkeBetalt()) - else if (arbeidsgiverperiode.isEmpty() || dag.dato < arbeidsgiverperiode.first().start) fridag(builder, dag.dato) + if (erAGP(dag.dato)) arbeidsgiverperiodedag( + builder, + dag.dato, + Økonomi.ikkeBetalt() + ) + else if (arbeidsgiverperiode.isEmpty() || dag.dato < arbeidsgiverperiode.first().start) fridag( + builder, + dag.dato + ) else { - val begrunnelse = when(dag.ytelse) { + val begrunnelse = when (dag.ytelse) { Dag.AndreYtelser.AnnenYtelse.AAP -> Begrunnelse.AndreYtelserAap Dag.AndreYtelser.AnnenYtelse.Dagpenger -> Begrunnelse.AndreYtelserDagpenger Dag.AndreYtelser.AnnenYtelse.Foreldrepenger -> Begrunnelse.AndreYtelserForeldrepenger @@ -238,20 +309,44 @@ internal class UtbetalingstidslinjeBuilderVedtaksperiode( } } + is Dag.Feriedag -> { - if (erAGP(dag.dato)) arbeidsgiverperiodedag(builder, dag.dato, Økonomi.ikkeBetalt()) + if (erAGP(dag.dato)) arbeidsgiverperiodedag( + builder, + dag.dato, + Økonomi.ikkeBetalt() + ) else fridag(builder, dag.dato) } + is Dag.ForeldetSykedag -> { if (erAGP(dag.dato)) arbeidsgiverperiodedag(builder, dag.dato, dag.økonomi) - else builder.addForeldetDag(dag.dato, faktaavklarteInntekter.medInntektHvisFinnes(dag.dato, dag.økonomi, regler, refusjonstidslinje)) + else builder.addForeldetDag( + dag.dato, + faktaavklarteInntekter.medInntektHvisFinnes( + dag.dato, + dag.økonomi, + regler, + refusjonstidslinje + ) + ) } + is Dag.ArbeidIkkeGjenopptattDag -> { - if (erAGP(dag.dato)) arbeidsgiverperiodedag(builder, dag.dato, Økonomi.ikkeBetalt()) + if (erAGP(dag.dato)) arbeidsgiverperiodedag( + builder, + dag.dato, + Økonomi.ikkeBetalt() + ) else fridag(builder, dag.dato) } + is Dag.Permisjonsdag -> { - if (erAGP(dag.dato)) arbeidsgiverperiodedag(builder, dag.dato, Økonomi.ikkeBetalt()) + if (erAGP(dag.dato)) arbeidsgiverperiodedag( + builder, + dag.dato, + Økonomi.ikkeBetalt() + ) else fridag(builder, dag.dato) } /** **/ @@ -262,6 +357,7 @@ internal class UtbetalingstidslinjeBuilderVedtaksperiode( // den andre builderen kaster egentlig exception her, men trenger vi det –– sånn egentlig? fridag(builder, dag.dato) } + is Dag.UkjentDag -> { // todo: pga strekking av egenmeldingsdager fra søknad så har vi vedtaksperioder med ukjentdager // error("Forventer ikke å finne en ukjentdag i en vedtaksperiode") @@ -277,22 +373,75 @@ internal class UtbetalingstidslinjeBuilderVedtaksperiode( private fun erAGP(dato: LocalDate) = arbeidsgiverperiode.any { dato in it } - private fun arbeidsgiverperiodedag(builder: Utbetalingstidslinje.Builder, dato: LocalDate, økonomi: Økonomi) { - builder.addArbeidsgiverperiodedag(dato, faktaavklarteInntekter.medInntektHvisFinnes(dato, økonomi.ikkeBetalt(), regler, refusjonstidslinje)) + private fun arbeidsgiverperiodedag( + builder: Utbetalingstidslinje.Builder, + dato: LocalDate, + økonomi: Økonomi + ) { + builder.addArbeidsgiverperiodedag( + dato, + faktaavklarteInntekter.medInntektHvisFinnes( + dato, + økonomi.ikkeBetalt(), + regler, + refusjonstidslinje + ) + ) } - private fun avvistDag(builder: Utbetalingstidslinje.Builder, dato: LocalDate, økonomi: Økonomi, begrunnelse: Begrunnelse) { - builder.addAvvistDag(dato, faktaavklarteInntekter.medInntektHvisFinnes(dato, økonomi, regler, refusjonstidslinje), listOf(begrunnelse)) + + private fun avvistDag( + builder: Utbetalingstidslinje.Builder, + dato: LocalDate, + økonomi: Økonomi, + begrunnelse: Begrunnelse + ) { + builder.addAvvistDag( + dato, + faktaavklarteInntekter.medInntektHvisFinnes(dato, økonomi, regler, refusjonstidslinje), + listOf(begrunnelse) + ) } + private fun helg(builder: Utbetalingstidslinje.Builder, dato: LocalDate, økonomi: Økonomi) { - builder.addHelg(dato, faktaavklarteInntekter.medInntektHvisFinnes(dato, økonomi.ikkeBetalt(), regler, refusjonstidslinje)) + builder.addHelg( + dato, + faktaavklarteInntekter.medInntektHvisFinnes( + dato, + økonomi.ikkeBetalt(), + regler, + refusjonstidslinje + ) + ) } + private fun navDag(builder: Utbetalingstidslinje.Builder, dato: LocalDate, økonomi: Økonomi) { - builder.addNAVdag(dato, faktaavklarteInntekter.medInntektEllersVarsel(dato, økonomi, regler, refusjonstidslinje)) + builder.addNAVdag( + dato, + faktaavklarteInntekter.medInntektEllersVarsel(dato, økonomi, regler, refusjonstidslinje) + ) } + private fun fridag(builder: Utbetalingstidslinje.Builder, dato: LocalDate) { - builder.addFridag(dato, faktaavklarteInntekter.medInntektHvisFinnes(dato, Økonomi.ikkeBetalt(), regler, refusjonstidslinje)) + builder.addFridag( + dato, + faktaavklarteInntekter.medInntektHvisFinnes( + dato, + Økonomi.ikkeBetalt(), + regler, + refusjonstidslinje + ) + ) } + private fun arbeidsdag(builder: Utbetalingstidslinje.Builder, dato: LocalDate) { - builder.addArbeidsdag(dato, faktaavklarteInntekter.medInntektHvisFinnes(dato, Økonomi.ikkeBetalt(), regler, refusjonstidslinje)) + builder.addArbeidsdag( + dato, + faktaavklarteInntekter.medInntektHvisFinnes( + dato, + Økonomi.ikkeBetalt(), + regler, + refusjonstidslinje + ) + ) } } diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingstidslinjesubsumsjon.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingstidslinjesubsumsjon.kt index 22998f1919..3351882bc1 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingstidslinjesubsumsjon.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/utbetalingstidslinje/Utbetalingstidslinjesubsumsjon.kt @@ -48,54 +48,92 @@ internal class Utbetalingstidslinjesubsumsjon( arbeidsgiverperiodedager.utvidForrigeDatoperiodeEllerLeggTil(dag.dato) dekningsgrunnlag.utvidForrigeDatoperiodeEllerLeggTil(dag.dato, dag.økonomi) } + is Utbetalingsdag.ArbeidsgiverperiodedagNav -> { arbeidsgiverperiodeNavdager.utvidForrigeDatoperiodeEllerLeggTil(dag.dato) dekningsgrunnlag.utvidForrigeDatoperiodeEllerLeggTil(dag.dato, dag.økonomi) } + is Utbetalingsdag.AvvistDag -> { - if (AndreYtelserAap in dag.begrunnelser) aap.utvidForrigeDatoperiodeEllerLeggTil(dag.dato) + if (AndreYtelserAap in dag.begrunnelser) aap.utvidForrigeDatoperiodeEllerLeggTil( + dag.dato + ) val andreYtelser = setOf( - AndreYtelserDagpenger, AndreYtelserForeldrepenger, AndreYtelserOmsorgspenger, AndreYtelserOpplaringspenger, AndreYtelserSvangerskapspenger, AndreYtelserPleiepenger + AndreYtelserDagpenger, + AndreYtelserForeldrepenger, + AndreYtelserOmsorgspenger, + AndreYtelserOpplaringspenger, + AndreYtelserSvangerskapspenger, + AndreYtelserPleiepenger ) if (dag.begrunnelser.any { it in andreYtelser }) { this.andreYtelser.utvidForrigeDatoperiodeEllerLeggTil(dag.dato) } } + is Utbetalingsdag.ForeldetDag -> { dekningsgrunnlag.utvidForrigeDatoperiodeEllerLeggTil(dag.dato, dag.økonomi) } + is Utbetalingsdag.Fridag -> { fridager.utvidForrigeDatoperiodeEllerLeggTil(dag.dato) dekningsgrunnlag.utvidForrigeDatoperiodeEllerLeggTil(dag.dato, dag.økonomi) } + is Utbetalingsdag.NavDag -> { dekningsgrunnlag.utvidForrigeDatoperiodeEllerLeggTil(dag.dato, dag.økonomi) } + is Utbetalingsdag.NavHelgDag -> { helger.utvidForrigeDatoperiodeEllerLeggTil(dag.dato) dekningsgrunnlag.utvidForrigeDatoperiodeEllerLeggTil(dag.dato, dag.økonomi) } + is Utbetalingsdag.Arbeidsdag, - is Utbetalingsdag.UkjentDag -> { /* gjør ingenting */ } + is Utbetalingsdag.UkjentDag -> { /* gjør ingenting */ + } } } } fun subsummer(vedtaksperiode: Periode, regler: ArbeidsgiverRegler) { - subsumsjonslogg.logg(`§ 8-17 ledd 1 bokstav a`(false, arbeidsgiverperiodedager, tidslinjesubsumsjonsformat)) - subsumsjonslogg.logg(`§ 8-19 andre ledd`(arbeidsgiverperiodedager, tidslinjesubsumsjonsformat)) + subsumsjonslogg.logg( + `§ 8-17 ledd 1 bokstav a`( + false, + arbeidsgiverperiodedager, + tidslinjesubsumsjonsformat + ) + ) + subsumsjonslogg.logg( + `§ 8-19 andre ledd`( + arbeidsgiverperiodedager, + tidslinjesubsumsjonsformat + ) + ) subsumsjonslogg.logg(`§ 8-17 ledd 1`(arbeidsgiverperiodeNavdager)) subsumsjonslogg.logg(`§ 8-11 ledd 1`(vedtaksperiode, helger)) subsumsjonslogg.logg(`§ 8-17 ledd 2`(fridager, tidslinjesubsumsjonsformat)) subsumsjonslogg.logg(`§ 8-48 ledd 2 punktum 2`(aap, tidslinjesubsumsjonsformat)) - subsumsjonslogg.logg(`Trygderettens kjennelse 2006-4023`(andreYtelser, tidslinjesubsumsjonsformat)) + subsumsjonslogg.logg( + `Trygderettens kjennelse 2006-4023`( + andreYtelser, + tidslinjesubsumsjonsformat + ) + ) // subsummerer alle periodene samlet, så lenge inntekten er lik dekningsgrunnlag .asSequence() .filter { it.inntekt.årligInntekt > 0 } .groupBy { it.inntekt } .forEach { (inntekt, perioder) -> - subsumsjonslogg.logg(`§ 8-16 ledd 1`(perioder.map { it.periode }, regler.dekningsgrad(), inntekt.årligInntekt, inntekt.årligDekningsgrunnlag)) + subsumsjonslogg.logg( + `§ 8-16 ledd 1`( + perioder.map { it.periode }, + regler.dekningsgrad(), + inntekt.årligInntekt, + inntekt.årligDekningsgrunnlag + ) + ) } } @@ -115,14 +153,30 @@ internal class Utbetalingstidslinjesubsumsjon( nyttElement = { dato.somPeriode() } ) } - private fun MutableList.utvidForrigeDatoperiodeEllerLeggTil(dato: LocalDate, økonomi: Økonomi) { + + private fun MutableList.utvidForrigeDatoperiodeEllerLeggTil( + dato: LocalDate, + økonomi: Økonomi + ) { utvidForrigeDatoperiodeEllerLeggTil( dato = dato, finnPeriode = { it.periode }, - oppdaterElement = { periodeFraFør -> periodeFraFør.copy(periode = periodeFraFør.periode.oppdaterTom(dato)) }, - nyttElement = { Dekningsgrunnlag(periode = dato.somPeriode(), inntekt = økonomi.subsumsjonsdata()) } + oppdaterElement = { periodeFraFør -> + periodeFraFør.copy( + periode = periodeFraFør.periode.oppdaterTom( + dato + ) + ) + }, + nyttElement = { + Dekningsgrunnlag( + periode = dato.somPeriode(), + inntekt = økonomi.subsumsjonsdata() + ) + } ) } + private fun MutableList.utvidForrigeDatoperiodeEllerLeggTil( dato: LocalDate, finnPeriode: (E) -> Periode, @@ -137,4 +191,4 @@ internal class Utbetalingstidslinjesubsumsjon( } } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/AktivitetsloggHelpers.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/AktivitetsloggHelpers.kt index 59be2e32f1..29f959d736 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/AktivitetsloggHelpers.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/AktivitetsloggHelpers.kt @@ -6,17 +6,33 @@ import no.nav.helse.person.IdInnhenter import no.nav.helse.person.aktivitetslogg.Aktivitet import no.nav.helse.person.aktivitetslogg.Aktivitetslogg -internal fun Aktivitetslogg.antallEtterspurteBehov(vedtaksperiodeIdInnhenter: IdInnhenter, behovtype: Aktivitet.Behov.Behovtype, orgnummer: String = AbstractPersonTest.ORGNUMMER) = +internal fun Aktivitetslogg.antallEtterspurteBehov( + vedtaksperiodeIdInnhenter: IdInnhenter, + behovtype: Aktivitet.Behov.Behovtype, + orgnummer: String = AbstractPersonTest.ORGNUMMER +) = antallEtterspurteBehov(vedtaksperiodeIdInnhenter.id(orgnummer), behovtype) -internal fun Aktivitetslogg.etterspurteBehov(vedtaksperiodeIdInnhenter: IdInnhenter, behovtype: Aktivitet.Behov.Behovtype, orgnummer: String = AbstractPersonTest.ORGNUMMER) = +internal fun Aktivitetslogg.etterspurteBehov( + vedtaksperiodeIdInnhenter: IdInnhenter, + behovtype: Aktivitet.Behov.Behovtype, + orgnummer: String = AbstractPersonTest.ORGNUMMER +) = etterspurteBehovFinnes(vedtaksperiodeIdInnhenter.id(orgnummer), behovtype) -internal fun Aktivitetslogg.etterspurteBehov(vedtaksperiodeIdInnhenter: IdInnhenter, orgnummer: String = AbstractPersonTest.ORGNUMMER) = +internal fun Aktivitetslogg.etterspurteBehov( + vedtaksperiodeIdInnhenter: IdInnhenter, + orgnummer: String = AbstractPersonTest.ORGNUMMER +) = etterspurteBehov(vedtaksperiodeIdInnhenter.id(orgnummer)) -internal fun Aktivitetslogg.sisteBehov(vedtaksperiodeIdInnhenter: IdInnhenter, orgnummer: String = AbstractPersonTest.ORGNUMMER) = - behov.last { it.kontekst()["vedtaksperiodeId"] == vedtaksperiodeIdInnhenter.id(orgnummer).toString() } +internal fun Aktivitetslogg.sisteBehov( + vedtaksperiodeIdInnhenter: IdInnhenter, + orgnummer: String = AbstractPersonTest.ORGNUMMER +) = + behov.last { + it.kontekst()["vedtaksperiodeId"] == vedtaksperiodeIdInnhenter.id(orgnummer).toString() + } internal fun Aktivitetslogg.sisteBehov(vedtaksperiodeId: UUID) = behov.last { it.kontekst()["vedtaksperiodeId"] == vedtaksperiodeId.toString() } @@ -27,12 +43,18 @@ internal fun Aktivitetslogg.sisteBehov(type: Aktivitet.Behov.Behovtype) = internal fun Aktivitetslogg.harBehov(behov: Aktivitet.Behov.Behovtype) = this.behov.any { it.type == behov } -internal fun Aktivitetslogg.antallEtterspurteBehov(vedtaksperiodeId: UUID, behov: Aktivitet.Behov.Behovtype) = +internal fun Aktivitetslogg.antallEtterspurteBehov( + vedtaksperiodeId: UUID, + behov: Aktivitet.Behov.Behovtype +) = this.behov.filter { it.kontekst()["vedtaksperiodeId"] == vedtaksperiodeId.toString() }.count { it.type == behov } -internal fun Aktivitetslogg.etterspurteBehovFinnes(vedtaksperiodeId: UUID, behov: Aktivitet.Behov.Behovtype) = +internal fun Aktivitetslogg.etterspurteBehovFinnes( + vedtaksperiodeId: UUID, + behov: Aktivitet.Behov.Behovtype +) = this.behov.filter { it.kontekst()["vedtaksperiodeId"] == vedtaksperiodeId.toString() }.any { it.type == behov } @@ -42,12 +64,19 @@ internal fun Aktivitetslogg.etterspurteBehov(vedtaksperiodeId: UUID) = it.kontekst()["vedtaksperiodeId"] == vedtaksperiodeId.toString() } -internal fun Aktivitetslogg.etterspurteBehov(vedtaksperiodeId: UUID, behov: Aktivitet.Behov.Behovtype) = +internal fun Aktivitetslogg.etterspurteBehov( + vedtaksperiodeId: UUID, + behov: Aktivitet.Behov.Behovtype +) = this.behov.filter { it.kontekst()["vedtaksperiodeId"] == vedtaksperiodeId.toString() }.filter { it.type == behov }.size == 1 -inline fun Aktivitetslogg.etterspurtBehov(vedtaksperiodeId: UUID, behov: Aktivitet.Behov.Behovtype, felt: String): T? { +inline fun Aktivitetslogg.etterspurtBehov( + vedtaksperiodeId: UUID, + behov: Aktivitet.Behov.Behovtype, + felt: String +): T? { return this.behov .filter { it.kontekst()["vedtaksperiodeId"] == vedtaksperiodeId.toString() } .last { it.type == behov }.detaljer()[felt] as T? diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/AssertForventetFeil.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/AssertForventetFeil.kt index f456bcf69a..b701ddd2b7 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/AssertForventetFeil.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/AssertForventetFeil.kt @@ -2,21 +2,26 @@ package no.nav.helse import org.junit.jupiter.api.assertThrows -private const val ØnsketOppførsel = "✅ Koden oppfører seg nå som ønsket! Fjern bruken av 'assertForventetFeil', og behold kun assertions for ønsket oppførsel ✅" +private const val ØnsketOppførsel = + "✅ Koden oppfører seg nå som ønsket! Fjern bruken av 'assertForventetFeil', og behold kun assertions for ønsket oppførsel ✅" private const val FeilITestkode = "☠️️ Feil i testkoden, feiler ikke på assertions ☠️️" private fun Throwable.håndterNåOppførselFeil(harØnsketOppførsel: Boolean) { if (harØnsketOppførsel) throw AssertionError(ØnsketOppførsel) - if (this is AssertionError) throw AssertionError("⚠️ Koden har endret nå-oppførsel, men ikke til ønsket oppførsel ⚠️️️", this) + if (this is AssertionError) throw AssertionError( + "⚠️ Koden har endret nå-oppførsel, men ikke til ønsket oppførsel ⚠️️️", + this + ) throw AssertionError(FeilITestkode, this) } -private fun Throwable.håndterØnsketOppførselFeil(forklaring: String?)= when (this) { - is AssertionError -> println("☹️ Det er kjent at vi ikke har ønsket oppførsel for ${forklaring?:"denne testen"} ☹️️") +private fun Throwable.håndterØnsketOppførselFeil(forklaring: String?) = when (this) { + is AssertionError -> println("☹️ Det er kjent at vi ikke har ønsket oppførsel for ${forklaring ?: "denne testen"} ☹️️") else -> throw AssertionError(FeilITestkode, this) } internal fun assertForventetFeil(forklaring: String? = null, nå: () -> Unit, ønsket: () -> Unit) { - runCatching(nå).exceptionOrNull()?.håndterNåOppførselFeil(harØnsketOppførsel = runCatching(ønsket).isSuccess) + runCatching(nå).exceptionOrNull() + ?.håndterNåOppførselFeil(harØnsketOppførsel = runCatching(ønsket).isSuccess) assertThrows(ØnsketOppførsel) { ønsket() }.håndterØnsketOppførselFeil(forklaring) -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/AssertForventetFeilTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/AssertForventetFeilTest.kt index c2423092c7..ca05590373 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/AssertForventetFeilTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/AssertForventetFeilTest.kt @@ -16,7 +16,10 @@ internal class AssertForventetFeilTest { ønsket = { assertTrue(true) } ) } - assertEquals("✅ Koden oppfører seg nå som ønsket! Fjern bruken av 'assertForventetFeil', og behold kun assertions for ønsket oppførsel ✅", assertionError.message) + assertEquals( + "✅ Koden oppfører seg nå som ønsket! Fjern bruken av 'assertForventetFeil', og behold kun assertions for ønsket oppførsel ✅", + assertionError.message + ) } @Test @@ -27,7 +30,10 @@ internal class AssertForventetFeilTest { ønsket = { assertTrue(false) } ) } - assertEquals("⚠️ Koden har endret nå-oppførsel, men ikke til ønsket oppførsel ⚠️️️", assertionError.message) + assertEquals( + "⚠️ Koden har endret nå-oppførsel, men ikke til ønsket oppførsel ⚠️️️", + assertionError.message + ) } @Test @@ -49,7 +55,10 @@ internal class AssertForventetFeilTest { ønsket = { assertTrue(true) } ) } - assertEquals("✅ Koden oppfører seg nå som ønsket! Fjern bruken av 'assertForventetFeil', og behold kun assertions for ønsket oppførsel ✅ ==> Expected java.lang.Throwable to be thrown, but nothing was thrown.", assertionError.message) + assertEquals( + "✅ Koden oppfører seg nå som ønsket! Fjern bruken av 'assertForventetFeil', og behold kun assertions for ønsket oppførsel ✅ ==> Expected java.lang.Throwable to be thrown, but nothing was thrown.", + assertionError.message + ) } @Test diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/Datoer.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/Datoer.kt index abc9372f3e..a7b20aa0ac 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/Datoer.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/Datoer.kt @@ -27,7 +27,7 @@ val juli: Periode = 1.juli til 31.juli val august: Periode = 1.august til 31.august val september: Periode = 1.september til 30.september val oktober: Periode = 1.oktober til 31.oktober -val november: Periode = 1.november til 30.november +val november: Periode = 1.november til 30.november val desember: Periode = 1.desember til 31.desember val Int.mandag get() = mandagsfrø.plusWeeks(this.toLong() - 1) @@ -81,17 +81,20 @@ private fun DayOfWeek.checkDayOfWeek(dato: LocalDate) = dato.also { sealed interface Ukedag { // mandag den 1.januar infix fun den(dato: LocalDate) = dato.also { - check(it.dayOfWeek == when (this) { - mandag -> MONDAY - tirsdag -> TUESDAY - onsdag -> WEDNESDAY - torsdag -> THURSDAY - fredag -> FRIDAY - lørdag -> SATURDAY - søndag -> SUNDAY - }) { "Forventet at $dato skulle være $this, men var ${dato.dayOfWeek}" } + check( + it.dayOfWeek == when (this) { + mandag -> MONDAY + tirsdag -> TUESDAY + onsdag -> WEDNESDAY + torsdag -> THURSDAY + fredag -> FRIDAY + lørdag -> SATURDAY + søndag -> SUNDAY + } + ) { "Forventet at $dato skulle være $this, men var ${dato.dayOfWeek}" } } } + object mandag : Ukedag object tirsdag : Ukedag object onsdag : Ukedag @@ -102,4 +105,4 @@ object søndag : Ukedag // 1.januar til tirsdag den 2.januar infix fun LocalDate.til(ukedag: Ukedag) = this to ukedag -infix fun Pair.den(other: LocalDate) = this.first til this.second.den(other) \ No newline at end of file +infix fun Pair.den(other: LocalDate) = this.first til this.second.den(other) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/DatoerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/DatoerTest.kt index c324dd52fe..a5de814d03 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/DatoerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/DatoerTest.kt @@ -130,7 +130,9 @@ internal class DatoerTest { assertFalse(31.desember(2017).erRettFør(tirsdag)) { "søndag er ikke rett før tirsdag" } assertTrue(30.desember(2017).erRettFør(mandag)) { "lørdag er rett før mandag" } assertTrue(29.desember(2017).erRettFør(mandag)) { "fredag er rett før mandag" } - assertFalse(28.desember(2017).erRettFør(mandag)) { "forrige torsdag er ikke rett før mandag" } + assertFalse( + 28.desember(2017).erRettFør(mandag) + ) { "forrige torsdag er ikke rett før mandag" } assertFalse(mandag.erRettFør(mandag)) { "mandag er ikke rett før seg selv" } assertFalse(søndag.erRettFør(tirsdag)) { "søndag er ikke rett før tirsdag" } @@ -177,7 +179,8 @@ internal class DatoerTest { (1.februar(2016) til 31.desember(2020)).ukedager() } val alternative2 = { - periode.start.datesUntil(periode.endInclusive).filter { it.dayOfWeek !in setOf(SATURDAY, SUNDAY) }.count() + periode.start.datesUntil(periode.endInclusive) + .filter { it.dayOfWeek !in setOf(SATURDAY, SUNDAY) }.count() } tournament(times, alternative1, alternative2) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/GjenopprettFraJson.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/GjenopprettFraJson.kt index 338ab904bb..7e5f2884eb 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/GjenopprettFraJson.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/GjenopprettFraJson.kt @@ -9,11 +9,16 @@ internal fun gjenopprettFraJSON(fil: String, subsumsjonslogg: Subsumsjonslogg = val json = fil.readResource() return gjenopprettFraJSONtekst(json, subsumsjonslogg) } -internal fun gjenopprettFraJSONtekst(json: String, subsumsjonslogg: Subsumsjonslogg = EmptyLog): Person { + +internal fun gjenopprettFraJSONtekst( + json: String, + subsumsjonslogg: Subsumsjonslogg = EmptyLog +): Person { val serialisertPerson = SerialisertPerson(json) val dto = serialisertPerson.tilPersonDto() return Person.gjenopprett(subsumsjonslogg, dto, emptyList()) } private fun String.readResource() = - object {}.javaClass.getResource(this)?.readText(Charsets.UTF_8) ?: error("did not find resource <$this>") \ No newline at end of file + object {}.javaClass.getResource(this)?.readText(Charsets.UTF_8) + ?: error("did not find resource <$this>") diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/Grunnbel\303\270pTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/Grunnbel\303\270pTest.kt" index 9365434509..08debda8ad 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/Grunnbel\303\270pTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/Grunnbel\303\270pTest.kt" @@ -21,11 +21,13 @@ import org.junit.jupiter.api.assertThrows internal class GrunnbeløpTest { - private val jurist = BehandlingSubsumsjonslogg(EmptyLog, listOf( + private val jurist = BehandlingSubsumsjonslogg( + EmptyLog, listOf( Subsumsjonskontekst(KontekstType.Fødselsnummer, "fnr"), Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "orgnr"), Subsumsjonskontekst(KontekstType.Vedtaksperiode, "${UUID.randomUUID()}"), - )) + ) + ) @Test fun dagsats() { @@ -94,12 +96,12 @@ internal class GrunnbeløpTest { // 67-åring blir behandlet som under 67 år assertMinsteinntektOk( skjæringstidspunkt = 26.mai(2019), - inntekt = halvG2018, + inntekt = halvG2018, alder = akkurat67(26.mai(2019)), ) assertMinimumInntektAvslag( skjæringstidspunkt = 27.mai(2019), - inntekt = halvG2018, + inntekt = halvG2018, alder = akkurat67(27.mai(2019)), ) assertMinsteinntektOk( @@ -152,7 +154,11 @@ internal class GrunnbeløpTest { @Test fun `kaster exception for beløp som ikke er gyldig Grunnbeløp`() { val ikkeGyldigGrunnbeløp = 123123.årlig - assertThrows { Grunnbeløp.virkningstidspunktFor(ikkeGyldigGrunnbeløp)} + assertThrows { + Grunnbeløp.virkningstidspunktFor( + ikkeGyldigGrunnbeløp + ) + } } private fun assertMinsteinntektOk( @@ -188,40 +194,52 @@ internal class GrunnbeløpTest { alder: Alder ) = assertEquals( Begrunnelse.MinimumInntekt, Grunnbeløp.validerMinsteInntekt( - skjæringstidspunkt = skjæringstidspunkt, - inntekt = inntekt, - alder = alder, - subsumsjonslogg = jurist - ) + skjæringstidspunkt = skjæringstidspunkt, + inntekt = inntekt, + alder = alder, + subsumsjonslogg = jurist + ) ) private fun under67() = LocalDate.now().minusYears(66).alder - private fun over67(skjæringstidspunkt: LocalDate) = skjæringstidspunkt.minusYears(67).minusDays(1).alder + private fun over67(skjæringstidspunkt: LocalDate) = + skjæringstidspunkt.minusYears(67).minusDays(1).alder + private fun akkurat67(skjæringstidspunkt: LocalDate) = skjæringstidspunkt.minusYears(67).alder private fun Grunnbeløp.oppfyllerMinsteInntekt(dato: LocalDate, inntekt: Inntekt) = inntekt >= minsteinntekt(dato) - private fun Grunnbeløp.Companion.validerMinsteInntekt(skjæringstidspunkt: LocalDate, inntekt: Inntekt, alder: Alder, subsumsjonslogg: Subsumsjonslogg): Begrunnelse? { - val gjeldendeGrense = if(alder.forhøyetInntektskrav(skjæringstidspunkt)) `2G` else halvG + + private fun Grunnbeløp.Companion.validerMinsteInntekt( + skjæringstidspunkt: LocalDate, + inntekt: Inntekt, + alder: Alder, + subsumsjonslogg: Subsumsjonslogg + ): Begrunnelse? { + val gjeldendeGrense = if (alder.forhøyetInntektskrav(skjæringstidspunkt)) `2G` else halvG val oppfylt = gjeldendeGrense.oppfyllerMinsteInntekt(skjæringstidspunkt, inntekt) if (alder.forhøyetInntektskrav(skjæringstidspunkt)) { - subsumsjonslogg.logg(`§ 8-51 ledd 2`( + subsumsjonslogg.logg( + `§ 8-51 ledd 2`( + oppfylt = oppfylt, + skjæringstidspunkt = skjæringstidspunkt, + alderPåSkjæringstidspunkt = alder.alderPåDato(skjæringstidspunkt), + beregningsgrunnlagÅrlig = inntekt.årlig, + minimumInntektÅrlig = gjeldendeGrense.minsteinntekt(skjæringstidspunkt).årlig + ) + ) + if (oppfylt) return null + return Begrunnelse.MinimumInntektOver67 + } + subsumsjonslogg.logg( + `§ 8-3 ledd 2 punktum 1`( oppfylt = oppfylt, skjæringstidspunkt = skjæringstidspunkt, - alderPåSkjæringstidspunkt = alder.alderPåDato(skjæringstidspunkt), beregningsgrunnlagÅrlig = inntekt.årlig, minimumInntektÅrlig = gjeldendeGrense.minsteinntekt(skjæringstidspunkt).årlig - )) - if (oppfylt) return null - return Begrunnelse.MinimumInntektOver67 - } - subsumsjonslogg.logg(`§ 8-3 ledd 2 punktum 1`( - oppfylt = oppfylt, - skjæringstidspunkt = skjæringstidspunkt, - beregningsgrunnlagÅrlig = inntekt.årlig, - minimumInntektÅrlig = gjeldendeGrense.minsteinntekt(skjæringstidspunkt).årlig - )) + ) + ) if (oppfylt) return null return Begrunnelse.MinimumInntekt } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/Inntekt.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/Inntekt.kt index f092c8d41c..128ec91f73 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/Inntekt.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/Inntekt.kt @@ -16,12 +16,26 @@ import no.nav.helse.økonomi.Inntekt internal val Inntekt.sykepengegrunnlag get() = inntektsgrunnlag(AbstractPersonTest.ORGNUMMER) -internal fun Inntekt.inntektsgrunnlag(orgnr: String) = inntektsgrunnlag(AbstractPersonTest.UNG_PERSON_FØDSELSDATO.alder, orgnr, 1.januar) -internal fun Inntekt.inntektsgrunnlag(alder: Alder) = inntektsgrunnlag(alder, AbstractPersonTest.ORGNUMMER, 1.januar) +internal fun Inntekt.inntektsgrunnlag(orgnr: String) = + inntektsgrunnlag(AbstractPersonTest.UNG_PERSON_FØDSELSDATO.alder, orgnr, 1.januar) + +internal fun Inntekt.inntektsgrunnlag(alder: Alder) = + inntektsgrunnlag(alder, AbstractPersonTest.ORGNUMMER, 1.januar) + internal fun Inntekt.inntektsgrunnlag(skjæringstidspunkt: LocalDate) = - inntektsgrunnlag(AbstractPersonTest.UNG_PERSON_FØDSELSDATO.alder, AbstractPersonTest.ORGNUMMER, skjæringstidspunkt) + inntektsgrunnlag( + AbstractPersonTest.UNG_PERSON_FØDSELSDATO.alder, + AbstractPersonTest.ORGNUMMER, + skjæringstidspunkt + ) -internal fun Inntekt.inntektsgrunnlag(alder: Alder, orgnr: String, skjæringstidspunkt: LocalDate, subsumsjonslogg: Subsumsjonslogg = Subsumsjonslogg.EmptyLog, refusjonsopplysninger: Refusjonsopplysninger = Refusjonsopplysninger()) = +internal fun Inntekt.inntektsgrunnlag( + alder: Alder, + orgnr: String, + skjæringstidspunkt: LocalDate, + subsumsjonslogg: Subsumsjonslogg = Subsumsjonslogg.EmptyLog, + refusjonsopplysninger: Refusjonsopplysninger = Refusjonsopplysninger() +) = Inntektsgrunnlag( alder = alder, arbeidsgiverInntektsopplysninger = listOf( @@ -35,7 +49,12 @@ internal fun Inntekt.inntektsgrunnlag(alder: Alder, orgnr: String, skjæringstid skjæringstidspunkt = skjæringstidspunkt, subsumsjonslogg = subsumsjonslogg ) -internal fun Inntekt.inntektsgrunnlag(orgnr: String, skjæringstidspunkt: LocalDate, virkningstidspunkt: LocalDate) = + +internal fun Inntekt.inntektsgrunnlag( + orgnr: String, + skjæringstidspunkt: LocalDate, + virkningstidspunkt: LocalDate +) = Inntektsgrunnlag.ferdigSykepengegrunnlag( alder = AbstractPersonTest.UNG_PERSON_FØDSELSDATO.alder, skjæringstidspunkt = skjæringstidspunkt, @@ -44,10 +63,15 @@ internal fun Inntekt.inntektsgrunnlag(orgnr: String, skjæringstidspunkt: LocalD orgnr, skjæringstidspunkt til LocalDate.MAX, Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), this), - Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, this).refusjonsopplysninger + Refusjonsopplysning( + UUID.randomUUID(), + skjæringstidspunkt, + null, + this + ).refusjonsopplysninger ) ), deaktiverteArbeidsforhold = emptyList(), vurdertInfotrygd = false, `6G` = Grunnbeløp.`6G`.beløp(skjæringstidspunkt, virkningstidspunkt) - ) \ No newline at end of file + ) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/OpenAllInSpanner.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/OpenAllInSpanner.kt index b0274d47be..6b57d03ad0 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/OpenAllInSpanner.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/OpenAllInSpanner.kt @@ -1,4 +1,3 @@ - import org.junit.jupiter.api.extension.AfterEachCallback import org.junit.jupiter.api.extension.ExtensionContext import org.junit.jupiter.api.extension.ExtensionContext.Namespace.GLOBAL @@ -9,12 +8,12 @@ class AftereEachTestOpenSpannerExtension : AfterEachCallback { override fun afterEach(context: ExtensionContext) { val testWatcher = SpannerEtterTestInterceptor() try { - testWatcher.openTheSpanner(context) - // The following line registers a callback hook when the root test context is - // shut down - context.root.getStore(GLOBAL).put("any unique name", this) + testWatcher.openTheSpanner(context) + // The following line registers a callback hook when the root test context is + // shut down + context.root.getStore(GLOBAL).put("any unique name", this) } catch (e: Exception) { testWatcher.openTheSpanner(context, e.cause?.message) } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/OpenInSpanner.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/OpenInSpanner.kt index 5c743d0ab8..b952954fa4 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/OpenInSpanner.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/OpenInSpanner.kt @@ -67,12 +67,13 @@ class SpannerEtterTestInterceptor : TestWatcher { val uuid = UUID.randomUUID() HttpClient.newHttpClient().use { client -> // Må laste opp mot intern.dev pga. en Microsoft-redirect på ansatt.dev. Så må ha naisdevicen på - val request = HttpRequest.newBuilder(URI("https://spannerish.intern.dev.nav.no/api/person/$uuid")) - .header("Content-Type", "application/json") - .POST(HttpRequest.BodyPublishers.ofString(json)) - .build() + val request = + HttpRequest.newBuilder(URI("https://spannerish.intern.dev.nav.no/api/person/$uuid")) + .header("Content-Type", "application/json") + .POST(HttpRequest.BodyPublishers.ofString(json)) + .build() val response = client.send(request, HttpResponse.BodyHandlers.ofString()) - check(response.statusCode() == 201) { "Det var sprøtt, fikk http status ${response.statusCode()} fra Spannerish. Kanskje du ikke er nais device?"} + check(response.statusCode() == 201) { "Det var sprøtt, fikk http status ${response.statusCode()} fra Spannerish. Kanskje du ikke er nais device?" } } // Litt gøyale query parametre til Spannerish val queryString = mapOf("testnavn" to testnavn, "error" to errorMsg).queryString @@ -81,10 +82,11 @@ class SpannerEtterTestInterceptor : TestWatcher { return URI("https://spannerish.ansatt.dev.nav.no/person/$uuid${queryString}") } - private val Map.queryString get() = this - .filterNot { (_, value) -> value.isNullOrBlank() }.entries - .joinToString("&") { (key, value) -> "${key}=${URLEncoder.encode(value, "UTF-8")}" } - .let { if (it.isBlank()) "" else "?$it" } + private val Map.queryString + get() = this + .filterNot { (_, value) -> value.isNullOrBlank() }.entries + .joinToString("&") { (key, value) -> "${key}=${URLEncoder.encode(value, "UTF-8")}" } + .let { if (it.isBlank()) "" else "?$it" } private fun åpneBrowser(uri: URI) { if (Desktop.isDesktopSupported()) { @@ -110,35 +112,39 @@ class SpannerEtterTestInterceptor : TestWatcher { nivå = "BEHOV", tekst = it.melding, tidsstempel = it.tidsstempel.format(tidsstempelformat), - kontekster = it.kontekster.associateBy({ it.kontekstType }, {it.kontekstMap}) + kontekster = it.kontekster.associateBy({ it.kontekstType }, { it.kontekstMap }) ) + is Aktivitet.FunksjonellFeil -> AktivitetDto( id = 0, nivå = "FUNKSJONELL_FEIL", tekst = it.melding, tidsstempel = it.tidsstempel.format(tidsstempelformat), - kontekster = it.kontekster.associateBy({ it.kontekstType }, {it.kontekstMap}) + kontekster = it.kontekster.associateBy({ it.kontekstType }, { it.kontekstMap }) ) + is Aktivitet.Info -> AktivitetDto( id = 0, nivå = "INFO", tekst = it.melding, tidsstempel = it.tidsstempel.format(tidsstempelformat), - kontekster = it.kontekster.associateBy({ it.kontekstType }, {it.kontekstMap}) + kontekster = it.kontekster.associateBy({ it.kontekstType }, { it.kontekstMap }) ) + is Aktivitet.LogiskFeil -> AktivitetDto( id = 0, nivå = "LOGISK_FEIL", tekst = it.melding, tidsstempel = it.tidsstempel.format(tidsstempelformat), - kontekster = it.kontekster.associateBy({ it.kontekstType }, {it.kontekstMap}) + kontekster = it.kontekster.associateBy({ it.kontekstType }, { it.kontekstMap }) ) + is Aktivitet.Varsel -> AktivitetDto( id = 0, nivå = "VARSEL", tekst = it.melding, tidsstempel = it.tidsstempel.format(tidsstempelformat), - kontekster = it.kontekster.associateBy({ it.kontekstType }, {it.kontekstMap}) + kontekster = it.kontekster.associateBy({ it.kontekstType }, { it.kontekstMap }) ) } } @@ -157,4 +163,4 @@ class SpannerEtterTestInterceptor : TestWatcher { val kontekster: Map ) -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/SykdomstidslinjeTestHelpers.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/SykdomstidslinjeTestHelpers.kt index 3ef14e7c78..9cc473b9d3 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/SykdomstidslinjeTestHelpers.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/SykdomstidslinjeTestHelpers.kt @@ -18,7 +18,8 @@ internal fun perioder( periode3: Sykdomstidslinje, test: Sykdomstidslinje.(Sykdomstidslinje, Sykdomstidslinje, Sykdomstidslinje) -> Unit ) { - listOf(periode1, periode2, periode3).merge(Dagturnering.TURNERING::beste).test(periode1, periode2, periode3) + listOf(periode1, periode2, periode3).merge(Dagturnering.TURNERING::beste) + .test(periode1, periode2, periode3) } internal fun perioder( diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/TellerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/TellerTest.kt index 080795c303..9f011a8f27 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/TellerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/TellerTest.kt @@ -83,7 +83,7 @@ internal class TellerTest { repeat(grenseverdi) { teller.inc() } teller.reset() repeat(grenseverdi) { teller.inc() } - assertEquals(2*grenseverdi, observatør.increments) + assertEquals(2 * grenseverdi, observatør.increments) assertEquals(2, observatør.grenserNådd) assertTrue(observatør.grenseNådd) assertTrue(observatør.reset) @@ -102,11 +102,17 @@ internal class TellerTest { var grenseNådd = false var reset = false - override fun onInc() { increments +=1 } + override fun onInc() { + increments += 1 + } + override fun onGrense() { grenseNådd = true grenserNådd += 1 } - override fun onReset() { reset = true } + + override fun onReset() { + reset = true + } } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/Toggle.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/Toggle.kt index 93acc69b8e..5e2c1d2a73 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/Toggle.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/Toggle.kt @@ -11,7 +11,7 @@ import org.junit.jupiter.api.extension.ReflectiveInvocationContext @ExtendWith(EnableFeriepengerInterceptor::class) internal annotation class EnableFeriepenger -private class EnableFeriepengerInterceptor: InvocationInterceptor { +private class EnableFeriepengerInterceptor : InvocationInterceptor { override fun interceptTestMethod( invocation: InvocationInterceptor.Invocation, invocationContext: ReflectiveInvocationContext, diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/WarningsTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/WarningsTest.kt index 80d349a4f3..751aef0ee3 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/WarningsTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/WarningsTest.kt @@ -57,15 +57,19 @@ internal class WarningsTest { "Søknaden inneholder Permisjonsdager utenfor sykdomsvindu" ) - val nyeWarningerSomManglerEksplisittTest = ikkeTestedeWarnings.minus(warningerSomManglerEksplisittTest) - val warningerSomNåTestesEkplisitt = warningerSomManglerEksplisittTest.minus(ikkeTestedeWarnings) + val nyeWarningerSomManglerEksplisittTest = + ikkeTestedeWarnings.minus(warningerSomManglerEksplisittTest) + val warningerSomNåTestesEkplisitt = + warningerSomManglerEksplisittTest.minus(ikkeTestedeWarnings) assertForventetFeil( forklaring = "Ikke alle warnings testes eksplisitt", ønsket = { assertEquals(emptySet(), ikkeTestedeWarnings) }, - nå = { assertEquals(emptySet(), nyeWarningerSomManglerEksplisittTest) { - "Legg til eksplisitt test for nye warnings! _ikke_ legg den i listen av warnings som mangler eksplisitt test." - }} + nå = { + assertEquals(emptySet(), nyeWarningerSomManglerEksplisittTest) { + "Legg til eksplisitt test for nye warnings! _ikke_ legg den i listen av warnings som mangler eksplisitt test." + } + } ) assertEquals(emptySet(), warningerSomNåTestesEkplisitt) { @@ -74,22 +78,29 @@ internal class WarningsTest { } private companion object { - private fun warningEquals(warningDefinisjon: String, warningBruk: String) = when (warningDefinisjon) { - "Utbetalingen ble gjennomført, men med advarsel: \$melding" -> - warningBruk.startsWith("Utbetalingen ble gjennomført, men med advarsel: ") - "Har mer enn %.0f %% avvik. Dette støttes foreløpig ikke i Speil. Du må derfor annullere periodene." -> - warningBruk == "Har mer enn 25 % avvik. Dette støttes foreløpig ikke i Speil. Du må derfor annullere periodene." - else -> warningDefinisjon == warningBruk - } + private fun warningEquals(warningDefinisjon: String, warningBruk: String) = + when (warningDefinisjon) { + "Utbetalingen ble gjennomført, men med advarsel: \$melding" -> + warningBruk.startsWith("Utbetalingen ble gjennomført, men med advarsel: ") + + "Har mer enn %.0f %% avvik. Dette støttes foreløpig ikke i Speil. Du må derfor annullere periodene." -> + warningBruk == "Har mer enn 25 % avvik. Dette støttes foreløpig ikke i Speil. Du må derfor annullere periodene." + + else -> warningDefinisjon == warningBruk + } + + private fun String.inneholderEnAv(vararg innhold: String) = + let { string -> innhold.firstOrNull { string.contains(it) } != null } - private fun String.inneholderEnAv(vararg innhold: String) = let { string -> innhold.firstOrNull { string.contains(it) } != null } - private fun Path.slutterPåEnAv(vararg suffix: String) = let { path -> suffix.firstOrNull { path.endsWith(it) } != null } + private fun Path.slutterPåEnAv(vararg suffix: String) = + let { path -> suffix.firstOrNull { path.endsWith(it) } != null } private fun finn( scope: String, regex: Regex, ignorePath: (path: Path) -> Boolean = { false }, - ignoreLinje: (linje: String) -> Boolean = { false }) = + ignoreLinje: (linje: String) -> Boolean = { false } + ) = Files.walk(Paths.get("../")).use { paths -> paths .filter(Files::isRegularFile) @@ -129,7 +140,10 @@ internal class WarningsTest { private val tekstRegex = "\"(.*?)\"".toRegex() private fun finnAlleTeksterITester() = finn("test", tekstRegex, ignorePath = { path -> - path.slutterPåEnAv("${WarningsTest::class.simpleName}.kt", "${this::class.simpleName}.kt") + path.slutterPåEnAv( + "${WarningsTest::class.simpleName}.kt", + "${this::class.simpleName}.kt" + ) }) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/E2EEpic3Test.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/E2EEpic3Test.kt index 658d349544..a10ecc8cc0 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/E2EEpic3Test.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/E2EEpic3Test.kt @@ -82,12 +82,39 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { Inntektsopplysning(ORGNUMMER, 13.november(2017), INNTEKT, true) ) val utbetalinger = arrayOf( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 3.april(2019), 30.april(2019), 100.prosent, 100.daglig), - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 18.mars(2018), 2.april(2018), 100.prosent, 100.daglig), - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 29.november(2017), 3.desember(2017), 100.prosent, 100.daglig), - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 13.november(2017), 28.november(2017), 100.prosent, 100.daglig) + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 3.april(2019), + 30.april(2019), + 100.prosent, + 100.daglig + ), + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 18.mars(2018), + 2.april(2018), + 100.prosent, + 100.daglig + ), + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 29.november(2017), + 3.desember(2017), + 100.prosent, + 100.daglig + ), + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 13.november(2017), + 28.november(2017), + 100.prosent, + 100.daglig + ) + ) + håndterUtbetalingshistorikkEtterInfotrygdendring( + *utbetalinger, + inntektshistorikk = inntektshistorikk ) - håndterUtbetalingshistorikkEtterInfotrygdendring(*utbetalinger, inntektshistorikk = inntektshistorikk) håndterSykmelding(Sykmeldingsperiode(15.januar(2020), 12.februar(2020))) håndterSøknad(Sykdom(15.januar(2020), 12.februar(2020), 100.prosent)) @@ -169,8 +196,20 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 1.januar, 100.prosent)) håndterSøknad(Sykdom(4.januar, 20.januar, 100.prosent)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -191,10 +230,33 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { ) assertSisteTilstand(3.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) - håndterPåminnelse(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, LocalDateTime.now().minusDays(181)) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) + håndterPåminnelse( + 1.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + LocalDateTime.now().minusDays(181) + ) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) } @Test @@ -240,8 +302,18 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 17.januar, 100.prosent)) håndterSøknad(Sykdom(12.februar, 19.februar, 100.prosent)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -294,9 +366,17 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { // OBS: Disse kastes ikke ut fordi de er for gamle. De kastes ut fordi de kommer out of order håndterSykmelding(Sykmeldingsperiode(13.januar(2020), 31.januar(2020))) håndterSøknad(Sykdom(13.januar(2020), 31.januar(2020), 100.prosent)) - håndterSykmelding(Sykmeldingsperiode(9.februar(2017), 15.februar(2017)), mottatt = 31.januar(2020).atStartOfDay()) + håndterSykmelding( + Sykmeldingsperiode(9.februar(2017), 15.februar(2017)), + mottatt = 31.januar(2020).atStartOfDay() + ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) } @Test @@ -312,9 +392,18 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { assertEquals(2, inspektør.sykdomshistorikk.size) // TODO assertEquals(22, inspektør.sykdomshistorikk.sykdomstidslinje().count()) assertEquals(7.januar, inspektør.sykdomshistorikk.sykdomstidslinje().førsteDag()) - assertEquals(FriskHelgedag::class, inspektør.sykdomshistorikk.sykdomstidslinje()[7.januar]::class) - assertEquals(Dag.Arbeidsdag::class, inspektør.sykdomshistorikk.sykdomstidslinje()[8.januar]::class) - assertEquals(9.januar, inspektør.sykdomshistorikk.sykdomstidslinje().sisteSkjæringstidspunkt()) + assertEquals( + FriskHelgedag::class, + inspektør.sykdomshistorikk.sykdomstidslinje()[7.januar]::class + ) + assertEquals( + Dag.Arbeidsdag::class, + inspektør.sykdomshistorikk.sykdomstidslinje()[8.januar]::class + ) + assertEquals( + 9.januar, + inspektør.sykdomshistorikk.sykdomstidslinje().sisteSkjæringstidspunkt() + ) assertEquals(28.januar, inspektør.sykdomshistorikk.sykdomstidslinje().sisteDag()) } @@ -332,9 +421,18 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { assertEquals(2, inspektør.sykdomshistorikk.size) assertEquals(22, inspektør.sykdomshistorikk.sykdomstidslinje().count()) assertEquals(7.januar, inspektør.sykdomshistorikk.sykdomstidslinje().førsteDag()) - assertEquals(FriskHelgedag::class, inspektør.sykdomshistorikk.sykdomstidslinje()[7.januar]::class) - assertEquals(Dag.Arbeidsdag::class, inspektør.sykdomshistorikk.sykdomstidslinje()[8.januar]::class) - assertEquals(9.januar, inspektør.sykdomshistorikk.sykdomstidslinje().sisteSkjæringstidspunkt()) + assertEquals( + FriskHelgedag::class, + inspektør.sykdomshistorikk.sykdomstidslinje()[7.januar]::class + ) + assertEquals( + Dag.Arbeidsdag::class, + inspektør.sykdomshistorikk.sykdomstidslinje()[8.januar]::class + ) + assertEquals( + 9.januar, + inspektør.sykdomshistorikk.sykdomstidslinje().sisteSkjæringstidspunkt() + ) assertEquals(28.januar, inspektør.sykdomshistorikk.sykdomstidslinje().sisteDag()) } @@ -352,7 +450,15 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { håndterVilkårsgrunnlag(2.vedtaksperiode, INNTEKT) håndterYtelser(2.vedtaksperiode) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) assertTilstander( 2.vedtaksperiode, START, @@ -436,7 +542,11 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { førsteFraværsdag = 11.januar(2020), avsendersystem = ALTINN ) - håndterSøknad(Sykdom(1.januar(2020), 31.januar(2020), 100.prosent), Ferie(3.januar(2020), 10.januar(2020)), sendtTilNAVEllerArbeidsgiver = 1.februar(2020)) + håndterSøknad( + Sykdom(1.januar(2020), 31.januar(2020), 100.prosent), + Ferie(3.januar(2020), 10.januar(2020)), + sendtTilNAVEllerArbeidsgiver = 1.februar(2020) + ) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -477,7 +587,10 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { førsteFraværsdag = 11.januar(2020), avsendersystem = ALTINN ) - håndterSøknad(Sykdom(1.januar(2020), 31.januar(2020), 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.februar(2020)) + håndterSøknad( + Sykdom(1.januar(2020), 31.januar(2020), 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.februar(2020) + ) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -509,7 +622,8 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { fun `ikke medlem avviser alle dager og legger på warning`() { håndterSykmelding(januar) håndterSøknad(januar) - håndterInntektsmelding(listOf( + håndterInntektsmelding( + listOf( Periode(1.januar, 16.januar) ), førsteFraværsdag = 1.januar, refusjon = Refusjon(INNTEKT, null, emptyList()) ) @@ -545,10 +659,18 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { @Test fun `opptjening ikke ok avviser ikke dager før gjeldende skjæringstidspunkt`() { - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(ORGNUMMER, 1.januar(2017), 31.januar, Arbeidsforholdtype.ORDINÆRT)) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + ORGNUMMER, + 1.januar(2017), + 31.januar, + Arbeidsforholdtype.ORDINÆRT + ) + ) håndterSykmelding(januar) håndterSøknad(januar) - håndterInntektsmelding(listOf( + håndterInntektsmelding( + listOf( Periode(1.januar, 16.januar) ), førsteFraværsdag = 1.januar, refusjon = Refusjon(INNTEKT, null, emptyList()) ) @@ -587,7 +709,8 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar(2020), 31.januar(2020))) håndterSøknad(Sykdom(1.januar(2020), 31.januar(2020), 100.prosent)) - håndterInntektsmelding(listOf( + håndterInntektsmelding( + listOf( Periode(1.januar(2020), 16.januar(2020)) ), førsteFraværsdag = 1.januar(2020), refusjon = Refusjon(INNTEKT, null, emptyList()), vedtaksperiodeIdInnhenter = 2.vedtaksperiode @@ -630,10 +753,18 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { @Test fun `bevarer avviste dager fra tidligere periode og avviser dager fra skjæringstidspunkt ved opptjening ok`() { - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(ORGNUMMER, 31.desember(2017), 31.januar, Arbeidsforholdtype.ORDINÆRT)) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + ORGNUMMER, + 31.desember(2017), + 31.januar, + Arbeidsforholdtype.ORDINÆRT + ) + ) håndterSykmelding(januar) håndterSøknad(januar) - håndterInntektsmelding(listOf( + håndterInntektsmelding( + listOf( Periode(1.januar, 16.januar) ), førsteFraværsdag = 1.januar, refusjon = Refusjon(INNTEKT, null, emptyList()) ) @@ -668,7 +799,8 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar(2020), 31.januar(2020))) håndterSøknad(Sykdom(1.januar(2020), 31.januar(2020), 100.prosent)) - håndterInntektsmelding(listOf( + håndterInntektsmelding( + listOf( Periode(1.januar(2020), 16.januar(2020)) ), førsteFraværsdag = 1.januar(2020), refusjon = Refusjon(INNTEKT, null, emptyList()), vedtaksperiodeIdInnhenter = 2.vedtaksperiode @@ -742,7 +874,8 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar(2020), 31.januar(2020))) håndterSøknad(Sykdom(1.januar(2020), 31.januar(2020), 100.prosent)) - håndterInntektsmelding(listOf( + håndterInntektsmelding( + listOf( Periode(1.januar(2020), 16.januar(2020)) ), førsteFraværsdag = 1.januar(2020), refusjon = Refusjon(INNTEKT, null, emptyList()), vedtaksperiodeIdInnhenter = 2.vedtaksperiode @@ -804,14 +937,22 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { Sykdom(26.juni(2020), 17.juli(2020), 100.prosent) ) assertDoesNotThrow { - håndterPåminnelse(4.vedtaksperiode, AVVENTER_INNTEKTSMELDING, LocalDateTime.now().minusMonths(2)) + håndterPåminnelse( + 4.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + LocalDateTime.now().minusMonths(2) + ) } } @Test fun `Inntektsmelding utvider ikke perioden med arbeidsdager`() { håndterSykmelding(Sykmeldingsperiode(1.juni, 30.juni)) - håndterInntektsmelding(listOf(Periode(1.juni, 16.juni)), førsteFraværsdag = 1.juni, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(1.juni, 16.juni)), + førsteFraværsdag = 1.juni, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(1.juni, 30.juni, 100.prosent)) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -820,7 +961,11 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(9.juli, 31.juli)) håndterSøknad(Sykdom(9.juli, 31.juli, 100.prosent)) - håndterInntektsmelding(listOf(Periode(1.juni, 16.juni)), førsteFraværsdag = 9.juli, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(Periode(1.juni, 16.juni)), + førsteFraværsdag = 9.juli, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) inspektør.also { assertEquals(Periode(1.juni, 30.juni), it.vedtaksperioder(1.vedtaksperiode).periode) @@ -831,7 +976,11 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { @Test fun `Avsluttet vedtaksperiode forkastes ikke ved overlapp`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 30.januar)) - håndterInntektsmelding(listOf(Periode(1.januar, 16.januar)), førsteFraværsdag = 1.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(1.januar, 16.januar)), + førsteFraværsdag = 1.januar, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(1.januar, 30.januar, 100.prosent)) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -853,10 +1002,21 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { Sykdom(1.mars, 21.mars, 100.prosent), Arbeid(12.mars, 21.mars) ) - håndterInntektsmelding(listOf(1.mars til 16.mars), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - val sykdomstidslinjedagerForAndrePeriode = inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).inspektør.dagteller + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + val sykdomstidslinjedagerForAndrePeriode = + inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).inspektør.dagteller assertEquals(21, sykdomstidslinjedagerForAndrePeriode.values.reduce { acc, i -> acc + i }) assertEquals(7, sykdomstidslinjedagerForAndrePeriode[Sykedag::class]) assertEquals(4, sykdomstidslinjedagerForAndrePeriode[SykHelgedag::class]) @@ -886,7 +1046,10 @@ internal class E2EEpic3Test : AbstractEndToEndTest() { Sykdom(1.mars, 21.mars, 100.prosent), Arbeid(12.mars, 21.mars) ) - håndterInntektsmelding(listOf(1.mars til 16.mars), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) nyttVedtak(1.mai til 21.mai, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) assertEquals(12.april(2019), inspektør.sisteMaksdato(3.vedtaksperiode).maksdato) } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/ManglendeVilk\303\245rsgrunnlagTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/ManglendeVilk\303\245rsgrunnlagTest.kt" index 5d6164614a..e49c9cf676 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/ManglendeVilk\303\245rsgrunnlagTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/ManglendeVilk\303\245rsgrunnlagTest.kt" @@ -50,8 +50,23 @@ internal class ManglendeVilkårsgrunnlagTest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(3.vedtaksperiode) håndterYtelser(3.vedtaksperiode) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) assertTilstander( 3.vedtaksperiode, START, @@ -94,8 +109,29 @@ internal class ManglendeVilkårsgrunnlagTest : AbstractEndToEndTest() { assertEquals(6.januar til 2.februar, inspektør.periode(2.vedtaksperiode)) assertEquals(5.februar til 21.februar, inspektør.periode(3.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/UtdatertGodkjenningBugE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/UtdatertGodkjenningBugE2ETest.kt index 235f674718..1c7ca5056b 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/UtdatertGodkjenningBugE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/bugs_showstoppers/UtdatertGodkjenningBugE2ETest.kt @@ -23,7 +23,7 @@ import no.nav.helse.spleis.e2e.tilGodkjenning import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.junit.jupiter.api.Test -internal class UtdatertGodkjenningBugE2ETest: AbstractEndToEndTest() { +internal class UtdatertGodkjenningBugE2ETest : AbstractEndToEndTest() { @Test fun `Håndterer løsning på godkjenningsbehov der utbetalingid på løsningen matcher med periodens gjeldende utbetaling`() { 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 d811cb0667..f2678e42cc 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 @@ -56,30 +56,49 @@ internal abstract class AbstractDslTest { internal companion object { @JvmStatic protected val a1 = "a1" + @JvmStatic protected val a2 = "a2" + @JvmStatic protected val a3 = "a3" + @JvmStatic protected val frilans = Frilans + @JvmStatic protected val selvstendig = Selvstendig + @JvmStatic protected val arbeidsledig = Arbeidsledig + @JvmStatic @Deprecated("må bruke a1") protected val ORGNUMMER = a1 + @JvmStatic protected val personInspektør = { person: Person -> PersonInspektør(person) } + @JvmStatic protected val personView = { person: Person -> person.view() } + @JvmStatic - protected val agInspektør = { orgnummer: String -> { person: Person -> TestArbeidsgiverInspektør(person, orgnummer) } } + protected val agInspektør = { orgnummer: String -> + { person: Person -> + TestArbeidsgiverInspektør( + person, + orgnummer + ) + } + } + @JvmStatic protected infix fun String.og(annen: String) = listOf(this, annen) + @JvmStatic protected infix fun List.og(annen: String) = this.plus(annen) } + protected lateinit var jurist: SubsumsjonsListLog protected lateinit var observatør: TestObservatør private lateinit var testperson: TestPerson @@ -92,14 +111,28 @@ internal abstract class AbstractDslTest { protected val String.inspektør get() = inspektør(this) protected val inspektør: TestArbeidsgiverInspektør get() = bareÈnArbeidsgiver(a1).inspektør - private val TestPerson.TestArbeidsgiver.testArbeidsgiverAsserter get() = TestArbeidsgiverAssertions(observatør, inspektør, testperson.inspiser(personInspektør)) - private val testPersonAsserter get() = TestPersonAssertions(testperson.inspiser(personInspektør), jurist) + private val TestPerson.TestArbeidsgiver.testArbeidsgiverAsserter + get() = TestArbeidsgiverAssertions( + observatør, + inspektør, + testperson.inspiser(personInspektør) + ) + private val testPersonAsserter + get() = TestPersonAssertions( + testperson.inspiser(personInspektør), + jurist + ) protected fun personView() = testperson.view() - protected fun inspiser(inspektør: (Person) -> INSPEKTØR) = testperson.inspiser(inspektør) + protected fun inspiser(inspektør: (Person) -> INSPEKTØR) = + testperson.inspiser(inspektør) + protected fun inspektør(orgnummer: String) = inspiser(agInspektør(orgnummer)) - protected fun inspektør(vedtaksperiodeId: UUID) = inspiser(personInspektør).vedtaksperiode(vedtaksperiodeId).inspektør - protected fun inspektørForkastet(vedtaksperiodeId: UUID) = inspiser(personInspektør).forkastetVedtaksperiode(vedtaksperiodeId).inspektør + protected fun inspektør(vedtaksperiodeId: UUID) = + inspiser(personInspektør).vedtaksperiode(vedtaksperiodeId).inspektør + + protected fun inspektørForkastet(vedtaksperiodeId: UUID) = + inspiser(personInspektør).forkastetVedtaksperiode(vedtaksperiodeId).inspektør protected operator fun String.invoke(testblokk: TestPerson.TestArbeidsgiver.() -> R) = testperson.arbeidsgiver(this, testblokk) @@ -120,17 +153,30 @@ internal abstract class AbstractDslTest { håndterUtbetalingsgodkjenning(observatør.sisteVedtaksperiodeId(orgnummer)) håndterUtbetalt() } - drop(1).forEach { it { - håndterYtelser(observatør.sisteVedtaksperiodeId(orgnummer)) - håndterSimulering(observatør.sisteVedtaksperiodeId(orgnummer)) - håndterUtbetalingsgodkjenning(observatør.sisteVedtaksperiodeId(orgnummer)) - håndterUtbetalt() - }} + drop(1).forEach { + it { + håndterYtelser(observatør.sisteVedtaksperiodeId(orgnummer)) + håndterSimulering(observatør.sisteVedtaksperiodeId(orgnummer)) + håndterUtbetalingsgodkjenning(observatør.sisteVedtaksperiodeId(orgnummer)) + håndterUtbetalt() + } + } } + protected fun List.nyeVedtak( periode: Periode, grad: Prosentdel = 100.prosent, inntekt: Inntekt = 20000.månedlig, - sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag(map { it to inntekt }, periode.start), - arbeidsforhold: List = map { orgnr -> Vilkårsgrunnlag.Arbeidsforhold(orgnr, LocalDate.EPOCH, null, Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT) } + sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag( + map { it to inntekt }, + periode.start + ), + arbeidsforhold: List = map { orgnr -> + Vilkårsgrunnlag.Arbeidsforhold( + orgnr, + LocalDate.EPOCH, + null, + Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT + ) + } ) { forEach { it { @@ -138,35 +184,60 @@ internal abstract class AbstractDslTest { håndterSøknad(Sykdom(periode.start, periode.endInclusive, grad)) } } - forEach { it { - håndterInntektsmelding(listOf(periode.start til periode.start.plusDays(15)), beregnetInntekt = inntekt) - }} + forEach { + it { + håndterInntektsmelding( + listOf(periode.start til periode.start.plusDays(15)), + beregnetInntekt = inntekt + ) + } + } (first()){ - håndterVilkårsgrunnlag(observatør.sisteVedtaksperiodeId(orgnummer), inntektsvurderingForSykepengegrunnlag = sykepengegrunnlagSkatt, arbeidsforhold = arbeidsforhold) + håndterVilkårsgrunnlag( + observatør.sisteVedtaksperiodeId(orgnummer), + inntektsvurderingForSykepengegrunnlag = sykepengegrunnlagSkatt, + arbeidsforhold = arbeidsforhold + ) håndterYtelser(observatør.sisteVedtaksperiodeId(orgnummer)) håndterSimulering(observatør.sisteVedtaksperiodeId(orgnummer)) håndterUtbetalingsgodkjenning(observatør.sisteVedtaksperiodeId(orgnummer)) håndterUtbetalt() } - drop(1).forEach { it { - håndterYtelser(observatør.sisteVedtaksperiodeId(orgnummer)) - håndterSimulering(observatør.sisteVedtaksperiodeId(orgnummer)) - håndterUtbetalingsgodkjenning(observatør.sisteVedtaksperiodeId(orgnummer)) - håndterUtbetalt() - }} + drop(1).forEach { + it { + håndterYtelser(observatør.sisteVedtaksperiodeId(orgnummer)) + håndterSimulering(observatør.sisteVedtaksperiodeId(orgnummer)) + håndterUtbetalingsgodkjenning(observatør.sisteVedtaksperiodeId(orgnummer)) + håndterUtbetalt() + } + } } protected fun assertSubsumsjoner(block: SubsumsjonInspektør.() -> R): R { return testPersonAsserter.assertSubsumsjoner(block) } - protected fun TestPerson.TestArbeidsgiver.assertTilstander(id: UUID, vararg tilstander: TilstandType, orgnummer: String = a1) { + protected fun TestPerson.TestArbeidsgiver.assertTilstander( + id: UUID, + vararg tilstander: TilstandType, + orgnummer: String = a1 + ) { testArbeidsgiverAsserter.assertTilstander(id, *tilstander) } - protected fun TestPerson.TestArbeidsgiver.assertTilstand(id: UUID, tilstand: TilstandType, orgnummer: String = a1) { + + protected fun TestPerson.TestArbeidsgiver.assertTilstand( + id: UUID, + tilstand: TilstandType, + orgnummer: String = a1 + ) { assertSisteTilstand(id, tilstand) } - protected fun TestPerson.TestArbeidsgiver.assertSisteTilstand(id: UUID, tilstand: TilstandType, orgnummer: String = a1) { + + protected fun TestPerson.TestArbeidsgiver.assertSisteTilstand( + id: UUID, + tilstand: TilstandType, + orgnummer: String = a1 + ) { testArbeidsgiverAsserter.assertSisteTilstand(id, tilstand) } @@ -177,56 +248,144 @@ internal abstract class AbstractDslTest { forventetPersonbeløp: Int = 0, subset: Periode? = null ) { - testArbeidsgiverAsserter.assertUtbetalingsbeløp(vedtaksperiodeId, forventetArbeidsgiverbeløp, forventetArbeidsgiverRefusjonsbeløp, forventetPersonbeløp, subset) + testArbeidsgiverAsserter.assertUtbetalingsbeløp( + vedtaksperiodeId, + forventetArbeidsgiverbeløp, + forventetArbeidsgiverRefusjonsbeløp, + forventetPersonbeløp, + subset + ) } - protected fun TestPerson.TestArbeidsgiver.assertForkastetPeriodeTilstander(id: UUID, vararg tilstand: TilstandType, orgnummer: String = a1) { + + protected fun TestPerson.TestArbeidsgiver.assertForkastetPeriodeTilstander( + id: UUID, + vararg tilstand: TilstandType, + orgnummer: String = a1 + ) { testArbeidsgiverAsserter.assertForkastetPeriodeTilstander(id, *tilstand) } - protected fun assertArbeidsgivereISykepengegrunnlag(skjæringstidspunkt: LocalDate, vararg arbeidsgivere: String) = + + protected fun assertArbeidsgivereISykepengegrunnlag( + skjæringstidspunkt: LocalDate, + vararg arbeidsgivere: String + ) = testPersonAsserter.assertArbeidsgivereISykepengegrunnlag(skjæringstidspunkt, *arbeidsgivere) - protected fun TestPerson.TestArbeidsgiver.assertHarHendelseIder(vedtaksperiodeId: UUID, vararg hendelseIder: UUID) = + + protected fun TestPerson.TestArbeidsgiver.assertHarHendelseIder( + vedtaksperiodeId: UUID, + vararg hendelseIder: UUID + ) = testArbeidsgiverAsserter.assertHarHendelseIder(vedtaksperiodeId, *hendelseIder) - protected fun TestPerson.TestArbeidsgiver.assertHarIkkeHendelseIder(vedtaksperiodeId: UUID, vararg hendelseIder: UUID) = + + protected fun TestPerson.TestArbeidsgiver.assertHarIkkeHendelseIder( + vedtaksperiodeId: UUID, + vararg hendelseIder: UUID + ) = testArbeidsgiverAsserter.assertHarIkkeHendelseIder(vedtaksperiodeId, *hendelseIder) + protected fun TestPerson.TestArbeidsgiver.assertIngenFunksjonelleFeil(vararg filtre: AktivitetsloggFilter) = testArbeidsgiverAsserter.assertIngenFunksjonelleFeil(*filtre) + protected fun TestPerson.TestArbeidsgiver.assertFunksjonelleFeil() = testArbeidsgiverAsserter.assertFunksjonelleFeil() - protected fun TestPerson.TestArbeidsgiver.assertFunksjonellFeil(funksjonellFeil: String, vararg filtre: AktivitetsloggFilter) = + + protected fun TestPerson.TestArbeidsgiver.assertFunksjonellFeil( + funksjonellFeil: String, + vararg filtre: AktivitetsloggFilter + ) = testArbeidsgiverAsserter.assertFunksjonellFeil(funksjonellFeil, *filtre) - protected fun TestPerson.TestArbeidsgiver.assertFunksjonellFeil(funksjonellFeil: Varselkode, vararg filtre: AktivitetsloggFilter) = - testArbeidsgiverAsserter.assertFunksjonellFeil(funksjonellFeil.funksjonellFeilTekst, *filtre) - protected fun TestPerson.TestArbeidsgiver.ingenNyeFunksjonelleFeil(block:() -> Unit) = + + protected fun TestPerson.TestArbeidsgiver.assertFunksjonellFeil( + funksjonellFeil: Varselkode, + vararg filtre: AktivitetsloggFilter + ) = + testArbeidsgiverAsserter.assertFunksjonellFeil( + funksjonellFeil.funksjonellFeilTekst, + *filtre + ) + + protected fun TestPerson.TestArbeidsgiver.ingenNyeFunksjonelleFeil(block: () -> Unit) = testArbeidsgiverAsserter.ingenNyeFunksjonelleFeil(block) - protected fun TestPerson.TestArbeidsgiver.nyeFunksjonelleFeil(block:() -> Unit) = + + protected fun TestPerson.TestArbeidsgiver.nyeFunksjonelleFeil(block: () -> Unit) = testArbeidsgiverAsserter.nyeFunksjonelleFeil(block) + protected fun TestPerson.TestArbeidsgiver.assertVarsler(vararg filtre: AktivitetsloggFilter) = testArbeidsgiverAsserter.assertVarsler(*filtre) - protected fun TestPerson.TestArbeidsgiver.assertVarsel(warning: String, vararg filtre: AktivitetsloggFilter) = + + protected fun TestPerson.TestArbeidsgiver.assertVarsel( + warning: String, + vararg filtre: AktivitetsloggFilter + ) = testArbeidsgiverAsserter.assertVarsel(warning, *filtre) - protected fun TestPerson.TestArbeidsgiver.assertVarsel(kode: Varselkode, vararg filtre: AktivitetsloggFilter) = + + protected fun TestPerson.TestArbeidsgiver.assertVarsel( + kode: Varselkode, + vararg filtre: AktivitetsloggFilter + ) = testArbeidsgiverAsserter.assertVarsel(kode, *filtre) - protected fun TestPerson.TestArbeidsgiver.assertIngenVarsel(kode: Varselkode, vararg filtre: AktivitetsloggFilter) = + + protected fun TestPerson.TestArbeidsgiver.assertIngenVarsel( + kode: Varselkode, + vararg filtre: AktivitetsloggFilter + ) = testArbeidsgiverAsserter.assertIngenVarsel(kode, *filtre) + protected fun TestPerson.TestArbeidsgiver.assertIngenVarsler(vararg filtre: AktivitetsloggFilter) = testArbeidsgiverAsserter.assertIngenVarsler(*filtre) - protected fun TestPerson.TestArbeidsgiver.assertInfo(forventet: String, vararg filtre: AktivitetsloggFilter) = + + protected fun TestPerson.TestArbeidsgiver.assertInfo( + forventet: String, + vararg filtre: AktivitetsloggFilter + ) = testArbeidsgiverAsserter.assertInfo(forventet, *filtre) - protected fun TestPerson.TestArbeidsgiver.assertIngenInfo(forventet: String, vararg filtre: AktivitetsloggFilter) = + + protected fun TestPerson.TestArbeidsgiver.assertIngenInfo( + forventet: String, + vararg filtre: AktivitetsloggFilter + ) = testArbeidsgiverAsserter.assertIngenInfo(forventet, *filtre) - protected fun TestPerson.TestArbeidsgiver.assertIngenInfoSomInneholder(forventet: String, vararg filtre: AktivitetsloggFilter) = + + protected fun TestPerson.TestArbeidsgiver.assertIngenInfoSomInneholder( + forventet: String, + vararg filtre: AktivitetsloggFilter + ) = testArbeidsgiverAsserter.assertIngenInfoSomInneholder(forventet, *filtre) - protected fun TestPerson.TestArbeidsgiver.assertIngenBehov(vedtaksperiodeId: UUID, behovtype: Aktivitet.Behov.Behovtype) = + + protected fun TestPerson.TestArbeidsgiver.assertIngenBehov( + vedtaksperiodeId: UUID, + behovtype: Aktivitet.Behov.Behovtype + ) = testArbeidsgiverAsserter.assertIngenBehov(vedtaksperiodeId, behovtype) - protected fun TestPerson.TestArbeidsgiver.assertBehov(vedtaksperiodeId: UUID, behovtype: Aktivitet.Behov.Behovtype) = + + protected fun TestPerson.TestArbeidsgiver.assertBehov( + vedtaksperiodeId: UUID, + behovtype: Aktivitet.Behov.Behovtype + ) = testArbeidsgiverAsserter.assertBehov(vedtaksperiodeId, behovtype) - protected fun nyPeriode(periode: Periode, vararg orgnummer: String, grad: Prosentdel = 100.prosent) { + + protected fun nyPeriode( + periode: Periode, + vararg orgnummer: String, + grad: Prosentdel = 100.prosent + ) { testperson.nyPeriode(periode, *orgnummer, grad = grad) } /* alternative metoder fremfor å lage en arbeidsgiver-blokk hver gang */ - protected fun String.håndterSykmelding(vararg sykmeldingsperiode: Sykmeldingsperiode, sykmeldingSkrevet: LocalDateTime? = null, mottatt: LocalDateTime? = null) = - this { håndterSykmelding(*sykmeldingsperiode, sykmeldingSkrevet = sykmeldingSkrevet, mottatt = mottatt) } + protected fun String.håndterSykmelding( + vararg sykmeldingsperiode: Sykmeldingsperiode, + sykmeldingSkrevet: LocalDateTime? = null, + mottatt: LocalDateTime? = null + ) = + this { + håndterSykmelding( + *sykmeldingsperiode, + sykmeldingSkrevet = sykmeldingSkrevet, + mottatt = mottatt + ) + } + protected fun String.håndterSøknad( vararg perioder: Søknad.Søknadsperiode, andreInntektskilder: Boolean = false, @@ -236,46 +395,71 @@ internal abstract class AbstractDslTest { sendTilGosys: Boolean = false, tilkomneInntekter: List = emptyList() ) = - this { håndterSøknad(*perioder, andreInntektskilder = andreInntektskilder, arbeidUtenforNorge = arbeidUtenforNorge, sendtTilNAVEllerArbeidsgiver = sendtTilNAVEllerArbeidsgiver, sykmeldingSkrevet = sykmeldingSkrevet, sendTilGosys = sendTilGosys, tilkomneInntekter = tilkomneInntekter) } + this { + håndterSøknad( + *perioder, + andreInntektskilder = andreInntektskilder, + arbeidUtenforNorge = arbeidUtenforNorge, + sendtTilNAVEllerArbeidsgiver = sendtTilNAVEllerArbeidsgiver, + sykmeldingSkrevet = sykmeldingSkrevet, + sendTilGosys = sendTilGosys, + tilkomneInntekter = tilkomneInntekter + ) + } + protected fun String.håndterInntektsmelding( arbeidsgiverperioder: List, beregnetInntekt: Inntekt, førsteFraværsdag: LocalDate = arbeidsgiverperioder.maxOf { it.start }, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), harOpphørAvNaturalytelser: Boolean = false, begrunnelseForReduksjonEllerIkkeUtbetalt: String? = null, id: UUID = UUID.randomUUID(), mottatt: LocalDateTime = LocalDateTime.now() ) = - this { håndterInntektsmelding( - arbeidsgiverperioder, - beregnetInntekt, - førsteFraværsdag, - refusjon, - harOpphørAvNaturalytelser, - begrunnelseForReduksjonEllerIkkeUtbetalt, - id, - mottatt = mottatt - ) } + this { + håndterInntektsmelding( + arbeidsgiverperioder, + beregnetInntekt, + førsteFraværsdag, + refusjon, + harOpphørAvNaturalytelser, + begrunnelseForReduksjonEllerIkkeUtbetalt, + id, + mottatt = mottatt + ) + } + protected fun String.håndterInntektsmeldingPortal( arbeidsgiverperioder: List, beregnetInntekt: Inntekt, førsteFraværsdag: LocalDate = arbeidsgiverperioder.maxOf { it.start }, vedtaksperiodeId: UUID, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), harOpphørAvNaturalytelser: Boolean = false, begrunnelseForReduksjonEllerIkkeUtbetalt: String? = null, id: UUID = UUID.randomUUID() ) = - this { håndterInntektsmeldingPortal( - arbeidsgiverperioder, - beregnetInntekt, - vedtaksperiodeId, - refusjon, - harOpphørAvNaturalytelser, - begrunnelseForReduksjonEllerIkkeUtbetalt, - id - ) } + this { + håndterInntektsmeldingPortal( + arbeidsgiverperioder, + beregnetInntekt, + vedtaksperiodeId, + refusjon, + harOpphørAvNaturalytelser, + begrunnelseForReduksjonEllerIkkeUtbetalt, + id + ) + } + protected fun String.håndterVilkårsgrunnlag( vedtaksperiodeId: UUID, inntekt: Inntekt = INNTEKT, @@ -284,7 +468,17 @@ internal abstract class AbstractDslTest { inntekterForOpptjeningsvurdering: InntekterForOpptjeningsvurdering? = null, arbeidsforhold: List? = null ) = - this { håndterVilkårsgrunnlag(vedtaksperiodeId, inntekt, medlemskapstatus, inntektsvurderingForSykepengegrunnlag, inntekterForOpptjeningsvurdering, arbeidsforhold) } + this { + håndterVilkårsgrunnlag( + vedtaksperiodeId, + inntekt, + medlemskapstatus, + inntektsvurderingForSykepengegrunnlag, + inntekterForOpptjeningsvurdering, + arbeidsforhold + ) + } + protected fun String.håndterYtelser( vedtaksperiodeId: UUID, foreldrepenger: List = emptyList(), @@ -296,66 +490,143 @@ internal abstract class AbstractDslTest { arbeidsavklaringspenger: List = emptyList(), dagpenger: List = emptyList(), ) = - this { håndterYtelser(vedtaksperiodeId, foreldrepenger, svangerskapspenger, pleiepenger, omsorgspenger, opplæringspenger, institusjonsoppholdsperioder, arbeidsavklaringspenger, dagpenger) } + this { + håndterYtelser( + vedtaksperiodeId, + foreldrepenger, + svangerskapspenger, + pleiepenger, + omsorgspenger, + opplæringspenger, + institusjonsoppholdsperioder, + arbeidsavklaringspenger, + dagpenger + ) + } + protected fun String.håndterSimulering(vedtaksperiodeId: UUID) = this { håndterSimulering(vedtaksperiodeId) } - protected fun String.håndterUtbetalingsgodkjenning(vedtaksperiodeId: UUID, godkjent: Boolean = true) = + + protected fun String.håndterUtbetalingsgodkjenning( + vedtaksperiodeId: UUID, + godkjent: Boolean = true + ) = this { håndterUtbetalingsgodkjenning(vedtaksperiodeId, godkjent) } + protected fun String.håndterUtbetalingshistorikkEtterInfotrygdendring(vararg utbetalinger: Infotrygdperiode) = this { håndterUtbetalingshistorikkEtterInfotrygdendring(*utbetalinger) } + protected fun String.håndterUtbetalt(status: Oppdragstatus) = this { håndterUtbetalt(status) } + protected fun String.håndterAnnullering(utbetalingId: UUID) = this { håndterAnnullering(utbetalingId) } + protected fun String.håndterIdentOpphørt(nyttFnr: Personidentifikator, nyAktørId: String) = this { håndterIdentOpphørt(nyttFnr) } - protected fun String.håndterPåminnelse(vedtaksperiodeId: UUID, tilstand: TilstandType, tilstandsendringstidspunkt: LocalDateTime = LocalDateTime.now()) = + + protected fun String.håndterPåminnelse( + vedtaksperiodeId: UUID, + tilstand: TilstandType, + tilstandsendringstidspunkt: LocalDateTime = LocalDateTime.now() + ) = this { håndterPåminnelse(vedtaksperiodeId, tilstand, tilstandsendringstidspunkt) } + protected fun String.håndterGrunnbeløpsregulering(skjæringstidspunkt: LocalDate) = this { håndterGrunnbeløpsregulering(skjæringstidspunkt) } + protected fun nullstillTilstandsendringer() = observatør.nullstillTilstandsendringer() protected fun String.assertTilstander(id: UUID, vararg tilstander: TilstandType) = this { assertTilstander(id, *tilstander) } + protected fun String.assertSisteTilstand(id: UUID, tilstand: TilstandType) = this { assertSisteTilstand(id, tilstand) } + protected fun String.assertIngenFunksjonelleFeil(vararg filtre: AktivitetsloggFilter) = this { assertIngenFunksjonelleFeil(*filtre) } + protected fun String.assertVarsler(vararg filtre: AktivitetsloggFilter) = this { assertVarsler(*filtre) } + protected fun String.assertVarsel(warning: String, vararg filtre: AktivitetsloggFilter) = this { assertVarsel(warning, *filtre) } + protected fun String.assertVarsel(kode: Varselkode, vararg filtre: AktivitetsloggFilter) = this { assertVarsel(kode, *filtre) } protected fun String.assertIngenVarsel(kode: Varselkode, vararg filtre: AktivitetsloggFilter) = this { assertIngenVarsel(kode, *filtre) } - protected fun String.assertFunksjonellFeil(kode: Varselkode, vararg filtre: AktivitetsloggFilter) = + + protected fun String.assertFunksjonellFeil( + kode: Varselkode, + vararg filtre: AktivitetsloggFilter + ) = this { assertFunksjonellFeil(kode, *filtre) } + protected fun String.assertIngenVarsler(vararg filtre: AktivitetsloggFilter) = this { assertIngenVarsler(*filtre) } + protected fun String.nyttVedtak( periode: Periode, grad: Prosentdel = 100.prosent, førsteFraværsdag: LocalDate = periode.start, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), arbeidsgiverperiode: List = emptyList(), status: Oppdragstatus = Oppdragstatus.AKSEPTERT, - sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag(this, beregnetInntekt, førsteFraværsdag) + sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag( + this, + beregnetInntekt, + førsteFraværsdag + ) ) = - this { nyttVedtak(periode, grad, førsteFraværsdag, beregnetInntekt, refusjon, arbeidsgiverperiode, status, sykepengegrunnlagSkatt) } + this { + nyttVedtak( + periode, + grad, + førsteFraværsdag, + beregnetInntekt, + refusjon, + arbeidsgiverperiode, + status, + sykepengegrunnlagSkatt + ) + } protected fun String.tilGodkjenning( periode: Periode, grad: Prosentdel = 100.prosent, førsteFraværsdag: LocalDate = periode.start, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), arbeidsgiverperiode: List = emptyList(), status: Oppdragstatus = Oppdragstatus.AKSEPTERT, - sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag(this, beregnetInntekt, førsteFraværsdag) + sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag( + this, + beregnetInntekt, + førsteFraværsdag + ) ) = - this { tilGodkjenning(periode, grad, førsteFraværsdag, beregnetInntekt, refusjon, arbeidsgiverperiode, status, sykepengegrunnlagSkatt) } + this { + tilGodkjenning( + periode, + grad, + førsteFraværsdag, + beregnetInntekt, + refusjon, + arbeidsgiverperiode, + status, + sykepengegrunnlagSkatt + ) + } protected fun migrerUbrukteRefusjonsopplysninger() { person.migrerUbrukteRefusjonsopplysninger(Aktivitetslogg()) @@ -372,15 +643,25 @@ internal abstract class AbstractDslTest { } return orgnr } - protected fun håndterSykmelding(periode: Periode) = håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive)) + + protected fun håndterSykmelding(periode: Periode) = + håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive)) + protected fun håndterSykmelding( vararg sykmeldingsperiode: Sykmeldingsperiode, sykmeldingSkrevet: LocalDateTime? = null, mottatt: LocalDateTime? = null, orgnummer: String = a1 ) = - bareÈnArbeidsgiver(orgnummer).håndterSykmelding(*sykmeldingsperiode, sykmeldingSkrevet = sykmeldingSkrevet, mottatt = mottatt) - protected fun håndterSøknad(periode: Periode) = håndterSøknad(Sykdom(periode.start, periode.endInclusive, 100.prosent)) + bareÈnArbeidsgiver(orgnummer).håndterSykmelding( + *sykmeldingsperiode, + sykmeldingSkrevet = sykmeldingSkrevet, + mottatt = mottatt + ) + + protected fun håndterSøknad(periode: Periode) = + håndterSøknad(Sykdom(periode.start, periode.endInclusive, 100.prosent)) + protected fun håndterSøknad( vararg perioder: Søknad.Søknadsperiode, andreInntektskilder: Boolean = false, @@ -391,12 +672,25 @@ internal abstract class AbstractDslTest { sendTilGosys: Boolean = false, tilkomneInntekter: List = emptyList() ) = - bareÈnArbeidsgiver(orgnummer).håndterSøknad(*perioder, andreInntektskilder = andreInntektskilder, arbeidUtenforNorge = arbeidUtenforNorge, sendtTilNAVEllerArbeidsgiver = sendtTilNAVEllerArbeidsgiver, sykmeldingSkrevet = sykmeldingSkrevet, sendTilGosys = sendTilGosys, tilkomneInntekter=tilkomneInntekter) + bareÈnArbeidsgiver(orgnummer).håndterSøknad( + *perioder, + andreInntektskilder = andreInntektskilder, + arbeidUtenforNorge = arbeidUtenforNorge, + sendtTilNAVEllerArbeidsgiver = sendtTilNAVEllerArbeidsgiver, + sykmeldingSkrevet = sykmeldingSkrevet, + sendTilGosys = sendTilGosys, + tilkomneInntekter = tilkomneInntekter + ) + protected fun håndterInntektsmelding( arbeidsgiverperioder: List, beregnetInntekt: Inntekt, førsteFraværsdag: LocalDate = arbeidsgiverperioder.maxOf { it.start }, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), harOpphørAvNaturalytelser: Boolean = false, begrunnelseForReduksjonEllerIkkeUtbetalt: String? = null, id: UUID = UUID.randomUUID(), @@ -423,7 +717,15 @@ internal abstract class AbstractDslTest { arbeidsforhold: List? = null, orgnummer: String = a1 ) = - bareÈnArbeidsgiver(orgnummer).håndterVilkårsgrunnlag(vedtaksperiodeId, inntekt, medlemskapstatus, inntektsvurderingForSykepengegrunnlag, inntekterForOpptjeningsvurdering, arbeidsforhold) + bareÈnArbeidsgiver(orgnummer).håndterVilkårsgrunnlag( + vedtaksperiodeId, + inntekt, + medlemskapstatus, + inntektsvurderingForSykepengegrunnlag, + inntekterForOpptjeningsvurdering, + arbeidsforhold + ) + internal fun håndterYtelser( vedtaksperiodeId: UUID, foreldrepenger: List = emptyList(), @@ -436,51 +738,115 @@ internal abstract class AbstractDslTest { dagpenger: List = emptyList(), orgnummer: String = a1 ) = - bareÈnArbeidsgiver(orgnummer).håndterYtelser(vedtaksperiodeId, foreldrepenger, svangerskapspenger, pleiepenger, omsorgspenger, opplæringspenger, institusjonsoppholdsperioder, arbeidsavklaringspenger, dagpenger) + bareÈnArbeidsgiver(orgnummer).håndterYtelser( + vedtaksperiodeId, + foreldrepenger, + svangerskapspenger, + pleiepenger, + omsorgspenger, + opplæringspenger, + institusjonsoppholdsperioder, + arbeidsavklaringspenger, + dagpenger + ) + internal fun håndterSimulering(vedtaksperiodeId: UUID, orgnummer: String = a1) = bareÈnArbeidsgiver(orgnummer).håndterSimulering(vedtaksperiodeId) - internal fun håndterUtbetalingsgodkjenning(vedtaksperiodeId: UUID, godkjent: Boolean = true, orgnummer: String = a1) = + + internal fun håndterUtbetalingsgodkjenning( + vedtaksperiodeId: UUID, + godkjent: Boolean = true, + orgnummer: String = a1 + ) = bareÈnArbeidsgiver(orgnummer).håndterUtbetalingsgodkjenning(vedtaksperiodeId, godkjent) - internal fun håndterUtbetalt(status: Oppdragstatus = Oppdragstatus.AKSEPTERT, orgnummer: String = a1) = + + internal fun håndterUtbetalt( + status: Oppdragstatus = Oppdragstatus.AKSEPTERT, + orgnummer: String = a1 + ) = bareÈnArbeidsgiver(orgnummer).håndterUtbetalt(status) + protected fun håndterAnnullering(utbetalingId: UUID) = bareÈnArbeidsgiver(a1).håndterAnnullering(utbetalingId) + protected fun håndterIdentOpphørt(nyttFnr: Personidentifikator, nyAktørId: String) = bareÈnArbeidsgiver(a1).håndterIdentOpphørt(nyttFnr, nyAktørId) - protected fun håndterPåminnelse(vedtaksperiodeId: UUID, tilstand: TilstandType, tilstandsendringstidspunkt: LocalDateTime = LocalDateTime.now()) = - bareÈnArbeidsgiver(a1).håndterPåminnelse(vedtaksperiodeId, tilstand, tilstandsendringstidspunkt) + + protected fun håndterPåminnelse( + vedtaksperiodeId: UUID, + tilstand: TilstandType, + tilstandsendringstidspunkt: LocalDateTime = LocalDateTime.now() + ) = + bareÈnArbeidsgiver(a1).håndterPåminnelse( + vedtaksperiodeId, + tilstand, + tilstandsendringstidspunkt + ) protected fun håndterGrunnbeløpsregulering(skjæringstidspunkt: LocalDate) = bareÈnArbeidsgiver(a1).håndterGrunnbeløpsregulering(skjæringstidspunkt) - protected fun håndterOverstyrArbeidsforhold(skjæringstidspunkt: LocalDate, vararg overstyrteArbeidsforhold: OverstyrArbeidsforhold.ArbeidsforholdOverstyrt) = + protected fun håndterOverstyrArbeidsforhold( + skjæringstidspunkt: LocalDate, + vararg overstyrteArbeidsforhold: OverstyrArbeidsforhold.ArbeidsforholdOverstyrt + ) = testperson { håndterOverstyrArbeidsforhold(skjæringstidspunkt, *overstyrteArbeidsforhold) } - protected fun håndterSkjønnsmessigFastsettelse(skjæringstidspunkt: LocalDate, arbeidsgiveropplysninger: List, meldingsreferanseId: UUID = UUID.randomUUID(), tidsstempel: LocalDateTime = LocalDateTime.now()) = - testperson { håndterSkjønnsmessigFastsettelse(skjæringstidspunkt, arbeidsgiveropplysninger, meldingsreferanseId, tidsstempel) } + protected fun håndterSkjønnsmessigFastsettelse( + skjæringstidspunkt: LocalDate, + arbeidsgiveropplysninger: List, + meldingsreferanseId: UUID = UUID.randomUUID(), + tidsstempel: LocalDateTime = LocalDateTime.now() + ) = + testperson { + håndterSkjønnsmessigFastsettelse( + skjæringstidspunkt, + arbeidsgiveropplysninger, + meldingsreferanseId, + tidsstempel + ) + } - protected fun håndterOverstyrArbeidsgiveropplysninger(skjæringstidspunkt: LocalDate, arbeidsgiveropplysninger: List, meldingsreferanseId: UUID = UUID.randomUUID()) = - testperson { håndterOverstyrArbeidsgiveropplysninger(skjæringstidspunkt, arbeidsgiveropplysninger, meldingsreferanseId) } + protected fun håndterOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt: LocalDate, + arbeidsgiveropplysninger: List, + meldingsreferanseId: UUID = UUID.randomUUID() + ) = + testperson { + håndterOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt, + arbeidsgiveropplysninger, + meldingsreferanseId + ) + } protected fun assertTilstander(id: UUID, vararg tilstander: TilstandType) = bareÈnArbeidsgiver(a1).assertTilstander(id, *tilstander) + protected fun assertSisteTilstand(id: UUID, tilstand: TilstandType, orgnummer: String = a1) = bareÈnArbeidsgiver(orgnummer).assertSisteTilstand(id, tilstand) + protected fun assertIngenFunksjonelleFeil(vararg filtre: AktivitetsloggFilter) = bareÈnArbeidsgiver(a1).assertIngenFunksjonelleFeil(*filtre) + protected fun assertVarsler(vararg filtre: AktivitetsloggFilter) = bareÈnArbeidsgiver(a1).assertVarsler(*filtre) + protected fun assertVarsel(warning: String, vararg filtre: AktivitetsloggFilter) = bareÈnArbeidsgiver(a1).assertVarsel(warning, *filtre) + protected fun assertVarsel(kode: Varselkode, vararg filtre: AktivitetsloggFilter) = bareÈnArbeidsgiver(a1).assertVarsel(kode, *filtre) protected fun assertIngenVarsel(kode: Varselkode, vararg filtre: AktivitetsloggFilter) = bareÈnArbeidsgiver(a1).assertIngenVarsel(kode, *filtre) + protected fun assertFunksjonellFeil(kode: Varselkode, vararg filtre: AktivitetsloggFilter) = bareÈnArbeidsgiver(a1).assertFunksjonellFeil(kode, *filtre) + protected fun assertIngenVarsler(vararg filtre: AktivitetsloggFilter) = bareÈnArbeidsgiver(a1).assertIngenVarsler(*filtre) + protected fun assertActivities() { val inspektør = inspiser(personInspektør) assertTrue(inspektør.aktivitetslogg.aktiviteter.isNotEmpty()) { inspektør.aktivitetslogg.toString() } @@ -488,8 +854,10 @@ internal abstract class AbstractDslTest { protected fun assertGjenoppbygget(dto: PersonUtDto) { val serialisertPerson = dto.tilPersonData().tilSerialisertPerson() - val gjenoppbyggetPersonViaPersonData = Person.gjenopprett(EmptyLog, serialisertPerson.tilPersonDto()) - val gjenoppbyggetPersonViaPersonDto = Person.gjenopprett(EmptyLog, dto.tilPersonData().tilPersonDto()) + val gjenoppbyggetPersonViaPersonData = + Person.gjenopprett(EmptyLog, serialisertPerson.tilPersonDto()) + val gjenoppbyggetPersonViaPersonDto = + Person.gjenopprett(EmptyLog, dto.tilPersonData().tilPersonDto()) val dtoFraPersonViaPersonData = gjenoppbyggetPersonViaPersonData.dto() val dtoFraPersonViaPersonDto = gjenoppbyggetPersonViaPersonDto.dto() @@ -509,17 +877,39 @@ internal abstract class AbstractDslTest { grad: Prosentdel = 100.prosent, førsteFraværsdag: LocalDate = vedtaksperiode.start, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), arbeidsgiverperiode: List = emptyList(), status: Oppdragstatus = Oppdragstatus.AKSEPTERT, - sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag(a1, beregnetInntekt, førsteFraværsdag) + sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag( + a1, + beregnetInntekt, + førsteFraværsdag + ) ) = - bareÈnArbeidsgiver(a1).nyttVedtak(vedtaksperiode, grad, førsteFraværsdag, beregnetInntekt, refusjon, arbeidsgiverperiode, status, sykepengegrunnlagSkatt) + bareÈnArbeidsgiver(a1).nyttVedtak( + vedtaksperiode, + grad, + førsteFraværsdag, + beregnetInntekt, + refusjon, + arbeidsgiverperiode, + status, + sykepengegrunnlagSkatt + ) protected fun dto() = testperson.dto() protected fun medFødselsdato(fødselsdato: LocalDate) { - testperson = TestPerson(observatør = observatør, fødselsdato = fødselsdato, deferredLog = deferredLog, jurist = jurist) + testperson = TestPerson( + observatør = observatør, + fødselsdato = fødselsdato, + deferredLog = deferredLog, + jurist = jurist + ) } @BeforeEach diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/ArbeidsgiverHendelsefabrikk.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/ArbeidsgiverHendelsefabrikk.kt index 218553e92d..18b3552864 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/ArbeidsgiverHendelsefabrikk.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/ArbeidsgiverHendelsefabrikk.kt @@ -65,7 +65,8 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri private val sykmeldinger = mutableListOf() private val søknader = mutableListOf() - private val inntektsmeldinger = mutableMapOf() + private val inntektsmeldinger = + mutableMapOf() internal fun lagSykmelding( vararg sykeperioder: Sykmeldingsperiode, @@ -100,7 +101,9 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri registrert: LocalDateTime = LocalDateTime.now(), tilkomneInntekter: List = emptyList() ): Søknad { - val innsendt = (sendtTilNAVEllerArbeidsgiver ?: Søknad.Søknadsperiode.søknadsperiode(perioder.toList())!!.endInclusive).let { + val innsendt = (sendtTilNAVEllerArbeidsgiver ?: Søknad.Søknadsperiode.søknadsperiode( + perioder.toList() + )!!.endInclusive).let { when (it) { is LocalDateTime -> it is LocalDate -> it.atStartOfDay() @@ -116,7 +119,8 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri sendtTilNAVEllerArbeidsgiver = innsendt, permittert = permittert, merknaderFraSykmelding = merknaderFraSykmelding, - sykmeldingSkrevet = sykmeldingSkrevet ?: Søknad.Søknadsperiode.søknadsperiode(perioder.toList())!!.start.atStartOfDay(), + sykmeldingSkrevet = sykmeldingSkrevet + ?: Søknad.Søknadsperiode.søknadsperiode(perioder.toList())!!.start.atStartOfDay(), opprinneligSendt = opprinneligSendt?.atStartOfDay(), utenlandskSykmelding = utenlandskSykmelding, arbeidUtenforNorge = arbeidUtenforNorge, @@ -138,7 +142,11 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri arbeidsgiverperioder: List, beregnetInntekt: Inntekt, førsteFraværsdag: LocalDate? = arbeidsgiverperioder.maxOf { it.start }, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), harOpphørAvNaturalytelser: Boolean = false, begrunnelseForReduksjonEllerIkkeUtbetalt: String? = null, id: UUID = UUID.randomUUID(), @@ -199,7 +207,11 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri arbeidsgiverperioder: List, beregnetInntekt: Inntekt, vedtaksperiodeId: UUID, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), harOpphørAvNaturalytelser: Boolean = false, begrunnelseForReduksjonEllerIkkeUtbetalt: String? = null, id: UUID = UUID.randomUUID(), @@ -215,11 +227,18 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, harOpphørAvNaturalytelser = harOpphørAvNaturalytelser, harFlereInntektsmeldinger = harFlereInntektsmeldinger, - avsendersystem = Inntektsmelding.Avsendersystem.NavPortal(vedtaksperiodeId, LocalDate.EPOCH, avsenderSystem == NAV_NO), + avsendersystem = Inntektsmelding.Avsendersystem.NavPortal( + vedtaksperiodeId, + LocalDate.EPOCH, + avsenderSystem == NAV_NO + ), mottatt = mottatt ) - internal fun lagInntektsmeldingReplay(forespørsel: Forespørsel, håndterteInntektsmeldinger: Set) = + internal fun lagInntektsmeldingReplay( + forespørsel: Forespørsel, + håndterteInntektsmeldinger: Set + ) = InntektsmeldingerReplay( meldingsreferanseId = UUID.randomUUID(), organisasjonsnummer = organisasjonsnummer, @@ -269,7 +288,11 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri besvart = LocalDateTime.now() ) - internal fun lagSykepengegrunnlagForArbeidsgiver(vedtaksperiodeId: UUID, skjæringstidspunkt: LocalDate, inntekter: List): SykepengegrunnlagForArbeidsgiver { + internal fun lagSykepengegrunnlagForArbeidsgiver( + vedtaksperiodeId: UUID, + skjæringstidspunkt: LocalDate, + inntekter: List + ): SykepengegrunnlagForArbeidsgiver { return SykepengegrunnlagForArbeidsgiver( meldingsreferanseId = UUID.randomUUID(), vedtaksperiodeId = vedtaksperiodeId, @@ -392,6 +415,7 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri vedtakFattetTidspunkt = vedtakFattetTidspunkt, automatisert = automatisert ) + internal fun lagKanIkkeBehandlesHer( vedtaksperiodeId: UUID, utbetalingId: UUID, @@ -490,10 +514,18 @@ internal class ArbeidsgiverHendelsefabrikk(private val organisasjonsnummer: Stri opprettet = LocalDateTime.now() ) - internal fun lagOverstyrInntekt(hendelseId: UUID, skjæringstidspunkt: LocalDate, inntekt: Inntekt, orgnummer: String, tidsstempel: LocalDateTime = LocalDateTime.now()) = - PersonHendelsefabrikk().lagOverstyrArbeidsgiveropplysninger(skjæringstidspunkt, listOf( + internal fun lagOverstyrInntekt( + hendelseId: UUID, + skjæringstidspunkt: LocalDate, + inntekt: Inntekt, + orgnummer: String, + tidsstempel: LocalDateTime = LocalDateTime.now() + ) = + PersonHendelsefabrikk().lagOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt, listOf( OverstyrtArbeidsgiveropplysning(orgnummer, inntekt, "forklaring", null, emptyList()) - ), meldingsreferanseId = hendelseId, tidsstempel) + ), meldingsreferanseId = hendelseId, tidsstempel + ) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Behovsamler.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Behovsamler.kt index 4657a54894..2b4582645c 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Behovsamler.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Behovsamler.kt @@ -39,7 +39,10 @@ internal class Behovsamler(private val log: DeferredLog) : PersonObserver { return behovtyper.all { behovtype -> behovtype in behover } } - internal fun fangInntektsmeldingReplay(block: () -> R, behandleReplays: (Set) -> Unit): R { + internal fun fangInntektsmeldingReplay( + block: () -> R, + behandleReplays: (Set) -> Unit + ): R { val før = replays.toSet() val retval = block() behandleReplays(replays.toSet() - før) @@ -47,25 +50,41 @@ internal class Behovsamler(private val log: DeferredLog) : PersonObserver { } internal fun bekreftBehovOppfylt() { - val ubesvarte = behov.filterNot { it.type == Behovtype.Sykepengehistorikk }.takeUnless { it.isEmpty() } ?: return + val ubesvarte = + behov.filterNot { it.type == Behovtype.Sykepengehistorikk }.takeUnless { it.isEmpty() } + ?: return log.log("Etter testen er det ${behov.size} behov uten svar: [${behov.joinToString { it.type.toString() }}]") } internal fun harBedtOmReplay(vedtaksperiodeId: UUID) = replays.any { it.vedtaksperiodeId == vedtaksperiodeId } + internal fun bekreftOgKvitterReplay(vedtaksperiodeId: UUID) { - assertTrue(replays.removeAll { it.vedtaksperiodeId == vedtaksperiodeId }) { "Vedtaksperioden har ikke bedt om replay. Den står i ${tilstander.getValue(vedtaksperiodeId)}"} + assertTrue(replays.removeAll { it.vedtaksperiodeId == vedtaksperiodeId }) { + "Vedtaksperioden har ikke bedt om replay. Den står i ${ + tilstander.getValue( + vedtaksperiodeId + ) + }" + } } internal fun bekreftBehov(vedtaksperiodeId: UUID, vararg behovtyper: Behovtype) { - bekreftBehov(vedtaksperiodebehov(vedtaksperiodeId), *behovtyper) { "Vedtaksperioden står i ${tilstander.getValue(vedtaksperiodeId)}"} + bekreftBehov( + vedtaksperiodebehov(vedtaksperiodeId), + *behovtyper + ) { "Vedtaksperioden står i ${tilstander.getValue(vedtaksperiodeId)}" } } internal fun bekreftBehov(orgnummer: String, vararg behovtyper: Behovtype) { bekreftBehov(orgnummerbehov(orgnummer), *behovtyper) } - private fun bekreftBehov(filter: (Behov) -> Boolean, vararg behovtyper: Behovtype, melding: () -> String = { "" }) { + private fun bekreftBehov( + filter: (Behov) -> Boolean, + vararg behovtyper: Behovtype, + melding: () -> String = { "" } + ) { assertTrue(harBehov(filter, *behovtyper)) { val behover = behov.filter(filter) "Forventer at [${behovtyper.joinToString { it.toString() }}] skal være etterspurt. Fant bare: [${behover.joinToString { it.type.toString() }}]. ${melding()}" @@ -74,6 +93,7 @@ internal class Behovsamler(private val log: DeferredLog) : PersonObserver { internal fun detaljerFor(orgnummer: String, behovtype: Behovtype) = detaljerFor(orgnummerbehov(orgnummer), behovtype) + internal fun detaljerFor(vedtaksperiodeId: UUID, behovtype: Behovtype) = detaljerFor(vedtaksperiodebehov(vedtaksperiodeId), behovtype) @@ -81,7 +101,9 @@ internal class Behovsamler(private val log: DeferredLog) : PersonObserver { behov.filter { filter(it) && it.type == behovtype }.map { it.detaljer() to it.kontekst() } private fun kvitterVedtaksperiode(vedtaksperiodeId: UUID) { - val vedtaksperiodebehov = behov.filter(vedtaksperiodebehov(vedtaksperiodeId)).takeUnless { it.isEmpty() } ?: return + val vedtaksperiodebehov = + behov.filter(vedtaksperiodebehov(vedtaksperiodeId)).takeUnless { it.isEmpty() } + ?: return log.log("Fjerner ${vedtaksperiodebehov.size} behov (${vedtaksperiodebehov.joinToString { it.type.toString() }})") behov.removeAll { behov -> vedtaksperiodeId == behov.vedtaksperiodeId } log.log(" -> Det er nå ${behov.size} behov (${behov.joinToString { it.type.toString() }})") @@ -109,20 +131,41 @@ internal class Behovsamler(private val log: DeferredLog) : PersonObserver { trengerArbeidsgiverperiode: Boolean, erPotensiellForespørsel: Boolean ) { - replays.add(Forespørsel( - fnr = personidentifikator.toString(), - orgnr = organisasjonsnummer, - vedtaksperiodeId = vedtaksperiodeId, - skjæringstidspunkt = skjæringstidspunkt, - førsteFraværsdager = førsteFraværsdager.map { no.nav.helse.spill_av_im.FørsteFraværsdag(it.organisasjonsnummer, it.førsteFraværsdag) }, - sykmeldingsperioder = sykmeldingsperioder.map { no.nav.helse.spill_av_im.Periode(it.start, it.endInclusive) }, - egenmeldinger = egenmeldingsperioder.map { no.nav.helse.spill_av_im.Periode(it.start, it.endInclusive) }, - harForespurtArbeidsgiverperiode = trengerArbeidsgiverperiode, - erPotensiellForespørsel = erPotensiellForespørsel - )) + replays.add( + Forespørsel( + fnr = personidentifikator.toString(), + orgnr = organisasjonsnummer, + vedtaksperiodeId = vedtaksperiodeId, + skjæringstidspunkt = skjæringstidspunkt, + førsteFraværsdager = førsteFraværsdager.map { + no.nav.helse.spill_av_im.FørsteFraværsdag( + it.organisasjonsnummer, + it.førsteFraværsdag + ) + }, + sykmeldingsperioder = sykmeldingsperioder.map { + no.nav.helse.spill_av_im.Periode( + it.start, + it.endInclusive + ) + }, + egenmeldinger = egenmeldingsperioder.map { + no.nav.helse.spill_av_im.Periode( + it.start, + it.endInclusive + ) + }, + harForespurtArbeidsgiverperiode = trengerArbeidsgiverperiode, + erPotensiellForespørsel = erPotensiellForespørsel + ) + ) } - override fun inntektsmeldingHåndtert(inntektsmeldingId: UUID, vedtaksperiodeId: UUID, organisasjonsnummer: String) { + override fun inntektsmeldingHåndtert( + inntektsmeldingId: UUID, + vedtaksperiodeId: UUID, + organisasjonsnummer: String + ) { hånderteInntektsmeldinger.add(inntektsmeldingId) } @@ -134,13 +177,17 @@ internal class Behovsamler(private val log: DeferredLog) : PersonObserver { } private companion object { - private val Behov.utbetalingId get() = - kontekst()["utbetalingId"]?.let { UUID.fromString(it) } - private val Behov.vedtaksperiodeId get() = - kontekst()["vedtaksperiodeId"]?.let { UUID.fromString(it) } + private val Behov.utbetalingId + get() = + kontekst()["utbetalingId"]?.let { UUID.fromString(it) } + private val Behov.vedtaksperiodeId + get() = + kontekst()["vedtaksperiodeId"]?.let { UUID.fromString(it) } private val Behov.orgnummer get() = kontekst()["organisasjonsnummer"] - private val vedtaksperiodebehov = { vedtaksperiodeId: UUID -> { behov: Behov -> behov.vedtaksperiodeId == vedtaksperiodeId } } - private val orgnummerbehov = { orgnummer: String -> { behov: Behov -> behov.orgnummer == orgnummer } } + private val vedtaksperiodebehov = + { vedtaksperiodeId: UUID -> { behov: Behov -> behov.vedtaksperiodeId == vedtaksperiodeId } } + private val orgnummerbehov = + { orgnummer: String -> { behov: Behov -> behov.orgnummer == orgnummer } } } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Bel\303\270pstidslinjeDsl.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Bel\303\270pstidslinjeDsl.kt" index 011a55c3ec..be9d9526d7 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Bel\303\270pstidslinjeDsl.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Bel\303\270pstidslinjeDsl.kt" @@ -30,7 +30,11 @@ object BeløpstidslinjeDsl { infix fun Kilde.oppgir(inntekt: Inntekt) = this to inntekt infix fun Pair.fra(fra: LocalDate) = Triple(first, second, fra) infix fun Pair.kun(kun: LocalDate) = fra(kun) til kun - infix fun Pair.hele(periode: Periode) = fra(periode.start) til periode.endInclusive - infix fun Triple.til(til: LocalDate) = Beløpstidslinje((third til til).map { Beløpsdag(it, second, first) }) + infix fun Pair.hele(periode: Periode) = + fra(periode.start) til periode.endInclusive + + infix fun Triple.til(til: LocalDate) = + Beløpstidslinje((third til til).map { Beløpsdag(it, second, first) }) + infix fun Beløpstidslinje.og(other: Beløpstidslinje) = this + other -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/DeferredLog.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/DeferredLog.kt index 007fabfe66..2e88498b98 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/DeferredLog.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/DeferredLog.kt @@ -3,14 +3,19 @@ package no.nav.helse.dsl import org.junit.jupiter.api.extension.ExtensionContext import org.junit.jupiter.api.extension.TestWatcher -class DeferredLog: TestWatcher { +class DeferredLog : TestWatcher { private val meldinger: MutableList = mutableListOf() - fun log(melding: String) { meldinger.add(melding) } - fun dumpLog() { meldinger.forEach { println(it) } } + fun log(melding: String) { + meldinger.add(melding) + } + + fun dumpLog() { + meldinger.forEach { println(it) } + } } -class DeferredLogging: TestWatcher { +class DeferredLogging : TestWatcher { override fun testFailed(context: ExtensionContext, cause: Throwable?) { (context.testInstance.get() as AbstractDslTest).dumpLog() } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/PersonHendelsefabrikk.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/PersonHendelsefabrikk.kt index b2be740949..16baad6259 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/PersonHendelsefabrikk.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/PersonHendelsefabrikk.kt @@ -33,13 +33,18 @@ internal class PersonHendelsefabrikk() { meldingsreferanseId = UUID.randomUUID(), dødsdato = dødsdato ) - internal fun lagOverstyrArbeidsforhold(skjæringstidspunkt: LocalDate, vararg overstyrteArbeidsforhold: OverstyrArbeidsforhold.ArbeidsforholdOverstyrt) = + + internal fun lagOverstyrArbeidsforhold( + skjæringstidspunkt: LocalDate, + vararg overstyrteArbeidsforhold: OverstyrArbeidsforhold.ArbeidsforholdOverstyrt + ) = OverstyrArbeidsforhold( meldingsreferanseId = UUID.randomUUID(), skjæringstidspunkt = skjæringstidspunkt, overstyrteArbeidsforhold = overstyrteArbeidsforhold.toList(), opprettet = LocalDateTime.now() ) + internal fun lagPåminnelse() = PersonPåminnelse( meldingsreferanseId = UUID.randomUUID() @@ -54,16 +59,32 @@ internal class PersonHendelsefabrikk() { SkjønnsmessigFastsettelse( meldingsreferanseId = meldingsreferanseId, skjæringstidspunkt = skjæringstidspunkt, - arbeidsgiveropplysninger = arbeidsgiveropplysninger.medSkjønnsmessigFastsattInntekt(meldingsreferanseId, skjæringstidspunkt), + arbeidsgiveropplysninger = arbeidsgiveropplysninger.medSkjønnsmessigFastsattInntekt( + meldingsreferanseId, + skjæringstidspunkt + ), opprettet = tidsstempel ) - internal fun lagOverstyrArbeidsgiveropplysninger(skjæringstidspunkt: LocalDate, arbeidsgiveropplysninger: List, meldingsreferanseId: UUID, tidsstempel: LocalDateTime) = + internal fun lagOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt: LocalDate, + arbeidsgiveropplysninger: List, + meldingsreferanseId: UUID, + tidsstempel: LocalDateTime + ) = OverstyrArbeidsgiveropplysninger( meldingsreferanseId = meldingsreferanseId, skjæringstidspunkt = skjæringstidspunkt, - arbeidsgiveropplysninger = arbeidsgiveropplysninger.medSaksbehandlerinntekt(meldingsreferanseId, skjæringstidspunkt, tidsstempel), - refusjonstidslinjer = arbeidsgiveropplysninger.refusjonstidslinjer(skjæringstidspunkt, meldingsreferanseId, tidsstempel), + arbeidsgiveropplysninger = arbeidsgiveropplysninger.medSaksbehandlerinntekt( + meldingsreferanseId, + skjæringstidspunkt, + tidsstempel + ), + refusjonstidslinjer = arbeidsgiveropplysninger.refusjonstidslinjer( + skjæringstidspunkt, + meldingsreferanseId, + tidsstempel + ), opprettet = tidsstempel ) @@ -86,27 +107,65 @@ internal class OverstyrtArbeidsgiveropplysning( private val refusjonsopplysninger: List>? = null, private val gjelder: Periode? = null ) { - private fun refusjonsopplysninger(førsteDag: LocalDate) = refusjonsopplysninger ?: listOf(Triple(førsteDag, null, inntekt)) + private fun refusjonsopplysninger(førsteDag: LocalDate) = + refusjonsopplysninger ?: listOf(Triple(førsteDag, null, inntekt)) + internal companion object { - private fun List.tilArbeidsgiverInntektsopplysning(meldingsreferanseId: UUID, skjæringstidspunkt: LocalDate, tidsstempel: LocalDateTime, inntektsopplysning: (overstyrtArbeidsgiveropplysning: OverstyrtArbeidsgiveropplysning) -> Inntektsopplysning) = + private fun List.tilArbeidsgiverInntektsopplysning( + meldingsreferanseId: UUID, + skjæringstidspunkt: LocalDate, + tidsstempel: LocalDateTime, + inntektsopplysning: (overstyrtArbeidsgiveropplysning: OverstyrtArbeidsgiveropplysning) -> Inntektsopplysning + ) = map { val gjelder = it.gjelder ?: (skjæringstidspunkt til LocalDate.MAX) ArbeidsgiverInntektsopplysning( orgnummer = it.orgnummer, gjelder = gjelder, inntektsopplysning = inntektsopplysning(it), - refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { it.refusjonsopplysninger(gjelder.start).forEach { (fom, tom, refusjonsbeløp) -> leggTil(Refusjonsopplysning(meldingsreferanseId, fom, tom, refusjonsbeløp, SAKSBEHANDLER, tidsstempel), tidsstempel) } }.build() + refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { + it.refusjonsopplysninger( + gjelder.start + ).forEach { (fom, tom, refusjonsbeløp) -> + leggTil( + Refusjonsopplysning( + meldingsreferanseId, + fom, + tom, + refusjonsbeløp, + SAKSBEHANDLER, + tidsstempel + ), tidsstempel + ) + } + }.build() ) } + internal fun List.medSaksbehandlerinntekt( meldingsreferanseId: UUID, skjæringstidspunkt: LocalDate, tidsstempel: LocalDateTime - ) = tilArbeidsgiverInntektsopplysning(meldingsreferanseId, skjæringstidspunkt, tidsstempel) { - checkNotNull(it.forklaring) { "Forklaring må settes på Saksbehandlerinntekt"} - Saksbehandler(skjæringstidspunkt, meldingsreferanseId, it.inntekt, it.forklaring, it.subsumsjon, LocalDateTime.now()) + ) = tilArbeidsgiverInntektsopplysning( + meldingsreferanseId, + skjæringstidspunkt, + tidsstempel + ) { + checkNotNull(it.forklaring) { "Forklaring må settes på Saksbehandlerinntekt" } + Saksbehandler( + skjæringstidspunkt, + meldingsreferanseId, + it.inntekt, + it.forklaring, + it.subsumsjon, + LocalDateTime.now() + ) } - internal fun List.medSkjønnsmessigFastsattInntekt(meldingsreferanseId: UUID, skjæringstidspunkt: LocalDate): List { + + internal fun List.medSkjønnsmessigFastsattInntekt( + meldingsreferanseId: UUID, + skjæringstidspunkt: LocalDate + ): List { forEach { check(it.refusjonsopplysninger == null) { "Skal ikke sette refusjonspplysnger på Skjønnsmessig fastsatt inntekt" } check(it.forklaring == null) { "Skal ikke sette forklaring på Skjønnsmessig fastsatt inntekt" } @@ -117,18 +176,33 @@ internal class OverstyrtArbeidsgiveropplysning( ArbeidsgiverInntektsopplysning( orgnummer = it.orgnummer, gjelder = gjelder, - inntektsopplysning = SkjønnsmessigFastsatt(skjæringstidspunkt, meldingsreferanseId, it.inntekt, LocalDateTime.now()), + inntektsopplysning = SkjønnsmessigFastsatt( + skjæringstidspunkt, + meldingsreferanseId, + it.inntekt, + LocalDateTime.now() + ), refusjonsopplysninger = Refusjonsopplysning.Refusjonsopplysninger() ) } } - internal fun List.refusjonstidslinjer(skjæringstidspunkt: LocalDate, meldingsreferanseId: UUID, opprettet: LocalDateTime) = this.associateBy { it.orgnummer }.mapValues { (_, opplysning) -> + internal fun List.refusjonstidslinjer( + skjæringstidspunkt: LocalDate, + meldingsreferanseId: UUID, + opprettet: LocalDateTime + ) = this.associateBy { it.orgnummer }.mapValues { (_, opplysning) -> val defaultRefusjonFom = opplysning.gjelder?.start ?: skjæringstidspunkt - val strekkbar = opplysning.refusjonsopplysninger(defaultRefusjonFom).any { (_,tom) -> tom == null } - opplysning.refusjonsopplysninger(defaultRefusjonFom).fold(Beløpstidslinje()) { acc, (fom, tom, beløp) -> - acc + Beløpstidslinje.fra(fom til (tom ?: fom), beløp, Kilde(meldingsreferanseId, SAKSBEHANDLER, opprettet)) - } to strekkbar + val strekkbar = + opplysning.refusjonsopplysninger(defaultRefusjonFom).any { (_, tom) -> tom == null } + opplysning.refusjonsopplysninger(defaultRefusjonFom) + .fold(Beløpstidslinje()) { acc, (fom, tom, beløp) -> + acc + Beløpstidslinje.fra( + fom til (tom ?: fom), + beløp, + Kilde(meldingsreferanseId, SAKSBEHANDLER, opprettet) + ) + } to strekkbar } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestArbeidsgiverAssertions.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestArbeidsgiverAssertions.kt index 0b6e41f6ed..6b7b947f57 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestArbeidsgiverAssertions.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestArbeidsgiverAssertions.kt @@ -20,8 +20,16 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue -internal class TestArbeidsgiverAssertions(private val observatør: TestObservatør, private val inspektør: TestArbeidsgiverInspektør, private val personInspektør: PersonInspektør) { - internal fun assertSisteTilstand(vedtaksperiodeId: UUID, tilstand: TilstandType, errortekst: (() -> String)? = null) { +internal class TestArbeidsgiverAssertions( + private val observatør: TestObservatør, + private val inspektør: TestArbeidsgiverInspektør, + private val personInspektør: PersonInspektør +) { + internal fun assertSisteTilstand( + vedtaksperiodeId: UUID, + tilstand: TilstandType, + errortekst: (() -> String)? = null + ) { assertEquals(tilstand, observatør.tilstandsendringer[vedtaksperiodeId]?.last(), errortekst) } @@ -40,8 +48,12 @@ internal class TestArbeidsgiverAssertions(private val observatør: TestObservat internal fun assertHarHendelseIder(vedtaksperiodeId: UUID, vararg hendelseIder: UUID) { assertTrue(inspektør.hendelseIder(vedtaksperiodeId).containsAll(hendelseIder.toSet())) } + internal fun assertHarIkkeHendelseIder(vedtaksperiodeId: UUID, vararg hendelseIder: UUID) { - assertEquals(emptySet(), inspektør.hendelseIder(vedtaksperiodeId).intersect(hendelseIder.toSet())) + assertEquals( + emptySet(), + inspektør.hendelseIder(vedtaksperiodeId).intersect(hendelseIder.toSet()) + ) } internal fun assertUtbetalingsbeløp( @@ -51,33 +63,57 @@ internal class TestArbeidsgiverAssertions(private val observatør: TestObservat forventetPersonbeløp: Int = 0, subset: Periode? = null ) { - val utbetalingstidslinje = inspektør.utbetalingstidslinjer(vedtaksperiodeId).let { subset?.let(it::subset) ?: it } + val utbetalingstidslinje = + inspektør.utbetalingstidslinjer(vedtaksperiodeId).let { subset?.let(it::subset) ?: it } utbetalingstidslinje.filterNot { it.dato.erHelg() }.forEach { utbetalingsdag -> - assertEquals(forventetArbeidsgiverbeløp.daglig, utbetalingsdag.økonomi.inspektør.arbeidsgiverbeløp) { "feil arbeidsgiverbeløp for dag ${utbetalingsdag.dato} " } - assertEquals(forventetArbeidsgiverRefusjonsbeløp.daglig, utbetalingsdag.økonomi.inspektør.arbeidsgiverRefusjonsbeløp.rundTilDaglig()) + assertEquals( + forventetArbeidsgiverbeløp.daglig, + utbetalingsdag.økonomi.inspektør.arbeidsgiverbeløp + ) { "feil arbeidsgiverbeløp for dag ${utbetalingsdag.dato} " } + assertEquals( + forventetArbeidsgiverRefusjonsbeløp.daglig, + utbetalingsdag.økonomi.inspektør.arbeidsgiverRefusjonsbeløp.rundTilDaglig() + ) assertEquals(forventetPersonbeløp.daglig, utbetalingsdag.økonomi.inspektør.personbeløp) } } internal fun assertInfo(forventet: String, vararg filtre: AktivitetsloggFilter) { val info = collectInfo(*filtre) - assertTrue(info.any { it == forventet }, "fant ikke ett tilfelle av info. Info:\n${info.joinToString("\n")}") + assertTrue( + info.any { it == forventet }, + "fant ikke ett tilfelle av info. Info:\n${info.joinToString("\n")}" + ) } internal fun assertIngenInfo(forventet: String, vararg filtre: AktivitetsloggFilter) { val info = collectInfo(*filtre) - assertEquals(0, info.count { it == forventet }, "fant uventet info. Info:\n${info.joinToString("\n")}") + assertEquals( + 0, + info.count { it == forventet }, + "fant uventet info. Info:\n${info.joinToString("\n")}" + ) } - internal fun assertIngenInfoSomInneholder(forventet: String, vararg filtre: AktivitetsloggFilter) { + internal fun assertIngenInfoSomInneholder( + forventet: String, + vararg filtre: AktivitetsloggFilter + ) { val info = collectInfo(*filtre) - assertEquals(0, info.count { it.contains(forventet) }, "fant uventet info. Info:\n${info.joinToString("\n")}") + assertEquals( + 0, + info.count { it.contains(forventet) }, + "fant uventet info. Info:\n${info.joinToString("\n")}" + ) } internal fun assertIngenVarsler(vararg filtre: AktivitetsloggFilter) { val warnings = collectVarsler(*filtre) - assertTrue(warnings.isEmpty(), "Forventet ingen warnings. Warnings:\n${warnings.joinToString("\n")}") + assertTrue( + warnings.isEmpty(), + "Forventet ingen warnings. Warnings:\n${warnings.joinToString("\n")}" + ) } internal fun assertVarsler(vararg filtre: AktivitetsloggFilter) { @@ -86,44 +122,81 @@ internal class TestArbeidsgiverAssertions(private val observatør: TestObservat internal fun assertVarsel(warning: String, vararg filtre: AktivitetsloggFilter) { val warnings = collectVarsler(*filtre) - assertTrue(warnings.contains(warning), "\nFant ikke forventet warning:\n\t$warning\nWarnings funnet:\n\t${warnings.joinToString("\n\t")}\n") + assertTrue( + warnings.contains(warning), + "\nFant ikke forventet warning:\n\t$warning\nWarnings funnet:\n\t${ + warnings.joinToString("\n\t") + }\n" + ) } internal fun assertVarsel(kode: Varselkode, vararg filtre: AktivitetsloggFilter) { val varselkoder = collectVarselkoder(*filtre) - assertTrue(varselkoder.contains(kode), "\nFant ikke forventet varselkode:\n\t$kode\nVarselkoder funnet:\n\t${varselkoder.joinToString("\n\t")}\n") + assertTrue( + varselkoder.contains(kode), + "\nFant ikke forventet varselkode:\n\t$kode\nVarselkoder funnet:\n\t${ + varselkoder.joinToString("\n\t") + }\n" + ) } internal fun assertIngenVarsel(warning: String, vararg filtre: AktivitetsloggFilter) { val warnings = collectVarsler(*filtre) - assertFalse(warnings.contains(warning), "\nFant et varsel vi ikke forventet:\n\t$warning\nWarnings funnet:\n\t${warnings.joinToString("\n\t")}\n") + assertFalse( + warnings.contains(warning), + "\nFant et varsel vi ikke forventet:\n\t$warning\nWarnings funnet:\n\t${ + warnings.joinToString("\n\t") + }\n" + ) } + internal fun assertIngenVarsel(warning: Varselkode, vararg filtre: AktivitetsloggFilter) { val varselkoder = collectVarselkoder(*filtre) - assertTrue(warning !in varselkoder, "\nFant et varsel vi ikke forventet:\n\t$warning\nWarnings funnet:\n\t${varselkoder.joinToString("\n\t")}\n") + assertTrue( + warning !in varselkoder, + "\nFant et varsel vi ikke forventet:\n\t$warning\nWarnings funnet:\n\t${ + varselkoder.joinToString("\n\t") + }\n" + ) } internal fun assertFunksjonellFeil(error: String, vararg filtre: AktivitetsloggFilter) { val errors = collectFunksjonelleFeil(*filtre) - assertTrue(errors.contains(error), "fant ikke forventet error. Errors:\n${errors.joinToString("\n")}") + assertTrue( + errors.contains(error), + "fant ikke forventet error. Errors:\n${errors.joinToString("\n")}" + ) } + internal fun assertIngenBehov(vedtaksperiode: UUID, behovtype: Aktivitet.Behov.Behovtype) { - assertTrue(personInspektør.aktivitetslogg.etterspurteBehov(vedtaksperiode).none { it.type == behovtype } ) + assertTrue( + personInspektør.aktivitetslogg.etterspurteBehov(vedtaksperiode) + .none { it.type == behovtype }) } + internal fun assertBehov(vedtaksperiode: UUID, behovtype: Aktivitet.Behov.Behovtype) { - assertTrue(personInspektør.aktivitetslogg.etterspurteBehov(vedtaksperiode).any { it.type == behovtype } ) + assertTrue( + personInspektør.aktivitetslogg.etterspurteBehov(vedtaksperiode) + .any { it.type == behovtype }) } - private fun funksjonelleFeilFørOgEtter(block: () -> Unit): Pair, Map>{ - val funksjonelleFeilFør = collectFunksjonelleFeil().groupBy { it }.mapValues { it.value.size } + private fun funksjonelleFeilFørOgEtter(block: () -> Unit): Pair, Map> { + val funksjonelleFeilFør = + collectFunksjonelleFeil().groupBy { it }.mapValues { it.value.size } block() - val funksjonelleFeilEtter = collectFunksjonelleFeil().groupBy { it }.mapValues { it.value.size } + val funksjonelleFeilEtter = + collectFunksjonelleFeil().groupBy { it }.mapValues { it.value.size } return funksjonelleFeilFør to funksjonelleFeilEtter } + internal fun ingenNyeFunksjonelleFeil(block: () -> Unit) { val (før, etter) = funksjonelleFeilFørOgEtter(block) - assertEquals(før, etter) { "Det er tilkommet nye funksjonelle feil, eller fler tilfeller av funksjonelle feil!" } + assertEquals( + før, + etter + ) { "Det er tilkommet nye funksjonelle feil, eller fler tilfeller av funksjonelle feil!" } } + internal fun nyeFunksjonelleFeil(block: () -> Unit): Boolean { val (før, etter) = funksjonelleFeilFørOgEtter(block) return før != etter @@ -137,12 +210,18 @@ internal class TestArbeidsgiverAssertions(private val observatør: TestObservat internal fun assertIngenFunksjonelleFeil(vararg filtre: AktivitetsloggFilter) { val errors = collectFunksjonelleFeil(*filtre) - assertTrue(errors.isEmpty(), "forventet ingen errors. Errors: \n${errors.joinToString("\n")}") + assertTrue( + errors.isEmpty(), + "forventet ingen errors. Errors: \n${errors.joinToString("\n")}" + ) } internal fun assertLogiskFeil(severe: String, vararg filtre: AktivitetsloggFilter) { val severes = collectLogiskeFeil(*filtre) - assertTrue(severes.contains(severe), "fant ikke forventet severe. Severes:\n${severes.joinToString("\n")}") + assertTrue( + severes.contains(severe), + "fant ikke forventet severe. Severes:\n${severes.joinToString("\n")}" + ) } private fun collectInfo(vararg filtre: AktivitetsloggFilter): List { @@ -174,4 +253,4 @@ internal class TestArbeidsgiverAssertions(private val observatør: TestObservat .filter { filtre.all { filter -> it.kontekster.any { filter.filtrer(it) } } } .map { it.melding } } -} \ No newline at end of file +} 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 017cc475b5..36901496d7 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 @@ -75,11 +75,15 @@ internal class TestPerson( internal companion object { private val fnrformatter = DateTimeFormatter.ofPattern("ddMMyy") internal val UNG_PERSON_FDATO_2018 = 12.februar(1992) - internal val UNG_PERSON_FNR_2018: Personidentifikator = Personidentifikator("${UNG_PERSON_FDATO_2018.format(fnrformatter)}40045") + internal val UNG_PERSON_FNR_2018: Personidentifikator = + Personidentifikator("${UNG_PERSON_FDATO_2018.format(fnrformatter)}40045") internal val INNTEKT = 31000.00.månedlig - internal operator fun String.invoke(testPerson: TestPerson, testblokk: TestArbeidsgiver.() -> R) = + internal operator fun String.invoke( + testPerson: TestPerson, + testblokk: TestArbeidsgiver.() -> R + ) = testPerson.arbeidsgiver(this, testblokk) } @@ -97,6 +101,7 @@ internal class TestPerson( init { UgyldigeSituasjonerObservatør(person) } + private val arbeidsgivere = mutableMapOf() internal fun inspiser(inspektør: (Person) -> INSPEKTØR) = inspektør(person) @@ -113,7 +118,9 @@ internal class TestPerson( private fun T.håndter(håndter: Person.(T, IAktivitetslogg) -> Unit): T { forrigeAktivitetslogg = Aktivitetslogg() - try { person.håndter(this, forrigeAktivitetslogg) } finally { + try { + person.håndter(this, forrigeAktivitetslogg) + } finally { behovsamler.registrerBehov(forrigeAktivitetslogg) } return this @@ -123,18 +130,44 @@ internal class TestPerson( behovsamler.bekreftBehovOppfylt() } - internal fun håndterOverstyrArbeidsforhold(skjæringstidspunkt: LocalDate, vararg overstyrteArbeidsforhold: ArbeidsforholdOverstyrt) { - personHendelsefabrikk.lagOverstyrArbeidsforhold(skjæringstidspunkt, *overstyrteArbeidsforhold) + internal fun håndterOverstyrArbeidsforhold( + skjæringstidspunkt: LocalDate, + vararg overstyrteArbeidsforhold: ArbeidsforholdOverstyrt + ) { + personHendelsefabrikk.lagOverstyrArbeidsforhold( + skjæringstidspunkt, + *overstyrteArbeidsforhold + ) .håndter(Person::håndter) } - internal fun håndterSkjønnsmessigFastsettelse(skjæringstidspunkt: LocalDate, arbeidsgiveropplysninger: List, meldingsreferanseId: UUID, tidsstempel: LocalDateTime) { - personHendelsefabrikk.lagSkjønnsmessigFastsettelse(skjæringstidspunkt, arbeidsgiveropplysninger, meldingsreferanseId, tidsstempel) + internal fun håndterSkjønnsmessigFastsettelse( + skjæringstidspunkt: LocalDate, + arbeidsgiveropplysninger: List, + meldingsreferanseId: UUID, + tidsstempel: LocalDateTime + ) { + personHendelsefabrikk.lagSkjønnsmessigFastsettelse( + skjæringstidspunkt, + arbeidsgiveropplysninger, + meldingsreferanseId, + tidsstempel + ) .håndter(Person::håndter) } - internal fun håndterOverstyrArbeidsgiveropplysninger(skjæringstidspunkt: LocalDate, arbeidsgiveropplysninger: List, meldingsreferanseId: UUID, tidsstempel: LocalDateTime = LocalDateTime.now()) { - personHendelsefabrikk.lagOverstyrArbeidsgiveropplysninger(skjæringstidspunkt, arbeidsgiveropplysninger, meldingsreferanseId, tidsstempel) + internal fun håndterOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt: LocalDate, + arbeidsgiveropplysninger: List, + meldingsreferanseId: UUID, + tidsstempel: LocalDateTime = LocalDateTime.now() + ) { + personHendelsefabrikk.lagOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt, + arbeidsgiveropplysninger, + meldingsreferanseId, + tidsstempel + ) .håndter(Person::håndter) } @@ -155,9 +188,14 @@ internal class TestPerson( internal val inspektør get() = TestArbeidsgiverInspektør(person, orgnummer) - internal val Int.vedtaksperiode get() = vedtaksperiodesamler.vedtaksperiodeId(orgnummer, this - 1) + internal val Int.vedtaksperiode + get() = vedtaksperiodesamler.vedtaksperiodeId( + orgnummer, + this - 1 + ) - internal fun håndterSykmelding(periode: Periode) = håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive)) + internal fun håndterSykmelding(periode: Periode) = + håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive)) internal fun håndterSykmelding( vararg sykmeldingsperiode: Sykmeldingsperiode, @@ -165,9 +203,12 @@ internal class TestPerson( mottatt: LocalDateTime? = null ) = arbeidsgiverHendelsefabrikk.lagSykmelding(*sykmeldingsperiode).håndter(Person::håndter) - internal fun håndterAvbruttSøknad(sykmeldingsperiode: Periode) = arbeidsgiverHendelsefabrikk.lagAvbruttSøknad(sykmeldingsperiode).håndter(Person::håndter) + internal fun håndterAvbruttSøknad(sykmeldingsperiode: Periode) = + arbeidsgiverHendelsefabrikk.lagAvbruttSøknad(sykmeldingsperiode) + .håndter(Person::håndter) - internal fun håndterSøknad(periode: Periode) = håndterSøknad(Sykdom(periode.start, periode.endInclusive, 100.prosent)) + internal fun håndterSøknad(periode: Periode) = + håndterSøknad(Sykdom(periode.start, periode.endInclusive, 100.prosent)) internal fun håndterSøknad( vararg perioder: Søknad.Søknadsperiode, @@ -203,8 +244,9 @@ internal class TestPerson( tilkomneInntekter = tilkomneInntekter ).håndter(Person::håndter) }?.also { - if (behovsamler.harBehov(it, Sykepengehistorikk)){ - arbeidsgiverHendelsefabrikk.lagUtbetalingshistorikk(it).håndter(Person::håndter) + if (behovsamler.harBehov(it, Sykepengehistorikk)) { + arbeidsgiverHendelsefabrikk.lagUtbetalingshistorikk(it) + .håndter(Person::håndter) } } }) { vedtaksperioderSomHarBedtOmReplay -> @@ -217,7 +259,11 @@ internal class TestPerson( arbeidsgiverperioder: List, beregnetInntekt: Inntekt = INNTEKT, førsteFraværsdag: LocalDate = arbeidsgiverperioder.maxOf { it.start }, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), harOpphørAvNaturalytelser: Boolean = false, begrunnelseForReduksjonEllerIkkeUtbetalt: String? = null, id: UUID = UUID.randomUUID(), @@ -241,7 +287,11 @@ internal class TestPerson( arbeidsgiverperioder: List, beregnetInntekt: Inntekt = INNTEKT, vedtaksperiodeId: UUID = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.id, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), harOpphørAvNaturalytelser: Boolean = false, begrunnelseForReduksjonEllerIkkeUtbetalt: String? = null, id: UUID = UUID.randomUUID(), @@ -264,15 +314,20 @@ internal class TestPerson( } internal fun håndterForkastSykmeldingsperioder(periode: Periode) = - arbeidsgiverHendelsefabrikk.lagHåndterForkastSykmeldingsperioder(periode).håndter(Person::håndter) + arbeidsgiverHendelsefabrikk.lagHåndterForkastSykmeldingsperioder(periode) + .håndter(Person::håndter) internal fun håndterAnmodningOmForkasting(vedtaksperiodeId: UUID) = - arbeidsgiverHendelsefabrikk.lagAnmodningOmForkasting(vedtaksperiodeId).håndter(Person::håndter) + arbeidsgiverHendelsefabrikk.lagAnmodningOmForkasting(vedtaksperiodeId) + .håndter(Person::håndter) private fun håndterInntektsmeldingReplay(forespørsel: Forespørsel) { val håndterteInntektsmeldinger = behovsamler.håndterteInntektsmeldinger() behovsamler.bekreftOgKvitterReplay(forespørsel.vedtaksperiodeId) - arbeidsgiverHendelsefabrikk.lagInntektsmeldingReplay(forespørsel, håndterteInntektsmeldinger) + arbeidsgiverHendelsefabrikk.lagInntektsmeldingReplay( + forespørsel, + håndterteInntektsmeldinger + ) .håndter(Person::håndter) } @@ -285,14 +340,34 @@ internal class TestPerson( arbeidsforhold: List? = null, orgnummer: String = "aa" ) { - behovsamler.bekreftBehov(vedtaksperiodeId, InntekterForSykepengegrunnlag, ArbeidsforholdV2, Medlemskap) + behovsamler.bekreftBehov( + vedtaksperiodeId, + InntekterForSykepengegrunnlag, + ArbeidsforholdV2, + Medlemskap + ) arbeidsgiverHendelsefabrikk.lagVilkårsgrunnlag( vedtaksperiodeId, inspektør.skjæringstidspunkt(vedtaksperiodeId), medlemskapstatus, - arbeidsforhold ?: arbeidsgivere.map { (orgnr, _) -> Vilkårsgrunnlag.Arbeidsforhold(orgnr, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) }, - inntektsvurderingForSykepengegrunnlag ?: lagStandardSykepengegrunnlag(this.orgnummer, inntekt, inspektør.skjæringstidspunkt(vedtaksperiodeId)), - inntekterForOpptjeningsvurdering ?: lagStandardInntekterForOpptjeningsvurdering(this.orgnummer, inntekt, inspektør.skjæringstidspunkt(vedtaksperiodeId)) + arbeidsforhold ?: arbeidsgivere.map { (orgnr, _) -> + Vilkårsgrunnlag.Arbeidsforhold( + orgnr, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) + }, + inntektsvurderingForSykepengegrunnlag ?: lagStandardSykepengegrunnlag( + this.orgnummer, + inntekt, + inspektør.skjæringstidspunkt(vedtaksperiodeId) + ), + inntekterForOpptjeningsvurdering ?: lagStandardInntekterForOpptjeningsvurdering( + this.orgnummer, + inntekt, + inspektør.skjæringstidspunkt(vedtaksperiodeId) + ) ).håndter(Person::håndter) } @@ -308,8 +383,27 @@ internal class TestPerson( dagpenger: List = emptyList(), orgnummer: String = "aa" ) { - behovsamler.bekreftBehov(vedtaksperiodeId, Dagpenger, Arbeidsavklaringspenger, Institusjonsopphold, Opplæringspenger, Pleiepenger, Omsorgspenger, Foreldrepenger) - arbeidsgiverHendelsefabrikk.lagYtelser(vedtaksperiodeId, foreldrepenger, svangerskapspenger, pleiepenger, omsorgspenger, opplæringspenger, institusjonsoppholdsperioder, arbeidsavklaringspenger, dagpenger) + behovsamler.bekreftBehov( + vedtaksperiodeId, + Dagpenger, + Arbeidsavklaringspenger, + Institusjonsopphold, + Opplæringspenger, + Pleiepenger, + Omsorgspenger, + Foreldrepenger + ) + arbeidsgiverHendelsefabrikk.lagYtelser( + vedtaksperiodeId, + foreldrepenger, + svangerskapspenger, + pleiepenger, + omsorgspenger, + opplæringspenger, + institusjonsoppholdsperioder, + arbeidsavklaringspenger, + dagpenger + ) .håndter(Person::håndter) } @@ -320,15 +414,33 @@ internal class TestPerson( val fagområde = detaljer.getValue("fagområde") as String val utbetalingId = UUID.fromString(kontekst.getValue("utbetalingId")) - arbeidsgiverHendelsefabrikk.lagSimulering(vedtaksperiodeId, utbetalingId, fagsystemId, fagområde, simuleringOK, standardSimuleringsresultat(orgnummer)).håndter(Person::håndter) + arbeidsgiverHendelsefabrikk.lagSimulering( + vedtaksperiodeId, + utbetalingId, + fagsystemId, + fagområde, + simuleringOK, + standardSimuleringsresultat(orgnummer) + ).håndter(Person::håndter) } } - internal fun håndterUtbetalingsgodkjenning(vedtaksperiodeId: UUID, godkjent: Boolean = true, automatiskBehandling: Boolean = true, godkjenttidspunkt: LocalDateTime = LocalDateTime.now()) { + internal fun håndterUtbetalingsgodkjenning( + vedtaksperiodeId: UUID, + godkjent: Boolean = true, + automatiskBehandling: Boolean = true, + godkjenttidspunkt: LocalDateTime = LocalDateTime.now() + ) { behovsamler.bekreftBehov(vedtaksperiodeId, Godkjenning) val (_, kontekst) = behovsamler.detaljerFor(vedtaksperiodeId, Godkjenning).single() val utbetalingId = UUID.fromString(kontekst.getValue("utbetalingId")) - arbeidsgiverHendelsefabrikk.lagUtbetalingsgodkjenning(vedtaksperiodeId, godkjent, automatiskBehandling, utbetalingId, godkjenttidspunkt) + arbeidsgiverHendelsefabrikk.lagUtbetalingsgodkjenning( + vedtaksperiodeId, + godkjent, + automatiskBehandling, + utbetalingId, + godkjenttidspunkt + ) .håndter(Person::håndter) } @@ -337,12 +449,31 @@ internal class TestPerson( .håndter(Person::håndter) } - internal fun håndterVedtakFattet(vedtaksperiodeId: UUID, utbetalingId: UUID = inspektør.sisteUtbetalingId { vedtaksperiodeId }, automatisert: Boolean = true, vedtakFattetTidspunkt: LocalDateTime = LocalDateTime.now()) { - arbeidsgiverHendelsefabrikk.lagVedtakFattet(vedtaksperiodeId, utbetalingId, automatisert, vedtakFattetTidspunkt) + internal fun håndterVedtakFattet( + vedtaksperiodeId: UUID, + utbetalingId: UUID = inspektør.sisteUtbetalingId { vedtaksperiodeId }, + automatisert: Boolean = true, + vedtakFattetTidspunkt: LocalDateTime = LocalDateTime.now() + ) { + arbeidsgiverHendelsefabrikk.lagVedtakFattet( + vedtaksperiodeId, + utbetalingId, + automatisert, + vedtakFattetTidspunkt + ) .håndter(Person::håndter) } - internal fun håndterKanIkkeBehandlesHer(vedtaksperiodeId: UUID, utbetalingId: UUID = inspektør.sisteUtbetalingId { vedtaksperiodeId }, automatisert: Boolean = true) { - arbeidsgiverHendelsefabrikk.lagKanIkkeBehandlesHer(vedtaksperiodeId, utbetalingId, automatisert) + + internal fun håndterKanIkkeBehandlesHer( + vedtaksperiodeId: UUID, + utbetalingId: UUID = inspektør.sisteUtbetalingId { vedtaksperiodeId }, + automatisert: Boolean = true + ) { + arbeidsgiverHendelsefabrikk.lagKanIkkeBehandlesHer( + vedtaksperiodeId, + utbetalingId, + automatisert + ) .håndter(Person::håndter) } @@ -371,7 +502,12 @@ internal class TestPerson( skjæringstidspunkt: LocalDate, inntekter: List ): UUID { - val inntektFraOrdningen = arbeidsgiverHendelsefabrikk.lagSykepengegrunnlagForArbeidsgiver(vedtaksperiodeId, skjæringstidspunkt, inntekter) + val inntektFraOrdningen = + arbeidsgiverHendelsefabrikk.lagSykepengegrunnlagForArbeidsgiver( + vedtaksperiodeId, + skjæringstidspunkt, + inntekter + ) inntektFraOrdningen.håndter(Person::håndter) return inntektFraOrdningen.metadata.meldingsreferanseId } @@ -383,7 +519,13 @@ internal class TestPerson( nåtidspunkt: LocalDateTime = LocalDateTime.now(), reberegning: Boolean = false ) { - arbeidsgiverHendelsefabrikk.lagPåminnelse(vedtaksperiodeId, tilstand, tilstandsendringstidspunkt, nåtidspunkt, reberegning = reberegning) + arbeidsgiverHendelsefabrikk.lagPåminnelse( + vedtaksperiodeId, + tilstand, + tilstandsendringstidspunkt, + nåtidspunkt, + reberegning = reberegning + ) .håndter(Person::håndter) } @@ -397,8 +539,14 @@ internal class TestPerson( .håndter(Person::håndter) } - internal fun håndterOverstyrArbeidsforhold(skjæringstidspunkt: LocalDate, vararg overstyrteArbeidsforhold: ArbeidsforholdOverstyrt) { - personHendelsefabrikk.lagOverstyrArbeidsforhold(skjæringstidspunkt, *overstyrteArbeidsforhold) + internal fun håndterOverstyrArbeidsforhold( + skjæringstidspunkt: LocalDate, + vararg overstyrteArbeidsforhold: ArbeidsforholdOverstyrt + ) { + personHendelsefabrikk.lagOverstyrArbeidsforhold( + skjæringstidspunkt, + *overstyrteArbeidsforhold + ) .håndter(Person::håndter) } @@ -412,7 +560,12 @@ internal class TestPerson( hendelseId: UUID = UUID.randomUUID(), organisasjonsnummer: String = orgnummer, ) = - arbeidsgiverHendelsefabrikk.lagOverstyrInntekt(hendelseId, skjæringstidspunkt, inntekt, organisasjonsnummer) + arbeidsgiverHendelsefabrikk.lagOverstyrInntekt( + hendelseId, + skjæringstidspunkt, + inntekt, + organisasjonsnummer + ) .håndter(Person::håndter) internal fun håndterOverstyrArbeidsgiveropplysninger( @@ -421,7 +574,12 @@ internal class TestPerson( hendelseId: UUID = UUID.randomUUID(), tidsstempel: LocalDateTime = LocalDateTime.now() ) = - personHendelsefabrikk.lagOverstyrArbeidsgiveropplysninger(skjæringstidspunkt, overstyringer, hendelseId, tidsstempel) + personHendelsefabrikk.lagOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt, + overstyringer, + hendelseId, + tidsstempel + ) .håndter(Person::håndter) internal fun håndterUtbetalingshistorikkEtterInfotrygdendring( @@ -430,7 +588,12 @@ internal class TestPerson( besvart: LocalDateTime = LocalDateTime.now(), id: UUID = UUID.randomUUID() ) = - arbeidsgiverHendelsefabrikk.lagUtbetalingshistorikkEtterInfotrygdendring(utbetalinger, inntektshistorikk, besvart, id) + arbeidsgiverHendelsefabrikk.lagUtbetalingshistorikkEtterInfotrygdendring( + utbetalinger, + inntektshistorikk, + besvart, + id + ) .håndter(Person::håndter) internal fun håndterUtbetalingshistorikkForFeriepenger( @@ -439,10 +602,11 @@ internal class TestPerson( personHendelsefabrikk.lagUtbetalingshistorikkForFeriepenger(opptjeningsår) .håndter(Person::håndter) - internal fun antallFeriepengeutbetalingerTilArbeidsgiver() = behovsamler.detaljerFor(orgnummer, Utbetaling) - .count { (behov, _) -> - behov["linjer"].toString().contains("SPREFAGFER-IOP") - } + internal fun antallFeriepengeutbetalingerTilArbeidsgiver() = + behovsamler.detaljerFor(orgnummer, Utbetaling) + .count { (behov, _) -> + behov["linjer"].toString().contains("SPREFAGFER-IOP") + } operator fun invoke(testblokk: TestArbeidsgiver.() -> R): R { return testblokk(this) @@ -450,9 +614,17 @@ internal class TestPerson( } } -internal fun lagStandardSykepengegrunnlag(orgnummer: String, inntekt: Inntekt, skjæringstidspunkt: LocalDate) = +internal fun lagStandardSykepengegrunnlag( + orgnummer: String, + inntekt: Inntekt, + skjæringstidspunkt: LocalDate +) = lagStandardSykepengegrunnlag(listOf(orgnummer to inntekt), skjæringstidspunkt) -internal fun lagStandardSykepengegrunnlag(arbeidsgivere: List>, skjæringstidspunkt: LocalDate) = + +internal fun lagStandardSykepengegrunnlag( + arbeidsgivere: List>, + skjæringstidspunkt: LocalDate +) = InntektForSykepengegrunnlag( inntekter = inntektperioderForSykepengegrunnlag { val måned = YearMonth.from(skjæringstidspunkt) @@ -463,13 +635,23 @@ internal fun lagStandardSykepengegrunnlag(arbeidsgivere: List.lagStandardSykepengegrunnlag(inntekt: Inntekt, skjæringstidspunkt: LocalDate) = +internal fun List.lagStandardSykepengegrunnlag( + inntekt: Inntekt, + skjæringstidspunkt: LocalDate +) = lagStandardSykepengegrunnlag(map { it to inntekt }, skjæringstidspunkt) -internal fun lagStandardInntekterForOpptjeningsvurdering(orgnummer: String, inntekt: Inntekt, skjæringstidspunkt: LocalDate) = +internal fun lagStandardInntekterForOpptjeningsvurdering( + orgnummer: String, + inntekt: Inntekt, + skjæringstidspunkt: LocalDate +) = lagStandardInntekterForOpptjeningsvurdering(listOf(orgnummer to inntekt), skjæringstidspunkt) -internal fun lagStandardInntekterForOpptjeningsvurdering(arbeidsgivere: List>, skjæringstidspunkt: LocalDate) = +internal fun lagStandardInntekterForOpptjeningsvurdering( + arbeidsgivere: List>, + skjæringstidspunkt: LocalDate +) = InntekterForOpptjeningsvurdering(inntekter = arbeidsgivere.map { arbeidsgiver -> val orgnummer = arbeidsgiver.first val inntekt = arbeidsgiver.second @@ -534,31 +716,68 @@ internal fun TestPerson.TestArbeidsgiver.tilGodkjenning( grad: Prosentdel = 100.prosent, førsteFraværsdag: LocalDate = periode.start, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), arbeidsgiverperiode: List = emptyList(), status: Oppdragstatus = Oppdragstatus.AKSEPTERT, - sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag(orgnummer, beregnetInntekt, førsteFraværsdag), - inntekterForOpptjeningsvurdering: InntekterForOpptjeningsvurdering? = lagStandardInntekterForOpptjeningsvurdering(orgnummer, beregnetInntekt, førsteFraværsdag), + sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag( + orgnummer, + beregnetInntekt, + førsteFraværsdag + ), + inntekterForOpptjeningsvurdering: InntekterForOpptjeningsvurdering? = lagStandardInntekterForOpptjeningsvurdering( + orgnummer, + beregnetInntekt, + førsteFraværsdag + ), arbeidsforhold: List? = null, ): UUID { val vedtaksperiode = nyPeriode(periode, grad) håndterInntektsmelding(arbeidsgiverperiode, beregnetInntekt, førsteFraværsdag, refusjon) - håndterVilkårsgrunnlag(vedtaksperiode, beregnetInntekt, Medlemskapsvurdering.Medlemskapstatus.Ja, sykepengegrunnlagSkatt, inntekterForOpptjeningsvurdering, arbeidsforhold) + håndterVilkårsgrunnlag( + vedtaksperiode, + beregnetInntekt, + Medlemskapsvurdering.Medlemskapstatus.Ja, + sykepengegrunnlagSkatt, + inntekterForOpptjeningsvurdering, + arbeidsforhold + ) håndterYtelser(vedtaksperiode) håndterSimulering(vedtaksperiode) return vedtaksperiode } + internal fun TestPerson.TestArbeidsgiver.nyttVedtak( periode: Periode, grad: Prosentdel = 100.prosent, førsteFraværsdag: LocalDate = periode.start, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), arbeidsgiverperiode: List = emptyList(), status: Oppdragstatus = Oppdragstatus.AKSEPTERT, - sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag(orgnummer, beregnetInntekt, førsteFraværsdag) + sykepengegrunnlagSkatt: InntektForSykepengegrunnlag = lagStandardSykepengegrunnlag( + orgnummer, + beregnetInntekt, + førsteFraværsdag + ) ) { - val vedtaksperiode = tilGodkjenning(periode, grad, førsteFraværsdag, beregnetInntekt, refusjon, arbeidsgiverperiode, status, sykepengegrunnlagSkatt) + val vedtaksperiode = tilGodkjenning( + periode, + grad, + førsteFraværsdag, + beregnetInntekt, + refusjon, + arbeidsgiverperiode, + status, + sykepengegrunnlagSkatt + ) håndterUtbetalingsgodkjenning(vedtaksperiode) håndterUtbetalt(status) } @@ -576,13 +795,31 @@ internal fun TestPerson.TestArbeidsgiver.forlengVedtak( return vedtaksperiode } -internal fun TestPerson.TestArbeidsgiver.nyPeriode(periode: Periode, grad: Prosentdel = 100.prosent, søknadId : UUID = UUID.randomUUID()): UUID { +internal fun TestPerson.TestArbeidsgiver.nyPeriode( + periode: Periode, + grad: Prosentdel = 100.prosent, + søknadId: UUID = UUID.randomUUID() +): UUID { håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive)) - return håndterSøknad(Sykdom(periode.start, periode.endInclusive, grad), søknadId = søknadId) ?: fail { "Det ble ikke opprettet noen vedtaksperiode." } + return håndterSøknad(Sykdom(periode.start, periode.endInclusive, grad), søknadId = søknadId) + ?: fail { "Det ble ikke opprettet noen vedtaksperiode." } } -internal fun TestPerson.nyPeriode(periode: Periode, vararg orgnummer: String, grad: Prosentdel = 100.prosent) { - orgnummer.forEach { it { håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive)) } } +internal fun TestPerson.nyPeriode( + periode: Periode, + vararg orgnummer: String, + grad: Prosentdel = 100.prosent +) { + orgnummer.forEach { + it { + håndterSykmelding( + Sykmeldingsperiode( + periode.start, + periode.endInclusive + ) + ) + } + } orgnummer.forEach { it { håndterSøknad(Sykdom(periode.start, periode.endInclusive, grad)) } } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPersonAssertions.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPersonAssertions.kt index 98e0d2b9a2..49529a4398 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPersonAssertions.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPersonAssertions.kt @@ -6,8 +6,14 @@ import no.nav.helse.inspectors.SubsumsjonInspektør import no.nav.helse.inspectors.inspektør import org.junit.jupiter.api.Assertions.assertEquals -internal class TestPersonAssertions(private val personInspektør: PersonInspektør, private val jurist: SubsumsjonsListLog) { - internal fun assertArbeidsgivereISykepengegrunnlag(skjæringstidspunkt: LocalDate, vararg arbeidsgivere: String) { +internal class TestPersonAssertions( + private val personInspektør: PersonInspektør, + private val jurist: SubsumsjonsListLog +) { + internal fun assertArbeidsgivereISykepengegrunnlag( + skjæringstidspunkt: LocalDate, + vararg arbeidsgivere: String + ) { assertEquals( arbeidsgivere.toSet(), personInspektør.vilkårsgrunnlagHistorikk.grunnlagsdata(skjæringstidspunkt).inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.keys @@ -17,4 +23,4 @@ internal class TestPersonAssertions(private val personInspektør: PersonInspekt internal fun assertSubsumsjoner(block: SubsumsjonInspektør.() -> R): R { return block(SubsumsjonInspektør(jurist)) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPersonTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPersonTest.kt index 0a808e8a04..def4b2da36 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPersonTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/TestPersonTest.kt @@ -91,8 +91,8 @@ internal class TestPersonTest : AbstractDslTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, - AVVENTER_HISTORIKK, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, @@ -130,7 +130,14 @@ internal class TestPersonTest : AbstractDslTest() { AVVENTER_BLOKKERENDE_PERIODE ) } - a1.assertTilstander(1.vedtaksperiode(a1), START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + a1.assertTilstander( + 1.vedtaksperiode(a1), + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/UgyldigeSituasjonerObservat\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/UgyldigeSituasjonerObservat\303\270r.kt" index 72b39f4bdc..4baa89afb1 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/UgyldigeSituasjonerObservat\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/UgyldigeSituasjonerObservat\303\270r.kt" @@ -50,25 +50,29 @@ import kotlin.collections.toSet import kotlin.error import kotlin.let -internal class UgyldigeSituasjonerObservatør(private val person: Person): PersonObserver { +internal class UgyldigeSituasjonerObservatør(private val person: Person) : PersonObserver { private val arbeidsgivereMap = mutableMapOf() private val gjeldendeTilstander = mutableMapOf() - private val gjeldendeBehandlingstatus = mutableMapOf>>() + private val gjeldendeBehandlingstatus = + mutableMapOf>>() private val arbeidsgivere get() = arbeidsgivereMap.values private val IM = Inntektsmeldinger() private val søknader = mutableMapOf() // SøknadId -> VedtaksperiodeId - private val behandlingOpprettetEventer = mutableListOf() + private val behandlingOpprettetEventer = + mutableListOf() private val behandlingLukketEventer = mutableListOf() - private val behandlingForkastetEventer = mutableListOf() + private val behandlingForkastetEventer = + mutableListOf() init { person.addObserver(this) } private fun loggBehandlingstatus(vedtaksperiodeId: UUID, status: Behandlingstatus) { - gjeldendeBehandlingstatus.getOrPut(vedtaksperiodeId) { mutableListOf() }.add(0, LocalDateTime.now() to status) + gjeldendeBehandlingstatus.getOrPut(vedtaksperiodeId) { mutableListOf() } + .add(0, LocalDateTime.now() to status) } override fun nyBehandling(event: PersonObserver.BehandlingOpprettetEvent) { @@ -96,7 +100,10 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso } override fun vedtaksperiodeAnnullert(vedtaksperiodeAnnullertEvent: PersonObserver.VedtaksperiodeAnnullertEvent) { - loggBehandlingstatus(vedtaksperiodeAnnullertEvent.vedtaksperiodeId, Behandlingstatus.ANNULLERT) + loggBehandlingstatus( + vedtaksperiodeAnnullertEvent.vedtaksperiodeId, + Behandlingstatus.ANNULLERT + ) } override fun behandlingForkastet(event: PersonObserver.BehandlingForkastetEvent) { @@ -133,16 +140,21 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso gjeldendeTilstander[event.vedtaksperiodeId] = event.gjeldendeTilstand } - override fun søknadHåndtert(søknadId: UUID, vedtaksperiodeId: UUID, organisasjonsnummer: String) { + override fun søknadHåndtert( + søknadId: UUID, + vedtaksperiodeId: UUID, + organisasjonsnummer: String + ) { søknader[søknadId] = null } - override fun vedtaksperioderVenter(eventer: List) = sjekk { - eventer.forEach { event -> - sjekkUgyldigeVentesituasjoner(event) - sjekkSøknadIdEierskap(event.vedtaksperiodeId, event.hendelser) + override fun vedtaksperioderVenter(eventer: List) = + sjekk { + eventer.forEach { event -> + sjekkUgyldigeVentesituasjoner(event) + sjekkSøknadIdEierskap(event.vedtaksperiodeId, event.hendelser) + } } - } private fun sjekkUgyldigeVentesituasjoner(event: PersonObserver.VedtaksperiodeVenterEvent) { if (event.venterPå.venteårsak.hva != "HJELP") return // Om vi venter på noe annet enn hjelp er det OK 👍 @@ -163,18 +175,31 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso } } - override fun inntektsmeldingHåndtert(inntektsmeldingId: UUID, vedtaksperiodeId: UUID, organisasjonsnummer: String) = IM.håndtert(inntektsmeldingId) - override fun inntektsmeldingIkkeHåndtert(inntektsmeldingId: UUID, organisasjonsnummer: String, harPeriodeInnenfor16Dager: Boolean) = IM.ikkeHåndtert(inntektsmeldingId) - override fun inntektsmeldingFørSøknad(event: PersonObserver.InntektsmeldingFørSøknadEvent) = IM.førSøknad(event.inntektsmeldingId) + override fun inntektsmeldingHåndtert( + inntektsmeldingId: UUID, + vedtaksperiodeId: UUID, + organisasjonsnummer: String + ) = IM.håndtert(inntektsmeldingId) + + override fun inntektsmeldingIkkeHåndtert( + inntektsmeldingId: UUID, + organisasjonsnummer: String, + harPeriodeInnenfor16Dager: Boolean + ) = IM.ikkeHåndtert(inntektsmeldingId) + + override fun inntektsmeldingFørSøknad(event: PersonObserver.InntektsmeldingFørSøknadEvent) = + IM.førSøknad(event.inntektsmeldingId) + override fun overstyringIgangsatt(event: PersonObserver.OverstyringIgangsatt) { check(event.berørtePerioder.isNotEmpty()) { "Forventet ikke en igangsatt overstyring uten berørte perioder." } if (event.årsak == "KORRIGERT_INNTEKTSMELDING") IM.korrigertInntekt(event.meldingsreferanseId) } - private fun PersonObserver.VedtaksperiodeVenterEvent.tilstander() = when (vedtaksperiodeId == venterPå.vedtaksperiodeId) { - true -> "En vedtaksperiode i ${gjeldendeTilstander[vedtaksperiodeId]} trenger hjelp${venterPå.venteårsak.hvorfor?.let { " fordi $it" } ?: ""}! 😱" - false -> "En vedtaksperiode i ${gjeldendeTilstander[vedtaksperiodeId]} venter på en annen vedtaksperiode i ${gjeldendeTilstander[venterPå.vedtaksperiodeId]} som trenger${venterPå.venteårsak.hvorfor?.let { " fordi $it" } ?: ""}! 😱" - } + private fun PersonObserver.VedtaksperiodeVenterEvent.tilstander() = + when (vedtaksperiodeId == venterPå.vedtaksperiodeId) { + true -> "En vedtaksperiode i ${gjeldendeTilstander[vedtaksperiodeId]} trenger hjelp${venterPå.venteårsak.hvorfor?.let { " fordi $it" } ?: ""}! 😱" + false -> "En vedtaksperiode i ${gjeldendeTilstander[vedtaksperiodeId]} venter på en annen vedtaksperiode i ${gjeldendeTilstander[venterPå.vedtaksperiodeId]} som trenger${venterPå.venteårsak.hvorfor?.let { " fordi $it" } ?: ""}! 😱" + } override fun behandlingUtført() { bekreftIngenUgyldigeSituasjoner(person.personlogg) @@ -182,7 +207,9 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso } private fun sjekk(block: () -> Unit) { - try { block() } catch (throwable: Throwable) { + try { + block() + } catch (throwable: Throwable) { if (throwable is UgyldigSituasjonException) throw throwable throw UgyldigSituasjonException(throwable) } @@ -207,12 +234,18 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso is Aktivitet.LogiskFeil -> {} is Aktivitet.Varsel -> { // disse opprettes utenfor en vedtaksperiode/eller på en lukket vedtaksperiode 💀 - if (it.kode in setOf(RV_SV_1, Varselkode.RV_RV_7, Varselkode.RV_UT_2)) return@forEach - - val vedtaksperiodekontekst = checkNotNull(it.kontekster.firstOrNull { it.kontekstType == "Vedtaksperiode" }) { - "Det er opprettet et varsel utenom Vedtaksperiode:\n${it}" - } - val vedtaksperiodeId = UUID.fromString(vedtaksperiodekontekst.kontekstMap.getValue("vedtaksperiodeId")) + if (it.kode in setOf( + RV_SV_1, + Varselkode.RV_RV_7, + Varselkode.RV_UT_2 + )) return@forEach + + val vedtaksperiodekontekst = + checkNotNull(it.kontekster.firstOrNull { it.kontekstType == "Vedtaksperiode" }) { + "Det er opprettet et varsel utenom Vedtaksperiode:\n${it}" + } + val vedtaksperiodeId = + UUID.fromString(vedtaksperiodekontekst.kontekstMap.getValue("vedtaksperiodeId")) val behandlingstatusPåTidspunkt = gjeldendeBehandlingstatus .getValue(vedtaksperiodeId) .first { (tidspunkt, _) -> @@ -228,7 +261,8 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso private fun validerSykdomshistorikk() { arbeidsgivere.forEach { arbeidsgiver -> - val perioderPerHendelse = arbeidsgiver.view().sykdomshistorikk.inspektør.perioderPerHendelse() + val perioderPerHendelse = + arbeidsgiver.view().sykdomshistorikk.inspektør.perioderPerHendelse() perioderPerHendelse.forEach { (hendelseId, perioder) -> check(!perioder.overlapper()) { "Sykdomshistorikk inneholder overlappende perioder fra hendelse $hendelseId" @@ -242,21 +276,25 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso it.view().aktiveVedtaksperioder.forEach { it.behandlinger.behandlinger.forEach { it.endringer.forEach { - val førsteIkkeUkjenteDag = it.sykdomstidslinje.firstOrNull { it !is UkjentDag } + val førsteIkkeUkjenteDag = + it.sykdomstidslinje.firstOrNull { it !is UkjentDag } val førsteDag = it.sykdomstidslinje[it.periode.start] val normalSykdomstidslinje = førsteDag === førsteIkkeUkjenteDag if (normalSykdomstidslinje) return // Inntektsmeldingen driver selvfølgelig å lager noen ukjente dager i snuten når første fraværsdag blir SykedagNav 🫠 - val førsteIkkeUkjenteDagErSykedagNav = it.sykdomstidslinje.inspektør.dager[it.sykdomstidslinje.inspektør.førsteIkkeUkjenteDag] is Dag.SykedagNav + val førsteIkkeUkjenteDagErSykedagNav = + it.sykdomstidslinje.inspektør.dager[it.sykdomstidslinje.inspektør.førsteIkkeUkjenteDag] is Dag.SykedagNav if (førsteIkkeUkjenteDagErSykedagNav) return - error(""" + error( + """ - Nå har det skjedd noe sprøtt.. sykdomstidslinjen starter med UkjentDag.. er du helt sikker på at det er så lurt? Sykdomstidslinje: ${it.sykdomstidslinje.toShortString()} Periode på sykdomstidslinje: ${it.sykdomstidslinje.periode()} FørsteIkkeUkjenteDag=${it.sykdomstidslinje.inspektør.førsteIkkeUkjenteDag} Periode på endring: ${it.periode} - """) + """ + ) } } } @@ -266,12 +304,15 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso private fun validerRefusjonsopplysningerPåBehandlinger() { arbeidsgivere.map { it.view() }.forEach { arbeidsgiver -> arbeidsgiver.aktiveVedtaksperioder.forEach { vedtaksperiode -> - vedtaksperiode.behandlinger.behandlinger.forEach behandling@ { behandling -> + vedtaksperiode.behandlinger.behandlinger.forEach behandling@{ behandling -> behandling.endringer.last().let { endring -> if (endring.refusjonstidslinje.isEmpty()) { if (behandling.tilstand == AVSLUTTET_UTEN_VEDTAK) return@behandling // Ikke noe refusjonsopplysning på AUU er OK if (vedtaksperiode.tilstand == AVVENTER_BLOKKERENDE_PERIODE && behandling.tilstand == UBEREGNET_OMGJØRING) return@behandling // Dette kan være AUU'er som skal tilbake til AUU, de må ikke ha refusjonsopplysninger. - if (vedtaksperiode.tilstand in setOf(AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING)) return@behandling// Ikke fått refusjonsopplysninger enda da + if (vedtaksperiode.tilstand in setOf( + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + )) return@behandling// Ikke fått refusjonsopplysninger enda da error("Burde ikke ha tom refusjonstidslinje i tilstand ${vedtaksperiode.tilstand}") } val perioder = endring.refusjonstidslinje.perioderMedBeløp @@ -284,9 +325,15 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso } - private fun BehandlingView.gyldigTilInfotrygd() = tilstand == BehandlingView.TilstandView.TIL_INFOTRYGD && avsluttet != null && vedtakFattet == null - private fun BehandlingView.gyldigAvsluttetUtenUtbetaling() = tilstand == AVSLUTTET_UTEN_VEDTAK && avsluttet != null && vedtakFattet == null - private fun BehandlingView.gyldigAvsluttet() = tilstand == BehandlingView.TilstandView.VEDTAK_IVERKSATT && avsluttet != null && vedtakFattet != null + private fun BehandlingView.gyldigTilInfotrygd() = + tilstand == BehandlingView.TilstandView.TIL_INFOTRYGD && avsluttet != null && vedtakFattet == null + + private fun BehandlingView.gyldigAvsluttetUtenUtbetaling() = + tilstand == AVSLUTTET_UTEN_VEDTAK && avsluttet != null && vedtakFattet == null + + private fun BehandlingView.gyldigAvsluttet() = + tilstand == BehandlingView.TilstandView.VEDTAK_IVERKSATT && avsluttet != null && vedtakFattet != null + private val BehandlingView.nøkkelinfo get() = "tilstand=$tilstand, avsluttet=$avsluttet, vedtakFattet=$vedtakFattet" private fun validerTilstandPåSisteBehandlingForFerdigbehandledePerioder() { @@ -294,21 +341,39 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso val view = arbeidsgiver.view() view.aktiveVedtaksperioder - .filter { it.tilstand in setOf(TilstandType.AVSLUTTET, TilstandType.AVSLUTTET_UTEN_UTBETALING, TilstandType.TIL_INFOTRYGD) } + .filter { + it.tilstand in setOf( + TilstandType.AVSLUTTET, + TilstandType.AVSLUTTET_UTEN_UTBETALING, + TilstandType.TIL_INFOTRYGD + ) + } .groupBy(keySelector = { it.tilstand }) { it.behandlinger.behandlinger.last() } .forEach { (tilstand, sisteBehandlinger) -> when (tilstand) { - TilstandType.TIL_INFOTRYGD -> sisteBehandlinger.filterNot { it.gyldigTilInfotrygd() }.let { check(it.isEmpty()) { - "Disse ${it.size} periodene i TilInfotrygd har sine siste behandlinger i snedige tilstander: ${it.map { behandling -> behandling.nøkkelinfo }}}"} - } - TilstandType.AVSLUTTET_UTEN_UTBETALING -> sisteBehandlinger.filterNot { it.gyldigAvsluttetUtenUtbetaling() }.let { check(it.isEmpty()) { - "Disse ${it.size} periodene i AvsluttetUtenUtbetaling har sine siste behandlinger i snedige tilstander: ${it.map { behandling -> behandling.nøkkelinfo }}}"} - } - TilstandType.AVSLUTTET -> sisteBehandlinger.filterNot { it.gyldigAvsluttet() }.let { check(it.isEmpty()) { - "Disse ${it.size} periodene i Avsluttet har sine siste behandlinger i snedige tilstander: ${it.map { behandling -> behandling.nøkkelinfo }}}"} - } + TilstandType.TIL_INFOTRYGD -> sisteBehandlinger.filterNot { it.gyldigTilInfotrygd() } + .let { + check(it.isEmpty()) { + "Disse ${it.size} periodene i TilInfotrygd har sine siste behandlinger i snedige tilstander: ${it.map { behandling -> behandling.nøkkelinfo }}}" + } + } + + TilstandType.AVSLUTTET_UTEN_UTBETALING -> sisteBehandlinger.filterNot { it.gyldigAvsluttetUtenUtbetaling() } + .let { + check(it.isEmpty()) { + "Disse ${it.size} periodene i AvsluttetUtenUtbetaling har sine siste behandlinger i snedige tilstander: ${it.map { behandling -> behandling.nøkkelinfo }}}" + } + } + + TilstandType.AVSLUTTET -> sisteBehandlinger.filterNot { it.gyldigAvsluttet() } + .let { + check(it.isEmpty()) { + "Disse ${it.size} periodene i Avsluttet har sine siste behandlinger i snedige tilstander: ${it.map { behandling -> behandling.nøkkelinfo }}}" + } + } + else -> error("Svært snedig at perioder i ${tilstand::class.simpleName} er ferdig behandlet") } } @@ -331,10 +396,22 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso private class Inntektsmeldinger { private val signaler = mutableMapOf>() - fun håndtert(inntektsmeldingId: UUID) { signaler.getOrPut(inntektsmeldingId) { mutableListOf() }.add(Signal.HÅNDTERT) } - fun ikkeHåndtert(inntektsmeldingId: UUID) { signaler.getOrPut(inntektsmeldingId) { mutableListOf() }.add(Signal.IKKE_HÅNDTERT) } - fun førSøknad(inntektsmeldingId: UUID) { signaler.getOrPut(inntektsmeldingId) { mutableListOf() }.add(Signal.FØR_SØKNAD) } - fun korrigertInntekt(inntektsmeldingId: UUID) { signaler.getOrPut(inntektsmeldingId) { mutableListOf() }.add(Signal.KORRIGERT_INNTEKT) } + fun håndtert(inntektsmeldingId: UUID) { + signaler.getOrPut(inntektsmeldingId) { mutableListOf() }.add(Signal.HÅNDTERT) + } + + fun ikkeHåndtert(inntektsmeldingId: UUID) { + signaler.getOrPut(inntektsmeldingId) { mutableListOf() }.add(Signal.IKKE_HÅNDTERT) + } + + fun førSøknad(inntektsmeldingId: UUID) { + signaler.getOrPut(inntektsmeldingId) { mutableListOf() }.add(Signal.FØR_SØKNAD) + } + + fun korrigertInntekt(inntektsmeldingId: UUID) { + signaler.getOrPut(inntektsmeldingId) { mutableListOf() }.add(Signal.KORRIGERT_INNTEKT) + } + fun behandlingUtført() = signaler.clear() fun bekreftEntydighåndtering() { @@ -365,7 +442,7 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso } internal companion object { - internal class UgyldigSituasjonException(cause: Throwable): Throwable(cause.message, cause) + internal class UgyldigSituasjonException(cause: Throwable) : Throwable(cause.message, cause) internal fun assertUgyldigSituasjon(forventetUgyldigSituasjon: String, block: () -> Unit) { val ugyldigSituasjon = assertThrows { block() }.message @@ -374,4 +451,4 @@ internal class UgyldigeSituasjonerObservatør(private val person: Person): Perso } } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Vedtaksperiodesamler.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Vedtaksperiodesamler.kt index b2bba0800b..eb2b625cf2 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Vedtaksperiodesamler.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/dsl/Vedtaksperiodesamler.kt @@ -21,8 +21,9 @@ internal class Vedtaksperiodesamler : PersonObserver { event: PersonObserver.VedtaksperiodeEndretEvent ) { sisteVedtaksperiode = event.vedtaksperiodeId - if (vedtaksperioder.getOrPut(event.organisasjonsnummer) { mutableSetOf() }.add(event.vedtaksperiodeId)) { + if (vedtaksperioder.getOrPut(event.organisasjonsnummer) { mutableSetOf() } + .add(event.vedtaksperiodeId)) { sisteOpprettetVedtaksperiode = sisteVedtaksperiode } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/etterlevelse/BehandlingSubsumsjonsloggTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/etterlevelse/BehandlingSubsumsjonsloggTest.kt index 0192a0de71..34210fe14d 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/etterlevelse/BehandlingSubsumsjonsloggTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/etterlevelse/BehandlingSubsumsjonsloggTest.kt @@ -21,17 +21,20 @@ internal class BehandlingSubsumsjonsloggTest { val subsumsjonslogg = SubsumsjonListLog() val vedtaksperiodeJurist = BehandlingSubsumsjonslogg( subsumsjonslogg, listOf( - Subsumsjonskontekst(KontekstType.Fødselsnummer, "10052088033"), - Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "123456789"), - Subsumsjonskontekst(KontekstType.Vedtaksperiode, "6bce6c83-28ab-4a8c-b7f6-8402988bc8fc"), - ) + Subsumsjonskontekst(KontekstType.Fødselsnummer, "10052088033"), + Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "123456789"), + Subsumsjonskontekst( + KontekstType.Vedtaksperiode, + "6bce6c83-28ab-4a8c-b7f6-8402988bc8fc" + ), + ) ) vedtaksperiodeJurist.logg(`§ 8-2 ledd 1`(true, LocalDate.now(), 1, emptyList(), 1)) assertKontekster( subsumsjonslogg.subsumsjoner[0], - "10052088033" to KontekstType.Fødselsnummer, + "10052088033" to KontekstType.Fødselsnummer, "123456789" to KontekstType.Organisasjonsnummer, "6bce6c83-28ab-4a8c-b7f6-8402988bc8fc" to KontekstType.Vedtaksperiode ) @@ -42,11 +45,14 @@ internal class BehandlingSubsumsjonsloggTest { val subsumsjonslogg = SubsumsjonListLog() val vedtaksperiodeJurist = BehandlingSubsumsjonslogg( subsumsjonslogg, listOf( - Subsumsjonskontekst(KontekstType.Fødselsnummer, "10052088033"), - Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "123456789"), - Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "123456789"), - Subsumsjonskontekst(KontekstType.Vedtaksperiode, "6bce6c83-28ab-4a8c-b7f6-8402988bc8fc"), - ) + Subsumsjonskontekst(KontekstType.Fødselsnummer, "10052088033"), + Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "123456789"), + Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "123456789"), + Subsumsjonskontekst( + KontekstType.Vedtaksperiode, + "6bce6c83-28ab-4a8c-b7f6-8402988bc8fc" + ), + ) ) assertThrows { @@ -55,21 +61,27 @@ internal class BehandlingSubsumsjonsloggTest { } @Test - fun `avviste dager`(){ + fun `avviste dager`() { val subsumsjonslogg = SubsumsjonListLog() val vedtaksperiodeJurist = BehandlingSubsumsjonslogg( subsumsjonslogg, listOf( - Subsumsjonskontekst(KontekstType.Fødselsnummer, "10052088033"), - Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "123456789"), - Subsumsjonskontekst(KontekstType.Vedtaksperiode, "6bce6c83-28ab-4a8c-b7f6-8402988bc8fc"), - ) + Subsumsjonskontekst(KontekstType.Fødselsnummer, "10052088033"), + Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "123456789"), + Subsumsjonskontekst( + KontekstType.Vedtaksperiode, + "6bce6c83-28ab-4a8c-b7f6-8402988bc8fc" + ), + ) ) `§ 8-13 ledd 1`(1.januar..31.januar, listOf(15.januar..16.januar), emptyList()).forEach { vedtaksperiodeJurist.logg(it) } } - private fun assertKontekster(subsumsjon: Subsumsjon, vararg kontekster: Pair) { + private fun assertKontekster( + subsumsjon: Subsumsjon, + vararg kontekster: Pair + ) { assertEquals( kontekster.map { Subsumsjonskontekst(type = it.second, verdi = it.first) }, subsumsjon.kontekster diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/etterlevelse/EtterlevelseSykdomstidslinjeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/etterlevelse/EtterlevelseSykdomstidslinjeTest.kt index 89b73c0051..475626d749 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/etterlevelse/EtterlevelseSykdomstidslinjeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/etterlevelse/EtterlevelseSykdomstidslinjeTest.kt @@ -43,7 +43,10 @@ internal class EtterlevelseSykdomstidslinjeTest { builder.dager().isNotEmpty() } - assertEquals(0, feilaktigSubsummért.size) { "Feilaktig subsummérte dagtyper: ${feilaktigSubsummért.map { (_, dag) -> dag::class.simpleName }}" } + assertEquals( + 0, + feilaktigSubsummért.size + ) { "Feilaktig subsummérte dagtyper: ${feilaktigSubsummért.map { (_, dag) -> dag::class.simpleName }}" } // Forsikrer oss om at de dagene som skal subsummeres inngår i tidslinjen val manglerSubsummering = subsummérbareDager.filter { (dato, dag) -> @@ -52,12 +55,18 @@ internal class EtterlevelseSykdomstidslinjeTest { builder.dager().isEmpty() } - assertEquals(0, manglerSubsummering.size) { "Dagtyper som mangler subsummering: ${manglerSubsummering.map { (_, dag) -> dag::class.simpleName }}" } + assertEquals( + 0, + manglerSubsummering.size + ) { "Dagtyper som mangler subsummering: ${manglerSubsummering.map { (_, dag) -> dag::class.simpleName }}" } } private companion object { - private fun LocalDate.subsummérbar(dag: (dato: LocalDate) -> Dag) = Triple(this, dag(this), true) - private fun LocalDate.ikkeSubsummérbar(dag: (dato: LocalDate) -> Dag) = Triple(this, dag(this), false) + private fun LocalDate.subsummérbar(dag: (dato: LocalDate) -> Dag) = + Triple(this, dag(this), true) + + private fun LocalDate.ikkeSubsummérbar(dag: (dato: LocalDate) -> Dag) = + Triple(this, dag(this), false) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/AndreYtelserOppdatereHistorikkTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/AndreYtelserOppdatereHistorikkTest.kt index 6482cba7ec..181b886b23 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/AndreYtelserOppdatereHistorikkTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/AndreYtelserOppdatereHistorikkTest.kt @@ -16,7 +16,13 @@ class AndreYtelserOppdatereHistorikkTest { periodeRettEtter: Periode? = null, skjæringstidspunkt: LocalDate = periode.start, ): Boolean { - return ytelse.skalOppdatereHistorikk(Aktivitetslogg(), ytelse, periode, skjæringstidspunkt, periodeRettEtter) + return ytelse.skalOppdatereHistorikk( + Aktivitetslogg(), + ytelse, + periode, + skjæringstidspunkt, + periodeRettEtter + ) } @Test @@ -51,14 +57,26 @@ class AndreYtelserOppdatereHistorikkTest { fun `foreldrepenger i halen av perioden, med skjæringstidspunkt midt i perioden`() { val vedtaksperiode = januar val foreldrepenger = Foreldrepenger(listOf(GradertPeriode(10.januar til 31.januar, 100))) - assertFalse(skalOppdatereHistorikk(foreldrepenger, vedtaksperiode, skjæringstidspunkt = 15.januar)) + assertFalse( + skalOppdatereHistorikk( + foreldrepenger, + vedtaksperiode, + skjæringstidspunkt = 15.januar + ) + ) } @Test fun `foreldrepenger i halen av perioden med start lik skjæringstidspunkt`() { val vedtaksperiode = januar val foreldrepenger = Foreldrepenger(listOf(GradertPeriode(15.januar til 31.januar, 100))) - assertTrue(skalOppdatereHistorikk(foreldrepenger, vedtaksperiode, skjæringstidspunkt = 15.januar)) + assertTrue( + skalOppdatereHistorikk( + foreldrepenger, + vedtaksperiode, + skjæringstidspunkt = 15.januar + ) + ) } @Test @@ -88,7 +106,8 @@ class AndreYtelserOppdatereHistorikkTest { val foreldrepenger = Foreldrepenger( listOf( GradertPeriode(1.januar til 10.januar, 100), - GradertPeriode(20.januar til 31.januar, 100)) + GradertPeriode(20.januar til 31.januar, 100) + ) ) assertFalse(skalOppdatereHistorikk(foreldrepenger, vedtaksperiode)) } @@ -99,7 +118,8 @@ class AndreYtelserOppdatereHistorikkTest { val foreldrepenger = Foreldrepenger( listOf( GradertPeriode(5.januar til 10.januar, 100), - GradertPeriode(11.januar til 31.januar, 100)) + GradertPeriode(11.januar til 31.januar, 100) + ) ) assertTrue(skalOppdatereHistorikk(foreldrepenger, vedtaksperiode)) } @@ -110,7 +130,8 @@ class AndreYtelserOppdatereHistorikkTest { val foreldrepenger = Foreldrepenger( listOf( GradertPeriode(1.januar til 10.januar, 100), - GradertPeriode(11.januar til 31.januar, 100)) + GradertPeriode(11.januar til 31.januar, 100) + ) ) assertTrue(skalOppdatereHistorikk(foreldrepenger, vedtaksperiode)) } @@ -129,4 +150,4 @@ class AndreYtelserOppdatereHistorikkTest { val foreldrepenger = Foreldrepenger(listOf(GradertPeriode(januar, 50))) assertFalse(skalOppdatereHistorikk(foreldrepenger, vedtaksperiode)) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/ArbeidsavklaringspengerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/ArbeidsavklaringspengerTest.kt index 7e3bb62a32..ca390fc40d 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/ArbeidsavklaringspengerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/ArbeidsavklaringspengerTest.kt @@ -23,12 +23,14 @@ internal class ArbeidsavklaringspengerTest { @Test fun `AAP eldre enn 6 måneder`() { - assertFalse(undersøke( - Periode( - fom = skjæringstidspunkt.minusMonths(8), - tom = skjæringstidspunkt.minusMonths(6).minusDays(1) + assertFalse( + undersøke( + Periode( + fom = skjæringstidspunkt.minusMonths(8), + tom = skjæringstidspunkt.minusMonths(6).minusDays(1) + ) + ) ) - )) assertFalse(aktivitetslogg.harVarslerEllerVerre()) } @@ -48,6 +50,7 @@ internal class ArbeidsavklaringspengerTest { private fun undersøke(vararg AAPperioder: Periode): Boolean { aktivitetslogg = Aktivitetslogg() val aap = Arbeidsavklaringspenger(AAPperioder.toList()) - return aap.valider(aktivitetslogg, skjæringstidspunkt, periode).harFunksjonelleFeilEllerVerre() + return aap.valider(aktivitetslogg, skjæringstidspunkt, periode) + .harFunksjonelleFeilEllerVerre() } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/DagpengerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/DagpengerTest.kt index 438b6b8d65..f7d96cca53 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/DagpengerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/DagpengerTest.kt @@ -23,29 +23,34 @@ class DagpengerTest { @Test fun `Dagpenger eldre enn 4 uker`() { - assertFalse(undersøke( - Periode( - fom = førsteFraværsdag.minusMonths(8), - tom = førsteFraværsdag.minusWeeks(4).minusDays(1) + assertFalse( + undersøke( + Periode( + fom = førsteFraværsdag.minusMonths(8), + tom = førsteFraværsdag.minusWeeks(4).minusDays(1) + ) + ) ) - )) assertFalse(aktivitetslogg.harVarslerEllerVerre()) } @Test fun `Dagpenger innenfor 4 uker`() { - assertFalse(undersøke( - Periode( - fom = førsteFraværsdag.minusMonths(8), - tom = førsteFraværsdag.minusWeeks(4) + assertFalse( + undersøke( + Periode( + fom = førsteFraværsdag.minusMonths(8), + tom = førsteFraværsdag.minusWeeks(4) + ) + ) ) - )) assertTrue(aktivitetslogg.harVarslerEllerVerre()) } private fun undersøke(vararg perioder: Periode): Boolean { aktivitetslogg = Aktivitetslogg() val dagpenger = Dagpenger(perioder.toList()) - return dagpenger.valider(aktivitetslogg, førsteFraværsdag, periode).harFunksjonelleFeilEllerVerre() + return dagpenger.valider(aktivitetslogg, førsteFraværsdag, periode) + .harFunksjonelleFeilEllerVerre() } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/ForeldrepengerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/ForeldrepengerTest.kt index 0d5a4a56d6..e943fe019b 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/ForeldrepengerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/ForeldrepengerTest.kt @@ -18,9 +18,11 @@ class ForeldrepengerTest { @Test fun `100 prosent foreldrepenger 14 dager i forkant`() { - val foreldrepenger = Foreldrepenger(listOf( - GradertPeriode(17.september til 30.september, 100) - )) + val foreldrepenger = Foreldrepenger( + listOf( + GradertPeriode(17.september til 30.september, 100) + ) + ) val aktivitetslogg = Aktivitetslogg() foreldrepenger.valider(aktivitetslogg, 1.oktober til 30.oktober, false) aktivitetslogg.assertIngenVarsel(Varselkode.RV_AY_12) @@ -28,9 +30,11 @@ class ForeldrepengerTest { @Test fun `100 prosent foreldrepenger mer enn 14 dager i forkant`() { - val foreldrepenger = Foreldrepenger(listOf( - GradertPeriode(16.september til 30.september, 100) - )) + val foreldrepenger = Foreldrepenger( + listOf( + GradertPeriode(16.september til 30.september, 100) + ) + ) val aktivitetslogg = Aktivitetslogg() foreldrepenger.valider(aktivitetslogg, 1.oktober til 30.oktober, false) aktivitetslogg.assertVarsel(Varselkode.RV_AY_12) @@ -38,9 +42,11 @@ class ForeldrepengerTest { @Test fun `100 prosent foreldrepenger mer enn 14 dager i forkant - foreldrepengene slutter på en fredag og sykepengene begynner på mandag`() { - val foreldrepenger = Foreldrepenger(listOf( - GradertPeriode(1.januar til fredag den 19.januar, 100) - )) + val foreldrepenger = Foreldrepenger( + listOf( + GradertPeriode(1.januar til fredag den 19.januar, 100) + ) + ) val aktivitetslogg = Aktivitetslogg() foreldrepenger.valider(aktivitetslogg, mandag den 22.januar til 31.januar, false) aktivitetslogg.assertVarsel(Varselkode.RV_AY_12) @@ -48,9 +54,11 @@ class ForeldrepengerTest { @Test fun `100 prosent foreldrepenger mer enn 14 dager i forkant - foreldrepengene slutter på en torsdag og sykepengene begynner på mandag`() { - val foreldrepenger = Foreldrepenger(listOf( - GradertPeriode(1.januar til torsdag den 18.januar, 100) - )) + val foreldrepenger = Foreldrepenger( + listOf( + GradertPeriode(1.januar til torsdag den 18.januar, 100) + ) + ) val aktivitetslogg = Aktivitetslogg() foreldrepenger.valider(aktivitetslogg, mandag den 22.januar til 31.januar, false) aktivitetslogg.assertIngenVarsel(Varselkode.RV_AY_12) @@ -58,11 +66,13 @@ class ForeldrepengerTest { @Test fun `80 prosent foreldrepenger mer enn 14 dager i forkant`() { - val foreldrepenger = Foreldrepenger(listOf( - GradertPeriode(16.september til 30.september, 80) - )) + val foreldrepenger = Foreldrepenger( + listOf( + GradertPeriode(16.september til 30.september, 80) + ) + ) val aktivitetslogg = Aktivitetslogg() foreldrepenger.valider(aktivitetslogg, 1.oktober til 30.oktober, false) aktivitetslogg.assertIngenVarsel(Varselkode.RV_AY_12) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest.kt index d4788ce63a..d9816cb957 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest.kt @@ -22,7 +22,8 @@ class FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest { val førsteFraværsdag = 1.januar val arbeidsgiverperiode = listOf(1.januar til 16.januar) val begrunnelse = "ManglerOpptjening" - val funksjonellBetydning = funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) + val funksjonellBetydning = + funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) assertEquals(ARBBEIDSGIVER_VIL_AT_NAV_SKAL_DEKKE_AGP_FRA_FØRSTE_DAG, funksjonellBetydning) } @@ -31,7 +32,8 @@ class FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest { val førsteFraværsdag = 1.januar val arbeidsgiverperiode = listOf(1.januar til 16.januar) val begrunnelse = "TidligereVirksomhet" - val funksjonellBetydning = funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) + val funksjonellBetydning = + funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) assertEquals(ARBBEIDSGIVER_VIL_AT_NAV_SKAL_DEKKE_AGP_FRA_FØRSTE_DAG, funksjonellBetydning) } @@ -40,8 +42,12 @@ class FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest { val førsteFraværsdag = 1.januar val arbeidsgiverperiode = emptyList() val begrunnelse = "IkkeFravaer" - val funksjonellBetydning = funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) - assertEquals(ARBEIDSGIVER_SIER_AT_DET_IKKE_ER_NOE_AGP_Å_SNAKKE_OM_I_DET_HELE_TATT, funksjonellBetydning) + val funksjonellBetydning = + funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) + assertEquals( + ARBEIDSGIVER_SIER_AT_DET_IKKE_ER_NOE_AGP_Å_SNAKKE_OM_I_DET_HELE_TATT, + funksjonellBetydning + ) } @Test @@ -49,7 +55,8 @@ class FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest { val førsteFraværsdag = 1.januar val arbeidsgiverperiode = listOf(1.januar til 8.januar) val begrunnelse = "ArbeidOpphørt" - val funksjonellBetydning = funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) + val funksjonellBetydning = + funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) assertEquals(ARBEIDSGIVER_VIL_BARE_DEKKE_DELVIS_AGP, funksjonellBetydning) } @@ -58,7 +65,8 @@ class FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest { val førsteFraværsdag = 1.januar val arbeidsgiverperiode = listOf(1.januar til 8.januar) val begrunnelse = "Permittering" - val funksjonellBetydning = funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) + val funksjonellBetydning = + funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) assertEquals(ARBEIDSGIVER_VIL_BARE_DEKKE_DELVIS_AGP, funksjonellBetydning) } @@ -67,7 +75,8 @@ class FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest { val førsteFraværsdag = 1.mars val arbeidsgiverperiode = listOf(1.januar til 16.januar) val begrunnelse = "FerieEllerAvspasering" - val funksjonellBetydning = funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) + val funksjonellBetydning = + funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) assertEquals(ARBEIDSGIVER_VIL_IKKE_DEKKE_NY_AGP_TROSS_GAP, funksjonellBetydning) } @@ -76,7 +85,8 @@ class FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest { val førsteFraværsdag = 1.mars val arbeidsgiverperiode = listOf(1.januar til 16.januar) val begrunnelse = "IkkeFullStillingsandel" - val funksjonellBetydning = funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) + val funksjonellBetydning = + funksjonellBetydning(førsteFraværsdag, arbeidsgiverperiode, begrunnelse) assertEquals(ARBEIDSGIVER_VIL_IKKE_DEKKE_NY_AGP_TROSS_GAP, funksjonellBetydning) } @@ -87,11 +97,12 @@ class FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetaltTest { ): FunksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetalt { val antallDagerIOpplystArbeidsgiverperiode = arbeidsgiverperioder.periode()?.count() ?: 0 val periodeMellom = arbeidsgiverperioder.periode()?.periodeMellom(førsteFraværsdag) - val førsteFraværsdagStarterMerEnn16DagerEtterEtterSisteDagIAGP = periodeMellom != null && periodeMellom.count() > 16 + val førsteFraværsdagStarterMerEnn16DagerEtterEtterSisteDagIAGP = + periodeMellom != null && periodeMellom.count() > 16 return funksjonellBetydningAvBegrunnelseForReduksjonEllerIkkeUtbetalt( antallDagerIOpplystArbeidsgiverperiode, førsteFraværsdagStarterMerEnn16DagerEtterEtterSisteDagIAGP, begrunnelse ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektForInntektsgrunnlagTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektForInntektsgrunnlagTest.kt index dbce6aaddb..99d601a658 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektForInntektsgrunnlagTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektForInntektsgrunnlagTest.kt @@ -30,11 +30,11 @@ internal class InntektForInntektsgrunnlagTest { ), ArbeidsgiverInntekt( "orgnummer2", (1..2).map { - ArbeidsgiverInntekt.MånedligInntekt( - YearMonth.of(2017, it), - 31000.månedlig, LØNNSINNTEKT, "hva som helst", "hva som helst" - ) - } + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, it), + 31000.månedlig, LØNNSINNTEKT, "hva som helst", "hva som helst" + ) + } ) ) assertEquals(3, inntekter.antallMåneder()) @@ -75,8 +75,18 @@ internal class InntektForInntektsgrunnlagTest { ), ) val inntektForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter) - val arbeidsforhold = Vilkårsgrunnlag.Arbeidsforhold("orgnummer", 1.januar(2017), 28.februar(2017), Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.FRILANSER) - arbeidsforhold.validerFrilans(aktivitetslogg, 1.februar(2017), emptyList(), inntektForSykepengegrunnlag) + val arbeidsforhold = Vilkårsgrunnlag.Arbeidsforhold( + "orgnummer", + 1.januar(2017), + 28.februar(2017), + Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.FRILANSER + ) + arbeidsforhold.validerFrilans( + aktivitetslogg, + 1.februar(2017), + emptyList(), + inntektForSykepengegrunnlag + ) assertTrue(aktivitetslogg.harFunksjonelleFeilEllerVerre()) } @@ -95,8 +105,18 @@ internal class InntektForInntektsgrunnlagTest { ), ) val inntektForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter) - val arbeidsforhold = Vilkårsgrunnlag.Arbeidsforhold("orgnummer", 1.februar(2017), 28.februar(2017), Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.FRILANSER) - arbeidsforhold.validerFrilans(aktivitetslogg, 1.februar(2017), emptyList(), inntektForSykepengegrunnlag) + val arbeidsforhold = Vilkårsgrunnlag.Arbeidsforhold( + "orgnummer", + 1.februar(2017), + 28.februar(2017), + Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.FRILANSER + ) + arbeidsforhold.validerFrilans( + aktivitetslogg, + 1.februar(2017), + emptyList(), + inntektForSykepengegrunnlag + ) assertFalse(aktivitetslogg.harFunksjonelleFeilEllerVerre()) } @@ -116,8 +136,18 @@ internal class InntektForInntektsgrunnlagTest { ) val inntektForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter) - val arbeidsforhold = Vilkårsgrunnlag.Arbeidsforhold("orgnummer2", 1.januar(2017), 31.januar(2017), Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.FRILANSER) - arbeidsforhold.validerFrilans(aktivitetslogg, 1.februar(2017), emptyList(), inntektForSykepengegrunnlag) + val arbeidsforhold = Vilkårsgrunnlag.Arbeidsforhold( + "orgnummer2", + 1.januar(2017), + 31.januar(2017), + Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.FRILANSER + ) + arbeidsforhold.validerFrilans( + aktivitetslogg, + 1.februar(2017), + emptyList(), + inntektForSykepengegrunnlag + ) assertFalse(aktivitetslogg.harFunksjonelleFeilEllerVerre()) } @@ -135,9 +165,19 @@ internal class InntektForInntektsgrunnlagTest { ), ) val inntektForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter) - val arbeidsforhold = Vilkårsgrunnlag.Arbeidsforhold("orgnummer", 1.januar(2017), 31.januar(2017), Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.FRILANSER) + val arbeidsforhold = Vilkårsgrunnlag.Arbeidsforhold( + "orgnummer", + 1.januar(2017), + 31.januar(2017), + Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.FRILANSER + ) val aktivitetslogg = Aktivitetslogg() - arbeidsforhold.validerFrilans(aktivitetslogg, 1.april(2017), emptyList(), inntektForSykepengegrunnlag) + arbeidsforhold.validerFrilans( + aktivitetslogg, + 1.april(2017), + emptyList(), + inntektForSykepengegrunnlag + ) assertTrue(aktivitetslogg.harFunksjonelleFeilEllerVerre()) } @@ -155,9 +195,19 @@ internal class InntektForInntektsgrunnlagTest { ), ) val inntektForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter) - val arbeidsforhold = Vilkårsgrunnlag.Arbeidsforhold("orgnummer2", 1.januar(2017), 31.januar(2017), Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.FRILANSER) + val arbeidsforhold = Vilkårsgrunnlag.Arbeidsforhold( + "orgnummer2", + 1.januar(2017), + 31.januar(2017), + Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.FRILANSER + ) val aktivitetslogg = Aktivitetslogg() - arbeidsforhold.validerFrilans(aktivitetslogg, 1.april(2017), emptyList(), inntektForSykepengegrunnlag) + arbeidsforhold.validerFrilans( + aktivitetslogg, + 1.april(2017), + emptyList(), + inntektForSykepengegrunnlag + ) assertFalse(aktivitetslogg.harFunksjonelleFeilEllerVerre()) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektsmeldingTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektsmeldingTest.kt index 438f99fe8a..756c462db4 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektsmeldingTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/InntektsmeldingTest.kt @@ -48,7 +48,12 @@ internal class InntektsmeldingTest { @Test fun `inntektsmelding uten arbeidsgiverperiode og førsteFraværsdag er null`() { - assertThrows { inntektsmelding(emptyList(), førsteFraværsdag = null) } + assertThrows { + inntektsmelding( + emptyList(), + førsteFraværsdag = null + ) + } } @Test @@ -94,7 +99,8 @@ internal class InntektsmeldingTest { @Test fun `padder med arbeidsdager i forkant av arbeidsgiverperiode`() { inntektsmelding(listOf(3.januar til 18.januar), førsteFraværsdag = 3.januar) - val tidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val tidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(1.januar, tidslinje.førsteDag()) assertTrue(tidslinje[1.januar] is Arbeidsdag) assertTrue(tidslinje[2.januar] is Arbeidsdag) @@ -116,7 +122,8 @@ internal class InntektsmeldingTest { 10.januar til 18.januar ), førsteFraværsdag = 25.januar ) - val tidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val tidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(1.januar, tidslinje.førsteDag()) assertEquals(18.januar, tidslinje.sisteDag()) assertTrue(tidslinje[1.januar] is Arbeidsgiverdag) @@ -133,7 +140,8 @@ internal class InntektsmeldingTest { 10.januar til 18.januar ), førsteFraværsdag = 25.januar ) - val tidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 20.januar til 31.januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val tidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 20.januar til 31.januar) + ?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } assertEquals(1.januar, tidslinje.førsteDag()) assertEquals(18.januar, tidslinje.sisteDag()) assertTrue(tidslinje[1.januar] is Arbeidsgiverdag) @@ -151,7 +159,9 @@ internal class InntektsmeldingTest { 10.januar til 18.januar ), førsteFraværsdag = 25.januar ) - val tidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 31.desember(2017) til 31.januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val tidslinje = + dager.bitAvInntektsmelding(Aktivitetslogg(), 31.desember(2017) til 31.januar) + ?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } assertEquals(31.desember(2017), tidslinje.førsteDag()) assertEquals(18.januar, tidslinje.sisteDag()) assertTrue(tidslinje[31.desember(2017)] is FriskHelgedag) @@ -170,7 +180,8 @@ internal class InntektsmeldingTest { Periode(15.januar, 24.januar) ), førsteFraværsdag = 1.januar ) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 10.januar til 31.januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 10.januar til 31.januar) + ?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } assertEquals(1.januar, nyTidslinje.periode()?.start) assertEquals(24.januar, nyTidslinje.periode()?.endInclusive) assertEquals(15.januar, nyTidslinje.sisteSkjæringstidspunkt()) @@ -179,10 +190,14 @@ internal class InntektsmeldingTest { @Test fun `ferie sammenhengende før siste arbeidsgiverperiode påvirker ikke skjæringstidspunkt`() { inntektsmelding( - arbeidsgiverperioder = listOf(Periode(1.januar, 2.januar), Periode(15.januar, 17.januar)), + arbeidsgiverperioder = listOf( + Periode(1.januar, 2.januar), + Periode(15.januar, 17.januar) + ), førsteFraværsdag = 1.januar ) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 10.januar til 31.januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 10.januar til 31.januar) + ?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } assertEquals(1.januar, nyTidslinje.periode()?.start) assertEquals(17.januar, nyTidslinje.periode()?.endInclusive) assertEquals(15.januar, nyTidslinje.sisteSkjæringstidspunkt()) @@ -191,10 +206,14 @@ internal class InntektsmeldingTest { @Test fun `ferie og helg sammenhengende med to arbeidsgiverperioder slår sammen periodene`() { inntektsmelding( - arbeidsgiverperioder = listOf(Periode(1.januar, 5.januar), Periode(15.januar, 17.januar)), + arbeidsgiverperioder = listOf( + Periode(1.januar, 5.januar), + Periode(15.januar, 17.januar) + ), førsteFraværsdag = 1.januar ) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(1.januar, nyTidslinje.periode()?.start) assertEquals(17.januar, nyTidslinje.periode()?.endInclusive) } @@ -202,10 +221,14 @@ internal class InntektsmeldingTest { @Test fun `to ferieperioder med gap, som er sammenhengende med hver sin arbeidsgiverperiode, påvirker ikke skjæringstidspunkt`() { inntektsmelding( - arbeidsgiverperioder = listOf(Periode(1.januar, 5.januar), Periode(15.januar, 17.januar)), + arbeidsgiverperioder = listOf( + Periode(1.januar, 5.januar), + Periode(15.januar, 17.januar) + ), førsteFraværsdag = 1.januar ) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(1.januar, nyTidslinje.periode()?.start) assertEquals(17.januar, nyTidslinje.periode()?.endInclusive) assertEquals(15.januar, nyTidslinje.sisteSkjæringstidspunkt()) @@ -240,7 +263,8 @@ internal class InntektsmeldingTest { @Test fun `sykdom med en antatt arbeidsdag`() { inntektsmelding(listOf(Periode(1.januar, 2.januar), Periode(4.januar, 5.januar))) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(Arbeidsdag::class, nyTidslinje[3.januar]::class) assertEquals(Arbeidsgiverdag::class, nyTidslinje[1.januar]::class) assertEquals(Arbeidsgiverdag::class, nyTidslinje[2.januar]::class) @@ -250,9 +274,13 @@ internal class InntektsmeldingTest { @Test fun `arbeidsgiverperiode med gap`() { - inntektsmelding(listOf(Periode(1.januar, 2.januar), Periode(4.januar, 5.januar)), førsteFraværsdag = 4.januar) + inntektsmelding( + listOf(Periode(1.januar, 2.januar), Periode(4.januar, 5.januar)), + førsteFraværsdag = 4.januar + ) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(Arbeidsgiverdag::class, nyTidslinje[1.januar]::class) assertEquals(Arbeidsgiverdag::class, nyTidslinje[2.januar]::class) assertEquals(Arbeidsdag::class, nyTidslinje[3.januar]::class) @@ -263,7 +291,8 @@ internal class InntektsmeldingTest { @Test fun `første fraværsdag etter arbeidsgiverperiode blir ikke arbeidsgiverdag`() { inntektsmelding(listOf(Periode(1.januar, 1.januar)), førsteFraværsdag = 3.januar) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(Arbeidsgiverdag::class, nyTidslinje[1.januar]::class) assertEquals(UkjentDag::class, nyTidslinje[2.januar]::class) assertEquals(UkjentDag::class, nyTidslinje[3.januar]::class) @@ -272,13 +301,20 @@ internal class InntektsmeldingTest { @Test fun `arbeidsgiverperioden i inntektsmelding kan være tom`() { inntektsmelding(emptyList()) - val sykdomstidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() + val sykdomstidslinje = + dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() assertNull(sykdomstidslinje) } @Test fun `arbeidgiverperioden kan ha overlappende perioder`() { - inntektsmelding(listOf(Periode(1.januar, 2.januar), Periode(4.januar, 5.januar), Periode(3.januar, 4.januar))) + inntektsmelding( + listOf( + Periode(1.januar, 2.januar), + Periode(4.januar, 5.januar), + Periode(3.januar, 4.januar) + ) + ) dager.validerArbeidsgiverperiode(aktivitetslogg, 1.januar til 6.januar, null) aktivitetslogg.assertIngenFunksjonellFeil() } @@ -287,7 +323,8 @@ internal class InntektsmeldingTest { fun `helg i opphold i arbeidsgiverperioden skal være helgedager`() { inntektsmelding(listOf(Periode(1.januar, 4.januar), Periode(9.januar, 10.januar))) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(Arbeidsgiverdag::class, nyTidslinje[1.januar]::class) assertEquals(Arbeidsgiverdag::class, nyTidslinje[2.januar]::class) assertEquals(Arbeidsgiverdag::class, nyTidslinje[3.januar]::class) @@ -305,7 +342,8 @@ internal class InntektsmeldingTest { inntektsmelding(emptyList(), førsteFraværsdag = 2.januar) assertNull(dager.inspektør.periode) assertEquals(emptySet(), dager.inspektør.gjenståendeDager) - val sykdomstidslinje = dager.bitAvInntektsmelding(aktivitetslogg, 2.januar til 31.januar)?.sykdomstidslinje() + val sykdomstidslinje = + dager.bitAvInntektsmelding(aktivitetslogg, 2.januar til 31.januar)?.sykdomstidslinje() assertNull(sykdomstidslinje) } @@ -326,8 +364,8 @@ internal class InntektsmeldingTest { listOf(Periode(1.januar, 10.januar)), begrunnelseForReduksjonEllerIkkeUtbetalt = "" ) - dager.validerArbeidsgiverperiode(aktivitetslogg, 1.januar til 10.januar, null) - assertFalse(aktivitetslogg.harFunksjonelleFeilEllerVerre()) + dager.validerArbeidsgiverperiode(aktivitetslogg, 1.januar til 10.januar, null) + assertFalse(aktivitetslogg.harFunksjonelleFeilEllerVerre()) } @Test @@ -337,7 +375,9 @@ internal class InntektsmeldingTest { førsteFraværsdag = 22.januar ) assertEquals(5.januar til 21.januar, dager.inspektør.periode) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 5.januar til 31.januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = + dager.bitAvInntektsmelding(Aktivitetslogg(), 5.januar til 31.januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(5.januar, nyTidslinje.sisteSkjæringstidspunkt()) assertEquals(Arbeidsgiverdag::class, nyTidslinje[5.januar]::class) assertEquals(ArbeidsgiverHelgedag::class, nyTidslinje[20.januar]::class) @@ -356,7 +396,8 @@ internal class InntektsmeldingTest { 13.januar til 18.januar ), førsteFraværsdag = 1.januar ) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(8.januar, nyTidslinje.sisteSkjæringstidspunkt()) assertEquals(Arbeidsgiverdag::class, nyTidslinje[5.januar]::class) @@ -372,7 +413,9 @@ internal class InntektsmeldingTest { førsteFraværsdag = 21.januar ) assertEquals(4.januar til 20.januar, dager.inspektør.periode) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 4.januar til 31.januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = + dager.bitAvInntektsmelding(Aktivitetslogg(), 4.januar til 31.januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(4.januar, nyTidslinje.sisteSkjæringstidspunkt()) assertEquals(Arbeidsgiverdag::class, nyTidslinje[4.januar]::class) assertEquals(Arbeidsgiverdag::class, nyTidslinje[19.januar]::class) @@ -387,7 +430,9 @@ internal class InntektsmeldingTest { førsteFraværsdag = 22.januar ) assertEquals(4.januar til 21.januar, dager.inspektør.periode) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 4.januar til 31.januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = + dager.bitAvInntektsmelding(Aktivitetslogg(), 4.januar til 31.januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(4.januar, nyTidslinje.sisteSkjæringstidspunkt()) assertEquals(Arbeidsgiverdag::class, nyTidslinje[4.januar]::class) assertEquals(Arbeidsgiverdag::class, nyTidslinje[19.januar]::class) @@ -404,7 +449,9 @@ internal class InntektsmeldingTest { førsteFraværsdag = 22.januar ) assertEquals(3.januar til 18.januar, dager.inspektør.periode) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 3.januar til 31.januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = + dager.bitAvInntektsmelding(Aktivitetslogg(), 3.januar til 31.januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(3.januar, nyTidslinje.sisteSkjæringstidspunkt()) assertEquals(Arbeidsgiverdag::class, nyTidslinje[3.januar]::class) assertEquals(Arbeidsgiverdag::class, nyTidslinje[18.januar]::class) @@ -421,7 +468,9 @@ internal class InntektsmeldingTest { førsteFraværsdag = 23.januar ) assertEquals(4.januar til 19.januar, dager.inspektør.periode) - val nyTidslinje = dager.bitAvInntektsmelding(Aktivitetslogg(), 4.januar til 31.januar)?.sykdomstidslinje() ?: fail { "forventet sykdomstidslinje" } + val nyTidslinje = + dager.bitAvInntektsmelding(Aktivitetslogg(), 4.januar til 31.januar)?.sykdomstidslinje() + ?: fail { "forventet sykdomstidslinje" } assertEquals(4.januar, nyTidslinje.sisteSkjæringstidspunkt()) assertEquals(Arbeidsgiverdag::class, nyTidslinje[4.januar]::class) assertEquals(Arbeidsgiverdag::class, nyTidslinje[19.januar]::class) @@ -447,7 +496,10 @@ internal class InntektsmeldingTest { ) val inntektshistorikk = Inntektshistorikk() inntektsmelding.addInntekt(inntektshistorikk, Aktivitetslogg(), 1.februar) - assertEquals(2000.månedlig, inntektshistorikk.avklarSykepengegrunnlag(1.februar, 1.februar, null)?.inspektør?.beløp) + assertEquals( + 2000.månedlig, + inntektshistorikk.avklarSykepengegrunnlag(1.februar, 1.februar, null)?.inspektør?.beløp + ) assertNull(inntektshistorikk.avklarSykepengegrunnlag(3.februar, 3.februar, null)) } @@ -461,14 +513,20 @@ internal class InntektsmeldingTest { ) val inntektshistorikk = Inntektshistorikk() inntektsmelding.addInntekt(inntektshistorikk, EmptyLog) - assertEquals(2000.månedlig, inntektshistorikk.avklarSykepengegrunnlag(1.januar, 1.januar, null)?.inspektør?.beløp) + assertEquals( + 2000.månedlig, + inntektshistorikk.avklarSykepengegrunnlag(1.januar, 1.januar, null)?.inspektør?.beløp + ) } @Test fun `uenige om arbeidsgiverperiode`() { inntektsmelding(listOf(2.januar til 17.januar)) dager.vurdertTilOgMed(17.januar) - dager.validerArbeidsgiverperiode(aktivitetslogg, 1.januar til 17.januar, Arbeidsgiverperiode(listOf(1.januar til 16.januar)).apply { kjentDag(17.januar) }) + dager.validerArbeidsgiverperiode( + aktivitetslogg, + 1.januar til 17.januar, + Arbeidsgiverperiode(listOf(1.januar til 16.januar)).apply { kjentDag(17.januar) }) aktivitetslogg.assertVarsel(RV_IM_3) } @@ -476,7 +534,10 @@ internal class InntektsmeldingTest { fun `uenige om arbeidsgiverperiode med NAV_NO som avsendersystem gir varsel`() { inntektsmeldingPortal(listOf(2.januar til 17.januar)) dager.vurdertTilOgMed(17.januar) - dager.validerArbeidsgiverperiode(aktivitetslogg, 1.januar til 17.januar, Arbeidsgiverperiode(listOf(1.januar til 16.januar)).apply { kjentDag(17.januar) }) + dager.validerArbeidsgiverperiode( + aktivitetslogg, + 1.januar til 17.januar, + Arbeidsgiverperiode(listOf(1.januar til 16.januar)).apply { kjentDag(17.januar) }) aktivitetslogg.assertVarsel(RV_IM_3) } @@ -484,7 +545,10 @@ internal class InntektsmeldingTest { fun `tom arbeidsgiverperiode med NAV_NO som avsendersystem gir ikke varsel`() { inntektsmeldingPortal(emptyList()) dager.vurdertTilOgMed(17.januar) - dager.validerArbeidsgiverperiode(aktivitetslogg, 1.januar til 17.januar, Arbeidsgiverperiode(listOf(1.januar til 16.januar)).apply { kjentDag(17.januar) }) + dager.validerArbeidsgiverperiode( + aktivitetslogg, + 1.januar til 17.januar, + Arbeidsgiverperiode(listOf(1.januar til 16.januar)).apply { kjentDag(17.januar) }) aktivitetslogg.assertIngenVarsel(RV_IM_3) } @@ -502,10 +566,14 @@ internal class InntektsmeldingTest { arbeidsgiverperioder = arbeidsgiverperioder, beregnetInntekt = beregnetInntekt, førsteFraværsdag = førsteFraværsdag, - refusjon = Inntektsmelding.Refusjon(refusjonBeløp, refusjonOpphørsdato, endringerIRefusjon), + refusjon = Inntektsmelding.Refusjon( + refusjonBeløp, + refusjonOpphørsdato, + endringerIRefusjon + ), begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt ) - inntektsmelding.valider(object: Inntektsmelding.Valideringsgrunnlag { + inntektsmelding.valider(object : Inntektsmelding.Valideringsgrunnlag { override fun vedtaksperiode(vedtaksperiodeId: UUID) = null override fun inntektsmeldingIkkeHåndtert(inntektsmelding: Inntektsmelding) {} }, aktivitetslogg) @@ -528,12 +596,20 @@ internal class InntektsmeldingTest { arbeidsgiverperioder = arbeidsgiverperioder, beregnetInntekt = beregnetInntekt, vedtaksperiodeId = vedtaksperiodeId, - refusjon = Inntektsmelding.Refusjon(refusjonBeløp, refusjonOpphørsdato, endringerIRefusjon), + refusjon = Inntektsmelding.Refusjon( + refusjonBeløp, + refusjonOpphørsdato, + endringerIRefusjon + ), begrunnelseForReduksjonEllerIkkeUtbetalt = begrunnelseForReduksjonEllerIkkeUtbetalt, avsenderSystem = avsenderSystem ) - inntektsmelding.valider(object: Inntektsmelding.Valideringsgrunnlag { - override fun vedtaksperiode(vedtaksperiodeId: UUID) = Inntektsmelding.Valideringsgrunnlag.ForenkletVedtaksperiode({ null }, { LocalDate.EPOCH }, { erForlengelse }) + inntektsmelding.valider(object : Inntektsmelding.Valideringsgrunnlag { + override fun vedtaksperiode(vedtaksperiodeId: UUID) = + Inntektsmelding.Valideringsgrunnlag.ForenkletVedtaksperiode({ null }, + { LocalDate.EPOCH }, + { erForlengelse }) + override fun inntektsmeldingIkkeHåndtert(inntektsmelding: Inntektsmelding) {} }, aktivitetslogg) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/OverstyrTidslinjeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/OverstyrTidslinjeTest.kt index fcd8d664d8..1894ceb5e8 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/OverstyrTidslinjeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/OverstyrTidslinjeTest.kt @@ -9,6 +9,13 @@ internal class OverstyrTidslinjeTest { @Test fun `overstyring uten dager`() { - assertThrows { OverstyrTidslinje(UUID.randomUUID(), "orgnr", emptyList(), LocalDateTime.now()) } + assertThrows { + OverstyrTidslinje( + UUID.randomUUID(), + "orgnr", + emptyList(), + LocalDateTime.now() + ) + } } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/PeriodeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/PeriodeTest.kt index 992fc14967..2e7c783f36 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/PeriodeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/PeriodeTest.kt @@ -105,9 +105,18 @@ internal class PeriodeTest { fun `overlappende periode`() { assertNull((1.januar til 3.januar).overlappendePeriode(4.januar til 5.januar)) assertNull((4.januar til 5.januar).overlappendePeriode(1.januar til 3.januar)) - assertEquals(3.januar til 5.januar, ((1.januar til 10.januar).overlappendePeriode(3.januar til 5.januar))) - assertEquals(3.januar til 5.januar, ((1.januar til 5.januar).overlappendePeriode(3.januar til 10.januar))) - assertEquals(3.januar til 5.januar, ((3.januar til 10.januar).overlappendePeriode(1.januar til 5.januar))) + assertEquals( + 3.januar til 5.januar, + ((1.januar til 10.januar).overlappendePeriode(3.januar til 5.januar)) + ) + assertEquals( + 3.januar til 5.januar, + ((1.januar til 5.januar).overlappendePeriode(3.januar til 10.januar)) + ) + assertEquals( + 3.januar til 5.januar, + ((3.januar til 10.januar).overlappendePeriode(1.januar til 5.januar)) + ) } @Test @@ -257,13 +266,32 @@ internal class PeriodeTest { @Test fun `slår sammen dager`() { assertTrue(emptyList().grupperSammenhengendePerioder().isEmpty()) - assertEquals(listOf(1.januar til 1.januar), listOf(1.januar, 1.januar).grupperSammenhengendePerioder()) - assertEquals(listOf(1.januar til 1.januar), listOf(1.januar).grupperSammenhengendePerioder()) - assertEquals(listOf(1.januar til 2.januar), listOf(2.januar, 1.januar).grupperSammenhengendePerioder()) - assertEquals(listOf(1.januar til 1.januar, 3.januar til 3.januar), listOf(1.januar, 3.januar).grupperSammenhengendePerioder()) + assertEquals( + listOf(1.januar til 1.januar), + listOf(1.januar, 1.januar).grupperSammenhengendePerioder() + ) + assertEquals( + listOf(1.januar til 1.januar), + listOf(1.januar).grupperSammenhengendePerioder() + ) + assertEquals( + listOf(1.januar til 2.januar), + listOf(2.januar, 1.januar).grupperSammenhengendePerioder() + ) + assertEquals( + listOf(1.januar til 1.januar, 3.januar til 3.januar), + listOf(1.januar, 3.januar).grupperSammenhengendePerioder() + ) assertEquals( listOf(1.januar til 5.januar, 8.januar til 8.januar), - listOf(1.januar, 2.januar, 3.januar, 4.januar, 5.januar, 8.januar).grupperSammenhengendePerioder() + listOf( + 1.januar, + 2.januar, + 3.januar, + 4.januar, + 5.januar, + 8.januar + ).grupperSammenhengendePerioder() ) } @@ -304,7 +332,13 @@ internal class PeriodeTest { fun `perioder som overlapper`() { assertFalse(listOf().overlapper()) assertFalse(listOf(1.januar til 31.januar).overlapper()) - assertFalse(listOf(1.desember(2017) til 31.desember(2017), 1.januar til 31.januar, 1.februar til 28.februar).overlapper()) + assertFalse( + listOf( + 1.desember(2017) til 31.desember(2017), + 1.januar til 31.januar, + 1.februar til 28.februar + ).overlapper() + ) assertTrue(listOf(1.desember(2017) til 1.januar, 1.januar til 31.januar).overlapper()) assertTrue(listOf(1.januar til 31.januar, 31.januar til 28.februar).overlapper()) assertTrue(listOf(1.januar til LocalDate.MAX, 1.februar til LocalDate.MAX).overlapper()) @@ -322,7 +356,10 @@ internal class PeriodeTest { @Test fun `omsluttende periode`() { assertNull(emptyList().omsluttendePeriode) - assertEquals(1.januar til 31.januar, listOf(1.januar, 5.januar, 31.januar).omsluttendePeriode) + assertEquals( + 1.januar til 31.januar, + listOf(1.januar, 5.januar, 31.januar).omsluttendePeriode + ) assertEquals(1.januar til 31.januar, listOf(31.januar, 1.januar).omsluttendePeriode) assertEquals(1.januar til 31.januar, (1.januar til 31.januar).omsluttendePeriode) } @@ -367,9 +404,18 @@ internal class PeriodeTest { assertEquals(emptyList(), periode.trim(4.januar til 21.januar)) // trimmer perioden i to deler - assertEquals(listOf(5.januar.somPeriode(), 20.januar.somPeriode()), periode.trim(6.januar til 19.januar)) - assertEquals(listOf(5.januar til 9.januar, 16.januar til 20.januar), periode.trim(10.januar til 15.januar)) - assertEquals(listOf(5.januar til 13.januar, 15.januar til 20.januar), periode.trim(14.januar.somPeriode())) + assertEquals( + listOf(5.januar.somPeriode(), 20.januar.somPeriode()), + periode.trim(6.januar til 19.januar) + ) + assertEquals( + listOf(5.januar til 9.januar, 16.januar til 20.januar), + periode.trim(10.januar til 15.januar) + ) + assertEquals( + listOf(5.januar til 13.januar, 15.januar til 20.januar), + periode.trim(14.januar.somPeriode()) + ) // trimmer bort snute assertEquals(listOf(20.januar.somPeriode()), periode.trim(4.januar til 19.januar)) @@ -386,8 +432,14 @@ internal class PeriodeTest { fun `legger til en ny periode i en liste`() { val perioden = 5.januar til 10.januar assertEquals(listOf(perioden), emptyList().merge(perioden)) - assertEquals(listOf(4.januar.somPeriode(), 5.januar til 10.januar, 11.januar.somPeriode()), listOf(4.januar til 11.januar).merge(perioden)) - assertEquals(listOf(1.januar til 4.januar, 5.januar til 10.januar, 11.januar til 12.januar), listOf(11.januar til 12.januar, 1.januar til 5.januar).merge(perioden)) + assertEquals( + listOf(4.januar.somPeriode(), 5.januar til 10.januar, 11.januar.somPeriode()), + listOf(4.januar til 11.januar).merge(perioden) + ) + assertEquals( + listOf(1.januar til 4.januar, 5.januar til 10.januar, 11.januar til 12.januar), + listOf(11.januar til 12.januar, 1.januar til 5.januar).merge(perioden) + ) } @Test @@ -408,7 +460,10 @@ internal class PeriodeTest { assertTrue(listOf(januar, februar).lik(listOf(januar, februar))) assertFalse(listOf(januar, februar).lik(listOf(januar, 1.februar til 27.februar))) assertTrue((januar.map { it til it }).lik(januar.shuffled().map { it til it })) - assertFalse(((1.januar til 30.januar).map { it til it }).lik(januar.shuffled().map { it til it })) + assertFalse( + ((1.januar til 30.januar).map { it til it }).lik( + januar.shuffled().map { it til it }) + ) assertTrue(emptyList().lik(emptyList())) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/SykmeldingTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/SykmeldingTest.kt index d249c87732..80fa554d34 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/SykmeldingTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/SykmeldingTest.kt @@ -29,35 +29,44 @@ internal class SykmeldingTest { Aktivitetslogg(), listOf(1.januar til 2.januar) ).also { result -> - assertEquals(listOf( - 1.januar til 2.januar, - 10.januar til 15.januar - ), result) + assertEquals( + listOf( + 1.januar til 2.januar, + 10.januar til 15.januar + ), result + ) } sykmelding.oppdaterSykmeldingsperioder( Aktivitetslogg(), listOf(17.januar til 20.januar) ).also { result -> - assertEquals(listOf( - 10.januar til 15.januar, - 17.januar til 20.januar - ), result) + assertEquals( + listOf( + 10.januar til 15.januar, + 17.januar til 20.januar + ), result + ) } - sykmelding.oppdaterSykmeldingsperioder(Aktivitetslogg(), listOf( + sykmelding.oppdaterSykmeldingsperioder( + Aktivitetslogg(), listOf( 1.januar til 2.januar, 6.januar til 10.januar, 15.januar til 20.januar, 23.januar til 25.januar - )).also { result -> - assertEquals(listOf( - 1.januar til 2.januar, - 6.januar til 20.januar, - 23.januar til 25.januar - ), result) + ) + ).also { result -> + assertEquals( + listOf( + 1.januar til 2.januar, + 6.januar til 20.januar, + 23.januar til 25.januar + ), result + ) } } + @Test fun `oppdaterer perioder - trimmet dager - en dag igjen`() { sykmelding(Sykmeldingsperiode(10.januar, 15.januar)) @@ -66,6 +75,7 @@ internal class SykmeldingTest { assertEquals(listOf(15.januar til 15.januar), result) } } + @Test fun `oppdaterer perioder - trimmet forbi`() { sykmelding(Sykmeldingsperiode(10.januar, 15.januar)) diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/S\303\270knadTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/S\303\270knadTest.kt" index 038d35527f..ab39bfb98d 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/S\303\270knadTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/S\303\270knadTest.kt" @@ -55,11 +55,13 @@ internal class SøknadTest { private lateinit var aktivitetslogg: Aktivitetslogg private lateinit var søknad: Søknad - private val jurist = BehandlingSubsumsjonslogg(EmptyLog, listOf( + private val jurist = BehandlingSubsumsjonslogg( + EmptyLog, listOf( Subsumsjonskontekst(KontekstType.Fødselsnummer, "fnr"), Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "orgnr"), Subsumsjonskontekst(KontekstType.Vedtaksperiode, "${UUID.randomUUID()}"), - )) + ) + ) @Test fun `søknad med bare sykdom`() { @@ -84,38 +86,89 @@ internal class SøknadTest { @Test fun `søknad med overlappende ferie og permisjon`() { - søknad(Sykdom(1.januar, 1.januar, 100.prosent), Ferie(1.januar, 1.januar), Permisjon(1.januar, 1.januar)) + søknad( + Sykdom(1.januar, 1.januar, 100.prosent), + Ferie(1.januar, 1.januar), + Permisjon(1.januar, 1.januar) + ) assertEquals(Dag.Feriedag::class, søknad.sykdomstidslinje()[1.januar]::class) } @Test fun `søknad med ferie som inneholder utlandsopphold`() { - `utlandsopphold og ferie`(Ferie(2.januar, 4.januar), Utlandsopphold(2.januar, 4.januar), false) - `utlandsopphold og ferie`(Ferie(2.januar, 6.januar), Utlandsopphold(2.januar, 4.januar), false) - `utlandsopphold og ferie`(Ferie(1.januar, 4.januar), Utlandsopphold(2.januar, 4.januar), false) - `utlandsopphold og ferie`(Ferie(1.januar, 6.januar), Utlandsopphold(2.januar, 4.januar), false) - `utlandsopphold og ferie`(Ferie(1.januar, 3.januar), Utlandsopphold(2.januar, 4.januar), true) - `utlandsopphold og ferie`(Ferie(3.januar, 7.januar), Utlandsopphold(2.januar, 4.januar), true) - `utlandsopphold og ferie`(Ferie(1.januar, 1.januar), Utlandsopphold(2.januar, 4.januar), true) - `utlandsopphold og ferie`(Ferie(5.januar, 9.januar), Utlandsopphold(2.januar, 4.januar), true) + `utlandsopphold og ferie`( + Ferie(2.januar, 4.januar), + Utlandsopphold(2.januar, 4.januar), + false + ) + `utlandsopphold og ferie`( + Ferie(2.januar, 6.januar), + Utlandsopphold(2.januar, 4.januar), + false + ) + `utlandsopphold og ferie`( + Ferie(1.januar, 4.januar), + Utlandsopphold(2.januar, 4.januar), + false + ) + `utlandsopphold og ferie`( + Ferie(1.januar, 6.januar), + Utlandsopphold(2.januar, 4.januar), + false + ) + `utlandsopphold og ferie`( + Ferie(1.januar, 3.januar), + Utlandsopphold(2.januar, 4.januar), + true + ) + `utlandsopphold og ferie`( + Ferie(3.januar, 7.januar), + Utlandsopphold(2.januar, 4.januar), + true + ) + `utlandsopphold og ferie`( + Ferie(1.januar, 1.januar), + Utlandsopphold(2.januar, 4.januar), + true + ) + `utlandsopphold og ferie`( + Ferie(5.januar, 9.januar), + Utlandsopphold(2.januar, 4.januar), + true + ) } - private fun `utlandsopphold og ferie`(ferie: Ferie, utlandsopphold: Utlandsopphold, skalHaWarning: Boolean) { + private fun `utlandsopphold og ferie`( + ferie: Ferie, + utlandsopphold: Utlandsopphold, + skalHaWarning: Boolean + ) { søknad(Sykdom(1.januar, 10.januar, 100.prosent), ferie, utlandsopphold) - assertEquals(skalHaWarning, søknad.valider(aktivitetslogg, null, jurist).harVarslerEllerVerre()) + assertEquals( + skalHaWarning, + søknad.valider(aktivitetslogg, null, jurist).harVarslerEllerVerre() + ) assertEquals(10, søknad.sykdomstidslinje().count()) } @Test fun `17 år på søknadstidspunkt gir error`() { - søknad(Sykdom(1.januar, 10.januar, 100.prosent), hendelsefabrikk = fyller18År2NovemberHendelsefabrikk, sendtTilNAVEllerArbeidsgiver = 1.november) + søknad( + Sykdom(1.januar, 10.januar, 100.prosent), + hendelsefabrikk = fyller18År2NovemberHendelsefabrikk, + sendtTilNAVEllerArbeidsgiver = 1.november + ) assertTrue(søknad.forUng(aktivitetslogg, november2.alder)) assertTrue(aktivitetslogg.harFunksjonelleFeilEllerVerre()) } @Test fun `18 år på søknadstidspunkt gir ikke error`() { - søknad(Sykdom(1.januar, 10.januar, 100.prosent), hendelsefabrikk = fyller18År2NovemberHendelsefabrikk, sendtTilNAVEllerArbeidsgiver = 2.november) + søknad( + Sykdom(1.januar, 10.januar, 100.prosent), + hendelsefabrikk = fyller18År2NovemberHendelsefabrikk, + sendtTilNAVEllerArbeidsgiver = 2.november + ) assertFalse(søknad.forUng(aktivitetslogg, november2.alder)) assertFalse(aktivitetslogg.harFunksjonelleFeilEllerVerre()) } @@ -137,7 +190,12 @@ internal class SøknadTest { @Test fun `søknad med papirsykmelding utenfor søknadsperioden`() { - assertThrows { søknad(Sykdom(1.januar, 10.januar, 100.prosent), Papirsykmelding(11.januar, 16.januar)) } + assertThrows { + søknad( + Sykdom(1.januar, 10.januar, 100.prosent), + Papirsykmelding(11.januar, 16.januar) + ) + } } @Test @@ -169,17 +227,32 @@ internal class SøknadTest { @Test fun `ferie etter sykdomsvindu - ikke et realistisk scenario`() { - assertThrows { søknad(Sykdom(1.januar, 10.januar, 100.prosent), Ferie(2.januar, 16.januar)) } + assertThrows { + søknad( + Sykdom(1.januar, 10.januar, 100.prosent), + Ferie(2.januar, 16.januar) + ) + } } @Test fun `permisjon ligger utenfor sykdomsvindu`() { - assertThrows { søknad(Sykdom(1.januar, 10.januar, 100.prosent), Permisjon(2.januar, 16.januar)) } + assertThrows { + søknad( + Sykdom(1.januar, 10.januar, 100.prosent), + Permisjon(2.januar, 16.januar) + ) + } } @Test fun `arbeidag ligger utenfor sykdomsvindu`() { - assertThrows { søknad(Sykdom(1.januar, 10.januar, 100.prosent), Arbeid(2.januar, 16.januar)) } + assertThrows { + søknad( + Sykdom(1.januar, 10.januar, 100.prosent), + Arbeid(2.januar, 16.januar) + ) + } } @Test @@ -241,7 +314,10 @@ internal class SøknadTest { @ParameterizedTest @ValueSource(strings = ["UGYLDIG_TILBAKEDATERING", "TILBAKEDATERING_KREVER_FLERE_OPPLYSNINGER", "UNDER_BEHANDLING", "DELVIS_GODKJENT"]) fun `søknad med tilbakedateringmerknad får warning`(merknad: String) { - søknad(Sykdom(1.januar, 31.januar, 20.prosent, 80.prosent), merknaderFraSykmelding = listOf(Merknad(merknad))) + søknad( + Sykdom(1.januar, 31.januar, 20.prosent, 80.prosent), + merknaderFraSykmelding = listOf(Merknad(merknad)) + ) søknad.valider(aktivitetslogg, null, jurist) assertTrue(aktivitetslogg.harVarslerEllerVerre()) aktivitetslogg.assertVarsel(RV_SØ_3) @@ -267,14 +343,20 @@ internal class SøknadTest { @Test fun `ikke jobbet siste 14 dager i annet arbeidsforhold`() { - søknad(Sykdom(1.januar, 20.januar, 100.prosent), ikkeJobbetIDetSisteFraAnnetArbeidsforhold = true) + søknad( + Sykdom(1.januar, 20.januar, 100.prosent), + ikkeJobbetIDetSisteFraAnnetArbeidsforhold = true + ) søknad.valider(aktivitetslogg, null, EmptyLog) aktivitetslogg.assertVarsel(RV_SØ_44) } @Test fun `jobbet siste 14 dager i annet arbeidsforhold`() { - søknad(Sykdom(1.januar, 20.januar, 100.prosent), ikkeJobbetIDetSisteFraAnnetArbeidsforhold = false) + søknad( + Sykdom(1.januar, 20.januar, 100.prosent), + ikkeJobbetIDetSisteFraAnnetArbeidsforhold = false + ) søknad.valider(aktivitetslogg, null, EmptyLog) aktivitetslogg.assertIngenVarsler() } @@ -294,7 +376,9 @@ internal class SøknadTest { søknad = hendelsefabrikk.lagSøknad( perioder = perioder, andreInntektskilder = andreInntektskilder, - sendtTilNAVEllerArbeidsgiver = sendtTilNAVEllerArbeidsgiver ?: Søknadsperiode.søknadsperiode(perioder.toList())?.endInclusive ?: LocalDate.now(), + sendtTilNAVEllerArbeidsgiver = sendtTilNAVEllerArbeidsgiver + ?: Søknadsperiode.søknadsperiode(perioder.toList())?.endInclusive + ?: LocalDate.now(), sykmeldingSkrevet = LocalDateTime.now(), ikkeJobbetIDetSisteFraAnnetArbeidsforhold = ikkeJobbetIDetSisteFraAnnetArbeidsforhold, merknaderFraSykmelding = merknaderFraSykmelding, diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/inntektsmelding/InntektsmeldingMatchingTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/inntektsmelding/InntektsmeldingMatchingTest.kt index fe07ae315e..328c20afa3 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/inntektsmelding/InntektsmeldingMatchingTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/inntektsmelding/InntektsmeldingMatchingTest.kt @@ -125,7 +125,7 @@ internal class InntektsmeldingMatchingTest { @Test fun `Har blitt håndtert av`() { - val vedtaksperiode1 = 2.januar til 15.januar + val vedtaksperiode1 = 2.januar til 15.januar val dager = inntektsmelding(1.januar, 1.januar til 16.januar) assertTrue(dager.skalHåndteresAv(vedtaksperiode1)) @@ -143,10 +143,23 @@ internal class InntektsmeldingMatchingTest { val arbeidsgiverperiode = Arbeidsgiverperiode(listOf(1.januar til 16.januar)) val dager = inntektsmelding(1.februar, 1.februar til 16.februar) - assertFalse(dager.skalHåndteresAvRevurdering(vedtaksperiode1, sammenhengendePeriode, arbeidsgiverperiode)) - assertTrue(dager.skalHåndteresAvRevurdering(vedtaksperiode2, sammenhengendePeriode, arbeidsgiverperiode)) + assertFalse( + dager.skalHåndteresAvRevurdering( + vedtaksperiode1, + sammenhengendePeriode, + arbeidsgiverperiode + ) + ) + assertTrue( + dager.skalHåndteresAvRevurdering( + vedtaksperiode2, + sammenhengendePeriode, + arbeidsgiverperiode + ) + ) - val håndtertDagerFraRevurdering = dager.erKorrigeringForGammel(Aktivitetslogg(), arbeidsgiverperiode) + val håndtertDagerFraRevurdering = + dager.erKorrigeringForGammel(Aktivitetslogg(), arbeidsgiverperiode) assertTrue(håndtertDagerFraRevurdering) } @@ -158,26 +171,52 @@ internal class InntektsmeldingMatchingTest { val arbeidsgiverperiode = Arbeidsgiverperiode(listOf(10.januar til 26.januar)) val dager = inntektsmelding(1.februar, 1.februar til 16.februar) - assertTrue(dager.skalHåndteresAvRevurdering(vedtaksperiode1, sammenhengendePeriode, arbeidsgiverperiode)) - assertTrue(dager.skalHåndteresAvRevurdering(vedtaksperiode2, sammenhengendePeriode, arbeidsgiverperiode)) + assertTrue( + dager.skalHåndteresAvRevurdering( + vedtaksperiode1, + sammenhengendePeriode, + arbeidsgiverperiode + ) + ) + assertTrue( + dager.skalHåndteresAvRevurdering( + vedtaksperiode2, + sammenhengendePeriode, + arbeidsgiverperiode + ) + ) - val håndtertDagerFraRevurdering = dager.erKorrigeringForGammel(Aktivitetslogg(), arbeidsgiverperiode) + val håndtertDagerFraRevurdering = + dager.erKorrigeringForGammel(Aktivitetslogg(), arbeidsgiverperiode) assertFalse(håndtertDagerFraRevurdering) } @Test fun `Har ikke blitt håndtert av revurdering mindre enn 10 dager med gap`() { - val vedtaksperiode1 = 10.januar til 31.januar - val vedtaksperiode2 = 2.februar til 28.februar + val vedtaksperiode1 = 10.januar til 31.januar + val vedtaksperiode2 = 2.februar til 28.februar val sammenhengendePeriode1 = 10.januar til 31.januar val sammenhengendePeriode2 = 2.februar til 28.februar val arbeidsgiverperiode = Arbeidsgiverperiode(listOf(10.januar til 26.januar)) val dager = inntektsmelding(2.februar, 2.februar til 17.februar) - assertFalse(dager.skalHåndteresAvRevurdering(vedtaksperiode1, sammenhengendePeriode1, arbeidsgiverperiode)) - assertTrue(dager.skalHåndteresAvRevurdering(vedtaksperiode2, sammenhengendePeriode2, arbeidsgiverperiode)) + assertFalse( + dager.skalHåndteresAvRevurdering( + vedtaksperiode1, + sammenhengendePeriode1, + arbeidsgiverperiode + ) + ) + assertTrue( + dager.skalHåndteresAvRevurdering( + vedtaksperiode2, + sammenhengendePeriode2, + arbeidsgiverperiode + ) + ) - val håndtertDagerFraRevurdering = dager.erKorrigeringForGammel(Aktivitetslogg(), arbeidsgiverperiode) + val håndtertDagerFraRevurdering = + dager.erKorrigeringForGammel(Aktivitetslogg(), arbeidsgiverperiode) assertFalse(håndtertDagerFraRevurdering) } @@ -233,7 +272,10 @@ internal class InntektsmeldingMatchingTest { assertEquals(1.januar til 3.januar, dager.håndter(vedtaksperiode1)) assertEquals(4.januar til 9.januar, dager.håndter(vedtaksperiode2)) assertEquals(10.januar til 12.januar, dager.håndter(vedtaksperiode3)) - assertEquals(setOf(13.januar, 14.januar, 15.januar, 16.januar), dager.inspektør.gjenståendeDager) + assertEquals( + setOf(13.januar, 14.januar, 15.januar, 16.januar), + dager.inspektør.gjenståendeDager + ) } @Test @@ -262,7 +304,7 @@ internal class InntektsmeldingMatchingTest { beregnetInntekt = 400.månedlig, førsteFraværsdag = førsteFraværsdag ) - inntektsmelding.valider(object: Inntektsmelding.Valideringsgrunnlag { + inntektsmelding.valider(object : Inntektsmelding.Valideringsgrunnlag { override fun vedtaksperiode(vedtaksperiodeId: UUID) = null override fun inntektsmeldingIkkeHåndtert(inntektsmelding: Inntektsmelding) {} }, Aktivitetslogg()) @@ -270,4 +312,4 @@ internal class InntektsmeldingMatchingTest { return inntektsmelding.dager() } } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/inntektsmelding/Inntektsmeldingverkt\303\270y.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/inntektsmelding/Inntektsmeldingverkt\303\270y.kt" index d1d4e36745..1a9dcee984 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/inntektsmelding/Inntektsmeldingverkt\303\270y.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/hendelser/inntektsmelding/Inntektsmeldingverkt\303\270y.kt" @@ -5,9 +5,28 @@ import java.util.UUID import no.nav.helse.hendelser.Inntektsmelding typealias Avsenderutleder = (vedtaksperiodeId: UUID, inntektsdato: LocalDate, førsteFraværsdag: LocalDate?) -> Inntektsmelding.Avsendersystem -val NAV_NO: Avsenderutleder = { vedtaksperiodeId: UUID, inntektsdato: LocalDate, _ -> Inntektsmelding.Avsendersystem.NavPortal(vedtaksperiodeId, inntektsdato, true) } -val NAV_NO_SELVBESTEMT: Avsenderutleder = { vedtaksperiodeId: UUID, inntektsdato: LocalDate, _ -> Inntektsmelding.Avsendersystem.NavPortal(vedtaksperiodeId, inntektsdato, false) } -val LPS: Avsenderutleder = { _, _, førsteFraværsdag -> Inntektsmelding.Avsendersystem.LPS(førsteFraværsdag) } -val ALTINN: Avsenderutleder = { _, _, førsteFraværsdag -> Inntektsmelding.Avsendersystem.Altinn(førsteFraværsdag) } -fun erNavPortal(avsenderutleder: Avsenderutleder) = avsenderutleder(UUID.randomUUID(), LocalDate.EPOCH, null) is Inntektsmelding.Avsendersystem.NavPortal \ No newline at end of file +val NAV_NO: Avsenderutleder = { vedtaksperiodeId: UUID, inntektsdato: LocalDate, _ -> + Inntektsmelding.Avsendersystem.NavPortal( + vedtaksperiodeId, + inntektsdato, + true + ) +} +val NAV_NO_SELVBESTEMT: Avsenderutleder = { vedtaksperiodeId: UUID, inntektsdato: LocalDate, _ -> + Inntektsmelding.Avsendersystem.NavPortal( + vedtaksperiodeId, + inntektsdato, + false + ) +} +val LPS: Avsenderutleder = + { _, _, førsteFraværsdag -> Inntektsmelding.Avsendersystem.LPS(førsteFraværsdag) } +val ALTINN: Avsenderutleder = + { _, _, førsteFraværsdag -> Inntektsmelding.Avsendersystem.Altinn(førsteFraværsdag) } + +fun erNavPortal(avsenderutleder: Avsenderutleder) = avsenderutleder( + UUID.randomUUID(), + LocalDate.EPOCH, + null +) is Inntektsmelding.Avsendersystem.NavPortal diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/ArbeidsgiverInntektsopplysningInspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/ArbeidsgiverInntektsopplysningInspekt\303\270r.kt" index bdb286e449..8f8c82d581 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/ArbeidsgiverInntektsopplysningInspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/ArbeidsgiverInntektsopplysningInspekt\303\270r.kt" @@ -2,11 +2,15 @@ package no.nav.helse.inspectors import no.nav.helse.person.inntekt.ArbeidsgiverInntektsopplysning -internal val ArbeidsgiverInntektsopplysning.inspektør get() = ArbeidsgiverInntektsopplysningInspektør(this) +internal val ArbeidsgiverInntektsopplysning.inspektør + get() = ArbeidsgiverInntektsopplysningInspektør( + this + ) internal class ArbeidsgiverInntektsopplysningInspektør(arbeidsgiverInntektsopplysning: ArbeidsgiverInntektsopplysning) { val orgnummer = arbeidsgiverInntektsopplysning.orgnummer val inntektsopplysning = arbeidsgiverInntektsopplysning.inntektsopplysning val gjelder = arbeidsgiverInntektsopplysning.gjelder - val refusjonsopplysninger = arbeidsgiverInntektsopplysning.refusjonsopplysninger.validerteRefusjonsopplysninger -} \ No newline at end of file + val refusjonsopplysninger = + arbeidsgiverInntektsopplysning.refusjonsopplysninger.validerteRefusjonsopplysninger +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/BehandlingInspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/BehandlingInspekt\303\270r.kt" index 6ab2db544d..92de3fc36a 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/BehandlingInspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/BehandlingInspekt\303\270r.kt" @@ -37,7 +37,12 @@ internal class BehandlingInspektør(view: BehandlingView) { tilstand = view.tilstand, vedtakFattet = view.vedtakFattet, avsluttet = view.avsluttet, - kilde = Behandling.Behandlingkilde(view.kilde.meldingsreferanseId, view.kilde.innsendt, view.kilde.registert, view.kilde.avsender) + kilde = Behandling.Behandlingkilde( + view.kilde.meldingsreferanseId, + view.kilde.innsendt, + view.kilde.registert, + view.kilde.avsender + ) ) internal val arbeidsgiverperiode get() = behandling.endringer.last().arbeidsgiverperiode @@ -68,10 +73,10 @@ internal class BehandlingInspektør(view: BehandlingView) { ) data class Behandlingkilde( - val meldingsreferanseId: UUID, - val innsendt: LocalDateTime, - val registert: LocalDateTime, - val avsender: Avsender + val meldingsreferanseId: UUID, + val innsendt: LocalDateTime, + val registert: LocalDateTime, + val avsender: Avsender ) } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/DagerFraInntektsmeldingInspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/DagerFraInntektsmeldingInspekt\303\270r.kt" index ae77214e08..7fb6243a47 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/DagerFraInntektsmeldingInspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/DagerFraInntektsmeldingInspekt\303\270r.kt" @@ -6,7 +6,8 @@ import no.nav.helse.hendelser.Periode.Companion.omsluttendePeriode import no.nav.helse.hendelser.DagerFraInntektsmelding internal val DagerFraInntektsmelding.inspektør get() = DagerFraInntektsmeldingInspektør(this) + internal class DagerFraInntektsmeldingInspektør(dager: DagerFraInntektsmelding) { val gjenståendeDager: Set = dager.gjenståendeDager val periode: Periode? = gjenståendeDager.omsluttendePeriode -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/InntektsgrunnlagInspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/InntektsgrunnlagInspekt\303\270r.kt" index 4dcaa7ea5c..742c782cd4 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/InntektsgrunnlagInspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/InntektsgrunnlagInspekt\303\270r.kt" @@ -16,8 +16,10 @@ internal class InntektsgrunnlagInspektør(view: InntektsgrunnlagView) { val omregnetÅrsinntekt = view.omregnetÅrsinntekt val `6G` = view.`6G` val deaktiverteArbeidsforhold = view.deaktiverteArbeidsforhold - val arbeidsgiverInntektsopplysningerPerArbeidsgiver = view.arbeidsgiverInntektsopplysninger.associateBy { it.orgnummer } - val inntektskilde = if (view.arbeidsgiverInntektsopplysninger.size > 1) UtbetalingInntektskilde.FLERE_ARBEIDSGIVERE else UtbetalingInntektskilde.EN_ARBEIDSGIVER + val arbeidsgiverInntektsopplysningerPerArbeidsgiver = + view.arbeidsgiverInntektsopplysninger.associateBy { it.orgnummer } + val inntektskilde = + if (view.arbeidsgiverInntektsopplysninger.size > 1) UtbetalingInntektskilde.FLERE_ARBEIDSGIVERE else UtbetalingInntektskilde.EN_ARBEIDSGIVER val arbeidsgiverInntektsopplysninger = view.arbeidsgiverInntektsopplysninger val tilkommendeInntekter = view.tilkommendeInntekter } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/InntektshistorikkInspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/InntektshistorikkInspekt\303\270r.kt" index 65cf95329b..70a68d3784 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/InntektshistorikkInspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/InntektshistorikkInspekt\303\270r.kt" @@ -7,7 +7,8 @@ import no.nav.helse.økonomi.Inntekt internal class InntektshistorikkInspektør(inntektshistorikk: InntektshistorikkView) { - private val inntektsopplysninger = inntektshistorikk.inntekter.map { Opplysning(it.dato, it.beløp) } + private val inntektsopplysninger = + inntektshistorikk.inntekter.map { Opplysning(it.dato, it.beløp) } internal val size get() = inntektsopplysninger.size internal val inntektsdatoer get() = inntektsopplysninger.map { it.dato } @@ -16,5 +17,6 @@ internal class InntektshistorikkInspektør(inntektshistorikk: InntektshistorikkV val sykepengegrunnlag: Inntekt, ) - internal fun omregnetÅrsinntekt(dato: LocalDate) = inntektsopplysninger.firstOrNull { it.dato == dato } + internal fun omregnetÅrsinntekt(dato: LocalDate) = + inntektsopplysninger.firstOrNull { it.dato == dato } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/OpptjeningInspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/OpptjeningInspekt\303\270r.kt" index f1999a442b..00a6c48029 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/OpptjeningInspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/OpptjeningInspekt\303\270r.kt" @@ -6,5 +6,13 @@ import no.nav.helse.person.OpptjeningView internal val Opptjening.inspektør get() = OpptjeningInspektør(this.view()) internal class OpptjeningInspektør(view: OpptjeningView) { - val arbeidsforhold = view.arbeidsforhold.groupBy(keySelector = { it.orgnummer }) { it.ansattPerioder.map { Triple(it.ansattFom, it.ansattTom, it.deaktivert) } } -} \ No newline at end of file + val arbeidsforhold = view.arbeidsforhold.groupBy(keySelector = { it.orgnummer }) { + it.ansattPerioder.map { + Triple( + it.ansattFom, + it.ansattTom, + it.deaktivert + ) + } + } +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/PersonInspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/PersonInspekt\303\270r.kt" index 7d5d6f4346..8481ddf945 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/PersonInspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/PersonInspekt\303\270r.kt" @@ -30,22 +30,29 @@ internal class PersonInspektør(person: Person) { internal val utbetaltIInfotrygd get() = infotrygdhistorikk.betaltePerioder() - internal fun vedtaksperioder() = arbeidsgivere.mapValues { it.value.view().aktiveVedtaksperioder } - internal fun vedtaksperiode(vedtaksperiodeId: UUID) = arbeidsgivere.firstNotNullOf { (_, arbeidsgiver) -> - arbeidsgiver.view().aktiveVedtaksperioder.firstOrNull { vedtaksperiode -> - vedtaksperiode.inspektør.id == vedtaksperiodeId + internal fun vedtaksperioder() = + arbeidsgivere.mapValues { it.value.view().aktiveVedtaksperioder } + + internal fun vedtaksperiode(vedtaksperiodeId: UUID) = + arbeidsgivere.firstNotNullOf { (_, arbeidsgiver) -> + arbeidsgiver.view().aktiveVedtaksperioder.firstOrNull { vedtaksperiode -> + vedtaksperiode.inspektør.id == vedtaksperiodeId + } } - } - internal fun forkastetVedtaksperiode(vedtaksperiodeId: UUID) = arbeidsgivere.firstNotNullOf { (_, arbeidsgiver) -> - arbeidsgiver.view().forkastetVedtaksperioder.firstOrNull { vedtaksperiode -> - vedtaksperiode.inspektør.id == vedtaksperiodeId + + internal fun forkastetVedtaksperiode(vedtaksperiodeId: UUID) = + arbeidsgivere.firstNotNullOf { (_, arbeidsgiver) -> + arbeidsgiver.view().forkastetVedtaksperioder.firstOrNull { vedtaksperiode -> + vedtaksperiode.inspektør.id == vedtaksperiodeId + } } - } + internal fun sisteVedtaksperiodeTilstander() = arbeidsgivere .flatMap { (_, arbeidsgiver) -> arbeidsgiver.view().aktiveVedtaksperioder.map { it.id to it.tilstand } } .toMap() internal fun arbeidsgivere() = arbeidsgivere.keys.toList() internal fun arbeidsgiver(orgnummer: String) = arbeidsgivere[orgnummer] - internal fun harArbeidsgiver(organisasjonsnummer: String) = organisasjonsnummer in arbeidsgivere.keys + internal fun harArbeidsgiver(organisasjonsnummer: String) = + organisasjonsnummer in arbeidsgivere.keys } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/RefusjonsopplysningInspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/RefusjonsopplysningInspekt\303\270r.kt" index c8572eed5d..daeac8b4e0 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/RefusjonsopplysningInspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/RefusjonsopplysningInspekt\303\270r.kt" @@ -2,7 +2,10 @@ package no.nav.helse.inspectors import no.nav.helse.person.inntekt.Refusjonsopplysning -internal val Refusjonsopplysning.Refusjonsopplysninger.inspektør get() = RefusjonsopplysningerInspektør(this) +internal val Refusjonsopplysning.Refusjonsopplysninger.inspektør + get() = RefusjonsopplysningerInspektør( + this + ) internal class RefusjonsopplysningerInspektør(refusjonsopplysninger: Refusjonsopplysning.Refusjonsopplysninger) { val refusjonsopplysninger = refusjonsopplysninger.validerteRefusjonsopplysninger @@ -14,4 +17,4 @@ internal class RefusjonsopplysningInspektør(refusjonsopplysning: Refusjonsopply val meldingsreferanseId = refusjonsopplysning.meldingsreferanseId val beløp = refusjonsopplysning.beløp val periode = refusjonsopplysning.periode -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/SubsumsjonInspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/SubsumsjonInspekt\303\270r.kt" index 96271bfaa0..468ac02da3 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/SubsumsjonInspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/SubsumsjonInspekt\303\270r.kt" @@ -34,23 +34,26 @@ internal class SubsumsjonInspektør(jurist: SubsumsjonsListLog) { val input: Map, val output: Map ) { - fun vedtaksperiodeIdFraSporing(): UUID = UUID.fromString(sporing.first { it.type == KontekstType.Vedtaksperiode }.verdi) + fun vedtaksperiodeIdFraSporing(): UUID = + UUID.fromString(sporing.first { it.type == KontekstType.Vedtaksperiode }.verdi) } init { jurist.subsumsjoner.forEach { subsumsjon -> - subsumsjoner.add(Subsumsjon( - lovverk = subsumsjon.lovverk, - paragraf = subsumsjon.paragraf, - ledd = subsumsjon.ledd, - punktum = subsumsjon.punktum, - bokstav = subsumsjon.bokstav, - versjon = subsumsjon.versjon, - sporing = subsumsjon.kontekster, - utfall = subsumsjon.utfall, - input = subsumsjon.input, - output = subsumsjon.output - )) + subsumsjoner.add( + Subsumsjon( + lovverk = subsumsjon.lovverk, + paragraf = subsumsjon.paragraf, + ledd = subsumsjon.ledd, + punktum = subsumsjon.punktum, + bokstav = subsumsjon.bokstav, + versjon = subsumsjon.versjon, + sporing = subsumsjon.kontekster, + utfall = subsumsjon.utfall, + input = subsumsjon.input, + output = subsumsjon.output + ) + ) } } @@ -84,7 +87,16 @@ internal class SubsumsjonInspektør(jurist: SubsumsjonsListLog) { bokstav: Bokstav? = null, utfall: Utfall? = null, vedtaksperiodeId: UUID? = null - ) = finnSubsumsjoner(lovverk, paragraf, versjon, ledd, punktum, bokstav, utfall, vedtaksperiodeId).size + ) = finnSubsumsjoner( + lovverk, + paragraf, + versjon, + ledd, + punktum, + bokstav, + utfall, + vedtaksperiodeId + ).size internal fun assertBeregnet( paragraf: Paragraf, @@ -98,7 +110,20 @@ internal class SubsumsjonInspektør(jurist: SubsumsjonsListLog) { vedtaksperiodeId: IdInnhenter? = null, organisasjonsnummer: String = ORGNUMMER ) { - assertBeregnet(0, 1, paragraf, versjon, ledd, punktum, bokstav, input, output, sporing, vedtaksperiodeId, organisasjonsnummer) + assertBeregnet( + 0, + 1, + paragraf, + versjon, + ledd, + punktum, + bokstav, + input, + output, + sporing, + vedtaksperiodeId, + organisasjonsnummer + ) } internal fun assertBeregnet( @@ -116,18 +141,36 @@ internal class SubsumsjonInspektør(jurist: SubsumsjonsListLog) { organisasjonsnummer: String = ORGNUMMER, lovverk: String = "folketrygdloven" ) { - val resultat = finnSubsumsjoner(lovverk, paragraf, versjon, ledd, punktum, bokstav, VILKAR_BEREGNET, vedtaksperiodeId?.id(organisasjonsnummer)) - assertEquals(forventetAntall, resultat.size, "Forventer kun en subsumsjon. Subsumsjoner funnet: $resultat") + val resultat = finnSubsumsjoner( + lovverk, + paragraf, + versjon, + ledd, + punktum, + bokstav, + VILKAR_BEREGNET, + vedtaksperiodeId?.id(organisasjonsnummer) + ) + assertEquals( + forventetAntall, + resultat.size, + "Forventer kun en subsumsjon. Subsumsjoner funnet: $resultat" + ) val subsumsjon = resultat[index] sporing?.also { forventet -> assertEquals(forventet, subsumsjon.sporing) { - "Fant ikke forventet sporing. Har dette:\n${subsumsjon.sporing.joinToString(separator = "\n") { (key, value) -> - "$key: $value" - }}\n" + "Fant ikke forventet sporing. Har dette:\n${ + subsumsjon.sporing.joinToString(separator = "\n") { (key, value) -> + "$key: $value" + } + }\n" } } - assertEquals(VILKAR_BEREGNET, subsumsjon.utfall) { "Forventet oppfylt $paragraf $ledd $punktum" } + assertEquals( + VILKAR_BEREGNET, + subsumsjon.utfall + ) { "Forventet oppfylt $paragraf $ledd $punktum" } assertResultat(input, output, subsumsjon) } @@ -143,10 +186,26 @@ internal class SubsumsjonInspektør(jurist: SubsumsjonsListLog) { vedtaksperiodeId: IdInnhenter? = null, organisasjonsnummer: String = ORGNUMMER ) { - val resultat = finnSubsumsjoner(lovverk, paragraf, versjon, ledd, punktum, bokstav, VILKAR_OPPFYLT, vedtaksperiodeId = vedtaksperiodeId?.id(organisasjonsnummer)) - assertEquals(1, resultat.size, "Forventer kun en subsumsjon. Subsumsjoner funnet: $resultat") + val resultat = finnSubsumsjoner( + lovverk, + paragraf, + versjon, + ledd, + punktum, + bokstav, + VILKAR_OPPFYLT, + vedtaksperiodeId = vedtaksperiodeId?.id(organisasjonsnummer) + ) + assertEquals( + 1, + resultat.size, + "Forventer kun en subsumsjon. Subsumsjoner funnet: $resultat" + ) val subsumsjon = resultat.first() - assertEquals(VILKAR_OPPFYLT, subsumsjon.utfall) { "Forventet oppfylt $paragraf $ledd $punktum" } + assertEquals( + VILKAR_OPPFYLT, + subsumsjon.utfall + ) { "Forventet oppfylt $paragraf $ledd $punktum" } if (input == null && output == null) return assertResultat(input, output, subsumsjon) } @@ -166,9 +225,22 @@ internal class SubsumsjonInspektør(jurist: SubsumsjonsListLog) { organisasjonsnummer: String = ORGNUMMER, utfall: Utfall ) { - val resultat = finnSubsumsjoner(lovverk, paragraf, versjon, ledd, punktum, bokstav, utfall, vedtaksperiodeId = vedtaksperiodeId?.id(organisasjonsnummer)) + val resultat = finnSubsumsjoner( + lovverk, + paragraf, + versjon, + ledd, + punktum, + bokstav, + utfall, + vedtaksperiodeId = vedtaksperiodeId?.id(organisasjonsnummer) + ) val subsumsjon = resultat[index] - assertEquals(forventetAntall, resultat.size, "Forventer $forventetAntall subsumsjoner for vilkåret. Subsumsjoner funnet: ${resultat.size}") + assertEquals( + forventetAntall, + resultat.size, + "Forventer $forventetAntall subsumsjoner for vilkåret. Subsumsjoner funnet: ${resultat.size}" + ) assertEquals(utfall, subsumsjon.utfall) { "Forventet oppfylt $paragraf $ledd $punktum" } assertResultat(input, output, subsumsjon) } @@ -186,10 +258,26 @@ internal class SubsumsjonInspektør(jurist: SubsumsjonsListLog) { organisasjonsnummer: String = ORGNUMMER ) { val resultat = - finnSubsumsjoner(lovverk, paragraf, versjon, ledd, punktum, bokstav, VILKAR_IKKE_OPPFYLT, vedtaksperiodeId = vedtaksperiodeId?.id(organisasjonsnummer)) - assertEquals(1, resultat.size, "Forventer kun en subsumsjon. Subsumsjoner funnet: $resultat") + finnSubsumsjoner( + lovverk, + paragraf, + versjon, + ledd, + punktum, + bokstav, + VILKAR_IKKE_OPPFYLT, + vedtaksperiodeId = vedtaksperiodeId?.id(organisasjonsnummer) + ) + assertEquals( + 1, + resultat.size, + "Forventer kun en subsumsjon. Subsumsjoner funnet: $resultat" + ) val subsumsjon = resultat.first() - assertEquals(VILKAR_IKKE_OPPFYLT, subsumsjon.utfall) { "Forventet ikke oppfylt $paragraf $ledd $punktum" } + assertEquals( + VILKAR_IKKE_OPPFYLT, + subsumsjon.utfall + ) { "Forventet ikke oppfylt $paragraf $ledd $punktum" } if (input == null && output == null) return assertResultat(input, output, subsumsjon) } @@ -207,8 +295,21 @@ internal class SubsumsjonInspektør(jurist: SubsumsjonsListLog) { vedtaksperiodeId: IdInnhenter? = null, organisasjonsnummer: String = ORGNUMMER ) { - val resultat = finnSubsumsjoner(lovverk, paragraf, versjon, ledd, punktum, bokstav, VILKAR_IKKE_OPPFYLT, vedtaksperiodeId?.id(organisasjonsnummer)).also { - assertEquals(antall, it.size, "Forventer $antall subsumsjoner for vilkåret. Subsumsjoner funnet: $it") + val resultat = finnSubsumsjoner( + lovverk, + paragraf, + versjon, + ledd, + punktum, + bokstav, + VILKAR_IKKE_OPPFYLT, + vedtaksperiodeId?.id(organisasjonsnummer) + ).also { + assertEquals( + antall, + it.size, + "Forventer $antall subsumsjoner for vilkåret. Subsumsjoner funnet: $it" + ) } resultat.forEach { assertResultat(input, output, it) @@ -225,8 +326,21 @@ internal class SubsumsjonInspektør(jurist: SubsumsjonsListLog) { organisasjonsnummer: String = ORGNUMMER, lovverk: String = "folketrygdloven" ) { - val resultat = finnSubsumsjoner(lovverk, paragraf, versjon, ledd, punktum, bokstav, null, vedtaksperiodeId?.id(organisasjonsnummer)) - assertEquals(1, resultat.size, "Forventer kun en subsumsjon. Subsumsjoner funnet: $resultat") + val resultat = finnSubsumsjoner( + lovverk, + paragraf, + versjon, + ledd, + punktum, + bokstav, + null, + vedtaksperiodeId?.id(organisasjonsnummer) + ) + assertEquals( + 1, + resultat.size, + "Forventer kun en subsumsjon. Subsumsjoner funnet: $resultat" + ) } internal fun assertIkkeVurdert( @@ -239,11 +353,28 @@ internal class SubsumsjonInspektør(jurist: SubsumsjonsListLog) { organisasjonsnummer: String = ORGNUMMER, lovverk: String = "folketrygdloven" ) { - val resultat = finnSubsumsjoner(lovverk, paragraf, versjon, ledd, punktum, bokstav, null, vedtaksperiodeId?.id(organisasjonsnummer)) - assertEquals(0, resultat.size, "Forventer ingen subsumsjoner. Subsumsjoner funnet: $resultat") + val resultat = finnSubsumsjoner( + lovverk, + paragraf, + versjon, + ledd, + punktum, + bokstav, + null, + vedtaksperiodeId?.id(organisasjonsnummer) + ) + assertEquals( + 0, + resultat.size, + "Forventer ingen subsumsjoner. Subsumsjoner funnet: $resultat" + ) } - private fun assertResultat(inputdata: Map?, outputdata: Map?, resultat: Subsumsjon) { + private fun assertResultat( + inputdata: Map?, + outputdata: Map?, + resultat: Subsumsjon + ) { assertEquals(inputdata, resultat.input) assertEquals(outputdata, resultat.output) } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/SykdomshistorikkInspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/SykdomshistorikkInspekt\303\270r.kt" index 3d6696a771..8a0c2370dc 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/SykdomshistorikkInspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/SykdomshistorikkInspekt\303\270r.kt" @@ -17,7 +17,8 @@ internal class SykdomshistorikkInspektør(historikk: Collection innslag.hendelseId?.let { - perioderPerHendelse.getOrPut(it) { mutableListOf() }.add(innslag.hendelseSykdomstidslinje.periode()!!) + perioderPerHendelse.getOrPut(it) { mutableListOf() } + .add(innslag.hendelseSykdomstidslinje.periode()!!) } tidslinjer.add(innslag.beregnetSykdomstidslinje) } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/TestArbeidsgiverInspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/TestArbeidsgiverInspekt\303\270r.kt" index 44e9ab1621..1b11d73d7f 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/TestArbeidsgiverInspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/TestArbeidsgiverInspekt\303\270r.kt" @@ -23,20 +23,23 @@ internal class TestArbeidsgiverInspektør( } } - internal var arbeidsgiver: Arbeidsgiver = person.arbeidsgivere.first { it.organisasjonsnummer() == orgnummer } + internal var arbeidsgiver: Arbeidsgiver = + person.arbeidsgivere.first { it.organisasjonsnummer() == orgnummer } private val view = person.view().arbeidsgivere.single { it.organisasjonsnummer == orgnummer } private val personInspektør = person.inspektør - internal val vedtaksperiodeTeller: Int = view.aktiveVedtaksperioder.size + view.forkastetVedtaksperioder.size + internal val vedtaksperiodeTeller: Int = + view.aktiveVedtaksperioder.size + view.forkastetVedtaksperioder.size private val vedtaksperioder = (view.aktiveVedtaksperioder + view.forkastetVedtaksperioder) .associateBy { it.id } private val tilstander = (view.aktiveVedtaksperioder + view.forkastetVedtaksperioder) .mapIndexed { index, periode -> index to periode.tilstand } .toMap() - private val vedtaksperiodeindekser = (view.aktiveVedtaksperioder + view.forkastetVedtaksperioder).mapIndexed { index, periode -> - periode.id to index - }.toMap() + private val vedtaksperiodeindekser = + (view.aktiveVedtaksperioder + view.forkastetVedtaksperioder).mapIndexed { index, periode -> + periode.id to index + }.toMap() private val vedtaksperiodeForkastet = view.forkastetVedtaksperioder.map { it.id }.toSet() internal val inntektInspektør get() = InntektshistorikkInspektør(view.inntektshistorikk) @@ -51,28 +54,44 @@ internal class TestArbeidsgiverInspektør( .flatMap { listOf(it.oppdrag, it.personoppdrag) } .map { Feriepengeoppdrag(it.fagsystemId, feriepengeutbetalingslinjer = it.map { linje -> - Feriepengeutbetalingslinje(linje.fom, linje.tom, linje.satstype, linje.beløp, linje.grad, linje.klassekode, linje.endringskode, linje.statuskode) + Feriepengeutbetalingslinje( + linje.fom, + linje.tom, + linje.satstype, + linje.beløp, + linje.grad, + linje.klassekode, + linje.endringskode, + linje.statuskode + ) }) } - internal val infotrygdFeriepengebeløpPerson = view.feriepengeutbetalinger.map { it.infotrygdFeriepengebeløpPerson } - internal val infotrygdFeriepengebeløpArbeidsgiver = view.feriepengeutbetalinger.map { it.infotrygdFeriepengebeløpArbeidsgiver } - internal val spleisFeriepengebeløpArbeidsgiver = view.feriepengeutbetalinger.map { it.spleisFeriepengebeløpArbeidsgiver } - internal val spleisFeriepengebeløpPerson = view.feriepengeutbetalinger.map { it.spleisFeriepengebeløpPerson } + internal val infotrygdFeriepengebeløpPerson = + view.feriepengeutbetalinger.map { it.infotrygdFeriepengebeløpPerson } + internal val infotrygdFeriepengebeløpArbeidsgiver = + view.feriepengeutbetalinger.map { it.infotrygdFeriepengebeløpArbeidsgiver } + internal val spleisFeriepengebeløpArbeidsgiver = + view.feriepengeutbetalinger.map { it.spleisFeriepengebeløpArbeidsgiver } + internal val spleisFeriepengebeløpPerson = + view.feriepengeutbetalinger.map { it.spleisFeriepengebeløpPerson } private val sykmeldingsperioder = view.sykmeldingsperioder.perioder internal fun vilkårsgrunnlaghistorikk() = person.view().vilkårsgrunnlaghistorikk.inspektør - internal fun vilkårsgrunnlagHistorikkInnslag() = vilkårsgrunnlaghistorikk().vilkårsgrunnlagHistorikkInnslag() + internal fun vilkårsgrunnlagHistorikkInnslag() = + vilkårsgrunnlaghistorikk().vilkårsgrunnlagHistorikkInnslag() internal data class Feriepengeoppdrag( val fagsystemId: String, val feriepengeutbetalingslinjer: List ) { internal companion object { - val List.utbetalingslinjer get(): List { - val sisteOppdragPerFagsystemId = groupBy { it.fagsystemId }.map { (_, oppdrag) -> oppdrag.last() } - return sisteOppdragPerFagsystemId.flatMap { it.feriepengeutbetalingslinjer } - } + val List.utbetalingslinjer + get(): List { + val sisteOppdragPerFagsystemId = + groupBy { it.fagsystemId }.map { (_, oppdrag) -> oppdrag.last() } + return sisteOppdragPerFagsystemId.flatMap { it.feriepengeutbetalingslinjer } + } } } @@ -91,76 +110,147 @@ internal class TestArbeidsgiverInspektør( private val IdInnhenter.indeks get() = id(orgnummer).indeks private fun UUID.finn(hva: Map) = hva.getValue(this.indeks) - private val UUID.indeks get() = vedtaksperiodeindekser[this] ?: fail { "Vedtaksperiode $this finnes ikke" } - - internal fun sisteAvsluttedeUtbetalingForVedtaksperiode(vedtaksperiodeIdInnhenter: IdInnhenter) = avsluttedeUtbetalingerForVedtaksperiode(vedtaksperiodeIdInnhenter).last() - internal fun gjeldendeUtbetalingForVedtaksperiode(vedtaksperiodeIdInnhenter: IdInnhenter) = vedtaksperioder(vedtaksperiodeIdInnhenter).inspektør.utbetalinger.last() - internal fun ikkeUtbetalteUtbetalingerForVedtaksperiode(vedtaksperiodeIdInnhenter: IdInnhenter) = ikkeUtbetalteUtbetalingerForVedtaksperiode(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun ikkeUtbetalteUtbetalingerForVedtaksperiode(vedtaksperiodeId: UUID) = vedtaksperioder(vedtaksperiodeId).inspektør.utbetalinger.filter { it.inspektør.erUbetalt } - internal fun avsluttedeUtbetalingerForVedtaksperiode(vedtaksperiodeIdInnhenter: IdInnhenter) = avsluttedeUtbetalingerForVedtaksperiode(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun avsluttedeUtbetalingerForVedtaksperiode(vedtaksperiodeId: UUID) = vedtaksperioder(vedtaksperiodeId).inspektør.utbetalinger.filter { it.erAvsluttet() } - internal fun utbetalinger(vedtaksperiodeIdInnhenter: IdInnhenter) = utbetalinger(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun utbetalinger(vedtaksperiodeId: UUID) = vedtaksperioder(vedtaksperiodeId).inspektør.utbetalinger - - internal fun utbetalingerInFlight() = utbetalinger.filter { it.tilstand == Utbetalingstatus.OVERFØRT } + private val UUID.indeks + get() = vedtaksperiodeindekser[this] ?: fail { "Vedtaksperiode $this finnes ikke" } + + internal fun sisteAvsluttedeUtbetalingForVedtaksperiode(vedtaksperiodeIdInnhenter: IdInnhenter) = + avsluttedeUtbetalingerForVedtaksperiode(vedtaksperiodeIdInnhenter).last() + + internal fun gjeldendeUtbetalingForVedtaksperiode(vedtaksperiodeIdInnhenter: IdInnhenter) = + vedtaksperioder(vedtaksperiodeIdInnhenter).inspektør.utbetalinger.last() + + internal fun ikkeUtbetalteUtbetalingerForVedtaksperiode(vedtaksperiodeIdInnhenter: IdInnhenter) = + ikkeUtbetalteUtbetalingerForVedtaksperiode(vedtaksperiodeIdInnhenter.id(orgnummer)) + + internal fun ikkeUtbetalteUtbetalingerForVedtaksperiode(vedtaksperiodeId: UUID) = + vedtaksperioder(vedtaksperiodeId).inspektør.utbetalinger.filter { it.inspektør.erUbetalt } + + internal fun avsluttedeUtbetalingerForVedtaksperiode(vedtaksperiodeIdInnhenter: IdInnhenter) = + avsluttedeUtbetalingerForVedtaksperiode(vedtaksperiodeIdInnhenter.id(orgnummer)) + + internal fun avsluttedeUtbetalingerForVedtaksperiode(vedtaksperiodeId: UUID) = + vedtaksperioder(vedtaksperiodeId).inspektør.utbetalinger.filter { it.erAvsluttet() } + + internal fun utbetalinger(vedtaksperiodeIdInnhenter: IdInnhenter) = + utbetalinger(vedtaksperiodeIdInnhenter.id(orgnummer)) + + internal fun utbetalinger(vedtaksperiodeId: UUID) = + vedtaksperioder(vedtaksperiodeId).inspektør.utbetalinger + + internal fun utbetalingerInFlight() = + utbetalinger.filter { it.tilstand == Utbetalingstatus.OVERFØRT } + internal fun sisteUtbetaling() = utbetalinger.last() internal fun utbetalingtilstand(indeks: Int) = utbetalinger[indeks].tilstand internal fun utbetaling(indeks: Int) = utbetalinger[indeks] internal fun utbetalingId(indeks: Int) = utbetalinger[indeks].utbetalingId - internal fun utbetalingUtbetalingstidslinje(indeks: Int) = utbetalinger[indeks].utbetalingstidslinje + internal fun utbetalingUtbetalingstidslinje(indeks: Int) = + utbetalinger[indeks].utbetalingstidslinje + internal fun sisteUtbetalingUtbetalingstidslinje() = utbetalinger.last().utbetalingstidslinje internal fun utbetalingslinjer(indeks: Int) = utbetalinger[indeks].arbeidsgiverOppdrag - internal fun periode(vedtaksperiodeIdInnhenter: IdInnhenter) = periode(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun periode(vedtaksperiodeId: UUID) = vedtaksperioder(vedtaksperiodeId).inspektør.periode - internal fun vedtaksperiodeSykdomstidslinje(vedtaksperiodeIdInnhenter: IdInnhenter) = vedtaksperioder(vedtaksperiodeIdInnhenter).inspektør.sykdomstidslinje + internal fun periode(vedtaksperiodeIdInnhenter: IdInnhenter) = + periode(vedtaksperiodeIdInnhenter.id(orgnummer)) + + internal fun periode(vedtaksperiodeId: UUID) = + vedtaksperioder(vedtaksperiodeId).inspektør.periode + + internal fun vedtaksperiodeSykdomstidslinje(vedtaksperiodeIdInnhenter: IdInnhenter) = + vedtaksperioder(vedtaksperiodeIdInnhenter).inspektør.sykdomstidslinje + + internal fun periodeErForkastet(vedtaksperiodeIdInnhenter: IdInnhenter) = + periodeErForkastet(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun periodeErForkastet(vedtaksperiodeIdInnhenter: IdInnhenter) = periodeErForkastet(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun periodeErForkastet(vedtaksperiodeId: UUID) = vedtaksperiodeId in vedtaksperiodeForkastet + internal fun periodeErForkastet(vedtaksperiodeId: UUID) = + vedtaksperiodeId in vedtaksperiodeForkastet - internal fun periodeErIkkeForkastet(vedtaksperiodeIdInnhenter: IdInnhenter) = !periodeErForkastet(vedtaksperiodeIdInnhenter) - internal fun periodeErIkkeForkastet(vedtaksperiodeId: UUID) = !periodeErForkastet(vedtaksperiodeId) + internal fun periodeErIkkeForkastet(vedtaksperiodeIdInnhenter: IdInnhenter) = + !periodeErForkastet(vedtaksperiodeIdInnhenter) - internal fun sisteMaksdato(vedtaksperiodeIdInnhenter: IdInnhenter) = sisteMaksdato(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun sisteMaksdato(vedtaksperiodeId: UUID) = vedtaksperioder(vedtaksperiodeId).inspektør.maksdatoer.last() + internal fun periodeErIkkeForkastet(vedtaksperiodeId: UUID) = + !periodeErForkastet(vedtaksperiodeId) - internal fun sisteUtbetalingId(vedtaksperiodeIdInnhenter: IdInnhenter) = vedtaksperioder(vedtaksperiodeIdInnhenter).inspektør.utbetalinger.last().id + internal fun sisteMaksdato(vedtaksperiodeIdInnhenter: IdInnhenter) = + sisteMaksdato(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun vilkårsgrunnlag(vedtaksperiodeIdInnhenter: IdInnhenter) = person.vilkårsgrunnlagFor(skjæringstidspunkt(vedtaksperiodeIdInnhenter)) - internal fun vilkårsgrunnlag(vedtaksperiodeId: UUID) = person.vilkårsgrunnlagFor(skjæringstidspunkt(vedtaksperiodeId)) - internal fun vilkårsgrunnlag(skjæringstidspunkt: LocalDate) = person.vilkårsgrunnlagFor(skjæringstidspunkt) + internal fun sisteMaksdato(vedtaksperiodeId: UUID) = + vedtaksperioder(vedtaksperiodeId).inspektør.maksdatoer.last() - internal fun sisteTilstand(vedtaksperiodeIdInnhenter: IdInnhenter) = vedtaksperiodeIdInnhenter.finn(tilstander) + internal fun sisteUtbetalingId(vedtaksperiodeIdInnhenter: IdInnhenter) = + vedtaksperioder(vedtaksperiodeIdInnhenter).inspektør.utbetalinger.last().id - internal fun skjæringstidspunkt(vedtaksperiodeIdInnhenter: IdInnhenter) = skjæringstidspunkt(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun skjæringstidspunkt(vedtaksperiodeId: UUID) = vedtaksperioder(vedtaksperiodeId).inspektør.skjæringstidspunkt + internal fun vilkårsgrunnlag(vedtaksperiodeIdInnhenter: IdInnhenter) = + person.vilkårsgrunnlagFor(skjæringstidspunkt(vedtaksperiodeIdInnhenter)) - internal fun utbetalingstidslinjer(vedtaksperiodeIdInnhenter: IdInnhenter) = utbetalingstidslinjer(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun utbetalingstidslinjer(vedtaksperiodeId: UUID) = vedtaksperioder(vedtaksperiodeId).inspektør.utbetalingstidslinje + internal fun vilkårsgrunnlag(vedtaksperiodeId: UUID) = + person.vilkårsgrunnlagFor(skjæringstidspunkt(vedtaksperiodeId)) - internal fun vedtaksperioder(vedtaksperiodeIdInnhenter: IdInnhenter) = vedtaksperioder.getValue(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun vedtaksperioder(vedtaksperiodeId: UUID) = vedtaksperioder.getValue(vedtaksperiodeId) - internal fun vedtaksperioder(periode: Periode) = vedtaksperioder.values.first { it.periode == periode } + internal fun vilkårsgrunnlag(skjæringstidspunkt: LocalDate) = + person.vilkårsgrunnlagFor(skjæringstidspunkt) - internal fun hendelser(vedtaksperiodeIdInnhenter: IdInnhenter) = vedtaksperioder(vedtaksperiodeIdInnhenter.id(orgnummer)).inspektør.hendelser - internal fun hendelseIder(vedtaksperiodeIdInnhenter: IdInnhenter) = hendelseIder(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun hendelseIder(vedtaksperiodeId: UUID) = vedtaksperioder(vedtaksperiodeId).inspektør.hendelseIder + internal fun sisteTilstand(vedtaksperiodeIdInnhenter: IdInnhenter) = + vedtaksperiodeIdInnhenter.finn(tilstander) - internal fun sisteArbeidsgiveroppdragFagsystemId(vedtaksperiodeIdInnhenter: IdInnhenter) = vedtaksperioder(vedtaksperiodeIdInnhenter).inspektør.utbetalinger.last().arbeidsgiverOppdrag().fagsystemId + internal fun skjæringstidspunkt(vedtaksperiodeIdInnhenter: IdInnhenter) = + skjæringstidspunkt(vedtaksperiodeIdInnhenter.id(orgnummer)) - internal fun inntektskilde(vedtaksperiodeIdInnhenter: IdInnhenter) = vilkårsgrunnlag(vedtaksperiodeIdInnhenter)?.inntektskilde() - internal fun inntektskilde(vedtaksperiodeId: UUID) = vilkårsgrunnlag(vedtaksperiodeId)?.inntektskilde() + internal fun skjæringstidspunkt(vedtaksperiodeId: UUID) = + vedtaksperioder(vedtaksperiodeId).inspektør.skjæringstidspunkt - internal fun vedtaksperiodeId(vedtaksperiodeIdInnhenter: IdInnhenter) = vedtaksperiodeIdInnhenter.id(orgnummer) + internal fun utbetalingstidslinjer(vedtaksperiodeIdInnhenter: IdInnhenter) = + utbetalingstidslinjer(vedtaksperiodeIdInnhenter.id(orgnummer)) + + internal fun utbetalingstidslinjer(vedtaksperiodeId: UUID) = + vedtaksperioder(vedtaksperiodeId).inspektør.utbetalingstidslinje + + internal fun vedtaksperioder(vedtaksperiodeIdInnhenter: IdInnhenter) = + vedtaksperioder.getValue(vedtaksperiodeIdInnhenter.id(orgnummer)) + + internal fun vedtaksperioder(vedtaksperiodeId: UUID) = + vedtaksperioder.getValue(vedtaksperiodeId) + + internal fun vedtaksperioder(periode: Periode) = + vedtaksperioder.values.first { it.periode == periode } + + internal fun hendelser(vedtaksperiodeIdInnhenter: IdInnhenter) = + vedtaksperioder(vedtaksperiodeIdInnhenter.id(orgnummer)).inspektør.hendelser + + internal fun hendelseIder(vedtaksperiodeIdInnhenter: IdInnhenter) = + hendelseIder(vedtaksperiodeIdInnhenter.id(orgnummer)) + + internal fun hendelseIder(vedtaksperiodeId: UUID) = + vedtaksperioder(vedtaksperiodeId).inspektør.hendelseIder + + internal fun sisteArbeidsgiveroppdragFagsystemId(vedtaksperiodeIdInnhenter: IdInnhenter) = + vedtaksperioder(vedtaksperiodeIdInnhenter).inspektør.utbetalinger.last() + .arbeidsgiverOppdrag().fagsystemId + + internal fun inntektskilde(vedtaksperiodeIdInnhenter: IdInnhenter) = + vilkårsgrunnlag(vedtaksperiodeIdInnhenter)?.inntektskilde() + + internal fun inntektskilde(vedtaksperiodeId: UUID) = + vilkårsgrunnlag(vedtaksperiodeId)?.inntektskilde() + + internal fun vedtaksperiodeId(vedtaksperiodeIdInnhenter: IdInnhenter) = + vedtaksperiodeIdInnhenter.id(orgnummer) internal fun sykmeldingsperioder() = sykmeldingsperioder.toList() - internal fun arbeidsgiverperioden(vedtaksperiodeIdInnhenter: IdInnhenter) = vedtaksperioder(vedtaksperiodeIdInnhenter).inspektør.arbeidsgiverperiode - internal fun arbeidsgiverperioder(vedtaksperiodeIdInnhenter: IdInnhenter) = arbeidsgiverperioden(vedtaksperiodeIdInnhenter) - internal fun arbeidsgiverperiode(vedtaksperiodeIdInnhenter: IdInnhenter) = arbeidsgiverperioder(vedtaksperiodeIdInnhenter) - private fun Collection.singleOrNullOrThrow() = if (size < 2) this.firstOrNull() else throw IllegalStateException("Listen inneholder $size elementer: $this") + internal fun arbeidsgiverperioden(vedtaksperiodeIdInnhenter: IdInnhenter) = + vedtaksperioder(vedtaksperiodeIdInnhenter).inspektør.arbeidsgiverperiode + + internal fun arbeidsgiverperioder(vedtaksperiodeIdInnhenter: IdInnhenter) = + arbeidsgiverperioden(vedtaksperiodeIdInnhenter) + + internal fun arbeidsgiverperiode(vedtaksperiodeIdInnhenter: IdInnhenter) = + arbeidsgiverperioder(vedtaksperiodeIdInnhenter) + + private fun Collection.singleOrNullOrThrow() = + if (size < 2) this.firstOrNull() else throw IllegalStateException("Listen inneholder $size elementer: $this") internal fun refusjonsopplysningerFraVilkårsgrunnlag(skjæringstidspunkt: LocalDate = person.vilkårsgrunnlagHistorikk.inspektør.aktiveSpleisSkjæringstidspunkt.max()) = - personInspektør.vilkårsgrunnlagHistorikk.grunnlagsdata(skjæringstidspunkt).inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver[orgnummer]?.inspektør?.refusjonsopplysninger ?: emptyList() + personInspektør.vilkårsgrunnlagHistorikk.grunnlagsdata(skjæringstidspunkt).inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver[orgnummer]?.inspektør?.refusjonsopplysninger + ?: emptyList() } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/Vilk\303\245rgrunnlagsinspekt\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/Vilk\303\245rgrunnlagsinspekt\303\270r.kt" index 470f562e2b..a0a5a21c06 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/Vilk\303\245rgrunnlagsinspekt\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/inspectors/Vilk\303\245rgrunnlagsinspekt\303\270r.kt" @@ -11,15 +11,21 @@ internal val VilkårsgrunnlagHistorikk.inspektør get() = this.view().inspektør internal val VilkårsgrunnlagHistorikkView.inspektør get() = Vilkårgrunnlagsinspektør(this) internal class Vilkårgrunnlagsinspektør(view: VilkårsgrunnlagHistorikkView) { - val vilkårsgrunnlagTeller = view.innslag.mapIndexed { index, innslag -> index to innslag.vilkårsgrunnlag.size }.toMap() - internal val aktiveSpleisSkjæringstidspunkt = view.innslag.getOrNull(0)?.vilkårsgrunnlag?.map { it.skjæringstidspunkt }?.toSet() ?: emptySet() + val vilkårsgrunnlagTeller = + view.innslag.mapIndexed { index, innslag -> index to innslag.vilkårsgrunnlag.size }.toMap() + internal val aktiveSpleisSkjæringstidspunkt = + view.innslag.getOrNull(0)?.vilkårsgrunnlag?.map { it.skjæringstidspunkt }?.toSet() + ?: emptySet() - private val grunnlagsdata = view.innslag.flatMap { it.vilkårsgrunnlag.map { it.skjæringstidspunkt to it } } + private val grunnlagsdata = + view.innslag.flatMap { it.vilkårsgrunnlag.map { it.skjæringstidspunkt to it } } private val vilkårsgrunnlagHistorikkInnslag = view.innslag internal fun antallGrunnlagsdata() = vilkårsgrunnlagTeller.map(Map.Entry<*, Int>::value).sum() internal fun vilkårsgrunnlagHistorikkInnslag() = vilkårsgrunnlagHistorikkInnslag.toList() - internal fun grunnlagsdata(skjæringstidspunkt: LocalDate) = grunnlagsdata.firstOrNull { it.first == skjæringstidspunkt }?.second ?: fail("Fant ikke grunnlagsdata på skjæringstidspunkt $skjæringstidspunkt") + internal fun grunnlagsdata(skjæringstidspunkt: LocalDate) = + grunnlagsdata.firstOrNull { it.first == skjæringstidspunkt }?.second + ?: fail("Fant ikke grunnlagsdata på skjæringstidspunkt $skjæringstidspunkt") } internal val VilkårsgrunnlagHistorikk.VilkårsgrunnlagElement.inspektør get() = view().inspektør @@ -33,5 +39,6 @@ internal class GrunnlagsdataInspektør(view: VilkårsgrunnlagView) { val inntektsgrunnlag = view.inntektsgrunnlag val opptjening = view.opptjening val vurdertOk = view.vurdertOk - val inntektskilde = if (view.inntektsgrunnlag.arbeidsgiverInntektsopplysninger.size > 1) UtbetalingInntektskilde.FLERE_ARBEIDSGIVERE else UtbetalingInntektskilde.EN_ARBEIDSGIVER + val inntektskilde = + if (view.inntektsgrunnlag.arbeidsgiverInntektsopplysninger.size > 1) UtbetalingInntektskilde.FLERE_ARBEIDSGIVERE else UtbetalingInntektskilde.EN_ARBEIDSGIVER } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/AbstractPersonTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/AbstractPersonTest.kt index d815a0f720..cde24689ae 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/AbstractPersonTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/AbstractPersonTest.kt @@ -44,38 +44,71 @@ internal abstract class AbstractPersonTest { val a3: String = "321987654" val a4: String = "456789123" - private fun overgangFraInfotrygdPerson(jurist: Subsumsjonslogg) = gjenopprettFraJSON("/personer/infotrygdforlengelse.json", jurist).also { person -> - person.håndter( - Utbetalingshistorikk( - UUID.randomUUID(), ORGNUMMER, UUID.randomUUID().toString(), - InfotrygdhistorikkElement.opprett( - LocalDateTime.now(), - UUID.randomUUID(), - listOf(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 31.januar, 100.prosent, TestPerson.INNTEKT)), - listOf(Inntektsopplysning(ORGNUMMER, 1.januar, TestPerson.INNTEKT, true)), - emptyMap() + private fun overgangFraInfotrygdPerson(jurist: Subsumsjonslogg) = + gjenopprettFraJSON("/personer/infotrygdforlengelse.json", jurist).also { person -> + person.håndter( + Utbetalingshistorikk( + UUID.randomUUID(), ORGNUMMER, UUID.randomUUID().toString(), + InfotrygdhistorikkElement.opprett( + LocalDateTime.now(), + UUID.randomUUID(), + listOf( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 31.januar, + 100.prosent, + TestPerson.INNTEKT + ) + ), + listOf( + Inntektsopplysning( + ORGNUMMER, + 1.januar, + TestPerson.INNTEKT, + true + ) + ), + emptyMap() + ), + besvart = LocalDateTime.now() ), - besvart = LocalDateTime.now() - ), - Aktivitetslogg() - ) - } - private fun pingPongPerson(jurist: Subsumsjonslogg) = gjenopprettFraJSON("/personer/pingpong.json", jurist).also { person -> - person.håndter( - Utbetalingshistorikk( - UUID.randomUUID(), ORGNUMMER, UUID.randomUUID().toString(), - InfotrygdhistorikkElement.opprett( - LocalDateTime.now(), - UUID.randomUUID(), - listOf(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.februar, 28.februar, 100.prosent, TestPerson.INNTEKT)), - listOf(Inntektsopplysning(ORGNUMMER, 1.februar, TestPerson.INNTEKT, true)), - emptyMap() + Aktivitetslogg() + ) + } + + private fun pingPongPerson(jurist: Subsumsjonslogg) = + gjenopprettFraJSON("/personer/pingpong.json", jurist).also { person -> + person.håndter( + Utbetalingshistorikk( + UUID.randomUUID(), ORGNUMMER, UUID.randomUUID().toString(), + InfotrygdhistorikkElement.opprett( + LocalDateTime.now(), + UUID.randomUUID(), + listOf( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.februar, + 28.februar, + 100.prosent, + TestPerson.INNTEKT + ) + ), + listOf( + Inntektsopplysning( + ORGNUMMER, + 1.februar, + TestPerson.INNTEKT, + true + ) + ), + emptyMap() + ), + besvart = LocalDateTime.now() ), - besvart = LocalDateTime.now() - ), - Aktivitetslogg() - ) - } + Aktivitetslogg() + ) + } } lateinit var person: Person @@ -83,32 +116,57 @@ internal abstract class AbstractPersonTest { lateinit var jurist: SubsumsjonsListLog val inspektør get() = inspektør(ORGNUMMER) - val Int.vedtaksperiode: IdInnhenter get() = IdInnhenter { orgnummer -> this@vedtaksperiode.vedtaksperiodeId(orgnummer) } - fun Int.vedtaksperiode(orgnummer: String): IdInnhenter = IdInnhenter { this@vedtaksperiode.vedtaksperiodeId(orgnummer) } - fun IdInnhenter.filter(orgnummer: String = ORGNUMMER) = AktivitetsloggFilter.vedtaksperiode(this, orgnummer) + val Int.vedtaksperiode: IdInnhenter + get() = IdInnhenter { orgnummer -> + this@vedtaksperiode.vedtaksperiodeId( + orgnummer + ) + } + + fun Int.vedtaksperiode(orgnummer: String): IdInnhenter = + IdInnhenter { this@vedtaksperiode.vedtaksperiodeId(orgnummer) } + + fun IdInnhenter.filter(orgnummer: String = ORGNUMMER) = + AktivitetsloggFilter.vedtaksperiode(this, orgnummer) @BeforeEach internal fun createTestPerson() { createTestPerson(UNG_PERSON_FNR_2018, UNG_PERSON_FØDSELSDATO) } - private fun regler(maksSykedager: Int): ArbeidsgiverRegler = object: ArbeidsgiverRegler { - override fun burdeStarteNyArbeidsgiverperiode(oppholdsdagerBrukt: Int) = oppholdsdagerBrukt >= 16 - override fun arbeidsgiverperiodenGjennomført(arbeidsgiverperiodedagerBrukt: Int) = arbeidsgiverperiodedagerBrukt >= 16 + private fun regler(maksSykedager: Int): ArbeidsgiverRegler = object : ArbeidsgiverRegler { + override fun burdeStarteNyArbeidsgiverperiode(oppholdsdagerBrukt: Int) = + oppholdsdagerBrukt >= 16 + + override fun arbeidsgiverperiodenGjennomført(arbeidsgiverperiodedagerBrukt: Int) = + arbeidsgiverperiodedagerBrukt >= 16 + override fun dekningsgrad() = 1.0 override fun maksSykepengedager() = maksSykedager override fun maksSykepengedagerOver67() = maksSykedager } - protected fun createKorttidsPerson(personidentifikator: Personidentifikator, fødseldato: LocalDate, maksSykedager: Int) = createTestPerson { jurist -> + + protected fun createKorttidsPerson( + personidentifikator: Personidentifikator, + fødseldato: LocalDate, + maksSykedager: Int + ) = createTestPerson { jurist -> Person(personidentifikator, fødseldato.alder, jurist, regler(maksSykedager)) } - protected fun createTestPerson(personidentifikator: Personidentifikator, fødseldato: LocalDate, dødsdato: LocalDate? = null) = createTestPerson { jurist -> + + protected fun createTestPerson( + personidentifikator: Personidentifikator, + fødseldato: LocalDate, + dødsdato: LocalDate? = null + ) = createTestPerson { jurist -> Person(personidentifikator, Alder(fødseldato, dødsdato), jurist) } + protected fun createPingPongPerson() = createTestPerson { jurist -> pingPongPerson(jurist) } - protected fun createOvergangFraInfotrygdPerson() = createTestPerson { jurist -> overgangFraInfotrygdPerson(jurist) } + protected fun createOvergangFraInfotrygdPerson() = + createTestPerson { jurist -> overgangFraInfotrygdPerson(jurist) } - protected fun createTestPerson(block: (jurist: Subsumsjonslogg) -> Person) : Person { + protected fun createTestPerson(block: (jurist: Subsumsjonslogg) -> Person): Person { jurist = SubsumsjonsListLog() person = block(jurist) observatør = TestObservatør(person) @@ -122,13 +180,17 @@ internal abstract class AbstractPersonTest { } } - private fun Int.vedtaksperiodeId(orgnummer: String) = observatør.vedtaksperiode(orgnummer, this - 1) + private fun Int.vedtaksperiodeId(orgnummer: String) = + observatør.vedtaksperiode(orgnummer, this - 1) + fun Int.utbetaling(orgnummer: String) = inspektør(orgnummer).utbetalingId(this - 1) fun inspektør(orgnummer: String) = TestArbeidsgiverInspektør(person, orgnummer) - fun inspektør(orgnummer: String, block: TestArbeidsgiverInspektør.() -> Unit) = inspektør(orgnummer).run(block) + fun inspektør(orgnummer: String, block: TestArbeidsgiverInspektør.() -> Unit) = + inspektør(orgnummer).run(block) } -internal fun AbstractPersonTest.nullstillTilstandsendringer() = observatør.nullstillTilstandsendringer() +internal fun AbstractPersonTest.nullstillTilstandsendringer() = + observatør.nullstillTilstandsendringer() internal fun interface IdInnhenter { fun id(orgnummer: String): UUID diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/AktivitetsloggTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/AktivitetsloggTest.kt index 4eeb496112..e9a34f60ee 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/AktivitetsloggTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/AktivitetsloggTest.kt @@ -34,7 +34,9 @@ internal class AktivitetsloggTest { hendelse1.kontekst(person) hendelse1.info(infomelding) val expected = "$infomelding (Person Person: Person 1)" - assertTrue(aktivitetslogg.toString().contains(expected)) { "Expected $aktivitetslogg to contain <$expected>" } + assertTrue( + aktivitetslogg.toString().contains(expected) + ) { "Expected $aktivitetslogg to contain <$expected>" } } @Test @@ -79,7 +81,12 @@ internal class AktivitetsloggTest { val aktivitet = aktivitetslogg.aktiviteter.first() assertEquals(3, aktivitet.kontekster.size) assertEquals(1, aktivitet.kontekster.filter { it.kontekstType == "Vedtaksperiode" }.size) - assertEquals("Vedtaksperiode 2", aktivitet.kontekster.first { it.kontekstType == "Vedtaksperiode" }.kontekstMap.getValue("Vedtaksperiode")) + assertEquals( + "Vedtaksperiode 2", + aktivitet.kontekster.first { it.kontekstType == "Vedtaksperiode" }.kontekstMap.getValue( + "Vedtaksperiode" + ) + ) } @Test @@ -96,7 +103,11 @@ internal class AktivitetsloggTest { hendelse.info("Hei på deg") assertEquals(1, aktivitetslogg.aktiviteter.size) val aktivitet = aktivitetslogg.aktiviteter.first() - assertEquals("Person 1, Arbeidsgiver 2", aktivitet.kontekster.joinToString { it.kontekstMap[it.kontekstType] ?: it.kontekstType }) + assertEquals( + "Person 1, Arbeidsgiver 2", + aktivitet.kontekster.joinToString { + it.kontekstMap[it.kontekstType] ?: it.kontekstType + }) } @Test @@ -115,7 +126,7 @@ internal class AktivitetsloggTest { } @Test - fun `Melding sendt til forelder`(){ + fun `Melding sendt til forelder`() { val hendelse = aktivitetslogg.barn() "info message".also { hendelse.info(it) @@ -128,7 +139,7 @@ internal class AktivitetsloggTest { } @Test - fun `Melding sendt fra barnebarn til forelder`(){ + fun `Melding sendt fra barnebarn til forelder`() { val hendelse = aktivitetslogg.barn() hendelse.kontekst(person) val arbeidsgiver = TestKontekst("Arbeidsgiver", "Arbeidsgiver 1") @@ -162,7 +173,7 @@ internal class AktivitetsloggTest { } @Test - fun `Vis bare arbeidsgiveraktivitet`(){ + fun `Vis bare arbeidsgiveraktivitet`() { val hendelse1 = aktivitetslogg.barn() hendelse1.kontekst(person) val arbeidsgiver1 = TestKontekst("Arbeidsgiver", "Arbeidsgiver 1") @@ -194,7 +205,8 @@ internal class AktivitetsloggTest { Aktivitet.Behov.Behovtype.Godkjenning, "Trenger godkjenning", mapOf( "param1" to param1, "param2" to param2 - )) + ) + ) assertEquals(1, aktivitetslogg.behov.size) assertEquals(1, aktivitetslogg.behov.first().kontekst().size) @@ -213,32 +225,52 @@ internal class AktivitetsloggTest { assertVarsel(RV_SØ_1) } - private fun assertInfo(message: String, forventetKonteksttyper: List? = null, aktivitetslogg: Aktivitetslogg = this.aktivitetslogg) { - val aktivitet = aktivitetslogg.aktiviteter.filter { it is Aktivitet.Info && message in it.toString() } + private fun assertInfo( + message: String, + forventetKonteksttyper: List? = null, + aktivitetslogg: Aktivitetslogg = this.aktivitetslogg + ) { + val aktivitet = + aktivitetslogg.aktiviteter.filter { it is Aktivitet.Info && message in it.toString() } assertEquals(1, aktivitet.size) if (forventetKonteksttyper != null) { - assertEquals(forventetKonteksttyper, aktivitet.single().kontekster.map { it.kontekstType }) + assertEquals( + forventetKonteksttyper, + aktivitet.single().kontekster.map { it.kontekstType }) } } - private fun assertVarsel(forventetKode: Varselkode, aktivitetslogg: Aktivitetslogg = this.aktivitetslogg) { + private fun assertVarsel( + forventetKode: Varselkode, + aktivitetslogg: Aktivitetslogg = this.aktivitetslogg + ) { val aktivitet = aktivitetslogg.aktiviteter.filterIsInstance() assertEquals(1, aktivitet.size) assertEquals(forventetKode, aktivitet.single().kode) } - private fun assertFunksjonellFeil(message: String, aktivitetslogg: Aktivitetslogg = this.aktivitetslogg) { - assertEquals(1, aktivitetslogg.aktiviteter.count { it is Aktivitet.FunksjonellFeil && message in it.toString() }) + private fun assertFunksjonellFeil( + message: String, + aktivitetslogg: Aktivitetslogg = this.aktivitetslogg + ) { + assertEquals( + 1, + aktivitetslogg.aktiviteter.count { it is Aktivitet.FunksjonellFeil && message in it.toString() }) } - private fun assertLogiskFeil(message: String, aktivitetslogg: Aktivitetslogg = this.aktivitetslogg) { - assertEquals(1, aktivitetslogg.aktiviteter.count { it is Aktivitet.LogiskFeil && message in it.toString() }) + private fun assertLogiskFeil( + message: String, + aktivitetslogg: Aktivitetslogg = this.aktivitetslogg + ) { + assertEquals( + 1, + aktivitetslogg.aktiviteter.count { it is Aktivitet.LogiskFeil && message in it.toString() }) } private class TestKontekst( private val type: String, private val melding: String - ): Aktivitetskontekst { + ) : Aktivitetskontekst { override fun toSpesifikkKontekst() = SpesifikkKontekst(type, mapOf(type to melding)) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/ForespurtOpplysningTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/ForespurtOpplysningTest.kt index eabc1e3672..a49cc8f9b4 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/ForespurtOpplysningTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/ForespurtOpplysningTest.kt @@ -17,7 +17,13 @@ class ForespurtOpplysningTest { fun `serialiserer ForespurtOpplysning med Inntekt riktig`() { val forespurteOpplysninger = listOf( - PersonObserver.Inntekt(PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, 31000.0)), + PersonObserver.Inntekt( + PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, + 31000.0 + ) + ), PersonObserver.Arbeidsgiverperiode, PersonObserver.Refusjon(emptyList()) ) @@ -32,10 +38,12 @@ class ForespurtOpplysningTest { val forespurteOpplysninger = listOf( PersonObserver.FastsattInntekt(30000.månedlig), PersonObserver.Arbeidsgiverperiode, - PersonObserver.Refusjon(listOf( - Refusjonsforslag(fom = 1.januar, tom = 31.mars, 30000.månedlig.månedlig), - Refusjonsforslag(fom = 1.april, tom = null, INGEN.månedlig) - )) + PersonObserver.Refusjon( + listOf( + Refusjonsforslag(fom = 1.januar, tom = 31.mars, 30000.månedlig.månedlig), + Refusjonsforslag(fom = 1.april, tom = null, INGEN.månedlig) + ) + ) ) val expectedJson = forespurteOpplysningerMedFastsattInntektMap() @@ -64,9 +72,9 @@ class ForespurtOpplysningTest { "opplysningstype" to "Inntekt", "forslag" to mapOf( "forrigeInntekt" to mapOf( - "skjæringstidspunkt" to 1.januar, - "kilde" to PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING.name, - "beløp" to 31000.0 + "skjæringstidspunkt" to 1.januar, + "kilde" to PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING.name, + "beløp" to 31000.0 ) ), ), @@ -78,4 +86,4 @@ class ForespurtOpplysningTest { "forslag" to emptyList(), ) ) -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/KodetAktivitetTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/KodetAktivitetTest.kt index ff20722240..243e470b8f 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/KodetAktivitetTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/KodetAktivitetTest.kt @@ -33,7 +33,7 @@ class KodetAktivitetTest { private class TestKontekst( private val type: String, private val melding: String - ): Aktivitetskontekst { + ) : Aktivitetskontekst { override fun toSpesifikkKontekst() = SpesifikkKontekst(type, mapOf(type to melding)) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/OpptjeningTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/OpptjeningTest.kt index 477abef504..2938caec36 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/OpptjeningTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/OpptjeningTest.kt @@ -37,11 +37,13 @@ import org.junit.jupiter.api.Test internal class OpptjeningTest { - private val jurist = BehandlingSubsumsjonslogg(EmptyLog, listOf( + private val jurist = BehandlingSubsumsjonslogg( + EmptyLog, listOf( Subsumsjonskontekst(KontekstType.Fødselsnummer, "fnr"), Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "orgnr"), Subsumsjonskontekst(KontekstType.Vedtaksperiode, "${UUID.randomUUID()}"), - )) + ) + ) @Test fun `konkret opptjeningsperiode`() { @@ -55,7 +57,10 @@ internal class OpptjeningTest { assertEquals(1.januar til 7.januar, arbeidsforhold.opptjeningsperiode(8.januar)) assertEquals(1.januar til 28.januar, arbeidsforhold.opptjeningsperiode(29.januar)) - assertEquals((mandag den 29.januar).somPeriode(), arbeidsforhold.opptjeningsperiode(tirsdag den 30.januar)) + assertEquals( + (mandag den 29.januar).somPeriode(), + arbeidsforhold.opptjeningsperiode(tirsdag den 30.januar) + ) } @Test @@ -80,34 +85,49 @@ internal class OpptjeningTest { Arbeidsforhold(8.januar, null, false) ) - assertEquals(7.januar.somPeriode(), emptyList().opptjeningsperiode(8.januar)) + assertEquals( + 7.januar.somPeriode(), + emptyList().opptjeningsperiode(8.januar) + ) assertEquals(7.januar.somPeriode(), arbeidsforhold.opptjeningsperiode(8.januar)) } @Test fun `startdato for manglende arbeidsforhold`() { - val arbeidsforhold = listOf(Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a1", listOf( - Arbeidsforhold(1.januar, null, false) - ))) + val arbeidsforhold = listOf( + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + "a1", listOf( + Arbeidsforhold(1.januar, null, false) + ) + ) + ) val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.mars) assertNull(opptjening.startdatoFor("a2")) } @Test fun `startdato for deaktivert arbeidsforhold`() { - val arbeidsforhold = listOf(Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a1", listOf( - Arbeidsforhold(1.januar, null, true) - ))) + val arbeidsforhold = listOf( + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + "a1", listOf( + Arbeidsforhold(1.januar, null, true) + ) + ) + ) val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.mars) assertEquals(28.februar, opptjening.startdatoFor("a1")) } @Test fun `startdato for aktivt arbeidsforhold`() { - val arbeidsforhold = listOf(Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a1", listOf( - Arbeidsforhold(1.februar, null, false), - Arbeidsforhold(1.januar, 31.januar, false), - ))) + val arbeidsforhold = listOf( + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + "a1", listOf( + Arbeidsforhold(1.februar, null, false), + Arbeidsforhold(1.januar, 31.januar, false), + ) + ) + ) val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.mars) assertEquals(1.januar, opptjening.startdatoFor("a1")) } @@ -246,11 +266,13 @@ internal class OpptjeningTest { @Test fun `Opptjening kobler sammen gap selvom rekkefølgen ikke er kronologisk`() { val arbeidsforhold = listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag("orgnummer", listOf( + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + "orgnummer", listOf( Arbeidsforhold(ansattFom = 1.januar, ansattTom = 10.januar, deaktivert = false), Arbeidsforhold(ansattFom = 15.januar, ansattTom = null, deaktivert = false), Arbeidsforhold(ansattFom = 11.januar, ansattTom = 14.januar, deaktivert = false) - )) + ) + ) ) val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 1.januar.plusDays(28)) @@ -261,8 +283,26 @@ internal class OpptjeningTest { @Test fun `slutter på lørdag, starter på mandag`() { val arbeidsforhold = listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a1", listOf(Arbeidsforhold(ansattFom = søndag den 1.oktober(2017), ansattTom = lørdag den 30.april(2022), deaktivert = false))), - Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a2", listOf(Arbeidsforhold(ansattFom = mandag den 2.mai(2022), ansattTom = null, deaktivert = false))) + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + "a1", + listOf( + Arbeidsforhold( + ansattFom = søndag den 1.oktober(2017), + ansattTom = lørdag den 30.april(2022), + deaktivert = false + ) + ) + ), + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + "a2", + listOf( + Arbeidsforhold( + ansattFom = mandag den 2.mai(2022), + ansattTom = null, + deaktivert = false + ) + ) + ) ) val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 2.mai(2022)) @@ -274,8 +314,26 @@ internal class OpptjeningTest { @Test fun `slutter på fredag, starter på mandag`() { val arbeidsforhold = listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a1", listOf(Arbeidsforhold(ansattFom = søndag den 1.oktober(2017), ansattTom = fredag den 29.april(2022), deaktivert = false))), - Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a2", listOf(Arbeidsforhold(ansattFom = mandag den 2.mai(2022), ansattTom = null, deaktivert = false))) + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + "a1", + listOf( + Arbeidsforhold( + ansattFom = søndag den 1.oktober(2017), + ansattTom = fredag den 29.april(2022), + deaktivert = false + ) + ) + ), + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + "a2", + listOf( + Arbeidsforhold( + ansattFom = mandag den 2.mai(2022), + ansattTom = null, + deaktivert = false + ) + ) + ) ) val opptjening = Opptjening.nyOpptjening(arbeidsforhold, 3.mai(2022)) @@ -287,8 +345,26 @@ internal class OpptjeningTest { @Test fun `slutter på torsdag, starter på mandag`() { val arbeidsforhold = listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a1", listOf(Arbeidsforhold(ansattFom = søndag den 1.oktober(2017), ansattTom = torsdag den 28.april(2022), deaktivert = false))), - Opptjening.ArbeidsgiverOpptjeningsgrunnlag("a2", listOf(Arbeidsforhold(ansattFom = mandag den 2.mai(2022), ansattTom = null, deaktivert = false))) + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + "a1", + listOf( + Arbeidsforhold( + ansattFom = søndag den 1.oktober(2017), + ansattTom = torsdag den 28.april(2022), + deaktivert = false + ) + ) + ), + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + "a2", + listOf( + Arbeidsforhold( + ansattFom = mandag den 2.mai(2022), + ansattTom = null, + deaktivert = false + ) + ) + ) ) val opptjening = Opptjening.nyOpptjening(arbeidsforhold, tirsdag den 3.mai(2022)) @@ -307,26 +383,28 @@ internal class OpptjeningTest { ) ) val subsumsjon = Opptjening.nyOpptjening(arbeidsforhold, 1.januar).subsumsjon - assertEquals(Subsumsjon.enkelSubsumsjon( - lovverk = "folketrygdloven", - utfall = VILKAR_OPPFYLT, - versjon = LocalDate.of(2020, 6, 12), - paragraf = PARAGRAF_8_2, - ledd = 1.ledd, - input = mapOf( - "skjæringstidspunkt" to 1.januar, - "tilstrekkeligAntallOpptjeningsdager" to 28, - "arbeidsforhold" to listOf( - mapOf( - "orgnummer" to AbstractPersonTest.ORGNUMMER, - "fom" to 4.desember(2017), - "tom" to 31.januar + assertEquals( + Subsumsjon.enkelSubsumsjon( + lovverk = "folketrygdloven", + utfall = VILKAR_OPPFYLT, + versjon = LocalDate.of(2020, 6, 12), + paragraf = PARAGRAF_8_2, + ledd = 1.ledd, + input = mapOf( + "skjæringstidspunkt" to 1.januar, + "tilstrekkeligAntallOpptjeningsdager" to 28, + "arbeidsforhold" to listOf( + mapOf( + "orgnummer" to AbstractPersonTest.ORGNUMMER, + "fom" to 4.desember(2017), + "tom" to 31.januar + ) ) - ) - ), - output = mapOf("antallOpptjeningsdager" to 28), - kontekster = emptyList() - ), subsumsjon) + ), + output = mapOf("antallOpptjeningsdager" to 28), + kontekster = emptyList() + ), subsumsjon + ) } @Test @@ -339,25 +417,27 @@ internal class OpptjeningTest { ) ) val subsumsjon = Opptjening.nyOpptjening(arbeidsforhold, 1.januar).subsumsjon - assertEquals(Subsumsjon.enkelSubsumsjon( - lovverk = "folketrygdloven", - utfall = VILKAR_IKKE_OPPFYLT, - versjon = LocalDate.of(2020, 6, 12), - paragraf = PARAGRAF_8_2, - ledd = 1.ledd, - input = mapOf( - "skjæringstidspunkt" to 1.januar, - "tilstrekkeligAntallOpptjeningsdager" to 28, - "arbeidsforhold" to listOf( - mapOf( - "orgnummer" to AbstractPersonTest.ORGNUMMER, - "fom" to 5.desember(2017), - "tom" to 31.januar + assertEquals( + Subsumsjon.enkelSubsumsjon( + lovverk = "folketrygdloven", + utfall = VILKAR_IKKE_OPPFYLT, + versjon = LocalDate.of(2020, 6, 12), + paragraf = PARAGRAF_8_2, + ledd = 1.ledd, + input = mapOf( + "skjæringstidspunkt" to 1.januar, + "tilstrekkeligAntallOpptjeningsdager" to 28, + "arbeidsforhold" to listOf( + mapOf( + "orgnummer" to AbstractPersonTest.ORGNUMMER, + "fom" to 5.desember(2017), + "tom" to 31.januar + ) ) - ) - ), - output = mapOf("antallOpptjeningsdager" to 27), - kontekster = emptyList() - ), subsumsjon) + ), + output = mapOf("antallOpptjeningsdager" to 27), + kontekster = emptyList() + ), subsumsjon + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/SpesifikkKontekstTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/SpesifikkKontekstTest.kt index fda5f0a2ff..c91908dc62 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/SpesifikkKontekstTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/SpesifikkKontekstTest.kt @@ -9,10 +9,14 @@ internal class SpesifikkKontekstTest { @Test fun `to string`() { - assertEquals("Person fødselsnummer: 1 aktørId: 2", SpesifikkKontekst("Person", mapOf( + assertEquals( + "Person fødselsnummer: 1 aktørId: 2", SpesifikkKontekst( + "Person", mapOf( "fødselsnummer" to "1", "aktørId" to "2" - )).melding()) + ) + ).melding() + ) } @Test @@ -22,55 +26,71 @@ internal class SpesifikkKontekstTest { @Test fun `samme type og like kontekster er like`() { - val ytelserKontekst = SpesifikkKontekst("Utbetalingshistorikk", mapOf( + val ytelserKontekst = SpesifikkKontekst( + "Utbetalingshistorikk", mapOf( "fødselsnummer" to "1", "aktørId" to "2", - )) - val utbetalingshistorikkKontekst = SpesifikkKontekst("Utbetalingshistorikk", mapOf( + ) + ) + val utbetalingshistorikkKontekst = SpesifikkKontekst( + "Utbetalingshistorikk", mapOf( "fødselsnummer" to "1", "aktørId" to "2", - )) + ) + ) assertEquals(ytelserKontekst, utbetalingshistorikkKontekst) assertEquals(ytelserKontekst.hashCode(), utbetalingshistorikkKontekst.hashCode()) } @Test fun `forskjellige typer, men med samme kontekster, er ikke like`() { - val ytelserKontekst = SpesifikkKontekst("Ytelser", mapOf( + val ytelserKontekst = SpesifikkKontekst( + "Ytelser", mapOf( "fødselsnummer" to "1", "aktørId" to "2", - )) - val utbetalingshistorikkKontekst = SpesifikkKontekst("Utbetalingshistorikk", mapOf( + ) + ) + val utbetalingshistorikkKontekst = SpesifikkKontekst( + "Utbetalingshistorikk", mapOf( "fødselsnummer" to "1", "aktørId" to "2", - )) + ) + ) assertNotEquals(ytelserKontekst, utbetalingshistorikkKontekst) } @Test fun `forskjellige typer gir forskjellige hashCodes`() { - val kontekst1 = SpesifikkKontekst("a", mapOf( + val kontekst1 = SpesifikkKontekst( + "a", mapOf( "b" to "c", "c" to "e", - )) - val kontekst2 = SpesifikkKontekst("b", mapOf( + ) + ) + val kontekst2 = SpesifikkKontekst( + "b", mapOf( "b" to "c", "c" to "e", - )) + ) + ) assertNotEquals(kontekst1, kontekst2) assertNotEquals(kontekst1.hashCode(), kontekst2.hashCode()) } @Test fun `forskjellige kontekster gir forskjellige hashCodes`() { - val kontekst1 = SpesifikkKontekst("a", mapOf( + val kontekst1 = SpesifikkKontekst( + "a", mapOf( "b" to "c", "c" to "e", - )) - val kontekst2 = SpesifikkKontekst("a", mapOf( + ) + ) + val kontekst2 = SpesifikkKontekst( + "a", mapOf( "b" to "c", "c" to "f", - )) + ) + ) assertNotEquals(kontekst1, kontekst2) assertNotEquals(kontekst1.hashCode(), kontekst2.hashCode()) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/SykmeldingsperioderTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/SykmeldingsperioderTest.kt index c488226198..0b485d2095 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/SykmeldingsperioderTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/SykmeldingsperioderTest.kt @@ -25,7 +25,14 @@ internal class SykmeldingsperioderTest { ) private fun Sykmeldingsperioder.lagre(periode: Periode) = - lagre(hendelsefabrikk.lagSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive)), Aktivitetslogg()) + lagre( + hendelsefabrikk.lagSykmelding( + Sykmeldingsperiode( + periode.start, + periode.endInclusive + ) + ), Aktivitetslogg() + ) @Test fun `Kan lagre Sykmeldingsperioder`() { @@ -63,7 +70,10 @@ internal class SykmeldingsperioderTest { val sykmeldingsperioder = Sykmeldingsperioder() sykmeldingsperioder.lagre(1.januar til 10.januar) sykmeldingsperioder.lagre(15.januar til 25.januar) - assertEquals(listOf(1.januar til 10.januar, 15.januar til 25.januar), sykmeldingsperioder.perioder()) + assertEquals( + listOf(1.januar til 10.januar, 15.januar til 25.januar), + sykmeldingsperioder.perioder() + ) sykmeldingsperioder.lagre(9.januar til 15.januar) assertEquals(listOf(1.januar til 25.januar), sykmeldingsperioder.perioder()) @@ -74,7 +84,10 @@ internal class SykmeldingsperioderTest { val sykmeldingsperioder = Sykmeldingsperioder() sykmeldingsperioder.lagre(15.januar til 25.januar) sykmeldingsperioder.lagre(5.januar til 10.januar) - assertEquals(listOf(5.januar til 10.januar, 15.januar til 25.januar), sykmeldingsperioder.perioder()) + assertEquals( + listOf(5.januar til 10.januar, 15.januar til 25.januar), + sykmeldingsperioder.perioder() + ) } @Test @@ -162,7 +175,10 @@ internal class SykmeldingsperioderTest { sykmeldingsperioder.lagre(1.februar til 25.februar) sykmeldingsperioder.lagre(1.mars til 25.mars) sykmeldingsperioder.fjern(5.januar til 24.februar) - assertEquals(listOf(25.februar til 25.februar, 1.mars til 25.mars), sykmeldingsperioder.perioder()) + assertEquals( + listOf(25.februar til 25.februar, 1.mars til 25.mars), + sykmeldingsperioder.perioder() + ) } @Test @@ -187,9 +203,33 @@ internal class SykmeldingsperioderTest { sykmeldingsperioder.lagre(1.januar til 15.januar) sykmeldingsperioder.lagre(1.mars til 28.mars) - assertEquals(listOf(1.januar til 15.januar), sykmeldingsperioder.overlappendePerioder(inntektsmelding(listOf(1.januar til 16.januar), 1.januar).dager())) - assertEquals(emptyList(), sykmeldingsperioder.overlappendePerioder(inntektsmelding(listOf(1.februar til 16.februar), 1.februar).dager())) - assertEquals(listOf(1.mars til 16.mars), sykmeldingsperioder.overlappendePerioder(inntektsmelding(listOf(1.mars til 16.mars), 1.mars).dager())) + assertEquals( + listOf(1.januar til 15.januar), + sykmeldingsperioder.overlappendePerioder( + inntektsmelding( + listOf(1.januar til 16.januar), + 1.januar + ).dager() + ) + ) + assertEquals( + emptyList(), + sykmeldingsperioder.overlappendePerioder( + inntektsmelding( + listOf(1.februar til 16.februar), + 1.februar + ).dager() + ) + ) + assertEquals( + listOf(1.mars til 16.mars), + sykmeldingsperioder.overlappendePerioder( + inntektsmelding( + listOf(1.mars til 16.mars), + 1.mars + ).dager() + ) + ) } @Test @@ -197,7 +237,15 @@ internal class SykmeldingsperioderTest { val sykmeldingsperioder = Sykmeldingsperioder() sykmeldingsperioder.lagre(januar) - assertEquals(emptyList(), sykmeldingsperioder.overlappendePerioder(inntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 2.februar).dager())) + assertEquals( + emptyList(), + sykmeldingsperioder.overlappendePerioder( + inntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 2.februar + ).dager() + ) + ) } @Test @@ -228,7 +276,7 @@ internal class SykmeldingsperioderTest { harOpphørAvNaturalytelser = false, begrunnelseForReduksjonEllerIkkeUtbetalt = null ).also { - it.valider(object: Inntektsmelding.Valideringsgrunnlag { + it.valider(object : Inntektsmelding.Valideringsgrunnlag { override fun vedtaksperiode(vedtaksperiodeId: UUID) = null override fun inntektsmeldingIkkeHåndtert(inntektsmelding: Inntektsmelding) {} }, Aktivitetslogg()) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/UtbetalingsakerBuilderTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/UtbetalingsakerBuilderTest.kt index 8d66236713..9f2089fd2a 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/UtbetalingsakerBuilderTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/UtbetalingsakerBuilderTest.kt @@ -16,9 +16,18 @@ class UtbetalingsakerBuilderTest { fun `grupperer vedtaksperioder etter arbeidsgiverperioden`() { val builder = UtbetalingsakerBuilder( vedtaksperiodene = listOf( - ArbeidsgiverperiodeForVedtaksperiode(1.januar til 10.januar, listOf(1.januar til 10.januar)), - ArbeidsgiverperiodeForVedtaksperiode(11.januar til 21.januar, listOf(1.januar til 16.januar)), - ArbeidsgiverperiodeForVedtaksperiode(1.februar til 5.februar, listOf(1.januar til 16.januar)), + ArbeidsgiverperiodeForVedtaksperiode( + 1.januar til 10.januar, + listOf(1.januar til 10.januar) + ), + ArbeidsgiverperiodeForVedtaksperiode( + 11.januar til 21.januar, + listOf(1.januar til 16.januar) + ), + ArbeidsgiverperiodeForVedtaksperiode( + 1.februar til 5.februar, + listOf(1.januar til 16.januar) + ), ArbeidsgiverperiodeForVedtaksperiode(1.mai til 31.mai, listOf(1.mai til 16.mai)), ArbeidsgiverperiodeForVedtaksperiode(1.august til 5.august, emptyList()) ), @@ -26,7 +35,10 @@ class UtbetalingsakerBuilderTest { ) val forventet = listOf( - Utbetalingsak(1.januar, listOf(1.januar til 10.januar, 11.januar til 21.januar, 1.februar til 5.februar)), + Utbetalingsak( + 1.januar, + listOf(1.januar til 10.januar, 11.januar til 21.januar, 1.februar til 5.februar) + ), Utbetalingsak(1.mai, listOf(1.mai til 31.mai)), Utbetalingsak(1.august, listOf(1.august til 5.august)), ) @@ -37,10 +49,22 @@ class UtbetalingsakerBuilderTest { fun `bryter opp utbetalingsaker etter infotrygdutbetaling`() { val builder = UtbetalingsakerBuilder( vedtaksperiodene = listOf( - ArbeidsgiverperiodeForVedtaksperiode(1.januar til 10.januar, listOf(1.januar til 10.januar)), - ArbeidsgiverperiodeForVedtaksperiode(11.januar til 21.januar, listOf(1.januar til 16.januar)), - ArbeidsgiverperiodeForVedtaksperiode(1.februar til 5.februar, listOf(1.januar til 16.januar)), - ArbeidsgiverperiodeForVedtaksperiode(6.februar til 15.februar, listOf(1.januar til 16.januar)) + ArbeidsgiverperiodeForVedtaksperiode( + 1.januar til 10.januar, + listOf(1.januar til 10.januar) + ), + ArbeidsgiverperiodeForVedtaksperiode( + 11.januar til 21.januar, + listOf(1.januar til 16.januar) + ), + ArbeidsgiverperiodeForVedtaksperiode( + 1.februar til 5.februar, + listOf(1.januar til 16.januar) + ), + ArbeidsgiverperiodeForVedtaksperiode( + 6.februar til 15.februar, + listOf(1.januar til 16.januar) + ) ), infotrygdbetalinger = listOf(22.januar til 28.januar) ) @@ -56,17 +80,37 @@ class UtbetalingsakerBuilderTest { fun `bryter ikke opp utbetalingsaker ved overlappende infotrygdutbetaling`() { val builder = UtbetalingsakerBuilder( vedtaksperiodene = listOf( - ArbeidsgiverperiodeForVedtaksperiode(1.januar til 10.januar, listOf(1.januar til 10.januar)), - ArbeidsgiverperiodeForVedtaksperiode(11.januar til 21.januar, listOf(1.januar til 16.januar)), - ArbeidsgiverperiodeForVedtaksperiode(1.februar til 5.februar, listOf(1.januar til 16.januar)), - ArbeidsgiverperiodeForVedtaksperiode(6.februar til 15.februar, listOf(1.januar til 16.januar)) + ArbeidsgiverperiodeForVedtaksperiode( + 1.januar til 10.januar, + listOf(1.januar til 10.januar) + ), + ArbeidsgiverperiodeForVedtaksperiode( + 11.januar til 21.januar, + listOf(1.januar til 16.januar) + ), + ArbeidsgiverperiodeForVedtaksperiode( + 1.februar til 5.februar, + listOf(1.januar til 16.januar) + ), + ArbeidsgiverperiodeForVedtaksperiode( + 6.februar til 15.februar, + listOf(1.januar til 16.januar) + ) ), infotrygdbetalinger = listOf(17.januar til 21.januar) ) val forventet = listOf( - Utbetalingsak(1.januar, listOf(1.januar til 10.januar, 11.januar til 21.januar, 1.februar til 5.februar, 6.februar til 15.februar)), + Utbetalingsak( + 1.januar, + listOf( + 1.januar til 10.januar, + 11.januar til 21.januar, + 1.februar til 5.februar, + 6.februar til 15.februar + ) + ), ) assertEquals(forventet, builder.lagUtbetalingsaker()) } -} \ No newline at end of file +} 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 8d4e5b1c77..5c7a2b1fcf 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" @@ -30,11 +30,13 @@ import org.junit.jupiter.api.Test internal class VilkårsgrunnlagHistorikkInnslagTest { private lateinit var innslag: VilkårsgrunnlagHistorikk.Innslag - private val jurist = BehandlingSubsumsjonslogg(EmptyLog, listOf( + private val jurist = BehandlingSubsumsjonslogg( + EmptyLog, listOf( Subsumsjonskontekst(KontekstType.Fødselsnummer, "fnr"), Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "orgnr"), Subsumsjonskontekst(KontekstType.Vedtaksperiode, "${UUID.randomUUID()}"), - )) + ) + ) private companion object { private val ALDER = 12.februar(1992).alder @@ -58,7 +60,10 @@ internal class VilkårsgrunnlagHistorikkInnslagTest { @Test fun `avviser ikke dager dersom vurdert ok`() { val tidslinjer = listOf(tidslinjeOf(1.NAV)) - innslag.add(1.januar, grunnlagsdata(1.januar, harOpptjening = true, harMinimumInntekt = true, erMedlem = true)) + innslag.add( + 1.januar, + grunnlagsdata(1.januar, harOpptjening = true, harMinimumInntekt = true, erMedlem = true) + ) val resultat = innslag.avvis(tidslinjer, 1.januar til 1.januar, jurist) assertEquals(0, avvisteDager(resultat).size) } @@ -66,7 +71,10 @@ internal class VilkårsgrunnlagHistorikkInnslagTest { @Test fun `avviser med flere begrunnelser`() { val tidslinjer = listOf(tidslinjeOf(1.NAV)) - innslag.add(1.januar, grunnlagsdata(1.januar, harOpptjening = false, harMinimumInntekt = false)) + innslag.add( + 1.januar, + grunnlagsdata(1.januar, harOpptjening = false, harMinimumInntekt = false) + ) val resultat = innslag.avvis(tidslinjer, 1.januar til 1.januar, jurist) val avvisteDager = avvisteDager(resultat) assertEquals(1, avvisteDager.size) @@ -78,7 +86,8 @@ internal class VilkårsgrunnlagHistorikkInnslagTest { @Test fun `avviser på tvers av vilkårsgrunnlagelementer`() { - val tidslinjer = listOf(tidslinjeOf(2.NAV, skjæringstidspunkter = listOf(1.januar, 2.januar))) + val tidslinjer = + listOf(tidslinjeOf(2.NAV, skjæringstidspunkter = listOf(1.januar, 2.januar))) innslag.add(1.januar, grunnlagsdata(1.januar, harOpptjening = false)) innslag.add(2.januar, grunnlagsdata(2.januar, harMinimumInntekt = false)) val resultat = innslag.avvis(tidslinjer, 2.januar til 2.januar, jurist) @@ -90,9 +99,18 @@ internal class VilkårsgrunnlagHistorikkInnslagTest { @Test fun `oppfyller ingen inngangsvilkår deler av perioden`() { - val tidslinjer = listOf(tidslinjeOf(2.NAV, skjæringstidspunkter = listOf(1.januar, 2.januar))) + val tidslinjer = + listOf(tidslinjeOf(2.NAV, skjæringstidspunkter = listOf(1.januar, 2.januar))) innslag.add(1.januar, grunnlagsdata(1.januar)) - innslag.add(2.januar, grunnlagsdata(2.januar, harOpptjening = false, harMinimumInntekt = false, erMedlem = false)) + innslag.add( + 2.januar, + grunnlagsdata( + 2.januar, + harOpptjening = false, + harMinimumInntekt = false, + erMedlem = false + ) + ) val resultat = innslag.avvis(tidslinjer, 2.januar til 2.januar, jurist) val avvisteDager = avvisteDager(resultat) assertEquals(1, avvisteDager.size) @@ -103,31 +121,42 @@ internal class VilkårsgrunnlagHistorikkInnslagTest { } } - private fun grunnlagsdata(skjæringstidspunkt: LocalDate, harOpptjening: Boolean = true, harMinimumInntekt: Boolean = true, erMedlem: Boolean = true): VilkårsgrunnlagHistorikk.Grunnlagsdata { + private fun grunnlagsdata( + skjæringstidspunkt: LocalDate, + harOpptjening: Boolean = true, + harMinimumInntekt: Boolean = true, + erMedlem: Boolean = true + ): VilkårsgrunnlagHistorikk.Grunnlagsdata { val opptjening = if (!harOpptjening) emptyList() else listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag("orgnr", listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Arbeidsforhold(skjæringstidspunkt.minusYears(1), null, false) - )) + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + "orgnr", listOf( + Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Arbeidsforhold( + skjæringstidspunkt.minusYears( + 1 + ), null, false + ) + ) + ) ) val inntekt = if (!harMinimumInntekt) 2000.månedlig else 25000.månedlig return VilkårsgrunnlagHistorikk.Grunnlagsdata( skjæringstidspunkt = skjæringstidspunkt, inntektsgrunnlag = Inntektsgrunnlag.opprett( ALDER, listOf( - ArbeidsgiverInntektsopplysning( - "orgnr", - skjæringstidspunkt til LocalDate.MAX, - Saksbehandler( - skjæringstidspunkt, - UUID.randomUUID(), - inntekt, - "", - null, - LocalDateTime.now() - ), - Refusjonsopplysninger() - ) - ), skjæringstidspunkt, jurist + ArbeidsgiverInntektsopplysning( + "orgnr", + skjæringstidspunkt til LocalDate.MAX, + Saksbehandler( + skjæringstidspunkt, + UUID.randomUUID(), + inntekt, + "", + null, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) + ), skjæringstidspunkt, jurist ), opptjening = Opptjening.nyOpptjening(opptjening, 1.januar), medlemskapstatus = when (erMedlem) { diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikkTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikkTest.kt" index 3b6cce5ef4..396fbb7af1 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikkTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/Vilk\303\245rsgrunnlagHistorikkTest.kt" @@ -52,17 +52,28 @@ internal class VilkårsgrunnlagHistorikkTest { private lateinit var historikk: VilkårsgrunnlagHistorikk private val inspektør get() = Vilkårgrunnlagsinspektør(historikk.view()) private val subsumsjonslogg = SubsumsjonsListLog() - private val jurist = BehandlingSubsumsjonslogg(subsumsjonslogg, listOf( + private val jurist = BehandlingSubsumsjonslogg( + subsumsjonslogg, listOf( Subsumsjonskontekst(KontekstType.Fødselsnummer, "fnr"), Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "orgnr"), Subsumsjonskontekst(KontekstType.Vedtaksperiode, "${UUID.randomUUID()}"), - )) + ) + ) companion object { private const val ORGNR = "123456789" - private val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(ORGNR, 1.desember(2017), type = Arbeidsforholdtype.ORDINÆRT)) + private val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + ORGNR, + 1.desember(2017), + type = Arbeidsforholdtype.ORDINÆRT + ) + ) private val arbeidsforholdFraHistorikk = listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag(ORGNR, listOf(Arbeidsforhold(1.desember(2017), null, false))) + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + ORGNR, + listOf(Arbeidsforhold(1.desember(2017), null, false)) + ) ) } @@ -78,7 +89,10 @@ internal class VilkårsgrunnlagHistorikkTest { VilkårsgrunnlagHistorikk.Grunnlagsdata( skjæringstidspunkt = skjæringstidspunkt, inntektsgrunnlag = inntekt.inntektsgrunnlag(ORGNR), - opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, skjæringstidspunkt), + opptjening = Opptjening.nyOpptjening( + arbeidsforholdFraHistorikk, + skjæringstidspunkt + ), medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja, vurdertOk = true, meldingsreferanseId = UUID.randomUUID(), @@ -88,7 +102,10 @@ internal class VilkårsgrunnlagHistorikkTest { val grunnlag1Januar = grunnlagMedSkjæringstidspunkt(1.januar) val grunnlag1Februar = grunnlagMedSkjæringstidspunkt(1.februar) - assertEquals(1.januar til LocalDate.MAX, skjæringstidspunktperioder(listOf(grunnlag1Januar)).single()) + assertEquals( + 1.januar til LocalDate.MAX, + skjæringstidspunktperioder(listOf(grunnlag1Januar)).single() + ) skjæringstidspunktperioder(listOf(grunnlag1Januar, grunnlag1Februar)).also { resultat -> assertEquals(listOf(januar, 1.februar til LocalDate.MAX), resultat) } @@ -103,21 +120,29 @@ internal class VilkårsgrunnlagHistorikkTest { val gammeltSkjæringstidspunkt = 10.januar val nyttSkjæringstidspunkt = 1.januar - historikk.lagre(VilkårsgrunnlagHistorikk.Grunnlagsdata( - skjæringstidspunkt = gammeltSkjæringstidspunkt, - inntektsgrunnlag = inntekt.inntektsgrunnlag(ORGNR), - opptjening = Opptjening.nyOpptjening(arbeidsforholdFraHistorikk, gammeltSkjæringstidspunkt), - medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja, - vurdertOk = true, - meldingsreferanseId = UUID.randomUUID(), - vilkårsgrunnlagId = UUID.randomUUID() - )) + historikk.lagre( + VilkårsgrunnlagHistorikk.Grunnlagsdata( + skjæringstidspunkt = gammeltSkjæringstidspunkt, + inntektsgrunnlag = inntekt.inntektsgrunnlag(ORGNR), + opptjening = Opptjening.nyOpptjening( + arbeidsforholdFraHistorikk, + gammeltSkjæringstidspunkt + ), + medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja, + vurdertOk = true, + meldingsreferanseId = UUID.randomUUID(), + vilkårsgrunnlagId = UUID.randomUUID() + ) + ) assertEquals(1, historikk.inspektør.vilkårsgrunnlagTeller.size) historikk.oppdaterHistorikk(Aktivitetslogg(), setOf(nyttSkjæringstidspunkt)) assertEquals(2, historikk.inspektør.vilkårsgrunnlagTeller.size) - assertEquals(0, historikk.inspektør.vilkårsgrunnlagTeller[0]) { "det siste innslaget skal være tomt" } + assertEquals( + 0, + historikk.inspektør.vilkårsgrunnlagTeller[0] + ) { "det siste innslaget skal være tomt" } assertEquals(1, historikk.inspektør.vilkårsgrunnlagTeller[1]) assertNull(historikk.vilkårsgrunnlagFor(gammeltSkjæringstidspunkt)) { "skal ikke beholde vilkårsgrunnlag for skjæringstidspunkter som ikke finnes" } assertNull(historikk.vilkårsgrunnlagFor(nyttSkjæringstidspunkt)) { "skal ikke ha vilkårsgrunnlag for skjæringstidspunkt som ikke er vilkårsprøvd" } @@ -135,7 +160,13 @@ internal class VilkårsgrunnlagHistorikkTest { meldingsreferanseId = UUID.randomUUID(), vilkårsgrunnlagId = UUID.randomUUID() ) - val økonomi: Økonomi = grunnlag.faktaavklarteInntekter().forArbeidsgiver(ORGNR)!!.medInntektHvisFinnes(1.januar, Økonomi.ikkeBetalt(), NormalArbeidstaker, Beløpstidslinje()) + val økonomi: Økonomi = grunnlag.faktaavklarteInntekter().forArbeidsgiver(ORGNR)!! + .medInntektHvisFinnes( + 1.januar, + Økonomi.ikkeBetalt(), + NormalArbeidstaker, + Beløpstidslinje() + ) assertEquals(inntekt, økonomi.inspektør.aktuellDagsinntekt) } @@ -151,7 +182,13 @@ internal class VilkårsgrunnlagHistorikkTest { meldingsreferanseId = UUID.randomUUID(), vilkårsgrunnlagId = UUID.randomUUID() ) - val økonomi: Økonomi = grunnlagsdata.faktaavklarteInntekter().forArbeidsgiver(ORGNR)!!.medInntektHvisFinnes(1.januar, Økonomi.ikkeBetalt(), NormalArbeidstaker, Beløpstidslinje()) + val økonomi: Økonomi = grunnlagsdata.faktaavklarteInntekter().forArbeidsgiver(ORGNR)!! + .medInntektHvisFinnes( + 1.januar, + Økonomi.ikkeBetalt(), + NormalArbeidstaker, + Beløpstidslinje() + ) assertEquals(inntekt, økonomi.inspektør.aktuellDagsinntekt) } @@ -167,7 +204,13 @@ internal class VilkårsgrunnlagHistorikkTest { meldingsreferanseId = UUID.randomUUID(), vilkårsgrunnlagId = UUID.randomUUID() ) - val resultat = grunnlag.faktaavklarteInntekter().forArbeidsgiver(ORGNR)?.medInntektHvisFinnes(31.desember(2017), Økonomi.ikkeBetalt(), NormalArbeidstaker, Beløpstidslinje()) + val resultat = grunnlag.faktaavklarteInntekter().forArbeidsgiver(ORGNR) + ?.medInntektHvisFinnes( + 31.desember(2017), + Økonomi.ikkeBetalt(), + NormalArbeidstaker, + Beløpstidslinje() + ) assertNull(resultat) } @@ -180,7 +223,11 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Ja), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) vilkårsgrunnlag.valider( @@ -190,7 +237,8 @@ internal class VilkårsgrunnlagHistorikkTest { ) historikk.lagre(vilkårsgrunnlag.grunnlagsdata()) assertNotNull(historikk.vilkårsgrunnlagFor(1.januar)) - val grunnlagsdataInspektør = GrunnlagsdataInspektør(historikk.vilkårsgrunnlagFor(1.januar)!!.view()) + val grunnlagsdataInspektør = + GrunnlagsdataInspektør(historikk.vilkårsgrunnlagFor(1.januar)!!.view()) assertTrue(grunnlagsdataInspektør.vurdertOk) assertEquals(1, inspektør.vilkårsgrunnlagTeller[0]) } @@ -204,12 +252,20 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Ja), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) vilkårsgrunnlag.valider(Aktivitetslogg(), 10000.månedlig.sykepengegrunnlag, jurist) - SubsumsjonInspektør(subsumsjonslogg).assertVurdert(paragraf = PARAGRAF_8_2, ledd = 1.ledd, versjon = 12.juni(2020)) + SubsumsjonInspektør(subsumsjonslogg).assertVurdert( + paragraf = PARAGRAF_8_2, + ledd = 1.ledd, + versjon = 12.juni(2020) + ) } @Test @@ -222,7 +278,11 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Ja), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) val vilkårsgrunnlag2 = Vilkårsgrunnlag( @@ -232,7 +292,11 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Nei), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) vilkårsgrunnlag1.valider( @@ -248,12 +312,14 @@ internal class VilkårsgrunnlagHistorikkTest { historikk.lagre(vilkårsgrunnlag1.grunnlagsdata()) assertNotNull(historikk.vilkårsgrunnlagFor(1.januar)) - val grunnlagsdataInspektør1 = GrunnlagsdataInspektør(historikk.vilkårsgrunnlagFor(1.januar)!!.view()) + val grunnlagsdataInspektør1 = + GrunnlagsdataInspektør(historikk.vilkårsgrunnlagFor(1.januar)!!.view()) assertTrue(grunnlagsdataInspektør1.vurdertOk) historikk.lagre(vilkårsgrunnlag2.grunnlagsdata()) assertNotNull(historikk.vilkårsgrunnlagFor(1.januar)) - val grunnlagsdataInspektør2 = GrunnlagsdataInspektør(historikk.vilkårsgrunnlagFor(1.januar)!!.view()) + val grunnlagsdataInspektør2 = + GrunnlagsdataInspektør(historikk.vilkårsgrunnlagFor(1.januar)!!.view()) assertFalse(grunnlagsdataInspektør2.vurdertOk) assertEquals(1, inspektør.vilkårsgrunnlagTeller[0]) @@ -269,7 +335,11 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Ja), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) val vilkårsgrunnlag2 = Vilkårsgrunnlag( @@ -279,7 +349,11 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Ja), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) @@ -301,7 +375,11 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Ja), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) vilkårsgrunnlag.valider( @@ -311,7 +389,8 @@ internal class VilkårsgrunnlagHistorikkTest { ) vilkårsgrunnlagHistorikk.lagre(vilkårsgrunnlag.grunnlagsdata()) assertNotNull(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)) - val grunnlagsdataInspektør = GrunnlagsdataInspektør(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)!!.view()) + val grunnlagsdataInspektør = + GrunnlagsdataInspektør(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)!!.view()) assertTrue(grunnlagsdataInspektør.vurdertOk) } @@ -325,7 +404,11 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Nei), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) vilkårsgrunnlag.valider( @@ -335,7 +418,8 @@ internal class VilkårsgrunnlagHistorikkTest { ) vilkårsgrunnlagHistorikk.lagre(vilkårsgrunnlag.grunnlagsdata()) assertNotNull(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)) - val grunnlagsdataInspektør = GrunnlagsdataInspektør(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)!!.view()) + val grunnlagsdataInspektør = + GrunnlagsdataInspektør(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)!!.view()) assertFalse(grunnlagsdataInspektør.vurdertOk) } @@ -350,7 +434,11 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Nei), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) vilkårsgrunnlag1.valider( @@ -365,7 +453,11 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Ja), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) vilkårsgrunnlag2.valider( @@ -376,7 +468,11 @@ internal class VilkårsgrunnlagHistorikkTest { vilkårsgrunnlagHistorikk.lagre(vilkårsgrunnlag1.grunnlagsdata()) vilkårsgrunnlagHistorikk.lagre(vilkårsgrunnlag2.grunnlagsdata()) val utbetalingstidslinjeMedNavDager = tidslinjeOf(16.AP, 10.NAV) - val resultat = vilkårsgrunnlagHistorikk.avvisInngangsvilkår(listOf(utbetalingstidslinjeMedNavDager), 1.januar til 1.januar, jurist).single() + val resultat = vilkårsgrunnlagHistorikk.avvisInngangsvilkår( + listOf(utbetalingstidslinjeMedNavDager), + 1.januar til 1.januar, + jurist + ).single() assertEquals(8, resultat.filterIsInstance().size) } @@ -390,7 +486,11 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Ja), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) vilkårsgrunnlag.valider( @@ -400,10 +500,15 @@ internal class VilkårsgrunnlagHistorikkTest { ) vilkårsgrunnlagHistorikk.lagre(vilkårsgrunnlag.grunnlagsdata()) assertNotNull(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)) - val grunnlagsdataInspektør = GrunnlagsdataInspektør(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)!!.view()) + val grunnlagsdataInspektør = + GrunnlagsdataInspektør(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)!!.view()) assertFalse(grunnlagsdataInspektør.vurdertOk) val utbetalingstidslinjeMedNavDager = tidslinjeOf(16.AP, 10.NAV) - val resultat = vilkårsgrunnlagHistorikk.avvisInngangsvilkår(listOf(utbetalingstidslinjeMedNavDager), 1.januar til 1.januar, jurist).single() + val resultat = vilkårsgrunnlagHistorikk.avvisInngangsvilkår( + listOf(utbetalingstidslinjeMedNavDager), + 1.januar til 1.januar, + jurist + ).single() resultat.filterIsInstance().let { avvisteDager -> assertEquals(8, avvisteDager.size) avvisteDager.forEach { @@ -425,7 +530,11 @@ internal class VilkårsgrunnlagHistorikkTest { orgnummer = "ORGNUMMER", medlemskapsvurdering = Medlemskapsvurdering(Medlemskapsvurdering.Medlemskapstatus.Ja), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntekter = emptyList()), - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering("ORGNUMMER", INGEN, 1.januar), + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + "ORGNUMMER", + INGEN, + 1.januar + ), arbeidsforhold = arbeidsforhold ) vilkårsgrunnlag.valider( @@ -435,10 +544,15 @@ internal class VilkårsgrunnlagHistorikkTest { ) vilkårsgrunnlagHistorikk.lagre(vilkårsgrunnlag.grunnlagsdata()) assertNotNull(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)) - val grunnlagsdataInspektør = GrunnlagsdataInspektør(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)!!.view()) + val grunnlagsdataInspektør = + GrunnlagsdataInspektør(vilkårsgrunnlagHistorikk.vilkårsgrunnlagFor(1.januar)!!.view()) assertFalse(grunnlagsdataInspektør.vurdertOk) val utbetalingstidslinjeMedNavDager = tidslinjeOf(16.AP, 10.NAV) - val resultat = vilkårsgrunnlagHistorikk.avvisInngangsvilkår(listOf(utbetalingstidslinjeMedNavDager), 1.januar til 1.januar, jurist).single() + val resultat = vilkårsgrunnlagHistorikk.avvisInngangsvilkår( + listOf(utbetalingstidslinjeMedNavDager), + 1.januar til 1.januar, + jurist + ).single() resultat.filterIsInstance().let { avvisteDager -> assertEquals(8, avvisteDager.size) @@ -459,27 +573,27 @@ internal class VilkårsgrunnlagHistorikkTest { assertEquals(element1, element1) assertEquals( element1, VilkårsgrunnlagHistorikk.InfotrygdVilkårsgrunnlag( - skjæringstidspunkt = 1.januar, - inntektsgrunnlag = sykepengegrunnlag - ) + skjæringstidspunkt = 1.januar, + inntektsgrunnlag = sykepengegrunnlag + ) ) assertNotEquals( element1, VilkårsgrunnlagHistorikk.InfotrygdVilkårsgrunnlag( - skjæringstidspunkt = 2.januar, - inntektsgrunnlag = sykepengegrunnlag - ) + skjæringstidspunkt = 2.januar, + inntektsgrunnlag = sykepengegrunnlag + ) ) assertNotEquals( element1, VilkårsgrunnlagHistorikk.InfotrygdVilkårsgrunnlag( - skjæringstidspunkt = 5.februar, - inntektsgrunnlag = 25000.månedlig.sykepengegrunnlag - ) + skjæringstidspunkt = 5.februar, + inntektsgrunnlag = 25000.månedlig.sykepengegrunnlag + ) ) assertNotEquals( element1, VilkårsgrunnlagHistorikk.InfotrygdVilkårsgrunnlag( - skjæringstidspunkt = 1.januar, - inntektsgrunnlag = 30900.månedlig.sykepengegrunnlag - ) + skjæringstidspunkt = 1.januar, + inntektsgrunnlag = 30900.månedlig.sykepengegrunnlag + ) ) } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/bel\303\270p/Bel\303\270pstidslinjeTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/bel\303\270p/Bel\303\270pstidslinjeTest.kt" index 897aac43d6..c1e2a98834 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/bel\303\270p/Bel\303\270pstidslinjeTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/bel\303\270p/Bel\303\270pstidslinjeTest.kt" @@ -43,7 +43,8 @@ internal class BeløpstidslinjeTest { val fylt = sammenslått.fyll() assertEquals(listOf(1.januar til 30.april), fylt.perioderMedBeløp) - val forventet = (Arbeidsgiver oppgir 1000.daglig fra 1.januar til 28.februar) og (Saksbehandler oppgir 2000.daglig fra 1.mars til 1.april) + (Systemet oppgir 3000.daglig fra 2.april til 30.april) + val forventet = + (Arbeidsgiver oppgir 1000.daglig fra 1.januar til 28.februar) og (Saksbehandler oppgir 2000.daglig fra 1.mars til 1.april) + (Systemet oppgir 3000.daglig fra 2.april til 30.april) assertEquals(forventet, fylt) } @@ -73,7 +74,8 @@ internal class BeløpstidslinjeTest { @Test fun `beløpstidlinje lager en tidslinje med beløp og kilde`() { - val beløpstidslinje = (Arbeidsgiver oppgir 31000.månedlig fra 1.januar til 10.januar) og (Saksbehandler oppgir 15500.månedlig fra 11.januar til 31.januar) + val beløpstidslinje = + (Arbeidsgiver oppgir 31000.månedlig fra 1.januar til 10.januar) og (Saksbehandler oppgir 15500.månedlig fra 11.januar til 31.januar) assertEquals(10, beløpstidslinje.count { it.kilde == Arbeidsgiver }) assertEquals(21, beløpstidslinje.count { it.kilde == Saksbehandler }) @@ -95,20 +97,24 @@ internal class BeløpstidslinjeTest { @Test fun `Man skal ikke kunne opprette en ny tidslinje med overlappende dager`() { assertThrows { - Beløpstidslinje(Beløpsdag(1.januar, 1.daglig, Arbeidsgiver), Beløpsdag(1.januar, 2.daglig, Sykmeldt)) + Beløpstidslinje( + Beløpsdag(1.januar, 1.daglig, Arbeidsgiver), + Beløpsdag(1.januar, 2.daglig, Sykmeldt) + ) } } @Test - fun `Du haver to stykk beløpstidslinje, som du ønsker forent`() { - val gammelTidslinje = (Arbeidsgiver oppgir 31000.månedlig hele januar) og (Arbeidsgiver oppgir 0.daglig hele mars) + fun `Du haver to stykk beløpstidslinje, som du ønsker forent`() { + val gammelTidslinje = + (Arbeidsgiver oppgir 31000.månedlig hele januar) og (Arbeidsgiver oppgir 0.daglig hele mars) val nyTidslinje = (Saksbehandler oppgir 31005.månedlig fra 20.januar til 10.mars) val forventetTidslinje = (Arbeidsgiver oppgir 31000.månedlig fra 1.januar til 19.januar) og - (Saksbehandler oppgir 31005.månedlig fra 20.januar til 10.mars) og - (Arbeidsgiver oppgir 0.daglig fra 11.mars til 31.mars) + (Saksbehandler oppgir 31005.månedlig fra 20.januar til 10.mars) og + (Arbeidsgiver oppgir 0.daglig fra 11.mars til 31.mars) assertEquals(forventetTidslinje, gammelTidslinje og nyTidslinje) } @@ -175,7 +181,10 @@ internal class BeløpstidslinjeTest { val tidslinje = Arbeidsgiver oppgir 1000.daglig hele februar assertEquals(tidslinje, tidslinje.strekk(februar)) assertEquals(tidslinje, tidslinje.strekk(2.februar til 28.februar)) - assertEquals(Arbeidsgiver oppgir 1000.daglig fra 31.januar til 28.februar, tidslinje.strekk(31.januar til 28.februar)) + assertEquals( + Arbeidsgiver oppgir 1000.daglig fra 31.januar til 28.februar, + tidslinje.strekk(31.januar til 28.februar) + ) } @Test @@ -183,31 +192,53 @@ internal class BeløpstidslinjeTest { val tidslinje = Arbeidsgiver oppgir 1000.daglig hele februar assertEquals(tidslinje, tidslinje.strekk(februar)) assertEquals(tidslinje, tidslinje.strekk(1.februar til 27.februar)) - assertEquals(Arbeidsgiver oppgir 1000.daglig fra 1.februar til 1.mars, tidslinje.strekk(1.februar til 1.mars)) + assertEquals( + Arbeidsgiver oppgir 1000.daglig fra 1.februar til 1.mars, + tidslinje.strekk(1.februar til 1.mars) + ) } @Test fun `Strekker en beløpstidslinje i snuten og halen`() { - val tidslinje = (Arbeidsgiver oppgir 1000.daglig kun 1.februar) og (Saksbehandler oppgir 2000.daglig kun 28.februar) - val forventet = (Arbeidsgiver oppgir 1000.daglig fra 31.januar til 1.februar) og (Saksbehandler oppgir 2000.daglig fra 28.februar til 1.mars) + val tidslinje = + (Arbeidsgiver oppgir 1000.daglig kun 1.februar) og (Saksbehandler oppgir 2000.daglig kun 28.februar) + val forventet = + (Arbeidsgiver oppgir 1000.daglig fra 31.januar til 1.februar) og (Saksbehandler oppgir 2000.daglig fra 28.februar til 1.mars) assertEquals(forventet, tidslinje.strekk(31.januar til 1.mars)) assertEquals(UkjentDag, forventet[2.februar]) assertEquals(UkjentDag, forventet[27.februar]) - assertEquals(Systemet oppgir 100.daglig fra 5.januar til 7.januar, (Systemet oppgir 100.daglig kun 6.januar).strekk(5.januar til 7.januar)) + assertEquals( + Systemet oppgir 100.daglig fra 5.januar til 7.januar, + (Systemet oppgir 100.daglig kun 6.januar).strekk(5.januar til 7.januar) + ) } @Test fun `Finne første endring i beløp`() { assertNull(Beløpstidslinje().førsteEndring(Beløpstidslinje())) assertNull((Saksbehandler oppgir 100.daglig hele januar).førsteEndring(Arbeidsgiver oppgir 100.daglig hele januar)) - assertEquals(1.januar, (Saksbehandler oppgir 100.daglig hele januar).førsteEndring(Arbeidsgiver oppgir 101.daglig hele januar)) - assertEquals(15.januar, (Saksbehandler oppgir 100.daglig hele januar).førsteEndring((Arbeidsgiver oppgir 100.daglig fra 1.januar til 14.januar) og (Arbeidsgiver oppgir 101.daglig kun 15.januar))) - - assertEquals(1.januar, (Saksbehandler oppgir 100.daglig hele januar).førsteEndring(Arbeidsgiver oppgir 100.daglig fra 2.januar til 31.januar)) - assertEquals(31.januar, (Saksbehandler oppgir 100.daglig hele januar).førsteEndring(Arbeidsgiver oppgir 100.daglig fra 1.januar til 30.januar)) - val hulleteSaksbehandler = (Saksbehandler oppgir 100.daglig kun 1.januar) og (Saksbehandler oppgir 100.daglig kun 31.januar) - val hulleteArbeidsgiver = (Saksbehandler oppgir 100.daglig kun 1.januar) og (Saksbehandler oppgir 100.daglig kun 30.januar) + assertEquals( + 1.januar, + (Saksbehandler oppgir 100.daglig hele januar).førsteEndring(Arbeidsgiver oppgir 101.daglig hele januar) + ) + assertEquals( + 15.januar, + (Saksbehandler oppgir 100.daglig hele januar).førsteEndring((Arbeidsgiver oppgir 100.daglig fra 1.januar til 14.januar) og (Arbeidsgiver oppgir 101.daglig kun 15.januar)) + ) + + assertEquals( + 1.januar, + (Saksbehandler oppgir 100.daglig hele januar).førsteEndring(Arbeidsgiver oppgir 100.daglig fra 2.januar til 31.januar) + ) + assertEquals( + 31.januar, + (Saksbehandler oppgir 100.daglig hele januar).førsteEndring(Arbeidsgiver oppgir 100.daglig fra 1.januar til 30.januar) + ) + val hulleteSaksbehandler = + (Saksbehandler oppgir 100.daglig kun 1.januar) og (Saksbehandler oppgir 100.daglig kun 31.januar) + val hulleteArbeidsgiver = + (Saksbehandler oppgir 100.daglig kun 1.januar) og (Saksbehandler oppgir 100.daglig kun 30.januar) assertEquals(30.januar, hulleteSaksbehandler.førsteEndring(hulleteArbeidsgiver)) assertEquals(30.januar, hulleteArbeidsgiver.førsteEndring(hulleteSaksbehandler)) } @@ -215,36 +246,47 @@ internal class BeløpstidslinjeTest { @Test fun dto() { val tidslinje = (Arbeidsgiver oppgir 500.daglig kun 1.februar) og - (Arbeidsgiver oppgir 250.daglig fra 2.februar til 10.februar) og - (Arbeidsgiver oppgir 500.daglig fra 11.februar til 12.februar) - - val kilde = BeløpstidslinjeDto.BeløpstidslinjedagKildeDto(Arbeidsgiver.meldingsreferanseId, Arbeidsgiver.avsender.dto(), Arbeidsgiver.tidsstempel) - assertEquals(BeløpstidslinjeDto( - perioder = listOf( - BeløpstidslinjeDto.BeløpstidslinjeperiodeDto( - fom = 1.februar, - tom = 1.februar, - dagligBeløp = 500.0, - kilde = kilde - ), - BeløpstidslinjeDto.BeløpstidslinjeperiodeDto( - fom = 2.februar, - tom = 10.februar, - dagligBeløp = 250.0, - kilde = kilde - ), - BeløpstidslinjeDto.BeløpstidslinjeperiodeDto( - fom = 11.februar, - tom = 12.februar, - dagligBeløp = 500.0, - kilde = kilde + (Arbeidsgiver oppgir 250.daglig fra 2.februar til 10.februar) og + (Arbeidsgiver oppgir 500.daglig fra 11.februar til 12.februar) + + val kilde = BeløpstidslinjeDto.BeløpstidslinjedagKildeDto( + Arbeidsgiver.meldingsreferanseId, + Arbeidsgiver.avsender.dto(), + Arbeidsgiver.tidsstempel + ) + assertEquals( + BeløpstidslinjeDto( + perioder = listOf( + BeløpstidslinjeDto.BeløpstidslinjeperiodeDto( + fom = 1.februar, + tom = 1.februar, + dagligBeløp = 500.0, + kilde = kilde + ), + BeløpstidslinjeDto.BeløpstidslinjeperiodeDto( + fom = 2.februar, + tom = 10.februar, + dagligBeløp = 250.0, + kilde = kilde + ), + BeløpstidslinjeDto.BeløpstidslinjeperiodeDto( + fom = 11.februar, + tom = 12.februar, + dagligBeløp = 500.0, + kilde = kilde + ) ) - ) - ), tidslinje.dto()) + ), tidslinje.dto() + ) } internal companion object { - internal fun assertBeløpstidslinje(beløpstidslinje: Beløpstidslinje, periode: Periode, beløp: Inntekt, meldingsreferanseId: UUID? = null) { + internal fun assertBeløpstidslinje( + beløpstidslinje: Beløpstidslinje, + periode: Periode, + beløp: Inntekt, + meldingsreferanseId: UUID? = null + ) { assertTrue(beløpstidslinje.isNotEmpty()) assertEquals(periode, beløpstidslinje.first().dato til beløpstidslinje.last().dato) assertTrue(beløpstidslinje.all { it.beløp == beløp }) @@ -253,4 +295,4 @@ internal class BeløpstidslinjeTest { } } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/builders/UtbetalingsdagerBuilderTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/builders/UtbetalingsdagerBuilderTest.kt index 97356f6472..82c3bb2448 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/builders/UtbetalingsdagerBuilderTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/builders/UtbetalingsdagerBuilderTest.kt @@ -51,7 +51,11 @@ internal class UtbetalingsdagerBuilderTest { Utbetalingsdag(4.januar, Arbeidsdag), Utbetalingsdag(5.januar, Fridag), Utbetalingsdag(6.januar, ForeldetDag), - Utbetalingsdag(7.januar, AvvistDag, listOf(Utbetalingsdag.EksternBegrunnelseDTO.SykepengedagerOppbrukt)) + Utbetalingsdag( + 7.januar, + AvvistDag, + listOf(Utbetalingsdag.EksternBegrunnelseDTO.SykepengedagerOppbrukt) + ) ), builder.result() ) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdInntektsopplysningTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdInntektsopplysningTest.kt index e05c0f8f19..6df1473a49 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdInntektsopplysningTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdInntektsopplysningTest.kt @@ -37,17 +37,33 @@ internal class InfotrygdInntektsopplysningTest { assertEquals(inntektsopplysning(1.januar), inntektsopplysning(1.januar)) assertNotEquals(inntektsopplysning(), inntektsopplysning(1.januar)) assertNotEquals(inntektsopplysning(1.januar), inntektsopplysning(2.januar)) - assertNotEquals(Inntektsopplysning(ORGNR, DATO, 1000.månedlig, true, null), Inntektsopplysning(ORGNR, DATO, 1000.månedlig, false, null)) - assertNotEquals(Inntektsopplysning(ORGNR, DATO, 1000.månedlig, true, null), Inntektsopplysning(ORGNR, DATO, 2000.månedlig, true, null)) - assertNotEquals(Inntektsopplysning(ORGNR, 1.januar, 1000.månedlig, true, null), Inntektsopplysning(ORGNR, 2.januar, 2100.månedlig, true, null)) - assertNotEquals(Inntektsopplysning("ag1", DATO, 1000.månedlig, true, null), Inntektsopplysning("ag2", DATO, 2100.månedlig, true, null)) - assertEquals(Inntektsopplysning("ag1", DATO, 123.6667.månedlig, true, null), Inntektsopplysning("ag1", DATO, 123.6667.månedlig, true, null)) + assertNotEquals( + Inntektsopplysning(ORGNR, DATO, 1000.månedlig, true, null), + Inntektsopplysning(ORGNR, DATO, 1000.månedlig, false, null) + ) + assertNotEquals( + Inntektsopplysning(ORGNR, DATO, 1000.månedlig, true, null), + Inntektsopplysning(ORGNR, DATO, 2000.månedlig, true, null) + ) + assertNotEquals( + Inntektsopplysning(ORGNR, 1.januar, 1000.månedlig, true, null), + Inntektsopplysning(ORGNR, 2.januar, 2100.månedlig, true, null) + ) + assertNotEquals( + Inntektsopplysning("ag1", DATO, 1000.månedlig, true, null), + Inntektsopplysning("ag2", DATO, 2100.månedlig, true, null) + ) + assertEquals( + Inntektsopplysning("ag1", DATO, 123.6667.månedlig, true, null), + Inntektsopplysning("ag1", DATO, 123.6667.månedlig, true, null) + ) } private fun assertEquals(one: Inntektsopplysning, two: Inntektsopplysning) { assertTrue(one.funksjoneltLik(two)) assertTrue(two.funksjoneltLik(one)) } + private fun assertNotEquals(one: Inntektsopplysning, two: Inntektsopplysning) { assertFalse(one.funksjoneltLik(two)) assertFalse(two.funksjoneltLik(one)) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkElementTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkElementTest.kt index 4da49975f0..19eda9db3e 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkElementTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkElementTest.kt @@ -65,7 +65,13 @@ internal class InfotrygdhistorikkElementTest { fun `lik historikk`() { val perioder = listOf( Friperiode(1.januar, 31.januar), - ArbeidsgiverUtbetalingsperiode("orgnr", 1.februar, 28.februar, 100.prosent, 25000.månedlig) + ArbeidsgiverUtbetalingsperiode( + "orgnr", + 1.februar, + 28.februar, + 100.prosent, + 25000.månedlig + ) ) val inntekter = listOf( Inntektsopplysning("orgnr", 1.januar, 25000.månedlig, true) @@ -75,8 +81,14 @@ internal class InfotrygdhistorikkElementTest { ) assertEquals(nyttHistorikkelement(), nyttHistorikkelement()) assertEquals(nyttHistorikkelement(perioder), nyttHistorikkelement(perioder)) - assertNotEquals(nyttHistorikkelement(perioder, inntekter), nyttHistorikkelement(inntekter = inntekter)) - assertNotEquals(nyttHistorikkelement(perioder, inntekter), nyttHistorikkelement(perioder, inntekter, arbeidskategorikoder)) + assertNotEquals( + nyttHistorikkelement(perioder, inntekter), + nyttHistorikkelement(inntekter = inntekter) + ) + assertNotEquals( + nyttHistorikkelement(perioder, inntekter), + nyttHistorikkelement(perioder, inntekter, arbeidskategorikoder) + ) assertEquals(nyttHistorikkelement(), nyttHistorikkelement()) } @@ -89,14 +101,26 @@ internal class InfotrygdhistorikkElementTest { fun `person- og arbeidsgiverutbetaling på samme dag`() { val element1 = nyttHistorikkelement( perioder = listOf( - ArbeidsgiverUtbetalingsperiode("orgnr", 1.januar, 1.januar, 100.prosent, 1000.daglig), + ArbeidsgiverUtbetalingsperiode( + "orgnr", + 1.januar, + 1.januar, + 100.prosent, + 1000.daglig + ), PersonUtbetalingsperiode("orgnr", 1.januar, 1.januar, 100.prosent, 1000.daglig) ) ) val identiskElement = nyttHistorikkelement( perioder = listOf( PersonUtbetalingsperiode("orgnr", 1.januar, 1.januar, 100.prosent, 1000.daglig), - ArbeidsgiverUtbetalingsperiode("orgnr", 1.januar, 1.januar, 100.prosent, 1000.daglig) + ArbeidsgiverUtbetalingsperiode( + "orgnr", + 1.januar, + 1.januar, + 100.prosent, + 1000.daglig + ) ) ) assertEquals(element1, identiskElement) @@ -135,7 +159,13 @@ internal class InfotrygdhistorikkElementTest { fun `samlet utbetalingstidslinje`() { val element = nyttHistorikkelement( listOf( - ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 10.januar, 100.prosent, 25000.månedlig), + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.januar, + 10.januar, + 100.prosent, + 25000.månedlig + ), Friperiode(11.januar, 20.januar), ) ) @@ -148,10 +178,28 @@ internal class InfotrygdhistorikkElementTest { fun `sammenhengende tidslinje`() { val element = nyttHistorikkelement( listOf( - ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 10.januar, 100.prosent, 25000.månedlig), + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.januar, + 10.januar, + 100.prosent, + 25000.månedlig + ), Friperiode(11.januar, 12.januar), - ArbeidsgiverUtbetalingsperiode("ag2", 13.januar, 15.januar, 100.prosent, 25000.månedlig), - ArbeidsgiverUtbetalingsperiode("ag1", 16.januar, 20.januar, 100.prosent, 25000.månedlig) + ArbeidsgiverUtbetalingsperiode( + "ag2", + 13.januar, + 15.januar, + 100.prosent, + 25000.månedlig + ), + ArbeidsgiverUtbetalingsperiode( + "ag1", + 16.januar, + 20.januar, + 100.prosent, + 25000.månedlig + ) ) ) val tidslinje = element.sykdomstidslinje() @@ -287,11 +335,22 @@ internal class InfotrygdhistorikkElementTest { (100 * gradering).roundToInt().prosent, (dagsats * gradering).roundToInt().daglig ), - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.februar, 28.februar, 100.prosent, dagsats.daglig) + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.februar, + 28.februar, + 100.prosent, + dagsats.daglig + ) ) val inntekter = listOf( - Inntektsopplysning(ORGNUMMER, 1.januar, (dagsats * gradering).roundToInt().daglig, true), + Inntektsopplysning( + ORGNUMMER, + 1.januar, + (dagsats * gradering).roundToInt().daglig, + true + ), Inntektsopplysning(ORGNUMMER, 1.februar, dagsats.daglig, true) ) @@ -303,8 +362,20 @@ internal class InfotrygdhistorikkElementTest { @Test fun `lager ikke warning når dagsats ikke endrer seg i en sammenhengende periode`() { val utbetalinger = listOf( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 31.januar, 100.prosent, 1234.daglig), - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.februar, 28.februar, 100.prosent, 1234.daglig) + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 31.januar, + 100.prosent, + 1234.daglig + ), + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.februar, + 28.februar, + 100.prosent, + 1234.daglig + ) ) val inntekter = listOf( Inntektsopplysning(ORGNUMMER, 1.januar, 1234.daglig, true), @@ -318,11 +389,18 @@ internal class InfotrygdhistorikkElementTest { @Test fun `RefusjonTilArbeidsgiver mappes til utbetalingstidslinje`() { val utbetalinger = listOf( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 10.januar, 100.prosent, 1234.daglig), + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 10.januar, + 100.prosent, + 1234.daglig + ), ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 10.januar, 100.prosent, 1234.daglig) ) - val tidslinje = utbetalinger.map { it.utbetalingstidslinje() }.reduce(Utbetalingstidslinje::plus) + val tidslinje = + utbetalinger.map { it.utbetalingstidslinje() }.reduce(Utbetalingstidslinje::plus) aktivitetslogg.assertIngenVarsler() @@ -335,12 +413,25 @@ internal class InfotrygdhistorikkElementTest { @Test fun `RefusjonTilArbeidsgiver regnes som utbetalingsdag selv om den overlapper med ferie`() { val utbetalinger = listOf( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 10.januar, 100.prosent, 1234.daglig), + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 10.januar, + 100.prosent, + 1234.daglig + ), Friperiode(5.januar, 20.januar), - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 15.januar, 25.januar, 100.prosent, 1234.daglig) + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 15.januar, + 25.januar, + 100.prosent, + 1234.daglig + ) ) - val tidslinje = utbetalinger.map { it.utbetalingstidslinje() }.reduce(Utbetalingstidslinje::plus) + val tidslinje = + utbetalinger.map { it.utbetalingstidslinje() }.reduce(Utbetalingstidslinje::plus) aktivitetslogg.assertIngenVarsler() @@ -353,10 +444,17 @@ internal class InfotrygdhistorikkElementTest { @Test fun `Feiler ikke selv om ukjent dag overlappes helt av ReduksjonArbeidsgiverRefusjon`() { val utbetalinger = listOf( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 10.januar, 100.prosent, 1234.daglig), + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 10.januar, + 100.prosent, + 1234.daglig + ), ) - val tidslinje = utbetalinger.map { it.utbetalingstidslinje() }.reduce(Utbetalingstidslinje::plus) + val tidslinje = + utbetalinger.map { it.utbetalingstidslinje() }.reduce(Utbetalingstidslinje::plus) val inspektør = tidslinje.inspektør assertEquals(1.januar, inspektør.førstedato) @@ -497,7 +595,13 @@ internal class InfotrygdhistorikkElementTest { Inntektsopplysning(ORGNUMMER, 1.januar(2018), 4321.månedlig, true), ) ) - assertTrue(element.valider(aktivitetslogg, Periode(1.februar(2019), 28.februar(2019)), "ag1")) + assertTrue( + element.valider( + aktivitetslogg, + Periode(1.februar(2019), 28.februar(2019)), + "ag1" + ) + ) aktivitetslogg.assertIngenVarsler() } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkTest.kt index 8f0568042b..95feb08bae 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/InfotrygdhistorikkTest.kt @@ -35,6 +35,7 @@ internal class InfotrygdhistorikkTest { private companion object { private val tidligsteDato = 1.januar } + private lateinit var historikk: Infotrygdhistorikk private lateinit var aktivitetslogg: Aktivitetslogg @@ -56,7 +57,10 @@ internal class InfotrygdhistorikkTest { fun `kan justere perioden for oppfrisk`() { aktivitetslogg.barn().also { historikk.oppfriskNødvendig(it, tidligsteDato) - assertEquals("${tidligsteDato.minusYears(4)}", it.behov.first().detaljer()["historikkFom"]) + assertEquals( + "${tidligsteDato.minusYears(4)}", + it.behov.first().detaljer()["historikkFom"] + ) assertEquals("${LocalDate.now()}", it.behov.first().detaljer()["historikkTom"]) } aktivitetslogg.barn().also { @@ -87,10 +91,12 @@ internal class InfotrygdhistorikkTest { @Test fun `tømme historikk - med ulagret data`() { val tidsstempel = LocalDateTime.now() - historikk.oppdaterHistorikk(historikkelement( - oppdatert = tidsstempel, - perioder = listOf(Friperiode(1.januar, 10.januar)) - )) + historikk.oppdaterHistorikk( + historikkelement( + oppdatert = tidsstempel, + perioder = listOf(Friperiode(1.januar, 10.januar)) + ) + ) historikk.tøm() historikk.oppfriskNødvendig(aktivitetslogg, tidligsteDato) assertTrue(aktivitetslogg.behov.isNotEmpty()) { aktivitetslogg.toString() } @@ -101,14 +107,18 @@ internal class InfotrygdhistorikkTest { fun `tømme historikk - med flere ulagret data`() { val tidsstempel1 = LocalDateTime.now().minusHours(1) val tidsstempel2 = LocalDateTime.now() - historikk.oppdaterHistorikk(historikkelement( - oppdatert = tidsstempel1, - perioder = listOf(Friperiode(1.januar, 5.januar)) - )) - historikk.oppdaterHistorikk(historikkelement( - oppdatert = tidsstempel2, - perioder = listOf(Friperiode(1.januar, 10.januar)) - )) + historikk.oppdaterHistorikk( + historikkelement( + oppdatert = tidsstempel1, + perioder = listOf(Friperiode(1.januar, 5.januar)) + ) + ) + historikk.oppdaterHistorikk( + historikkelement( + oppdatert = tidsstempel2, + perioder = listOf(Friperiode(1.januar, 10.januar)) + ) + ) historikk.tøm() historikk.oppfriskNødvendig(aktivitetslogg, tidligsteDato) assertTrue(aktivitetslogg.behov.isNotEmpty()) { aktivitetslogg.toString() } @@ -120,10 +130,12 @@ internal class InfotrygdhistorikkTest { @Test fun `tømme historikk - etter lagring av tom inntektliste`() { val historikk = Infotrygdhistorikk.gjenopprett( - InfotrygdhistorikkInnDto(listOf( - eksisterendeInfotrygdHistorikkelement(), - eksisterendeInfotrygdHistorikkelement() - )) + InfotrygdhistorikkInnDto( + listOf( + eksisterendeInfotrygdHistorikkelement(), + eksisterendeInfotrygdHistorikkelement() + ) + ) ) historikk.tøm() historikk.oppfriskNødvendig(aktivitetslogg, tidligsteDato) @@ -133,7 +145,11 @@ internal class InfotrygdhistorikkTest { @Test fun `trenger ikke oppfriske gammel historikk`() { - historikk.oppdaterHistorikk(historikkelement(oppdatert = LocalDateTime.now().minusHours(24))) + historikk.oppdaterHistorikk( + historikkelement( + oppdatert = LocalDateTime.now().minusHours(24) + ) + ) historikk.oppfriskNødvendig(aktivitetslogg, tidligsteDato) assertTrue(aktivitetslogg.behov.isNotEmpty()) assertEquals(1, historikk.inspektør.elementer()) @@ -158,7 +174,13 @@ internal class InfotrygdhistorikkTest { @Test fun `oppdaterer tidspunkt når ny historikk er lik gammel`() { val perioder = listOf( - ArbeidsgiverUtbetalingsperiode("orgnr", 1.januar, 31.januar, 100.prosent, 25000.månedlig) + ArbeidsgiverUtbetalingsperiode( + "orgnr", + 1.januar, + 31.januar, + 100.prosent, + 25000.månedlig + ) ) val nå = LocalDateTime.now() val gammel = nå.minusHours(24) @@ -177,9 +199,19 @@ internal class InfotrygdhistorikkTest { @Test fun `utbetalingstidslinje kuttes ikke`() { - historikk.oppdaterHistorikk(historikkelement(listOf( - ArbeidsgiverUtbetalingsperiode("orgnr", 1.januar, 31.januar, 100.prosent, 25000.månedlig) - ))) + historikk.oppdaterHistorikk( + historikkelement( + listOf( + ArbeidsgiverUtbetalingsperiode( + "orgnr", + 1.januar, + 31.januar, + 100.prosent, + 25000.månedlig + ) + ) + ) + ) historikk.utbetalingstidslinje().also { assertEquals(januar, it.periode()) } @@ -188,28 +220,53 @@ internal class InfotrygdhistorikkTest { @Test fun `rekkefølge respekteres ved deserialisering`() { val perioder = listOf( - ArbeidsgiverUtbetalingsperiode("orgnr", 1.januar, 31.januar, 100.prosent, 1154.daglig), - ArbeidsgiverUtbetalingsperiode("orgnr", 1.februar, 28.februar, 100.prosent, 1154.daglig), - Friperiode(1.mars, 31.mars) + ArbeidsgiverUtbetalingsperiode("orgnr", 1.januar, 31.januar, 100.prosent, 1154.daglig), + ArbeidsgiverUtbetalingsperiode( + "orgnr", + 1.februar, + 28.februar, + 100.prosent, + 1154.daglig + ), + Friperiode(1.mars, 31.mars) ) val nå = LocalDateTime.now() historikk = Infotrygdhistorikk.gjenopprett( InfotrygdhistorikkInnDto( - elementer = listOf(PersonData.InfotrygdhistorikkElementData( - id = UUID.randomUUID(), - tidsstempel = nå, - hendelseId = UUID.randomUUID(), - ferieperioder = listOf(PersonData.InfotrygdhistorikkElementData.FerieperiodeData(1.mars, 31.mars)), - arbeidsgiverutbetalingsperioder = listOf( - PersonData.InfotrygdhistorikkElementData.ArbeidsgiverutbetalingsperiodeData("orgnr", 1.februar, 28.februar, 100.0, 1154), - PersonData.InfotrygdhistorikkElementData.ArbeidsgiverutbetalingsperiodeData("orgnr", 1.januar, 31.januar, 100.0, 1154) - ), - personutbetalingsperioder = emptyList(), - inntekter = emptyList(), - arbeidskategorikoder = emptyMap(), - oppdatert = nå - ).tilDto()) - ) + elementer = listOf( + PersonData.InfotrygdhistorikkElementData( + id = UUID.randomUUID(), + tidsstempel = nå, + hendelseId = UUID.randomUUID(), + ferieperioder = listOf( + PersonData.InfotrygdhistorikkElementData.FerieperiodeData( + 1.mars, + 31.mars + ) + ), + arbeidsgiverutbetalingsperioder = listOf( + PersonData.InfotrygdhistorikkElementData.ArbeidsgiverutbetalingsperiodeData( + "orgnr", + 1.februar, + 28.februar, + 100.0, + 1154 + ), + PersonData.InfotrygdhistorikkElementData.ArbeidsgiverutbetalingsperiodeData( + "orgnr", + 1.januar, + 31.januar, + 100.0, + 1154 + ) + ), + personutbetalingsperioder = emptyList(), + inntekter = emptyList(), + arbeidskategorikoder = emptyMap(), + oppdatert = nå + ).tilDto() + ) + ) ) assertEquals(1, historikk.inspektør.elementer()) assertFalse(historikk.oppdaterHistorikk(historikkelement(perioder))) @@ -224,10 +281,20 @@ internal class InfotrygdhistorikkTest { @Test fun `nyere opplysninger i Infotrygd`() { - historikk.oppdaterHistorikk(historikkelement(listOf( - ArbeidsgiverUtbetalingsperiode("ag1", 1.februar, 15.februar, 100.prosent, 1500.daglig), - Friperiode(15.mars, 20.mars) - ), inntekter = listOf(Inntektsopplysning("ag1", 1.februar, 1000.daglig, true)))) + historikk.oppdaterHistorikk( + historikkelement( + listOf( + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.februar, + 15.februar, + 100.prosent, + 1500.daglig + ), + Friperiode(15.mars, 20.mars) + ), inntekter = listOf(Inntektsopplysning("ag1", 1.februar, 1000.daglig, true)) + ) + ) aktivitetslogg.barn().also { assertTrue(historikk.valider(it, 1.januar til 31.januar, 1.januar, "ag1")) assertFalse(it.harFunksjonelleFeilEllerVerre()) @@ -246,15 +313,50 @@ internal class InfotrygdhistorikkTest { @Test fun skjæringstidspunkt() { - historikk.oppdaterHistorikk(historikkelement(listOf( - ArbeidsgiverUtbetalingsperiode("ag1", 5.januar, 10.januar, 100.prosent, 25000.månedlig), - Friperiode(11.januar, 12.januar), - ArbeidsgiverUtbetalingsperiode("ag2", 13.januar, 15.januar, 100.prosent, 25000.månedlig), - ArbeidsgiverUtbetalingsperiode("ag1", 16.januar, 20.januar, 100.prosent, 25000.månedlig), - ArbeidsgiverUtbetalingsperiode("ag1", 1.februar, 28.februar, 100.prosent, 25000.månedlig) - ))) - assertEquals(5.januar, historikk.skjæringstidspunkt(emptyList()).beregnSkjæringstidspunkt(5.januar til 31.januar)) - assertEquals(1.januar, historikk.skjæringstidspunkt(listOf(2.S, 3.S)).beregnSkjæringstidspunkt(januar)) + historikk.oppdaterHistorikk( + historikkelement( + listOf( + ArbeidsgiverUtbetalingsperiode( + "ag1", + 5.januar, + 10.januar, + 100.prosent, + 25000.månedlig + ), + Friperiode(11.januar, 12.januar), + ArbeidsgiverUtbetalingsperiode( + "ag2", + 13.januar, + 15.januar, + 100.prosent, + 25000.månedlig + ), + ArbeidsgiverUtbetalingsperiode( + "ag1", + 16.januar, + 20.januar, + 100.prosent, + 25000.månedlig + ), + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.februar, + 28.februar, + 100.prosent, + 25000.månedlig + ) + ) + ) + ) + assertEquals( + 5.januar, + historikk.skjæringstidspunkt(emptyList()) + .beregnSkjæringstidspunkt(5.januar til 31.januar) + ) + assertEquals( + 1.januar, + historikk.skjæringstidspunkt(listOf(2.S, 3.S)).beregnSkjæringstidspunkt(januar) + ) } @Test @@ -278,36 +380,85 @@ internal class InfotrygdhistorikkTest { @Test fun `Infotrygdutbetaling før spleisutbetaling`() { - historikk.oppdaterHistorikk(historikkelement(listOf( - ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 25.januar, 100.prosent, 25000.månedlig), - Friperiode(26.januar, 31.januar), - ))) + historikk.oppdaterHistorikk( + historikkelement( + listOf( + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.januar, + 25.januar, + 100.prosent, + 25000.månedlig + ), + Friperiode(26.januar, 31.januar), + ) + ) + ) assertFalse(historikk.harEndretHistorikk(lagUtbetaling())) } @Test fun `Infotrygdutbetaling etter spleisutbetaling`() { val utbetaling = lagUtbetaling() - historikk.oppdaterHistorikk(historikkelement(listOf( - ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 25.januar, 100.prosent, 25000.månedlig), - Friperiode(26.januar, 31.januar), - ))) + historikk.oppdaterHistorikk( + historikkelement( + listOf( + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.januar, + 25.januar, + 100.prosent, + 25000.månedlig + ), + Friperiode(26.januar, 31.januar), + ) + ) + ) assertTrue(historikk.harEndretHistorikk(utbetaling)) } @Test fun `Ny inntekt registrert i infotrygd`() { - historikk.oppdaterHistorikk(historikkelement(listOf( - ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 25.januar, 100.prosent, 25000.månedlig) - ))) + historikk.oppdaterHistorikk( + historikkelement( + listOf( + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.januar, + 25.januar, + 100.prosent, + 25000.månedlig + ) + ) + ) + ) val utbetaling = lagUtbetaling() - historikk.oppdaterHistorikk(historikkelement(listOf( - ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 25.januar, 100.prosent, 25000.månedlig) - ))) + historikk.oppdaterHistorikk( + historikkelement( + listOf( + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.januar, + 25.januar, + 100.prosent, + 25000.månedlig + ) + ) + ) + ) assertFalse(historikk.harEndretHistorikk(utbetaling)) - historikk.oppdaterHistorikk(historikkelement( - perioder = listOf(ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 25.januar, 100.prosent, 25000.månedlig)), - inntekter = listOf(Inntektsopplysning("ag1", 1.januar, 1000.daglig, true)) + historikk.oppdaterHistorikk( + historikkelement( + perioder = listOf( + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.januar, + 25.januar, + 100.prosent, + 25000.månedlig + ) + ), + inntekter = listOf(Inntektsopplysning("ag1", 1.januar, 1000.daglig, true)) ) ) assertFalse(historikk.harEndretHistorikk(utbetaling)) @@ -315,17 +466,46 @@ internal class InfotrygdhistorikkTest { @Test fun `Nye arbeidskategorikoder registrert i infotrygd`() { - historikk.oppdaterHistorikk(historikkelement(listOf( - ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 25.januar, 100.prosent, 25000.månedlig) - ))) + historikk.oppdaterHistorikk( + historikkelement( + listOf( + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.januar, + 25.januar, + 100.prosent, + 25000.månedlig + ) + ) + ) + ) val utbetaling = lagUtbetaling() - historikk.oppdaterHistorikk(historikkelement(listOf( - ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 25.januar, 100.prosent, 25000.månedlig) - ))) + historikk.oppdaterHistorikk( + historikkelement( + listOf( + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.januar, + 25.januar, + 100.prosent, + 25000.månedlig + ) + ) + ) + ) assertFalse(historikk.harEndretHistorikk(utbetaling)) - historikk.oppdaterHistorikk(historikkelement( - perioder = listOf(ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 25.januar, 100.prosent, 25000.månedlig)), - arbeidskategorikoder = mapOf("123" to LocalDate.now()) + historikk.oppdaterHistorikk( + historikkelement( + perioder = listOf( + ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.januar, + 25.januar, + 100.prosent, + 25000.månedlig + ) + ), + arbeidskategorikoder = mapOf("123" to LocalDate.now()) ) ) assertFalse(historikk.harEndretHistorikk(utbetaling)) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/UtbetalingsperiodeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/UtbetalingsperiodeTest.kt index c7cb753479..cff7112b53 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/UtbetalingsperiodeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/infotrygdhistorikk/UtbetalingsperiodeTest.kt @@ -37,8 +37,20 @@ internal class UtbetalingsperiodeTest { @Test fun `like perioder`() { val ferie = Friperiode(1.januar, 31.januar) - val utbetalingAG1 = ArbeidsgiverUtbetalingsperiode("ag1", 1.februar, 28.februar, 100.prosent, 25000.månedlig) - val utbetalingAG2 = ArbeidsgiverUtbetalingsperiode("ag2", 1.februar, 28.februar, 100.prosent, 25000.månedlig) + val utbetalingAG1 = ArbeidsgiverUtbetalingsperiode( + "ag1", + 1.februar, + 28.februar, + 100.prosent, + 25000.månedlig + ) + val utbetalingAG2 = ArbeidsgiverUtbetalingsperiode( + "ag2", + 1.februar, + 28.februar, + 100.prosent, + 25000.månedlig + ) assertEquals(ferie, ferie) assertNotEquals(ferie, utbetalingAG1) assertNotEquals(ferie.hashCode(), utbetalingAG1.hashCode()) @@ -53,8 +65,10 @@ internal class UtbetalingsperiodeTest { val prosent = 30.prosent val inntekt1 = Utbetalingsperiode.inntekt(505.daglig, prosent) val inntekt2 = inntekt1.månedlig.månedlig - val periode1 = ArbeidsgiverUtbetalingsperiode("orgnr", 1.januar, 1.januar, prosent, inntekt1) - val periode2 = ArbeidsgiverUtbetalingsperiode("orgnr", 1.januar, 1.januar, prosent, inntekt2) + val periode1 = + ArbeidsgiverUtbetalingsperiode("orgnr", 1.januar, 1.januar, prosent, inntekt1) + val periode2 = + ArbeidsgiverUtbetalingsperiode("orgnr", 1.januar, 1.januar, prosent, inntekt2) assertEquals(inntekt1, inntekt2) assertEquals(periode1, periode2) } @@ -75,6 +89,7 @@ internal class UtbetalingsperiodeTest { assertTrue(one.funksjoneltLik(two)) assertTrue(two.funksjoneltLik(one)) } + private fun assertNotEquals(one: Infotrygdperiode, two: Infotrygdperiode) { assertFalse(one.funksjoneltLik(two)) assertFalse(two.funksjoneltLik(one)) @@ -88,7 +103,8 @@ internal class UtbetalingsperiodeTest { @Test fun `utbetalingstidslinje - utbetaling`() { - val utbetaling = ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 10.januar, 100.prosent, 25000.månedlig) + val utbetaling = + ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 10.januar, 100.prosent, 25000.månedlig) val inspektør = utbetaling.utbetalingstidslinje().inspektør assertEquals(8, inspektør.navDagTeller) assertEquals(2, inspektør.navHelgDagTeller) @@ -104,7 +120,8 @@ internal class UtbetalingsperiodeTest { @Test fun `sykdomstidslinje - utbetaling`() { - val periode = ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 10.januar, 100.prosent, 25000.månedlig) + val periode = + ArbeidsgiverUtbetalingsperiode("ag1", 1.januar, 10.januar, 100.prosent, 25000.månedlig) val inspektør = periode.sykdomstidslinje(kilde).inspektør assertTrue(inspektør.dager.values.all { it is Dag.Sykedag || it is Dag.SykHelgedag }) assertEquals(10, inspektør.dager.size) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysningTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysningTest.kt index eb43634793..a1c42473a6 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysningTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/ArbeidsgiverInntektsopplysningTest.kt @@ -32,68 +32,169 @@ import org.junit.jupiter.api.assertThrows internal class ArbeidsgiverInntektsopplysningTest { private val subsumsjonslogg = SubsumsjonsListLog() - private val jurist = BehandlingSubsumsjonslogg(subsumsjonslogg, listOf( + private val jurist = BehandlingSubsumsjonslogg( + subsumsjonslogg, listOf( Subsumsjonskontekst(KontekstType.Fødselsnummer, "fnr"), Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "orgnr"), Subsumsjonskontekst(KontekstType.Vedtaksperiode, "${UUID.randomUUID()}"), - )) + ) + ) @Test fun `overstyr inntekter`() { val skjæringstidspunkt = 1.januar val opptjening = Opptjening.nyOpptjening(emptyList(), skjæringstidspunkt) - val a1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), Refusjonsopplysninger()) - val a2Opplysning = ArbeidsgiverInntektsopplysning("a2", skjæringstidspunkt til LocalDate.MAX, Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 2000.månedlig), Refusjonsopplysninger()) - val a1Overstyrt = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, Saksbehandler(skjæringstidspunkt, UUID.randomUUID(), 3000.månedlig, "", null, LocalDateTime.now()), Refusjonsopplysninger()) - val a3Overstyrt = ArbeidsgiverInntektsopplysning("a3", skjæringstidspunkt til LocalDate.MAX, Saksbehandler(skjæringstidspunkt, UUID.randomUUID(), 4000.månedlig, "", null, LocalDateTime.now()), Refusjonsopplysninger()) + val a1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), + Refusjonsopplysninger() + ) + val a2Opplysning = ArbeidsgiverInntektsopplysning( + "a2", + skjæringstidspunkt til LocalDate.MAX, + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 2000.månedlig), + Refusjonsopplysninger() + ) + val a1Overstyrt = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + Saksbehandler( + skjæringstidspunkt, + UUID.randomUUID(), + 3000.månedlig, + "", + null, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) + val a3Overstyrt = ArbeidsgiverInntektsopplysning( + "a3", + skjæringstidspunkt til LocalDate.MAX, + Saksbehandler( + skjæringstidspunkt, + UUID.randomUUID(), + 4000.månedlig, + "", + null, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) val original = listOf(a1Opplysning, a2Opplysning) val expected = listOf(a1Opplysning, a2Opplysning) val new = listOf(a1Overstyrt) - assertEquals(expected, original.overstyrInntekter( + assertEquals( + expected, original.overstyrInntekter( skjæringstidspunkt, opptjening, listOf(a1Overstyrt, a1Overstyrt), EmptyLog - )) { "kan ikke velge mellom inntekter for samme orgnr" } + ) + ) { "kan ikke velge mellom inntekter for samme orgnr" } - assertEquals(expected, original.overstyrInntekter( + assertEquals( + expected, original.overstyrInntekter( skjæringstidspunkt, opptjening, emptyList(), EmptyLog - )) - assertEquals(listOf(a1Overstyrt, a2Opplysning), original.overstyrInntekter( + ) + ) + assertEquals( + listOf(a1Overstyrt, a2Opplysning), original.overstyrInntekter( skjæringstidspunkt, opptjening, new, EmptyLog - )) + ) + ) val forMange = listOf(a1Overstyrt, a3Overstyrt) - assertEquals(listOf(a1Overstyrt, a2Opplysning), original.overstyrInntekter( + assertEquals( + listOf(a1Overstyrt, a2Opplysning), original.overstyrInntekter( skjæringstidspunkt, opptjening, forMange, EmptyLog - )) + ) + ) } @Test fun `ny inntektsmelding uten endring i beløp endrer kun omregnet årsinntekt for skjønnsmessig fastsatt`() { val skjæringstidspunkt = 1.januar val opptjening = Opptjening.nyOpptjening(emptyList(), skjæringstidspunkt) - val inntektsmeldingA1 = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig) - val inntektsmeldingA2 = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 2000.månedlig) - val inntektsmeldingA3 = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 3000.månedlig) - - val inntektsmeldingA1Ny = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig) - val overstyrtA1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), Refusjonsopplysninger()) - val forventetA1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, SkjønnsmessigFastsatt(UUID.randomUUID(), skjæringstidspunkt, UUID.randomUUID(), 900.månedlig, inntektsmeldingA1Ny, LocalDateTime.now()), Refusjonsopplysninger()) + val inntektsmeldingA1 = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig) + val inntektsmeldingA2 = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 2000.månedlig) + val inntektsmeldingA3 = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 3000.månedlig) + + val inntektsmeldingA1Ny = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig) + val overstyrtA1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), + Refusjonsopplysninger() + ) + val forventetA1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + SkjønnsmessigFastsatt( + UUID.randomUUID(), + skjæringstidspunkt, + UUID.randomUUID(), + 900.månedlig, + inntektsmeldingA1Ny, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) - val a1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, SkjønnsmessigFastsatt(UUID.randomUUID(), skjæringstidspunkt, UUID.randomUUID(), 900.månedlig, inntektsmeldingA1, LocalDateTime.now()), Refusjonsopplysninger()) - val a2Opplysning = ArbeidsgiverInntektsopplysning("a2", skjæringstidspunkt til LocalDate.MAX, SkjønnsmessigFastsatt(UUID.randomUUID(), skjæringstidspunkt, UUID.randomUUID(), 950.månedlig, inntektsmeldingA2, LocalDateTime.now()), Refusjonsopplysninger()) - val a3Opplysning = ArbeidsgiverInntektsopplysning("a3", skjæringstidspunkt til LocalDate.MAX, SkjønnsmessigFastsatt(UUID.randomUUID(), skjæringstidspunkt, UUID.randomUUID(), 975.månedlig, inntektsmeldingA3, LocalDateTime.now()), Refusjonsopplysninger()) + val a1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + SkjønnsmessigFastsatt( + UUID.randomUUID(), + skjæringstidspunkt, + UUID.randomUUID(), + 900.månedlig, + inntektsmeldingA1, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) + val a2Opplysning = ArbeidsgiverInntektsopplysning( + "a2", + skjæringstidspunkt til LocalDate.MAX, + SkjønnsmessigFastsatt( + UUID.randomUUID(), + skjæringstidspunkt, + UUID.randomUUID(), + 950.månedlig, + inntektsmeldingA2, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) + val a3Opplysning = ArbeidsgiverInntektsopplysning( + "a3", + skjæringstidspunkt til LocalDate.MAX, + SkjønnsmessigFastsatt( + UUID.randomUUID(), + skjæringstidspunkt, + UUID.randomUUID(), + 975.månedlig, + inntektsmeldingA3, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) val original = listOf(a1Opplysning, a2Opplysning, a3Opplysning) val expected = listOf(forventetA1Opplysning, a2Opplysning, a3Opplysning) @@ -112,21 +213,100 @@ internal class ArbeidsgiverInntektsopplysningTest { fun `ny inntektsmelding uten endring i beløp i forhold Skatt endrer kun omregnet årsinntekt for skjønnsmessig fastsatt`() { val skjæringstidspunkt = 1.januar val opptjening = Opptjening.nyOpptjening(emptyList(), skjæringstidspunkt) - val skattA1 = SkattSykepengegrunnlag(UUID.randomUUID(), skjæringstidspunkt, listOf( - Skatteopplysning(UUID.randomUUID(), 1000.månedlig, skjæringstidspunkt.minusMonths(1).yearMonth, LØNNSINNTEKT, "", ""), - Skatteopplysning(UUID.randomUUID(), 1000.månedlig, skjæringstidspunkt.minusMonths(2).yearMonth, LØNNSINNTEKT, "", ""), - Skatteopplysning(UUID.randomUUID(), 1000.månedlig, skjæringstidspunkt.minusMonths(3).yearMonth, LØNNSINNTEKT, "", "") - ), emptyList(), LocalDateTime.now()) - val inntektsmeldingA2 = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 2000.månedlig) - val inntektsmeldingA3 = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 3000.månedlig) - - val inntektsmeldingA1Ny = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig) - val overstyrtA1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), Refusjonsopplysninger()) - val forventetA1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, SkjønnsmessigFastsatt(UUID.randomUUID(), skjæringstidspunkt, UUID.randomUUID(), 900.månedlig, inntektsmeldingA1Ny, LocalDateTime.now()), Refusjonsopplysninger()) - - val a1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, SkjønnsmessigFastsatt(UUID.randomUUID(), skjæringstidspunkt, UUID.randomUUID(), 900.månedlig, skattA1, LocalDateTime.now()), Refusjonsopplysninger()) - val a2Opplysning = ArbeidsgiverInntektsopplysning("a2", skjæringstidspunkt til LocalDate.MAX, SkjønnsmessigFastsatt(UUID.randomUUID(), skjæringstidspunkt, UUID.randomUUID(), 950.månedlig, inntektsmeldingA2, LocalDateTime.now()), Refusjonsopplysninger()) - val a3Opplysning = ArbeidsgiverInntektsopplysning("a3", skjæringstidspunkt til LocalDate.MAX, SkjønnsmessigFastsatt(UUID.randomUUID(), skjæringstidspunkt, UUID.randomUUID(), 975.månedlig, inntektsmeldingA3, LocalDateTime.now()), Refusjonsopplysninger()) + val skattA1 = SkattSykepengegrunnlag( + UUID.randomUUID(), skjæringstidspunkt, listOf( + Skatteopplysning( + UUID.randomUUID(), + 1000.månedlig, + skjæringstidspunkt.minusMonths(1).yearMonth, + LØNNSINNTEKT, + "", + "" + ), + Skatteopplysning( + UUID.randomUUID(), + 1000.månedlig, + skjæringstidspunkt.minusMonths(2).yearMonth, + LØNNSINNTEKT, + "", + "" + ), + Skatteopplysning( + UUID.randomUUID(), + 1000.månedlig, + skjæringstidspunkt.minusMonths(3).yearMonth, + LØNNSINNTEKT, + "", + "" + ) + ), emptyList(), LocalDateTime.now() + ) + val inntektsmeldingA2 = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 2000.månedlig) + val inntektsmeldingA3 = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 3000.månedlig) + + val inntektsmeldingA1Ny = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig) + val overstyrtA1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), + Refusjonsopplysninger() + ) + val forventetA1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + SkjønnsmessigFastsatt( + UUID.randomUUID(), + skjæringstidspunkt, + UUID.randomUUID(), + 900.månedlig, + inntektsmeldingA1Ny, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) + + val a1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + SkjønnsmessigFastsatt( + UUID.randomUUID(), + skjæringstidspunkt, + UUID.randomUUID(), + 900.månedlig, + skattA1, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) + val a2Opplysning = ArbeidsgiverInntektsopplysning( + "a2", + skjæringstidspunkt til LocalDate.MAX, + SkjønnsmessigFastsatt( + UUID.randomUUID(), + skjæringstidspunkt, + UUID.randomUUID(), + 950.månedlig, + inntektsmeldingA2, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) + val a3Opplysning = ArbeidsgiverInntektsopplysning( + "a3", + skjæringstidspunkt til LocalDate.MAX, + SkjønnsmessigFastsatt( + UUID.randomUUID(), + skjæringstidspunkt, + UUID.randomUUID(), + 975.månedlig, + inntektsmeldingA3, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) val original = listOf(a1Opplysning, a2Opplysning, a3Opplysning) val expected = listOf(forventetA1Opplysning, a2Opplysning, a3Opplysning) @@ -147,15 +327,19 @@ internal class ArbeidsgiverInntektsopplysningTest { val ansattFom = 1.januar val orgnummer = "a1" - val opptjening = Opptjening.nyOpptjening(listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag(orgnummer, listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Arbeidsforhold( - ansattFom, - null, - false + val opptjening = Opptjening.nyOpptjening( + listOf( + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + orgnummer, listOf( + Opptjening.ArbeidsgiverOpptjeningsgrunnlag.Arbeidsforhold( + ansattFom, + null, + false + ) + ) ) - )) - ), skjæringstidspunkt) + ), skjæringstidspunkt + ) val paragraf = Paragraf.PARAGRAF_8_28 @@ -164,10 +348,32 @@ internal class ArbeidsgiverInntektsopplysningTest { val overstyrtBeløp = 3000.månedlig val subsumsjon = Subsumsjon(paragraf.ref, ledd.nummer, bokstav.ref.toString()) - val a1Opplysning = ArbeidsgiverInntektsopplysning(orgnummer, skjæringstidspunkt til LocalDate.MAX, Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), Refusjonsopplysninger()) - val a1Overstyrt = ArbeidsgiverInntektsopplysning(orgnummer, skjæringstidspunkt til LocalDate.MAX, Saksbehandler(skjæringstidspunkt, UUID.randomUUID(), overstyrtBeløp, "Jeg bare måtte gjøre det", subsumsjon, LocalDateTime.now()), Refusjonsopplysninger()) + val a1Opplysning = ArbeidsgiverInntektsopplysning( + orgnummer, + skjæringstidspunkt til LocalDate.MAX, + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), + Refusjonsopplysninger() + ) + val a1Overstyrt = ArbeidsgiverInntektsopplysning( + orgnummer, + skjæringstidspunkt til LocalDate.MAX, + Saksbehandler( + skjæringstidspunkt, + UUID.randomUUID(), + overstyrtBeløp, + "Jeg bare måtte gjøre det", + subsumsjon, + LocalDateTime.now() + ), + Refusjonsopplysninger() + ) - listOf(a1Opplysning).overstyrInntekter(skjæringstidspunkt, opptjening, listOf(a1Overstyrt), jurist) + listOf(a1Opplysning).overstyrInntekter( + skjæringstidspunkt, + opptjening, + listOf(a1Overstyrt), + jurist + ) SubsumsjonInspektør(subsumsjonslogg).assertBeregnet( paragraf = paragraf, versjon = LocalDate.of(2019, 1, 1), @@ -178,7 +384,10 @@ internal class ArbeidsgiverInntektsopplysningTest { "organisasjonsnummer" to orgnummer, "skjæringstidspunkt" to skjæringstidspunkt, "startdatoArbeidsforhold" to ansattFom, - "overstyrtInntektFraSaksbehandler" to mapOf("dato" to skjæringstidspunkt, "beløp" to overstyrtBeløp.månedlig), + "overstyrtInntektFraSaksbehandler" to mapOf( + "dato" to skjæringstidspunkt, + "beløp" to overstyrtBeløp.månedlig + ), "forklaring" to "Jeg bare måtte gjøre det" ), output = mapOf( @@ -191,30 +400,79 @@ internal class ArbeidsgiverInntektsopplysningTest { @Test fun `deaktiverer en inntekt`() { val skjæringstidspunkt = 1.januar - val a1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), Refusjonsopplysninger()) - val a2Opplysning = ArbeidsgiverInntektsopplysning("a2", skjæringstidspunkt til LocalDate.MAX, IkkeRapportert(skjæringstidspunkt, UUID.randomUUID(), LocalDateTime.now()), Refusjonsopplysninger()) + val a1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), + Refusjonsopplysninger() + ) + val a2Opplysning = ArbeidsgiverInntektsopplysning( + "a2", + skjæringstidspunkt til LocalDate.MAX, + IkkeRapportert(skjæringstidspunkt, UUID.randomUUID(), LocalDateTime.now()), + Refusjonsopplysninger() + ) val opprinnelig = listOf(a1Opplysning, a2Opplysning) - val (aktive, deaktiverte) = opprinnelig.deaktiver(emptyList(), "a2", "Denne må bort", EmptyLog) + val (aktive, deaktiverte) = opprinnelig.deaktiver( + emptyList(), + "a2", + "Denne må bort", + EmptyLog + ) assertEquals(a1Opplysning, aktive.single()) assertEquals(a2Opplysning, deaktiverte.single()) - val (nyDeaktivert, nyAktivert) = deaktiverte.aktiver(aktive, "a2", "Jeg gjorde en feil, jeg angrer!", EmptyLog) + val (nyDeaktivert, nyAktivert) = deaktiverte.aktiver( + aktive, + "a2", + "Jeg gjorde en feil, jeg angrer!", + EmptyLog + ) assertEquals(0, nyDeaktivert.size) assertEquals(opprinnelig, nyAktivert) - assertThrows { opprinnelig.deaktiver(emptyList(), "a3", "jeg vil deaktivere noe som ikke finnes", EmptyLog) } - assertThrows { emptyList().aktiver(opprinnelig, "a3", "jeg vil aktivere noe som ikke finnes", EmptyLog) } + assertThrows { + opprinnelig.deaktiver( + emptyList(), + "a3", + "jeg vil deaktivere noe som ikke finnes", + EmptyLog + ) + } + assertThrows { + emptyList().aktiver( + opprinnelig, + "a3", + "jeg vil aktivere noe som ikke finnes", + EmptyLog + ) + } } @Test fun `subsummerer deaktivering`() { val skjæringstidspunkt = 1.januar - val a1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), Refusjonsopplysninger()) - val a2Opplysning = ArbeidsgiverInntektsopplysning("a2", skjæringstidspunkt til LocalDate.MAX, IkkeRapportert(skjæringstidspunkt, UUID.randomUUID(), LocalDateTime.now()), Refusjonsopplysninger()) + val a1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), + Refusjonsopplysninger() + ) + val a2Opplysning = ArbeidsgiverInntektsopplysning( + "a2", + skjæringstidspunkt til LocalDate.MAX, + IkkeRapportert(skjæringstidspunkt, UUID.randomUUID(), LocalDateTime.now()), + Refusjonsopplysninger() + ) val opprinnelig = listOf(a1Opplysning, a2Opplysning) - val (aktive, deaktiverte) = opprinnelig.deaktiver(emptyList(), "a2", "Denne må bort", jurist) + val (aktive, deaktiverte) = opprinnelig.deaktiver( + emptyList(), + "a2", + "Denne må bort", + jurist + ) assertEquals(a1Opplysning, aktive.single()) assertEquals(a2Opplysning, deaktiverte.single()) SubsumsjonInspektør(subsumsjonslogg).assertOppfylt( @@ -236,13 +494,28 @@ internal class ArbeidsgiverInntektsopplysningTest { @Test fun `subsummerer aktivering`() { val skjæringstidspunkt = 1.januar - val a1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), Refusjonsopplysninger()) - val a2Opplysning = ArbeidsgiverInntektsopplysning("a2", skjæringstidspunkt til LocalDate.MAX, IkkeRapportert(skjæringstidspunkt, UUID.randomUUID(), LocalDateTime.now()), Refusjonsopplysninger()) + val a1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 1000.månedlig), + Refusjonsopplysninger() + ) + val a2Opplysning = ArbeidsgiverInntektsopplysning( + "a2", + skjæringstidspunkt til LocalDate.MAX, + IkkeRapportert(skjæringstidspunkt, UUID.randomUUID(), LocalDateTime.now()), + Refusjonsopplysninger() + ) val opprinneligAktive = listOf(a1Opplysning) val opprinneligDeaktiverte = listOf(a2Opplysning) - val (deaktiverte, aktive) = opprinneligDeaktiverte.aktiver(opprinneligAktive, "a2", "Denne må tilbake", jurist) + val (deaktiverte, aktive) = opprinneligDeaktiverte.aktiver( + opprinneligAktive, + "a2", + "Denne må tilbake", + jurist + ) assertEquals(listOf(a1Opplysning, a2Opplysning), aktive) assertEquals(0, deaktiverte.size) SubsumsjonInspektør(subsumsjonslogg).assertIkkeOppfylt( @@ -324,4 +597,4 @@ internal class ArbeidsgiverInntektsopplysningTest { ) ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/IkkeRapportertTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/IkkeRapportertTest.kt index 039fc6da8f..e1c988e505 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/IkkeRapportertTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/IkkeRapportertTest.kt @@ -13,9 +13,10 @@ internal class IkkeRapportertTest { @Test fun `overstyres av saksbehandler`() { val ikkeRapportert = IkkeRapportert(1.januar, UUID.randomUUID(), LocalDateTime.now()) - val saksbehandler = Saksbehandler(1.januar, UUID.randomUUID(), 500.daglig, "", null, LocalDateTime.now()) + val saksbehandler = + Saksbehandler(1.januar, UUID.randomUUID(), 500.daglig, "", null, LocalDateTime.now()) val result = ikkeRapportert.overstyresAv(saksbehandler) assertSame(ikkeRapportert, result.inspektør.forrigeInntekt) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektsgrunnlagTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektsgrunnlagTest.kt index 4c26eba3be..aca6c5ccc1 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektsgrunnlagTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektsgrunnlagTest.kt @@ -60,13 +60,16 @@ import kotlin.properties.Delegates internal class InntektsgrunnlagTest { private companion object { - private val fødseldato67år = 1.februar(1954) + private val fødseldato67år = 1.februar(1954) } - private val jurist = BehandlingSubsumsjonslogg(EmptyLog, listOf( + + private val jurist = BehandlingSubsumsjonslogg( + EmptyLog, listOf( Subsumsjonskontekst(KontekstType.Fødselsnummer, "fnr"), Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "orgnr"), Subsumsjonskontekst(KontekstType.Vedtaksperiode, "${UUID.randomUUID()}"), - )) + ) + ) @Test fun equality() { @@ -96,7 +99,8 @@ internal class InntektsgrunnlagTest { observer = MinsteinntektSubsumsjonObservatør() aktivitetslogg = Aktivitetslogg() - val forLiteSykepengegrunnlag = (halvG - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, observer) + val forLiteSykepengegrunnlag = + (halvG - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, observer) validert = forLiteSykepengegrunnlag.valider(aktivitetslogg) assertFalse(forLiteSykepengegrunnlag.inspektør.oppfyllerMinsteinntektskrav) assertEquals(halvG, forLiteSykepengegrunnlag.inspektør.minsteinntekt) @@ -113,7 +117,8 @@ internal class InntektsgrunnlagTest { var observer = MinsteinntektSubsumsjonObservatør() var aktivitetslogg = Aktivitetslogg() - val sykepengegrunnlag = (`2G`).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, observer) + val sykepengegrunnlag = + (`2G`).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, observer) var validert = sykepengegrunnlag.valider(aktivitetslogg) assertTrue(sykepengegrunnlag.inspektør.oppfyllerMinsteinntektskrav) assertEquals(`2G`, sykepengegrunnlag.inspektør.minsteinntekt) @@ -123,7 +128,8 @@ internal class InntektsgrunnlagTest { observer = MinsteinntektSubsumsjonObservatør() aktivitetslogg = Aktivitetslogg() - val forLiteSykepengegrunnlag = (`2G` - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, observer) + val forLiteSykepengegrunnlag = + (`2G` - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, observer) validert = forLiteSykepengegrunnlag.valider(aktivitetslogg) assertFalse(forLiteSykepengegrunnlag.inspektør.oppfyllerMinsteinntektskrav) assertEquals(`2G`, forLiteSykepengegrunnlag.inspektør.minsteinntekt) @@ -137,10 +143,16 @@ internal class InntektsgrunnlagTest { val alder = fødseldato67år.alder val skjæringstidspunkt = 1.februar(2021) val forLitenInntekt = Grunnbeløp.halvG.beløp(skjæringstidspunkt) - 1.daglig - val sykepengegrunnlag = (forLitenInntekt).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, EmptyLog) + val sykepengegrunnlag = + (forLitenInntekt).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, EmptyLog) val tidslinje = tidslinjeOf(31.NAV, 28.NAV, startDato = 1.januar) - val resultat = sykepengegrunnlag.avvis(listOf(tidslinje), skjæringstidspunkt til LocalDate.MAX, skjæringstidspunkt til skjæringstidspunkt, jurist) + val resultat = sykepengegrunnlag.avvis( + listOf(tidslinje), + skjæringstidspunkt til LocalDate.MAX, + skjæringstidspunkt til skjæringstidspunkt, + jurist + ) assertEquals(0, resultat.single().inspektør.avvistDagTeller) } @@ -150,10 +162,21 @@ internal class InntektsgrunnlagTest { val skjæringstidspunkt = 1.januar(2021) val forLitenInntekt = Grunnbeløp.halvG.beløp(skjæringstidspunkt) - 1.daglig - val sykepengegrunnlag = (forLitenInntekt).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, EmptyLog) + val sykepengegrunnlag = + (forLitenInntekt).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, EmptyLog) - val tidslinje = tidslinjeOf(31.NAV, 28.NAV, startDato = skjæringstidspunkt, skjæringstidspunkter = listOf(skjæringstidspunkt)) - val resultat = sykepengegrunnlag.avvis(listOf(tidslinje), skjæringstidspunkt til LocalDate.MAX, skjæringstidspunkt til skjæringstidspunkt, jurist).single() + val tidslinje = tidslinjeOf( + 31.NAV, + 28.NAV, + startDato = skjæringstidspunkt, + skjæringstidspunkter = listOf(skjæringstidspunkt) + ) + val resultat = sykepengegrunnlag.avvis( + listOf(tidslinje), + skjæringstidspunkt til LocalDate.MAX, + skjæringstidspunkt til skjæringstidspunkt, + jurist + ).single() assertEquals(41, resultat.inspektør.avvistDagTeller) assertTrue((1.januar(2021) til 1.februar(2021)) .filterNot { it.erHelg() } @@ -175,10 +198,20 @@ internal class InntektsgrunnlagTest { val skjæringstidspunkt = 1.mars(2021) val `1G` = Grunnbeløp.`1G`.beløp(skjæringstidspunkt) - val sykepengegrunnlag = (`1G`).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, EmptyLog) + val sykepengegrunnlag = + (`1G`).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, EmptyLog) - val tidslinje = tidslinjeOf(20.NAVDAGER, startDato = skjæringstidspunkt, skjæringstidspunkter = listOf(skjæringstidspunkt)) - val resultat = sykepengegrunnlag.avvis(listOf(tidslinje), skjæringstidspunkt til LocalDate.MAX, skjæringstidspunkt til skjæringstidspunkt, jurist).single() + val tidslinje = tidslinjeOf( + 20.NAVDAGER, + startDato = skjæringstidspunkt, + skjæringstidspunkter = listOf(skjæringstidspunkt) + ) + val resultat = sykepengegrunnlag.avvis( + listOf(tidslinje), + skjæringstidspunkt til LocalDate.MAX, + skjæringstidspunkt til skjæringstidspunkt, + jurist + ).single() assertEquals(20, resultat.inspektør.avvistDagTeller) assertTrue(resultat.inspektør.avvistedatoer.all { dato -> resultat.inspektør.begrunnelse(dato).single() == Begrunnelse.MinimumInntektOver67 @@ -191,10 +224,21 @@ internal class InntektsgrunnlagTest { val skjæringstidspunkt = 1.januar(2021) val `1G` = Grunnbeløp.`1G`.beløp(skjæringstidspunkt) - val sykepengegrunnlag = (`1G`).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, EmptyLog) + val sykepengegrunnlag = + (`1G`).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, EmptyLog) - val tidslinje = tidslinjeOf(31.NAV, 28.NAVDAGER, startDato = skjæringstidspunkt, skjæringstidspunkter = listOf(skjæringstidspunkt)) - val resultat = sykepengegrunnlag.avvis(listOf(tidslinje), skjæringstidspunkt til LocalDate.MAX, skjæringstidspunkt til skjæringstidspunkt, jurist).single() + val tidslinje = tidslinjeOf( + 31.NAV, + 28.NAVDAGER, + startDato = skjæringstidspunkt, + skjæringstidspunkter = listOf(skjæringstidspunkt) + ) + val resultat = sykepengegrunnlag.avvis( + listOf(tidslinje), + skjæringstidspunkt til LocalDate.MAX, + skjæringstidspunkt til skjæringstidspunkt, + jurist + ).single() assertEquals(27, resultat.inspektør.avvistDagTeller) assertTrue(resultat.inspektør.avvistedatoer.all { dato -> resultat.inspektør.begrunnelse(dato).single() == Begrunnelse.MinimumInntektOver67 @@ -207,10 +251,21 @@ internal class InntektsgrunnlagTest { val skjæringstidspunkt = 1.januar(2021) val `1G` = Grunnbeløp.`1G`.beløp(skjæringstidspunkt) - val sykepengegrunnlag = (`1G`).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, EmptyLog) + val sykepengegrunnlag = + (`1G`).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, EmptyLog) - val tidslinje = tidslinjeOf(31.NAV, 28.NAVDAGER, startDato = skjæringstidspunkt, skjæringstidspunkter = listOf(skjæringstidspunkt)) - val resultat = sykepengegrunnlag.avvis(listOf(tidslinje), skjæringstidspunkt til 31.januar(2021), skjæringstidspunkt til skjæringstidspunkt, jurist).single() + val tidslinje = tidslinjeOf( + 31.NAV, + 28.NAVDAGER, + startDato = skjæringstidspunkt, + skjæringstidspunkter = listOf(skjæringstidspunkt) + ) + val resultat = sykepengegrunnlag.avvis( + listOf(tidslinje), + skjæringstidspunkt til 31.januar(2021), + skjæringstidspunkt til skjæringstidspunkt, + jurist + ).single() assertEquals(0, resultat.inspektør.avvistDagTeller) } @@ -223,7 +278,8 @@ internal class InntektsgrunnlagTest { val observer = MinsteinntektSubsumsjonObservatør() var aktivitetslogg = Aktivitetslogg() - val sykepengegrunnlag = (`2G_2021`).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, observer) + val sykepengegrunnlag = + (`2G_2021`).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, observer) var validert = sykepengegrunnlag.valider(aktivitetslogg) assertEquals(`2G_2020`, Grunnbeløp.`2G`.minsteinntekt(skjæringstidspunkt)) assertTrue(sykepengegrunnlag.inspektør.oppfyllerMinsteinntektskrav) @@ -233,7 +289,8 @@ internal class InntektsgrunnlagTest { assertTrue(observer.`§ 8-51 ledd 2`) aktivitetslogg = Aktivitetslogg() - val forLiteSykepengegrunnlag = (`2G_2021` - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, observer) + val forLiteSykepengegrunnlag = + (`2G_2021` - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt, observer) validert = forLiteSykepengegrunnlag.valider(aktivitetslogg) assertTrue(forLiteSykepengegrunnlag.inspektør.oppfyllerMinsteinntektskrav) assertEquals(`2G_2020`, forLiteSykepengegrunnlag.inspektør.minsteinntekt) @@ -241,6 +298,7 @@ internal class InntektsgrunnlagTest { assertFalse(aktivitetslogg.harVarslerEllerVerre()) assertTrue(observer.`§ 8-51 ledd 2`) } + @Test fun `mindre enn 2G, og skjæringstidspunkt er etter virkningen av minsteinntekt`() { val alder = fødseldato67år.alder @@ -256,7 +314,8 @@ internal class InntektsgrunnlagTest { assertFalse(aktivitetslogg.harVarslerEllerVerre()) aktivitetslogg = Aktivitetslogg() - val forLiteSykepengegrunnlag = (`2G_2021` - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt) + val forLiteSykepengegrunnlag = + (`2G_2021` - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt) validert = forLiteSykepengegrunnlag.valider(aktivitetslogg) assertFalse(forLiteSykepengegrunnlag.inspektør.oppfyllerMinsteinntektskrav) assertEquals(`2G_2021`, forLiteSykepengegrunnlag.inspektør.minsteinntekt) @@ -271,8 +330,18 @@ internal class InntektsgrunnlagTest { val inntekt = Grunnbeløp.`2G`.beløp(skjæringstidspunkt) val sykepengegrunnlag = (inntekt).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt) - val tidslinje = tidslinjeOf(31.NAV, 28.NAV, startDato = skjæringstidspunkt, skjæringstidspunkter = listOf(skjæringstidspunkt)) - val resultat = sykepengegrunnlag.avvis(listOf(tidslinje), skjæringstidspunkt til LocalDate.MAX,skjæringstidspunkt til skjæringstidspunkt, jurist).single() + val tidslinje = tidslinjeOf( + 31.NAV, + 28.NAV, + startDato = skjæringstidspunkt, + skjæringstidspunkter = listOf(skjæringstidspunkt) + ) + val resultat = sykepengegrunnlag.avvis( + listOf(tidslinje), + skjæringstidspunkt til LocalDate.MAX, + skjæringstidspunkt til skjæringstidspunkt, + jurist + ).single() assertEquals(0, resultat.inspektør.avvistDagTeller) } @@ -282,10 +351,20 @@ internal class InntektsgrunnlagTest { val skjæringstidspunkt = 1.februar(2021) val halvG = Grunnbeløp.halvG.beløp(skjæringstidspunkt) - val sykepengegrunnlag = (halvG - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt) + val sykepengegrunnlag = + (halvG - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt) - val tidslinje = tidslinjeOf(28.NAV, startDato = skjæringstidspunkt, skjæringstidspunkter = listOf(skjæringstidspunkt)) - val resultat = sykepengegrunnlag.avvis(listOf(tidslinje), skjæringstidspunkt til LocalDate.MAX,skjæringstidspunkt til skjæringstidspunkt, jurist).single() + val tidslinje = tidslinjeOf( + 28.NAV, + startDato = skjæringstidspunkt, + skjæringstidspunkter = listOf(skjæringstidspunkt) + ) + val resultat = sykepengegrunnlag.avvis( + listOf(tidslinje), + skjæringstidspunkt til LocalDate.MAX, + skjæringstidspunkt til skjæringstidspunkt, + jurist + ).single() assertEquals(20, resultat.inspektør.avvistDagTeller) assertTrue((1.februar(2021) til 1.februar(2021)) .filterNot { it.erHelg() } @@ -300,16 +379,27 @@ internal class InntektsgrunnlagTest { } ) } + @Test fun `begrunnelse etter 67 år`() { val alder = fødseldato67år.alder val skjæringstidspunkt = 2.februar(2021) val `2G` = Grunnbeløp.`2G`.beløp(skjæringstidspunkt) - val sykepengegrunnlag = (`2G` - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt) + val sykepengegrunnlag = + (`2G` - 1.daglig).inntektsgrunnlag(alder, "orgnr", skjæringstidspunkt) - val tidslinje = tidslinjeOf(27.NAV, startDato = skjæringstidspunkt, skjæringstidspunkter = listOf(skjæringstidspunkt)) - val resultat = sykepengegrunnlag.avvis(listOf(tidslinje), skjæringstidspunkt til LocalDate.MAX,skjæringstidspunkt til skjæringstidspunkt, jurist).single() + val tidslinje = tidslinjeOf( + 27.NAV, + startDato = skjæringstidspunkt, + skjæringstidspunkter = listOf(skjæringstidspunkt) + ) + val resultat = sykepengegrunnlag.avvis( + listOf(tidslinje), + skjæringstidspunkt til LocalDate.MAX, + skjæringstidspunkt til skjæringstidspunkt, + jurist + ).single() assertEquals(19, resultat.inspektør.avvistDagTeller) assertTrue((2.februar(2021) til 28.februar(2021)) .filterNot { it.erHelg() } @@ -324,7 +414,10 @@ internal class InntektsgrunnlagTest { val sykepengegrunnlag = 60000.månedlig.inntektsgrunnlag("orgnr", 1.mai(2020), 1.mai(2020)) val justert = sykepengegrunnlag.grunnbeløpsregulering() assertNotEquals(sykepengegrunnlag, justert) - assertNotEquals(sykepengegrunnlag.inspektør.sykepengegrunnlag, justert.inspektør.sykepengegrunnlag) + assertNotEquals( + sykepengegrunnlag.inspektør.sykepengegrunnlag, + justert.inspektør.sykepengegrunnlag + ) assertNotEquals(sykepengegrunnlag.inspektør.`6G`, justert.inspektør.`6G`) assertTrue(sykepengegrunnlag.inspektør.`6G` < justert.inspektør.`6G`) assertTrue(sykepengegrunnlag.inspektør.sykepengegrunnlag < justert.inspektør.sykepengegrunnlag) @@ -336,6 +429,7 @@ internal class InntektsgrunnlagTest { val sykepengegrunnlag = `6G`.sykepengegrunnlag assertEquals(`6G`, sykepengegrunnlag.inspektør.sykepengegrunnlag) } + @Test fun `sykepengegrunnlaget skal ikke rundes av - under 6`() { val daglig = 255.5.daglig @@ -351,12 +445,28 @@ internal class InntektsgrunnlagTest { val a1Inntekt = 25000.månedlig val a2Inntekt = 5000.månedlig val inntekter = listOf( - ArbeidsgiverInntektsopplysning("a1", a1Fom til LocalDate.MAX, Inntektsmelding(a1Fom, UUID.randomUUID(), a1Inntekt), RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), a1Fom, null, a1Inntekt), LocalDateTime.now()) - }.build()), - ArbeidsgiverInntektsopplysning("a2", a2Fom til LocalDate.MAX, Inntektsmelding(a2Fom, UUID.randomUUID(), a2Inntekt), RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), a2Fom, null, INGEN), LocalDateTime.now()) - }.build()), + ArbeidsgiverInntektsopplysning( + "a1", + a1Fom til LocalDate.MAX, + Inntektsmelding(a1Fom, UUID.randomUUID(), a1Inntekt), + RefusjonsopplysningerBuilder().apply { + leggTil( + Refusjonsopplysning(UUID.randomUUID(), a1Fom, null, a1Inntekt), + LocalDateTime.now() + ) + }.build() + ), + ArbeidsgiverInntektsopplysning( + "a2", + a2Fom til LocalDate.MAX, + Inntektsmelding(a2Fom, UUID.randomUUID(), a2Inntekt), + RefusjonsopplysningerBuilder().apply { + leggTil( + Refusjonsopplysning(UUID.randomUUID(), a2Fom, null, INGEN), + LocalDateTime.now() + ) + }.build() + ), ) val inntektsgrunnlag = Inntektsgrunnlag( @@ -373,139 +483,401 @@ internal class InntektsgrunnlagTest { fun `overstyre inntekt og refusjon - endre til samme`() { val skjæringstidsounkt = 1.januar val opprinnelig = listOf( - ArbeidsgiverInntektsopplysning("a1", skjæringstidsounkt til LocalDate.MAX, Inntektsmelding(skjæringstidsounkt, UUID.randomUUID(), 25000.månedlig), RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidsounkt, null, 25000.månedlig), LocalDateTime.now()) - }.build()), - ArbeidsgiverInntektsopplysning("a2", skjæringstidsounkt til LocalDate.MAX, Inntektsmelding(skjæringstidsounkt, UUID.randomUUID(), 5000.månedlig), RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidsounkt, null, INGEN), LocalDateTime.now()) - }.build()), - ) - val overstyring = Inntektsgrunnlag.ArbeidsgiverInntektsopplysningerOverstyringer(skjæringstidsounkt, opprinnelig, null, EmptyLog) - val endretOpplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidsounkt til LocalDate.MAX, Saksbehandler(skjæringstidsounkt, UUID.randomUUID(), 25000.månedlig, "", null, LocalDateTime.now()), RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidsounkt, null, 25000.månedlig), LocalDateTime.now()) - }.build()) + ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidsounkt til LocalDate.MAX, + Inntektsmelding(skjæringstidsounkt, UUID.randomUUID(), 25000.månedlig), + RefusjonsopplysningerBuilder().apply { + leggTil( + Refusjonsopplysning( + UUID.randomUUID(), + skjæringstidsounkt, + null, + 25000.månedlig + ), LocalDateTime.now() + ) + }.build() + ), + ArbeidsgiverInntektsopplysning( + "a2", + skjæringstidsounkt til LocalDate.MAX, + Inntektsmelding(skjæringstidsounkt, UUID.randomUUID(), 5000.månedlig), + RefusjonsopplysningerBuilder().apply { + leggTil( + Refusjonsopplysning(UUID.randomUUID(), skjæringstidsounkt, null, INGEN), + LocalDateTime.now() + ) + }.build() + ), + ) + val overstyring = Inntektsgrunnlag.ArbeidsgiverInntektsopplysningerOverstyringer( + skjæringstidsounkt, + opprinnelig, + null, + EmptyLog + ) + val endretOpplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidsounkt til LocalDate.MAX, + Saksbehandler( + skjæringstidsounkt, + UUID.randomUUID(), + 25000.månedlig, + "", + null, + LocalDateTime.now() + ), + RefusjonsopplysningerBuilder().apply { + leggTil( + Refusjonsopplysning( + UUID.randomUUID(), + skjæringstidsounkt, + null, + 25000.månedlig + ), LocalDateTime.now() + ) + }.build() + ) overstyring.leggTilInntekt(endretOpplysning) assertNotNull(overstyring.resultat()) } + @Test fun `overstyre inntekt og refusjon - endrer kun refusjon`() { val skjæringstidspunkt = 1.januar - val a1Inntektsopplysning = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 25000.månedlig) - val a2Inntektsopplysning = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 5000.månedlig) + val a1Inntektsopplysning = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 25000.månedlig) + val a2Inntektsopplysning = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 5000.månedlig) val a2Refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, INGEN), LocalDateTime.now()) + leggTil( + Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, INGEN), + LocalDateTime.now() + ) }.build() val a1Refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, 25000.månedlig), LocalDateTime.now()) + leggTil( + Refusjonsopplysning( + UUID.randomUUID(), + skjæringstidspunkt, + null, + 25000.månedlig + ), LocalDateTime.now() + ) }.build() - val a1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, a1Inntektsopplysning, a1Refusjonsopplysninger) - val a2Opplysning = ArbeidsgiverInntektsopplysning("a2", skjæringstidspunkt til LocalDate.MAX, a2Inntektsopplysning, a2Refusjonsopplysninger) + val a1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + a1Inntektsopplysning, + a1Refusjonsopplysninger + ) + val a2Opplysning = ArbeidsgiverInntektsopplysning( + "a2", + skjæringstidspunkt til LocalDate.MAX, + a2Inntektsopplysning, + a2Refusjonsopplysninger + ) val opprinnelig = listOf(a1Opplysning, a2Opplysning) - val overstyring = Inntektsgrunnlag.ArbeidsgiverInntektsopplysningerOverstyringer(skjæringstidspunkt, opprinnelig, null, EmptyLog) + val overstyring = Inntektsgrunnlag.ArbeidsgiverInntektsopplysningerOverstyringer( + skjæringstidspunkt, + opprinnelig, + null, + EmptyLog + ) val a1EndretRefusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, 2000.månedlig), LocalDateTime.now()) + leggTil( + Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, 2000.månedlig), + LocalDateTime.now() + ) }.build() - val endretOpplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, Saksbehandler(skjæringstidspunkt, UUID.randomUUID(), 25000.månedlig, "", null, LocalDateTime.now()), a1EndretRefusjonsopplysninger) + val endretOpplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + Saksbehandler( + skjæringstidspunkt, + UUID.randomUUID(), + 25000.månedlig, + "", + null, + LocalDateTime.now() + ), + a1EndretRefusjonsopplysninger + ) overstyring.leggTilInntekt(endretOpplysning) - val forventetOpplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, a1Inntektsopplysning, a1EndretRefusjonsopplysninger) + val forventetOpplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + a1Inntektsopplysning, + a1EndretRefusjonsopplysninger + ) assertEquals(listOf(forventetOpplysning, a2Opplysning), overstyring.resultat()) } + @Test fun `overstyre inntekt og refusjon - endrer kun inntekt`() { val skjæringstidspunkt = 1.januar - val a1Inntektsopplysning = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 25000.månedlig) - val a2Inntektsopplysning = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 5000.månedlig) + val a1Inntektsopplysning = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 25000.månedlig) + val a2Inntektsopplysning = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 5000.månedlig) val a2Refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, INGEN), LocalDateTime.now()) + leggTil( + Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, INGEN), + LocalDateTime.now() + ) }.build() val a1Refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, 25000.månedlig), LocalDateTime.now()) + leggTil( + Refusjonsopplysning( + UUID.randomUUID(), + skjæringstidspunkt, + null, + 25000.månedlig + ), LocalDateTime.now() + ) }.build() - val a1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, a1Inntektsopplysning, a1Refusjonsopplysninger) - val a2Opplysning = ArbeidsgiverInntektsopplysning("a2", skjæringstidspunkt til LocalDate.MAX, a2Inntektsopplysning, a2Refusjonsopplysninger) + val a1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + a1Inntektsopplysning, + a1Refusjonsopplysninger + ) + val a2Opplysning = ArbeidsgiverInntektsopplysning( + "a2", + skjæringstidspunkt til LocalDate.MAX, + a2Inntektsopplysning, + a2Refusjonsopplysninger + ) val opprinnelig = listOf(a1Opplysning, a2Opplysning) - val overstyring = Inntektsgrunnlag.ArbeidsgiverInntektsopplysningerOverstyringer(skjæringstidspunkt, opprinnelig, null, EmptyLog) + val overstyring = Inntektsgrunnlag.ArbeidsgiverInntektsopplysningerOverstyringer( + skjæringstidspunkt, + opprinnelig, + null, + EmptyLog + ) - val a1EndretInntektsopplysning = Saksbehandler(skjæringstidspunkt, UUID.randomUUID(), 20000.månedlig, "", null, LocalDateTime.now()) + val a1EndretInntektsopplysning = Saksbehandler( + skjæringstidspunkt, + UUID.randomUUID(), + 20000.månedlig, + "", + null, + LocalDateTime.now() + ) val a1EndretRefusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, 25000.månedlig), LocalDateTime.now()) + leggTil( + Refusjonsopplysning( + UUID.randomUUID(), + skjæringstidspunkt, + null, + 25000.månedlig + ), LocalDateTime.now() + ) }.build() - val endretOpplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, a1EndretInntektsopplysning, a1EndretRefusjonsopplysninger) + val endretOpplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + a1EndretInntektsopplysning, + a1EndretRefusjonsopplysninger + ) overstyring.leggTilInntekt(endretOpplysning) - val forventetOpplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, a1EndretInntektsopplysning, a1Refusjonsopplysninger) + val forventetOpplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + a1EndretInntektsopplysning, + a1Refusjonsopplysninger + ) assertEquals(listOf(forventetOpplysning, a2Opplysning), overstyring.resultat()) } + @Test fun `overstyre inntekt og refusjon - forsøker å endre Infotrygd-inntekt`() { val skjæringstidspunkt = 1.januar - val a1Inntektsopplysning = Infotrygd(UUID.randomUUID(), skjæringstidspunkt, UUID.randomUUID(), 5000.månedlig, LocalDateTime.now()) - val a2Inntektsopplysning = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 5000.månedlig) + val a1Inntektsopplysning = Infotrygd( + UUID.randomUUID(), + skjæringstidspunkt, + UUID.randomUUID(), + 5000.månedlig, + LocalDateTime.now() + ) + val a2Inntektsopplysning = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 5000.månedlig) val a2Refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, INGEN), LocalDateTime.now()) + leggTil( + Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, INGEN), + LocalDateTime.now() + ) }.build() val a1Refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, 25000.månedlig), LocalDateTime.now()) + leggTil( + Refusjonsopplysning( + UUID.randomUUID(), + skjæringstidspunkt, + null, + 25000.månedlig + ), LocalDateTime.now() + ) }.build() - val a1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, a1Inntektsopplysning, a1Refusjonsopplysninger) - val a2Opplysning = ArbeidsgiverInntektsopplysning("a2", skjæringstidspunkt til LocalDate.MAX, a2Inntektsopplysning, a2Refusjonsopplysninger) + val a1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + a1Inntektsopplysning, + a1Refusjonsopplysninger + ) + val a2Opplysning = ArbeidsgiverInntektsopplysning( + "a2", + skjæringstidspunkt til LocalDate.MAX, + a2Inntektsopplysning, + a2Refusjonsopplysninger + ) val opprinnelig = listOf(a1Opplysning, a2Opplysning) - val overstyring = Inntektsgrunnlag.ArbeidsgiverInntektsopplysningerOverstyringer(skjæringstidspunkt, opprinnelig, null, EmptyLog) + val overstyring = Inntektsgrunnlag.ArbeidsgiverInntektsopplysningerOverstyringer( + skjæringstidspunkt, + opprinnelig, + null, + EmptyLog + ) - val a1EndretInntektsopplysning = Saksbehandler(skjæringstidspunkt, UUID.randomUUID(), 20000.månedlig, "", null, LocalDateTime.now()) + val a1EndretInntektsopplysning = Saksbehandler( + skjæringstidspunkt, + UUID.randomUUID(), + 20000.månedlig, + "", + null, + LocalDateTime.now() + ) val a1EndretRefusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, 25000.månedlig), LocalDateTime.now()) + leggTil( + Refusjonsopplysning( + UUID.randomUUID(), + skjæringstidspunkt, + null, + 25000.månedlig + ), LocalDateTime.now() + ) }.build() - val endretOpplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, a1EndretInntektsopplysning, a1EndretRefusjonsopplysninger) + val endretOpplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + a1EndretInntektsopplysning, + a1EndretRefusjonsopplysninger + ) overstyring.leggTilInntekt(endretOpplysning) assertNotNull(overstyring.resultat()) } + @Test fun `overstyre inntekt og refusjon - forsøker å legge til ny arbeidsgiver`() { val skjæringstidspunkt = 1.januar - val a1Inntektsopplysning = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 25000.månedlig) - val a2Inntektsopplysning = Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 5000.månedlig) + val a1Inntektsopplysning = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 25000.månedlig) + val a2Inntektsopplysning = + Inntektsmelding(skjæringstidspunkt, UUID.randomUUID(), 5000.månedlig) val a2Refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, INGEN), LocalDateTime.now()) + leggTil( + Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, INGEN), + LocalDateTime.now() + ) }.build() val a1Refusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, 25000.månedlig), LocalDateTime.now()) + leggTil( + Refusjonsopplysning( + UUID.randomUUID(), + skjæringstidspunkt, + null, + 25000.månedlig + ), LocalDateTime.now() + ) }.build() - val a1Opplysning = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, a1Inntektsopplysning, a1Refusjonsopplysninger) - val a2Opplysning = ArbeidsgiverInntektsopplysning("a2", skjæringstidspunkt til LocalDate.MAX, a2Inntektsopplysning, a2Refusjonsopplysninger) + val a1Opplysning = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + a1Inntektsopplysning, + a1Refusjonsopplysninger + ) + val a2Opplysning = ArbeidsgiverInntektsopplysning( + "a2", + skjæringstidspunkt til LocalDate.MAX, + a2Inntektsopplysning, + a2Refusjonsopplysninger + ) val opprinnelig = listOf(a1Opplysning, a2Opplysning) - val overstyring = Inntektsgrunnlag.ArbeidsgiverInntektsopplysningerOverstyringer(skjæringstidspunkt, opprinnelig, null, EmptyLog) + val overstyring = Inntektsgrunnlag.ArbeidsgiverInntektsopplysningerOverstyringer( + skjæringstidspunkt, + opprinnelig, + null, + EmptyLog + ) - val a3EndretInntektsopplysning = Saksbehandler(skjæringstidspunkt, UUID.randomUUID(), 20000.månedlig, "", null, LocalDateTime.now()) + val a3EndretInntektsopplysning = Saksbehandler( + skjæringstidspunkt, + UUID.randomUUID(), + 20000.månedlig, + "", + null, + LocalDateTime.now() + ) val a3EndretRefusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, 25000.månedlig), LocalDateTime.now()) + leggTil( + Refusjonsopplysning( + UUID.randomUUID(), + skjæringstidspunkt, + null, + 25000.månedlig + ), LocalDateTime.now() + ) }.build() - val a1EndretInntektsopplysning = Saksbehandler(skjæringstidspunkt, UUID.randomUUID(), 20000.månedlig, "", null, LocalDateTime.now()) + val a1EndretInntektsopplysning = Saksbehandler( + skjæringstidspunkt, + UUID.randomUUID(), + 20000.månedlig, + "", + null, + LocalDateTime.now() + ) val a1EndretRefusjonsopplysninger = RefusjonsopplysningerBuilder().apply { - leggTil(Refusjonsopplysning(UUID.randomUUID(), skjæringstidspunkt, null, 25000.månedlig), LocalDateTime.now()) + leggTil( + Refusjonsopplysning( + UUID.randomUUID(), + skjæringstidspunkt, + null, + 25000.månedlig + ), LocalDateTime.now() + ) }.build() - val endretOpplysningA3 = ArbeidsgiverInntektsopplysning("a3", skjæringstidspunkt til LocalDate.MAX, a3EndretInntektsopplysning, a3EndretRefusjonsopplysninger) + val endretOpplysningA3 = ArbeidsgiverInntektsopplysning( + "a3", + skjæringstidspunkt til LocalDate.MAX, + a3EndretInntektsopplysning, + a3EndretRefusjonsopplysninger + ) overstyring.leggTilInntekt(endretOpplysningA3) - val endretOpplysningA1 = ArbeidsgiverInntektsopplysning("a1", skjæringstidspunkt til LocalDate.MAX, a1EndretInntektsopplysning, a1EndretRefusjonsopplysninger) + val endretOpplysningA1 = ArbeidsgiverInntektsopplysning( + "a1", + skjæringstidspunkt til LocalDate.MAX, + a1EndretInntektsopplysning, + a1EndretRefusjonsopplysninger + ) overstyring.leggTilInntekt(endretOpplysningA1) val resultat = overstyring.resultat() assertNotNull(resultat) assertEquals(2, resultat.size) - assertFalse(resultat.any { it.inspektør.orgnummer == "a3" } ) + assertFalse(resultat.any { it.inspektør.orgnummer == "a3" }) } @Test @@ -557,22 +929,28 @@ internal class InntektsgrunnlagTest { vurdertInfotrygd = false ) - val opptjening = Opptjening.nyOpptjening(listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag(a1, listOf( - Arbeidsforhold( - ansattFom = LocalDate.EPOCH, - ansattTom = sluttdatoA1, - deaktivert = false + val opptjening = Opptjening.nyOpptjening( + listOf( + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + a1, listOf( + Arbeidsforhold( + ansattFom = LocalDate.EPOCH, + ansattTom = sluttdatoA1, + deaktivert = false + ) + ) + ), + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + a2, listOf( + Arbeidsforhold( + ansattFom = startdatoA2, + ansattTom = null, + deaktivert = false + ) ) - )), - Opptjening.ArbeidsgiverOpptjeningsgrunnlag(a2, listOf( - Arbeidsforhold( - ansattFom = startdatoA2, - ansattTom = null, - deaktivert = false ) - )) - ), skjæringstidspunkt) + ), skjæringstidspunkt + ) Aktivitetslogg().also { aktivitetslogg -> inntektsgrunnlag.sjekkForNyArbeidsgiver(aktivitetslogg, opptjening, a1) @@ -720,39 +1098,55 @@ internal class InntektsgrunnlagTest { vurdertInfotrygd = false ) - val opptjeningUtenA2 = Opptjening.nyOpptjening(listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag(a1, listOf( - Arbeidsforhold( - ansattFom = LocalDate.EPOCH, - ansattTom = null, - deaktivert = false + val opptjeningUtenA2 = Opptjening.nyOpptjening( + listOf( + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + a1, listOf( + Arbeidsforhold( + ansattFom = LocalDate.EPOCH, + ansattTom = null, + deaktivert = false + ) ) - )) - ), skjæringstidspunkt) - val opptjeningMedA2 = Opptjening.nyOpptjening(listOf( - Opptjening.ArbeidsgiverOpptjeningsgrunnlag(a1, listOf( - Arbeidsforhold( - ansattFom = LocalDate.EPOCH, - ansattTom = null, - deaktivert = false ) - )), - Opptjening.ArbeidsgiverOpptjeningsgrunnlag(a2, listOf( - Arbeidsforhold( - ansattFom = LocalDate.EPOCH, - ansattTom = null, - deaktivert = false + ), skjæringstidspunkt + ) + val opptjeningMedA2 = Opptjening.nyOpptjening( + listOf( + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + a1, listOf( + Arbeidsforhold( + ansattFom = LocalDate.EPOCH, + ansattTom = null, + deaktivert = false + ) + ) + ), + Opptjening.ArbeidsgiverOpptjeningsgrunnlag( + a2, listOf( + Arbeidsforhold( + ansattFom = LocalDate.EPOCH, + ansattTom = null, + deaktivert = false + ) + ) ) - )) - ), skjæringstidspunkt) + ), skjæringstidspunkt + ) Aktivitetslogg().also { aktivitetslogg -> - inntektsgrunnlag.måHaRegistrertOpptjeningForArbeidsgivere(aktivitetslogg, opptjeningUtenA2) + inntektsgrunnlag.måHaRegistrertOpptjeningForArbeidsgivere( + aktivitetslogg, + opptjeningUtenA2 + ) aktivitetslogg.assertVarsel(RV_VV_1) } Aktivitetslogg().also { aktivitetslogg -> - inntektsgrunnlag.måHaRegistrertOpptjeningForArbeidsgivere(aktivitetslogg, opptjeningMedA2) + inntektsgrunnlag.måHaRegistrertOpptjeningForArbeidsgivere( + aktivitetslogg, + opptjeningMedA2 + ) aktivitetslogg.assertIngenVarsel(RV_VV_1) } } @@ -828,7 +1222,10 @@ internal class InntektsgrunnlagTest { vurdertInfotrygd = false ) - assertEquals(inntektsgrunnlag1, inntektsgrunnlag1.grunnbeløpsregulering()) { "grunnbeløpet trenger ikke justering" } + assertEquals( + inntektsgrunnlag1, + inntektsgrunnlag1.grunnbeløpsregulering() + ) { "grunnbeløpet trenger ikke justering" } assertNotEquals( inntektsgrunnlag1, Inntektsgrunnlag.ferdigSykepengegrunnlag( @@ -875,10 +1272,11 @@ internal class InntektsgrunnlagTest { when { subsumsjon.er(folketrygdloven.paragraf(Paragraf.PARAGRAF_8_3).annetLedd.førstePunktum) -> this.`§ 8-3 ledd 2 punktum 1` = subsumsjon.utfall == VILKAR_OPPFYLT + subsumsjon.er(folketrygdloven.paragraf(Paragraf.PARAGRAF_8_51).annetLedd) -> { this.`§ 8-51 ledd 2` = subsumsjon.utfall == VILKAR_OPPFYLT } } } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektshistorikkTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektshistorikkTest.kt index 194d929410..d60f51f256 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektshistorikkTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektshistorikkTest.kt @@ -43,21 +43,38 @@ internal class InntektshistorikkTest { fun `Inntekt fra inntektsmelding brukes til å beregne sykepengegrunnlaget`() { inntektsmelding(førsteFraværsdag = 1.januar).addInntekt(historikk, EmptyLog) assertEquals(1, inspektør.size) - assertEquals(INNTEKT, historikk.avklarSykepengegrunnlag( + assertEquals( + INNTEKT, historikk.avklarSykepengegrunnlag( 1.januar, 1.januar, null - )?.inspektør?.beløp) + )?.inspektør?.beløp + ) } @Test fun `Inntekt fra andre inntektsmelding overskriver inntekt fra første, gitt samme første fraværsdag`() { - inntektsmelding(førsteFraværsdag = 1.januar, beregnetInntekt = 30000.månedlig).addInntekt(historikk, EmptyLog) - inntektsmelding(førsteFraværsdag = 1.januar, beregnetInntekt = 29000.månedlig).addInntekt(historikk, EmptyLog) + inntektsmelding(førsteFraværsdag = 1.januar, beregnetInntekt = 30000.månedlig).addInntekt( + historikk, + EmptyLog + ) + inntektsmelding(førsteFraværsdag = 1.januar, beregnetInntekt = 29000.månedlig).addInntekt( + historikk, + EmptyLog + ) resetSeed(1.februar) - inntektsmelding(førsteFraværsdag = 1.februar, beregnetInntekt = 31000.månedlig).addInntekt(historikk, EmptyLog) - assertEquals(29000.månedlig, historikk.avklarSykepengegrunnlag(1.januar, 1.januar, null)?.inspektør?.beløp) - assertEquals(31000.månedlig, historikk.avklarSykepengegrunnlag(1.februar, 1.februar, null)?.inspektør?.beløp) + inntektsmelding(førsteFraværsdag = 1.februar, beregnetInntekt = 31000.månedlig).addInntekt( + historikk, + EmptyLog + ) + assertEquals( + 29000.månedlig, + historikk.avklarSykepengegrunnlag(1.januar, 1.januar, null)?.inspektør?.beløp + ) + assertEquals( + 31000.månedlig, + historikk.avklarSykepengegrunnlag(1.februar, 1.februar, null)?.inspektør?.beløp + ) } @Test @@ -70,7 +87,10 @@ internal class InntektshistorikkTest { @Test fun `Inntekt for annen dato og samme kilde erstatter ikke eksisterende`() { inntektsmelding(førsteFraværsdag = 1.januar).addInntekt(historikk, EmptyLog) - inntektsmelding(førsteFraværsdag = 2.januar, arbeidsgiverperioder = listOf(2.januar til 17.januar)).addInntekt( + inntektsmelding( + førsteFraværsdag = 2.januar, + arbeidsgiverperioder = listOf(2.januar til 17.januar) + ).addInntekt( historikk, EmptyLog ) @@ -88,7 +108,7 @@ internal class InntektshistorikkTest { refusjon = Inntektsmelding.Refusjon(INNTEKT, null, emptyList()), begrunnelseForReduksjonEllerIkkeUtbetalt = null ).also { - it.valider(object: Inntektsmelding.Valideringsgrunnlag { + it.valider(object : Inntektsmelding.Valideringsgrunnlag { override fun vedtaksperiode(vedtaksperiodeId: UUID) = null override fun inntektsmeldingIkkeHåndtert(inntektsmelding: Inntektsmelding) {} }, Aktivitetslogg()) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektsopplysningTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektsopplysningTest.kt index 5c579985c7..dca04b2a0a 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektsopplysningTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/InntektsopplysningTest.kt @@ -24,10 +24,34 @@ internal class InntektsopplysningTest { fun overstyres() { val im1 = Inntektsmelding(1.januar, UUID.randomUUID(), INNTEKT) val im2 = Inntektsmelding(1.januar, UUID.randomUUID(), INNTEKT) - val saksbehandler1 = im1.overstyresAv(Saksbehandler(20.januar, UUID.randomUUID(), 20000.månedlig, "", null, LocalDateTime.now())) - val saksbehandler2 = Saksbehandler(20.januar, UUID.randomUUID(), 20000.månedlig, "", null, LocalDateTime.now()) - val saksbehandler3 = Saksbehandler(20.januar, UUID.randomUUID(), 30000.månedlig, "", null, LocalDateTime.now()) - val saksbehandler4 = Saksbehandler(20.januar, UUID.randomUUID(), INGEN, "", null, LocalDateTime.now()) + val saksbehandler1 = im1.overstyresAv( + Saksbehandler( + 20.januar, + UUID.randomUUID(), + 20000.månedlig, + "", + null, + LocalDateTime.now() + ) + ) + val saksbehandler2 = Saksbehandler( + 20.januar, + UUID.randomUUID(), + 20000.månedlig, + "", + null, + LocalDateTime.now() + ) + val saksbehandler3 = Saksbehandler( + 20.januar, + UUID.randomUUID(), + 30000.månedlig, + "", + null, + LocalDateTime.now() + ) + val saksbehandler4 = + Saksbehandler(20.januar, UUID.randomUUID(), INGEN, "", null, LocalDateTime.now()) val ikkeRapportert = IkkeRapportert(1.januar, UUID.randomUUID(), LocalDateTime.now()) assertEquals(saksbehandler1, im1.overstyresAv(saksbehandler1)) @@ -41,10 +65,40 @@ internal class InntektsopplysningTest { @Test fun `opphøre, gjøre om, avvikle, tilbakestille eller kansellere`() { val im = Inntektsmelding(1.januar, UUID.randomUUID(), INNTEKT) - val saksbehandler = im.overstyresAv(Saksbehandler(20.januar, UUID.randomUUID(), 20000.månedlig, "", null, LocalDateTime.now())) - val skjønnsmessigFastsatt1 = im.overstyresAv(SkjønnsmessigFastsatt(1.januar, UUID.randomUUID(), 20000.månedlig, LocalDateTime.now())) - val skjønnsmessigFastsatt2 = saksbehandler.overstyresAv(SkjønnsmessigFastsatt(1.januar, UUID.randomUUID(), 20000.månedlig, LocalDateTime.now())) - val skjønnsmessigFastsatt3 = skjønnsmessigFastsatt2.overstyresAv(SkjønnsmessigFastsatt(1.januar, UUID.randomUUID(), 20000.månedlig, LocalDateTime.now())) + val saksbehandler = im.overstyresAv( + Saksbehandler( + 20.januar, + UUID.randomUUID(), + 20000.månedlig, + "", + null, + LocalDateTime.now() + ) + ) + val skjønnsmessigFastsatt1 = im.overstyresAv( + SkjønnsmessigFastsatt( + 1.januar, + UUID.randomUUID(), + 20000.månedlig, + LocalDateTime.now() + ) + ) + val skjønnsmessigFastsatt2 = saksbehandler.overstyresAv( + SkjønnsmessigFastsatt( + 1.januar, + UUID.randomUUID(), + 20000.månedlig, + LocalDateTime.now() + ) + ) + val skjønnsmessigFastsatt3 = skjønnsmessigFastsatt2.overstyresAv( + SkjønnsmessigFastsatt( + 1.januar, + UUID.randomUUID(), + 20000.månedlig, + LocalDateTime.now() + ) + ) val ikkeRapportert = IkkeRapportert(1.januar, UUID.randomUUID(), LocalDateTime.now()) val skatt = SkattSykepengegrunnlag(UUID.randomUUID(), 1.februar, emptyList(), emptyList()) @@ -81,16 +135,42 @@ internal class InntektsopplysningTest { @Test fun `saksbehandler-likhet`() { - val saksbehandler1 = Saksbehandler(20.januar, UUID.randomUUID(), 20000.månedlig, "", null, LocalDateTime.now()) - val saksbehandler2 = Saksbehandler(20.januar, UUID.randomUUID(), 25000.månedlig, "", null, LocalDateTime.now()) + val saksbehandler1 = Saksbehandler( + 20.januar, + UUID.randomUUID(), + 20000.månedlig, + "", + null, + LocalDateTime.now() + ) + val saksbehandler2 = Saksbehandler( + 20.januar, + UUID.randomUUID(), + 25000.månedlig, + "", + null, + LocalDateTime.now() + ) assertNotEquals(saksbehandler1, saksbehandler2) } @Test fun `turnering - inntektsmelding vs inntektsmelding`() { - val im1 = Inntektsmelding(1.januar, UUID.randomUUID(), INNTEKT, Inntektsmelding.Kilde.Arbeidsgiver, LocalDateTime.now()) - val im2 = Inntektsmelding(1.januar, UUID.randomUUID(), INNTEKT, Inntektsmelding.Kilde.Arbeidsgiver, LocalDateTime.now().plusSeconds(1)) + val im1 = Inntektsmelding( + 1.januar, + UUID.randomUUID(), + INNTEKT, + Inntektsmelding.Kilde.Arbeidsgiver, + LocalDateTime.now() + ) + val im2 = Inntektsmelding( + 1.januar, + UUID.randomUUID(), + INNTEKT, + Inntektsmelding.Kilde.Arbeidsgiver, + LocalDateTime.now().plusSeconds(1) + ) assertEquals(im2, listOf(im1, im2).finnInntektsmeldingForSkjæringstidspunkt(1.januar, null)) } @@ -98,7 +178,8 @@ internal class InntektsopplysningTest { @Test fun `turnering - skatt vs inntektsmelding`() { val im = Inntektsmelding(10.februar, UUID.randomUUID(), INNTEKT) - val skatt1 = SkattSykepengegrunnlag(UUID.randomUUID(), 1.februar, listOf( + val skatt1 = SkattSykepengegrunnlag( + UUID.randomUUID(), 1.februar, listOf( Skatteopplysning( hendelseId = UUID.randomUUID(), beløp = 25000.månedlig, @@ -110,8 +191,10 @@ internal class InntektsopplysningTest { ) ), listOf( AnsattPeriode(LocalDate.EPOCH, null), - )) - val skatt2 = SkattSykepengegrunnlag(UUID.randomUUID(), 31.januar, listOf( + ) + ) + val skatt2 = SkattSykepengegrunnlag( + UUID.randomUUID(), 31.januar, listOf( Skatteopplysning( hendelseId = UUID.randomUUID(), beløp = 25000.månedlig, @@ -123,7 +206,8 @@ internal class InntektsopplysningTest { ) ), listOf( AnsattPeriode(LocalDate.EPOCH, null), - )) + ) + ) assertSame(im, listOf(im).avklarSykepengegrunnlag(1.februar, 10.februar, skatt1)) assertSame(skatt2, listOf(im).avklarSykepengegrunnlag(31.januar, 10.februar, skatt2)) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/NyInntektUnderveisTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/NyInntektUnderveisTest.kt index bff7cc787e..bd4384602b 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/NyInntektUnderveisTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/NyInntektUnderveisTest.kt @@ -29,11 +29,14 @@ internal class NyInntektUnderveisTest { val forventetTidslinje = (Arbeidsgiver oppgir 500.daglig fra 1.januar til 9.januar) og - (Arbeidsgiver oppgir 1000.daglig fra 10.januar til 25.januar) og - (Arbeidsgiver oppgir 500.daglig fra 26.januar til 31.januar) + (Arbeidsgiver oppgir 1000.daglig fra 10.januar til 25.januar) og + (Arbeidsgiver oppgir 500.daglig fra 26.januar til 31.januar) assertEquals(1, result.size) - assertEquals(listOf(1.januar til 31.januar), result.single().beløpstidslinje.perioderMedBeløp) + assertEquals( + listOf(1.januar til 31.januar), + result.single().beløpstidslinje.perioderMedBeløp + ) assertEquals(forventetTidslinje, result.single().beløpstidslinje) } @@ -47,7 +50,10 @@ internal class NyInntektUnderveisTest { val result = eksisterende.merge(10.januar til 25.januar, ny) assertEquals(1, result.size) - assertEquals(listOf(1.januar til 9.januar, 26.januar til 31.januar), result.single().beløpstidslinje.perioderMedBeløp) + assertEquals( + listOf(1.januar til 9.januar, 26.januar til 31.januar), + result.single().beløpstidslinje.perioderMedBeløp + ) } @Test @@ -60,6 +66,9 @@ internal class NyInntektUnderveisTest { val result = eksisterende.merge(februar, ny) assertEquals(1, result.size) - assertEquals(listOf(1.januar til 31.januar), result.single().beløpstidslinje.perioderMedBeløp) + assertEquals( + listOf(1.januar til 31.januar), + result.single().beløpstidslinje.perioderMedBeløp + ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/PensjonsgivendeInntektTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/PensjonsgivendeInntektTest.kt index ba76f876df..c92c5bf865 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/PensjonsgivendeInntektTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/PensjonsgivendeInntektTest.kt @@ -23,7 +23,10 @@ internal class PensjonsgivendeInntektTest { PensjonsgivendeInntekt(2014, 380000.årlig), ) - assertEquals(478906.årlig, SelvstendigNæringsdrivende(inntekter).fastsattÅrsinntekt(16.juni)) + assertEquals( + 478906.årlig, + SelvstendigNæringsdrivende(inntekter).fastsattÅrsinntekt(16.juni) + ) } @Test @@ -46,8 +49,12 @@ internal class PensjonsgivendeInntektTest { ) val skjæringstidspunkt = 12.mai - val expected = (`2G`.beløp(skjæringstidspunkt) + `2G`.beløp(skjæringstidspunkt) / 3).årlig.toInt().årlig - assertEquals(expected, SelvstendigNæringsdrivende(inntekter).fastsattÅrsinntekt(skjæringstidspunkt)) + val expected = + (`2G`.beløp(skjæringstidspunkt) + `2G`.beløp(skjæringstidspunkt) / 3).årlig.toInt().årlig + assertEquals( + expected, + SelvstendigNæringsdrivende(inntekter).fastsattÅrsinntekt(skjæringstidspunkt) + ) } } @@ -73,4 +80,4 @@ private class PensjonsgivendeInntekt( val ekstra = (utgangspunkt.coerceAtMost(`4G`.beløp(skjæringstidspunkt)) - aktuelt) / 3 return aktuelt + ekstra } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonTest.kt index 177a091da5..1ff89d881f 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonTest.kt @@ -19,7 +19,14 @@ internal class RefusjonTest { @Test fun `refusjonsbeløp med én endring i refusjon uten opphørsdato`() { - val refusjon = refusjon(endringerIRefusjon = listOf(Refusjonshistorikk.Refusjon.EndringIRefusjon(beløp = 28000.månedlig, endringsdato = 3.januar))) + val refusjon = refusjon( + endringerIRefusjon = listOf( + Refusjonshistorikk.Refusjon.EndringIRefusjon( + beløp = 28000.månedlig, + endringsdato = 3.januar + ) + ) + ) assertEquals(31000.månedlig, refusjon.beløp(1.januar)) assertEquals(28000.månedlig, refusjon.beløp(3.januar)) assertEquals(28000.månedlig, refusjon.beløp(4.januar)) @@ -27,7 +34,11 @@ internal class RefusjonTest { @Test fun `hente refusjonsbeløp for dag når første fraværsdag ikke er satt`() { - val refusjon = refusjon(endringerIRefusjon = emptyList(), førsteFraværsdag = null, arbeidsgiverperioder = listOf(2.januar til 3.januar, 5.januar til 7.januar)) + val refusjon = refusjon( + endringerIRefusjon = emptyList(), + førsteFraværsdag = null, + arbeidsgiverperioder = listOf(2.januar til 3.januar, 5.januar til 7.januar) + ) assertEquals(31000.månedlig, refusjon.beløp(3.januar)) assertEquals(31000.månedlig, refusjon.beløp(5.januar)) @@ -35,10 +46,18 @@ internal class RefusjonTest { @Test fun `refusjonsbeløp med endringer i refusjon med opphørsdato`() { - val refusjon = refusjon(sisteRefusjonsdag = 6.januar, endringerIRefusjon = listOf( - Refusjonshistorikk.Refusjon.EndringIRefusjon(beløp = 28000.månedlig, endringsdato = 3.januar), - Refusjonshistorikk.Refusjon.EndringIRefusjon(beløp = 20000.månedlig, endringsdato = 5.januar) - )) + val refusjon = refusjon( + sisteRefusjonsdag = 6.januar, endringerIRefusjon = listOf( + Refusjonshistorikk.Refusjon.EndringIRefusjon( + beløp = 28000.månedlig, + endringsdato = 3.januar + ), + Refusjonshistorikk.Refusjon.EndringIRefusjon( + beløp = 20000.månedlig, + endringsdato = 5.januar + ) + ) + ) assertEquals(31000.månedlig, refusjon.beløp(2.januar)) assertEquals(28000.månedlig, refusjon.beløp(3.januar)) @@ -47,7 +66,12 @@ internal class RefusjonTest { assertEquals(Inntekt.INGEN, refusjon.beløp(7.januar)) } - private fun refusjon(endringerIRefusjon: List = emptyList(), sisteRefusjonsdag: LocalDate? = null, førsteFraværsdag: LocalDate? = 1.januar, arbeidsgiverperioder: List = emptyList()) = Refusjonshistorikk.Refusjon( + private fun refusjon( + endringerIRefusjon: List = emptyList(), + sisteRefusjonsdag: LocalDate? = null, + førsteFraværsdag: LocalDate? = 1.januar, + arbeidsgiverperioder: List = emptyList() + ) = Refusjonshistorikk.Refusjon( meldingsreferanseId = UUID.randomUUID(), førsteFraværsdag = førsteFraværsdag, arbeidsgiverperioder = arbeidsgiverperioder, diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonTilBel\303\270pstidslinjeTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonTilBel\303\270pstidslinjeTest.kt" index a32bbd107b..3d206c89aa 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonTilBel\303\270pstidslinjeTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonTilBel\303\270pstidslinjeTest.kt" @@ -21,62 +21,164 @@ internal class RefusjonTilBeløpstidslinjeTest { @Test fun `Planke opplysning`() { - val refusjonstidslinje = refusjontidslinje(31.januar, førsteFraværsdag = 1.januar, beløp = 100.daglig) - assertEquals(Beløpstidslinje.fra(1.januar til 31.januar, 100.daglig, kilde), refusjonstidslinje) + val refusjonstidslinje = + refusjontidslinje(31.januar, førsteFraværsdag = 1.januar, beløp = 100.daglig) + assertEquals( + Beløpstidslinje.fra(1.januar til 31.januar, 100.daglig, kilde), + refusjonstidslinje + ) } @Test fun `Siste refusjonsdag er satt`() { - val refusjonstidslinje = refusjontidslinje(31.januar, førsteFraværsdag = 1.januar, beløp = 100.daglig, sisteRefusjonsdag = 20.januar) - assertEquals(Beløpstidslinje.fra(1.januar til 20.januar, 100.daglig, kilde) + Beløpstidslinje.fra(21.januar til 31.januar, INGEN, kilde), refusjonstidslinje) + val refusjonstidslinje = refusjontidslinje( + 31.januar, + førsteFraværsdag = 1.januar, + beløp = 100.daglig, + sisteRefusjonsdag = 20.januar + ) + assertEquals( + Beløpstidslinje.fra( + 1.januar til 20.januar, + 100.daglig, + kilde + ) + Beløpstidslinje.fra(21.januar til 31.januar, INGEN, kilde), refusjonstidslinje + ) } + @Test fun `Siste refusjonsdag er satt til siste dag i vedtaksperioden`() { - val refusjonstidslinje = refusjontidslinje(31.januar, førsteFraværsdag = 1.januar, beløp = 100.daglig, sisteRefusjonsdag = 31.januar) - assertEquals(Beløpstidslinje.fra(1.januar til 31.januar, 100.daglig, kilde), refusjonstidslinje) + val refusjonstidslinje = refusjontidslinje( + 31.januar, + førsteFraværsdag = 1.januar, + beløp = 100.daglig, + sisteRefusjonsdag = 31.januar + ) + assertEquals( + Beløpstidslinje.fra(1.januar til 31.januar, 100.daglig, kilde), + refusjonstidslinje + ) } @Test fun `Bruker endring i refusjon som siste refusjonsdag`() { - val refusjonstidslinje = refusjontidslinje(31.januar, førsteFraværsdag = 1.januar, beløp = 100.daglig, endringer = listOf(EndringIRefusjon(INGEN, 21.januar))) - assertEquals(Beløpstidslinje.fra(1.januar til 20.januar, 100.daglig, kilde) + Beløpstidslinje.fra(21.januar til 31.januar, INGEN, kilde), refusjonstidslinje) + val refusjonstidslinje = refusjontidslinje( + 31.januar, + førsteFraværsdag = 1.januar, + beløp = 100.daglig, + endringer = listOf(EndringIRefusjon(INGEN, 21.januar)) + ) + assertEquals( + Beløpstidslinje.fra( + 1.januar til 20.januar, + 100.daglig, + kilde + ) + Beløpstidslinje.fra(21.januar til 31.januar, INGEN, kilde), refusjonstidslinje + ) } @Test fun `Endringer i refusjon`() { - val refusjonstidslinje = refusjontidslinje(31.januar, førsteFraværsdag = 1.januar, beløp = 100.daglig, endringer = listOf(EndringIRefusjon(INGEN, 21.januar), EndringIRefusjon(250.daglig, 22.januar), EndringIRefusjon(125.daglig, 31.januar))) - assertEquals(Beløpstidslinje.fra(1.januar til 20.januar, 100.daglig, kilde) + Beløpstidslinje.fra(21.januar til 21.januar, INGEN, kilde) + Beløpstidslinje.fra(22.januar til 30.januar, 250.daglig, kilde) + Beløpstidslinje.fra(31.januar til 31.januar, 125.daglig, kilde), refusjonstidslinje) + val refusjonstidslinje = refusjontidslinje( + 31.januar, + førsteFraværsdag = 1.januar, + beløp = 100.daglig, + endringer = listOf( + EndringIRefusjon(INGEN, 21.januar), + EndringIRefusjon(250.daglig, 22.januar), + EndringIRefusjon(125.daglig, 31.januar) + ) + ) + assertEquals( + Beløpstidslinje.fra( + 1.januar til 20.januar, + 100.daglig, + kilde + ) + Beløpstidslinje.fra( + 21.januar til 21.januar, + INGEN, + kilde + ) + Beløpstidslinje.fra( + 22.januar til 30.januar, + 250.daglig, + kilde + ) + Beløpstidslinje.fra(31.januar til 31.januar, 125.daglig, kilde), refusjonstidslinje + ) } @Test fun `siste refusjonsdag før første fraværsdag`() { - val refusjonstidslinje = refusjontidslinje(31.januar, førsteFraværsdag = 5.januar, beløp = 100.daglig, sisteRefusjonsdag = 5.januar) - assertEquals(Beløpstidslinje.fra(5.januar til 5.januar, 100.daglig, kilde) + Beløpstidslinje.fra(6.januar til 31.januar, INGEN, kilde), refusjonstidslinje) + val refusjonstidslinje = refusjontidslinje( + 31.januar, + førsteFraværsdag = 5.januar, + beløp = 100.daglig, + sisteRefusjonsdag = 5.januar + ) + assertEquals( + Beløpstidslinje.fra( + 5.januar til 5.januar, + 100.daglig, + kilde + ) + Beløpstidslinje.fra(6.januar til 31.januar, INGEN, kilde), refusjonstidslinje + ) } @Test fun `Kombinerer endringer og siste refusjonsdag`() { - val refusjonstidslinje = refusjontidslinje(31.januar, førsteFraværsdag = 1.januar, beløp = 100.daglig, endringer = listOf(EndringIRefusjon(200.daglig, 15.januar)), sisteRefusjonsdag = 20.januar) - assertEquals(Beløpstidslinje.fra(1.januar til 14.januar, 100.daglig, kilde) + Beløpstidslinje.fra(15.januar til 20.januar, 200.daglig, kilde) + Beløpstidslinje.fra(21.januar til 31.januar, INGEN, kilde), refusjonstidslinje) + val refusjonstidslinje = refusjontidslinje( + 31.januar, + førsteFraværsdag = 1.januar, + beløp = 100.daglig, + endringer = listOf(EndringIRefusjon(200.daglig, 15.januar)), + sisteRefusjonsdag = 20.januar + ) + assertEquals( + Beløpstidslinje.fra( + 1.januar til 14.januar, + 100.daglig, + kilde + ) + Beløpstidslinje.fra( + 15.januar til 20.januar, + 200.daglig, + kilde + ) + Beløpstidslinje.fra(21.januar til 31.januar, INGEN, kilde), refusjonstidslinje + ) } @Test fun `Endring i refusjon før første fraværsdag`() { - val refusjonstidslinje = refusjontidslinje(31.januar, førsteFraværsdag = 15.januar, beløp = 100.daglig, endringer = listOf(EndringIRefusjon(200.daglig, 1.januar))) - assertEquals(Beløpstidslinje.fra(15.januar til 31.januar, 100.daglig, kilde), refusjonstidslinje) + val refusjonstidslinje = refusjontidslinje( + 31.januar, + førsteFraværsdag = 15.januar, + beløp = 100.daglig, + endringer = listOf(EndringIRefusjon(200.daglig, 1.januar)) + ) + assertEquals( + Beløpstidslinje.fra(15.januar til 31.januar, 100.daglig, kilde), + refusjonstidslinje + ) } @Test - fun `Tom tidslinje før første fraværsdag`(){ - val refusjonstidslinje = refusjontidslinje(1.januar, førsteFraværsdag = 2.januar, beløp = 500.daglig) + fun `Tom tidslinje før første fraværsdag`() { + val refusjonstidslinje = + refusjontidslinje(1.januar, førsteFraværsdag = 2.januar, beløp = 500.daglig) assertEquals(Beløpstidslinje(), refusjonstidslinje) } @Test - fun `Endringer i refusjon i fremtiden`(){ - val refusjonstidslinje = refusjontidslinje(31.januar, førsteFraværsdag = 1.januar, beløp = 500.daglig, endringer = listOf(EndringIRefusjon(1000.daglig, 1.februar))) - assertEquals(Beløpstidslinje.fra(1.januar til 31.januar, 500.daglig, kilde), refusjonstidslinje) + fun `Endringer i refusjon i fremtiden`() { + val refusjonstidslinje = refusjontidslinje( + 31.januar, + førsteFraværsdag = 1.januar, + beløp = 500.daglig, + endringer = listOf(EndringIRefusjon(1000.daglig, 1.februar)) + ) + assertEquals( + Beløpstidslinje.fra(1.januar til 31.januar, 500.daglig, kilde), + refusjonstidslinje + ) } private val kilde = Kilde(UUID.randomUUID(), Avsender.ARBEIDSGIVER, LocalDateTime.now()) @@ -93,7 +195,7 @@ internal class RefusjonTilBeløpstidslinjeTest { arbeidsgiverperioder = arbeidsgiverperioder, beløp = beløp, sisteRefusjonsdag = sisteRefusjonsdag, - endringerIRefusjon = endringer, + endringerIRefusjon = endringer, tidsstempel = kilde.tidsstempel ).beløpstidslinje(tilOgMed) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonshistorikkTilRefusjonsopplysningerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonshistorikkTilRefusjonsopplysningerTest.kt index d552c1f63e..d0aee9abb1 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonshistorikkTilRefusjonsopplysningerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonshistorikkTilRefusjonsopplysningerTest.kt @@ -31,55 +31,123 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { @Test fun `bruker endringer i refusjon oppgitt før siste refusjonsdag`() { val (id, refusjonsopplysninger, refusjonshistorikk) = endringIRefusjonFraOgMed(31.januar) - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(id.meldingsreferanseId, 1.januar, 30.januar, 100.daglig, ARBEIDSGIVER), - Refusjonsopplysning(id.meldingsreferanseId, 31.januar, 1.februar, 200.daglig, ARBEIDSGIVER), - Refusjonsopplysning(id.meldingsreferanseId, 2.februar, null, 0.daglig, ARBEIDSGIVER) - ), refusjonsopplysninger) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + id.meldingsreferanseId, + 1.januar, + 30.januar, + 100.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + id.meldingsreferanseId, + 31.januar, + 1.februar, + 200.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning(id.meldingsreferanseId, 2.februar, null, 0.daglig, ARBEIDSGIVER) + ), refusjonsopplysninger + ) - val forventet = Beløpstidslinje.fra(1.januar til 30.januar, 100.daglig, id) + Beløpstidslinje.fra(31.januar til 1.februar, 200.daglig, id) + Beløpstidslinje.fra(2.februar til 28.februar, INGEN, id) + val forventet = Beløpstidslinje.fra( + 1.januar til 30.januar, + 100.daglig, + id + ) + Beløpstidslinje.fra( + 31.januar til 1.februar, + 200.daglig, + id + ) + Beløpstidslinje.fra(2.februar til 28.februar, INGEN, id) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 28.februar)) } @Test fun `bruker endringer i refusjon oppgitt lik siste refusjonsdag`() { val (id, refusjonsopplysninger, refusjonshistorikk) = endringIRefusjonFraOgMed(1.februar) - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(id.meldingsreferanseId, 1.januar, 31.januar, 100.daglig, ARBEIDSGIVER), - Refusjonsopplysning(id.meldingsreferanseId, 1.februar, 1.februar, 200.daglig, ARBEIDSGIVER), - Refusjonsopplysning(id.meldingsreferanseId, 2.februar, null, 0.daglig, ARBEIDSGIVER) - ), refusjonsopplysninger) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + id.meldingsreferanseId, + 1.januar, + 31.januar, + 100.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + id.meldingsreferanseId, + 1.februar, + 1.februar, + 200.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning(id.meldingsreferanseId, 2.februar, null, 0.daglig, ARBEIDSGIVER) + ), refusjonsopplysninger + ) - val forventet = Beløpstidslinje.fra(1.januar til 31.januar, 100.daglig, id) + Beløpstidslinje.fra(1.februar til 1.februar, 200.daglig, id) + Beløpstidslinje.fra(2.februar til 28.februar, INGEN, id) + val forventet = Beløpstidslinje.fra( + 1.januar til 31.januar, + 100.daglig, + id + ) + Beløpstidslinje.fra( + 1.februar til 1.februar, + 200.daglig, + id + ) + Beløpstidslinje.fra(2.februar til 28.februar, INGEN, id) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 28.februar)) } @Test fun `ignorer endringer i refusjon etter siste refusjonsdag`() { val (id, refusjonsopplysninger, refusjonshistorikk) = endringIRefusjonFraOgMed(2.februar) - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(id.meldingsreferanseId, 1.januar, 1.februar, 100.daglig, ARBEIDSGIVER), - Refusjonsopplysning(id.meldingsreferanseId, 2.februar, null, 0.daglig, ARBEIDSGIVER) - ), refusjonsopplysninger) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + id.meldingsreferanseId, + 1.januar, + 1.februar, + 100.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning(id.meldingsreferanseId, 2.februar, null, 0.daglig, ARBEIDSGIVER) + ), refusjonsopplysninger + ) - val forventet = Beløpstidslinje.fra(1.januar til 1.februar, 100.daglig, id) + Beløpstidslinje.fra(2.februar til 28.februar, INGEN, id) + val forventet = Beløpstidslinje.fra( + 1.januar til 1.februar, + 100.daglig, + id + ) + Beløpstidslinje.fra(2.februar til 28.februar, INGEN, id) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 28.februar)) } @Test fun `siste refusjonsdag er satt til før første fraværsdag`() { val refusjonshistorikk = Refusjonshistorikk().apply { - leggTilRefusjon(Refusjonshistorikk.Refusjon( - meldingsreferanseId = kilde1.meldingsreferanseId, - førsteFraværsdag = 20.januar, - arbeidsgiverperioder = emptyList(), - beløp = 1000.daglig, - sisteRefusjonsdag = 3.januar, - endringerIRefusjon = emptyList(), - tidsstempel = kilde1.tidsstempel, - )) + leggTilRefusjon( + Refusjonshistorikk.Refusjon( + meldingsreferanseId = kilde1.meldingsreferanseId, + førsteFraværsdag = 20.januar, + arbeidsgiverperioder = emptyList(), + beløp = 1000.daglig, + sisteRefusjonsdag = 3.januar, + endringerIRefusjon = emptyList(), + tidsstempel = kilde1.tidsstempel, + ) + ) } - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(kilde1.meldingsreferanseId, 20.januar, null, 0.daglig, ARBEIDSGIVER)), refusjonshistorikk.refusjonsopplysninger(20.januar).inspektør.refusjonsopplysninger) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 20.januar, + null, + 0.daglig, + ARBEIDSGIVER + ) + ), refusjonshistorikk.refusjonsopplysninger(20.januar).inspektør.refusjonsopplysninger + ) val forventet = Beløpstidslinje.fra(20.januar til 31.januar, INGEN, kilde1) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(20.januar til 31.januar)) @@ -88,18 +156,31 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { @Test fun `første fraværsdag etter opphør av refusjon`() { val refusjonshistorikk = Refusjonshistorikk().apply { - leggTilRefusjon(Refusjonshistorikk.Refusjon( - meldingsreferanseId = kilde1.meldingsreferanseId, - førsteFraværsdag = 5.august, - arbeidsgiverperioder = listOf(5.januar til 20.januar), - beløp = 2345.daglig, - sisteRefusjonsdag = 4.april, - endringerIRefusjon = emptyList(), - tidsstempel = kilde1.tidsstempel, - )) + leggTilRefusjon( + Refusjonshistorikk.Refusjon( + meldingsreferanseId = kilde1.meldingsreferanseId, + førsteFraværsdag = 5.august, + arbeidsgiverperioder = listOf(5.januar til 20.januar), + beløp = 2345.daglig, + sisteRefusjonsdag = 4.april, + endringerIRefusjon = emptyList(), + tidsstempel = kilde1.tidsstempel, + ) + ) } - val refusjonsopplysninger = refusjonshistorikk.refusjonsopplysninger(5.august).inspektør.refusjonsopplysninger - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(kilde1.meldingsreferanseId, 5.august, null, 0.daglig, ARBEIDSGIVER)), refusjonsopplysninger) + val refusjonsopplysninger = + refusjonshistorikk.refusjonsopplysninger(5.august).inspektør.refusjonsopplysninger + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 5.august, + null, + 0.daglig, + ARBEIDSGIVER + ) + ), refusjonsopplysninger + ) val forventet = Beløpstidslinje.fra(5.august til 31.august, INGEN, kilde1) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(5.august til 31.august)) @@ -108,17 +189,29 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { @Test fun `siste refusjonsdag er satt til før starten på siste del av arbeidsgiverperioden`() { val refusjonshistorikk = Refusjonshistorikk().apply { - leggTilRefusjon(Refusjonshistorikk.Refusjon( - meldingsreferanseId = kilde1.meldingsreferanseId, - førsteFraværsdag = null, - arbeidsgiverperioder = listOf(1.januar til 5.januar, 10.januar til 20.januar), - beløp = 0.daglig, - sisteRefusjonsdag = 6.januar, - endringerIRefusjon = emptyList(), - tidsstempel = kilde1.tidsstempel, - )) + leggTilRefusjon( + Refusjonshistorikk.Refusjon( + meldingsreferanseId = kilde1.meldingsreferanseId, + førsteFraværsdag = null, + arbeidsgiverperioder = listOf(1.januar til 5.januar, 10.januar til 20.januar), + beløp = 0.daglig, + sisteRefusjonsdag = 6.januar, + endringerIRefusjon = emptyList(), + tidsstempel = kilde1.tidsstempel, + ) + ) } - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(kilde1.meldingsreferanseId, 10.januar, null, 0.daglig, ARBEIDSGIVER)), refusjonshistorikk.refusjonsopplysninger(10.januar).inspektør.refusjonsopplysninger) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 10.januar, + null, + 0.daglig, + ARBEIDSGIVER + ) + ), refusjonshistorikk.refusjonsopplysninger(10.januar).inspektør.refusjonsopplysninger + ) val forventet = Beløpstidslinje.fra(10.januar til 31.januar, INGEN, kilde1) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(10.januar til 31.januar)) @@ -127,28 +220,46 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { @Test fun `opphører ikke refusjon allikevel`() { val refusjonshistorikk = Refusjonshistorikk().apply { - leggTilRefusjon(Refusjonshistorikk.Refusjon( - meldingsreferanseId = kilde1.meldingsreferanseId, - førsteFraværsdag = 1.mars, - arbeidsgiverperioder = listOf(1.mars til 16.mars), - beløp = 1000.daglig, - sisteRefusjonsdag = 20.mars, - endringerIRefusjon = emptyList(), - tidsstempel = kilde1.tidsstempel, - )) - leggTilRefusjon(Refusjonshistorikk.Refusjon( - meldingsreferanseId = kilde2.meldingsreferanseId, - førsteFraværsdag = 1.mars, - arbeidsgiverperioder = listOf(1.mars til 16.mars), - beløp = 1000.daglig, - sisteRefusjonsdag = null, - endringerIRefusjon = emptyList(), - tidsstempel = kilde2.tidsstempel - )) + leggTilRefusjon( + Refusjonshistorikk.Refusjon( + meldingsreferanseId = kilde1.meldingsreferanseId, + førsteFraværsdag = 1.mars, + arbeidsgiverperioder = listOf(1.mars til 16.mars), + beløp = 1000.daglig, + sisteRefusjonsdag = 20.mars, + endringerIRefusjon = emptyList(), + tidsstempel = kilde1.tidsstempel, + ) + ) + leggTilRefusjon( + Refusjonshistorikk.Refusjon( + meldingsreferanseId = kilde2.meldingsreferanseId, + førsteFraværsdag = 1.mars, + arbeidsgiverperioder = listOf(1.mars til 16.mars), + beløp = 1000.daglig, + sisteRefusjonsdag = null, + endringerIRefusjon = emptyList(), + tidsstempel = kilde2.tidsstempel + ) + ) } - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(kilde2.meldingsreferanseId, 1.mars, null, 1000.daglig, ARBEIDSGIVER)), refusjonshistorikk.refusjonsopplysninger(1.mars).inspektør.refusjonsopplysninger) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + kilde2.meldingsreferanseId, + 1.mars, + null, + 1000.daglig, + ARBEIDSGIVER + ) + ), refusjonshistorikk.refusjonsopplysninger(1.mars).inspektør.refusjonsopplysninger + ) - val forventet = Beløpstidslinje.fra(1.mars til 20.mars, 1000.daglig, kilde1) + Beløpstidslinje.fra(21.mars til 31.mars, 1000.daglig, kilde2) + val forventet = Beløpstidslinje.fra( + 1.mars til 20.mars, + 1000.daglig, + kilde1 + ) + Beløpstidslinje.fra(21.mars til 31.mars, 1000.daglig, kilde2) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.mars til 31.mars)) } @@ -172,9 +283,20 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde1.tidsstempel - )) + ) + ) - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(kilde1.meldingsreferanseId, 1.januar, null, 1000.daglig, ARBEIDSGIVER)), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.januar, + null, + 1000.daglig, + ARBEIDSGIVER + ) + ), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger + ) val forventet = Beløpstidslinje.fra(1.januar til 31.januar, 1000.daglig, kilde1) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 31.januar)) @@ -192,17 +314,34 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = 31.januar, endringerIRefusjon = emptyList(), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.januar, 31.januar, 1000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.februar, null, INGEN, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.januar, + 31.januar, + 1000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.februar, + null, + INGEN, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger ) - val forventet = Beløpstidslinje.fra(1.januar til 31.januar, 1000.daglig, kilde1) + Beløpstidslinje.fra(1.februar til 28.februar, INGEN, kilde1) + val forventet = Beløpstidslinje.fra( + 1.januar til 31.januar, + 1000.daglig, + kilde1 + ) + Beløpstidslinje.fra(1.februar til 28.februar, INGEN, kilde1) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 28.februar)) } @@ -218,7 +357,8 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde1.tidsstempel - )) + ) + ) refusjonshistorikk.leggTilRefusjon( Refusjonshistorikk.Refusjon( @@ -229,17 +369,35 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde2.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.januar, 28.februar, 1000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde2.meldingsreferanseId, 1.mars, null, 2000.daglig, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.januar, + 28.februar, + 1000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde2.meldingsreferanseId, + 1.mars, + null, + 2000.daglig, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger ) - val forventet = Beløpstidslinje.fra(1.januar til 28.februar, 1000.daglig, kilde1) + Beløpstidslinje.fra(1.mars til 31.mars, 2000.daglig, kilde2) + val forventet = + Beløpstidslinje.fra(1.januar til 28.februar, 1000.daglig, kilde1) + Beløpstidslinje.fra( + 1.mars til 31.mars, + 2000.daglig, + kilde2 + ) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 31.mars)) } @@ -256,11 +414,18 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.januar, null, 1000.daglig, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.januar, + null, + 1000.daglig, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger ) @@ -281,7 +446,8 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( @@ -306,7 +472,8 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde1.tidsstempel - )) + ) + ) refusjonshistorikk.leggTilRefusjon( Refusjonshistorikk.Refusjon( @@ -317,11 +484,18 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde2.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde2.meldingsreferanseId, 1.mars, null, 2000.daglig, ARBEIDSGIVER) + Refusjonsopplysning( + kilde2.meldingsreferanseId, + 1.mars, + null, + 2000.daglig, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.mars).inspektør.refusjonsopplysninger ) @@ -342,17 +516,35 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = listOf(EndringIRefusjon(500.daglig, 20.januar)), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.januar, 19.januar, 1000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 20.januar, null, 500.daglig, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.januar, + 19.januar, + 1000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 20.januar, + null, + 500.daglig, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger ) - val forventet = Beløpstidslinje.fra(1.januar til 19.januar, 1000.daglig, kilde1) + Beløpstidslinje.fra(20.januar til 31.januar, 500.daglig, kilde1) + val forventet = + Beløpstidslinje.fra(1.januar til 19.januar, 1000.daglig, kilde1) + Beløpstidslinje.fra( + 20.januar til 31.januar, + 500.daglig, + kilde1 + ) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 31.januar)) } @@ -372,21 +564,40 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { EndringIRefusjon(500.daglig, 20.januar) ), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.januar, 19.januar, 1000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 20.januar, 24.januar, 500.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 25.januar, null, 2000.daglig, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.januar, + 19.januar, + 1000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 20.januar, + 24.januar, + 500.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 25.januar, + null, + 2000.daglig, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger ) val forventet = Beløpstidslinje.fra(1.januar til 19.januar, 1000.daglig, kilde1) + - Beløpstidslinje.fra(20.januar til 24.januar, 500.daglig, kilde1) + - Beløpstidslinje.fra(25.januar til 31.januar, 2000.daglig, kilde1) + Beløpstidslinje.fra(20.januar til 24.januar, 500.daglig, kilde1) + + Beløpstidslinje.fra(25.januar til 31.januar, 2000.daglig, kilde1) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 31.januar)) } @@ -405,7 +616,8 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { EndringIRefusjon(500.daglig, 20.januar) ), tidsstempel = kilde1.tidsstempel - )) + ) + ) refusjonshistorikk.leggTilRefusjon( Refusjonshistorikk.Refusjon( @@ -419,28 +631,65 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { EndringIRefusjon(9.daglig, 20.mars) ), tidsstempel = kilde2.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.januar, 19.januar, 1000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 20.januar, 24.januar, 500.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 25.januar, 28.februar, 2000.daglig, ARBEIDSGIVER), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.januar, + 19.januar, + 1000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 20.januar, + 24.januar, + 500.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 25.januar, + 28.februar, + 2000.daglig, + ARBEIDSGIVER + ), - Refusjonsopplysning(kilde2.meldingsreferanseId, 1.mars, 19.mars, 999.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde2.meldingsreferanseId, 20.mars, 24.mars, 9.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde2.meldingsreferanseId, 25.mars, null, 99.daglig, ARBEIDSGIVER) + Refusjonsopplysning( + kilde2.meldingsreferanseId, + 1.mars, + 19.mars, + 999.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde2.meldingsreferanseId, + 20.mars, + 24.mars, + 9.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde2.meldingsreferanseId, + 25.mars, + null, + 99.daglig, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger ) val forventet = Beløpstidslinje.fra(1.januar til 19.januar, 1000.daglig, kilde1) + - Beløpstidslinje.fra(20.januar til 24.januar, 500.daglig, kilde1) + - Beløpstidslinje.fra(25.januar til 28.februar, 2000.daglig, kilde1) + - Beløpstidslinje.fra(1.mars til 19.mars, 999.daglig, kilde2) + - Beløpstidslinje.fra(20.mars til 24.mars, 9.daglig, kilde2) + - Beløpstidslinje.fra(25.mars til 31.mars, 99.daglig, kilde2) + Beløpstidslinje.fra(20.januar til 24.januar, 500.daglig, kilde1) + + Beløpstidslinje.fra(25.januar til 28.februar, 2000.daglig, kilde1) + + Beløpstidslinje.fra(1.mars til 19.mars, 999.daglig, kilde2) + + Beløpstidslinje.fra(20.mars til 24.mars, 9.daglig, kilde2) + + Beløpstidslinje.fra(25.mars til 31.mars, 99.daglig, kilde2) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 31.mars)) } @@ -457,16 +706,34 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = 19.januar, endringerIRefusjon = listOf(EndringIRefusjon(500.daglig, 20.januar)), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.januar, 19.januar, 1000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 20.januar, null, INGEN, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.januar, + 19.januar, + 1000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 20.januar, + null, + INGEN, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger ) - val forventet = Beløpstidslinje.fra(1.januar til 19.januar, 1000.daglig, kilde1) + Beløpstidslinje.fra(20.januar til 31.januar, INGEN, kilde1) + val forventet = + Beløpstidslinje.fra(1.januar til 19.januar, 1000.daglig, kilde1) + Beløpstidslinje.fra( + 20.januar til 31.januar, + INGEN, + kilde1 + ) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 31.januar)) } @@ -485,21 +752,40 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { EndringIRefusjon(1000.daglig, 20.januar) ), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.januar, 18.januar, 1000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 19.januar, 19.januar, 500.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 20.januar, null, INGEN, ARBEIDSGIVER), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.januar, + 18.januar, + 1000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 19.januar, + 19.januar, + 500.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 20.januar, + null, + INGEN, + ARBEIDSGIVER + ), ), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger ) val forventet = Beløpstidslinje.fra(1.januar til 18.januar, 1000.daglig, kilde1) + - Beløpstidslinje.fra(19.januar til 19.januar, 500.daglig, kilde1) + - Beløpstidslinje.fra(20.januar til 31.januar, 0.daglig, kilde1) + Beløpstidslinje.fra(19.januar til 19.januar, 500.daglig, kilde1) + + Beløpstidslinje.fra(20.januar til 31.januar, 0.daglig, kilde1) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 31.januar)) } @@ -518,19 +804,32 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { EndringIRefusjon(500.daglig, 21.januar) ), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.januar, 19.januar, 1000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 20.januar, null, INGEN, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.januar, + 19.januar, + 1000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 20.januar, + null, + INGEN, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger ) val forventet = Beløpstidslinje.fra(1.januar til 19.januar, 1000.daglig, kilde1) + - Beløpstidslinje.fra(20.januar til 31.januar, 0.daglig, kilde1) + Beløpstidslinje.fra(20.januar til 31.januar, 0.daglig, kilde1) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 31.januar)) } @@ -546,7 +845,8 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde1.tidsstempel - )) + ) + ) refusjonshistorikk.leggTilRefusjon( Refusjonshistorikk.Refusjon( @@ -557,11 +857,18 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde2.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.februar, 30.april, 1000.daglig, ARBEIDSGIVER), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.februar, + 30.april, + 1000.daglig, + ARBEIDSGIVER + ), Refusjonsopplysning(kilde2.meldingsreferanseId, 1.mai, null, 0.daglig, ARBEIDSGIVER) ), refusjonshistorikk.refusjonsopplysninger(1.februar).inspektør.refusjonsopplysninger @@ -570,7 +877,7 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { val forventet = Beløpstidslinje.fra(1.februar til 30.april, 1000.daglig, kilde1) + - Beløpstidslinje.fra(1.mai til 1.mai, 0.daglig, kilde2) + Beløpstidslinje.fra(1.mai til 1.mai, 0.daglig, kilde2) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.februar til 1.mai)) } @@ -586,17 +893,34 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.februar, 9.februar, 1000.daglig, ARBEIDSGIVER), // Gråsonen, legges på en refusjonsopplysning strukket tilbake til skjæringstidspunktet - Refusjonsopplysning(kilde1.meldingsreferanseId, 10.februar, null, 1000.daglig, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.februar, + 9.februar, + 1000.daglig, + ARBEIDSGIVER + ), // Gråsonen, legges på en refusjonsopplysning strukket tilbake til skjæringstidspunktet + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 10.februar, + null, + 1000.daglig, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.februar).inspektør.refusjonsopplysninger ) - val forventet = Beløpstidslinje.fra(10.februar til 28.februar, 1000.daglig, kilde1) // Ingen gråsone på dette nivået + val forventet = Beløpstidslinje.fra( + 10.februar til 28.februar, + 1000.daglig, + kilde1 + ) // Ingen gråsone på dette nivået assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.februar til 28.februar)) } @@ -612,13 +936,26 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.februar, 10.februar, 1000.daglig, ARBEIDSGIVER), // Gråsonen - Refusjonsopplysning(kilde1.meldingsreferanseId, 11.februar, null, 1000.daglig, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.februar, + 10.februar, + 1000.daglig, + ARBEIDSGIVER + ), // Gråsonen + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 11.februar, + null, + 1000.daglig, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.februar).inspektør.refusjonsopplysninger ) @@ -640,12 +977,25 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { sisteRefusjonsdag = null, endringerIRefusjon = emptyList(), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.februar, 19.februar, 1000.daglig, ARBEIDSGIVER), // Gråsone - Refusjonsopplysning(kilde1.meldingsreferanseId, 20.februar, null, 1000.daglig, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.februar, + 19.februar, + 1000.daglig, + ARBEIDSGIVER + ), // Gråsone + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 20.februar, + null, + 1000.daglig, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.februar).inspektør.refusjonsopplysninger ) @@ -670,20 +1020,39 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { EndringIRefusjon(99.daglig, 9.februar) ), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.februar, 9.februar, 1000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 10.februar, 10.februar, 1000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 11.februar, null, 2000.daglig, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.februar, + 9.februar, + 1000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 10.februar, + 10.februar, + 1000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 11.februar, + null, + 2000.daglig, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.februar).inspektør.refusjonsopplysninger ) val forventet = Beløpstidslinje.fra(10.februar til 10.februar, 1000.daglig, kilde1) + - Beløpstidslinje.fra(11.februar til 28.februar, 2000.daglig, kilde1) + Beløpstidslinje.fra(11.februar til 28.februar, 2000.daglig, kilde1) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.februar til 28.februar)) } @@ -703,23 +1072,48 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { EndringIRefusjon(3000.daglig, 12.januar) ), tidsstempel = kilde1.tidsstempel - )) + ) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(kilde1.meldingsreferanseId, 1.januar, 9.januar, 1000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 10.januar, 11.januar, 2000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 12.januar, 14.januar, 3000.daglig, ARBEIDSGIVER), - Refusjonsopplysning(kilde1.meldingsreferanseId, 15.januar, null, 4000.daglig, ARBEIDSGIVER) + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 1.januar, + 9.januar, + 1000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 10.januar, + 11.januar, + 2000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 12.januar, + 14.januar, + 3000.daglig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + kilde1.meldingsreferanseId, + 15.januar, + null, + 4000.daglig, + ARBEIDSGIVER + ) ), refusjonshistorikk.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger ) val forventet = Beløpstidslinje.fra(1.januar til 9.januar, 1000.daglig, kilde1) + - Beløpstidslinje.fra(10.januar til 11.januar, 2000.daglig, kilde1) + - Beløpstidslinje.fra(12.januar til 14.januar, 3000.daglig, kilde1) + - Beløpstidslinje.fra(15.januar til 31.januar, 4000.daglig, kilde1) + Beløpstidslinje.fra(10.januar til 11.januar, 2000.daglig, kilde1) + + Beløpstidslinje.fra(12.januar til 14.januar, 3000.daglig, kilde1) + + Beløpstidslinje.fra(15.januar til 31.januar, 4000.daglig, kilde1) assertEquals(forventet, refusjonshistorikk.beløpstidslinje(1.januar til 31.januar)) } @@ -727,32 +1121,39 @@ internal class RefusjonshistorikkTilRefusjonsopplysningerTest { fun `Første fraværsdag dagen før søkevindu`() { val refusjonshistorikk = Refusjonshistorikk() val inntektsmelding = UUID.randomUUID() - refusjonshistorikk.leggTilRefusjon(Refusjonshistorikk.Refusjon( - meldingsreferanseId = inntektsmelding, - førsteFraværsdag = 1.mars, - arbeidsgiverperioder = listOf(1.januar til 16.januar), - beløp = 1000.daglig, - sisteRefusjonsdag = null, - endringerIRefusjon = emptyList() - )) - - assertEquals(emptyList(), refusjonshistorikk.refusjonsopplysninger(2.mars).inspektør.refusjonsopplysninger) + refusjonshistorikk.leggTilRefusjon( + Refusjonshistorikk.Refusjon( + meldingsreferanseId = inntektsmelding, + førsteFraværsdag = 1.mars, + arbeidsgiverperioder = listOf(1.januar til 16.januar), + beløp = 1000.daglig, + sisteRefusjonsdag = null, + endringerIRefusjon = emptyList() + ) + ) + + assertEquals( + emptyList(), + refusjonshistorikk.refusjonsopplysninger(2.mars).inspektør.refusjonsopplysninger + ) assertEquals(Beløpstidslinje(), refusjonshistorikk.beløpstidslinje(2.mars til 31.mars)) } private fun endringIRefusjonFraOgMed(dag: LocalDate): Triple, Refusjonshistorikk> { val refusjonshistorikk = Refusjonshistorikk() val refusjonsopplysninger = refusjonshistorikk.apply { - leggTilRefusjon(Refusjonshistorikk.Refusjon( - meldingsreferanseId = kilde1.meldingsreferanseId, - førsteFraværsdag = 1.januar, - arbeidsgiverperioder = emptyList(), - beløp = 100.daglig, - sisteRefusjonsdag = 1.februar, - endringerIRefusjon = listOf(EndringIRefusjon(200.daglig, dag)), - tidsstempel = kilde1.tidsstempel, - )) + leggTilRefusjon( + Refusjonshistorikk.Refusjon( + meldingsreferanseId = kilde1.meldingsreferanseId, + førsteFraværsdag = 1.januar, + arbeidsgiverperioder = emptyList(), + beløp = 100.daglig, + sisteRefusjonsdag = 1.februar, + endringerIRefusjon = listOf(EndringIRefusjon(200.daglig, dag)), + tidsstempel = kilde1.tidsstempel, + ) + ) }.refusjonsopplysninger(1.januar).inspektør.refusjonsopplysninger return Triple(kilde1, refusjonsopplysninger, refusjonshistorikk) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonsopplysningerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonsopplysningerTest.kt index 5ccf8cd5f4..19d1ae9c30 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonsopplysningerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/RefusjonsopplysningerTest.kt @@ -44,16 +44,49 @@ internal class RefusjonsopplysningerTest { @Test fun `refusjonsopplysninger som beløpstidslinje`() { val refusjonsopplysninger = listOf( - Refusjonsopplysning(meldingsreferanseId1, 1.januar, null, 500.daglig, ARBEIDSGIVER, LocalDateTime.MIN), - Refusjonsopplysning(meldingsreferanseId2, 10.januar, null, INGEN, SAKSBEHANDLER, LocalDate.EPOCH.atStartOfDay()), - Refusjonsopplysning(meldingsreferanseId3, 1.mars, null, 250.daglig, SYSTEM, LocalDateTime.MAX), + Refusjonsopplysning( + meldingsreferanseId1, + 1.januar, + null, + 500.daglig, + ARBEIDSGIVER, + LocalDateTime.MIN + ), + Refusjonsopplysning( + meldingsreferanseId2, + 10.januar, + null, + INGEN, + SAKSBEHANDLER, + LocalDate.EPOCH.atStartOfDay() + ), + Refusjonsopplysning( + meldingsreferanseId3, + 1.mars, + null, + 250.daglig, + SYSTEM, + LocalDateTime.MAX + ), ).refusjonsopplysninger() val beløpstidslinje = refusjonsopplysninger.beløpstidslinje() val forventet = - Beløpstidslinje.fra(1.januar til 9.januar, 500.daglig, Kilde(meldingsreferanseId1, ARBEIDSGIVER, LocalDateTime.MIN)) + - Beløpstidslinje.fra(10.januar til 28.februar, INGEN, Kilde(meldingsreferanseId2, SAKSBEHANDLER, LocalDate.EPOCH.atStartOfDay())) + - Beløpstidslinje.fra(1.mars til 1.mars, 250.daglig, Kilde(meldingsreferanseId3, SYSTEM, LocalDateTime.MAX)) + Beløpstidslinje.fra( + 1.januar til 9.januar, + 500.daglig, + Kilde(meldingsreferanseId1, ARBEIDSGIVER, LocalDateTime.MIN) + ) + + Beløpstidslinje.fra( + 10.januar til 28.februar, + INGEN, + Kilde(meldingsreferanseId2, SAKSBEHANDLER, LocalDate.EPOCH.atStartOfDay()) + ) + + Beløpstidslinje.fra( + 1.mars til 1.mars, + 250.daglig, + Kilde(meldingsreferanseId3, SYSTEM, LocalDateTime.MAX) + ) assertEquals(forventet, beløpstidslinje) } @@ -66,11 +99,13 @@ internal class RefusjonsopplysningerTest { Refusjonsopplysning(meldingsreferanseId1, 1.mars, null, 250.daglig), ).refusjonsopplysninger() - assertEquals(listOf( - Refusjonsopplysning(meldingsreferanseId1, 1.januar, 9.januar, 500.daglig), - Refusjonsopplysning(meldingsreferanseId1, 10.januar, 28.februar, INGEN), - Refusjonsopplysning(meldingsreferanseId1, 1.mars, null, 250.daglig), - ).refusjonsopplysninger(), refusjonsopplysninger) + assertEquals( + listOf( + Refusjonsopplysning(meldingsreferanseId1, 1.januar, 9.januar, 500.daglig), + Refusjonsopplysning(meldingsreferanseId1, 10.januar, 28.februar, INGEN), + Refusjonsopplysning(meldingsreferanseId1, 1.mars, null, 250.daglig), + ).refusjonsopplysninger(), refusjonsopplysninger + ) } @Test @@ -81,11 +116,13 @@ internal class RefusjonsopplysningerTest { Refusjonsopplysning(meldingsreferanseId1, 13.januar, null, 250.daglig), ).refusjonsopplysninger() - assertEquals(listOf( - Refusjonsopplysning(meldingsreferanseId1, 1.januar, 4.januar, 500.daglig), - Refusjonsopplysning(meldingsreferanseId1, 5.januar, 12.januar, INGEN), - Refusjonsopplysning(meldingsreferanseId1, 13.januar, null, 250.daglig), - ).refusjonsopplysninger(), refusjonsopplysninger) + assertEquals( + listOf( + Refusjonsopplysning(meldingsreferanseId1, 1.januar, 4.januar, 500.daglig), + Refusjonsopplysning(meldingsreferanseId1, 5.januar, 12.januar, INGEN), + Refusjonsopplysning(meldingsreferanseId1, 13.januar, null, 250.daglig), + ).refusjonsopplysninger(), refusjonsopplysninger + ) } @Test @@ -97,7 +134,10 @@ internal class RefusjonsopplysningerTest { Refusjonsopplysning(meldingsreferanseId2, 15.januar, 20.januar, 1000.daglig) ).refusjonsopplysninger() - assertEquals(15.januar, nyeRefusjonsopplysninger.finnFørsteDatoForEndring(refusjonsopplysninger)) + assertEquals( + 15.januar, + nyeRefusjonsopplysninger.finnFørsteDatoForEndring(refusjonsopplysninger) + ) assertEquals( listOf( Refusjonsopplysning(meldingsreferanseId1, 1.januar, 14.januar, 2000.daglig), @@ -110,10 +150,27 @@ internal class RefusjonsopplysningerTest { @Test fun `ny refusjonsopplysning uten tom`() { - val refusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId1, 1.januar, 31.januar, 2000.daglig)).refusjonsopplysninger() - val nyeRefusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId2, 15.januar, null, 1000.daglig)).refusjonsopplysninger() + val refusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId1, + 1.januar, + 31.januar, + 2000.daglig + ) + ).refusjonsopplysninger() + val nyeRefusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId2, + 15.januar, + null, + 1000.daglig + ) + ).refusjonsopplysninger() - assertEquals(15.januar, nyeRefusjonsopplysninger.finnFørsteDatoForEndring(refusjonsopplysninger)) + assertEquals( + 15.januar, + nyeRefusjonsopplysninger.finnFørsteDatoForEndring(refusjonsopplysninger) + ) assertEquals( listOf( Refusjonsopplysning(meldingsreferanseId1, 1.januar, 14.januar, 2000.daglig), @@ -138,31 +195,74 @@ internal class RefusjonsopplysningerTest { Refusjonsopplysning(meldingsreferanseId2, 9.mai, null, INGEN) ).refusjonsopplysninger() - assertEquals(listOf( - Refusjonsopplysning(meldingsreferanseId2, 6.mars, 16.april, 2000.daglig), - Refusjonsopplysning(meldingsreferanseId1, 17.april, 20.april, INGEN), - Refusjonsopplysning(meldingsreferanseId1, 21.april, 8.mai, 2000.daglig), - Refusjonsopplysning(meldingsreferanseId1, 9.mai, null, INGEN) // <- - ).refusjonsopplysninger(), gamleRefusjonsopplysninger.merge(nyeRefusjonsopplysninger)) + assertEquals( + listOf( + Refusjonsopplysning(meldingsreferanseId2, 6.mars, 16.april, 2000.daglig), + Refusjonsopplysning(meldingsreferanseId1, 17.april, 20.april, INGEN), + Refusjonsopplysning(meldingsreferanseId1, 21.april, 8.mai, 2000.daglig), + Refusjonsopplysning(meldingsreferanseId1, 9.mai, null, INGEN) // <- + ).refusjonsopplysninger(), gamleRefusjonsopplysninger.merge(nyeRefusjonsopplysninger) + ) } @Test fun `ny refusjonsopplysning erstatter gamle`() { - val refusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId1, 2.januar, 30.januar, 2000.daglig)).refusjonsopplysninger() - val nyeRefusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId2, 1.januar, 31.januar, 1000.daglig)).refusjonsopplysninger() + val refusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId1, + 2.januar, + 30.januar, + 2000.daglig + ) + ).refusjonsopplysninger() + val nyeRefusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId2, + 1.januar, + 31.januar, + 1000.daglig + ) + ).refusjonsopplysninger() - val forventet = listOf(Refusjonsopplysning(meldingsreferanseId2, 2.januar, 31.januar, 1000.daglig)).refusjonsopplysninger() + val forventet = listOf( + Refusjonsopplysning( + meldingsreferanseId2, + 2.januar, + 31.januar, + 1000.daglig + ) + ).refusjonsopplysninger() val resultat = refusjonsopplysninger.merge(nyeRefusjonsopplysninger) - assertEquals(forventet.inspektør.refusjonsopplysninger, resultat.inspektør.refusjonsopplysninger) + assertEquals( + forventet.inspektør.refusjonsopplysninger, + resultat.inspektør.refusjonsopplysninger + ) assertEquals(2.januar, resultat.finnFørsteDatoForEndring(refusjonsopplysninger)) } @Test fun `ny refusjonsopplysning uten tom erstatter gammel uten tom`() { - val refusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId1, 1.januar, null, 2000.daglig)).refusjonsopplysninger() - val nyeRefusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId2, 1.januar, null, 1000.daglig)).refusjonsopplysninger() + val refusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId1, + 1.januar, + null, + 2000.daglig + ) + ).refusjonsopplysninger() + val nyeRefusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId2, + 1.januar, + null, + 1000.daglig + ) + ).refusjonsopplysninger() - assertEquals(1.januar, nyeRefusjonsopplysninger.finnFørsteDatoForEndring(refusjonsopplysninger)) + assertEquals( + 1.januar, + nyeRefusjonsopplysninger.finnFørsteDatoForEndring(refusjonsopplysninger) + ) assertEquals( nyeRefusjonsopplysninger.inspektør.refusjonsopplysninger, refusjonsopplysninger.merge(nyeRefusjonsopplysninger).inspektør.refusjonsopplysninger @@ -171,22 +271,63 @@ internal class RefusjonsopplysningerTest { @Test fun `ny refusjonsopplysning uten tom legges på eksisterende uten tom`() { - val refusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId1, 1.januar, null, 2000.daglig)).refusjonsopplysninger() - val nyeRefusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId2, 1.mars, null, 1000.daglig)).refusjonsopplysninger() + val refusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId1, + 1.januar, + null, + 2000.daglig + ) + ).refusjonsopplysninger() + val nyeRefusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId2, + 1.mars, + null, + 1000.daglig + ) + ).refusjonsopplysninger() - assertEquals(1.mars, nyeRefusjonsopplysninger.finnFørsteDatoForEndring(refusjonsopplysninger)) assertEquals( - listOf(Refusjonsopplysning(meldingsreferanseId1, 1.januar, 28.februar, 2000.daglig), Refusjonsopplysning(meldingsreferanseId2, 1.mars, null, 1000.daglig)), + 1.mars, + nyeRefusjonsopplysninger.finnFørsteDatoForEndring(refusjonsopplysninger) + ) + assertEquals( + listOf( + Refusjonsopplysning(meldingsreferanseId1, 1.januar, 28.februar, 2000.daglig), + Refusjonsopplysning(meldingsreferanseId2, 1.mars, null, 1000.daglig) + ), refusjonsopplysninger.merge(nyeRefusjonsopplysninger).inspektør.refusjonsopplysninger ) } @Test fun `ny refusjonsopplysning uten tom som starter tidligere enn forrige`() { - val refusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId1, 1.mars, null, 2000.daglig)).refusjonsopplysninger() - val nyeRefusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId2, 1.januar, null, 1000.daglig)).refusjonsopplysninger() + val refusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId1, + 1.mars, + null, + 2000.daglig + ) + ).refusjonsopplysninger() + val nyeRefusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId2, + 1.januar, + null, + 1000.daglig + ) + ).refusjonsopplysninger() - val forventet = listOf(Refusjonsopplysning(meldingsreferanseId2, 1.mars, null, 1000.daglig)).refusjonsopplysninger() + val forventet = listOf( + Refusjonsopplysning( + meldingsreferanseId2, + 1.mars, + null, + 1000.daglig + ) + ).refusjonsopplysninger() assertEquals( forventet.inspektør.refusjonsopplysninger, @@ -196,8 +337,22 @@ internal class RefusjonsopplysningerTest { @Test fun `perfekt overlapp - bruker nye opplysninger`() { - val refusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId1, 1.januar, 1.mars, 2000.daglig)).refusjonsopplysninger() - val nyeRefusjonsopplysninger = listOf(Refusjonsopplysning(meldingsreferanseId2, 1.januar, 1.mars, 1000.daglig)).refusjonsopplysninger() + val refusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId1, + 1.januar, + 1.mars, + 2000.daglig + ) + ).refusjonsopplysninger() + val nyeRefusjonsopplysninger = listOf( + Refusjonsopplysning( + meldingsreferanseId2, + 1.januar, + 1.mars, + 1000.daglig + ) + ).refusjonsopplysninger() assertEquals( nyeRefusjonsopplysninger.inspektør.refusjonsopplysninger, @@ -218,7 +373,10 @@ internal class RefusjonsopplysningerTest { Refusjonsopplysning(meldingsreferanseId6, 13.januar, 16.januar, 7000.daglig) ).refusjonsopplysninger() - assertEquals(2.januar, nyeRefusjonsopplysninger.finnFørsteDatoForEndring(refusjonsopplysninger)) + assertEquals( + 2.januar, + nyeRefusjonsopplysninger.finnFørsteDatoForEndring(refusjonsopplysninger) + ) assertEquals( listOf( Refusjonsopplysning(meldingsreferanseId1, 1.januar, 1.januar, 2000.daglig), @@ -241,7 +399,10 @@ internal class RefusjonsopplysningerTest { val nyeRefusjonsopplysninger = Refusjonsopplysninger() val resultat = nyeRefusjonsopplysninger.merge(gammelRefusjonsopplysninger) assertNull(resultat.finnFørsteDatoForEndring(nyeRefusjonsopplysninger)) - assertEquals(Refusjonsopplysninger().inspektør.refusjonsopplysninger, resultat.inspektør.refusjonsopplysninger) + assertEquals( + Refusjonsopplysninger().inspektør.refusjonsopplysninger, + resultat.inspektør.refusjonsopplysninger + ) } @Test @@ -257,7 +418,10 @@ internal class RefusjonsopplysningerTest { assertEquals( originaleRefusjonsopplysninger, - Refusjonsopplysninger(originaleRefusjonsopplysninger, LocalDateTime.now()).inspektør.refusjonsopplysninger + Refusjonsopplysninger( + originaleRefusjonsopplysninger, + LocalDateTime.now() + ).inspektør.refusjonsopplysninger ) } @@ -268,14 +432,26 @@ internal class RefusjonsopplysningerTest { Refusjonsopplysning(meldingsreferanseId2, 1.mars, null, 2000.daglig) ) - assertEquals(refusjonsopplysninger, Refusjonsopplysninger(refusjonsopplysninger, LocalDateTime.now()).inspektør.refusjonsopplysninger) + assertEquals( + refusjonsopplysninger, + Refusjonsopplysninger( + refusjonsopplysninger, + LocalDateTime.now() + ).inspektør.refusjonsopplysninger + ) } @Test fun `ny opplysning før oss`() { val eksisterende = Refusjonsopplysning(meldingsreferanseId1, 1.mars, 31.mars, 2000.daglig) val ny = Refusjonsopplysning(meldingsreferanseId2, 1.januar, 15.februar, 2000.daglig) - assertEquals(listOf(ny, eksisterende), Refusjonsopplysninger(listOf(eksisterende, ny), LocalDateTime.now()).inspektør.refusjonsopplysninger) + assertEquals( + listOf(ny, eksisterende), + Refusjonsopplysninger( + listOf(eksisterende, ny), + LocalDateTime.now() + ).inspektør.refusjonsopplysninger + ) } @Test @@ -286,8 +462,18 @@ internal class RefusjonsopplysningerTest { val ny = Refusjonsopplysning(meldingsreferanseId2, 1.mars, 1.mars, 1000.daglig) val refusjonsopplysning = RefusjonsopplysningerBuilder() .leggTil(eksisterende, eksisterendeTidspunkt).leggTil(ny, nyttTidspunkt).build() - assertEquals(1.mars, refusjonsopplysning.finnFørsteDatoForEndring(RefusjonsopplysningerBuilder().leggTil(eksisterende).build())) - assertEquals(listOf(ny, Refusjonsopplysning(meldingsreferanseId1, 2.mars, 31.mars, 2000.daglig)), refusjonsopplysning.inspektør.refusjonsopplysninger) + assertEquals( + 1.mars, + refusjonsopplysning.finnFørsteDatoForEndring( + RefusjonsopplysningerBuilder().leggTil(eksisterende).build() + ) + ) + assertEquals( + listOf( + ny, + Refusjonsopplysning(meldingsreferanseId1, 2.mars, 31.mars, 2000.daglig) + ), refusjonsopplysning.inspektør.refusjonsopplysninger + ) } @Test @@ -296,8 +482,11 @@ internal class RefusjonsopplysningerTest { val nyttTidspunkt = eksisterendeTidspunkt.plusSeconds(1) val ny = Refusjonsopplysning(meldingsreferanseId2, 1.januar, 1.mars, 2000.daglig) val eksisterende = Refusjonsopplysning(meldingsreferanseId1, 1.mars, 31.mars, 2000.daglig) - val eksisterendeFørst = RefusjonsopplysningerBuilder().leggTil(eksisterende, eksisterendeTidspunkt).leggTil(ny, nyttTidspunkt).build() - val nyFørst = RefusjonsopplysningerBuilder().leggTil(ny, nyttTidspunkt).leggTil(eksisterende, eksisterendeTidspunkt).build() + val eksisterendeFørst = + RefusjonsopplysningerBuilder().leggTil(eksisterende, eksisterendeTidspunkt) + .leggTil(ny, nyttTidspunkt).build() + val nyFørst = RefusjonsopplysningerBuilder().leggTil(ny, nyttTidspunkt) + .leggTil(eksisterende, eksisterendeTidspunkt).build() assertEquals(eksisterendeFørst, nyFørst) } @@ -306,8 +495,12 @@ internal class RefusjonsopplysningerTest { val tidspunkt = LocalDateTime.now() val januar = Refusjonsopplysning(meldingsreferanseId1, 1.januar, 1.mars, 2000.daglig) val mars = Refusjonsopplysning(meldingsreferanseId2, 1.mars, 31.mars, 2000.daglig) - val marsFørst = RefusjonsopplysningerBuilder().leggTil(mars, tidspunkt).leggTil(januar,tidspunkt).build() - val januarFørst = RefusjonsopplysningerBuilder().leggTil(januar, tidspunkt).leggTil(mars, tidspunkt).build() + val marsFørst = + RefusjonsopplysningerBuilder().leggTil(mars, tidspunkt).leggTil(januar, tidspunkt) + .build() + val januarFørst = + RefusjonsopplysningerBuilder().leggTil(januar, tidspunkt).leggTil(mars, tidspunkt) + .build() assertEquals(marsFørst, januarFørst) } @@ -317,42 +510,116 @@ internal class RefusjonsopplysningerTest { val skjæringstidspunkt = 1.januar val refusjonsopplysninger = januar.refusjonsopplysninger - assertFalse(refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt, listOf(skjæringstidspunkt.forrigeDag))) - assertTrue(refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt, listOf(1.januar))) - assertTrue(refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt, listOf(2.januar))) - assertTrue(refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt, listOf(31.januar))) - assertFalse(refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt, listOf(1.februar))) - assertTrue(refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt, 2.januar til 31.januar)) - assertTrue(refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt, 3.januar til 30.januar)) - assertTrue(refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt, 1.januar til 31.januar)) - assertFalse(refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt, 2.januar til 1.februar)) - assertFalse(refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt, 31.januar til 28.februar)) + assertFalse( + refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + listOf(skjæringstidspunkt.forrigeDag) + ) + ) + assertTrue( + refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + listOf(1.januar) + ) + ) + assertTrue( + refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + listOf(2.januar) + ) + ) + assertTrue( + refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + listOf(31.januar) + ) + ) + assertFalse( + refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + listOf(1.februar) + ) + ) + assertTrue( + refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + 2.januar til 31.januar + ) + ) + assertTrue( + refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + 3.januar til 30.januar + ) + ) + assertTrue( + refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + 1.januar til 31.januar + ) + ) + assertFalse( + refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + 2.januar til 1.februar + ) + ) + assertFalse( + refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + 31.januar til 28.februar + ) + ) } @Test fun `kan gjenopprette refusjonsopplysninger som ikke overlapper`() { assertGjenopprettetRefusjonsopplysninger(emptyList()) - assertGjenopprettetRefusjonsopplysninger(listOf(Refusjonsopplysning(meldingsreferanseId1, 1.januar, 31.januar, 1000.daglig))) - assertGjenopprettetRefusjonsopplysninger(listOf(Refusjonsopplysning(meldingsreferanseId1, 1.januar, null, 1000.daglig))) - assertGjenopprettetRefusjonsopplysninger(listOf( - Refusjonsopplysning(meldingsreferanseId1, 1.januar, 31.januar, 1000.daglig), - Refusjonsopplysning(meldingsreferanseId1, 1.mars, 31.mars, 2000.daglig), - Refusjonsopplysning(meldingsreferanseId1, 1.april, null, 3000.daglig), - )) + assertGjenopprettetRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + meldingsreferanseId1, + 1.januar, + 31.januar, + 1000.daglig + ) + ) + ) + assertGjenopprettetRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + meldingsreferanseId1, + 1.januar, + null, + 1000.daglig + ) + ) + ) + assertGjenopprettetRefusjonsopplysninger( + listOf( + Refusjonsopplysning(meldingsreferanseId1, 1.januar, 31.januar, 1000.daglig), + Refusjonsopplysning(meldingsreferanseId1, 1.mars, 31.mars, 2000.daglig), + Refusjonsopplysning(meldingsreferanseId1, 1.april, null, 3000.daglig), + ) + ) } @Test fun `kan ikke gjenopprette refusjonsopplysningr som overlapper`() { - assertThrows { listOf( - Refusjonsopplysning(meldingsreferanseId1, 1.januar, 31.januar, 1000.daglig), - Refusjonsopplysning(meldingsreferanseId2, 1.mars, null, 2000.daglig), - Refusjonsopplysning(meldingsreferanseId3, 1.april, 30.april, 3000.daglig), - ).gjennopprett() } + assertThrows { + listOf( + Refusjonsopplysning(meldingsreferanseId1, 1.januar, 31.januar, 1000.daglig), + Refusjonsopplysning(meldingsreferanseId2, 1.mars, null, 2000.daglig), + Refusjonsopplysning(meldingsreferanseId3, 1.april, 30.april, 3000.daglig), + ).gjennopprett() + } - assertThrows { listOf( - Refusjonsopplysning(meldingsreferanseId1, 1.januar, 31.januar, 1000.daglig), - Refusjonsopplysning(meldingsreferanseId2, 1.januar, 28.februar, 2000.daglig) - ).gjennopprett() } + assertThrows { + listOf( + Refusjonsopplysning(meldingsreferanseId1, 1.januar, 31.januar, 1000.daglig), + Refusjonsopplysning(meldingsreferanseId2, 1.januar, 28.februar, 2000.daglig) + ).gjennopprett() + } } @Test @@ -362,9 +629,28 @@ internal class RefusjonsopplysningerTest { (26.januar til 31.januar).forEach { oppholdsdag(it) } (februar).forEach { utbetalingsdag(it) } } - val refusjonsopplysninger = Refusjonsopplysning(meldingsreferanseId1, 1.januar, null, 20000.månedlig).refusjonsopplysninger - assertTrue(harNødvendigeRefusjonsopplysninger(1.januar, 1.januar til 31.januar, refusjonsopplysninger, arbeidsgiverperiode)) - assertFalse(harNødvendigeRefusjonsopplysninger(1.januar, februar, refusjonsopplysninger, arbeidsgiverperiode)) + val refusjonsopplysninger = Refusjonsopplysning( + meldingsreferanseId1, + 1.januar, + null, + 20000.månedlig + ).refusjonsopplysninger + assertTrue( + harNødvendigeRefusjonsopplysninger( + 1.januar, + 1.januar til 31.januar, + refusjonsopplysninger, + arbeidsgiverperiode + ) + ) + assertFalse( + harNødvendigeRefusjonsopplysninger( + 1.januar, + februar, + refusjonsopplysninger, + arbeidsgiverperiode + ) + ) } @Test @@ -375,16 +661,55 @@ internal class RefusjonsopplysningerTest { (februar).forEach { utbetalingsdag(it) } } // IM: FF = 1.januar, AGP = 1.januar - 16.januar - val refusjonsopplysningerJanuar = Refusjonsopplysning(meldingsreferanseId1, 1.januar, null, 20000.månedlig).refusjonsopplysninger - assertTrue(harNødvendigeRefusjonsopplysninger(1.januar, 1.januar til 31.januar, refusjonsopplysningerJanuar, arbeidsgiverperiode)) - assertFalse(harNødvendigeRefusjonsopplysninger(1.januar, februar, refusjonsopplysningerJanuar, arbeidsgiverperiode)) + val refusjonsopplysningerJanuar = Refusjonsopplysning( + meldingsreferanseId1, + 1.januar, + null, + 20000.månedlig + ).refusjonsopplysninger + assertTrue( + harNødvendigeRefusjonsopplysninger( + 1.januar, + 1.januar til 31.januar, + refusjonsopplysningerJanuar, + arbeidsgiverperiode + ) + ) + assertFalse( + harNødvendigeRefusjonsopplysninger( + 1.januar, + februar, + refusjonsopplysningerJanuar, + arbeidsgiverperiode + ) + ) // IM: FF = 1.februar, AGP = 1.januar - 16.januar - val refusjonsopplysningerFebruar = Refusjonsopplysning(meldingsreferanseId2, 1.februar, null, 25000.månedlig).refusjonsopplysninger - - val oppdaterteRefusjonsopplysninger = refusjonsopplysningerJanuar.merge(refusjonsopplysningerFebruar) - assertTrue(harNødvendigeRefusjonsopplysninger(1.januar, 1.januar til 31.januar, oppdaterteRefusjonsopplysninger, arbeidsgiverperiode)) - assertTrue(harNødvendigeRefusjonsopplysninger(1.januar, februar, oppdaterteRefusjonsopplysninger, arbeidsgiverperiode)) + val refusjonsopplysningerFebruar = Refusjonsopplysning( + meldingsreferanseId2, + 1.februar, + null, + 25000.månedlig + ).refusjonsopplysninger + + val oppdaterteRefusjonsopplysninger = + refusjonsopplysningerJanuar.merge(refusjonsopplysningerFebruar) + assertTrue( + harNødvendigeRefusjonsopplysninger( + 1.januar, + 1.januar til 31.januar, + oppdaterteRefusjonsopplysninger, + arbeidsgiverperiode + ) + ) + assertTrue( + harNødvendigeRefusjonsopplysninger( + 1.januar, + februar, + oppdaterteRefusjonsopplysninger, + arbeidsgiverperiode + ) + ) } @Test @@ -392,8 +717,18 @@ internal class RefusjonsopplysningerTest { val skjæringstidspunkt = 1.januar val refusjonsopplysninger = RefusjonsopplysningerBuilder() - .leggTil(Refusjonsopplysning(meldingsreferanseId1, skjæringstidspunkt, 31.januar, 1000.daglig), LocalDateTime.now()) - .leggTil(Refusjonsopplysning(meldingsreferanseId2, 1.februar, null, 1500.daglig), LocalDateTime.now()) + .leggTil( + Refusjonsopplysning( + meldingsreferanseId1, + skjæringstidspunkt, + 31.januar, + 1000.daglig + ), LocalDateTime.now() + ) + .leggTil( + Refusjonsopplysning(meldingsreferanseId2, 1.februar, null, 1500.daglig), + LocalDateTime.now() + ) .build() (skjæringstidspunkt til 31.januar).forEach { dag -> @@ -405,14 +740,25 @@ internal class RefusjonsopplysningerTest { fun `Spør om refusjonsopplysninger utelukkende i gråsonen`() { val skjæringstidspunkt = 1.januar val førsteDagMedRefusjonsopplysning = 20.januar - val refusjonsopplysninger = Refusjonsopplysning(meldingsreferanseId1, førsteDagMedRefusjonsopplysning, null, 1000.daglig).refusjonsopplysninger + val refusjonsopplysninger = Refusjonsopplysning( + meldingsreferanseId1, + førsteDagMedRefusjonsopplysning, + null, + 1000.daglig + ).refusjonsopplysninger val gråsonen = skjæringstidspunkt til førsteDagMedRefusjonsopplysning.forrigeDag - assertTrue(refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt = skjæringstidspunkt, periode = gråsonen)) + assertTrue( + refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt = skjæringstidspunkt, + periode = gråsonen + ) + ) } @Test fun `hashCode skal fungere også for en åpen periode`() { - val refusjonsopplysning = Refusjonsopplysning(meldingsreferanseId1, 1.januar, null, 1000.daglig) + val refusjonsopplysning = + Refusjonsopplysning(meldingsreferanseId1, 1.januar, null, 1000.daglig) assertDoesNotThrow { refusjonsopplysning.hashCode() } assertDoesNotThrow { refusjonsopplysning.refusjonsopplysninger.hashCode() } } @@ -431,76 +777,148 @@ internal class RefusjonsopplysningerTest { val overstyringId = meldingsreferanseId2 val ønskedeRefusjonsopplysninger = RefusjonsopplysningerBuilder() .leggTil(Refusjonsopplysning(overstyringId, 1.januar, 31.januar, 1500.daglig)) - .leggTil(Refusjonsopplysning(overstyringId, 1.februar, 27.februar, 1200.daglig)) // 28.februar -> 27.februar - .leggTil(Refusjonsopplysning(overstyringId, 28.februar, 31.mars, 10.daglig)) // 1.mars -> 28.februar - .leggTil(Refusjonsopplysning(overstyringId, 1.april, 30.april, 1599.daglig)) // 1600.daglig -> 1599.dalig + .leggTil( + Refusjonsopplysning( + overstyringId, + 1.februar, + 27.februar, + 1200.daglig + ) + ) // 28.februar -> 27.februar + .leggTil( + Refusjonsopplysning( + overstyringId, + 28.februar, + 31.mars, + 10.daglig + ) + ) // 1.mars -> 28.februar + .leggTil( + Refusjonsopplysning( + overstyringId, + 1.april, + 30.april, + 1599.daglig + ) + ) // 1600.daglig -> 1599.dalig .leggTil(Refusjonsopplysning(overstyringId, 1.mai, null, 1700.daglig)) .build() - assertEquals(listOf( - Refusjonsopplysning(inntektsmeldingId, 1.januar, 31.januar, 1500.daglig), - Refusjonsopplysning(overstyringId, 1.februar, 27.februar, 1200.daglig), - Refusjonsopplysning(overstyringId, 28.februar, 31.mars, 10.daglig), - Refusjonsopplysning(overstyringId, 1.april, 30.april, 1599.daglig), - Refusjonsopplysning(inntektsmeldingId, 1.mai, null, 1700.daglig) - ), eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger) + assertEquals( + listOf( + Refusjonsopplysning(inntektsmeldingId, 1.januar, 31.januar, 1500.daglig), + Refusjonsopplysning(overstyringId, 1.februar, 27.februar, 1200.daglig), + Refusjonsopplysning(overstyringId, 28.februar, 31.mars, 10.daglig), + Refusjonsopplysning(overstyringId, 1.april, 30.april, 1599.daglig), + Refusjonsopplysning(inntektsmeldingId, 1.mai, null, 1700.daglig) + ), + eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger + ) } @Test fun `saksbehandler forkorter refusjonsopplysningens snute`() { val inntektsmeldingId = meldingsreferanseId1 - val eksisterendeRefusjonsopplysninger = Refusjonsopplysning(inntektsmeldingId, 1.januar, null, 1000.daglig).refusjonsopplysninger + val eksisterendeRefusjonsopplysninger = Refusjonsopplysning( + inntektsmeldingId, + 1.januar, + null, + 1000.daglig + ).refusjonsopplysninger val overstyringId = meldingsreferanseId2 - val ønskedeRefusjonsopplysninger = Refusjonsopplysning(overstyringId, 10.januar, null, 1000.daglig).refusjonsopplysninger + val ønskedeRefusjonsopplysninger = + Refusjonsopplysning(overstyringId, 10.januar, null, 1000.daglig).refusjonsopplysninger - assertEquals(listOf( - Refusjonsopplysning(inntektsmeldingId, 1.januar, 9.januar, 1000.daglig), - Refusjonsopplysning(overstyringId, 10.januar, null, 1000.daglig) - ), eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger) + assertEquals( + listOf( + Refusjonsopplysning(inntektsmeldingId, 1.januar, 9.januar, 1000.daglig), + Refusjonsopplysning(overstyringId, 10.januar, null, 1000.daglig) + ), + eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger + ) } @Test fun `saksbehandler forkorter refusjonsopplysningens hale`() { val inntektsmeldingId = meldingsreferanseId1 - val eksisterendeRefusjonsopplysninger = Refusjonsopplysning(inntektsmeldingId, 1.januar, 31.januar, 1000.daglig).refusjonsopplysninger + val eksisterendeRefusjonsopplysninger = Refusjonsopplysning( + inntektsmeldingId, + 1.januar, + 31.januar, + 1000.daglig + ).refusjonsopplysninger val overstyringId = meldingsreferanseId2 - val ønskedeRefusjonsopplysninger = Refusjonsopplysning(overstyringId, 1.januar, 20.januar, 1000.daglig).refusjonsopplysninger + val ønskedeRefusjonsopplysninger = Refusjonsopplysning( + overstyringId, + 1.januar, + 20.januar, + 1000.daglig + ).refusjonsopplysninger - assertEquals(listOf( - Refusjonsopplysning(overstyringId, 1.januar, 20.januar, 1000.daglig), - Refusjonsopplysning(inntektsmeldingId, 21.januar, 31.januar, 1000.daglig) - ), eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger) + assertEquals( + listOf( + Refusjonsopplysning(overstyringId, 1.januar, 20.januar, 1000.daglig), + Refusjonsopplysning(inntektsmeldingId, 21.januar, 31.januar, 1000.daglig) + ), + eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger + ) } @Test fun `saksbehandler forkorter refusjonsopplysningens åpne hale`() { val inntektsmeldingId = meldingsreferanseId1 - val eksisterendeRefusjonsopplysninger = Refusjonsopplysning(inntektsmeldingId, 1.januar, null, 1000.daglig).refusjonsopplysninger + val eksisterendeRefusjonsopplysninger = Refusjonsopplysning( + inntektsmeldingId, + 1.januar, + null, + 1000.daglig + ).refusjonsopplysninger val overstyringId = meldingsreferanseId2 - val ønskedeRefusjonsopplysninger = Refusjonsopplysning(overstyringId, 1.januar, 20.januar, 1000.daglig).refusjonsopplysninger + val ønskedeRefusjonsopplysninger = Refusjonsopplysning( + overstyringId, + 1.januar, + 20.januar, + 1000.daglig + ).refusjonsopplysninger - assertEquals(listOf( - Refusjonsopplysning(overstyringId, 1.januar, 20.januar, 1000.daglig), - Refusjonsopplysning(inntektsmeldingId, 21.januar, null, 1000.daglig) - ), eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger) + assertEquals( + listOf( + Refusjonsopplysning(overstyringId, 1.januar, 20.januar, 1000.daglig), + Refusjonsopplysning(inntektsmeldingId, 21.januar, null, 1000.daglig) + ), + eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger + ) } @Test fun `saksbehandler forkorter refusjonsopplysningens snute og hale`() { val inntektsmeldingId = meldingsreferanseId1 - val eksisterendeRefusjonsopplysninger = Refusjonsopplysning(inntektsmeldingId, 1.januar, 31.januar, 1000.daglig).refusjonsopplysninger + val eksisterendeRefusjonsopplysninger = Refusjonsopplysning( + inntektsmeldingId, + 1.januar, + 31.januar, + 1000.daglig + ).refusjonsopplysninger val overstyringId = meldingsreferanseId2 - val ønskedeRefusjonsopplysninger = Refusjonsopplysning(overstyringId, 2.januar, 30.januar, 1000.daglig).refusjonsopplysninger + val ønskedeRefusjonsopplysninger = Refusjonsopplysning( + overstyringId, + 2.januar, + 30.januar, + 1000.daglig + ).refusjonsopplysninger - assertEquals(listOf( - Refusjonsopplysning(inntektsmeldingId, 1.januar, 1.januar, 1000.daglig), - Refusjonsopplysning(overstyringId, 2.januar, 30.januar, 1000.daglig), - Refusjonsopplysning(inntektsmeldingId, 31.januar, 31.januar, 1000.daglig) - ), eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger) + assertEquals( + listOf( + Refusjonsopplysning(inntektsmeldingId, 1.januar, 1.januar, 1000.daglig), + Refusjonsopplysning(overstyringId, 2.januar, 30.januar, 1000.daglig), + Refusjonsopplysning(inntektsmeldingId, 31.januar, 31.januar, 1000.daglig) + ), + eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger + ) } @Test @@ -514,31 +932,54 @@ internal class RefusjonsopplysningerTest { val overstyringId = meldingsreferanseId2 val ønskedeRefusjonsopplysninger = RefusjonsopplysningerBuilder() .leggTil(Refusjonsopplysning(overstyringId, 1.januar, 31.januar, 1500.daglig)) - .leggTil(Refusjonsopplysning(overstyringId, 10.februar, 28.februar, 1200.daglig)) // Hull 1-9.februar + .leggTil( + Refusjonsopplysning( + overstyringId, + 10.februar, + 28.februar, + 1200.daglig + ) + ) // Hull 1-9.februar .build() - assertEquals(listOf( - Refusjonsopplysning(inntektsmeldingId, 1.januar, 31.januar, 1500.daglig), - Refusjonsopplysning(inntektsmeldingId, 1.februar, 9.februar, 1200.daglig), - Refusjonsopplysning(overstyringId, 10.februar, 28.februar, 1200.daglig) - ), eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger) + assertEquals( + listOf( + Refusjonsopplysning(inntektsmeldingId, 1.januar, 31.januar, 1500.daglig), + Refusjonsopplysning(inntektsmeldingId, 1.februar, 9.februar, 1200.daglig), + Refusjonsopplysning(overstyringId, 10.februar, 28.februar, 1200.daglig) + ), + eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger + ) } @Test fun `saksbehandler legger til ny opplysning midt i en eksisterende`() { val inntektsmeldingId = meldingsreferanseId1 val eksisterendeRefusjonsopplysninger = - Refusjonsopplysning(inntektsmeldingId, 1.januar, null, 1200.daglig).refusjonsopplysninger + Refusjonsopplysning( + inntektsmeldingId, + 1.januar, + null, + 1200.daglig + ).refusjonsopplysninger val overstyringId = meldingsreferanseId2 val ønskedeRefusjonsopplysninger = - Refusjonsopplysning(overstyringId, 13.januar, 1.desember, 1600.daglig).refusjonsopplysninger + Refusjonsopplysning( + overstyringId, + 13.januar, + 1.desember, + 1600.daglig + ).refusjonsopplysninger - assertEquals(listOf( - Refusjonsopplysning(inntektsmeldingId, 1.januar, 12.januar, 1200.daglig), - Refusjonsopplysning(overstyringId, 13.januar, 1.desember, 1600.daglig), - Refusjonsopplysning(inntektsmeldingId, 2.desember, null, 1200.daglig) - ), eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger) + assertEquals( + listOf( + Refusjonsopplysning(inntektsmeldingId, 1.januar, 12.januar, 1200.daglig), + Refusjonsopplysning(overstyringId, 13.januar, 1.desember, 1600.daglig), + Refusjonsopplysning(inntektsmeldingId, 2.desember, null, 1200.daglig) + ), + eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger).inspektør.refusjonsopplysninger + ) } @Test @@ -552,15 +993,28 @@ internal class RefusjonsopplysningerTest { .leggTil(Refusjonsopplysning(meldingsreferanseId1, 1.mai, null, beløp)) .build() - val ønskedeRefusjonsopplysninger = Refusjonsopplysning(meldingsreferanseId2, 1.januar, null, beløp).refusjonsopplysninger + val ønskedeRefusjonsopplysninger = + Refusjonsopplysning(meldingsreferanseId2, 1.januar, null, beløp).refusjonsopplysninger - assertEquals(ønskedeRefusjonsopplysninger, eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger)) + assertEquals( + ønskedeRefusjonsopplysninger, + eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger) + ) } + @Test fun `saksbehandler forsøker å fjerne alle refusjonsopplysninger`() { - val eksisterendeRefusjonsopplysninger = Refusjonsopplysning(meldingsreferanseId1, 1.januar, null, 1000.daglig).refusjonsopplysninger + val eksisterendeRefusjonsopplysninger = Refusjonsopplysning( + meldingsreferanseId1, + 1.januar, + null, + 1000.daglig + ).refusjonsopplysninger val ønskedeRefusjonsopplysninger = Refusjonsopplysninger() - assertEquals(eksisterendeRefusjonsopplysninger, eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger)) + assertEquals( + eksisterendeRefusjonsopplysninger, + eksisterendeRefusjonsopplysninger.merge(ønskedeRefusjonsopplysninger) + ) } @Test @@ -574,10 +1028,12 @@ internal class RefusjonsopplysningerTest { ).refusjonsopplysninger() val resultat = refusjonsopplysninger.merge(nyeRefusjonsopplysninger) - assertEquals(listOf( - Refusjonsopplysning(meldingsreferanseId2, 1.januar, 10.januar, 2000.daglig), - Refusjonsopplysning(meldingsreferanseId1, 11.januar, null, 2000.daglig) - ).refusjonsopplysninger(), resultat) + assertEquals( + listOf( + Refusjonsopplysning(meldingsreferanseId2, 1.januar, 10.januar, 2000.daglig), + Refusjonsopplysning(meldingsreferanseId1, 11.januar, null, 2000.daglig) + ).refusjonsopplysninger(), resultat + ) assertEquals(1.januar, resultat.finnFørsteDatoForEndring(refusjonsopplysninger)) } @@ -592,9 +1048,11 @@ internal class RefusjonsopplysningerTest { gamleRefusjonsopplysninger.lagreTidsnær(1.juli, historikk) val resultat = historikk.refusjonsopplysninger(1.juli) - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(meldingsreferanseId2, 1.juli, null, INGEN, ARBEIDSGIVER) - ), resultat.inspektør.refusjonsopplysninger) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning(meldingsreferanseId2, 1.juli, null, INGEN, ARBEIDSGIVER) + ), resultat.inspektør.refusjonsopplysninger + ) } internal companion object { @@ -605,21 +1063,57 @@ internal class RefusjonsopplysningerTest { private val meldingsreferanseId5 = UUID.fromString("00000000-0000-0000-0000-000000000005") private val meldingsreferanseId6 = UUID.fromString("00000000-0000-0000-0000-000000000006") - private fun harNødvendigeRefusjonsopplysninger(skjæringstidspunkt: LocalDate, periode: Periode, refusjonsopplysninger: Refusjonsopplysninger, arbeidsgiverperiode: Arbeidsgiverperiode) = - harNødvendigeRefusjonsopplysninger(skjæringstidspunkt, periode, refusjonsopplysninger, arbeidsgiverperiode, Aktivitetslogg(), "") + private fun harNødvendigeRefusjonsopplysninger( + skjæringstidspunkt: LocalDate, + periode: Periode, + refusjonsopplysninger: Refusjonsopplysninger, + arbeidsgiverperiode: Arbeidsgiverperiode + ) = + harNødvendigeRefusjonsopplysninger( + skjæringstidspunkt, + periode, + refusjonsopplysninger, + arbeidsgiverperiode, + Aktivitetslogg(), + "" + ) + private fun assertGjenopprettetRefusjonsopplysninger(refusjonsopplysninger: List) { - assertEquals(refusjonsopplysninger, refusjonsopplysninger.gjennopprett().inspektør.refusjonsopplysninger) + assertEquals( + refusjonsopplysninger, + refusjonsopplysninger.gjennopprett().inspektør.refusjonsopplysninger + ) } - private fun Refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt: LocalDate, dager: List) = harNødvendigRefusjonsopplysninger(skjæringstidspunkt, dager, null, Aktivitetslogg(), "") - private fun Refusjonsopplysninger.harNødvendigRefusjonsopplysninger(skjæringstidspunkt: LocalDate, periode: Periode) = harNødvendigRefusjonsopplysninger(skjæringstidspunkt, periode.toList(), null, Aktivitetslogg(), "") - private fun List.refusjonsopplysninger() = Refusjonsopplysninger(this, LocalDateTime.now()) - private fun Refusjonsopplysninger(refusjonsopplysninger: List, tidsstempel: LocalDateTime): Refusjonsopplysninger { + private fun Refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt: LocalDate, + dager: List + ) = harNødvendigRefusjonsopplysninger(skjæringstidspunkt, dager, null, Aktivitetslogg(), "") + + private fun Refusjonsopplysninger.harNødvendigRefusjonsopplysninger( + skjæringstidspunkt: LocalDate, + periode: Periode + ) = harNødvendigRefusjonsopplysninger( + skjæringstidspunkt, + periode.toList(), + null, + Aktivitetslogg(), + "" + ) + + private fun List.refusjonsopplysninger() = + Refusjonsopplysninger(this, LocalDateTime.now()) + + private fun Refusjonsopplysninger( + refusjonsopplysninger: List, + tidsstempel: LocalDateTime + ): Refusjonsopplysninger { val refusjonsopplysningerBuilder = RefusjonsopplysningerBuilder() refusjonsopplysninger.forEach { refusjonsopplysningerBuilder.leggTil(it, tidsstempel) } return refusjonsopplysningerBuilder.build() } - private fun RefusjonsopplysningerBuilder.leggTil(refusjonsopplysning: Refusjonsopplysning) = leggTil(refusjonsopplysning, LocalDateTime.now()) + private fun RefusjonsopplysningerBuilder.leggTil(refusjonsopplysning: Refusjonsopplysning) = + leggTil(refusjonsopplysning, LocalDateTime.now()) } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/Refusjonsverkt\303\270y.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/Refusjonsverkt\303\270y.kt" index cea1c4fa50..2843b1ff49 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/Refusjonsverkt\303\270y.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/Refusjonsverkt\303\270y.kt" @@ -12,7 +12,14 @@ internal fun Refusjonsopplysning( fom: LocalDate, tom: LocalDate?, beløp: Inntekt, -) = Refusjonsopplysning(meldingsreferanseId, fom, tom, beløp, Avsender.SYSTEM, LocalDate.EPOCH.atStartOfDay()) +) = Refusjonsopplysning( + meldingsreferanseId, + fom, + tom, + beløp, + Avsender.SYSTEM, + LocalDate.EPOCH.atStartOfDay() +) internal fun Refusjonsopplysning( meldingsreferanseId: UUID, @@ -20,12 +27,30 @@ internal fun Refusjonsopplysning( tom: LocalDate?, beløp: Inntekt, avsender: Avsender -) = Refusjonsopplysning(meldingsreferanseId, fom, tom, beløp, avsender, LocalDate.EPOCH.atStartOfDay()) +) = Refusjonsopplysning( + meldingsreferanseId, + fom, + tom, + beløp, + avsender, + LocalDate.EPOCH.atStartOfDay() +) -internal fun assertLikeRefusjonsopplysninger(expected: List, actual: List) { - assertEquals(expected.map { it.copy(tidsstempel = LocalDate.EPOCH.atStartOfDay()) }, actual.map { it.copy(tidsstempel = LocalDate.EPOCH.atStartOfDay()) }) +internal fun assertLikeRefusjonsopplysninger( + expected: List, + actual: List +) { + assertEquals( + expected.map { it.copy(tidsstempel = LocalDate.EPOCH.atStartOfDay()) }, + actual.map { it.copy(tidsstempel = LocalDate.EPOCH.atStartOfDay()) }) } -internal fun assertLikRefusjonsopplysning(expected: Refusjonsopplysning, actual: Refusjonsopplysning) { - assertEquals(expected.copy(tidsstempel = LocalDate.EPOCH.atStartOfDay()), actual.copy(tidsstempel = LocalDate.EPOCH.atStartOfDay())) +internal fun assertLikRefusjonsopplysning( + expected: Refusjonsopplysning, + actual: Refusjonsopplysning +) { + assertEquals( + expected.copy(tidsstempel = LocalDate.EPOCH.atStartOfDay()), + actual.copy(tidsstempel = LocalDate.EPOCH.atStartOfDay()) + ) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/SkattInntektsgrunnlagTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/SkattInntektsgrunnlagTest.kt index 9f65e0dae6..06df2d9f47 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/SkattInntektsgrunnlagTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/SkattInntektsgrunnlagTest.kt @@ -26,7 +26,8 @@ internal class SkattInntektsgrunnlagTest { @Test fun `bruker kun tre måneder før skjæringstidspunktet`() { - val skatt = SkattSykepengegrunnlag(UUID.randomUUID(), 10.april, inntektsopplysninger = listOf( + val skatt = SkattSykepengegrunnlag( + UUID.randomUUID(), 10.april, inntektsopplysninger = listOf( Skatteopplysning( hendelseId = UUID.randomUUID(), beløp = 1000.daglig, @@ -67,7 +68,8 @@ internal class SkattInntektsgrunnlagTest { @Test fun `bruker ikke inntekter samme måned som skjæringstidspunktet`() { - val skatt = SkattSykepengegrunnlag(UUID.randomUUID(), 10.april, inntektsopplysninger = listOf( + val skatt = SkattSykepengegrunnlag( + UUID.randomUUID(), 10.april, inntektsopplysninger = listOf( Skatteopplysning( hendelseId = UUID.randomUUID(), beløp = 1000.daglig, @@ -108,7 +110,8 @@ internal class SkattInntektsgrunnlagTest { @Test fun `setter negativt omregnet årsinntekt til 0`() { - val skatt = SkattSykepengegrunnlag(UUID.randomUUID(), 1.januar, inntektsopplysninger = listOf( + val skatt = SkattSykepengegrunnlag( + UUID.randomUUID(), 1.januar, inntektsopplysninger = listOf( Skatteopplysning( hendelseId = UUID.randomUUID(), beløp = (-2500).daglig, @@ -251,4 +254,4 @@ internal class SkattInntektsgrunnlagTest { assertEquals(INGEN, resultat.inspektør.beløp) } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/Skj\303\270nnsmessigFastsattTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/Skj\303\270nnsmessigFastsattTest.kt" index c226a99a15..9aca7e26ba 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/Skj\303\270nnsmessigFastsattTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/inntekt/Skj\303\270nnsmessigFastsattTest.kt" @@ -9,13 +9,20 @@ import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test internal class SkjønnsmessigFastsattTest { - + @Test fun `inntektsmelding blir overskrevet av skjønnsmessig fastsettelse`() { val skjønnsmessigFastsattBeløp = 5000.daglig val originalBeløp = 2500.daglig val original = Inntektsmelding(1.januar, UUID.randomUUID(), originalBeløp) - val skjønnsmessigFastsatt = original.overstyresAv(SkjønnsmessigFastsatt(1.januar, UUID.randomUUID(), skjønnsmessigFastsattBeløp, LocalDateTime.now())) + val skjønnsmessigFastsatt = original.overstyresAv( + SkjønnsmessigFastsatt( + 1.januar, + UUID.randomUUID(), + skjønnsmessigFastsattBeløp, + LocalDateTime.now() + ) + ) assertEquals(skjønnsmessigFastsattBeløp, skjønnsmessigFastsatt.fastsattÅrsinntekt()) assertEquals(originalBeløp, skjønnsmessigFastsatt.omregnetÅrsinntekt().fastsattÅrsinntekt()) @@ -27,13 +34,32 @@ internal class SkjønnsmessigFastsattTest { val originalBeløp = 2500.daglig val saksbehandlerbeløp = 2600.daglig val original = Inntektsmelding(1.januar, UUID.randomUUID(), originalBeløp) - val saksbehandler = original.overstyresAv(Saksbehandler(1.januar, UUID.randomUUID(), saksbehandlerbeløp, "", null, LocalDateTime.now())) - val skjønnsmessigFastsatt = saksbehandler.overstyresAv(SkjønnsmessigFastsatt(1.januar, UUID.randomUUID(), skjønnsmessigFastsattBeløp, LocalDateTime.now())) + val saksbehandler = original.overstyresAv( + Saksbehandler( + 1.januar, + UUID.randomUUID(), + saksbehandlerbeløp, + "", + null, + LocalDateTime.now() + ) + ) + val skjønnsmessigFastsatt = saksbehandler.overstyresAv( + SkjønnsmessigFastsatt( + 1.januar, + UUID.randomUUID(), + skjønnsmessigFastsattBeløp, + LocalDateTime.now() + ) + ) assertTrue(skjønnsmessigFastsatt is SkjønnsmessigFastsatt) assertTrue(saksbehandler is Saksbehandler) assertEquals(skjønnsmessigFastsattBeløp, skjønnsmessigFastsatt.fastsattÅrsinntekt()) - assertEquals(saksbehandlerbeløp, skjønnsmessigFastsatt.omregnetÅrsinntekt().fastsattÅrsinntekt()) + assertEquals( + saksbehandlerbeløp, + skjønnsmessigFastsatt.omregnetÅrsinntekt().fastsattÅrsinntekt() + ) } @Test @@ -42,12 +68,29 @@ internal class SkjønnsmessigFastsattTest { val skjønnsmessigFastsattBeløp2 = 5001.daglig val originalBeløp = 2500.daglig val original = Inntektsmelding(1.januar, UUID.randomUUID(), originalBeløp) - val skjønnsmessigFastsatt1 = original.overstyresAv(SkjønnsmessigFastsatt(1.januar, UUID.randomUUID(), skjønnsmessigFastsattBeløp1, LocalDateTime.now())) - val skjønnsmessigFastsatt2 = skjønnsmessigFastsatt1.overstyresAv(SkjønnsmessigFastsatt(1.januar, UUID.randomUUID(), skjønnsmessigFastsattBeløp2, LocalDateTime.now())) + val skjønnsmessigFastsatt1 = original.overstyresAv( + SkjønnsmessigFastsatt( + 1.januar, + UUID.randomUUID(), + skjønnsmessigFastsattBeløp1, + LocalDateTime.now() + ) + ) + val skjønnsmessigFastsatt2 = skjønnsmessigFastsatt1.overstyresAv( + SkjønnsmessigFastsatt( + 1.januar, + UUID.randomUUID(), + skjønnsmessigFastsattBeløp2, + LocalDateTime.now() + ) + ) assertTrue(skjønnsmessigFastsatt1 is SkjønnsmessigFastsatt) assertTrue(skjønnsmessigFastsatt2 is SkjønnsmessigFastsatt) assertEquals(skjønnsmessigFastsattBeløp2, skjønnsmessigFastsatt2.fastsattÅrsinntekt()) - assertEquals(originalBeløp, skjønnsmessigFastsatt2.omregnetÅrsinntekt().fastsattÅrsinntekt()) + assertEquals( + originalBeløp, + skjønnsmessigFastsatt2.omregnetÅrsinntekt().fastsattÅrsinntekt() + ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/person/refusjon/InntektsmeldingTilRefusjonstidslinjeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/person/refusjon/InntektsmeldingTilRefusjonstidslinjeTest.kt index cd6586b8d1..ccbe771e52 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/person/refusjon/InntektsmeldingTilRefusjonstidslinjeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/person/refusjon/InntektsmeldingTilRefusjonstidslinjeTest.kt @@ -22,32 +22,62 @@ internal class InntektsmeldingTilRefusjonstidslinjeTest { @Test fun `En helt planke inntektsmelding`() { - val refusjonstidslinje = refusjonstidslinjeFra(1.januar, listOf(1.januar til 16.januar), 1000.daglig) + val refusjonstidslinje = + refusjonstidslinjeFra(1.januar, listOf(1.januar til 16.januar), 1000.daglig) - assertEquals(Beløpstidslinje.fra(1.januar.somPeriode(), 1000.daglig, kilde), refusjonstidslinje) + assertEquals( + Beløpstidslinje.fra(1.januar.somPeriode(), 1000.daglig, kilde), + refusjonstidslinje + ) } @Test fun `Opphør av refusjon opplyst å være før første fraværsdag`() { - val refusjonstidslinje = refusjonstidslinjeFra(1.februar, listOf(1.februar til 16.februar), 1000.daglig, opphørsdato = 15.januar) + val refusjonstidslinje = refusjonstidslinjeFra( + 1.februar, + listOf(1.februar til 16.februar), + 1000.daglig, + opphørsdato = 15.januar + ) assertEquals(Beløpstidslinje.fra(1.februar.somPeriode(), INGEN, kilde), refusjonstidslinje) } @Test fun `Endring av refusjon oppgitt etter opphørsdato`() { - val refusjonstidslinje = refusjonstidslinjeFra(1.januar, listOf(1.januar til 16.januar), 1000.daglig, opphørsdato = 15.februar, endringerIRefusjon = mapOf(28.februar to 500.daglig)) + val refusjonstidslinje = refusjonstidslinjeFra( + 1.januar, + listOf(1.januar til 16.januar), + 1000.daglig, + opphørsdato = 15.februar, + endringerIRefusjon = mapOf(28.februar to 500.daglig) + ) assertEquals(16.februar, refusjonstidslinje.last().dato) - assertEquals(Beløpstidslinje.fra(1.januar til 15.februar, 1000.daglig, kilde) + Beløpstidslinje.fra(16.februar.somPeriode(), INGEN, kilde), refusjonstidslinje) + assertEquals( + Beløpstidslinje.fra( + 1.januar til 15.februar, + 1000.daglig, + kilde + ) + Beløpstidslinje.fra(16.februar.somPeriode(), INGEN, kilde), refusjonstidslinje + ) } @Test fun `Endring av refusjon oppgitt før utløpet av en oppstykket agp`() { - val refusjonstidslinje = refusjonstidslinjeFra(1.januar, listOf(1.januar til 13.januar, 15.januar til 17.januar), 1000.daglig, opphørsdato = null, endringerIRefusjon = mapOf(15.januar to 500.daglig)) + val refusjonstidslinje = refusjonstidslinjeFra( + 1.januar, + listOf(1.januar til 13.januar, 15.januar til 17.januar), + 1000.daglig, + opphørsdato = null, + endringerIRefusjon = mapOf(15.januar to 500.daglig) + ) assertEquals(15.januar, refusjonstidslinje.last().dato) - assertEquals(Beløpstidslinje.fra(15.januar.somPeriode(), 1000.daglig, kilde), refusjonstidslinje) + assertEquals( + Beløpstidslinje.fra(15.januar.somPeriode(), 1000.daglig, kilde), + refusjonstidslinje + ) } @Test @@ -61,14 +91,15 @@ internal class InntektsmeldingTilRefusjonstidslinjeTest { 31.januar to 500.daglig, 15.februar to 0.daglig, 20.februar to 400.daglig - )) + ) + ) val forventet = Beløpstidslinje.fra(1.januar til 30.januar, 1000.daglig, kilde) + - Beløpstidslinje.fra(31.januar til 14.februar, 500.daglig, kilde) + - Beløpstidslinje.fra(15.februar til 19.februar, 0.daglig, kilde) + - Beløpstidslinje.fra(20.februar til 1.mars, 400.daglig, kilde) + - Beløpstidslinje.fra(2.mars.somPeriode(), 0.daglig, kilde) + Beløpstidslinje.fra(31.januar til 14.februar, 500.daglig, kilde) + + Beløpstidslinje.fra(15.februar til 19.februar, 0.daglig, kilde) + + Beløpstidslinje.fra(20.februar til 1.mars, 400.daglig, kilde) + + Beløpstidslinje.fra(2.mars.somPeriode(), 0.daglig, kilde) assertEquals(forventet, refusjonstidslinje) } @@ -85,9 +116,14 @@ internal class InntektsmeldingTilRefusjonstidslinjeTest { opphørsdato: LocalDate? = null, endringerIRefusjon: Map = emptyMap() ) = Inntektsmelding.Refusjon( - beløp = refusjonsbeløp, - opphørsdato = opphørsdato, - endringerIRefusjon = endringerIRefusjon.map { Inntektsmelding.Refusjon.EndringIRefusjon(it.value, it.key) } - ).refusjonstidslinje(førsteFraværsdag, arbeidsgiverperioder, meldingsreferanseId, mottatt) + beløp = refusjonsbeløp, + opphørsdato = opphørsdato, + endringerIRefusjon = endringerIRefusjon.map { + Inntektsmelding.Refusjon.EndringIRefusjon( + it.value, + it.key + ) + } + ).refusjonstidslinje(førsteFraværsdag, arbeidsgiverperioder, meldingsreferanseId, mottatt) } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/refusjon/Refusjonsservit\303\270rTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/refusjon/Refusjonsservit\303\270rTest.kt" index 935d04f8ea..0a65f46088 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/person/refusjon/Refusjonsservit\303\270rTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/person/refusjon/Refusjonsservit\303\270rTest.kt" @@ -25,7 +25,10 @@ internal class RefusjonsservitørTest { servitør.servér(suppekjøkken, Aktivitetslogg()) assertNotNull(suppekjøkken[1.januar]) assertNull(suppekjøkken[2.januar]) - assertEquals(listOf(1.januar til 9.januar, 16.januar til 31.januar), suppekjøkken[1.januar]!!.perioderMedBeløp) + assertEquals( + listOf(1.januar til 9.januar, 16.januar til 31.januar), + suppekjøkken[1.januar]!!.perioderMedBeløp + ) } @Test @@ -42,11 +45,17 @@ internal class RefusjonsservitørTest { assertNotNull(suppekjøkken[16.januar]) assertNull(suppekjøkken[17.januar]) - assertEquals(listOf(5.januar til 9.januar, 13.januar til 15.januar), suppekjøkken[5.januar]!!.perioderMedBeløp) - assertEquals(listOf(16.januar til 22.januar, 26.januar til 31.januar), suppekjøkken[16.januar]!!.perioderMedBeløp) + assertEquals( + listOf(5.januar til 9.januar, 13.januar til 15.januar), + suppekjøkken[5.januar]!!.perioderMedBeløp + ) + assertEquals( + listOf(16.januar til 22.januar, 26.januar til 31.januar), + suppekjøkken[16.januar]!!.perioderMedBeløp + ) } private companion object { private val kilde = Kilde(UUID.randomUUID(), Avsender.ARBEIDSGIVER, LocalDateTime.now()) } -} \ No newline at end of file +} 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 index 762e8ab7bf..d54bce81d0 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/serde/PersonDataBuilderTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/serde/PersonDataBuilderTest.kt @@ -87,17 +87,30 @@ internal class PersonDataBuilderTest : AbstractDslTest() { fun `serialisering av person`() { a1 { håndterSøknad(Sykdom(5.januar, 17.januar, 100.prosent)) - håndterInntektsmeldingPortal(listOf(1.januar til 16.januar), refusjon = Inntektsmelding.Refusjon( - beløp = INNTEKT/2, + håndterInntektsmeldingPortal( + listOf(1.januar til 16.januar), refusjon = Inntektsmelding.Refusjon( + beløp = INNTEKT / 2, opphørsdato = 31.januar - )) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf( - a1 to INNTEKT - ), 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) + 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) @@ -107,7 +120,9 @@ internal class PersonDataBuilderTest : AbstractDslTest() { håndterUtbetalingshistorikkForFeriepenger(opptjeningsår = Year.of(2018)) - håndterAnnullering(inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingId) + håndterAnnullering( + inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingId + ) håndterUtbetalt() håndterSykmelding(Sykmeldingsperiode(1.august, 5.august)) } @@ -124,19 +139,27 @@ internal class PersonDataBuilderTest : AbstractDslTest() { } a3 { håndterSøknad(Sykdom(1.juni, 16.juni, 100.prosent)) - håndterInntektsmeldingPortal(listOf(1.juni til 16.juni), + håndterInntektsmeldingPortal( + listOf(1.juni til 16.juni), beregnetInntekt = INNTEKT, begrunnelseForReduksjonEllerIkkeUtbetalt = "IngenOpptjening", refusjon = Inntektsmelding.Refusjon(INGEN, null) ) - håndterVilkårsgrunnlag(1.vedtaksperiode, inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf( - a3 to INNTEKT - ), 1.juni)) + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a3 to INNTEKT + ), 1.juni + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterOverstyrArbeidsgiveropplysninger(1.juni, listOf( + håndterOverstyrArbeidsgiveropplysninger( + 1.juni, listOf( OverstyrtArbeidsgiveropplysning(a3, INNTEKT + 1.daglig, "for lite inntekt") - )) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -165,12 +188,23 @@ internal class PersonDataBuilderTest : AbstractDslTest() { @Test fun `dto av utbetalingstidslinje`() { val input = tidslinjeOf( - 1.AP, 1.NAP, 1.NAV(dekningsgrunnlag = 1200, refusjonsbeløp = 600.0), 1.HELG, 1.ARB, 1.FRI, 1.FOR, + 1.AP, + 1.NAP, + 1.NAV(dekningsgrunnlag = 1200, refusjonsbeløp = 600.0), + 1.HELG, + 1.ARB, + 1.FRI, + 1.FOR, 1.AVV(dekningsgrunnlag = 1000, begrunnelse = Begrunnelse.SykepengedagerOppbrukt), 1.AVV(dekningsgrunnlag = 500, begrunnelse = Begrunnelse.MinimumInntekt), 1.UKJ ) - val tidslinje = MaksimumUtbetalingFilter().filter(listOf(input), input.periode(), Aktivitetslogg(), EmptyLog).single() + val tidslinje = MaksimumUtbetalingFilter().filter( + listOf(input), + input.periode(), + Aktivitetslogg(), + EmptyLog + ).single() val dto = tidslinje.dto() assertEquals(10, dto.dager.size) dto.dager[0].also { dag -> @@ -185,12 +219,14 @@ internal class PersonDataBuilderTest : AbstractDslTest() { assertEquals(2.januar, dag.dato) assertEquals(100.0, dag.økonomi.grad.prosent) assertEquals(100.0, dag.økonomi.totalGrad.prosent) - assertEquals(InntektDto( - InntektbeløpDto.Årlig(beløp = 312000.0), - InntektbeløpDto.MånedligDouble(beløp = 26000.0), - InntektbeløpDto.DagligDouble(beløp = 1200.0), - InntektbeløpDto.DagligInt(beløp = 1200) - ), dag.økonomi.arbeidsgiverbeløp) + assertEquals( + InntektDto( + InntektbeløpDto.Årlig(beløp = 312000.0), + InntektbeløpDto.MånedligDouble(beløp = 26000.0), + InntektbeløpDto.DagligDouble(beløp = 1200.0), + InntektbeløpDto.DagligInt(beløp = 1200) + ), dag.økonomi.arbeidsgiverbeløp + ) assertEquals(IngenBeløp, dag.økonomi.personbeløp) assertInstanceOf(dag) } @@ -198,32 +234,38 @@ internal class PersonDataBuilderTest : AbstractDslTest() { assertEquals(3.januar, dag.dato) assertEquals(100.0, dag.økonomi.grad.prosent) assertEquals(100.0, dag.økonomi.totalGrad.prosent) - assertEquals(InntektDto( - InntektbeløpDto.Årlig(beløp = 156000.0), - InntektbeløpDto.MånedligDouble(beløp = 13000.0), - InntektbeløpDto.DagligDouble(beløp = 600.0), - InntektbeløpDto.DagligInt(beløp = 600) - ), dag.økonomi.arbeidsgiverbeløp) - assertEquals(InntektDto( - InntektbeløpDto.Årlig(beløp = 156000.0), - InntektbeløpDto.MånedligDouble(beløp = 13000.0), - InntektbeløpDto.DagligDouble(beløp = 600.0), - InntektbeløpDto.DagligInt(beløp = 600) - ), dag.økonomi.personbeløp) + assertEquals( + InntektDto( + InntektbeløpDto.Årlig(beløp = 156000.0), + InntektbeløpDto.MånedligDouble(beløp = 13000.0), + InntektbeløpDto.DagligDouble(beløp = 600.0), + InntektbeløpDto.DagligInt(beløp = 600) + ), dag.økonomi.arbeidsgiverbeløp + ) + assertEquals( + InntektDto( + InntektbeløpDto.Årlig(beløp = 156000.0), + InntektbeløpDto.MånedligDouble(beløp = 13000.0), + InntektbeløpDto.DagligDouble(beløp = 600.0), + InntektbeløpDto.DagligInt(beløp = 600) + ), dag.økonomi.personbeløp + ) assertInstanceOf(dag) } dto.dager[3].also { dag -> assertEquals(4.januar, dag.dato) assertEquals(100.0, dag.økonomi.grad.prosent) assertEquals(100.0, dag.økonomi.totalGrad.prosent) - assertEquals(InntektDto( - InntektbeløpDto.Årlig(beløp = 312000.0), - InntektbeløpDto.MånedligDouble(beløp = 26000.0), - InntektbeløpDto.DagligDouble(beløp = 1200.0), - InntektbeløpDto.DagligInt(beløp = 1200) - ), dag.økonomi.arbeidsgiverbeløp) + assertEquals( + InntektDto( + InntektbeløpDto.Årlig(beløp = 312000.0), + InntektbeløpDto.MånedligDouble(beløp = 26000.0), + InntektbeløpDto.DagligDouble(beløp = 1200.0), + InntektbeløpDto.DagligInt(beløp = 1200) + ), dag.økonomi.arbeidsgiverbeløp + ) assertEquals(IngenBeløp, dag.økonomi.personbeløp) - assertInstanceOf(dag) + assertInstanceOf(dag) } dto.dager[4].also { dag -> assertEquals(5.januar, dag.dato) @@ -301,7 +343,9 @@ internal class PersonDataBuilderTest : AbstractDslTest() { forventetPeriode.forEach { dato -> val dagen = dager.single { it.dato == dato } assertEquals("Søknad", dagen.kilde.type) - if (dato.erHelg()) assertInstanceOf(dagen) + if (dato.erHelg()) assertInstanceOf( + dagen + ) else assertInstanceOf(dagen) } } @@ -351,26 +395,36 @@ internal class PersonDataBuilderTest : AbstractDslTest() { } } } + private fun assertVilkårsgrunnlaghistorikk(historikk: VilkårsgrunnlaghistorikkUtDto) { assertEquals(6, historikk.historikk.size) historikk.historikk[5].also { innslag -> assertEquals(1, innslag.vilkårsgrunnlag.size) innslag.vilkårsgrunnlag[0].also { vilkårsgrunnlagDto -> - assertEquals(2, vilkårsgrunnlagDto.inntektsgrunnlag.arbeidsgiverInntektsopplysninger.size) + assertEquals( + 2, + vilkårsgrunnlagDto.inntektsgrunnlag.arbeidsgiverInntektsopplysninger.size + ) vilkårsgrunnlagDto.inntektsgrunnlag.arbeidsgiverInntektsopplysninger[0].also { arbeidsgiverInntektsopplysningDto -> - assertInstanceOf(arbeidsgiverInntektsopplysningDto.inntektsopplysning) - assertEquals(InntektDto( - InntektbeløpDto.Årlig(beløp = 372000.0), - InntektbeløpDto.MånedligDouble(beløp = 31000.0), - InntektbeløpDto.DagligDouble(beløp = 1430.7692307692307), - InntektbeløpDto.DagligInt(beløp = 1430) - ), arbeidsgiverInntektsopplysningDto.inntektsopplysning.beløp) + assertInstanceOf( + arbeidsgiverInntektsopplysningDto.inntektsopplysning + ) + assertEquals( + InntektDto( + InntektbeløpDto.Årlig(beløp = 372000.0), + InntektbeløpDto.MånedligDouble(beløp = 31000.0), + InntektbeløpDto.DagligDouble(beløp = 1430.7692307692307), + InntektbeløpDto.DagligInt(beløp = 1430) + ), arbeidsgiverInntektsopplysningDto.inntektsopplysning.beløp + ) } vilkårsgrunnlagDto.inntektsgrunnlag.arbeidsgiverInntektsopplysninger[1].also { arbeidsgiverInntektsopplysningDto -> - assertInstanceOf(arbeidsgiverInntektsopplysningDto.inntektsopplysning) + assertInstanceOf( + arbeidsgiverInntektsopplysningDto.inntektsopplysning + ) assertNull(arbeidsgiverInntektsopplysningDto.inntektsopplysning.beløp) } } } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AbstractEndToEndTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AbstractEndToEndTest.kt index 7841d45f68..a043bf8d33 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AbstractEndToEndTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AbstractEndToEndTest.kt @@ -32,7 +32,8 @@ internal abstract class AbstractEndToEndTest : AbstractPersonTest() { private set internal val sykmeldinger = mutableMapOf>() - internal val søknader = mutableMapOf>>() + internal val søknader = + mutableMapOf>>() internal val inntektsmeldinger = mutableMapOf() internal val inntekter = mutableMapOf() @@ -54,7 +55,10 @@ internal abstract class AbstractEndToEndTest : AbstractPersonTest() { internal val ikkeBesvarteBehov = mutableListOf() - internal fun TestArbeidsgiverInspektør.assertTilstander(vedtaksperiodeIdInnhenter: IdInnhenter, vararg tilstander: TilstandType) { + internal fun TestArbeidsgiverInspektør.assertTilstander( + vedtaksperiodeIdInnhenter: IdInnhenter, + vararg tilstander: TilstandType + ) { assertTilstander( vedtaksperiodeIdInnhenter = vedtaksperiodeIdInnhenter, tilstander = tilstander, @@ -63,18 +67,20 @@ internal abstract class AbstractEndToEndTest : AbstractPersonTest() { ) } - inner class Hendelser(private val hendelser:()->Unit) { + inner class Hendelser(private val hendelser: () -> Unit) { infix fun førerTil(postCondition: TilstandType) = førerTil(listOf(postCondition)) - infix fun førerTil(postCondition: List):Hendelser { + infix fun førerTil(postCondition: List): Hendelser { hendelser() postCondition.forEachIndexed { index, tilstand -> - assertTilstand((index+1).vedtaksperiode, tilstand) + assertTilstand((index + 1).vedtaksperiode, tilstand) } return this } - infix fun somEtterfulgtAv(f: ()->Unit) = Hendelser(f) + + infix fun somEtterfulgtAv(f: () -> Unit) = Hendelser(f) } - fun hendelsene(f:()->Unit) = Hendelser(f) + + fun hendelsene(f: () -> Unit) = Hendelser(f) data class InnsendtInntektsmelding( val tidspunkt: LocalDateTime, diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AnmodningOmForkastingTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AnmodningOmForkastingTest.kt index 34022159a2..b74ba920bf 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AnmodningOmForkastingTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AnmodningOmForkastingTest.kt @@ -20,19 +20,22 @@ import no.nav.helse.person.TilstandType.TIL_INFOTRYGD import no.nav.helse.spleis.e2e.AktivitetsloggFilter.Companion.filter import org.junit.jupiter.api.Test -internal class AnmodningOmForkastingTest: AbstractDslTest() { +internal class AnmodningOmForkastingTest : AbstractDslTest() { @Test - fun `anmodning avslås av en avsluttet vedtaksperiode`(){ + fun `anmodning avslås av en avsluttet vedtaksperiode`() { a1 { nyttVedtak(januar) håndterAnmodningOmForkasting(1.vedtaksperiode) - assertInfo("Avslår anmodning om forkasting i AVSLUTTET (kan ikke forkastes)", 1.vedtaksperiode.filter()) + assertInfo( + "Avslår anmodning om forkasting i AVSLUTTET (kan ikke forkastes)", + 1.vedtaksperiode.filter() + ) } } @Test - fun `når anmodning innfris forkastes alt på skjæringstidspunktet`(){ + fun `når anmodning innfris forkastes alt på skjæringstidspunktet`() { (a1 og a2).nyeVedtak(januar) a1 { nyPeriode(mars) @@ -50,11 +53,19 @@ internal class AnmodningOmForkastingTest: AbstractDslTest() { håndterAnmodningOmForkasting(2.vedtaksperiode) assertInfo("Etterkommer anmodning om forkasting", 2.vedtaksperiode.filter()) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) } a1 { assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } } @@ -68,19 +79,35 @@ internal class AnmodningOmForkastingTest: AbstractDslTest() { nullstillTilstandsendringer() håndterAnmodningOmForkasting(2.vedtaksperiode) assertTilstander(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(4.vedtaksperiode, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 4.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } } @Test - fun `anmodning innfris av en vedtaksperiode som avventer inntektsmelding`(){ + fun `anmodning innfris av en vedtaksperiode som avventer inntektsmelding`() { a1 { nyPeriode(januar) nullstillTilstandsendringer() håndterAnmodningOmForkasting(1.vedtaksperiode) - assertForkastetPeriodeTilstander(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } } @@ -110,7 +137,11 @@ internal class AnmodningOmForkastingTest: AbstractDslTest() { assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING) - assertForkastetPeriodeTilstander(3.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AnnullerUtbetalingTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AnnullerUtbetalingTest.kt index a06010fe61..ece85f4bf1 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AnnullerUtbetalingTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AnnullerUtbetalingTest.kt @@ -59,22 +59,40 @@ internal class AnnullerUtbetalingTest : AbstractEndToEndTest() { nyttVedtak(mai, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) håndterAnnullerUtbetaling() assertEquals(1, observatør.forkastedePerioder()) - assertEquals(AVSLUTTET, observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand) + assertEquals( + AVSLUTTET, + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand + ) } @Test fun `forkaster senere perioder ved annullering`() { nyttVedtak(januar) forlengVedtak(februar) // forlengelse - nyttVedtak(10.mars til 31.mars, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) // førstegangsbehandling, men med samme agp + nyttVedtak( + 10.mars til 31.mars, + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) // førstegangsbehandling, men med samme agp håndterSykmelding(Sykmeldingsperiode(1.mai, 20.mai)) // førstegangsbehandling, ny agp håndterSøknad(1.mai til 20.mai) håndterAnnullerUtbetaling() assertEquals(4, observatør.forkastedePerioder()) - assertEquals(AVSLUTTET, observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand) - assertEquals(AVSLUTTET, observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand) - assertEquals(AVSLUTTET, observatør.forkastet(3.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand) - assertEquals(AVVENTER_INNTEKTSMELDING, observatør.forkastet(4.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand) + assertEquals( + AVSLUTTET, + observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand + ) + assertEquals( + AVSLUTTET, + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand + ) + assertEquals( + AVSLUTTET, + observatør.forkastet(3.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand + ) + assertEquals( + AVVENTER_INNTEKTSMELDING, + observatør.forkastet(4.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand + ) } @Test @@ -84,8 +102,10 @@ internal class AnnullerUtbetalingTest : AbstractEndToEndTest() { håndterAnnullerUtbetaling(utbetalingId = inspektør.sisteUtbetalingId(1.vedtaksperiode)) assertIngenFunksjonelleFeil() val behov = person.personLogg.sisteBehov(Behovtype.Utbetaling) + @Suppress("UNCHECKED_CAST") - val statusForUtbetaling = (behov.detaljer()["linjer"] as List>)[0]["statuskode"] + val statusForUtbetaling = + (behov.detaljer()["linjer"] as List>)[0]["statuskode"] assertEquals("OPPH", statusForUtbetaling) håndterUtbetalt(status = Oppdragstatus.AKSEPTERT) assertFalse(person.personLogg.harFunksjonelleFeilEllerVerre()) @@ -118,7 +138,10 @@ internal class AnnullerUtbetalingTest : AbstractEndToEndTest() { private fun sisteBehovErAnnullering(vedtaksperiodeIdInnhenter: IdInnhenter) { person.personLogg.behov.last().also { assertEquals(Behovtype.Utbetaling, it.type) - assertEquals(inspektør.sisteArbeidsgiveroppdragFagsystemId(vedtaksperiodeIdInnhenter), it.detaljer()["fagsystemId"]) + assertEquals( + inspektør.sisteArbeidsgiveroppdragFagsystemId(vedtaksperiodeIdInnhenter), + it.detaljer()["fagsystemId"] + ) assertEquals("OPPH", it.hentLinjer()[0]["statuskode"]) } } @@ -235,7 +258,12 @@ internal class AnnullerUtbetalingTest : AbstractEndToEndTest() { fun `Annullering av én periode fører kun til at sammehengende utbetalte perioder blir forkastet og værende i Avsluttet`() { nyttVedtak(3.januar til 26.januar, 100.prosent, 3.januar) forlengVedtak(27.januar til 30.januar, 100.prosent) - nyttVedtak(1.mars til 20.mars, 100.prosent, 1.mars, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + nyttVedtak( + 1.mars til 20.mars, + 100.prosent, + 1.mars, + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) val behovTeller = person.personLogg.behov.size nullstillTilstandsendringer() håndterAnnullerUtbetaling() @@ -258,8 +286,14 @@ internal class AnnullerUtbetalingTest : AbstractEndToEndTest() { assertNotNull(annullering) val utbetalingInspektør = inspektør.utbetaling(0) - assertEquals(utbetalingInspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), annullering.arbeidsgiverFagsystemId) - assertEquals(utbetalingInspektør.personOppdrag.inspektør.fagsystemId(), annullering.personFagsystemId) + assertEquals( + utbetalingInspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + annullering.arbeidsgiverFagsystemId + ) + assertEquals( + utbetalingInspektør.personOppdrag.inspektør.fagsystemId(), + annullering.personFagsystemId + ) assertEquals("tbd@nav.no", annullering.saksbehandlerEpost) assertEquals(3.januar, annullering.fom) @@ -286,8 +320,14 @@ internal class AnnullerUtbetalingTest : AbstractEndToEndTest() { assertNotNull(annullering) val utbetalingInspektør = inspektør.utbetaling(0) - assertEquals(utbetalingInspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), annullering.arbeidsgiverFagsystemId) - assertEquals(utbetalingInspektør.personOppdrag.inspektør.fagsystemId(), annullering.personFagsystemId) + assertEquals( + utbetalingInspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + annullering.arbeidsgiverFagsystemId + ) + assertEquals( + utbetalingInspektør.personOppdrag.inspektør.fagsystemId(), + annullering.personFagsystemId + ) assertEquals(3.januar, annullering.fom) assertEquals(20.februar, annullering.tom) @@ -315,7 +355,12 @@ internal class AnnullerUtbetalingTest : AbstractEndToEndTest() { @Test fun `kan ikke annullere utbetalingsreferanser som ikke er siste`() { nyttVedtak(3.januar til 26.januar, 100.prosent, 3.januar) - nyttVedtak(3.mars til 26.mars, 100.prosent, 3.mars, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + nyttVedtak( + 3.mars til 26.mars, + 100.prosent, + 3.mars, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) val utbetalingId = inspektør.sisteUtbetalingId(1.vedtaksperiode) håndterAnnullerUtbetaling(utbetalingId = utbetalingId) @@ -346,7 +391,7 @@ internal class AnnullerUtbetalingTest : AbstractEndToEndTest() { } @Test - fun `UtbetalingAnnullertEvent inneholder saksbehandlerident`(){ + fun `UtbetalingAnnullertEvent inneholder saksbehandlerident`() { nyttVedtak(3.januar til 26.januar, 100.prosent, 3.januar) håndterAnnullerUtbetaling(utbetalingId = inspektør.sisteUtbetalingId(1.vedtaksperiode)) håndterUtbetalt(status = Oppdragstatus.AKSEPTERT) @@ -378,7 +423,10 @@ internal class AnnullerUtbetalingTest : AbstractEndToEndTest() { fun `skal kunne annullere tidligere utbetaling dersom siste utbetaling er uten utbetaling`() { nyttVedtak(januar) håndterSykmelding(Sykmeldingsperiode(1.mars, 20.mars)) - håndterSøknad(Sykdom(1.mars, 20.mars, 100.prosent), Søknad.Søknadsperiode.Ferie(17.mars, 20.mars)) + håndterSøknad( + Sykdom(1.mars, 20.mars, 100.prosent), + Søknad.Søknadsperiode.Ferie(17.mars, 20.mars) + ) håndterInntektsmelding(listOf(1.mars til 16.mars)) håndterAnnullerUtbetaling(utbetalingId = inspektør.sisteUtbetalingId(1.vedtaksperiode)) assertFalse(hendelselogg.harFunksjonelleFeilEllerVerre()) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ArbeidsopplysningerKorrigertTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ArbeidsopplysningerKorrigertTest.kt index 88cc18006e..ea314fff6e 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ArbeidsopplysningerKorrigertTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ArbeidsopplysningerKorrigertTest.kt @@ -83,7 +83,8 @@ internal class ArbeidsopplysningerKorrigertTest : AbstractEndToEndTest() { "forklaring", null, refusjonsopplysninger = listOf(Triple(1.januar, null, INNTEKT)) - )) + ) + ) ) val expected = ArbeidsgiveropplysningerKorrigertEvent( @@ -101,15 +102,30 @@ internal class ArbeidsopplysningerKorrigertTest : AbstractEndToEndTest() { val tom = 31.januar nyPeriode(fom til tom, orgnummer = a1) nyPeriode(fom til tom, orgnummer = a2) - val korrigertInntektsmeldingIdA1 = håndterInntektsmelding(listOf(fom til fom.plusDays(15)), orgnummer = a1) - val korrigertInntektsmeldingIdA2 = håndterInntektsmelding(listOf(fom til fom.plusDays(15)), orgnummer = a2) + val korrigertInntektsmeldingIdA1 = + håndterInntektsmelding(listOf(fom til fom.plusDays(15)), orgnummer = a1) + val korrigertInntektsmeldingIdA2 = + håndterInntektsmelding(listOf(fom til fom.plusDays(15)), orgnummer = a2) håndterVilkårsgrunnlag( 1.vedtaksperiode, orgnummer = a1, - inntektsvurderingForSykepengegrunnlag = inntektsvurderingForSykepengegrunnlag(INNTEKT, 1.januar, a1, a2), + inntektsvurderingForSykepengegrunnlag = inntektsvurderingForSykepengegrunnlag( + INNTEKT, + 1.januar, + a1, + a2 + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -161,15 +177,29 @@ internal class ArbeidsopplysningerKorrigertTest : AbstractEndToEndTest() { val tom = 31.januar nyPeriode(fom til tom, orgnummer = a1) nyPeriode(fom til tom, orgnummer = a2) - val korrigertInntektsmeldingIdA1 = håndterInntektsmelding(listOf(fom til fom.plusDays(15)), orgnummer = a1) + val korrigertInntektsmeldingIdA1 = + håndterInntektsmelding(listOf(fom til fom.plusDays(15)), orgnummer = a1) håndterInntektsmelding(listOf(fom til fom.plusDays(15)), orgnummer = a2) håndterVilkårsgrunnlag( 1.vedtaksperiode, orgnummer = a1, - inntektsvurderingForSykepengegrunnlag = inntektsvurderingForSykepengegrunnlag(INNTEKT, 1.januar, a1, a2), + inntektsvurderingForSykepengegrunnlag = inntektsvurderingForSykepengegrunnlag( + INNTEKT, + 1.januar, + a1, + a2 + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -294,4 +324,4 @@ internal class ArbeidsopplysningerKorrigertTest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 41000.månedlig) assertEquals(1, observatør.arbeidsgiveropplysningerKorrigert.size) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvsluttetMedVedtaktE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvsluttetMedVedtaktE2ETest.kt index a70c5ee655..79a18289e8 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvsluttetMedVedtaktE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvsluttetMedVedtaktE2ETest.kt @@ -35,7 +35,10 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { assertEquals(0, observatør.utbetalingUtenUtbetalingEventer.size) assertEquals(0, observatør.utbetalingMedUtbetalingEventer.size) 1.vedtaksperiode.assertIngenVedtakFattet() - assertEquals(1.januar til 10.januar, 1.vedtaksperiode.avsluttetUtenVedtakEventer.single().periode) + assertEquals( + 1.januar til 10.januar, + 1.vedtaksperiode.avsluttetUtenVedtakEventer.single().periode + ) } @Test @@ -61,7 +64,8 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { @Test fun `sender vedtak fattet for perioder utenfor arbeidsgiverperioden med bare ferie`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 20.januar)) - val søknadId = håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), Ferie(17.januar, 20.januar)) + val søknadId = + håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), Ferie(17.januar, 20.januar)) val inntektsmeldingId = håndterInntektsmelding(listOf(1.januar til 16.januar)) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertEquals(0, inspektør.antallUtbetalinger) @@ -69,8 +73,14 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { assertEquals(0, observatør.utbetalingMedUtbetalingEventer.size) 1.vedtaksperiode.assertIngenVedtakFattet() assertEquals(2, 1.vedtaksperiode.avsluttetUtenVedtakEventer.size) - assertEquals(setOf(søknadId), 1.vedtaksperiode.avsluttetUtenVedtakEventer.first().hendelseIder) - assertEquals(setOf(søknadId, inntektsmeldingId),1.vedtaksperiode.avsluttetUtenVedtakEventer.last().hendelseIder) + assertEquals( + setOf(søknadId), + 1.vedtaksperiode.avsluttetUtenVedtakEventer.first().hendelseIder + ) + assertEquals( + setOf(søknadId, inntektsmeldingId), + 1.vedtaksperiode.avsluttetUtenVedtakEventer.last().hendelseIder + ) } @Test @@ -103,8 +113,16 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar(2020), 31.januar(2020)), orgnummer = a2) håndterSøknad(1.januar(2020) til 31.januar(2020), orgnummer = a1) håndterSøknad(1.januar(2020) til 31.januar(2020), orgnummer = a2) - håndterInntektsmelding(listOf(1.januar(2020) til 16.januar(2020)), beregnetInntekt = INNTEKT, orgnummer = a1) - håndterInntektsmelding(listOf(1.januar(2020) til 16.januar(2020)), beregnetInntekt = INNTEKT, orgnummer = a2) + håndterInntektsmelding( + listOf(1.januar(2020) til 16.januar(2020)), + beregnetInntekt = INNTEKT, + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar(2020) til 16.januar(2020)), + beregnetInntekt = INNTEKT, + orgnummer = a2 + ) håndterVilkårsgrunnlag(1.vedtaksperiode, orgnummer = a1) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) @@ -117,8 +135,10 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { håndterUtbetalt(orgnummer = a2) assertEquals(2, observatør.avsluttetMedVedtakEvent.size) - val a1Sykepengegrunnlagsfakta = observatør.avsluttetMedVedtakEvent.values.first { it.organisasjonsnummer == a1 }.sykepengegrunnlagsfakta - val a2Sykepengegrunnlagsfakta = observatør.avsluttetMedVedtakEvent.values.first { it.organisasjonsnummer == a2 }.sykepengegrunnlagsfakta + val a1Sykepengegrunnlagsfakta = + observatør.avsluttetMedVedtakEvent.values.first { it.organisasjonsnummer == a1 }.sykepengegrunnlagsfakta + val a2Sykepengegrunnlagsfakta = + observatør.avsluttetMedVedtakEvent.values.first { it.organisasjonsnummer == a2 }.sykepengegrunnlagsfakta assertEquals(a1Sykepengegrunnlagsfakta, a2Sykepengegrunnlagsfakta) val forventetSykepengegrunnlagsfakta = FastsattEtterHovedregel( @@ -151,7 +171,13 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { ) håndterVilkårsgrunnlag(1.vedtaksperiode, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK) - håndterSkjønnsmessigFastsettelse(1.januar(2020), listOf(OverstyrtArbeidsgiveropplysning(a1, 46000.månedlig), OverstyrtArbeidsgiveropplysning(a2, 45000.månedlig))) + håndterSkjønnsmessigFastsettelse( + 1.januar(2020), + listOf( + OverstyrtArbeidsgiveropplysning(a1, 46000.månedlig), + OverstyrtArbeidsgiveropplysning(a2, 45000.månedlig) + ) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) @@ -163,8 +189,10 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { håndterUtbetalt(orgnummer = a2) assertEquals(2, observatør.avsluttetMedVedtakEvent.size) - val a1Sykepengegrunnlagsfakta = observatør.avsluttetMedVedtakEvent.values.first { it.organisasjonsnummer == a1 }.sykepengegrunnlagsfakta - val a2Sykepengegrunnlagsfakta = observatør.avsluttetMedVedtakEvent.values.first { it.organisasjonsnummer == a2 }.sykepengegrunnlagsfakta + val a1Sykepengegrunnlagsfakta = + observatør.avsluttetMedVedtakEvent.values.first { it.organisasjonsnummer == a1 }.sykepengegrunnlagsfakta + val a2Sykepengegrunnlagsfakta = + observatør.avsluttetMedVedtakEvent.values.first { it.organisasjonsnummer == a2 }.sykepengegrunnlagsfakta assertEquals(a1Sykepengegrunnlagsfakta, a2Sykepengegrunnlagsfakta) val forventetSykepengegrunnlagsfakta = FastsattEtterSkjønn( @@ -190,7 +218,7 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { } @Test - fun `sender avsluttet uten vedtak når saksbehandler overstyrer perioden inn i AvsluttetUtenUtbetaling`(){ + fun `sender avsluttet uten vedtak når saksbehandler overstyrer perioden inn i AvsluttetUtenUtbetaling`() { val søknadId = håndterSøknad(1.januar til 16.januar) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) val inntektsmeldingId = håndterInntektsmelding( @@ -202,7 +230,7 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - val liste = (1..16).map{ + val liste = (1..16).map { ManuellOverskrivingDag(it.januar, Dagtype.Feriedag) } val overstyringId = UUID.randomUUID() @@ -212,8 +240,14 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { assertEquals(Utbetalingstatus.FORKASTET, utbetaling.tilstand) 1.vedtaksperiode.assertIngenVedtakFattet() assertEquals(2, 1.vedtaksperiode.avsluttetUtenVedtakEventer.size) - assertEquals(setOf(søknadId), 1.vedtaksperiode.avsluttetUtenVedtakEventer.first().hendelseIder) - assertEquals(setOf(søknadId, inntektsmeldingId, overstyringId),1.vedtaksperiode.avsluttetUtenVedtakEventer.last().hendelseIder) + assertEquals( + setOf(søknadId), + 1.vedtaksperiode.avsluttetUtenVedtakEventer.first().hendelseIder + ) + assertEquals( + setOf(søknadId, inntektsmeldingId, overstyringId), + 1.vedtaksperiode.avsluttetUtenVedtakEventer.last().hendelseIder + ) } @@ -225,7 +259,10 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { assertSisteTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) 2.vedtaksperiode.assertIngenVedtakFattet() - assertEquals(10.februar til 28.februar, 2.vedtaksperiode.avsluttetUtenVedtakEventer.single().periode) + assertEquals( + 10.februar til 28.februar, + 2.vedtaksperiode.avsluttetUtenVedtakEventer.single().periode + ) } @Test @@ -247,18 +284,36 @@ internal class AvsluttetMedVedtaktE2ETest : AbstractEndToEndTest() { fun `sender med tidligere dokumenter etter revurdering`() { nyttVedtak(januar) val overstyringId = UUID.randomUUID() - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(31.januar, Dagtype.Feriedag)), meldingsreferanseId = overstyringId) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(31.januar, Dagtype.Feriedag)), + meldingsreferanseId = overstyringId + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) - assertEquals(1, observatør.avsluttetMedVedtakEventer.getValue(1.vedtaksperiode.id(ORGNUMMER)).size) - val tidligereVedtak = observatør.avsluttetMedVedtakEvent.getValue(1.vedtaksperiode.id(ORGNUMMER)) + assertEquals( + 1, + observatør.avsluttetMedVedtakEventer.getValue(1.vedtaksperiode.id(ORGNUMMER)).size + ) + val tidligereVedtak = + observatør.avsluttetMedVedtakEvent.getValue(1.vedtaksperiode.id(ORGNUMMER)) håndterUtbetalt() - assertEquals(2, observatør.avsluttetMedVedtakEventer.getValue(1.vedtaksperiode.id(ORGNUMMER)).size) + assertEquals( + 2, + observatør.avsluttetMedVedtakEventer.getValue(1.vedtaksperiode.id(ORGNUMMER)).size + ) val nyttVedtak = observatør.avsluttetMedVedtakEvent.getValue(1.vedtaksperiode.id(ORGNUMMER)) assertEquals(tidligereVedtak.hendelseIder.plus(overstyringId), nyttVedtak.hendelseIder) } - private val IdInnhenter.avsluttetUtenVedtakEventer get() = observatør.avsluttetUtenVedtakEventer.getValue(id(ORGNUMMER)) - private fun IdInnhenter.assertIngenVedtakFattet() = assertEquals(emptyList(), observatør.avsluttetMedVedtakEventer[id(ORGNUMMER)] ?: emptyList()) + private val IdInnhenter.avsluttetUtenVedtakEventer + get() = observatør.avsluttetUtenVedtakEventer.getValue( + id(ORGNUMMER) + ) + + private fun IdInnhenter.assertIngenVedtakFattet() = assertEquals( + emptyList(), + observatør.avsluttetMedVedtakEventer[id(ORGNUMMER)] + ?: emptyList() + ) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvsluttetUtenUtbetalingE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvsluttetUtenUtbetalingE2ETest.kt index baaa32056e..cb105ca7d6 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvsluttetUtenUtbetalingE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvsluttetUtenUtbetalingE2ETest.kt @@ -22,7 +22,7 @@ import no.nav.helse.person.nullstillTilstandsendringer import no.nav.helse.utbetalingslinjer.Oppdragstatus import org.junit.jupiter.api.Test -internal class AvsluttetUtenUtbetalingE2ETest: AbstractEndToEndTest() { +internal class AvsluttetUtenUtbetalingE2ETest : AbstractEndToEndTest() { /* Hvis vi har en kort periode som har endt opp i AVSLUTTET_UTEN_UTBETALING vil alle etterkommende perioder bli stuck med å vente på den korte perioden. Da vil de aldri komme seg videre og til slutt time ut @@ -70,7 +70,7 @@ internal class AvsluttetUtenUtbetalingE2ETest: AbstractEndToEndTest() { @Test fun `kort periode setter senere periode fast i AVVENTER_HISTORIKK`() { håndterSykmelding(Sykmeldingsperiode(3.januar, 10.januar)) - håndterSøknad(3.januar til 10.januar) + håndterSøknad(3.januar til 10.januar) assertTilstander( 1.vedtaksperiode, START, @@ -81,12 +81,27 @@ internal class AvsluttetUtenUtbetalingE2ETest: AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(3.mars, 7.mars)) håndterSøknad(3.mars til 7.mars) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) håndterSykmelding(Sykmeldingsperiode(8.mars, 26.mars)) - håndterInntektsmelding(listOf(Periode(3.mars, 18.mars)), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(Periode(3.mars, 18.mars)), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) håndterSøknad(8.mars til 26.mars) håndterVilkårsgrunnlag(3.vedtaksperiode, INNTEKT) @@ -116,9 +131,25 @@ internal class AvsluttetUtenUtbetalingE2ETest: AbstractEndToEndTest() { håndterSøknad(13.januar til 19.januar) håndterSøknad(20.januar til 1.februar) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) assertTilstander(4.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) nullstillTilstandsendringer() @@ -135,7 +166,12 @@ internal class AvsluttetUtenUtbetalingE2ETest: AbstractEndToEndTest() { 8.januar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode ) - assertTilstander(3.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 3.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(4.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvvisningEtterFylte70\303\205rTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvvisningEtterFylte70\303\205rTest.kt" index df8cdd599a..825934b0f1 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvvisningEtterFylte70\303\205rTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvvisningEtterFylte70\303\205rTest.kt" @@ -32,7 +32,8 @@ internal class AvvisningEtterFylte70ÅrTest : AbstractEndToEndTest() { @Test fun `Person over 70 får alle dager etter AGP avvist med Over70 som begrunnelse`() { - person = createTestPerson(FYLLER_70_FJORTENDE_JANUAR, FYLLER_70_FJORTENDE_JANUAR_FØDSELSDATO) + person = + createTestPerson(FYLLER_70_FJORTENDE_JANUAR, FYLLER_70_FJORTENDE_JANUAR_FØDSELSDATO) håndterSykmelding(januar) håndterSøknad(januar) @@ -41,10 +42,14 @@ internal class AvvisningEtterFylte70ÅrTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) - val avvisteDager = observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.AvvistDag } - val arbeidsgiverperiodedager = observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.ArbeidsgiverperiodeDag} - val navDager = observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.NavDag } - val navHelgedager = observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.NavHelgDag } + val avvisteDager = + observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.AvvistDag } + val arbeidsgiverperiodedager = + observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.ArbeidsgiverperiodeDag } + val navDager = + observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.NavDag } + val navHelgedager = + observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.NavHelgDag } assertEquals(11, avvisteDager.size) assertEquals(16, arbeidsgiverperiodedager.size) @@ -78,13 +83,18 @@ internal class AvvisningEtterFylte70ÅrTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(11.juli, 31.juli)) håndterSøknad(11.juli til 31.juli) - håndterInntektsmelding(listOf(11.juli til 26.juli), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(11.juli til 26.juli), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) - val avvisteDager = observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.AvvistDag } - val arbeidsgiverperiodedager = observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.ArbeidsgiverperiodeDag} + val avvisteDager = + observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.AvvistDag } + val arbeidsgiverperiodedager = + observatør.utbetalingUtenUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.ArbeidsgiverperiodeDag } assertEquals(3, avvisteDager.size) assertEquals(16, arbeidsgiverperiodedager.size) @@ -122,7 +132,8 @@ internal class AvvisningEtterFylte70ÅrTest : AbstractEndToEndTest() { @Test fun `Maksdato settes til virkedagen før 70årsdagen hvis bursdagen er på en søndag`() { - person = createTestPerson(FYLLER_70_FJORTENDE_JANUAR, FYLLER_70_FJORTENDE_JANUAR_FØDSELSDATO) + person = + createTestPerson(FYLLER_70_FJORTENDE_JANUAR, FYLLER_70_FJORTENDE_JANUAR_FØDSELSDATO) håndterSykmelding(januar) håndterSøknad(januar) @@ -135,7 +146,8 @@ internal class AvvisningEtterFylte70ÅrTest : AbstractEndToEndTest() { @Test fun `Maksdato settes til virkedagen før 70årsdagen hvis bursdagen er på en mandag`() { - person = createTestPerson(FYLLER_70_TOOGTYVENDE_JANUAR, FYLLER_70_TOOGTYVENDE_JANUAR_FØDSELSDATO) + person = + createTestPerson(FYLLER_70_TOOGTYVENDE_JANUAR, FYLLER_70_TOOGTYVENDE_JANUAR_FØDSELSDATO) håndterSykmelding(januar) håndterSøknad(januar) diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvvisningF\303\270rFylte18\303\205rTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvvisningF\303\270rFylte18\303\205rTest.kt" index 4e6bcc3706..72f41de08f 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvvisningF\303\270rFylte18\303\205rTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/AvvisningF\303\270rFylte18\303\205rTest.kt" @@ -25,16 +25,32 @@ internal class AvvisningFørFylte18ÅrTest : AbstractEndToEndTest() { @Test fun `avviser sykmeldinger for person under 18 år ved søknadstidspunkt`() { - håndterSykmelding(Sykmeldingsperiode(1.oktober, 31.oktober), mottatt = 1.november.atStartOfDay(), fnr = FYLLER_18_ÅR_2_NOVEMBER) - håndterSøknad(oktober, sendtTilNAVEllerArbeidsgiver = 1.november, fnr = FYLLER_18_ÅR_2_NOVEMBER) + håndterSykmelding( + Sykmeldingsperiode(1.oktober, 31.oktober), + mottatt = 1.november.atStartOfDay(), + fnr = FYLLER_18_ÅR_2_NOVEMBER + ) + håndterSøknad( + oktober, + sendtTilNAVEllerArbeidsgiver = 1.november, + fnr = FYLLER_18_ÅR_2_NOVEMBER + ) assertTrue(hendelselogg.harFunksjonelleFeilEllerVerre()) assertForkastetPeriodeTilstander(1, START, TIL_INFOTRYGD) } @Test fun `avviser ikke sykmeldinger for person som er 18 år ved søknadstidspunkt`() { - håndterSykmelding(Sykmeldingsperiode(1.oktober, 31.oktober), mottatt = 2.november.atStartOfDay(), fnr = FYLLER_18_ÅR_2_NOVEMBER) - håndterSøknad(oktober, sendtTilNAVEllerArbeidsgiver = 2.november, fnr = FYLLER_18_ÅR_2_NOVEMBER) + håndterSykmelding( + Sykmeldingsperiode(1.oktober, 31.oktober), + mottatt = 2.november.atStartOfDay(), + fnr = FYLLER_18_ÅR_2_NOVEMBER + ) + håndterSøknad( + oktober, + sendtTilNAVEllerArbeidsgiver = 2.november, + fnr = FYLLER_18_ÅR_2_NOVEMBER + ) assertFalse(hendelselogg.harFunksjonelleFeilEllerVerre()) assertTilstander(0, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/DeleGrunnlagsdataTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/DeleGrunnlagsdataTest.kt index 1f1fe36977..c4970eb4a0 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/DeleGrunnlagsdataTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/DeleGrunnlagsdataTest.kt @@ -40,7 +40,10 @@ internal class DeleGrunnlagsdataTest : AbstractEndToEndTest() { håndterSøknad(februar) håndterSøknad(mars) håndterSøknad(5.april til 30.april) - val inntektsmelding1Id = håndterInntektsmelding(arbeidsgiverperioder = listOf(Periode(1.januar, 16.januar)), vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + val inntektsmelding1Id = håndterInntektsmelding( + arbeidsgiverperioder = listOf(Periode(1.januar, 16.januar)), + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) val inntektsmelding2Id = håndterInntektsmelding( arbeidsgiverperioder = listOf(Periode(1.januar, 16.januar)), førsteFraværsdag = 5.april, @@ -66,9 +69,18 @@ internal class DeleGrunnlagsdataTest : AbstractEndToEndTest() { håndterUtbetalt() assertNotNull(inspektør.vilkårsgrunnlag(1.vedtaksperiode)) - assertEquals(inspektør.vilkårsgrunnlag(1.vedtaksperiode), inspektør.vilkårsgrunnlag(2.vedtaksperiode)) - assertEquals(inspektør.vilkårsgrunnlag(1.vedtaksperiode), inspektør.vilkårsgrunnlag(3.vedtaksperiode)) - assertNotEquals(inspektør.vilkårsgrunnlag(3.vedtaksperiode), inspektør.vilkårsgrunnlag(4.vedtaksperiode)) + assertEquals( + inspektør.vilkårsgrunnlag(1.vedtaksperiode), + inspektør.vilkårsgrunnlag(2.vedtaksperiode) + ) + assertEquals( + inspektør.vilkårsgrunnlag(1.vedtaksperiode), + inspektør.vilkårsgrunnlag(3.vedtaksperiode) + ) + assertNotEquals( + inspektør.vilkårsgrunnlag(3.vedtaksperiode), + inspektør.vilkårsgrunnlag(4.vedtaksperiode) + ) assertTrue(inntektsmelding1Id in inspektør.hendelseIder(1.vedtaksperiode)) assertTrue(inntektsmelding1Id in inspektør.hendelseIder(2.vedtaksperiode)) assertTrue(inntektsmelding1Id in inspektør.hendelseIder(3.vedtaksperiode)) @@ -89,8 +101,14 @@ internal class DeleGrunnlagsdataTest : AbstractEndToEndTest() { håndterSøknad(5.april til 30.april) assertNotNull(inspektør.vilkårsgrunnlag(1.vedtaksperiode)) - assertEquals(inspektør.vilkårsgrunnlag(1.vedtaksperiode), inspektør.vilkårsgrunnlag(2.vedtaksperiode)) - assertEquals(inspektør.vilkårsgrunnlag(1.vedtaksperiode), inspektør.vilkårsgrunnlag(3.vedtaksperiode)) + assertEquals( + inspektør.vilkårsgrunnlag(1.vedtaksperiode), + inspektør.vilkårsgrunnlag(2.vedtaksperiode) + ) + assertEquals( + inspektør.vilkårsgrunnlag(1.vedtaksperiode), + inspektør.vilkårsgrunnlag(3.vedtaksperiode) + ) assertNull(inspektør.vilkårsgrunnlag(4.vedtaksperiode)) } @@ -117,10 +135,18 @@ internal class DeleGrunnlagsdataTest : AbstractEndToEndTest() { håndterUtbetalt() håndterYtelser(2.vedtaksperiode) assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) assertIngenVarsel(RV_IM_4, 1.vedtaksperiode.filter()) assertIngenVarsel(RV_IM_4, 2.vedtaksperiode.filter()) - assertEquals(inspektør.vilkårsgrunnlag(1.vedtaksperiode), inspektør.vilkårsgrunnlag(2.vedtaksperiode)) + assertEquals( + inspektør.vilkårsgrunnlag(1.vedtaksperiode), + inspektør.vilkårsgrunnlag(2.vedtaksperiode) + ) assertEquals(18.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(18.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) } @@ -133,7 +159,8 @@ internal class DeleGrunnlagsdataTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars)) val søknadId = håndterSøknad(mars) - val inntektsmeldingId = håndterInntektsmelding(listOf(Periode(20.februar, 8.mars)), 20.februar) + val inntektsmeldingId = + håndterInntektsmelding(listOf(Periode(20.februar, 8.mars)), 20.februar) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) @@ -156,6 +183,9 @@ internal class DeleGrunnlagsdataTest : AbstractEndToEndTest() { AVVENTER_SIMULERING ) assertEquals(2, inspektør.hendelseIder(2.vedtaksperiode).size) - assertTrue(inspektør.hendelseIder(2.vedtaksperiode).containsAll(listOf(søknadId, inntektsmeldingId))) + assertTrue( + inspektør.hendelseIder(2.vedtaksperiode) + .containsAll(listOf(søknadId, inntektsmeldingId)) + ) } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/D\303\270dsmeldingE2E.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/D\303\270dsmeldingE2E.kt" index 2d7b7ce8ac..4014f0777f 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/D\303\270dsmeldingE2E.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/D\303\270dsmeldingE2E.kt" @@ -27,7 +27,10 @@ internal class DødsmeldingE2E : AbstractDslTest() { håndterInntektsmelding(listOf(Periode(1.januar, 16.januar)), INNTEKT) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) - assertEquals(9, inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje.inspektør.avvistDagTeller) + assertEquals( + 9, + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje.inspektør.avvistDagTeller + ) } @Test @@ -37,7 +40,10 @@ internal class DødsmeldingE2E : AbstractDslTest() { håndterInntektsmelding(listOf(Periode(1.januar, 16.januar)), INNTEKT) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) - assertEquals(0, inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje.inspektør.avvistDagTeller) + assertEquals( + 0, + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje.inspektør.avvistDagTeller + ) } @Test @@ -53,4 +59,4 @@ internal class DødsmeldingE2E : AbstractDslTest() { assertEquals(4, it.navHelgDagTeller) } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/EnArbeidsgiverTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/EnArbeidsgiverTest.kt index e25f0be3f7..b91fa97905 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/EnArbeidsgiverTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/EnArbeidsgiverTest.kt @@ -51,19 +51,46 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { fun `Periode med AGP i snuten, etterfulgt av så mange arbeidsdager at det er ny AGP mot halen`() { håndterSøknad(25.juni til 5.juli) håndterSøknad(31.juli til 18.august) - håndterInntektsmelding(listOf(25.juni til 5.juli, 8.juli til 12.juli), førsteFraværsdag = 1.august, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(25.juni til 5.juli, 8.juli til 12.juli), + førsteFraværsdag = 1.august, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertEquals(6.juli til 18.august, inspektør.vedtaksperioder(2.vedtaksperiode).periode) - assertEquals("ARG UUUU??? ??????? ??????? ?SSSSHH SSSSSHH SSSSSH", inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString()) + assertEquals( + "ARG UUUU??? ??????? ??????? ?SSSSHH SSSSSHH SSSSSH", + inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString() + ) - håndterInntektsmelding(listOf(25.juni til 5.juli, 8.juli til 12.juli), førsteFraværsdag = 7.august, begrunnelseForReduksjonEllerIkkeUtbetalt = "FerieEllerAvspasering", avsendersystem = ALTINN) - assertEquals("ARR AAAAARR AAAAARR AAAAARR AAAAARR ANSSSHH SSSSSH", inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString()) - assertEquals(listOf(7.august til 18.august), inspektør.arbeidsgiverperioden(2.vedtaksperiode)) + håndterInntektsmelding( + listOf(25.juni til 5.juli, 8.juli til 12.juli), + førsteFraværsdag = 7.august, + begrunnelseForReduksjonEllerIkkeUtbetalt = "FerieEllerAvspasering", + avsendersystem = ALTINN + ) + assertEquals( + "ARR AAAAARR AAAAARR AAAAARR AAAAARR ANSSSHH SSSSSH", + inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString() + ) + assertEquals( + listOf(7.august til 18.august), + inspektør.arbeidsgiverperioden(2.vedtaksperiode) + ) assertEquals(7.august, inspektør.skjæringstidspunkt(2.vedtaksperiode)) håndterVilkårsgrunnlag(2.vedtaksperiode) - håndterOverstyrTidslinje((9.juli til 13.juli).map { ManuellOverskrivingDag(it, Dagtype.Sykedag, 100) }) + håndterOverstyrTidslinje((9.juli til 13.juli).map { + ManuellOverskrivingDag( + it, + Dagtype.Sykedag, + 100 + ) + }) val tidslinje = "ARR SSSSSRR AAAAARR AAAAARR AAAAARR ANSSSHH SSSSSH" - assertEquals(tidslinje, inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString()) + assertEquals( + tidslinje, + inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString() + ) assertForventetFeil( forklaring = "Periode med AGP i snuten, etterfulgt av så mange arbeidsdager at det er ny AGP mot halen", @@ -78,23 +105,37 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { } ) - håndterOverstyrTidslinje((14.juli til 6.august).map { ManuellOverskrivingDag(it, Dagtype.ArbeidIkkeGjenopptattDag) }) - assertEquals("ARR SSSSSJJ JJJJJJJ JJJJJJJ JJJJJJJ JNSSSHH SSSSSH", inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString()) - assertEquals(listOf(25.juni til 5.juli, 9.juli til 13.juli), inspektør.arbeidsgiverperioden(2.vedtaksperiode)) + håndterOverstyrTidslinje((14.juli til 6.august).map { + ManuellOverskrivingDag( + it, + Dagtype.ArbeidIkkeGjenopptattDag + ) + }) + assertEquals( + "ARR SSSSSJJ JJJJJJJ JJJJJJJ JJJJJJJ JNSSSHH SSSSSH", + inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString() + ) + assertEquals( + listOf(25.juni til 5.juli, 9.juli til 13.juli), + inspektør.arbeidsgiverperioden(2.vedtaksperiode) + ) assertEquals(7.august, inspektør.skjæringstidspunkt(2.vedtaksperiode)) håndterYtelser(2.vedtaksperiode) assertSisteTilstand(2.vedtaksperiode, AVVENTER_SIMULERING) } @Test - fun `en sprø case som ikke lenger trekker masse penger uten at vedtaksperiodene får vite om det`(){ + fun `en sprø case som ikke lenger trekker masse penger uten at vedtaksperiodene får vite om det`() { nyttVedtak(5.desember(2017) til 5.januar) val korrelasjonsIdAugust2017 = inspektør.utbetaling(0).korrelasjonsId // Forlengelse med arbeid og ferie håndterSøknad(Sykdom(6.januar, 4.februar, 100.prosent), Arbeid(6.januar, 4.februar)) håndterSøknad(Sykdom(5.februar, 24.februar, 100.prosent), Ferie(5.februar, 11.februar)) - håndterInntektsmelding(listOf(5.februar til 20.februar), vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(5.februar til 20.februar), + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) håndterVilkårsgrunnlag(3.vedtaksperiode) håndterYtelser(3.vedtaksperiode) håndterSimulering(3.vedtaksperiode) @@ -104,14 +145,17 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { assertEquals(5.februar, inspektør.skjæringstidspunkt(3.vedtaksperiode)) assertEquals(2, inspektør.antallUtbetalinger) assertEquals(5.desember(2017) til 5.januar, inspektør.utbetaling(0).periode) - assertEquals(korrelasjonsIdAugust2017,inspektør.utbetaling(0).korrelasjonsId) + assertEquals(korrelasjonsIdAugust2017, inspektør.utbetaling(0).korrelasjonsId) val korrelasjonsIdFebruar2018 = inspektør.utbetaling(1).korrelasjonsId assertEquals(5.februar til 24.februar, inspektør.utbetaling(1).periode) assertNotEquals(korrelasjonsIdAugust2017, korrelasjonsIdFebruar2018) // Inntektsmelding som flytter arbeidsgiverperioden en uke frem // Utbetaling revurderes og skal trekke penger tilbake for 21.-23.februar - håndterInntektsmelding(listOf(12.februar til 27.februar), vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(12.februar til 27.februar), + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) assertEquals(12.februar, inspektør.skjæringstidspunkt(3.vedtaksperiode)) håndterVilkårsgrunnlag(3.vedtaksperiode) @@ -152,11 +196,18 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertTilstander(3.vedtaksperiode, AVSLUTTET) assertTrue(utbetalingenSomTrekkerPenger.utbetalingId in utbetalingIder(3.vedtaksperiode)) - assertTilstander(4.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 4.vedtaksperiode, + START, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) assertFalse(utbetalingenSomTrekkerPenger.utbetalingId in utbetalingIder(4.vedtaksperiode)) } - private fun utbetalingIder(vedtaksperiode: IdInnhenter) = inspektør.vedtaksperioder(vedtaksperiode).inspektør.behandlinger.flatMap { it.endringer.mapNotNull { endring -> endring.utbetaling?.inspektør?.utbetalingId } } + private fun utbetalingIder(vedtaksperiode: IdInnhenter) = + inspektør.vedtaksperioder(vedtaksperiode).inspektør.behandlinger.flatMap { it.endringer.mapNotNull { endring -> endring.utbetaling?.inspektør?.utbetalingId } } @Test fun `Arbeid gjenopptatt i minst 16 dager fører til at vi bygger videre på feil utbetaling`() { @@ -167,12 +218,21 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() håndterSøknad(19.februar til 19.mars) - håndterInntektsmelding(listOf(19.februar til 6.mars), vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(19.februar til 6.mars), + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) håndterVilkårsgrunnlag(3.vedtaksperiode) håndterYtelser(3.vedtaksperiode) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(2.vedtaksperiode)) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(2.vedtaksperiode) + ) assertEquals(listOf(19.februar til 6.mars), inspektør.arbeidsgiverperiode(3.vedtaksperiode)) assertEquals(3, inspektør.antallUtbetalinger) @@ -273,7 +333,10 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars)) håndterSøknad(mars) - håndterInntektsmelding(listOf(1.mars til 16.mars), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) assertTilstander( @@ -291,9 +354,15 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars)) håndterSøknad(mars) - håndterInntektsmelding(listOf(1.mars til 16.mars), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) - håndterInntektsmelding(listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -310,12 +379,23 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(17.januar, 31.januar)) håndterSøknad(1.januar til 16.januar) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) nullstillTilstandsendringer() val im = håndterInntektsmelding(listOf(1.januar til 16.januar), avsendersystem = ALTINN) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) assertTrue(im in observatør.inntektsmeldingFørSøknad.map { it.inntektsmeldingId }) assertFalse(im in observatør.inntektsmeldingHåndtert.map(Pair::first)) @@ -325,7 +405,13 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { assertTrue(im in observatør.inntektsmeldingHåndtert.map(Pair::first)) assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -488,7 +574,10 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { håndterSøknad(januar) håndterSøknad(mai) - håndterInntektsmelding(listOf(1.mai til 16.mai), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mai til 16.mai), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterPåminnelse( 1.vedtaksperiode, påminnetTilstand = AVVENTER_INNTEKTSMELDING, @@ -506,7 +595,10 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(10.januar, 11.januar)) håndterSøknad(1.januar til 2.januar) - håndterInntektsmelding(listOf(1.januar til 2.januar, 10.januar til 23.januar), førsteFraværsdag = 10.januar) + håndterInntektsmelding( + listOf(1.januar til 2.januar, 10.januar til 23.januar), + førsteFraværsdag = 10.januar + ) håndterSøknad(10.januar til 11.januar) assertTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) @@ -576,7 +668,12 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { håndterSøknad(februar) forkastAlle() - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) } @Test @@ -587,7 +684,15 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { utbetalPeriode(1.vedtaksperiode) håndterUtbetalingshistorikkEtterInfotrygdendring( - utbetalinger = arrayOf(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.februar, 10.februar, 100.prosent, INNTEKT)), + utbetalinger = arrayOf( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.februar, + 10.februar, + 100.prosent, + INNTEKT + ) + ), inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 1.februar, INNTEKT, true)) ) håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 20.februar) @@ -637,4 +742,4 @@ internal class EnArbeidsgiverTest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(vedtaksperiode) utbetalPeriodeEtterVilkårsprøving(vedtaksperiode) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/EndaEnGodkjenningsbehovTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/EndaEnGodkjenningsbehovTest.kt index 2d9a8e9675..8b963310b0 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/EndaEnGodkjenningsbehovTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/EndaEnGodkjenningsbehovTest.kt @@ -33,7 +33,8 @@ import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { - private fun IdInnhenter.sisteBehandlingId(orgnr: String) = inspektør(orgnr).vedtaksperioder(this).inspektør.behandlinger.last().id + private fun IdInnhenter.sisteBehandlingId(orgnr: String) = + inspektør(orgnr).vedtaksperioder(this).inspektør.behandlinger.last().id @Test fun forlengelse() { @@ -54,24 +55,44 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { mapOf("organisasjonsnummer" to a2, "beløp" to 240000.0) ), perioderMedSammeSkjæringstidspunkt = listOf( - mapOf("vedtaksperiodeId" to 1.vedtaksperiode.id(a1).toString(), "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a1).toString(), "fom" to 1.januar.toString(), "tom" to 31.januar.toString()), - mapOf("vedtaksperiodeId" to 1.vedtaksperiode.id(a2).toString(), "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a2).toString(), "fom" to 1.januar.toString(), "tom" to 31.januar.toString()), - mapOf("vedtaksperiodeId" to 2.vedtaksperiode.id(a1).toString(), "behandlingId" to 2.vedtaksperiode.sisteBehandlingId(a1).toString(), "fom" to 1.februar.toString(), "tom" to 10.februar.toString()), - mapOf("vedtaksperiodeId" to 2.vedtaksperiode.id(a2).toString(), "behandlingId" to 2.vedtaksperiode.sisteBehandlingId(a2).toString(), "fom" to 1.februar.toString(), "tom" to 10.februar.toString()), + mapOf( + "vedtaksperiodeId" to 1.vedtaksperiode.id(a1).toString(), + "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a1).toString(), + "fom" to 1.januar.toString(), + "tom" to 31.januar.toString() + ), + mapOf( + "vedtaksperiodeId" to 1.vedtaksperiode.id(a2).toString(), + "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a2).toString(), + "fom" to 1.januar.toString(), + "tom" to 31.januar.toString() + ), + mapOf( + "vedtaksperiodeId" to 2.vedtaksperiode.id(a1).toString(), + "behandlingId" to 2.vedtaksperiode.sisteBehandlingId(a1).toString(), + "fom" to 1.februar.toString(), + "tom" to 10.februar.toString() + ), + mapOf( + "vedtaksperiodeId" to 2.vedtaksperiode.id(a2).toString(), + "behandlingId" to 2.vedtaksperiode.sisteBehandlingId(a2).toString(), + "fom" to 1.februar.toString(), + "tom" to 10.februar.toString() + ), ), sykepengegrunnlagsfakta = mapOf( "omregnetÅrsinntektTotalt" to 480_000.0, "sykepengegrunnlag" to 480_000.0, "6G" to 561_804.0, "fastsatt" to "EtterHovedregel", - "arbeidsgivere" to listOf ( + "arbeidsgivere" to listOf( mapOf( "arbeidsgiver" to a1, "omregnetÅrsinntekt" to 240000.0 ), mapOf( - "arbeidsgiver" to a2, - "omregnetÅrsinntekt" to 240000.0 - ) + "arbeidsgiver" to a2, + "omregnetÅrsinntekt" to 240000.0 + ) ) ) ) @@ -82,13 +103,18 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { tilGodkjenning(januar, a1) assertGodkjenningsbehov( tags = setOf("Arbeidsgiverutbetaling"), - omregnedeÅrsinntekter = listOf(mapOf("organisasjonsnummer" to a1, "beløp" to 240_000.0)), + omregnedeÅrsinntekter = listOf( + mapOf( + "organisasjonsnummer" to a1, + "beløp" to 240_000.0 + ) + ), sykepengegrunnlagsfakta = mapOf( "omregnetÅrsinntektTotalt" to 240_000.0, "sykepengegrunnlag" to 240_000.0, "6G" to 561_804.0, "fastsatt" to "EtterHovedregel", - "arbeidsgivere" to listOf ( + "arbeidsgivere" to listOf( mapOf( "arbeidsgiver" to a1, "omregnetÅrsinntekt" to 240_000.0 @@ -100,7 +126,10 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { @Test fun ferie() { - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Søknad.Søknadsperiode.Ferie(31.januar, 31.januar)) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Søknad.Søknadsperiode.Ferie(31.januar, 31.januar) + ) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag() håndterYtelser(1.vedtaksperiode) @@ -115,13 +144,18 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { tilGodkjenning(januar, a1, beregnetInntekt = 100000.månedlig) assertGodkjenningsbehov( tags = setOf("Arbeidsgiverutbetaling", "6GBegrenset"), - omregnedeÅrsinntekter = listOf(mapOf("organisasjonsnummer" to a1, "beløp" to 1_200_000.0)), + omregnedeÅrsinntekter = listOf( + mapOf( + "organisasjonsnummer" to a1, + "beløp" to 1_200_000.0 + ) + ), sykepengegrunnlagsfakta = mapOf( "omregnetÅrsinntektTotalt" to 1_200_000.0, "sykepengegrunnlag" to 561_804.0, "6G" to 561_804.0, "fastsatt" to "EtterHovedregel", - "arbeidsgivere" to listOf ( + "arbeidsgivere" to listOf( mapOf( "arbeidsgiver" to a1, "omregnetÅrsinntekt" to 1200000.0 @@ -134,16 +168,26 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { @Test fun `ingen ny arbeidsgiverperiode og sykepengegrunnlag under 2g`() { nyttVedtak(januar, orgnummer = a1) - tilGodkjenning(10.februar til 20.februar, a1, beregnetInntekt = 10000.månedlig, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + tilGodkjenning( + 10.februar til 20.februar, + a1, + beregnetInntekt = 10000.månedlig, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertGodkjenningsbehov( skjæringstidspunkt = 10.februar, periodeFom = 10.februar, periodeTom = 20.februar, vedtaksperiodeId = 2.vedtaksperiode.id(a1), - omregnedeÅrsinntekter = listOf(mapOf("organisasjonsnummer" to a1, "beløp" to 10000.månedlig.årlig)), + omregnedeÅrsinntekter = listOf( + mapOf( + "organisasjonsnummer" to a1, + "beløp" to 10000.månedlig.årlig + ) + ), behandlingId = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().id, tags = setOf("IngenNyArbeidsgiverperiode", "SykepengegrunnlagUnder2G"), - perioderMedSammeSkjæringstidspunkt= listOf( + perioderMedSammeSkjæringstidspunkt = listOf( mapOf( "vedtaksperiodeId" to 2.vedtaksperiode.id(a1).toString(), "behandlingId" to 2.vedtaksperiode.sisteBehandlingId(a1).toString(), @@ -156,7 +200,7 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { "6G" to 561_804.0, "sykepengegrunnlag" to 10000.månedlig.årlig, "fastsatt" to "EtterHovedregel", - "arbeidsgivere" to listOf ( + "arbeidsgivere" to listOf( mapOf( "arbeidsgiver" to a1, "omregnetÅrsinntekt" to 120000.0 @@ -181,7 +225,12 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) nullstillTilstandsendringer() - håndterOverstyrTidslinje((juli).map { ManuellOverskrivingDag(it, Dagtype.ArbeidIkkeGjenopptattDag) }) + håndterOverstyrTidslinje((juli).map { + ManuellOverskrivingDag( + it, + Dagtype.ArbeidIkkeGjenopptattDag + ) + }) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) assertTags(setOf("IngenNyArbeidsgiverperiode"), 2.vedtaksperiode.id(a1)) @@ -201,7 +250,10 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() tilGodkjenning(16.februar til 28.februar, a1, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) - assertEquals("NNNNNHH NNNNNHH NNSSSHH SSSSSHH SSS???? ??????? ????SHH SSSSSHH SSS", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "NNNNNHH NNNNNHH NNSSSHH SSSSSHH SSS???? ??????? ????SHH SSSSSHH SSS", + inspektør.sykdomstidslinje.toShortString() + ) assertTags(setOf("IngenNyArbeidsgiverperiode"), 2.vedtaksperiode.id(a1)) } @@ -264,7 +316,12 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar, 16.januar)) håndterSøknad(1.januar til 16.januar) val inntektsmeldingId = UUID.randomUUID() - tilGodkjenning(17.januar til 31.januar, a1, arbeidsgiverperiode = listOf(1.januar til 16.januar), inntektsmeldingId = inntektsmeldingId) + tilGodkjenning( + 17.januar til 31.januar, + a1, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + inntektsmeldingId = inntektsmeldingId + ) assertIngenTag("IngenNyArbeidsgiverperiode", 2.vedtaksperiode.id(a1)) } @@ -286,7 +343,7 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { nyPeriode(januar) håndterInntektsmelding( listOf(1.januar til 16.januar), - refusjon = Inntektsmelding.Refusjon(beløp = INNTEKT/2, opphørsdato = null), + refusjon = Inntektsmelding.Refusjon(beløp = INNTEKT / 2, opphørsdato = null), ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -297,7 +354,10 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { @Test fun `ingen utbetaling`() { nyttVedtak(januar) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Søknad.Søknadsperiode.Ferie(1.februar, 28.februar)) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + Søknad.Søknadsperiode.Ferie(1.februar, 28.februar) + ) håndterYtelser(2.vedtaksperiode) assertGodkjenningsbehov( tags = setOf("IngenUtbetaling"), @@ -308,15 +368,25 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { førstegangsbehandling = false, behandlingId = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().id, perioderMedSammeSkjæringstidspunkt = listOf( - mapOf("vedtaksperiodeId" to 1.vedtaksperiode.id(a1).toString(), "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a1).toString(), "fom" to 1.januar.toString(), "tom" to 31.januar.toString()), - mapOf("vedtaksperiodeId" to 2.vedtaksperiode.id(a1).toString(), "behandlingId" to 2.vedtaksperiode.sisteBehandlingId(a1).toString(), "fom" to 1.februar.toString(), "tom" to 28.februar.toString()) + mapOf( + "vedtaksperiodeId" to 1.vedtaksperiode.id(a1).toString(), + "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a1).toString(), + "fom" to 1.januar.toString(), + "tom" to 31.januar.toString() + ), + mapOf( + "vedtaksperiodeId" to 2.vedtaksperiode.id(a1).toString(), + "behandlingId" to 2.vedtaksperiode.sisteBehandlingId(a1).toString(), + "fom" to 1.februar.toString(), + "tom" to 28.februar.toString() + ) ), sykepengegrunnlagsfakta = mapOf( "omregnetÅrsinntektTotalt" to INNTEKT.årlig, "sykepengegrunnlag" to INNTEKT.årlig, "6G" to 561_804.0, "fastsatt" to "EtterHovedregel", - "arbeidsgivere" to listOf ( + "arbeidsgivere" to listOf( mapOf( "arbeidsgiver" to a1, "omregnetÅrsinntekt" to INNTEKT.årlig @@ -335,7 +405,11 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - assertGodkjenningsbehov(tags = setOf("NegativArbeidsgiverutbetaling", "Personutbetaling"), kanAvvises = false, utbetalingstype = "REVURDERING") + assertGodkjenningsbehov( + tags = setOf("NegativArbeidsgiverutbetaling", "Personutbetaling"), + kanAvvises = false, + utbetalingstype = "REVURDERING" + ) } @Test @@ -347,7 +421,11 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - assertGodkjenningsbehov(tags = setOf("NegativPersonutbetaling", "Arbeidsgiverutbetaling"), kanAvvises = false, utbetalingstype = "REVURDERING") + assertGodkjenningsbehov( + tags = setOf("NegativPersonutbetaling", "Arbeidsgiverutbetaling"), + kanAvvises = false, + utbetalingstype = "REVURDERING" + ) } @Test @@ -362,20 +440,30 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { mapOf("organisasjonsnummer" to a2, "beløp" to 240000.0) ), perioderMedSammeSkjæringstidspunkt = listOf( - mapOf("vedtaksperiodeId" to 1.vedtaksperiode.id(a1).toString(), "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a1).toString(), "fom" to 1.januar.toString(), "tom" to 31.januar.toString()), - mapOf("vedtaksperiodeId" to 1.vedtaksperiode.id(a2).toString(), "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a2).toString(), "fom" to 1.januar.toString(), "tom" to 31.januar.toString()) + mapOf( + "vedtaksperiodeId" to 1.vedtaksperiode.id(a1).toString(), + "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a1).toString(), + "fom" to 1.januar.toString(), + "tom" to 31.januar.toString() + ), + mapOf( + "vedtaksperiodeId" to 1.vedtaksperiode.id(a2).toString(), + "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a2).toString(), + "fom" to 1.januar.toString(), + "tom" to 31.januar.toString() + ) ), sykepengegrunnlagsfakta = mapOf( "omregnetÅrsinntektTotalt" to 40_000.månedlig.årlig, "sykepengegrunnlag" to 40_000.månedlig.årlig, "6G" to 561_804.0, "fastsatt" to "EtterHovedregel", - "arbeidsgivere" to listOf ( + "arbeidsgivere" to listOf( mapOf( "arbeidsgiver" to a1, "omregnetÅrsinntekt" to 20000.månedlig.årlig ), - mapOf ( + mapOf( "arbeidsgiver" to a2, "omregnetÅrsinntekt" to 20000.månedlig.årlig ) @@ -387,13 +475,22 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { @Test fun `Periode med minst én navdag får Innvilget-tag`() { tilGodkjenning(januar, a1, beregnetInntekt = INNTEKT) - assertGodkjenningsbehov(tags = setOf("Innvilget", "Arbeidsgiverutbetaling", "EnArbeidsgiver")) + assertGodkjenningsbehov( + tags = setOf( + "Innvilget", + "Arbeidsgiverutbetaling", + "EnArbeidsgiver" + ) + ) } @Test fun `Periode uten noen navdager får Avslag-tag`() { håndterSykmelding(januar) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Søknad.Søknadsperiode.Ferie(1.januar, 31.januar)) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Søknad.Søknadsperiode.Ferie(1.januar, 31.januar) + ) håndterInntektsmelding(listOf(1.januar til 16.januar)) assertForventetFeil( forklaring = "Skal implementeres snarest", @@ -411,7 +508,13 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { fun `Periode med minst én navdag og minst én avslagsdag får DelvisInnvilget-tag`() { createTestPerson(Personidentifikator("18.01.1948"), 18.januar(1948)) tilGodkjenning(januar, a1, beregnetInntekt = INNTEKT) - assertGodkjenningsbehov(tags = setOf("DelvisInnvilget", "Arbeidsgiverutbetaling", "EnArbeidsgiver")) + assertGodkjenningsbehov( + tags = setOf( + "DelvisInnvilget", + "Arbeidsgiverutbetaling", + "EnArbeidsgiver" + ) + ) } @Test @@ -438,7 +541,10 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { fun `Periode uten navdager og avslagsdager får Avslag-tag`() { nyttVedtak(januar) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Søknad.Søknadsperiode.Ferie(1.februar, 28.februar)) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + Søknad.Søknadsperiode.Ferie(1.februar, 28.februar) + ) håndterYtelser(2.vedtaksperiode) assertGodkjenningsbehov( tags = setOf("Avslag", "IngenUtbetaling", "EnArbeidsgiver"), @@ -449,8 +555,18 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { førstegangsbehandling = false, behandlingId = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().id, perioderMedSammeSkjæringstidspunkt = listOf( - mapOf("vedtaksperiodeId" to 1.vedtaksperiode.id(ORGNUMMER).toString(), "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(ORGNUMMER).toString(), "fom" to 1.januar.toString(), "tom" to 31.januar.toString()), - mapOf("vedtaksperiodeId" to 2.vedtaksperiode.id(ORGNUMMER).toString(), "behandlingId" to 2.vedtaksperiode.sisteBehandlingId(ORGNUMMER).toString(), "fom" to 1.februar.toString(), "tom" to 28.februar.toString()) + mapOf( + "vedtaksperiodeId" to 1.vedtaksperiode.id(ORGNUMMER).toString(), + "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(ORGNUMMER).toString(), + "fom" to 1.januar.toString(), + "tom" to 31.januar.toString() + ), + mapOf( + "vedtaksperiodeId" to 2.vedtaksperiode.id(ORGNUMMER).toString(), + "behandlingId" to 2.vedtaksperiode.sisteBehandlingId(ORGNUMMER).toString(), + "fom" to 1.februar.toString(), + "tom" to 28.februar.toString() + ) ) ) } @@ -473,14 +589,24 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { periodeType = "FORLENGELSE", førstegangsbehandling = false, perioderMedSammeSkjæringstidspunkt = listOf( - mapOf("vedtaksperiodeId" to 1.vedtaksperiode.id(a1).toString(), "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a1).toString(), "fom" to 1.januar.toString(), "tom" to 31.januar.toString()), - mapOf("vedtaksperiodeId" to 2.vedtaksperiode.id(a1).toString(), "behandlingId" to 2.vedtaksperiode.sisteBehandlingId(a1).toString(), "fom" to 1.februar.toString(), "tom" to 28.februar.toString()), + mapOf( + "vedtaksperiodeId" to 1.vedtaksperiode.id(a1).toString(), + "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a1).toString(), + "fom" to 1.januar.toString(), + "tom" to 31.januar.toString() + ), + mapOf( + "vedtaksperiodeId" to 2.vedtaksperiode.id(a1).toString(), + "behandlingId" to 2.vedtaksperiode.sisteBehandlingId(a1).toString(), + "fom" to 1.februar.toString(), + "tom" to 28.februar.toString() + ), ) ) } @Test - fun `legger til hendelses ID'er og dokumenttype på godkjenningsbehovet` () { + fun `legger til hendelses ID'er og dokumenttype på godkjenningsbehovet`() { håndterSykmelding(januar) val søknadId = håndterSøknad(januar) val inntektsmeldingId = håndterInntektsmelding(listOf(1.januar til 16.januar)) @@ -496,11 +622,13 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { @Test fun `markerer sykepengegrunnlagsfakta som skjønnsfastsatt dersom én arbeidsgiver har fått skjønnmessig fastsatt sykepengegrunnlaget`() { - tilGodkjenning(januar, a1, a2, beregnetInntekt = 20000.månedlig) - håndterSkjønnsmessigFastsettelse(1.januar, arbeidsgiveropplysninger = listOf( + tilGodkjenning(januar, a1, a2, beregnetInntekt = 20000.månedlig) + håndterSkjønnsmessigFastsettelse( + 1.januar, arbeidsgiveropplysninger = listOf( OverstyrtArbeidsgiveropplysning(a1, 41000.månedlig), OverstyrtArbeidsgiveropplysning(a2, 30000.månedlig) - )) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -510,7 +638,7 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { "omregnetÅrsinntektTotalt" to 480000.0, "6G" to 561804.0, "fastsatt" to "EtterSkjønn", - "arbeidsgivere" to listOf ( + "arbeidsgivere" to listOf( mapOf( "arbeidsgiver" to a1, "omregnetÅrsinntekt" to 240000.0, @@ -528,27 +656,37 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { } private fun assertTags(tags: Set, vedtaksperiodeId: UUID = 1.vedtaksperiode.id(a1)) { - val actualtags = hentFelt>(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "tags") ?: emptySet() + val actualtags = + hentFelt>(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "tags") + ?: emptySet() assertTrue(actualtags.containsAll(tags)) val utkastTilVedtak = observatør.utkastTilVedtakEventer.last() assertEquals(actualtags, utkastTilVedtak.tags) } + private fun assertIngenTag(tag: String, vedtaksperiodeId: UUID = 1.vedtaksperiode.id(a1)) { - val actualtags = hentFelt>(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "tags") ?: emptySet() + val actualtags = + hentFelt>(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "tags") + ?: emptySet() assertFalse(actualtags.contains(tag)) val utkastTilVedtak = observatør.utkastTilVedtakEventer.last() assertFalse(utkastTilVedtak.tags.contains(tag)) } + private fun assertSykepengegrunnlagsfakta( vedtaksperiodeId: UUID = 1.vedtaksperiode.id(a1), sykepengegrunnlagsfakta: Map ) { - val actualSykepengegrunnlagsfakta = hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "sykepengegrunnlagsfakta")!! + val actualSykepengegrunnlagsfakta = hentFelt( + vedtaksperiodeId = vedtaksperiodeId, + feltNavn = "sykepengegrunnlagsfakta" + )!! assertEquals(sykepengegrunnlagsfakta, actualSykepengegrunnlagsfakta) } private fun assertHendelser(hendelser: Set, vedtaksperiodeId: UUID) { - val actualHendelser = hentFelt>(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "hendelser")!! + val actualHendelser = + hentFelt>(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "hendelser")!! assertEquals(hendelser, actualHendelser) } @@ -565,10 +703,20 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { førstegangsbehandling: Boolean = true, utbetalingstype: String = "UTBETALING", inntektskilde: String = "EN_ARBEIDSGIVER", - omregnedeÅrsinntekter: List> = listOf(mapOf("organisasjonsnummer" to a1, "beløp" to INNTEKT.årlig)), + omregnedeÅrsinntekter: List> = listOf( + mapOf( + "organisasjonsnummer" to a1, + "beløp" to INNTEKT.årlig + ) + ), behandlingId: UUID = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().id, perioderMedSammeSkjæringstidspunkt: List> = listOf( - mapOf("vedtaksperiodeId" to 1.vedtaksperiode.id(a1).toString(), "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a1).toString(), "fom" to 1.januar.toString(), "tom" to 31.januar.toString()), + mapOf( + "vedtaksperiodeId" to 1.vedtaksperiode.id(a1).toString(), + "behandlingId" to 1.vedtaksperiode.sisteBehandlingId(a1).toString(), + "fom" to 1.januar.toString(), + "tom" to 31.januar.toString() + ), ), sykepengegrunnlagsfakta: Map = mapOf( "omregnetÅrsinntektTotalt" to INNTEKT.årlig, @@ -583,19 +731,41 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { ) ) ) { - val actualtags = hentFelt>(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "tags") ?: emptySet() - val actualSkjæringstidspunkt = hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "skjæringstidspunkt")!! - val actualInntektskilde = hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "inntektskilde")!! - val actualPeriodetype = hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "periodetype")!! - val actualPeriodeFom = hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "periodeFom")!! - val actualPeriodeTom = hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "periodeTom")!! - val actualFørstegangsbehandling = hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "førstegangsbehandling")!! - val actualUtbetalingtype = hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "utbetalingtype")!! - val actualOrgnummereMedRelevanteArbeidsforhold = hentFelt>(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "orgnummereMedRelevanteArbeidsforhold")!! - val actualKanAvises = hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "kanAvvises")!! - val actualOmregnedeÅrsinntekter = hentFelt>>(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "omregnedeÅrsinntekter")!! - val actualBehandlingId = hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "behandlingId")!! - val actualPerioderMedSammeSkjæringstidspunkt = hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "perioderMedSammeSkjæringstidspunkt")!! + val actualtags = + hentFelt>(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "tags") + ?: emptySet() + val actualSkjæringstidspunkt = + hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "skjæringstidspunkt")!! + val actualInntektskilde = + hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "inntektskilde")!! + val actualPeriodetype = + hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "periodetype")!! + val actualPeriodeFom = + hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "periodeFom")!! + val actualPeriodeTom = + hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "periodeTom")!! + val actualFørstegangsbehandling = hentFelt( + vedtaksperiodeId = vedtaksperiodeId, + feltNavn = "førstegangsbehandling" + )!! + val actualUtbetalingtype = + hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "utbetalingtype")!! + val actualOrgnummereMedRelevanteArbeidsforhold = hentFelt>( + vedtaksperiodeId = vedtaksperiodeId, + feltNavn = "orgnummereMedRelevanteArbeidsforhold" + )!! + val actualKanAvises = + hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "kanAvvises")!! + val actualOmregnedeÅrsinntekter = hentFelt>>( + vedtaksperiodeId = vedtaksperiodeId, + feltNavn = "omregnedeÅrsinntekter" + )!! + val actualBehandlingId = + hentFelt(vedtaksperiodeId = vedtaksperiodeId, feltNavn = "behandlingId")!! + val actualPerioderMedSammeSkjæringstidspunkt = hentFelt( + vedtaksperiodeId = vedtaksperiodeId, + feltNavn = "perioderMedSammeSkjæringstidspunkt" + )!! hendelser?.let { assertHendelser(it, vedtaksperiodeId) } assertSykepengegrunnlagsfakta(vedtaksperiodeId, sykepengegrunnlagsfakta) @@ -619,7 +789,10 @@ internal class EndaEnGodkjenningsbehovTest : AbstractEndToEndTest() { assertEquals(vedtaksperiodeId, utkastTilVedtak.vedtaksperiodeId) } - private inline fun hentFelt(vedtaksperiodeId: UUID = 1.vedtaksperiode.id(a1), feltNavn: String) = + private inline fun hentFelt( + vedtaksperiodeId: UUID = 1.vedtaksperiode.id(a1), + feltNavn: String + ) = hendelselogg.etterspurtBehov( vedtaksperiodeId = vedtaksperiodeId, behov = Aktivitet.Behov.Behovtype.Godkjenning, diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FeriepengeE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FeriepengeE2ETest.kt index 907323ba20..766bd2da3c 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FeriepengeE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FeriepengeE2ETest.kt @@ -61,7 +61,10 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { @Test fun `person som har fått utbetalt direkte`() { - nyttVedtak(1.januar(2022) til 31.januar(2022), refusjon = Inntektsmelding.Refusjon(INGEN, null)) + nyttVedtak( + 1.januar(2022) til 31.januar(2022), + refusjon = Inntektsmelding.Refusjon(INGEN, null) + ) inspektør.utbetaling(0).let { utbetalingInspektør -> assertEquals(0, utbetalingInspektør.arbeidsgiverOppdrag.size) assertEquals(1, utbetalingInspektør.personOppdrag.size) @@ -73,9 +76,13 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { assertEquals(1605.5819999999999, inspektør.spleisFeriepengebeløpPerson.first()) assertEquals(0.0, inspektør.spleisFeriepengebeløpArbeidsgiver.first()) } + @Test fun `person som har både refusjon og direkte utbetaling`() { - nyttVedtak(1.januar(2022) til 31.januar(2022), refusjon = Inntektsmelding.Refusjon(INNTEKT / 2, null)) + nyttVedtak( + 1.januar(2022) til 31.januar(2022), + refusjon = Inntektsmelding.Refusjon(INNTEKT / 2, null) + ) inspektør.utbetaling(0).let { utbetalingInspektør -> assertEquals(1, utbetalingInspektør.arbeidsgiverOppdrag.size) assertEquals(1, utbetalingInspektør.personOppdrag.size) @@ -89,22 +96,43 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { assertEquals(0.0, inspektør.infotrygdFeriepengebeløpPerson.first()) assertEquals(0.0, inspektør.infotrygdFeriepengebeløpArbeidsgiver.first()) } + @Test fun `person som har både litt fra infotrygd og litt fra spleis`() { - nyttVedtak(1.januar(2022) til 31.januar(2022), refusjon = Inntektsmelding.Refusjon(INNTEKT / 2, null)) + nyttVedtak( + 1.januar(2022) til 31.januar(2022), + refusjon = Inntektsmelding.Refusjon(INNTEKT / 2, null) + ) inspektør.utbetaling(0).let { utbetalingInspektør -> assertEquals(1, utbetalingInspektør.arbeidsgiverOppdrag.size) assertEquals(1, utbetalingInspektør.personOppdrag.size) } - val dagsatsIT = (INNTEKT/2).dagligInt + val dagsatsIT = (INNTEKT / 2).dagligInt håndterUtbetalingshistorikkForFeriepenger( opptjeningsår = Year.of(2022), utbetalinger = listOf( - Arbeidsgiverutbetalingsperiode(ORGNUMMER, 17.mars(2022), 31.mars(2022), dagsatsIT, 31.mars(2022)), - Personutbetalingsperiode(ORGNUMMER, 17.mars(2022), 31.mars(2022), dagsatsIT, 31.mars(2022)) + Arbeidsgiverutbetalingsperiode( + ORGNUMMER, + 17.mars(2022), + 31.mars(2022), + dagsatsIT, + 31.mars(2022) + ), + Personutbetalingsperiode( + ORGNUMMER, + 17.mars(2022), + 31.mars(2022), + dagsatsIT, + 31.mars(2022) + ) ), feriepengehistorikk = listOf( - UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 802, 1.mai(2023), 31.mai(2023)), + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 802, + 1.mai(2023), + 31.mai(2023) + ), UtbetalingshistorikkForFeriepenger.Feriepenger("0", 802, 1.mai(2023), 31.mai(2023)) ) ) @@ -114,19 +142,35 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { assertEquals(802.2299999999999, inspektør.infotrygdFeriepengebeløpArbeidsgiver.first()) assertEquals(802.2299999999999, inspektør.infotrygdFeriepengebeløpPerson.first()) } + @Test fun `person som har både litt fra infotrygd og litt fra spleis med forskjellig refusjon`() { - nyttVedtak(1.januar(2022) til 31.januar(2022), refusjon = Inntektsmelding.Refusjon(INNTEKT / 3, null)) + nyttVedtak( + 1.januar(2022) til 31.januar(2022), + refusjon = Inntektsmelding.Refusjon(INNTEKT / 3, null) + ) inspektør.utbetaling(0).let { utbetalingInspektør -> assertEquals(1, utbetalingInspektør.arbeidsgiverOppdrag.size) assertEquals(1, utbetalingInspektør.personOppdrag.size) } - val dagsatsIT = (INNTEKT/2).dagligInt + val dagsatsIT = (INNTEKT / 2).dagligInt håndterUtbetalingshistorikkForFeriepenger( opptjeningsår = Year.of(2022), utbetalinger = listOf( - Arbeidsgiverutbetalingsperiode(ORGNUMMER, 17.mars(2022), 31.desember(2022), dagsatsIT, 31.mars(2022)), - Personutbetalingsperiode(ORGNUMMER, 17.mars(2022), 31.desember(2022), dagsatsIT, 31.mars(2022)) + Arbeidsgiverutbetalingsperiode( + ORGNUMMER, + 17.mars(2022), + 31.desember(2022), + dagsatsIT, + 31.mars(2022) + ), + Personutbetalingsperiode( + ORGNUMMER, + 17.mars(2022), + 31.desember(2022), + dagsatsIT, + 31.mars(2022) + ) ) ) @@ -145,27 +189,36 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { klassekode = Klassekode.RefusjonFeriepengerIkkeOpplysningspliktig, endringskode = Endringskode.NY ), Feriepengeutbetalingslinje( - fom = 1.mai(2023), - tom = 31.mai(2023), - satstype = Satstype.Engang, - beløp = 268, - grad = null, - klassekode = Klassekode.SykepengerArbeidstakerFeriepenger, - endringskode = Endringskode.NY - ) + fom = 1.mai(2023), + tom = 31.mai(2023), + satstype = Satstype.Engang, + beløp = 268, + grad = null, + klassekode = Klassekode.SykepengerArbeidstakerFeriepenger, + endringskode = Endringskode.NY + ) ) assertEquals(utbetalingslinjer, inspektør.feriepengeoppdrag.utbetalingslinjer) } @Test fun `Infotrygd har betalt ut 48 dager til person - Spleis har utbetalt 48 i forkant`() { - nyttVedtak(1.januar(2022) til 31.mars(2022), refusjon = Inntektsmelding.Refusjon(INGEN, null)) + nyttVedtak( + 1.januar(2022) til 31.mars(2022), + refusjon = Inntektsmelding.Refusjon(INGEN, null) + ) val dagsatsIT = 1574 håndterUtbetalingshistorikkForFeriepenger( opptjeningsår = Year.of(2022), utbetalinger = listOf( - Personutbetalingsperiode(ORGNUMMER, 1.august(2022), 31.oktober(2022), dagsatsIT, 31.mars(2022)) + Personutbetalingsperiode( + ORGNUMMER, + 1.august(2022), + 31.oktober(2022), + dagsatsIT, + 31.mars(2022) + ) ) ) assertEquals(0.0, inspektør.spleisFeriepengebeløpArbeidsgiver.first()) @@ -173,29 +226,40 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { assertEquals(7006.1759999999995, inspektør.spleisFeriepengebeløpPerson.first()) assertEquals(0.0, inspektør.infotrygdFeriepengebeløpPerson.first()) - val utbetalingslinje = listOf(Feriepengeutbetalingslinje( - fom = 1.mai(2023), - tom = 31.mai(2023), - satstype = Satstype.Engang, - beløp = -700, - grad = null, - klassekode = Klassekode.SykepengerArbeidstakerFeriepenger, - endringskode = Endringskode.NY - )) + val utbetalingslinje = listOf( + Feriepengeutbetalingslinje( + fom = 1.mai(2023), + tom = 31.mai(2023), + satstype = Satstype.Engang, + beløp = -700, + grad = null, + klassekode = Klassekode.SykepengerArbeidstakerFeriepenger, + endringskode = Endringskode.NY + ) + ) assertEquals(utbetalingslinje, inspektør.feriepengeoppdrag.utbetalingslinjer) } @Test fun `Spleis utbetaler feriepenger til person, blir annullert i Spleis mellom første og andre kjøring`() { - nyttVedtak(1.januar(2022) til 31.mars(2022), refusjon = Inntektsmelding.Refusjon(INGEN, null)) + nyttVedtak( + 1.januar(2022) til 31.mars(2022), + refusjon = Inntektsmelding.Refusjon(INGEN, null) + ) val dagsatsIT = 1574 // Første kjøring håndterUtbetalingshistorikkForFeriepenger( opptjeningsår = Year.of(2022), utbetalinger = listOf( - Personutbetalingsperiode(ORGNUMMER, 1.august(2022), 31.oktober(2022), dagsatsIT, 31.mars(2022)) + Personutbetalingsperiode( + ORGNUMMER, + 1.august(2022), + 31.oktober(2022), + dagsatsIT, + 31.mars(2022) + ) ) ) assertEquals(0.0, inspektør.spleisFeriepengebeløpArbeidsgiver.first()) @@ -203,15 +267,17 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { assertEquals(7006.1759999999995, inspektør.spleisFeriepengebeløpPerson.first()) assertEquals(0.0, inspektør.infotrygdFeriepengebeløpPerson.first()) - val utbetalingslinje = listOf(Feriepengeutbetalingslinje( - fom = 1.mai(2023), - tom = 31.mai(2023), - satstype = Satstype.Engang, - beløp = -700, - grad = null, - klassekode = Klassekode.SykepengerArbeidstakerFeriepenger, - endringskode = Endringskode.NY - )) + val utbetalingslinje = listOf( + Feriepengeutbetalingslinje( + fom = 1.mai(2023), + tom = 31.mai(2023), + satstype = Satstype.Engang, + beløp = -700, + grad = null, + klassekode = Klassekode.SykepengerArbeidstakerFeriepenger, + endringskode = Endringskode.NY + ) + ) assertEquals(utbetalingslinje, inspektør.feriepengeoppdrag.utbetalingslinjer) håndterAnnullerUtbetaling( @@ -222,27 +288,44 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { håndterUtbetalingshistorikkForFeriepenger( opptjeningsår = Year.of(2022), utbetalinger = listOf( - Personutbetalingsperiode(ORGNUMMER, 17.januar(2022), 31.mars(2022), dagsatsIT, 31.mars(2022)), - Personutbetalingsperiode(ORGNUMMER, 1.august(2022), 31.oktober(2022), dagsatsIT, 31.oktober(2022)) + Personutbetalingsperiode( + ORGNUMMER, + 17.januar(2022), + 31.mars(2022), + dagsatsIT, + 31.mars(2022) + ), + Personutbetalingsperiode( + ORGNUMMER, + 1.august(2022), + 31.oktober(2022), + dagsatsIT, + 31.oktober(2022) + ) ) ) - val utbetalingslinjerAndreKjøring = listOf(Feriepengeutbetalingslinje( - fom = 1.mai(2023), - tom = 31.mai(2023), - satstype = Satstype.Engang, - beløp = -700, - grad = null, - klassekode = Klassekode.SykepengerArbeidstakerFeriepenger, - endringskode = Endringskode.ENDR, - statuskode = "OPPH" - )) + val utbetalingslinjerAndreKjøring = listOf( + Feriepengeutbetalingslinje( + fom = 1.mai(2023), + tom = 31.mai(2023), + satstype = Satstype.Engang, + beløp = -700, + grad = null, + klassekode = Klassekode.SykepengerArbeidstakerFeriepenger, + endringskode = Endringskode.ENDR, + statuskode = "OPPH" + ) + ) assertEquals(utbetalingslinjerAndreKjøring, inspektør.feriepengeoppdrag.utbetalingslinjer) } @Test fun `serialiserer og deserialiserer Spleis feriepengebeløp for person`() { - nyttVedtak(1.januar(2022) til 31.januar(2022), refusjon = Inntektsmelding.Refusjon(INGEN, null)) + nyttVedtak( + 1.januar(2022) til 31.januar(2022), + refusjon = Inntektsmelding.Refusjon(INGEN, null) + ) håndterUtbetalingshistorikkForFeriepenger( opptjeningsår = Year.of(2022) ) @@ -279,7 +362,10 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { Klassekode.RefusjonFeriepengerIkkeOpplysningspliktig, Endringskode.NY ) - assertEquals(utbetalingslinje, inspektør.feriepengeoppdrag.first().feriepengeutbetalingslinjer.first()) + assertEquals( + utbetalingslinje, + inspektør.feriepengeoppdrag.first().feriepengeutbetalingslinjer.first() + ) } @Test @@ -304,7 +390,14 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 31.mars(2020) ) ), - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 3211, 1.mai(2021), 31.mai(2021))) + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 3211, + 1.mai(2021), + 31.mai(2021) + ) + ) ) assertEquals(1431 * 22 * 0.102, inspektør.infotrygdFeriepengebeløpArbeidsgiver.first()) @@ -320,13 +413,22 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { Klassekode.RefusjonFeriepengerIkkeOpplysningspliktig, Endringskode.NY ) - assertEquals(utbetalingslinje, inspektør.feriepengeoppdrag.first().feriepengeutbetalingslinjer.first()) + assertEquals( + utbetalingslinje, + inspektør.feriepengeoppdrag.first().feriepengeutbetalingslinjer.first() + ) } @Test fun `Legger ikke infotrygdcache til grunn for feriepenger`() { håndterUtbetalingshistorikkEtterInfotrygdendring( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar(2020), 31.januar(2020), 100.prosent, INNTEKT), + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar(2020), + 31.januar(2020), + 100.prosent, + INNTEKT + ), inntektshistorikk = listOf( Inntektsopplysning(ORGNUMMER, 1.januar(2020), INNTEKT, true) ) @@ -351,7 +453,14 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 31.januar(2020) ) ), - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 3357, 1.mai(2021), 31.mai(2021))) + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 3357, + 1.mai(2021), + 31.mai(2021) + ) + ) ) assertEquals(1431 * 23 * 0.102, inspektør.infotrygdFeriepengebeløpArbeidsgiver.first()) @@ -367,7 +476,10 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { Klassekode.RefusjonFeriepengerIkkeOpplysningspliktig, Endringskode.NY ) - assertEquals(utbetalingslinje, inspektør.feriepengeoppdrag.first().feriepengeutbetalingslinjer.first()) + assertEquals( + utbetalingslinje, + inspektør.feriepengeoppdrag.first().feriepengeutbetalingslinjer.first() + ) } @Test @@ -387,7 +499,10 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { ) assertEquals(0, inspektør.feriepengeoppdrag.size) - assertTrue(person.personLogg.toString().contains("Person er markert for manuell beregning av feriepenger")) + assertTrue( + person.personLogg.toString() + .contains("Person er markert for manuell beregning av feriepenger") + ) } @Test @@ -412,7 +527,14 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 1.desember(2020) ) ), - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 2142, 1.mai(2021), 31.mai(2021))) + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 2142, + 1.mai(2021), + 31.mai(2021) + ) + ) ) assertEquals(2, inspektør.feriepengeoppdrag.size) assertEquals(1, engangsutbetalinger().size) @@ -428,7 +550,14 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 1.desember(2020) ) ), - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 2142, 1.mai(2021), 31.mai(2021))) + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 2142, + 1.mai(2021), + 31.mai(2021) + ) + ) ) assertEquals(4, inspektør.feriepengeoppdrag.size) @@ -458,13 +587,26 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 1.desember(2020) ) ), - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER2, 2142, 1.mai(2021), 31.mai(2021))) + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER2, + 2142, + 1.mai(2021), + 31.mai(2021) + ) + ) ) assertEquals(2, inspektør.feriepengeoppdrag.size) assertEquals(2, inspektør(ORGNUMMER2).feriepengeoppdrag.size) - assertEquals(7006, inspektør.feriepengeoppdrag.first().feriepengeutbetalingslinjer.first().beløp) - assertEquals(-2142, inspektør(ORGNUMMER2).feriepengeoppdrag.first().feriepengeutbetalingslinjer.first().beløp) + assertEquals( + 7006, + inspektør.feriepengeoppdrag.first().feriepengeutbetalingslinjer.first().beløp + ) + assertEquals( + -2142, + inspektør(ORGNUMMER2).feriepengeoppdrag.first().feriepengeutbetalingslinjer.first().beløp + ) } @Test @@ -481,7 +623,14 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 1.desember(2020) ) ), - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER2, 2142, 1.mai(2021), 31.mai(2021))) + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER2, + 2142, + 1.mai(2021), + 31.mai(2021) + ) + ) ) håndterSykmelding(Sykmeldingsperiode(1.juni(2020), 30.august(2020))) håndterSøknad(1.juni(2020) til 30.august(2020)) @@ -522,8 +671,18 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { ) ), feriepengehistorikk = listOf( - UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 3357, 1.mai(2021), 31.mai(2021)), - UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 4000, 1.mai(2021), 31.mai(2021)) + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 3357, + 1.mai(2021), + 31.mai(2021) + ), + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 4000, + 1.mai(2021), + 31.mai(2021) + ) ) ) }.also { loggmeldinger -> @@ -556,8 +715,18 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { ) ), feriepengehistorikk = listOf( - UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 3356, 1.mai(2021), 31.mai(2021)), - UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 4000, 1.mai(2021), 31.mai(2021)) + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 3356, + 1.mai(2021), + 31.mai(2021) + ), + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 4000, + 1.mai(2021), + 31.mai(2021) + ) ) ) }.also { loggmeldinger -> @@ -581,7 +750,12 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { håndterUtbetalingshistorikkForFeriepenger( opptjeningsår = Year.of(2020), feriepengehistorikk = listOf( - UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 4000, 1.mai(2021), 31.mai(2021)) + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 4000, + 1.mai(2021), + 31.mai(2021) + ) ) ) }.also { loggmeldinger -> @@ -610,7 +784,8 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { assertEquals(person.personLogg.behov.last().detaljer()["saksbehandler"], "SPLEIS") @Suppress("unchecked_cast") - val linje = (person.personLogg.behov.last().detaljer()["linjer"] as ArrayList>).first() + val linje = (person.personLogg.behov.last() + .detaljer()["linjer"] as ArrayList>).first() assertEquals(linje["satstype"], "ENG") assertEquals(linje["klassekode"], "SPREFAGFER-IOP") assertEquals(linje["grad"], null) @@ -631,7 +806,9 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { opptjeningsår = Year.of(2020) ) - val fagsystemIdFeriepenger = person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Utbetaling).detaljer()["fagsystemId"] as String + val fagsystemIdFeriepenger = + person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Utbetaling) + .detaljer()["fagsystemId"] as String håndterFeriepengerUtbetalt(fagsystemId = fagsystemIdFeriepenger) assertTrue(person.personLogg.toString().contains("Data for feriepenger fra Oppdrag/UR")) @@ -660,7 +837,9 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { opptjeningsår = Year.of(2020) ) - val fagsystemIdFeriepenger = person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Utbetaling).detaljer()["fagsystemId"] as String + val fagsystemIdFeriepenger = + person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Utbetaling) + .detaljer()["fagsystemId"] as String håndterFeriepengerUtbetalt(fagsystemId = fagsystemIdFeriepenger) håndterSykmelding(Sykmeldingsperiode(1.juli(2020), 10.juli(2020))) @@ -693,10 +872,11 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { val linje = (event.arbeidsgiverOppdrag.linjer).first() assertEquals("2021-05-01", linje.fom.toString()) assertEquals("2021-05-31", linje.tom.toString()) - assertEquals("2627", linje.totalbeløp.toString()) + assertEquals("2627", linje.totalbeløp.toString()) } - val feriepengerUtbetaltEndretEventer = observatør.utbetaltEndretEventer.filter { it.type == Utbetalingtype.FERIEPENGER.name } + val feriepengerUtbetaltEndretEventer = + observatør.utbetaltEndretEventer.filter { it.type == Utbetalingtype.FERIEPENGER.name } assertEquals(2, feriepengerUtbetaltEndretEventer.size) } @@ -710,7 +890,9 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { håndterUtbetalingshistorikkForFeriepenger( opptjeningsår = Year.of(2020) ) - assertFalse(person.personLogg.toString().contains("Trenger å sende utbetaling til Oppdrag")) + assertFalse( + person.personLogg.toString().contains("Trenger å sende utbetaling til Oppdrag") + ) } } @@ -731,7 +913,8 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { ) @Suppress("unchecked_cast") - val linje = (person.personLogg.behov.last().detaljer()["linjer"] as ArrayList>).first() + val linje = (person.personLogg.behov.last() + .detaljer()["linjer"] as ArrayList>).first() assertEquals("1460", "${linje["sats"]}") assertEquals("1460", "${linje["totalbeløp"]}") @@ -762,7 +945,14 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 30.juni(2020) ) ), - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, (10 * 690 * 0.102).roundToInt(), 1.mai, 31.mai)), + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + (10 * 690 * 0.102).roundToInt(), + 1.mai, + 31.mai + ) + ), opptjeningsår = Year.of(2020) ) @@ -795,7 +985,14 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 30.juni(2020) ) ), // 10 dager - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, (10 * 690 * 0.102).roundToInt(), 1.mai, 31.mai)), + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + (10 * 690 * 0.102).roundToInt(), + 1.mai, + 31.mai + ) + ), opptjeningsår = Year.of(2020) ) @@ -830,7 +1027,14 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 30.juni(2020) ) ), // 10 dager - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, (10 * 690 * 0.102).roundToInt(), 1.mai, 31.mai)), + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + (10 * 690 * 0.102).roundToInt(), + 1.mai, + 31.mai + ) + ), opptjeningsår = Year.of(2020) ) håndterUtbetalingshistorikkForFeriepenger( @@ -843,7 +1047,14 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 30.juni(2020) ) ), // 10 dager - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, (10 * 690 * 0.102).roundToInt(), 1.mai, 31.mai)), + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + (10 * 690 * 0.102).roundToInt(), + 1.mai, + 31.mai + ) + ), opptjeningsår = Year.of(2020) ) @@ -887,7 +1098,14 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 30.juni(2020) ) ), // 10 dager - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, (10 * 690 * 0.102).roundToInt(), 1.mai, 31.mai)), + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + (10 * 690 * 0.102).roundToInt(), + 1.mai, + 31.mai + ) + ), opptjeningsår = Year.of(2020) ) @@ -929,7 +1147,14 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { 30.juni(2020) ) ), // 10 dager - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, (10 * 690 * 0.102).roundToInt(), 1.mai, 31.mai)), + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + (10 * 690 * 0.102).roundToInt(), + 1.mai, + 31.mai + ) + ), opptjeningsår = Year.of(2020) ) } @@ -1031,7 +1256,10 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.oktober(2020), 14.desember(2020))) håndterSøknad(1.oktober(2020) til 14.desember(2020)) // 41 dager - håndterInntektsmelding(listOf(1.oktober(2020) til 16.oktober(2020)), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.oktober(2020) til 16.oktober(2020)), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -1076,9 +1304,22 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { håndterUtbetalingshistorikkForFeriepenger( opptjeningsår = Year.of(2020), utbetalinger = listOf( - Personutbetalingsperiode(ORGNUMMER, 1.september(2020), 15.september(2020), 1172, 20.september(2020)), + Personutbetalingsperiode( + ORGNUMMER, + 1.september(2020), + 15.september(2020), + 1172, + 20.september(2020) + ), ), - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 3211, 1.mai(2021), 31.mai(2021))) + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 3211, + 1.mai(2021), + 31.mai(2021) + ) + ) ) }.also { loggmeldinger -> assertTrue(loggmeldinger.isNotEmpty()) @@ -1106,9 +1347,22 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { håndterUtbetalingshistorikkForFeriepenger( opptjeningsår = Year.of(2020), utbetalinger = listOf( - Personutbetalingsperiode(ORGNUMMER, 1.januar(2020), 6.mars(2020), 1172, 20.mars(2020)), + Personutbetalingsperiode( + ORGNUMMER, + 1.januar(2020), + 6.mars(2020), + 1172, + 20.mars(2020) + ), ), - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger(ORGNUMMER, 5738, 1.mai(2021), 31.mai(2021))) + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + ORGNUMMER, + 5738, + 1.mai(2021), + 31.mai(2021) + ) + ) ) }.also { loggmeldinger -> assertTrue(loggmeldinger.isEmpty()) @@ -1131,9 +1385,22 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { håndterUtbetalingshistorikkForFeriepenger( opptjeningsår = Year.of(2020), utbetalinger = listOf( - Personutbetalingsperiode("0", 1.september(2020), 15.september(2020), 1172, 20.september(2020)), + Personutbetalingsperiode( + "0", + 1.september(2020), + 15.september(2020), + 1172, + 20.september(2020) + ), ), - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger("0", 3211, 1.mai(2021), 31.mai(2021))) + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + "0", + 3211, + 1.mai(2021), + 31.mai(2021) + ) + ) ) }.also { loggmeldinger -> assertTrue(loggmeldinger.isNotEmpty()) @@ -1162,9 +1429,22 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { opptjeningsår = Year.of(2020), utbetalinger = listOf( // Ikke funksjonelt gyldig med refusjon til orgnr 0 - Arbeidsgiverutbetalingsperiode("0", 1.september(2020), 15.september(2020), 1172, 20.september(2020)), + Arbeidsgiverutbetalingsperiode( + "0", + 1.september(2020), + 15.september(2020), + 1172, + 20.september(2020) + ), ), - feriepengehistorikk = listOf(UtbetalingshistorikkForFeriepenger.Feriepenger("0", 3211, 1.mai(2021), 31.mai(2021))) + feriepengehistorikk = listOf( + UtbetalingshistorikkForFeriepenger.Feriepenger( + "0", + 3211, + 1.mai(2021), + 31.mai(2021) + ) + ) ) }.also { loggmeldinger -> assertTrue(loggmeldinger.isNotEmpty()) @@ -1178,7 +1458,10 @@ internal class FeriepengeE2ETest : AbstractEndToEndTest() { private fun engangsutbetalinger() = person.personLogg.behov .filter { it.type == Aktivitet.Behov.Behovtype.Utbetaling } - .filter { utbetaling -> utbetaling.detaljer()["linjer"].castAsList>().any { linje -> linje["satstype"] == "ENG" } } + .filter { utbetaling -> + utbetaling.detaljer()["linjer"].castAsList>() + .any { linje -> linje["satstype"] == "ENG" } + } private fun Aktivitet.Behov.linje() = this .detaljer()["linjer"].castAsList>() diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FjerneGodkjenningsbehovTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FjerneGodkjenningsbehovTest.kt index eab5f2469c..43c2b67204 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FjerneGodkjenningsbehovTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FjerneGodkjenningsbehovTest.kt @@ -21,7 +21,7 @@ import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -internal class FjerneGodkjenningsbehovTest: AbstractDslTest() { +internal class FjerneGodkjenningsbehovTest : AbstractDslTest() { @Test fun `mottak av vedtak fattet fungerer på samme måte som godkjenningsbehov med tommel opp`() { @@ -55,7 +55,16 @@ internal class FjerneGodkjenningsbehovTest: AbstractDslTest() { håndterVedtakFattet(1.vedtaksperiode) håndterUtbetalt() assertEquals(UTBETALT, inspektør.utbetalingtilstand(0)) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT * 1.1, forklaring = "forklaring"))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT * 1.1, + forklaring = "forklaring" + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING) @@ -74,14 +83,26 @@ internal class FjerneGodkjenningsbehovTest: AbstractDslTest() { håndterVedtakFattet(1.vedtaksperiode) håndterUtbetalt() assertEquals(UTBETALT, inspektør.utbetalingtilstand(0)) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT * 1.1, forklaring = "forklaring"))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT * 1.1, + forklaring = "forklaring" + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING) håndterKanIkkeBehandlesHer(1.vedtaksperiode, automatisert = true) assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING) assertEquals(IKKE_GODKJENT, inspektør.utbetalingtilstand(1)) - assertInfo("Revurderingen ble avvist automatisk - hindrer tilstandsendring for å unngå saker som blir stuck", 1.vedtaksperiode.filter()) + assertInfo( + "Revurderingen ble avvist automatisk - hindrer tilstandsendring for å unngå saker som blir stuck", + 1.vedtaksperiode.filter() + ) } } @@ -92,7 +113,16 @@ internal class FjerneGodkjenningsbehovTest: AbstractDslTest() { håndterVedtakFattet(1.vedtaksperiode) håndterUtbetalt() assertEquals(UTBETALT, inspektør.utbetalingtilstand(0)) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT * 1.1, forklaring = "forklaring"))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT * 1.1, + forklaring = "forklaring" + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING) @@ -163,4 +193,4 @@ internal class FjerneGodkjenningsbehovTest: AbstractDslTest() { ) } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastForlengelseAvForkastetPeriodeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastForlengelseAvForkastetPeriodeTest.kt index 2d60771b93..9fab28a5f6 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastForlengelseAvForkastetPeriodeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastForlengelseAvForkastetPeriodeTest.kt @@ -60,9 +60,19 @@ internal class ForkastForlengelseAvForkastetPeriodeTest : AbstractEndToEndTest() håndterSøknad(15.januar til 30.januar) håndterSykmelding(Sykmeldingsperiode(31.januar, 15.februar)) håndterSøknad(31.januar til 15.februar) - håndterSykmelding(Sykmeldingsperiode(16.januar, 31.januar)) // overlapper med vedtaksperiode 1 og vedtaksperiode 2 + håndterSykmelding( + Sykmeldingsperiode( + 16.januar, + 31.januar + ) + ) // overlapper med vedtaksperiode 1 og vedtaksperiode 2 håndterSøknad(16.januar til 31.januar) // overlapper med vedtaksperiode 1 og vedtaksperiode 2 - håndterSykmelding(Sykmeldingsperiode(1.februar, 16.februar)) // overlapper med vedtaksperiode 2 + håndterSykmelding( + Sykmeldingsperiode( + 1.februar, + 16.februar + ) + ) // overlapper med vedtaksperiode 2 håndterSøknad(1.februar til 16.februar) // overlapper med vedtaksperiode 2 håndterSykmelding(Sykmeldingsperiode(19.februar, 8.mars)) // forlenger overlappende håndterSøknad(19.februar til 8.mars) // forlenger overlappende @@ -72,12 +82,27 @@ internal class ForkastForlengelseAvForkastetPeriodeTest : AbstractEndToEndTest() assertTrue(observatør.hendelseider(3.vedtaksperiode.id(ORGNUMMER)).isNotEmpty()) assertTrue(observatør.hendelseider(4.vedtaksperiode.id(ORGNUMMER)).isNotEmpty()) assertTrue(observatør.hendelseider(5.vedtaksperiode.id(ORGNUMMER)).isNotEmpty()) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) assertForkastetPeriodeTilstander(3.vedtaksperiode, START, TIL_INFOTRYGD) assertForkastetPeriodeTilstander(4.vedtaksperiode, START, TIL_INFOTRYGD) assertForkastetPeriodeTilstander(5.vedtaksperiode, START, TIL_INFOTRYGD) - assertFunksjonellFeil("Overlappende søknad starter før, eller slutter etter, opprinnelig periode", 1.vedtaksperiode.filter()) + assertFunksjonellFeil( + "Overlappende søknad starter før, eller slutter etter, opprinnelig periode", + 1.vedtaksperiode.filter() + ) } @Test @@ -141,19 +166,24 @@ internal class ForkastForlengelseAvForkastetPeriodeTest : AbstractEndToEndTest() } @Test - fun `forkaster også overlappende perioder som er uferdig`(){ + fun `forkaster også overlappende perioder som er uferdig`() { nyPeriode(januar) forkastAlle() nyPeriode(mars) nyPeriode(1.februar til 31.mars) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) assertForkastetPeriodeTilstander(3.vedtaksperiode, START, TIL_INFOTRYGD) } @Test - fun `forkaster etterfølgende perioder som er uferdig`(){ + fun `forkaster etterfølgende perioder som er uferdig`() { nyPeriode(januar) forkastAlle() @@ -162,14 +192,29 @@ internal class ForkastForlengelseAvForkastetPeriodeTest : AbstractEndToEndTest() nyPeriode(juni) nyPeriode(februar) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(4.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 4.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) assertForkastetPeriodeTilstander(5.vedtaksperiode, START, TIL_INFOTRYGD) } @Test - fun `forkaster ikke etterfølgende perioder som er avsluttet`(){ + fun `forkaster ikke etterfølgende perioder som er avsluttet`() { nyPeriode(januar) forkastAlle() @@ -197,11 +242,37 @@ internal class ForkastForlengelseAvForkastetPeriodeTest : AbstractEndToEndTest() nyPeriode(februar) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(4.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(5.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 4.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 5.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) assertForkastetPeriodeTilstander(6.vedtaksperiode, START, TIL_INFOTRYGD) } @@ -230,23 +301,58 @@ internal class ForkastForlengelseAvForkastetPeriodeTest : AbstractEndToEndTest() nyPeriode(10.februar til 20.februar, a2) nyPeriode(februar, a1) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD, orgnummer = a1) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD, orgnummer = a1) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD, + orgnummer = a1 + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD, + orgnummer = a1 + ) assertForkastetPeriodeTilstander(3.vedtaksperiode, START, TIL_INFOTRYGD, orgnummer = a1) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD, orgnummer = a2) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD, + orgnummer = a2 + ) } @Test fun `Hensyntar ikke periode på overlappende søknad som forkastes når vi vurderer forlengelse fra Infotrygd`() { nyPeriode(7.juni til 28.juni) håndterSøknad(27.mai til 15.juni) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertFunksjonellFeil("Overlappende søknad starter før, eller slutter etter, opprinnelig periode", 1.vedtaksperiode.filter()) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertFunksjonellFeil( + "Overlappende søknad starter før, eller slutter etter, opprinnelig periode", + 1.vedtaksperiode.filter() + ) nyPeriode(16.juni til 16.juli) assertEquals(7.juni til 28.juni, inspektør.periode(1.vedtaksperiode)) assertEquals(27.mai til 15.juni, inspektør.periode(2.vedtaksperiode)) assertEquals(16.juni til 16.juli, inspektør.periode(3.vedtaksperiode)) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) assertForkastetPeriodeTilstander(2.vedtaksperiode, START, TIL_INFOTRYGD) assertForkastetPeriodeTilstander(3.vedtaksperiode, START, TIL_INFOTRYGD) } @@ -279,7 +385,7 @@ internal class ForkastForlengelseAvForkastetPeriodeTest : AbstractEndToEndTest() } @Test - fun `person som kun har helg mellom to sykefraværstilfeller skal ikke få to funksjonelle feil når den kastes ut pga for lite gap` () { + fun `person som kun har helg mellom to sykefraværstilfeller skal ikke få to funksjonelle feil når den kastes ut pga for lite gap`() { nyPeriode(1.januar til 19.januar) person.søppelbøtte(forrigeHendelse, 1.januar til 19.januar) @@ -290,7 +396,7 @@ internal class ForkastForlengelseAvForkastetPeriodeTest : AbstractEndToEndTest() } @Test - fun `søknad som har mindre enn 20 dagers gap til en forkastet periode og overlapper med en annen forkastet periode skal kun få én funksjonell feil` () { + fun `søknad som har mindre enn 20 dagers gap til en forkastet periode og overlapper med en annen forkastet periode skal kun få én funksjonell feil`() { nyPeriode(1.januar til 17.januar) nyPeriode(18.januar til 31.januar) person.søppelbøtte(forrigeHendelse, januar) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastSykmeldingsperioderTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastSykmeldingsperioderTest.kt index cd6e7c242b..9405c2399c 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastSykmeldingsperioderTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastSykmeldingsperioderTest.kt @@ -13,10 +13,10 @@ import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -internal class ForkastSykmeldingsperioderTest: AbstractDslTest() { +internal class ForkastSykmeldingsperioderTest : AbstractDslTest() { @Test - fun `Forkaster sykmeldingsperioder slik at den andre arbeidsgiveren kan behandles`(){ + fun `Forkaster sykmeldingsperioder slik at den andre arbeidsgiveren kan behandles`() { a1 { håndterSykmelding(januar) } @@ -58,7 +58,15 @@ internal class ForkastSykmeldingsperioderTest: AbstractDslTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterUtbetalingshistorikkEtterInfotrygdendring( - utbetalinger = listOf(ArbeidsgiverUtbetalingsperiode(a1, 17.januar, 31.januar, 100.prosent, INNTEKT)) + utbetalinger = listOf( + ArbeidsgiverUtbetalingsperiode( + a1, + 17.januar, + 31.januar, + 100.prosent, + INNTEKT + ) + ) ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) val sisteVedtaksperiodeventer = observatør.vedtaksperiodeVenter.last() @@ -80,4 +88,4 @@ internal class ForkastSykmeldingsperioderTest: AbstractDslTest() { assertVarsel(RV_IT_3) } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkasteAuuTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkasteAuuTest.kt index 9aface862e..993d3cc76b 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkasteAuuTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkasteAuuTest.kt @@ -24,7 +24,7 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Test -internal class ForkasteAuuTest: AbstractDslTest() { +internal class ForkasteAuuTest : AbstractDslTest() { @Test fun `En auu vegg i vegg til neste periode forkastes`() { @@ -33,8 +33,16 @@ internal class ForkasteAuuTest: AbstractDslTest() { nyPeriode(17.januar til 31.januar) nullstillTilstandsendringer() håndterAnmodningOmForkasting(2.vedtaksperiode) - assertForkastetPeriodeTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } } @@ -45,8 +53,16 @@ internal class ForkasteAuuTest: AbstractDslTest() { nyPeriode(18.januar til 31.januar) nullstillTilstandsendringer() håndterAnmodningOmForkasting(2.vedtaksperiode) - assertForkastetPeriodeTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } } @@ -76,9 +92,25 @@ internal class ForkasteAuuTest: AbstractDslTest() { nyPeriode(2.januar til 16.januar) nyPeriode(17.januar til 31.januar) - håndterUtbetalingshistorikkEtterInfotrygdendring(utbetalinger = listOf(ArbeidsgiverUtbetalingsperiode(a1, 1.januar, 31.januar, 100.prosent, INNTEKT))) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + håndterUtbetalingshistorikkEtterInfotrygdendring( + utbetalinger = listOf( + ArbeidsgiverUtbetalingsperiode(a1, 1.januar, 31.januar, 100.prosent, INNTEKT) + ) + ) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastingTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastingTest.kt index 4f24aa3e55..760bc8ef10 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastingTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ForkastingTest.kt @@ -178,7 +178,11 @@ internal class ForkastingTest : AbstractEndToEndTest() { håndterSøknad(3.januar til 26.januar) håndterInntektsmelding( arbeidsgiverperioder = listOf(Periode(3.januar, 18.januar)), - refusjon = Refusjon(INNTEKT, null, listOf(Refusjon.EndringIRefusjon(INNTEKT / 2, 14.januar))), + refusjon = Refusjon( + INNTEKT, + null, + listOf(Refusjon.EndringIRefusjon(INNTEKT / 2, 14.januar)) + ), ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -252,54 +256,83 @@ internal class ForkastingTest : AbstractEndToEndTest() { fun `forkaster ikke revurderinger - avventer simulering revurdering`() { nyttVedtak(3.januar til 26.januar) nullstillTilstandsendringer() - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(26.januar, Dagtype.Feriedag) - )) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(26.januar, Dagtype.Feriedag) + ) + ) håndterYtelser(1.vedtaksperiode) forkastAlle() assertEquals(Utbetalingstatus.UTBETALT, inspektør.utbetalingtilstand(0)) assertEquals(Utbetalingstatus.IKKE_UTBETALT, inspektør.utbetalingtilstand(1)) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING + ) } @Test fun `forkaster ikke revurderinger - avventer godkjenning revurdering`() { nyttVedtak(3.januar til 26.januar) nullstillTilstandsendringer() - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(26.januar, Dagtype.Feriedag) - )) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(26.januar, Dagtype.Feriedag) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) forkastAlle() assertEquals(Utbetalingstatus.UTBETALT, inspektør.utbetalingtilstand(0)) assertEquals(Utbetalingstatus.IKKE_UTBETALT, inspektør.utbetalingtilstand(1)) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) } @Test fun `forkaster ikke revurderinger - til utbetaling`() { nyttVedtak(3.januar til 26.januar) nullstillTilstandsendringer() - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(26.januar, Dagtype.Feriedag) - )) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(26.januar, Dagtype.Feriedag) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) forkastAlle() assertEquals(Utbetalingstatus.UTBETALT, inspektør.utbetalingtilstand(0)) assertEquals(Utbetalingstatus.OVERFØRT, inspektør.utbetalingtilstand(1)) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING + ) } @Test fun `forkaster ikke revurderinger - revurdering feilet`() { nyttVedtak(3.januar til 26.januar) nullstillTilstandsendringer() - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(26.januar, Dagtype.Feriedag) - )) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(26.januar, Dagtype.Feriedag) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) assertUgyldigSituasjon("En vedtaksperiode i REVURDERING_FEILET trenger hjelp!") { @@ -308,6 +341,14 @@ internal class ForkastingTest : AbstractEndToEndTest() { forkastAlle() assertEquals(Utbetalingstatus.UTBETALT, inspektør.utbetalingtilstand(0)) assertEquals(Utbetalingstatus.IKKE_GODKJENT, inspektør.utbetalingtilstand(1)) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, REVURDERING_FEILET) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + REVURDERING_FEILET + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FrilanserTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FrilanserTest.kt index 26ac4901fd..15a27b1eea 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FrilanserTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/FrilanserTest.kt @@ -46,7 +46,10 @@ internal class FrilanserTest : AbstractDslTest() { håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag( 1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT), 1.januar) + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf(a1 to INNTEKT), + 1.januar + ) ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -64,13 +67,24 @@ internal class FrilanserTest : AbstractDslTest() { håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag( 1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT), 1.januar), + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf(a1 to INNTEKT), + 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, 1.oktober(2017), 31.oktober(2017), Arbeidsforholdtype.FRILANSER), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 1.oktober(2017), + 31.oktober(2017), + Arbeidsforholdtype.FRILANSER + ), Vilkårsgrunnlag.Arbeidsforhold(a2, EPOCH, type = Arbeidsforholdtype.FRILANSER) ) ) - assertFunksjonellFeil("Fant frilanserinntekt på en arbeidsgiver de siste 3 månedene", 1.vedtaksperiode.filter()) + assertFunksjonellFeil( + "Fant frilanserinntekt på en arbeidsgiver de siste 3 månedene", + 1.vedtaksperiode.filter() + ) assertForkastetPeriodeTilstander( 1.vedtaksperiode, START, @@ -91,7 +105,10 @@ internal class FrilanserTest : AbstractDslTest() { håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag( 1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT), 1.januar) + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf(a1 to INNTEKT), + 1.januar + ) ) assertIngenFunksjonelleFeil(1.vedtaksperiode.filter()) assertTilstander( @@ -111,12 +128,27 @@ internal class FrilanserTest : AbstractDslTest() { a1 { håndterSykmelding(januar) håndterSøknad(januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, beregnetInntekt = INNTEKT) - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT)) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + beregnetInntekt = INNTEKT + ) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) + ) håndterVilkårsgrunnlag( 1.vedtaksperiode, orgnummer = a1, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to 1000.månedlig), 1.januar), + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to 1000.månedlig + ), 1.januar + ), arbeidsforhold = arbeidsforhold ) håndterYtelser(1.vedtaksperiode) @@ -140,13 +172,28 @@ internal class FrilanserTest : AbstractDslTest() { beregnetInntekt = 10000.månedlig ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = 1.februar, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = 1.februar, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( 1.vedtaksperiode, orgnummer = a1, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to 10000.månedlig, a2 to 100.månedlig), 1.mars), + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to 10000.månedlig, + a2 to 100.månedlig + ), 1.mars + ), arbeidsforhold = arbeidsforhold ) håndterYtelser(1.vedtaksperiode) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/GodkjenningsbehovTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/GodkjenningsbehovTest.kt index cb6f162744..bf0be287fc 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/GodkjenningsbehovTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/GodkjenningsbehovTest.kt @@ -48,25 +48,28 @@ import org.junit.jupiter.api.Test internal class GodkjenningsbehovTest : AbstractEndToEndTest() { - private fun omregnedeÅrsinntedekter(vedtaksperiode: IdInnhenter, orgnummer: String = a1) = hendelselogg.etterspurtBehov>>( - vedtaksperiodeId = vedtaksperiode.id(orgnummer), - behov = Aktivitet.Behov.Behovtype.Godkjenning, - felt = "omregnedeÅrsinntekter" - )!!.map { - OmregnetÅrsinntektFraGodkjenningsbehov( - orgnummer = it.getValue("organisasjonsnummer") as String, - beløp = (it.getValue("beløp") as Double).årlig - ) - } + private fun omregnedeÅrsinntedekter(vedtaksperiode: IdInnhenter, orgnummer: String = a1) = + hendelselogg.etterspurtBehov>>( + vedtaksperiodeId = vedtaksperiode.id(orgnummer), + behov = Aktivitet.Behov.Behovtype.Godkjenning, + felt = "omregnedeÅrsinntekter" + )!!.map { + OmregnetÅrsinntektFraGodkjenningsbehov( + orgnummer = it.getValue("organisasjonsnummer") as String, + beløp = (it.getValue("beløp") as Double).årlig + ) + } + + private fun sykepengegrunnlag(vedtaksperiode: IdInnhenter, orgnummer: String = a1) = + hendelselogg.etterspurtBehov>( + vedtaksperiodeId = vedtaksperiode.id(orgnummer), + behov = Aktivitet.Behov.Behovtype.Godkjenning, + felt = "sykepengegrunnlagsfakta" + )!!["sykepengegrunnlag"] - private fun sykepengegrunnlag(vedtaksperiode: IdInnhenter, orgnummer: String = a1) = hendelselogg.etterspurtBehov>( - vedtaksperiodeId = vedtaksperiode.id(orgnummer), - behov = Aktivitet.Behov.Behovtype.Godkjenning, - felt = "sykepengegrunnlagsfakta" - )!!["sykepengegrunnlag"] @Test fun `sender med sykepengegrunnlag i godkjenningsbehovet`() { - tilGodkjenning(januar, beregnetInntekt = INNTEKT*6, organisasjonsnummere = arrayOf(a1)) + tilGodkjenning(januar, beregnetInntekt = INNTEKT * 6, organisasjonsnummere = arrayOf(a1)) assertEquals(Grunnbeløp.`6G`.beløp(1.januar).årlig, sykepengegrunnlag(1.vedtaksperiode)) } @@ -74,19 +77,36 @@ internal class GodkjenningsbehovTest : AbstractEndToEndTest() { fun `sender med feil vilkårsgrunnlagId i påminnet godkjenningsbehov om det har kommet nytt vilkårsgrunnlag med endring _senere_ enn perioden`() { tilGodkjenning(januar, a1) val vilkårsgrunnlagId1 = vilkårsgrunnlagIdFraVilkårsgrunnlaghistorikken(1.januar) - assertEquals(vilkårsgrunnlagId1, vilkårsgrunnlagIdFraSisteGodkjenningsbehov(1.vedtaksperiode)) + assertEquals( + vilkårsgrunnlagId1, + vilkårsgrunnlagIdFraSisteGodkjenningsbehov(1.vedtaksperiode) + ) håndterSøknad(februar) håndterSøknad(mars) nullstillTilstandsendringer() - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.mars, refusjon = Inntektsmelding.Refusjon(Inntekt.INGEN, null), avsendersystem = LPS) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING) // Reberegnes ikke ettersom endringen gjelder fra og med 1.mars + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.mars, + refusjon = Inntektsmelding.Refusjon(Inntekt.INGEN, null), + avsendersystem = LPS + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING + ) // Reberegnes ikke ettersom endringen gjelder fra og med 1.mars val vilkårsgrunnlagId2 = vilkårsgrunnlagIdFraVilkårsgrunnlaghistorikken(1.januar) - assertNotEquals(vilkårsgrunnlagId1, vilkårsgrunnlagId2) // IM lager nytt innslag i vilkårsgrunnlaghistorikken pga nye refusjonsopplysninger + assertNotEquals( + vilkårsgrunnlagId1, + vilkårsgrunnlagId2 + ) // IM lager nytt innslag i vilkårsgrunnlaghistorikken pga nye refusjonsopplysninger håndterPåminnelse(1.vedtaksperiode, AVVENTER_GODKJENNING) - assertEquals(vilkårsgrunnlagId1, vilkårsgrunnlagIdFraSisteGodkjenningsbehov(1.vedtaksperiode)) + assertEquals( + vilkårsgrunnlagId1, + vilkårsgrunnlagIdFraSisteGodkjenningsbehov(1.vedtaksperiode) + ) } @Test @@ -100,16 +120,30 @@ internal class GodkjenningsbehovTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) nullstillTilstandsendringer() - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.mars, refusjon = Inntektsmelding.Refusjon(Inntekt.INGEN, null), avsendersystem = LPS) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.mars, + refusjon = Inntektsmelding.Refusjon(Inntekt.INGEN, null), + avsendersystem = LPS + ) - assertTilstander(1.vedtaksperiode, AVVENTER_SIMULERING) // Reberegnes ikke ettersom endringen gjelder fra og med 1.mars + assertTilstander( + 1.vedtaksperiode, + AVVENTER_SIMULERING + ) // Reberegnes ikke ettersom endringen gjelder fra og med 1.mars val vilkårsgrunnlagId2 = vilkårsgrunnlagIdFraVilkårsgrunnlaghistorikken(1.januar) - assertNotEquals(vilkårsgrunnlagId1, vilkårsgrunnlagId2) // IM lager nytt innslag i vilkårsgrunnlaghistorikken pga nye refusjonsopplysninger + assertNotEquals( + vilkårsgrunnlagId1, + vilkårsgrunnlagId2 + ) // IM lager nytt innslag i vilkårsgrunnlaghistorikken pga nye refusjonsopplysninger håndterSimulering(1.vedtaksperiode) assertTilstander(1.vedtaksperiode, AVVENTER_SIMULERING, AVVENTER_GODKJENNING) - assertEquals(vilkårsgrunnlagId1, vilkårsgrunnlagIdFraSisteGodkjenningsbehov(1.vedtaksperiode)) + assertEquals( + vilkårsgrunnlagId1, + vilkårsgrunnlagIdFraSisteGodkjenningsbehov(1.vedtaksperiode) + ) } @Test @@ -142,12 +176,19 @@ internal class GodkjenningsbehovTest : AbstractEndToEndTest() { assertSisteTilstand(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING) assertFalse(kanAvvises(1.vedtaksperiode)) - val utbetalingId = UUID.fromString(person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Godkjenning).kontekst()["utbetalingId"]) + val utbetalingId = UUID.fromString( + person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Godkjenning) + .kontekst()["utbetalingId"] + ) val utbetaling = inspektør.utbetalinger(1.vedtaksperiode).last() assertEquals(utbetalingId, utbetaling.inspektør.utbetalingId) assertEquals(IKKE_UTBETALT, utbetaling.inspektør.tilstand) - håndterUtbetalingsgodkjenning(1.vedtaksperiode, utbetalingId = utbetalingId, utbetalingGodkjent = false) + håndterUtbetalingsgodkjenning( + 1.vedtaksperiode, + utbetalingId = utbetalingId, + utbetalingGodkjent = false + ) assertEquals(IKKE_GODKJENT, utbetaling.inspektør.tilstand) assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING) @@ -207,7 +248,18 @@ internal class GodkjenningsbehovTest : AbstractEndToEndTest() { @Test fun `revurdering kan ikke avvises`() { nyttVedtak(januar) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT * 1.05, "forklaring", null, emptyList()))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT * 1.05, + "forklaring", + null, + emptyList() + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING) @@ -240,7 +292,10 @@ internal class GodkjenningsbehovTest : AbstractEndToEndTest() { håndterSøknad(januar) assertSisteTilstand(1.vedtaksperiode, AVVENTER_REVURDERING) assertSisteTilstand(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - håndterInntektsmelding(listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -278,60 +333,99 @@ internal class GodkjenningsbehovTest : AbstractEndToEndTest() { } @Test - fun `markerer godkjenningsbehov som har brukt skatteinntekter istedenfor inntektsmelding med riktig tag for flere arbeidsgivere med ulik start`() = Toggle.InntektsmeldingSomIkkeKommer.enable { - nyPeriode(januar, a1) - nyPeriode(februar, a2) - håndterInntektsmelding(listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a1) - håndterInntektsmelding(listOf(1.februar til 16.februar), førsteFraværsdag = 1.februar, vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a2, avsendersystem = ALTINN) - - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), - arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - ), orgnummer = a1 - ) - håndterYtelser(vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a1) - håndterSimulering(vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a1) - håndterUtbetalingsgodkjenning(vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a1) - håndterUtbetalt(orgnummer = a1) - - håndterYtelser(vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a2) - håndterSimulering(vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a2) - - hendelselogg.assertHarTag( - vedtaksperiode = 1.vedtaksperiode, - forventetTag = "InntektFraAOrdningenLagtTilGrunn", - orgnummer = a2 - ) - } + fun `markerer godkjenningsbehov som har brukt skatteinntekter istedenfor inntektsmelding med riktig tag for flere arbeidsgivere med ulik start`() = + Toggle.InntektsmeldingSomIkkeKommer.enable { + nyPeriode(januar, a1) + nyPeriode(februar, a2) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 1.vedtaksperiode, + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + førsteFraværsdag = 1.februar, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode, + orgnummer = a2, + avsendersystem = ALTINN + ) + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), + arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + ), orgnummer = a1 + ) + håndterYtelser(vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a1) + håndterSimulering(vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a1) + håndterUtbetalingsgodkjenning( + vedtaksperiodeIdInnhenter = 1.vedtaksperiode, + orgnummer = a1 + ) + håndterUtbetalt(orgnummer = a1) - private fun kanAvvises(vedtaksperiode: IdInnhenter, orgnummer: String = a1) = hendelselogg.etterspurtBehov( - vedtaksperiodeId = vedtaksperiode.id(orgnummer), - behov = Aktivitet.Behov.Behovtype.Godkjenning, - felt = "kanAvvises" - )!! + håndterYtelser(vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a2) + håndterSimulering(vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a2) - private fun omregnedeÅrsinntekter(vedtaksperiode: IdInnhenter, orgnummer: String = a1) = hendelselogg.etterspurtBehov>>( - vedtaksperiodeId = vedtaksperiode.id(orgnummer), - behov = Aktivitet.Behov.Behovtype.Godkjenning, - felt = "omregnedeÅrsinntekter" - )!!.map { - OmregnetÅrsinntektFraGodkjenningsbehov( - orgnummer = it.getValue("organisasjonsnummer") as String, - beløp = (it.getValue("beløp") as Double).årlig - ) - } + hendelselogg.assertHarTag( + vedtaksperiode = 1.vedtaksperiode, + forventetTag = "InntektFraAOrdningenLagtTilGrunn", + orgnummer = a2 + ) + } + + + private fun kanAvvises(vedtaksperiode: IdInnhenter, orgnummer: String = a1) = + hendelselogg.etterspurtBehov( + vedtaksperiodeId = vedtaksperiode.id(orgnummer), + behov = Aktivitet.Behov.Behovtype.Godkjenning, + felt = "kanAvvises" + )!! + + private fun omregnedeÅrsinntekter(vedtaksperiode: IdInnhenter, orgnummer: String = a1) = + hendelselogg.etterspurtBehov>>( + vedtaksperiodeId = vedtaksperiode.id(orgnummer), + behov = Aktivitet.Behov.Behovtype.Godkjenning, + felt = "omregnedeÅrsinntekter" + )!!.map { + OmregnetÅrsinntektFraGodkjenningsbehov( + orgnummer = it.getValue("organisasjonsnummer") as String, + beløp = (it.getValue("beløp") as Double).årlig + ) + } - private data class OmregnetÅrsinntektFraGodkjenningsbehov(val orgnummer: String, val beløp: Inntekt) + private data class OmregnetÅrsinntektFraGodkjenningsbehov( + val orgnummer: String, + val beløp: Inntekt + ) - private fun vilkårsgrunnlagIdFraSisteGodkjenningsbehov(vedtaksperiode: IdInnhenter, orgnummer: String = a1) = hendelselogg.etterspurtBehov( + private fun vilkårsgrunnlagIdFraSisteGodkjenningsbehov( + vedtaksperiode: IdInnhenter, + orgnummer: String = a1 + ) = hendelselogg.etterspurtBehov( vedtaksperiodeId = vedtaksperiode.id(orgnummer), behov = Aktivitet.Behov.Behovtype.Godkjenning, felt = "vilkårsgrunnlagId" )!!.let { UUID.fromString(it) } - private fun vilkårsgrunnlagIdFraVilkårsgrunnlaghistorikken(skjæringstidspunkt: LocalDate, orgnummer: String = a1) - = inspektør(orgnummer).vilkårsgrunnlag(skjæringstidspunkt)!!.view().inspektør.vilkårsgrunnlagId + private fun vilkårsgrunnlagIdFraVilkårsgrunnlaghistorikken( + skjæringstidspunkt: LocalDate, + orgnummer: String = a1 + ) = inspektør(orgnummer).vilkårsgrunnlag(skjæringstidspunkt)!! + .view().inspektør.vilkårsgrunnlagId } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Grunnbel\303\270psreguleringTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Grunnbel\303\270psreguleringTest.kt" index 7ea4471f6f..a7e8a60f60 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Grunnbel\303\270psreguleringTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Grunnbel\303\270psreguleringTest.kt" @@ -26,19 +26,28 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -internal class GrunnbeløpsreguleringTest: AbstractEndToEndTest() { +internal class GrunnbeløpsreguleringTest : AbstractEndToEndTest() { @Test fun `Grunnbeløpsregulering med allerede riktig G-beløp`() { nyttVedtak(januar) assertEquals(1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) - assertEquals(561804.årlig, inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.`6G`) + assertEquals( + 561804.årlig, + inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.`6G` + ) nullstillTilstandsendringer() inspektør.vilkårsgrunnlagHistorikkInnslag() håndterGrunnbeløpsregulering(1.januar) assertEquals(1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) - assertInfo("Grunnbeløpet i sykepengegrunnlaget 2018-01-01 er allerede korrekt.", 1.vedtaksperiode.filter()) - assertEquals(561804.årlig, inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.`6G`) + assertInfo( + "Grunnbeløpet i sykepengegrunnlaget 2018-01-01 er allerede korrekt.", + 1.vedtaksperiode.filter() + ) + assertEquals( + 561804.årlig, + inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.`6G` + ) assertTilstander(1.vedtaksperiode, AVSLUTTET) assertEquals(0, observatør.sykefraværstilfelleIkkeFunnet.size) } @@ -46,7 +55,10 @@ internal class GrunnbeløpsreguleringTest: AbstractEndToEndTest() { @Test fun `sier ifra om det blir forsøkt grunnbeløpsregulert på sykefraværstilfelle som ikke finnes`() { håndterGrunnbeløpsregulering(1.januar) - assertEquals(PersonObserver.SykefraværstilfelleIkkeFunnet(1.januar), observatør.sykefraværstilfelleIkkeFunnet.single()) + assertEquals( + PersonObserver.SykefraværstilfelleIkkeFunnet(1.januar), + observatør.sykefraværstilfelleIkkeFunnet.single() + ) } @Test @@ -57,7 +69,16 @@ internal class GrunnbeløpsreguleringTest: AbstractEndToEndTest() { håndterGrunnbeløpsregulering(1.januar) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTrue(observatør.utkastTilVedtakEventer.last().tags.contains("Grunnbeløpsregulering")) } @@ -67,7 +88,14 @@ internal class GrunnbeløpsreguleringTest: AbstractEndToEndTest() { håndterGrunnbeløpsregulering(1.januar) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING + ) assertTrue(observatør.utkastTilVedtakEventer.last().tags.contains("Grunnbeløpsregulering")) } @@ -77,9 +105,15 @@ internal class GrunnbeløpsreguleringTest: AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT * 3) håndterVilkårsgrunnlag(1.vedtaksperiode) - assertEquals(riktig6G.årlig, inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.`6G`) + assertEquals( + riktig6G.årlig, + inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.`6G` + ) hackGrunnbeløp(fra = riktig6G, til = feil6G) // Hacker inn 2017-G - assertEquals(feil6G.årlig, inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.`6G`) + assertEquals( + feil6G.årlig, + inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.`6G` + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING) @@ -87,11 +121,13 @@ internal class GrunnbeløpsreguleringTest: AbstractEndToEndTest() { } private fun håndterGrunnbeløpsregulering(skjæringstidspunkt: LocalDate) { - ArbeidsgiverHendelsefabrikk(ORGNUMMER).lagGrunnbeløpsregulering(skjæringstidspunkt).håndter(Person::håndter) + ArbeidsgiverHendelsefabrikk(ORGNUMMER).lagGrunnbeløpsregulering(skjæringstidspunkt) + .håndter(Person::håndter) } private fun hackGrunnbeløp(fra: Int, til: Int) { - val json = person.dto().tilPersonData().tilSerialisertPerson().json.replace("\"grunnbeløp\":$fra.0", "\"grunnbeløp\":$til.0") + val json = person.dto().tilPersonData() + .tilSerialisertPerson().json.replace("\"grunnbeløp\":$fra.0", "\"grunnbeløp\":$til.0") createTestPerson { jurist -> gjenopprettFraJSONtekst(json, jurist) } } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseAsserts.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseAsserts.kt index 8dbba4f1f7..4364bb5175 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseAsserts.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseAsserts.kt @@ -29,10 +29,22 @@ import org.junit.jupiter.api.Assertions.assertTrue import kotlin.reflect.KClass -internal fun assertInntektshistorikkForDato(forventetInntekt: Inntekt?, dato: LocalDate, inspektør: TestArbeidsgiverInspektør) { - assertEquals(forventetInntekt, inspektør.inntektInspektør.omregnetÅrsinntekt(dato)?.sykepengegrunnlag) +internal fun assertInntektshistorikkForDato( + forventetInntekt: Inntekt?, + dato: LocalDate, + inspektør: TestArbeidsgiverInspektør +) { + assertEquals( + forventetInntekt, + inspektør.inntektInspektør.omregnetÅrsinntekt(dato)?.sykepengegrunnlag + ) } -internal fun assertInntektForDato(forventetInntekt: Inntekt?, dato: LocalDate, inspektør: TestArbeidsgiverInspektør) { + +internal fun assertInntektForDato( + forventetInntekt: Inntekt?, + dato: LocalDate, + inspektør: TestArbeidsgiverInspektør +) { val grunnlagsdataInspektør = inspektør.vilkårsgrunnlaghistorikk().grunnlagsdata(dato).inspektør val sykepengegrunnlagInspektør = grunnlagsdataInspektør.inntektsgrunnlag.inspektør sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver[inspektør.orgnummer]?.inspektør.also { @@ -40,12 +52,33 @@ internal fun assertInntektForDato(forventetInntekt: Inntekt?, dato: LocalDate, i } } -internal fun AbstractEndToEndTest.erEtterspurt(type: Aktivitet.Behov.Behovtype, vedtaksperiodeIdInnhenter: IdInnhenter, orgnummer: String, tilstand: TilstandType): Boolean { - return EtterspurtBehov.finnEtterspurtBehov(ikkeBesvarteBehov, type, vedtaksperiodeIdInnhenter, orgnummer, tilstand) != null -} - -internal fun AbstractEndToEndTest.assertEtterspurt(løsning: KClass, type: Aktivitet.Behov.Behovtype, vedtaksperiodeIdInnhenter: IdInnhenter, orgnummer: String) { - val etterspurtBehov = EtterspurtBehov.finnEtterspurtBehov(ikkeBesvarteBehov, type, vedtaksperiodeIdInnhenter, orgnummer) +internal fun AbstractEndToEndTest.erEtterspurt( + type: Aktivitet.Behov.Behovtype, + vedtaksperiodeIdInnhenter: IdInnhenter, + orgnummer: String, + tilstand: TilstandType +): Boolean { + return EtterspurtBehov.finnEtterspurtBehov( + ikkeBesvarteBehov, + type, + vedtaksperiodeIdInnhenter, + orgnummer, + tilstand + ) != null +} + +internal fun AbstractEndToEndTest.assertEtterspurt( + løsning: KClass, + type: Aktivitet.Behov.Behovtype, + vedtaksperiodeIdInnhenter: IdInnhenter, + orgnummer: String +) { + val etterspurtBehov = EtterspurtBehov.finnEtterspurtBehov( + ikkeBesvarteBehov, + type, + vedtaksperiodeIdInnhenter, + orgnummer + ) assertTrue(ikkeBesvarteBehov.remove(etterspurtBehov)) { "Forventer at $type skal være etterspurt før ${løsning.simpleName} håndteres. Perioden er i ${ observatør.tilstandsendringer[vedtaksperiodeIdInnhenter.id(orgnummer)]?.last() @@ -64,8 +97,18 @@ internal fun AbstractEndToEndTest.assertEtterspurt(løsning } */ -internal fun AbstractEndToEndTest.assertIkkeEtterspurt(løsning: KClass, type: Aktivitet.Behov.Behovtype, vedtaksperiodeIdInnhenter: IdInnhenter, orgnummer: String) { - val etterspurtBehov = EtterspurtBehov.finnEtterspurtBehov(ikkeBesvarteBehov, type, vedtaksperiodeIdInnhenter, orgnummer) +internal fun AbstractEndToEndTest.assertIkkeEtterspurt( + løsning: KClass, + type: Aktivitet.Behov.Behovtype, + vedtaksperiodeIdInnhenter: IdInnhenter, + orgnummer: String +) { + val etterspurtBehov = EtterspurtBehov.finnEtterspurtBehov( + ikkeBesvarteBehov, + type, + vedtaksperiodeIdInnhenter, + orgnummer + ) assertFalse(etterspurtBehov in ikkeBesvarteBehov) { "Forventer ikke at $type skal være etterspurt før ${løsning.simpleName} håndteres. Perioden er i ${ observatør.tilstandsendringer[vedtaksperiodeIdInnhenter.id(orgnummer)]?.last() @@ -73,7 +116,11 @@ internal fun AbstractEndToEndTest.assertIkkeEtterspurt(løsning: KClass assertUtbetalingsdag(dag: Utbetalingsdag, expectedDagtype: KClass, expectedTotalgrad: Int = 100) { +internal inline fun assertUtbetalingsdag( + dag: Utbetalingsdag, + expectedDagtype: KClass, + expectedTotalgrad: Int = 100 +) { dag.let { assertEquals(it::class, expectedDagtype) it.økonomi.brukTotalGrad { totalGrad -> assertEquals(expectedTotalgrad, totalGrad) } @@ -87,11 +134,18 @@ internal fun AbstractEndToEndTest.assertUtbetalingsbeløp( subset: Periode? = null, orgnummer: String = AbstractPersonTest.ORGNUMMER ) { - val utbetalingstidslinje = inspektør(orgnummer).utbetalingstidslinjer(vedtaksperiodeIdInnhenter).let { subset?.let(it::subset) ?: it } + val utbetalingstidslinje = inspektør(orgnummer).utbetalingstidslinjer(vedtaksperiodeIdInnhenter) + .let { subset?.let(it::subset) ?: it } utbetalingstidslinje.filterNot { it.dato.erHelg() }.forEach { utbetalingsdag -> - assertEquals(forventetArbeidsgiverbeløp.daglig, utbetalingsdag.økonomi.inspektør.arbeidsgiverbeløp) { "feil arbeidsgiverbeløp for dag ${utbetalingsdag.dato} " } - assertEquals(forventetArbeidsgiverRefusjonsbeløp.daglig, utbetalingsdag.økonomi.inspektør.arbeidsgiverRefusjonsbeløp.rundTilDaglig()) + assertEquals( + forventetArbeidsgiverbeløp.daglig, + utbetalingsdag.økonomi.inspektør.arbeidsgiverbeløp + ) { "feil arbeidsgiverbeløp for dag ${utbetalingsdag.dato} " } + assertEquals( + forventetArbeidsgiverRefusjonsbeløp.daglig, + utbetalingsdag.økonomi.inspektør.arbeidsgiverRefusjonsbeløp.rundTilDaglig() + ) assertEquals(INGEN, utbetalingsdag.økonomi.inspektør.personbeløp) } } @@ -102,7 +156,8 @@ internal fun AbstractEndToEndTest.assertHarHendelseIder( orgnummer: String = AbstractPersonTest.ORGNUMMER ) { assertTrue( - inspektør(orgnummer).hendelseIder(vedtaksperiodeIdInnhenter).containsAll(hendelseIder.toList()) + inspektør(orgnummer).hendelseIder(vedtaksperiodeIdInnhenter) + .containsAll(hendelseIder.toList()) ) { "Perioden inneholder ikke alle hendelseidene" } } @@ -112,7 +167,8 @@ internal fun AbstractEndToEndTest.assertHarIkkeHendelseIder( orgnummer: String = AbstractPersonTest.ORGNUMMER ) { assertTrue( - inspektør(orgnummer).hendelseIder(vedtaksperiodeIdInnhenter).none { it in hendelseIder.toList() }) { "Perioden inneholder ikke alle hendelseidene" } + inspektør(orgnummer).hendelseIder(vedtaksperiodeIdInnhenter) + .none { it in hendelseIder.toList() }) { "Perioden inneholder ikke alle hendelseidene" } } internal fun AbstractEndToEndTest.assertTilstand( @@ -127,118 +183,275 @@ internal fun AbstractEndToEndTest.assertTilstand( } -internal fun AbstractEndToEndTest.assertSisteTilstand(vedtaksperiodeIdInnhenter: IdInnhenter, tilstand: TilstandType, orgnummer: String = AbstractPersonTest.ORGNUMMER, errortekst: (() -> String)? = null) { - assertEquals(tilstand, observatør.tilstandsendringer[vedtaksperiodeIdInnhenter.id(orgnummer)]?.last(), errortekst) +internal fun AbstractEndToEndTest.assertSisteTilstand( + vedtaksperiodeIdInnhenter: IdInnhenter, + tilstand: TilstandType, + orgnummer: String = AbstractPersonTest.ORGNUMMER, + errortekst: (() -> String)? = null +) { + assertEquals( + tilstand, + observatør.tilstandsendringer[vedtaksperiodeIdInnhenter.id(orgnummer)]?.last(), + errortekst + ) } -internal fun AbstractEndToEndTest.assertTilstander(indeks: Int, vararg tilstander: TilstandType, orgnummer: String = AbstractPersonTest.ORGNUMMER) { - assertTilstander(vedtaksperiodeIdInnhenter = (indeks + 1).vedtaksperiode, tilstander = tilstander, orgnummer = orgnummer) +internal fun AbstractEndToEndTest.assertTilstander( + indeks: Int, + vararg tilstander: TilstandType, + orgnummer: String = AbstractPersonTest.ORGNUMMER +) { + assertTilstander( + vedtaksperiodeIdInnhenter = (indeks + 1).vedtaksperiode, + tilstander = tilstander, + orgnummer = orgnummer + ) } -internal fun AbstractEndToEndTest.assertTilstander(vedtaksperiodeIdInnhenter: IdInnhenter, vararg tilstander: TilstandType, orgnummer: String = AbstractPersonTest.ORGNUMMER, inspektør: TestArbeidsgiverInspektør = inspektør(orgnummer), message: String? = null) { +internal fun AbstractEndToEndTest.assertTilstander( + vedtaksperiodeIdInnhenter: IdInnhenter, + vararg tilstander: TilstandType, + orgnummer: String = AbstractPersonTest.ORGNUMMER, + inspektør: TestArbeidsgiverInspektør = inspektør( + orgnummer + ), + message: String? = null +) { val id = vedtaksperiodeIdInnhenter.id(orgnummer) assertFalse(inspektør.periodeErForkastet(vedtaksperiodeIdInnhenter)) { "Perioden er forkastet med tilstander: ${observatør.tilstandsendringer[id]}:\n${person.personLogg}" } assertTrue(inspektør.periodeErIkkeForkastet(vedtaksperiodeIdInnhenter)) { "Perioden er forkastet med tilstander: ${observatør.tilstandsendringer[id]}\n${person.personLogg}" } assertEquals(tilstander.asList(), observatør.tilstandsendringer[id], message) } -internal fun AbstractEndToEndTest.assertForkastetPeriodeTilstander(indeks: Int, vararg tilstander: TilstandType, orgnummer: String = AbstractPersonTest.ORGNUMMER) { - assertForkastetPeriodeTilstander(vedtaksperiodeIdInnhenter = indeks.vedtaksperiode, tilstander = tilstander, orgnummer = orgnummer) +internal fun AbstractEndToEndTest.assertForkastetPeriodeTilstander( + indeks: Int, + vararg tilstander: TilstandType, + orgnummer: String = AbstractPersonTest.ORGNUMMER +) { + assertForkastetPeriodeTilstander( + vedtaksperiodeIdInnhenter = indeks.vedtaksperiode, + tilstander = tilstander, + orgnummer = orgnummer + ) } -internal fun AbstractEndToEndTest.assertForkastetPeriodeTilstander(vedtaksperiodeIdInnhenter: IdInnhenter, vararg tilstander: TilstandType, orgnummer: String = AbstractPersonTest.ORGNUMMER, inspektør: TestArbeidsgiverInspektør = inspektør(orgnummer), varselkode: Varselkode? = null) { +internal fun AbstractEndToEndTest.assertForkastetPeriodeTilstander( + vedtaksperiodeIdInnhenter: IdInnhenter, + vararg tilstander: TilstandType, + orgnummer: String = AbstractPersonTest.ORGNUMMER, + inspektør: TestArbeidsgiverInspektør = inspektør( + orgnummer + ), + varselkode: Varselkode? = null +) { assertTrue(inspektør.periodeErForkastet(vedtaksperiodeIdInnhenter)) { "Perioden er ikke forkastet" } assertFalse(inspektør.periodeErIkkeForkastet(vedtaksperiodeIdInnhenter)) { "Perioden er ikke forkastet" } - assertEquals(tilstander.asList(), observatør.tilstandsendringer[vedtaksperiodeIdInnhenter.id(orgnummer)]) + assertEquals( + tilstander.asList(), + observatør.tilstandsendringer[vedtaksperiodeIdInnhenter.id(orgnummer)] + ) varselkode?.let { assertFunksjonellFeil(it, vedtaksperiodeIdInnhenter.filter()) } } -internal fun AbstractEndToEndTest.assertForkastetPeriodeTilstander(orgnummer: String, vedtaksperiodeIdInnhenter: IdInnhenter, vararg tilstander: TilstandType) { +internal fun AbstractEndToEndTest.assertForkastetPeriodeTilstander( + orgnummer: String, + vedtaksperiodeIdInnhenter: IdInnhenter, + vararg tilstander: TilstandType +) { assertTrue(inspektør(orgnummer).periodeErForkastet(vedtaksperiodeIdInnhenter)) { "Perioden er ikke forkastet" } assertFalse(inspektør(orgnummer).periodeErIkkeForkastet(vedtaksperiodeIdInnhenter)) { "Perioden er ikke forkastet" } - assertEquals(tilstander.asList(), observatør.tilstandsendringer[vedtaksperiodeIdInnhenter.id(orgnummer)]) + assertEquals( + tilstander.asList(), + observatør.tilstandsendringer[vedtaksperiodeIdInnhenter.id(orgnummer)] + ) } -internal fun AbstractEndToEndTest.assertSisteForkastetPeriodeTilstand(orgnummer: String, vedtaksperiodeIdInnhenter: IdInnhenter, tilstand: TilstandType) { - assertEquals(tilstand, observatør.tilstandsendringer[vedtaksperiodeIdInnhenter.id(orgnummer)]?.last()) +internal fun AbstractEndToEndTest.assertSisteForkastetPeriodeTilstand( + orgnummer: String, + vedtaksperiodeIdInnhenter: IdInnhenter, + tilstand: TilstandType +) { + assertEquals( + tilstand, + observatør.tilstandsendringer[vedtaksperiodeIdInnhenter.id(orgnummer)]?.last() + ) assertTrue(inspektør(orgnummer).periodeErForkastet(vedtaksperiodeIdInnhenter)) { "Perioden er ikke forkastet" } assertFalse(inspektør(orgnummer).periodeErIkkeForkastet(vedtaksperiodeIdInnhenter)) { "Perioden er ikke forkastet" } } -internal fun AbstractPersonTest.assertInfo(forventet: String, vararg filtre: AktivitetsloggFilter) = person.personLogg.assertInfo(forventet, *filtre) -internal fun AbstractPersonTest.assertIngenInfo(forventet: String, vararg filtre: AktivitetsloggFilter) = person.personLogg.assertIngenInfo(forventet, *filtre) -internal fun AbstractPersonTest.assertIngenVarsler(vararg filtre: AktivitetsloggFilter) = person.personLogg.assertIngenVarsler(*filtre) -internal fun AbstractPersonTest.assertVarsler(vararg filtre: AktivitetsloggFilter) = person.personLogg.assertVarsler(*filtre) -internal fun AbstractPersonTest.assertVarsler(warnings: List, vararg filtre: AktivitetsloggFilter) = person.personLogg.assertVarsler(warnings, *filtre) -internal fun AbstractPersonTest.assertVarsel(warning: String, vararg filtre: AktivitetsloggFilter) = person.personLogg.assertVarsel(warning, *filtre) -internal fun AbstractPersonTest.assertVarsel(varsel: Varselkode, vararg filtre: AktivitetsloggFilter) = person.personLogg.assertVarsel(varsel, *filtre) -internal fun AbstractPersonTest.assertIngenVarsel(warning: String, vararg filtre: AktivitetsloggFilter) = person.personLogg.assertIngenVarsel(warning, *filtre) -internal fun AbstractPersonTest.assertIngenVarsel(varselkode: Varselkode, vararg filtre: AktivitetsloggFilter) = person.personLogg.assertIngenVarsel(varselkode, *filtre) -internal fun AbstractPersonTest.assertFunksjonellFeil(error: String, vararg filtre: AktivitetsloggFilter) = person.personLogg.assertFunksjonellFeil(error, *filtre) -internal fun AbstractPersonTest.assertFunksjonellFeil(varselkode: Varselkode, vararg filtre: AktivitetsloggFilter) = person.personLogg.assertFunksjonellFeil(varselkode.funksjonellFeilTekst, *filtre) -internal fun AbstractPersonTest.assertFunksjonelleFeil(vararg filtre: AktivitetsloggFilter) = person.personLogg.assertFunksjonelleFeil(*filtre) -internal fun AbstractPersonTest.assertIngenFunksjonellFeil(varselkode: Varselkode, vararg filtre: AktivitetsloggFilter) = person.personLogg.assertIngenFunksjonellFeil(varselkode, *filtre) +internal fun AbstractPersonTest.assertInfo(forventet: String, vararg filtre: AktivitetsloggFilter) = + person.personLogg.assertInfo(forventet, *filtre) + +internal fun AbstractPersonTest.assertIngenInfo( + forventet: String, + vararg filtre: AktivitetsloggFilter +) = person.personLogg.assertIngenInfo(forventet, *filtre) + +internal fun AbstractPersonTest.assertIngenVarsler(vararg filtre: AktivitetsloggFilter) = + person.personLogg.assertIngenVarsler(*filtre) + +internal fun AbstractPersonTest.assertVarsler(vararg filtre: AktivitetsloggFilter) = + person.personLogg.assertVarsler(*filtre) -internal fun AbstractPersonTest.assertIngenFunksjonelleFeil(vararg filtre: AktivitetsloggFilter) = person.personLogg.assertIngenFunksjonelleFeil(*filtre) -internal fun AbstractPersonTest.assertLogiskFeil(severe: String, vararg filtre: AktivitetsloggFilter) = person.personLogg.assertLogiskFeil(severe, *filtre) +internal fun AbstractPersonTest.assertVarsler( + warnings: List, + vararg filtre: AktivitetsloggFilter +) = person.personLogg.assertVarsler(warnings, *filtre) + +internal fun AbstractPersonTest.assertVarsel(warning: String, vararg filtre: AktivitetsloggFilter) = + person.personLogg.assertVarsel(warning, *filtre) + +internal fun AbstractPersonTest.assertVarsel( + varsel: Varselkode, + vararg filtre: AktivitetsloggFilter +) = person.personLogg.assertVarsel(varsel, *filtre) + +internal fun AbstractPersonTest.assertIngenVarsel( + warning: String, + vararg filtre: AktivitetsloggFilter +) = person.personLogg.assertIngenVarsel(warning, *filtre) + +internal fun AbstractPersonTest.assertIngenVarsel( + varselkode: Varselkode, + vararg filtre: AktivitetsloggFilter +) = person.personLogg.assertIngenVarsel(varselkode, *filtre) + +internal fun AbstractPersonTest.assertFunksjonellFeil( + error: String, + vararg filtre: AktivitetsloggFilter +) = person.personLogg.assertFunksjonellFeil(error, *filtre) + +internal fun AbstractPersonTest.assertFunksjonellFeil( + varselkode: Varselkode, + vararg filtre: AktivitetsloggFilter +) = person.personLogg.assertFunksjonellFeil(varselkode.funksjonellFeilTekst, *filtre) + +internal fun AbstractPersonTest.assertFunksjonelleFeil(vararg filtre: AktivitetsloggFilter) = + person.personLogg.assertFunksjonelleFeil(*filtre) + +internal fun AbstractPersonTest.assertIngenFunksjonellFeil( + varselkode: Varselkode, + vararg filtre: AktivitetsloggFilter +) = person.personLogg.assertIngenFunksjonellFeil(varselkode, *filtre) + +internal fun AbstractPersonTest.assertIngenFunksjonelleFeil(vararg filtre: AktivitetsloggFilter) = + person.personLogg.assertIngenFunksjonelleFeil(*filtre) + +internal fun AbstractPersonTest.assertLogiskFeil( + severe: String, + vararg filtre: AktivitetsloggFilter +) = person.personLogg.assertLogiskFeil(severe, *filtre) internal fun Aktivitetslogg.assertInfo(forventet: String, vararg filtre: AktivitetsloggFilter) { val info = collectInfo(*filtre) - assertTrue(info.contains(forventet), "fant ikke ett tilfelle av infomelding <$forventet>. Info:\n${info.joinToString("\n")}") + assertTrue( + info.contains(forventet), + "fant ikke ett tilfelle av infomelding <$forventet>. Info:\n${info.joinToString("\n")}" + ) } -internal fun Aktivitetslogg.assertIngenInfo(forventet: String, vararg filtre: AktivitetsloggFilter) { +internal fun Aktivitetslogg.assertIngenInfo( + forventet: String, + vararg filtre: AktivitetsloggFilter +) { val info = collectInfo(*filtre) - assertEquals(0, info.count { it == forventet }, "fant uventet info. Info:\n${info.joinToString("\n")}") + assertEquals( + 0, + info.count { it == forventet }, + "fant uventet info. Info:\n${info.joinToString("\n")}" + ) } internal fun Aktivitetslogg.assertIngenVarsler(vararg filtre: AktivitetsloggFilter) { val warnings = collectVarsler(*filtre) - assertTrue(warnings.isEmpty(), "Forventet ingen warnings. Warnings:\n${warnings.joinToString("\n")}") + assertTrue( + warnings.isEmpty(), + "Forventet ingen warnings. Warnings:\n${warnings.joinToString("\n")}" + ) } internal fun Aktivitetslogg.assertVarsler(vararg filtre: AktivitetsloggFilter) { assertTrue(collectVarsler(*filtre).isNotEmpty(), "Forventet warnings, fant ingen") } -internal fun Aktivitetslogg.assertVarsler(warnings: List, vararg filtre: AktivitetsloggFilter) { +internal fun Aktivitetslogg.assertVarsler( + warnings: List, + vararg filtre: AktivitetsloggFilter +) { assertVarsler(*filtre) val ekteWarnings = collectVarsler(*filtre) - assertTrue(warnings.containsAll(ekteWarnings)) { "Forventet ikke warnings: ${ekteWarnings.filterNot { it in warnings }}"} + assertTrue(warnings.containsAll(ekteWarnings)) { "Forventet ikke warnings: ${ekteWarnings.filterNot { it in warnings }}" } } internal fun Aktivitetslogg.assertVarsel(warning: String, vararg filtre: AktivitetsloggFilter) { val warnings = collectVarsler(*filtre) - assertTrue(warnings.contains(warning), "\nFant ikke forventet warning:\n\t$warning\nWarnings funnet:\n\t${warnings.joinToString("\n\t")}\n") + assertTrue( + warnings.contains(warning), + "\nFant ikke forventet warning:\n\t$warning\nWarnings funnet:\n\t${warnings.joinToString("\n\t")}\n" + ) } internal fun Aktivitetslogg.assertVarsel(varsel: Varselkode, vararg filtre: AktivitetsloggFilter) { val varselkoder = collectVarselkoder(*filtre) - assertTrue(varselkoder.contains(varsel), "\nFant ikke forventet varselkode:\n\t$varsel\nVarselkoder funnet:\n\t${varselkoder.joinToString("\n\t")}\n") + assertTrue( + varselkoder.contains(varsel), + "\nFant ikke forventet varselkode:\n\t$varsel\nVarselkoder funnet:\n\t${ + varselkoder.joinToString("\n\t") + }\n" + ) } -internal fun Aktivitetslogg.assertIngenVarsel(warning: String, vararg filtre: AktivitetsloggFilter) { +internal fun Aktivitetslogg.assertIngenVarsel( + warning: String, + vararg filtre: AktivitetsloggFilter +) { val warnings = collectVarsler(*filtre) - assertFalse(warnings.contains(warning), "\nFant et varsel vi ikke forventet:\n\t$warning\nWarnings funnet:\n\t${warnings.joinToString("\n\t")}\n") + assertFalse( + warnings.contains(warning), + "\nFant et varsel vi ikke forventet:\n\t$warning\nWarnings funnet:\n\t${ + warnings.joinToString("\n\t") + }\n" + ) } -internal fun Aktivitetslogg.assertIngenVarsel(varselkode: Varselkode, vararg filtre: AktivitetsloggFilter) { +internal fun Aktivitetslogg.assertIngenVarsel( + varselkode: Varselkode, + vararg filtre: AktivitetsloggFilter +) { val varselkoder = collectVarselkoder(*filtre) - assertFalse(varselkoder.contains(varselkode), "\nFant en varselkode vi ikke forventet:\n\t$varselkode\nVarselkoder funnet:\n\t${varselkoder.joinToString("\n\t")}\n") + assertFalse( + varselkoder.contains(varselkode), + "\nFant en varselkode vi ikke forventet:\n\t$varselkode\nVarselkoder funnet:\n\t${ + varselkoder.joinToString("\n\t") + }\n" + ) } -internal fun Aktivitetslogg.assertHarTag( vedtaksperiode: IdInnhenter, orgnummer: String = ORGNUMMER, forventetTag: String){ +internal fun Aktivitetslogg.assertHarTag( + vedtaksperiode: IdInnhenter, + orgnummer: String = ORGNUMMER, + forventetTag: String +) { val tags = this.etterspurtBehov>( vedtaksperiodeId = vedtaksperiode.id(orgnummer), behov = Aktivitet.Behov.Behovtype.Godkjenning, felt = "tags" ) - assertTrue(tags?.contains(forventetTag) ?: false, "Fant ikke forventet tag: $forventetTag. Faktiske tags: $tags ") + assertTrue( + tags?.contains(forventetTag) ?: false, + "Fant ikke forventet tag: $forventetTag. Faktiske tags: $tags " + ) } -internal fun Aktivitetslogg.assertFunksjonellFeil(error: String, vararg filtre: AktivitetsloggFilter) { +internal fun Aktivitetslogg.assertFunksjonellFeil( + error: String, + vararg filtre: AktivitetsloggFilter +) { val errors = collectFunksjonelleFeil(*filtre) - assertTrue(errors.contains(error), "fant ikke forventet error. Errors:\n${errors.joinToString("\n")}") + assertTrue( + errors.contains(error), + "fant ikke forventet error. Errors:\n${errors.joinToString("\n")}" + ) } internal fun Aktivitetslogg.assertFunksjonelleFeil(vararg filtre: AktivitetsloggFilter) { @@ -246,9 +459,15 @@ internal fun Aktivitetslogg.assertFunksjonelleFeil(vararg filtre: Aktivitetslogg assertTrue(errors.isNotEmpty(), "forventet errors, fant ingen.") } -internal fun Aktivitetslogg.assertFunksjonellFeil(varselkode: Varselkode, vararg filtre: AktivitetsloggFilter) { +internal fun Aktivitetslogg.assertFunksjonellFeil( + varselkode: Varselkode, + vararg filtre: AktivitetsloggFilter +) { val errors = collectFunksjonelleFeil(*filtre) - assertTrue(errors.contains(varselkode.funksjonellFeilTekst), "fant ikke forventet error. Errors:\n${errors.joinToString("\n")}") + assertTrue( + errors.contains(varselkode.funksjonellFeilTekst), + "fant ikke forventet error. Errors:\n${errors.joinToString("\n")}" + ) } internal fun Aktivitetslogg.assertIngenFunksjonelleFeil(vararg filtre: AktivitetsloggFilter) { @@ -256,9 +475,17 @@ internal fun Aktivitetslogg.assertIngenFunksjonelleFeil(vararg filtre: Aktivitet assertTrue(errors.isEmpty(), "forventet ingen errors. Errors: \n${errors.joinToString("\n")}") } -internal fun Aktivitetslogg.assertIngenFunksjonellFeil(varselkode: Varselkode, vararg filtre: AktivitetsloggFilter) { +internal fun Aktivitetslogg.assertIngenFunksjonellFeil( + varselkode: Varselkode, + vararg filtre: AktivitetsloggFilter +) { val errors = collectFunksjonelleFeil(*filtre) - assertFalse(errors.contains(varselkode.varseltekst), "\nFant en varselkode vi ikke forventet:\n\t$varselkode\nVarselkoder funnet:\n\t${errors.joinToString("\n\t")}\n") + assertFalse( + errors.contains(varselkode.varseltekst), + "\nFant en varselkode vi ikke forventet:\n\t$varselkode\nVarselkoder funnet:\n\t${ + errors.joinToString("\n\t") + }\n" + ) } internal fun Aktivitetslogg.assertIngenFunksjonellFeil(vararg filtre: AktivitetsloggFilter) { @@ -268,7 +495,10 @@ internal fun Aktivitetslogg.assertIngenFunksjonellFeil(vararg filtre: Aktivitets internal fun Aktivitetslogg.assertLogiskFeil(severe: String, vararg filtre: AktivitetsloggFilter) { val severes = collectLogiskeFeil(*filtre) - assertTrue(severes.contains(severe), "fant ikke forventet severe. Severes:\n${severes.joinToString("\n")}") + assertTrue( + severes.contains(severe), + "fant ikke forventet severe. Severes:\n${severes.joinToString("\n")}" + ) } internal fun Aktivitetslogg.collectInfo(vararg filtre: AktivitetsloggFilter): List { @@ -282,6 +512,7 @@ internal fun Aktivitetslogg.collectVarsler(vararg filtre: AktivitetsloggFilter): .filter { filtre.all { filter -> it.kontekster.any { filter.filtrer(it) } } } .map { it.kode.toString() } } + internal fun Aktivitetslogg.collectVarselkoder(vararg filtre: AktivitetsloggFilter): List { return varsel .filter { filtre.all { filter -> it.kontekster.any { filter.filtrer(it) } } } @@ -304,19 +535,29 @@ internal fun interface AktivitetsloggFilter { companion object { internal fun UUID.filter() = vedtaksperiode(this) - internal fun vedtaksperiode(vedtaksperiodeId: UUID): AktivitetsloggFilter = AktivitetsloggFilter { kontekst -> - kontekst.kontekstType == "Vedtaksperiode" && kontekst.kontekstMap["vedtaksperiodeId"] == vedtaksperiodeId.toString() - } - internal fun vedtaksperiode(idInnhenter: IdInnhenter, orgnummer: String): AktivitetsloggFilter = AktivitetsloggFilter { kontekst -> - kontekst.kontekstType == "Vedtaksperiode" && kontekst.kontekstMap["vedtaksperiodeId"] == idInnhenter.id(orgnummer).toString() + internal fun vedtaksperiode(vedtaksperiodeId: UUID): AktivitetsloggFilter = + AktivitetsloggFilter { kontekst -> + kontekst.kontekstType == "Vedtaksperiode" && kontekst.kontekstMap["vedtaksperiodeId"] == vedtaksperiodeId.toString() + } + + internal fun vedtaksperiode( + idInnhenter: IdInnhenter, + orgnummer: String + ): AktivitetsloggFilter = AktivitetsloggFilter { kontekst -> + kontekst.kontekstType == "Vedtaksperiode" && kontekst.kontekstMap["vedtaksperiodeId"] == idInnhenter.id( + orgnummer + ).toString() } - internal fun person(personidentifikator: Personidentifikator = AbstractPersonTest.UNG_PERSON_FNR_2018): AktivitetsloggFilter = AktivitetsloggFilter { kontekst -> - kontekst.kontekstMap["fødselsnummer"] == personidentifikator.toString() - } - internal fun arbeidsgiver(orgnummer: String): AktivitetsloggFilter = AktivitetsloggFilter { kontekst -> - kontekst.kontekstType == "Arbeidsgiver" && kontekst.kontekstMap["organisasjonsnummer"] == orgnummer - } + internal fun person(personidentifikator: Personidentifikator = AbstractPersonTest.UNG_PERSON_FNR_2018): AktivitetsloggFilter = + AktivitetsloggFilter { kontekst -> + kontekst.kontekstMap["fødselsnummer"] == personidentifikator.toString() + } + + internal fun arbeidsgiver(orgnummer: String): AktivitetsloggFilter = + AktivitetsloggFilter { kontekst -> + kontekst.kontekstType == "Arbeidsgiver" && kontekst.kontekstMap["organisasjonsnummer"] == orgnummer + } } fun filtrer(kontekst: SpesifikkKontekst): Boolean diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseFactories.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseFactories.kt index 9442e2c036..286065b614 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseFactories.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseFactories.kt @@ -78,7 +78,9 @@ internal fun AbstractEndToEndTest.utbetaling( meldingsreferanseId = meldingsreferanseId, orgnummer = orgnummer, fagsystemId = fagsystemId, - utbetalingId = utbetalingId ?: person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Utbetaling).kontekst().getValue("utbetalingId").let { UUID.fromString(it) }, + utbetalingId = utbetalingId + ?: person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Utbetaling).kontekst() + .getValue("utbetalingId").let { UUID.fromString(it) }, status = status, melding = "hei", avstemmingsnøkkel = 123456L, @@ -96,7 +98,8 @@ internal fun AbstractEndToEndTest.feriepengeutbetaling( meldingsreferanseId = meldingsreferanseId, orgnummer = orgnummer, fagsystemId = fagsystemId, - utbetalingId = person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Utbetaling).kontekst().getValue("utbetalingId").let { UUID.fromString(it) }, + utbetalingId = person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Utbetaling).kontekst() + .getValue("utbetalingId").let { UUID.fromString(it) }, status = status, melding = "hey", avstemmingsnøkkel = 654321L, @@ -137,7 +140,8 @@ internal fun AbstractEndToEndTest.søknad( perioder = perioder, andreInntektskilder = andreInntektskilder, sendtTilNAVEllerArbeidsgiver = sendtTilNAVEllerArbeidsgiver, - sykmeldingSkrevet = sykmeldingSkrevet ?: Søknadsperiode.søknadsperiode(perioder.toList())!!.start.atStartOfDay(), + sykmeldingSkrevet = sykmeldingSkrevet + ?: Søknadsperiode.søknadsperiode(perioder.toList())!!.start.atStartOfDay(), id = id, merknaderFraSykmelding = merknaderFraSykmelding, permittert = permittert, @@ -154,7 +158,11 @@ internal fun AbstractEndToEndTest.inntektsmelding( arbeidsgiverperioder: List, beregnetInntekt: Inntekt = INNTEKT, førsteFraværsdag: LocalDate = arbeidsgiverperioder.maxOfOrNull { it.start } ?: 1.januar, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), orgnummer: String = AbstractPersonTest.ORGNUMMER, harOpphørAvNaturalytelser: Boolean = false, fnr: Personidentifikator = AbstractPersonTest.UNG_PERSON_FNR_2018, @@ -202,9 +210,17 @@ internal fun AbstractEndToEndTest.inntektsmelding( innsenderTelefon = "tlfnr", innsenderFulltNavn = "SPLEIS Modell" ) - inntektsmeldinger[id] = AbstractEndToEndTest.InnsendtInntektsmelding(LocalDateTime.now(), inntektsmeldinggenerator, kontrakten) + inntektsmeldinger[id] = AbstractEndToEndTest.InnsendtInntektsmelding( + LocalDateTime.now(), + inntektsmeldinggenerator, + kontrakten + ) inntekter[id] = beregnetInntekt - EtterspurtBehov.fjern(ikkeBesvarteBehov, orgnummer, Aktivitet.Behov.Behovtype.Sykepengehistorikk) + EtterspurtBehov.fjern( + ikkeBesvarteBehov, + orgnummer, + Aktivitet.Behov.Behovtype.Sykepengehistorikk + ) return inntektsmeldinggenerator() } @@ -213,14 +229,22 @@ internal fun AbstractEndToEndTest.inntektsmeldingPortal( arbeidsgiverperioder: List, beregnetInntekt: Inntekt = INNTEKT, vedtaksperiodeId: UUID, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), orgnummer: String = AbstractPersonTest.ORGNUMMER, harOpphørAvNaturalytelser: Boolean = false, begrunnelseForReduksjonEllerIkkeUtbetalt: String? = null, harFlereInntektsmeldinger: Boolean = false, avsendersystem: Avsenderutleder ): Inntektsmelding { - EtterspurtBehov.fjern(ikkeBesvarteBehov, orgnummer, Aktivitet.Behov.Behovtype.Sykepengehistorikk) + EtterspurtBehov.fjern( + ikkeBesvarteBehov, + orgnummer, + Aktivitet.Behov.Behovtype.Sykepengehistorikk + ) return ArbeidsgiverHendelsefabrikk(orgnummer).lagPortalinntektsmelding( arbeidsgiverperioder = arbeidsgiverperioder, beregnetInntekt = beregnetInntekt, @@ -239,7 +263,13 @@ internal fun AbstractEndToEndTest.vilkårsgrunnlag( skjæringstidspunkt: LocalDate, medlemskapstatus: Medlemskapsvurdering.Medlemskapstatus = Medlemskapsvurdering.Medlemskapstatus.Ja, orgnummer: String = AbstractPersonTest.ORGNUMMER, - arbeidsforhold: List = listOf(Vilkårsgrunnlag.Arbeidsforhold(orgnummer, 1.januar(2017), type = Arbeidsforholdtype.ORDINÆRT)), + arbeidsforhold: List = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer, + 1.januar(2017), + type = Arbeidsforholdtype.ORDINÆRT + ) + ), inntektsvurderingForSykepengegrunnlag: InntektForSykepengegrunnlag, inntekterForOpptjeningsvurdering: InntekterForOpptjeningsvurdering, fnr: Personidentifikator = AbstractPersonTest.UNG_PERSON_FNR_2018 @@ -284,13 +314,15 @@ internal fun sykepengegrunnlagForArbeidsgiver( vedtaksperiodeId = vedtaksperiodeId, skjæringstidspunkt = skjæringstidspunkt, orgnummer = orgnummer, - inntekter = ArbeidsgiverInntekt(orgnummer, (1..3).map { ArbeidsgiverInntekt.MånedligInntekt( - yearMonth = skjæringstidspunkt.yearMonth.minusMonths(it.toLong()), - inntekt = INNTEKT, - type = ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, - fordel = "", - beskrivelse = "" - ) }) + inntekter = ArbeidsgiverInntekt(orgnummer, (1..3).map { + ArbeidsgiverInntekt.MånedligInntekt( + yearMonth = skjæringstidspunkt.yearMonth.minusMonths(it.toLong()), + inntekt = INNTEKT, + type = ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + fordel = "", + beskrivelse = "" + ) + }) ) } @@ -427,11 +459,18 @@ internal fun AbstractEndToEndTest.ytelser( ) } -internal fun manuellPermisjonsdag(dato: LocalDate) = ManuellOverskrivingDag(dato, Dagtype.Permisjonsdag) +internal fun manuellPermisjonsdag(dato: LocalDate) = + ManuellOverskrivingDag(dato, Dagtype.Permisjonsdag) + internal fun manuellFeriedag(dato: LocalDate) = ManuellOverskrivingDag(dato, Dagtype.Feriedag) -internal fun manuellForeldrepengedag(dato: LocalDate) = ManuellOverskrivingDag(dato, Dagtype.Foreldrepengerdag) -internal fun manuellSykedag(dato: LocalDate, grad: Int = 100) = ManuellOverskrivingDag(dato, Dagtype.Sykedag, grad) -internal fun manuellArbeidsgiverdag(dato: LocalDate) = ManuellOverskrivingDag(dato, Dagtype.Egenmeldingsdag) +internal fun manuellForeldrepengedag(dato: LocalDate) = + ManuellOverskrivingDag(dato, Dagtype.Foreldrepengerdag) + +internal fun manuellSykedag(dato: LocalDate, grad: Int = 100) = + ManuellOverskrivingDag(dato, Dagtype.Sykedag, grad) + +internal fun manuellArbeidsgiverdag(dato: LocalDate) = + ManuellOverskrivingDag(dato, Dagtype.Egenmeldingsdag) internal fun AbstractEndToEndTest.simulering( @@ -440,7 +479,8 @@ internal fun AbstractEndToEndTest.simulering( fnr: Personidentifikator = AbstractPersonTest.UNG_PERSON_FNR_2018, orgnummer: String = AbstractPersonTest.ORGNUMMER, simuleringsresultat: SimuleringResultatDto? = standardSimuleringsresultat(orgnummer) -) = person.personLogg.etterspurteBehov(vedtaksperiodeIdInnhenter, orgnummer).filter { it.type == Aktivitet.Behov.Behovtype.Simulering }.map { simuleringsBehov -> +) = person.personLogg.etterspurteBehov(vedtaksperiodeIdInnhenter, orgnummer) + .filter { it.type == Aktivitet.Behov.Behovtype.Simulering }.map { simuleringsBehov -> Simulering( meldingsreferanseId = UUID.randomUUID(), vedtaksperiodeId = vedtaksperiodeIdInnhenter.id(orgnummer).toString(), @@ -454,46 +494,47 @@ internal fun AbstractEndToEndTest.simulering( ) } -internal fun standardSimuleringsresultat(orgnummer: String, totalbeløp: Int = 2000) = SimuleringResultatDto( - totalbeløp = totalbeløp, - perioder = listOf( - SimuleringResultatDto.SimulertPeriode( - fom = 17.januar, - tom = 20.januar, - utbetalinger = listOf( - SimuleringResultatDto.SimulertUtbetaling( - forfallsdato = 21.januar, - utbetalesTil = SimuleringResultatDto.Mottaker( - id = orgnummer, - navn = "Org Orgesen AS" - ), - feilkonto = false, - detaljer = listOf( - SimuleringResultatDto.Detaljer( - fom = 17.januar, - tom = 20.januar, - konto = "81549300", - beløp = 2000, - klassekode = SimuleringResultatDto.Klassekode( - kode = "SPREFAG-IOP", - beskrivelse = "Sykepenger, Refusjon arbeidsgiver" - ), - uføregrad = 100, - utbetalingstype = "YTEL", - tilbakeføring = false, - sats = SimuleringResultatDto.Sats( - sats = 1000.toDouble(), - antall = 2, - type = "DAG" - ), - refunderesOrgnummer = orgnummer +internal fun standardSimuleringsresultat(orgnummer: String, totalbeløp: Int = 2000) = + SimuleringResultatDto( + totalbeløp = totalbeløp, + perioder = listOf( + SimuleringResultatDto.SimulertPeriode( + fom = 17.januar, + tom = 20.januar, + utbetalinger = listOf( + SimuleringResultatDto.SimulertUtbetaling( + forfallsdato = 21.januar, + utbetalesTil = SimuleringResultatDto.Mottaker( + id = orgnummer, + navn = "Org Orgesen AS" + ), + feilkonto = false, + detaljer = listOf( + SimuleringResultatDto.Detaljer( + fom = 17.januar, + tom = 20.januar, + konto = "81549300", + beløp = 2000, + klassekode = SimuleringResultatDto.Klassekode( + kode = "SPREFAG-IOP", + beskrivelse = "Sykepenger, Refusjon arbeidsgiver" + ), + uføregrad = 100, + utbetalingstype = "YTEL", + tilbakeføring = false, + sats = SimuleringResultatDto.Sats( + sats = 1000.toDouble(), + antall = 2, + type = "DAG" + ), + refunderesOrgnummer = orgnummer + ) ) ) ) ) ) ) -) internal fun AbstractEndToEndTest.utbetalingsgodkjenning( vedtaksperiodeIdInnhenter: IdInnhenter, @@ -502,7 +543,8 @@ internal fun AbstractEndToEndTest.utbetalingsgodkjenning( orgnummer: String, automatiskBehandling: Boolean, utbetalingId: UUID = UUID.fromString( - person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Godkjenning).kontekst()["utbetalingId"] + person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Godkjenning) + .kontekst()["utbetalingId"] ?: throw IllegalStateException( "Finner ikke utbetalingId i: ${ person.personLogg.sisteBehov(Aktivitet.Behov.Behovtype.Godkjenning).kontekst() @@ -521,7 +563,11 @@ internal fun AbstractEndToEndTest.utbetalingsgodkjenning( automatiskBehandling = automatiskBehandling, ) -internal fun inntektsvurderingForSykepengegrunnlag(inntekt: Inntekt, skjæringstidspunkt: LocalDate, vararg orgnummere: String) = InntektForSykepengegrunnlag( +internal fun inntektsvurderingForSykepengegrunnlag( + inntekt: Inntekt, + skjæringstidspunkt: LocalDate, + vararg orgnummere: String +) = InntektForSykepengegrunnlag( inntekter = orgnummere.map { orgnummer -> grunnlag(orgnummer, skjæringstidspunkt, inntekt.repeat(3)) } @@ -539,15 +585,15 @@ private fun lagMånedsinntekter( inntekter: List ) = ArbeidsgiverInntekt( orgnummer, inntekter.mapIndexed { index, inntekt -> - val sluttMnd = YearMonth.from(skjæringstidspunkt) - ArbeidsgiverInntekt.MånedligInntekt( - sluttMnd.minusMonths((inntekter.size - index).toLong()), - inntekt, - ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, - "Juidy inntekt", - "Juidy fordel" - ) - } + val sluttMnd = YearMonth.from(skjæringstidspunkt) + ArbeidsgiverInntekt.MånedligInntekt( + sluttMnd.minusMonths((inntekter.size - index).toLong()), + inntekt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "Juidy inntekt", + "Juidy fordel" + ) +} ) internal fun Inntektperioder.lagInntektperioder( diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseHandlers.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseHandlers.kt index dc26ea9e03..68dc8abe5c 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseHandlers.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseHandlers.kt @@ -89,7 +89,10 @@ import org.junit.jupiter.api.Assertions.assertTrue internal fun AbstractEndToEndTest.håndterSykmelding( periode: Periode, orgnummer: String = ORGNUMMER -) = håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive), orgnummer = orgnummer) +) = håndterSykmelding( + Sykmeldingsperiode(periode.start, periode.endInclusive), + orgnummer = orgnummer +) internal fun AbstractEndToEndTest.håndterSykmelding( vararg sykeperioder: Sykmeldingsperiode, @@ -116,7 +119,8 @@ internal fun AbstractEndToEndTest.håndterAvbrytSøknad( orgnummer: String, meldingsreferanseId: UUID = UUID.randomUUID() ) { - AvbruttSøknad(periode, + AvbruttSøknad( + periode, meldingsreferanseId, orgnummer ).håndter(Person::håndter) @@ -127,7 +131,8 @@ internal fun AbstractEndToEndTest.håndterAvbrytArbeidsledigSøknad( orgnummer: String, meldingsreferanseId: UUID = UUID.randomUUID() ) { - AvbruttSøknad(periode, + AvbruttSøknad( + periode, meldingsreferanseId, Arbeidsledig ).håndter(Person::håndter) @@ -194,10 +199,16 @@ internal fun AbstractEndToEndTest.førstegangTilGodkjenning( ) { require(arbeidsgivere.isNotEmpty()) { "Må inneholde minst ett organisasjonsnummer" } arbeidsgivere.forEach { - håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive), orgnummer = it.first) + håndterSykmelding( + Sykmeldingsperiode(periode.start, periode.endInclusive), + orgnummer = it.first + ) } arbeidsgivere.forEach { - håndterSøknad(Søknadsperiode.Sykdom(periode.start, periode.endInclusive, 100.prosent), orgnummer = it.first) + håndterSøknad( + Søknadsperiode.Sykdom(periode.start, periode.endInclusive, 100.prosent), + orgnummer = it.first + ) } arbeidsgivere.forEach { @@ -222,21 +233,45 @@ internal fun AbstractEndToEndTest.førstegangTilGodkjenning( } } -internal fun AbstractEndToEndTest.forlengelseTilGodkjenning(periode: Periode, vararg organisasjonsnumre: String) { +internal fun AbstractEndToEndTest.forlengelseTilGodkjenning( + periode: Periode, + vararg organisasjonsnumre: String +) { require(organisasjonsnumre.isNotEmpty()) { "Må inneholde minst ett organisasjonsnummer" } organisasjonsnumre.forEach { nyPeriode(periode, it) } håndterYtelser(observatør.sisteVedtaksperiode(), orgnummer = organisasjonsnumre.first()) håndterSimulering(observatør.sisteVedtaksperiode(), orgnummer = organisasjonsnumre.first()) } -internal fun AbstractEndToEndTest.forlengVedtak(periode: Periode, vararg organisasjonsnumre: String) { +internal fun AbstractEndToEndTest.forlengVedtak( + periode: Periode, + vararg organisasjonsnumre: String +) { require(organisasjonsnumre.isNotEmpty()) { "Må inneholde minst ett organisasjonsnummer" } - organisasjonsnumre.forEach { håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive), orgnummer = it) } - organisasjonsnumre.forEach { håndterSøknad(Søknadsperiode.Sykdom(periode.start, periode.endInclusive, 100.prosent), orgnummer = it) } + organisasjonsnumre.forEach { + håndterSykmelding( + Sykmeldingsperiode( + periode.start, + periode.endInclusive + ), orgnummer = it + ) + } + organisasjonsnumre.forEach { + håndterSøknad( + Søknadsperiode.Sykdom( + periode.start, + periode.endInclusive, + 100.prosent + ), orgnummer = it + ) + } organisasjonsnumre.forEach { organisasjonsnummer -> håndterYtelser(observatør.sisteVedtaksperiode(), orgnummer = organisasjonsnummer) håndterSimulering(observatør.sisteVedtaksperiode(), orgnummer = organisasjonsnummer) - håndterUtbetalingsgodkjenning(observatør.sisteVedtaksperiode(), orgnummer = organisasjonsnummer) + håndterUtbetalingsgodkjenning( + observatør.sisteVedtaksperiode(), + orgnummer = organisasjonsnummer + ) håndterUtbetalt(orgnummer = organisasjonsnummer) } } @@ -248,14 +283,36 @@ internal fun AbstractEndToEndTest.nyttVedtak( fnr: Personidentifikator = UNG_PERSON_FNR_2018, orgnummer: String = ORGNUMMER, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), arbeidsgiverperiode: List? = null, status: Oppdragstatus = Oppdragstatus.AKSEPTERT, - inntekterBlock: Inntektperioder.() -> Unit = { lagInntektperioder(orgnummer, periode.start, beregnetInntekt) }, + inntekterBlock: Inntektperioder.() -> Unit = { + lagInntektperioder( + orgnummer, + periode.start, + beregnetInntekt + ) + }, inntektsmeldingId: UUID = UUID.randomUUID(), vedtaksperiodeIdInnhenter: IdInnhenter = 1.vedtaksperiode ) { - tilGodkjent(periode, grad, førsteFraværsdag, fnr = fnr, orgnummer = orgnummer, refusjon = refusjon, inntekterBlock = inntekterBlock, arbeidsgiverperiode = arbeidsgiverperiode, beregnetInntekt = beregnetInntekt, inntektsmeldingId = inntektsmeldingId, vedtaksperiodeIdInnhenter = vedtaksperiodeIdInnhenter) + tilGodkjent( + periode, + grad, + førsteFraværsdag, + fnr = fnr, + orgnummer = orgnummer, + refusjon = refusjon, + inntekterBlock = inntekterBlock, + arbeidsgiverperiode = arbeidsgiverperiode, + beregnetInntekt = beregnetInntekt, + inntektsmeldingId = inntektsmeldingId, + vedtaksperiodeIdInnhenter = vedtaksperiodeIdInnhenter + ) håndterUtbetalt(status = status, fnr = fnr, orgnummer = orgnummer) } @@ -266,8 +323,18 @@ internal fun AbstractEndToEndTest.tilGodkjent( fnr: Personidentifikator = UNG_PERSON_FNR_2018, orgnummer: String = ORGNUMMER, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), - inntekterBlock: Inntektperioder.() -> Unit = { lagInntektperioder(orgnummer, periode.start, beregnetInntekt) }, + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), + inntekterBlock: Inntektperioder.() -> Unit = { + lagInntektperioder( + orgnummer, + periode.start, + beregnetInntekt + ) + }, arbeidsgiverperiode: List? = null, inntektsmeldingId: UUID = UUID.randomUUID(), vedtaksperiodeIdInnhenter: IdInnhenter = 1.vedtaksperiode @@ -296,13 +363,35 @@ internal fun AbstractEndToEndTest.tilGodkjenning( fnr: Personidentifikator = UNG_PERSON_FNR_2018, orgnummer: String = ORGNUMMER, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), - inntekterBlock: Inntektperioder.() -> Unit = { lagInntektperioder(orgnummer, periode.start, beregnetInntekt) }, + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), + inntekterBlock: Inntektperioder.() -> Unit = { + lagInntektperioder( + orgnummer, + periode.start, + beregnetInntekt + ) + }, arbeidsgiverperiode: List? = null, inntektsmeldingId: UUID = UUID.randomUUID(), vedtaksperiodeIdInnhenter: IdInnhenter = 1.vedtaksperiode ): IdInnhenter { - val id = tilSimulering(periode, grad, førsteFraværsdag, fnr = fnr, orgnummer = orgnummer, refusjon = refusjon, inntekterBlock = inntekterBlock, arbeidsgiverperiode = arbeidsgiverperiode, beregnetInntekt = beregnetInntekt, inntektsmeldingId = inntektsmeldingId, vedtaksperiodeIdInnhenter = vedtaksperiodeIdInnhenter) + val id = tilSimulering( + periode, + grad, + førsteFraværsdag, + fnr = fnr, + orgnummer = orgnummer, + refusjon = refusjon, + inntekterBlock = inntekterBlock, + arbeidsgiverperiode = arbeidsgiverperiode, + beregnetInntekt = beregnetInntekt, + inntektsmeldingId = inntektsmeldingId, + vedtaksperiodeIdInnhenter = vedtaksperiodeIdInnhenter + ) håndterSimulering(id, fnr = fnr, orgnummer = orgnummer) return id } @@ -314,13 +403,34 @@ internal fun AbstractEndToEndTest.tilSimulering( fnr: Personidentifikator = UNG_PERSON_FNR_2018, orgnummer: String = ORGNUMMER, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), - inntekterBlock: Inntektperioder.() -> Unit = { lagInntektperioder(orgnummer, periode.start, beregnetInntekt) }, + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), + inntekterBlock: Inntektperioder.() -> Unit = { + lagInntektperioder( + orgnummer, + periode.start, + beregnetInntekt + ) + }, arbeidsgiverperiode: List? = null, inntektsmeldingId: UUID = UUID.randomUUID(), vedtaksperiodeIdInnhenter: IdInnhenter = 1.vedtaksperiode ): IdInnhenter { - return tilYtelser(periode, grad, førsteFraværsdag, fnr = fnr, orgnummer = orgnummer, refusjon = refusjon, arbeidsgiverperiode = arbeidsgiverperiode, beregnetInntekt = beregnetInntekt, inntektsmeldingId = inntektsmeldingId, vedtaksperiodeIdInnhenter = vedtaksperiodeIdInnhenter) + return tilYtelser( + periode, + grad, + førsteFraværsdag, + fnr = fnr, + orgnummer = orgnummer, + refusjon = refusjon, + arbeidsgiverperiode = arbeidsgiverperiode, + beregnetInntekt = beregnetInntekt, + inntektsmeldingId = inntektsmeldingId, + vedtaksperiodeIdInnhenter = vedtaksperiodeIdInnhenter + ) } internal fun AbstractEndToEndTest.tilYtelser( @@ -330,7 +440,11 @@ internal fun AbstractEndToEndTest.tilYtelser( fnr: Personidentifikator = UNG_PERSON_FNR_2018, orgnummer: String = ORGNUMMER, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), inntektsvurderingForSykepengegrunnlag: InntektForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = inntektperioderForSykepengegrunnlag { periode.start.minusMonths(3) til periode.start.minusMonths(1) inntekter { @@ -342,8 +456,16 @@ internal fun AbstractEndToEndTest.tilYtelser( inntektsmeldingId: UUID = UUID.randomUUID(), vedtaksperiodeIdInnhenter: IdInnhenter ): IdInnhenter { - håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive), fnr = fnr, orgnummer = orgnummer) - håndterSøknad(Søknadsperiode.Sykdom(periode.start, periode.endInclusive, grad), fnr = fnr, orgnummer = orgnummer) + håndterSykmelding( + Sykmeldingsperiode(periode.start, periode.endInclusive), + fnr = fnr, + orgnummer = orgnummer + ) + håndterSøknad( + Søknadsperiode.Sykdom(periode.start, periode.endInclusive, grad), + fnr = fnr, + orgnummer = orgnummer + ) håndterInntektsmelding( arbeidsgiverperiode ?: listOf(Periode(periode.start, periode.start.plusDays(15))), førsteFraværsdag = førsteFraværsdag, @@ -373,7 +495,12 @@ internal fun AbstractEndToEndTest.forlengTilGodkjentVedtak( orgnummer: String = ORGNUMMER ) { forlengTilGodkjenning(periode, grad, fnr, orgnummer) - håndterUtbetalingsgodkjenning(observatør.sisteVedtaksperiode(), true, fnr = fnr, orgnummer = orgnummer) + håndterUtbetalingsgodkjenning( + observatør.sisteVedtaksperiode(), + true, + fnr = fnr, + orgnummer = orgnummer + ) } internal fun AbstractEndToEndTest.forlengTilSimulering( @@ -385,7 +512,13 @@ internal fun AbstractEndToEndTest.forlengTilSimulering( nyPeriode(periode, orgnummer, grad = grad, fnr = fnr) val id: IdInnhenter = observatør.sisteVedtaksperiode() håndterYtelser(id, orgnummer = orgnummer, fnr = fnr) - assertTrue(person.personLogg.etterspurteBehov(id, Behovtype.Simulering, orgnummer)) { "Forventet at simulering er etterspurt" } + assertTrue( + person.personLogg.etterspurteBehov( + id, + Behovtype.Simulering, + orgnummer + ) + ) { "Forventet at simulering er etterspurt" } } internal fun AbstractEndToEndTest.forlengTilGodkjenning( @@ -397,7 +530,11 @@ internal fun AbstractEndToEndTest.forlengTilGodkjenning( nyPeriode(periode, orgnummer, grad = grad, fnr = fnr) val id: IdInnhenter = observatør.sisteVedtaksperiode() håndterYtelser(id, orgnummer = orgnummer, fnr = fnr) - if (person.personLogg.etterspurteBehov(id, Behovtype.Simulering, orgnummer)) håndterSimulering(id, fnr = fnr, orgnummer = orgnummer) + if (person.personLogg.etterspurteBehov(id, Behovtype.Simulering, orgnummer)) håndterSimulering( + id, + fnr = fnr, + orgnummer = orgnummer + ) } internal fun AbstractEndToEndTest.forlengVedtak( @@ -471,21 +608,32 @@ internal fun AbstractEndToEndTest.håndterSøknad( ).håndter(Person::håndter) søknader[id] = Triple(sendtTilNAVEllerArbeidsgiver, andreInntektskilder, perioder) val vedtaksperiodeId: IdInnhenter = observatør.sisteVedtaksperiode() - if (hendelselogg.etterspurteBehov(vedtaksperiodeId, Behovtype.Sykepengehistorikk, orgnummer = orgnummer)) { + if (hendelselogg.etterspurteBehov( + vedtaksperiodeId, + Behovtype.Sykepengehistorikk, + orgnummer = orgnummer + )) { håndterUtbetalingshistorikk(vedtaksperiodeId, orgnummer = orgnummer) } } return id } -private fun AbstractEndToEndTest.håndterOgReplayInntektsmeldinger(orgnummer: String, block: () -> Unit) { +private fun AbstractEndToEndTest.håndterOgReplayInntektsmeldinger( + orgnummer: String, + block: () -> Unit +) { observatør.replayInntektsmeldinger { block() }.forEach { forespørsel -> val imReplays = inntektsmeldinger .entries .sortedBy { it.value.tidspunkt } .filter { forespørsel.erInntektsmeldingRelevant(it.value.inntektsmeldingkontrakt) } .map { it.value.generator() } - .filter { im -> im.metadata.meldingsreferanseId !in observatør.inntektsmeldingHåndtert.map(Pair<*, *>::first) } + .filter { im -> + im.metadata.meldingsreferanseId !in observatør.inntektsmeldingHåndtert.map( + Pair<*, *>::first + ) + } .filter { im -> im.behandlingsporing.organisasjonsnummer == orgnummer } InntektsmeldingerReplay( meldingsreferanseId = UUID.randomUUID(), @@ -501,7 +649,11 @@ internal fun AbstractEndToEndTest.håndterInntektsmelding( arbeidsgiverperioder: List, førsteFraværsdag: LocalDate = arbeidsgiverperioder.maxOfOrNull { it.start } ?: 1.januar, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), orgnummer: String = ORGNUMMER, id: UUID = UUID.randomUUID(), harOpphørAvNaturalytelser: Boolean = false, @@ -547,7 +699,11 @@ internal fun AbstractEndToEndTest.håndterInntektsmelding( internal fun AbstractEndToEndTest.håndterInntektsmeldingPortal( arbeidsgiverperioder: List, beregnetInntekt: Inntekt = INNTEKT, - refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon(beregnetInntekt, null, emptyList()), + refusjon: Inntektsmelding.Refusjon = Inntektsmelding.Refusjon( + beregnetInntekt, + null, + emptyList() + ), orgnummer: String = ORGNUMMER, vedtaksperiodeIdInnhenter: IdInnhenter = 1.vedtaksperiode, id: UUID = UUID.randomUUID(), @@ -571,7 +727,10 @@ internal fun AbstractEndToEndTest.håndterInntektsmeldingPortal( return håndterInntektsmelding(portalinntektsmelding) } -internal fun AbstractEndToEndTest.håndterInntektsmelding(inntektsmelding: Inntektsmelding, førReplay: () -> Unit = {}) : UUID { +internal fun AbstractEndToEndTest.håndterInntektsmelding( + inntektsmelding: Inntektsmelding, + førReplay: () -> Unit = {} +): UUID { håndterOgReplayInntektsmeldinger(inntektsmelding.behandlingsporing.organisasjonsnummer) { inntektsmelding.håndter(Person::håndter) førReplay() @@ -596,7 +755,9 @@ internal fun AbstractEndToEndTest.håndterVilkårsgrunnlag( inntektsvurderingForSykepengegrunnlag: InntektForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( ArbeidsgiverInntekt(orgnummer, (0..2).map { - val yearMonth = YearMonth.from(inspektør(orgnummer).skjæringstidspunkt(vedtaksperiodeIdInnhenter)).minusMonths(3L - it) + val yearMonth = + YearMonth.from(inspektør(orgnummer).skjæringstidspunkt(vedtaksperiodeIdInnhenter)) + .minusMonths(3L - it) ArbeidsgiverInntekt.MånedligInntekt( yearMonth = yearMonth, type = ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, @@ -607,8 +768,19 @@ internal fun AbstractEndToEndTest.håndterVilkårsgrunnlag( }) ) ), - inntekterForOpptjeningsvurdering: InntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering(ORGNUMMER, INNTEKT, inspektør(orgnummer).skjæringstidspunkt(vedtaksperiodeIdInnhenter)), - arbeidsforhold: List = finnArbeidsgivere().map { Vilkårsgrunnlag.Arbeidsforhold(it, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) }, + inntekterForOpptjeningsvurdering: InntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + ORGNUMMER, + INNTEKT, + inspektør(orgnummer).skjæringstidspunkt(vedtaksperiodeIdInnhenter) + ), + arbeidsforhold: List = finnArbeidsgivere().map { + Vilkårsgrunnlag.Arbeidsforhold( + it, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) + }, fnr: Personidentifikator = UNG_PERSON_FNR_2018 ): Vilkårsgrunnlag { fun assertEtterspurt(behovtype: Behovtype) = @@ -638,7 +810,13 @@ internal fun AbstractEndToEndTest.håndterSimulering( simuleringsresultat: SimuleringResultatDto? = standardSimuleringsresultat(orgnummer) ) { assertEtterspurt(Simulering::class, Behovtype.Simulering, vedtaksperiodeIdInnhenter, orgnummer) - simulering(vedtaksperiodeIdInnhenter, simuleringOK, fnr, orgnummer, simuleringsresultat).forEach { simulering -> simulering.håndter(Person::håndter) } + simulering( + vedtaksperiodeIdInnhenter, + simuleringOK, + fnr, + orgnummer, + simuleringsresultat + ).forEach { simulering -> simulering.håndter(Person::håndter) } } internal fun AbstractEndToEndTest.håndterSimulering( @@ -677,8 +855,17 @@ private fun AbstractEndToEndTest.håndterUtbetalingshistorikk( orgnummer: String = ORGNUMMER, besvart: LocalDateTime = LocalDateTime.now() ) { - val bedtOmSykepengehistorikk = person.personLogg.etterspurteBehov(vedtaksperiodeIdInnhenter, Behovtype.Sykepengehistorikk, orgnummer) - if (bedtOmSykepengehistorikk) assertEtterspurt(Utbetalingshistorikk::class, Behovtype.Sykepengehistorikk, vedtaksperiodeIdInnhenter, orgnummer) + val bedtOmSykepengehistorikk = person.personLogg.etterspurteBehov( + vedtaksperiodeIdInnhenter, + Behovtype.Sykepengehistorikk, + orgnummer + ) + if (bedtOmSykepengehistorikk) assertEtterspurt( + Utbetalingshistorikk::class, + Behovtype.Sykepengehistorikk, + vedtaksperiodeIdInnhenter, + orgnummer + ) utbetalingshistorikk( vedtaksperiodeIdInnhenter = vedtaksperiodeIdInnhenter, utbetalinger = utbetalinger.toList(), @@ -753,17 +940,23 @@ internal fun AbstractEndToEndTest.håndterUtbetalingpåminnelse( status: Utbetalingstatus, tilstandsendringstidspunkt: LocalDateTime = LocalDateTime.now() ) { - utbetalingpåminnelse(inspektør.utbetalingId(utbetalingIndeks), status, tilstandsendringstidspunkt).håndter(Person::håndter) + utbetalingpåminnelse( + inspektør.utbetalingId(utbetalingIndeks), + status, + tilstandsendringstidspunkt + ).håndter(Person::håndter) } -internal fun AbstractEndToEndTest.håndterPersonPåminnelse() = PersonHendelsefabrikk().lagPåminnelse().håndter(Person::håndter) +internal fun AbstractEndToEndTest.håndterPersonPåminnelse() = + PersonHendelsefabrikk().lagPåminnelse().håndter(Person::håndter) internal fun AbstractEndToEndTest.håndterSykepengegrunnlagForArbeidsgiver( vedtaksperiodeId: IdInnhenter, skjæringstidspunkt: LocalDate = 1.januar, orgnummer: String = ORGNUMMER ): UUID { - val inntektFraAOrdningen : SykepengegrunnlagForArbeidsgiver = sykepengegrunnlagForArbeidsgiver(vedtaksperiodeId.id(orgnummer), skjæringstidspunkt) + val inntektFraAOrdningen: SykepengegrunnlagForArbeidsgiver = + sykepengegrunnlagForArbeidsgiver(vedtaksperiodeId.id(orgnummer), skjæringstidspunkt) inntektFraAOrdningen.håndter(Person::håndter) return inntektFraAOrdningen.metadata.meldingsreferanseId } @@ -794,11 +987,29 @@ internal fun AbstractEndToEndTest.håndterUtbetalingsgodkjenning( automatiskBehandling: Boolean = false, utbetalingId: UUID = UUID.fromString( person.personLogg.sisteBehov(Behovtype.Godkjenning).kontekst()["utbetalingId"] - ?: throw IllegalStateException("Finner ikke utbetalingId i: ${person.personLogg.sisteBehov(Behovtype.Godkjenning).kontekst()}") + ?: throw IllegalStateException( + "Finner ikke utbetalingId i: ${ + person.personLogg.sisteBehov( + Behovtype.Godkjenning + ).kontekst() + }" + ) ), ) { - assertEtterspurt(Utbetalingsgodkjenning::class, Behovtype.Godkjenning, vedtaksperiodeIdInnhenter, orgnummer) - utbetalingsgodkjenning(vedtaksperiodeIdInnhenter, utbetalingGodkjent, fnr, orgnummer, automatiskBehandling, utbetalingId).håndter(Person::håndter) + assertEtterspurt( + Utbetalingsgodkjenning::class, + Behovtype.Godkjenning, + vedtaksperiodeIdInnhenter, + orgnummer + ) + utbetalingsgodkjenning( + vedtaksperiodeIdInnhenter, + utbetalingGodkjent, + fnr, + orgnummer, + automatiskBehandling, + utbetalingId + ).håndter(Person::håndter) } internal fun AbstractEndToEndTest.håndterUtbetalt( @@ -809,7 +1020,9 @@ internal fun AbstractEndToEndTest.håndterUtbetalt( utbetalingId: UUID? = null, meldingsreferanseId: UUID = UUID.randomUUID() ) { - val faktiskUtbetalingId = utbetalingId?.toString() ?: person.personLogg.sisteBehov(Behovtype.Utbetaling).kontekst().getValue("utbetalingId") + val faktiskUtbetalingId = + utbetalingId?.toString() ?: person.personLogg.sisteBehov(Behovtype.Utbetaling).kontekst() + .getValue("utbetalingId") utbetaling( fagsystemId = fagsystemId, status = status, @@ -878,7 +1091,16 @@ internal fun AbstractEndToEndTest.håndterOverstyrInntekt( ) { håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt, - listOf(OverstyrtArbeidsgiveropplysning(orgnummer, inntekt, forklaring, subsumsjon, emptyList(), gjelder)), + listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer, + inntekt, + forklaring, + subsumsjon, + emptyList(), + gjelder + ) + ), meldingsreferanseId ) } @@ -903,8 +1125,14 @@ internal fun AbstractEndToEndTest.håndterOverstyrArbeidsgiveropplysninger( OverstyrArbeidsgiveropplysninger( meldingsreferanseId = meldingsreferanseId, skjæringstidspunkt = skjæringstidspunkt, - arbeidsgiveropplysninger = arbeidsgiveropplysninger.tilOverstyrt(meldingsreferanseId, skjæringstidspunkt), - refusjonstidslinjer = arbeidsgiveropplysninger.refusjonstidslinjer(meldingsreferanseId, opprettet), + arbeidsgiveropplysninger = arbeidsgiveropplysninger.tilOverstyrt( + meldingsreferanseId, + skjæringstidspunkt + ), + refusjonstidslinjer = arbeidsgiveropplysninger.refusjonstidslinjer( + meldingsreferanseId, + opprettet + ), opprettet = opprettet ).håndter(Person::håndter) return meldingsreferanseId @@ -918,7 +1146,10 @@ internal fun AbstractEndToEndTest.håndterSkjønnsmessigFastsettelse( SkjønnsmessigFastsettelse( meldingsreferanseId = meldingsreferanseId, skjæringstidspunkt = skjæringstidspunkt, - arbeidsgiveropplysninger = arbeidsgiveropplysninger.tilSkjønnsmessigFastsatt(meldingsreferanseId, skjæringstidspunkt), + arbeidsgiveropplysninger = arbeidsgiveropplysninger.tilSkjønnsmessigFastsatt( + meldingsreferanseId, + skjæringstidspunkt + ), opprettet = LocalDateTime.now() ).håndter(Person::håndter) return meldingsreferanseId @@ -932,37 +1163,126 @@ internal class OverstyrtArbeidsgiveropplysning( private val refusjonsopplysninger: List>, private val gjelder: Periode? = null ) { - internal constructor(orgnummer: String, inntekt: Inntekt) : this(orgnummer, inntekt, "forklaring", null, emptyList(), null) - internal constructor(orgnummer: String, inntekt: Inntekt, subsumsjon: Subsumsjon) : this(orgnummer, inntekt, "forklaring", subsumsjon, emptyList(), null) - internal constructor(orgnummer: String, inntekt: Inntekt, gjelder: Periode) : this(orgnummer, inntekt, "forklaring", null, emptyList(), gjelder) + internal constructor(orgnummer: String, inntekt: Inntekt) : this( + orgnummer, + inntekt, + "forklaring", + null, + emptyList(), + null + ) + + internal constructor(orgnummer: String, inntekt: Inntekt, subsumsjon: Subsumsjon) : this( + orgnummer, + inntekt, + "forklaring", + subsumsjon, + emptyList(), + null + ) + + internal constructor(orgnummer: String, inntekt: Inntekt, gjelder: Periode) : this( + orgnummer, + inntekt, + "forklaring", + null, + emptyList(), + gjelder + ) + internal companion object { - internal fun List.tilOverstyrt(meldingsreferanseId: UUID, skjæringstidspunkt: LocalDate) = + internal fun List.tilOverstyrt( + meldingsreferanseId: UUID, + skjæringstidspunkt: LocalDate + ) = map { val gjelder = it.gjelder ?: (skjæringstidspunkt til LocalDate.MAX) - ArbeidsgiverInntektsopplysning(it.orgnummer, gjelder, Saksbehandler(skjæringstidspunkt, meldingsreferanseId, it.inntekt, it.forklaring, it.subsumsjon, LocalDateTime.now()), RefusjonsopplysningerBuilder().apply { - it.refusjonsopplysninger.forEach { (fom, tom, refusjonsbeløp) -> leggTil(Refusjonsopplysning(meldingsreferanseId, fom, tom, refusjonsbeløp, SAKSBEHANDLER, LocalDateTime.now()), LocalDateTime.now())} - }.build()) + ArbeidsgiverInntektsopplysning( + it.orgnummer, + gjelder, + Saksbehandler( + skjæringstidspunkt, + meldingsreferanseId, + it.inntekt, + it.forklaring, + it.subsumsjon, + LocalDateTime.now() + ), + RefusjonsopplysningerBuilder().apply { + it.refusjonsopplysninger.forEach { (fom, tom, refusjonsbeløp) -> + leggTil( + Refusjonsopplysning( + meldingsreferanseId, + fom, + tom, + refusjonsbeløp, + SAKSBEHANDLER, + LocalDateTime.now() + ), + LocalDateTime.now() + ) + } + }.build() + ) } - internal fun List.tilSkjønnsmessigFastsatt(meldingsreferanseId: UUID, skjæringstidspunkt: LocalDate) = + internal fun List.tilSkjønnsmessigFastsatt( + meldingsreferanseId: UUID, + skjæringstidspunkt: LocalDate + ) = map { val gjelder = it.gjelder ?: (skjæringstidspunkt til LocalDate.MAX) - ArbeidsgiverInntektsopplysning(it.orgnummer, gjelder, SkjønnsmessigFastsatt(skjæringstidspunkt, meldingsreferanseId, it.inntekt, LocalDateTime.now()), RefusjonsopplysningerBuilder().apply { - it.refusjonsopplysninger.forEach { (fom, tom, refusjonsbeløp) -> leggTil(Refusjonsopplysning(meldingsreferanseId, fom, tom, refusjonsbeløp, SAKSBEHANDLER, LocalDateTime.now()), LocalDateTime.now())} - }.build()) + ArbeidsgiverInntektsopplysning( + it.orgnummer, + gjelder, + SkjønnsmessigFastsatt( + skjæringstidspunkt, + meldingsreferanseId, + it.inntekt, + LocalDateTime.now() + ), + RefusjonsopplysningerBuilder().apply { + it.refusjonsopplysninger.forEach { (fom, tom, refusjonsbeløp) -> + leggTil( + Refusjonsopplysning( + meldingsreferanseId, + fom, + tom, + refusjonsbeløp, + SAKSBEHANDLER, + LocalDateTime.now() + ), + LocalDateTime.now() + ) + } + }.build() + ) } - internal fun List.refusjonstidslinjer(meldingsreferanseId: UUID, opprettet: LocalDateTime) = this.associateBy { it.orgnummer }.mapValues { (_, opplysning) -> - val strekkbar = opplysning.refusjonsopplysninger.any { (_,tom) -> tom == null } + internal fun List.refusjonstidslinjer( + meldingsreferanseId: UUID, + opprettet: LocalDateTime + ) = this.associateBy { it.orgnummer }.mapValues { (_, opplysning) -> + val strekkbar = opplysning.refusjonsopplysninger.any { (_, tom) -> tom == null } opplysning.refusjonsopplysninger.fold(Beløpstidslinje()) { acc, (fom, tom, beløp) -> - acc + Beløpstidslinje.fra(fom til (tom ?: fom), beløp, Kilde(meldingsreferanseId, SAKSBEHANDLER, opprettet)) - }to strekkbar + acc + Beløpstidslinje.fra( + fom til (tom ?: fom), + beløp, + Kilde(meldingsreferanseId, SAKSBEHANDLER, opprettet) + ) + } to strekkbar } } } internal fun AbstractEndToEndTest.håndterOverstyrTidslinje( - overstyringsdager: List = listOf(ManuellOverskrivingDag(17.januar, Dagtype.Feriedag, 100)), + overstyringsdager: List = listOf( + ManuellOverskrivingDag( + 17.januar, + Dagtype.Feriedag, + 100 + ) + ), orgnummer: String = ORGNUMMER, meldingsreferanseId: UUID = UUID.randomUUID() ): OverstyrTidslinje { @@ -1018,11 +1338,26 @@ internal fun AbstractEndToEndTest.håndterFeriepengerUtbetalt( ).håndter(Person::håndter) } -internal fun AbstractEndToEndTest.håndterOverstyringSykedag(periode: Periode) = håndterOverstyrTidslinje(periode.map { manuellSykedag(it) }) +internal fun AbstractEndToEndTest.håndterOverstyringSykedag(periode: Periode) = + håndterOverstyrTidslinje(periode.map { manuellSykedag(it) }) -internal fun AbstractEndToEndTest.nyPeriode(periode: Periode, orgnummer: String = ORGNUMMER, grad: Prosentdel = 100.prosent, fnr: Personidentifikator = UNG_PERSON_FNR_2018) { - håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive), fnr = fnr, orgnummer = orgnummer) - håndterSøknad(Søknadsperiode.Sykdom(periode.start, periode.endInclusive, grad), fnr = fnr, orgnummer = orgnummer) +internal fun AbstractEndToEndTest.nyPeriode( + periode: Periode, + orgnummer: String = ORGNUMMER, + grad: Prosentdel = 100.prosent, + fnr: Personidentifikator = UNG_PERSON_FNR_2018 +) { + håndterSykmelding( + Sykmeldingsperiode(periode.start, periode.endInclusive), + fnr = fnr, + orgnummer = orgnummer + ) + håndterSøknad( + Søknadsperiode.Sykdom(periode.start, periode.endInclusive, grad), + fnr = fnr, + orgnummer = orgnummer + ) } -internal fun AbstractEndToEndTest.forkastAlle() = person.søppelbøtte(forrigeHendelse, Aktivitetslogg()) { true } +internal fun AbstractEndToEndTest.forkastAlle() = + person.søppelbøtte(forrigeHendelse, Aktivitetslogg()) { true } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseHelpers.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseHelpers.kt index 60c4b5ee18..3ec05a1f70 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseHelpers.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/HendelseHelpers.kt @@ -13,7 +13,11 @@ internal class EtterspurtBehov( private val vedtaksperiodeId: UUID ) { companion object { - internal fun fjern(liste: MutableList, orgnummer: String, type: Aktivitet.Behov.Behovtype) { + internal fun fjern( + liste: MutableList, + orgnummer: String, + type: Aktivitet.Behov.Behovtype + ) { liste.removeIf { it.orgnummer == orgnummer && it.type == type } } @@ -37,7 +41,11 @@ internal class EtterspurtBehov( vedtaksperiodeIdInnhenter: IdInnhenter, orgnummer: String ) = - ikkeBesvarteBehov.firstOrNull { it.type == type && it.orgnummer == orgnummer && it.vedtaksperiodeId == vedtaksperiodeIdInnhenter.id(orgnummer) } + ikkeBesvarteBehov.firstOrNull { + it.type == type && it.orgnummer == orgnummer && it.vedtaksperiodeId == vedtaksperiodeIdInnhenter.id( + orgnummer + ) + } internal fun finnEtterspurtBehov( ikkeBesvarteBehov: MutableList, @@ -47,12 +55,17 @@ internal class EtterspurtBehov( tilstand: TilstandType ) = ikkeBesvarteBehov.firstOrNull { - it.type == type && it.orgnummer == orgnummer && it.vedtaksperiodeId == vedtaksperiodeIdInnhenter.id(orgnummer) && it.tilstand == tilstand + it.type == type && it.orgnummer == orgnummer && it.vedtaksperiodeId == vedtaksperiodeIdInnhenter.id( + orgnummer + ) && it.tilstand == tilstand } } override fun toString() = "$type ($tilstand)" } -internal fun AbstractEndToEndTest.finnSkjæringstidspunkt(orgnummer: String, vedtaksperiodeIdInnhenter: IdInnhenter) = +internal fun AbstractEndToEndTest.finnSkjæringstidspunkt( + orgnummer: String, + vedtaksperiodeIdInnhenter: IdInnhenter +) = inspektør(orgnummer).skjæringstidspunkt(vedtaksperiodeIdInnhenter) diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Ingenting\303\205SimulereE2ETest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Ingenting\303\205SimulereE2ETest.kt" index c29848542d..36a7ca426a 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Ingenting\303\205SimulereE2ETest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Ingenting\303\205SimulereE2ETest.kt" @@ -30,16 +30,28 @@ internal class IngentingÅSimulereE2ETest : AbstractEndToEndTest() { håndterSøknad(20.januar til 21.januar) håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) - assertTilstander(2.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_GODKJENNING, AVSLUTTET) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_GODKJENNING, + AVSLUTTET + ) assertEquals(Utbetalingstatus.GODKJENT_UTEN_UTBETALING, inspektør.utbetalingtilstand(1)) } @Test fun `førstegangsbehandling på eksisterende utbetaling med bare helg`() { - nyttVedtak(1.januar til 18.januar) + nyttVedtak(1.januar til 18.januar) håndterSykmelding(Sykmeldingsperiode(20.januar, 21.januar)) håndterSøknad(20.januar til 21.januar) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/KunEnArbeidsgiverTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/KunEnArbeidsgiverTest.kt index 42d29e465e..ef8c818863 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/KunEnArbeidsgiverTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/KunEnArbeidsgiverTest.kt @@ -223,7 +223,10 @@ internal class KunEnArbeidsgiverTest : AbstractDslTest() { @Test fun `Søknad med utenlandsopphold gir warning`() { håndterSykmelding(Sykmeldingsperiode(3.januar, 26.januar)) - håndterSøknad(Sykdom(3.januar, 26.januar, 100.prosent), Utlandsopphold(11.januar, 15.januar)) + håndterSøknad( + Sykdom(3.januar, 26.januar, 100.prosent), + Utlandsopphold(11.januar, 15.januar) + ) assertVarsler() assertVarsel(RV_SØ_8, 1.vedtaksperiode.filter()) inspektør.also { @@ -236,7 +239,10 @@ internal class KunEnArbeidsgiverTest : AbstractDslTest() { @Test fun `søknad sendt etter 3 mnd`() { håndterSykmelding(Sykmeldingsperiode(3.januar, 26.januar)) - håndterSøknad(Sykdom(3.januar, 26.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.mai) + håndterSøknad( + Sykdom(3.januar, 26.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.mai + ) håndterInntektsmelding(listOf(3.januar til 18.januar), INNTEKT) håndterVilkårsgrunnlag(1.vedtaksperiode) assertIngenFunksjonelleFeil() @@ -269,9 +275,15 @@ internal class KunEnArbeidsgiverTest : AbstractDslTest() { arbeidsgiverperioder = listOf(16.desember(2017) til 31.desember(2017)), beregnetInntekt = INNTEKT ) - assertEquals("GG UUUUUGG UUUUUGG SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "GG UUUUUGG UUUUUGG SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) - assertEquals(16.desember(2017) til 31.januar, inspektør.vedtaksperioder(1.vedtaksperiode).periode) + assertEquals( + 16.desember(2017) til 31.januar, + inspektør.vedtaksperioder(1.vedtaksperiode).periode + ) } @Test @@ -286,7 +298,10 @@ internal class KunEnArbeidsgiverTest : AbstractDslTest() { ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) - assertEquals(14.desember(2017) til 31.januar, inspektør.vedtaksperioder(1.vedtaksperiode).periode) + assertEquals( + 14.desember(2017) til 31.januar, + inspektør.vedtaksperioder(1.vedtaksperiode).periode + ) } @Test @@ -334,7 +349,10 @@ internal class KunEnArbeidsgiverTest : AbstractDslTest() { nyttVedtak(1.januar til 20.januar, 100.prosent) håndterSykmelding(Sykmeldingsperiode(21.januar, 31.januar)) håndterSøknad(Sykdom(21.januar, 31.januar, 100.prosent), Ferie(21.januar, 31.januar)) - håndterYtelser(2.vedtaksperiode, arbeidsavklaringspenger = listOf(3.januar.minusDays(60) til 5.januar.minusDays(60))) + håndterYtelser( + 2.vedtaksperiode, + arbeidsavklaringspenger = listOf(3.januar.minusDays(60) til 5.januar.minusDays(60)) + ) assertVarsler(2.vedtaksperiode.filter()) assertTilstander( 2.vedtaksperiode, @@ -410,7 +428,15 @@ internal class KunEnArbeidsgiverTest : AbstractDslTest() { assertIngenFunksjonelleFeil() assertActivities() - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) assertTilstander( 2.vedtaksperiode, START, @@ -536,8 +562,17 @@ internal class KunEnArbeidsgiverTest : AbstractDslTest() { @Test fun `Person uten skjæringstidspunkt feiler ikke i validering av Utbetalingshistorikk`() { håndterSykmelding(Sykmeldingsperiode(23.oktober(2020), 18.november(2020))) - håndterSøknad(Sykdom(23.oktober(2020), 18.november(2020), 100.prosent), Ferie(23.oktober(2020), 18.november(2020))) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + håndterSøknad( + Sykdom(23.oktober(2020), 18.november(2020), 100.prosent), + Ferie(23.oktober(2020), 18.november(2020)) + ) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -561,8 +596,15 @@ internal class KunEnArbeidsgiverTest : AbstractDslTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode, true) - assertEquals(UtbetalingInntektskilde.EN_ARBEIDSGIVER, inspektør.inntektskilde(1.vedtaksperiode)) - assertEquals("EN_ARBEIDSGIVER", inspiser(personInspektør).aktivitetslogg.sisteBehov(1.vedtaksperiode).detaljer()["inntektskilde"]) + assertEquals( + UtbetalingInntektskilde.EN_ARBEIDSGIVER, + inspektør.inntektskilde(1.vedtaksperiode) + ) + assertEquals( + "EN_ARBEIDSGIVER", + inspiser(personInspektør).aktivitetslogg.sisteBehov(1.vedtaksperiode) + .detaljer()["inntektskilde"] + ) } @Test @@ -574,7 +616,8 @@ internal class KunEnArbeidsgiverTest : AbstractDslTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - val godkjenningsbehov = inspiser(personInspektør).aktivitetslogg.sisteBehov(Aktivitet.Behov.Behovtype.Godkjenning) + val godkjenningsbehov = + inspiser(personInspektør).aktivitetslogg.sisteBehov(Aktivitet.Behov.Behovtype.Godkjenning) assertEquals(1.januar.toString(), godkjenningsbehov.detaljer()["skjæringstidspunkt"]) } @@ -674,7 +717,10 @@ internal class KunEnArbeidsgiverTest : AbstractDslTest() { mottatt = 6.august.atStartOfDay(), sykmeldingSkrevet = 6.august.atStartOfDay() ) - håndterSøknad(Sykdom(22.februar, 14.mars, 50.prosent), sendtTilNAVEllerArbeidsgiver = 8.august) + håndterSøknad( + Sykdom(22.februar, 14.mars, 50.prosent), + sendtTilNAVEllerArbeidsgiver = 8.august + ) håndterInntektsmelding(listOf(22.februar til 14.mars), INNTEKT) håndterVilkårsgrunnlag(2.vedtaksperiode) @@ -710,6 +756,10 @@ internal class KunEnArbeidsgiverTest : AbstractDslTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() - assertTrue(inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.utbetalingstidslinje.inspektør.erNavdag(18.oktober(2021))) + assertTrue( + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.utbetalingstidslinje.inspektør.erNavdag( + 18.oktober(2021) + ) + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MaksdatoE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MaksdatoE2ETest.kt index a4b86402e8..f16cb85c85 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MaksdatoE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MaksdatoE2ETest.kt @@ -21,7 +21,15 @@ internal class MaksdatoE2ETest : AbstractEndToEndTest() { @Test fun `hensyntar tidligere arbeidsgivere fra IT`() { - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(a2, 1.januar, 31.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + a2, + 1.januar, + 31.januar, + 100.prosent, + INNTEKT + ) + ) nyPeriode(mars, a1) håndterInntektsmelding(listOf(1.mars til 16.mars)) håndterVilkårsgrunnlag(1.vedtaksperiode) @@ -38,7 +46,15 @@ internal class MaksdatoE2ETest : AbstractEndToEndTest() { @Test fun `hensyntar ikke senere arbeidsgivere fra IT`() { - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(a2, 1.april, 30.april, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + a2, + 1.april, + 30.april, + 100.prosent, + INNTEKT + ) + ) nyPeriode(mars, a1) håndterInntektsmelding(listOf(1.mars til 16.mars)) håndterVilkårsgrunnlag(1.vedtaksperiode) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MakstidIAvventerBlokkerendePeriodeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MakstidIAvventerBlokkerendePeriodeTest.kt index 9d263fd847..e7faa0e83b 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MakstidIAvventerBlokkerendePeriodeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MakstidIAvventerBlokkerendePeriodeTest.kt @@ -13,7 +13,7 @@ import no.nav.helse.person.TilstandType.AVVENTER_INNTEKTSMELDING import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -internal class MakstidIAvventerBlokkerendePeriodeTest: AbstractDslTest() { +internal class MakstidIAvventerBlokkerendePeriodeTest : AbstractDslTest() { @Test fun `periode i avventer blokkerende som venter på inntektsmelding fra annen arbeidsgiver bør ha samme timeout som avventer inntektsmelding`() { @@ -114,4 +114,4 @@ internal class MakstidIAvventerBlokkerendePeriodeTest: AbstractDslTest() { private fun venterTil(vedtaksperiodeId: UUID) = observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == vedtaksperiodeId }.venterTil.toLocalDate() -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ManglerVilk\303\245rsgrunnlagE2ETest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ManglerVilk\303\245rsgrunnlagE2ETest.kt" index f66f854599..3934cde041 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ManglerVilk\303\245rsgrunnlagE2ETest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ManglerVilk\303\245rsgrunnlagE2ETest.kt" @@ -42,12 +42,20 @@ internal class ManglerVilkårsgrunnlagE2ETest : AbstractEndToEndTest() { assertNull(inspektør.vilkårsgrunnlag(1.vedtaksperiode)) nyPeriode(22.januar til 31.januar) - håndterInntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), førsteFraværsdag = 22.januar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + førsteFraværsdag = 22.januar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertNull(inspektør.vilkårsgrunnlag(1.vedtaksperiode)) - håndterInntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -70,15 +78,32 @@ internal class ManglerVilkårsgrunnlagE2ETest : AbstractEndToEndTest() { assertEquals(1.februar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertNotNull(inspektør.vilkårsgrunnlag(1.vedtaksperiode)) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 31.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 31.januar, + 100.prosent, + INNTEKT + ) + ) nyPeriode(10.mars til 31.mars) - håndterInntektsmelding(listOf(10.mars til 26.mars), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(10.mars til 26.mars), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) assertEquals(1.februar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) - assertEquals(setOf(1.februar, 10.mars), person.inspektør.vilkårsgrunnlagHistorikk.aktiveSpleisSkjæringstidspunkt) + assertEquals( + setOf(1.februar, 10.mars), + person.inspektør.vilkårsgrunnlagHistorikk.aktiveSpleisSkjæringstidspunkt + ) - assertEquals(listOf(1.februar til 16.februar), inspektør.arbeidsgiverperioder(1.vedtaksperiode)) + assertEquals( + listOf(1.februar til 16.februar), + inspektør.arbeidsgiverperioder(1.vedtaksperiode) + ) // infotrygdendringen påvirker beregning av agp for 2.vedtaksperiode siden den er åpnet opp. // 1.vedtaksperiode forblir uendret siden den ikke har fått ny behandling assertEquals(emptyList(), inspektør.arbeidsgiverperioder(2.vedtaksperiode)) @@ -88,8 +113,14 @@ internal class ManglerVilkårsgrunnlagE2ETest : AbstractEndToEndTest() { assertIngenVarsel(Varselkode.RV_OS_2) inspektør.utbetaling(1).also { utbetalinginspektør -> assertEquals(2, utbetalinginspektør.arbeidsgiverOppdrag.size) - assertEquals(17.februar til 28.februar, utbetalinginspektør.arbeidsgiverOppdrag[0].inspektør.periode) - assertEquals(10.mars til 30.mars, utbetalinginspektør.arbeidsgiverOppdrag[1].inspektør.periode) + assertEquals( + 17.februar til 28.februar, + utbetalinginspektør.arbeidsgiverOppdrag[0].inspektør.periode + ) + assertEquals( + 10.mars til 30.mars, + utbetalinginspektør.arbeidsgiverOppdrag[1].inspektør.periode + ) } } @@ -98,7 +129,11 @@ internal class ManglerVilkårsgrunnlagE2ETest : AbstractEndToEndTest() { håndterSøknad(1.januar til 3.januar) håndterSøknad(31.januar til 5.februar) // perioden 4. til 9.januar er paddet arbeidsdager; perioden 23.januar til 30.januar er "implisitte arbeidsdager" (ukjentdager på sykdomtsidslinjen) - håndterInntektsmelding(listOf(1.januar til 3.januar, 10.januar til 22.januar), førsteFraværsdag = 31.januar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 3.januar, 10.januar til 22.januar), + førsteFraværsdag = 31.januar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -113,10 +148,14 @@ internal class ManglerVilkårsgrunnlagE2ETest : AbstractEndToEndTest() { } observatør.vedtaksperiodeVenter.clear() - assertUgyldigSituasjon("En vedtaksperiode i AVVENTER_REVURDERING trenger hjelp fordi FLERE_SKJÆRINGSTIDSPUNKT!"){ + assertUgyldigSituasjon("En vedtaksperiode i AVVENTER_REVURDERING trenger hjelp fordi FLERE_SKJÆRINGSTIDSPUNKT!") { håndterSøknad(10.januar til 26.januar) } - observatør.assertVenter(2.vedtaksperiode.id(a1), venterPåHva = HJELP, fordi = FLERE_SKJÆRINGSTIDSPUNKT) + observatør.assertVenter( + 2.vedtaksperiode.id(a1), + venterPåHva = HJELP, + fordi = FLERE_SKJÆRINGSTIDSPUNKT + ) inspektør.sykdomstidslinje.inspektør.also { sykdomstidslinjeInspektør -> assertInstanceOf(Dag.Arbeidsdag::class.java, sykdomstidslinjeInspektør[4.januar]) @@ -138,7 +177,10 @@ internal class ManglerVilkårsgrunnlagE2ETest : AbstractEndToEndTest() { val assertTilstandFørInntektsmeldingHensyntas: () -> Unit = { val førsteUtbetalingsdagIInfotrygd = 1.januar - assertEquals(førsteUtbetalingsdagIInfotrygd, inspektør.skjæringstidspunkt(1.vedtaksperiode)) + assertEquals( + førsteUtbetalingsdagIInfotrygd, + inspektør.skjæringstidspunkt(1.vedtaksperiode) + ) assertNotNull(inspektør.vilkårsgrunnlag(1.vedtaksperiode)) assertTrue(inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.infotrygd) } @@ -176,13 +218,22 @@ internal class ManglerVilkårsgrunnlagE2ETest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) assertSisteTilstand(2.vedtaksperiode, AVVENTER_REVURDERING) nullstillTilstandsendringer() - håndterInntektsmelding(listOf(1.februar til 16.februar), førsteFraværsdag = 1.februar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + førsteFraværsdag = 1.februar, + avsendersystem = ALTINN + ) assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(1.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING) } @@ -195,13 +246,24 @@ internal class ManglerVilkårsgrunnlagE2ETest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) nullstillTilstandsendringer() - håndterInntektsmelding(listOf(1.februar til 16.februar), førsteFraværsdag = 1.februar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + førsteFraværsdag = 1.februar, + avsendersystem = ALTINN + ) assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(1.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MedlemskapE2E.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MedlemskapE2E.kt index 8c16cbb65a..b9a2d7a590 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MedlemskapE2E.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MedlemskapE2E.kt @@ -45,9 +45,26 @@ internal class MedlemskapE2E : AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) - val forventetAvvisteDager = setOf(17.januar, 18.januar, 19.januar, 22.januar, 23.januar, 24.januar, 25.januar, 26.januar, 29.januar, 30.januar, 31.januar) - val forventetAvvisteUtbetalingsdager = inspektør.utbetalingstidslinjer(1.vedtaksperiode).drop(16).filterNot { it.dato.erHelg() } - assertEquals(forventetAvvisteDager, forventetAvvisteUtbetalingsdager.map { it.dato }.toSet()) + val forventetAvvisteDager = setOf( + 17.januar, + 18.januar, + 19.januar, + 22.januar, + 23.januar, + 24.januar, + 25.januar, + 26.januar, + 29.januar, + 30.januar, + 31.januar + ) + val forventetAvvisteUtbetalingsdager = + inspektør.utbetalingstidslinjer(1.vedtaksperiode).drop(16) + .filterNot { it.dato.erHelg() } + assertEquals( + forventetAvvisteDager, + forventetAvvisteUtbetalingsdager.map { it.dato }.toSet() + ) forventetAvvisteUtbetalingsdager.forEach { utbetalingsdag -> assertTrue(utbetalingsdag is AvvistDag) @@ -55,4 +72,4 @@ internal class MedlemskapE2E : AbstractDslTest() { } } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MinimumInntektE2E.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MinimumInntektE2E.kt index cd25516ca5..9590617b04 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MinimumInntektE2E.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/MinimumInntektE2E.kt @@ -18,7 +18,7 @@ import org.junit.jupiter.api.Test internal class MinimumInntektE2E : AbstractDslTest() { private companion object { - private val fødseldato67år = 31.januar(1951) + private val fødseldato67år = 31.januar(1951) } @Test @@ -32,7 +32,8 @@ internal class MinimumInntektE2E : AbstractDslTest() { a1 { nyPeriode(januar, a1) håndterInntektsmelding(listOf(1.januar til 16.januar), inntekt) - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( grunnlag(a1, skjæringstidspunkt, inntekt.repeat(3)) @@ -42,8 +43,15 @@ internal class MinimumInntektE2E : AbstractDslTest() { håndterYtelser(1.vedtaksperiode) inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.also { utbetalingstidslinjeInspektør -> assertEquals(11, utbetalingstidslinjeInspektør.avvistDagTeller) - assertEquals((17.januar til 31.januar).filterNot { it.erHelg() }, utbetalingstidslinjeInspektør.avvistedatoer) - assertTrue(utbetalingstidslinjeInspektør.avvistedatoer.all { utbetalingstidslinjeInspektør.begrunnelse(it).single() == Begrunnelse.MinimumInntekt }) + assertEquals( + (17.januar til 31.januar).filterNot { it.erHelg() }, + utbetalingstidslinjeInspektør.avvistedatoer + ) + assertTrue(utbetalingstidslinjeInspektør.avvistedatoer.all { + utbetalingstidslinjeInspektør.begrunnelse( + it + ).single() == Begrunnelse.MinimumInntekt + }) } assertSisteTilstand(1.vedtaksperiode, TilstandType.AVVENTER_GODKJENNING) } @@ -60,7 +68,8 @@ internal class MinimumInntektE2E : AbstractDslTest() { a1 { nyPeriode(22.januar til 28.februar, a1) håndterInntektsmelding(listOf(22.januar til 6.februar), inntekt) - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( grunnlag(a1, skjæringstidspunkt, inntekt.repeat(3)) @@ -70,8 +79,15 @@ internal class MinimumInntektE2E : AbstractDslTest() { håndterYtelser(1.vedtaksperiode) inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.also { utbetalingstidslinjeInspektør -> assertEquals(16, utbetalingstidslinjeInspektør.avvistDagTeller) - assertEquals((7.februar til 28.februar).filterNot { it.erHelg() }, utbetalingstidslinjeInspektør.avvistedatoer) - assertTrue(utbetalingstidslinjeInspektør.avvistedatoer.all { utbetalingstidslinjeInspektør.begrunnelse(it).single() == Begrunnelse.MinimumInntektOver67 }) + assertEquals( + (7.februar til 28.februar).filterNot { it.erHelg() }, + utbetalingstidslinjeInspektør.avvistedatoer + ) + assertTrue(utbetalingstidslinjeInspektør.avvistedatoer.all { + utbetalingstidslinjeInspektør.begrunnelse( + it + ).single() == Begrunnelse.MinimumInntektOver67 + }) } håndterUtbetalingsgodkjenning(1.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, TilstandType.AVSLUTTET) @@ -89,7 +105,8 @@ internal class MinimumInntektE2E : AbstractDslTest() { a1 { nyPeriode(februar, a1) håndterInntektsmelding(listOf(1.februar til 16.februar), inntekt) - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( grunnlag(a1, skjæringstidspunkt, inntekt.repeat(3)) @@ -99,8 +116,15 @@ internal class MinimumInntektE2E : AbstractDslTest() { håndterYtelser(1.vedtaksperiode) inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.also { utbetalingstidslinjeInspektør -> assertEquals(8, utbetalingstidslinjeInspektør.avvistDagTeller) - assertEquals((17.februar til 28.februar).filterNot { it.erHelg() }, utbetalingstidslinjeInspektør.avvistedatoer) - assertTrue(utbetalingstidslinjeInspektør.avvistedatoer.all { utbetalingstidslinjeInspektør.begrunnelse(it).single() == Begrunnelse.MinimumInntektOver67 }) + assertEquals( + (17.februar til 28.februar).filterNot { it.erHelg() }, + utbetalingstidslinjeInspektør.avvistedatoer + ) + assertTrue(utbetalingstidslinjeInspektør.avvistedatoer.all { + utbetalingstidslinjeInspektør.begrunnelse( + it + ).single() == Begrunnelse.MinimumInntektOver67 + }) } assertSisteTilstand(1.vedtaksperiode, TilstandType.AVVENTER_GODKJENNING) } @@ -117,7 +141,8 @@ internal class MinimumInntektE2E : AbstractDslTest() { a1 { nyPeriode(15.januar til 28.februar, a1) håndterInntektsmelding(listOf(15.januar til 30.januar), inntekt) - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( grunnlag(a1, skjæringstidspunkt, inntekt.repeat(3)) @@ -127,11 +152,20 @@ internal class MinimumInntektE2E : AbstractDslTest() { håndterYtelser(1.vedtaksperiode) inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.also { utbetalingstidslinjeInspektør -> assertEquals(21, utbetalingstidslinjeInspektør.avvistDagTeller) - assertEquals((31.januar til 28.februar).filterNot { it.erHelg() }, utbetalingstidslinjeInspektør.avvistedatoer) - assertEquals(Begrunnelse.MinimumInntekt, utbetalingstidslinjeInspektør.begrunnelse(31.januar).single()) - assertTrue((februar).filterNot { it.erHelg() }.all { utbetalingstidslinjeInspektør.begrunnelse(it).single() == Begrunnelse.MinimumInntektOver67 }) + assertEquals( + (31.januar til 28.februar).filterNot { it.erHelg() }, + utbetalingstidslinjeInspektør.avvistedatoer + ) + assertEquals( + Begrunnelse.MinimumInntekt, + utbetalingstidslinjeInspektør.begrunnelse(31.januar).single() + ) + assertTrue((februar).filterNot { it.erHelg() }.all { + utbetalingstidslinjeInspektør.begrunnelse(it) + .single() == Begrunnelse.MinimumInntektOver67 + }) } assertSisteTilstand(1.vedtaksperiode, TilstandType.AVVENTER_GODKJENNING) } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/OpptjeningE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/OpptjeningE2ETest.kt index 5dba24af39..4890e1614c 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/OpptjeningE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/OpptjeningE2ETest.kt @@ -30,7 +30,14 @@ import org.junit.jupiter.api.Test internal class OpptjeningE2ETest : AbstractEndToEndTest() { @Test fun `lagrer arbeidsforhold brukt til opptjening`() { - personMedArbeidsforhold(Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT)) + personMedArbeidsforhold( + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) + ) assertHarArbeidsforhold(1.januar, a1) assertHarIkkeArbeidsforhold(1.januar, a2) } @@ -48,8 +55,18 @@ internal class OpptjeningE2ETest : AbstractEndToEndTest() { @Test fun `lagrer arbeidsforhold brukt til opptjening om tilstøtende`() { personMedArbeidsforhold( - Vilkårsgrunnlag.Arbeidsforhold(a1, 20.desember(2017), null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, 19.desember(2017), Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 20.desember(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + 19.desember(2017), + Arbeidsforholdtype.ORDINÆRT + ) ) assertHarArbeidsforhold(1.januar, a1) @@ -60,7 +77,12 @@ internal class OpptjeningE2ETest : AbstractEndToEndTest() { fun `lagrer arbeidsforhold brukt til opptjening ved overlapp`() { personMedArbeidsforhold( Vilkårsgrunnlag.Arbeidsforhold(a1, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, 24.desember(2017), Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + 24.desember(2017), + Arbeidsforholdtype.ORDINÆRT + ) ) assertHarArbeidsforhold(1.januar, a1) assertHarArbeidsforhold(1.januar, a2) @@ -68,8 +90,16 @@ internal class OpptjeningE2ETest : AbstractEndToEndTest() { @Test fun `opptjening er ikke oppfylt siden det ikke er nok opptjeningsdager`() { - personMedArbeidsforhold(Vilkårsgrunnlag.Arbeidsforhold(a1, ansattFom = 31.desember(2017), ansattTom = null, Arbeidsforholdtype.ORDINÆRT)) - val grunnlagsdata = person.vilkårsgrunnlagFor(1.januar) as VilkårsgrunnlagHistorikk.Grunnlagsdata + personMedArbeidsforhold( + Vilkårsgrunnlag.Arbeidsforhold( + a1, + ansattFom = 31.desember(2017), + ansattTom = null, + Arbeidsforholdtype.ORDINÆRT + ) + ) + val grunnlagsdata = + person.vilkårsgrunnlagFor(1.januar) as VilkårsgrunnlagHistorikk.Grunnlagsdata assertEquals(1, grunnlagsdata.opptjening!!.opptjeningsdager()) assertEquals(false, grunnlagsdata.opptjening.harTilstrekkeligAntallOpptjeningsdager()) assertVarsel(RV_OV_1, 1.vedtaksperiode.filter(orgnummer = a1)) @@ -88,7 +118,12 @@ internal class OpptjeningE2ETest : AbstractEndToEndTest() { val arbeidsforhold = listOf( Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), 31.desember(2017), Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.desember(2017), + 31.desember(2017), + Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -102,7 +137,8 @@ internal class OpptjeningE2ETest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(372000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -123,7 +159,11 @@ internal class OpptjeningE2ETest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag( 1.vedtaksperiode, - inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering(ORGNUMMER, INGEN, 1.januar) + inntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + ORGNUMMER, + INGEN, + 1.januar + ) ) assertVarsel(RV_OV_3, 1.vedtaksperiode.filter()) @@ -133,20 +173,36 @@ internal class OpptjeningE2ETest : AbstractEndToEndTest() { assertEquals(0, inspektør.utbetaling(0).utbetalingstidslinje.inspektør.avvistDagTeller) } - private fun personMedArbeidsforhold(vararg arbeidsforhold: Vilkårsgrunnlag.Arbeidsforhold, fom: LocalDate = 1.januar, tom: LocalDate = 31.januar, vedtaksperiodeIdInnhenter: IdInnhenter = 1.vedtaksperiode) { + private fun personMedArbeidsforhold( + vararg arbeidsforhold: Vilkårsgrunnlag.Arbeidsforhold, + fom: LocalDate = 1.januar, + tom: LocalDate = 31.januar, + vedtaksperiodeIdInnhenter: IdInnhenter = 1.vedtaksperiode + ) { håndterSykmelding(Sykmeldingsperiode(fom, tom), orgnummer = a1) håndterSøknad(fom til tom, orgnummer = a1) håndterInntektsmelding(listOf(fom til fom.plusDays(15)), orgnummer = a1) - håndterVilkårsgrunnlag(vedtaksperiodeIdInnhenter, arbeidsforhold = arbeidsforhold.toList(), orgnummer = a1) + håndterVilkårsgrunnlag( + vedtaksperiodeIdInnhenter, + arbeidsforhold = arbeidsforhold.toList(), + orgnummer = a1 + ) } + companion object { - fun AbstractEndToEndTest.assertHarArbeidsforhold(skjæringstidspunkt: LocalDate, arbeidsforhold: String) { + fun AbstractEndToEndTest.assertHarArbeidsforhold( + skjæringstidspunkt: LocalDate, + arbeidsforhold: String + ) { val vilkårsgrunnlag = inspektør.vilkårsgrunnlag(skjæringstidspunkt) assertNotNull(vilkårsgrunnlag) assertTrue(vilkårsgrunnlag.inspektør.opptjening!!.arbeidsforhold.any { it.orgnummer == arbeidsforhold }) } - fun AbstractEndToEndTest.assertHarIkkeArbeidsforhold(skjæringstidspunkt: LocalDate, arbeidsforhold: String) { + fun AbstractEndToEndTest.assertHarIkkeArbeidsforhold( + skjæringstidspunkt: LocalDate, + arbeidsforhold: String + ) { val vilkårsgrunnlag = inspektør.vilkårsgrunnlag(skjæringstidspunkt) assertNotNull(vilkårsgrunnlag) assertFalse(vilkårsgrunnlag.inspektør.opptjening!!.arbeidsforhold.any { it.orgnummer == arbeidsforhold }) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SamletSykdomsgradE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SamletSykdomsgradE2ETest.kt index 75adbcc849..318fa4ca76 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SamletSykdomsgradE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SamletSykdomsgradE2ETest.kt @@ -27,7 +27,7 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -internal class SamletSykdomsgradE2ETest: AbstractEndToEndTest() { +internal class SamletSykdomsgradE2ETest : AbstractEndToEndTest() { @Test fun `hele perioden avvises`() { @@ -36,7 +36,10 @@ internal class SamletSykdomsgradE2ETest: AbstractEndToEndTest() { nyPeriode(5.februar til 9.februar, a2, 10.prosent) håndterYtelser(2.vedtaksperiode, orgnummer = a1) inspektør(a1).utbetaling(1).also { - assertEquals(listOf(5.februar, 6.februar, 7.februar, 8.februar, 9.februar), it.utbetalingstidslinje.inspektør.avvistedatoer) + assertEquals( + listOf(5.februar, 6.februar, 7.februar, 8.februar, 9.februar), + it.utbetalingstidslinje.inspektør.avvistedatoer + ) } } @@ -100,7 +103,14 @@ internal class SamletSykdomsgradE2ETest: AbstractEndToEndTest() { @Test fun `opprinnelig søknad med 100 prosent arbeidshelse blir korrigert slik at sykdomsgraden blir 100 prosent `() { håndterSykmelding(Sykmeldingsperiode(1.januar, 20.januar)) - håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent, 100.prosent)) // 100 prosent arbeidshelse => 0 prosent syk + håndterSøknad( + Sykdom( + 1.januar, + 20.januar, + 100.prosent, + 100.prosent + ) + ) // 100 prosent arbeidshelse => 0 prosent syk håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -145,7 +155,10 @@ internal class SamletSykdomsgradE2ETest: AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.mars, 20.mars)) håndterSøknad(1.mars til 20.mars) - håndterInntektsmelding(listOf(Periode(1.mars, 16.mars)), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(Periode(1.mars, 16.mars)), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode, INNTEKT) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SkatteinntekterlagLagtTilGrunnE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SkatteinntekterlagLagtTilGrunnE2ETest.kt index 7af8ca1000..c4ca26ddd9 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SkatteinntekterlagLagtTilGrunnE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SkatteinntekterlagLagtTilGrunnE2ETest.kt @@ -21,11 +21,31 @@ internal class SkatteinntekterlagLagtTilGrunnE2ETest : AbstractDslTest() { val inntektFraSkatt = 10000.månedlig a1 { håndterSøknad(januar) - håndterSykepengegrunnlagForArbeidsgiver(1.vedtaksperiode, 1.januar, listOf( - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 12), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 11), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 10), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", "") - )) + håndterSykepengegrunnlagForArbeidsgiver( + 1.vedtaksperiode, 1.januar, listOf( + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 12), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 11), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 10), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ) + ) + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -36,9 +56,18 @@ internal class SkatteinntekterlagLagtTilGrunnE2ETest : AbstractDslTest() { behandlingId = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().id, skjæringstidspunkt = 1.januar, skatteinntekter = listOf( - PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt(desember(2017), 10000.0), - PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt(november(2017), 10000.0), - PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt(oktober(2017), 10000.0) + PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt( + desember(2017), + 10000.0 + ), + PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt( + november(2017), + 10000.0 + ), + PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt( + oktober(2017), + 10000.0 + ) ), omregnetÅrsinntekt = 120000.0 ) @@ -47,34 +76,64 @@ internal class SkatteinntekterlagLagtTilGrunnE2ETest : AbstractDslTest() { } @Test - fun `event om at vi bruker skatteopplysninger med sprø minus`() = Toggle.InntektsmeldingSomIkkeKommer.enable { - val inntektFraSkatt = 10000.månedlig - val sprøInntektFraSkatt = 30000.månedlig * -1 - a1 { - håndterSøknad(januar) - håndterSykepengegrunnlagForArbeidsgiver(1.vedtaksperiode, 1.januar, listOf( - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 12), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 11), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 10), sprøInntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", "") - )) - håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode) + fun `event om at vi bruker skatteopplysninger med sprø minus`() = + Toggle.InntektsmeldingSomIkkeKommer.enable { + val inntektFraSkatt = 10000.månedlig + val sprøInntektFraSkatt = 30000.månedlig * -1 + a1 { + håndterSøknad(januar) + håndterSykepengegrunnlagForArbeidsgiver( + 1.vedtaksperiode, 1.januar, listOf( + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 12), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 11), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 10), + sprøInntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ) + ) + ) + håndterVilkårsgrunnlag(1.vedtaksperiode) + håndterYtelser(1.vedtaksperiode) - val event = observatør.skatteinntekterLagtTilGrunnEventer.single() - val forventet = PersonObserver.SkatteinntekterLagtTilGrunnEvent( - organisasjonsnummer = a1, - vedtaksperiodeId = 1.vedtaksperiode, - behandlingId = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().id, - skjæringstidspunkt = 1.januar, - skatteinntekter = listOf( - PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt(desember(2017), 10000.0), - PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt(november(2017), 10000.0), - PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt(oktober(2017), -30000.0), - ), - omregnetÅrsinntekt = 0.0 - ) - assertEquals(forventet, event) + val event = observatør.skatteinntekterLagtTilGrunnEventer.single() + val forventet = PersonObserver.SkatteinntekterLagtTilGrunnEvent( + organisasjonsnummer = a1, + vedtaksperiodeId = 1.vedtaksperiode, + behandlingId = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().id, + skjæringstidspunkt = 1.januar, + skatteinntekter = listOf( + PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt( + desember(2017), + 10000.0 + ), + PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt( + november(2017), + 10000.0 + ), + PersonObserver.SkatteinntekterLagtTilGrunnEvent.Skatteinntekt( + oktober(2017), + -30000.0 + ), + ), + omregnetÅrsinntekt = 0.0 + ) + assertEquals(forventet, event) + } } - } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Skj\303\246ringstidspunktE2ETest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Skj\303\246ringstidspunktE2ETest.kt" index e928ae8fd6..61875834ad 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Skj\303\246ringstidspunktE2ETest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Skj\303\246ringstidspunktE2ETest.kt" @@ -28,7 +28,7 @@ import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -internal class SkjæringstidspunktE2ETest: AbstractEndToEndTest() { +internal class SkjæringstidspunktE2ETest : AbstractEndToEndTest() { @Test fun `skjæringstidspunkt skal ikke hensynta sykedager i et senere sykefraværstilefelle`() { @@ -50,12 +50,17 @@ internal class SkjæringstidspunktE2ETest: AbstractEndToEndTest() { fun `periode med bare ferie - tidligere sykdom`() { håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars)) håndterUtbetalingshistorikkEtterInfotrygdendring( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 10.januar, 100.prosent, INNTEKT), + ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 10.januar, 100.prosent, INNTEKT), inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 1.januar, INNTEKT, true)) ) håndterSøknad(Sykdom(1.mars, 31.mars, 100.prosent), Ferie(1.mars, 31.mars)) assertEquals(1.mars, inspektør.skjæringstidspunkt(1.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -66,10 +71,24 @@ internal class SkjæringstidspunktE2ETest: AbstractEndToEndTest() { håndterSøknad(januar, orgnummer = a1) håndterSøknad(24.februar til 24.mars, orgnummer = a1) - håndterSøknad(Sykdom(25.januar, 25.februar, 100.prosent), Arbeid(20.februar, 25.februar), orgnummer = a2) + håndterSøknad( + Sykdom(25.januar, 25.februar, 100.prosent), + Arbeid(20.februar, 25.februar), + orgnummer = a2 + ) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 15000.månedlig, orgnummer = a1, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) - håndterInntektsmelding(listOf(25.januar til 10.februar), beregnetInntekt = 16000.månedlig, orgnummer = a2, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 15000.månedlig, + orgnummer = a1, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) + håndterInntektsmelding( + listOf(25.januar til 10.februar), + beregnetInntekt = 16000.månedlig, + orgnummer = a2, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) val inntekter = listOf( grunnlag(a1, 1.januar, 15000.månedlig.repeat(3)), @@ -95,11 +114,25 @@ internal class SkjæringstidspunktE2ETest: AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode, orgnummer = a2) håndterSimulering(1.vedtaksperiode, orgnummer = a2) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + orgnummer = a2 + ) assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, orgnummer = a1) nullstillTilstandsendringer() - håndterInntektsmelding(listOf(24.februar til 11.mars), beregnetInntekt = 17000.månedlig, orgnummer = a1, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(24.februar til 11.mars), + beregnetInntekt = 17000.månedlig, + orgnummer = a1, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterYtelser(1.vedtaksperiode, orgnummer = a2) håndterSimulering(1.vedtaksperiode, orgnummer = a2) @@ -121,8 +154,29 @@ internal class SkjæringstidspunktE2ETest: AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET, orgnummer = a2) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + AVSLUTTET, + orgnummer = a2 + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + AVSLUTTET, + orgnummer = a1 + ) } @Test @@ -133,10 +187,24 @@ internal class SkjæringstidspunktE2ETest: AbstractEndToEndTest() { håndterSøknad(januar, orgnummer = a1) håndterSøknad(23.februar til 24.mars, orgnummer = a1) - håndterSøknad(Sykdom(25.januar, 25.februar, 100.prosent), Arbeid(20.februar, 25.februar), orgnummer = a2) + håndterSøknad( + Sykdom(25.januar, 25.februar, 100.prosent), + Arbeid(20.februar, 25.februar), + orgnummer = a2 + ) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 15000.månedlig, orgnummer = a1, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) - håndterInntektsmelding(listOf(25.januar til 10.februar), beregnetInntekt = 16000.månedlig, orgnummer = a2, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 15000.månedlig, + orgnummer = a1, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) + håndterInntektsmelding( + listOf(25.januar til 10.februar), + beregnetInntekt = 16000.månedlig, + orgnummer = a2, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) val inntekter = listOf( grunnlag(a1, 1.januar, 15000.månedlig.repeat(3)), @@ -165,10 +233,22 @@ internal class SkjæringstidspunktE2ETest: AbstractEndToEndTest() { assertTilstander(1.vedtaksperiode, TIL_UTBETALING, AVSLUTTET, orgnummer = a1) assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + orgnummer = a2 + ) nullstillTilstandsendringer() - håndterInntektsmelding(listOf(23.februar til 10.mars), beregnetInntekt = 15000.månedlig, orgnummer = a1, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(23.februar til 10.mars), + beregnetInntekt = 15000.månedlig, + orgnummer = a1, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterYtelser(1.vedtaksperiode, orgnummer = a2) håndterSimulering(1.vedtaksperiode, orgnummer = a2) @@ -176,7 +256,23 @@ internal class SkjæringstidspunktE2ETest: AbstractEndToEndTest() { håndterUtbetalt(orgnummer = a2) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET, orgnummer = a2) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + AVSLUTTET, + orgnummer = a2 + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SubsumsjonE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SubsumsjonE2ETest.kt index 597d721877..1818d9d4af 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SubsumsjonE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/SubsumsjonE2ETest.kt @@ -80,24 +80,77 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { fun `subsummerer ikke inntektsspesfikke subsumsjoner ved overstyring som ikke fører til endrede inntekter i sykpengegrunnlaget`() { håndterSøknad(januar, orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, orgnummer = a1, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + ) + ) + assertEquals( + 1, + SubsumsjonInspektør(jurist).antallSubsumsjoner( + paragraf = PARAGRAF_8_28, + ledd = LEDD_3, + bokstav = BOKSTAV_A, + versjon = 1.januar(2019) + ) + ) + assertEquals( + 1, + SubsumsjonInspektør(jurist).antallSubsumsjoner( + paragraf = PARAGRAF_8_29, + versjon = 1.januar(2019) ) ) - assertEquals(1, SubsumsjonInspektør(jurist).antallSubsumsjoner(paragraf = PARAGRAF_8_28, ledd = LEDD_3, bokstav = BOKSTAV_A, versjon = 1.januar(2019))) - assertEquals(1, SubsumsjonInspektør(jurist).antallSubsumsjoner(paragraf = PARAGRAF_8_29, versjon = 1.januar(2019))) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a2, INNTEKT * 1.1, Subsumsjon("8-28", 3, "b")))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a2, INNTEKT * 1.1, Subsumsjon("8-28", 3, "b"))) + ) - assertEquals(1, SubsumsjonInspektør(jurist).antallSubsumsjoner(paragraf = PARAGRAF_8_28, ledd = LEDD_3, bokstav = BOKSTAV_A, versjon = 1.januar(2019))) - assertEquals(1, SubsumsjonInspektør(jurist).antallSubsumsjoner(paragraf = PARAGRAF_8_29, versjon = 1.januar(2019))) - assertEquals(1, SubsumsjonInspektør(jurist).antallSubsumsjoner(paragraf = PARAGRAF_8_28, ledd = LEDD_3, bokstav = BOKSTAV_B, versjon = 1.januar(2019))) + assertEquals( + 1, + SubsumsjonInspektør(jurist).antallSubsumsjoner( + paragraf = PARAGRAF_8_28, + ledd = LEDD_3, + bokstav = BOKSTAV_A, + versjon = 1.januar(2019) + ) + ) + assertEquals( + 1, + SubsumsjonInspektør(jurist).antallSubsumsjoner( + paragraf = PARAGRAF_8_29, + versjon = 1.januar(2019) + ) + ) + assertEquals( + 1, + SubsumsjonInspektør(jurist).antallSubsumsjoner( + paragraf = PARAGRAF_8_28, + ledd = LEDD_3, + bokstav = BOKSTAV_B, + versjon = 1.januar(2019) + ) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) @@ -106,10 +159,36 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSøknad(februar, orgnummer = a2) - håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a2, beregnetInntekt = INNTEKT) - assertEquals(1, SubsumsjonInspektør(jurist).antallSubsumsjoner(paragraf = PARAGRAF_8_28, ledd = LEDD_3, bokstav = BOKSTAV_A, versjon = 1.januar(2019))) - assertEquals(1, SubsumsjonInspektør(jurist).antallSubsumsjoner(paragraf = PARAGRAF_8_29, versjon = 1.januar(2019))) - assertEquals(1, SubsumsjonInspektør(jurist).antallSubsumsjoner(paragraf = PARAGRAF_8_28, ledd = LEDD_3, bokstav = BOKSTAV_B, versjon = 1.januar(2019))) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + orgnummer = a2, + beregnetInntekt = INNTEKT + ) + assertEquals( + 1, + SubsumsjonInspektør(jurist).antallSubsumsjoner( + paragraf = PARAGRAF_8_28, + ledd = LEDD_3, + bokstav = BOKSTAV_A, + versjon = 1.januar(2019) + ) + ) + assertEquals( + 1, + SubsumsjonInspektør(jurist).antallSubsumsjoner( + paragraf = PARAGRAF_8_29, + versjon = 1.januar(2019) + ) + ) + assertEquals( + 1, + SubsumsjonInspektør(jurist).antallSubsumsjoner( + paragraf = PARAGRAF_8_28, + ledd = LEDD_3, + bokstav = BOKSTAV_B, + versjon = 1.januar(2019) + ) + ) } @Test @@ -117,7 +196,14 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(januar) håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(ORGNUMMER, 4.desember(2017), 31.januar, Arbeidsforholdtype.ORDINÆRT)) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + ORGNUMMER, + 4.desember(2017), + 31.januar, + Arbeidsforholdtype.ORDINÆRT + ) + ) håndterVilkårsgrunnlag(arbeidsforhold = arbeidsforhold) SubsumsjonInspektør(jurist).assertOppfylt( @@ -144,7 +230,14 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(januar) håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(ORGNUMMER, 5.desember(2017), 31.januar, Arbeidsforholdtype.ORDINÆRT)) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + ORGNUMMER, + 5.desember(2017), + 31.januar, + Arbeidsforholdtype.ORDINÆRT + ) + ) håndterVilkårsgrunnlag(arbeidsforhold = arbeidsforhold) SubsumsjonInspektør(jurist).assertIkkeOppfylt( @@ -311,7 +404,14 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(januar) håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 46817.årlig) - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(ORGNUMMER, 5.desember(2017), 31.januar, Arbeidsforholdtype.ORDINÆRT)) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + ORGNUMMER, + 5.desember(2017), + 31.januar, + Arbeidsforholdtype.ORDINÆRT + ) + ) håndterVilkårsgrunnlag(arbeidsforhold = arbeidsforhold) SubsumsjonInspektør(jurist).assertOppfylt( @@ -334,7 +434,14 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(januar) håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 46817.årlig) - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(ORGNUMMER, 5.november(2017), 31.januar, Arbeidsforholdtype.ORDINÆRT)) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + ORGNUMMER, + 5.november(2017), + 31.januar, + Arbeidsforholdtype.ORDINÆRT + ) + ) håndterVilkårsgrunnlag(arbeidsforhold = arbeidsforhold, inntekt = 50000.årlig) SubsumsjonInspektør(jurist).assertOppfylt( @@ -353,7 +460,10 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterYtelser() håndterSimulering() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(ORGNUMMER, 50000.årlig))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(ORGNUMMER, 50000.årlig)) + ) SubsumsjonInspektør(jurist).assertPaaIndeks( index = 1, @@ -378,7 +488,14 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(januar) håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 46816.årlig) - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(ORGNUMMER, 5.desember(2017), 31.januar, Arbeidsforholdtype.ORDINÆRT)) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + ORGNUMMER, + 5.desember(2017), + 31.januar, + Arbeidsforholdtype.ORDINÆRT + ) + ) håndterVilkårsgrunnlag(arbeidsforhold = arbeidsforhold) SubsumsjonInspektør(jurist).assertIkkeOppfylt( @@ -410,7 +527,10 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { @Test fun `§ 8-9 ledd 1 - avslag ved utenlandsopphold`() { håndterSykmelding(januar) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Utlandsopphold(20.januar, 31.januar)) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Utlandsopphold(20.januar, 31.januar) + ) SubsumsjonInspektør(jurist).assertIkkeOppfylt( paragraf = PARAGRAF_8_9, versjon = 1.juni(2021), @@ -534,7 +654,10 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { val maksimumSykepengegrunnlag2018 = (93634 * 6).årlig // 6G håndterSykmelding(januar) håndterSøknad(januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = maksimumSykepengegrunnlag2018) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = maksimumSykepengegrunnlag2018 + ) håndterVilkårsgrunnlag(inntekt = maksimumSykepengegrunnlag2018) SubsumsjonInspektør(jurist).assertBeregnet( paragraf = PARAGRAF_8_10, @@ -641,13 +764,33 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 26.januar, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 3.januar, "tom" to 18.januar, "dagtype" to "AGPDAG", "grad" to 50), - mapOf("fom" to 19.januar, "tom" to 26.januar, "dagtype" to "NAVDAG", "grad" to 50) + mapOf( + "fom" to 3.januar, + "tom" to 18.januar, + "dagtype" to "AGPDAG", + "grad" to 50 + ), + mapOf( + "fom" to 19.januar, + "tom" to 26.januar, + "dagtype" to "NAVDAG", + "grad" to 50 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 3.januar, "tom" to 18.januar, "dagtype" to "AGPDAG", "grad" to 50), - mapOf("fom" to 19.januar, "tom" to 26.januar, "dagtype" to "NAVDAG", "grad" to 50) + mapOf( + "fom" to 3.januar, + "tom" to 18.januar, + "dagtype" to "AGPDAG", + "grad" to 50 + ), + mapOf( + "fom" to 19.januar, + "tom" to 26.januar, + "dagtype" to "NAVDAG", + "grad" to 50 + ) ) ), output = mapOf( @@ -661,7 +804,10 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { @Test fun `§ 8-12 ledd 1 punktum 1 - Brukt flere enn 248 dager`() { håndterSykmelding(Sykmeldingsperiode(3.januar(2018), 11.januar(2019))) - håndterSøknad(Sykdom(3.januar(2018), 11.januar(2019), 50.prosent, 50.prosent), sendtTilNAVEllerArbeidsgiver = 3.januar(2018)) + håndterSøknad( + Sykdom(3.januar(2018), 11.januar(2019), 50.prosent, 50.prosent), + sendtTilNAVEllerArbeidsgiver = 3.januar(2018) + ) håndterInntektsmelding(listOf(Periode(3.januar(2018), 18.januar(2018)))) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -678,13 +824,33 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 1.januar(2019), "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 3.januar, "tom" to 18.januar, "dagtype" to "AGPDAG", "grad" to 50), - mapOf("fom" to 19.januar, "tom" to 11.januar(2019), "dagtype" to "NAVDAG", "grad" to 50) + mapOf( + "fom" to 3.januar, + "tom" to 18.januar, + "dagtype" to "AGPDAG", + "grad" to 50 + ), + mapOf( + "fom" to 19.januar, + "tom" to 11.januar(2019), + "dagtype" to "NAVDAG", + "grad" to 50 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 3.januar, "tom" to 18.januar, "dagtype" to "AGPDAG", "grad" to 50), - mapOf("fom" to 19.januar, "tom" to 11.januar(2019), "dagtype" to "NAVDAG", "grad" to 50) + mapOf( + "fom" to 3.januar, + "tom" to 18.januar, + "dagtype" to "AGPDAG", + "grad" to 50 + ), + mapOf( + "fom" to 19.januar, + "tom" to 11.januar(2019), + "dagtype" to "NAVDAG", + "grad" to 50 + ) ) ), output = mapOf( @@ -706,13 +872,33 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 11.januar(2019), "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 3.januar, "tom" to 18.januar, "dagtype" to "AGPDAG", "grad" to 50), - mapOf("fom" to 19.januar, "tom" to 11.januar(2019), "dagtype" to "NAVDAG", "grad" to 50) + mapOf( + "fom" to 3.januar, + "tom" to 18.januar, + "dagtype" to "AGPDAG", + "grad" to 50 + ), + mapOf( + "fom" to 19.januar, + "tom" to 11.januar(2019), + "dagtype" to "NAVDAG", + "grad" to 50 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 3.januar, "tom" to 18.januar, "dagtype" to "AGPDAG", "grad" to 50), - mapOf("fom" to 19.januar, "tom" to 11.januar(2019), "dagtype" to "NAVDAG", "grad" to 50) + mapOf( + "fom" to 3.januar, + "tom" to 18.januar, + "dagtype" to "AGPDAG", + "grad" to 50 + ), + mapOf( + "fom" to 19.januar, + "tom" to 11.januar(2019), + "dagtype" to "NAVDAG", + "grad" to 50 + ) ) ), output = mapOf( @@ -736,7 +922,10 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(16.juni(2019), 31.juli(2019))) håndterSøknad(Sykdom(16.juni(2019), 31.juli(2019), 50.prosent, 50.prosent)) - håndterInntektsmelding(listOf(Periode(16.juni(2019), 1.juli(2019))), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(Periode(16.juni(2019), 1.juli(2019))), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode, INNTEKT) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -765,7 +954,10 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(17.juli, 31.august)) håndterSøknad(Sykdom(17.juli, 31.august, 50.prosent, 50.prosent)) - håndterInntektsmelding(listOf(Periode(17.juli, 1.august)), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(Periode(17.juli, 1.august)), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode, INNTEKT) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -788,19 +980,54 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "tilstrekkeligOppholdISykedager" to 182, //26 uker * 7 dager "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 17.juli, "tom" to 1.august, "dagtype" to "AGPDAG", "grad" to 50), - mapOf("fom" to 2.august, "tom" to 31.august, "dagtype" to "NAVDAG", "grad" to 50) + mapOf( + "fom" to 17.juli, + "tom" to 1.august, + "dagtype" to "AGPDAG", + "grad" to 50 + ), + mapOf( + "fom" to 2.august, + "tom" to 31.august, + "dagtype" to "NAVDAG", + "grad" to 50 + ) ), listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 50), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 50), + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 50 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 50 + ), ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 50), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 50), + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 50 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 50 + ), mapOf("fom" to 17.juli, "tom" to 1.august, "dagtype" to "AGPDAG", "grad" to 50), - mapOf("fom" to 2.august, "tom" to 31.august, "dagtype" to "NAVDAG", "grad" to 50) + mapOf( + "fom" to 2.august, + "tom" to 31.august, + "dagtype" to "NAVDAG", + "grad" to 50 + ) ) ), output = emptyMap(), @@ -811,7 +1038,10 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { @Test fun `§8-12 ledd 2 - Bruker har ikke vært arbeidsfør i 26 uker`() { håndterSykmelding(Sykmeldingsperiode(1.januar(2018), 30.desember(2018))) - håndterInntektsmelding(listOf(Periode(1.januar(2018), 16.januar(2018))), avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(1.januar(2018), 16.januar(2018))), + avsendersystem = ALTINN + ) håndterSøknad( Sykdom(1.januar(2018), 30.desember(2018), 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.januar(2018) @@ -827,7 +1057,11 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { Sykdom(1.januar(2019), 31.januar(2019), 100.prosent), sendtTilNAVEllerArbeidsgiver = 31.januar(2019) ) - håndterInntektsmelding(listOf(Periode(1.januar(2018), 16.januar(2018))), førsteFraværsdag = 1.januar(2019), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(Periode(1.januar(2018), 16.januar(2018))), + førsteFraværsdag = 1.januar(2019), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode, INNTEKT) håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode, true) @@ -842,17 +1076,47 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "tilstrekkeligOppholdISykedager" to 182, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.januar(2019), "tom" to 31.januar(2019), "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar(2019), + "tom" to 31.januar(2019), + "dagtype" to "NAVDAG", + "grad" to 100 + ) ), listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 30.desember, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 30.desember, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 30.desember, "dagtype" to "NAVDAG", "grad" to 100), - mapOf("fom" to 1.januar(2019), "tom" to 31.januar(2019), "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 30.desember, + "dagtype" to "NAVDAG", + "grad" to 100 + ), + mapOf( + "fom" to 1.januar(2019), + "tom" to 31.januar(2019), + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = emptyMap(), @@ -878,8 +1142,18 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { input = mapOf( "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 20), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 20) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 20 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 20 + ) ) ), ), @@ -911,8 +1185,18 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { input = mapOf( "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 19), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 19) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 19 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 19 + ) ) ), ), @@ -945,8 +1229,18 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { input = mapOf( "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 20), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 20) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 20 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 20 + ) ) ), "grense" to 20.0 @@ -979,8 +1273,18 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { input = mapOf( "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 19), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 19) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 19 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 19 + ) ) ), "grense" to 20.0 @@ -1051,22 +1355,22 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "organisasjonsnummer" to a2, "skjæringstidspunkt" to 1.januar, "inntekterSisteTreMåneder" to - listOf( - mapOf( - "beløp" to 1000.0, - "årMåned" to YearMonth.of(2017, 11), - "type" to "LØNNSINNTEKT", - "fordel" to "Juidy inntekt", - "beskrivelse" to "Juidy fordel" - ), - mapOf( - "beløp" to 1000.0, - "årMåned" to YearMonth.of(2017, 12), - "type" to "LØNNSINNTEKT", - "fordel" to "Juidy inntekt", - "beskrivelse" to "Juidy fordel" - ) + listOf( + mapOf( + "beløp" to 1000.0, + "årMåned" to YearMonth.of(2017, 11), + "type" to "LØNNSINNTEKT", + "fordel" to "Juidy inntekt", + "beskrivelse" to "Juidy fordel" ), + mapOf( + "beløp" to 1000.0, + "årMåned" to YearMonth.of(2017, 12), + "type" to "LØNNSINNTEKT", + "fordel" to "Juidy inntekt", + "beskrivelse" to "Juidy fordel" + ) + ), "forklaring" to "Jeg, en saksbehandler, overstyrte pga 8-15" ), @@ -1222,22 +1526,22 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "organisasjonsnummer" to a2, "skjæringstidspunkt" to 1.januar, "inntekterSisteTreMåneder" to - listOf( - mapOf( - "beløp" to 1000.0, - "årMåned" to YearMonth.of(2017, 11), - "type" to "LØNNSINNTEKT", - "fordel" to "Juidy inntekt", - "beskrivelse" to "Juidy fordel" - ), - mapOf( - "beløp" to 1000.0, - "årMåned" to YearMonth.of(2017, 12), - "type" to "LØNNSINNTEKT", - "fordel" to "Juidy inntekt", - "beskrivelse" to "Juidy fordel" - ) + listOf( + mapOf( + "beløp" to 1000.0, + "årMåned" to YearMonth.of(2017, 11), + "type" to "LØNNSINNTEKT", + "fordel" to "Juidy inntekt", + "beskrivelse" to "Juidy fordel" ), + mapOf( + "beløp" to 1000.0, + "årMåned" to YearMonth.of(2017, 12), + "type" to "LØNNSINNTEKT", + "fordel" to "Juidy inntekt", + "beskrivelse" to "Juidy fordel" + ) + ), "forklaring" to "Jeg, en saksbehandler, aktiverte pga 8-15" ), @@ -1521,7 +1825,10 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { fun `§ 8-17 ledd 1 bokstav a - opphold inne i arbeidsgiverperioden`() { håndterSykmelding(januar) håndterSøknad(januar) - håndterInntektsmelding(listOf(1.januar til 10.januar, 12.januar til 17.januar), beregnetInntekt = INNTEKT) + håndterInntektsmelding( + listOf(1.januar til 10.januar, 12.januar til 17.januar), + beregnetInntekt = INNTEKT + ) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) SubsumsjonInspektør(jurist).assertPaaIndeks( @@ -1535,8 +1842,18 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { versjon = 1.januar(2018), input = mapOf( "sykdomstidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 10.januar, "dagtype" to "SYKEDAG", "grad" to 100), - mapOf("fom" to 12.januar, "tom" to 31.januar, "dagtype" to "SYKEDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 10.januar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ), + mapOf( + "fom" to 12.januar, + "tom" to 31.januar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -1561,8 +1878,18 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { ledd = 2.ledd, input = mapOf( "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 29.januar, "dagtype" to "SYKEDAG", "grad" to 100), - mapOf("fom" to 30.januar, "tom" to 31.januar, "dagtype" to "FERIEDAG", "grad" to null) + mapOf( + "fom" to 1.januar, + "tom" to 29.januar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ), + mapOf( + "fom" to 30.januar, + "tom" to 31.januar, + "dagtype" to "FERIEDAG", + "grad" to null + ) ), ), output = mapOf( @@ -1587,7 +1914,12 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { ledd = 1.ledd, input = mapOf( "beregnetTidslinje" to listOf( - mapOf("fom" to 4.januar, "tom" to 22.januar, "dagtype" to "SYKEDAG", "grad" to 100), + mapOf( + "fom" to 4.januar, + "tom" to 22.januar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ), ), ), output = mapOf( @@ -1603,7 +1935,12 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { ledd = 1.ledd, input = mapOf( "beregnetTidslinje" to listOf( - mapOf("fom" to 4.januar, "tom" to 22.januar, "dagtype" to "SYKEDAG", "grad" to 100), + mapOf( + "fom" to 4.januar, + "tom" to 22.januar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ), ), ), output = mapOf( @@ -1626,7 +1963,12 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { versjon = 1.januar(2001), input = mapOf( "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 31.januar, "dagtype" to "SYKEDAG", "grad" to 100), + mapOf( + "fom" to 1.januar, + "tom" to 31.januar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ), ), ), output = mapOf( @@ -1644,7 +1986,13 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { fun `§ 8-19 tredje ledd - opphold i AGP`() { håndterSykmelding(januar) håndterSøknad(januar) - håndterInntektsmelding(listOf(1.januar til 3.januar, 5.januar til 10.januar, 12.januar til 17.januar)) + håndterInntektsmelding( + listOf( + 1.januar til 3.januar, + 5.januar til 10.januar, + 12.januar til 17.januar + ) + ) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -1654,9 +2002,24 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { versjon = 1.januar(2001), input = mapOf( "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 3.januar, "dagtype" to "SYKEDAG", "grad" to 100), - mapOf("fom" to 5.januar, "tom" to 10.januar, "dagtype" to "SYKEDAG", "grad" to 100), - mapOf("fom" to 12.januar, "tom" to 31.januar, "dagtype" to "SYKEDAG", "grad" to 100), + mapOf( + "fom" to 1.januar, + "tom" to 3.januar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ), + mapOf( + "fom" to 5.januar, + "tom" to 10.januar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ), + mapOf( + "fom" to 12.januar, + "tom" to 31.januar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ), ), ), output = mapOf( @@ -1684,7 +2047,12 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { versjon = 1.januar(2001), input = mapOf( "beregnetTidslinje" to listOf( - mapOf("fom" to 2.januar, "tom" to 17.januar, "dagtype" to "SYKEDAG", "grad" to 100) + mapOf( + "fom" to 2.januar, + "tom" to 17.januar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ) ), ), output = mapOf( @@ -1703,7 +2071,12 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { versjon = 1.januar(2001), input = mapOf( "beregnetTidslinje" to listOf( - mapOf("fom" to 2.januar, "tom" to 17.januar, "dagtype" to "SYKEDAG", "grad" to 100) + mapOf( + "fom" to 2.januar, + "tom" to 17.januar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ) ), ), output = mapOf( @@ -1805,8 +2178,18 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { val arbeidsforhold = listOf( Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), Vilkårsgrunnlag.Arbeidsforhold(a2, 1.november(2017), null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.oktober(2017), 31.oktober(2017), Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.april(2016), 3.mai(2016), Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.oktober(2017), + 31.oktober(2017), + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.april(2016), + 3.mai(2016), + Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -1851,7 +2234,7 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { } @Test - fun `§ 8-28 tredje ledd bokstav c - saksbehandler overstyrer inntekt pga varig lønnsendring som ikke ble hensyntatt`(){ + fun `§ 8-28 tredje ledd bokstav c - saksbehandler overstyrer inntekt pga varig lønnsendring som ikke ble hensyntatt`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 15.mars), orgnummer = a1) håndterSøknad(1.januar til 15.mars, orgnummer = a1) håndterInntektsmelding( @@ -1869,7 +2252,12 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { val arbeidsforhold = listOf( Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), Vilkårsgrunnlag.Arbeidsforhold(a2, 1.november(2017), null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.april(2016), 3.mai(2016), Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.april(2016), + 3.mai(2016), + Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -1931,9 +2319,24 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { val arbeidsforhold = listOf( Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), Vilkårsgrunnlag.Arbeidsforhold(a2, 1.november(2017), null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.oktober(2017), 31.oktober(2017), Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.september(2017), 30.september(2017), Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.april(2016), 3.mai(2016), Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.oktober(2017), + 31.oktober(2017), + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.september(2017), + 30.september(2017), + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.april(2016), + 3.mai(2016), + Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -2047,7 +2450,14 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(januar) håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 187268.årlig) - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(ORGNUMMER, 5.desember(2017), 31.januar, Arbeidsforholdtype.ORDINÆRT)) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + ORGNUMMER, + 5.desember(2017), + 31.januar, + Arbeidsforholdtype.ORDINÆRT + ) + ) håndterVilkårsgrunnlag(arbeidsforhold = arbeidsforhold) SubsumsjonInspektør(jurist).assertIkkeVurdert(PARAGRAF_8_51, ledd = LEDD_2) @@ -2059,8 +2469,19 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { createTestPerson(personOver67år, 1.januar(1945)) håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), fnr = personOver67år) håndterSøknad(januar, fnr = personOver67år) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 187268.årlig, fnr = personOver67år) - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(ORGNUMMER, 5.desember(2017), 31.januar, Arbeidsforholdtype.ORDINÆRT)) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 187268.årlig, + fnr = personOver67år + ) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + ORGNUMMER, + 5.desember(2017), + 31.januar, + Arbeidsforholdtype.ORDINÆRT + ) + ) håndterVilkårsgrunnlag(arbeidsforhold = arbeidsforhold, fnr = personOver67år) SubsumsjonInspektør(jurist).assertOppfylt( @@ -2084,8 +2505,19 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { createTestPerson(personOver67år, 1.januar(1945)) håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), fnr = personOver67år) håndterSøknad(januar, fnr = personOver67år) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 187267.årlig, fnr = personOver67år) - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(ORGNUMMER, 5.desember(2017), 31.januar, Arbeidsforholdtype.ORDINÆRT)) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 187267.årlig, + fnr = personOver67år + ) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + ORGNUMMER, + 5.desember(2017), + 31.januar, + Arbeidsforholdtype.ORDINÆRT + ) + ) håndterVilkårsgrunnlag(arbeidsforhold = arbeidsforhold, fnr = personOver67år) SubsumsjonInspektør(jurist).assertIkkeOppfylt( @@ -2107,7 +2539,8 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { fun `§ 8-51 ledd 2 - avslag subsummeres når person blir 67 år underveis i sykefraværstilfellet og tjener mindre enn 2G`() { val personOver67år = Personidentifikator("05025100065") createTestPerson(personOver67år, 5.februar(1951)) - val inntekt = 100_000.årlig // mellom 0.5G og 2G - slik at kravet er oppfyllt før personen fyllte 67, men ikke etter + val inntekt = + 100_000.årlig // mellom 0.5G og 2G - slik at kravet er oppfyllt før personen fyllte 67, men ikke etter nyttVedtak(januar, fnr = personOver67år, beregnetInntekt = inntekt) SubsumsjonInspektør(jurist).assertIkkeVurdert(PARAGRAF_8_2, ledd = LEDD_2) @@ -2137,13 +2570,15 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { ) forlengVedtak(mars) - assertEquals(1, SubsumsjonInspektør(jurist).antallSubsumsjoner( + assertEquals( + 1, SubsumsjonInspektør(jurist).antallSubsumsjoner( paragraf = PARAGRAF_8_3, ledd = LEDD_2, punktum = 1.punktum, versjon = 16.desember(2011), bokstav = null - )) + ) + ) SubsumsjonInspektør(jurist).assertPaaIndeks( index = 0, forventetAntall = 1, @@ -2172,7 +2607,11 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), fnr = personOver67år) håndterSøknad(januar, fnr = personOver67år) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, fnr = personOver67år) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + fnr = personOver67år + ) håndterVilkårsgrunnlag(1.vedtaksperiode, fnr = personOver67år) håndterYtelser(1.vedtaksperiode, fnr = personOver67år) håndterSimulering(1.vedtaksperiode, fnr = personOver67år) @@ -2181,7 +2620,12 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(2.februar, 28.februar), fnr = personOver67år) håndterSøknad(2.februar til 28.februar, fnr = personOver67år) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 2.februar, fnr = personOver67år, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 2.februar, + fnr = personOver67år, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterYtelser(1.vedtaksperiode, fnr = personOver67år) håndterUtbetalingsgodkjenning(1.vedtaksperiode, fnr = personOver67år) @@ -2206,13 +2650,33 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 31.januar, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2238,13 +2702,33 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 31.januar, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2267,17 +2751,47 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 28.februar, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 2.februar, "tom" to 28.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 2.februar, + "tom" to 28.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ), listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100), - mapOf("fom" to 2.februar, "tom" to 28.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ), + mapOf( + "fom" to 2.februar, + "tom" to 28.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2296,7 +2810,11 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar, 1.februar), fnr = personOver67år) håndterSøknad(1.januar til 1.februar, fnr = personOver67år) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, fnr = personOver67år) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + fnr = personOver67år + ) håndterVilkårsgrunnlag(1.vedtaksperiode, fnr = personOver67år) håndterYtelser(1.vedtaksperiode, fnr = personOver67år) håndterSimulering(1.vedtaksperiode, fnr = personOver67år) @@ -2305,7 +2823,12 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(3.februar, 28.februar), fnr = personOver67år) håndterSøknad(3.februar til 28.februar, fnr = personOver67år) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 3.februar, fnr = personOver67år, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 3.februar, + fnr = personOver67år, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterYtelser(1.vedtaksperiode, fnr = personOver67år) håndterUtbetalingsgodkjenning(1.vedtaksperiode, fnr = personOver67år) @@ -2330,13 +2853,33 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 1.februar, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 1.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 1.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 1.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 1.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2361,13 +2904,33 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 1.februar, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 1.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 1.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 1.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 1.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2390,17 +2953,47 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 28.februar, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 3.februar, "tom" to 28.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 3.februar, + "tom" to 28.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ), listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 1.februar, "dagtype" to "NAVDAG", "grad" to 100), + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 1.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ), ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 1.februar, "dagtype" to "NAVDAG", "grad" to 100), - mapOf("fom" to 3.februar, "tom" to 28.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 1.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ), + mapOf( + "fom" to 3.februar, + "tom" to 28.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2432,13 +3025,33 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 31.januar, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2460,16 +3073,41 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 28.februar, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.februar, "tom" to 28.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.februar, + "tom" to 28.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ), listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100), + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ), ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 28.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 28.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2491,16 +3129,41 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 31.mars, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.mars, "tom" to 31.mars, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.mars, + "tom" to 31.mars, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ), listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 28.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 28.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.mars, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.mars, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2522,16 +3185,41 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 26.april, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.april, "tom" to 26.april, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.april, + "tom" to 26.april, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ), listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.mars, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.mars, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 26.april, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 26.april, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2563,13 +3251,33 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 31.januar, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2591,16 +3299,41 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 28.februar, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.februar, "tom" to 28.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.februar, + "tom" to 28.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ), listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.januar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.januar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 28.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 28.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2622,16 +3355,41 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 31.mars, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.mars, "tom" to 31.mars, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.mars, + "tom" to 31.mars, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ), listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 28.februar, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 28.februar, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.mars, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.mars, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2653,16 +3411,41 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 26.april, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.april, "tom" to 27.april, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.april, + "tom" to 27.april, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ), listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.mars, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.mars, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 27.april, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 27.april, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2684,16 +3467,41 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { "utfallTom" to 27.april, "tidslinjegrunnlag" to listOf( listOf( - mapOf("fom" to 1.april, "tom" to 27.april, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.april, + "tom" to 27.april, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ), listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 31.mars, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 31.mars, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), "beregnetTidslinje" to listOf( - mapOf("fom" to 1.januar, "tom" to 16.januar, "dagtype" to "AGPDAG", "grad" to 100), - mapOf("fom" to 17.januar, "tom" to 27.april, "dagtype" to "NAVDAG", "grad" to 100) + mapOf( + "fom" to 1.januar, + "tom" to 16.januar, + "dagtype" to "AGPDAG", + "grad" to 100 + ), + mapOf( + "fom" to 17.januar, + "tom" to 27.april, + "dagtype" to "NAVDAG", + "grad" to 100 + ) ) ), output = mapOf( @@ -2756,30 +3564,77 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { fun `andre ytelser i snuten`() { nyttVedtak(januar) forlengVedtak(februar) - håndterOverstyrTidslinje(overstyringsdager = listOf( - ManuellOverskrivingDag(1.februar, Dagtype.Foreldrepengerdag), - ManuellOverskrivingDag(2.februar, Dagtype.Pleiepengerdag), - ManuellOverskrivingDag(3.februar, Dagtype.Omsorgspengerdag), - ManuellOverskrivingDag(4.februar, Dagtype.Svangerskapspengerdag), - ManuellOverskrivingDag(5.februar, Dagtype.Opplaringspengerdag), - ManuellOverskrivingDag(6.februar, Dagtype.AAPdag), - ManuellOverskrivingDag(7.februar, Dagtype.Dagpengerdag), - ManuellOverskrivingDag(8.februar, Dagtype.AAPdag), - )) + håndterOverstyrTidslinje( + overstyringsdager = listOf( + ManuellOverskrivingDag(1.februar, Dagtype.Foreldrepengerdag), + ManuellOverskrivingDag(2.februar, Dagtype.Pleiepengerdag), + ManuellOverskrivingDag(3.februar, Dagtype.Omsorgspengerdag), + ManuellOverskrivingDag(4.februar, Dagtype.Svangerskapspengerdag), + ManuellOverskrivingDag(5.februar, Dagtype.Opplaringspengerdag), + ManuellOverskrivingDag(6.februar, Dagtype.AAPdag), + ManuellOverskrivingDag(7.februar, Dagtype.Dagpengerdag), + ManuellOverskrivingDag(8.februar, Dagtype.AAPdag), + ) + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) val forventetInput = mapOf( "sykdomstidslinje" to listOf( - mapOf("fom" to 1.februar, "tom" to 1.februar, "dagtype" to "FORELDREPENGER", "grad" to null), - mapOf("fom" to 2.februar, "tom" to 2.februar, "dagtype" to "PLEIEPENGER", "grad" to null), - mapOf("fom" to 3.februar, "tom" to 3.februar, "dagtype" to "OMSORGSPENGER", "grad" to null), - mapOf("fom" to 4.februar, "tom" to 4.februar, "dagtype" to "SVANGERSKAPSPENGER", "grad" to null), - mapOf("fom" to 5.februar, "tom" to 5.februar, "dagtype" to "OPPLÆRINGSPENGER", "grad" to null), - mapOf("fom" to 6.februar, "tom" to 6.februar, "dagtype" to "ARBEIDSAVKLARINGSPENGER", "grad" to null), - mapOf("fom" to 7.februar, "tom" to 7.februar, "dagtype" to "DAGPENGER", "grad" to null), - mapOf("fom" to 8.februar, "tom" to 8.februar, "dagtype" to "ARBEIDSAVKLARINGSPENGER", "grad" to null), - mapOf("fom" to 9.februar, "tom" to 28.februar, "dagtype" to "SYKEDAG", "grad" to 100) + mapOf( + "fom" to 1.februar, + "tom" to 1.februar, + "dagtype" to "FORELDREPENGER", + "grad" to null + ), + mapOf( + "fom" to 2.februar, + "tom" to 2.februar, + "dagtype" to "PLEIEPENGER", + "grad" to null + ), + mapOf( + "fom" to 3.februar, + "tom" to 3.februar, + "dagtype" to "OMSORGSPENGER", + "grad" to null + ), + mapOf( + "fom" to 4.februar, + "tom" to 4.februar, + "dagtype" to "SVANGERSKAPSPENGER", + "grad" to null + ), + mapOf( + "fom" to 5.februar, + "tom" to 5.februar, + "dagtype" to "OPPLÆRINGSPENGER", + "grad" to null + ), + mapOf( + "fom" to 6.februar, + "tom" to 6.februar, + "dagtype" to "ARBEIDSAVKLARINGSPENGER", + "grad" to null + ), + mapOf( + "fom" to 7.februar, + "tom" to 7.februar, + "dagtype" to "DAGPENGER", + "grad" to null + ), + mapOf( + "fom" to 8.februar, + "tom" to 8.februar, + "dagtype" to "ARBEIDSAVKLARINGSPENGER", + "grad" to null + ), + mapOf( + "fom" to 9.februar, + "tom" to 28.februar, + "dagtype" to "SYKEDAG", + "grad" to 100 + ) ), ) // Alt utenom Arbeidsavklaringspenger @@ -2788,10 +3643,12 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { versjon = 2.mars(2007), paragraf = KJENNELSE_2006_4023, input = forventetInput, - output = mapOf("perioder" to listOf( - mapOf("fom" to 1.februar, "tom" to 5.februar), - mapOf("fom" to 7.februar, "tom" to 7.februar), - )) + output = mapOf( + "perioder" to listOf( + mapOf("fom" to 1.februar, "tom" to 5.februar), + mapOf("fom" to 7.februar, "tom" to 7.februar), + ) + ) ) // Arbeidsavklaringspenger SubsumsjonInspektør(jurist).assertIkkeOppfylt( @@ -2799,38 +3656,82 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { versjon = 21.mai(2021), paragraf = PARAGRAF_8_48, input = forventetInput, - output = mapOf("perioder" to listOf( - mapOf("fom" to 6.februar, "tom" to 6.februar), - mapOf("fom" to 8.februar, "tom" to 8.februar), - )) + output = mapOf( + "perioder" to listOf( + mapOf("fom" to 6.februar, "tom" to 6.februar), + mapOf("fom" to 8.februar, "tom" to 8.februar), + ) + ) ) } @Test fun `andre ytelser i halen`() { nyttVedtak(januar) - håndterOverstyrTidslinje(overstyringsdager = listOf( - ManuellOverskrivingDag(24.januar, Dagtype.Foreldrepengerdag), - ManuellOverskrivingDag(25.januar, Dagtype.Pleiepengerdag), - ManuellOverskrivingDag(26.januar, Dagtype.Omsorgspengerdag), - ManuellOverskrivingDag(27.januar, Dagtype.Svangerskapspengerdag), - ManuellOverskrivingDag(28.januar, Dagtype.Opplaringspengerdag), - ManuellOverskrivingDag(29.januar, Dagtype.AAPdag), - ManuellOverskrivingDag(30.januar, Dagtype.Dagpengerdag), - ManuellOverskrivingDag(31.januar, Dagtype.AAPdag), - )) + håndterOverstyrTidslinje( + overstyringsdager = listOf( + ManuellOverskrivingDag(24.januar, Dagtype.Foreldrepengerdag), + ManuellOverskrivingDag(25.januar, Dagtype.Pleiepengerdag), + ManuellOverskrivingDag(26.januar, Dagtype.Omsorgspengerdag), + ManuellOverskrivingDag(27.januar, Dagtype.Svangerskapspengerdag), + ManuellOverskrivingDag(28.januar, Dagtype.Opplaringspengerdag), + ManuellOverskrivingDag(29.januar, Dagtype.AAPdag), + ManuellOverskrivingDag(30.januar, Dagtype.Dagpengerdag), + ManuellOverskrivingDag(31.januar, Dagtype.AAPdag), + ) + ) håndterYtelser(1.vedtaksperiode) val forventetInput = mapOf( "sykdomstidslinje" to listOf( mapOf("fom" to 1.januar, "tom" to 23.januar, "dagtype" to "SYKEDAG", "grad" to 100), - mapOf("fom" to 24.januar, "tom" to 24.januar, "dagtype" to "FORELDREPENGER", "grad" to null), - mapOf("fom" to 25.januar, "tom" to 25.januar, "dagtype" to "PLEIEPENGER", "grad" to null), - mapOf("fom" to 26.januar, "tom" to 26.januar, "dagtype" to "OMSORGSPENGER", "grad" to null), - mapOf("fom" to 27.januar, "tom" to 27.januar, "dagtype" to "SVANGERSKAPSPENGER", "grad" to null), - mapOf("fom" to 28.januar, "tom" to 28.januar, "dagtype" to "OPPLÆRINGSPENGER", "grad" to null), - mapOf("fom" to 29.januar, "tom" to 29.januar, "dagtype" to "ARBEIDSAVKLARINGSPENGER", "grad" to null), - mapOf("fom" to 30.januar, "tom" to 30.januar, "dagtype" to "DAGPENGER", "grad" to null), - mapOf("fom" to 31.januar, "tom" to 31.januar, "dagtype" to "ARBEIDSAVKLARINGSPENGER", "grad" to null) + mapOf( + "fom" to 24.januar, + "tom" to 24.januar, + "dagtype" to "FORELDREPENGER", + "grad" to null + ), + mapOf( + "fom" to 25.januar, + "tom" to 25.januar, + "dagtype" to "PLEIEPENGER", + "grad" to null + ), + mapOf( + "fom" to 26.januar, + "tom" to 26.januar, + "dagtype" to "OMSORGSPENGER", + "grad" to null + ), + mapOf( + "fom" to 27.januar, + "tom" to 27.januar, + "dagtype" to "SVANGERSKAPSPENGER", + "grad" to null + ), + mapOf( + "fom" to 28.januar, + "tom" to 28.januar, + "dagtype" to "OPPLÆRINGSPENGER", + "grad" to null + ), + mapOf( + "fom" to 29.januar, + "tom" to 29.januar, + "dagtype" to "ARBEIDSAVKLARINGSPENGER", + "grad" to null + ), + mapOf( + "fom" to 30.januar, + "tom" to 30.januar, + "dagtype" to "DAGPENGER", + "grad" to null + ), + mapOf( + "fom" to 31.januar, + "tom" to 31.januar, + "dagtype" to "ARBEIDSAVKLARINGSPENGER", + "grad" to null + ) ), ) // Alt utenom Arbeidsavklaringspenger @@ -2839,10 +3740,12 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { versjon = 2.mars(2007), paragraf = KJENNELSE_2006_4023, input = forventetInput, - output = mapOf("perioder" to listOf( - mapOf("fom" to 24.januar, "tom" to 28.januar), - mapOf("fom" to 30.januar, "tom" to 30.januar), - )) + output = mapOf( + "perioder" to listOf( + mapOf("fom" to 24.januar, "tom" to 28.januar), + mapOf("fom" to 30.januar, "tom" to 30.januar), + ) + ) ) // Arbeidsavklaringspenger SubsumsjonInspektør(jurist).assertIkkeOppfylt( @@ -2850,10 +3753,12 @@ internal class SubsumsjonE2ETest : AbstractEndToEndTest() { versjon = 21.mai(2021), paragraf = PARAGRAF_8_48, input = forventetInput, - output = mapOf("perioder" to listOf( - mapOf("fom" to 29.januar, "tom" to 29.januar), - mapOf("fom" to 31.januar, "tom" to 31.januar), - )) + output = mapOf( + "perioder" to listOf( + mapOf("fom" to 29.januar, "tom" to 29.januar), + mapOf("fom" to 31.januar, "tom" to 31.januar), + ) + ) ) } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/TestObservat\303\270r.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/TestObservat\303\270r.kt" index ac3aa905e9..241fcc526f 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/TestObservat\303\270r.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/TestObservat\303\270r.kt" @@ -21,42 +21,56 @@ internal class TestObservatør(person: Person? = null) : PersonObserver { init { person?.addObserver(this) } - internal val tilstandsendringer = person?.inspektør?.sisteVedtaksperiodeTilstander()?.mapValues { mutableListOf(it.value) }?.toMutableMap() ?: mutableMapOf() + + internal val tilstandsendringer = + person?.inspektør?.sisteVedtaksperiodeTilstander()?.mapValues { mutableListOf(it.value) } + ?.toMutableMap() ?: mutableMapOf() val utbetalteVedtaksperioder = mutableListOf() - val trengerArbeidsgiveropplysningerVedtaksperioder = mutableListOf() - val trengerIkkeArbeidsgiveropplysningerVedtaksperioder = mutableListOf() - val arbeidsgiveropplysningerKorrigert = mutableListOf() + val trengerArbeidsgiveropplysningerVedtaksperioder = + mutableListOf() + val trengerIkkeArbeidsgiveropplysningerVedtaksperioder = + mutableListOf() + val arbeidsgiveropplysningerKorrigert = + mutableListOf() val utbetalingUtenUtbetalingEventer = mutableListOf() val utbetalingMedUtbetalingEventer = mutableListOf() val feriepengerUtbetaltEventer = mutableListOf() val utbetaltEndretEventer = mutableListOf() val avsluttetMedVedtakEvent = mutableMapOf() - val avsluttetMedVedtakEventer = mutableMapOf>() + val avsluttetMedVedtakEventer = + mutableMapOf>() val behandlingOpprettetEventer = mutableListOf() val behandlingLukketEventer = mutableListOf() val behandlingForkastetEventer = mutableListOf() - val avsluttetUtenVedtakEventer = mutableMapOf>() + val avsluttetUtenVedtakEventer = + mutableMapOf>() val overstyringIgangsatt = mutableListOf() val vedtaksperiodeVenter = mutableListOf() val inntektsmeldingFørSøknad = mutableListOf() val inntektsmeldingIkkeHåndtert = mutableListOf() val inntektsmeldingHåndtert = mutableListOf>() - val skatteinntekterLagtTilGrunnEventer = mutableListOf() + val skatteinntekterLagtTilGrunnEventer = + mutableListOf() val søknadHåndtert = mutableListOf>() - val vedtaksperiodeAnnullertEventer = mutableListOf() + val vedtaksperiodeAnnullertEventer = + mutableListOf() val vedtaksperiodeOpprettetEventer = mutableListOf() - val overlappendeInfotrygdperioder = mutableListOf() + val overlappendeInfotrygdperioder = + mutableListOf() val utkastTilVedtakEventer = mutableListOf() - val sykefraværstilfelleIkkeFunnet = mutableListOf() + val sykefraværstilfelleIkkeFunnet = + mutableListOf() private lateinit var sisteVedtaksperiode: UUID private val vedtaksperioder = person?.inspektør?.vedtaksperioder()?.mapValues { (_, perioder) -> perioder.map { it.inspektør.id }.toMutableSet() }?.toMutableMap() ?: mutableMapOf() - private val vedtaksperiodeendringer = mutableMapOf>() + private val vedtaksperiodeendringer = + mutableMapOf>() - private val forkastedeEventer = mutableMapOf() + private val forkastedeEventer = + mutableMapOf() val annulleringer = mutableListOf() val inntektsmeldingReplayEventer = mutableListOf() @@ -67,13 +81,17 @@ internal class TestObservatør(person: Person? = null) : PersonObserver { } fun hendelseider(vedtaksperiodeId: UUID) = - vedtaksperiodeendringer[vedtaksperiodeId]?.last()?.hendelser ?: fail { "VedtaksperiodeId $vedtaksperiodeId har ingen hendelser tilknyttet" } + vedtaksperiodeendringer[vedtaksperiodeId]?.last()?.hendelser + ?: fail { "VedtaksperiodeId $vedtaksperiodeId har ingen hendelser tilknyttet" } - fun sisteVedtaksperiode() = IdInnhenter { orgnummer -> vedtaksperioder.getValue(orgnummer).last() } + fun sisteVedtaksperiode() = + IdInnhenter { orgnummer -> vedtaksperioder.getValue(orgnummer).last() } fun sisteVedtaksperiodeId(orgnummer: String) = vedtaksperioder.getValue(orgnummer).last() fun sisteVedtaksperiodeIdOrNull(orgnummer: String) = vedtaksperioder[orgnummer]?.last() - fun vedtaksperiode(orgnummer: String, indeks: Int) = vedtaksperioder.getValue(orgnummer).toList()[indeks] + fun vedtaksperiode(orgnummer: String, indeks: Int) = + vedtaksperioder.getValue(orgnummer).toList()[indeks] + fun kvitterInntektsmeldingReplay(vedtaksperiodeId: UUID) { inntektsmeldingReplayEventer.removeAll { it.vedtaksperiodeId == vedtaksperiodeId } } @@ -119,7 +137,7 @@ internal class TestObservatør(person: Person? = null) : PersonObserver { } override fun avsluttetUtenVedtak(event: PersonObserver.AvsluttetUtenVedtakEvent) { - avsluttetUtenVedtakEventer.getOrPut(event.vedtaksperiodeId) { mutableListOf() }.add(event) + avsluttetUtenVedtakEventer.getOrPut(event.vedtaksperiodeId) { mutableListOf() }.add(event) } override fun vedtaksperiodeOpprettet(event: PersonObserver.VedtaksperiodeOpprettet) { @@ -129,8 +147,10 @@ internal class TestObservatør(person: Person? = null) : PersonObserver { override fun vedtaksperiodeEndret(event: VedtaksperiodeEndretEvent) { sisteVedtaksperiode = event.vedtaksperiodeId vedtaksperiodeendringer.getOrPut(event.vedtaksperiodeId) { mutableListOf() }.add(event) - vedtaksperioder.getOrPut(event.organisasjonsnummer) { mutableSetOf() }.add(sisteVedtaksperiode) - tilstandsendringer.getOrPut(event.vedtaksperiodeId) { mutableListOf(event.forrigeTilstand) }.add(event.gjeldendeTilstand) + vedtaksperioder.getOrPut(event.organisasjonsnummer) { mutableSetOf() } + .add(sisteVedtaksperiode) + tilstandsendringer.getOrPut(event.vedtaksperiodeId) { mutableListOf(event.forrigeTilstand) } + .add(event.gjeldendeTilstand) if (event.gjeldendeTilstand == TilstandType.AVSLUTTET) utbetalteVedtaksperioder.add(event.vedtaksperiodeId) } @@ -161,17 +181,34 @@ internal class TestObservatør(person: Person? = null) : PersonObserver { trengerArbeidsgiverperiode: Boolean, erPotensiellForespørsel: Boolean ) { - inntektsmeldingReplayEventer.add(Forespørsel( - fnr = personidentifikator.toString(), - orgnr = organisasjonsnummer, - vedtaksperiodeId = vedtaksperiodeId, - skjæringstidspunkt = skjæringstidspunkt, - førsteFraværsdager = førsteFraværsdager.map { no.nav.helse.spill_av_im.FørsteFraværsdag(it.organisasjonsnummer, it.førsteFraværsdag) }, - sykmeldingsperioder = sykmeldingsperioder.map { no.nav.helse.spill_av_im.Periode(it.start, it.endInclusive) }, - egenmeldinger = egenmeldingsperioder.map { no.nav.helse.spill_av_im.Periode(it.start, it.endInclusive) }, - harForespurtArbeidsgiverperiode = trengerArbeidsgiverperiode, - erPotensiellForespørsel = erPotensiellForespørsel - )) + inntektsmeldingReplayEventer.add( + Forespørsel( + fnr = personidentifikator.toString(), + orgnr = organisasjonsnummer, + vedtaksperiodeId = vedtaksperiodeId, + skjæringstidspunkt = skjæringstidspunkt, + førsteFraværsdager = førsteFraværsdager.map { + no.nav.helse.spill_av_im.FørsteFraværsdag( + it.organisasjonsnummer, + it.førsteFraværsdag + ) + }, + sykmeldingsperioder = sykmeldingsperioder.map { + no.nav.helse.spill_av_im.Periode( + it.start, + it.endInclusive + ) + }, + egenmeldinger = egenmeldingsperioder.map { + no.nav.helse.spill_av_im.Periode( + it.start, + it.endInclusive + ) + }, + harForespurtArbeidsgiverperiode = trengerArbeidsgiverperiode, + erPotensiellForespørsel = erPotensiellForespørsel + ) + ) } override fun annullering(event: PersonObserver.UtbetalingAnnullertEvent) { @@ -196,11 +233,19 @@ internal class TestObservatør(person: Person? = null) : PersonObserver { inntektsmeldingFørSøknad.add(event) } - override fun inntektsmeldingIkkeHåndtert(inntektsmeldingId: UUID, organisasjonsnummer: String, harPeriodeInnenfor16Dager: Boolean) { + override fun inntektsmeldingIkkeHåndtert( + inntektsmeldingId: UUID, + organisasjonsnummer: String, + harPeriodeInnenfor16Dager: Boolean + ) { inntektsmeldingIkkeHåndtert.add(inntektsmeldingId) } - override fun inntektsmeldingHåndtert(inntektsmeldingId: UUID, vedtaksperiodeId: UUID, organisasjonsnummer: String) { + override fun inntektsmeldingHåndtert( + inntektsmeldingId: UUID, + vedtaksperiodeId: UUID, + organisasjonsnummer: String + ) { inntektsmeldingHåndtert.add(inntektsmeldingId to vedtaksperiodeId) } @@ -208,7 +253,11 @@ internal class TestObservatør(person: Person? = null) : PersonObserver { skatteinntekterLagtTilGrunnEventer.add(event) } - override fun søknadHåndtert(søknadId: UUID, vedtaksperiodeId: UUID, organisasjonsnummer: String) { + override fun søknadHåndtert( + søknadId: UUID, + vedtaksperiodeId: UUID, + organisasjonsnummer: String + ) { søknadHåndtert.add(søknadId to vedtaksperiodeId) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingFeiletE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingFeiletE2ETest.kt index d3864ace62..f96d84f859 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingFeiletE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingFeiletE2ETest.kt @@ -51,8 +51,14 @@ internal class UtbetalingFeiletE2ETest : AbstractEndToEndTest() { val første = inspektør.utbetaling(0) inspektør.utbetaling(2).also { utbetalingInspektør -> - assertEquals(utbetalingInspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), første.arbeidsgiverOppdrag.inspektør.fagsystemId()) - assertEquals(Endringskode.ENDR, utbetalingInspektør.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + utbetalingInspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + første.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) + assertEquals( + Endringskode.ENDR, + utbetalingInspektør.arbeidsgiverOppdrag.inspektør.endringskode + ) assertEquals(2, utbetalingInspektør.arbeidsgiverOppdrag.size) assertTrue(utbetalingInspektør.arbeidsgiverOppdrag.harUtbetalinger()) assertEquals(17.januar, utbetalingInspektør.arbeidsgiverOppdrag[0].fom) @@ -62,8 +68,22 @@ internal class UtbetalingFeiletE2ETest : AbstractEndToEndTest() { assertTrue(utbetalingInspektør.arbeidsgiverOppdrag[0].erForskjell()) assertTrue(utbetalingInspektør.arbeidsgiverOppdrag[1].erForskjell()) } - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) } @Test @@ -103,7 +123,7 @@ internal class UtbetalingFeiletE2ETest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding( listOf(1.januar til 16.januar), - refusjon = Inntektsmelding.Refusjon(INNTEKT/2, null, emptyList()) + refusjon = Inntektsmelding.Refusjon(INNTEKT / 2, null, emptyList()) ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -138,7 +158,7 @@ internal class UtbetalingFeiletE2ETest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding( listOf(1.januar til 16.januar), - refusjon = Inntektsmelding.Refusjon(INNTEKT/2, null, emptyList()) + refusjon = Inntektsmelding.Refusjon(INNTEKT / 2, null, emptyList()) ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -171,9 +191,28 @@ internal class UtbetalingFeiletE2ETest : AbstractEndToEndTest() { fun `nyere perioder må vente til periode med feilet utbetaling er ok`() { nyttVedtak(januar, status = Oppdragstatus.AVVIST) nyPeriode(mars) - håndterInntektsmelding(listOf(1.mars til 16.mars), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingOgAnnulleringTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingOgAnnulleringTest.kt index 1469d8357c..4be0c10f30 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingOgAnnulleringTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingOgAnnulleringTest.kt @@ -79,7 +79,11 @@ internal class UtbetalingOgAnnulleringTest : AbstractEndToEndTest() { @Test fun `periode med syk nav strekkes tilbake med foreldrepenger - opphører tidligere utbetaling`() { håndterSøknad(1.februar til 2.februar) - håndterInntektsmelding(emptyList(), 1.februar, begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening") + håndterInntektsmelding( + emptyList(), + 1.februar, + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening" + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(januar, 100))) håndterSimulering(1.vedtaksperiode) @@ -88,7 +92,7 @@ internal class UtbetalingOgAnnulleringTest : AbstractEndToEndTest() { håndterOverstyrTidslinje( (januar).map { ManuellOverskrivingDag(it, Dagtype.Foreldrepengerdag) } + - listOf(ManuellOverskrivingDag(1.februar, Dagtype.Sykedag, 100)) + listOf(ManuellOverskrivingDag(1.februar, Dagtype.Sykedag, 100)) ) håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(januar, 100))) håndterSimulering(1.vedtaksperiode) @@ -125,7 +129,11 @@ internal class UtbetalingOgAnnulleringTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(20.februar, 20.mars)) håndterSøknad(20.februar til 20.mars) - håndterInntektsmelding(listOf(Periode(20.februar, 7.mars)), førsteFraværsdag = 20.februar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(Periode(20.februar, 7.mars)), + førsteFraværsdag = 20.februar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode, INNTEKT) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -149,7 +157,11 @@ internal class UtbetalingOgAnnulleringTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(20.februar, 25.mars)) håndterSøknad(20.februar til 25.mars) - håndterInntektsmelding(listOf(Periode(20.februar, 7.mars)), førsteFraværsdag = 20.februar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(Periode(20.februar, 7.mars)), + førsteFraværsdag = 20.februar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode, INNTEKT) val utbetalingId = inspektør.sisteUtbetaling().utbetalingId @@ -195,7 +207,10 @@ internal class UtbetalingOgAnnulleringTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(3.mars, 26.mars)) håndterSøknad(3.mars til 26.mars) - håndterInntektsmelding(listOf(Periode(3.mars, 18.mars)), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(Periode(3.mars, 18.mars)), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode, INNTEKT) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -395,14 +410,21 @@ internal class UtbetalingOgAnnulleringTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, true) håndterUtbetalt(Oppdragstatus.AKSEPTERT) håndterAnnullerUtbetaling(utbetalingId = inspektør.sisteUtbetalingId(1.vedtaksperiode)) // Stale - håndterAnnullerUtbetaling(utbetalingId = inspektør.sisteUtbetalingId(1.vedtaksperiode), opprettet = LocalDateTime.now().plusHours(3)) + håndterAnnullerUtbetaling( + utbetalingId = inspektør.sisteUtbetalingId(1.vedtaksperiode), + opprettet = LocalDateTime.now().plusHours(3) + ) håndterUtbetalt(status = Oppdragstatus.AKSEPTERT) assertTrue(inspektør.sisteUtbetaling().erAnnullering) assertEquals(1, observatør.annulleringer.size) assertEquals(2, person.personLogg.behov - .filter { it.detaljer()["fagsystemId"] == inspektør.sisteArbeidsgiveroppdragFagsystemId(1.vedtaksperiode) } + .filter { + it.detaljer()["fagsystemId"] == inspektør.sisteArbeidsgiveroppdragFagsystemId( + 1.vedtaksperiode + ) + } .filter { it.type == Aktivitet.Behov.Behovtype.Utbetaling } .size ) @@ -423,8 +445,14 @@ internal class UtbetalingOgAnnulleringTest : AbstractEndToEndTest() { @Test fun `utbetaling_utbetalt tar med begrunnelse på avviste dager`() { - håndterSykmelding(Sykmeldingsperiode(1.januar, 20.januar), Sykmeldingsperiode(21.januar, 30.januar)) - håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), Sykdom(21.januar, 30.januar, 15.prosent)) + håndterSykmelding( + Sykmeldingsperiode(1.januar, 20.januar), + Sykmeldingsperiode(21.januar, 30.januar) + ) + håndterSøknad( + Sykdom(1.januar, 20.januar, 100.prosent), + Sykdom(21.januar, 30.januar, 15.prosent) + ) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -432,8 +460,10 @@ internal class UtbetalingOgAnnulleringTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, true) håndterUtbetalt() - val avvisteDager = observatør.utbetalingMedUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.AvvistDag } - val ikkeAvvisteDager = observatør.utbetalingMedUtbetalingEventer.first().utbetalingsdager.filter { it.type != PersonObserver.Utbetalingsdag.Dagtype.AvvistDag } + val avvisteDager = + observatør.utbetalingMedUtbetalingEventer.first().utbetalingsdager.filter { it.type == PersonObserver.Utbetalingsdag.Dagtype.AvvistDag } + val ikkeAvvisteDager = + observatør.utbetalingMedUtbetalingEventer.first().utbetalingsdager.filter { it.type != PersonObserver.Utbetalingsdag.Dagtype.AvvistDag } assertEquals(1, observatør.utbetalingMedUtbetalingEventer.size) assertEquals(7, avvisteDager.size) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingTest.kt index aab1ff74ff..7c72f7b278 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/UtbetalingTest.kt @@ -24,7 +24,13 @@ internal class UtbetalingTest : AbstractEndToEndTest() { @Test fun `Utbetaling endret får rett organisasjonsnummer ved overlappende sykemelding`() { håndterUtbetalingshistorikkEtterInfotrygdendring( - ArbeidsgiverUtbetalingsperiode(ANNET_ORGNUMMER, 1.januar(2016), 31.januar(2016), 100.prosent, 1000.daglig), + ArbeidsgiverUtbetalingsperiode( + ANNET_ORGNUMMER, + 1.januar(2016), + 31.januar(2016), + 100.prosent, + 1000.daglig + ), inntektshistorikk = listOf( Inntektsopplysning(ANNET_ORGNUMMER, 1.januar(2016), 1000.daglig, true) ) @@ -60,19 +66,28 @@ internal class UtbetalingTest : AbstractEndToEndTest() { @Test fun `første periode er kun arbeidsgiverperiode og ferie`() { håndterSykmelding(Sykmeldingsperiode(4.januar, 22.januar)) - håndterSøknad(Sykdom(4.januar, 22.januar, 100.prosent), Søknad.Søknadsperiode.Ferie(20.januar, 22.januar)) + håndterSøknad( + Sykdom(4.januar, 22.januar, 100.prosent), + Søknad.Søknadsperiode.Ferie(20.januar, 22.januar) + ) håndterInntektsmelding(listOf(4.januar til 19.januar)) håndterSykmelding(Sykmeldingsperiode(23.januar, 31.januar)) håndterSøknad(23.januar til 31.januar) assertEquals(4.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(4.januar til 22.januar, inspektør.periode(1.vedtaksperiode)) - assertEquals(listOf(4.januar til 19.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) + assertEquals( + listOf(4.januar til 19.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertEquals(4.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) assertEquals(23.januar til 31.januar, inspektør.periode(2.vedtaksperiode)) - assertEquals(listOf(4.januar til 19.januar), inspektør.arbeidsgiverperiode(2.vedtaksperiode)) + assertEquals( + listOf(4.januar til 19.januar), + inspektør.arbeidsgiverperiode(2.vedtaksperiode) + ) assertSisteTilstand(2.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) håndterVilkårsgrunnlag(2.vedtaksperiode) @@ -91,17 +106,29 @@ internal class UtbetalingTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.desember, 31.desember, 10.prosent)) - håndterInntektsmelding(listOf(13.november til 14.november, 1.desember til 14.desember), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(13.november til 14.november, 1.desember til 14.desember), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) // Arbeidsgiverperioden blir beregnet riktig - assertEquals(listOf(1.januar til 16.januar), inspektør(ORGNUMMER).arbeidsgiverperiode(1.vedtaksperiode)) - assertEquals(listOf(1.desember til 16.desember), inspektør(ORGNUMMER).arbeidsgiverperiode(2.vedtaksperiode)) + assertEquals( + listOf(1.januar til 16.januar), + inspektør(ORGNUMMER).arbeidsgiverperiode(1.vedtaksperiode) + ) + assertEquals( + listOf(1.desember til 16.desember), + inspektør(ORGNUMMER).arbeidsgiverperiode(2.vedtaksperiode) + ) assertEquals(2, inspektør(ORGNUMMER).antallUtbetalinger) assertEquals(1.januar til 31.januar, inspektør(ORGNUMMER).utbetaling(0).periode) assertEquals(13.november til 31.desember, inspektør(ORGNUMMER).utbetaling(1).periode) - assertNotEquals(inspektør(ORGNUMMER).utbetaling(0).korrelasjonsId, inspektør(ORGNUMMER).utbetaling(1).korrelasjonsId) + assertNotEquals( + inspektør(ORGNUMMER).utbetaling(0).korrelasjonsId, + inspektør(ORGNUMMER).utbetaling(1).korrelasjonsId + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselE2ETest.kt index 20eba905ab..a19ba97121 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselE2ETest.kt @@ -35,7 +35,7 @@ import no.nav.helse.utbetalingslinjer.Oppdragstatus import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.junit.jupiter.api.Test -internal class VarselE2ETest: AbstractEndToEndTest() { +internal class VarselE2ETest : AbstractEndToEndTest() { @Test fun `varsel - Sykmeldingen er tilbakedatert, vurder fra og med dato for utbetaling`() { @@ -66,7 +66,7 @@ internal class VarselE2ETest: AbstractEndToEndTest() { } @Test - fun `varsel - Endrer tidligere oppdrag, Kontroller simuleringen`(){ + fun `varsel - Endrer tidligere oppdrag, Kontroller simuleringen`() { nyttVedtak(3.januar til 26.januar) nullstillTilstandsendringer() @@ -85,7 +85,15 @@ internal class VarselE2ETest: AbstractEndToEndTest() { fun `varsel - Det er institusjonsopphold i perioden - Vurder retten til sykepenger`() { nyttVedtak(januar) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Dagtype.Feriedag))) - håndterYtelser(1.vedtaksperiode, institusjonsoppholdsperioder = listOf(Institusjonsopphold.Institusjonsoppholdsperiode(1.januar, 31.januar))) + håndterYtelser( + 1.vedtaksperiode, + institusjonsoppholdsperioder = listOf( + Institusjonsopphold.Institusjonsoppholdsperiode( + 1.januar, + 31.januar + ) + ) + ) assertVarsel(RV_AY_9) } @@ -119,7 +127,15 @@ internal class VarselE2ETest: AbstractEndToEndTest() { forlengVedtak(februar) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.februar, Dagtype.Feriedag))) håndterUtbetalingshistorikkEtterInfotrygdendring( - utbetalinger = arrayOf(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 17.januar, 31.januar, 100.prosent, INNTEKT)), + utbetalinger = arrayOf( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 17.januar, + 31.januar, + 100.prosent, + INNTEKT + ) + ), inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 17.januar, INNTEKT, true)) ) håndterYtelser(2.vedtaksperiode) @@ -133,11 +149,32 @@ internal class VarselE2ETest: AbstractEndToEndTest() { nyPeriode(26.januar til 31.januar) håndterInntektsmelding(listOf(10.januar til 25.januar)) håndterVilkårsgrunnlag(2.vedtaksperiode) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 9.januar, 100.prosent, INNTEKT), inntektshistorikk = listOf( - Inntektsopplysning(ORGNUMMER, 1.januar, INNTEKT, true) - )) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD, varselkode = RV_IT_14) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, TIL_INFOTRYGD) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 9.januar, 100.prosent, INNTEKT), + inntektshistorikk = listOf( + Inntektsopplysning(ORGNUMMER, 1.januar, INNTEKT, true) + ) + ) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD, + varselkode = RV_IT_14 + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + TIL_INFOTRYGD + ) } @Test @@ -145,11 +182,14 @@ internal class VarselE2ETest: AbstractEndToEndTest() { nyttVedtak(10.februar til 28.februar) håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars)) håndterSøknad(mars) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 5.februar, 11.februar, 100.prosent, INNTEKT), inntektshistorikk = listOf( - Inntektsopplysning(ORGNUMMER, 5.februar, INNTEKT, true) - )) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 5.februar, 11.februar, 100.prosent, INNTEKT), + inntektshistorikk = listOf( + Inntektsopplysning(ORGNUMMER, 5.februar, INNTEKT, true) + ) + ) assertFunksjonellFeil(RV_IT_37, 2.vedtaksperiode.filter(ORGNUMMER)) assertSisteForkastetPeriodeTilstand(ORGNUMMER, 2.vedtaksperiode, TIL_INFOTRYGD) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselOmFlereInntektsmeldingerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselOmFlereInntektsmeldingerTest.kt index 5e6318a337..954bec3802 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselOmFlereInntektsmeldingerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselOmFlereInntektsmeldingerTest.kt @@ -46,7 +46,10 @@ internal class VarselOmFlereInntektsmeldingerTest : AbstractEndToEndTest() { fun `Varsel om flere inntektsmeldinger hvis vi forlenger en avsluttet periode med inntektsmelding`() { håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) håndterSøknad(februar) - håndterInntektsmelding(arbeidsgiverperioder = listOf(1.februar til 16.februar), førsteFraværsdag = 1.februar) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.februar til 16.februar), + førsteFraværsdag = 1.februar + ) håndterVilkårsgrunnlag(vedtaksperiodeIdInnhenter = 1.vedtaksperiode, inntekt = INNTEKT) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -54,7 +57,10 @@ internal class VarselOmFlereInntektsmeldingerTest : AbstractEndToEndTest() { håndterUtbetalt() håndterSykmelding(Sykmeldingsperiode(1.mars, 20.mars)) - håndterInntektsmelding(arbeidsgiverperioder = listOf(1.mars til 16.mars), førsteFraværsdag = 1.mars) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.mars til 16.mars), + førsteFraværsdag = 1.mars + ) håndterSøknad(Sykdom(1.mars, 20.mars, 50.prosent)) assertForventetFeil( diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselVedNegativtBel\303\270pE2ETest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselVedNegativtBel\303\270pE2ETest.kt" index 895ea2a2ad..83d43b6f00 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselVedNegativtBel\303\270pE2ETest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VarselVedNegativtBel\303\270pE2ETest.kt" @@ -11,32 +11,58 @@ import no.nav.helse.økonomi.Inntekt import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -internal class VarselVedNegativtBeløpE2ETest: AbstractDslTest() { +internal class VarselVedNegativtBeløpE2ETest : AbstractDslTest() { @Test fun `skal få varsel når utbetaling flyttes fra arbeidsgiver til person`() { a1 { nyttVedtak(januar) assertIngenVarsel(RV_UT_23) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(a1, INNTEKT, ".", null, listOf(Triple(1.januar, null, Inntekt.INGEN))) - )) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT, + ".", + null, + listOf(Triple(1.januar, null, Inntekt.INGEN)) + ) + ) + ) håndterYtelser(1.vedtaksperiode) - assertEquals(-15741, inspektør.sisteUtbetaling().arbeidsgiverOppdrag.inspektør.nettoBeløp) + assertEquals( + -15741, + inspektør.sisteUtbetaling().arbeidsgiverOppdrag.inspektør.nettoBeløp + ) assertEquals(15741, inspektør.sisteUtbetaling().personOppdrag.inspektør.nettoBeløp) assertVarsel(RV_UT_23) } } + @Test fun `skal få varsel når utbetaling flyttes fra person til arbeidsgiver`() { a1 { - nyttVedtak(januar, refusjon = Inntektsmelding.Refusjon(Inntekt.INGEN, null, emptyList())) + nyttVedtak( + januar, + refusjon = Inntektsmelding.Refusjon(Inntekt.INGEN, null, emptyList()) + ) assertIngenVarsel(RV_UT_23) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(a1, INNTEKT, ".", null, listOf(Triple(1.januar, null, INNTEKT))) - )) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT, + ".", + null, + listOf(Triple(1.januar, null, INNTEKT)) + ) + ) + ) håndterYtelser(1.vedtaksperiode) - assertEquals(15741, inspektør.sisteUtbetaling().arbeidsgiverOppdrag.inspektør.nettoBeløp) + assertEquals( + 15741, + inspektør.sisteUtbetaling().arbeidsgiverOppdrag.inspektør.nettoBeløp + ) assertEquals(-15741, inspektør.sisteUtbetaling().personOppdrag.inspektør.nettoBeløp) assertVarsel(RV_UT_23) } @@ -48,14 +74,19 @@ internal class VarselVedNegativtBeløpE2ETest: AbstractDslTest() { nyttVedtak(januar) assertIngenVarsel(RV_UT_23) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(a1, INNTEKT*0.8, ".", null, emptyList()) - )) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning(a1, INNTEKT * 0.8, ".", null, emptyList()) + ) + ) håndterYtelser(1.vedtaksperiode) - assertEquals(-3146, inspektør.sisteUtbetaling().arbeidsgiverOppdrag.inspektør.nettoBeløp) + assertEquals( + -3146, + inspektør.sisteUtbetaling().arbeidsgiverOppdrag.inspektør.nettoBeløp + ) assertEquals(0, inspektør.sisteUtbetaling().personOppdrag.inspektør.nettoBeløp) assertVarsel(RV_UT_23) } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeForkastetE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeForkastetE2ETest.kt index faed05d7d3..933a3808d5 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeForkastetE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeForkastetE2ETest.kt @@ -29,7 +29,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSimulering(4.vedtaksperiode) håndterUtbetalingsgodkjenning(4.vedtaksperiode, false) // <- TIL_INFOTRYGD assertEquals(1, observatør.forkastedePerioder()) - assertEquals(AVVENTER_GODKJENNING, observatør.forkastet(4.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand) + assertEquals( + AVVENTER_GODKJENNING, + observatør.forkastet(4.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) assertSisteTilstand(3.vedtaksperiode, AVSLUTTET) @@ -52,7 +55,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterUtbetalt() håndterAnnullerUtbetaling(ORGNUMMER) assertEquals(3, observatør.forkastedePerioder()) - assertEquals(AVSLUTTET, observatør.forkastet(3.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand) + assertEquals( + AVSLUTTET, + observatør.forkastet(3.vedtaksperiode.id(ORGNUMMER)).gjeldendeTilstand + ) assertSisteTilstand(1.vedtaksperiode, TIL_INFOTRYGD) assertSisteTilstand(2.vedtaksperiode, TIL_INFOTRYGD) assertSisteTilstand(3.vedtaksperiode, TIL_INFOTRYGD) @@ -64,7 +70,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(januar, sendTilGosys = true) assertTrue(observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(januar), observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(januar), + observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -74,7 +83,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(februar, sendTilGosys = true) assertFalse(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(januar, februar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(januar, februar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -84,7 +96,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(29.januar til 28.februar, sendTilGosys = true) assertFalse(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 26.januar, 29.januar til 28.februar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 26.januar, 29.januar til 28.februar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -97,7 +112,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(februar, sendTilGosys = true) assertFalse(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(januar, februar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(januar, februar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -110,7 +128,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(29.januar til 28.februar, sendTilGosys = true) assertFalse(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 26.januar, 29.januar til 28.februar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 26.januar, 29.januar til 28.februar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -120,7 +141,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(2.februar til 28.februar, sendTilGosys = true) assertTrue(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(januar, 2.februar til 28.februar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(januar, 2.februar til 28.februar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -133,7 +157,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(2.februar til 28.februar) assertTrue(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(januar, 2.februar til 28.februar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(januar, 2.februar til 28.februar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -144,7 +171,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { val event = observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)) assertFalse(event.trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 10.januar), observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 10.januar), + observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -155,7 +185,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(11.januar til 15.januar, sendTilGosys = true) assertFalse(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 10.januar, 11.januar til 15.januar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 10.januar, 11.januar til 15.januar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -166,7 +199,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(11.januar til 17.januar, sendTilGosys = true) assertTrue(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 10.januar, 11.januar til 17.januar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 10.januar, 11.januar til 17.januar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -179,7 +215,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(11.januar til 15.januar) assertFalse(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 10.januar, 11.januar til 15.januar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 10.januar, 11.januar til 15.januar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -192,7 +231,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(11.januar til 31.januar) assertTrue(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 10.januar, 11.januar til 31.januar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 10.januar, 11.januar til 31.januar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -205,7 +247,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSøknad(11.januar til 17.januar) assertTrue(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 10.januar, 11.januar til 17.januar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 10.januar, 11.januar til 17.januar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -217,7 +262,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(10.januar, 15.januar)) håndterSøknad(10.januar til 15.januar) assertFalse(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 5.januar, 10.januar til 15.januar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 5.januar, 10.januar til 15.januar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -233,7 +281,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(15.januar, 25.januar)) håndterSøknad(15.januar til 25.januar) assertTrue(observatør.forkastet(3.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 10.januar, 15.januar til 25.januar), observatør.forkastet(3.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 10.januar, 15.januar til 25.januar), + observatør.forkastet(3.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -247,7 +298,13 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(20.januar, 31.januar)) håndterSøknad(20.januar til 31.januar) assertTrue(observatør.forkastet(3.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 5.januar, 10.januar til 15.januar, 20.januar til 31.januar), observatør.forkastet(3.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf( + 1.januar til 5.januar, + 10.januar til 15.januar, + 20.januar til 31.januar + ), observatør.forkastet(3.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -265,7 +322,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { assertFalse(observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) } ) - assertEquals(listOf(januar), observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(januar), + observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -276,7 +336,10 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { nyPeriode(31.januar til 31.januar) assertFalse(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(januar, 31.januar til 31.januar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(januar, 31.januar til 31.januar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test @@ -287,36 +350,48 @@ internal class VedtaksperiodeForkastetE2ETest : AbstractEndToEndTest() { nyPeriode(januar) assertTrue(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 1.januar, 1.januar til 31.januar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 1.januar, 1.januar til 31.januar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test - fun `Sender forventede sykmeldingsperioder når søknad blir kastet ut pga delvis overlapp` () { + fun `Sender forventede sykmeldingsperioder når søknad blir kastet ut pga delvis overlapp`() { nyPeriode(1.januar til 25.januar) håndterSykmelding(januar) håndterSøknad(januar) assertTrue(observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) assertTrue(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) - assertEquals(listOf(1.januar til 25.januar, 1.januar til 31.januar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 25.januar, 1.januar til 31.januar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) } @Test - fun `Forventer arbeidsgiveropplysninger når søknad delvis overlapper med en kort periode` () { + fun `Forventer arbeidsgiveropplysninger når søknad delvis overlapper med en kort periode`() { nyPeriode(1.januar til 15.januar) håndterSykmelding(januar) håndterSøknad(januar) - assertEquals(listOf(1.januar til 15.januar, 1.januar til 31.januar), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(1.januar til 15.januar, 1.januar til 31.januar), + observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) assertTrue(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) } @Test - fun `Sender ikke med senere sykmeldingsperioder enn vedtaksperioden som forkastes` () { + fun `Sender ikke med senere sykmeldingsperioder enn vedtaksperioden som forkastes`() { nyPeriode(januar) nyPeriode(februar) forkastAlle() - assertEquals(listOf(januar), observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder) + assertEquals( + listOf(januar), + observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).sykmeldingsperioder + ) assertTrue(observatør.forkastet(1.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) assertFalse(observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)).trengerArbeidsgiveropplysninger) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeOpprettetTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeOpprettetTest.kt index 76e28083f4..24d3b8b305 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeOpprettetTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeOpprettetTest.kt @@ -22,6 +22,9 @@ internal class VedtaksperiodeOpprettetTest : AbstractDslTest() { assertEquals(2, observatør.vedtaksperiodeOpprettetEventer.size) assertEquals(1.januar, observatør.vedtaksperiodeOpprettetEventer.first().skjæringstidspunkt) - assertEquals(10.oktober, observatør.vedtaksperiodeOpprettetEventer.last().skjæringstidspunkt) + assertEquals( + 10.oktober, + observatør.vedtaksperiodeOpprettetEventer.last().skjæringstidspunkt + ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeVenterTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeVenterTest.kt index 197787508b..e9df324a67 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeVenterTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/VedtaksperiodeVenterTest.kt @@ -26,7 +26,7 @@ import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -internal class VedtaksperiodeVenterTest: AbstractDslTest() { +internal class VedtaksperiodeVenterTest : AbstractDslTest() { @Test fun `Korrigerte søknader kommer i vedtaksperiode_venter`() { @@ -38,11 +38,13 @@ internal class VedtaksperiodeVenterTest: AbstractDslTest() { val søknadId3 = UUID.randomUUID() håndterSøknad(Sykdom(1.januar, 31.januar, 80.prosent), søknadId = søknadId2) - val hendelseIderEtterSøknad2 = observatør.vedtaksperiodeVenter.last { it.behandlingId == behandlingId }.hendelser + val hendelseIderEtterSøknad2 = + observatør.vedtaksperiodeVenter.last { it.behandlingId == behandlingId }.hendelser assertTrue(hendelseIderEtterSøknad2.containsAll(setOf(søknadId1, søknadId2))) håndterSøknad(Sykdom(1.januar, 31.januar, 70.prosent), søknadId = søknadId3) - val hendelseIderEtterSøknad3 = observatør.vedtaksperiodeVenter.last { it.behandlingId == behandlingId }.hendelser + val hendelseIderEtterSøknad3 = + observatør.vedtaksperiodeVenter.last { it.behandlingId == behandlingId }.hendelser assertTrue(hendelseIderEtterSøknad3.containsAll(setOf(søknadId1, søknadId2, søknadId3))) } } @@ -60,7 +62,8 @@ internal class VedtaksperiodeVenterTest: AbstractDslTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) - val vedtaksperiodeVenter = observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode } + val vedtaksperiodeVenter = + observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode } assertEquals(a1Vedtaksperiode2, vedtaksperiodeVenter.venterPå.vedtaksperiodeId) assertEquals("a1", vedtaksperiodeVenter.venterPå.organisasjonsnummer) assertEquals("INNTEKTSMELDING", vedtaksperiodeVenter.venterPå.venteårsak.hva) @@ -74,8 +77,14 @@ internal class VedtaksperiodeVenterTest: AbstractDslTest() { håndterSykmelding(januar) håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( Arbeidsforhold(a1, EPOCH, type = ORDINÆRT), Arbeidsforhold(a2, EPOCH, type = ORDINÆRT), @@ -91,7 +100,8 @@ internal class VedtaksperiodeVenterTest: AbstractDslTest() { håndterSykmelding(januar) håndterSøknad(januar) assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - val vedtaksperiodeVenter = observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode } + val vedtaksperiodeVenter = + observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode } assertEquals(1.vedtaksperiode, vedtaksperiodeVenter.venterPå.vedtaksperiodeId) assertEquals("a2", vedtaksperiodeVenter.venterPå.organisasjonsnummer) assertEquals("INNTEKTSMELDING", vedtaksperiodeVenter.venterPå.venteårsak.hva) @@ -101,7 +111,8 @@ internal class VedtaksperiodeVenterTest: AbstractDslTest() { a1 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_REVURDERING) - val vedtaksperiodeVenter = observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode } + val vedtaksperiodeVenter = + observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode } assertEquals("INNTEKTSMELDING", vedtaksperiodeVenter.venterPå.venteårsak.hva) assertEquals("a2", vedtaksperiodeVenter.venterPå.organisasjonsnummer) assertEquals(a2VedtaksperiodeId, vedtaksperiodeVenter.venterPå.vedtaksperiodeId) @@ -120,7 +131,8 @@ internal class VedtaksperiodeVenterTest: AbstractDslTest() { a1 { håndterInntektsmelding(listOf(1.januar til 16.januar)) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) - val vedtaksperiodeVenter = observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode } + val vedtaksperiodeVenter = + observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode } assertEquals(a2VedtaksperiodeId, vedtaksperiodeVenter.venterPå.vedtaksperiodeId) assertEquals("a2", vedtaksperiodeVenter.venterPå.organisasjonsnummer) assertEquals("INNTEKTSMELDING", vedtaksperiodeVenter.venterPå.venteårsak.hva) @@ -129,37 +141,43 @@ internal class VedtaksperiodeVenterTest: AbstractDslTest() { } @Test - fun `Venter på tidligere periode som ikke har fått inntektsmelding`(){ + fun `Venter på tidligere periode som ikke har fått inntektsmelding`() { a1 { val søknadIdJanuar = UUID.randomUUID() nyPeriode(januar, søknadId = søknadIdJanuar) - assertVenterPå(listOf( - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 1.vedtaksperiode to Hva.INNTEKTSMELDING - )) + assertVenterPå( + listOf( + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 1.vedtaksperiode to Hva.INNTEKTSMELDING + ) + ) val søknadIdMars = UUID.randomUUID() nyPeriode(mars, søknadId = søknadIdMars) - assertVenterPå(listOf( - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 2.vedtaksperiode to Hva.INNTEKTSMELDING, - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 2.vedtaksperiode to Hva.INNTEKTSMELDING - )) + assertVenterPå( + listOf( + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 2.vedtaksperiode to Hva.INNTEKTSMELDING, + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 2.vedtaksperiode to Hva.INNTEKTSMELDING + ) + ) val inntektsmeldingIdMars = håndterInntektsmelding(listOf(1.mars til 16.mars)) - assertVenterPå(listOf( - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 2.vedtaksperiode to Hva.INNTEKTSMELDING, - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 2.vedtaksperiode to Hva.INNTEKTSMELDING, - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 2.vedtaksperiode to Hva.INNTEKTSMELDING - )) + assertVenterPå( + listOf( + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 2.vedtaksperiode to Hva.INNTEKTSMELDING, + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 2.vedtaksperiode to Hva.INNTEKTSMELDING, + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 2.vedtaksperiode to Hva.INNTEKTSMELDING + ) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) assertSisteTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) val venterTil = inspektør(1.vedtaksperiode).oppdatert.plusDays(180) @@ -199,7 +217,7 @@ internal class VedtaksperiodeVenterTest: AbstractDslTest() { ) ) ) - assertEquals(forventetVedtaksperiode1, observatør.vedtaksperiodeVenter.last{ + assertEquals(forventetVedtaksperiode1, observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode }) assertEquals(forventetVedtaksperiode2, observatør.vedtaksperiodeVenter.last { @@ -209,25 +227,29 @@ internal class VedtaksperiodeVenterTest: AbstractDslTest() { } @Test - fun `Venter på søknad på annen arbeidsgiver`(){ + fun `Venter på søknad på annen arbeidsgiver`() { a1 { håndterSykmelding(januar) } a2 { val søknadId = UUID.randomUUID() nyPeriode(januar, søknadId = søknadId) - assertVenterPå(listOf( - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 1.vedtaksperiode to Hva.INNTEKTSMELDING - )) + assertVenterPå( + listOf( + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 1.vedtaksperiode to Hva.INNTEKTSMELDING + ) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) val inntektsmeldingId = håndterInntektsmelding(listOf(1.januar til 16.januar)) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) - assertVenterPå(listOf( - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 1.vedtaksperiode to Hva.INNTEKTSMELDING, - 1.vedtaksperiode to Hva.SØKNAD - )) + assertVenterPå( + listOf( + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 1.vedtaksperiode to Hva.INNTEKTSMELDING, + 1.vedtaksperiode to Hva.SØKNAD + ) + ) val forventet = PersonObserver.VedtaksperiodeVenterEvent( organisasjonsnummer = a2, @@ -300,34 +322,58 @@ internal class VedtaksperiodeVenterTest: AbstractDslTest() { assertSisteTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) val januarVenterTil = inspektør(1.vedtaksperiode).oppdatert.plusDays(180) - val januarVenter = observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode } + val januarVenter = + observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode } assertEquals(1.vedtaksperiode, januarVenter.venterPå.vedtaksperiodeId) assertEquals(januarVenterTil, januarVenter.venterTil) - val marsVenter = observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 2.vedtaksperiode } + val marsVenter = + observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 2.vedtaksperiode } assertEquals(1.vedtaksperiode, marsVenter.venterPå.vedtaksperiodeId) assertEquals(januarVenterTil, marsVenter.venterTil) } } private fun assertVenterPå(expected: List>) { - val actual = observatør.vedtaksperiodeVenter.map { it.vedtaksperiodeId to it.venterPå.venteårsak.hva } + val actual = + observatør.vedtaksperiodeVenter.map { it.vedtaksperiodeId to it.venterPå.venteårsak.hva } assertEquals(expected.map { it.first to it.second.toString() }, actual) assertEquals(expected.size, observatør.vedtaksperiodeVenter.size) } internal companion object { - internal fun TestObservatør.assertVenter(venterVedtaksperiodeId: UUID, venterPåVedtaksperiodeId: UUID = venterVedtaksperiodeId, venterPåOrgnr: String? = null, venterPåHva: Hva, fordi: Hvorfor? = null) { - vedtaksperiodeVenter.last { it.vedtaksperiodeId == venterVedtaksperiodeId }.venterPå.assertVenterPå(venterPåVedtaksperiodeId, venterPåOrgnr, venterPåHva, fordi) + internal fun TestObservatør.assertVenter( + venterVedtaksperiodeId: UUID, + venterPåVedtaksperiodeId: UUID = venterVedtaksperiodeId, + venterPåOrgnr: String? = null, + venterPåHva: Hva, + fordi: Hvorfor? = null + ) { + vedtaksperiodeVenter.last { it.vedtaksperiodeId == venterVedtaksperiodeId }.venterPå.assertVenterPå( + venterPåVedtaksperiodeId, + venterPåOrgnr, + venterPåHva, + fordi + ) if (venterVedtaksperiodeId == venterPåVedtaksperiodeId) return // Om periode A venter på en annen periode B så burde også B vente på B (vente på seg selv) - vedtaksperiodeVenter.last { it.vedtaksperiodeId == venterPåVedtaksperiodeId }.venterPå.assertVenterPå(venterPåVedtaksperiodeId, venterPåOrgnr, venterPåHva, fordi) + vedtaksperiodeVenter.last { it.vedtaksperiodeId == venterPåVedtaksperiodeId }.venterPå.assertVenterPå( + venterPåVedtaksperiodeId, + venterPåOrgnr, + venterPåHva, + fordi + ) } - private fun PersonObserver.VedtaksperiodeVenterEvent.VenterPå.assertVenterPå(venterPåVedtaksperiodeId: UUID, venterPåOrgnr: String?, venterPåHva: Hva, fordi: Hvorfor?) { + private fun PersonObserver.VedtaksperiodeVenterEvent.VenterPå.assertVenterPå( + venterPåVedtaksperiodeId: UUID, + venterPåOrgnr: String?, + venterPåHva: Hva, + fordi: Hvorfor? + ) { venterPåOrgnr?.let { assertEquals(it, this.organisasjonsnummer) } assertEquals(venterPåVedtaksperiodeId, this.vedtaksperiodeId) assertEquals(venterPåHva.name, this.venteårsak.hva) assertEquals(fordi?.name, this.venteårsak.hvorfor) } } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Vilk\303\245rsgrunnlagE2ETest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Vilk\303\245rsgrunnlagE2ETest.kt" index 3ce0647983..cd3564f899 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Vilk\303\245rsgrunnlagE2ETest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/Vilk\303\245rsgrunnlagE2ETest.kt" @@ -36,26 +36,44 @@ internal class VilkårsgrunnlagE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(6.februar, 28.februar), orgnummer = a2) håndterSøknad(6.februar til 28.februar, orgnummer = a2) - håndterInntektsmelding(listOf(21.januar til 21.januar, 6.februar til 20.februar), orgnummer = a2) - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterInntektsmelding( + listOf(21.januar til 21.januar, 6.februar til 20.februar), + orgnummer = a2 + ) + håndterVilkårsgrunnlag( + 1.vedtaksperiode, orgnummer = a2, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( - ArbeidsgiverInntekt(a1, listOf( + ArbeidsgiverInntekt( + a1, listOf( desember(2017).lønnsinntekt(), november(2017).lønnsinntekt(), oktober(2017).lønnsinntekt() - )), - ArbeidsgiverInntekt(a2, listOf( + ) + ), + ArbeidsgiverInntekt( + a2, listOf( desember(2017).lønnsinntekt(), november(2017).lønnsinntekt(), oktober(2017).lønnsinntekt(), - )), + ) + ), ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, 1.januar(2017), null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.januar(2017), null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 1.januar(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.januar(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a2) @@ -67,24 +85,39 @@ internal class VilkårsgrunnlagE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) håndterSøknad(januar, orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, orgnummer = a1, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( - ArbeidsgiverInntekt(a1, listOf( + ArbeidsgiverInntekt( + a1, listOf( desember(2017).lønnsinntekt(INNTEKT), november(2017).lønnsinntekt(INNTEKT), oktober(2017).lønnsinntekt(INNTEKT) - )), - ArbeidsgiverInntekt(a2, listOf( + ) + ), + ArbeidsgiverInntekt( + a2, listOf( desember(2017).lønnsinntekt(2500.månedlig), november(2017).lønnsinntekt((-3000).månedlig), - )), + ) + ), ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, 1.januar(2017), null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.januar(2017), null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 1.januar(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.januar(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -118,7 +151,7 @@ internal class VilkårsgrunnlagE2ETest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, ) @@ -128,7 +161,7 @@ internal class VilkårsgrunnlagE2ETest : AbstractEndToEndTest() { AVVENTER_BLOKKERENDE_PERIODE ) } - + @Test fun `Forkaster ikke vilkårsgrunnlag om det er en periode i AUU med samme skjæringstidspunkt som den som blir annullert`() { nyPeriode(1.januar til 16.januar) @@ -148,8 +181,21 @@ internal class VilkårsgrunnlagE2ETest : AbstractEndToEndTest() { @Test fun `nytt og eneste arbeidsforhold på skjæringstidspunkt`() { nyPeriode(januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening") - håndterVilkårsgrunnlag(1.vedtaksperiode, arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(a1, 1.januar, null, Arbeidsforholdtype.ORDINÆRT))) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening" + ) + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 1.januar, + null, + Arbeidsforholdtype.ORDINÆRT + ) + ) + ) assertVarsel(Varselkode.RV_VV_1) } @@ -162,7 +208,11 @@ internal class VilkårsgrunnlagE2ETest : AbstractEndToEndTest() { } private fun assertVilkårsgrunnlagFraSpleisFor(vararg skjæringstidspunkt: LocalDate) { - assertEquals(skjæringstidspunkt.toSet(), person.inspektør.vilkårsgrunnlagHistorikk.aktiveSpleisSkjæringstidspunkt) + assertEquals( + skjæringstidspunkt.toSet(), + person.inspektør.vilkårsgrunnlagHistorikk.aktiveSpleisSkjæringstidspunkt + ) } + private fun assertIngenVilkårsgrunnlagFraSpleis() = assertVilkårsgrunnlagFraSpleisFor() } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/arbeidsgiveropplysninger/OppdaterteArbeidsgiveropplysningerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/arbeidsgiveropplysninger/OppdaterteArbeidsgiveropplysningerTest.kt index fb009eb722..39371ab01f 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/arbeidsgiveropplysninger/OppdaterteArbeidsgiveropplysningerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/arbeidsgiveropplysninger/OppdaterteArbeidsgiveropplysningerTest.kt @@ -38,29 +38,33 @@ import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { +internal class OppdaterteArbeidsgiveropplysningerTest : AbstractEndToEndTest() { @Test fun `Sender ny forespørsel når korrigerende søknad kommer før vi har fått svar på forrige forespørsel -- flytter skjæringstidspunktet`() { nyPeriode(2.januar til 31.januar) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(2.januar, 31.januar, 100.prosent), egenmeldinger = listOf(1.januar til 1.januar)) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(2.januar, 31.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 1.januar) + ) val expectedForespørsel = PersonObserver.TrengerArbeidsgiveropplysningerEvent( - organisasjonsnummer = ORGNUMMER, - vedtaksperiodeId = 1.vedtaksperiode.id(ORGNUMMER), - skjæringstidspunkt = 2.januar, - sykmeldingsperioder = listOf(2.januar til 31.januar), - egenmeldingsperioder = listOf(1.januar til 1.januar), - førsteFraværsdager = listOf( - PersonObserver.FørsteFraværsdag(a1, 2.januar) - ), - forespurteOpplysninger = listOf( - PersonObserver.Inntekt(forslag = null), - PersonObserver.Refusjon(forslag = emptyList()), - PersonObserver.Arbeidsgiverperiode - ) + organisasjonsnummer = ORGNUMMER, + vedtaksperiodeId = 1.vedtaksperiode.id(ORGNUMMER), + skjæringstidspunkt = 2.januar, + sykmeldingsperioder = listOf(2.januar til 31.januar), + egenmeldingsperioder = listOf(1.januar til 1.januar), + førsteFraværsdager = listOf( + PersonObserver.FørsteFraværsdag(a1, 2.januar) + ), + forespurteOpplysninger = listOf( + PersonObserver.Inntekt(forslag = null), + PersonObserver.Refusjon(forslag = emptyList()), + PersonObserver.Arbeidsgiverperiode ) + ) - assertTilstander(1.vedtaksperiode, + assertTilstander( + 1.vedtaksperiode, TilstandType.START, TilstandType.AVVENTER_INFOTRYGDHISTORIKK, TilstandType.AVVENTER_INNTEKTSMELDING @@ -73,8 +77,14 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { @Test fun `Sender ny forespørsel når korrigerende søknad kommer før vi har fått svar på forrige forespørsel -- flytter ikke skjæringstidspunktet`() { håndterSykmelding(Sykmeldingsperiode(5.januar, 31.januar)) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(5.januar, 31.januar, 100.prosent), egenmeldinger = listOf(1.januar til 1.januar)) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(5.januar, 31.januar, 100.prosent), egenmeldinger = listOf(1.januar til 2.januar)) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(5.januar, 31.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 1.januar) + ) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(5.januar, 31.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 2.januar) + ) val expectedForespørsel = PersonObserver.TrengerArbeidsgiveropplysningerEvent( organisasjonsnummer = ORGNUMMER, @@ -92,7 +102,8 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { ) ) - assertTilstander(1.vedtaksperiode, + assertTilstander( + 1.vedtaksperiode, TilstandType.START, TilstandType.AVVENTER_INFOTRYGDHISTORIKK, TilstandType.AVVENTER_INNTEKTSMELDING @@ -107,8 +118,18 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { nyPeriode(2.januar til 31.januar, orgnummer = a1) nyPeriode(januar, orgnummer = a2) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }.size) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) }.size) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) + }.size + ) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) + }.size + ) val expectedForespørsel = PersonObserver.TrengerArbeidsgiveropplysningerEvent( organisasjonsnummer = a1, @@ -137,22 +158,43 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { nyttVedtak(2.januar til 31.januar, orgnummer = a1) nyPeriode(januar, orgnummer = a2) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }.size) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) }.size) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) + }.size + ) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) + }.size + ) } @Test fun `oppdaterte opplysninger for mars når ag2 tetter gapet`() { nyPeriode(januar, a1) val im = håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf( - a1 to INNTEKT, - a2 to INNTEKT - ), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) ), orgnummer = a1 ) @@ -164,11 +206,22 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { nyPeriode(mars, orgnummer = a1) nyPeriode(februar, orgnummer = a2) assertEquals(4, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }.size) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) }.size) - val arbeidsgiveropplysningerEventer = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { - it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) - } + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) + }.size + ) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) + }.size + ) + val arbeidsgiveropplysningerEventer = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { + it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) + } assertEquals(2, arbeidsgiveropplysningerEventer.size) arbeidsgiveropplysningerEventer.last().also { trengerArbeidsgiveropplysningerEvent -> val expectedForespørsel = PersonObserver.TrengerArbeidsgiveropplysningerEvent( @@ -183,7 +236,15 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { ), forespurteOpplysninger = listOf( PersonObserver.FastsattInntekt(INNTEKT), - PersonObserver.Refusjon(forslag = listOf(Refusjonsforslag(1.januar, null, INNTEKT.månedlig))), + PersonObserver.Refusjon( + forslag = listOf( + Refusjonsforslag( + 1.januar, + null, + INNTEKT.månedlig + ) + ) + ), PersonObserver.Arbeidsgiverperiode ) ) @@ -195,12 +256,26 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { fun `Overlappende søknad fører til oppdatert forespørsel`() { nyPeriode(20.januar til 20.februar, orgnummer = a1) håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a2) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), Søknad.Søknadsperiode.Arbeid(18.januar, 31.januar), orgnummer = a2) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + Søknad.Søknadsperiode.Arbeid(18.januar, 31.januar), + orgnummer = a2 + ) assertEquals(20.januar, inspektør(a1).skjæringstidspunkt(1.vedtaksperiode)) assertEquals(1.januar, inspektør(a2).skjæringstidspunkt(1.vedtaksperiode)) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) }.size) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }.size) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) + }.size + ) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.filter { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) + }.size + ) } @Test @@ -225,7 +300,10 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { ) ) - assertEquals(expectedForespørsel, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last()) + assertEquals( + expectedForespørsel, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() + ) } @Test @@ -240,7 +318,11 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { assertEquals(4, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - val im = håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + val im = håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertEquals(6, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) håndterVilkårsgrunnlag(2.vedtaksperiode) @@ -250,12 +332,26 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { assertEquals(4.vedtaksperiode.id(ORGNUMMER), oppdatertForespørsel.vedtaksperiodeId) assertEquals( - PersonObserver.Inntekt(forslag = PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, 31000.0)), + PersonObserver.Inntekt( + forslag = PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, + 31000.0 + ) + ), oppdatertForespørsel.forespurteOpplysninger.first { it is PersonObserver.Inntekt } ) assertEquals( - PersonObserver.Refusjon(forslag = listOf(Refusjonsforslag(1.januar, null, INNTEKT.månedlig))), + PersonObserver.Refusjon( + forslag = listOf( + Refusjonsforslag( + 1.januar, + null, + INNTEKT.månedlig + ) + ) + ), oppdatertForespørsel.forespurteOpplysninger.first { it is PersonObserver.Refusjon } ) } @@ -266,11 +362,20 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { nyPeriode(mars) assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(ORGNUMMER, INNTEKT/2))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(ORGNUMMER, INNTEKT / 2)) + ) assertEquals(3, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) val forespørsel = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() assertEquals( - PersonObserver.Inntekt(forslag = PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, 31000.0)), + PersonObserver.Inntekt( + forslag = PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, + 31000.0 + ) + ), forespørsel.forespurteOpplysninger.first { it is PersonObserver.Inntekt } ) } @@ -281,12 +386,21 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { nyPeriode(mars) assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(ORGNUMMER, 32000.månedlig))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(ORGNUMMER, 32000.månedlig)) + ) assertEquals(3, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) val forespørsel = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() assertEquals( - PersonObserver.Inntekt(forslag = PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.SAKSBEHANDLER, 32000.0)), + PersonObserver.Inntekt( + forslag = PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.SAKSBEHANDLER, + 32000.0 + ) + ), forespørsel.forespurteOpplysninger.first { it is PersonObserver.Inntekt } ) } @@ -300,7 +414,13 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { val forespørsel = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() assertEquals( - PersonObserver.Inntekt(forslag = PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, 32000.0)), + PersonObserver.Inntekt( + forslag = PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, + 32000.0 + ) + ), forespørsel.forespurteOpplysninger.first { it is PersonObserver.Inntekt } ) } @@ -318,7 +438,13 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { val forespørsel = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() assertEquals( - PersonObserver.Inntekt(forslag = PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, 33000.0)), + PersonObserver.Inntekt( + forslag = PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, + 33000.0 + ) + ), forespørsel.forespurteOpplysninger.first { it is PersonObserver.Inntekt } ) } @@ -338,4 +464,4 @@ internal class OppdaterteArbeidsgiveropplysningerTest: AbstractEndToEndTest() { assertTilstand(2.vedtaksperiode, TilstandType.AVVENTER_BLOKKERENDE_PERIODE) assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/arbeidsgiveropplysninger/TrengerArbeidsgiveropplysningerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/arbeidsgiveropplysninger/TrengerArbeidsgiveropplysningerTest.kt index fe01b35525..9cf52df50d 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/arbeidsgiveropplysninger/TrengerArbeidsgiveropplysningerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/arbeidsgiveropplysninger/TrengerArbeidsgiveropplysningerTest.kt @@ -80,26 +80,53 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { @Test fun `Skal høre på arbeidsgiver når hen sier at egenmeldinger ikke gjelder`() { - håndterSøknad(Sykdom(3.januar, 17.januar, 100.prosent), egenmeldinger = listOf(1.januar til 2.januar)) + håndterSøknad( + Sykdom(3.januar, 17.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 2.januar) + ) håndterInntektsmelding(listOf(3.januar til 17.januar)) assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - assertEquals(emptyList(), inspektør.vedtaksperioder(1.vedtaksperiode).egenmeldingsperioder) + assertEquals( + emptyList(), + inspektør.vedtaksperioder(1.vedtaksperiode).egenmeldingsperioder + ) } @Test fun `Skal ikke sende forespørsel for korte perioder etter at arbeidsgiver har sendt riktig AGP`() { - håndterSøknad(Sykdom(6.januar, 17.januar, 100.prosent), egenmeldinger = listOf(1.januar til 5.januar)) + håndterSøknad( + Sykdom(6.januar, 17.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 5.januar) + ) assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - håndterSøknad(Sykdom(22.januar, 25.januar, 100.prosent), egenmeldinger = listOf(21.januar til 21.januar)) + håndterSøknad( + Sykdom(22.januar, 25.januar, 100.prosent), + egenmeldinger = listOf(21.januar til 21.januar) + ) assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - håndterInntektsmelding(listOf(6.januar til 17.januar), vedtaksperiodeIdInnhenter = 1.vedtaksperiode) - assertEquals(emptyList(), inspektør.vedtaksperioder(1.vedtaksperiode).egenmeldingsperioder) - assertEquals(listOf(21.januar til 21.januar), inspektør.vedtaksperioder(2.vedtaksperiode).egenmeldingsperioder) + håndterInntektsmelding( + listOf(6.januar til 17.januar), + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) + assertEquals( + emptyList(), + inspektør.vedtaksperioder(1.vedtaksperiode).egenmeldingsperioder + ) + assertEquals( + listOf(21.januar til 21.januar), + inspektør.vedtaksperioder(2.vedtaksperiode).egenmeldingsperioder + ) - håndterInntektsmelding(listOf(6.januar til 17.januar, 22.januar til 25.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) - assertEquals(emptyList(), inspektør.vedtaksperioder(2.vedtaksperiode).egenmeldingsperioder) + håndterInntektsmelding( + listOf(6.januar til 17.januar, 22.januar til 25.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) + assertEquals( + emptyList(), + inspektør.vedtaksperioder(2.vedtaksperiode).egenmeldingsperioder + ) assertEquals(3, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) } @@ -131,7 +158,10 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().let { event -> assertEquals(listOf(12.februar til 28.februar), event.sykmeldingsperioder) assertEquals(13.februar, event.skjæringstidspunkt) - assertEquals(listOf(PersonObserver.FørsteFraværsdag(ORGNUMMER, 13.februar)), event.førsteFraværsdager) + assertEquals( + listOf(PersonObserver.FørsteFraværsdag(ORGNUMMER, 13.februar)), + event.førsteFraværsdager + ) assertFalse(event.forespurteOpplysninger.any { it is PersonObserver.Arbeidsgiverperiode }) } assertSisteTilstand(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING) @@ -149,14 +179,25 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { fun `ber ikke om arbeidsgiveropplysninger på ghost når riktig inntektsmelding kommer`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf( + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( a1 to INNTEKT, a2 to INNTEKT - ), 1.januar), + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), orgnummer = a1 ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -170,14 +211,22 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a1) assertEquals(1, observatør.inntektsmeldingHåndtert.size) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.organisasjonsnummer == a1 }) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.organisasjonsnummer == a2 }) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.organisasjonsnummer == a1 }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.organisasjonsnummer == a2 }) håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a2) assertEquals(2, observatør.inntektsmeldingHåndtert.size) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.organisasjonsnummer == a1 }) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.organisasjonsnummer == a2 }) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.organisasjonsnummer == a1 }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.organisasjonsnummer == a2 }) } @Test @@ -186,7 +235,10 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(16.januar, 29.januar, 100.prosent), Ferie(16.januar, 16.januar)) håndterSøknad(Sykdom(30.januar, 8.februar, 100.prosent)) assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - assertEquals(2.vedtaksperiode.id(ORGNUMMER), observatør.trengerArbeidsgiveropplysningerVedtaksperioder.single().vedtaksperiodeId) + assertEquals( + 2.vedtaksperiode.id(ORGNUMMER), + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.single().vedtaksperiodeId + ) } @Test @@ -195,7 +247,10 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(16.januar, 29.januar, 100.prosent), Ferie(16.januar, 16.januar)) håndterInntektsmelding(listOf(12.januar til 27.januar)) assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - assertEquals(2.vedtaksperiode.id(ORGNUMMER), observatør.trengerArbeidsgiveropplysningerVedtaksperioder.single().vedtaksperiodeId) + assertEquals( + 2.vedtaksperiode.id(ORGNUMMER), + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.single().vedtaksperiodeId + ) } @Test @@ -207,8 +262,22 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) val expectedForespurteOpplysninger = listOf( - PersonObserver.Inntekt(PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, 31000.0)), - PersonObserver.Refusjon(forslag = listOf(Refusjonsforslag(1.januar, null, INNTEKT.månedlig))) + PersonObserver.Inntekt( + PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, + 31000.0 + ) + ), + PersonObserver.Refusjon( + forslag = listOf( + Refusjonsforslag( + 1.januar, + null, + INNTEKT.månedlig + ) + ) + ) ) val actualForespurteOpplysninger = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().forespurteOpplysninger @@ -238,8 +307,22 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nyPeriode(17.februar til 17.mars) val expectedForespurteOpplysninger = listOf( - PersonObserver.Inntekt(PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, 31000.0)), - PersonObserver.Refusjon(forslag = listOf(Refusjonsforslag(1.januar, null, INNTEKT.månedlig))), + PersonObserver.Inntekt( + PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, + 31000.0 + ) + ), + PersonObserver.Refusjon( + forslag = listOf( + Refusjonsforslag( + 1.januar, + null, + INNTEKT.månedlig + ) + ) + ), PersonObserver.Arbeidsgiverperiode ) val actualForespurteOpplysninger = @@ -252,7 +335,8 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { @Test fun `sender med skjæringstidspunkt i eventet`() { nyPeriode(januar) - val trengerArbeidsgiveropplysningerEvent = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() + val trengerArbeidsgiveropplysningerEvent = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() assertEquals(1.januar, trengerArbeidsgiveropplysningerEvent.skjæringstidspunkt) } @@ -262,12 +346,16 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nyPeriode(1.januar til 16.januar) nyPeriode(17.januar til 31.januar) - val trengerArbeidsgiveropplysningerEvent = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() + val trengerArbeidsgiveropplysningerEvent = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() val expectedSykmeldingsperioder = listOf( 1.januar til 16.januar, 17.januar til 31.januar ) - assertEquals(expectedSykmeldingsperioder, trengerArbeidsgiveropplysningerEvent.sykmeldingsperioder) + assertEquals( + expectedSykmeldingsperioder, + trengerArbeidsgiveropplysningerEvent.sykmeldingsperioder + ) assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) } @@ -277,9 +365,13 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nyPeriode(januar) nyPeriode(17.februar til 17.mars) - val trengerArbeidsgiveropplysningerEvent = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() + val trengerArbeidsgiveropplysningerEvent = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() val expectedSykmeldingsperioder = listOf(17.februar til 17.mars) - assertEquals(expectedSykmeldingsperioder, trengerArbeidsgiveropplysningerEvent.sykmeldingsperioder) + assertEquals( + expectedSykmeldingsperioder, + trengerArbeidsgiveropplysningerEvent.sykmeldingsperioder + ) assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) } @@ -296,15 +388,22 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { PersonObserver.Arbeidsgiverperiode ) - val trengerArbeidsgiveropplysningerEvent = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() - assertEquals(expectedForespurteOpplysninger, trengerArbeidsgiveropplysningerEvent.forespurteOpplysninger) + val trengerArbeidsgiveropplysningerEvent = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() + assertEquals( + expectedForespurteOpplysninger, + trengerArbeidsgiveropplysningerEvent.forespurteOpplysninger + ) val expectedSykmeldingsperioder = listOf( 1.januar til 7.januar, 9.januar til 14.januar, 16.januar til 21.januar ) - assertEquals(expectedSykmeldingsperioder, trengerArbeidsgiveropplysningerEvent.sykmeldingsperioder) + assertEquals( + expectedSykmeldingsperioder, + trengerArbeidsgiveropplysningerEvent.sykmeldingsperioder + ) assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) } @@ -317,16 +416,36 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, orgnummer = a1) assertEquals(5, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) }) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) + }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) + }) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) + }) val actualForespurteOpplysninger = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().forespurteOpplysninger val inntektsmeldingId = inspektør(a1).hendelseIder(1.vedtaksperiode.id(a1)).last() val expectedForespurteOpplysninger = listOf( PersonObserver.FastsattInntekt(INNTEKT_FLERE_AG), - PersonObserver.Refusjon(listOf(Refusjonsforslag(1.januar, null, INNTEKT_FLERE_AG.månedlig))), + PersonObserver.Refusjon( + listOf( + Refusjonsforslag( + 1.januar, + null, + INNTEKT_FLERE_AG.månedlig + ) + ) + ), PersonObserver.Arbeidsgiverperiode ) assertEquals(expectedForespurteOpplysninger, actualForespurteOpplysninger) @@ -339,16 +458,36 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nyPeriode(11.februar til 28.februar, a1) assertEquals(5, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) }) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) + }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) + }) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) + }) val inntektsmeldingId = inspektør(a1).hendelseIder(1.vedtaksperiode.id(a1)).last() val actualForespurteOpplysninger = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().forespurteOpplysninger val expectedForespurteOpplysninger = listOf( PersonObserver.FastsattInntekt(INNTEKT_FLERE_AG), - PersonObserver.Refusjon(listOf(Refusjonsforslag(1.januar, null, INNTEKT_FLERE_AG.månedlig))) + PersonObserver.Refusjon( + listOf( + Refusjonsforslag( + 1.januar, + null, + INNTEKT_FLERE_AG.månedlig + ) + ) + ) ) assertEquals(expectedForespurteOpplysninger, actualForespurteOpplysninger) } @@ -362,15 +501,36 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, orgnummer = a1) assertEquals(5, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) }) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) + }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) + }) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) + }) val inntektsmeldingId = inspektør(a1).hendelseIder(1.vedtaksperiode.id(a1)).last() - val actualForespurtOpplysning = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().forespurteOpplysninger + val actualForespurtOpplysning = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().forespurteOpplysninger val expectedForespurteOpplysninger = listOf( PersonObserver.FastsattInntekt(INNTEKT_FLERE_AG), - PersonObserver.Refusjon(listOf(Refusjonsforslag(1.januar, null, INNTEKT_FLERE_AG.månedlig))), + PersonObserver.Refusjon( + listOf( + Refusjonsforslag( + 1.januar, + null, + INNTEKT_FLERE_AG.månedlig + ) + ) + ), PersonObserver.Arbeidsgiverperiode ) @@ -379,10 +539,12 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { @Test fun `sender med første fraværsdag på alle arbeidsgivere for skjæringstidspunktet`() { - nyeVedtakMedUlikFom(mapOf( - a1 to (januar), - a2 to (2.januar til 31.januar) - )) + nyeVedtakMedUlikFom( + mapOf( + a1 to (januar), + a2 to (2.januar til 31.januar) + ) + ) assertEquals(4, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) val actualForespørsel = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() val expectedForespørsel = PersonObserver.TrengerArbeidsgiveropplysningerEvent( @@ -417,17 +579,41 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, orgnummer = a2) assertEquals(5, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) }) - assertEquals(0, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) }) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 2.vedtaksperiode.id(a2) }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) + }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a2) + }) + assertEquals( + 0, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) + }) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 2.vedtaksperiode.id(a2) + }) val inntektsmeldingId = inspektør(a2).hendelseIder(1.vedtaksperiode.id(a2)).last() val actualForespurtOpplysning = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().forespurteOpplysninger val expectedForespurteOpplysninger = listOf( - PersonObserver.FastsattInntekt(INNTEKT_FLERE_AG), - PersonObserver.Refusjon(listOf(Refusjonsforslag(1.januar, null, INNTEKT_FLERE_AG.månedlig))), + PersonObserver.FastsattInntekt(INNTEKT_FLERE_AG), + PersonObserver.Refusjon( + listOf( + Refusjonsforslag( + 1.januar, + null, + INNTEKT_FLERE_AG.månedlig + ) + ) + ), PersonObserver.Arbeidsgiverperiode ) assertEquals(expectedForespurteOpplysninger, actualForespurtOpplysning) @@ -438,14 +624,18 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nyPeriode(1.januar til 16.januar) nyPeriode(17.januar til 31.januar) - val trengerArbeidsgiveropplysningerEvent = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() + val trengerArbeidsgiveropplysningerEvent = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() val expectedForespurteOpplysninger = listOf( PersonObserver.Inntekt(null), PersonObserver.Refusjon(forslag = emptyList()), PersonObserver.Arbeidsgiverperiode ) - assertEquals(expectedForespurteOpplysninger, trengerArbeidsgiveropplysningerEvent.forespurteOpplysninger) + assertEquals( + expectedForespurteOpplysninger, + trengerArbeidsgiveropplysningerEvent.forespurteOpplysninger + ) assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) } @@ -454,7 +644,8 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nyPeriode(1.januar til 16.januar) nyPeriode(20.januar til 31.januar) - val trengerArbeidsgiveropplysningerEvent = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() + val trengerArbeidsgiveropplysningerEvent = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() val expectedForespurteOpplysninger = listOf( PersonObserver.Inntekt(null), @@ -462,7 +653,10 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { PersonObserver.Arbeidsgiverperiode ) - assertEquals(expectedForespurteOpplysninger, trengerArbeidsgiveropplysningerEvent.forespurteOpplysninger) + assertEquals( + expectedForespurteOpplysninger, + trengerArbeidsgiveropplysningerEvent.forespurteOpplysninger + ) assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) } @@ -475,24 +669,39 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.januar til 16.januar)) - val trengerArbeidsgiveropplysningerEvent = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() - assertFalse(trengerArbeidsgiveropplysningerEvent.forespurteOpplysninger.contains(PersonObserver.Arbeidsgiverperiode)) + val trengerArbeidsgiveropplysningerEvent = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() + assertFalse( + trengerArbeidsgiveropplysningerEvent.forespurteOpplysninger.contains( + PersonObserver.Arbeidsgiverperiode + ) + ) } @Test fun `blir syk fra ghost`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntektperioderForSykepengegrunnlag { - 1.oktober(2017) til 1.desember(2017) inntekter { - a1 inntekt INNTEKT - a2 inntekt INNTEKT - } - }), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( + inntektperioderForSykepengegrunnlag { + 1.oktober(2017) til 1.desember(2017) inntekter { + a1 inntekt INNTEKT + a2 inntekt INNTEKT + } + }), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), orgnummer = a1 ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -503,7 +712,8 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a2) assertTilstander(1.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, orgnummer = a2) - val arbeidsgiveropplysningerEvents = observatør.trengerArbeidsgiveropplysningerVedtaksperioder + val arbeidsgiveropplysningerEvents = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder assertEquals(2, arbeidsgiveropplysningerEvents.size) val trengerArbeidsgiveropplysningerEvent = arbeidsgiveropplysningerEvents.last() @@ -512,15 +722,29 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { PersonObserver.Refusjon(emptyList()), PersonObserver.Arbeidsgiverperiode ) - assertEquals(expectedForespurteOpplysninger, trengerArbeidsgiveropplysningerEvent.forespurteOpplysninger) + assertEquals( + expectedForespurteOpplysninger, + trengerArbeidsgiveropplysningerEvent.forespurteOpplysninger + ) nullstillTilstandsendringer() håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a2) assertVarsel(RV_IM_4, AktivitetsloggFilter.arbeidsgiver(a1)) assertIngenVarsel(RV_IM_4, AktivitetsloggFilter.arbeidsgiver(a2)) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) } @Test @@ -549,7 +773,12 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { ) fraVilkårsprøvingTilGodkjent(INNTEKT_FLERE_AG) forlengVedtak(februar, orgnummer = a1) - assertUgyldigSituasjon("Burde ikke ha tom refusjonstidslinje i tilstand AVVENTER_HISTORIKK") { nyPeriode(mars, a2) } + assertUgyldigSituasjon("Burde ikke ha tom refusjonstidslinje i tilstand AVVENTER_HISTORIKK") { + nyPeriode( + mars, + a2 + ) + } assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, orgnummer = a2) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET, orgnummer = a1) @@ -572,7 +801,8 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { ønsket = { assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, orgnummer = a2) - val arbeidsgiveropplysningerEvents = observatør.trengerArbeidsgiveropplysningerVedtaksperioder + val arbeidsgiveropplysningerEvents = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder assertEquals(3, arbeidsgiveropplysningerEvents.size) val trengerArbeidsgiveropplysningerEvent = arbeidsgiveropplysningerEvents.last() val inntektsmeldingId = inspektør(a2).hendelseIder(1.vedtaksperiode.id(a2)).last() @@ -617,7 +847,12 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { ) fraVilkårsprøvingTilGodkjent(INNTEKT_FLERE_AG) forlengVedtak(februar, orgnummer = a1) - assertUgyldigSituasjon("Burde ikke ha tom refusjonstidslinje i tilstand AVVENTER_HISTORIKK") { nyPeriode(mars, a2) } + assertUgyldigSituasjon("Burde ikke ha tom refusjonstidslinje i tilstand AVVENTER_HISTORIKK") { + nyPeriode( + mars, + a2 + ) + } assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, orgnummer = a2) @@ -641,10 +876,12 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { ønsket = { assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, orgnummer = a2) - val trengerArbeidsgiveropplysningerEvents = observatør.trengerArbeidsgiveropplysningerVedtaksperioder + val trengerArbeidsgiveropplysningerEvents = + observatør.trengerArbeidsgiveropplysningerVedtaksperioder assertEquals(3, trengerArbeidsgiveropplysningerEvents.size) - val trengerArbeidsgiveropplysningerEvent = trengerArbeidsgiveropplysningerEvents.last() + val trengerArbeidsgiveropplysningerEvent = + trengerArbeidsgiveropplysningerEvents.last() val inntektsmeldingId = inspektør(a2).hendelseIder(1.vedtaksperiode.id(a2)).last() val expectedForespurteOpplysninger = listOf( @@ -670,7 +907,13 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { fun `Skal ikke be om arbeidsgiveropplysninger for perioder innenfor arbeidsgiverperioden`() { nyPeriode(1.januar til 10.januar) assertTrue(observatør.trengerArbeidsgiveropplysningerVedtaksperioder.isEmpty()) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -684,7 +927,11 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { fun `Periode etter kort gap skal ikke sende forespørsel dersom inntektsmeldingen allerede er mottatt`() { nyttVedtak(januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 10.februar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 10.februar, + avsendersystem = ALTINN + ) håndterSykmelding(Sykmeldingsperiode(10.februar, 5.mars)) håndterSøknad(Sykdom(10.februar, 5.mars, sykmeldingsgrad = 100.prosent)) @@ -693,7 +940,11 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { @Test fun `Skal ikke sende ut forespørsel for en periode som allerede har mottatt inntektsmelding -- selv om håndteringen feiler`() { - håndterInntektsmelding(listOf(1.januar til 16.januar), harOpphørAvNaturalytelser = true, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + harOpphørAvNaturalytelser = true, + avsendersystem = ALTINN + ) nyPeriode(januar) assertEquals(0, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) } @@ -708,32 +959,53 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { @Test fun `Skal sende egenmeldingsdager fra søknad i forespørsel`() { håndterSykmelding(Sykmeldingsperiode(5.januar, 31.januar)) - håndterSøknad(Sykdom(5.januar, 31.januar, 100.prosent), egenmeldinger = listOf(1.januar til 4.januar)) - assertEquals(5.januar til 31.januar, inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.periode) + håndterSøknad( + Sykdom(5.januar, 31.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 4.januar) + ) + assertEquals( + 5.januar til 31.januar, + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.periode + ) val expectedEgenmeldinger = listOf(1.januar til 4.januar) - assertEquals(expectedEgenmeldinger, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().egenmeldingsperioder) + assertEquals( + expectedEgenmeldinger, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().egenmeldingsperioder + ) } @Test fun `Sender med egenmeldingsdager fra kort søknad`() { håndterSykmelding(Sykmeldingsperiode(5.januar, 10.januar)) - håndterSøknad(Sykdom(5.januar, 10.januar, 100.prosent), egenmeldinger = listOf(4.januar til 4.januar)) + håndterSøknad( + Sykdom(5.januar, 10.januar, 100.prosent), + egenmeldinger = listOf(4.januar til 4.januar) + ) nyPeriode(11.januar til 31.januar) val exeptectedVedtaksperiode = 5.januar til 10.januar - assertEquals(exeptectedVedtaksperiode, inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.periode) + assertEquals( + exeptectedVedtaksperiode, + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.periode + ) val expectedEgenmeldinger = listOf(4.januar til 4.januar) - assertEquals(expectedEgenmeldinger, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().egenmeldingsperioder) + assertEquals( + expectedEgenmeldinger, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().egenmeldingsperioder + ) } @Test - fun `Skal ikke sende med skjønnsfastsatt sykpengegrunnlag som inntektForrigeSkjæringstidspunkt` () { + fun `Skal ikke sende med skjønnsfastsatt sykpengegrunnlag som inntektForrigeSkjæringstidspunkt`() { val inntektsmeldingId = UUID.randomUUID() nyttVedtak(januar, inntektsmeldingId = inntektsmeldingId) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(ORGNUMMER, INNTEKT *2))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(ORGNUMMER, INNTEKT * 2)) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -744,22 +1016,42 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) val expectedForespurteOpplysninger = listOf( - PersonObserver.Inntekt(PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, 31000.0)), - PersonObserver.Refusjon(forslag = listOf(Refusjonsforslag(1.januar, null, INNTEKT.månedlig))), + PersonObserver.Inntekt( + PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, + 31000.0 + ) + ), + PersonObserver.Refusjon( + forslag = listOf( + Refusjonsforslag( + 1.januar, + null, + INNTEKT.månedlig + ) + ) + ), - ) + ) val actualForespurteOpplysninger = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().forespurteOpplysninger assertEquals(expectedForespurteOpplysninger, actualForespurteOpplysninger) } @Test - fun `Skal sende med saksbehandlerinntekt som inntektForrigeSkjæringstidspunkt` () { + fun `Skal sende med saksbehandlerinntekt som inntektForrigeSkjæringstidspunkt`() { nyttVedtak(januar) val id = håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, arbeidsgiveropplysninger = listOf( - OverstyrtArbeidsgiveropplysning(ORGNUMMER, 32000.månedlig, "", null, listOf(Triple(1.januar, null, 32000.månedlig))) + OverstyrtArbeidsgiveropplysning( + ORGNUMMER, + 32000.månedlig, + "", + null, + listOf(Triple(1.januar, null, 32000.månedlig)) + ) ) ) håndterYtelser(1.vedtaksperiode) @@ -769,8 +1061,22 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) val expectedForespurteOpplysninger = listOf( - PersonObserver.Inntekt(PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.SAKSBEHANDLER, 32000.0)), - PersonObserver.Refusjon(forslag = listOf(Refusjonsforslag(1.januar, null, 32000.månedlig.månedlig))), + PersonObserver.Inntekt( + PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.SAKSBEHANDLER, + 32000.0 + ) + ), + PersonObserver.Refusjon( + forslag = listOf( + Refusjonsforslag( + 1.januar, + null, + 32000.månedlig.månedlig + ) + ) + ), ) val actualForespurteOpplysninger = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().forespurteOpplysninger @@ -804,18 +1110,27 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { Inntektsmelding.Refusjon.EndringIRefusjon(29000.månedlig, 20.januar), Inntektsmelding.Refusjon.EndringIRefusjon(28000.månedlig, 30.januar), Inntektsmelding.Refusjon.EndringIRefusjon(27000.månedlig, 20.februar) - )), + ) + ), ) håndterVilkårsgrunnlag(1.vedtaksperiode) nyPeriode(15.februar til 28.februar) val expectedForespurteOpplysninger = listOf( - PersonObserver.Inntekt(PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, 31000.0)), - PersonObserver.Refusjon(forslag = listOf( - Refusjonsforslag(30.januar, 19.februar, 28000.månedlig.månedlig), - Refusjonsforslag(20.februar, 1.april, 27000.månedlig.månedlig), - Refusjonsforslag(2.april, null, INGEN.månedlig) - )), + PersonObserver.Inntekt( + PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, + 31000.0 + ) + ), + PersonObserver.Refusjon( + forslag = listOf( + Refusjonsforslag(30.januar, 19.februar, 28000.månedlig.månedlig), + Refusjonsforslag(20.februar, 1.april, 27000.månedlig.månedlig), + Refusjonsforslag(2.april, null, INGEN.månedlig) + ) + ), ) val actualForespurteOpplysninger = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().forespurteOpplysninger @@ -827,16 +1142,28 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nyPeriode(januar) val id = håndterInntektsmelding( arbeidsgiverperioder = listOf(1.januar til 16.januar), - refusjon = Inntektsmelding.Refusjon(INNTEKT, 10.februar, endringerIRefusjon = emptyList()), + refusjon = Inntektsmelding.Refusjon( + INNTEKT, + 10.februar, + endringerIRefusjon = emptyList() + ), ) håndterVilkårsgrunnlag(1.vedtaksperiode) nyPeriode(15.februar til 28.februar) val expectedForespurteOpplysninger = listOf( - PersonObserver.Inntekt(PersonObserver.Inntektsdata(1.januar, PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, 31000.0)), - PersonObserver.Refusjon(forslag = listOf( - Refusjonsforslag(11.februar, null, INGEN.månedlig) - )) + PersonObserver.Inntekt( + PersonObserver.Inntektsdata( + 1.januar, + PersonObserver.Inntektsopplysningstype.INNTEKTSMELDING, + 31000.0 + ) + ), + PersonObserver.Refusjon( + forslag = listOf( + Refusjonsforslag(11.februar, null, INGEN.månedlig) + ) + ) ) val actualForespurteOpplysninger = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last().forespurteOpplysninger @@ -862,8 +1189,8 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nyPeriode(februar) nyPeriode(januar) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - assertEquals(1, observatør.trengerIkkeArbeidsgiveropplysningerVedtaksperioder.size) + assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) + assertEquals(1, observatør.trengerIkkeArbeidsgiveropplysningerVedtaksperioder.size) } @Test @@ -872,8 +1199,16 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nyPeriode(1.januar til 30.januar) assertEquals(3, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }) - assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) + }) + assertEquals( + 1, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) + }) assertEquals(0, observatør.trengerIkkeArbeidsgiveropplysningerVedtaksperioder.size) } @@ -886,8 +1221,16 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) - assertEquals(2, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }) - assertEquals(0, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) }) + assertEquals( + 2, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) + }) + assertEquals( + 0, + observatør.trengerArbeidsgiveropplysningerVedtaksperioder.count { + it.vedtaksperiodeId == 2.vedtaksperiode.id(a1) + }) } @Test @@ -895,7 +1238,10 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nyPeriode(1.januar til 2.januar) nyPeriode(3.januar til 6.januar) - håndterInntektsmelding(emptyList(), begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening") + håndterInntektsmelding( + emptyList(), + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening" + ) assertEquals(0, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) assertEquals(0, observatør.trengerIkkeArbeidsgiveropplysningerVedtaksperioder.size) } @@ -921,25 +1267,31 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { @Test fun `Kort periode som blir lang pga korrigerende søknad med egenmeldingsdager skal sende ut forespørsel`() { nyPeriode(2.januar til 17.januar) - håndterSøknad(Sykdom(2.januar, 17.januar, 100.prosent), egenmeldinger = listOf(1.januar til 1.januar)) + håndterSøknad( + Sykdom(2.januar, 17.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 1.januar) + ) - assertEquals(2.januar til 17.januar, inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.periode) + assertEquals( + 2.januar til 17.januar, + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.periode + ) assertTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) val expectedForespørsel = PersonObserver.TrengerArbeidsgiveropplysningerEvent( - organisasjonsnummer = ORGNUMMER, - vedtaksperiodeId = 1.vedtaksperiode.id(ORGNUMMER), - skjæringstidspunkt = 2.januar, - sykmeldingsperioder = listOf(2.januar til 17.januar), - egenmeldingsperioder = listOf(1.januar til 1.januar), - førsteFraværsdager = listOf(PersonObserver.FørsteFraværsdag(a1, 2.januar)), - forespurteOpplysninger = listOf( - PersonObserver.Inntekt(null), - PersonObserver.Refusjon(forslag = emptyList()), - PersonObserver.Arbeidsgiverperiode - ) + organisasjonsnummer = ORGNUMMER, + vedtaksperiodeId = 1.vedtaksperiode.id(ORGNUMMER), + skjæringstidspunkt = 2.januar, + sykmeldingsperioder = listOf(2.januar til 17.januar), + egenmeldingsperioder = listOf(1.januar til 1.januar), + førsteFraværsdager = listOf(PersonObserver.FørsteFraværsdag(a1, 2.januar)), + forespurteOpplysninger = listOf( + PersonObserver.Inntekt(null), + PersonObserver.Refusjon(forslag = emptyList()), + PersonObserver.Arbeidsgiverperiode ) + ) assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) val actualForespørsel = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() @@ -973,7 +1325,10 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { Sykdom(20.januar, 31.januar, 100.prosent), egenmeldinger = listOf(19.januar til 19.januar) ) - assertEquals(20.januar til 31.januar, inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.periode) + assertEquals( + 20.januar til 31.januar, + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.periode + ) håndterInntektsmeldingPortal(emptyList(), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) håndterVilkårsgrunnlag(2.vedtaksperiode) @@ -983,7 +1338,10 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertForventetFeil( forklaring = "Trenger ikke sende med egenmeldingsperioder når vi ikke ber om AGP, burde være sikker på at egenmeldinger ikke kommer fra søknad på perioden uten ny AGP", nå = { - assertEquals(listOf(19.januar til 19.januar), actualForespørsel.egenmeldingsperioder) + assertEquals( + listOf(19.januar til 19.januar), + actualForespørsel.egenmeldingsperioder + ) }, ønsket = { assertEquals(emptyList(), actualForespørsel.egenmeldingsperioder) @@ -995,25 +1353,52 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { fun `Skal ikke be om arbeidsgiverperiode når det er kort gap pga av arbeid gjenopptatt i slutten av perioden før en forlengelse`() { nyPeriode(januar, orgnummer = a1) håndterSykmelding(Sykmeldingsperiode(3.januar, 20.januar), orgnummer = a2) - håndterSøknad(Sykdom(3.januar, 20.januar, 100.prosent), Søknad.Søknadsperiode.Arbeid(13.januar, 20.januar), orgnummer = a2) + håndterSøknad( + Sykdom(3.januar, 20.januar, 100.prosent), + Søknad.Søknadsperiode.Arbeid(13.januar, 20.januar), + orgnummer = a2 + ) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) val im = håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a2) håndterVilkårsgrunnlag( 1.vedtaksperiode, orgnummer = a1, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) nyPeriode(21.januar til 31.januar, orgnummer = a2) - val expectedForespurteOpplysninger = listOf( + val expectedForespurteOpplysninger = listOf( PersonObserver.FastsattInntekt(INNTEKT), - PersonObserver.Refusjon(forslag = listOf(Refusjonsforslag(1.januar, null, INNTEKT.månedlig))) + PersonObserver.Refusjon( + forslag = listOf( + Refusjonsforslag( + 1.januar, + null, + INNTEKT.månedlig + ) + ) + ) ) val actualForespørsel = observatør.trengerArbeidsgiveropplysningerVedtaksperioder.last() assertEquals(expectedForespurteOpplysninger, actualForespørsel.forespurteOpplysninger) @@ -1025,7 +1410,7 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.januar til 16.januar)) nyPeriode(18.januar til 31.januar) - val expectedForespurteOpplysninger = listOf( + val expectedForespurteOpplysninger = listOf( PersonObserver.Inntekt(null), PersonObserver.Refusjon(forslag = emptyList()) ) @@ -1036,7 +1421,10 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { @Test fun `egenmeldinger som hadde strukket perioden utover AGP skal føre til forespørsel om arbeidsgiveropplysninger`() { nyPeriode(2.januar til 16.januar) - håndterSøknad(Sykdom(25.januar, 25.januar, 100.prosent), egenmeldinger = listOf(24.januar til 24.januar)) + håndterSøknad( + Sykdom(25.januar, 25.januar, 100.prosent), + egenmeldinger = listOf(24.januar til 24.januar) + ) assertTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertEquals(1, observatør.trengerArbeidsgiveropplysningerVedtaksperioder.size) @@ -1113,4 +1501,4 @@ internal class TrengerArbeidsgiveropplysningerTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a2) håndterUtbetalt(orgnummer = a2) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingForkastetEventTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingForkastetEventTest.kt index e693b8e247..5d3c6291e4 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingForkastetEventTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingForkastetEventTest.kt @@ -38,11 +38,16 @@ internal class BehandlingForkastetEventTest : AbstractDslTest() { assertEquals(forventetBehandlingEvent, behandlingForkastetEvent) } } + @Test fun `uberegnet behandling forkastes manuelt`() { a1 { tilGodkjenning(januar) - håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjent = false, automatiskBehandling = false) + håndterUtbetalingsgodkjenning( + 1.vedtaksperiode, + godkjent = false, + automatiskBehandling = false + ) val behandlingForkastetEvent = observatør.behandlingForkastetEventer.single() val sisteBehandling = inspektørForkastet(1.vedtaksperiode).behandlinger.single() val forventetBehandlingId = sisteBehandling.id @@ -62,7 +67,17 @@ internal class BehandlingForkastetEventTest : AbstractDslTest() { fun `behandling uten vedtak forkastes`() { a1 { håndterSøknad(Sykdom(1.januar, 10.januar, 100.prosent)) - håndterUtbetalingshistorikkEtterInfotrygdendring(listOf(ArbeidsgiverUtbetalingsperiode(a1, 1.januar, 10.januar, 100.prosent, 500.daglig))) + håndterUtbetalingshistorikkEtterInfotrygdendring( + listOf( + ArbeidsgiverUtbetalingsperiode( + a1, + 1.januar, + 10.januar, + 100.prosent, + 500.daglig + ) + ) + ) val behandlingForkastetEvent = observatør.behandlingForkastetEventer.single() val sisteBehandling = inspektørForkastet(1.vedtaksperiode).behandlinger.last() val forventetBehandlingId = sisteBehandling.id @@ -82,7 +97,9 @@ internal class BehandlingForkastetEventTest : AbstractDslTest() { fun `annullering oppretter ny behandling som forkastes`() { a1 { nyttVedtak(januar) - håndterAnnullering(inspektør.utbetalinger(1.vedtaksperiode).single().inspektør.utbetalingId) + håndterAnnullering( + inspektør.utbetalinger(1.vedtaksperiode).single().inspektør.utbetalingId + ) val behandlingForkastetEvent = observatør.behandlingForkastetEventer.single() val sisteBehandling = inspektørForkastet(1.vedtaksperiode).behandlinger.last() val forventetBehandlingId = sisteBehandling.id @@ -99,7 +116,10 @@ internal class BehandlingForkastetEventTest : AbstractDslTest() { assertEquals(2, behandlingOpprettetEventer.size) val sisteBehandlingOpprettet = behandlingOpprettetEventer.last() assertEquals(sisteBehandling.id, sisteBehandlingOpprettet.behandlingId) - assertEquals(PersonObserver.BehandlingOpprettetEvent.Type.Revurdering, sisteBehandlingOpprettet.type) + assertEquals( + PersonObserver.BehandlingOpprettetEvent.Type.Revurdering, + sisteBehandlingOpprettet.type + ) } } @@ -110,7 +130,9 @@ internal class BehandlingForkastetEventTest : AbstractDslTest() { håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(31.januar, Dagtype.Feriedag))) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterAnnullering(inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingId) + håndterAnnullering( + inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingId + ) val behandlingForkastetEvent = observatør.behandlingForkastetEventer.single() val sisteBehandling = inspektørForkastet(1.vedtaksperiode).behandlinger.last() val forventetBehandlingId = sisteBehandling.id @@ -127,7 +149,10 @@ internal class BehandlingForkastetEventTest : AbstractDslTest() { assertEquals(2, behandlingOpprettetEventer.size) val sisteBehandlingOpprettet = behandlingOpprettetEventer.last() assertEquals(sisteBehandling.id, sisteBehandlingOpprettet.behandlingId) - assertEquals(PersonObserver.BehandlingOpprettetEvent.Type.Revurdering, sisteBehandlingOpprettet.type) + assertEquals( + PersonObserver.BehandlingOpprettetEvent.Type.Revurdering, + sisteBehandlingOpprettet.type + ) } } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingLukketEventTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingLukketEventTest.kt index 3a9966ad7f..a59d45f8d5 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingLukketEventTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingLukketEventTest.kt @@ -71,7 +71,10 @@ internal class BehandlingLukketEventTest : AbstractDslTest() { @Test fun `behandling lukkes når vedtak uten utbetaling fattes`() { a1 { - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.mai) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.mai + ) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -112,7 +115,14 @@ internal class BehandlingLukketEventTest : AbstractDslTest() { fun `behandling lukkes når revurdering fattes`() { a1 { nyttVedtak(1.januar til (onsdag den 31.januar)) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(onsdag den 31.januar, Dagtype.Feriedag))) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag( + onsdag den 31.januar, + Dagtype.Feriedag + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjent = true) @@ -135,7 +145,14 @@ internal class BehandlingLukketEventTest : AbstractDslTest() { fun `behandling lukkes når revurdering avvises`() { a1 { nyttVedtak(1.januar til (onsdag den 31.januar)) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(onsdag den 31.januar, Dagtype.Feriedag))) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag( + onsdag den 31.januar, + Dagtype.Feriedag + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjent = false) @@ -158,7 +175,14 @@ internal class BehandlingLukketEventTest : AbstractDslTest() { fun `behandling lukkes når revurdering uten utbetaling fattes`() { a1 { nyttVedtak(1.januar til (søndag den 28.januar)) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(søndag den 28.januar, Dagtype.Feriedag))) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag( + søndag den 28.januar, + Dagtype.Feriedag + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjent = true) @@ -180,7 +204,12 @@ internal class BehandlingLukketEventTest : AbstractDslTest() { fun `behandling lukkes når revurdering gjør om til auu - med tidligere utbetaling`() { a1 { nyttVedtak(januar) - håndterOverstyrTidslinje((17.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((17.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjent = true) @@ -203,13 +232,21 @@ internal class BehandlingLukketEventTest : AbstractDslTest() { @Test fun `behandling lukkes når vedtak uten utbetaling fattes - uten tidligere utbetaling`() { a1 { - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.mai) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.mai + ) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjent = true) - håndterOverstyrTidslinje((17.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) }) + håndterOverstyrTidslinje((17.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + }) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjent = true) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingOpprettetEventTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingOpprettetEventTest.kt index d7c5eca1fd..c8078db986 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingOpprettetEventTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingOpprettetEventTest.kt @@ -26,7 +26,12 @@ internal class BehandlingOpprettetEventTest : AbstractDslTest() { val søknadId = UUID.randomUUID() val registrert = LocalDateTime.now() val innsendt = registrert.minusHours(2) - håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), søknadId = søknadId, sendtTilNAVEllerArbeidsgiver = innsendt, registrert = registrert) + håndterSøknad( + Sykdom(1.januar, 20.januar, 100.prosent), + søknadId = søknadId, + sendtTilNAVEllerArbeidsgiver = innsendt, + registrert = registrert + ) val behandlingOpprettetEvent = observatør.behandlingOpprettetEventer.last() inspektør(1.vedtaksperiode).behandlinger.also { behandlinger -> val behandlingId = behandlinger.single().id @@ -68,7 +73,10 @@ internal class BehandlingOpprettetEventTest : AbstractDslTest() { fun omgjøring() { a1 { håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent)) - håndterInntektsmelding(listOf(25.desember(2017) til 10.januar), beregnetInntekt = INNTEKT) + håndterInntektsmelding( + listOf(25.desember(2017) til 10.januar), + beregnetInntekt = INNTEKT + ) val behandlingOpprettetEventer = observatør.behandlingOpprettetEventer assertEquals(2, behandlingOpprettetEventer.size) val førsteEvent = behandlingOpprettetEventer.first() @@ -86,10 +94,22 @@ internal class BehandlingOpprettetEventTest : AbstractDslTest() { håndterAnnullering(inspektør.utbetaling(0).utbetalingId) val behandlingOpprettetEventer = observatør.behandlingOpprettetEventer assertEquals(4, behandlingOpprettetEventer.size) - assertEquals(PersonObserver.BehandlingOpprettetEvent.Type.Søknad, behandlingOpprettetEventer[0].type) - assertEquals(PersonObserver.BehandlingOpprettetEvent.Type.Søknad, behandlingOpprettetEventer[1].type) - assertEquals(PersonObserver.BehandlingOpprettetEvent.Type.Revurdering, behandlingOpprettetEventer[2].type) - assertEquals(PersonObserver.BehandlingOpprettetEvent.Type.Revurdering, behandlingOpprettetEventer[3].type) + assertEquals( + PersonObserver.BehandlingOpprettetEvent.Type.Søknad, + behandlingOpprettetEventer[0].type + ) + assertEquals( + PersonObserver.BehandlingOpprettetEvent.Type.Søknad, + behandlingOpprettetEventer[1].type + ) + assertEquals( + PersonObserver.BehandlingOpprettetEvent.Type.Revurdering, + behandlingOpprettetEventer[2].type + ) + assertEquals( + PersonObserver.BehandlingOpprettetEvent.Type.Revurdering, + behandlingOpprettetEventer[3].type + ) val vedtaksperiodeForkastetEventer = observatør.behandlingForkastetEventer assertEquals(2, vedtaksperiodeForkastetEventer.size) @@ -103,7 +123,10 @@ internal class BehandlingOpprettetEventTest : AbstractDslTest() { a1 { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), utenlandskSykmelding = true) val behandlingOpprettet = observatør.behandlingOpprettetEventer.single() - assertEquals(PersonObserver.BehandlingOpprettetEvent.Type.Søknad, behandlingOpprettet.type) + assertEquals( + PersonObserver.BehandlingOpprettetEvent.Type.Søknad, + behandlingOpprettet.type + ) } } @@ -111,11 +134,27 @@ internal class BehandlingOpprettetEventTest : AbstractDslTest() { fun `anmoder en periode om forkasting`() { a1 { håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent)) - håndterUtbetalingshistorikkEtterInfotrygdendring(listOf(ArbeidsgiverUtbetalingsperiode(a1, 1.januar, 10.januar, 100.prosent, 500.daglig))) + håndterUtbetalingshistorikkEtterInfotrygdendring( + listOf( + ArbeidsgiverUtbetalingsperiode( + a1, + 1.januar, + 10.januar, + 100.prosent, + 500.daglig + ) + ) + ) val behandlingOpprettet = observatør.behandlingOpprettetEventer assertEquals(2, behandlingOpprettet.size) - assertEquals(PersonObserver.BehandlingOpprettetEvent.Type.Søknad, behandlingOpprettet[0].type) - assertEquals(PersonObserver.BehandlingOpprettetEvent.Type.Omgjøring, behandlingOpprettet[1].type) + assertEquals( + PersonObserver.BehandlingOpprettetEvent.Type.Søknad, + behandlingOpprettet[0].type + ) + assertEquals( + PersonObserver.BehandlingOpprettetEvent.Type.Omgjøring, + behandlingOpprettet[1].type + ) val behandlingForkastetEvent = observatør.behandlingForkastetEventer.single() assertEquals(1.vedtaksperiode, behandlingForkastetEvent.vedtaksperiodeId) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingerE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingerE2ETest.kt index c497db25de..b43ad57c3a 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingerE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/behandlinger/BehandlingerE2ETest.kt @@ -63,8 +63,16 @@ internal class BehandlingerE2ETest : AbstractDslTest() { @Test fun `en inntektsmelding med merkelig første fraværsdag starter en revurdering uten endring - men ny håndtering av refusjon vil håndtere hen`() { - nyttVedtak(januar, arbeidsgiverperiode = listOf(1.januar til 10.januar, 16.januar til 21.januar)) - val korrigertIm = håndterInntektsmelding(arbeidsgiverperioder = listOf(), førsteFraværsdag = 10.januar, beregnetInntekt = INNTEKT, refusjon = Inntektsmelding.Refusjon(INGEN, null)) + nyttVedtak( + januar, + arbeidsgiverperiode = listOf(1.januar til 10.januar, 16.januar til 21.januar) + ) + val korrigertIm = håndterInntektsmelding( + arbeidsgiverperioder = listOf(), + førsteFraværsdag = 10.januar, + beregnetInntekt = INNTEKT, + refusjon = Inntektsmelding.Refusjon(INGEN, null) + ) // Per i dag blir det en revurdering uten endring og varsel om flere IM'er håndterYtelser(1.vedtaksperiode) @@ -73,17 +81,23 @@ internal class BehandlingerE2ETest : AbstractDslTest() { assertTrue(observatør.utkastTilVedtakEventer.last().tags.contains("IngenUtbetaling")) assertTrue(observatør.inntektsmeldingIkkeHåndtert.contains(korrigertIm)) // Det blir nok fortsatt Gosys-oppgave da, ettersom inntekten ikke brukes som er definisjonen av "inntektsmelding håndtert" (hva enn det betyr) - val dagensRefusjonsopplysninger = inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single().refusjonsopplysninger - val dagensRefusjonsopplysningerPeriode = dagensRefusjonsopplysninger.inspektør.refusjonsopplysninger.first().periode.start til dagensRefusjonsopplysninger.inspektør.refusjonsopplysninger.last().periode.endInclusive + val dagensRefusjonsopplysninger = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single().refusjonsopplysninger + val dagensRefusjonsopplysningerPeriode = + dagensRefusjonsopplysninger.inspektør.refusjonsopplysninger.first().periode.start til dagensRefusjonsopplysninger.inspektør.refusjonsopplysninger.last().periode.endInclusive assertEquals(16.januar til LocalDate.MAX, dagensRefusjonsopplysningerPeriode) assertTrue(dagensRefusjonsopplysninger.inspektør.refusjonsopplysninger.all { it.beløp == INNTEKT }) // Med nye refusjonsopplysnigner vil det tolkes som 0,- i refusjon - val nyeRefusjonsopplysninger = inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + val nyeRefusjonsopplysninger = + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje val nyeRefusjonsopplysningerPeriode = nyeRefusjonsopplysninger.perioderMedBeløp.single() assertEquals(1.januar til 31.januar, nyeRefusjonsopplysningerPeriode) - assertTrue(nyeRefusjonsopplysninger.subset(1.januar til 9.januar).all { it.beløp == INNTEKT }) - assertTrue(nyeRefusjonsopplysninger.subset(10.januar til 31.januar).all { it.beløp == INGEN && it.kilde.meldingsreferanseId == korrigertIm }) + assertTrue( + nyeRefusjonsopplysninger.subset(1.januar til 9.januar).all { it.beløp == INNTEKT }) + assertTrue( + nyeRefusjonsopplysninger.subset(10.januar til 31.januar) + .all { it.beløp == INGEN && it.kilde.meldingsreferanseId == korrigertIm }) } @Test @@ -91,8 +105,14 @@ internal class BehandlingerE2ETest : AbstractDslTest() { a1 { håndterSøknad(Sykdom(1.mars, 16.mars, 100.prosent)) nullstillTilstandsendringer() - val inntektsmeldingId = håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.mars) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + val inntektsmeldingId = + håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.mars) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.let { assertEquals(2, it.size) assertEquals(AVSLUTTET_UTEN_VEDTAK, it[0].tilstand) @@ -108,11 +128,23 @@ internal class BehandlingerE2ETest : AbstractDslTest() { val søknadId = UUID.randomUUID() val registrert = LocalDateTime.now() val innsendt = registrert.minusHours(2) - håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), søknadId = søknadId, sendtTilNAVEllerArbeidsgiver = innsendt, registrert = registrert) + håndterSøknad( + Sykdom(1.januar, 20.januar, 100.prosent), + søknadId = søknadId, + sendtTilNAVEllerArbeidsgiver = innsendt, + registrert = registrert + ) inspektør(1.vedtaksperiode).behandlinger.also { behandlinger -> assertEquals(1, behandlinger.size) assertEquals(2, behandlinger.single().endringer.size) - assertEquals(Behandlingkilde(meldingsreferanseId = søknadId, innsendt = innsendt, registert = registrert, avsender = Avsender.SYKMELDT), behandlinger.single().kilde) + assertEquals( + Behandlingkilde( + meldingsreferanseId = søknadId, + innsendt = innsendt, + registert = registrert, + avsender = Avsender.SYKMELDT + ), behandlinger.single().kilde + ) } } } @@ -129,7 +161,14 @@ internal class BehandlingerE2ETest : AbstractDslTest() { ) inspektør(1.vedtaksperiode).behandlinger.also { behandlinger -> assertEquals(2, behandlinger.size) - assertEquals(Behandlingkilde(meldingsreferanseId = inntektsmeldingId, innsendt = mottatt, registert = mottatt, avsender = Avsender.ARBEIDSGIVER), behandlinger.last().kilde) + assertEquals( + Behandlingkilde( + meldingsreferanseId = inntektsmeldingId, + innsendt = mottatt, + registert = mottatt, + avsender = Avsender.ARBEIDSGIVER + ), behandlinger.last().kilde + ) } } } @@ -151,7 +190,12 @@ internal class BehandlingerE2ETest : AbstractDslTest() { val korrigerendeImA1 = UUID.randomUUID() val mottatt = LocalDateTime.now() - val forventetKilde = Behandlingkilde(meldingsreferanseId = korrigerendeImA1, innsendt = mottatt, registert = mottatt, avsender = Avsender.ARBEIDSGIVER) + val forventetKilde = Behandlingkilde( + meldingsreferanseId = korrigerendeImA1, + innsendt = mottatt, + registert = mottatt, + avsender = Avsender.ARBEIDSGIVER + ) a1 { håndterInntektsmelding( @@ -193,6 +237,7 @@ internal class BehandlingerE2ETest : AbstractDslTest() { } } } + @Test fun `annullere iverksatt vedtak`() { a1 { @@ -217,6 +262,7 @@ internal class BehandlingerE2ETest : AbstractDslTest() { } } } + @Test fun `annullere flere iverksatte vedtak`() { a1 { @@ -315,7 +361,11 @@ internal class BehandlingerE2ETest : AbstractDslTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjent = false) - håndterPåminnelse(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING, reberegning = true) + håndterPåminnelse( + 1.vedtaksperiode, + AVVENTER_GODKJENNING_REVURDERING, + reberegning = true + ) assertEquals(Utbetalingstatus.IKKE_GODKJENT, inspektør.utbetaling(1).tilstand) inspektør(1.vedtaksperiode).behandlinger.also { behandlinger -> assertEquals(3, behandlinger.size) @@ -344,7 +394,11 @@ internal class BehandlingerE2ETest : AbstractDslTest() { a1 { håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent)) val id = UUID.randomUUID() - håndterUtbetalingshistorikkEtterInfotrygdendring(utbetalinger = listOf(ArbeidsgiverUtbetalingsperiode(a1, 1.januar, 5.januar, 100.prosent, INNTEKT)), id = id) + håndterUtbetalingshistorikkEtterInfotrygdendring( + utbetalinger = listOf( + ArbeidsgiverUtbetalingsperiode(a1, 1.januar, 5.januar, 100.prosent, INNTEKT) + ), id = id + ) inspektørForkastet(1.vedtaksperiode).behandlinger.also { behandlinger -> assertEquals(2, behandlinger.size) assertEquals(Avsender.SYKMELDT, behandlinger.first().kilde.avsender) @@ -359,11 +413,17 @@ internal class BehandlingerE2ETest : AbstractDslTest() { @Test fun `ny periode som starter med egenmeldinger påvirker ikke sykmeldingsperiode`() { a1 { - håndterSøknad(Sykdom(3.januar, 17.januar, 100.prosent), egenmeldinger = listOf(1.januar til 2.januar)) + håndterSøknad( + Sykdom(3.januar, 17.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 2.januar) + ) inspektør(1.vedtaksperiode).behandlinger.also { behandlinger -> assertEquals(1, behandlinger.size) assertEquals(3, behandlinger.single().endringer.size) - assertEquals(3.januar til 17.januar, behandlinger.first().endringer.first().sykmeldingsperiode) + assertEquals( + 3.januar til 17.januar, + behandlinger.first().endringer.first().sykmeldingsperiode + ) assertEquals(3.januar, behandlinger.last().endringer.last().skjæringstidspunkt) } } @@ -374,11 +434,18 @@ internal class BehandlingerE2ETest : AbstractDslTest() { a1 { håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent)) val søknad2 = UUID.randomUUID() - håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), Ferie(19.januar, 20.januar), søknadId = søknad2) + håndterSøknad( + Sykdom(1.januar, 20.januar, 100.prosent), + Ferie(19.januar, 20.januar), + søknadId = søknad2 + ) inspektør(1.vedtaksperiode).behandlinger.also { behandlinger -> assertEquals(1, behandlinger.size) assertEquals(3, behandlinger.single().endringer.size) - assertEquals(Dokumentsporing.søknad(søknad2), behandlinger.single().endringer.last().dokumentsporing) + assertEquals( + Dokumentsporing.søknad(søknad2), + behandlinger.single().endringer.last().dokumentsporing + ) } } } @@ -411,26 +478,54 @@ internal class BehandlingerE2ETest : AbstractDslTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) val vedtakFattetTidspunkt = LocalDateTime.now() - håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjenttidspunkt = vedtakFattetTidspunkt) + håndterUtbetalingsgodkjenning( + 1.vedtaksperiode, + godkjenttidspunkt = vedtakFattetTidspunkt + ) val søknad2 = UUID.randomUUID() - håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), Ferie(19.januar, 20.januar), søknadId = søknad2) + håndterSøknad( + Sykdom(1.januar, 20.januar, 100.prosent), + Ferie(19.januar, 20.januar), + søknadId = søknad2 + ) inspektør(1.vedtaksperiode).behandlinger.also { behandlinger -> assertEquals(2, behandlinger.size) behandlinger[0].also { behandling -> assertEquals(6, behandling.endringer.size) - assertEquals(Dokumentsporing.søknad(søknad1), behandling.endringer[0].dokumentsporing) - assertEquals(Dokumentsporing.søknad(søknad1), behandling.endringer[1].dokumentsporing) - assertEquals(Dokumentsporing.inntektsmeldingDager(im), behandling.endringer[2].dokumentsporing) - assertEquals(Dokumentsporing.inntektsmeldingRefusjon(im), behandling.endringer[3].dokumentsporing) - assertEquals(Dokumentsporing.inntektsmeldingInntekt(im), behandling.endringer[4].dokumentsporing) - assertEquals(Dokumentsporing.inntektsmeldingInntekt(im), behandling.endringer[5].dokumentsporing) + assertEquals( + Dokumentsporing.søknad(søknad1), + behandling.endringer[0].dokumentsporing + ) + assertEquals( + Dokumentsporing.søknad(søknad1), + behandling.endringer[1].dokumentsporing + ) + assertEquals( + Dokumentsporing.inntektsmeldingDager(im), + behandling.endringer[2].dokumentsporing + ) + assertEquals( + Dokumentsporing.inntektsmeldingRefusjon(im), + behandling.endringer[3].dokumentsporing + ) + assertEquals( + Dokumentsporing.inntektsmeldingInntekt(im), + behandling.endringer[4].dokumentsporing + ) + assertEquals( + Dokumentsporing.inntektsmeldingInntekt(im), + behandling.endringer[5].dokumentsporing + ) assertEquals(VEDTAK_FATTET, behandling.tilstand) assertEquals(vedtakFattetTidspunkt, behandling.vedtakFattet) assertNull(behandling.avsluttet) } behandlinger[1].also { behandling -> assertEquals(1, behandling.endringer.size) - assertEquals(Dokumentsporing.søknad(søknad2), behandling.endringer.last().dokumentsporing) + assertEquals( + Dokumentsporing.søknad(søknad2), + behandling.endringer.last().dokumentsporing + ) assertEquals(UBEREGNET_REVURDERING, behandling.tilstand) } } @@ -502,7 +597,8 @@ internal class BehandlingerE2ETest : AbstractDslTest() { a1 { nyttVedtak(januar) forlengVedtak(februar) - val inntektsmeldingId = håndterInntektsmelding(listOf(1.februar til 16.februar), førsteFraværsdag = 1.mars) + val inntektsmeldingId = + håndterInntektsmelding(listOf(1.februar til 16.februar), førsteFraværsdag = 1.mars) assertTrue(inntektsmeldingId in observatør.inntektsmeldingIkkeHåndtert) assertFalse(inntektsmeldingId in observatør.inntektsmeldingHåndtert.map { it.first }) inspektør(1.vedtaksperiode).behandlinger.also { behandlinger -> @@ -513,7 +609,10 @@ internal class BehandlingerE2ETest : AbstractDslTest() { assertEquals(2, behandlinger.size) val sisteBehandling = behandlinger.last() assertEquals(inntektsmeldingId, sisteBehandling.kilde.meldingsreferanseId) - assertEquals(Dokumentsporing.inntektsmeldingDager(inntektsmeldingId), sisteBehandling.endringer.single().dokumentsporing) + assertEquals( + Dokumentsporing.inntektsmeldingDager(inntektsmeldingId), + sisteBehandling.endringer.single().dokumentsporing + ) assertEquals(UBEREGNET_REVURDERING, sisteBehandling.tilstand) } assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) @@ -528,16 +627,24 @@ internal class BehandlingerE2ETest : AbstractDslTest() { val søknad2 = UUID.randomUUID() håndterSøknad(Sykdom(3.januar, 26.januar, 100.prosent), søknadId = søknad1) håndterSøknad(Sykdom(3.januar, 27.januar, 100.prosent), søknadId = søknad2) - inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().also { behandling -> - assertEquals(søknad1, behandling.kilde.meldingsreferanseId) - assertEquals(2, behandling.endringer.size) - assertEquals(Dokumentsporing.søknad(søknad1), behandling.endringer.last().dokumentsporing) - assertEquals(3.januar, behandling.endringer.last().skjæringstidspunkt) - } - inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.single().also { behandling -> - assertEquals(søknad2, behandling.kilde.meldingsreferanseId) - assertEquals(Dokumentsporing.søknad(søknad2), behandling.endringer.single().dokumentsporing) - } + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single() + .also { behandling -> + assertEquals(søknad1, behandling.kilde.meldingsreferanseId) + assertEquals(2, behandling.endringer.size) + assertEquals( + Dokumentsporing.søknad(søknad1), + behandling.endringer.last().dokumentsporing + ) + assertEquals(3.januar, behandling.endringer.last().skjæringstidspunkt) + } + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.single() + .also { behandling -> + assertEquals(søknad2, behandling.kilde.meldingsreferanseId) + assertEquals( + Dokumentsporing.søknad(søknad2), + behandling.endringer.single().dokumentsporing + ) + } } } @@ -551,11 +658,18 @@ internal class BehandlingerE2ETest : AbstractDslTest() { assertEquals(8.august til 21.august, inspektør.periode(1.vedtaksperiode)) assertEquals(10.august til 31.august, inspektør.periode(2.vedtaksperiode)) assertTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) - inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().also { behandling -> - assertEquals(overlappende, behandling.kilde.meldingsreferanseId) - assertEquals(Dokumentsporing.søknad(overlappende), behandling.endringer.single().dokumentsporing) - } - assertFunksjonellFeil(Varselkode.`Mottatt søknad som delvis overlapper`, 1.vedtaksperiode.filter()) + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last() + .also { behandling -> + assertEquals(overlappende, behandling.kilde.meldingsreferanseId) + assertEquals( + Dokumentsporing.søknad(overlappende), + behandling.endringer.single().dokumentsporing + ) + } + assertFunksjonellFeil( + Varselkode.`Mottatt søknad som delvis overlapper`, + 1.vedtaksperiode.filter() + ) assertForkastetPeriodeTilstander(2.vedtaksperiode, START, TIL_INFOTRYGD) } } @@ -569,13 +683,26 @@ internal class BehandlingerE2ETest : AbstractDslTest() { håndterSøknad(Sykdom(2.januar, 17.januar, 100.prosent)) } a2 { - håndterInntektsmelding(emptyList(), førsteFraværsdag = 2.januar, begrunnelseForReduksjonEllerIkkeUtbetalt = "IkkeOpptjening") + håndterInntektsmelding( + emptyList(), + førsteFraværsdag = 2.januar, + begrunnelseForReduksjonEllerIkkeUtbetalt = "IkkeOpptjening" + ) } a1 { håndterInntektsmelding(listOf(1.januar til 16.januar)) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), - arbeidsforhold = listOf(Arbeidsforhold(a1, LocalDate.EPOCH, type = ORDINÆRT), Arbeidsforhold(a2, LocalDate.EPOCH, type = ORDINÆRT)) + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), + arbeidsforhold = listOf( + Arbeidsforhold(a1, LocalDate.EPOCH, type = ORDINÆRT), + Arbeidsforhold(a2, LocalDate.EPOCH, type = ORDINÆRT) + ) ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -611,7 +738,10 @@ internal class BehandlingerE2ETest : AbstractDslTest() { nyPeriode(1.januar til 5.januar) nyPeriode(6.januar til 8.januar) nyPeriode(9.januar til 15.januar) - nyttVedtak(16.januar til 25.januar, arbeidsgiverperiode = listOf(1.januar til 16.januar)) + nyttVedtak( + 16.januar til 25.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar) + ) håndterSøknad(Sykdom(6.januar, 8.januar, 100.prosent, 10.prosent)) inspektør(1.vedtaksperiode).behandlinger.also { behandlinger -> @@ -643,13 +773,26 @@ internal class BehandlingerE2ETest : AbstractDslTest() { fun `korrigert søknad på kort periode som har hatt beregnet utbetaling`() { a1 { håndterSøknad(Sykdom(1.januar, 15.januar, 100.prosent), Permisjon(1.januar, 15.januar)) - håndterInntektsmelding(emptyList(), førsteFraværsdag = 1.januar, begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening") + håndterInntektsmelding( + emptyList(), + førsteFraværsdag = 1.januar, + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening" + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterOverstyrTidslinje((1.januar til 15.januar).map { ManuellOverskrivingDag(it, Dagtype.Permisjonsdag) }) + håndterOverstyrTidslinje((1.januar til 15.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Permisjonsdag + ) + }) - håndterSøknad(Sykdom(1.januar, 15.januar, 100.prosent), Permisjon(1.januar, 10.januar), Permisjon(14.januar, 15.januar)) + håndterSøknad( + Sykdom(1.januar, 15.januar, 100.prosent), + Permisjon(1.januar, 10.januar), + Permisjon(14.januar, 15.januar) + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) inspektør(1.vedtaksperiode).behandlinger.also { behandlinger -> @@ -710,9 +853,11 @@ internal class BehandlingerE2ETest : AbstractDslTest() { tilGodkjenning(januar) håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjent = false) - håndterUtbetalingshistorikkEtterInfotrygdendring(listOf( - ArbeidsgiverUtbetalingsperiode(a1, 17.januar, 31.januar, 100.prosent, INNTEKT) - )) + håndterUtbetalingshistorikkEtterInfotrygdendring( + listOf( + ArbeidsgiverUtbetalingsperiode(a1, 17.januar, 31.januar, 100.prosent, INNTEKT) + ) + ) nyttVedtak(mars) forlengVedtak(april) @@ -808,12 +953,17 @@ internal class BehandlingerE2ETest : AbstractDslTest() { a1 { nyttVedtak(1.januar til 25.januar) forlengVedtak(26.januar til 10.februar) - nyttVedtak(14.februar til 20.februar, arbeidsgiverperiode = listOf(1.januar til 16.januar)) // samme agp, men nytt skjæringstidspunkt + nyttVedtak( + 14.februar til 20.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar) + ) // samme agp, men nytt skjæringstidspunkt nyttVedtak(15.mars til 10.april) nyttVedtak(august) - håndterAnnullering(inspektør.utbetalinger(3.vedtaksperiode).single().inspektør.utbetalingId) + håndterAnnullering( + inspektør.utbetalinger(3.vedtaksperiode).single().inspektør.utbetalingId + ) assertVarsel(RV_RV_7, 4.vedtaksperiode.filter()) assertVarsel(RV_RV_7, 5.vedtaksperiode.filter()) @@ -834,9 +984,16 @@ internal class BehandlingerE2ETest : AbstractDslTest() { fun `korrigert inntektsmelding med funksjonell feil`() { a1 { håndterSøknad(Sykdom(1.januar, 10.januar, 100.prosent)) - nyttVedtak(15.januar til 25.januar, arbeidsgiverperiode = listOf(1.januar til 10.januar, 15.januar til 21.januar), førsteFraværsdag = 15.januar) + nyttVedtak( + 15.januar til 25.januar, + arbeidsgiverperiode = listOf(1.januar til 10.januar, 15.januar til 21.januar), + førsteFraværsdag = 15.januar + ) - val inntektsmeldingId = håndterInntektsmelding(listOf(1.januar til 10.januar, 15.januar til 21.januar), begrunnelseForReduksjonEllerIkkeUtbetalt = "IkkeLoenn") + val inntektsmeldingId = håndterInntektsmelding( + listOf(1.januar til 10.januar, 15.januar til 21.januar), + begrunnelseForReduksjonEllerIkkeUtbetalt = "IkkeLoenn" + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) @@ -868,4 +1025,4 @@ internal class BehandlingerE2ETest : AbstractDslTest() { } } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/BrukerutbetalingerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/BrukerutbetalingerTest.kt index 3fba96dafc..fa5903f573 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/BrukerutbetalingerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/BrukerutbetalingerTest.kt @@ -68,7 +68,7 @@ internal class BrukerutbetalingerTest : AbstractEndToEndTest() { håndterInntektsmelding( arbeidsgiverperioder = listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, - refusjon = Inntektsmelding.Refusjon(INNTEKT /2, null), + refusjon = Inntektsmelding.Refusjon(INNTEKT / 2, null), ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser() diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/DelvisRefusjonRevurderingTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/DelvisRefusjonRevurderingTest.kt index b03e405c51..1774ef5355 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/DelvisRefusjonRevurderingTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/DelvisRefusjonRevurderingTest.kt @@ -39,7 +39,11 @@ internal class DelvisRefusjonRevurderingTest : AbstractEndToEndTest() { @Test fun `korrigerende inntektsmelding med halvering av inntekt setter riktig refusjonsbeløp fra nyeste inntektsmelding`() { - nyttVedtak(januar, 100.prosent, refusjon = Inntektsmelding.Refusjon(INNTEKT, null, emptyList())) + nyttVedtak( + januar, + 100.prosent, + refusjon = Inntektsmelding.Refusjon(INNTEKT, null, emptyList()) + ) assertUtbetalingsbeløp(1.vedtaksperiode, 0, 1431, subset = 1.januar til 16.januar) assertUtbetalingsbeløp(1.vedtaksperiode, 1431, 1431, subset = 17.januar til 31.januar) @@ -51,7 +55,10 @@ internal class DelvisRefusjonRevurderingTest : AbstractEndToEndTest() { val skjæringstidspunkt = inspektør.skjæringstidspunkt(1.vedtaksperiode) håndterOverstyrInntekt(INNTEKT / 2, skjæringstidspunkt = skjæringstidspunkt) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) - håndterSkjønnsmessigFastsettelse(skjæringstidspunkt, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT / 2))) + håndterSkjønnsmessigFastsettelse( + skjæringstidspunkt, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT / 2)) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -64,24 +71,47 @@ internal class DelvisRefusjonRevurderingTest : AbstractEndToEndTest() { @Test fun `overstyring av inntekt med økning av inntekt uten nytt refusjonsbeløp`() { - nyttVedtak(januar, 100.prosent, refusjon = Inntektsmelding.Refusjon(INNTEKT, null, emptyList())) + nyttVedtak( + januar, + 100.prosent, + refusjon = Inntektsmelding.Refusjon(INNTEKT, null, emptyList()) + ) assertUtbetalingsbeløp(1.vedtaksperiode, 0, 1431, subset = 1.januar til 16.januar) assertUtbetalingsbeløp(1.vedtaksperiode, 1431, 1431, subset = 17.januar til 31.januar) nullstillTilstandsendringer() - håndterOverstyrInntekt(50000.månedlig, skjæringstidspunkt = inspektør.skjæringstidspunkt(1.vedtaksperiode)) + håndterOverstyrInntekt( + 50000.månedlig, + skjæringstidspunkt = inspektør.skjæringstidspunkt(1.vedtaksperiode) + ) håndterYtelser(1.vedtaksperiode) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING + ) } @Test fun `overstyring av inntekt med nedjustering av inntekt uten nytt refusjonsbeløp`() { - nyttVedtak(januar, 100.prosent, refusjon = Inntektsmelding.Refusjon(INNTEKT, null, emptyList())) + nyttVedtak( + januar, + 100.prosent, + refusjon = Inntektsmelding.Refusjon(INNTEKT, null, emptyList()) + ) assertUtbetalingsbeløp(1.vedtaksperiode, 0, 1431, subset = 1.januar til 16.januar) assertUtbetalingsbeløp(1.vedtaksperiode, 1431, 1431, subset = 17.januar til 31.januar) - håndterOverstyrInntekt(INNTEKT /2, skjæringstidspunkt = inspektør.skjæringstidspunkt(1.vedtaksperiode)) + håndterOverstyrInntekt( + INNTEKT / 2, + skjæringstidspunkt = inspektør.skjæringstidspunkt(1.vedtaksperiode) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT / 2))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT / 2)) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -175,7 +205,11 @@ internal class DelvisRefusjonRevurderingTest : AbstractEndToEndTest() { orgnummer = a1 ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - assertSisteTilstand(1.vedtaksperiode, orgnummer = a1, tilstand = AVVENTER_SIMULERING_REVURDERING) + assertSisteTilstand( + 1.vedtaksperiode, + orgnummer = a1, + tilstand = AVVENTER_SIMULERING_REVURDERING + ) assertSisteTilstand(1.vedtaksperiode, orgnummer = a2, tilstand = AVVENTER_REVURDERING) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/DelvisRefusjonTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/DelvisRefusjonTest.kt index 83fce4ec94..7f23c503a8 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/DelvisRefusjonTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/DelvisRefusjonTest.kt @@ -220,7 +220,11 @@ internal class DelvisRefusjonTest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding( listOf(1.januar til 16.januar), - refusjon = Inntektsmelding.Refusjon(INNTEKT, null, listOf(EndringIRefusjon(15000.månedlig, 20.januar))), + refusjon = Inntektsmelding.Refusjon( + INNTEKT, + null, + listOf(EndringIRefusjon(15000.månedlig, 20.januar)) + ), ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -242,7 +246,11 @@ internal class DelvisRefusjonTest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding( listOf(1.januar til 16.januar), - refusjon = Inntektsmelding.Refusjon(INNTEKT, null, listOf(EndringIRefusjon(15000.månedlig, 1.februar))), + refusjon = Inntektsmelding.Refusjon( + INNTEKT, + null, + listOf(EndringIRefusjon(15000.månedlig, 1.februar)) + ), ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -298,11 +306,17 @@ internal class DelvisRefusjonTest : AbstractEndToEndTest() { håndterSøknad(januar, orgnummer = a1) håndterSøknad(Sykdom(21.januar, 10.februar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), orgnummer = a1) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + orgnummer = a1 + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a2) - håndterInntektsmelding(arbeidsgiverperioder = listOf(21.januar til 5.februar), orgnummer = a2) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(21.januar til 5.februar), + orgnummer = a2 + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) @@ -382,11 +396,17 @@ internal class DelvisRefusjonTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 10.februar, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(21.januar, 10.februar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), orgnummer = a1) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + orgnummer = a1 + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a2) - håndterInntektsmelding(arbeidsgiverperioder = listOf(21.januar til 5.februar), orgnummer = a2) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(21.januar til 5.februar), + orgnummer = a2 + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) @@ -466,11 +486,17 @@ internal class DelvisRefusjonTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(21.januar, 10.februar, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(1.januar, 10.februar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), orgnummer = a2) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + orgnummer = a2 + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a1) - håndterInntektsmelding(arbeidsgiverperioder = listOf(21.januar til 5.februar), orgnummer = a1) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(21.januar til 5.februar), + orgnummer = a1 + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, orgnummer = a2) håndterVilkårsgrunnlag( @@ -580,7 +606,7 @@ internal class DelvisRefusjonTest : AbstractEndToEndTest() { ) håndterInntektsmelding( listOf(1.januar til 16.januar), - beregnetInntekt = INNTEKT+100.månedlig, + beregnetInntekt = INNTEKT + 100.månedlig, refusjon = Inntektsmelding.Refusjon(INNTEKT / 2, null, emptyList()), ) håndterVilkårsgrunnlag(1.vedtaksperiode) @@ -599,9 +625,18 @@ internal class DelvisRefusjonTest : AbstractEndToEndTest() { ) val vilkårsgrunnlag = inspektør.vilkårsgrunnlag(1.januar) assertNotNull(vilkårsgrunnlag) - val inntektsopplysninger = vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(ORGNUMMER).inspektør - assertEquals(INNTEKT+100.månedlig, inntektsopplysninger.inntektsopplysning.inspektør.beløp) - assertEquals(INNTEKT/2, inntektsopplysninger.refusjonsopplysninger.single().inspektør.beløp) + val inntektsopplysninger = + vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + ORGNUMMER + ).inspektør + assertEquals( + INNTEKT + 100.månedlig, + inntektsopplysninger.inntektsopplysning.inspektør.beløp + ) + assertEquals( + INNTEKT / 2, + inntektsopplysninger.refusjonsopplysninger.single().inspektør.beløp + ) } @Test @@ -614,7 +649,8 @@ internal class DelvisRefusjonTest : AbstractEndToEndTest() { håndterInntektsmelding( listOf(1.januar til 16.januar), refusjon = Inntektsmelding.Refusjon( - INNTEKT, 20.januar), + INNTEKT, 20.januar + ), orgnummer = a2, ) håndterVilkårsgrunnlag( @@ -671,7 +707,8 @@ internal class DelvisRefusjonTest : AbstractEndToEndTest() { fun `Første utbetalte dag er før første fraværsdag`() { håndterSykmelding(januar) håndterSøknad(januar) - val inntektsmeldingId = håndterInntektsmelding(listOf(), førsteFraværsdag = 17.januar, avsendersystem = ALTINN) + val inntektsmeldingId = + håndterInntektsmelding(listOf(), førsteFraværsdag = 17.januar, avsendersystem = ALTINN) assertInntektshistorikkForDato(INNTEKT, 1.januar, inspektør) @@ -736,7 +773,8 @@ internal class DelvisRefusjonTest : AbstractEndToEndTest() { håndterInntektsmelding( listOf(1.januar til 16.januar), refusjon = Inntektsmelding.Refusjon( - INNTEKT, 15.januar, emptyList()), + INNTEKT, 15.januar, emptyList() + ), orgnummer = a2, ) håndterVilkårsgrunnlag(1.vedtaksperiode, orgnummer = a1) @@ -765,6 +803,13 @@ internal class DelvisRefusjonTest : AbstractEndToEndTest() { } } - private fun TestArbeidsgiverInspektør.refusjonsopplysningerISykepengegrunnlaget(skjæringstidspunkt: LocalDate, orgnr: String = ORGNUMMER) = - vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(orgnr) }.inspektør.refusjonsopplysninger + private fun TestArbeidsgiverInspektør.refusjonsopplysningerISykepengegrunnlaget( + skjæringstidspunkt: LocalDate, + orgnr: String = ORGNUMMER + ) = + vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder( + orgnr + ) + }.inspektør.refusjonsopplysninger } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/FullRefusjonTilNullRefusjonE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/FullRefusjonTilNullRefusjonE2ETest.kt index 6e50264c4d..678a2ad55e 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/FullRefusjonTilNullRefusjonE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/brukerutbetaling/FullRefusjonTilNullRefusjonE2ETest.kt @@ -26,7 +26,7 @@ import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -internal class FullRefusjonTilNullRefusjonE2ETest : AbstractEndToEndTest() { +internal class FullRefusjonTilNullRefusjonE2ETest : AbstractEndToEndTest() { @Test fun `starter med ingen refusjon`() { @@ -52,11 +52,17 @@ internal class FullRefusjonTilNullRefusjonE2ETest : AbstractEndToEndTest() { assertFalse(inspektør.utbetaling(0).arbeidsgiverOppdrag.harUtbetalinger()) assertTrue(inspektør.utbetaling(0).personOppdrag.harUtbetalinger()) - assertEquals(17.januar til 31.januar, Oppdrag.periode(inspektør.utbetaling(0).personOppdrag)) + assertEquals( + 17.januar til 31.januar, + Oppdrag.periode(inspektør.utbetaling(0).personOppdrag) + ) assertFalse(inspektør.utbetaling(1).arbeidsgiverOppdrag.harUtbetalinger()) assertTrue(inspektør.utbetaling(1).personOppdrag.harUtbetalinger()) - assertEquals(17.januar til 28.februar, Oppdrag.periode(inspektør.utbetaling(1).personOppdrag)) + assertEquals( + 17.januar til 28.februar, + Oppdrag.periode(inspektør.utbetaling(1).personOppdrag) + ) } @Test @@ -66,7 +72,8 @@ internal class FullRefusjonTilNullRefusjonE2ETest : AbstractEndToEndTest() { håndterInntektsmelding( listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, refusjon = Inntektsmelding.Refusjon( - INNTEKT, 31.januar), + INNTEKT, 31.januar + ), ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -82,7 +89,10 @@ internal class FullRefusjonTilNullRefusjonE2ETest : AbstractEndToEndTest() { håndterUtbetalt(AKSEPTERT) assertFalse(inspektør.utbetaling(1).arbeidsgiverOppdrag.harUtbetalinger()) - assertEquals(17.januar til 31.januar, Oppdrag.periode(inspektør.utbetaling(1).arbeidsgiverOppdrag)) + assertEquals( + 17.januar til 31.januar, + Oppdrag.periode(inspektør.utbetaling(1).arbeidsgiverOppdrag) + ) assertTrue(inspektør.utbetaling(1).personOppdrag.harUtbetalinger()) assertEquals(februar, Oppdrag.periode(inspektør.utbetaling(1).personOppdrag)) } @@ -94,7 +104,8 @@ internal class FullRefusjonTilNullRefusjonE2ETest : AbstractEndToEndTest() { håndterInntektsmelding( listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, refusjon = Inntektsmelding.Refusjon( - INNTEKT, 3.februar), + INNTEKT, 3.februar + ), ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -122,7 +133,8 @@ internal class FullRefusjonTilNullRefusjonE2ETest : AbstractEndToEndTest() { håndterInntektsmelding( listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, refusjon = Inntektsmelding.Refusjon( - INNTEKT, 31.januar), + INNTEKT, 31.januar + ), ) håndterSykmelding(februar) @@ -137,7 +149,10 @@ internal class FullRefusjonTilNullRefusjonE2ETest : AbstractEndToEndTest() { håndterUtbetalt(AKSEPTERT) assertFalse(inspektør.utbetaling(1).arbeidsgiverOppdrag.harUtbetalinger()) - assertEquals(17.januar til 31.januar, Oppdrag.periode(inspektør.utbetaling(1).arbeidsgiverOppdrag)) + assertEquals( + 17.januar til 31.januar, + Oppdrag.periode(inspektør.utbetaling(1).arbeidsgiverOppdrag) + ) assertTrue(inspektør.utbetaling(2).personOppdrag.harUtbetalinger()) assertEquals(februar, Oppdrag.periode(inspektør.utbetaling(2).personOppdrag)) } @@ -181,10 +196,16 @@ internal class FullRefusjonTilNullRefusjonE2ETest : AbstractEndToEndTest() { assertTrue(januarrevurdering.arbeidsgiverOppdrag.harUtbetalinger()) assertTrue(januarrevurdering.personOppdrag.harUtbetalinger()) assertTrue(januarrevurdering.personOppdrag[0].erOpphør()) - assertEquals(17.januar til 31.januar, Oppdrag.periode(januarrevurdering.arbeidsgiverOppdrag)) + assertEquals( + 17.januar til 31.januar, + Oppdrag.periode(januarrevurdering.arbeidsgiverOppdrag) + ) inspektør.utbetaling(2).also { utbetalingInspektør -> - assertEquals(17.januar til 28.februar, Oppdrag.periode(utbetalingInspektør.arbeidsgiverOppdrag)) + assertEquals( + 17.januar til 28.februar, + Oppdrag.periode(utbetalingInspektør.arbeidsgiverOppdrag) + ) assertEquals(1, utbetalingInspektør.arbeidsgiverOppdrag.size) utbetalingInspektør.arbeidsgiverOppdrag.also { oppdrag -> assertEquals(Endringskode.ENDR, oppdrag.inspektør.endringskode) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereArbeidsforholdTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereArbeidsforholdTest.kt index 77de3c330c..f24adb3407 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereArbeidsforholdTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereArbeidsforholdTest.kt @@ -55,8 +55,18 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { grunnlag(a2, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 20000.månedlig.repeat(3)) ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( 1.vedtaksperiode, @@ -70,8 +80,14 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.mars) assertNotNull(vilkårsgrunnlag) - assertEquals(1, vilkårsgrunnlag.inspektør.opptjening!!.arbeidsforhold.single { it.orgnummer == a1 }.ansattPerioder.size) - assertEquals(1, vilkårsgrunnlag.inspektør.opptjening!!.arbeidsforhold.single { it.orgnummer == a2 }.ansattPerioder.size) + assertEquals( + 1, + vilkårsgrunnlag.inspektør.opptjening!!.arbeidsforhold.single { it.orgnummer == a1 }.ansattPerioder.size + ) + assertEquals( + 1, + vilkårsgrunnlag.inspektør.opptjening!!.arbeidsforhold.single { it.orgnummer == a2 }.ansattPerioder.size + ) } @Test @@ -87,7 +103,14 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { val inntekter1 = listOf( grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 10000.månedlig.repeat(3)) ) - val arbeidsforhold1 = listOf(Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT)) + val arbeidsforhold1 = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) + ) håndterVilkårsgrunnlag( 1.vedtaksperiode, orgnummer = a1, @@ -115,7 +138,10 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { @Test fun `Flere aktive arbeidsforhold, men kun 1 med inntekt, skal ikke få warning for flere arbeidsgivere`() { håndterSykmelding(Sykmeldingsperiode(1.juli(2021), 31.juli(2021)), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.juli(2021), 31.juli(2021), 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.juli(2021), 31.juli(2021), 100.prosent), + orgnummer = a1 + ) håndterInntektsmelding( listOf(1.juli(2021) til 16.juli(2021)), førsteFraværsdag = 1.juli(2021), @@ -126,8 +152,18 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 30000.månedlig.repeat(3)) ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = 2.januar(2020), ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = 1.mai(2019), ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = 2.januar(2020), + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = 1.mai(2019), + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( 1.vedtaksperiode, @@ -147,11 +183,25 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { @Test fun `arbeidsgivere med sammenligningsgrunnlag, men uten inntekt, skal ikke anses som ekstra arbeidsgiver`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + orgnummer = a1 + ) - val arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT)) - val inntekter = listOf(grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), INNTEKT.repeat(3))) + val arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) + ) + val inntekter = + listOf(grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), INNTEKT.repeat(3))) håndterVilkårsgrunnlag( 1.vedtaksperiode, @@ -166,13 +216,22 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) - assertEquals(UtbetalingInntektskilde.EN_ARBEIDSGIVER, inspektør(a1).inntektskilde(1.vedtaksperiode)) + assertEquals( + UtbetalingInntektskilde.EN_ARBEIDSGIVER, + inspektør(a1).inntektskilde(1.vedtaksperiode) + ) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.februar, 28.februar, 100.prosent), + orgnummer = a1 + ) assertIngenVarsler(1.vedtaksperiode.filter(orgnummer = a1)) - assertEquals(UtbetalingInntektskilde.EN_ARBEIDSGIVER, inspektør(a1).inntektskilde(2.vedtaksperiode)) + assertEquals( + UtbetalingInntektskilde.EN_ARBEIDSGIVER, + inspektør(a1).inntektskilde(2.vedtaksperiode) + ) } @Test @@ -182,7 +241,10 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { * Sjekker kun arbeidsforhold for gjelende skjæringstidspunkt, derfor vil ikke mangel av arbeidsforhold for a1 skape problemer * */ håndterSykmelding(Sykmeldingsperiode(1.mars(2017), 31.mars(2017)), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.mars(2017), 31.mars(2017), 50.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.mars(2017), 31.mars(2017), 50.prosent), + orgnummer = a1 + ) håndterInntektsmelding( listOf(1.mars(2017) til 16.mars(2017)), førsteFraværsdag = 1.mars(2017), @@ -193,7 +255,12 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 35000.månedlig.repeat(3)) ) val arbeidsforholdA1 = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( 1.vedtaksperiode, @@ -221,7 +288,12 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { ) val arbeidsforholdA2 = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -239,7 +311,8 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { assertEquals( 692.0, - inspektør(a2).vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje[19.mars].økonomi.inspektør.arbeidsgiverbeløp?.daglig) + inspektør(a2).vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje[19.mars].økonomi.inspektør.arbeidsgiverbeløp?.daglig + ) val a2Linje = inspektør(a2).utbetaling(0).arbeidsgiverOppdrag.last() assertEquals(17.mars, a2Linje.fom) assertEquals(30.mars, a2Linje.tom) @@ -258,14 +331,45 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { beregnetInntekt = 10000.månedlig, orgnummer = a1, ) - val inntekter1 = listOf(grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 10000.månedlig.repeat(3))) + val inntekter1 = listOf( + grunnlag( + a1, + finnSkjæringstidspunkt(a1, 1.vedtaksperiode), + 10000.månedlig.repeat(3) + ) + ) val arbeidsforhold1 = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, 1.januar, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a1, 1.januar, null, Arbeidsforholdtype.ORDINÆRT), // Skal gjelde - Vilkårsgrunnlag.Arbeidsforhold(a1, 28.februar, 1.mars, Arbeidsforholdtype.ORDINÆRT), // Skal gjelde - Vilkårsgrunnlag.Arbeidsforhold(a1, 1.mars, 31.mars, Arbeidsforholdtype.ORDINÆRT), // Skal ikke gjelde fordi ansettelsetidspunktet er på skjæringstidspunktet + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + 1.januar, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 1.januar, + null, + Arbeidsforholdtype.ORDINÆRT + ), // Skal gjelde + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 28.februar, + 1.mars, + Arbeidsforholdtype.ORDINÆRT + ), // Skal gjelde + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 1.mars, + 31.mars, + Arbeidsforholdtype.ORDINÆRT + ), // Skal ikke gjelde fordi ansettelsetidspunktet er på skjæringstidspunktet Vilkårsgrunnlag.Arbeidsforhold(a1, 1.februar, 28.februar, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a1, 2.mars, 31.mars, Arbeidsforholdtype.ORDINÆRT) // Gjelder ikke etter endring + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 2.mars, + 31.mars, + Arbeidsforholdtype.ORDINÆRT + ) // Gjelder ikke etter endring ) val vilkårsgrunnlag = håndterVilkårsgrunnlag( 1.vedtaksperiode, @@ -276,13 +380,19 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { arbeidsforhold = arbeidsforhold1 ) val grunnlagsdata = vilkårsgrunnlag.grunnlagsdata() - assertEquals(4, grunnlagsdata.inspektør.opptjening!!.arbeidsforhold.single { it.orgnummer == a1 }.ansattPerioder.size) + assertEquals( + 4, + grunnlagsdata.inspektør.opptjening!!.arbeidsforhold.single { it.orgnummer == a1 }.ansattPerioder.size + ) } @Test fun `opphold i arbeidsforhold skal ikke behandles som ghost`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) håndterInntektsmelding( listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, @@ -312,7 +422,10 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { håndterUtbetalt(orgnummer = a1) håndterSykmelding(Sykmeldingsperiode(2.februar, 20.februar), orgnummer = a2) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(2.februar, 20.februar, 100.prosent), orgnummer = a2) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(2.februar, 20.februar, 100.prosent), + orgnummer = a2 + ) håndterInntektsmelding( listOf(2.februar til 17.februar), førsteFraværsdag = 2.februar, @@ -325,7 +438,12 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { grunnlag(a2, finnSkjæringstidspunkt(a2, 1.vedtaksperiode), 45000.månedlig.repeat(3)) ) val arbeidsforhold2 = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, 31.januar, Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + 31.januar, + Arbeidsforholdtype.ORDINÆRT + ), Vilkårsgrunnlag.Arbeidsforhold(a1, 1.mars, null, Arbeidsforholdtype.ORDINÆRT), Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) ) @@ -371,7 +489,9 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { val utbetaling = inspektør(a2).utbetaling(0) val linje = utbetaling.arbeidsgiverOppdrag.linjerUtenOpphør().single() - assertEquals(100, inspektør(a2).vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje[20.februar].økonomi.brukTotalGrad { totalGrad -> totalGrad }) + assertEquals( + 100, + inspektør(a2).vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje[20.februar].økonomi.brukTotalGrad { totalGrad -> totalGrad }) assertEquals( 2077, linje.beløp @@ -383,7 +503,10 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { @Test fun `Vedtaksperioder med flere arbeidsforhold fra Aa-reg skal ha inntektskilde FLERE_ARBEIDSGIVERE`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) håndterInntektsmelding( listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, @@ -409,13 +532,19 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - assertEquals(UtbetalingInntektskilde.FLERE_ARBEIDSGIVERE, inspektør(a1).inntektskilde(1.vedtaksperiode)) + assertEquals( + UtbetalingInntektskilde.FLERE_ARBEIDSGIVERE, + inspektør(a1).inntektskilde(1.vedtaksperiode) + ) } @Test fun `ignorerer arbeidsforhold med blanke orgnumre`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) håndterInntektsmelding( listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, @@ -445,7 +574,10 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { @Test fun `Forlengelser skal ikke få warning på at arbeidsgiver ikke finnes i Aa-reg`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) håndterInntektsmelding( listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, @@ -459,7 +591,13 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = emptyList() ), - arbeidsforhold = listOf(Vilkårsgrunnlag.Arbeidsforhold(a2, 1.januar(2017), type = Arbeidsforholdtype.ORDINÆRT)) + arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.januar(2017), + type = Arbeidsforholdtype.ORDINÆRT + ) + ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) @@ -467,10 +605,13 @@ internal class FlereArbeidsgivereArbeidsforholdTest : AbstractEndToEndTest() { håndterUtbetalt(orgnummer = a1) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.februar, 28.februar, 100.prosent), + orgnummer = a1 + ) håndterYtelser(2.vedtaksperiode, orgnummer = a1) assertVarsel(RV_VV_1, 1.vedtaksperiode.filter(a1)) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereFlytTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereFlytTest.kt index 4423a6294d..82477d05ad 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereFlytTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereFlytTest.kt @@ -90,7 +90,11 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { @Test fun `En egenmelding på bare en arbeidsgiver`() { håndterSøknad(Sykdom(2.januar, 17.januar, 100.prosent), orgnummer = a1) - håndterSøknad(Sykdom(2.januar, 17.januar, 100.prosent), egenmeldinger = listOf(1.januar til 1.januar), orgnummer = a2) + håndterSøknad( + Sykdom(2.januar, 17.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 1.januar), + orgnummer = a2 + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, orgnummer = a2) @@ -104,7 +108,13 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - assertDoesNotThrow { håndterPåminnelse(1.vedtaksperiode, påminnetTilstand = AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) } + assertDoesNotThrow { + håndterPåminnelse( + 1.vedtaksperiode, + påminnetTilstand = AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) + } } @Test @@ -134,13 +144,25 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars), orgnummer = a1) håndterSøknad(Sykdom(1.mars, 31.mars, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.mars til 16.mars), orgnummer = a1, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + orgnummer = a1, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars), orgnummer = a2) håndterSøknad(Sykdom(1.mars, 31.mars, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(1.mars til 16.mars), orgnummer = a2, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + orgnummer = a2, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) - håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + orgnummer = a1, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) håndterVilkårsgrunnlag(1.vedtaksperiode, orgnummer = a1) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) @@ -190,7 +212,11 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { @Test fun `foreldet dag på ag1 påvirker ikke total sykdomsgrad`() { - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.mai, orgnummer = a1) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.mai, + orgnummer = a1 + ) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a2) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a2) @@ -220,7 +246,12 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { forlengVedtak(februar, orgnummer = a1) håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars), orgnummer = a2) håndterSøknad(Sykdom(1.mars, 31.mars, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(1.mars til 16.mars), beregnetInntekt = 20000.månedlig, orgnummer = a2, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + beregnetInntekt = 20000.månedlig, + orgnummer = a2, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterYtelser(2.vedtaksperiode, orgnummer = a2) håndterSimulering(2.vedtaksperiode, orgnummer = a2) @@ -233,7 +264,10 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { assertSisteTilstand(3.vedtaksperiode, AVVENTER_SIMULERING, orgnummer = a1) assertSisteTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - assertEquals(0, inspektør(a1).utbetalingstidslinjer(3.vedtaksperiode).inspektør.avvistDagTeller) + assertEquals( + 0, + inspektør(a1).utbetalingstidslinjer(3.vedtaksperiode).inspektør.avvistDagTeller + ) } @Test @@ -253,7 +287,7 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, orgnummer = a1 ) assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) @@ -320,8 +354,23 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { assertIngenFunksjonelleFeil() assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET, orgnummer = a2) - assertTilstander(2.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + AVSLUTTET, + orgnummer = a2 + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + orgnummer = a1 + ) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) } @@ -360,14 +409,27 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, orgnummer = a1) - håndterInntektsmelding(listOf(2.januar til 17.januar), førsteFraværsdag = 2.januar, orgnummer = a2) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(2.januar til 17.januar), + førsteFraværsdag = 2.januar, + orgnummer = a2 + ) assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) assertTilstand(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a2) - håndterInntektsmelding(listOf(2.januar til 17.januar), førsteFraværsdag = 20.januar, orgnummer = a2, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(2.januar til 17.januar), + førsteFraværsdag = 20.januar, + orgnummer = a2, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) @@ -401,8 +463,16 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, orgnummer = a2) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + orgnummer = a2 + ) assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, orgnummer = a2) @@ -419,16 +489,26 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntektperioderForSykepengegrunnlag { - 1.oktober(2017) til 1.desember(2017) inntekter { - a1 inntekt INNTEKT - a2 inntekt INNTEKT * 0.95 - } - }), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( + inntektperioderForSykepengegrunnlag { + 1.oktober(2017) til 1.desember(2017) inntekter { + a1 inntekt INNTEKT + a2 inntekt INNTEKT * 0.95 + } + }), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) ), orgnummer = a1 ) @@ -443,18 +523,32 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterInntektsmelding(listOf(18.januar til 2.februar), orgnummer = a2) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode) ?: fail("Mangler vilkårsgrunnlag") + val vilkårsgrunnlag = + inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode) ?: fail("Mangler vilkårsgrunnlag") - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + orgnummer = a1 + ) assertTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - val inntekter = vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver + val inntekter = + vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver val inntekterA1 = inntekter.getValue(a1).inspektør val inntekterA2 = inntekter.getValue(a2).inspektør - assertEquals(no.nav.helse.person.inntekt.Inntektsmelding::class, inntekterA1.inntektsopplysning::class) - assertEquals(no.nav.helse.person.inntekt.Inntektsmelding::class, inntekterA2.inntektsopplysning::class) + assertEquals( + no.nav.helse.person.inntekt.Inntektsmelding::class, + inntekterA1.inntektsopplysning::class + ) + assertEquals( + no.nav.helse.person.inntekt.Inntektsmelding::class, + inntekterA2.inntektsopplysning::class + ) assertEquals(INNTEKT, inntekterA2.inntektsopplysning.inspektør.beløp) } @@ -466,7 +560,11 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 22.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + orgnummer = a1, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) assertTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) håndterSøknad(Sykdom(25.januar, 17.februar, 100.prosent), orgnummer = a1) @@ -475,8 +573,16 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(25.januar, 17.februar, 100.prosent), orgnummer = a2) assertTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a2) - håndterInntektsmelding(listOf(25.januar til 9.februar), orgnummer = a1, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) - håndterInntektsmelding(listOf(25.januar til 9.februar), orgnummer = a2, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(25.januar til 9.februar), + orgnummer = a1, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) + håndterInntektsmelding( + listOf(25.januar til 9.februar), + orgnummer = a2, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) assertTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) assertTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) @@ -531,8 +637,18 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -576,8 +692,18 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -629,7 +755,13 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { assertTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) } @Test @@ -708,7 +840,7 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, TIL_INFOTRYGD, orgnummer = a1 ) @@ -822,7 +954,11 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { håndterUtbetalt(orgnummer = orgnummer) } - private fun vilkårsprøv(vedtaksperiode: IdInnhenter, orgnummer: String, skjæringstidspunkt: LocalDate) { + private fun vilkårsprøv( + vedtaksperiode: IdInnhenter, + orgnummer: String, + skjæringstidspunkt: LocalDate + ) { håndterVilkårsgrunnlag( vedtaksperiode, orgnummer = orgnummer, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( @@ -832,13 +968,25 @@ internal class FlereArbeidsgivereFlytTest : AbstractEndToEndTest() { ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) ) ) } - private fun utbetalPeriode(vedtaksperiode: IdInnhenter, orgnummer: String, skjæringstidspunkt: LocalDate) { + private fun utbetalPeriode( + vedtaksperiode: IdInnhenter, + orgnummer: String, + skjæringstidspunkt: LocalDate + ) { vilkårsprøv(vedtaksperiode, orgnummer, skjæringstidspunkt) utbetalPeriodeEtterVilkårsprøving(vedtaksperiode, orgnummer) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereForlengelserTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereForlengelserTest.kt index 44429e09d1..79cfc2ec4b 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereForlengelserTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereForlengelserTest.kt @@ -37,8 +37,20 @@ internal class FlereArbeidsgivereForlengelserTest : AbstractEndToEndTest() { val periode = 1.januar(2021) til 31.januar(2021) håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive), orgnummer = a1) håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive), orgnummer = a2) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(periode.start, periode.endInclusive, 100.prosent), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(periode.start, periode.endInclusive, 100.prosent), orgnummer = a2) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom( + periode.start, + periode.endInclusive, + 100.prosent + ), orgnummer = a1 + ) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom( + periode.start, + periode.endInclusive, + 100.prosent + ), orgnummer = a2 + ) håndterInntektsmelding( arbeidsgiverperioder = listOf(1.januar(2021) til 16.januar(2021)), førsteFraværsdag = 1.januar(2021), @@ -61,27 +73,47 @@ internal class FlereArbeidsgivereForlengelserTest : AbstractEndToEndTest() { //Forlengelsen starter her val forlengelseperiode = 1.februar(2021) til 28.februar(2021) - håndterSykmelding(Sykmeldingsperiode(forlengelseperiode.start, forlengelseperiode.endInclusive), orgnummer = a1) - håndterSykmelding(Sykmeldingsperiode(forlengelseperiode.start, forlengelseperiode.endInclusive), orgnummer = a2) + håndterSykmelding( + Sykmeldingsperiode( + forlengelseperiode.start, + forlengelseperiode.endInclusive + ), orgnummer = a1 + ) + håndterSykmelding( + Sykmeldingsperiode( + forlengelseperiode.start, + forlengelseperiode.endInclusive + ), orgnummer = a2 + ) håndterSøknad( Søknad.Søknadsperiode.Sykdom( forlengelseperiode.start, forlengelseperiode.endInclusive, 100.prosent - ), orgnummer = a1) + ), orgnummer = a1 + ) håndterSøknad( Søknad.Søknadsperiode.Sykdom( forlengelseperiode.start, forlengelseperiode.endInclusive, 100.prosent - ), orgnummer = a2) + ), orgnummer = a2 + ) assertSisteTilstand(2.vedtaksperiode, TilstandType.AVVENTER_HISTORIKK, orgnummer = a1) - assertSisteTilstand(2.vedtaksperiode, TilstandType.AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertSisteTilstand( + 2.vedtaksperiode, + TilstandType.AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) håndterYtelser(2.vedtaksperiode, orgnummer = a1) assertSisteTilstand(2.vedtaksperiode, TilstandType.AVVENTER_SIMULERING, orgnummer = a1) - assertSisteTilstand(2.vedtaksperiode, TilstandType.AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertSisteTilstand( + 2.vedtaksperiode, + TilstandType.AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) håndterSimulering(2.vedtaksperiode, orgnummer = a1) assertSisteTilstand(2.vedtaksperiode, TilstandType.AVVENTER_GODKJENNING, orgnummer = a1) @@ -106,7 +138,10 @@ internal class FlereArbeidsgivereForlengelserTest : AbstractEndToEndTest() { @Test fun `Ghost forlenger annen arbeidsgiver - skal gå fint`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) håndterInntektsmelding( listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, @@ -121,8 +156,18 @@ internal class FlereArbeidsgivereForlengelserTest : AbstractEndToEndTest() { ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -139,7 +184,10 @@ internal class FlereArbeidsgivereForlengelserTest : AbstractEndToEndTest() { håndterUtbetalt(orgnummer = a1) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar), orgnummer = a2) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a2) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.februar, 28.februar, 100.prosent), + orgnummer = a2 + ) håndterInntektsmelding( listOf(1.februar til 16.februar), førsteFraværsdag = 1.februar, @@ -169,15 +217,27 @@ internal class FlereArbeidsgivereForlengelserTest : AbstractEndToEndTest() { fun `forlengelse av AvsluttetUtenUtbetaling for flere arbeidsgivere skal ikke gå til AvventerHistorikk uten IM for begge arbeidsgivere`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 12.januar), orgnummer = a1) håndterSykmelding(Sykmeldingsperiode(1.januar, 12.januar), orgnummer = a2) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 12.januar, 100.prosent), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 12.januar, 100.prosent), orgnummer = a2) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 12.januar, 100.prosent), + orgnummer = a1 + ) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 12.januar, 100.prosent), + orgnummer = a2 + ) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a2) håndterSykmelding(Sykmeldingsperiode(13.januar, 31.januar), orgnummer = a1) håndterSykmelding(Sykmeldingsperiode(13.januar, 31.januar), orgnummer = a2) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(13.januar, 31.januar, 100.prosent), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(13.januar, 31.januar, 100.prosent), orgnummer = a2) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(13.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(13.januar, 31.januar, 100.prosent), + orgnummer = a2 + ) assertTilstand(2.vedtaksperiode, TilstandType.AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereGhostTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereGhostTest.kt index 4b315ed357..8e8a8ab8c9 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereGhostTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereGhostTest.kt @@ -118,11 +118,25 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { val ghost = a2 håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(ghost, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + ghost, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), orgnummer = a1 ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -131,17 +145,37 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterUtbetalt(orgnummer = a1) tilGodkjenning(10.februar til 28.februar, ghost) - assertEquals(10.februar, inspektør(ghost).vedtaksperioder(1.vedtaksperiode).inspektør.skjæringstidspunkt) + assertEquals( + 10.februar, + inspektør(ghost).vedtaksperioder(1.vedtaksperiode).inspektør.skjæringstidspunkt + ) nullstillTilstandsendringer() håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a1) - assertEquals(1.januar, inspektør(ghost).vedtaksperioder(1.vedtaksperiode).inspektør.skjæringstidspunkt) + assertEquals( + 1.januar, + inspektør(ghost).vedtaksperioder(1.vedtaksperiode).inspektør.skjæringstidspunkt + ) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = ghost) - assertInfo("Kopierte inntekt som lå lagret på 2018-02-10 til 2018-01-01", 1.vedtaksperiode.filter(ghost)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = ghost + ) + assertInfo( + "Kopierte inntekt som lå lagret på 2018-02-10 til 2018-01-01", + 1.vedtaksperiode.filter(ghost) + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + orgnummer = a1 + ) } @Test @@ -149,12 +183,30 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { nyeVedtak(1.januar(2017) til 31.januar(2017), a1, a2) håndterSøknad(Sykdom(1.januar, fredag den 26.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) - håndterVilkårsgrunnlag(2.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + håndterInntektsmelding( + listOf(1.januar til 16.januar), + orgnummer = a1, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) + håndterVilkårsgrunnlag( + 2.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), orgnummer = a1 ) håndterYtelser(2.vedtaksperiode, orgnummer = a1) @@ -163,7 +215,11 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterUtbetalt(orgnummer = a1) assertInfoSomFølgeAv("Inntektsmelding oppdaterer ikke vilkårsgrunnlag") { - håndterInntektsmelding(listOf(mandag den 29.januar til 13.februar), orgnummer = a2, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(mandag den 29.januar til 13.februar), + orgnummer = a2, + avsendersystem = ALTINN + ) } // IM replayes, og ettersom 27. og 28 blir friskedager pga. IM beregnes skjæringstidspunktet til 29.januar. Når A1 sin søknad kommer dekker den "hullet" med sykdom slik at skjæringstidspunktet blir 1.januar observatør.vedtaksperiodeVenter.clear() @@ -172,15 +228,30 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { } observatør.assertVenter(2.vedtaksperiode.id(a2), venterPåHva = INNTEKTSMELDING) - assertEquals(29.januar, inspektør(a2).vedtaksperioder(2.vedtaksperiode).inspektør.skjæringstidspunkt) + assertEquals( + 29.januar, + inspektør(a2).vedtaksperioder(2.vedtaksperiode).inspektør.skjæringstidspunkt + ) håndterSøknad(Sykdom(lørdag den 27.januar, 20.februar, 100.prosent), orgnummer = a1) - assertEquals(1.januar, inspektør(a2).vedtaksperioder(2.vedtaksperiode).inspektør.skjæringstidspunkt) + assertEquals( + 1.januar, + inspektør(a2).vedtaksperioder(2.vedtaksperiode).inspektør.skjæringstidspunkt + ) - val ghostRefusjonsopplysinger = inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.inspektør.orgnummer == a2 }.inspektør.refusjonsopplysninger + val ghostRefusjonsopplysinger = + inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.inspektør.orgnummer == a2 }.inspektør.refusjonsopplysninger assertEquals(emptyList(), ghostRefusjonsopplysinger) assertTilstander(3.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_INNTEKTSMELDING, orgnummer = a2) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_INNTEKTSMELDING, + orgnummer = a2 + ) } @Test @@ -190,13 +261,21 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(17.januar, 31.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 31000.månedlig, orgnummer = a1, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 31000.månedlig, + orgnummer = a1, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) håndterVilkårsgrunnlagGhost(2.vedtaksperiode, orgnummer = a1) håndterYtelser(2.vedtaksperiode, orgnummer = a1) håndterSimulering(2.vedtaksperiode, orgnummer = a1) assertSisteTilstand(2.vedtaksperiode, AVVENTER_GODKJENNING, orgnummer = a1) - val ghostInntektFørIm = inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(ghost) }.inspektør.inntektsopplysning + val ghostInntektFørIm = + inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder(ghost) + }.inspektør.inntektsopplysning assertTrue(ghostInntektFørIm is SkattSykepengegrunnlag) // Inntektsmelding fra Ghost vi egentlig ikke trenger, men de sender den allikevel og opplyser om IkkeFravaer... @@ -211,7 +290,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) - val ghostInntektEtterIm = inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(ghost) }.inspektør.inntektsopplysning + val ghostInntektEtterIm = + inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder(ghost) + }.inspektør.inntektsopplysning assertFalse(ghostInntektEtterIm is InntektsmeldingInntekt) assertTrue(ghostInntektEtterIm is SkattSykepengegrunnlag) @@ -220,7 +302,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, orgnummer = a1) assertSisteTilstand(2.vedtaksperiode, AVVENTER_REVURDERING, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK, orgnummer = ghost) - val ghostInntektEtterImNå = inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(ghost) }.inspektør.inntektsopplysning + val ghostInntektEtterImNå = + inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder(ghost) + }.inspektør.inntektsopplysning assertTrue(ghostInntektEtterImNå is InntektsmeldingInntekt) assertFalse(ghostInntektEtterImNå is SkattSykepengegrunnlag) @@ -240,19 +325,44 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { assertVarsel(RV_IM_8, 1.vedtaksperiode.filter(ghost)) - assertBeløpstidslinje(inspektør(a2).vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, januar, 33000.månedlig, ghostIM) - assertEquals(setOf(Dokumentsporing.søknad(ghostSøknad), Dokumentsporing.inntektsmeldingDager(ghostIM), Dokumentsporing.inntektsmeldingInntekt(ghostIM)), inspektør(ghost).hendelser(1.vedtaksperiode)) + assertBeløpstidslinje( + inspektør(a2).vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + januar, + 33000.månedlig, + ghostIM + ) + assertEquals( + setOf( + Dokumentsporing.søknad(ghostSøknad), + Dokumentsporing.inntektsmeldingDager(ghostIM), + Dokumentsporing.inntektsmeldingInntekt(ghostIM) + ), inspektør(ghost).hendelser(1.vedtaksperiode) + ) } @Test fun `blir syk fra ghost`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), orgnummer = a1 ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -268,8 +378,19 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { assertVarsel(RV_IM_4, AktivitetsloggFilter.arbeidsgiver(a1)) assertIngenVarsel(RV_IM_4, AktivitetsloggFilter.arbeidsgiver(a2)) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) @@ -282,9 +403,19 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.mars, 31.mars, 100.prosent), orgnummer = a1) assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, orgnummer = a1) nullstillTilstandsendringer() - håndterInntektsmelding(listOf(1.mars til 16.mars), orgnummer = a1, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + orgnummer = a1, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, orgnummer = a1) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + orgnummer = a1 + ) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a2) } @@ -292,11 +423,25 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { fun `blir syk fra ghost og inntektsmeldingen kommer først`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), orgnummer = a1 ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -304,38 +449,82 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) - håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a2, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + orgnummer = a2, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a2) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) } @Test fun `blir syk fra ghost annen måned enn skjæringstidspunkt etter at saksbehandler har overstyrt inntekten etter 8-28, 3 ledd bokstav b -- Ghost sender klassisk inntektsmelding`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, orgnummer = a1, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) val veldigViktigSubsumsjonSomMåVæreSattForAtDetteSkalFeile = Subsumsjon("8-28", 3, "b") - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a2, INNTEKT * 1.1, veldigViktigSubsumsjonSomMåVæreSattForAtDetteSkalFeile))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a2, + INNTEKT * 1.1, + veldigViktigSubsumsjonSomMåVæreSattForAtDetteSkalFeile + ) + ) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) - assertInntektstype(1.januar, mapOf(a1 to InntektsmeldingInntekt::class, a2 to Saksbehandler::class)) + assertInntektstype( + 1.januar, + mapOf(a1 to InntektsmeldingInntekt::class, a2 to Saksbehandler::class) + ) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a2, beregnetInntekt = INNTEKT, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + orgnummer = a2, + beregnetInntekt = INNTEKT, + avsendersystem = ALTINN + ) - assertInntektstype(1.januar, mapOf(a1 to InntektsmeldingInntekt::class, a2 to Saksbehandler::class)) + assertInntektstype( + 1.januar, + mapOf(a1 to InntektsmeldingInntekt::class, a2 to Saksbehandler::class) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) @@ -351,29 +540,63 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { fun `blir syk fra ghost annen måned enn skjæringstidspunkt etter at saksbehandler har overstyrt inntekten etter 8-28, 3 ledd bokstav b -- Ghost svarer på etterspurte arbeidsgiveropplysninger`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, orgnummer = a1, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) val veldigViktigSubsumsjonSomMåVæreSattForAtDetteSkalFeile = Subsumsjon("8-28", 3, "b") - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a2, INNTEKT * 1.1, veldigViktigSubsumsjonSomMåVæreSattForAtDetteSkalFeile))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a2, + INNTEKT * 1.1, + veldigViktigSubsumsjonSomMåVæreSattForAtDetteSkalFeile + ) + ) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) - assertInntektstype(1.januar, mapOf(a1 to InntektsmeldingInntekt::class, a2 to Saksbehandler::class)) + assertInntektstype( + 1.januar, + mapOf(a1 to InntektsmeldingInntekt::class, a2 to Saksbehandler::class) + ) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a2, beregnetInntekt = INNTEKT, avsendersystem = NAV_NO) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + orgnummer = a2, + beregnetInntekt = INNTEKT, + avsendersystem = NAV_NO + ) - assertInntektstype(1.januar, mapOf(a1 to InntektsmeldingInntekt::class, a2 to InntektsmeldingInntekt::class)) + assertInntektstype( + 1.januar, + mapOf(a1 to InntektsmeldingInntekt::class, a2 to InntektsmeldingInntekt::class) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) @@ -389,7 +612,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { @Test fun `Korrigerende refusjonsopplysninger på arbeidsgiver med skatteinntekt i sykepengegrunnlaget`() { utbetalPeriodeMedGhost() - assertInntektstype(1.januar, mapOf(a1 to InntektsmeldingInntekt::class, a2 to SkattSykepengegrunnlag::class)) + assertInntektstype( + 1.januar, + mapOf(a1 to InntektsmeldingInntekt::class, a2 to SkattSykepengegrunnlag::class) + ) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a2) // Arbeidsgiver har fylt inn inntekt for skjæringstidspunktet 1.januar så da vinner det over skatteopplysningene val inntektsmelding = håndterInntektsmelding( @@ -404,10 +630,28 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK, orgnummer = a2) - assertInntektstype(1.januar, mapOf(a1 to InntektsmeldingInntekt::class, a2 to InntektsmeldingInntekt::class)) + assertInntektstype( + 1.januar, + mapOf(a1 to InntektsmeldingInntekt::class, a2 to InntektsmeldingInntekt::class) + ) assertLikeRefusjonsopplysninger( - listOf(Refusjonsopplysning(inntektsmelding, 1.januar, 31.januar, beløp = 32000.månedlig, ARBEIDSGIVER), Refusjonsopplysning(inntektsmelding, 1.februar, null, beløp = 32000.månedlig, ARBEIDSGIVER)), + listOf( + Refusjonsopplysning( + inntektsmelding, + 1.januar, + 31.januar, + beløp = 32000.månedlig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + inntektsmelding, + 1.februar, + null, + beløp = 32000.månedlig, + ARBEIDSGIVER + ) + ), inspektør(a2).refusjonsopplysningerFraVilkårsgrunnlag(1.januar) ) val korrigerendeInntektsmelding = håndterInntektsmelding( @@ -418,12 +662,27 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { orgnummer = a2, avsendersystem = NAV_NO_SELVBESTEMT ) - assertInntektstype(1.januar, mapOf(a1 to InntektsmeldingInntekt::class, a2 to InntektsmeldingInntekt::class)) + assertInntektstype( + 1.januar, + mapOf(a1 to InntektsmeldingInntekt::class, a2 to InntektsmeldingInntekt::class) + ) assertLikeRefusjonsopplysninger( listOf( - Refusjonsopplysning(inntektsmelding, 1.januar, 31.januar, 32000.månedlig, ARBEIDSGIVER), - Refusjonsopplysning(korrigerendeInntektsmelding, 1.februar, null, 30000.månedlig, ARBEIDSGIVER) + Refusjonsopplysning( + inntektsmelding, + 1.januar, + 31.januar, + 32000.månedlig, + ARBEIDSGIVER + ), + Refusjonsopplysning( + korrigerendeInntektsmelding, + 1.februar, + null, + 30000.månedlig, + ARBEIDSGIVER + ) ), inspektør(a2).refusjonsopplysningerFraVilkårsgrunnlag(1.januar) ) @@ -504,18 +763,28 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { val inntekter = listOf( grunnlag( a1, finnSkjæringstidspunkt( - a1, 1.vedtaksperiode - ), 10000.månedlig.repeat(3) + a1, 1.vedtaksperiode + ), 10000.månedlig.repeat(3) ), grunnlag( a2, finnSkjæringstidspunkt( - a1, 1.vedtaksperiode - ), 20000.månedlig.repeat(3) + a1, 1.vedtaksperiode + ), 20000.månedlig.repeat(3) ) ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( 1.vedtaksperiode, @@ -596,7 +865,12 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { val arbeidsforhold = listOf( Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), 31.desember(2017), Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.desember(2017), + 31.desember(2017), + Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -638,8 +912,18 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -683,8 +967,18 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -727,8 +1021,18 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -776,8 +1080,18 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 10000.månedlig.repeat(3)) ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = 31.desember(2017), ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = 31.desember(2017), + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( 1.vedtaksperiode, @@ -789,7 +1103,8 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(120000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -798,7 +1113,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { assertEquals(EN_ARBEIDSGIVER, inspektør(a1).inntektskilde(1.vedtaksperiode)) assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { - assertEquals(no.nav.helse.person.inntekt.Inntektsmelding::class, it.inntektsopplysning::class) + assertEquals( + no.nav.helse.person.inntekt.Inntektsmelding::class, + it.inntektsopplysning::class + ) } } @@ -816,8 +1134,18 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 10000.månedlig.repeat(3)) ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = 2.januar, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = 2.januar, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( 1.vedtaksperiode, @@ -829,7 +1157,8 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(120000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -838,7 +1167,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { assertEquals(FLERE_ARBEIDSGIVERE, inspektør(a1).inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { - assertEquals(no.nav.helse.person.inntekt.Inntektsmelding::class, it.inntektsopplysning::class) + assertEquals( + no.nav.helse.person.inntekt.Inntektsmelding::class, + it.inntektsopplysning::class + ) } sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { assertEquals(IkkeRapportert::class, it.inntektsopplysning::class) @@ -860,8 +1192,18 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { grunnlag(a2, 1.mars.minusMonths(2), listOf(500.månedlig)), ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( 1.vedtaksperiode, @@ -873,7 +1215,8 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(120000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -882,7 +1225,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { assertEquals(EN_ARBEIDSGIVER, inspektør(a1).inntektskilde(1.vedtaksperiode)) assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { - assertEquals(no.nav.helse.person.inntekt.Inntektsmelding::class, it.inntektsopplysning::class) + assertEquals( + no.nav.helse.person.inntekt.Inntektsmelding::class, + it.inntektsopplysning::class + ) } } @@ -916,8 +1262,18 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -961,8 +1317,18 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -1003,8 +1369,18 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = 1.november(2017), ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = 1.november(2017), + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -1020,7 +1396,8 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(360000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -1029,7 +1406,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { assertEquals(FLERE_ARBEIDSGIVERE, inspektør(a1).inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { - assertEquals(no.nav.helse.person.inntekt.Inntektsmelding::class, it.inntektsopplysning::class) + assertEquals( + no.nav.helse.person.inntekt.Inntektsmelding::class, + it.inntektsopplysning::class + ) } sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { assertEquals(IkkeRapportert::class, it.inntektsopplysning::class) @@ -1055,8 +1435,18 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = 1.november(2017), ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = 1.november(2017), + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -1069,11 +1459,21 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) - håndterOverstyrArbeidsforhold(1.januar, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "Jeg, en saksbehandler, overstyrte pga 8-15"))) + håndterOverstyrArbeidsforhold( + 1.januar, + listOf( + OverstyrArbeidsforhold.ArbeidsforholdOverstyrt( + a2, + true, + "Jeg, en saksbehandler, overstyrte pga 8-15" + ) + ) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(360000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -1082,7 +1482,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { assertEquals(EN_ARBEIDSGIVER, inspektør(a1).inntektskilde(1.vedtaksperiode)) assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { - assertEquals(no.nav.helse.person.inntekt.Inntektsmelding::class, it.inntektsopplysning::class) + assertEquals( + no.nav.helse.person.inntekt.Inntektsmelding::class, + it.inntektsopplysning::class + ) } assertVarsel(RV_VV_2, 1.vedtaksperiode.filter(a1)) @@ -1152,29 +1555,40 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT) - ) + Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT) + ) ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) val skjæringstidspunkt = inspektør.skjæringstidspunkt(1.vedtaksperiode) - val relevanteOrgnumre1: Iterable = hendelselogg.etterspurtBehov(1.vedtaksperiode.id(ORGNUMMER), Behovtype.Godkjenning, "orgnummereMedRelevanteArbeidsforhold") ?: fail { "forventet orgnummereMedRelevanteArbeidsforhold" } + val relevanteOrgnumre1: Iterable = hendelselogg.etterspurtBehov( + 1.vedtaksperiode.id(ORGNUMMER), + Behovtype.Godkjenning, + "orgnummereMedRelevanteArbeidsforhold" + ) ?: fail { "forventet orgnummereMedRelevanteArbeidsforhold" } assertEquals(listOf(a1, a2).toList(), relevanteOrgnumre1.toList()) - håndterOverstyrArbeidsforhold(skjæringstidspunkt, listOf( + håndterOverstyrArbeidsforhold( + skjæringstidspunkt, listOf( OverstyrArbeidsforhold.ArbeidsforholdOverstyrt( a2, true, "forklaring" ) - )) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør - val relevanteOrgnumre2: Iterable = hendelselogg.etterspurtBehov(1.vedtaksperiode.id(ORGNUMMER), Behovtype.Godkjenning, "orgnummereMedRelevanteArbeidsforhold") ?: fail { "forventet orgnummereMedRelevanteArbeidsforhold" } + val relevanteOrgnumre2: Iterable = hendelselogg.etterspurtBehov( + 1.vedtaksperiode.id(ORGNUMMER), + Behovtype.Godkjenning, + "orgnummereMedRelevanteArbeidsforhold" + ) ?: fail { "forventet orgnummereMedRelevanteArbeidsforhold" } assertEquals(listOf(a1), relevanteOrgnumre2.toList()) assertEquals(listOf(a2), sykepengegrunnlagInspektør.deaktiverteArbeidsforhold) @@ -1184,7 +1598,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { assertEquals(EN_ARBEIDSGIVER, inspektør(a1).inntektskilde(1.vedtaksperiode)) assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { - assertEquals(no.nav.helse.person.inntekt.Inntektsmelding::class, it.inntektsopplysning::class) + assertEquals( + no.nav.helse.person.inntekt.Inntektsmelding::class, + it.inntektsopplysning::class + ) } } @@ -1202,13 +1619,16 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, a1) - assertInntektstype(1.januar, mapOf(a1 to InntektsmeldingInntekt::class, a2 to SkattSykepengegrunnlag::class)) + assertInntektstype( + 1.januar, + mapOf(a1 to InntektsmeldingInntekt::class, a2 to SkattSykepengegrunnlag::class) + ) // IM for tidligere ghost a2 sparker igang revurdering på a1 håndterInntektsmelding( listOf(16.mars til 31.mars), førsteFraværsdag = 16.mars, - refusjon = Inntektsmelding.Refusjon(INNTEKT,null, emptyList()), + refusjon = Inntektsmelding.Refusjon(INNTEKT, null, emptyList()), orgnummer = a2, avsendersystem = ALTINN ) @@ -1216,7 +1636,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, a2) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - assertInntektstype(1.januar, mapOf(a1 to InntektsmeldingInntekt::class, a2 to SkattSykepengegrunnlag::class)) + assertInntektstype( + 1.januar, + mapOf(a1 to InntektsmeldingInntekt::class, a2 to SkattSykepengegrunnlag::class) + ) // Her står saken nå (*NÅ*) @@ -1250,13 +1673,16 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, a1) - assertInntektstype(1.januar, mapOf(a1 to InntektsmeldingInntekt::class, a2 to SkattSykepengegrunnlag::class)) + assertInntektstype( + 1.januar, + mapOf(a1 to InntektsmeldingInntekt::class, a2 to SkattSykepengegrunnlag::class) + ) // IM for tidligere ghost a2 sparker igang revurdering på a1 håndterInntektsmelding( listOf(16.mars til 31.mars), førsteFraværsdag = 16.mars, - refusjon = Inntektsmelding.Refusjon(INNTEKT,null, emptyList()), + refusjon = Inntektsmelding.Refusjon(INNTEKT, null, emptyList()), orgnummer = a2, vedtaksperiodeIdInnhenter = 1.vedtaksperiode, avsendersystem = NAV_NO @@ -1265,7 +1691,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, a2) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - assertInntektstype(1.januar, mapOf(a1 to InntektsmeldingInntekt::class, a2 to InntektsmeldingInntekt::class)) + assertInntektstype( + 1.januar, + mapOf(a1 to InntektsmeldingInntekt::class, a2 to InntektsmeldingInntekt::class) + ) } @Test @@ -1301,15 +1730,23 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterSimulering(1.vedtaksperiode, orgnummer = a1) val utbetaling1 = inspektør(a1).utbetaling(0) assertEquals(74, utbetaling1.utbetalingstidslinje[1.januar].økonomi.inspektør.totalGrad) - håndterOverstyrArbeidsforhold(1.januar, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + 1.januar, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring")) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK, orgnummer = a1) } - private fun assertInntektstype(skjæringstidspunkt: LocalDate, forventet: Map>) { - val arbeidsgiverInntektsopplysninger = inspektør.vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger + private fun assertInntektstype( + skjæringstidspunkt: LocalDate, + forventet: Map> + ) { + val arbeidsgiverInntektsopplysninger = + inspektør.vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger forventet.forEach { (organisasjonsnummer, forventetInntektstype) -> - val inntektsopplysning = arbeidsgiverInntektsopplysninger.single { it.gjelder(organisasjonsnummer) }.inspektør.inntektsopplysning + val inntektsopplysning = + arbeidsgiverInntektsopplysninger.single { it.gjelder(organisasjonsnummer) }.inspektør.inntektsopplysning assertEquals(forventetInntektstype, inntektsopplysning::class) } } @@ -1331,7 +1768,10 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { håndterUtbetalt(orgnummer = a1) } - private fun håndterVilkårsgrunnlagGhost(vedtaksperiodeIdInnhenter: IdInnhenter, orgnummer: String) { + private fun håndterVilkårsgrunnlagGhost( + vedtaksperiodeIdInnhenter: IdInnhenter, + orgnummer: String + ) { val skjæringstidspunkt = finnSkjæringstidspunkt(orgnummer, vedtaksperiodeIdInnhenter) val inntekter = listOf( grunnlag(a1, skjæringstidspunkt, 31000.månedlig.repeat(3)), @@ -1358,4 +1798,4 @@ internal class FlereArbeidsgivereGhostTest : AbstractEndToEndTest() { block() assertInfo(forventetInfo) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereTest.kt index d83c039448..2d8b819f72 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereTest.kt @@ -83,8 +83,22 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { fun `en gjenskapning fra virkeligheten med foreldrepenger, ferie og en spenstig IM blant annet`() { (a1 og a2).nyeVedtak(januar) (a1 og a2).forlengVedtak(februar) - a1 { håndterOverstyrTidslinje((1..28).map { ManuellOverskrivingDag(it.februar, Dagtype.Foreldrepengerdag) }) } - a2 { håndterOverstyrTidslinje((1..28).map { ManuellOverskrivingDag(it.februar, Dagtype.Foreldrepengerdag) }) } + a1 { + håndterOverstyrTidslinje((1..28).map { + ManuellOverskrivingDag( + it.februar, + Dagtype.Foreldrepengerdag + ) + }) + } + a2 { + håndterOverstyrTidslinje((1..28).map { + ManuellOverskrivingDag( + it.februar, + Dagtype.Foreldrepengerdag + ) + }) + } a1 { håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -103,7 +117,11 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { } a2 { håndterSøknad(Sykdom(1.mars, 31.mars, 100.prosent), Ferie(1.mars, 14.mars)) - håndterInntektsmelding(emptyList(), førsteFraværsdag = 15.februar, begrunnelseForReduksjonEllerIkkeUtbetalt = "fox") + håndterInntektsmelding( + emptyList(), + førsteFraværsdag = 15.februar, + begrunnelseForReduksjonEllerIkkeUtbetalt = "fox" + ) assertEquals(15.mars, inspektør.skjæringstidspunkt(3.vedtaksperiode)) } a1 { @@ -129,15 +147,24 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a1 { håndterInntektsmelding(listOf(1.januar til 16.januar)) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT, a3 to INNTEKT), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT, + a3 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), Arbeidsforhold(a3, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), ), orgnummer = a1 ) - val inntekter = inspektør.vilkårsgrunnlag(1.januar)?.inspektør?.inntektsgrunnlag?.inspektør?.arbeidsgiverInntektsopplysninger ?: emptyList() + val inntekter = + inspektør.vilkårsgrunnlag(1.januar)?.inspektør?.inntektsgrunnlag?.inspektør?.arbeidsgiverInntektsopplysninger + ?: emptyList() assertEquals(3, inntekter.size) assertTrue(inntekter.single { it.gjelder(a1) }.inspektør.inntektsopplysning is no.nav.helse.person.inntekt.Inntektsmelding) assertTrue(inntekter.single { it.gjelder(a2) }.inspektør.inntektsopplysning is no.nav.helse.person.inntekt.Inntektsmelding) @@ -161,9 +188,13 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { } a1 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT * 1.1, forklaring = "yepp"))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT * 1.1, forklaring = "yepp")) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) - val venterPå = observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode }.venterPå + val venterPå = + observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode }.venterPå assertEquals("a3", venterPå.organisasjonsnummer) assertEquals("INNTEKTSMELDING", venterPå.venteårsak.hva) assertNull(venterPå.venteårsak.hvorfor) @@ -215,7 +246,12 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { observatør.vedtaksperiodeVenter.clear() håndterInntektsmelding(listOf(1.januar til 16.januar)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) assertEquals(0, observatør.vedtaksperiodeVenter.size) } } @@ -316,7 +352,10 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a2 { håndterInntektsmelding(listOf(7.januar til 22.januar), førsteFraværsdag = 1.februar) // denne inntektsmeldingen lagrer refusjonsopplysninger uten første fraværsdag. Uten denne IMen så er testen useless - håndterInntektsmelding(listOf(7.januar til 22.januar), begrunnelseForReduksjonEllerIkkeUtbetalt = "IkkeFravaer") + håndterInntektsmelding( + listOf(7.januar til 22.januar), + begrunnelseForReduksjonEllerIkkeUtbetalt = "IkkeFravaer" + ) } a1 { håndterVilkårsgrunnlag(1.vedtaksperiode) @@ -339,7 +378,12 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a2 { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterOverstyrTidslinje((7.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Arbeidsdag) }) + håndterOverstyrTidslinje((7.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Arbeidsdag + ) + }) } a1 { håndterYtelser(1.vedtaksperiode) @@ -373,12 +417,18 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { Sykdom(mandag den 22.januar, 23.januar, 100.prosent), egenmeldinger = listOf(fredag den 19.januar til fredag den 19.januar) ) - håndterInntektsmelding(listOf(3.januar til 17.januar, 19.januar.somPeriode()), beregnetInntekt = INNTEKT) - håndterVilkårsgrunnlag(2.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf( - a1 to INNTEKT, - a2 to INNTEKT - ), 19.januar), + håndterInntektsmelding( + listOf(3.januar til 17.januar, 19.januar.somPeriode()), + beregnetInntekt = INNTEKT + ) + håndterVilkårsgrunnlag( + 2.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 19.januar + ), arbeidsforhold = listOf( Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) @@ -393,24 +443,48 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a2 { nyPeriode(24.januar til 31.januar) nullstillTilstandsendringer() - håndterInntektsmelding(listOf( - 8.januar til onsdag den 17.januar, - // nå blir helgen 20. januar - 21.januar tolket som frisk, - // og flytter i praksis skjæringstidspunktet fra 19. januar til 22. januar - mandag den 22.januar til 25.januar - )) + håndterInntektsmelding( + listOf( + 8.januar til onsdag den 17.januar, + // nå blir helgen 20. januar - 21.januar tolket som frisk, + // og flytter i praksis skjæringstidspunktet fra 19. januar til 22. januar + mandag den 22.januar til 25.januar + ) + ) } a1 { - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) - assertInfo("Kopierte inntekt som lå lagret på 2018-01-19 til 2018-01-22", 2.vedtaksperiode.filter()) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) + assertInfo( + "Kopierte inntekt som lå lagret på 2018-01-19 til 2018-01-22", + 2.vedtaksperiode.filter() + ) assertTilstander(3.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } a2 { - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) - assertTilstander(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) + assertTilstander( + 3.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE + ) } } @@ -419,12 +493,19 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a1 { nyPeriode(1.januar til 16.januar) nyPeriode(20.januar til 31.januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 20.januar, beregnetInntekt = INNTEKT) - håndterVilkårsgrunnlag(2.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf( - a1 to INNTEKT, - a2 to INNTEKT - ), 1.januar), + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 20.januar, + beregnetInntekt = INNTEKT + ) + håndterVilkårsgrunnlag( + 2.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) @@ -434,7 +515,11 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { håndterSimulering(2.vedtaksperiode) } a2 { - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 20.januar, beregnetInntekt = INNTEKT) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 20.januar, + beregnetInntekt = INNTEKT + ) nyPeriode(20.januar til 31.januar) } @@ -481,7 +566,10 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { } a2 { håndterSykmelding(februar) - håndterSøknad(Sykdom(3.februar, 28.februar, 100.prosent), egenmeldinger = listOf(1.februar til 1.februar)) + håndterSøknad( + Sykdom(3.februar, 28.februar, 100.prosent), + egenmeldinger = listOf(1.februar til 1.februar) + ) assertSisteTilstand(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING) } } @@ -494,21 +582,34 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) ) - listOf(a1).nyeVedtak(januar, inntekt = inntekt, sykepengegrunnlagSkatt = lagStandardSykepengegrunnlag(inntekter, 1.januar), arbeidsforhold = arbeidsforhold) + listOf(a1).nyeVedtak( + januar, + inntekt = inntekt, + sykepengegrunnlagSkatt = lagStandardSykepengegrunnlag(inntekter, 1.januar), + arbeidsforhold = arbeidsforhold + ) listOf(a1).forlengVedtak(februar) a2 { - tilGodkjenning(april, beregnetInntekt = inntekt, sykepengegrunnlagSkatt = lagStandardSykepengegrunnlag(inntekter, 1.april), arbeidsforhold = arbeidsforhold) + tilGodkjenning( + april, + beregnetInntekt = inntekt, + sykepengegrunnlagSkatt = lagStandardSykepengegrunnlag(inntekter, 1.april), + arbeidsforhold = arbeidsforhold + ) } listOf(a1).forlengVedtak(mars) a2 { - assertInfo("Kopierte inntekt som lå lagret på 2018-04-01 til 2018-01-01", 1.vedtaksperiode.filter()) + assertInfo( + "Kopierte inntekt som lå lagret på 2018-04-01 til 2018-01-01", + 1.vedtaksperiode.filter() + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK) } } @Test - fun `Beholder skatt i sykepengegrunnlag ved inntektsmelding i annen måned enn skjæringstidspunktet` () { + fun `Beholder skatt i sykepengegrunnlag ved inntektsmelding i annen måned enn skjæringstidspunktet`() { val a2Inntektsmelding = UUID.randomUUID() a1 { @@ -521,14 +622,27 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) - assertTrue(inspektør.inntektsopplysning(1.vedtaksperiode, a1) is InntektFraInntektsmelding) + assertTrue( + inspektør.inntektsopplysning( + 1.vedtaksperiode, + a1 + ) is InntektFraInntektsmelding + ) assertTrue(inspektør.inntektsopplysning(1.vedtaksperiode, a2) is SkattSykepengegrunnlag) } a2 { - assertEquals(emptyList(), inspektør.refusjonsopplysningerFraVilkårsgrunnlag(1.januar)) + assertEquals( + emptyList(), + inspektør.refusjonsopplysningerFraVilkårsgrunnlag(1.januar) + ) håndterSøknad(februar) - håndterInntektsmelding(listOf(1.februar til 16.februar), førsteFraværsdag = 1.februar, beregnetInntekt = INNTEKT, id = a2Inntektsmelding) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + førsteFraværsdag = 1.februar, + beregnetInntekt = INNTEKT, + id = a2Inntektsmelding + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } @@ -546,10 +660,18 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { håndterUtbetalt() assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(a2Inntektsmelding, 1.januar, 31.januar, INNTEKT, ARBEIDSGIVER), - Refusjonsopplysning(a2Inntektsmelding, 1.februar, null, INNTEKT, ARBEIDSGIVER), - ), inspektør.refusjonsopplysningerFraVilkårsgrunnlag(1.januar)) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + a2Inntektsmelding, + 1.januar, + 31.januar, + INNTEKT, + ARBEIDSGIVER + ), + Refusjonsopplysning(a2Inntektsmelding, 1.februar, null, INNTEKT, ARBEIDSGIVER), + ), inspektør.refusjonsopplysningerFraVilkårsgrunnlag(1.januar) + ) assertTrue(inspektør.inntektsopplysning(1.vedtaksperiode, a2) is SkattSykepengegrunnlag) } @@ -560,19 +682,30 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { val a1Inntekt = 44000.månedlig val a2Inntekt = 12000.månedlig - a1 { håndterSykmelding(10.januar til 31.januar)} - a2 { håndterSykmelding(10.januar til 31.januar)} + a1 { håndterSykmelding(10.januar til 31.januar) } + a2 { håndterSykmelding(10.januar til 31.januar) } a1 { håndterSøknad(10.januar til 31.januar) - håndterInntektsmelding(listOf(1.januar til 1.januar, 8.januar til 22.januar), beregnetInntekt = a1Inntekt) - assertEquals(listOf(1.januar til 1.januar, 8.januar til 22.januar), inspektør.arbeidsgiverperioder { 1.vedtaksperiode }) + håndterInntektsmelding( + listOf(1.januar til 1.januar, 8.januar til 22.januar), + beregnetInntekt = a1Inntekt + ) + assertEquals( + listOf(1.januar til 1.januar, 8.januar til 22.januar), + inspektør.arbeidsgiverperioder { 1.vedtaksperiode }) } a2 { håndterSøknad(10.januar til 31.januar) - håndterInntektsmelding(listOf(8.januar til 23.januar), beregnetInntekt = a2Inntekt, refusjon = Inntektsmelding.Refusjon(INGEN, null, emptyList())) - assertEquals(listOf(8.januar til 23.januar), inspektør.arbeidsgiverperiode { 1.vedtaksperiode }) + håndterInntektsmelding( + listOf(8.januar til 23.januar), + beregnetInntekt = a2Inntekt, + refusjon = Inntektsmelding.Refusjon(INGEN, null, emptyList()) + ) + assertEquals( + listOf(8.januar til 23.januar), + inspektør.arbeidsgiverperiode { 1.vedtaksperiode }) } a1 { @@ -590,7 +723,7 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { } a1 { - val `23Januar`= inspektør.utbetalingstidslinjer(1.vedtaksperiode)[23.januar] + val `23Januar` = inspektør.utbetalingstidslinjer(1.vedtaksperiode)[23.januar] assertTrue(`23Januar` is NavDag) assertEquals(1698, `23Januar`.arbeidsgiverbeløp) assertEquals(0, `23Januar`.personbeløp) @@ -602,7 +735,7 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { } a2 { - val `23Januar`= inspektør.utbetalingstidslinjer(1.vedtaksperiode)[23.januar] + val `23Januar` = inspektør.utbetalingstidslinjer(1.vedtaksperiode)[23.januar] assertTrue(`23Januar` is ArbeidsgiverperiodeDag) val `24Januar` = inspektør.utbetalingstidslinjer(1.vedtaksperiode)[24.januar] @@ -617,11 +750,17 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a1 { nyttVedtak(januar, 100.prosent) } nyPeriode(1.februar til 14.februar, a1, a2) a1 { - assertEquals(1.januar, inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.skjæringstidspunkt) + assertEquals( + 1.januar, + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.skjæringstidspunkt + ) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK) } a2 { - assertEquals(1.januar, inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.skjæringstidspunkt) + assertEquals( + 1.januar, + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.skjæringstidspunkt + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) } a1 { @@ -798,7 +937,10 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) } a2 { - assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) // sitter fast her fordi overlappende periode hos arbeidsgiver 1 mangler refusjonsopplysninger + assertSisteTilstand( + 1.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE + ) // sitter fast her fordi overlappende periode hos arbeidsgiver 1 mangler refusjonsopplysninger assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) } } @@ -828,7 +970,10 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a2 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) håndterInntektsmelding( - arbeidsgiverperioder = listOf(1.januar(2021) til 3.januar(2021), 6.januar(2021) til 18.januar(2021)), + arbeidsgiverperioder = listOf( + 1.januar(2021) til 3.januar(2021), + 6.januar(2021) til 18.januar(2021) + ), beregnetInntekt = 1000.månedlig ) } @@ -857,14 +1002,18 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a1 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) } a2 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) } a1 { - håndterInntektsmelding(listOf(31.desember(2020) til 15.januar(2021)) + håndterInntektsmelding( + listOf(31.desember(2020) til 15.januar(2021)) ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } a2 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) håndterInntektsmelding( - arbeidsgiverperioder = listOf(1.januar(2021) til 3.januar(2021), 6.januar(2021) til 18.januar(2021)), + arbeidsgiverperioder = listOf( + 1.januar(2021) til 3.januar(2021), + 6.januar(2021) til 18.januar(2021) + ), beregnetInntekt = 1000.månedlig ) } @@ -879,7 +1028,8 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a2 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } inspiser(personInspektør).also { inspektør -> - val vilkårsgrunnlagInnslag = inspektør.vilkårsgrunnlagHistorikk.vilkårsgrunnlagHistorikkInnslag() + val vilkårsgrunnlagInnslag = + inspektør.vilkårsgrunnlagHistorikk.vilkårsgrunnlagHistorikkInnslag() assertEquals(1, vilkårsgrunnlagInnslag.size) } } @@ -898,14 +1048,18 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a1 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) } a2 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) } a1 { - håndterInntektsmelding(listOf(31.desember(2020) til 15.januar(2021)) + håndterInntektsmelding( + listOf(31.desember(2020) til 15.januar(2021)) ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } a2 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) håndterInntektsmelding( - arbeidsgiverperioder = listOf(1.januar(2021) til 3.januar(2021), 6.januar(2021) til 18.januar(2021)), + arbeidsgiverperioder = listOf( + 1.januar(2021) til 3.januar(2021), + 6.januar(2021) til 18.januar(2021) + ), beregnetInntekt = 1000.månedlig ) } @@ -940,7 +1094,7 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { håndterInntektsmelding( arbeidsgiverperioder = listOf(1.januar(2021) til 16.januar(2021)), - ) + ) assertSisteTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } a2 { @@ -948,7 +1102,7 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { håndterInntektsmelding( arbeidsgiverperioder = listOf(1.januar(2021) til 16.januar(2021)), - ) + ) } a1 { assertSisteTilstand(2.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) } a2 { assertSisteTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } @@ -1049,14 +1203,14 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { arbeidsgiverperioder = listOf(Periode(1.januar, 16.januar)), beregnetInntekt = 20000.månedlig, - ) + ) } a2 { håndterInntektsmelding( arbeidsgiverperioder = listOf(Periode(1.januar, 16.januar)), beregnetInntekt = 20000.månedlig, - ) + ) } a1 { håndterVilkårsgrunnlag(1.vedtaksperiode) @@ -1089,8 +1243,8 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, - AVVENTER_HISTORIKK, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, @@ -1107,10 +1261,22 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { AVSLUTTET ) assertIngenFunksjonelleFeil() - assertEquals(1, inspektør.avsluttedeUtbetalingerForVedtaksperiode(1.vedtaksperiode).size) - assertEquals(0, inspektør.ikkeUtbetalteUtbetalingerForVedtaksperiode(1.vedtaksperiode).size) - assertEquals(1, inspektør.avsluttedeUtbetalingerForVedtaksperiode(2.vedtaksperiode).size) - assertEquals(0, inspektør.ikkeUtbetalteUtbetalingerForVedtaksperiode(2.vedtaksperiode).size) + assertEquals( + 1, + inspektør.avsluttedeUtbetalingerForVedtaksperiode(1.vedtaksperiode).size + ) + assertEquals( + 0, + inspektør.ikkeUtbetalteUtbetalingerForVedtaksperiode(1.vedtaksperiode).size + ) + assertEquals( + 1, + inspektør.avsluttedeUtbetalingerForVedtaksperiode(2.vedtaksperiode).size + ) + assertEquals( + 0, + inspektør.ikkeUtbetalteUtbetalingerForVedtaksperiode(2.vedtaksperiode).size + ) } a2 { @@ -1134,10 +1300,22 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { AVVENTER_GODKJENNING ) assertIngenFunksjonelleFeil() - assertEquals(1, inspektør.avsluttedeUtbetalingerForVedtaksperiode(1.vedtaksperiode).size) - assertEquals(0, inspektør.ikkeUtbetalteUtbetalingerForVedtaksperiode(1.vedtaksperiode).size) - assertEquals(0, inspektør.avsluttedeUtbetalingerForVedtaksperiode(2.vedtaksperiode).size) - assertEquals(1, inspektør.ikkeUtbetalteUtbetalingerForVedtaksperiode(2.vedtaksperiode).size) + assertEquals( + 1, + inspektør.avsluttedeUtbetalingerForVedtaksperiode(1.vedtaksperiode).size + ) + assertEquals( + 0, + inspektør.ikkeUtbetalteUtbetalingerForVedtaksperiode(1.vedtaksperiode).size + ) + assertEquals( + 0, + inspektør.avsluttedeUtbetalingerForVedtaksperiode(2.vedtaksperiode).size + ) + assertEquals( + 1, + inspektør.ikkeUtbetalteUtbetalingerForVedtaksperiode(2.vedtaksperiode).size + ) } } @@ -1155,7 +1333,7 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - ) + ) } } @@ -1178,9 +1356,9 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, - ) + ) } a2 { assertTilstander( @@ -1189,7 +1367,7 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - ) + ) } } @@ -1214,7 +1392,10 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { ) ) håndterYtelser(1.vedtaksperiode) - assertEquals(0, a1.inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.avvistDagTeller) + assertEquals( + 0, + a1.inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.avvistDagTeller + ) } } @@ -1227,9 +1408,20 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a2 { håndterSøknad(22.januar til 31.januar) } a1 { håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 20.januar) } // Sender med en annen inntekt enn i forrige IM for å kunne asserte på at det er denne vi bruker - a2 { håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 32000.månedlig, førsteFraværsdag = 22.januar) } + a2 { + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 32000.månedlig, + førsteFraværsdag = 22.januar + ) + } a1 { håndterInntektsmelding(listOf(1.januar til 16.januar)) } - a2 { håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 31000.månedlig) } + a2 { + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 31000.månedlig + ) + } val sykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( grunnlag(a1, 20.januar, INNTEKT.repeat(3)), @@ -1241,7 +1433,7 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { 1.vedtaksperiode, inntektsvurderingForSykepengegrunnlag = sykepengegrunnlag, - ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -1293,7 +1485,10 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) assertIngenFunksjonelleFeil(2.vedtaksperiode.filter()) - assertEquals(UtbetalingInntektskilde.EN_ARBEIDSGIVER, a1.inspektør.inntektskilde(2.vedtaksperiode)) + assertEquals( + UtbetalingInntektskilde.EN_ARBEIDSGIVER, + a1.inspektør.inntektskilde(2.vedtaksperiode) + ) } a2 { val vilkårsgrunnlag = a2.inspektør.vilkårsgrunnlag(1.vedtaksperiode) @@ -1333,7 +1528,8 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a1 { håndterSøknad(17.januar til 31.januar) } a2 { håndterSøknad(17.januar til 31.januar) } a1 { - assertTilstander(1.vedtaksperiode, + assertTilstander( + 1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, @@ -1343,20 +1539,27 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING ) - assertTilstander(2.vedtaksperiode, + assertTilstander( + 2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING ) } a2 { - assertTilstander(1.vedtaksperiode, + assertTilstander( + 1.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING ) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE + ) } } @@ -1456,7 +1659,7 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { 1.vedtaksperiode, inntektsvurderingForSykepengegrunnlag = sykepengegrunnlag, arbeidsforhold = arbeidsforhold - ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -1503,7 +1706,12 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { } a2 { - håndterInntektsmelding(listOf(3.januar til 18.januar), beregnetInntekt = INNTEKT, refusjon = Inntektsmelding.Refusjon(INNTEKT, null), førsteFraværsdag = 3.januar) + håndterInntektsmelding( + listOf(3.januar til 18.januar), + beregnetInntekt = INNTEKT, + refusjon = Inntektsmelding.Refusjon(INNTEKT, null), + førsteFraværsdag = 3.januar + ) nyPeriode(februar) } @@ -1515,7 +1723,13 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { } a2 { - håndterInntektsmelding(listOf(3.januar til 18.januar), førsteFraværsdag = 1.februar, beregnetInntekt = INNTEKT, refusjon = Inntektsmelding.Refusjon(INNTEKT, null), begrunnelseForReduksjonEllerIkkeUtbetalt = "TidligereVirksomhet") + håndterInntektsmelding( + listOf(3.januar til 18.januar), + førsteFraværsdag = 1.februar, + beregnetInntekt = INNTEKT, + refusjon = Inntektsmelding.Refusjon(INNTEKT, null), + begrunnelseForReduksjonEllerIkkeUtbetalt = "TidligereVirksomhet" + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) } @@ -1547,7 +1761,8 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { håndterSimulering(2.vedtaksperiode) } a1 { - inspektør.utbetalinger(2.vedtaksperiode).last().inspektør.utbetalingstidslinje.also { utbetalingstidslinje -> + inspektør.utbetalinger(2.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.also { utbetalingstidslinje -> assertEquals(100, utbetalingstidslinje[12.januar].økonomi.inspektør.totalGrad) } assertSisteTilstand(2.vedtaksperiode, AVVENTER_GODKJENNING) @@ -1555,10 +1770,21 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { a2 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } } - private val Utbetalingsdag.arbeidsgiverbeløp get() = this.økonomi.inspektør.arbeidsgiverbeløp?.dagligInt ?: 0 - private val Utbetalingsdag.personbeløp get() = this.økonomi.inspektør.personbeløp?.dagligInt ?: 0 - private fun TestArbeidsgiverInspektør.inntektsopplysning(vedtaksperiode: UUID, orgnr: String) = vilkårsgrunnlag(vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.first { it.gjelder(orgnr) }.inspektør.inntektsopplysning - private fun TestPerson.TestArbeidsgiver.håndterVilkårsgrunnlagMedGhostArbeidsforhold(vedtaksperiode: UUID, skjæringstidspunkt: LocalDate = 1.januar, inntekt: Inntekt = INNTEKT) { + private val Utbetalingsdag.arbeidsgiverbeløp + get() = this.økonomi.inspektør.arbeidsgiverbeløp?.dagligInt ?: 0 + private val Utbetalingsdag.personbeløp + get() = this.økonomi.inspektør.personbeløp?.dagligInt ?: 0 + + private fun TestArbeidsgiverInspektør.inntektsopplysning(vedtaksperiode: UUID, orgnr: String) = + vilkårsgrunnlag(vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.first { + it.gjelder(orgnr) + }.inspektør.inntektsopplysning + + private fun TestPerson.TestArbeidsgiver.håndterVilkårsgrunnlagMedGhostArbeidsforhold( + vedtaksperiode: UUID, + skjæringstidspunkt: LocalDate = 1.januar, + inntekt: Inntekt = INNTEKT + ) { håndterVilkårsgrunnlag( vedtaksperiode, arbeidsforhold = listOf( @@ -1573,4 +1799,4 @@ internal class FlereArbeidsgivereTest : AbstractDslTest() { ) ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereUlikFomTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereUlikFomTest.kt index b80a0dd120..7a069dc9d8 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereUlikFomTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereUlikFomTest.kt @@ -88,11 +88,25 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { fun `Gjenbruk av tidsnære opplysninger slår ikke til ved skatteinntekt i inntektsgrunnlaget`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) ), orgnummer = a1 ) @@ -102,7 +116,11 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterUtbetalt() håndterSøknad(februar, orgnummer = a2) - håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a2, avsendersystem = LPS) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + orgnummer = a2, + avsendersystem = LPS + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) @@ -119,7 +137,10 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { nullstillTilstandsendringer() observatør.vedtaksperiodeVenter.clear() - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(1.februar, Dagtype.Arbeidsdag)), orgnummer = a2) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(1.februar, Dagtype.Arbeidsdag)), + orgnummer = a2 + ) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) assertForventetFeil( @@ -132,7 +153,12 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { assertEquals("SKJÆRINGSTIDSPUNKT_FLYTTET_REVURDERING", venterPå.venteårsak.hvorfor) }, ønsket = { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_VILKÅRSPRØVING_REVURDERING, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_VILKÅRSPRØVING_REVURDERING, + orgnummer = a2 + ) } ) } @@ -170,8 +196,16 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { fun `ag2 forkaster ikke utbetaling tildelt av ag1`() { nyPeriode(1.januar til 20.januar, a1) nyPeriode(1.januar til 20.januar, a2) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT / 2, orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT / 2, orgnummer = a2) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT / 2, + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT / 2, + orgnummer = a2 + ) håndterVilkårsgrunnlag(1.vedtaksperiode, orgnummer = a1) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) @@ -190,12 +224,23 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { fun `ag2 forkaster utbetaling tildelt av ag1 om det har skjedd endringer i mellomtiden`() { nyPeriode(1.januar til 20.januar, a1) nyPeriode(1.januar til 20.januar, a2) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT / 2, orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT / 2, orgnummer = a2) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT / 2, + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT / 2, + orgnummer = a2 + ) håndterVilkårsgrunnlag(1.vedtaksperiode, orgnummer = a1) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(20.januar, Dagtype.Feriedag)), orgnummer = a1) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(20.januar, Dagtype.Feriedag)), + orgnummer = a1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) @@ -218,7 +263,12 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(28.februar, 31.mars, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(5.mars, 31.mars, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(28.februar til 15.mars), førsteFraværsdag = 28.februar, orgnummer = a1, avsendersystem = ALTINN) // ff 1 mars + håndterInntektsmelding( + listOf(28.februar til 15.mars), + førsteFraværsdag = 28.februar, + orgnummer = a1, + avsendersystem = ALTINN + ) // ff 1 mars håndterInntektsmelding( listOf(5.mars til 20.mars), førsteFraværsdag = 5.mars, @@ -246,7 +296,8 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode, orgnummer = a2) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(612000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -305,7 +356,8 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode, orgnummer = a2) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(576000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -332,7 +384,12 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(28.februar, 31.mars, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(5.mars, 31.mars, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(28.februar til 15.mars), førsteFraværsdag = 28.februar, orgnummer = a1, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(28.februar til 15.mars), + førsteFraværsdag = 28.februar, + orgnummer = a1, + avsendersystem = ALTINN + ) håndterInntektsmelding( listOf(5.mars til 20.mars), førsteFraværsdag = 5.mars, @@ -343,7 +400,11 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { val inntekter = listOf( grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 31000.månedlig.repeat(3)), - grunnlag(a2, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 20000.månedlig.repeat(2) + 23000.månedlig) + grunnlag( + a2, + finnSkjæringstidspunkt(a1, 1.vedtaksperiode), + 20000.månedlig.repeat(2) + 23000.månedlig + ) ) håndterVilkårsgrunnlag( 1.vedtaksperiode, @@ -360,7 +421,8 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode, orgnummer = a2) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(624000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -564,12 +626,22 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(21.januar, 10.februar, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1, beregnetInntekt = INNTEKT/10) - håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a2, beregnetInntekt = INNTEKT) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + orgnummer = a1, + beregnetInntekt = INNTEKT / 10 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + orgnummer = a2, + beregnetInntekt = INNTEKT + ) håndterVilkårsgrunnlag( - 1.vedtaksperiode, orgnummer = a1, inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( - arbeidsgivere = listOf(a1 to INNTEKT/10, a2 to INNTEKT), + 1.vedtaksperiode, + orgnummer = a1, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + arbeidsgivere = listOf(a1 to INNTEKT / 10, a2 to INNTEKT), skjæringstidspunkt = 1.januar ) ) @@ -596,12 +668,26 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { fun `mursteinspølser og manglende inntektsmelding på a2`() { håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, orgnummer = a1, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ) ) håndterYtelser(1.vedtaksperiode) @@ -613,7 +699,14 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(5.januar, 21.januar, 100.prosent), orgnummer = a2) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + orgnummer = a1 + ) nullstillTilstandsendringer() // Perioden som står i AvventerGodkjenningRevurdering får ikke noe signal om overstyring igangsatt ettersom disse periodene er _etter_ 1.vedtaksperiode // Allikevel kan den ikke beregnes på nytt, fordi mursteinssituasjonen som nå har oppstått gjør at vi mangler refusjonsopplysninger på 22.januar @@ -624,10 +717,19 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { // Om f.eks. saksbehandler overstyrer perioden som står i AvventerGodkjenningRevurdering blir den sittende fast i AvventerRevurdering // Ettersom vi nå må ha inntektsmelding fra a2 for refusjonsopplysninger 22.januar - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT*1.1))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT * 1.1)) + ) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING, orgnummer = a1) - val venterPå = observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }.venterPå + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING, + orgnummer = a1 + ) + val venterPå = + observatør.vedtaksperiodeVenter.last { it.vedtaksperiodeId == 1.vedtaksperiode.id(a1) }.venterPå assertEquals("INNTEKTSMELDING", venterPå.venteårsak.hva) assertEquals(a2, venterPå.organisasjonsnummer) assertEquals(2.vedtaksperiode.id(a2), venterPå.vedtaksperiodeId) @@ -1106,18 +1208,28 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { val inntekter = listOf( grunnlag( a1, finnSkjæringstidspunkt( - a1, 1.vedtaksperiode - ), 10000.månedlig.repeat(3) + a1, 1.vedtaksperiode + ), 10000.månedlig.repeat(3) ), grunnlag( a2, finnSkjæringstidspunkt( - a1, 1.vedtaksperiode - ), 20000.månedlig.repeat(3) + a1, 1.vedtaksperiode + ), 20000.månedlig.repeat(3) ) ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( 1.vedtaksperiode, @@ -1158,18 +1270,28 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { val inntekter = listOf( grunnlag( a1, finnSkjæringstidspunkt( - a1, 1.vedtaksperiode - ), 10000.månedlig.repeat(3) + a1, 1.vedtaksperiode + ), 10000.månedlig.repeat(3) ), grunnlag( a2, finnSkjæringstidspunkt( - a1, 1.vedtaksperiode - ), 20000.månedlig.repeat(3) + a1, 1.vedtaksperiode + ), 20000.månedlig.repeat(3) ) ) val arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a1, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(orgnummer = a2, ansattFom = LocalDate.EPOCH, ansattTom = null, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a1, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer = a2, + ansattFom = LocalDate.EPOCH, + ansattTom = null, + type = Arbeidsforholdtype.ORDINÆRT + ) ) håndterVilkårsgrunnlag( @@ -1333,7 +1455,8 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { orgnummer = a1 ) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(624000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -1360,8 +1483,18 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(28.februar, 30.mars, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(1.mars, 30.mars, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(28.februar til 15.mars), beregnetInntekt = 31000.månedlig, orgnummer = a1, avsendersystem = ALTINN) - håndterInntektsmelding(listOf(1.mars til 16.mars), beregnetInntekt = 21000.månedlig, orgnummer = a2, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(28.februar til 15.mars), + beregnetInntekt = 31000.månedlig, + orgnummer = a1, + avsendersystem = ALTINN + ) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + beregnetInntekt = 21000.månedlig, + orgnummer = a2, + avsendersystem = ALTINN + ) val inntekterFraSkatt = listOf( grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 30000.månedlig.repeat(3)), @@ -1375,7 +1508,8 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { orgnummer = a1 ) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(612000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -1431,7 +1565,12 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(21.januar, 31.januar, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(22.januar, 31.januar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 21.januar, orgnummer = a1, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 21.januar, + orgnummer = a1, + avsendersystem = ALTINN + ) håndterInntektsmelding( listOf(1.januar til 16.januar), førsteFraværsdag = 22.januar, @@ -1454,7 +1593,8 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { orgnummer = a1 ) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(2.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(2.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(756000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -1484,18 +1624,38 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a3) håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a3) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a3) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a3 + ) } @Test fun `søknad for ghost etter utbetalt`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) ), orgnummer = a1 ) @@ -1516,8 +1676,19 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a2) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, orgnummer = a1) nullstillTilstandsendringer() @@ -1533,9 +1704,33 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a2) håndterUtbetalt(orgnummer = a2) - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET, orgnummer = a2) - assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + AVSLUTTET, + orgnummer = a2 + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET, + orgnummer = a1 + ) val revurderingen = inspektør(a1).sisteUtbetaling() assertEquals(2, revurderingen.arbeidsgiverOppdrag.size) @@ -1562,16 +1757,26 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { fun `søknad for ghost etter utbetalt som delvis overlapper med to perioder hos a1`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntektperioderForSykepengegrunnlag { - 1.oktober(2017) til 1.desember(2017) inntekter { - a1 inntekt INNTEKT - a2 inntekt INNTEKT - } - }), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( + inntektperioderForSykepengegrunnlag { + 1.oktober(2017) til 1.desember(2017) inntekter { + a1 inntekt INNTEKT + a2 inntekt INNTEKT + } + }), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) ), orgnummer = a1 ) @@ -1592,8 +1797,18 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterInntektsmelding(listOf(20.januar til 4.februar), orgnummer = a2) - assertTilstander(1.vedtaksperiode, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, orgnummer = a1) nullstillTilstandsendringer() @@ -1610,9 +1825,33 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET, orgnummer = a2) - assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + AVSLUTTET, + orgnummer = a2 + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET, + orgnummer = a1 + ) val revurderingen = inspektør(a1).sisteUtbetaling() assertEquals(2, revurderingen.arbeidsgiverOppdrag.size) @@ -1640,58 +1879,105 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(20.januar, 31.januar, 100.prosent), orgnummer = a2) håndterInntektsmelding(listOf(februar), orgnummer = a1, avsendersystem = ALTINN) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntektperioderForSykepengegrunnlag { - 1.oktober(2017) til 1.desember(2017) inntekter { - a1 inntekt INNTEKT - a2 inntekt INNTEKT - } - }), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( + inntektperioderForSykepengegrunnlag { + 1.oktober(2017) til 1.desember(2017) inntekter { + a1 inntekt INNTEKT + a2 inntekt INNTEKT + } + }), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) ), orgnummer = a1 ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode) ?: fail { "forventer vilkårsgrunnlag" } + val vilkårsgrunnlag = + inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode) ?: fail { "forventer vilkårsgrunnlag" } vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.also { inntekter -> assertEquals(2, inntekter.size) - assertEquals(SkattSykepengegrunnlag::class, inntekter.getValue(a1).inspektør.inntektsopplysning::class) - assertEquals(SkattSykepengegrunnlag::class, inntekter.getValue(a2).inspektør.inntektsopplysning::class) + assertEquals( + SkattSykepengegrunnlag::class, + inntekter.getValue(a1).inspektør.inntektsopplysning::class + ) + assertEquals( + SkattSykepengegrunnlag::class, + inntekter.getValue(a2).inspektør.inntektsopplysning::class + ) } assertIngenVarsel(RV_VV_5, 1.vedtaksperiode.filter(a1)) assertSisteTilstand(1.vedtaksperiode, AVVENTER_SIMULERING, orgnummer = a1) } + @Test fun `skjæringstidspunktet er i måneden før ag1 og ag2 - nyoppstartet arbeidsforhold ag2 - bare inntekt 3 mnd før`() { håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), orgnummer = a2) håndterSøknad(Sykdom(31.januar, 14.februar, 100.prosent), orgnummer = a3) - håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a1, avsendersystem = ALTINN) - håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a2, avsendersystem = ALTINN) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntektperioderForSykepengegrunnlag { - 1.oktober(2017) til 1.desember(2017) inntekter { - a1 inntekt INNTEKT - } - }), + håndterInntektsmelding( + listOf(1.februar til 16.februar), + orgnummer = a1, + avsendersystem = ALTINN + ) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + orgnummer = a2, + avsendersystem = ALTINN + ) + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( + inntektperioderForSykepengegrunnlag { + 1.oktober(2017) til 1.desember(2017) inntekter { + a1 inntekt INNTEKT + } + }), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.november(2017), type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a3, 1.oktober(2017), type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.november(2017), + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a3, + 1.oktober(2017), + type = Arbeidsforholdtype.ORDINÆRT + ) ), orgnummer = a1 ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - val vilkårsgrunnlag = inspektør(a2).vilkårsgrunnlag(1.vedtaksperiode) ?: fail { "forventer vilkårsgrunnlag" } + val vilkårsgrunnlag = + inspektør(a2).vilkårsgrunnlag(1.vedtaksperiode) ?: fail { "forventer vilkårsgrunnlag" } vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.also { inntekter -> assertEquals(2, inntekter.size) - assertEquals(SkattSykepengegrunnlag::class, inntekter.getValue(a1).inspektør.inntektsopplysning::class) - assertEquals(IkkeRapportert::class, inntekter.getValue(a2).inspektør.inntektsopplysning::class) + assertEquals( + SkattSykepengegrunnlag::class, + inntekter.getValue(a1).inspektør.inntektsopplysning::class + ) + assertEquals( + IkkeRapportert::class, + inntekter.getValue(a2).inspektør.inntektsopplysning::class + ) } assertIngenVarsel(RV_VV_5, 1.vedtaksperiode.filter(a1)) @@ -1711,8 +1997,16 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { ), 1.januar ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), orgnummer = a1 ) @@ -1741,24 +2035,41 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { nyPeriode(1.mai(2023) til 30.mai(2023), orgnummer = a1) nyPeriode(1.mai(2023) til 31.mai(2023), orgnummer = a2) - håndterInntektsmelding(listOf(1.mai(2023) til 16.mai(2023)), beregnetInntekt = inntektA1, orgnummer = a1) + håndterInntektsmelding( + listOf(1.mai(2023) til 16.mai(2023)), + beregnetInntekt = inntektA1, + orgnummer = a1 + ) håndterInntektsmelding( listOf(1.mai(2023) til 16.mai(2023)), beregnetInntekt = inntektA2, refusjon = Refusjon( - INGEN, null, emptyList()), + INGEN, null, emptyList() + ), orgnummer = a2, ) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf( - Pair(a1, inntektA1), - Pair(a2, inntektA2) - ), 1.mai(2023)), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + Pair(a1, inntektA1), + Pair(a2, inntektA2) + ), 1.mai(2023) + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), - orgnummer = a1) + orgnummer = a1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -1768,4 +2079,4 @@ internal class FlereArbeidsgivereUlikFomTest : AbstractEndToEndTest() { assertNotNull(utbetalingstidslinje[31.mai(2023)].erAvvistMed(Begrunnelse.MinimumSykdomsgrad)) assertEquals(17, utbetalingstidslinje[31.mai(2023)].økonomi.inspektør.totalGrad) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereWarningsTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereWarningsTest.kt index b9e41e58cb..edbc33fde7 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereWarningsTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereArbeidsgivereWarningsTest.kt @@ -41,7 +41,10 @@ internal class FlereArbeidsgivereWarningsTest : AbstractEndToEndTest() { @Test fun `overlapper med kort arbeidsgiverperiodesøknad`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 16.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 16.januar, 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 16.januar, 100.prosent), + orgnummer = a1 + ) håndterSykmelding(Sykmeldingsperiode(1.januar, 16.januar), orgnummer = a2) assertIngenVarsler(1.vedtaksperiode.filter(orgnummer = a2)) } @@ -50,8 +53,18 @@ internal class FlereArbeidsgivereWarningsTest : AbstractEndToEndTest() { fun `En arbeidsgiver og sykepenger fra Nav - får ingen warnings da dette ikke er en reell arbeidsgiver`() { val periode = januar håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(periode.start, periode.endInclusive, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom( + periode.start, + periode.endInclusive, + 100.prosent + ), orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + orgnummer = a1 + ) håndterVilkårsgrunnlag(1.vedtaksperiode, orgnummer = a1) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) @@ -65,8 +78,18 @@ internal class FlereArbeidsgivereWarningsTest : AbstractEndToEndTest() { fun `Første arbeidsgiver har blitt sendt til godkjenning før vi mottar sykmelding på neste arbeidsgiver`() { val periode = januar håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(periode.start, periode.endInclusive, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom( + periode.start, + periode.endInclusive, + 100.prosent + ), orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + orgnummer = a1 + ) håndterVilkårsgrunnlag( 1.vedtaksperiode, orgnummer = a1, @@ -77,8 +100,18 @@ internal class FlereArbeidsgivereWarningsTest : AbstractEndToEndTest() { ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -87,7 +120,13 @@ internal class FlereArbeidsgivereWarningsTest : AbstractEndToEndTest() { assertVarsel(RV_VV_2, AktivitetsloggFilter.person()) håndterSykmelding(Sykmeldingsperiode(periode.start, periode.endInclusive), orgnummer = a2) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(periode.start, periode.endInclusive, 100.prosent), orgnummer = a2) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom( + periode.start, + periode.endInclusive, + 100.prosent + ), orgnummer = a2 + ) håndterInntektsmelding( listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, @@ -101,7 +140,7 @@ internal class FlereArbeidsgivereWarningsTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, @@ -117,4 +156,4 @@ internal class FlereArbeidsgivereWarningsTest : AbstractEndToEndTest() { orgnummer = a2 ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereUkjenteArbeidsgivereTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereUkjenteArbeidsgivereTest.kt index f165e8b2d2..76f73c3fa3 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereUkjenteArbeidsgivereTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/FlereUkjenteArbeidsgivereTest.kt @@ -66,17 +66,28 @@ internal class FlereUkjenteArbeidsgivereTest : AbstractEndToEndTest() { forlengVedtak(februar, orgnummer = a1) forlengVedtak(mars, orgnummer = a1) - val im1 = håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = inntektA1, orgnummer = a1) + val im1 = håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = inntektA1, + orgnummer = a1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) - val im2 = håndterInntektsmelding(listOf(1.mars til 16.mars), beregnetInntekt = inntektA2, orgnummer = a2, avsendersystem = ALTINN) + val im2 = håndterInntektsmelding( + listOf(1.mars til 16.mars), + beregnetInntekt = inntektA2, + orgnummer = a2, + avsendersystem = ALTINN + ) nullstillTilstandsendringer() val søknad = UUID.randomUUID() håndterSøknad(Sykdom(1.mars, 20.mars, 100.prosent), id = søknad, orgnummer = a2) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(3.vedtaksperiode)?.inspektør ?: fail { "må ha vilkårsgrunnlag" } - val inntektsopplysninger = vilkårsgrunnlag.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(3.vedtaksperiode)?.inspektør + ?: fail { "må ha vilkårsgrunnlag" } + val inntektsopplysninger = + vilkårsgrunnlag.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver assertEquals(2, inntektsopplysninger.size) val a1Inspektør = inntektsopplysninger.getValue(a1).inspektør @@ -90,49 +101,97 @@ internal class FlereUkjenteArbeidsgivereTest : AbstractEndToEndTest() { assertEquals(3, overstyringerIgangsatt.size) overstyringerIgangsatt[0].also { event -> - assertEquals(PersonObserver.OverstyringIgangsatt( - årsak = "KORRIGERT_INNTEKTSMELDING_INNTEKTSOPPLYSNINGER", - skjæringstidspunkt = 1.januar, - periodeForEndring = 1.januar til 1.januar, - berørtePerioder = listOf( - VedtaksperiodeData(a1, 1.vedtaksperiode.id(a1), 1.januar til 31.januar, 1.januar, "REVURDERING"), - VedtaksperiodeData(a1, 2.vedtaksperiode.id(a1), februar, 1.januar, "REVURDERING"), - VedtaksperiodeData(a1, 3.vedtaksperiode.id(a1), 1.mars til 31.mars, 1.januar, "REVURDERING"), - VedtaksperiodeData(a2, 1.vedtaksperiode.id(a2), 1.januar til 31.januar, 1.januar, "REVURDERING") - ), - meldingsreferanseId = im1 - ), event) + assertEquals( + PersonObserver.OverstyringIgangsatt( + årsak = "KORRIGERT_INNTEKTSMELDING_INNTEKTSOPPLYSNINGER", + skjæringstidspunkt = 1.januar, + periodeForEndring = 1.januar til 1.januar, + berørtePerioder = listOf( + VedtaksperiodeData( + a1, + 1.vedtaksperiode.id(a1), + 1.januar til 31.januar, + 1.januar, + "REVURDERING" + ), + VedtaksperiodeData( + a1, + 2.vedtaksperiode.id(a1), + februar, + 1.januar, + "REVURDERING" + ), + VedtaksperiodeData( + a1, + 3.vedtaksperiode.id(a1), + 1.mars til 31.mars, + 1.januar, + "REVURDERING" + ), + VedtaksperiodeData( + a2, + 1.vedtaksperiode.id(a2), + 1.januar til 31.januar, + 1.januar, + "REVURDERING" + ) + ), + meldingsreferanseId = im1 + ), event + ) } overstyringerIgangsatt[1].also { event -> - assertEquals(PersonObserver.OverstyringIgangsatt( - årsak = "NY_PERIODE", - skjæringstidspunkt = 1.januar, - periodeForEndring = 1.mars til 20.mars, - berørtePerioder = listOf( - VedtaksperiodeData(a1, 3.vedtaksperiode.id(a1), 1.mars til 31.mars, 1.januar, "REVURDERING") - ), - meldingsreferanseId = søknad - ), event) + assertEquals( + PersonObserver.OverstyringIgangsatt( + årsak = "NY_PERIODE", + skjæringstidspunkt = 1.januar, + periodeForEndring = 1.mars til 20.mars, + berørtePerioder = listOf( + VedtaksperiodeData( + a1, + 3.vedtaksperiode.id(a1), + 1.mars til 31.mars, + 1.januar, + "REVURDERING" + ) + ), + meldingsreferanseId = søknad + ), event + ) } overstyringerIgangsatt[2].also { event -> - assertEquals(PersonObserver.OverstyringIgangsatt( - årsak = "KORRIGERT_INNTEKTSMELDING_INNTEKTSOPPLYSNINGER", - skjæringstidspunkt = 1.januar, - periodeForEndring = 1.mars.somPeriode(), - berørtePerioder = listOf( - VedtaksperiodeData(a1, 3.vedtaksperiode.id(a1), 1.mars til 31.mars, 1.januar, "REVURDERING") - ), - meldingsreferanseId = im2 - ), event) + assertEquals( + PersonObserver.OverstyringIgangsatt( + årsak = "KORRIGERT_INNTEKTSMELDING_INNTEKTSOPPLYSNINGER", + skjæringstidspunkt = 1.januar, + periodeForEndring = 1.mars.somPeriode(), + berørtePerioder = listOf( + VedtaksperiodeData( + a1, + 3.vedtaksperiode.id(a1), + 1.mars til 31.mars, + 1.januar, + "REVURDERING" + ) + ), + meldingsreferanseId = im2 + ), event + ) } assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING, orgnummer = a1) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, orgnummer = a1) assertTilstander(3.vedtaksperiode, AVVENTER_REVURDERING, orgnummer = a1) assertTilstander(1.vedtaksperiode, AVVENTER_REVURDERING, orgnummer = a2) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) } @Test @@ -140,11 +199,25 @@ internal class FlereUkjenteArbeidsgivereTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), orgnummer = a1 ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -174,7 +247,13 @@ internal class FlereUkjenteArbeidsgivereTest : AbstractEndToEndTest() { AVVENTER_SIMULERING, AVVENTER_GODKJENNING, orgnummer = a1 ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) } @Test @@ -182,11 +261,25 @@ internal class FlereUkjenteArbeidsgivereTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), orgnummer = a1 ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -206,13 +299,20 @@ internal class FlereUkjenteArbeidsgivereTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a2) val søknadId = håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a2) - assertBeløpstidslinje(inspektør(a2).vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, januar, INNTEKT, imId) + assertBeløpstidslinje( + inspektør(a2).vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + januar, + INNTEKT, + imId + ) - assertEquals(setOf( - Dokumentsporing.søknad(søknadId), - Dokumentsporing.inntektsmeldingDager(imId), - Dokumentsporing.inntektsmeldingInntekt(imId) - ), inspektør(a2).hendelser(1.vedtaksperiode)) + assertEquals( + setOf( + Dokumentsporing.søknad(søknadId), + Dokumentsporing.inntektsmeldingDager(imId), + Dokumentsporing.inntektsmeldingInntekt(imId) + ), inspektør(a2).hendelser(1.vedtaksperiode) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) @@ -231,7 +331,14 @@ internal class FlereUkjenteArbeidsgivereTest : AbstractEndToEndTest() { AVSLUTTET, orgnummer = a1 ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + orgnummer = a2 + ) } @Test @@ -246,12 +353,30 @@ internal class FlereUkjenteArbeidsgivereTest : AbstractEndToEndTest() { assertEquals(imId, observatør.inntektsmeldingIkkeHåndtert.single()) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to INNTEKT), 1.januar), + håndterInntektsmelding( + listOf(1.januar til 16.januar), + orgnummer = a1, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), orgnummer = a1 ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -260,16 +385,33 @@ internal class FlereUkjenteArbeidsgivereTest : AbstractEndToEndTest() { håndterUtbetalt() nullstillTilstandsendringer() - håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a2) // a2 sent til festen, men med ting liggende i vilkårsgrunnlaget - val sykepengegrunnlagInspektør = inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør + håndterSykmelding( + Sykmeldingsperiode(1.januar, 31.januar), + orgnummer = a2 + ) // a2 sent til festen, men med ting liggende i vilkårsgrunnlaget + val sykepengegrunnlagInspektør = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { assertEquals(INNTEKT, it.inntektsopplysning.fastsattÅrsinntekt()) - assertLikRefusjonsopplysning(Refusjonsopplysning(imId, 1.januar, null, beløp = INNTEKT, Avsender.ARBEIDSGIVER), it.refusjonsopplysninger.single()) + assertLikRefusjonsopplysning( + Refusjonsopplysning( + imId, + 1.januar, + null, + beløp = INNTEKT, + Avsender.ARBEIDSGIVER + ), it.refusjonsopplysninger.single() + ) } val søknadId = håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a2) - assertBeløpstidslinje(inspektør(a2).vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, januar, INNTEKT, imId) + assertBeløpstidslinje( + inspektør(a2).vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + januar, + INNTEKT, + imId + ) assertEquals( setOf( @@ -296,6 +438,13 @@ internal class FlereUkjenteArbeidsgivereTest : AbstractEndToEndTest() { AVSLUTTET, orgnummer = a1 ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + orgnummer = a2 + ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/VedtaksperioderForFlereArbeidsgivereTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/VedtaksperioderForFlereArbeidsgivereTest.kt index 412a349426..158d11bd91 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/VedtaksperioderForFlereArbeidsgivereTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/flere_arbeidsgivere/VedtaksperioderForFlereArbeidsgivereTest.kt @@ -77,10 +77,30 @@ internal class VedtaksperioderForFlereArbeidsgivereTest : AbstractEndToEndTest() } }, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a3, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a4, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a3, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a4, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ).håndter(Person::håndter) @@ -119,10 +139,21 @@ internal class VedtaksperioderForFlereArbeidsgivereTest : AbstractEndToEndTest() 1.vedtaksperiode, orgnummer = a1 ).håndter(Person::håndter) - val vilkårsgrunnlag = inspektør.vilkårsgrunnlag(1.januar) ?: fail { "forventet vilkårsgrunnlag" } + val vilkårsgrunnlag = + inspektør.vilkårsgrunnlag(1.januar) ?: fail { "forventet vilkårsgrunnlag" } - assertEquals(25000.månedlig, vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.inntektsopplysning.inspektør.beløp) - assertEquals(4900.månedlig, vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.inntektsopplysning.inspektør.beløp) + assertEquals( + 25000.månedlig, + vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.inntektsopplysning.inspektør.beløp + ) + assertEquals( + 4900.månedlig, + vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.inntektsopplysning.inspektør.beløp + ) } @Test @@ -146,8 +177,12 @@ internal class VedtaksperioderForFlereArbeidsgivereTest : AbstractEndToEndTest() arbeidsforhold = arbeidsforhold ).håndter(Person::håndter) - val grunnlagsdataInspektør = person.vilkårsgrunnlagFor(1.januar)?.inspektør ?: fail { "fant ikke vilkårsgrunnlag" } - assertEquals(552000.årlig, grunnlagsdataInspektør.inntektsgrunnlag.inspektør.sykepengegrunnlag) + val grunnlagsdataInspektør = + person.vilkårsgrunnlagFor(1.januar)?.inspektør ?: fail { "fant ikke vilkårsgrunnlag" } + assertEquals( + 552000.årlig, + grunnlagsdataInspektør.inntektsgrunnlag.inspektør.sykepengegrunnlag + ) } @Test @@ -156,8 +191,16 @@ internal class VedtaksperioderForFlereArbeidsgivereTest : AbstractEndToEndTest() håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a2) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, orgnummer = a2) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + orgnummer = a2 + ) håndterVilkårsgrunnlag(1.vedtaksperiode, orgnummer = a1) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -191,7 +234,10 @@ internal class VedtaksperioderForFlereArbeidsgivereTest : AbstractEndToEndTest() assertEquals(1080, inspektør(a1).utbetaling(1).arbeidsgiverOppdrag[1].beløp) assertNotEquals(utbetalingslinje1, utbetalingslinje2) - assertNotEquals(utbetalingslinje1.linjerUtenOpphør().last().beløp, utbetalingslinje2.linjerUtenOpphør().last().beløp) + assertNotEquals( + utbetalingslinje1.linjerUtenOpphør().last().beløp, + utbetalingslinje2.linjerUtenOpphør().last().beløp + ) assertEquals(utbetalingslinje1.fagsystemId, utbetalingslinje2.fagsystemId) } @@ -227,7 +273,11 @@ internal class VedtaksperioderForFlereArbeidsgivereTest : AbstractEndToEndTest() orgnummer: String = ORGNUMMER, meldingsreferanseId: UUID = UUID.randomUUID(), inntekterForSykepengegrunnlag: List, - inntekterForOpptjeningsvurdering: InntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering(ORGNUMMER, INNTEKT, skjæringstidspunkt) + inntekterForOpptjeningsvurdering: InntekterForOpptjeningsvurdering = lagStandardInntekterForOpptjeningsvurdering( + ORGNUMMER, + INNTEKT, + skjæringstidspunkt + ) ): Vilkårsgrunnlag { return Vilkårsgrunnlag( meldingsreferanseId = meldingsreferanseId, @@ -240,7 +290,11 @@ internal class VedtaksperioderForFlereArbeidsgivereTest : AbstractEndToEndTest() ), inntekterForOpptjeningsvurdering = inntekterForOpptjeningsvurdering, arbeidsforhold = arbeidsforhold ?: listOf( - Vilkårsgrunnlag.Arbeidsforhold(orgnummer, 1.januar(2017), type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + orgnummer, + 1.januar(2017), + type = Arbeidsforholdtype.ORDINÆRT + ) ) ) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/DobbelbehandlingIInfotrygdTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/DobbelbehandlingIInfotrygdTest.kt index 83337ae699..39a36722ee 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/DobbelbehandlingIInfotrygdTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/DobbelbehandlingIInfotrygdTest.kt @@ -50,7 +50,12 @@ internal class DobbelbehandlingIInfotrygdTest : AbstractEndToEndTest() { inntektshistorikk = inntektshistorikk1, besvart = LocalDate.EPOCH.atStartOfDay() ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) assertVarsel(RV_IT_3) } @@ -60,7 +65,13 @@ internal class DobbelbehandlingIInfotrygdTest : AbstractEndToEndTest() { forlengVedtak(februar) val historie1 = arrayOf( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 17.januar, 26.januar, 100.prosent, 1000.daglig) + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 17.januar, + 26.januar, + 100.prosent, + 1000.daglig + ) ) val inntektshistorikk1 = listOf(Inntektsopplysning(ORGNUMMER, 3.januar, INNTEKT, true)) håndterUtbetalingshistorikkEtterInfotrygdendring( @@ -73,7 +84,10 @@ internal class DobbelbehandlingIInfotrygdTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.also { utbetalingInspektør -> - assertEquals(Endringskode.UEND, utbetalingInspektør.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.UEND, + utbetalingInspektør.arbeidsgiverOppdrag.inspektør.endringskode + ) assertEquals(0, utbetalingInspektør.personOppdrag.inspektør.antallLinjer()) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/ForlengelseFraInfotrygdTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/ForlengelseFraInfotrygdTest.kt index ff839ac3a9..53444abd6f 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/ForlengelseFraInfotrygdTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/ForlengelseFraInfotrygdTest.kt @@ -31,10 +31,12 @@ internal class ForlengelseFraInfotrygdTest : AbstractEndToEndTest() { @Test fun `forkaster ikke førstegangsbehandling selv om det er lagret inntekter i IT`() { - håndterUtbetalingshistorikkEtterInfotrygdendring(inntektshistorikk = listOf( - Inntektsopplysning(a1, 17.januar, INNTEKT, true), - Inntektsopplysning(a2, 17.januar, INNTEKT, true) - )) + håndterUtbetalingshistorikkEtterInfotrygdendring( + inntektshistorikk = listOf( + Inntektsopplysning(a1, 17.januar, INNTEKT, true), + Inntektsopplysning(a2, 17.januar, INNTEKT, true) + ) + ) håndterSøknad(januar) assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) } @@ -47,15 +49,43 @@ internal class ForlengelseFraInfotrygdTest : AbstractEndToEndTest() { håndterSøknad(februar) håndterSykmelding(Sykmeldingsperiode(18.mars, 31.mars)) håndterSøknad(Sykdom(18.mars, 31.mars, 100.prosent)) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 31.januar, 100.prosent, 1000.daglig)) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 31.januar, + 100.prosent, + 1000.daglig + ) + ) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) } @Test fun `forlenger ferieperiode i Infotrygd på samme arbeidsgiver`() { - håndterUtbetalingshistorikkEtterInfotrygdendring(Friperiode(1.januar, 31.januar), inntektshistorikk = emptyList()) + håndterUtbetalingshistorikkEtterInfotrygdendring( + Friperiode(1.januar, 31.januar), + inntektshistorikk = emptyList() + ) nyPeriode(februar) assertForlengerInfotrygdperiode() assertSisteTilstand(1.vedtaksperiode, TIL_INFOTRYGD) @@ -64,7 +94,10 @@ internal class ForlengelseFraInfotrygdTest : AbstractEndToEndTest() { @Test fun `forlenger ferieperiode i Infotrygd på samme arbeidsgiver - reagerer på endring`() { nyPeriode(februar) - håndterUtbetalingshistorikkEtterInfotrygdendring(Friperiode(1.januar, 31.januar), inntektshistorikk = emptyList()) + håndterUtbetalingshistorikkEtterInfotrygdendring( + Friperiode(1.januar, 31.januar), + inntektshistorikk = emptyList() + ) assertForlengerInfotrygdperiode() assertSisteTilstand(1.vedtaksperiode, TIL_INFOTRYGD) } @@ -72,7 +105,15 @@ internal class ForlengelseFraInfotrygdTest : AbstractEndToEndTest() { @Test fun `forlenger utbetaling i Infotrygd på samme arbeidsgiver`() { håndterUtbetalingshistorikkEtterInfotrygdendring( - utbetalinger = arrayOf(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 31.januar, 100.prosent, INNTEKT)), + utbetalinger = arrayOf( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 31.januar, + 100.prosent, + INNTEKT + ) + ), inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 1.januar, INNTEKT, true)) ) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) @@ -83,7 +124,15 @@ internal class ForlengelseFraInfotrygdTest : AbstractEndToEndTest() { @Test fun `forlenger utbetaling i Infotrygd på annen arbeidsgiver`() { - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(a2, 1.januar, 31.januar, 100.prosent, INNTEKT), inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 1.januar, INNTEKT, true))) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + a2, + 1.januar, + 31.januar, + 100.prosent, + INNTEKT + ), inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 1.januar, INNTEKT, true)) + ) nyPeriode(februar, a1) assertForlengerInfotrygdperiode() assertSisteTilstand(1.vedtaksperiode, TIL_INFOTRYGD, orgnummer = a1) @@ -91,11 +140,22 @@ internal class ForlengelseFraInfotrygdTest : AbstractEndToEndTest() { @Test fun `bare ferie - etter infotrygdutbetaling`() { - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.desember(2017), 31.desember(2017), 100.prosent, INNTEKT), inntektshistorikk = listOf( + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.desember(2017), + 31.desember(2017), + 100.prosent, + INNTEKT + ), inntektshistorikk = listOf( Inntektsopplysning(ORGNUMMER, 1.desember(2017), INNTEKT, true) - )) + ) + ) håndterSykmelding(januar) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Søknad.Søknadsperiode.Ferie(1.januar, 31.januar)) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Søknad.Søknadsperiode.Ferie(1.januar, 31.januar) + ) assertForlengerInfotrygdperiode() assertForkastetPeriodeTilstander(1.vedtaksperiode, START, TIL_INFOTRYGD) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdKorrigererE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdKorrigererE2ETest.kt index 746c3c9b07..d643530193 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdKorrigererE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdKorrigererE2ETest.kt @@ -56,18 +56,36 @@ internal class InfotrygdKorrigererE2ETest : AbstractEndToEndTest() { nyPeriode(1.januar til 1.januar, ORGNUMMER) håndterSykmelding(Sykmeldingsperiode(3.januar, 31.januar)) håndterSøknad(Sykdom(3.januar, 31.januar, 100.prosent)) - håndterInntektsmelding(listOf(3.januar til 18.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(3.januar til 18.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) nullstillTilstandsendringer() - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 2.januar, 2.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 2.januar, + 2.januar, + 100.prosent, + INNTEKT + ) + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) assertForkastetPeriodeTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + TIL_INFOTRYGD + ) } @Test @@ -81,7 +99,12 @@ internal class InfotrygdKorrigererE2ETest : AbstractEndToEndTest() { håndterUtbetalingshistorikkEtterInfotrygdendring(Friperiode(1.februar, 28.februar)) håndterUtbetalt() - assertForkastetPeriodeTilstander(3.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } @Test @@ -92,7 +115,15 @@ internal class InfotrygdKorrigererE2ETest : AbstractEndToEndTest() { håndterSimulering() assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 2.januar, 2.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 2.januar, + 2.januar, + 100.prosent, + INNTEKT + ) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) } @@ -112,7 +143,10 @@ internal class InfotrygdKorrigererE2ETest : AbstractEndToEndTest() { assertEquals(4, inspektør.antallUtbetalinger) inspektør.utbetaling(2).also { assertEquals(it.korrelasjonsId, inspektør.utbetaling(0).korrelasjonsId) - assertEquals(it.arbeidsgiverOppdrag.inspektør.fagsystemId(), inspektør.utbetaling(0).arbeidsgiverOppdrag.fagsystemId) + assertEquals( + it.arbeidsgiverOppdrag.inspektør.fagsystemId(), + inspektør.utbetaling(0).arbeidsgiverOppdrag.fagsystemId + ) assertEquals(2, it.arbeidsgiverOppdrag.size) assertEquals(Endringskode.ENDR, it.arbeidsgiverOppdrag[0].inspektør.endringskode) assertEquals(17.januar, it.arbeidsgiverOppdrag[0].inspektør.fom) @@ -123,7 +157,10 @@ internal class InfotrygdKorrigererE2ETest : AbstractEndToEndTest() { } inspektør.utbetaling(3).also { assertEquals(it.korrelasjonsId, inspektør.utbetaling(1).korrelasjonsId) - assertEquals(it.arbeidsgiverOppdrag.inspektør.fagsystemId(), inspektør.utbetaling(1).arbeidsgiverOppdrag.fagsystemId) + assertEquals( + it.arbeidsgiverOppdrag.inspektør.fagsystemId(), + inspektør.utbetaling(1).arbeidsgiverOppdrag.fagsystemId + ) assertEquals(1, it.arbeidsgiverOppdrag.size) assertEquals(Endringskode.UEND, it.arbeidsgiverOppdrag[0].inspektør.endringskode) assertEquals(17.mai, it.arbeidsgiverOppdrag[0].inspektør.fom) @@ -148,7 +185,14 @@ internal class InfotrygdKorrigererE2ETest : AbstractEndToEndTest() { perioder = listOf( Friperiode(fom = 1.februar, tom = 28.februar) ), - inntekter = listOf(Inntektsopplysning(ORGNUMMER, 1.januar, TestPerson.INNTEKT, true)), + inntekter = listOf( + Inntektsopplysning( + ORGNUMMER, + 1.januar, + TestPerson.INNTEKT, + true + ) + ), arbeidskategorikoder = emptyMap() ), besvart = LocalDateTime.now() diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdTest.kt index 24e49f0a0c..e63a0da329 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdTest.kt @@ -44,7 +44,11 @@ internal class InfotrygdTest : AbstractEndToEndTest() { @Test fun `infotrygd flytter skjæringstidspunkt`() { nyttVedtak(januar) - nyttVedtak(10.februar til 28.februar, arbeidsgiverperiode = listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + nyttVedtak( + 10.februar til 28.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterUtbetalingshistorikkEtterInfotrygdendring(Friperiode(1.februar, 9.februar)) assertEquals(2, inspektør.vilkårsgrunnlagHistorikkInnslag().first().vilkårsgrunnlag.size) } @@ -52,17 +56,34 @@ internal class InfotrygdTest : AbstractEndToEndTest() { @Test fun `Infotrygdhistorikk som er nærme`() { håndterUtbetalingshistorikkEtterInfotrygdendring( - utbetalinger = arrayOf(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 30.januar, 100.prosent, INNTEKT)), + utbetalinger = arrayOf( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 30.januar, + 100.prosent, + INNTEKT + ) + ), inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 1.januar, INNTEKT, true)) ) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) håndterSøknad(februar) assertForkastetPeriodeTilstander(1.vedtaksperiode, START, TIL_INFOTRYGD) } + @Test fun `Infotrygdhistorikk som ikke medfører utkasting`() { håndterUtbetalingshistorikkEtterInfotrygdendring( - utbetalinger = arrayOf(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 30.januar, 100.prosent, INNTEKT)), + utbetalinger = arrayOf( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 30.januar, + 100.prosent, + INNTEKT + ) + ), inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 1.januar, INNTEKT, true)) ) håndterSøknad(Sykdom(20.februar, 28.mars, 100.prosent)) @@ -83,7 +104,10 @@ internal class InfotrygdTest : AbstractEndToEndTest() { createOvergangFraInfotrygdPerson() val antallInnslagFør = inspektør.vilkårsgrunnlagHistorikkInnslag().size - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, 15000.månedlig, "foo", null, emptyList()))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, 15000.månedlig, "foo", null, emptyList())) + ) assertEquals(antallInnslagFør, inspektør.vilkårsgrunnlagHistorikkInnslag().size) assertTrue(inntektsopplysning(1.vedtaksperiode) is Infotrygd) assertEquals(31000.månedlig, inntektsopplysning(1.vedtaksperiode).inspektør.beløp) @@ -95,9 +119,31 @@ internal class InfotrygdTest : AbstractEndToEndTest() { val antallInnslagFør = inspektør.vilkårsgrunnlagHistorikkInnslag().size val meldingsreferanse = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, 15000.månedlig, "foo", null, listOf(Triple(1.januar, null, 15000.månedlig)))), meldingsreferanseId = meldingsreferanse) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + 15000.månedlig, + "foo", + null, + listOf(Triple(1.januar, null, 15000.månedlig)) + ) + ), + meldingsreferanseId = meldingsreferanse + ) assertEquals(antallInnslagFør + 1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(meldingsreferanse, 1.januar, null, 15000.månedlig, SAKSBEHANDLER)), refusjonsopplysninger(1.vedtaksperiode)) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + meldingsreferanse, + 1.januar, + null, + 15000.månedlig, + SAKSBEHANDLER + ) + ), refusjonsopplysninger(1.vedtaksperiode) + ) assertTrue(inntektsopplysning(1.vedtaksperiode) is Infotrygd) assertEquals(31000.månedlig, inntektsopplysning(1.vedtaksperiode).inspektør.beløp) } @@ -106,5 +152,9 @@ internal class InfotrygdTest : AbstractEndToEndTest() { inspektør.vilkårsgrunnlag(vedtaksperiode)!!.inspektør.inntektsgrunnlag.arbeidsgiverInntektsopplysninger.single { it.orgnummer == a1 }.inspektør.refusjonsopplysninger private fun inntektsopplysning(vedtaksperiode: IdInnhenter) = - inspektør.vilkårsgrunnlag(vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(a1) }.inspektør.inntektsopplysning -} \ No newline at end of file + inspektør.vilkårsgrunnlag(vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder( + a1 + ) + }.inspektør.inntektsopplysning +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdendringE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdendringE2ETest.kt index 59295ee0b4..07abe56a43 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdendringE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdendringE2ETest.kt @@ -27,7 +27,15 @@ internal class InfotrygdendringE2ETest : AbstractEndToEndTest() { nyPeriode(1.januar til 16.januar) håndterInfotrygdendring() assertTrue(person.personLogg.harBehov(Sykepengehistorikk)) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar(2016), 31.januar(2016), 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar(2016), + 31.januar(2016), + 100.prosent, + INNTEKT + ) + ) val infotrygdHistorikk = person.inspektør.utbetaltIInfotrygd assertEquals(1.januar(2016) til 31.januar(2016), infotrygdHistorikk.single()) @@ -39,40 +47,54 @@ internal class InfotrygdendringE2ETest : AbstractEndToEndTest() { nyPeriode(1.januar til 20.januar) nyPeriode(21.januar til 31.januar) håndterInfotrygdendring() - val meldingsreferanseId = håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 17.januar, 31.januar, 100.prosent, INNTEKT)) + val meldingsreferanseId = håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 17.januar, + 31.januar, + 100.prosent, + INNTEKT + ) + ) assertEquals(2, observatør.overlappendeInfotrygdperioder.size) val event = observatør.overlappendeInfotrygdperioder.last() val vedtaksperiodeId = inspektør.vedtaksperiodeId(1.vedtaksperiode) - val forventet = PersonObserver.OverlappendeInfotrygdperioder(listOf( - PersonObserver.OverlappendeInfotrygdperiodeEtterInfotrygdendring( - organisasjonsnummer = ORGNUMMER, - vedtaksperiodeId = vedtaksperiodeId, - vedtaksperiodeFom = 1.januar, - vedtaksperiodeTom = 20.januar, - vedtaksperiodetilstand = "AVVENTER_INNTEKTSMELDING", - infotrygdperioder = listOf(Infotrygdperiode( - fom = 17.januar, - tom = 31.januar, - type = "ARBEIDSGIVERUTBETALING", - orgnummer = ORGNUMMER - )) - ), + val forventet = PersonObserver.OverlappendeInfotrygdperioder( + listOf( + PersonObserver.OverlappendeInfotrygdperiodeEtterInfotrygdendring( + organisasjonsnummer = ORGNUMMER, + vedtaksperiodeId = vedtaksperiodeId, + vedtaksperiodeFom = 1.januar, + vedtaksperiodeTom = 20.januar, + vedtaksperiodetilstand = "AVVENTER_INNTEKTSMELDING", + infotrygdperioder = listOf( + Infotrygdperiode( + fom = 17.januar, + tom = 31.januar, + type = "ARBEIDSGIVERUTBETALING", + orgnummer = ORGNUMMER + ) + ) + ), - PersonObserver.OverlappendeInfotrygdperiodeEtterInfotrygdendring( - organisasjonsnummer = ORGNUMMER, - vedtaksperiodeId = inspektør.vedtaksperiodeId(2.vedtaksperiode), - vedtaksperiodeFom = 21.januar, - vedtaksperiodeTom = 31.januar, - vedtaksperiodetilstand = "AVVENTER_INNTEKTSMELDING", - infotrygdperioder = listOf(Infotrygdperiode( - fom = 17.januar, - tom = 31.januar, - type = "ARBEIDSGIVERUTBETALING", - orgnummer = ORGNUMMER - )) - ) + PersonObserver.OverlappendeInfotrygdperiodeEtterInfotrygdendring( + organisasjonsnummer = ORGNUMMER, + vedtaksperiodeId = inspektør.vedtaksperiodeId(2.vedtaksperiode), + vedtaksperiodeFom = 21.januar, + vedtaksperiodeTom = 31.januar, + vedtaksperiodetilstand = "AVVENTER_INNTEKTSMELDING", + infotrygdperioder = listOf( + Infotrygdperiode( + fom = 17.januar, + tom = 31.januar, + type = "ARBEIDSGIVERUTBETALING", + orgnummer = ORGNUMMER + ) + ) + ) - ), meldingsreferanseId.toString()) + ), meldingsreferanseId.toString() + ) assertEquals(forventet, event) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdhistorikkEndretTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdhistorikkEndretTest.kt index 794d51e824..9e01623f09 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdhistorikkEndretTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/infotrygd/InfotrygdhistorikkEndretTest.kt @@ -24,14 +24,18 @@ import no.nav.helse.spleis.e2e.håndterYtelser import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.junit.jupiter.api.Test -internal class InfotrygdhistorikkEndretTest: AbstractEndToEndTest() { - private val utbetalinger = listOf(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 31.januar, 100.prosent, INNTEKT)) +internal class InfotrygdhistorikkEndretTest : AbstractEndToEndTest() { + private val utbetalinger = + listOf(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 31.januar, 100.prosent, INNTEKT)) private val inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 1.januar, INNTEKT, true)) @Test fun `infotrygdhistorikken var tom`() { periodeTilGodkjenning() - håndterUtbetalingshistorikkEtterInfotrygdendring(*utbetalinger.toTypedArray(), inntektshistorikk = inntektshistorikk) + håndterUtbetalingshistorikkEtterInfotrygdendring( + *utbetalinger.toTypedArray(), + inntektshistorikk = inntektshistorikk + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK) } @@ -40,7 +44,10 @@ internal class InfotrygdhistorikkEndretTest: AbstractEndToEndTest() { periodeTilGodkjenning() håndterSykmelding(Sykmeldingsperiode(1.mai, 31.mai)) håndterSøknad(Sykdom(fom = 1.mai, tom = 31.mai, 100.prosent)) - håndterUtbetalingshistorikkEtterInfotrygdendring(*utbetalinger.toTypedArray(), inntektshistorikk = inntektshistorikk) + håndterUtbetalingshistorikkEtterInfotrygdendring( + *utbetalinger.toTypedArray(), + inntektshistorikk = inntektshistorikk + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK) } @@ -54,12 +61,21 @@ internal class InfotrygdhistorikkEndretTest: AbstractEndToEndTest() { @Test fun `infotrygdhistorikken er uendret`() { periodeTilGodkjenning(utbetalinger, inntektshistorikk) - håndterUtbetalingshistorikkEtterInfotrygdendring(*utbetalinger.toTypedArray(), inntektshistorikk = inntektshistorikk) + håndterUtbetalingshistorikkEtterInfotrygdendring( + *utbetalinger.toTypedArray(), + inntektshistorikk = inntektshistorikk + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING) } - private fun periodeTilGodkjenning(perioder: List = emptyList(), inntektsopplysning: List = emptyList()) { - håndterUtbetalingshistorikkEtterInfotrygdendring(*perioder.toTypedArray(), inntektshistorikk = inntektsopplysning) + private fun periodeTilGodkjenning( + perioder: List = emptyList(), + inntektsopplysning: List = emptyList() + ) { + håndterUtbetalingshistorikkEtterInfotrygdendring( + *perioder.toTypedArray(), + inntektshistorikk = inntektsopplysning + ) håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars)) håndterSøknad(mars) håndterInntektsmelding(listOf(1.mars til 16.mars)) 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/BegrunnelseForReduksjonEllerIkkeUtbetaltTest.kt index d0d205a061..15577b7089 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/BegrunnelseForReduksjonEllerIkkeUtbetaltTest.kt @@ -16,16 +16,26 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -internal class BegrunnelseForReduksjonEllerIkkeUtbetaltTest: AbstractDslTest() { +internal class BegrunnelseForReduksjonEllerIkkeUtbetaltTest : AbstractDslTest() { @Test fun `arbeidsgiverperioden strekker seg over to perioder og inntektsmelding kommer etter søknadene`() { a1 { håndterSøknad(Sykdom(1.januar, 10.januar, 100.prosent)) håndterSøknad(Sykdom(11.januar, 17.januar, 100.prosent)) - assertEquals("SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT, begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening") - assertEquals("NNNNNHH NNNNNHH NNS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT, + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening" + ) + assertEquals( + "NNNNNHH NNNNNHH NNS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) } } @@ -33,17 +43,33 @@ internal class BegrunnelseForReduksjonEllerIkkeUtbetaltTest: AbstractDslTest() { fun `arbeidsgiverperioden strekker seg over to perioder og inntektsmelding kommer før siste søknad`() { a1 { håndterSøknad(Sykdom(1.januar, 10.januar, 100.prosent)) - assertEquals("SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT, begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening") - assertEquals("NNNNNHH NNN", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT, + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening" + ) + assertEquals( + "NNNNNHH NNN", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) håndterSøknad(Sykdom(11.januar, 17.januar, 100.prosent)) assertForventetFeil( forklaring = "Når IM skal lage SykNav-dager kommer før vi har mottatt søknad blir det ikke lagt inn som SykNav når søknaden kommer", nå = { - assertEquals("NNNNNHH NNNSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "NNNNNHH NNNSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) }, ønsket = { - assertEquals("NNNNNHH NNNNNHH NNS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "NNNNNHH NNNNNHH NNS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) } ) } @@ -53,14 +79,24 @@ internal class BegrunnelseForReduksjonEllerIkkeUtbetaltTest: AbstractDslTest() { fun `en tolkning av Permisjon`() { håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent)) // Arbeidsgiver kommuniserer at bruker er permitert fra 11.januar og at de dekker AGP tom 10.januar 🤔 - håndterInntektsmelding(listOf(1.januar til 10.januar), beregnetInntekt = INNTEKT, begrunnelseForReduksjonEllerIkkeUtbetalt = "Permisjon") + håndterInntektsmelding( + listOf(1.januar til 10.januar), + beregnetInntekt = INNTEKT, + begrunnelseForReduksjonEllerIkkeUtbetalt = "Permisjon" + ) assertForventetFeil( forklaring = "Nav skal dekke de resterende dagene av arbeidsgiverperioden som arbeidsgiver ikke opplyser om", nå = { - assertEquals("NNNNNHH NNNSSHH SS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "NNNNNHH NNNSSHH SS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) }, ønsket = { - assertEquals("SSSSSHH SSSNNHH NN", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSNNHH NN", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) } ) } @@ -69,14 +105,24 @@ internal class BegrunnelseForReduksjonEllerIkkeUtbetaltTest: AbstractDslTest() { fun `en tolkning av ArbeidOpphoert`() { håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent)) // Arbeidsgiver kommuniserer at arbeidet er opphørt fra 11.januar og at de dekker AGP tom 10.januar 🤔 - håndterInntektsmelding(listOf(1.januar til 10.januar), beregnetInntekt = INNTEKT, begrunnelseForReduksjonEllerIkkeUtbetalt = "ArbeidOpphoert") + håndterInntektsmelding( + listOf(1.januar til 10.januar), + beregnetInntekt = INNTEKT, + begrunnelseForReduksjonEllerIkkeUtbetalt = "ArbeidOpphoert" + ) assertForventetFeil( forklaring = "Nav skal dekke de resterende dagene av arbeidsgiverperioden som arbeidsgiver ikke opplyser om", nå = { - assertEquals("NNNNNHH NNNSSHH SS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "NNNNNHH NNNSSHH SS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) }, ønsket = { - assertEquals("SSSSSHH SSSNNHH NN", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSNNHH NN", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) } ) } @@ -86,24 +132,37 @@ internal class BegrunnelseForReduksjonEllerIkkeUtbetaltTest: AbstractDslTest() { a1 { håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent)) håndterSøknad(Sykdom(25.januar, 31.januar, 100.prosent)) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 25.januar, begrunnelseForReduksjonEllerIkkeUtbetalt = "IkkeFullStillingsandel") + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 25.januar, + begrunnelseForReduksjonEllerIkkeUtbetalt = "IkkeFullStillingsandel" + ) assertTrue(inspektør.sykdomstidslinje[25.januar] is Dag.SykedagNav) - assertEquals(25.januar, inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().sykdomstidslinje.inspektør.førsteIkkeUkjenteDag) + assertEquals( + 25.januar, + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().sykdomstidslinje.inspektør.førsteIkkeUkjenteDag + ) assertForventetFeil( forklaring = "Vedtaksperiode blir strukket med UkjentDag", nå = { (17.januar til 31.januar).let { periode -> assertEquals(periode, inspektør.periode(2.vedtaksperiode)) - assertEquals(periode, inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().sykdomstidslinje.periode()) + assertEquals( + periode, + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().sykdomstidslinje.periode() + ) } - }, + }, ønsket = { (25.januar til 31.januar).let { periode -> assertEquals(periode, inspektør.periode(2.vedtaksperiode)) - assertEquals(periode, inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().sykdomstidslinje.periode()) + assertEquals( + periode, + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().sykdomstidslinje.periode() + ) } } @@ -116,7 +175,11 @@ internal class BegrunnelseForReduksjonEllerIkkeUtbetaltTest: AbstractDslTest() { a1 { nyPeriode(1.januar til 17.januar) nyPeriode(18.januar til 31.januar) - håndterInntektsmelding(emptyList(), begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening", førsteFraværsdag = 19.januar) + håndterInntektsmelding( + emptyList(), + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening", + førsteFraværsdag = 19.januar + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -126,12 +189,15 @@ internal class BegrunnelseForReduksjonEllerIkkeUtbetaltTest: AbstractDslTest() { håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() - assertEquals("SSSSSHH SSSSSHH SSSSNHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSNHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertForventetFeil( forklaring = "Når arbeidsgiver oppgir første fraværsdag ut i forlengelsen havner varselet om uenighet i " + - "AGP på siste periode. Da utbetaler vi potensielt første periode feil og automatisk.", + "AGP på siste periode. Da utbetaler vi potensielt første periode feil og automatisk.", nå = { - assertVarsel(Varselkode.RV_IM_3, 2.vedtaksperiode.filter()) + assertVarsel(Varselkode.RV_IM_3, 2.vedtaksperiode.filter()) }, ønsket = { assertVarsel(Varselkode.RV_IM_3, 1.vedtaksperiode.filter()) @@ -139,4 +205,4 @@ internal class BegrunnelseForReduksjonEllerIkkeUtbetaltTest: AbstractDslTest() { ) } } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/FlereSkj\303\246ringstidspunktTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/FlereSkj\303\246ringstidspunktTest.kt" index 737f507f2a..88346ae440 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/FlereSkj\303\246ringstidspunktTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/FlereSkj\303\246ringstidspunktTest.kt" @@ -21,22 +21,31 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Test -internal class FlereSkjæringstidspunktTest: AbstractDslTest() { +internal class FlereSkjæringstidspunktTest : AbstractDslTest() { @Test fun `Først sier sykmeldte at det var egenmeldingsdag, så ombestemmer de seg`() { a1 { nyttVedtak(januar) - håndterSøknad(Sykdom(15.februar, 28.februar, 100.prosent), egenmeldinger = listOf(5.februar til 5.februar)) + håndterSøknad( + Sykdom(15.februar, 28.februar, 100.prosent), + egenmeldinger = listOf(5.februar til 5.februar) + ) observatør.vedtaksperiodeVenter.last().let { assertEquals("INNTEKTSMELDING", it.venterPå.venteårsak.hva) - assertEquals("SSHH SSSSSHH SSS", inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "SSHH SSSSSHH SSS", + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.sykdomstidslinje.toShortString() + ) } håndterSøknad(5.februar til 5.februar) - assertEquals("S", inspektør.vedtaksperioder(3.vedtaksperiode).inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "S", + inspektør.vedtaksperioder(3.vedtaksperiode).inspektør.sykdomstidslinje.toShortString() + ) assertTilstand(3.vedtaksperiode, TilstandType.AVVENTER_INNTEKTSMELDING) } } @@ -44,11 +53,21 @@ internal class FlereSkjæringstidspunktTest: AbstractDslTest() { @Test fun `Egenmeldingsdager fra sykmelding møter begrunnelseForReduksjonEllerIkkeUtbetalt`() { a1 { - håndterSøknad(Sykdom(9.mars, 14.mars, 100.prosent), egenmeldinger = listOf(2.mars til 3.mars)) - håndterInntektsmelding(listOf(2.januar til 17.januar), førsteFraværsdag = 2.mars, begrunnelseForReduksjonEllerIkkeUtbetalt = "IkkeFullStillingsandel") + håndterSøknad( + Sykdom(9.mars, 14.mars, 100.prosent), + egenmeldinger = listOf(2.mars til 3.mars) + ) + håndterInntektsmelding( + listOf(2.januar til 17.januar), + førsteFraværsdag = 2.mars, + begrunnelseForReduksjonEllerIkkeUtbetalt = "IkkeFullStillingsandel" + ) observatør.vedtaksperiodeVenter.last().let { - assertEquals("SHH SSS", inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "SHH SSS", + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.sykdomstidslinje.toShortString() + ) assertEquals("INNTEKTSMELDING", it.venterPå.venteårsak.hva) assertNull(it.venterPå.venteårsak.hvorfor) } @@ -66,14 +85,22 @@ internal class FlereSkjæringstidspunktTest: AbstractDslTest() { håndterSimulering(2.vedtaksperiode) inspektør.vedtaksperioder(2.vedtaksperiode).let { - assertEquals("SSSSHH SSSSSHH SSSSSHH SSSSSHH SSSS", it.sykdomstidslinje.toShortString()) + assertEquals( + "SSSSHH SSSSSHH SSSSSHH SSSSSHH SSSS", + it.sykdomstidslinje.toShortString() + ) assertEquals(5.august, it.inspektør.skjæringstidspunkt) } nullstillTilstandsendringer() håndterInntektsmelding(listOf(27.august til 27.august, 4.september til 18.september)) assertFunksjonellFeil(Varselkode.RV_IV_11, 2.vedtaksperiode.filter()) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) } } @@ -83,14 +110,32 @@ internal class FlereSkjæringstidspunktTest: AbstractDslTest() { håndterSøknad(20.august til 3.september) håndterSøknad(17.september til 19.september) - assertEquals(17.september til 19.september, inspektør.vedtaksperioder(2.vedtaksperiode).periode) - assertEquals("SSS", inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.sykdomstidslinje.toShortString()) - - håndterInntektsmelding(listOf(20.august til 4.september), førsteFraværsdag = 17.september) - - assertEquals(4.september til 19.september, inspektør.vedtaksperioder(2.vedtaksperiode).periode) - assertEquals("U????? ??????? SSS", inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.sykdomstidslinje.toShortString()) - assertEquals(17.september, inspektør.vedtaksperioder(2.vedtaksperiode).skjæringstidspunkt) + assertEquals( + 17.september til 19.september, + inspektør.vedtaksperioder(2.vedtaksperiode).periode + ) + assertEquals( + "SSS", + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.sykdomstidslinje.toShortString() + ) + + håndterInntektsmelding( + listOf(20.august til 4.september), + førsteFraværsdag = 17.september + ) + + assertEquals( + 4.september til 19.september, + inspektør.vedtaksperioder(2.vedtaksperiode).periode + ) + assertEquals( + "U????? ??????? SSS", + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.sykdomstidslinje.toShortString() + ) + assertEquals( + 17.september, + inspektør.vedtaksperioder(2.vedtaksperiode).skjæringstidspunkt + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) @@ -100,8 +145,13 @@ internal class FlereSkjæringstidspunktTest: AbstractDslTest() { håndterSøknad(4.september til 9.september) assertFunksjonellFeil(Varselkode.RV_IV_11, 2.vedtaksperiode.filter()) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingE2ETest.kt index 4b3206bbea..fd15586bf7 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingE2ETest.kt @@ -123,7 +123,12 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { forlengVedtak(februar) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) - val inntektsmeldingId = håndterInntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT*2, avsendersystem = NAV_NO_SELVBESTEMT, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + val inntektsmeldingId = håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT * 2, + avsendersystem = NAV_NO_SELVBESTEMT, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertTrue(inntektsmeldingId in observatør.inntektsmeldingIkkeHåndtert) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) @@ -140,10 +145,18 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { assertSisteTilstand(vedtaksperiodeIdFebruar, TIL_INFOTRYGD) nullstillTilstandsendringer() - val im = håndterInntektsmelding(listOf(1.januar til 16.januar), avsendersystem = NAV_NO, vedtaksperiodeIdInnhenter = vedtaksperiodeIdFebruar, refusjon = Refusjon(1.daglig, null)) + val im = håndterInntektsmelding( + listOf(1.januar til 16.januar), + avsendersystem = NAV_NO, + vedtaksperiodeIdInnhenter = vedtaksperiodeIdFebruar, + refusjon = Refusjon(1.daglig, null) + ) assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertEquals(INNTEKT, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[20.januar].beløp) + assertEquals( + INNTEKT, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[20.januar].beløp + ) assertTrue(im in observatør.inntektsmeldingIkkeHåndtert) } @@ -151,20 +164,38 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { fun `altinn-inntektsmelding oppgir opphør av refusjon tilbake i tid i forhold til første fraværsdag`() { nyttVedtak(1.juni til 30.juni) nyPeriode(1.august til 31.august) - håndterInntektsmelding(listOf(1.juni til 16.juni), førsteFraværsdag = 1.august, beregnetInntekt = INNTEKT, refusjon = Refusjon(INNTEKT, 30.juni), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.juni til 16.juni), + førsteFraværsdag = 1.august, + beregnetInntekt = INNTEKT, + refusjon = Refusjon(INNTEKT, 30.juni), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertSisteTilstand(2.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) } @Test fun `Manglende sporing av IM ved langt gap mellom AGP og FF når IM kommer før søknad`() { - val inntektsmeldingId = håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.mars, avsendersystem = ALTINN) + val inntektsmeldingId = håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.mars, + avsendersystem = ALTINN + ) håndterSøknad(1.mars til 31.mars) håndterVilkårsgrunnlag() assertForventetFeil( forklaring = "Manglende sporing av IM ved langt gap mellom AGP og FF når IM kommer før søknad", - nå = { assertFalse(inspektør.hendelseIder(1.vedtaksperiode).contains(inntektsmeldingId)) }, - ønsket = { assertTrue(inspektør.hendelseIder(1.vedtaksperiode).contains(inntektsmeldingId)) } + nå = { + assertFalse( + inspektør.hendelseIder(1.vedtaksperiode).contains(inntektsmeldingId) + ) + }, + ønsket = { + assertTrue( + inspektør.hendelseIder(1.vedtaksperiode).contains(inntektsmeldingId) + ) + } ) } @@ -192,10 +223,21 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { @Test fun `tom arbeidsgiverperiode og første fraværsdag dagen efter`() { nyPeriode(1.januar til 15.januar) - håndterInntektsmelding(listOf(), førsteFraværsdag = 16.januar, begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening", avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(), + førsteFraværsdag = 16.januar, + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening", + avsendersystem = ALTINN + ) assertEquals(2, inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.size) - assertEquals(AVSLUTTET_UTEN_VEDTAK, inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.first().tilstand) - assertEquals(AVSLUTTET_UTEN_VEDTAK, inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().tilstand) + assertEquals( + AVSLUTTET_UTEN_VEDTAK, + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.first().tilstand + ) + assertEquals( + AVSLUTTET_UTEN_VEDTAK, + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().tilstand + ) } @@ -204,7 +246,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { nyttVedtak(1.januar til 25.januar) forlengVedtak(26.januar til 28.februar) håndterInntektsmelding(listOf(26.januar til 10.februar), avsendersystem = ALTINN) - assertEquals("AAAAARR AAAAARR AAAAARR AAAASHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "AAAAARR AAAAARR AAAAARR AAAASHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomstidslinje.toShortString() + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -215,7 +260,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { assertTilstand(1.vedtaksperiode, AVSLUTTET) assertTilstand(2.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING) assertEquals(2, inspektør.vilkårsgrunnlagHistorikkInnslag().size) - assertEquals(setOf(1.januar, 26.januar), inspektør.vilkårsgrunnlaghistorikk().aktiveSpleisSkjæringstidspunkt) + assertEquals( + setOf(1.januar, 26.januar), + inspektør.vilkårsgrunnlaghistorikk().aktiveSpleisSkjæringstidspunkt + ) } @Test @@ -227,29 +275,51 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { assertSisteTilstand(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING) assertSisteTilstand(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - håndterInntektsmelding(listOf(25.januar til 9.februar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(25.januar til 9.februar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertSisteTilstand(2.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) assertSisteTilstand(3.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) assertVarsel(RV_IM_3, 2.vedtaksperiode.filter()) assertVarsel(RV_IM_3, 3.vedtaksperiode.filter()) } + @Test fun `uenighet i agp kan delvis bli utbetalt automatisk`() { - håndterSøknad(Sykdom(1.januar, 15.januar, 100.prosent)) // En periode arbeidsgiver har glemt/ikke fått med seg + håndterSøknad( + Sykdom( + 1.januar, + 15.januar, + 100.prosent + ) + ) // En periode arbeidsgiver har glemt/ikke fått med seg håndterSøknad(Sykdom(22.januar, 5.februar, 100.prosent)) håndterSøknad(Sykdom(6.februar, 6.februar, 100.prosent)) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING) assertSisteTilstand(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - håndterInntektsmelding(listOf(22.januar til 6.februar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(22.januar til 6.februar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) - assertEquals(listOf(1.januar til 15.januar, 22.januar til 22.januar), inspektør.arbeidsgiverperioder(2.vedtaksperiode)) - assertEquals("PNNNNHH NNNNNHH N", inspektør.utbetalingstidslinjer(2.vedtaksperiode).toString()) - assertVarsel(RV_IM_3, 3.vedtaksperiode.filter()) // Siste periode som håndterer dager fra IM får varsel (6.feb) + assertEquals( + listOf(1.januar til 15.januar, 22.januar til 22.januar), + inspektør.arbeidsgiverperioder(2.vedtaksperiode) + ) + assertEquals( + "PNNNNHH NNNNNHH N", + inspektør.utbetalingstidslinjer(2.vedtaksperiode).toString() + ) + assertVarsel( + RV_IM_3, + 3.vedtaksperiode.filter() + ) // Siste periode som håndterer dager fra IM får varsel (6.feb) assertForventetFeil( forklaring = """ @@ -268,8 +338,22 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(16.februar, 27.februar, 100.prosent)) håndterInntektsmelding(listOf(1.februar til 16.februar), førsteFraværsdag = 1.januar) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -277,18 +361,32 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(4.januar til fredag(19.januar)), avsendersystem = ALTINN) håndterSøknad(Sykdom(mandag(22.januar), 31.januar, 100.prosent)) assertEquals(4.januar til 31.januar, inspektør.periode(1.vedtaksperiode)) - assertEquals(listOf(4.januar til fredag(19.januar)), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) + assertEquals( + listOf(4.januar til fredag(19.januar)), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) - assertEquals("UUGG UUUUUGG UUUUU?? SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "UUGG UUUUUGG UUUUU?? SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) } @Test fun `Forkaster søknaden på direkten med etterfølgende svar fra portal`() { nyttVedtak(1.januar(2016) til 31.januar(2016), orgnummer = a1) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), andreInntektskilder = true, orgnummer = a2) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + andreInntektskilder = true, + orgnummer = a2 + ) assertSisteForkastetPeriodeTilstand(a2, 1.vedtaksperiode, TIL_INFOTRYGD) - håndterInntektsmeldingPortal(listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a2) + håndterInntektsmeldingPortal( + listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 1.vedtaksperiode, + orgnummer = a2 + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) } @@ -296,7 +394,12 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { fun `Håndterer ikke inntektsmelding fra portal`() { nyttVedtak(1.januar(2016) til 31.januar(2016), orgnummer = a1) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a2) - håndterInntektsmeldingPortal(listOf(1.januar til 16.januar), harOpphørAvNaturalytelser = true, vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a2) + håndterInntektsmeldingPortal( + listOf(1.januar til 16.januar), + harOpphørAvNaturalytelser = true, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode, + orgnummer = a2 + ) assertSisteForkastetPeriodeTilstand(a2, 1.vedtaksperiode, TIL_INFOTRYGD) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) } @@ -307,12 +410,22 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { val inntektsmelding2 = UUID.randomUUID() nyPeriode(20.mars.somPeriode()) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) nullstillTilstandsendringer() // Inntektsmelding treffer ikke (litt kødden siden den bare er 12 dager..) - håndterInntektsmelding(listOf(5.mars til 16.mars), id = inntektsmelding1, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(5.mars til 16.mars), + id = inntektsmelding1, + avsendersystem = ALTINN + ) assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertHarIkkeHendelseIder(1.vedtaksperiode, inntektsmelding1) @@ -325,7 +438,12 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { // Før replay har vi nå gått til avventer inntektsmelding på bakgrunn av denne inntektsmeldingen // MEN, ettersom første fraværsdag er satt til 21.mars "treffer" ikke inntekt & refusjon // Så vi trenger en annen inntektsmelding som kan gi inntekt og refusjon for 20.mars som nå skal utbetales - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertHarHendelseIder(1.vedtaksperiode, inntektsmelding2) assertHarIkkeHendelseIder(1.vedtaksperiode, inntektsmelding1) assertEquals(1.mars til 20.mars, inspektør.periode(1.vedtaksperiode)) @@ -335,8 +453,16 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { ) } - assertEquals(listOf(1.mars til 6.mars, 10.mars til 19.mars), inspektør.arbeidsgiverperioder(1.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertEquals( + listOf(1.mars til 6.mars, 10.mars til 19.mars), + inspektør.arbeidsgiverperioder(1.vedtaksperiode) + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -349,7 +475,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { assertSisteTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING) assertSisteTilstand(4.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - håndterInntektsmelding(listOf(16.januar til 31.januar), førsteFraværsdag = 20.februar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(16.januar til 31.januar), + førsteFraværsdag = 20.februar, + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) assertEquals(16.januar til 6.februar, inspektør.periode(1.vedtaksperiode)) assertEquals(16.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(16.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) @@ -389,7 +519,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { fun `Lang og useriøs arbeidsgiverperiode`() { nyPeriode(januar) håndterInntektsmelding(listOf(januar)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) } @@ -397,7 +530,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { fun `Kort og useriøs arbeidsgiverperiode`() { nyPeriode(januar) håndterInntektsmelding(listOf(1.januar til 5.januar)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) } @@ -406,14 +542,21 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { nyttVedtak(januar) forlengVedtak(februar) - håndterInntektsmelding(listOf(1.oktober til 16.oktober), orgnummer = a2, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(1.oktober til 16.oktober), + orgnummer = a2, + avsendersystem = ALTINN + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) } @Test fun `Skal ikke bruke inntekt fra gammel inntektsmelding`() { - håndterInntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), avsendersystem = ALTINN) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + avsendersystem = ALTINN + ) nyPeriode(april) assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) } @@ -421,9 +564,19 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { @Test fun `Arbeidsgiver opplyser om feilaktig ny arbeidsgiverperiode som dekker hele perioden som skal utbetales`() { nyttVedtak(1.januar til 20.januar, arbeidsgiverperiode = listOf(1.januar til 16.januar)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) - nyttVedtak(25.januar til 25.januar, arbeidsgiverperiode = listOf(25.januar til 9.februar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(2.vedtaksperiode)) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) + nyttVedtak( + 25.januar til 25.januar, + arbeidsgiverperiode = listOf(25.januar til 9.februar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(2.vedtaksperiode) + ) } @Test @@ -436,8 +589,15 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(2.vedtaksperiode) håndterVilkårsgrunnlag(2.vedtaksperiode) assertVarsel(RV_IM_4, 2.vedtaksperiode.filter()) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK + ) } @Test @@ -475,23 +635,32 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.februar, 19.februar)) håndterSøknad(Sykdom(1.februar, 19.februar, 100.prosent)) - håndterInntektsmelding(listOf(1.februar til 16.februar), vedtaksperiodeIdInnhenter = 5.vedtaksperiode) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + vedtaksperiodeIdInnhenter = 5.vedtaksperiode + ) håndterVilkårsgrunnlag(5.vedtaksperiode) håndterYtelser(5.vedtaksperiode) assertForventetFeil( forklaring = "Inntektsmelding forteller _implisitt_ at 1.jan-30.jan er arbeidsdager. Dagene henger igjen som sykedager i modellen." + - "De spredte sykedagene er innenfor 16 dager fra hverandre, slik at de teller med i samme arbeidsgiverperiodetelling." + - "Dette medfører at vi starter utbetaling tidligere enn det arbeidsgiver har ment å fortelle oss er riktig.", + "De spredte sykedagene er innenfor 16 dager fra hverandre, slik at de teller med i samme arbeidsgiverperiodetelling." + + "Dette medfører at vi starter utbetaling tidligere enn det arbeidsgiver har ment å fortelle oss er riktig.", nå = { assertEquals(Dag.Sykedag::class, inspektør.sykdomstidslinje[1.januar]::class) assertEquals(Dag.Sykedag::class, inspektør.sykdomstidslinje[10.januar]::class) assertEquals(Dag.SykHelgedag::class, inspektør.sykdomstidslinje[20.januar]::class) assertEquals(Dag.Sykedag::class, inspektør.sykdomstidslinje[30.januar]::class) - assertEquals(13.februar, inspektør.utbetaling(0).arbeidsgiverOppdrag.first().inspektør.fom) + assertEquals( + 13.februar, + inspektør.utbetaling(0).arbeidsgiverOppdrag.first().inspektør.fom + ) }, ønsket = { - assertEquals(1.februar, inspektør.utbetaling(0).arbeidsgiverOppdrag.first().inspektør.fom) + assertEquals( + 1.februar, + inspektør.utbetaling(0).arbeidsgiverOppdrag.first().inspektør.fom + ) fail("""\_(ツ)_/¯""") } ) @@ -502,42 +671,69 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(22.januar, 15.februar, 100.prosent), orgnummer = a1) håndterSøknad(Sykdom(22.januar, 15.februar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(11.januar til 13.januar, 20.januar til 2.februar), orgnummer = a1) + håndterInntektsmelding( + listOf(11.januar til 13.januar, 20.januar til 2.februar), + orgnummer = a1 + ) håndterInntektsmelding(listOf(16.februar til 3.mars), orgnummer = a2) - assertEquals("UUGR AAAAAGG SSSSSHH SSSSSHH SSSSSHH SSSS", inspektør(a1).sykdomshistorikk.sykdomstidslinje().toShortString()) - assertEquals("AAAAARR AAAAARR AAAAARR AAAA", inspektør(a2).sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "UUGR AAAAAGG SSSSSHH SSSSSHH SSSSSHH SSSS", + inspektør(a1).sykdomshistorikk.sykdomstidslinje().toShortString() + ) + assertEquals( + "AAAAARR AAAAARR AAAAARR AAAA", + inspektør(a2).sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, orgnummer = a2) håndterSykmelding(Sykmeldingsperiode(16.februar, 10.mars), orgnummer = a2) håndterSøknad(Sykdom(16.februar, 10.mars, 100.prosent), orgnummer = a2) - assertEquals("AAAAARR AAAAARR AAAAARR AAAASHH SSSSSHH SSSSSHH SSSSSH", inspektør(a2).sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "AAAAARR AAAAARR AAAAARR AAAASHH SSSSSHH SSSSSHH SSSSSH", + inspektør(a2).sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, orgnummer = a2) assertSisteTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, orgnummer = a1, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( - ArbeidsgiverInntekt(a1, listOf( + ArbeidsgiverInntekt( + a1, listOf( desember(2017).lønnsinntekt(), november(2017).lønnsinntekt(), oktober(2017).lønnsinntekt() - )), - ArbeidsgiverInntekt(a2, listOf( + ) + ), + ArbeidsgiverInntekt( + a2, listOf( desember(2017).lønnsinntekt(), november(2017).lønnsinntekt(), oktober(2017).lønnsinntekt(), - )), + ) + ), ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, 1.januar(2017), null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.januar(2017), null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 1.januar(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.januar(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -558,13 +754,28 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(9.januar, 19.januar)) håndterSøknad(Sykdom(9.januar, 19.januar, 100.prosent)) - håndterInntektsmelding(listOf(9.januar til 19.januar, 23.januar til 27.januar), førsteFraværsdag = 23.januar) + håndterInntektsmelding( + listOf(9.januar til 19.januar, 23.januar til 27.januar), + førsteFraværsdag = 23.januar + ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) - assertEquals(listOf(1.januar til 6.januar), inspektør.arbeidsgiverperioder(1.vedtaksperiode)) - assertEquals(listOf(1.januar til 6.januar, 9.januar til 18.januar), inspektør.arbeidsgiverperioder(2.vedtaksperiode)) + assertEquals( + listOf(1.januar til 6.januar), + inspektør.arbeidsgiverperioder(1.vedtaksperiode) + ) + assertEquals( + listOf(1.januar til 6.januar, 9.januar til 18.januar), + inspektør.arbeidsgiverperioder(2.vedtaksperiode) + ) assertForventetFeil( forklaring = "Inntektsmelding forteller _implisitt_ at 1.jan-6.jan er arbeidsdager. Dagene henger igjen som sykedager i modellen", @@ -582,18 +793,30 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { fun `Feilutbetaling på grunn av feilberegnet arbeidsgiverperiode`() { håndterSøknad(Sykdom(1.januar, 6.januar, 100.prosent)) håndterSøknad(Sykdom(9.januar, 19.januar, 100.prosent)) - håndterInntektsmelding(listOf(9.januar til 24.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(9.januar til 24.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertIngenVarsler() håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) assertForventetFeil( forklaring = "Inntektsmelding forteller _implisitt_ at 1.jan-6.jan er arbeidsdager. Dagene henger igjen som sykedager i modellen." + - "De spredte sykedagene er innenfor 16 dager fra hverandre, slik at de teller med i samme arbeidsgiverperiodetelling." + - "Dette medfører at vi starter utbetaling tidligere enn det arbeidsgiver har ment å fortelle oss er riktig.", + "De spredte sykedagene er innenfor 16 dager fra hverandre, slik at de teller med i samme arbeidsgiverperiodetelling." + + "Dette medfører at vi starter utbetaling tidligere enn det arbeidsgiver har ment å fortelle oss er riktig.", nå = { - assertEquals(19.januar, inspektør.utbetaling(0).arbeidsgiverOppdrag.first().inspektør.fom) + assertEquals( + 19.januar, + inspektør.utbetaling(0).arbeidsgiverOppdrag.first().inspektør.fom + ) assertTilstander( 2.vedtaksperiode, START, @@ -617,7 +840,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 8.januar, 100.prosent)) håndterSykmelding(Sykmeldingsperiode(1.februar, 20.februar)) håndterSøknad(Sykdom(1.februar, 20.februar, 100.prosent)) - håndterInntektsmelding(listOf(1.januar til 8.januar, 10.januar til 17.januar), 1.februar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 8.januar, 10.januar til 17.januar), + 1.februar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertEquals(9.januar til 20.februar, inspektør.periode(2.vedtaksperiode)) } @@ -698,7 +925,8 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterInntektsmelding( listOf(Periode(1.november(2020), 16.november(2020))), - førsteFraværsdag = 1.november(2020), refusjon = Refusjon(INNTEKT, 6.desember(2020), emptyList()), + førsteFraværsdag = 1.november(2020), + refusjon = Refusjon(INNTEKT, 6.desember(2020), emptyList()), ) håndterSykmelding(Sykmeldingsperiode(21.november(2020), 10.desember(2020))) @@ -736,7 +964,8 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(25.november(2020), 10.desember(2020), 100.prosent)) håndterInntektsmelding( listOf(Periode(1.november(2020), 16.november(2020))), - førsteFraværsdag = 1.november(2020), refusjon = Refusjon(INNTEKT, 6.desember(2020), emptyList()), + førsteFraværsdag = 1.november(2020), + refusjon = Refusjon(INNTEKT, 6.desember(2020), emptyList()), ) assertTilstander( @@ -763,7 +992,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { @Test fun `Opphør i refusjon som kommer mens førstegangssak er i play kaster perioden`() { - håndterInntektsmelding(listOf(1.november(2020) til 16.november(2020)), avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(1.november(2020) til 16.november(2020)), + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(1.november(2020), 20.november(2020), 100.prosent)) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -775,7 +1007,14 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - assertTilstander(1.vedtaksperiode, AVVENTER_SIMULERING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_SIMULERING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING + ) assertVarsel(RV_IM_4, AktivitetsloggFilter.person()) } @@ -827,7 +1066,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { @Test fun `korrigerer agp langt tilbake i tid`() { nyPeriode(5.januar til 16.januar) - nyttVedtak(17.januar til 31.januar, arbeidsgiverperiode = listOf(5.januar til 20.januar), førsteFraværsdag = 5.januar) + nyttVedtak( + 17.januar til 31.januar, + arbeidsgiverperiode = listOf(5.januar til 20.januar), + førsteFraværsdag = 5.januar + ) forlengVedtak(februar) forlengVedtak(mars) nyPeriode(10.april til 30.april) @@ -1039,7 +1282,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(7.februar, 7.februar)) håndterSøknad(Sykdom(7.februar, 7.februar, 100.prosent, null)) - håndterInntektsmelding(listOf(3.januar til 18.januar), 7.februar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(3.januar til 18.januar), + 7.februar, + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -1084,9 +1331,27 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { harOpphørAvNaturalytelser = true ) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } @Test @@ -1096,15 +1361,35 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(18.april(2021), 2.mai(2021), 100.prosent)) håndterInntektsmelding( - arbeidsgiverperioder = listOf(29.mars(2021) til 31.mars(2021), 1.april(2021) til 12.april(2021)), + arbeidsgiverperioder = listOf( + 29.mars(2021) til 31.mars(2021), + 1.april(2021) til 12.april(2021) + ), beregnetInntekt = INGEN, refusjon = Refusjon(INNTEKT, null, emptyList()), harOpphørAvNaturalytelser = true ) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } @Test @@ -1119,7 +1404,12 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() - håndterOverstyrTidslinje((22.januar til 23.januar).map { ManuellOverskrivingDag(it, Permisjonsdag) }) + håndterOverstyrTidslinje((22.januar til 23.januar).map { + ManuellOverskrivingDag( + it, + Permisjonsdag + ) + }) håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() @@ -1127,7 +1417,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { nyPeriode(februar) håndterInntektsmelding(listOf(1.februar til 16.februar)) - assertEquals("SSSSSHH SSSSSHH SSSSSHH PPSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH PPSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) } @Test @@ -1147,7 +1440,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.mars til 16.mars), førsteFraværsdag = 1.mars) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSH", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSH", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) } @Test @@ -1160,7 +1456,12 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { assertEquals(16.januar til 16.februar, inspektør(a1).periode(1.vedtaksperiode)) assertEquals(16.januar, inspektør(a1).skjæringstidspunkt(1.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -1174,7 +1475,7 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { val tidslinje = inspektør.sykdomstidslinje assertTrue((1.januar til 7.januar).all { tidslinje[it] is Dag.Arbeidsdag || tidslinje[it] is Dag.FriskHelgedag }) assertTrue((8.januar til 20.januar).all { tidslinje[it] is Dag.Sykedag || tidslinje[it] is Dag.SykHelgedag || tidslinje[it] is Dag.Arbeidsgiverdag || tidslinje[it] is Dag.ArbeidsgiverHelgedag }) - assertTrue((21.januar til 23.januar).all { tidslinje[it] is Dag.UkjentDag }) + assertTrue((21.januar til 23.januar).all { tidslinje[it] is Dag.UkjentDag }) assertIngenVarsel( RV_IM_4, 1.vedtaksperiode.filter() @@ -1189,7 +1490,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { // Ved en tidligere periode resettes trimming av inntektsmelding og vi ender med å håndtere samme inntektsmelding flere ganger i en vedtaksperiode nyttVedtak(1.januar(2017) til 31.januar(2017)) - håndterInntektsmelding(listOf(10.januar til 25.januar), førsteFraværsdag = 10.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(10.januar til 25.januar), + førsteFraværsdag = 10.januar, + avsendersystem = ALTINN + ) håndterSykmelding(Sykmeldingsperiode(10.januar, 31.januar)) assertIngenVarsler(2.vedtaksperiode.filter()) håndterSøknad(Sykdom(10.januar, 31.januar, 100.prosent)) @@ -1205,7 +1510,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { @Test fun `Håndterer ikke inntektsmelding to ganger ved replay`() { // Happy case av testen med navn: Håndterer ikke inntektsmelding to ganger ved replay - hvor vi har en tidligere periode og gap - håndterInntektsmelding(listOf(10.januar til 25.januar), førsteFraværsdag = 10.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(10.januar til 25.januar), + førsteFraværsdag = 10.januar, + avsendersystem = ALTINN + ) håndterSykmelding(Sykmeldingsperiode(10.januar, 31.januar)) håndterSøknad(Sykdom(10.januar, 31.januar, 100.prosent)) håndterVilkårsgrunnlag(1.vedtaksperiode) @@ -1227,11 +1536,16 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { førsteFraværsdag = 5.februar, beregnetInntekt = 42000.månedlig, ) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, beregnetInntekt = INNTEKT) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + beregnetInntekt = INNTEKT + ) håndterVilkårsgrunnlag(1.vedtaksperiode) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(EN_ARBEIDSGIVER, sykepengegrunnlagInspektør.inntektskilde) @@ -1239,7 +1553,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { assertEquals(INNTEKT, it.inntektsopplysning.inspektør.beløp) - assertEquals(no.nav.helse.person.inntekt.Inntektsmelding::class, it.inntektsopplysning::class) + assertEquals( + no.nav.helse.person.inntekt.Inntektsmelding::class, + it.inntektsopplysning::class + ) } } @@ -1284,13 +1601,24 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(10.desember, 14.desember)) håndterSøknad(Sykdom(10.desember, 14.desember, 100.prosent)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) assertTilstander( 2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, ) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -1352,13 +1680,18 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(17.januar, 31.januar), orgnummer = a2) håndterSøknad(Sykdom(17.januar, 31.januar, 100.prosent), orgnummer = a2) - assertTilstander(1.vedtaksperiode, AVVENTER_SIMULERING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_SIMULERING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, orgnummer = a2) assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, orgnummer = a2) assertForventetFeil( forklaring = "Fordi vi allerede har vilkårsprøvd skjæringstidspunktet mener vi at vi har " + - "'nødvendig inntekt for vilkårsprøving' for alle arbeidsgiverne, slik at periode 1 hos ag1 går derfor videre til utbetaling." + - "Ideelt sett skulle vi her ha forkastet vilkårsgrunnlaget siden det 1) ikke er benyttet enda, og 2) vi har fått inntekt for arbeidsgiveren vi trodde var ghost.", + "'nødvendig inntekt for vilkårsprøving' for alle arbeidsgiverne, slik at periode 1 hos ag1 går derfor videre til utbetaling." + + "Ideelt sett skulle vi her ha forkastet vilkårsgrunnlaget siden det 1) ikke er benyttet enda, og 2) vi har fått inntekt for arbeidsgiveren vi trodde var ghost.", nå = { assertNotNull(inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)) }, @@ -1388,24 +1721,54 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { 12.januar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test fun `Ny inntektsmelding som treffer AvventerGodkjenning - hensyntar nye refusjonsopplysninger`() { håndterSykmelding(januar) håndterSøknad(januar) - håndterInntektsmelding(listOf(Periode(1.januar, 16.januar)), refusjon = Refusjon(INNTEKT, null, emptyList())) + håndterInntektsmelding( + listOf(Periode(1.januar, 16.januar)), + refusjon = Refusjon(INNTEKT, null, emptyList()) + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) assertFalse(inspektør.utbetaling(0).personOppdrag.harUtbetalinger()) - assertEquals(17.januar til 31.januar, Oppdrag.periode(inspektør.utbetaling(0).arbeidsgiverOppdrag)) + assertEquals( + 17.januar til 31.januar, + Oppdrag.periode(inspektør.utbetaling(0).arbeidsgiverOppdrag) + ) - håndterInntektsmelding(listOf(Periode(1.januar, 16.januar)), refusjon = Refusjon(INGEN, null, emptyList())) + håndterInntektsmelding( + listOf(Periode(1.januar, 16.januar)), + refusjon = Refusjon(INGEN, null, emptyList()) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -1429,7 +1792,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { AktivitetsloggFilter.person() ) assertTrue(inspektør.utbetaling(1).personOppdrag.harUtbetalinger()) - assertEquals(17.januar til 31.januar, Oppdrag.periode(inspektør.utbetaling(1).personOppdrag)) + assertEquals( + 17.januar til 31.januar, + Oppdrag.periode(inspektør.utbetaling(1).personOppdrag) + ) } @Test @@ -1440,7 +1806,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterInntektsmelding(listOf(Periode(1.januar, 16.januar)), beregnetInntekt = INNTEKT + 1000.månedlig) + håndterInntektsmelding( + listOf(Periode(1.januar, 16.januar)), + beregnetInntekt = INNTEKT + 1000.månedlig + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -1471,8 +1840,18 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { @Test fun `Opphør av naturalytelser kaster periode til infotrygd`() { håndterSøknad(januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), 1.januar, harOpphørAvNaturalytelser = true) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + 1.januar, + harOpphørAvNaturalytelser = true + ) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } @Test @@ -1483,7 +1862,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(30.januar, 12.februar)) håndterSøknad(Sykdom(30.januar, 12.februar, 100.prosent)) - håndterInntektsmelding(listOf(Periode(1.januar, 16.januar)), 1.februar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(Periode(1.januar, 16.januar)), + 1.februar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertFalse(inspektør.sykdomstidslinje[30.januar] is Dag.Arbeidsdag) assertFalse(inspektør.sykdomstidslinje[31.januar] is Dag.Arbeidsdag) assertInntektshistorikkForDato(INNTEKT, 30.januar, inspektør = inspektør) @@ -1562,8 +1945,19 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD ) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } @Test @@ -1576,7 +1970,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(20.februar, 28.februar)) håndterSøknad(Sykdom(20.februar, 28.februar, 100.prosent)) - håndterInntektsmelding(listOf(Periode(20.februar, 8.mars)), 20.februar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(Periode(20.februar, 8.mars)), + 20.februar, + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars)) håndterSøknad(mars) @@ -1584,10 +1982,35 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(20.november(2017), 13.desember(2017))) håndterSøknad(Sykdom(20.november(2017), 13.desember(2017), 100.prosent)) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(4.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 4.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) } @Test @@ -1625,7 +2048,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { assertEquals(2.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) Assertions.assertNotNull(inspektør.vilkårsgrunnlag(1.vedtaksperiode)) - håndterInntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), førsteFraværsdag = 12.februar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + førsteFraværsdag = 12.februar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertEquals(2.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) Assertions.assertNotNull(inspektør.vilkårsgrunnlag(1.vedtaksperiode)) @@ -1679,7 +2106,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(8.januar, 23.februar)) håndterSøknad(Sykdom(8.januar, 23.februar, 100.prosent)) håndterInntektsmelding( - listOf(Periode(3.januar, 7.januar), Periode(15.januar, 20.januar), Periode(23.januar, 28.januar)), + listOf( + Periode(3.januar, 7.januar), + Periode(15.januar, 20.januar), + Periode(23.januar, 28.januar) + ), vedtaksperiodeIdInnhenter = 2.vedtaksperiode ) @@ -1775,7 +2206,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.februar, 23.februar)) håndterSøknad(Sykdom(1.februar, 23.februar, 100.prosent)) - håndterInntektsmelding(listOf(3.januar til 18.januar), førsteFraværsdag = 1.februar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) // Touches prior periode + håndterInntektsmelding( + listOf(3.januar til 18.januar), + førsteFraværsdag = 1.februar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) // Touches prior periode assertIngenFunksjonelleFeil() håndterYtelser(1.vedtaksperiode) @@ -1829,7 +2264,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSFFFF FFFFFFF FFFFFFF FFFFFFF FFF", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSFFFF FFFFFFF FFFFFFF FFFFFFF FFF", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars)) håndterSøknad(mars) håndterInntektsmelding(listOf(27.februar til 14.mars), avsendersystem = ALTINN) @@ -1837,7 +2275,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(1.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) assertEquals(1.januar, inspektør.skjæringstidspunkt(3.vedtaksperiode)) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSFFFF FFFFFFF FFFFFFF FFFFFFF FFFSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSH", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSFFFF FFFFFFF FFFFFFF FFFFFFF FFFSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSH", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) håndterYtelser(2.vedtaksperiode) @@ -1854,9 +2295,14 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { assertVarsel(RV_IM_24, 2.vedtaksperiode.filter()) assertEquals(1.januar til 31.mars, inspektør.sisteUtbetaling().periode) } + @Test fun `vedtaksperiode i AVSLUTTET_UTEN_UTBETALING burde utvides ved replay av inntektsmelding`() { - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + avsendersystem = ALTINN + ) håndterSykmelding(Sykmeldingsperiode(4.januar, 10.januar)) håndterSøknad(Sykdom(4.januar, 10.januar, 100.prosent)) håndterSykmelding(Sykmeldingsperiode(11.januar, 31.januar)) @@ -1875,8 +2321,14 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { listOf(1.januar til 16.januar), begrunnelseForReduksjonEllerIkkeUtbetalt = "FiskerMedHyre", ) - assertInfo("Arbeidsgiver har redusert utbetaling av arbeidsgiverperioden på grunn av: FiskerMedHyre", 1.vedtaksperiode.filter()) - assertFunksjonellFeil("Arbeidsgiver har redusert utbetaling av arbeidsgiverperioden", 1.vedtaksperiode.filter()) + assertInfo( + "Arbeidsgiver har redusert utbetaling av arbeidsgiverperioden på grunn av: FiskerMedHyre", + 1.vedtaksperiode.filter() + ) + assertFunksjonellFeil( + "Arbeidsgiver har redusert utbetaling av arbeidsgiverperioden", + 1.vedtaksperiode.filter() + ) assertSisteTilstand(1.vedtaksperiode, TIL_INFOTRYGD) } @@ -1902,7 +2354,11 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(19.januar, 21.januar, 100.prosent)) assertSisteTilstand(3.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 19.januar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 19.januar, + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) assertTrue(inspektør.sykdomstidslinje[1.januar] is Dag.Arbeidsgiverdag) assertTrue(inspektør.sykdomstidslinje[2.januar] is Dag.Arbeidsgiverdag) @@ -1948,10 +2404,19 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { førsteFraværsdag = 28.februar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode ) - assertEquals("R AAAAARR AAAAARR AAAAARR AAAAARR AASSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSH", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "R AAAAARR AAAAARR AAAAARR AAAAARR AASSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSH", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertEquals(emptyList(), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) - assertEquals(listOf(28.februar til 15.mars), inspektør.arbeidsgiverperiode(2.vedtaksperiode)) - assertEquals(listOf(28.februar til 15.mars), inspektør.arbeidsgiverperiode(2.vedtaksperiode)) + assertEquals( + listOf(28.februar til 15.mars), + inspektør.arbeidsgiverperiode(2.vedtaksperiode) + ) + assertEquals( + listOf(28.februar til 15.mars), + inspektør.arbeidsgiverperiode(2.vedtaksperiode) + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(3.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) @@ -1963,13 +2428,26 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterUtbetalt() assertSisteTilstand(3.vedtaksperiode, AVSLUTTET) - assertEquals(28.januar, inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.skjæringstidspunkt) - assertEquals(28.februar, inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.skjæringstidspunkt) - assertEquals(28.februar, inspektør.vedtaksperioder(3.vedtaksperiode).inspektør.skjæringstidspunkt) + assertEquals( + 28.januar, + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.skjæringstidspunkt + ) + assertEquals( + 28.februar, + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.skjæringstidspunkt + ) + assertEquals( + 28.februar, + inspektør.vedtaksperioder(3.vedtaksperiode).inspektør.skjæringstidspunkt + ) val beregnetSykdomstidslinje = inspektør.sykdomshistorikk.sykdomstidslinje() val beregnetSykdomstidslinjeDager = beregnetSykdomstidslinje.inspektør.dager - assertTrue(beregnetSykdomstidslinjeDager.filterKeys { it in 28.januar til førsteDagIArbeidsgiverperioden.minusDays(1) }.values.all { + assertTrue(beregnetSykdomstidslinjeDager.filterKeys { + it in 28.januar til førsteDagIArbeidsgiverperioden.minusDays( + 1 + ) + }.values.all { (it is Dag.Arbeidsdag || it is Dag.FriskHelgedag) && it.kommerFra("Inntektsmelding") }) { beregnetSykdomstidslinje.toShortString() } assertTrue(beregnetSykdomstidslinjeDager.filterKeys { it in førsteDagIArbeidsgiverperioden til 31.mars }.values.all { @@ -2018,7 +2496,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { assertEquals(20.januar til 28.februar, inspektør.periode(1.vedtaksperiode)) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) assertIngenVarsel(RV_IM_3, 1.vedtaksperiode.filter()) - assertEquals("GG UUUUUGG UUUUUGG ?SSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "GG UUUUUGG UUUUUGG ?SSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertEquals(1, inspektør.inntektInspektør.size) assertIngenInfo("Inntektsmelding ikke håndtert") } @@ -2038,7 +2519,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { assertEquals(30000.månedlig, it.inntektsopplysning.fastsattÅrsinntekt()) - assertEquals(no.nav.helse.person.inntekt.Inntektsmelding::class, it.inntektsopplysning::class) + assertEquals( + no.nav.helse.person.inntekt.Inntektsmelding::class, + it.inntektsopplysning::class + ) } } @@ -2047,10 +2531,18 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { fun `Hensyntar korrigert inntekt i avventer blokkerende`() { tilGodkjenning(januar, ORGNUMMER) nyPeriode(mars) - håndterInntektsmelding(listOf(1.mars til 16.mars), beregnetInntekt = 25000.månedlig, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + beregnetInntekt = 25000.månedlig, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertSisteTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) - håndterInntektsmelding(listOf(1.mars til 16.mars), beregnetInntekt = 30000.månedlig, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + beregnetInntekt = 30000.månedlig, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() @@ -2063,7 +2555,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { assertEquals(30000.månedlig, it.inntektsopplysning.fastsattÅrsinntekt()) - assertEquals(no.nav.helse.person.inntekt.Inntektsmelding::class, it.inntektsopplysning::class) + assertEquals( + no.nav.helse.person.inntekt.Inntektsmelding::class, + it.inntektsopplysning::class + ) } } @@ -2131,7 +2626,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterSøknad(januar) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertSisteTilstand(3.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) assertSisteTilstand(2.vedtaksperiode, AVVENTER_REVURDERING) @@ -2141,7 +2639,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { fun `Spleis bruker feilaktig en ugyldig egenmeldingsdag i gap-beregning`() { nyttVedtak(januar) nyPeriode(20.februar til 20.mars) - håndterInntektsmelding(listOf(8.februar til 8.februar, 20.februar til 6.mars), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(8.februar til 8.februar, 20.februar til 6.mars), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) @@ -2149,7 +2650,10 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { val avvistDag = vedtaksperiode.utbetalingstidslinje[8.februar] assertTrue(avvistDag is Utbetalingsdag.AvvistDag) - assertEquals(listOf(Begrunnelse.EgenmeldingUtenforArbeidsgiverperiode), vedtaksperiode.utbetalingstidslinje.inspektør.begrunnelse(8.februar)) + assertEquals( + listOf(Begrunnelse.EgenmeldingUtenforArbeidsgiverperiode), + vedtaksperiode.utbetalingstidslinje.inspektør.begrunnelse(8.februar) + ) assertForventetFeil("Arbeidsgiver oppgir en egenmeldingsdag som er innenfor 16 dager til forrige periode. Da anser ikke vi det som Arbeidsgiverdag. Spleis bruker feilaktig 8. februar i gap-beregning og tror 2. vedtaksperiode ikke skal få ny AGP.", nå = { @@ -2178,13 +2682,19 @@ internal class InntektsmeldingE2ETest : AbstractEndToEndTest() { håndterVilkårsgrunnlag( 1.vedtaksperiode, orgnummer = a1, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT*1.1, a2 to INNTEKT*1.1), 25.januar) + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT * 1.1, + a2 to INNTEKT * 1.1 + ), 25.januar + ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_SIMULERING, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - val inntektsopplysningVilkårsgrunnlagA2 = inspektør(a2).vilkårsgrunnlag(25.januar)?.inspektør?.inntektsgrunnlag?.inspektør?.arbeidsgiverInntektsopplysninger?.firstOrNull { it.inspektør.orgnummer == a2}?.inspektør?.inntektsopplysning + val inntektsopplysningVilkårsgrunnlagA2 = + inspektør(a2).vilkårsgrunnlag(25.januar)?.inspektør?.inntektsgrunnlag?.inspektør?.arbeidsgiverInntektsopplysninger?.firstOrNull { it.inspektør.orgnummer == a2 }?.inspektør?.inntektsopplysning assertTrue(inntektsopplysningVilkårsgrunnlagA2 is no.nav.helse.person.inntekt.Inntektsmelding) assertEquals(INNTEKT, inntektsopplysningVilkårsgrunnlagA2?.inspektør?.beløp) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingKommerIkkeE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingKommerIkkeE2ETest.kt index 02ed3a644f..bb008c4959 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingKommerIkkeE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingKommerIkkeE2ETest.kt @@ -23,111 +23,202 @@ import org.junit.jupiter.api.Test internal class InntektsmeldingKommerIkkeE2ETest : AbstractDslTest() { @Test - fun `lager ikke påminnelse om vedtaksperioden har ventet mindre enn tre måneder`() = Toggle.InntektsmeldingSomIkkeKommer.enable { - val nå = LocalDateTime.now() - val tilstandsendringstidspunkt = nå.minusMonths(3).plusDays(1) - a1 { - håndterSøknad(januar) - håndterPåminnelse(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, tilstandsendringstidspunkt, nå) - assertIngenBehov(1.vedtaksperiode, Aktivitet.Behov.Behovtype.InntekterForSykepengegrunnlagForArbeidsgiver) + fun `lager ikke påminnelse om vedtaksperioden har ventet mindre enn tre måneder`() = + Toggle.InntektsmeldingSomIkkeKommer.enable { + val nå = LocalDateTime.now() + val tilstandsendringstidspunkt = nå.minusMonths(3).plusDays(1) + a1 { + håndterSøknad(januar) + håndterPåminnelse( + 1.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + tilstandsendringstidspunkt, + nå + ) + assertIngenBehov( + 1.vedtaksperiode, + Aktivitet.Behov.Behovtype.InntekterForSykepengegrunnlagForArbeidsgiver + ) + } } - } @Test - fun `lager påminnelse om vedtaksperioden har ventet mer enn tre måneder`() = Toggle.InntektsmeldingSomIkkeKommer.enable { - val nå = LocalDateTime.now() - val tilstandsendringstidspunkt = nå.minusMonths(3) - a1 { - håndterSøknad(januar) - håndterPåminnelse(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, tilstandsendringstidspunkt, nå) - assertBehov(1.vedtaksperiode, Aktivitet.Behov.Behovtype.InntekterForSykepengegrunnlagForArbeidsgiver) + fun `lager påminnelse om vedtaksperioden har ventet mer enn tre måneder`() = + Toggle.InntektsmeldingSomIkkeKommer.enable { + val nå = LocalDateTime.now() + val tilstandsendringstidspunkt = nå.minusMonths(3) + a1 { + håndterSøknad(januar) + håndterPåminnelse( + 1.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + tilstandsendringstidspunkt, + nå + ) + assertBehov( + 1.vedtaksperiode, + Aktivitet.Behov.Behovtype.InntekterForSykepengegrunnlagForArbeidsgiver + ) + } } - } @Test - fun `lagrer skatteinntektene som inntektsmelding og går videre`() = Toggle.InntektsmeldingSomIkkeKommer.enable { - val inntektFraSkatt = 10000.månedlig - a1 { - håndterSøknad(januar) - val meldingsreferanseId = håndterSykepengegrunnlagForArbeidsgiver(1.vedtaksperiode, 1.januar, listOf( - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 12), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 11), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 10), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", "") - )) - val hendelser = inspektør.vedtaksperioder(1.vedtaksperiode).behandlinger.hendelser - assertTrue(hendelser.contains(Dokumentsporing.inntektFraAOrdingen(meldingsreferanseId))) + fun `lagrer skatteinntektene som inntektsmelding og går videre`() = + Toggle.InntektsmeldingSomIkkeKommer.enable { + val inntektFraSkatt = 10000.månedlig + a1 { + håndterSøknad(januar) + val meldingsreferanseId = håndterSykepengegrunnlagForArbeidsgiver( + 1.vedtaksperiode, 1.januar, listOf( + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 12), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 11), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 10), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ) + ) + ) + val hendelser = inspektør.vedtaksperioder(1.vedtaksperiode).behandlinger.hendelser + assertTrue( + hendelser.contains( + Dokumentsporing.inntektFraAOrdingen( + meldingsreferanseId + ) + ) + ) - håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode) - assertVarsel(Varselkode.RV_IV_10, 1.vedtaksperiode.filter()) - assertUtbetalingsbeløp(1.vedtaksperiode, - forventetArbeidsgiverbeløp = 0, - forventetArbeidsgiverRefusjonsbeløp = 0, - forventetPersonbeløp = 462, - subset = 17.januar til 31.januar - ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, - AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING - ) + håndterVilkårsgrunnlag(1.vedtaksperiode) + håndterYtelser(1.vedtaksperiode) + assertVarsel(Varselkode.RV_IV_10, 1.vedtaksperiode.filter()) + assertUtbetalingsbeløp( + 1.vedtaksperiode, + forventetArbeidsgiverbeløp = 0, + forventetArbeidsgiverRefusjonsbeløp = 0, + forventetPersonbeløp = 462, + subset = 17.januar til 31.januar + ) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) + } } - } @Test - fun `Tar med inntekter når det er rapportert 0 kr i AOrdningen`() = Toggle.InntektsmeldingSomIkkeKommer.enable { - val inntektFraSkatt = INGEN - a1 { - håndterSøknad(januar) - håndterSykepengegrunnlagForArbeidsgiver(1.vedtaksperiode, 1.januar, listOf( - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 12), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 11), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", ""), - ArbeidsgiverInntekt.MånedligInntekt(YearMonth.of(2017, 10), inntektFraSkatt, ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, "", "") - )) - håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode) - assertVarsel(Varselkode.RV_IV_10, 1.vedtaksperiode.filter()) - assertUtbetalingsbeløp(1.vedtaksperiode, - forventetArbeidsgiverbeløp = 0, - forventetArbeidsgiverRefusjonsbeløp = 0, - forventetPersonbeløp = 0, - subset = 17.januar til 31.januar - ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, - AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_GODKJENNING - ) - val forelagteOpplysninger = observatør.skatteinntekterLagtTilGrunnEventer.last() - assertEquals( - listOf( - Skatteinntekt(YearMonth.of(2017, 12), 0.0), - Skatteinntekt(YearMonth.of(2017, 11), 0.0), - Skatteinntekt(YearMonth.of(2017, 10), 0.0) - ), - forelagteOpplysninger.skatteinntekter - ) - assertEquals(0.0, forelagteOpplysninger.omregnetÅrsinntekt) + fun `Tar med inntekter når det er rapportert 0 kr i AOrdningen`() = + Toggle.InntektsmeldingSomIkkeKommer.enable { + val inntektFraSkatt = INGEN + a1 { + håndterSøknad(januar) + håndterSykepengegrunnlagForArbeidsgiver( + 1.vedtaksperiode, 1.januar, listOf( + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 12), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 11), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ), + ArbeidsgiverInntekt.MånedligInntekt( + YearMonth.of(2017, 10), + inntektFraSkatt, + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + "", + "" + ) + ) + ) + håndterVilkårsgrunnlag(1.vedtaksperiode) + håndterYtelser(1.vedtaksperiode) + assertVarsel(Varselkode.RV_IV_10, 1.vedtaksperiode.filter()) + assertUtbetalingsbeløp( + 1.vedtaksperiode, + forventetArbeidsgiverbeløp = 0, + forventetArbeidsgiverRefusjonsbeløp = 0, + forventetPersonbeløp = 0, + subset = 17.januar til 31.januar + ) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_GODKJENNING + ) + val forelagteOpplysninger = observatør.skatteinntekterLagtTilGrunnEventer.last() + assertEquals( + listOf( + Skatteinntekt(YearMonth.of(2017, 12), 0.0), + Skatteinntekt(YearMonth.of(2017, 11), 0.0), + Skatteinntekt(YearMonth.of(2017, 10), 0.0) + ), + forelagteOpplysninger.skatteinntekter + ) + assertEquals(0.0, forelagteOpplysninger.omregnetÅrsinntekt) + } } - } @Test - fun `Tar ikke med inntekter når det ikke er rapportert inntekt i AOrdningen`() = Toggle.InntektsmeldingSomIkkeKommer.enable { - a1 { - håndterSøknad(januar) - håndterSykepengegrunnlagForArbeidsgiver(1.vedtaksperiode, 1.januar, emptyList()) - håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode) - assertVarsel(Varselkode.RV_IV_10, 1.vedtaksperiode.filter()) - assertUtbetalingsbeløp(1.vedtaksperiode, - forventetArbeidsgiverbeløp = 0, - forventetArbeidsgiverRefusjonsbeløp = 0, - forventetPersonbeløp = 0, - subset = 17.januar til 31.januar - ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, - AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_GODKJENNING - ) + fun `Tar ikke med inntekter når det ikke er rapportert inntekt i AOrdningen`() = + Toggle.InntektsmeldingSomIkkeKommer.enable { + a1 { + håndterSøknad(januar) + håndterSykepengegrunnlagForArbeidsgiver(1.vedtaksperiode, 1.januar, emptyList()) + håndterVilkårsgrunnlag(1.vedtaksperiode) + håndterYtelser(1.vedtaksperiode) + assertVarsel(Varselkode.RV_IV_10, 1.vedtaksperiode.filter()) + assertUtbetalingsbeløp( + 1.vedtaksperiode, + forventetArbeidsgiverbeløp = 0, + forventetArbeidsgiverRefusjonsbeløp = 0, + forventetPersonbeløp = 0, + subset = 17.januar til 31.januar + ) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_GODKJENNING + ) - val forelagteOpplysninger = observatør.skatteinntekterLagtTilGrunnEventer.last() - assertEquals(emptyList(), forelagteOpplysninger.skatteinntekter) - assertEquals(0.0, forelagteOpplysninger.omregnetÅrsinntekt) + val forelagteOpplysninger = observatør.skatteinntekterLagtTilGrunnEventer.last() + assertEquals(emptyList(), forelagteOpplysninger.skatteinntekter) + assertEquals(0.0, forelagteOpplysninger.omregnetÅrsinntekt) + } } - } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingOgFerieE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingOgFerieE2ETest.kt index 25ea03cc20..fc18cf3d2a 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingOgFerieE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/InntektsmeldingOgFerieE2ETest.kt @@ -61,7 +61,11 @@ internal class InntektsmeldingOgFerieE2ETest : AbstractEndToEndTest() { fun `ferie med gap til forrige, men samme skjæringstidspunkt`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT, orgnummer = a1) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT, + orgnummer = a1 + ) håndterVilkårsgrunnlag( 1.vedtaksperiode, orgnummer = a1, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( @@ -71,8 +75,16 @@ internal class InntektsmeldingOgFerieE2ETest : AbstractEndToEndTest() { ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -83,14 +95,28 @@ internal class InntektsmeldingOgFerieE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.februar, 20.februar), orgnummer = a2) håndterSykmelding(Sykmeldingsperiode(5.februar, 20.februar), orgnummer = a1) - håndterSøknad(Sykdom(5.februar, 20.februar, 100.prosent), Ferie(5.februar, 20.februar), orgnummer = a1) + håndterSøknad( + Sykdom(5.februar, 20.februar, 100.prosent), + Ferie(5.februar, 20.februar), + orgnummer = a1 + ) nullstillTilstandsendringer() håndterSøknad(Sykdom(1.februar, 20.februar, 100.prosent), orgnummer = a2) håndterInntektsmelding(listOf(1.februar til 16.februar), orgnummer = a2) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) assertTilstander( 1.vedtaksperiode, START, @@ -115,12 +141,32 @@ internal class InntektsmeldingOgFerieE2ETest : AbstractEndToEndTest() { nyPeriode(1.januar til 5.januar, a1) nyPeriode(10.januar til 16.januar, a1) nyPeriode(17.januar til 20.januar, a1) - nyttVedtak(21.januar til 31.januar, arbeidsgiverperiode = listOf(1.januar til 5.januar, 10.januar til 20.januar), orgnummer = a1, vedtaksperiodeIdInnhenter = 4.vedtaksperiode) + nyttVedtak( + 21.januar til 31.januar, + arbeidsgiverperiode = listOf(1.januar til 5.januar, 10.januar til 20.januar), + orgnummer = a1, + vedtaksperiodeIdInnhenter = 4.vedtaksperiode + ) nullstillTilstandsendringer() håndterAnnullerUtbetaling(a1) - assertForkastetPeriodeTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD, orgnummer = a1) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD, orgnummer = a1) - assertForkastetPeriodeTilstander(3.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD, orgnummer = a1) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD, + orgnummer = a1 + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD, + orgnummer = a1 + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD, + orgnummer = a1 + ) assertForkastetPeriodeTilstander(4.vedtaksperiode, AVSLUTTET, TIL_INFOTRYGD, orgnummer = a1) } @@ -135,17 +181,33 @@ internal class InntektsmeldingOgFerieE2ETest : AbstractEndToEndTest() { assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(januar, inspektør.periode(1.vedtaksperiode)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) assertEquals(5.februar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) assertEquals(5.februar til 23.februar, inspektør.periode(2.vedtaksperiode)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(2.vedtaksperiode)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(2.vedtaksperiode) + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) assertEquals(24.februar, inspektør.skjæringstidspunkt(3.vedtaksperiode)) assertEquals(24.februar til 28.februar, inspektør.periode(3.vedtaksperiode)) assertEquals(emptyList(), inspektør.arbeidsgiverperiode(3.vedtaksperiode)) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -159,18 +221,38 @@ internal class InntektsmeldingOgFerieE2ETest : AbstractEndToEndTest() { assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(januar, inspektør.periode(1.vedtaksperiode)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) assertEquals(5.februar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) assertEquals(5.februar til 23.februar, inspektør.periode(2.vedtaksperiode)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(2.vedtaksperiode)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(2.vedtaksperiode) + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) assertEquals(24.februar, inspektør.skjæringstidspunkt(3.vedtaksperiode)) assertEquals(24.februar til 28.februar, inspektør.periode(3.vedtaksperiode)) - assertEquals(listOf(24.februar til 28.februar), inspektør.arbeidsgiverperiode(3.vedtaksperiode)) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertEquals( + listOf(24.februar til 28.februar), + inspektør.arbeidsgiverperiode(3.vedtaksperiode) + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } + @Test fun `periode med ferie kant-i-kant med en periode med utbetalingsdag`() { nyttVedtak(januar) @@ -182,16 +264,30 @@ internal class InntektsmeldingOgFerieE2ETest : AbstractEndToEndTest() { assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(januar, inspektør.periode(1.vedtaksperiode)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) assertEquals(5.februar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) assertEquals(5.februar til 23.februar, inspektør.periode(2.vedtaksperiode)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(2.vedtaksperiode)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(2.vedtaksperiode) + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) assertEquals(24.februar, inspektør.skjæringstidspunkt(3.vedtaksperiode)) assertEquals(24.februar til 12.mars, inspektør.periode(3.vedtaksperiode)) - assertEquals(listOf(24.februar til 11.mars), inspektør.arbeidsgiverperiode(3.vedtaksperiode)) + assertEquals( + listOf(24.februar til 11.mars), + inspektør.arbeidsgiverperiode(3.vedtaksperiode) + ) assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/KorrigerendeInntektsmeldingTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/KorrigerendeInntektsmeldingTest.kt index 99857f16a7..0c9c6f6282 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/KorrigerendeInntektsmeldingTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/KorrigerendeInntektsmeldingTest.kt @@ -49,7 +49,7 @@ import org.junit.jupiter.api.Assertions.assertNotEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { +internal class KorrigerendeInntektsmeldingTest : AbstractEndToEndTest() { @Test fun `Avsluttet vedtaksperiode skal ikke få varsel ved helt lik korrigerende inntektsmelding`() { @@ -99,7 +99,10 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.januar til 16.januar)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) assertVarsel(RV_IM_24, 1.vedtaksperiode.filter()) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING_REVURDERING) @@ -110,40 +113,60 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { håndterUtbetalt() assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) - val utbetalingstidslinje = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje + val utbetalingstidslinje = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje assertTrue(utbetalingstidslinje.subset(1.januar til 16.januar).all { it.økonomi.inspektør.arbeidsgiverbeløp == INGEN && it is Utbetalingsdag.ArbeidsgiverperiodeDag }) - assertEquals(1431.daglig, utbetalingstidslinje[17.januar].økonomi.inspektør.arbeidsgiverbeløp) + assertEquals( + 1431.daglig, + utbetalingstidslinje[17.januar].økonomi.inspektør.arbeidsgiverbeløp + ) assertEquals(januar, inspektør.vedtaksperioder(1.vedtaksperiode).periode) - assertEquals("USSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) - assertEquals("USSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).toShortString()) + assertEquals( + "USSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) + assertEquals( + "USSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).toShortString() + ) } @Test fun `Korrigerende inntektsmelding med lik agp skal ikke ha varsel`() { nyttVedtak(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) assertIngenVarsel(RV_IM_24, 1.vedtaksperiode.filter()) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) - val utbetalingstidslinje = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje + val utbetalingstidslinje = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje assertTrue(utbetalingstidslinje.subset(1.januar til 16.januar).all { it.økonomi.inspektør.arbeidsgiverbeløp == INGEN && it is Utbetalingsdag.ArbeidsgiverperiodeDag }) - assertEquals(1431.daglig, utbetalingstidslinje[17.januar].økonomi.inspektør.arbeidsgiverbeløp) + assertEquals( + 1431.daglig, + utbetalingstidslinje[17.januar].økonomi.inspektør.arbeidsgiverbeløp + ) } @Test fun `Korrigerende inntektsmelding som strekker agp fremover`() { nyttVedtak(januar) håndterInntektsmelding(listOf(2.januar til 17.januar)) - assertEquals(listOf(2.januar til 17.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) + assertEquals( + listOf(2.januar til 17.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) assertVarsel(RV_IM_24, 1.vedtaksperiode.filter()) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING_REVURDERING) håndterVilkårsgrunnlag(1.vedtaksperiode) @@ -152,26 +175,39 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) - val utbetalingstidslinje = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje + val utbetalingstidslinje = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.utbetalingstidslinje assertTrue(utbetalingstidslinje[1.januar] is Utbetalingsdag.Arbeidsdag) assertEquals(0.daglig, utbetalingstidslinje[1.januar].økonomi.inspektør.arbeidsgiverbeløp) assertTrue(utbetalingstidslinje.subset(2.januar til 17.januar).all { it.økonomi.inspektør.arbeidsgiverbeløp == INGEN && it is Utbetalingsdag.ArbeidsgiverperiodeDag }) - assertEquals(1431.daglig, utbetalingstidslinje[18.januar].økonomi.inspektør.arbeidsgiverbeløp) + assertEquals( + 1431.daglig, + utbetalingstidslinje[18.januar].økonomi.inspektør.arbeidsgiverbeløp + ) assertEquals(januar, inspektør.vedtaksperioder(1.vedtaksperiode).periode) - assertEquals("ASSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) - assertEquals("ASSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).toShortString()) + assertEquals( + "ASSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) + assertEquals( + "ASSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).toShortString() + ) } @Test - fun `Antall dager mellom opplyst agp og gammel agp er mer enn 10`() { + fun `Antall dager mellom opplyst agp og gammel agp er mer enn 10`() { nyttVedtak(januar) forlengVedtak(februar) forlengVedtak(mars) håndterInntektsmelding(listOf(1.mars til 16.mars), avsendersystem = LPS) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSH", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSH", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) assertSisteTilstand(3.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) @@ -182,12 +218,15 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { } @Test - fun `Antall dager mellom opplyst agp og gammel agp er mindre enn 10`() { + fun `Antall dager mellom opplyst agp og gammel agp er mindre enn 10`() { nyttVedtak(10.januar til 31.januar) forlengVedtak(februar) forlengVedtak(mars) håndterInntektsmelding(listOf(1.februar til 16.februar), avsendersystem = ALTINN) - assertEquals("AAARR AAAAARR AAAAARR AAASSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSH", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "AAARR AAAAARR AAAAARR AAASSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSH", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -209,8 +248,14 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { nyttVedtak(februar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) - håndterInntektsmelding(listOf(1.februar til 16.februar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) - assertEquals("SSSHH SSSSSHH SSSSSHH S??SSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) + assertEquals( + "SSSHH SSSSSHH SSSSSHH S??SSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) } @@ -218,11 +263,21 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { @Test fun `her er det et gap mellom første og andre vedtaksperiode og mer enn 10 dager mellom agps, men mindre enn 16 dager mellom periodene`() { nyttVedtak(10.januar til 29.januar) - nyttVedtak(10.februar til 26.februar, arbeidsgiverperiode = listOf(10.januar til 16.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + nyttVedtak( + 10.februar til 26.februar, + arbeidsgiverperiode = listOf(10.januar til 16.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) - val inntektsmeldingId = håndterInntektsmelding(listOf(10.februar til 26.februar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) - assertEquals("SSSHH SSSSSHH SSSSSHH S?????? ?????HH SSSSSHH SSSSSHH S", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + val inntektsmeldingId = håndterInntektsmelding( + listOf(10.februar til 26.februar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) + assertEquals( + "SSSHH SSSSSHH SSSSSHH S?????? ?????HH SSSSSHH SSSSSHH S", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) assertVarsel(RV_IM_24, 2.vedtaksperiode.filter()) assertTrue(inntektsmeldingId in observatør.inntektsmeldingHåndtert.map { it.first }) @@ -234,7 +289,10 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { forlengVedtak(31.januar til 31.januar) forlengVedtak(februar) håndterInntektsmelding(listOf(1.februar til 16.februar), avsendersystem = LPS) - assertEquals("AAARR AAAAARR AAAAARR AAASSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "AAARR AAAAARR AAAAARR AAASSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -260,7 +318,10 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { val revurdering1Vedtaksperiode = inspektør.utbetaling(3) revurdering1Vedtaksperiode.also { utbetalingInspektør -> - assertEquals(revurdering1Vedtaksperiode.korrelasjonsId, utbetalingFebruar.korrelasjonsId) + assertEquals( + revurdering1Vedtaksperiode.korrelasjonsId, + utbetalingFebruar.korrelasjonsId + ) assertEquals(1, utbetalingInspektør.arbeidsgiverOppdrag.size) assertEquals(0, utbetalingInspektør.personOppdrag.size) utbetalingInspektør.arbeidsgiverOppdrag.inspektør.also { oppdragInspektør -> @@ -271,15 +332,24 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { } val revurdering2Vedtaksperiode = inspektør.utbetaling(4) revurdering2Vedtaksperiode.also { utbetalingInspektør -> - assertNotEquals(revurdering2Vedtaksperiode.korrelasjonsId, revurdering1Vedtaksperiode.korrelasjonsId) + assertNotEquals( + revurdering2Vedtaksperiode.korrelasjonsId, + revurdering1Vedtaksperiode.korrelasjonsId + ) assertEquals(NY, utbetalingInspektør.arbeidsgiverOppdrag.inspektør.endringskode) assertEquals(0, utbetalingInspektør.arbeidsgiverOppdrag.size) assertEquals(0, utbetalingInspektør.personOppdrag.size) } val revurdering3Vedtaksperiode = inspektør.utbetaling(5) revurdering3Vedtaksperiode.also { utbetalingInspektør -> - assertNotEquals(revurdering3Vedtaksperiode.korrelasjonsId, revurdering1Vedtaksperiode.korrelasjonsId) - assertNotEquals(revurdering3Vedtaksperiode.korrelasjonsId, revurdering2Vedtaksperiode.korrelasjonsId) + assertNotEquals( + revurdering3Vedtaksperiode.korrelasjonsId, + revurdering1Vedtaksperiode.korrelasjonsId + ) + assertNotEquals( + revurdering3Vedtaksperiode.korrelasjonsId, + revurdering2Vedtaksperiode.korrelasjonsId + ) assertEquals(1, utbetalingInspektør.arbeidsgiverOppdrag.size) assertEquals(NY, utbetalingInspektør.arbeidsgiverOppdrag.inspektør.endringskode) utbetalingInspektør.arbeidsgiverOppdrag[0].inspektør.also { linjeInspektør -> @@ -301,7 +371,10 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { val overstyringerIgangsatt = observatør.overstyringIgangsatt.map { it.årsak } assertEquals(listOf("ARBEIDSGIVERPERIODE"), overstyringerIgangsatt) assertVarsel(RV_IM_24, 1.vedtaksperiode.filter()) - assertEquals(INNTEKT * 1.1, inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.omregnetÅrsinntekt) + assertEquals( + INNTEKT * 1.1, + inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.omregnetÅrsinntekt + ) } @Test @@ -314,7 +387,10 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { håndterUtbetalt() val overstyringerIgangsatt = observatør.overstyringIgangsatt.map { it.årsak } - assertEquals(listOf("KORRIGERT_INNTEKTSMELDING_INNTEKTSOPPLYSNINGER"), overstyringerIgangsatt) + assertEquals( + listOf("KORRIGERT_INNTEKTSMELDING_INNTEKTSOPPLYSNINGER"), + overstyringerIgangsatt + ) assertVarsel(RV_IM_4, 1.vedtaksperiode.filter()) } @@ -323,11 +399,20 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 5.januar, 100.prosent)) nyttVedtak(10.januar til 31.januar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) val agpFør = inspektør.arbeidsgiver.arbeidsgiverperiode(10.januar til 31.januar) - håndterInntektsmelding(listOf(12.januar til 28.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(12.januar til 28.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) val agpEtter = inspektør.arbeidsgiver.arbeidsgiverperiode(10.januar til 31.januar) - assertEquals(Arbeidsgiverperiode(listOf(1.januar til 5.januar, 10.januar til 26.januar)), agpFør) - assertEquals(Arbeidsgiverperiode(listOf(1.januar til 5.januar, 12.januar til 28.januar)), agpEtter) + assertEquals( + Arbeidsgiverperiode(listOf(1.januar til 5.januar, 10.januar til 26.januar)), + agpFør + ) + assertEquals( + Arbeidsgiverperiode(listOf(1.januar til 5.januar, 12.januar til 28.januar)), + agpEtter + ) assertVarsel(RV_IM_24, 2.vedtaksperiode.filter()) @@ -343,15 +428,24 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { fun `arbeidsgiver korrigerer AGP ved å stykke den opp`() { nyttVedtak(januar) håndterInntektsmelding(listOf(1.januar til 15.januar, 20.januar.somPeriode())) - assertEquals("SSSSSHH SSSSSHH SAAAAHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SAAAAHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertVarsel(RV_IM_24, 1.vedtaksperiode.filter()) } @Test fun `arbeidsgiver korrigerer AGP men første og siste dag er lik`() { - nyttVedtak(januar, arbeidsgiverperiode = listOf(1.januar til 10.januar, 15.januar til 21.januar)) + nyttVedtak( + januar, + arbeidsgiverperiode = listOf(1.januar til 10.januar, 15.januar til 21.januar) + ) håndterInntektsmelding(listOf(1.januar til 8.januar, 13.januar til 21.januar)) - assertEquals("SSSSSHH SAAAAGG SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SAAAAGG SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertVarsel(RV_IM_24, 1.vedtaksperiode.filter()) } @@ -362,7 +456,10 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { håndterInntektsmelding(listOf(5.januar til 20.januar)) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) assertVarsel(RV_IM_24, 1.vedtaksperiode.filter()) - assertEquals("AAAASHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "AAAASHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) } @Test @@ -374,7 +471,10 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.februar til 16.februar)) - assertEquals("AAARR AAAAARR AAAAARR AAASSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "AAARR AAAAARR AAAAARR AAASSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) assertSisteTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) assertVarsel(RV_IM_24, 1.vedtaksperiode.filter()) @@ -388,9 +488,12 @@ internal class KorrigerendeInntektsmeldingTest: AbstractEndToEndTest() { håndterSimulering(2.vedtaksperiode) håndterInntektsmelding(listOf(1.februar til 16.februar), avsendersystem = ALTINN) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK) assertVarsel(RV_IM_24, 2.vedtaksperiode.filter()) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/ReplayInntektsmeldingE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/ReplayInntektsmeldingE2ETest.kt index 9afcca1a7d..2ec296cd06 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/ReplayInntektsmeldingE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/inntektsmelding/ReplayInntektsmeldingE2ETest.kt @@ -40,48 +40,104 @@ internal class ReplayInntektsmeldingE2ETest : AbstractEndToEndTest() { @Test fun `Avhengig av replay av inntektsmelding for inntekt også i ikke-ghost-situasjon - første fraværsdag kant-i-kant`() { håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent)) - val inntektsmelding = inntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), førsteFraværsdag = 21.januar) + val inntektsmelding = inntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + førsteFraværsdag = 21.januar + ) håndterInntektsmelding(inntektsmelding) - assertEquals(listOf(21.januar), inspektør.inntektInspektør.inntektsdatoer) // Lagrer alltid på oppgitt inntektsdato + assertEquals( + listOf(21.januar), + inspektør.inntektInspektør.inntektsdatoer + ) // Lagrer alltid på oppgitt inntektsdato håndterSøknad(Sykdom(21.januar, 31.januar, 100.prosent)) - assertEquals(listOf(1.januar, 21.januar), inspektør.inntektInspektør.inntektsdatoer) // Replayer IM. Nå som personen er syk 21.januar lagres den både på 21.januar og alternativ inntektsdato (1.januar) + assertEquals( + listOf(1.januar, 21.januar), + inspektør.inntektInspektør.inntektsdatoer + ) // Replayer IM. Nå som personen er syk 21.januar lagres den både på 21.januar og alternativ inntektsdato (1.januar) assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE + ) } @Test fun `Avhengig av replay av inntektsmelding for inntekt også i ikke-ghost-situasjon - gap til første fraværsdag`() { håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent)) - val inntektsmelding = inntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), førsteFraværsdag = 25.januar) + val inntektsmelding = inntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + førsteFraværsdag = 25.januar + ) håndterInntektsmelding(inntektsmelding) - assertEquals(listOf(25.januar), inspektør.inntektInspektør.inntektsdatoer) // lagrer alltid på inntektsdato i IM + assertEquals( + listOf(25.januar), + inspektør.inntektInspektør.inntektsdatoer + ) // lagrer alltid på inntektsdato i IM håndterSøknad(Sykdom(25.januar, 31.januar, 100.prosent)) assertEquals(listOf(25.januar), inspektør.inntektInspektør.inntektsdatoer) assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE + ) } @Test fun `Når arbeidsgiver bommer med første fraværsdag, og IM kommer før søknad er vi avhengig av replay-sjekk mot første fraværsdag for å gå videre når søknaden kommer`() { nyttVedtak(januar) - val inntektsmelding = inntektsmelding(arbeidsgiverperioder = listOf(1.januar til 16.januar), førsteFraværsdag = 13.februar) + val inntektsmelding = inntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + førsteFraværsdag = 13.februar + ) håndterInntektsmelding(inntektsmelding) assertEquals(listOf(13.februar, 1.januar), inspektør.inntektInspektør.inntektsdatoer) håndterSøknad(Sykdom(12.februar, 28.februar, 100.prosent)) - assertEquals(listOf(12.februar, 13.februar, 1.januar), inspektør.inntektInspektør.inntektsdatoer) // Lagrer nå på alternativ inntektsdato nå som vi har søknad - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertEquals( + listOf(12.februar, 13.februar, 1.januar), + inspektør.inntektInspektør.inntektsdatoer + ) // Lagrer nå på alternativ inntektsdato nå som vi har søknad + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test fun `replay av IM medfører ikke at allerede revurdert skjæringstidspunkt revurderes på nytt`() { nyttVedtak(mars) - håndterInntektsmelding(listOf(1.mars til 16.mars), beregnetInntekt = INNTEKT + 500.daglig, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + beregnetInntekt = INNTEKT + 500.daglig, + avsendersystem = ALTINN + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) - håndterSkjønnsmessigFastsettelse(1.mars, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT + 500.daglig))) + håndterSkjønnsmessigFastsettelse( + 1.mars, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT + 500.daglig)) + ) håndterYtelser() håndterSimulering() håndterUtbetalingsgodkjenning() @@ -111,7 +167,10 @@ internal class ReplayInntektsmeldingE2ETest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) - assertEquals(4, inspektør.vilkårsgrunnlagHistorikkInnslag().size) // fra førstegangsbehandling, korrigert IM, skjønnsmessig fastsatt & periode out-of-order på nytt skjæringstidspunkt + assertEquals( + 4, + inspektør.vilkårsgrunnlagHistorikkInnslag().size + ) // fra førstegangsbehandling, korrigert IM, skjønnsmessig fastsatt & periode out-of-order på nytt skjæringstidspunkt } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/oppgaver/DokumentH\303\245ndteringTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/oppgaver/DokumentH\303\245ndteringTest.kt" index 12c310c9ba..ba2edabaad 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/oppgaver/DokumentH\303\245ndteringTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/oppgaver/DokumentH\303\245ndteringTest.kt" @@ -52,21 +52,28 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { ) val søknad = håndterSøknad(Sykdom(10.februar, 28.februar, 100.prosent)) håndterVilkårsgrunnlag(2.vedtaksperiode) - assertEquals(inntektsmelding to 2.vedtaksperiode.id(ORGNUMMER), observatør.inntektsmeldingHåndtert.single()) + assertEquals( + inntektsmelding to 2.vedtaksperiode.id(ORGNUMMER), + observatør.inntektsmeldingHåndtert.single() + ) assertEquals(setOf(søknad, inntektsmelding), inspektør.hendelseIder(2.vedtaksperiode)) } @Test fun `Inntektsmelding kommer mellom AUU og søknad for førstegangsbehandling`() { val søknad1 = håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent)) - val inntektsmelding = håndterInntektsmelding(listOf(1.januar til 16.januar), avsendersystem = ALTINN) + val inntektsmelding = + håndterInntektsmelding(listOf(1.januar til 16.januar), avsendersystem = ALTINN) val søknad2 = håndterSøknad(Sykdom(17.januar, 31.januar, 100.prosent)) håndterVilkårsgrunnlag(2.vedtaksperiode) assertEquals(setOf(søknad1, inntektsmelding), inspektør.hendelseIder(1.vedtaksperiode)) assertEquals(setOf(søknad2, inntektsmelding), inspektør.hendelseIder(2.vedtaksperiode)) - assertEquals(2.vedtaksperiode.id(ORGNUMMER), observatør.inntektsmeldingHåndtert.single().second) + assertEquals( + 2.vedtaksperiode.id(ORGNUMMER), + observatør.inntektsmeldingHåndtert.single().second + ) } @Test @@ -74,19 +81,39 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { val søknad1A1 = håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent), orgnummer = a1) val søknad1A2 = håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent), orgnummer = a2) - val inntektsmeldingA1 = håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1, avsendersystem = ALTINN) - val inntektsmeldingA2 = håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a2, avsendersystem = ALTINN) + val inntektsmeldingA1 = håndterInntektsmelding( + listOf(1.januar til 16.januar), + orgnummer = a1, + avsendersystem = ALTINN + ) + val inntektsmeldingA2 = håndterInntektsmelding( + listOf(1.januar til 16.januar), + orgnummer = a2, + avsendersystem = ALTINN + ) val søknad2A1 = håndterSøknad(Sykdom(17.januar, 31.januar, 100.prosent), orgnummer = a1) val søknad2A2 = håndterSøknad(Sykdom(17.januar, 31.januar, 100.prosent), orgnummer = a2) håndterVilkårsgrunnlag(2.vedtaksperiode, orgnummer = a1) - assertEquals(setOf(søknad1A1, inntektsmeldingA1), inspektør(a1).hendelseIder(1.vedtaksperiode)) - assertEquals(setOf(søknad1A2, inntektsmeldingA2), inspektør(a2).hendelseIder(1.vedtaksperiode)) + assertEquals( + setOf(søknad1A1, inntektsmeldingA1), + inspektør(a1).hendelseIder(1.vedtaksperiode) + ) + assertEquals( + setOf(søknad1A2, inntektsmeldingA2), + inspektør(a2).hendelseIder(1.vedtaksperiode) + ) - assertEquals(setOf(søknad2A1, inntektsmeldingA1), inspektør(a1).hendelseIder(2.vedtaksperiode)) - assertEquals(setOf(søknad2A2, inntektsmeldingA2), inspektør(a2).hendelseIder(2.vedtaksperiode)) + assertEquals( + setOf(søknad2A1, inntektsmeldingA1), + inspektør(a1).hendelseIder(2.vedtaksperiode) + ) + assertEquals( + setOf(søknad2A2, inntektsmeldingA2), + inspektør(a2).hendelseIder(2.vedtaksperiode) + ) } @Test @@ -104,7 +131,9 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT * 1.1, ) - assertEquals(listOf(korrigertInntektsmelding2), observatør.inntektsmeldingHåndtert.map { it.first }) + assertEquals( + listOf(korrigertInntektsmelding2), + observatør.inntektsmeldingHåndtert.map { it.first }) assertEquals(emptyList(), observatør.inntektsmeldingIkkeHåndtert) } @@ -112,7 +141,7 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { fun `sender ikke ut signal om at inntektsmelding ikke er håndtert om annen vedtaksperiode har håndtert inntektsmelding før`() { nyttVedtak(januar) håndterSøknad(Sykdom(20.februar, 20.mars, 100.prosent)) - assertEquals(emptyList(), observatør.inntektsmeldingIkkeHåndtert) + assertEquals(emptyList(), observatør.inntektsmeldingIkkeHåndtert) } @Test @@ -131,7 +160,11 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar, 16.januar)) håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent)) håndterSykmelding(Sykmeldingsperiode(20.januar, 31.januar)) - val id = håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 20.januar, avsendersystem = ALTINN) + val id = håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 20.januar, + avsendersystem = ALTINN + ) val inntektsmeldingFørSøknadEvent = observatør.inntektsmeldingFørSøknad.single() inntektsmeldingFørSøknadEvent.let { assertEquals(id, it.inntektsmeldingId) @@ -164,7 +197,10 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { @Test fun `Inntektsmelding før forlengelse-søknad - auu er litt lang`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 16.januar)) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Søknad.Søknadsperiode.Ferie(17.januar, 31.januar)) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Søknad.Søknadsperiode.Ferie(17.januar, 31.januar) + ) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) val id = håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar) val inntektsmeldingFørSøknadEvent = observatør.inntektsmeldingFørSøknad.single() @@ -201,22 +237,33 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() val hendelserHåndtertFør = inspektør.hendelser(1.vedtaksperiode) - assertEquals(listOf( - im1 to 1.vedtaksperiode.id(ORGNUMMER), // pga inntekt - ), observatør.inntektsmeldingHåndtert) + assertEquals( + listOf( + im1 to 1.vedtaksperiode.id(ORGNUMMER), // pga inntekt + ), observatør.inntektsmeldingHåndtert + ) assertEquals(emptyList(), observatør.inntektsmeldingIkkeHåndtert) val søknad = håndterSøknad(Sykdom(10.februar, 28.februar, 100.prosent)) - val im = håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 10.februar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + val im = håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 10.februar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertEquals(emptyList(), observatør.inntektsmeldingIkkeHåndtert) assertEquals(hendelserHåndtertFør, inspektør.hendelser(1.vedtaksperiode)) - assertEquals(setOf( - Dokumentsporing.søknad(søknad), - Dokumentsporing.inntektsmeldingDager(im), - Dokumentsporing.inntektsmeldingRefusjon(im), - Dokumentsporing.inntektsmeldingInntekt(im) - ), inspektør.hendelser(2.vedtaksperiode)) + assertEquals( + setOf( + Dokumentsporing.søknad(søknad), + Dokumentsporing.inntektsmeldingDager(im), + Dokumentsporing.inntektsmeldingRefusjon(im), + Dokumentsporing.inntektsmeldingInntekt(im) + ), inspektør.hendelser(2.vedtaksperiode) + ) assertEquals(2, observatør.inntektsmeldingHåndtert.size) - assertEquals(im to 2.vedtaksperiode.id(ORGNUMMER), observatør.inntektsmeldingHåndtert.last()) + assertEquals( + im to 2.vedtaksperiode.id(ORGNUMMER), + observatør.inntektsmeldingHåndtert.last() + ) } @Test @@ -227,6 +274,7 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { assertEquals(listOf(søknad to 1.vedtaksperiode.id(ORGNUMMER)), observatør.søknadHåndtert) assertEquals(emptyList(), observatør.inntektsmeldingHåndtert) } + @Test fun `Inntektsmelding noen dager håndtert - IM før søknad`() { val søknad = håndterSøknad(Sykdom(1.januar, 10.januar, 100.prosent)) @@ -246,44 +294,57 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { val søknad4 = håndterSøknad(Sykdom(21.januar, 26.januar, 100.prosent)) val im = håndterInntektsmelding(listOf(1.januar til 16.januar)) - assertEquals(setOf( - Dokumentsporing.søknad(søknad1), - Dokumentsporing.inntektsmeldingDager(im), - Dokumentsporing.inntektsmeldingRefusjon(im) - ), inspektør.hendelser(1.vedtaksperiode)) - assertEquals(setOf( - Dokumentsporing.søknad(søknad2), - Dokumentsporing.inntektsmeldingDager(im), - Dokumentsporing.inntektsmeldingRefusjon(im) - ), inspektør.hendelser(2.vedtaksperiode)) - assertEquals(setOf( - Dokumentsporing.søknad(søknad3), - Dokumentsporing.inntektsmeldingRefusjon(im), - Dokumentsporing.inntektsmeldingInntekt(im) - ), inspektør.hendelser(3.vedtaksperiode)) - assertEquals(setOf( - Dokumentsporing.søknad(søknad4), - Dokumentsporing.inntektsmeldingRefusjon(im), - Dokumentsporing.inntektsmeldingInntekt(im) - ), inspektør.hendelser(4.vedtaksperiode)) + assertEquals( + setOf( + Dokumentsporing.søknad(søknad1), + Dokumentsporing.inntektsmeldingDager(im), + Dokumentsporing.inntektsmeldingRefusjon(im) + ), inspektør.hendelser(1.vedtaksperiode) + ) + assertEquals( + setOf( + Dokumentsporing.søknad(søknad2), + Dokumentsporing.inntektsmeldingDager(im), + Dokumentsporing.inntektsmeldingRefusjon(im) + ), inspektør.hendelser(2.vedtaksperiode) + ) + assertEquals( + setOf( + Dokumentsporing.søknad(søknad3), + Dokumentsporing.inntektsmeldingRefusjon(im), + Dokumentsporing.inntektsmeldingInntekt(im) + ), inspektør.hendelser(3.vedtaksperiode) + ) + assertEquals( + setOf( + Dokumentsporing.søknad(søknad4), + Dokumentsporing.inntektsmeldingRefusjon(im), + Dokumentsporing.inntektsmeldingInntekt(im) + ), inspektør.hendelser(4.vedtaksperiode) + ) assertEquals(emptyList(), observatør.inntektsmeldingIkkeHåndtert) - assertEquals(listOf( - søknad1 to 1.vedtaksperiode.id(ORGNUMMER), - søknad2 to 2.vedtaksperiode.id(ORGNUMMER), - søknad3 to 3.vedtaksperiode.id(ORGNUMMER), - søknad4 to 4.vedtaksperiode.id(ORGNUMMER) - ), observatør.søknadHåndtert) - assertEquals(listOf( - im to 3.vedtaksperiode.id(ORGNUMMER), // inntekt - im to 4.vedtaksperiode.id(ORGNUMMER) // inntekt - ), observatør.inntektsmeldingHåndtert) + assertEquals( + listOf( + søknad1 to 1.vedtaksperiode.id(ORGNUMMER), + søknad2 to 2.vedtaksperiode.id(ORGNUMMER), + søknad3 to 3.vedtaksperiode.id(ORGNUMMER), + søknad4 to 4.vedtaksperiode.id(ORGNUMMER) + ), observatør.søknadHåndtert + ) + assertEquals( + listOf( + im to 3.vedtaksperiode.id(ORGNUMMER), // inntekt + im to 4.vedtaksperiode.id(ORGNUMMER) // inntekt + ), observatør.inntektsmeldingHåndtert + ) } @Test fun `har overlappende avslutta vedtaksperiode på annen arbeidsgiver`() { nyttVedtak(januar, orgnummer = a2) - val søknad2 = håndterSøknad(Sykdom(28.januar, 28.februar, 100.prosent), utenlandskSykmelding = true) + val søknad2 = + håndterSøknad(Sykdom(28.januar, 28.februar, 100.prosent), utenlandskSykmelding = true) assertEquals( PersonObserver.VedtaksperiodeForkastetEvent( organisasjonsnummer = ORGNUMMER, @@ -335,7 +396,8 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { @Test fun `har en periode rett før på annen arbeidsgiver`() { nyttVedtak(januar, orgnummer = a2) - val søknad2 = håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), utenlandskSykmelding = true) + val søknad2 = + håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), utenlandskSykmelding = true) assertEquals( PersonObserver.VedtaksperiodeForkastetEvent( organisasjonsnummer = ORGNUMMER, @@ -371,8 +433,10 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { harPeriodeInnenfor16Dager = false, trengerArbeidsgiveropplysninger = false, sykmeldingsperioder = listOf(januar, 28.januar til 28.februar) - ), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER))) + ), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)) + ) } + @Test fun `har vedtaksperiode som påvirker arbeidsgiverperioden`() { tilGodkjenning(januar, ORGNUMMER) @@ -392,7 +456,8 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { harPeriodeInnenfor16Dager = false, trengerArbeidsgiveropplysninger = true, sykmeldingsperioder = listOf(januar, 10.februar til 28.februar) - ), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER))) + ), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)) + ) } @Test @@ -414,7 +479,8 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { harPeriodeInnenfor16Dager = false, trengerArbeidsgiveropplysninger = true, sykmeldingsperioder = listOf(januar, 15.februar til 28.februar) - ), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER))) + ), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)) + ) } @Test @@ -422,10 +488,12 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { val søknad1 = håndterSøknad(Sykdom(11.januar, 16.januar, 100.prosent)) val søknad2 = håndterSøknad(Sykdom(10.januar, 15.januar, 100.prosent)) assertEquals(emptyList(), observatør.inntektsmeldingIkkeHåndtert) - assertEquals(listOf( - søknad1 to 1.vedtaksperiode.id(ORGNUMMER), - søknad2 to 1.vedtaksperiode.id(ORGNUMMER) - ), observatør.søknadHåndtert) + assertEquals( + listOf( + søknad1 to 1.vedtaksperiode.id(ORGNUMMER), + søknad2 to 1.vedtaksperiode.id(ORGNUMMER) + ), observatør.søknadHåndtert + ) assertEquals( PersonObserver.VedtaksperiodeForkastetEvent( organisasjonsnummer = ORGNUMMER, @@ -439,21 +507,24 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { harPeriodeInnenfor16Dager = false, trengerArbeidsgiveropplysninger = false, sykmeldingsperioder = listOf(11.januar til 16.januar, 10.januar til 15.januar) - ), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER))) + ), observatør.forkastet(2.vedtaksperiode.id(ORGNUMMER)) + ) } @Test - fun `sender ut søknad håndtert for forlengelse av forkastet periode`(){ + fun `sender ut søknad håndtert for forlengelse av forkastet periode`() { håndterSykmelding(januar) val søknadId1 = håndterSøknad(januar) forkastAlle() håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) val søknadId2 = håndterSøknad(februar) - assertEquals(listOf( - søknadId1 to 1.vedtaksperiode.id(ORGNUMMER), - søknadId2 to 2.vedtaksperiode.id(ORGNUMMER) - ), observatør.søknadHåndtert) + assertEquals( + listOf( + søknadId1 to 1.vedtaksperiode.id(ORGNUMMER), + søknadId2 to 2.vedtaksperiode.id(ORGNUMMER) + ), observatør.søknadHåndtert + ) } @Test @@ -480,7 +551,7 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { avsendersystem = ALTINN ) håndterSøknad(februar) - assertFalse(im2 in observatør.inntektsmeldingHåndtert.map(Pair::first)) + assertFalse(im2 in observatør.inntektsmeldingHåndtert.map(Pair::first)) assertTrue(im2 in observatør.inntektsmeldingIkkeHåndtert) } @@ -488,18 +559,36 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { fun `inntektsmelding med første fraværsdag utenfor sykdom - ingen tidligere vedtak - inntektsmelding ikke håndtert fordi inntekt håndteres ikke`() { håndterSykmelding(Sykmeldingsperiode(3.januar, 26.januar)) håndterSøknad(Sykdom(3.januar, 26.januar, 100.prosent)) - val im = håndterInntektsmelding(listOf(Periode(3.januar, 18.januar)), 27.januar, avsendersystem = ALTINN) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) - assertFalse(im in observatør.inntektsmeldingHåndtert.map(Pair::first)) + val im = håndterInntektsmelding( + listOf(Periode(3.januar, 18.januar)), + 27.januar, + avsendersystem = ALTINN + ) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) + assertFalse(im in observatør.inntektsmeldingHåndtert.map(Pair::first)) assertTrue(im in observatør.inntektsmeldingIkkeHåndtert) } @Test fun `inntektsmelding med første fraværsdag utenfor sykdom - ingen tidligere vedtak - IM før søknad - inntektsmelding ikke håndtert fordi inntekt håndteres ikke`() { håndterSykmelding(Sykmeldingsperiode(3.januar, 26.januar)) - håndterInntektsmelding(listOf(Periode(3.januar, 18.januar)), 27.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(3.januar, 18.januar)), + 27.januar, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(3.januar, 26.januar, 100.prosent)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) } @Test @@ -513,7 +602,8 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() - val im2 = håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT * 1.1) + val im2 = + håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT * 1.1) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) @@ -522,7 +612,13 @@ internal class DokumentHåndteringTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) - assertFalse(inspektør.hendelser(1.vedtaksperiode).contains(Dokumentsporing.inntektsmeldingInntekt(im1))) - assertFalse(inspektør.hendelser(1.vedtaksperiode).contains(Dokumentsporing.inntektsmeldingInntekt(im2))) + assertFalse( + inspektør.hendelser(1.vedtaksperiode) + .contains(Dokumentsporing.inntektsmeldingInntekt(im1)) + ) + assertFalse( + inspektør.hendelser(1.vedtaksperiode) + .contains(Dokumentsporing.inntektsmeldingInntekt(im2)) + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyr_utkast_til_revurdering/OverstyrUtkastTilRevurderingFlereAGTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyr_utkast_til_revurdering/OverstyrUtkastTilRevurderingFlereAGTest.kt index 5daa0896e6..fbbf397962 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyr_utkast_til_revurdering/OverstyrUtkastTilRevurderingFlereAGTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyr_utkast_til_revurdering/OverstyrUtkastTilRevurderingFlereAGTest.kt @@ -38,11 +38,17 @@ internal class OverstyrUtkastTilRevurderingFlereAGTest : AbstractEndToEndTest() forlengVedtak(februar, AG1, AG2) nullstillTilstandsendringer() - håndterOverstyrTidslinje((29.januar til 29.januar).map { manuellFeriedag(it) }, orgnummer = AG1) + håndterOverstyrTidslinje( + (29.januar til 29.januar).map { manuellFeriedag(it) }, + orgnummer = AG1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = AG1) håndterSimulering(1.vedtaksperiode, orgnummer = AG1) - håndterOverstyrTidslinje((30.januar til 31.januar).map { manuellFeriedag(it) }, orgnummer = AG1) + håndterOverstyrTidslinje( + (30.januar til 31.januar).map { manuellFeriedag(it) }, + orgnummer = AG1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = AG1) håndterSimulering(1.vedtaksperiode, orgnummer = AG1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = AG1) @@ -59,23 +65,81 @@ internal class OverstyrUtkastTilRevurderingFlereAGTest : AbstractEndToEndTest() inspektør(AG1) { val utbetalingstidslinje = sisteUtbetalingUtbetalingstidslinje() - assertUtbetalingsdag(utbetalingstidslinje[29.januar], expectedDagtype = Fridag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[30.januar], expectedDagtype = Fridag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[31.januar], expectedDagtype = Fridag::class, 50) + assertUtbetalingsdag( + utbetalingstidslinje[29.januar], + expectedDagtype = Fridag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[30.januar], + expectedDagtype = Fridag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[31.januar], + expectedDagtype = Fridag::class, + 50 + ) assertIngenFunksjonelleFeil() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) } inspektør(AG2) { val utbetalingstidslinje = sisteUtbetalingUtbetalingstidslinje() assertIngenFunksjonelleFeil() - assertUtbetalingsdag(utbetalingstidslinje[29.januar], expectedDagtype = NavDag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[30.januar], expectedDagtype = NavDag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[31.januar], expectedDagtype = NavDag::class, 50) + assertUtbetalingsdag( + utbetalingstidslinje[29.januar], + expectedDagtype = NavDag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[30.januar], + expectedDagtype = NavDag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[31.januar], + expectedDagtype = NavDag::class, + 50 + ) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) } } @@ -85,11 +149,17 @@ internal class OverstyrUtkastTilRevurderingFlereAGTest : AbstractEndToEndTest() forlengVedtak(februar, AG1, AG2) nullstillTilstandsendringer() - håndterOverstyrTidslinje((29.januar til 31.januar).map { manuellFeriedag(it) }, orgnummer = AG1) + håndterOverstyrTidslinje( + (29.januar til 31.januar).map { manuellFeriedag(it) }, + orgnummer = AG1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = AG1) håndterSimulering(1.vedtaksperiode, orgnummer = AG1) - håndterOverstyrTidslinje((30.januar til 31.januar).map { manuellFeriedag(it) }, orgnummer = AG1) + håndterOverstyrTidslinje( + (30.januar til 31.januar).map { manuellFeriedag(it) }, + orgnummer = AG1 + ) inspektør(AG1) { assertIngenFunksjonelleFeil() @@ -119,30 +189,71 @@ internal class OverstyrUtkastTilRevurderingFlereAGTest : AbstractEndToEndTest() forlengVedtak(februar, AG1, AG2) nullstillTilstandsendringer() - håndterOverstyrTidslinje((29.januar til 29.januar).map { manuellFeriedag(it) }, orgnummer = AG1) + håndterOverstyrTidslinje( + (29.januar til 29.januar).map { manuellFeriedag(it) }, + orgnummer = AG1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = AG1) håndterSimulering(1.vedtaksperiode, orgnummer = AG1) - håndterOverstyrTidslinje((30.januar til 31.januar).map { manuellFeriedag(it) }, orgnummer = AG2) + håndterOverstyrTidslinje( + (30.januar til 31.januar).map { manuellFeriedag(it) }, + orgnummer = AG2 + ) håndterYtelser(1.vedtaksperiode, orgnummer = AG1) håndterSimulering(1.vedtaksperiode, orgnummer = AG1) inspektør(AG1) { val utbetalingstidslinje = sisteUtbetalingUtbetalingstidslinje() - assertUtbetalingsdag(utbetalingstidslinje[29.januar], expectedDagtype = Fridag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[30.januar], expectedDagtype = NavDag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[31.januar], expectedDagtype = NavDag::class, 50) + assertUtbetalingsdag( + utbetalingstidslinje[29.januar], + expectedDagtype = Fridag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[30.januar], + expectedDagtype = NavDag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[31.januar], + expectedDagtype = NavDag::class, + 50 + ) assertIngenFunksjonelleFeil() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } inspektør(AG2) { val utbetalingstidslinje = sisteUtbetalingUtbetalingstidslinje() - assertUtbetalingsdag(utbetalingstidslinje[29.januar], expectedDagtype = NavDag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[30.januar], expectedDagtype = Fridag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[31.januar], expectedDagtype = Fridag::class, 50) + assertUtbetalingsdag( + utbetalingstidslinje[29.januar], + expectedDagtype = NavDag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[30.januar], + expectedDagtype = Fridag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[31.januar], + expectedDagtype = Fridag::class, + 50 + ) assertIngenFunksjonelleFeil() assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) @@ -155,28 +266,65 @@ internal class OverstyrUtkastTilRevurderingFlereAGTest : AbstractEndToEndTest() forlengVedtak(februar, AG1, AG2) nullstillTilstandsendringer() - håndterOverstyrTidslinje((29.januar til 31.januar).map { manuellFeriedag(it) }, orgnummer = AG1) + håndterOverstyrTidslinje( + (29.januar til 31.januar).map { manuellFeriedag(it) }, + orgnummer = AG1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = AG1) håndterSimulering(1.vedtaksperiode, orgnummer = AG1) - håndterOverstyrTidslinje((1.februar til 2.februar).map { manuellFeriedag(it) }, orgnummer = AG2) + håndterOverstyrTidslinje( + (1.februar til 2.februar).map { manuellFeriedag(it) }, + orgnummer = AG2 + ) inspektør(AG1) { val utbetalingstidslinje = sisteUtbetalingUtbetalingstidslinje() - assertUtbetalingsdag(utbetalingstidslinje[29.januar], expectedDagtype = Fridag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[30.januar], expectedDagtype = Fridag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[31.januar], expectedDagtype = Fridag::class, 50) + assertUtbetalingsdag( + utbetalingstidslinje[29.januar], + expectedDagtype = Fridag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[30.januar], + expectedDagtype = Fridag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[31.januar], + expectedDagtype = Fridag::class, + 50 + ) assertIngenFunksjonelleFeil() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } inspektør(AG2) { val utbetalingstidslinje = sisteUtbetalingUtbetalingstidslinje() - assertUtbetalingsdag(utbetalingstidslinje[29.januar], expectedDagtype = NavDag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[30.januar], expectedDagtype = NavDag::class, 50) - assertUtbetalingsdag(utbetalingstidslinje[31.januar], expectedDagtype = NavDag::class, 50) + assertUtbetalingsdag( + utbetalingstidslinje[29.januar], + expectedDagtype = NavDag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[30.januar], + expectedDagtype = NavDag::class, + 50 + ) + assertUtbetalingsdag( + utbetalingstidslinje[31.januar], + expectedDagtype = NavDag::class, + 50 + ) assertIngenFunksjonelleFeil() assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) @@ -190,13 +338,19 @@ internal class OverstyrUtkastTilRevurderingFlereAGTest : AbstractEndToEndTest() forlengVedtak(februar, AG1, AG2) nullstillTilstandsendringer() - håndterOverstyrTidslinje((29.januar til 31.januar).map { manuellFeriedag(it) }, orgnummer = AG1) + håndterOverstyrTidslinje( + (29.januar til 31.januar).map { manuellFeriedag(it) }, + orgnummer = AG1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = AG1) håndterSimulering(1.vedtaksperiode, orgnummer = AG1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = AG1) håndterUtbetalt(orgnummer = AG1) - håndterOverstyrTidslinje((1.februar til 2.februar).map { manuellFeriedag(it) }, orgnummer = AG2) + håndterOverstyrTidslinje( + (1.februar til 2.februar).map { manuellFeriedag(it) }, + orgnummer = AG2 + ) inspektør(AG1) { assertTilstander( 1.vedtaksperiode, @@ -211,7 +365,12 @@ internal class OverstyrUtkastTilRevurderingFlereAGTest : AbstractEndToEndTest() assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } inspektør(AG2) { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } } @@ -222,19 +381,39 @@ internal class OverstyrUtkastTilRevurderingFlereAGTest : AbstractEndToEndTest() forlengVedtak(februar, AG1, AG2) nullstillTilstandsendringer() - håndterOverstyrTidslinje((29.januar til 31.januar).map { manuellFeriedag(it) }, orgnummer = AG1) + håndterOverstyrTidslinje( + (29.januar til 31.januar).map { manuellFeriedag(it) }, + orgnummer = AG1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = AG1) håndterSimulering(1.vedtaksperiode, orgnummer = AG1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = AG1) håndterUtbetalt(orgnummer = AG1) - håndterOverstyrTidslinje((1.februar til 2.februar).map { manuellFeriedag(it) }, orgnummer = AG1) + håndterOverstyrTidslinje( + (1.februar til 2.februar).map { manuellFeriedag(it) }, + orgnummer = AG1 + ) inspektør(AG1) { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } inspektør(AG2) { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } håndterYtelser(1.vedtaksperiode, orgnummer = AG2) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyr_utkast_til_revurdering/OverstyrUtkastTilRevurderingTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyr_utkast_til_revurdering/OverstyrUtkastTilRevurderingTest.kt index 5c3f5cd891..b8dfaaf57c 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyr_utkast_til_revurdering/OverstyrUtkastTilRevurderingTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyr_utkast_til_revurdering/OverstyrUtkastTilRevurderingTest.kt @@ -38,7 +38,7 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -internal class OverstyrUtkastTilRevurderingTest: AbstractEndToEndTest() { +internal class OverstyrUtkastTilRevurderingTest : AbstractEndToEndTest() { @Test fun `overstyr utkast til revurdering av periode`() { @@ -83,10 +83,27 @@ internal class OverstyrUtkastTilRevurderingTest: AbstractEndToEndTest() { håndterSimulering(1.vedtaksperiode) assertEquals(33235, inspektør.sisteUtbetaling().arbeidsgiverOppdrag.totalbeløp()) - assertEquals("SSSSSHH SSSSSHH SSSSSFF FFFFFFF FSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) - assertEquals("PPPPPPP PPPPPPP PPNNNFF FFFFFFF FNN", inspektør.sisteUtbetalingUtbetalingstidslinje().toString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSFF FFFFFFF FSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) + assertEquals( + "PPPPPPP PPPPPPP PPNNNFF FFFFFFF FNN", + inspektør.sisteUtbetalingUtbetalingstidslinje().toString() + ) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -109,7 +126,8 @@ internal class OverstyrUtkastTilRevurderingTest: AbstractEndToEndTest() { // 12694 = round((25000 * 12) / 260) * 11 (11 nav-dager i januar) assertEquals(12694, inspektør.sisteUtbetaling().arbeidsgiverOppdrag.totalbeløp()) - assertTilstander(1.vedtaksperiode, + assertTilstander( + 1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, @@ -132,7 +150,10 @@ internal class OverstyrUtkastTilRevurderingTest: AbstractEndToEndTest() { ) håndterVilkårsgrunnlag( 1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(ORGNUMMER to 50000.månedlig), 1.januar) + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf(ORGNUMMER to 50000.månedlig), + 1.januar + ) ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -152,8 +173,14 @@ internal class OverstyrUtkastTilRevurderingTest: AbstractEndToEndTest() { assertTrue(inspektør.utbetaling(0).erUtbetalt) assertTrue(inspektør.utbetaling(1).erForkastet) assertTrue(inspektør.utbetaling(2).erUtbetalt) - assertEquals(inspektør.utbetaling(0).arbeidsgiverOppdrag.nettoBeløp(), -1 * inspektør.sisteUtbetaling().arbeidsgiverOppdrag.nettoBeløp()) - assertEquals(inspektør.utbetaling(0).arbeidsgiverOppdrag.fagsystemId, inspektør.sisteUtbetaling().arbeidsgiverOppdrag.fagsystemId) + assertEquals( + inspektør.utbetaling(0).arbeidsgiverOppdrag.nettoBeløp(), + -1 * inspektør.sisteUtbetaling().arbeidsgiverOppdrag.nettoBeløp() + ) + assertEquals( + inspektør.utbetaling(0).arbeidsgiverOppdrag.fagsystemId, + inspektør.sisteUtbetaling().arbeidsgiverOppdrag.fagsystemId + ) } @Test @@ -174,7 +201,18 @@ internal class OverstyrUtkastTilRevurderingTest: AbstractEndToEndTest() { assertEquals(41314, inspektør.sisteUtbetaling().arbeidsgiverOppdrag.totalbeløp()) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -204,8 +242,26 @@ internal class OverstyrUtkastTilRevurderingTest: AbstractEndToEndTest() { assertTrue(utbetalingstidslinje[2.februar] is Fridag) assertTrue(utbetalingstidslinje[3.februar] is NavHelgDag) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) } @Test @@ -237,9 +293,32 @@ internal class OverstyrUtkastTilRevurderingTest: AbstractEndToEndTest() { assertTrue(utbetalingstidslinje[2.februar] is Fridag) assertTrue(utbetalingstidslinje[3.februar] is NavHelgDag) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 3.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) } @Test @@ -269,7 +348,27 @@ internal class OverstyrUtkastTilRevurderingTest: AbstractEndToEndTest() { assertTrue(utbetalingstidslinje[2.februar] is Fridag) assertTrue(utbetalingstidslinje[3.februar] is NavHelgDag) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/GjenbrukeTidsn\303\246reOpplysningerTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/GjenbrukeTidsn\303\246reOpplysningerTest.kt" index 33841bce7b..852f58cb9e 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/GjenbrukeTidsn\303\246reOpplysningerTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/GjenbrukeTidsn\303\246reOpplysningerTest.kt" @@ -61,7 +61,7 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.fail import kotlin.reflect.KClass -internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { +internal class GjenbrukeTidsnæreOpplysningerTest : AbstractDslTest() { @Test fun `Stuckiness med helg involvert - da gjenbruker vi tidsnære opplysninger`() { @@ -115,12 +115,21 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { */ a1 { - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomstidslinje.toShortString() + ) håndterInntektsmelding(listOf(mandag(22.januar) til 6.februar)) - assertEquals("AAAAARR AAAAARR AAAAARR SSSSSHH SSS", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "AAAAARR AAAAARR AAAAARR SSSSSHH SSS", + inspektør.sykdomstidslinje.toShortString() + ) } a2 { - assertEquals("SSSSSHH SSSSSHH SSSSS?? SSSSSHH SSS", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSS?? SSSSSHH SSS", + inspektør.sykdomstidslinje.toShortString() + ) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -171,7 +180,12 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { assertEquals(1.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) assertEquals(1.januar, inspektør.skjæringstidspunkt(3.vedtaksperiode)) - håndterOverstyrTidslinje((15.mars til 31.mars).map { ManuellOverskrivingDag(it, Pleiepengerdag) }) + håndterOverstyrTidslinje((15.mars til 31.mars).map { + ManuellOverskrivingDag( + it, + Pleiepengerdag + ) + }) håndterYtelser(3.vedtaksperiode) håndterSimulering(3.vedtaksperiode) håndterUtbetalingsgodkjenning(3.vedtaksperiode) @@ -180,7 +194,12 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { assertEquals(1.januar, inspektør.skjæringstidspunkt(3.vedtaksperiode)) assertSisteTilstand(3.vedtaksperiode, AVSLUTTET) - håndterOverstyrTidslinje((15.februar til 28.februar).map { ManuellOverskrivingDag(it, Pleiepengerdag) }) + håndterOverstyrTidslinje((15.februar til 28.februar).map { + ManuellOverskrivingDag( + it, + Pleiepengerdag + ) + }) håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) @@ -197,12 +216,26 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { listOf(a1, a2).nyeVedtak(januar) listOf(a1, a2).forlengVedtak(februar) a1 { - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(31.januar, Dagtype.Svangerskapspengerdag))) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag( + 31.januar, + Dagtype.Svangerskapspengerdag + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) } a2 { - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(31.januar, Dagtype.Svangerskapspengerdag))) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag( + 31.januar, + Dagtype.Svangerskapspengerdag + ) + ) + ) } a1 { håndterYtelser(1.vedtaksperiode) @@ -226,11 +259,21 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { assertEquals(1.februar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) } a1 { - håndterOverstyrTidslinje(februar.map { ManuellOverskrivingDag(it, Dagtype.Svangerskapspengerdag) }) + håndterOverstyrTidslinje(februar.map { + ManuellOverskrivingDag( + it, + Dagtype.Svangerskapspengerdag + ) + }) assertEquals(1.februar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) } a2 { - håndterOverstyrTidslinje(februar.map { ManuellOverskrivingDag(it, Dagtype.Svangerskapspengerdag) }) + håndterOverstyrTidslinje(februar.map { + ManuellOverskrivingDag( + it, + Dagtype.Svangerskapspengerdag + ) + }) assertEquals(1.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) } a1 { @@ -274,9 +317,11 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { tilGodkjenning(10.januar til 31.januar, beregnetInntekt = 20000.månedlig) val vilkårsgrunnlagFørEndring = inspektør.vilkårsgrunnlag(1.vedtaksperiode)!! nullstillTilstandsendringer() - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(9.januar, Dagtype.Sykedag, 100) - )) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(9.januar, Dagtype.Sykedag, 100) + ) + ) assertEquals(9.januar til 31.januar, inspektør.periode(1.vedtaksperiode)) @@ -288,8 +333,13 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterYtelser(1.vedtaksperiode) val vilkårsgrunnlagEtterEndring = inspektør.vilkårsgrunnlag(1.vedtaksperiode)!! - assertTidsnærInntektsopplysning(a1, vilkårsgrunnlagFørEndring.inspektør.inntektsgrunnlag, vilkårsgrunnlagEtterEndring.inspektør.inntektsgrunnlag) - assertTilstander(1.vedtaksperiode, + assertTidsnærInntektsopplysning( + a1, + vilkårsgrunnlagFørEndring.inspektør.inntektsgrunnlag, + vilkårsgrunnlagEtterEndring.inspektør.inntektsgrunnlag + ) + assertTilstander( + 1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, @@ -304,8 +354,14 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { fun `endrer skjæringstidspunkt på en førstegangsbehandling ved å omgjøre en arbeidsdag til sykedag`() { a1 { håndterSøknad(Sykdom(1.januar, 9.januar, 100.prosent)) - tilGodkjenning(10.januar til 31.januar, beregnetInntekt = 20000.månedlig, arbeidsgiverperiode = listOf(10.januar til 26.januar)) // 1. jan - 9. jan blir omgjort til arbeidsdager ved innsending av IM her - val sykepengegrunnlagFør = inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + tilGodkjenning( + 10.januar til 31.januar, + beregnetInntekt = 20000.månedlig, + arbeidsgiverperiode = listOf(10.januar til 26.januar) + ) // 1. jan - 9. jan blir omgjort til arbeidsdager ved innsending av IM her + val sykepengegrunnlagFør = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } nullstillTilstandsendringer() // Saksbehandler korrigerer; 9.januar var vedkommende syk likevel håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(9.januar, Dagtype.Sykedag, 100))) @@ -315,14 +371,28 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterYtelser(2.vedtaksperiode) assertSykdomstidslinjedag(9.januar, Dag.Sykedag::class, OverstyrTidslinje::class) - val sykepengegrunnlagEtter = inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagEtter = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } assertTidsnærInntektsopplysning(a1, sykepengegrunnlagFør, sykepengegrunnlagEtter) assertEquals(1.januar til 9.januar, inspektør.periode(1.vedtaksperiode)) assertEquals(10.januar til 31.januar, inspektør.periode(2.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } } @@ -344,7 +414,8 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { nullstillTilstandsendringer() } val sykepengegrunnlagFør = a2 { - inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } } a1 { @@ -360,7 +431,8 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { } val sykepengegrunnlagEtter = a2 { - inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } } a2 { @@ -368,13 +440,25 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { assertEquals(10.januar til 31.januar, inspektør.periode(1.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } a1 { assertTidsnærInntektsopplysning(a1, sykepengegrunnlagFør, sykepengegrunnlagEtter) assertEquals(1.januar til 9.januar, inspektør.periode(1.vedtaksperiode)) assertEquals(15.januar til 31.januar, inspektør.periode(2.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } } @@ -388,15 +472,21 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) nullstillTilstandsendringer() - val sykepengegrunnlagFør = inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(1.januar, Dagtype.Arbeidsdag, 100), - ManuellOverskrivingDag(4.januar, Dagtype.Arbeidsdag, 100), - )) + val sykepengegrunnlagFør = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(1.januar, Dagtype.Arbeidsdag, 100), + ManuellOverskrivingDag(4.januar, Dagtype.Arbeidsdag, 100), + ) + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) - val sykepengegrunnlagEtter = inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagEtter = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } assertTidsnærInntektsopplysning(a1, sykepengegrunnlagFør, sykepengegrunnlagEtter) @@ -405,10 +495,27 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { assertEquals(5.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(januar, inspektør.periode(1.vedtaksperiode)) - assertUtbetalingsdag(18.januar, Utbetalingsdag.ArbeidsgiverperiodeDag::class, Inntekt.INGEN, Inntekt.INGEN) - assertUtbetalingsdag(19.januar, Utbetalingsdag.NavDag::class, 1431.daglig, Inntekt.INGEN) + assertUtbetalingsdag( + 18.januar, + Utbetalingsdag.ArbeidsgiverperiodeDag::class, + Inntekt.INGEN, + Inntekt.INGEN + ) + assertUtbetalingsdag( + 19.januar, + Utbetalingsdag.NavDag::class, + 1431.daglig, + Inntekt.INGEN + ) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } } @@ -423,15 +530,21 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() nullstillTilstandsendringer() - val sykepengegrunnlagFør = inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(1.januar, Dagtype.Arbeidsdag, 100), - ManuellOverskrivingDag(4.januar, Dagtype.Arbeidsdag, 100), - )) + val sykepengegrunnlagFør = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(1.januar, Dagtype.Arbeidsdag, 100), + ManuellOverskrivingDag(4.januar, Dagtype.Arbeidsdag, 100), + ) + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) - val sykepengegrunnlagEtter = inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagEtter = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } assertTidsnærInntektsopplysning(a1, sykepengegrunnlagFør, sykepengegrunnlagEtter) @@ -440,14 +553,31 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { assertEquals(5.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(januar, inspektør.periode(1.vedtaksperiode)) - assertUtbetalingsdag(18.januar, Utbetalingsdag.ArbeidsgiverperiodeDag::class, Inntekt.INGEN, Inntekt.INGEN) - assertUtbetalingsdag(19.januar, Utbetalingsdag.NavDag::class, 1431.daglig, Inntekt.INGEN) + assertUtbetalingsdag( + 18.januar, + Utbetalingsdag.ArbeidsgiverperiodeDag::class, + Inntekt.INGEN, + Inntekt.INGEN + ) + assertUtbetalingsdag( + 19.januar, + Utbetalingsdag.NavDag::class, + 1431.daglig, + Inntekt.INGEN + ) val førsteUtbetaling = inspektør.utbetaling(0) val revurdering = inspektør.utbetaling(1) assertEquals(førsteUtbetaling.korrelasjonsId, revurdering.korrelasjonsId) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_VILKÅRSPRØVING_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_VILKÅRSPRØVING_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING + ) } } @@ -462,7 +592,9 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() nullstillTilstandsendringer() - val sykepengegrunnlagFør = inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagFør = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } håndterOverstyrTidslinje((1.januar til 16.januar).map { dag -> ManuellOverskrivingDag(dag, Dagtype.Arbeidsdag, 100) }) @@ -475,7 +607,9 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterSøknad(februar) håndterYtelser(2.vedtaksperiode) - val sykepengegrunnlagEtter = inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagEtter = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } assertTidsnærInntektsopplysning(a1, sykepengegrunnlagFør, sykepengegrunnlagEtter) @@ -494,9 +628,16 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { assertEquals(førsteUtbetaling.korrelasjonsId, februarutbetaling.korrelasjonsId) assertEquals(1.januar til 28.februar, februarutbetaling.periode) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, - AVVENTER_VILKÅRSPRØVING_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, - AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_VILKÅRSPRØVING_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET ) } } @@ -512,14 +653,18 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() nullstillTilstandsendringer() - val sykepengegrunnlagFør = inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagFør = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } håndterOverstyrTidslinje((1.januar til 10.januar).map { dag -> ManuellOverskrivingDag(dag, Dagtype.Arbeidsdag, 100) }) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) - val sykepengegrunnlagEtter = inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagEtter = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } assertTidsnærInntektsopplysning(a1, sykepengegrunnlagFør, sykepengegrunnlagEtter) @@ -547,7 +692,14 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { } assertEquals(0, revurdering.personOppdrag.size) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_VILKÅRSPRØVING_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_VILKÅRSPRØVING_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING + ) } } @@ -564,14 +716,18 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() nullstillTilstandsendringer() - val sykepengegrunnlagFør = inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagFør = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } håndterOverstyrTidslinje((1.mars til 10.mars).map { dag -> ManuellOverskrivingDag(dag, Dagtype.Arbeidsdag, 100) }) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) - val sykepengegrunnlagEtter = inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagEtter = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } assertTidsnærInntektsopplysning(a1, sykepengegrunnlagFør, sykepengegrunnlagEtter) @@ -598,7 +754,14 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { } } assertEquals(0, revurdering.personOppdrag.size) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_VILKÅRSPRØVING_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_VILKÅRSPRØVING_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING + ) } } @@ -608,7 +771,9 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { nyttVedtak(januar) nyttVedtak(14.februar til 10.mars, arbeidsgiverperiode = listOf(1.januar til 16.januar)) nullstillTilstandsendringer() - val sykepengegrunnlagFør = inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagFør = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } håndterOverstyrTidslinje((14.februar til 16.februar).map { dag -> ManuellOverskrivingDag(dag, Dagtype.Arbeidsdag, 100) }) @@ -624,7 +789,9 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) - val sykepengegrunnlagEtter = inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagEtter = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } assertTidsnærInntektsopplysning(a1, sykepengegrunnlagFør, sykepengegrunnlagEtter) @@ -669,7 +836,10 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { assertEquals(14.februar til 10.mars, revurderingFebruar.periode) assertEquals(0, revurderingFebruar.personOppdrag.size) assertEquals(1, revurderingFebruar.arbeidsgiverOppdrag.size) - assertEquals(Endringskode.NY, revurderingFebruar.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.NY, + revurderingFebruar.arbeidsgiverOppdrag.inspektør.endringskode + ) revurderingFebruar.arbeidsgiverOppdrag.single().inspektør.also { linje -> assertEquals(5.mars til 9.mars, linje.fom til linje.tom) assertEquals(Endringskode.NY, linje.endringskode) @@ -683,7 +853,9 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { nyttVedtak(januar) nyttVedtak(14.februar til 10.mars, arbeidsgiverperiode = listOf(1.januar til 16.januar)) nullstillTilstandsendringer() - val sykepengegrunnlagFør = inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagFør = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } håndterOverstyrTidslinje((14.februar til 16.februar).map { dag -> ManuellOverskrivingDag(dag, Dagtype.Feriedag, 100) }) @@ -699,7 +871,9 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) - val sykepengegrunnlagEtter = inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag ?: fail { "finner ikke vilkårsgrunnlag" } + val sykepengegrunnlagEtter = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør?.inntektsgrunnlag + ?: fail { "finner ikke vilkårsgrunnlag" } assertTidsnærInntektsopplysning(a1, sykepengegrunnlagFør, sykepengegrunnlagEtter) @@ -744,7 +918,10 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { assertEquals(14.februar til 10.mars, revurderingFebruar.periode) assertEquals(0, revurderingFebruar.personOppdrag.size) assertEquals(1, revurderingFebruar.arbeidsgiverOppdrag.size) - assertEquals(Endringskode.NY, revurderingFebruar.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.NY, + revurderingFebruar.arbeidsgiverOppdrag.inspektør.endringskode + ) revurderingFebruar.arbeidsgiverOppdrag.single().inspektør.also { linje -> assertEquals(5.mars til 9.mars, linje.fom til linje.tom) assertEquals(Endringskode.NY, linje.endringskode) @@ -762,7 +939,8 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() - val sykepengegrunnlagFør = inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag + val sykepengegrunnlagFør = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(31.januar, Dagtype.Arbeidsdag))) håndterYtelser(1.vedtaksperiode) @@ -774,7 +952,8 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) - val sykepengegrunnlagEtter = inspektør.vilkårsgrunnlag(2.vedtaksperiode)!!.inspektør.inntektsgrunnlag + val sykepengegrunnlagEtter = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)!!.inspektør.inntektsgrunnlag assertIngenVarsel(RV_IV_7) assertTidsnærInntektsopplysning(a1, sykepengegrunnlagFør, sykepengegrunnlagEtter) } @@ -823,7 +1002,10 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(3.vedtaksperiode) håndterUtbetalt() - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Arbeid(13.februar, 28.februar)) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + Arbeid(13.februar, 28.februar) + ) assertVarsel(RV_IV_7, 3.vedtaksperiode.filter()) } } @@ -840,7 +1022,10 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { nyttVedtak(5.mars til 31.mars, arbeidsgiverperiode = listOf(1.januar til 16.januar)) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Arbeid(13.februar, 28.februar)) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + Arbeid(13.februar, 28.februar) + ) assertIngenVarsler(3.vedtaksperiode.filter()) } } @@ -884,6 +1069,7 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { assertIngenVarsel(RV_IV_7) } } + @Test fun `gjenbruker saksbehandlerinntekt`() { a1 { @@ -894,11 +1080,20 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() - val sykepengegrunnlagFør = inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør - - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 50.daglig, "overstyring", null, listOf(Triple(1.januar, null, INNTEKT))) - )) + val sykepengegrunnlagFør = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør + + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT - 50.daglig, + "overstyring", + null, + listOf(Triple(1.januar, null, INNTEKT)) + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -919,14 +1114,18 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) - val sykepengegrunnlag = inspektør.vilkårsgrunnlag(2.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør - val arbeidsgiverInntektsopplysning = sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.inntektsopplysning.inspektør + val sykepengegrunnlag = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør + val arbeidsgiverInntektsopplysning = + sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.inntektsopplysning.inspektør assertEquals(INNTEKT - 50.daglig, arbeidsgiverInntektsopplysning.beløp) - val hendelseIdFør = sykepengegrunnlagFør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.inntektsopplysning.inspektør.hendelseId + val hendelseIdFør = + sykepengegrunnlagFør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.inntektsopplysning.inspektør.hendelseId val hendelseIdEtter = arbeidsgiverInntektsopplysning.hendelseId assertEquals(hendelseIdFør, hendelseIdEtter) } } + @Test fun `gjenbruker saksbehandlerinntekt som overstyrer annen saksbehandler`() { a1 { @@ -944,15 +1143,41 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 50.daglig, "overstyring", null, listOf(Triple(1.januar, null, INNTEKT))))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT - 50.daglig, + "overstyring", + null, + listOf(Triple(1.januar, null, INNTEKT)) + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) val andreOverstyring = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 500.daglig, "overstyring", null, listOf(Triple(1.januar, null, INNTEKT)))), meldingsreferanseId = andreOverstyring) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT - 500.daglig, + "overstyring", + null, + listOf(Triple(1.januar, null, INNTEKT)) + ) + ), + meldingsreferanseId = andreOverstyring + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 500.daglig))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 500.daglig)) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -973,17 +1198,28 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterVilkårsgrunnlag(2.vedtaksperiode) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) - håndterSkjønnsmessigFastsettelse(1.februar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 500.daglig))) + håndterSkjønnsmessigFastsettelse( + 1.februar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT - 500.daglig)) + ) håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) - val sykepengegrunnlag = inspektør.vilkårsgrunnlag(2.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør - val arbeidsgiverInntektsopplysning = sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.inntektsopplysning.inspektør + val sykepengegrunnlag = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør + val arbeidsgiverInntektsopplysning = + sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.inntektsopplysning.inspektør assertEquals(INNTEKT - 500.daglig, arbeidsgiverInntektsopplysning.beløp) - assertEquals(andreOverstyring, inspektør.skjønnsmessigFastsattOverstyrtHendelseId(1.januar)) - assertEquals(inntektsmelding, inspektør.skjønnsmessigFastsattOverstyrtHendelseId(1.februar)) + assertEquals( + andreOverstyring, + inspektør.skjønnsmessigFastsattOverstyrtHendelseId(1.januar) + ) + assertEquals( + inntektsmelding, + inspektør.skjønnsmessigFastsattOverstyrtHendelseId(1.februar) + ) } } @@ -995,13 +1231,27 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { val skjønnsmessigFastsattInntekt = INNTEKT * 1.5 håndterSøknad(januar) - val inntektsmeldingId = håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntektIM) + val inntektsmeldingId = + håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntektIM) nullstillTilstandsendringer() håndterVilkårsgrunnlag(1.vedtaksperiode, inntektSkatt) assertTilstander(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK) nullstillTilstandsendringer() - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = skjønnsmessigFastsattInntekt))) - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = skjønnsmessigFastsattInntekt + ) + ) + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -1023,31 +1273,45 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { håndterVilkårsgrunnlag(2.vedtaksperiode, inntektSkatt) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) - håndterSkjønnsmessigFastsettelse(1.februar, listOf(OverstyrtArbeidsgiveropplysning(a1, beregnetInntektIM))) + håndterSkjønnsmessigFastsettelse( + 1.februar, + listOf(OverstyrtArbeidsgiveropplysning(a1, beregnetInntektIM)) + ) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) - val sykepengegrunnlag = inspektør.vilkårsgrunnlag(2.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør + val sykepengegrunnlag = + inspektør.vilkårsgrunnlag(2.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør - val arbeidsgiverInntektsopplysning = sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.inntektsopplysning.inspektør + val arbeidsgiverInntektsopplysning = + sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.inntektsopplysning.inspektør assertEquals(beregnetInntektIM, arbeidsgiverInntektsopplysning.beløp) - assertEquals(inntektsmeldingId, inspektør.skjønnsmessigFastsattOverstyrtHendelseId(1.januar)) - assertEquals(inntektsmeldingId, inspektør.skjønnsmessigFastsattOverstyrtHendelseId(1.februar)) + assertEquals( + inntektsmeldingId, + inspektør.skjønnsmessigFastsattOverstyrtHendelseId(1.januar) + ) + assertEquals( + inntektsmeldingId, + inspektør.skjønnsmessigFastsattOverstyrtHendelseId(1.februar) + ) } } + @Test fun `ikke varsel når det er hull i agp`() { a1 { håndterSøknad(Sykdom(17.januar, 20.januar, 100.prosent)) håndterSøknad(Sykdom(21.januar, 8.februar, 100.prosent)) håndterSøknad(Sykdom(9.februar, 28.februar, 100.prosent)) - håndterInntektsmelding(listOf( - 17.januar til 20.januar, - 2.februar til 13.februar - )) + håndterInntektsmelding( + listOf( + 17.januar til 20.januar, + 2.februar til 13.februar + ) + ) håndterVilkårsgrunnlag(3.vedtaksperiode) håndterYtelser(3.vedtaksperiode) håndterSimulering(3.vedtaksperiode) @@ -1064,7 +1328,8 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { a1 { // Planke håndterSøknad(Sykdom(8.januar, 31.januar, 100.prosent)) - val inntektsmeldingId = håndterInntektsmelding(listOf(8.januar til 23.januar), beregnetInntekt = INNTEKT) + val inntektsmeldingId = + håndterInntektsmelding(listOf(8.januar til 23.januar), beregnetInntekt = INNTEKT) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -1077,7 +1342,11 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { // Skjønnsmessig fastsetter val skjønnsmessigId = UUID.randomUUID() - håndterSkjønnsmessigFastsettelse(8.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT * 1.25)), meldingsreferanseId = skjønnsmessigId) + håndterSkjønnsmessigFastsettelse( + 8.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT * 1.25)), + meldingsreferanseId = skjønnsmessigId + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -1107,7 +1376,8 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { a1 { // Planke håndterSøknad(Sykdom(8.januar, 31.januar, 100.prosent)) - val inntektsmeldingId = håndterInntektsmelding(listOf(8.januar til 23.januar), beregnetInntekt = INNTEKT) + val inntektsmeldingId = + håndterInntektsmelding(listOf(8.januar til 23.januar), beregnetInntekt = INNTEKT) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -1121,7 +1391,17 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { // Overstyrer en gang val overstyring1Id = UUID.randomUUID() val overstyring1Inntekt = INNTEKT * 1.05 - håndterOverstyrArbeidsgiveropplysninger(8.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, overstyring1Inntekt, forklaring = "ja takk")), meldingsreferanseId = overstyring1Id) + håndterOverstyrArbeidsgiveropplysninger( + 8.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + overstyring1Inntekt, + forklaring = "ja takk" + ) + ), + meldingsreferanseId = overstyring1Id + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -1134,7 +1414,17 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { // Overstyrer en gang til val overstyring2Id = UUID.randomUUID() val overstyring2Inntekt = INNTEKT * 1.10 - håndterOverstyrArbeidsgiveropplysninger(8.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, overstyring2Inntekt, forklaring = "ja takk")), meldingsreferanseId = overstyring2Id) + håndterOverstyrArbeidsgiveropplysninger( + 8.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + overstyring2Inntekt, + forklaring = "ja takk" + ) + ), + meldingsreferanseId = overstyring2Id + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -1159,9 +1449,19 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { } } - private fun assertTidsnærInntektsopplysning(orgnummer: String, inntektsgrunnlagFør: InntektsgrunnlagView, inntektsgrunnlagEtter: InntektsgrunnlagView) { - val inntektsopplysningerFørEndring = inntektsgrunnlagFør.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(orgnummer) - val inntektsopplysningerEtterEndring = inntektsgrunnlagEtter.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(orgnummer) + private fun assertTidsnærInntektsopplysning( + orgnummer: String, + inntektsgrunnlagFør: InntektsgrunnlagView, + inntektsgrunnlagEtter: InntektsgrunnlagView + ) { + val inntektsopplysningerFørEndring = + inntektsgrunnlagFør.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + orgnummer + ) + val inntektsopplysningerEtterEndring = + inntektsgrunnlagEtter.inspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + orgnummer + ) assertEquals( inntektsopplysningerEtterEndring.inspektør.inntektsopplysning.inspektør.hendelseId, @@ -1182,15 +1482,25 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { } private fun TestPerson.TestArbeidsgiver.inntektsopplysning(skjæringstidspunkt: LocalDate) = - inspektør.vilkårsgrunnlag(skjæringstidspunkt)?.inspektør?.inntektsgrunnlag?.inspektør?.arbeidsgiverInntektsopplysninger?.singleOrNull { it.inspektør.orgnummer == this.orgnummer }?.inspektør?.inntektsopplysning ?: error("Forventet å finne inntektsopplysning for ${this.orgnummer} på $skjæringstidspunkt") - - private fun TestPerson.TestArbeidsgiver.assertSykdomstidslinjedag(dato: LocalDate, dagtype: KClass, kommerFra: KClass) { + inspektør.vilkårsgrunnlag(skjæringstidspunkt)?.inspektør?.inntektsgrunnlag?.inspektør?.arbeidsgiverInntektsopplysninger?.singleOrNull { it.inspektør.orgnummer == this.orgnummer }?.inspektør?.inntektsopplysning + ?: error("Forventet å finne inntektsopplysning for ${this.orgnummer} på $skjæringstidspunkt") + + private fun TestPerson.TestArbeidsgiver.assertSykdomstidslinjedag( + dato: LocalDate, + dagtype: KClass, + kommerFra: KClass + ) { val dagen = inspektør.sykdomstidslinje[dato] assertEquals(dagtype, dagen::class) assertTrue(dagen.kommerFra(kommerFra)) } - private fun TestPerson.TestArbeidsgiver.assertUtbetalingsdag(dato: LocalDate, dagtype: KClass, arbeidsgiverbeløp: Inntekt, personbeløp: Inntekt) { + private fun TestPerson.TestArbeidsgiver.assertUtbetalingsdag( + dato: LocalDate, + dagtype: KClass, + arbeidsgiverbeløp: Inntekt, + personbeløp: Inntekt + ) { val sisteUtbetaling = inspektør.sisteUtbetaling() val utbetalingstidslinje = sisteUtbetaling.utbetalingstidslinje val dagen = utbetalingstidslinje[dato] @@ -1200,9 +1510,16 @@ internal class GjenbrukeTidsnæreOpplysningerTest: AbstractDslTest() { assertEquals(personbeløp, dagen.økonomi.inspektør.personbeløp) } - private fun TestArbeidsgiverInspektør.skjønnsmessigFastsattOverstyrtHendelseId(skjæringstidspunkt: LocalDate, organisasjonsnummer: String = this.orgnummer) = - vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(organisasjonsnummer) }.inspektør.inntektsopplysning.let { + private fun TestArbeidsgiverInspektør.skjønnsmessigFastsattOverstyrtHendelseId( + skjæringstidspunkt: LocalDate, + organisasjonsnummer: String = this.orgnummer + ) = + vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder( + organisasjonsnummer + ) + }.inspektør.inntektsopplysning.let { assertTrue(it is SkjønnsmessigFastsatt) { "Forventet SkjønnmessigFastsatt inntekt, var ${it::class.simpleName}" } it.inspektør.forrigeInntekt!!.inspektør.hendelseId } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/MinimumSykdomsgradVurdertFlereAGTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/MinimumSykdomsgradVurdertFlereAGTest.kt index ea19cec820..46c335e02c 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/MinimumSykdomsgradVurdertFlereAGTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/MinimumSykdomsgradVurdertFlereAGTest.kt @@ -34,8 +34,16 @@ internal class MinimumSykdomsgradVurdertFlereAGTest : AbstractEndToEndTest() { fun `Saksbehandler vurderer arbeidstid og avslår under 20 prosent på begge arbeidsgivere`() { nyPeriode(januar, orgnummer = a1, grad = 15.prosent) nyPeriode(januar, orgnummer = a2, grad = 20.prosent) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 20000.månedlig, orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 40000.månedlig, orgnummer = a2) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 20000.månedlig, + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 40000.månedlig, + orgnummer = a2 + ) håndterVilkårsgrunnlag( 1.vedtaksperiode, inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( @@ -53,34 +61,55 @@ internal class MinimumSykdomsgradVurdertFlereAGTest : AbstractEndToEndTest() { assertTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) val avvistedager1 = - inspektør(a1).utbetalinger(1.vedtaksperiode).single().inspektør.utbetalingstidslinje.inspektør.avvistedager - assertTrue(inspektør(a1).utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.grad == 15.prosent }) - assertTrue(inspektør(a1).utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.totalGrad == 18 }) + inspektør(a1).utbetalinger(1.vedtaksperiode) + .single().inspektør.utbetalingstidslinje.inspektør.avvistedager + assertTrue( + inspektør(a1).utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.grad == 15.prosent }) + assertTrue( + inspektør(a1).utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.totalGrad == 18 }) assertEquals(11, avvistedager1.size) assertTrue(avvistedager1.all { it.begrunnelser == listOf(Begrunnelse.MinimumSykdomsgrad) }) assertVarsel(Varselkode.RV_VV_4, 1.vedtaksperiode.filter(a1)) - håndterMinimumSykdomsgradVurdert(perioderMedMinimumSykdomsgradVurdertOK = emptyList(), perioderMedMinimumSykdomsgradVurdertIkkeOK = listOf(januar)) + håndterMinimumSykdomsgradVurdert( + perioderMedMinimumSykdomsgradVurdertOK = emptyList(), + perioderMedMinimumSykdomsgradVurdertIkkeOK = listOf(januar) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING, orgnummer = a1) - assertEquals(11, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size) - assertTrue(inspektør(a1).utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.grad == 15.prosent }) - assertTrue(inspektør(a1).utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.totalGrad == 18 }) + assertEquals( + 11, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size + ) + assertTrue( + inspektør(a1).utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.grad == 15.prosent }) + assertTrue( + inspektør(a1).utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.totalGrad == 18 }) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) håndterYtelser(1.vedtaksperiode, orgnummer = a2) val avvistedager2 = - inspektør(a2).utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.avvistedager + inspektør(a2).utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.avvistedager assertEquals(11, avvistedager2.size) assertTrue(avvistedager2.all { it.begrunnelser == listOf(Begrunnelse.MinimumSykdomsgrad) }) assertVarsel(Varselkode.RV_VV_4, 1.vedtaksperiode.filter(a2)) - assertTrue(inspektør(a2).utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.grad == 20.prosent }) - assertTrue(inspektør(a2).utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.totalGrad == 18 }) + assertTrue( + inspektør(a2).utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.grad == 20.prosent }) + assertTrue( + inspektør(a2).utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.totalGrad == 18 }) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a2) håndterUtbetalt(orgnummer = a2) assertTilstand(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVSLUTTET, orgnummer = a2) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/MinimumSykdomsgradVurdertTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/MinimumSykdomsgradVurdertTest.kt index 82aa83c6fe..c4da171906 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/MinimumSykdomsgradVurdertTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/MinimumSykdomsgradVurdertTest.kt @@ -35,7 +35,8 @@ internal class MinimumSykdomsgradVurdertTest : AbstractEndToEndTest() { settOppAvslagPåMinimumSykdomsgrad() val avvistedager = - inspektør.utbetalinger(1.vedtaksperiode).single().inspektør.utbetalingstidslinje.inspektør.avvistedager + inspektør.utbetalinger(1.vedtaksperiode) + .single().inspektør.utbetalingstidslinje.inspektør.avvistedager assertTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING) assertEquals(11, avvistedager.size) @@ -48,9 +49,19 @@ internal class MinimumSykdomsgradVurdertTest : AbstractEndToEndTest() { håndterSimulering(1.vedtaksperiode) assertTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING) - assertEquals(0, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size) - assertEquals(11, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.size) - assertTrue(inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.totalGrad == 10 }) + assertEquals( + 0, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size + ) + assertEquals( + 11, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.size + ) + assertTrue( + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.all { it.økonomi.inspektør.totalGrad == 10 }) } @Test @@ -64,13 +75,23 @@ internal class MinimumSykdomsgradVurdertTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning() håndterUtbetalt() - assertEquals(10, inspektør.sisteUtbetaling().utbetalingstidslinje[17.januar].økonomi.inspektør.totalGrad) + assertEquals( + 10, + inspektør.sisteUtbetaling().utbetalingstidslinje[17.januar].økonomi.inspektør.totalGrad + ) nyPeriode(januar, orgnummer = a2, grad = 10.prosent) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 81000.månedlig, orgnummer = a2) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 81000.månedlig, + orgnummer = a2 + ) håndterYtelser(orgnummer = a1) - assertEquals(19, inspektør.sisteUtbetaling().utbetalingstidslinje[17.januar].økonomi.inspektør.totalGrad) + assertEquals( + 19, + inspektør.sisteUtbetaling().utbetalingstidslinje[17.januar].økonomi.inspektør.totalGrad + ) håndterSimulering(orgnummer = a1) håndterUtbetalingsgodkjenning(orgnummer = a1) @@ -81,8 +102,16 @@ internal class MinimumSykdomsgradVurdertTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(orgnummer = a2) håndterUtbetalt(orgnummer = a2) - assertEquals(0, inspektør(a1).utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size) - assertEquals(0, inspektør(a2).utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size) + assertEquals( + 0, + inspektør(a1).utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size + ) + assertEquals( + 0, + inspektør(a2).utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size + ) assertVarsel(Varselkode.RV_VV_17, 1.vedtaksperiode.filter(orgnummer = a2)) } @@ -90,40 +119,90 @@ internal class MinimumSykdomsgradVurdertTest : AbstractEndToEndTest() { fun `Vurderer samme måned til å være både ok og ikke ok`() { settOppAvslagPåMinimumSykdomsgrad() assertThrows { - håndterMinimumSykdomsgradVurdert(perioderMedMinimumSykdomsgradVurdertOK = listOf(januar), perioderMedMinimumSykdomsgradVurdertIkkeOK = listOf(januar)) + håndterMinimumSykdomsgradVurdert( + perioderMedMinimumSykdomsgradVurdertOK = listOf(januar), + perioderMedMinimumSykdomsgradVurdertIkkeOK = listOf(januar) + ) } } @Test fun `Saksbehandler angrer vurdering`() { settOppAvslagPåMinimumSykdomsgrad() - assertEquals(11, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size) - assertEquals(0, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.size) + assertEquals( + 11, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size + ) + assertEquals( + 0, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.size + ) håndterMinimumSykdomsgradVurdert(perioderMedMinimumSykdomsgradVurdertOK = listOf(januar)) håndterYtelser() - assertEquals(0, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size) - assertEquals(11, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.size) - håndterMinimumSykdomsgradVurdert(perioderMedMinimumSykdomsgradVurdertOK = emptyList(), perioderMedMinimumSykdomsgradVurdertIkkeOK = listOf(januar)) + assertEquals( + 0, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size + ) + assertEquals( + 11, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.size + ) + håndterMinimumSykdomsgradVurdert( + perioderMedMinimumSykdomsgradVurdertOK = emptyList(), + perioderMedMinimumSykdomsgradVurdertIkkeOK = listOf(januar) + ) håndterYtelser() - assertEquals(11, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size) - assertEquals(0, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.size) + assertEquals( + 11, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size + ) + assertEquals( + 0, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.size + ) } @Test fun `bare enkeltdager i vedtaksperioden er vurdert ok`() { settOppAvslagPåMinimumSykdomsgrad() - assertEquals(11, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size) - assertEquals(0, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.size) + assertEquals( + 11, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size + ) + assertEquals( + 0, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.size + ) håndterMinimumSykdomsgradVurdert(perioderMedMinimumSykdomsgradVurdertOK = listOf(1.januar til 20.januar)) håndterYtelser() - assertEquals(8, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size) - assertEquals(3, inspektør.utbetalinger(1.vedtaksperiode).last().inspektør.utbetalingstidslinje.inspektør.navdager.size) + assertEquals( + 8, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.avvistedager.size + ) + assertEquals( + 3, + inspektør.utbetalinger(1.vedtaksperiode) + .last().inspektør.utbetalingstidslinje.inspektør.navdager.size + ) assertVarsel(Varselkode.RV_VV_17, 1.vedtaksperiode.filter(orgnummer = a1)) } private fun settOppAvslagPåMinimumSykdomsgrad() { nyPeriode(januar, orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 10000.månedlig, orgnummer = a1) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 10000.månedlig, + orgnummer = a1 + ) håndterVilkårsgrunnlag( 1.vedtaksperiode, inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( @@ -137,4 +216,4 @@ internal class MinimumSykdomsgradVurdertTest : AbstractEndToEndTest() { ) håndterYtelser(1.vedtaksperiode) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/NavUtbetalerAgpTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/NavUtbetalerAgpTest.kt index 8723fe62c2..f4675c0224 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/NavUtbetalerAgpTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/NavUtbetalerAgpTest.kt @@ -83,7 +83,7 @@ import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { +internal class NavUtbetalerAgpTest : AbstractEndToEndTest() { @Test fun `skal aldri foreslå sykedag NAV ved en hullete arbedisgiverperiode og begrunnelse for reduksjon satt`() { @@ -101,7 +101,10 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) assertSisteTilstand(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - assertEquals("GR AASSSHH SSSSSHH SSSSSHH SSSSSHH S?????? ?SSSSH", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "GR AASSSHH SSSSSHH SSSSSHH SSSSSHH S?????? ?SSSSH", + inspektør.sykdomstidslinje.toShortString() + ) nullstillTilstandsendringer() val inntektsmeldingId = håndterInntektsmelding( @@ -111,7 +114,10 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { assertFunksjonellFeil(RV_IM_23, 1.vedtaksperiode.filter()) - assertEquals("GR AASSSHH SSSSSHH SSSSSHH SSSSSHH S?????? ?SSSSH", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "GR AASSSHH SSSSSHH SSSSSHH SSSSSHH S?????? ?SSSSH", + inspektør.sykdomstidslinje.toShortString() + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) assertSisteTilstand(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING) @@ -144,9 +150,17 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { vedtaksperiodeIdInnhenter = 3.vedtaksperiode ) - assertEquals("GR AASSSHH SSSSSHH SSSSSHH SSSSSHH S?????? ?NSSSH", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "GR AASSSHH SSSSSHH SSSSSHH SSSSSHH S?????? ?NSSSH", + inspektør.sykdomstidslinje.toShortString() + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) } @@ -166,7 +180,10 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(2.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) - assertEquals("SSSSSHH SSSSSHH SU???HH SSSSSHH SS", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SU???HH SSSSSHH SS", + inspektør.sykdomstidslinje.toShortString() + ) assertIngenVarsler(1.vedtaksperiode.filter()) assertVarsel(RV_IM_8, 2.vedtaksperiode.filter()) } @@ -198,7 +215,12 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { ) assertSisteForkastetPeriodeTilstand(a1, 1.vedtaksperiode, TIL_INFOTRYGD) assertFunksjonellFeil(RV_IM_23) - assertEquals(setOf(Dokumentsporing.søknad(søknad), Dokumentsporing.inntektsmeldingDager(im)), inspektør.hendelser(1.vedtaksperiode).toSet()) + assertEquals( + setOf( + Dokumentsporing.søknad(søknad), + Dokumentsporing.inntektsmeldingDager(im) + ), inspektør.hendelser(1.vedtaksperiode).toSet() + ) assertTrue(observatør.inntektsmeldingHåndtert.isEmpty()) assertEquals(im, observatør.inntektsmeldingIkkeHåndtert.single()) } @@ -213,7 +235,12 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { begrunnelseForReduksjonEllerIkkeUtbetalt = "foo", ) assertEquals("HH SSSSSHH SSSSSH", inspektør.sykdomstidslinje.toShortString()) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -226,20 +253,37 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { begrunnelseForReduksjonEllerIkkeUtbetalt = "foo", avsendersystem = ALTINN ) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertEquals(AVSLUTTET_UTEN_VEDTAK, inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().tilstand) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertEquals( + AVSLUTTET_UTEN_VEDTAK, + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().tilstand + ) } @Test fun `Overstyrer agp til sykedagNav - ingen refusjon`() { håndterSykmelding(januar) håndterSøknad(januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), refusjon = Refusjon(INGEN, null, emptyList())) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + refusjon = Refusjon(INGEN, null, emptyList()) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterOverstyrTidslinje((1.januar til 16.januar).map { dagen -> ManuellOverskrivingDag(dagen, Dagtype.SykedagNav, 100) }) + håndterOverstyrTidslinje((1.januar til 16.januar).map { dagen -> + ManuellOverskrivingDag( + dagen, + Dagtype.SykedagNav, + 100 + ) + }) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -269,7 +313,15 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { håndterSimulering(1.vedtaksperiode) assertVarsel(RV_IM_8, 1.vedtaksperiode.filter()) assertVarsel(RV_IM_8, 2.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING + ) assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) } @@ -287,14 +339,24 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterOverstyrTidslinje((1.januar til 16.januar).map { dagen -> ManuellOverskrivingDag(dagen, Dagtype.Sykedag, 100) }) + håndterOverstyrTidslinje((1.januar til 16.januar).map { dagen -> + ManuellOverskrivingDag( + dagen, + Dagtype.Sykedag, + 100 + ) + }) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) val dagerEtter = inspektør.sykdomstidslinje.inspektør.dager (1.januar til 16.januar).forEach { - if (!it.erHelg()) assertTrue(dagerFør.getValue(it).kommerFra("Inntektsmelding")) { "$it kommer ikke fra Inntektsmelding" } - assertTrue(dagerEtter.getValue(it).kommerFra(OverstyrTidslinje::class)) { "$it kommer ikke fra OverstyrTidslinje" } + if (!it.erHelg()) assertTrue( + dagerFør.getValue(it).kommerFra("Inntektsmelding") + ) { "$it kommer ikke fra Inntektsmelding" } + assertTrue( + dagerEtter.getValue(it).kommerFra(OverstyrTidslinje::class) + ) { "$it kommer ikke fra OverstyrTidslinje" } } assertEquals(2, inspektør.antallUtbetalinger) @@ -311,12 +373,21 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { @Test fun `Overstyrer egenmeldingsdager til SykedagNav`() { håndterSøknad(Sykdom(16.januar, 31.januar, 100.prosent)) - håndterInntektsmelding(listOf(1.januar til 16.januar), refusjon = Refusjon(INGEN, null, emptyList())) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + refusjon = Refusjon(INGEN, null, emptyList()) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterOverstyrTidslinje((1.januar til 16.januar).map { dagen -> ManuellOverskrivingDag(dagen, Dagtype.SykedagNav, 100) }) + håndterOverstyrTidslinje((1.januar til 16.januar).map { dagen -> + ManuellOverskrivingDag( + dagen, + Dagtype.SykedagNav, + 100 + ) + }) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -340,7 +411,13 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterOverstyrTidslinje((1.januar til 16.januar).map { dagen -> ManuellOverskrivingDag(dagen, Dagtype.SykedagNav, 100) }) + håndterOverstyrTidslinje((1.januar til 16.januar).map { dagen -> + ManuellOverskrivingDag( + dagen, + Dagtype.SykedagNav, + 100 + ) + }) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -364,7 +441,10 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { refusjon = Refusjon(INGEN, null, emptyList()), begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening", ) - assertEquals(SykedagNav::class, inspektør.sykdomshistorikk.sykdomstidslinje()[1.januar]::class) + assertEquals( + SykedagNav::class, + inspektør.sykdomshistorikk.sykdomstidslinje()[1.januar]::class + ) assertTrue(inspektør.sykdomshistorikk.sykdomstidslinje()[1.januar].kommerFra("Inntektsmelding")) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -386,7 +466,10 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { førsteFraværsdag = 1.januar, begrunnelseForReduksjonEllerIkkeUtbetalt = "FerieEllerAvspasering", ) - assertEquals(SykedagNav::class, inspektør.sykdomshistorikk.sykdomstidslinje()[1.januar]::class) + assertEquals( + SykedagNav::class, + inspektør.sykdomshistorikk.sykdomstidslinje()[1.januar]::class + ) assertTrue(inspektør.sykdomshistorikk.sykdomstidslinje()[1.januar].kommerFra("Inntektsmelding")) } @@ -402,7 +485,12 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { vedtaksperiodeIdInnhenter = 2.vedtaksperiode ) assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertIngenVarsler(1.vedtaksperiode.filter()) assertVarsel(RV_IM_3, 2.vedtaksperiode.filter()) assertVarsel(RV_IM_25, 2.vedtaksperiode.filter()) @@ -414,7 +502,8 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { juni, arbeidsgiverperiode = listOf( 1.juni til 5.juni, 8.juni til 18.juni - )) + ) + ) håndterSøknad(Sykdom(1.august, 10.august, 100.prosent)) nullstillTilstandsendringer() håndterInntektsmelding( @@ -424,7 +513,12 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { vedtaksperiodeIdInnhenter = 2.vedtaksperiode ) assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertIngenVarsler(1.vedtaksperiode.filter()) assertVarsel(RV_IM_3, 2.vedtaksperiode.filter()) assertVarsel(RV_IM_25, 2.vedtaksperiode.filter()) @@ -441,7 +535,10 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { håndterInntektsmelding(listOf(2.januar til 4.januar, 14.januar til 26.januar)) assertEquals(2.januar til 20.januar, inspektør.periode(1.vedtaksperiode)) assertSisteTilstand(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - assertEquals("UUUARR AAAAARH SSSSSHH SSSSS?? ??????? ???SSHH", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "UUUARR AAAAARH SSSSSHH SSSSS?? ??????? ???SSHH", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) nullstillTilstandsendringer() håndterInntektsmelding( @@ -469,19 +566,41 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { orgnummer = a1, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( - grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 4000.månedlig.repeat(3)), - grunnlag(a2, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), 31000.månedlig.repeat(3)) + grunnlag( + a1, + finnSkjæringstidspunkt(a1, 1.vedtaksperiode), + 4000.månedlig.repeat(3) + ), + grunnlag( + a2, + finnSkjæringstidspunkt(a1, 1.vedtaksperiode), + 31000.månedlig.repeat(3) + ) ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode) assertVarsel(RV_VV_2, 1.vedtaksperiode.filter()) assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING) - assertUtbetalingsdag(inspektør.sisteUtbetalingUtbetalingstidslinje()[2.januar], expectedDagtype = Utbetalingsdag.AvvistDag::class, 11) + assertUtbetalingsdag( + inspektør.sisteUtbetalingUtbetalingstidslinje()[2.januar], + expectedDagtype = Utbetalingsdag.AvvistDag::class, + 11 + ) } @Test @@ -511,7 +630,10 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { )) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) - assertEquals("SHH SSSSSHH SSSSSHH SSSSSHH SSSSSHJ JJJJJJJ JJJJJJJ JJJJJJJ JJJJJJJ JJSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SHH SSSSSHH SSSSSHH SSSSSHH SSSSSHJ JJJJJJJ JJJJJJJ JJJJJJJ JJJJJJJ JJSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) } @Test @@ -534,7 +656,11 @@ internal class NavUtbetalerAgpTest: AbstractEndToEndTest() { assertTrue(inspektør.sykdomstidslinje[it] is Sykedag) } (januar).filterNot { it.erHelg() }.forEach { - assertNotNull(inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it].erAvvistMed(Begrunnelse.MinimumInntekt)) + assertNotNull( + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it].erAvvistMed( + Begrunnelse.MinimumInntekt + ) + ) } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsforholdTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsforholdTest.kt index 1c9aad2c2f..317564f739 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsforholdTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsforholdTest.kt @@ -52,19 +52,30 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT) - ) + Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT) + ) ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) val skjæringstidspunkt = inspektør.skjæringstidspunkt(1.vedtaksperiode) - val relevanteOrgnumre1: Iterable = hendelselogg.etterspurtBehov(1.vedtaksperiode.id(ORGNUMMER), Behovtype.Godkjenning, "orgnummereMedRelevanteArbeidsforhold") ?: fail { "forventet orgnummereMedRelevanteArbeidsforhold" } + val relevanteOrgnumre1: Iterable = hendelselogg.etterspurtBehov( + 1.vedtaksperiode.id(ORGNUMMER), + Behovtype.Godkjenning, + "orgnummereMedRelevanteArbeidsforhold" + ) ?: fail { "forventet orgnummereMedRelevanteArbeidsforhold" } assertEquals(listOf(a1, a2).toList(), relevanteOrgnumre1.toList()) - håndterOverstyrArbeidsforhold(skjæringstidspunkt, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + skjæringstidspunkt, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring")) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - val relevanteOrgnumre2: Iterable = hendelselogg.etterspurtBehov(1.vedtaksperiode.id(ORGNUMMER), Behovtype.Godkjenning, "orgnummereMedRelevanteArbeidsforhold") ?: fail { "forventet orgnummereMedRelevanteArbeidsforhold" } + val relevanteOrgnumre2: Iterable = hendelselogg.etterspurtBehov( + 1.vedtaksperiode.id(ORGNUMMER), + Behovtype.Godkjenning, + "orgnummereMedRelevanteArbeidsforhold" + ) ?: fail { "forventet orgnummereMedRelevanteArbeidsforhold" } assertEquals(listOf(a1), relevanteOrgnumre2.toList()) } @@ -75,9 +86,9 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT) - ) + Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT) + ) ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -87,7 +98,10 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { assertEquals(0.daglig, it.økonomi.inspektør.personbeløp) assertEquals(31000.månedlig, it.økonomi.inspektør.aktuellDagsinntekt) } - håndterOverstyrArbeidsforhold(skjæringstidspunkt, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + skjæringstidspunkt, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring")) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) inspektør(a1).sisteUtbetalingUtbetalingstidslinje()[17.januar].also { it -> @@ -96,7 +110,8 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { assertEquals(31000.månedlig, it.økonomi.inspektør.aktuellDagsinntekt) } - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(372000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -115,7 +130,10 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { nyttVedtak(1.januar(2017) til 31.januar(2017), orgnummer = a1) håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a2) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a2) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a2 + ) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar), orgnummer = a1) @@ -123,9 +141,24 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a3, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a3, + 1.desember(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -142,7 +175,10 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { assertEquals(0.daglig, it.økonomi.inspektør.personbeløp) assertEquals(31000.månedlig, it.økonomi.inspektør.aktuellDagsinntekt) } - håndterOverstyrArbeidsforhold(1.januar, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a3, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + 1.januar, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a3, true, "forklaring")) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a2) inspektør(a2).sisteUtbetalingUtbetalingstidslinje()[17.januar].also { it -> @@ -151,7 +187,8 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { assertEquals(31000.månedlig, it.økonomi.inspektør.aktuellDagsinntekt) } - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(372000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -168,14 +205,27 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { @Test fun `kan ikke overstyre arbeidsforhold for arbeidsgiver vi ikke kjenner til`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -188,28 +238,53 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) assertThrows("Kan ikke overstyre arbeidsforhold for en arbeidsgiver vi ikke kjenner til") { - håndterOverstyrArbeidsforhold(1.januar, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a3, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + 1.januar, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a3, true, "forklaring")) + ) } } @Test fun `deaktivering av arbeidsforhold uten sykdom fører til nytt sykepengegrunnlag uten arbeidsforholdet, selv med inntekt`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a3, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a3, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( grunnlag(a1, 1.januar, INNTEKT.repeat(3)), grunnlag(a2, 1.januar, INNTEKT.repeat(3)), - grunnlag(a3, 1.januar, 1000.månedlig.repeat(1)) // Liten inntekt som saksbehandler ikke ser på som relevant + grunnlag( + a3, + 1.januar, + 1000.månedlig.repeat(1) + ) // Liten inntekt som saksbehandler ikke ser på som relevant ) ), orgnummer = a1 @@ -221,7 +296,10 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { assertEquals(0.daglig, it.økonomi.inspektør.personbeløp) assertEquals(31000.månedlig, it.økonomi.inspektør.aktuellDagsinntekt) } - håndterOverstyrArbeidsforhold(1.januar, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a3, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + 1.januar, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a3, true, "forklaring")) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) inspektør(a1).sisteUtbetalingUtbetalingstidslinje()[17.januar].also { it -> assertEquals(1080.daglig, it.økonomi.inspektør.arbeidsgiverbeløp) @@ -229,7 +307,8 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { assertEquals(31000.månedlig, it.økonomi.inspektør.aktuellDagsinntekt) } - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -251,13 +330,25 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { @Test fun `tar med inntekt fra inntektsmelding selv om vi ikke finner et aktivt arbeidsforhold i arbeidsforholdhistorikken`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a2) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a2) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a2 + ) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a2) håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, 30.november(2017), Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a3, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + 30.november(2017), + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a3, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -269,7 +360,8 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { ) håndterYtelser(1.vedtaksperiode, orgnummer = a2) håndterSimulering(1.vedtaksperiode, orgnummer = a2) - val vilkårsgrunnlag = inspektør(a2).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a2).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -291,14 +383,27 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { @Test fun `kan ikke overstyre arbeidsforhold dersom ingen vedtaksperioder kan håndtere hendelsen`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -312,21 +417,41 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { håndterSimulering(1.vedtaksperiode, orgnummer = a1) assertThrows { - håndterOverstyrArbeidsforhold(2.januar, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + 2.januar, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring")) + ) } } @Test fun `vi vilkårsprøver krav om minimum inntekt ved overstyring av arbeidsforhold`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 3800.månedlig, orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 3800.månedlig, + orgnummer = a1 + ) håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -338,10 +463,14 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) - håndterOverstyrArbeidsforhold(1.januar, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + 1.januar, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring")) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(45600.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -359,14 +488,31 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { @Test fun `vi vilkårsprøver krav om opptjening ved overstyring av arbeidsforhold`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT, orgnummer = a1) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT, + orgnummer = a1 + ) håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, 31.desember(2017), null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, 5.januar, Arbeidsforholdtype.ORDINÆRT), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 31.desember(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + 5.januar, + Arbeidsforholdtype.ORDINÆRT + ), ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -382,7 +528,10 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { assertEquals(0.daglig, it.økonomi.inspektør.personbeløp) assertEquals(31000.månedlig, it.økonomi.inspektør.aktuellDagsinntekt) } - håndterOverstyrArbeidsforhold(1.januar, listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring"))) + håndterOverstyrArbeidsforhold( + 1.januar, + listOf(OverstyrArbeidsforhold.ArbeidsforholdOverstyrt(a2, true, "forklaring")) + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) inspektør(a1).sisteUtbetalingUtbetalingstidslinje()[17.januar].also { it -> @@ -391,7 +540,8 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { assertEquals(31000.månedlig, it.økonomi.inspektør.aktuellDagsinntekt) } - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(372000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -404,6 +554,9 @@ internal class OverstyrArbeidsforholdTest : AbstractEndToEndTest() { assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } assertVarsel(RV_OV_1, 1.vedtaksperiode.filter(a1)) - assertInstanceOf(Utbetalingsdag.AvvistDag::class.java, inspektør.sisteUtbetalingUtbetalingstidslinje()[31.januar]) + assertInstanceOf( + Utbetalingsdag.AvvistDag::class.java, + inspektør.sisteUtbetalingUtbetalingstidslinje()[31.januar] + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsgiveropplysningerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsgiveropplysningerTest.kt index dd1852e599..6401813766 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsgiveropplysningerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsgiveropplysningerTest.kt @@ -55,16 +55,23 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { fun `Overstyring av refusjon skal gjelde også på forlengelser`() { nyttVedtak(januar) forlengVedtak(februar) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(ORGNUMMER, INNTEKT, "Noo", null, listOf( - Triple(1.januar,null, INNTEKT / 2), - )) - )) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + ORGNUMMER, INNTEKT, "Noo", null, listOf( + Triple(1.januar, null, INNTEKT / 2), + ) + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertEquals(INNTEKT/2, inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje[1.februar].beløp) + assertEquals( + INNTEKT / 2, + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje[1.februar].beløp + ) håndterYtelser(2.vedtaksperiode) } @@ -72,12 +79,16 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { fun `Kun periodene med endring i refusjon revurderes`() { nyttVedtak(januar) forlengVedtak(februar) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(ORGNUMMER, INNTEKT, "Noo", null, listOf( + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + ORGNUMMER, INNTEKT, "Noo", null, listOf( Triple(1.januar, 31.januar, INNTEKT), Triple(1.februar, null, INNTEKT / 2) - )) - )) + ) + ) + ) + ) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) } @@ -87,11 +98,15 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nullstillTilstandsendringer() val nyInntekt = INNTEKT * 2 val overstyringId = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(ORGNUMMER, nyInntekt, "Det var jo alt for lite!", null, listOf( + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + ORGNUMMER, nyInntekt, "Det var jo alt for lite!", null, listOf( Triple(1.januar, null, nyInntekt) - )) - ), meldingsreferanseId = overstyringId) + ) + ) + ), meldingsreferanseId = overstyringId + ) håndterYtelser(1.vedtaksperiode) val førsteUtbetaling = inspektør.utbetaling(0) val revurdering = inspektør.utbetaling(1) @@ -107,7 +122,17 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertEquals(1, arbeidsgiverInntektsopplysninger.size) arbeidsgiverInntektsopplysninger.single().inspektør.also { overstyring -> assertEquals(nyInntekt, overstyring.inntektsopplysning.inspektør.beløp) - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(overstyringId, 1.januar, null, nyInntekt, SAKSBEHANDLER)), overstyring.refusjonsopplysninger) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + overstyringId, + 1.januar, + null, + nyInntekt, + SAKSBEHANDLER + ) + ), overstyring.refusjonsopplysninger + ) } } } ?: fail { "Forventet vilkårsgrunnlag" } @@ -126,11 +151,15 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { val nySaksbehandlerInntekt = INNTEKT * 2 val nyIMInntekt = INNTEKT * 3 val overstyringId = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(ORGNUMMER, nySaksbehandlerInntekt, "Det var jo alt for lite!", null, listOf( + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + ORGNUMMER, nySaksbehandlerInntekt, "Det var jo alt for lite!", null, listOf( Triple(1.januar, null, nySaksbehandlerInntekt) - )) - ), meldingsreferanseId = overstyringId) + ) + ) + ), meldingsreferanseId = overstyringId + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) is Saksbehandler) @@ -146,21 +175,29 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nullstillTilstandsendringer() val nyInntekt = INNTEKT * 2 val overstyringId = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(ORGNUMMER, nyInntekt, "Det var jo alt for lite!", null, listOf( + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + ORGNUMMER, nyInntekt, "Det var jo alt for lite!", null, listOf( Triple(1.januar, null, nyInntekt) - )) - ), meldingsreferanseId = overstyringId) + ) + ) + ), meldingsreferanseId = overstyringId + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) nullstillTilstandsendringer() val overstyring2Id = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(ORGNUMMER, nyInntekt, "Det var jo alt for lite!", null, listOf( + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + ORGNUMMER, nyInntekt, "Det var jo alt for lite!", null, listOf( Triple(1.januar, null, nyInntekt) - )) - ), meldingsreferanseId = overstyring2Id) + ) + ) + ), meldingsreferanseId = overstyring2Id + ) håndterYtelser(1.vedtaksperiode) val førsteUtbetaling = inspektør.utbetaling(0) @@ -178,7 +215,17 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertEquals(1, arbeidsgiverInntektsopplysninger.size) arbeidsgiverInntektsopplysninger.single().inspektør.also { overstyring -> assertEquals(nyInntekt, overstyring.inntektsopplysning.inspektør.beløp) - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(overstyringId, 1.januar, null, nyInntekt, SAKSBEHANDLER)), overstyring.refusjonsopplysninger) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + overstyringId, + 1.januar, + null, + nyInntekt, + SAKSBEHANDLER + ) + ), overstyring.refusjonsopplysninger + ) } } } ?: fail { "Forventet vilkårsgrunnlag" } @@ -198,11 +245,15 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { forlengVedtak(mars) nullstillTilstandsendringer() val overstyringId = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(ORGNUMMER, INNTEKT, "Vi bruker det samme som før", null, listOf( - Triple(1.mars, null, INNTEKT/2) - )) - ), meldingsreferanseId = overstyringId) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + ORGNUMMER, INNTEKT, "Vi bruker det samme som før", null, listOf( + Triple(1.mars, null, INNTEKT / 2) + ) + ) + ), meldingsreferanseId = overstyringId + ) håndterYtelser(3.vedtaksperiode) håndterSimulering(3.vedtaksperiode) @@ -233,16 +284,37 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertEquals(1, arbeidsgiverInntektsopplysninger.size) arbeidsgiverInntektsopplysninger.single().inspektør.also { overstyring -> assertEquals(INNTEKT, overstyring.inntektsopplysning.inspektør.beløp) - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(overstyring.refusjonsopplysninger.first().inspektør.meldingsreferanseId, 1.januar, 28.februar, INNTEKT, ARBEIDSGIVER), - Refusjonsopplysning(overstyringId, 1.mars, null, INNTEKT/2, SAKSBEHANDLER) - ), overstyring.refusjonsopplysninger) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + overstyring.refusjonsopplysninger.first().inspektør.meldingsreferanseId, + 1.januar, + 28.februar, + INNTEKT, + ARBEIDSGIVER + ), + Refusjonsopplysning( + overstyringId, + 1.mars, + null, + INNTEKT / 2, + SAKSBEHANDLER + ) + ), overstyring.refusjonsopplysninger + ) } } } ?: fail { "Forventet vilkårsgrunnlag" } assertTilstander(1.vedtaksperiode, AVSLUTTET) assertTilstander(2.vedtaksperiode, AVSLUTTET) - assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 3.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) } @Test @@ -251,10 +323,18 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertTrue(inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.infotrygd) val antallHistorikkInnslagFør = inspektør.vilkårsgrunnlagHistorikkInnslag().size val gammelInntekt = inspektør.inntektISykepengegrunnlaget(1.januar) - val nyInntekt = INNTEKT*2 - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(ORGNUMMER, nyInntekt, "Prøver å overstyre Infotrygd-inntekt", null, emptyList()) - )) + val nyInntekt = INNTEKT * 2 + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + ORGNUMMER, + nyInntekt, + "Prøver å overstyre Infotrygd-inntekt", + null, + emptyList() + ) + ) + ) håndterYtelser(1.vedtaksperiode) assertEquals(antallHistorikkInnslagFør, inspektør.vilkårsgrunnlagHistorikkInnslag().size) assertEquals(UEND, inspektør.utbetaling(1).arbeidsgiverOppdrag.inspektør.endringskode) @@ -268,15 +348,29 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { val antallHistorikkInnslag = inspektør.vilkårsgrunnlagHistorikkInnslag().size val gammelInntekt = inspektør.inntektISykepengegrunnlaget(1.januar) val overstyringId = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(ORGNUMMER, gammelInntekt, "Bare nye refusjonsopplysninger her", null, listOf( - Triple(1.januar, null, gammelInntekt/2) - )) - ), meldingsreferanseId = overstyringId) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + ORGNUMMER, gammelInntekt, "Bare nye refusjonsopplysninger her", null, listOf( + Triple(1.januar, null, gammelInntekt / 2) + ) + ) + ), meldingsreferanseId = overstyringId + ) håndterYtelser(1.vedtaksperiode) assertEquals(antallHistorikkInnslag + 1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) assertEquals(gammelInntekt, inspektør.inntektISykepengegrunnlaget(1.januar)) - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(overstyringId, 1.januar, null, gammelInntekt/2, SAKSBEHANDLER)), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar)) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + overstyringId, + 1.januar, + null, + gammelInntekt / 2, + SAKSBEHANDLER + ) + ), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar) + ) val førsteUtbetaling = inspektør.utbetaling(0) val revurdering = inspektør.utbetaling(1) @@ -297,9 +391,13 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, meldingsreferanseId = UUID.randomUUID(), - arbeidsgiveropplysninger = listOf(OverstyrtArbeidsgiveropplysning(ORGNUMMER, INNTEKT/2, "noe", null, refusjonsopplysninger = listOf( - Triple(1.januar, null, INNTEKT/2) - ))) + arbeidsgiveropplysninger = listOf( + OverstyrtArbeidsgiveropplysning( + ORGNUMMER, INNTEKT / 2, "noe", null, refusjonsopplysninger = listOf( + Triple(1.januar, null, INNTEKT / 2) + ) + ) + ) ) håndterYtelser(1.vedtaksperiode) } @@ -320,9 +418,11 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, a2) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, a3) - val vilkårsgrunnlagHistorikkInnslagFørOverstyring = inspektør.vilkårsgrunnlagHistorikkInnslag().size + val vilkårsgrunnlagHistorikkInnslagFørOverstyring = + inspektør.vilkårsgrunnlagHistorikkInnslag().size val overstyringId = UUID.randomUUID() - val a3RefusjonsopplysningerFørOverstyring = inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a3) + val a3RefusjonsopplysningerFørOverstyring = + inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a3) håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, @@ -338,44 +438,72 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { Triple(21.januar, null, INGEN), ) ), OverstyrtArbeidsgiveropplysning( - orgnummer = a2, - inntekt = inntektPerArbeidsgiver*1.25, - forklaring = "justerer opp inntekt og refusjon", - subsumsjon = null, - refusjonsopplysninger = listOf( - Triple(1.januar, null, inntektPerArbeidsgiver*1.25) - ) - ), OverstyrtArbeidsgiveropplysning( - orgnummer = a3, - inntekt = inntektPerArbeidsgiver*1.5, - forklaring = "justerer opp inntekt, uendret refusjon", - subsumsjon = null, - refusjonsopplysninger = listOf( - Triple(1.januar, null, inntektPerArbeidsgiver) - ) + orgnummer = a2, + inntekt = inntektPerArbeidsgiver * 1.25, + forklaring = "justerer opp inntekt og refusjon", + subsumsjon = null, + refusjonsopplysninger = listOf( + Triple(1.januar, null, inntektPerArbeidsgiver * 1.25) ) + ), OverstyrtArbeidsgiveropplysning( + orgnummer = a3, + inntekt = inntektPerArbeidsgiver * 1.5, + forklaring = "justerer opp inntekt, uendret refusjon", + subsumsjon = null, + refusjonsopplysninger = listOf( + Triple(1.januar, null, inntektPerArbeidsgiver) + ) + ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - assertEquals(vilkårsgrunnlagHistorikkInnslagFørOverstyring + 1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) + assertEquals( + vilkårsgrunnlagHistorikkInnslagFørOverstyring + 1, + inspektør.vilkårsgrunnlagHistorikkInnslag().size + ) // a1 assertEquals(inntektPerArbeidsgiver, inspektør.inntektISykepengegrunnlaget(1.januar, a1)) - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(overstyringId, 1.januar, 20.januar, inntektPerArbeidsgiver, SAKSBEHANDLER), - Refusjonsopplysning(overstyringId, 21.januar, null, INGEN, SAKSBEHANDLER) - ), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a1)) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + overstyringId, + 1.januar, + 20.januar, + inntektPerArbeidsgiver, + SAKSBEHANDLER + ), + Refusjonsopplysning(overstyringId, 21.januar, null, INGEN, SAKSBEHANDLER) + ), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a1) + ) // a2 - assertEquals(inntektPerArbeidsgiver*1.25, inspektør.inntektISykepengegrunnlaget(1.januar, a2)) - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(overstyringId, 1.januar, null, inntektPerArbeidsgiver*1.25, SAKSBEHANDLER), - ), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a2)) + assertEquals( + inntektPerArbeidsgiver * 1.25, + inspektør.inntektISykepengegrunnlaget(1.januar, a2) + ) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + overstyringId, + 1.januar, + null, + inntektPerArbeidsgiver * 1.25, + SAKSBEHANDLER + ), + ), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a2) + ) // a3 - assertEquals(inntektPerArbeidsgiver*1.5, inspektør.inntektISykepengegrunnlaget(1.januar, a3)) - assertEquals(a3RefusjonsopplysningerFørOverstyring, inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a3)) + assertEquals( + inntektPerArbeidsgiver * 1.5, + inspektør.inntektISykepengegrunnlaget(1.januar, a3) + ) + assertEquals( + a3RefusjonsopplysningerFørOverstyring, + inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a3) + ) } @Test @@ -385,10 +513,13 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, a1) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, a2) - val vilkårsgrunnlagHistorikkInnslagFørOverstyring = inspektør.vilkårsgrunnlagHistorikkInnslag().size + val vilkårsgrunnlagHistorikkInnslagFørOverstyring = + inspektør.vilkårsgrunnlagHistorikkInnslag().size val overstyringId = UUID.randomUUID() - val a1ArbeidsgiverinntektsopplysningerFørOverstyring = inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1) - val a2ArbeidsgiverinntektsopplysningerFørOverstyring = inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a2) + val a1ArbeidsgiverinntektsopplysningerFørOverstyring = + inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1) + val a2ArbeidsgiverinntektsopplysningerFørOverstyring = + inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a2) håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, @@ -403,22 +534,31 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { Triple(1.januar, null, inntektPerArbeidsgiver), ) ), OverstyrtArbeidsgiveropplysning( - orgnummer = a2, - inntekt = inntektPerArbeidsgiver, - forklaring = "ingen endring", - subsumsjon = null, - refusjonsopplysninger = listOf( - Triple(1.januar, null, inntektPerArbeidsgiver) - ) + orgnummer = a2, + inntekt = inntektPerArbeidsgiver, + forklaring = "ingen endring", + subsumsjon = null, + refusjonsopplysninger = listOf( + Triple(1.januar, null, inntektPerArbeidsgiver) ) ) + ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - assertEquals(vilkårsgrunnlagHistorikkInnslagFørOverstyring + 1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) + assertEquals( + vilkårsgrunnlagHistorikkInnslagFørOverstyring + 1, + inspektør.vilkårsgrunnlagHistorikkInnslag().size + ) - assertEquals(a1ArbeidsgiverinntektsopplysningerFørOverstyring, inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1)) - assertEquals(a2ArbeidsgiverinntektsopplysningerFørOverstyring, inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a2)) + assertEquals( + a1ArbeidsgiverinntektsopplysningerFørOverstyring, + inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1) + ) + assertEquals( + a2ArbeidsgiverinntektsopplysningerFørOverstyring, + inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a2) + ) } @Test @@ -428,9 +568,11 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, a1) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, a2) - val vilkårsgrunnlagHistorikkInnslagFørOverstyring = inspektør.vilkårsgrunnlagHistorikkInnslag().size + val vilkårsgrunnlagHistorikkInnslagFørOverstyring = + inspektør.vilkårsgrunnlagHistorikkInnslag().size val overstyringId = UUID.randomUUID() - val a1ArbeidsgiverinntektsopplysningerFørOverstyring = inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1) + val a1ArbeidsgiverinntektsopplysningerFørOverstyring = + inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1) håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, @@ -445,32 +587,56 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { Triple(1.januar, null, inntektPerArbeidsgiver), ) ), OverstyrtArbeidsgiveropplysning( - orgnummer = a2, - inntekt = inntektPerArbeidsgiver*1.5, - forklaring = "endring", - subsumsjon = null, - refusjonsopplysninger = listOf( - Triple(1.januar, 20.januar, inntektPerArbeidsgiver), - Triple(21.januar, null, inntektPerArbeidsgiver*1.5) - ) + orgnummer = a2, + inntekt = inntektPerArbeidsgiver * 1.5, + forklaring = "endring", + subsumsjon = null, + refusjonsopplysninger = listOf( + Triple(1.januar, 20.januar, inntektPerArbeidsgiver), + Triple(21.januar, null, inntektPerArbeidsgiver * 1.5) ) ) + ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - assertEquals(vilkårsgrunnlagHistorikkInnslagFørOverstyring +1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) + assertEquals( + vilkårsgrunnlagHistorikkInnslagFørOverstyring + 1, + inspektør.vilkårsgrunnlagHistorikkInnslag().size + ) - assertEquals(a1ArbeidsgiverinntektsopplysningerFørOverstyring, inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1)) + assertEquals( + a1ArbeidsgiverinntektsopplysningerFørOverstyring, + inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1) + ) - assertEquals(inntektPerArbeidsgiver*1.5, inspektør.inntektISykepengegrunnlaget(1.januar, a2)) - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(overstyringId, 1.januar, 20.januar, inntektPerArbeidsgiver, SAKSBEHANDLER), - Refusjonsopplysning(overstyringId, 21.januar, null, inntektPerArbeidsgiver*1.5, SAKSBEHANDLER) - ), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a2)) + assertEquals( + inntektPerArbeidsgiver * 1.5, + inspektør.inntektISykepengegrunnlaget(1.januar, a2) + ) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + overstyringId, + 1.januar, + 20.januar, + inntektPerArbeidsgiver, + SAKSBEHANDLER + ), + Refusjonsopplysning( + overstyringId, + 21.januar, + null, + inntektPerArbeidsgiver * 1.5, + SAKSBEHANDLER + ) + ), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a2) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_SIMULERING_REVURDERING, a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_REVURDERING, a2) } + @Test fun `to arbeidsgivere kun refusjonsendring på den ene og endring av inntekt på andre`() { val inntektPerArbeidsgiver = 19000.månedlig @@ -479,7 +645,8 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertSisteTilstand(2.vedtaksperiode, AVSLUTTET, a1) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET, a2) - val refusjonsopplysningerFørOverstyringA1 = inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a1) + val refusjonsopplysningerFørOverstyringA1 = + inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a1) val overstyringId = UUID.randomUUID() håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, @@ -487,34 +654,54 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { arbeidsgiveropplysninger = listOf( OverstyrtArbeidsgiveropplysning( orgnummer = a1, - inntekt = inntektPerArbeidsgiver*1.5, + inntekt = inntektPerArbeidsgiver * 1.5, forklaring = "endring på inntekt", subsumsjon = null, refusjonsopplysninger = listOf( Triple(1.januar, null, inntektPerArbeidsgiver), ) ), OverstyrtArbeidsgiveropplysning( - orgnummer = a2, - inntekt = inntektPerArbeidsgiver, - forklaring = "endring på refusjonen", - subsumsjon = null, - refusjonsopplysninger = listOf( - Triple(1.januar, 31.januar, inntektPerArbeidsgiver), - Triple(1.februar, null, inntektPerArbeidsgiver/2) - ) + orgnummer = a2, + inntekt = inntektPerArbeidsgiver, + forklaring = "endring på refusjonen", + subsumsjon = null, + refusjonsopplysninger = listOf( + Triple(1.januar, 31.januar, inntektPerArbeidsgiver), + Triple(1.februar, null, inntektPerArbeidsgiver / 2) ) ) + ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - assertEquals(inntektPerArbeidsgiver*1.5, inspektør.inntektISykepengegrunnlaget(1.januar, a1)) + assertEquals( + inntektPerArbeidsgiver * 1.5, + inspektør.inntektISykepengegrunnlaget(1.januar, a1) + ) assertEquals(inntektPerArbeidsgiver, inspektør.inntektISykepengegrunnlaget(1.januar, a2)) - assertEquals(refusjonsopplysningerFørOverstyringA1, inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a1)) - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(overstyringId, 1.januar, 31.januar, inntektPerArbeidsgiver, SAKSBEHANDLER), - Refusjonsopplysning(overstyringId, 1.februar, null, inntektPerArbeidsgiver/2, SAKSBEHANDLER) - ), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a2)) + assertEquals( + refusjonsopplysningerFørOverstyringA1, + inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a1) + ) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + overstyringId, + 1.januar, + 31.januar, + inntektPerArbeidsgiver, + SAKSBEHANDLER + ), + Refusjonsopplysning( + overstyringId, + 1.februar, + null, + inntektPerArbeidsgiver / 2, + SAKSBEHANDLER + ) + ), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a2) + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_SIMULERING_REVURDERING, a1) assertSisteTilstand(2.vedtaksperiode, AVVENTER_REVURDERING, a1) @@ -541,16 +728,16 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { Triple(1.januar, null, inntekt), ) ), OverstyrtArbeidsgiveropplysning( - orgnummer = a2, - inntekt = inntekt, - forklaring = "samme inntekt, overgang til brukerutbetaling", - subsumsjon = null, - refusjonsopplysninger = listOf( - Triple(1.januar, 20.januar, inntekt), - Triple(21.januar, null, INGEN) - ) + orgnummer = a2, + inntekt = inntekt, + forklaring = "samme inntekt, overgang til brukerutbetaling", + subsumsjon = null, + refusjonsopplysninger = listOf( + Triple(1.januar, 20.januar, inntekt), + Triple(21.januar, null, INGEN) ) ) + ) ) håndterYtelser(1.vedtaksperiode) @@ -558,8 +745,14 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertEquals(2, inspektør(a1).antallUtbetalinger) assertEquals(2, inspektør(a2).antallUtbetalinger) - assertEquals(inspektør(a1).utbetaling(0).korrelasjonsId, inspektør(a1).sisteUtbetaling().korrelasjonsId) - assertEquals(inspektør(a2).utbetaling(0).korrelasjonsId, inspektør(a2).sisteUtbetaling().korrelasjonsId) + assertEquals( + inspektør(a1).utbetaling(0).korrelasjonsId, + inspektør(a1).sisteUtbetaling().korrelasjonsId + ) + assertEquals( + inspektør(a2).utbetaling(0).korrelasjonsId, + inspektør(a2).sisteUtbetaling().korrelasjonsId + ) inspektør(a1).utbetaling(0).let { opprinneligUtbetaling -> assertEquals(0, opprinneligUtbetaling.personOppdrag.size) @@ -634,15 +827,15 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { Triple(1.januar, null, nyInntekt) ) ), OverstyrtArbeidsgiveropplysning( - orgnummer = a2, - inntekt = nyInntekt, - forklaring = "er ikke i sykepengegrunnlaget", - subsumsjon = null, - refusjonsopplysninger = listOf( - Triple(1.januar, null, nyInntekt) - ) + orgnummer = a2, + inntekt = nyInntekt, + forklaring = "er ikke i sykepengegrunnlaget", + subsumsjon = null, + refusjonsopplysninger = listOf( + Triple(1.januar, null, nyInntekt) ) ) + ) ) val vilkårsgrunnlag = inspektør.vilkårsgrunnlag(1.vedtaksperiode) @@ -663,9 +856,11 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, a1) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET, a2) - val vilkårsgrunnlagHistorikkInnslagFørOverstyring = inspektør.vilkårsgrunnlagHistorikkInnslag().size + val vilkårsgrunnlagHistorikkInnslagFørOverstyring = + inspektør.vilkårsgrunnlagHistorikkInnslag().size val overstyringId = UUID.randomUUID() - val a1ArbeidsgiverinntektsopplysningerFørOverstyring = inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1) + val a1ArbeidsgiverinntektsopplysningerFørOverstyring = + inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1) håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, @@ -673,27 +868,50 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { arbeidsgiveropplysninger = listOf( OverstyrtArbeidsgiveropplysning( orgnummer = a2, - inntekt = inntektPerArbeidsgiver*1.5, + inntekt = inntektPerArbeidsgiver * 1.5, forklaring = "endring", subsumsjon = null, refusjonsopplysninger = listOf( Triple(1.januar, 20.januar, inntektPerArbeidsgiver), - Triple(21.januar, null, inntektPerArbeidsgiver*1.5) + Triple(21.januar, null, inntektPerArbeidsgiver * 1.5) ) ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - assertEquals(vilkårsgrunnlagHistorikkInnslagFørOverstyring + 1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) + assertEquals( + vilkårsgrunnlagHistorikkInnslagFørOverstyring + 1, + inspektør.vilkårsgrunnlagHistorikkInnslag().size + ) - assertEquals(a1ArbeidsgiverinntektsopplysningerFørOverstyring, inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1)) + assertEquals( + a1ArbeidsgiverinntektsopplysningerFørOverstyring, + inspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(1.januar, a1) + ) - assertEquals(inntektPerArbeidsgiver*1.5, inspektør.inntektISykepengegrunnlaget(1.januar, a2)) - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(overstyringId, 1.januar, 20.januar, inntektPerArbeidsgiver, SAKSBEHANDLER), - Refusjonsopplysning(overstyringId, 21.januar, null, inntektPerArbeidsgiver*1.5, SAKSBEHANDLER) - ), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a2)) + assertEquals( + inntektPerArbeidsgiver * 1.5, + inspektør.inntektISykepengegrunnlaget(1.januar, a2) + ) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + overstyringId, + 1.januar, + 20.januar, + inntektPerArbeidsgiver, + SAKSBEHANDLER + ), + Refusjonsopplysning( + overstyringId, + 21.januar, + null, + inntektPerArbeidsgiver * 1.5, + SAKSBEHANDLER + ) + ), inspektør.refusjonsopplysningerISykepengegrunnlaget(1.januar, a2) + ) } @Test @@ -705,24 +923,33 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { arbeidsgiveropplysninger = listOf( OverstyrtArbeidsgiveropplysning( orgnummer = a1, - inntekt = INNTEKT*1.5, + inntekt = INNTEKT * 1.5, forklaring = "endring", subsumsjon = null, - refusjonsopplysninger = listOf(Triple(1.januar, null, INNTEKT*1.5)) + refusjonsopplysninger = listOf(Triple(1.januar, null, INNTEKT * 1.5)) ), OverstyrtArbeidsgiveropplysning( orgnummer = a2, - inntekt = INNTEKT*1.5, + inntekt = INNTEKT * 1.5, forklaring = "endring", subsumsjon = null, - refusjonsopplysninger = listOf(Triple(1.januar, null, INNTEKT*1.5)) + refusjonsopplysninger = listOf(Triple(1.januar, null, INNTEKT * 1.5)) ) ) ) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar, a1) is Saksbehandler) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar, a2) is Saksbehandler) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT, orgnummer = a1) - assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar, a1) is Inntektsmelding) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT, + orgnummer = a1 + ) + assertTrue( + inspektør.inntektsopplysningISykepengegrunnlaget( + 1.januar, + a1 + ) is Inntektsmelding + ) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar, a2) is Saksbehandler) } @@ -731,36 +958,74 @@ internal class OverstyrArbeidsgiveropplysningerTest : AbstractEndToEndTest() { nyttVedtak(januar) nyPeriode(5.februar til 28.februar) - val inntektsmeldingId = håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 7.februar, avsendersystem = ALTINN) + val inntektsmeldingId = håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 7.februar, + avsendersystem = ALTINN + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) assertIngenVarsler() - assertLikeRefusjonsopplysninger(listOf( - Refusjonsopplysning(inntektsmeldingId, 5.februar, 6.februar, INNTEKT, ARBEIDSGIVER), - Refusjonsopplysning(inntektsmeldingId, 7.februar, null, INNTEKT, ARBEIDSGIVER), - ), inspektør.refusjonsopplysningerISykepengegrunnlaget(5.februar, a1)) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning(inntektsmeldingId, 5.februar, 6.februar, INNTEKT, ARBEIDSGIVER), + Refusjonsopplysning(inntektsmeldingId, 7.februar, null, INNTEKT, ARBEIDSGIVER), + ), inspektør.refusjonsopplysningerISykepengegrunnlaget(5.februar, a1) + ) val overstyringId = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(5.februar, meldingsreferanseId = overstyringId, arbeidsgiveropplysninger = listOf( - OverstyrtArbeidsgiveropplysning(a1, INNTEKT, "endre refusjon", null, listOf( + håndterOverstyrArbeidsgiveropplysninger( + 5.februar, meldingsreferanseId = overstyringId, arbeidsgiveropplysninger = listOf( + OverstyrtArbeidsgiveropplysning( + a1, INNTEKT, "endre refusjon", null, listOf( Triple(5.februar, null, INNTEKT) - )) - )) + ) + ) + ) + ) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) assertSisteTilstand(2.vedtaksperiode, AVVENTER_GODKJENNING) } - private fun TestArbeidsgiverInspektør.inntektISykepengegrunnlaget(skjæringstidspunkt: LocalDate, orgnr: String = ORGNUMMER) = - vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(orgnr) }.inspektør.inntektsopplysning.inspektør.beløp - - private fun TestArbeidsgiverInspektør.inntektsopplysningISykepengegrunnlaget(skjæringstidspunkt: LocalDate, orgnr: String = ORGNUMMER) = - vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(orgnr) }.inspektør.inntektsopplysning - - private fun TestArbeidsgiverInspektør.refusjonsopplysningerISykepengegrunnlaget(skjæringstidspunkt: LocalDate, orgnr: String = ORGNUMMER) = - vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(orgnr) }.inspektør.refusjonsopplysninger - - private fun TestArbeidsgiverInspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget(skjæringstidspunkt: LocalDate, orgnr: String = ORGNUMMER) = - vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(orgnr) } + private fun TestArbeidsgiverInspektør.inntektISykepengegrunnlaget( + skjæringstidspunkt: LocalDate, + orgnr: String = ORGNUMMER + ) = + vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder( + orgnr + ) + }.inspektør.inntektsopplysning.inspektør.beløp + + private fun TestArbeidsgiverInspektør.inntektsopplysningISykepengegrunnlaget( + skjæringstidspunkt: LocalDate, + orgnr: String = ORGNUMMER + ) = + vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder( + orgnr + ) + }.inspektør.inntektsopplysning + + private fun TestArbeidsgiverInspektør.refusjonsopplysningerISykepengegrunnlaget( + skjæringstidspunkt: LocalDate, + orgnr: String = ORGNUMMER + ) = + vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder( + orgnr + ) + }.inspektør.refusjonsopplysninger + + private fun TestArbeidsgiverInspektør.arbeidsgiverInntektsopplysningISykepengegrunnlaget( + skjæringstidspunkt: LocalDate, + orgnr: String = ORGNUMMER + ) = + vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder( + orgnr + ) + } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsgiverperiodeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsgiverperiodeTest.kt index ea41b7259a..c2519f98b1 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsgiverperiodeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrArbeidsgiverperiodeTest.kt @@ -32,10 +32,12 @@ internal class OverstyrArbeidsgiverperiodeTest : AbstractDslTest() { fun `endre arbeidsgiverperiode til å starte tidligere`() { a1 { håndterSøknad(Sykdom(20.januar, 15.februar, 100.prosent)) - håndterInntektsmelding(listOf( - 17.januar til 31.januar, - 2.februar til 2.februar - )) + håndterInntektsmelding( + listOf( + 17.januar til 31.januar, + 2.februar til 2.februar + ) + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -46,16 +48,30 @@ internal class OverstyrArbeidsgiverperiodeTest : AbstractDslTest() { assertEquals(17.januar til 15.februar, inspektør.periode(1.vedtaksperiode)) // drar agp tilbake to dager, men glemmer å omgjøre 1. februar til sykdom observatør.vedtaksperiodeVenter.clear() - assertUgyldigSituasjon("En vedtaksperiode i AVVENTER_REVURDERING trenger hjelp fordi FLERE_SKJÆRINGSTIDSPUNKT!"){ - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(15.januar, Dagtype.Sykedag, 100), - ManuellOverskrivingDag(16.januar, Dagtype.Sykedag, 100) - )) + assertUgyldigSituasjon("En vedtaksperiode i AVVENTER_REVURDERING trenger hjelp fordi FLERE_SKJÆRINGSTIDSPUNKT!") { + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(15.januar, Dagtype.Sykedag, 100), + ManuellOverskrivingDag(16.januar, Dagtype.Sykedag, 100) + ) + ) } - observatør.assertVenter(1.vedtaksperiode, venterPåHva = HJELP, fordi = FLERE_SKJÆRINGSTIDSPUNKT) + observatør.assertVenter( + 1.vedtaksperiode, + venterPåHva = HJELP, + fordi = FLERE_SKJÆRINGSTIDSPUNKT + ) assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(1.februar, Dagtype.Sykedag, 100))) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag( + 1.februar, + Dagtype.Sykedag, + 100 + ) + ) + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -66,7 +82,7 @@ internal class OverstyrArbeidsgiverperiodeTest : AbstractDslTest() { assertEquals(0, revurderingen.personOppdrag.size) assertEquals(1, revurderingen.arbeidsgiverOppdrag.size) revurderingen.arbeidsgiverOppdrag[0].inspektør.also { linje -> - assertEquals(31.januar til 15.februar, linje.fom til linje.tom) + assertEquals(31.januar til 15.februar, linje.fom til linje.tom) assertEquals(1431, linje.beløp) } } @@ -86,17 +102,31 @@ internal class OverstyrArbeidsgiverperiodeTest : AbstractDslTest() { håndterSimulering(3.vedtaksperiode) nullstillTilstandsendringer() - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(1.april, Dagtype.Arbeidsdag), - ManuellOverskrivingDag(2.april, Dagtype.Arbeidsdag), - )) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(1.april, Dagtype.Arbeidsdag), + ManuellOverskrivingDag(2.april, Dagtype.Arbeidsdag), + ) + ) håndterVilkårsgrunnlag(3.vedtaksperiode) håndterYtelser(3.vedtaksperiode) assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) assertEquals(3, inspektør.antallUtbetalinger) inspektør.sisteUtbetaling().also { utbetalingen -> diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrGhostInntektTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrGhostInntektTest.kt index 4bbb801ffb..7bd1a8e412 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrGhostInntektTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrGhostInntektTest.kt @@ -59,7 +59,8 @@ internal class OverstyrGhostInntektTest : AbstractEndToEndTest() { ) håndterOverstyrInntekt(500.månedlig, a2, 1.januar) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(378000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -80,7 +81,13 @@ internal class OverstyrGhostInntektTest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + orgnummer = a1 + ) } @Test @@ -116,7 +123,8 @@ internal class OverstyrGhostInntektTest : AbstractEndToEndTest() { ) håndterOverstyrInntekt(500.månedlig, a2, 1.januar) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(378000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -136,7 +144,13 @@ internal class OverstyrGhostInntektTest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + orgnummer = a1 + ) } private fun tilOverstyring( @@ -148,7 +162,11 @@ internal class OverstyrGhostInntektTest : AbstractEndToEndTest() { ) { håndterSykmelding(Sykmeldingsperiode(fom, tom), orgnummer = a1) håndterSøknad(Søknad.Søknadsperiode.Sykdom(fom, tom, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(fom til fom.plusDays(15)), beregnetInntekt = beregnetInntekt, orgnummer = a1) + håndterInntektsmelding( + listOf(fom til fom.plusDays(15)), + beregnetInntekt = beregnetInntekt, + orgnummer = a1 + ) val inntektForSykepengegrunnlag = sykepengegrunnlag.keys.map { orgnummer -> grunnlag(orgnummer, fom, sykepengegrunnlag[orgnummer]!!.repeat(3)) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrInntektFlereArbeidsgivereTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrInntektFlereArbeidsgivereTest.kt index 7952ff9cc4..6efd778454 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrInntektFlereArbeidsgivereTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrInntektFlereArbeidsgivereTest.kt @@ -48,7 +48,7 @@ import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Assertions.fail import org.junit.jupiter.api.Test -internal class OverstyrInntektFlereArbeidsgivereTest: AbstractEndToEndTest() { +internal class OverstyrInntektFlereArbeidsgivereTest : AbstractEndToEndTest() { @Test fun `overstyr inntekt med flere AG -- happy case`() { @@ -59,7 +59,8 @@ internal class OverstyrInntektFlereArbeidsgivereTest: AbstractEndToEndTest() { assertInntektForDato(20000.månedlig, 1.januar, inspektør = inspektør(a1)) assertInntektForDato(20000.månedlig, 1.januar, inspektør = inspektør(a2)) - (inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(480000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -84,7 +85,8 @@ internal class OverstyrInntektFlereArbeidsgivereTest: AbstractEndToEndTest() { assertTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING, orgnummer = a1) assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - (inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(468000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -114,7 +116,8 @@ internal class OverstyrInntektFlereArbeidsgivereTest: AbstractEndToEndTest() { assertIngenFunksjonelleFeil() assertInntektForDato(20000.månedlig, 1.januar, inspektør = inspektør(a1)) assertInntektForDato(19000.månedlig, 1.januar, inspektør = inspektør(a2)) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(468000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -145,7 +148,8 @@ internal class OverstyrInntektFlereArbeidsgivereTest: AbstractEndToEndTest() { assertTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) assertInntektForDato(19000.månedlig, 1.januar, inspektør = inspektør(a2)) assertInntektForDato(20000.månedlig, 1.januar, inspektør = inspektør(a1)) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(468000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -168,13 +172,24 @@ internal class OverstyrInntektFlereArbeidsgivereTest: AbstractEndToEndTest() { tilOverstyring( sykepengegrunnlag = mapOf(a1 to 30000.månedlig, a2 to 1000.månedlig), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.november(2017), null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.november(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterOverstyrInntekt(29000.månedlig, a1, 1.januar) - val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" } + val vilkårsgrunnlag = inspektør(a1).vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(360000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -218,11 +233,25 @@ internal class OverstyrInntektFlereArbeidsgivereTest: AbstractEndToEndTest() { fun `overstyring av inntekt kan føre til brukerutbetaling`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a2) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a2) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a1 + ) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.januar, 31.januar, 100.prosent), + orgnummer = a2 + ) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT / 4, orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT / 4, orgnummer = a2) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT / 4, + orgnummer = a1 + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT / 4, + orgnummer = a2 + ) håndterVilkårsgrunnlag(1.vedtaksperiode, orgnummer = a1) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -261,7 +290,11 @@ internal class OverstyrInntektFlereArbeidsgivereTest: AbstractEndToEndTest() { ) { håndterSykmelding(Sykmeldingsperiode(fom, tom), orgnummer = a1) håndterSøknad(Søknad.Søknadsperiode.Sykdom(fom, tom, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(fom til fom.plusDays(15)), beregnetInntekt = beregnetInntekt, orgnummer = a1) + håndterInntektsmelding( + listOf(fom til fom.plusDays(15)), + beregnetInntekt = beregnetInntekt, + orgnummer = a1 + ) val inntektForSykepengegrunnlag = sykepengegrunnlag.keys.map { orgnummer -> grunnlag(orgnummer, fom, sykepengegrunnlag[orgnummer]!!.repeat(3)) } @@ -275,4 +308,4 @@ internal class OverstyrInntektFlereArbeidsgivereTest: AbstractEndToEndTest() { håndterSimulering(1.vedtaksperiode, orgnummer = a1) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrInntektTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrInntektTest.kt index 287d75c8d9..64404f0268 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrInntektTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrInntektTest.kt @@ -75,37 +75,59 @@ internal class OverstyrInntektTest : AbstractEndToEndTest() { ?.also { assertEquals(overstyrtInntekt, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) - } + } } @Test fun `overstyre ghostinntekt`() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlag(1.vedtaksperiode, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( - inntekter = inntektperioderForSykepengegrunnlag { - 1.oktober(2017) til 1.desember(2017) inntekter { - a1 inntekt INNTEKT + håndterVilkårsgrunnlag(1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( + inntekter = inntektperioderForSykepengegrunnlag { + 1.oktober(2017) til 1.desember(2017) inntekter { + a1 inntekt INNTEKT + } } - } - ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), type = Arbeidsforholdtype.ORDINÆRT) - ), orgnummer = a1) + ), + arbeidsforhold = listOf( + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.desember(2017), + type = Arbeidsforholdtype.ORDINÆRT + ) + ), + orgnummer = a1) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) nullstillTilstandsendringer() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(a2, 500.daglig, "retter opp ikke-rapportert-inntekt", null, emptyList()) - )) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + a2, + 500.daglig, + "retter opp ikke-rapportert-inntekt", + null, + emptyList() + ) + ) + ) val vilkårsgrunnlagInspektør = inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør val sykepengegrunnlagInspektør = vilkårsgrunnlagInspektør?.inntektsgrunnlag?.inspektør - val a2Opplysninger = sykepengegrunnlagInspektør?.arbeidsgiverInntektsopplysningerPerArbeidsgiver?.get(a2)?.inspektør ?: fail { "må ha inntekt for a2" } + val a2Opplysninger = + sykepengegrunnlagInspektør?.arbeidsgiverInntektsopplysningerPerArbeidsgiver?.get(a2)?.inspektør + ?: fail { "må ha inntekt for a2" } assertEquals(500.daglig, a2Opplysninger.inntektsopplysning.inspektør.beløp) assertEquals(Saksbehandler::class, a2Opplysninger.inntektsopplysning::class) - val overstyrtInntekt = a2Opplysninger.inntektsopplysning.inspektør.forrigeInntekt ?: fail { "forventet overstyrt inntekt" } + val overstyrtInntekt = a2Opplysninger.inntektsopplysning.inspektør.forrigeInntekt + ?: fail { "forventet overstyrt inntekt" } assertEquals(IkkeRapportert::class, overstyrtInntekt::class) } @@ -113,7 +135,11 @@ internal class OverstyrInntektTest : AbstractEndToEndTest() { fun `skal ikke hente registerdata for vilkårsprøving på nytt ved overstyring av inntekt`() { tilGodkjenning(januar, ORGNUMMER) nullstillTilstandsendringer() - håndterOverstyrInntekt(inntekt = 19000.månedlig, orgnummer = ORGNUMMER, skjæringstidspunkt = 1.januar) + håndterOverstyrInntekt( + inntekt = 19000.månedlig, + orgnummer = ORGNUMMER, + skjæringstidspunkt = 1.januar + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) assertTilstander( diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrTidslinjeFlereAGTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrTidslinjeFlereAGTest.kt index ad8a371444..b5b22c42b0 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrTidslinjeFlereAGTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrTidslinjeFlereAGTest.kt @@ -32,7 +32,10 @@ internal class OverstyrTidslinjeFlereAGTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode, orgnummer = a2) håndterSimulering(1.vedtaksperiode, orgnummer = a2) - håndterOverstyrTidslinje((29.januar til 29.januar).map { manuellFeriedag(it) }, orgnummer = a2) + håndterOverstyrTidslinje( + (29.januar til 29.januar).map { manuellFeriedag(it) }, + orgnummer = a2 + ) assertIngenFunksjonelleFeil() nullstillTilstandsendringer() assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) @@ -43,7 +46,10 @@ internal class OverstyrTidslinjeFlereAGTest : AbstractEndToEndTest() { fun `overstyre en eldre periode hos en arbeidsgiver`() { nyttVedtak(januar, orgnummer = a1) tilGodkjenning(1.oktober til 30.oktober, a2) - håndterOverstyrTidslinje((29.januar til 29.januar).map { manuellFeriedag(it) }, orgnummer = a1) + håndterOverstyrTidslinje( + (29.januar til 29.januar).map { manuellFeriedag(it) }, + orgnummer = a1 + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, a2) } @@ -54,7 +60,10 @@ internal class OverstyrTidslinjeFlereAGTest : AbstractEndToEndTest() { tilGodkjenning(1.oktober til 30.oktober, a2) - håndterOverstyrTidslinje((29.januar til 29.januar).map { manuellFeriedag(it) }, orgnummer = a1) + håndterOverstyrTidslinje( + (29.januar til 29.januar).map { manuellFeriedag(it) }, + orgnummer = a1 + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, a2) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrTidslinjeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrTidslinjeTest.kt index 5994b52959..725b3a0d1c 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrTidslinjeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/OverstyrTidslinjeTest.kt @@ -98,16 +98,26 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { assertSisteTilstand(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING) // Når saksbehandler overstyrer tidslinjen forventer Speilvendt å få overstyring igangsatt for å håndhenve totrinns - håndterOverstyrTidslinje((1.februar til 14.februar).map { ManuellOverskrivingDag(it, Dagtype.Sykedag, 100) }) + håndterOverstyrTidslinje((1.februar til 14.februar).map { + ManuellOverskrivingDag( + it, + Dagtype.Sykedag, + 100 + ) + }) val overstyringIgangsatt = observatør.overstyringIgangsatt.single() - assertEquals(listOf(PersonObserver.OverstyringIgangsatt.VedtaksperiodeData( - orgnummer = ORGNUMMER, - vedtaksperiodeId = 2.vedtaksperiode.id(ORGNUMMER), - periode = 1.februar til 28.februar, - skjæringstidspunkt = 1.januar, - typeEndring = "ENDRING" - )), overstyringIgangsatt.berørtePerioder) + assertEquals( + listOf( + PersonObserver.OverstyringIgangsatt.VedtaksperiodeData( + orgnummer = ORGNUMMER, + vedtaksperiodeId = 2.vedtaksperiode.id(ORGNUMMER), + periode = 1.februar til 28.februar, + skjæringstidspunkt = 1.januar, + typeEndring = "ENDRING" + ) + ), overstyringIgangsatt.berørtePerioder + ) assertEquals("SYKDOMSTIDSLINJE", overstyringIgangsatt.årsak) } @@ -126,13 +136,17 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { assertSisteTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(1.februar, Dagtype.Sykedag, 60))) val overstyringIgangsatt = observatør.overstyringIgangsatt.single() - assertEquals(listOf(PersonObserver.OverstyringIgangsatt.VedtaksperiodeData( - orgnummer = ORGNUMMER, - vedtaksperiodeId = 2.vedtaksperiode.id(ORGNUMMER), - periode = 1.februar til 28.februar, - skjæringstidspunkt = 1.januar, - typeEndring = "ENDRING" - )), overstyringIgangsatt.berørtePerioder) + assertEquals( + listOf( + PersonObserver.OverstyringIgangsatt.VedtaksperiodeData( + orgnummer = ORGNUMMER, + vedtaksperiodeId = 2.vedtaksperiode.id(ORGNUMMER), + periode = 1.februar til 28.februar, + skjæringstidspunkt = 1.januar, + typeEndring = "ENDRING" + ) + ), overstyringIgangsatt.berørtePerioder + ) assertEquals("SYKDOMSTIDSLINJE", overstyringIgangsatt.årsak) } @@ -140,9 +154,14 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { fun `Senere perioder inngår ikke i overstyring igangsatt selv om det er en endring fra saksbehandler`() { tilGodkjenning(januar, ORGNUMMER) håndterSøknad(mars) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(ORGNUMMER, INNTEKT/2))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(ORGNUMMER, INNTEKT / 2)) + ) val overstyringIgangsatt = observatør.overstyringIgangsatt.single() - assertEquals(listOf(1.vedtaksperiode.id(ORGNUMMER)), overstyringIgangsatt.berørtePerioder.map { it.vedtaksperiodeId }) + assertEquals( + listOf(1.vedtaksperiode.id(ORGNUMMER)), + overstyringIgangsatt.berørtePerioder.map { it.vedtaksperiodeId }) } @Test @@ -150,26 +169,74 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(3.februar, 26.februar, 100.prosent)) håndterSøknad(Sykdom(27.februar, 12.mars, 100.prosent)) håndterSøknad(Sykdom(13.mars, 31.mars, 100.prosent)) - håndterInntektsmelding(listOf(6.mars til 21.mars), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(6.mars til 21.mars), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(3.vedtaksperiode) håndterYtelser(3.vedtaksperiode) håndterSimulering(3.vedtaksperiode) nullstillTilstandsendringer() - håndterInntektsmelding(listOf(2.februar til 17.februar), vedtaksperiodeIdInnhenter = 1.vedtaksperiode) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + håndterInntektsmelding( + listOf(2.februar til 17.februar), + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) håndterYtelser(3.vedtaksperiode) håndterSimulering(3.vedtaksperiode) nullstillTilstandsendringer() - assertEquals("UGG UUUUUGG UUUUUGR AAAAARR AAAAARR ASSSSHH SSSSSHH SSSSSHH SSSSSH", inspektør.sykdomstidslinje.toShortString()) - håndterOverstyrTidslinje((20.februar til 24.februar).map { ManuellOverskrivingDag(it, Dagtype.Sykedag, 100) }) - assertEquals("UGG UUUUUGG UUUUUGR ASSSSHR AAAAARR ASSSSHH SSSSSHH SSSSSHH SSSSSH", inspektør.sykdomstidslinje.toShortString()) - håndterOverstyrTidslinje((18.februar til 19.februar).map { ManuellOverskrivingDag(it, Dagtype.Sykedag, 100) }) - assertEquals("UGG UUUUUGG UUUUUGH SSSSSHR AAAAARR ASSSSHH SSSSSHH SSSSSHH SSSSSH", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "UGG UUUUUGG UUUUUGR AAAAARR AAAAARR ASSSSHH SSSSSHH SSSSSHH SSSSSH", + inspektør.sykdomstidslinje.toShortString() + ) + håndterOverstyrTidslinje((20.februar til 24.februar).map { + ManuellOverskrivingDag( + it, + Dagtype.Sykedag, + 100 + ) + }) + assertEquals( + "UGG UUUUUGG UUUUUGR ASSSSHR AAAAARR ASSSSHH SSSSSHH SSSSSHH SSSSSH", + inspektør.sykdomstidslinje.toShortString() + ) + håndterOverstyrTidslinje((18.februar til 19.februar).map { + ManuellOverskrivingDag( + it, + Dagtype.Sykedag, + 100 + ) + }) + assertEquals( + "UGG UUUUUGG UUUUUGH SSSSSHR AAAAARR ASSSSHH SSSSSHH SSSSSHH SSSSSH", + inspektør.sykdomstidslinje.toShortString() + ) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE) assertTilstander(3.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE) } @@ -185,7 +252,10 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { fun `overstyring av tidslinje som flytter skjæringstidspunkt blant annet - da gjenbruker vi tidsnære opplysninger`() { nyPeriode(1.januar til 10.januar) nyPeriode(15.januar til 20.januar) - håndterInntektsmelding(listOf(15.januar til 30.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(15.januar til 30.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) @@ -207,7 +277,10 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { assertSisteTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(3.vedtaksperiode, AVSLUTTET) - håndterInntektsmelding(listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(2.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) assertSisteTilstand(3.vedtaksperiode, AVVENTER_REVURDERING) @@ -235,22 +308,32 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { @Test fun `arbeidsgiver endrer arbeidsgiverperioden tilbake - må overstyre tidslinje for å fikse`() { håndterSøknad(Sykdom(1.februar, 10.februar, 100.prosent)) - nyttVedtak(11.februar til 28.februar, arbeidsgiverperiode = listOf(1.februar til 4.februar, 7.februar til 18.februar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + nyttVedtak( + 11.februar til 28.februar, + arbeidsgiverperiode = listOf(1.februar til 4.februar, 7.februar til 18.februar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertEquals(Dag.Arbeidsdag::class, inspektør.sykdomstidslinje[5.februar]::class) assertEquals(Dag.Arbeidsdag::class, inspektør.sykdomstidslinje[6.februar]::class) nullstillTilstandsendringer() observatør.vedtaksperiodeVenter.clear() - assertUgyldigSituasjon("En vedtaksperiode i AVVENTER_INNTEKTSMELDING trenger hjelp fordi FLERE_SKJÆRINGSTIDSPUNKT!"){ + assertUgyldigSituasjon("En vedtaksperiode i AVVENTER_INNTEKTSMELDING trenger hjelp fordi FLERE_SKJÆRINGSTIDSPUNKT!") { håndterInntektsmelding(listOf(16.januar til 31.januar), avsendersystem = ALTINN) } - observatør.assertVenter(1.vedtaksperiode.id(ORGNUMMER), venterPåHva = HJELP, fordi = FLERE_SKJÆRINGSTIDSPUNKT) + observatør.assertVenter( + 1.vedtaksperiode.id(ORGNUMMER), + venterPåHva = HJELP, + fordi = FLERE_SKJÆRINGSTIDSPUNKT + ) assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_INNTEKTSMELDING) - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(5.februar, Dagtype.Sykedag, 100), - ManuellOverskrivingDag(6.februar, Dagtype.Sykedag, 100), - )) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(5.februar, Dagtype.Sykedag, 100), + ManuellOverskrivingDag(6.februar, Dagtype.Sykedag, 100), + ) + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -264,17 +347,30 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(17.januar, 31.januar)) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterOverstyrTidslinje( - (17.januar til 31.januar).map { dagen -> ManuellOverskrivingDag(dagen, Dagtype.Sykedag, 100) } + (17.januar til 31.januar).map { dagen -> + ManuellOverskrivingDag( + dagen, + Dagtype.Sykedag, + 100 + ) + } ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - val vilkårsgrunnlaget = inspektør.vilkårsgrunnlag(1.vedtaksperiode) ?: fail { "fant ikke vilkårsgrunnlag" } + val vilkårsgrunnlaget = + inspektør.vilkårsgrunnlag(1.vedtaksperiode) ?: fail { "fant ikke vilkårsgrunnlag" } val sykepengegrunnlagInspektør = vilkårsgrunnlaget.inspektør.inntektsgrunnlag.inspektør - val arbeidsgiverInntektsopplysning = sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(ORGNUMMER).inspektør + val arbeidsgiverInntektsopplysning = + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + ORGNUMMER + ).inspektør assertEquals(INNTEKT, arbeidsgiverInntektsopplysning.inntektsopplysning.inspektør.beløp) - assertEquals(Inntektsmelding::class, arbeidsgiverInntektsopplysning.inntektsopplysning::class) + assertEquals( + Inntektsmelding::class, + arbeidsgiverInntektsopplysning.inntektsopplysning::class + ) } @Test @@ -294,11 +390,19 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { nullstillTilstandsendringer() - håndterOverstyrTidslinje((juli).map { ManuellOverskrivingDag(it, Dagtype.ArbeidIkkeGjenopptattDag) }) + håndterOverstyrTidslinje((juli).map { + ManuellOverskrivingDag( + it, + Dagtype.ArbeidIkkeGjenopptattDag + ) + }) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) - assertEquals("SHH SSSSSHH SSSSSHH SSSSSHH SSSSSHJ JJJJJJJ JJJJJJJ JJJJJJJ JJJJJJJ JJNSSHH SSSSSHH SSSSSHH SSSSSHH SSSSS", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "SHH SSSSSHH SSSSSHH SSSSSHH SSSSSHJ JJJJJJJ JJJJJJJ JJJJJJJ JJJJJJJ JJNSSHH SSSSSHH SSSSSHH SSSSSHH SSSSS", + inspektør.sykdomstidslinje.toShortString() + ) assertEquals(1.august, inspektør.skjæringstidspunkt(2.vedtaksperiode)) assertEquals(1.juli til 31.august, inspektør.periode(2.vedtaksperiode)) @@ -325,9 +429,11 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { fun `vedtaksperiode strekker seg tilbake og endrer ikke skjæringstidspunktet`() { tilGodkjenning(10.januar til 31.januar, a1) nullstillTilstandsendringer() - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(9.januar, Dagtype.Arbeidsdag) - ), orgnummer = a1) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(9.januar, Dagtype.Arbeidsdag) + ), orgnummer = a1 + ) val dagen = inspektør.sykdomstidslinje[9.januar] assertEquals(Dag.Arbeidsdag::class, dagen::class) @@ -336,19 +442,31 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode, orgnummer = a1) assertEquals(9.januar til 31.januar, inspektør.periode(1.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test fun `strekker ikke inn i forrige periode`() { nyPeriode(1.januar til 9.januar, a1) - tilGodkjenning(10.januar til 31.januar, a1, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) // 1. jan - 9. jan blir omgjort til arbeidsdager ved innsending av IM her + tilGodkjenning( + 10.januar til 31.januar, + a1, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) // 1. jan - 9. jan blir omgjort til arbeidsdager ved innsending av IM her nullstillTilstandsendringer() // Saksbehandler korrigerer; 9.januar var vedkommende syk likevel assertEquals(4, inspektør.sykdomshistorikk.elementer()) - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(9.januar, Dagtype.Arbeidsdag) - ), orgnummer = a1) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(9.januar, Dagtype.Arbeidsdag) + ), orgnummer = a1 + ) assertEquals(5, inspektør.sykdomshistorikk.elementer()) val dagen = inspektør.sykdomstidslinje[9.januar] assertEquals(Dag.Arbeidsdag::class, dagen::class) @@ -359,8 +477,19 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { assertEquals(1.januar til 9.januar, inspektør.periode(1.vedtaksperiode)) assertEquals(10.januar til 31.januar, inspektør.periode(2.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test @@ -372,9 +501,11 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) nullstillTilstandsendringer() - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(9.januar, Dagtype.Sykedag, 100) - ), orgnummer = a1) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(9.januar, Dagtype.Sykedag, 100) + ), orgnummer = a1 + ) håndterYtelser(2.vedtaksperiode, orgnummer = a1) val dagen = inspektør.sykdomstidslinje[9.januar] @@ -384,8 +515,19 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { assertEquals(1.januar til 9.januar, inspektør.periode(1.vedtaksperiode)) assertEquals(10.januar til 31.januar, inspektør.periode(2.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test @@ -398,10 +540,12 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { håndterSimulering(2.vedtaksperiode) nullstillTilstandsendringer() assertEquals(4, inspektør.sykdomshistorikk.elementer()) - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(9.januar, Dagtype.Sykedag, 100), - ManuellOverskrivingDag(10.januar, Dagtype.Feriedag) - ), orgnummer = a1) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(9.januar, Dagtype.Sykedag, 100), + ManuellOverskrivingDag(10.januar, Dagtype.Feriedag) + ), orgnummer = a1 + ) assertEquals(5, inspektør.sykdomshistorikk.elementer()) håndterYtelser(2.vedtaksperiode, orgnummer = a1) @@ -411,19 +555,40 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { assertEquals(1.januar til 9.januar, inspektør.periode(1.vedtaksperiode)) assertEquals(10.januar til 31.januar, inspektør.periode(2.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test fun `kan ikke utbetale overstyrt utbetaling`() { håndterSykmelding(Sykmeldingsperiode(3.januar, 26.januar)) - håndterInntektsmelding(listOf(Periode(2.januar, 18.januar)), førsteFraværsdag = 2.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(2.januar, 18.januar)), + førsteFraværsdag = 2.januar, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(3.januar, 26.januar, 100.prosent)) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterOverstyrTidslinje(listOf(manuellSykedag(2.januar), manuellArbeidsgiverdag(24.januar), manuellFeriedag(25.januar))) + håndterOverstyrTidslinje( + listOf( + manuellSykedag(2.januar), + manuellArbeidsgiverdag(24.januar), + manuellFeriedag(25.januar) + ) + ) håndterUtbetalingsgodkjenning(1.vedtaksperiode, true) assertEquals(Utbetalingstatus.FORKASTET, inspektør.utbetalingtilstand(0)) } @@ -431,7 +596,11 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { @Test fun `grad over grensen overstyres på enkeltdag`() { håndterSykmelding(Sykmeldingsperiode(2.januar, 25.januar)) - håndterInntektsmelding(listOf(Periode(2.januar, 17.januar)), førsteFraværsdag = 2.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(2.januar, 17.januar)), + førsteFraværsdag = 2.januar, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(2.januar, 25.januar, 100.prosent)) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -452,7 +621,11 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { @Test fun `grad under grensen blir ikke utbetalt etter overstyring av grad`() { håndterSykmelding(Sykmeldingsperiode(2.januar, 25.januar)) - håndterInntektsmelding(listOf(Periode(2.januar, 17.januar)), førsteFraværsdag = 2.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(2.januar, 17.januar)), + førsteFraværsdag = 2.januar, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(2.januar, 25.januar, 100.prosent)) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -472,12 +645,21 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { @Test fun `overstyrt til fridager i midten av en periode blir ikke utbetalt`() { håndterSykmelding(Sykmeldingsperiode(2.januar, 25.januar)) - håndterInntektsmelding(listOf(Periode(2.januar, 17.januar)), førsteFraværsdag = 2.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(2.januar, 17.januar)), + førsteFraværsdag = 2.januar, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(2.januar, 25.januar, 100.prosent)) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterOverstyrTidslinje(listOf(manuellFeriedag(22.januar), manuellPermisjonsdag(23.januar))) + håndterOverstyrTidslinje( + listOf( + manuellFeriedag(22.januar), + manuellPermisjonsdag(23.januar) + ) + ) assertNotEquals(AVVENTER_GODKJENNING, inspektør.sisteTilstand(1.vedtaksperiode)) @@ -492,7 +674,11 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { @Test fun `Overstyring oppdaterer sykdomstidlinjene`() { håndterSykmelding(Sykmeldingsperiode(3.januar, 26.januar)) - håndterInntektsmelding(listOf(Periode(3.januar, 18.januar)), førsteFraværsdag = 3.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(3.januar, 18.januar)), + førsteFraværsdag = 3.januar, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(3.januar, 26.januar, 100.prosent)) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -502,9 +688,15 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode, true) - assertEquals("SSSHH SSSSSHH SSSSSHH SSSSF", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSHH SSSSSHH SSSSSHH SSSSF", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) assertEquals("SSSHH SSSSSHH SSSSSHH SSSSF", inspektør.sykdomstidslinje.toShortString()) - assertEquals("PPPPP PPPPPPP PPPPNHH NNNNF", inspektør.utbetalingstidslinjer(1.vedtaksperiode).toString()) + assertEquals( + "PPPPP PPPPPPP PPPPNHH NNNNF", + inspektør.utbetalingstidslinjer(1.vedtaksperiode).toString() + ) } @Test @@ -518,8 +710,14 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { håndterOverstyringSykedag(20.januar til 21.januar) håndterYtelser(1.vedtaksperiode) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) - assertEquals("PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", inspektør.utbetalingstidslinjer(1.vedtaksperiode).toString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) + assertEquals( + "PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", + inspektør.utbetalingstidslinjer(1.vedtaksperiode).toString() + ) } @Test @@ -534,7 +732,15 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { // Denne overstyringen kommer før den forrige er ferdig prossessert håndterOverstyrTidslinje((30.januar til 31.januar).map { manuellFeriedag(it) }) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -562,16 +768,36 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { håndterSimulering(1.vedtaksperiode) assertEquals(33235, inspektør.sisteUtbetaling().arbeidsgiverOppdrag.totalbeløp()) - assertEquals("SSSSSHH SSSSSHH SSSSSFF FFFFFFF FSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim()) - assertEquals("PPPPPPP PPPPPPP PPNNNFF FFFFFFF FNN", inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim()) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertEquals( + "SSSSSHH SSSSSHH SSSSSFF FFFFFFF FSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim() + ) + assertEquals( + "PPPPPPP PPPPPPP PPNNNFF FFFFFFF FNN", + inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim() + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @Test - fun `overstyrer fra SykedagNav til Sykedag`(){ + fun `overstyrer fra SykedagNav til Sykedag`() { håndterSøknad(januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), begrunnelseForReduksjonEllerIkkeUtbetalt = "Saerregler") + håndterInntektsmelding( + listOf(1.januar til 16.januar), + begrunnelseForReduksjonEllerIkkeUtbetalt = "Saerregler" + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -586,7 +812,8 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { agp.forEach { assertSykdomstidslinjedag(it, Dag.Sykedag::class, OverstyrTidslinje::class) } - val førsteUtbetalingsdagEtterOverstyring = inspektør.utbetaling(1).arbeidsgiverOppdrag[0].fom + val førsteUtbetalingsdagEtterOverstyring = + inspektør.utbetaling(1).arbeidsgiverOppdrag[0].fom assertEquals(17.januar, førsteUtbetalingsdagEtterOverstyring) } @@ -594,7 +821,10 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { fun `overstyring av andre ytelser i halen`() { nyttVedtak(januar) håndterOverstyrTidslinje((20.januar til 31.januar).map { manuellForeldrepengedag(it) }) - assertEquals("SSSSSHH SSSSSHH SSSSSYY YYYYYYY YYY", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSYY YYYYYYY YYY", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) håndterYtelser(1.vedtaksperiode) assertTilstand(1.vedtaksperiode, AVVENTER_SIMULERING_REVURDERING) val utbetalingstidslinje = inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør @@ -602,18 +832,32 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { } @Test - fun `overstyring av egenmeldingsdager til arbeidsdager`(){ + fun `overstyring av egenmeldingsdager til arbeidsdager`() { nyttVedtak(januar) håndterSøknad(Sykdom(10.februar, 28.februar, 100.prosent), Arbeid(20.februar, 28.februar)) - håndterInntektsmelding(listOf(10.februar til 26.februar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(10.februar til 26.februar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) - assertEquals("HH SSSSSHH SUUUUGG UAA", inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).toShortString()) - håndterOverstyrTidslinje((20..26).map { ManuellOverskrivingDag(it.februar, Dagtype.Arbeidsdag) }) + assertEquals( + "HH SSSSSHH SUUUUGG UAA", + inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).toShortString() + ) + håndterOverstyrTidslinje((20..26).map { + ManuellOverskrivingDag( + it.februar, + Dagtype.Arbeidsdag + ) + }) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) - assertEquals("HH SSSSSHH SAAAARR AAA", inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).toShortString()) + assertEquals( + "HH SSSSSHH SAAAARR AAA", + inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).toShortString() + ) håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() } @@ -630,32 +874,41 @@ internal class OverstyrTidslinjeTest : AbstractEndToEndTest() { val forventetUtbetaling = (1.januar til 16.januar).associateWith { ArbeidsgiverperiodeDag } + - (17.januar til 19.januar).associateWith { NavDag } + - (20.januar til 21.januar).associateWith { NavHelgDag } + - (22.januar til 26.januar).associateWith { NavDag } + - (27.januar til 28.januar).associateWith { NavHelgDag } + - (29.januar til 31.januar).associateWith { NavDag } + (17.januar til 19.januar).associateWith { NavDag } + + (20.januar til 21.januar).associateWith { NavHelgDag } + + (22.januar til 26.januar).associateWith { NavDag } + + (27.januar til 28.januar).associateWith { NavHelgDag } + + (29.januar til 31.januar).associateWith { NavDag } assertEquals(forventetUtbetaling, observatør.utbetalingMedUtbetalingEventer.first().dager) val forventetRevurdering = (1.januar til 10.januar).associateWith { AndreYtelser } + - (11.januar til 26.januar).associateWith { ArbeidsgiverperiodeDag } + - (27.januar til 28.januar).associateWith { NavHelgDag } + - (29.januar til 31.januar).associateWith { NavDag } + (11.januar til 26.januar).associateWith { ArbeidsgiverperiodeDag } + + (27.januar til 28.januar).associateWith { NavHelgDag } + + (29.januar til 31.januar).associateWith { NavDag } assertEquals(forventetRevurdering, observatør.utbetalingMedUtbetalingEventer.last().dager) } - private fun assertSykdomstidslinjedag(dato: LocalDate, dagtype: KClass, kommerFra: Melding) { + private fun assertSykdomstidslinjedag( + dato: LocalDate, + dagtype: KClass, + kommerFra: Melding + ) { assertSykdomstidslinjedag(dato, dagtype, kommerFra.simpleName!!) } - private fun assertSykdomstidslinjedag(dato: LocalDate, dagtype: KClass, kommerFra: String) { + private fun assertSykdomstidslinjedag( + dato: LocalDate, + dagtype: KClass, + kommerFra: String + ) { val dagen = inspektør.sykdomstidslinje[dato] assertEquals(dagtype, dagen::class) assertTrue(dagen.kommerFra(kommerFra)) } - private val PersonObserver.UtbetalingUtbetaltEvent.dager get() = utbetalingsdager.associateBy { it.dato }.mapValues { it.value.type } + private val PersonObserver.UtbetalingUtbetaltEvent.dager + get() = utbetalingsdager.associateBy { it.dato }.mapValues { it.value.type } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/Skj\303\270nnsmessigFastsettelseTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/Skj\303\270nnsmessigFastsettelseTest.kt" index 5f1d90e2d4..321b31a91d 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/Skj\303\270nnsmessigFastsettelseTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/overstyring/Skj\303\270nnsmessigFastsettelseTest.kt" @@ -40,7 +40,7 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.fail -internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { +internal class SkjønnsmessigFastsettelseTest : AbstractDslTest() { @Test fun `Når inntekt skjønnsfastsettes til 0 og det finnes andre arbeidsgivere i økonomi-lista`() { @@ -51,9 +51,15 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { "a5" {} "a6" { tilGodkjenning(mars) - håndterSkjønnsmessigFastsettelse(1.mars, listOf(OverstyrtArbeidsgiveropplysning("a6", INGEN))) + håndterSkjønnsmessigFastsettelse( + 1.mars, + listOf(OverstyrtArbeidsgiveropplysning("a6", INGEN)) + ) håndterYtelser(1.vedtaksperiode) - assertEquals(100, inspektør(1.vedtaksperiode).utbetalingstidslinje[17.mars].økonomi.inspektør.totalGrad) + assertEquals( + 100, + inspektør(1.vedtaksperiode).utbetalingstidslinje[17.mars].økonomi.inspektør.totalGrad + ) } } @@ -62,10 +68,15 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { a1 { håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) - håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT, inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf( - a1 to INNTEKT, - a2 to INNTEKT - ), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + INNTEKT, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to INNTEKT + ), 1.januar + ), arbeidsforhold = listOf( Vilkårsgrunnlag.Arbeidsforhold(a1, EPOCH, type = ORDINÆRT), Vilkårsgrunnlag.Arbeidsforhold(a2, EPOCH, type = ORDINÆRT) @@ -74,10 +85,12 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterSkjønnsmessigFastsettelse(1.januar, listOf( + håndterSkjønnsmessigFastsettelse( + 1.januar, listOf( OverstyrtArbeidsgiveropplysning(a1, INNTEKT + 500.månedlig), OverstyrtArbeidsgiveropplysning(a2, INNTEKT - 500.månedlig) - )) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -101,13 +114,21 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { } a1 { - val sykepengegrunnlag = inspektør.vilkårsgrunnlag(1.januar)?.inspektør?.inntektsgrunnlag?.inspektør ?: fail { "forventer vilkårsgrunnlag" } + val sykepengegrunnlag = + inspektør.vilkårsgrunnlag(1.januar)?.inspektør?.inntektsgrunnlag?.inspektør + ?: fail { "forventer vilkårsgrunnlag" } sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { arbeidsgiverInntektsopplysning -> - assertInstanceOf(SkjønnsmessigFastsatt::class.java, arbeidsgiverInntektsopplysning.inntektsopplysning) + assertInstanceOf( + SkjønnsmessigFastsatt::class.java, + arbeidsgiverInntektsopplysning.inntektsopplysning + ) } sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { arbeidsgiverInntektsopplysning -> - assertInstanceOf(SkjønnsmessigFastsatt::class.java, arbeidsgiverInntektsopplysning.inntektsopplysning) + assertInstanceOf( + SkjønnsmessigFastsatt::class.java, + arbeidsgiverInntektsopplysning.inntektsopplysning + ) } } } @@ -119,10 +140,15 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { a1 { håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) - håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT, inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf( - a1 to INNTEKT, - a2 to inntektVedSkjønnsvurdering - ), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + INNTEKT, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to inntektVedSkjønnsvurdering + ), 1.januar + ), arbeidsforhold = listOf( Vilkårsgrunnlag.Arbeidsforhold(a1, EPOCH, type = ORDINÆRT), Vilkårsgrunnlag.Arbeidsforhold(a2, EPOCH, type = ORDINÆRT) @@ -131,10 +157,12 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterSkjønnsmessigFastsettelse(1.januar, listOf( + håndterSkjønnsmessigFastsettelse( + 1.januar, listOf( OverstyrtArbeidsgiveropplysning(a1, INNTEKT + 500.månedlig), OverstyrtArbeidsgiveropplysning(a2, INNTEKT - 500.månedlig) - )) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -158,13 +186,21 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { } a1 { - val sykepengegrunnlag = inspektør.vilkårsgrunnlag(1.januar)?.inspektør?.inntektsgrunnlag?.inspektør ?: fail { "forventer vilkårsgrunnlag" } + val sykepengegrunnlag = + inspektør.vilkårsgrunnlag(1.januar)?.inspektør?.inntektsgrunnlag?.inspektør + ?: fail { "forventer vilkårsgrunnlag" } sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { arbeidsgiverInntektsopplysning -> - assertInstanceOf(SkjønnsmessigFastsatt::class.java, arbeidsgiverInntektsopplysning.inntektsopplysning) + assertInstanceOf( + SkjønnsmessigFastsatt::class.java, + arbeidsgiverInntektsopplysning.inntektsopplysning + ) } sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { arbeidsgiverInntektsopplysning -> - assertInstanceOf(SkjønnsmessigFastsatt::class.java, arbeidsgiverInntektsopplysning.inntektsopplysning) + assertInstanceOf( + SkjønnsmessigFastsatt::class.java, + arbeidsgiverInntektsopplysning.inntektsopplysning + ) } } } @@ -173,10 +209,12 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { fun `endring i refusjon skal ikke endre omregnet årsinntekt`() { (a1 og a2).nyeVedtak(januar) - håndterSkjønnsmessigFastsettelse(1.januar, listOf( + håndterSkjønnsmessigFastsettelse( + 1.januar, listOf( OverstyrtArbeidsgiveropplysning(a1, 19000.0.månedlig), OverstyrtArbeidsgiveropplysning(a2, 21000.0.månedlig) - )) + ) + ) a1 { håndterYtelser(1.vedtaksperiode) @@ -194,16 +232,31 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { (a1 og a2).forlengVedtak(februar) a1 { - val im = håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 20000.månedlig, refusjon = Refusjon(20000.månedlig, opphørsdato = 31.januar)) + val im = håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 20000.månedlig, + refusjon = Refusjon(20000.månedlig, opphørsdato = 31.januar) + ) - val sykepengegrunnlag = inspektør.vilkårsgrunnlag(1.januar)?.inspektør?.inntektsgrunnlag?.inspektør ?: fail { "forventer vilkårsgrunnlag" } + val sykepengegrunnlag = + inspektør.vilkårsgrunnlag(1.januar)?.inspektør?.inntektsgrunnlag?.inspektør + ?: fail { "forventer vilkårsgrunnlag" } sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { arbeidsgiverInntektsopplysning -> - assertInstanceOf(SkjønnsmessigFastsatt::class.java, arbeidsgiverInntektsopplysning.inntektsopplysning) - assertEquals(im, arbeidsgiverInntektsopplysning.inntektsopplysning.omregnetÅrsinntekt().inspektør.hendelseId) + assertInstanceOf( + SkjønnsmessigFastsatt::class.java, + arbeidsgiverInntektsopplysning.inntektsopplysning + ) + assertEquals( + im, + arbeidsgiverInntektsopplysning.inntektsopplysning.omregnetÅrsinntekt().inspektør.hendelseId + ) } sykepengegrunnlag.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { arbeidsgiverInntektsopplysning -> - assertInstanceOf(SkjønnsmessigFastsatt::class.java, arbeidsgiverInntektsopplysning.inntektsopplysning) + assertInstanceOf( + SkjønnsmessigFastsatt::class.java, + arbeidsgiverInntektsopplysning.inntektsopplysning + ) } } } @@ -211,7 +264,10 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { @Test fun `korrigere inntekten på noe som allerede har blitt skjønnsmessig fastsatt`() { nyttVedtak(januar) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2)) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -221,7 +277,10 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { assertTrue(it is SkjønnsmessigFastsatt) assertEquals(INNTEKT * 2, it.inspektør.beløp) } - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 3))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 3)) + ) inspektør.inntektsopplysningISykepengegrunnlaget(1.januar).let { assertTrue(it is SkjønnsmessigFastsatt) assertEquals(INNTEKT * 3, it.inspektør.beløp) @@ -231,9 +290,13 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { @Test fun `skjønnsmessig fastsatt inntekt skal ikke ha avviksvurdering`() { nyttVedtak(januar) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2)) + ) assertEquals(2, inspektør.vilkårsgrunnlagHistorikkInnslag().size) - val sykepengegrunnlag = inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør + val sykepengegrunnlag = + inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør val inntektsopplysning = inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) assertTrue(inntektsopplysning is SkjønnsmessigFastsatt) assertEquals(INNTEKT * 2, sykepengegrunnlag.beregningsgrunnlag) @@ -245,7 +308,10 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { (a1 og a2).nyeVedtak(januar) a1 { assertThrows { - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2)) + ) } } } @@ -253,9 +319,21 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { @Test fun `saksbehandler-inntekt overstyres av en skjønnsmessig med samme beløp`() { nyttVedtak(januar) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2, forklaring = "forklaring"))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = INNTEKT * 2, + forklaring = "forklaring" + ) + ) + ) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) is Saksbehandler) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2)) + ) assertEquals(3, inspektør.vilkårsgrunnlagHistorikkInnslag().size) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) is SkjønnsmessigFastsatt) } @@ -263,8 +341,14 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { @Test fun `skjønnsmessig fastsettelse overstyres av en skjønnsmessig med samme beløp`() { nyttVedtak(januar) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2))) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2)) + ) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = INNTEKT * 2)) + ) assertEquals(3, inspektør.vilkårsgrunnlagHistorikkInnslag().size) } @@ -273,7 +357,10 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { a1 { tilGodkjenning(januar) val inntekt = INNTEKT - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = inntekt))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = inntekt)) + ) assertEquals(2, inspektør.vilkårsgrunnlagHistorikkInnslag().size) nullstillTilstandsendringer() val im = håndterInntektsmelding(listOf(1.januar til 16.januar), inntekt) @@ -281,7 +368,12 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { val inntektsopplysning = inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) assertTrue(inntektsopplysning is SkjønnsmessigFastsatt) assertEquals(im, inntektsopplysning.omregnetÅrsinntekt().inspektør.hendelseId) - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) } } @@ -290,9 +382,22 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { (a1 og a2 og a3).nyeVedtak(januar) håndterOverstyrArbeidsgiveropplysninger( 1.januar, - listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a3, inntekt = INNTEKT * 3, forklaring = "ogga bogga")) + listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a3, + inntekt = INNTEKT * 3, + forklaring = "ogga bogga" + ) + ) ) - a3 { assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar, a3) is Saksbehandler) } + a3 { + assertTrue( + inspektør.inntektsopplysningISykepengegrunnlaget( + 1.januar, + a3 + ) is Saksbehandler + ) + } håndterSkjønnsmessigFastsettelse( 1.januar, listOf( @@ -301,15 +406,57 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { OverstyrtArbeidsgiveropplysning(orgnummer = a3, inntekt = INNTEKT * 2) ) ) - a1 { assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar, a1) is SkjønnsmessigFastsatt) } - a2 { assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar, a2) is SkjønnsmessigFastsatt) } - a3 { assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar, a3) is SkjønnsmessigFastsatt) } + a1 { + assertTrue( + inspektør.inntektsopplysningISykepengegrunnlaget( + 1.januar, + a1 + ) is SkjønnsmessigFastsatt + ) + } + a2 { + assertTrue( + inspektør.inntektsopplysningISykepengegrunnlaget( + 1.januar, + a2 + ) is SkjønnsmessigFastsatt + ) + } + a3 { + assertTrue( + inspektør.inntektsopplysningISykepengegrunnlaget( + 1.januar, + a3 + ) is SkjønnsmessigFastsatt + ) + } a1 { håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT) } - a1 { assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar, a1) is Inntektsmelding) } - a2 { assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar, a2) is Inntektsmelding) } - a3 { assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar, a3) is Saksbehandler) } + a1 { + assertTrue( + inspektør.inntektsopplysningISykepengegrunnlaget( + 1.januar, + a1 + ) is Inntektsmelding + ) + } + a2 { + assertTrue( + inspektør.inntektsopplysningISykepengegrunnlaget( + 1.januar, + a2 + ) is Inntektsmelding + ) + } + a3 { + assertTrue( + inspektør.inntektsopplysningISykepengegrunnlaget( + 1.januar, + a3 + ) is Saksbehandler + ) + } } @Test @@ -333,17 +480,25 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { håndterVilkårsgrunnlag(1.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning( - orgnummer = a1, - inntekt = INNTEKT * 2 - ))) + håndterSkjønnsmessigFastsettelse( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = INNTEKT * 2 + ) + ) + ) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning( - orgnummer = a1, - inntekt = INNTEKT, - forklaring = "forklaring" - ))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = INNTEKT, + forklaring = "forklaring" + ) + ) + ) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) is Saksbehandler) håndterYtelser(1.vedtaksperiode) @@ -366,7 +521,12 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertTilstander(2.vedtaksperiode, AVVENTER_HISTORIKK, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_HISTORIKK, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) } } @@ -379,7 +539,11 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { a1 { // Normal behandling med Inntektsmelding håndterSøknad(januar) - val inntektsmeldingId = håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = inntektsmeldingInntekt, refusjon = Refusjon(inntektsmeldingInntekt, null, emptyList())) + val inntektsmeldingId = håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = inntektsmeldingInntekt, + refusjon = Refusjon(inntektsmeldingInntekt, null, emptyList()) + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -388,20 +552,75 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { assertEquals(1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) is Inntektsmelding) - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(inntektsmeldingId, 1.januar, null, inntektsmeldingInntekt, ARBEIDSGIVER)), inspektør.refusjonsopplysningerFraVilkårsgrunnlag()) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + inntektsmeldingId, + 1.januar, + null, + inntektsmeldingInntekt, + ARBEIDSGIVER + ) + ), inspektør.refusjonsopplysningerFraVilkårsgrunnlag() + ) // Saksbehandler skjønnsmessig fastsetter - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = skjønnsfastsattInntekt))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = skjønnsfastsattInntekt + ) + ) + ) assertEquals(2, inspektør.vilkårsgrunnlagHistorikkInnslag().size) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) is SkjønnsmessigFastsatt) - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(inntektsmeldingId, 1.januar, null, inntektsmeldingInntekt, ARBEIDSGIVER)), inspektør.refusjonsopplysningerFraVilkårsgrunnlag()) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + inntektsmeldingId, + 1.januar, + null, + inntektsmeldingInntekt, + ARBEIDSGIVER + ) + ), inspektør.refusjonsopplysningerFraVilkårsgrunnlag() + ) // Saksbehandler endrer kun refusjon, men beholder inntekt val overstyrInntektOgRefusjonId = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = inntektsmeldingInntekt, forklaring = "forklaring", refusjonsopplysninger = listOf(Triple(1.januar, null, skjønnsfastsattInntekt)))), hendelseId = overstyrInntektOgRefusjonId) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = inntektsmeldingInntekt, + forklaring = "forklaring", + refusjonsopplysninger = listOf( + Triple( + 1.januar, + null, + skjønnsfastsattInntekt + ) + ) + ) + ), + hendelseId = overstyrInntektOgRefusjonId + ) assertEquals(3, inspektør.vilkårsgrunnlagHistorikkInnslag().size) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) is SkjønnsmessigFastsatt) - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(overstyrInntektOgRefusjonId, 1.januar, null, skjønnsfastsattInntekt, SAKSBEHANDLER)), inspektør.refusjonsopplysningerFraVilkårsgrunnlag()) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + overstyrInntektOgRefusjonId, + 1.januar, + null, + skjønnsfastsattInntekt, + SAKSBEHANDLER + ) + ), inspektør.refusjonsopplysningerFraVilkårsgrunnlag() + ) } } @@ -413,7 +632,11 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { a1 { // Normal behandling med Inntektsmelding håndterSøknad(januar) - val inntektsmeldingId = håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = inntektsmeldingInntekt, refusjon = Refusjon(inntektsmeldingInntekt, null, emptyList())) + val inntektsmeldingId = håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = inntektsmeldingInntekt, + refusjon = Refusjon(inntektsmeldingInntekt, null, emptyList()) + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -422,24 +645,86 @@ internal class SkjønnsmessigFastsettelseTest: AbstractDslTest() { assertEquals(1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) is Inntektsmelding) - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(inntektsmeldingId, 1.januar, null, inntektsmeldingInntekt, ARBEIDSGIVER)), inspektør.refusjonsopplysningerFraVilkårsgrunnlag()) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + inntektsmeldingId, + 1.januar, + null, + inntektsmeldingInntekt, + ARBEIDSGIVER + ) + ), inspektør.refusjonsopplysningerFraVilkårsgrunnlag() + ) // Saksbehandler skjønnsmessig fastsetter - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = skjønnsfastsattInntekt))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = skjønnsfastsattInntekt + ) + ) + ) assertEquals(2, inspektør.vilkårsgrunnlagHistorikkInnslag().size) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) is SkjønnsmessigFastsatt) - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(inntektsmeldingId, 1.januar, null, inntektsmeldingInntekt, ARBEIDSGIVER)), inspektør.refusjonsopplysningerFraVilkårsgrunnlag()) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + inntektsmeldingId, + 1.januar, + null, + inntektsmeldingInntekt, + ARBEIDSGIVER + ) + ), inspektør.refusjonsopplysningerFraVilkårsgrunnlag() + ) // Saksbehandler endrer refusjon og inntekt til INNTEKT * 2 val overstyrInntektOgRefusjonId = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(orgnummer = a1, inntekt = skjønnsfastsattInntekt, forklaring = "forklaring", refusjonsopplysninger = listOf(Triple(1.januar, null, skjønnsfastsattInntekt)))), hendelseId = overstyrInntektOgRefusjonId) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = skjønnsfastsattInntekt, + forklaring = "forklaring", + refusjonsopplysninger = listOf( + Triple( + 1.januar, + null, + skjønnsfastsattInntekt + ) + ) + ) + ), + hendelseId = overstyrInntektOgRefusjonId + ) assertEquals(3, inspektør.vilkårsgrunnlagHistorikkInnslag().size) assertTrue(inspektør.inntektsopplysningISykepengegrunnlaget(1.januar) is Saksbehandler) - assertLikeRefusjonsopplysninger(listOf(Refusjonsopplysning(overstyrInntektOgRefusjonId, 1.januar, null, skjønnsfastsattInntekt, SAKSBEHANDLER)), inspektør.refusjonsopplysningerFraVilkårsgrunnlag()) + assertLikeRefusjonsopplysninger( + listOf( + Refusjonsopplysning( + overstyrInntektOgRefusjonId, + 1.januar, + null, + skjønnsfastsattInntekt, + SAKSBEHANDLER + ) + ), inspektør.refusjonsopplysningerFraVilkårsgrunnlag() + ) } } - private fun TestArbeidsgiverInspektør.inntektsopplysningISykepengegrunnlaget(skjæringstidspunkt: LocalDate, orgnr: String = a1) = - vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(orgnr) }.inspektør.inntektsopplysning + private fun TestArbeidsgiverInspektør.inntektsopplysningISykepengegrunnlaget( + skjæringstidspunkt: LocalDate, + orgnr: String = a1 + ) = + vilkårsgrunnlag(skjæringstidspunkt)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder( + orgnr + ) + }.inspektør.inntektsopplysning -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/MigrereRefusjonsopplysningerP\303\245BehandlingerTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/MigrereRefusjonsopplysningerP\303\245BehandlingerTest.kt" index caa196ee26..9a0dc3442e 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/MigrereRefusjonsopplysningerP\303\245BehandlingerTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/MigrereRefusjonsopplysningerP\303\245BehandlingerTest.kt" @@ -47,92 +47,110 @@ internal class MigrereRefusjonsopplysningerPåBehandlingerTest : AbstractDslTest private fun setup1og2() { håndterSøknad(januar) - tillatUgyldigSituasjon { håndterInntektsmelding( - arbeidsgiverperioder = listOf(1.januar til 16.januar), - refusjon = Inntektsmelding.Refusjon(beløp = INNTEKT, opphørsdato = 25.januar), - beregnetInntekt = INNTEKT, - id = meldingsreferanseId1, - mottatt = mottatt1 - ) } - tillatUgyldigSituasjon { håndterVilkårsgrunnlag(1.vedtaksperiode) } - tillatUgyldigSituasjon { håndterYtelser(1.vedtaksperiode) } + tillatUgyldigSituasjon { + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + refusjon = Inntektsmelding.Refusjon(beløp = INNTEKT, opphørsdato = 25.januar), + beregnetInntekt = INNTEKT, + id = meldingsreferanseId1, + mottatt = mottatt1 + ) + } + tillatUgyldigSituasjon { håndterVilkårsgrunnlag(1.vedtaksperiode) } + tillatUgyldigSituasjon { håndterYtelser(1.vedtaksperiode) } } @Test @Order(1) - fun `Vedtaksperiode med én beregnet endring - med toggle`() = LagreRefusjonsopplysningerPåBehandling.enable { - a1 { - setup1og2() - forrigeRefusjonstidslinje = inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + fun `Vedtaksperiode med én beregnet endring - med toggle`() = + LagreRefusjonsopplysningerPåBehandling.enable { + a1 { + setup1og2() + forrigeRefusjonstidslinje = + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + } } - } @Test @Order(2) - fun `Vedtaksperiode med én beregnet endring - uten toggle`() = LagreRefusjonsopplysningerPåBehandling.disable { - a1 { - setup1og2() - migrerRefusjonsopplysningerPåBehandlinger() - assertEquals(forrigeRefusjonstidslinje, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje) + fun `Vedtaksperiode med én beregnet endring - uten toggle`() = + LagreRefusjonsopplysningerPåBehandling.disable { + a1 { + setup1og2() + migrerRefusjonsopplysningerPåBehandlinger() + assertEquals( + forrigeRefusjonstidslinje, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + ) + } } - } private fun setup3og4() { a1 { håndterSøknad(januar) - tillatUgyldigSituasjon { håndterInntektsmelding( - arbeidsgiverperioder = listOf(1.januar til 16.januar), - refusjon = Inntektsmelding.Refusjon(beløp = INNTEKT, opphørsdato = 25.januar), - beregnetInntekt = INNTEKT, - id = meldingsreferanseId1, - mottatt = mottatt1 - ) } + tillatUgyldigSituasjon { + håndterInntektsmelding( + arbeidsgiverperioder = listOf(1.januar til 16.januar), + refusjon = Inntektsmelding.Refusjon(beløp = INNTEKT, opphørsdato = 25.januar), + beregnetInntekt = INNTEKT, + id = meldingsreferanseId1, + mottatt = mottatt1 + ) + } tillatUgyldigSituasjon { håndterVilkårsgrunnlag(1.vedtaksperiode) } tillatUgyldigSituasjon { håndterYtelser(1.vedtaksperiode) } tillatUgyldigSituasjon { håndterSimulering(1.vedtaksperiode) } - tillatUgyldigSituasjon { håndterOverstyrArbeidsgiveropplysninger( - skjæringstidspunkt = 1.januar, - overstyringer = listOf( - OverstyrtArbeidsgiveropplysning( - orgnummer = a1, - inntekt = INNTEKT, - forklaring = "foo", - subsumsjon = null, - refusjonsopplysninger = listOf(Triple(1.januar, null, INNTEKT * 1.25)) - ) - ), - hendelseId = meldingsreferanseId2, - tidsstempel = mottatt2 - ) } + tillatUgyldigSituasjon { + håndterOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt = 1.januar, + overstyringer = listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = INNTEKT, + forklaring = "foo", + subsumsjon = null, + refusjonsopplysninger = listOf(Triple(1.januar, null, INNTEKT * 1.25)) + ) + ), + hendelseId = meldingsreferanseId2, + tidsstempel = mottatt2 + ) + } tillatUgyldigSituasjon { håndterYtelser(1.vedtaksperiode) } } } private val TestArbeidsgiverInspektør.refusjonstidslinjeFraFørsteBeregnedeEndring: Beløpstidslinje get() { - val endringer = vedtaksperioder(1.vedtaksperiode).behandlinger.behandlinger.last().endringer + val endringer = + vedtaksperioder(1.vedtaksperiode).behandlinger.behandlinger.last().endringer check(endringer.filter { it.grunnlagsdata != null }.size == 2) return endringer.first { it.grunnlagsdata != null }.refusjonstidslinje } @Test @Order(3) - fun `Vedtaksperiode med flere beregnede endringer - med toggle`() = LagreRefusjonsopplysningerPåBehandling.enable { - a1 { - setup3og4() - forrigeRefusjonstidslinje = inspektør.refusjonstidslinjeFraFørsteBeregnedeEndring + fun `Vedtaksperiode med flere beregnede endringer - med toggle`() = + LagreRefusjonsopplysningerPåBehandling.enable { + a1 { + setup3og4() + forrigeRefusjonstidslinje = inspektør.refusjonstidslinjeFraFørsteBeregnedeEndring + } } - } @Test @Order(4) - fun `Vedtaksperiode med flere beregnede endringer - uten toggle`() = LagreRefusjonsopplysningerPåBehandling.disable { - a1 { - setup3og4() - migrerRefusjonsopplysningerPåBehandlinger() - assertEquals(forrigeRefusjonstidslinje, inspektør.refusjonstidslinjeFraFørsteBeregnedeEndring) + fun `Vedtaksperiode med flere beregnede endringer - uten toggle`() = + LagreRefusjonsopplysningerPåBehandling.disable { + a1 { + setup3og4() + migrerRefusjonsopplysningerPåBehandlinger() + assertEquals( + forrigeRefusjonstidslinje, + inspektør.refusjonstidslinjeFraFørsteBeregnedeEndring + ) + } } - } private fun setup5og6() { a1 { @@ -142,29 +160,41 @@ internal class MigrereRefusjonsopplysningerPåBehandlingerTest : AbstractDslTest tillatUgyldigSituasjon { håndterYtelser(vedtaksperiode) } tillatUgyldigSituasjon { håndterSimulering(vedtaksperiode) } tillatUgyldigSituasjon { håndterSøknad(mars) } - tillatUgyldigSituasjon { håndterInntektsmelding(listOf(1.mars til 16.mars), id = meldingsreferanseId1, mottatt = mottatt1) } + tillatUgyldigSituasjon { + håndterInntektsmelding( + listOf(1.mars til 16.mars), + id = meldingsreferanseId1, + mottatt = mottatt1 + ) + } } } @Test @Order(5) - fun `Siste vedtaksperiode har fått IM, men er ikke beregnet - med toggle`() = LagreRefusjonsopplysningerPåBehandling.enable { - a1 { - setup5og6() - forrigeRefusjonstidslinje = inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje + fun `Siste vedtaksperiode har fått IM, men er ikke beregnet - med toggle`() = + LagreRefusjonsopplysningerPåBehandling.enable { + a1 { + setup5og6() + forrigeRefusjonstidslinje = + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje + } } - } @Test @Order(6) - fun `Siste vedtaksperiode har fått IM, men er ikke beregnet - uten toggle`() = setOf(LagreRefusjonsopplysningerPåBehandling, LagreUbrukteRefusjonsopplysninger).disable { - a1 { - setup5og6() - migrerUbrukteRefusjonsopplysninger() - migrerRefusjonsopplysningerPåBehandlinger() - assertEquals(forrigeRefusjonstidslinje, inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje) + fun `Siste vedtaksperiode har fått IM, men er ikke beregnet - uten toggle`() = + setOf(LagreRefusjonsopplysningerPåBehandling, LagreUbrukteRefusjonsopplysninger).disable { + a1 { + setup5og6() + migrerUbrukteRefusjonsopplysninger() + migrerRefusjonsopplysningerPåBehandlinger() + assertEquals( + forrigeRefusjonstidslinje, + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje + ) + } } - } private fun setup7og8() { a1 { @@ -174,30 +204,42 @@ internal class MigrereRefusjonsopplysningerPåBehandlingerTest : AbstractDslTest tillatUgyldigSituasjon { håndterYtelser(vedtaksperiode) } tillatUgyldigSituasjon { håndterSimulering(vedtaksperiode) } tillatUgyldigSituasjon { håndterSøknad(mars) } - tillatUgyldigSituasjon { håndterInntektsmelding(listOf(1.mars til 16.mars), id = meldingsreferanseId1, mottatt = mottatt1) } + tillatUgyldigSituasjon { + håndterInntektsmelding( + listOf(1.mars til 16.mars), + id = meldingsreferanseId1, + mottatt = mottatt1 + ) + } tillatUgyldigSituasjon { håndterSøknad(april) } } } @Test @Order(7) - fun `Siste vedtaksperiode har fått IM og forlengelsessøknad - med toggle`() = LagreRefusjonsopplysningerPåBehandling.enable { - a1 { - setup7og8() - forrigeRefusjonstidslinje = inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje + fun `Siste vedtaksperiode har fått IM og forlengelsessøknad - med toggle`() = + LagreRefusjonsopplysningerPåBehandling.enable { + a1 { + setup7og8() + forrigeRefusjonstidslinje = + inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje + } } - } @Test @Order(8) - fun `Siste vedtaksperiode har fått IM og forlengelsessøknad - uten toggle`() = setOf(LagreRefusjonsopplysningerPåBehandling, LagreUbrukteRefusjonsopplysninger).disable { - a1 { - setup7og8() - migrerUbrukteRefusjonsopplysninger() - migrerRefusjonsopplysningerPåBehandlinger() - assertEquals(forrigeRefusjonstidslinje, inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje) + fun `Siste vedtaksperiode har fått IM og forlengelsessøknad - uten toggle`() = + setOf(LagreRefusjonsopplysningerPåBehandling, LagreUbrukteRefusjonsopplysninger).disable { + a1 { + setup7og8() + migrerUbrukteRefusjonsopplysninger() + migrerRefusjonsopplysningerPåBehandlinger() + assertEquals( + forrigeRefusjonstidslinje, + inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje + ) + } } - } private fun setup9og10() { a1 { @@ -232,23 +274,32 @@ internal class MigrereRefusjonsopplysningerPåBehandlingerTest : AbstractDslTest @Test @Order(9) - fun `uberegnet forlengelse når det mottas informasjon om opphør - med toggle`() = LagreRefusjonsopplysningerPåBehandling.enable { - a1 { - setup9og10() - forrigeRefusjonstidslinje = inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje + fun `uberegnet forlengelse når det mottas informasjon om opphør - med toggle`() = + LagreRefusjonsopplysningerPåBehandling.enable { + a1 { + setup9og10() + forrigeRefusjonstidslinje = + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje + } } - } @Test @Order(10) - fun `uberegnet forlengelse når det mottas informasjon om opphør - uten toggle`() = LagreRefusjonsopplysningerPåBehandling.disable { - a1 { - setup9og10() - migrerRefusjonsopplysningerPåBehandlinger() - forrigeRefusjonstidslinje.assertBeløpstidslinje(1.februar til 10.februar to INNTEKT, 11.februar til 28.februar to INGEN) - inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje.assertBeløpstidslinje(1.februar til 10.februar to INNTEKT, 11.februar til 28.februar to INGEN) + fun `uberegnet forlengelse når det mottas informasjon om opphør - uten toggle`() = + LagreRefusjonsopplysningerPåBehandling.disable { + a1 { + setup9og10() + migrerRefusjonsopplysningerPåBehandlinger() + forrigeRefusjonstidslinje.assertBeløpstidslinje( + 1.februar til 10.februar to INNTEKT, + 11.februar til 28.februar to INGEN + ) + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje.assertBeløpstidslinje( + 1.februar til 10.februar to INNTEKT, + 11.februar til 28.februar to INGEN + ) + } } - } private fun setup11og12() { a1 { @@ -278,22 +329,24 @@ internal class MigrereRefusjonsopplysningerPåBehandlingerTest : AbstractDslTest tillatUgyldigSituasjon { håndterUtbetalingsgodkjenning(3.vedtaksperiode) } tillatUgyldigSituasjon { håndterUtbetalt() } - tillatUgyldigSituasjon { håndterOverstyrArbeidsgiveropplysninger( - skjæringstidspunkt = 1.januar, - overstyringer = listOf( - OverstyrtArbeidsgiveropplysning( - orgnummer = a1, - inntekt = INNTEKT, - forklaring = "foo", - subsumsjon = null, - refusjonsopplysninger = listOf( - Triple(1.januar, 31.januar, INNTEKT * 1.25), - Triple(1.februar, 28.februar, INNTEKT * 1.5), - Triple(1.mars, null, INNTEKT * 1.75) + tillatUgyldigSituasjon { + håndterOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt = 1.januar, + overstyringer = listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = INNTEKT, + forklaring = "foo", + subsumsjon = null, + refusjonsopplysninger = listOf( + Triple(1.januar, 31.januar, INNTEKT * 1.25), + Triple(1.februar, 28.februar, INNTEKT * 1.5), + Triple(1.mars, null, INNTEKT * 1.75) + ) ) - ) - ), - ) } + ), + ) + } tillatUgyldigSituasjon { håndterYtelser(1.vedtaksperiode) } assertSisteTilstand(1.vedtaksperiode, TilstandType.AVVENTER_GODKJENNING_REVURDERING) assertSisteTilstand(2.vedtaksperiode, TilstandType.AVVENTER_REVURDERING) @@ -303,34 +356,36 @@ internal class MigrereRefusjonsopplysningerPåBehandlingerTest : AbstractDslTest @Test @Order(11) - fun `uberegnet forlengelse i revurdering når det mottas informasjon om opphør - med toggle`() = LagreRefusjonsopplysningerPåBehandling.enable { - a1 { - setup11og12() - forrigeRefusjonstidslinje = - inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + - inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje + - inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje + fun `uberegnet forlengelse i revurdering når det mottas informasjon om opphør - med toggle`() = + LagreRefusjonsopplysningerPåBehandling.enable { + a1 { + setup11og12() + forrigeRefusjonstidslinje = + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje + + inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje + } } - } @Test @Order(12) - fun `uberegnet forlengelse i revurdering når det mottas informasjon om opphør - uten toggle`() = LagreRefusjonsopplysningerPåBehandling.disable { - a1 { - setup11og12() - migrerRefusjonsopplysningerPåBehandlinger() - forrigeRefusjonstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT*1.25) - forrigeRefusjonstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INNTEKT*1.5) - forrigeRefusjonstidslinje.assertBeløpstidslinje(1.mars til 31.mars to INNTEKT*1.75) - val faktiskRefusjonstidslinje = - inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + - inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje + - inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje - faktiskRefusjonstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT*1.25) - faktiskRefusjonstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INNTEKT*1.5) - faktiskRefusjonstidslinje.assertBeløpstidslinje(1.mars til 31.mars to INNTEKT*1.75) + fun `uberegnet forlengelse i revurdering når det mottas informasjon om opphør - uten toggle`() = + LagreRefusjonsopplysningerPåBehandling.disable { + a1 { + setup11og12() + migrerRefusjonsopplysningerPåBehandlinger() + forrigeRefusjonstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT * 1.25) + forrigeRefusjonstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INNTEKT * 1.5) + forrigeRefusjonstidslinje.assertBeløpstidslinje(1.mars til 31.mars to INNTEKT * 1.75) + val faktiskRefusjonstidslinje = + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje + + inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje + faktiskRefusjonstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT * 1.25) + faktiskRefusjonstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INNTEKT * 1.5) + faktiskRefusjonstidslinje.assertBeløpstidslinje(1.mars til 31.mars to INNTEKT * 1.75) + } } - } private fun setup13og14() { a1 { @@ -343,54 +398,75 @@ internal class MigrereRefusjonsopplysningerPåBehandlingerTest : AbstractDslTest } a1 { tillatUgyldigSituasjon { - håndterInntektsmelding(listOf(1.januar til 16.januar), refusjon = Inntektsmelding.Refusjon(INNTEKT, 31.januar)) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + refusjon = Inntektsmelding.Refusjon(INNTEKT, 31.januar) + ) } } } @Test @Order(13) - fun `flere arbeidsgivere med bare en inntektsmelding- med toggle`() = LagreRefusjonsopplysningerPåBehandling.enable { - a1 { - setup13og14() - forrigeRefusjonstidslinje = inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje - forrigeRefusjonstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT) - forrigeRefusjonstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INGEN) + fun `flere arbeidsgivere med bare en inntektsmelding- med toggle`() = + LagreRefusjonsopplysningerPåBehandling.enable { + a1 { + setup13og14() + forrigeRefusjonstidslinje = + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + inspektør.vedtaksperioder( + 2.vedtaksperiode + ).refusjonstidslinje + forrigeRefusjonstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT) + forrigeRefusjonstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INGEN) + } } - } @Test @Order(14) - fun `flere arbeidsgivere med bare en inntektsmelding- uten toggle`() = LagreRefusjonsopplysningerPåBehandling.disable { - a1 { - setup13og14() - migrerRefusjonsopplysningerPåBehandlinger() - val faktiskBeløpstidslinje = inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje - faktiskBeløpstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT) - faktiskBeløpstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INGEN) + fun `flere arbeidsgivere med bare en inntektsmelding- uten toggle`() = + LagreRefusjonsopplysningerPåBehandling.disable { + a1 { + setup13og14() + migrerRefusjonsopplysningerPåBehandlinger() + val faktiskBeløpstidslinje = + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + inspektør.vedtaksperioder( + 2.vedtaksperiode + ).refusjonstidslinje + faktiskBeløpstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT) + faktiskBeløpstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INGEN) + } } - } @Test @Order(15) - fun `flere arbeidsgivere med bare en inntektsmelding - med toggle alltid på`() = LagreRefusjonsopplysningerPåBehandling.enable { - a1 { - setup13og14() - forrigeRefusjonstidslinje = inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje - forrigeRefusjonstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT) - forrigeRefusjonstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INGEN) - migrerRefusjonsopplysningerPåBehandlinger() - val faktiskBeløpstidslinje = inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje - faktiskBeløpstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT) - faktiskBeløpstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INGEN) + fun `flere arbeidsgivere med bare en inntektsmelding - med toggle alltid på`() = + LagreRefusjonsopplysningerPåBehandling.enable { + a1 { + setup13og14() + forrigeRefusjonstidslinje = + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + inspektør.vedtaksperioder( + 2.vedtaksperiode + ).refusjonstidslinje + forrigeRefusjonstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT) + forrigeRefusjonstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INGEN) + migrerRefusjonsopplysningerPåBehandlinger() + val faktiskBeløpstidslinje = + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + inspektør.vedtaksperioder( + 2.vedtaksperiode + ).refusjonstidslinje + faktiskBeløpstidslinje.assertBeløpstidslinje(1.januar til 31.januar to INNTEKT) + faktiskBeløpstidslinje.assertBeløpstidslinje(1.februar til 28.februar to INGEN) + } } - } private fun Beløpstidslinje.assertBeløpstidslinje(vararg forventetBeløp: Pair) { forventetBeløp.forEach { (periode, inntekt) -> val subset = subset(periode) - assertEquals(periode, subset.perioderMedBeløp.singleOrNull()) {"Vi har ikke beløp i hele $periode"} - assertTrue(subset.all { it.beløp == inntekt }) {"Vi forventet at inntekten skulle være ${inntekt.dagligInt} i $periode, men var: ${subset.map { it.beløp.dagligInt }}"} + assertEquals( + periode, + subset.perioderMedBeløp.singleOrNull() + ) { "Vi har ikke beløp i hele $periode" } + assertTrue(subset.all { it.beløp == inntekt }) { "Vi forventet at inntekten skulle være ${inntekt.dagligInt} i $periode, men var: ${subset.map { it.beløp.dagligInt }}" } } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/MigrereUbrukteRefusjonsopplysningerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/MigrereUbrukteRefusjonsopplysningerTest.kt index 0faae7e96a..f2a307ddec 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/MigrereUbrukteRefusjonsopplysningerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/MigrereUbrukteRefusjonsopplysningerTest.kt @@ -54,22 +54,27 @@ internal class MigrereUbrukteRefusjonsopplysningerTest : AbstractDslTest() { @Test @Order(1) - fun `Endring i refusjon frem i tid fra inntektsmelding - med toggle`() = Toggle.LagreUbrukteRefusjonsopplysninger.enable { - a1 { - setup1og2() - forrigeUbrukteRefusjonsopplysninger = inspektør.ubrukteRefusjonsopplysninger + fun `Endring i refusjon frem i tid fra inntektsmelding - med toggle`() = + Toggle.LagreUbrukteRefusjonsopplysninger.enable { + a1 { + setup1og2() + forrigeUbrukteRefusjonsopplysninger = inspektør.ubrukteRefusjonsopplysninger + } } - } @Test @Order(2) - fun `Endring i refusjon frem i tid fra inntektsmelding - uten toggle`() = Toggle.LagreUbrukteRefusjonsopplysninger.disable { - a1 { - setup1og2() - migrerUbrukteRefusjonsopplysninger() - assertEquals(forrigeUbrukteRefusjonsopplysninger, inspektør.ubrukteRefusjonsopplysninger) + fun `Endring i refusjon frem i tid fra inntektsmelding - uten toggle`() = + Toggle.LagreUbrukteRefusjonsopplysninger.disable { + a1 { + setup1og2() + migrerUbrukteRefusjonsopplysninger() + assertEquals( + forrigeUbrukteRefusjonsopplysninger, + inspektør.ubrukteRefusjonsopplysninger + ) + } } - } private fun setup3og4() { håndterSøknad(januar) @@ -82,7 +87,7 @@ internal class MigrereUbrukteRefusjonsopplysningerTest : AbstractDslTest() { ) håndterInntektsmelding( arbeidsgiverperioder = listOf(1.januar til 16.januar), - refusjon = Inntektsmelding.Refusjon(beløp = INNTEKT/2, opphørsdato = 28.februar), + refusjon = Inntektsmelding.Refusjon(beløp = INNTEKT / 2, opphørsdato = 28.februar), beregnetInntekt = INNTEKT, id = meldingsreferanseId2, mottatt = mottatt2 @@ -92,22 +97,27 @@ internal class MigrereUbrukteRefusjonsopplysningerTest : AbstractDslTest() { @Test @Order(3) - fun `Endring i refusjon frem i tid fra flere inntektsmeldinger - med toggle`() = Toggle.LagreUbrukteRefusjonsopplysninger.enable { - a1 { - setup3og4() - forrigeUbrukteRefusjonsopplysninger = inspektør.ubrukteRefusjonsopplysninger + fun `Endring i refusjon frem i tid fra flere inntektsmeldinger - med toggle`() = + Toggle.LagreUbrukteRefusjonsopplysninger.enable { + a1 { + setup3og4() + forrigeUbrukteRefusjonsopplysninger = inspektør.ubrukteRefusjonsopplysninger + } } - } @Test @Order(4) - fun `Endring i refusjon frem i tid fra flere inntektsmeldinger - uten toggle`() = Toggle.LagreUbrukteRefusjonsopplysninger.disable { - a1 { - setup3og4() - migrerUbrukteRefusjonsopplysninger() - assertEquals(forrigeUbrukteRefusjonsopplysninger, inspektør.ubrukteRefusjonsopplysninger) + fun `Endring i refusjon frem i tid fra flere inntektsmeldinger - uten toggle`() = + Toggle.LagreUbrukteRefusjonsopplysninger.disable { + a1 { + setup3og4() + migrerUbrukteRefusjonsopplysninger() + assertEquals( + forrigeUbrukteRefusjonsopplysninger, + inspektør.ubrukteRefusjonsopplysninger + ) + } } - } private fun setup5og6() { håndterSøknad(januar) @@ -123,25 +133,30 @@ internal class MigrereUbrukteRefusjonsopplysningerTest : AbstractDslTest() { @Test @Order(5) - fun `Inntektsmeldingen støttes ikke - med toggle`() = Toggle.LagreUbrukteRefusjonsopplysninger.enable { - a1 { - setup5og6() - forrigeUbrukteRefusjonsopplysninger = inspektør.ubrukteRefusjonsopplysninger + fun `Inntektsmeldingen støttes ikke - med toggle`() = + Toggle.LagreUbrukteRefusjonsopplysninger.enable { + a1 { + setup5og6() + forrigeUbrukteRefusjonsopplysninger = inspektør.ubrukteRefusjonsopplysninger + } } - } @Test @Order(6) - fun `Inntektsmeldingen støttes ikke - uten toggle`() = Toggle.LagreUbrukteRefusjonsopplysninger.disable { - a1 { - setup5og6() - migrerUbrukteRefusjonsopplysninger() - assertEquals(forrigeUbrukteRefusjonsopplysninger, inspektør.ubrukteRefusjonsopplysninger) + fun `Inntektsmeldingen støttes ikke - uten toggle`() = + Toggle.LagreUbrukteRefusjonsopplysninger.disable { + a1 { + setup5og6() + migrerUbrukteRefusjonsopplysninger() + assertEquals( + forrigeUbrukteRefusjonsopplysninger, + inspektør.ubrukteRefusjonsopplysninger + ) + } } - } private fun setup7og8() { - a1{ + a1 { håndterSøknad(januar) håndterInntektsmelding( arbeidsgiverperioder = listOf(1.januar til 16.januar), @@ -154,31 +169,44 @@ internal class MigrereUbrukteRefusjonsopplysningerTest : AbstractDslTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode, godkjent = false) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(a1, 1.januar, 31.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + a1, + 1.januar, + 31.januar, + 100.prosent, + INNTEKT + ) + ) } } @Test @Order(7) - fun `Periode er kastet og utbetalt i Infotrygd - med toggle`() = Toggle.LagreUbrukteRefusjonsopplysninger.enable { - a1 { - setup7og8() - forrigeUbrukteRefusjonsopplysninger = inspektør.ubrukteRefusjonsopplysninger + fun `Periode er kastet og utbetalt i Infotrygd - med toggle`() = + Toggle.LagreUbrukteRefusjonsopplysninger.enable { + a1 { + setup7og8() + forrigeUbrukteRefusjonsopplysninger = inspektør.ubrukteRefusjonsopplysninger + } } - } @Test @Order(8) - fun `Periode er kastet og utbetalt i Infotrygd - uten toggle`() = Toggle.LagreUbrukteRefusjonsopplysninger.disable { - a1 { - setup7og8() - migrerUbrukteRefusjonsopplysninger() - assertEquals(forrigeUbrukteRefusjonsopplysninger, inspektør.ubrukteRefusjonsopplysninger) + fun `Periode er kastet og utbetalt i Infotrygd - uten toggle`() = + Toggle.LagreUbrukteRefusjonsopplysninger.disable { + a1 { + setup7og8() + migrerUbrukteRefusjonsopplysninger() + assertEquals( + forrigeUbrukteRefusjonsopplysninger, + inspektør.ubrukteRefusjonsopplysninger + ) + } } - } private fun setup9og10() { - a1{ + a1 { håndterSøknad(januar) håndterInntektsmelding( arbeidsgiverperioder = listOf(1.januar til 16.januar), @@ -191,13 +219,18 @@ internal class MigrereUbrukteRefusjonsopplysningerTest : AbstractDslTest() { håndterSimulering(1.vedtaksperiode) håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, - overstyringer = listOf(OverstyrtArbeidsgiveropplysning( - orgnummer = a1, - inntekt = INNTEKT, - forklaring = "foo", - subsumsjon = null, - refusjonsopplysninger = listOf(Triple(1.januar, 31.januar, INNTEKT / 2), Triple(1.februar, null, INGEN)) - )), + overstyringer = listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = INNTEKT, + forklaring = "foo", + subsumsjon = null, + refusjonsopplysninger = listOf( + Triple(1.januar, 31.januar, INNTEKT / 2), + Triple(1.februar, null, INGEN) + ) + ) + ), hendelseId = meldingsreferanseId2, tidsstempel = mottatt2 ) @@ -206,22 +239,27 @@ internal class MigrereUbrukteRefusjonsopplysningerTest : AbstractDslTest() { @Test @Order(9) - fun `Saksbehandler overstyrer refusjon frem i tid - med toggle`() = Toggle.LagreUbrukteRefusjonsopplysninger.enable { - a1 { - setup9og10() - forrigeUbrukteRefusjonsopplysninger = inspektør.ubrukteRefusjonsopplysninger + fun `Saksbehandler overstyrer refusjon frem i tid - med toggle`() = + Toggle.LagreUbrukteRefusjonsopplysninger.enable { + a1 { + setup9og10() + forrigeUbrukteRefusjonsopplysninger = inspektør.ubrukteRefusjonsopplysninger + } } - } @Test @Order(10) - fun `Saksbehandler overstyrer refusjon frem i tid - uten toggle`() = Toggle.LagreUbrukteRefusjonsopplysninger.disable { - a1 { - setup9og10() - migrerUbrukteRefusjonsopplysninger() - assertEquals(forrigeUbrukteRefusjonsopplysninger, inspektør.ubrukteRefusjonsopplysninger) + fun `Saksbehandler overstyrer refusjon frem i tid - uten toggle`() = + Toggle.LagreUbrukteRefusjonsopplysninger.disable { + a1 { + setup9og10() + migrerUbrukteRefusjonsopplysninger() + assertEquals( + forrigeUbrukteRefusjonsopplysninger, + inspektør.ubrukteRefusjonsopplysninger + ) + } } - } private fun setup11og12() { a1 { @@ -249,65 +287,126 @@ internal class MigrereUbrukteRefusjonsopplysningerTest : AbstractDslTest() { a1 { setup11og12() migrerUbrukteRefusjonsopplysninger() - assertEquals(forrigeUbrukteRefusjonsopplysninger, inspektør.ubrukteRefusjonsopplysninger) + assertEquals( + forrigeUbrukteRefusjonsopplysninger, + inspektør.ubrukteRefusjonsopplysninger + ) } } @Test - fun `Hensyntar Infotrygd-utbetaling ved ubrukte refusjonsopplysninger i inntektsgrunnlaget`() = Toggle.LagreUbrukteRefusjonsopplysninger.disable{ - a1 { - nyttVedtak(januar) - håndterOverstyrArbeidsgiveropplysninger( - skjæringstidspunkt = 1.januar, - overstyringer = listOf(OverstyrtArbeidsgiveropplysning( - orgnummer = a1, - inntekt = INNTEKT, - forklaring = "foo", - subsumsjon = null, - refusjonsopplysninger = listOf(Triple(1.januar, 31.januar, INNTEKT), Triple(1.februar, null, INGEN)) - )), - ) - håndterUtbetalingshistorikkEtterInfotrygdendring(PersonUtbetalingsperiode(a1, 1.februar, 10.februar, 100.prosent, INNTEKT)) - - assertEquals(RefusjonsservitørView(emptyMap()), inspektør.ubrukteRefusjonsopplysninger) - - migrerUbrukteRefusjonsopplysninger() - - assertEquals(RefusjonsservitørView(emptyMap()), inspektør.ubrukteRefusjonsopplysninger) + fun `Hensyntar Infotrygd-utbetaling ved ubrukte refusjonsopplysninger i inntektsgrunnlaget`() = + Toggle.LagreUbrukteRefusjonsopplysninger.disable { + a1 { + nyttVedtak(januar) + håndterOverstyrArbeidsgiveropplysninger( + skjæringstidspunkt = 1.januar, + overstyringer = listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = INNTEKT, + forklaring = "foo", + subsumsjon = null, + refusjonsopplysninger = listOf( + Triple(1.januar, 31.januar, INNTEKT), + Triple(1.februar, null, INGEN) + ) + ) + ), + ) + håndterUtbetalingshistorikkEtterInfotrygdendring( + PersonUtbetalingsperiode( + a1, + 1.februar, + 10.februar, + 100.prosent, + INNTEKT + ) + ) + + assertEquals( + RefusjonsservitørView(emptyMap()), + inspektør.ubrukteRefusjonsopplysninger + ) + + migrerUbrukteRefusjonsopplysninger() + + assertEquals( + RefusjonsservitørView(emptyMap()), + inspektør.ubrukteRefusjonsopplysninger + ) + } } - } @Test - fun `Perioder som ikke er vilkårsprøvd må anses som ubrukte refusjonsopplysninger`() = Toggle.LagreUbrukteRefusjonsopplysninger.disable { - a1 { - tilGodkjenning(januar) - håndterSøknad(mars) - håndterInntektsmelding(listOf(1.mars til 16.mars), id = meldingsreferanseId1, mottatt = mottatt1) - - assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING) - assertSisteTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) - assertEquals(RefusjonsservitørView(emptyMap()), inspektør.ubrukteRefusjonsopplysninger) - - migrerUbrukteRefusjonsopplysninger() - - assertEquals(RefusjonsservitørView(mapOf(1.mars to Beløpstidslinje.fra(1.mars.somPeriode(), INNTEKT, Kilde(meldingsreferanseId1, ARBEIDSGIVER, mottatt1)))), inspektør.ubrukteRefusjonsopplysninger) + fun `Perioder som ikke er vilkårsprøvd må anses som ubrukte refusjonsopplysninger`() = + Toggle.LagreUbrukteRefusjonsopplysninger.disable { + a1 { + tilGodkjenning(januar) + håndterSøknad(mars) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + id = meldingsreferanseId1, + mottatt = mottatt1 + ) + + assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING) + assertSisteTilstand(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) + assertEquals( + RefusjonsservitørView(emptyMap()), + inspektør.ubrukteRefusjonsopplysninger + ) + + migrerUbrukteRefusjonsopplysninger() + + assertEquals( + RefusjonsservitørView( + mapOf( + 1.mars to Beløpstidslinje.fra( + 1.mars.somPeriode(), + INNTEKT, + Kilde(meldingsreferanseId1, ARBEIDSGIVER, mottatt1) + ) + ) + ), inspektør.ubrukteRefusjonsopplysninger + ) + } } - } @Test - fun `Når siste periode er AUU anser vi kun refusjonsopplysninger etter denne perioden som ubrukte`() = Toggle.LagreUbrukteRefusjonsopplysninger.disable { - a1 { - håndterSøknad(1.januar til 10.januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), refusjon = Inntektsmelding.Refusjon(INNTEKT, 25.januar), id = meldingsreferanseId1, mottatt = mottatt1) - - assertEquals(RefusjonsservitørView(emptyMap()), inspektør.ubrukteRefusjonsopplysninger) - - migrerUbrukteRefusjonsopplysninger() - - val beløpstidslinje = Beløpstidslinje.fra(11.januar til 25.januar, INNTEKT, Kilde(meldingsreferanseId1, ARBEIDSGIVER, mottatt1)) + - Beløpstidslinje.fra(26.januar.somPeriode(), INGEN, Kilde(meldingsreferanseId1, ARBEIDSGIVER, mottatt1)) - - assertEquals(RefusjonsservitørView(mapOf(1.januar to beløpstidslinje)), inspektør.ubrukteRefusjonsopplysninger) + fun `Når siste periode er AUU anser vi kun refusjonsopplysninger etter denne perioden som ubrukte`() = + Toggle.LagreUbrukteRefusjonsopplysninger.disable { + a1 { + håndterSøknad(1.januar til 10.januar) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + refusjon = Inntektsmelding.Refusjon(INNTEKT, 25.januar), + id = meldingsreferanseId1, + mottatt = mottatt1 + ) + + assertEquals( + RefusjonsservitørView(emptyMap()), + inspektør.ubrukteRefusjonsopplysninger + ) + + migrerUbrukteRefusjonsopplysninger() + + val beløpstidslinje = Beløpstidslinje.fra( + 11.januar til 25.januar, + INNTEKT, + Kilde(meldingsreferanseId1, ARBEIDSGIVER, mottatt1) + ) + + Beløpstidslinje.fra( + 26.januar.somPeriode(), + INGEN, + Kilde(meldingsreferanseId1, ARBEIDSGIVER, mottatt1) + ) + + assertEquals( + RefusjonsservitørView(mapOf(1.januar to beløpstidslinje)), + inspektør.ubrukteRefusjonsopplysninger + ) + } } - } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RefusjonsopplysningerE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RefusjonsopplysningerE2ETest.kt index 9cca7e1fb4..4f8326b668 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RefusjonsopplysningerE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RefusjonsopplysningerE2ETest.kt @@ -35,17 +35,25 @@ internal class RefusjonsopplysningerE2ETest : AbstractDslTest() { } @Test - fun `første fraværsdag oppgitt til dagen etter arbeidsgiverperioden`(){ + fun `første fraværsdag oppgitt til dagen etter arbeidsgiverperioden`() { a1 { - nyttVedtak(førsteFraværsdag = 17.januar, arbeidsgiverperiode = listOf(1.januar til 16.januar), periode = januar) + nyttVedtak( + førsteFraværsdag = 17.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + periode = januar + ) assertIngenInfoSomInneholder("Mangler refusjonsopplysninger på orgnummer") } } @Test - fun `første fraværsdag oppgitt til dagen etter arbeidsgiverperioden over helg`(){ + fun `første fraværsdag oppgitt til dagen etter arbeidsgiverperioden over helg`() { a1 { - nyttVedtak(førsteFraværsdag = 22.januar, arbeidsgiverperiode = listOf(4.januar til 19.januar), periode = 4.januar til 31.januar) + nyttVedtak( + førsteFraværsdag = 22.januar, + arbeidsgiverperiode = listOf(4.januar til 19.januar), + periode = 4.januar til 31.januar + ) assertIngenInfoSomInneholder("Mangler refusjonsopplysninger på orgnummer") } } @@ -54,10 +62,20 @@ internal class RefusjonsopplysningerE2ETest : AbstractDslTest() { fun `lager nytt innslag i vilkårsgrunnlaghistorikken med oppdaterte refusjonsopplysninger ved ny inntektsmelding`() { a1 { val arbeidsgiverperiode = listOf(1.januar til 16.januar) - nyttVedtak(januar, arbeidsgiverperiode = arbeidsgiverperiode, førsteFraværsdag = 1.januar, refusjon = Inntektsmelding.Refusjon(INNTEKT, opphørsdato = null)) - inspektør.refusjonsopplysningerFraVilkårsgrunnlag().assertRefusjonsbeløp(januar, INNTEKT) + nyttVedtak( + januar, + arbeidsgiverperiode = arbeidsgiverperiode, + førsteFraværsdag = 1.januar, + refusjon = Inntektsmelding.Refusjon(INNTEKT, opphørsdato = null) + ) + inspektør.refusjonsopplysningerFraVilkårsgrunnlag() + .assertRefusjonsbeløp(januar, INNTEKT) assertEquals(1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) - håndterInntektsmelding(arbeidsgiverperioder = arbeidsgiverperiode, førsteFraværsdag = 22.januar, refusjon = Inntektsmelding.Refusjon(beløp = INGEN, opphørsdato = null)) + håndterInntektsmelding( + arbeidsgiverperioder = arbeidsgiverperiode, + førsteFraværsdag = 22.januar, + refusjon = Inntektsmelding.Refusjon(beløp = INGEN, opphørsdato = null) + ) assertEquals(2, inspektør.vilkårsgrunnlagHistorikkInnslag().size) inspektør.refusjonsopplysningerFraVilkårsgrunnlag().let { refusjonsopplysninger -> refusjonsopplysninger.assertRefusjonsbeløp(1.januar til 21.januar, INNTEKT) @@ -70,14 +88,26 @@ internal class RefusjonsopplysningerE2ETest : AbstractDslTest() { fun `Duplikat innhold i ny inntektsmelding`() { a1 { val arbeidsgiverperiode = listOf(1.januar til 16.januar) - nyttVedtak(januar, arbeidsgiverperiode = arbeidsgiverperiode, førsteFraværsdag = 1.januar, refusjon = Inntektsmelding.Refusjon(INNTEKT, opphørsdato = null)) - inspektør.refusjonsopplysningerFraVilkårsgrunnlag().assertRefusjonsbeløp(januar, INNTEKT) + nyttVedtak( + januar, + arbeidsgiverperiode = arbeidsgiverperiode, + førsteFraværsdag = 1.januar, + refusjon = Inntektsmelding.Refusjon(INNTEKT, opphørsdato = null) + ) + inspektør.refusjonsopplysningerFraVilkårsgrunnlag() + .assertRefusjonsbeløp(januar, INNTEKT) assertEquals(1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) - håndterInntektsmelding(arbeidsgiverperioder = arbeidsgiverperiode, førsteFraværsdag = 1.januar, refusjon = Inntektsmelding.Refusjon(beløp = INNTEKT, opphørsdato = null)) + håndterInntektsmelding( + arbeidsgiverperioder = arbeidsgiverperiode, + førsteFraværsdag = 1.januar, + refusjon = Inntektsmelding.Refusjon(beløp = INNTEKT, opphørsdato = null) + ) assertEquals(2, inspektør.vilkårsgrunnlagHistorikkInnslag().size) - inspektør.refusjonsopplysningerFraVilkårsgrunnlag().assertRefusjonsbeløp(januar, INNTEKT) + inspektør.refusjonsopplysningerFraVilkårsgrunnlag() + .assertRefusjonsbeløp(januar, INNTEKT) } } + @Test fun `Duplikat inntektsmelding`() { a1 { @@ -90,7 +120,8 @@ internal class RefusjonsopplysningerE2ETest : AbstractDslTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - inspektør.refusjonsopplysningerFraVilkårsgrunnlag().assertRefusjonsbeløp(januar, INNTEKT) + inspektør.refusjonsopplysningerFraVilkårsgrunnlag() + .assertRefusjonsbeløp(januar, INNTEKT) assertEquals(1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) @@ -100,7 +131,8 @@ internal class RefusjonsopplysningerE2ETest : AbstractDslTest() { arbeidsgiverperioder = arbeidsgiverperiode, ) assertEquals(2, inspektør.vilkårsgrunnlagHistorikkInnslag().size) - inspektør.refusjonsopplysningerFraVilkårsgrunnlag().assertRefusjonsbeløp(januar, INNTEKT) + inspektør.refusjonsopplysningerFraVilkårsgrunnlag() + .assertRefusjonsbeløp(januar, INNTEKT) } } @@ -138,7 +170,10 @@ internal class RefusjonsopplysningerE2ETest : AbstractDslTest() { håndterSykmelding(januar) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(1.januar, 1.januar)) assertSisteTilstand(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - håndterInntektsmelding(listOf(1.desember(2017) til 16.desember(2017)), førsteFraværsdag = 2.januar) + håndterInntektsmelding( + listOf(1.desember(2017) til 16.desember(2017)), + førsteFraværsdag = 2.januar + ) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -160,4 +195,4 @@ internal class RefusjonsopplysningerE2ETest : AbstractDslTest() { assertEquals(beløp, singleOrNull { dag in it.periode }?.beløp) } } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RefusjonsopplysningerP\303\245BehandlingE2ETest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RefusjonsopplysningerP\303\245BehandlingE2ETest.kt" index 5890cb062c..f40ac41f47 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RefusjonsopplysningerP\303\245BehandlingE2ETest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RefusjonsopplysningerP\303\245BehandlingE2ETest.kt" @@ -59,10 +59,27 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { håndterSøknad(21.januar til 25.januar) nullstillTilstandsendringer() håndterInntektsmelding(listOf(1.januar til 16.januar)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE) - assertBeløpstidslinje(inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, 1.januar til 20.januar, INNTEKT) - assertBeløpstidslinje(inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, 21.januar til 25.januar, INNTEKT) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE + ) + assertBeløpstidslinje( + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + 1.januar til 20.januar, + INNTEKT + ) + assertBeløpstidslinje( + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, + 21.januar til 25.januar, + INNTEKT + ) } } @@ -70,13 +87,27 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { fun `Refusjonsopplysningene strekker seg sammen med strekking av vedtaksperioden`() { a1 { tilGodkjenning(10.januar til 31.januar) - assertBeløpstidslinje(inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, 10.januar til 31.januar, INNTEKT) + assertBeløpstidslinje( + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + 10.januar til 31.januar, + INNTEKT + ) - håndterOverstyrTidslinje((1.januar til 9.januar).map { ManuellOverskrivingDag(it, Dagtype.Sykedag, 100) }) + håndterOverstyrTidslinje((1.januar til 9.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Sykedag, + 100 + ) + }) håndterVilkårsgrunnlag() håndterYtelser(1.vedtaksperiode) - assertBeløpstidslinje(inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, januar, INNTEKT) + assertBeløpstidslinje( + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + januar, + INNTEKT + ) } } @@ -85,13 +116,30 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { a1 { nyttVedtak(januar) val overstyringId = UUID.randomUUID() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT, "forklaring", null, listOf(Triple(1.januar, null, INNTEKT / 2)))), hendelseId = overstyringId) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT, + "forklaring", + null, + listOf(Triple(1.januar, null, INNTEKT / 2)) + ) + ), + hendelseId = overstyringId + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() håndterSøknad(februar) - assertBeløpstidslinje(inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, februar, INNTEKT / 2, overstyringId) + assertBeløpstidslinje( + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, + februar, + INNTEKT / 2, + overstyringId + ) } } @@ -100,10 +148,16 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { a1 { nyttVedtak(januar) forlengVedtak(februar) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT, "forklaring", null, listOf( - Triple(1.januar, 28.februar, INGEN), - Triple(1.mars, null, INNTEKT) - )))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + a1, INNTEKT, "forklaring", null, listOf( + Triple(1.januar, 28.februar, INGEN), + Triple(1.mars, null, INNTEKT) + ) + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -117,10 +171,22 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { håndterSøknad(mars) håndterYtelser(3.vedtaksperiode) - assertBeløpstidslinje(inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, januar, INGEN) - assertBeløpstidslinje(inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, februar, INGEN) + assertBeløpstidslinje( + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + januar, + INGEN + ) + assertBeløpstidslinje( + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, + februar, + INGEN + ) - assertBeløpstidslinje(inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje, mars, INNTEKT) + assertBeløpstidslinje( + inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje, + mars, + INNTEKT + ) } } @@ -129,30 +195,66 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { a1 { håndterSøknad(januar) val mottatt = LocalDateTime.now() - val im = håndterInntektsmelding(listOf(1.januar til 16.januar), refusjon = Inntektsmelding.Refusjon(INNTEKT, opphørsdato = 28.februar), mottatt = mottatt) + val im = håndterInntektsmelding( + listOf(1.januar til 16.januar), + refusjon = Inntektsmelding.Refusjon(INNTEKT, opphørsdato = 28.februar), + mottatt = mottatt + ) val forventetUbruktEtterJanuarSøknad = - Beløpstidslinje.fra(1.februar til 28.februar, INNTEKT, Kilde(im, ARBEIDSGIVER, mottatt)) + - Beløpstidslinje.fra(1.mars.somPeriode(), INGEN, Kilde(im, ARBEIDSGIVER, mottatt)) + Beløpstidslinje.fra( + 1.februar til 28.februar, + INNTEKT, + Kilde(im, ARBEIDSGIVER, mottatt) + ) + + Beløpstidslinje.fra( + 1.mars.somPeriode(), + INGEN, + Kilde(im, ARBEIDSGIVER, mottatt) + ) - assertEquals(setOf(1.januar), inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys) - assertEquals(forventetUbruktEtterJanuarSøknad, inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.getValue(1.januar)) + assertEquals( + setOf(1.januar), + inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys + ) + assertEquals( + forventetUbruktEtterJanuarSøknad, + inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.getValue(1.januar) + ) assertEquals(forventetUbruktEtterJanuarSøknad, gjenopprettBeløpstislinjeFor(1.januar)) håndterSøknad(februar) - val forventetUbruktEtterFebruarSøknad = Beløpstidslinje.fra(1.mars.somPeriode(), INGEN, Kilde(im, ARBEIDSGIVER, mottatt)) - val forventetBruktForFebruar = Beløpstidslinje.fra(februar, INNTEKT, Kilde(im, ARBEIDSGIVER, mottatt)) + val forventetUbruktEtterFebruarSøknad = + Beløpstidslinje.fra(1.mars.somPeriode(), INGEN, Kilde(im, ARBEIDSGIVER, mottatt)) + val forventetBruktForFebruar = + Beløpstidslinje.fra(februar, INNTEKT, Kilde(im, ARBEIDSGIVER, mottatt)) - assertEquals(setOf(1.januar), inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys) - assertEquals(forventetUbruktEtterFebruarSøknad, inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.getValue(1.januar)) + assertEquals( + setOf(1.januar), + inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys + ) + assertEquals( + forventetUbruktEtterFebruarSøknad, + inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.getValue(1.januar) + ) assertEquals(forventetUbruktEtterFebruarSøknad, gjenopprettBeløpstislinjeFor(1.januar)) - assertEquals(forventetBruktForFebruar, inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje) + assertEquals( + forventetBruktForFebruar, + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje + ) - val forventetBruktForMars = Beløpstidslinje.fra(mars, INGEN, Kilde(im, ARBEIDSGIVER, mottatt)) + val forventetBruktForMars = + Beløpstidslinje.fra(mars, INGEN, Kilde(im, ARBEIDSGIVER, mottatt)) håndterSøknad(mars) - assertEquals(emptySet(), inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys) - assertEquals(forventetBruktForMars, inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje) + assertEquals( + emptySet(), + inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys + ) + assertEquals( + forventetBruktForMars, + inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje + ) } } @@ -161,25 +263,61 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { fun `saksbehandler opplyser om endring i refusjon frem i tid`() { a1 { nyttVedtak(januar) - assertEquals(emptySet(), inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys) + assertEquals( + emptySet(), + inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys + ) val overstyringId = UUID.randomUUID() val overstyringTidspunkt = LocalDateTime.now() - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT, "bla", null, listOf(Triple(1.februar, null, INGEN)))), hendelseId = overstyringId, tidsstempel = overstyringTidspunkt) - assertEquals(setOf(1.januar), inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning( + a1, + INNTEKT, + "bla", + null, + listOf(Triple(1.februar, null, INGEN)) + ) + ), + hendelseId = overstyringId, + tidsstempel = overstyringTidspunkt + ) + assertEquals( + setOf(1.januar), + inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys + ) val forventetUbrukt = - Beløpstidslinje.fra(1.februar.somPeriode(), INGEN, Kilde(overstyringId, Avsender.SAKSBEHANDLER, overstyringTidspunkt)) + Beløpstidslinje.fra( + 1.februar.somPeriode(), + INGEN, + Kilde(overstyringId, Avsender.SAKSBEHANDLER, overstyringTidspunkt) + ) - assertEquals(forventetUbrukt, inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.getValue(1.januar)) + assertEquals( + forventetUbrukt, + inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.getValue(1.januar) + ) assertEquals(forventetUbrukt, gjenopprettBeløpstislinjeFor(1.januar)) val forventetBrukt = - Beløpstidslinje.fra(februar, INGEN, Kilde(overstyringId, Avsender.SAKSBEHANDLER, overstyringTidspunkt)) + Beløpstidslinje.fra( + februar, + INGEN, + Kilde(overstyringId, Avsender.SAKSBEHANDLER, overstyringTidspunkt) + ) håndterSøknad(februar) - assertEquals(emptySet(), inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys) - assertEquals(forventetBrukt, inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje) + assertEquals( + emptySet(), + inspektør.ubrukteRefusjonsopplysninger.refusjonstidslinjer.keys + ) + assertEquals( + forventetBrukt, + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje + ) } } @@ -195,7 +333,11 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) assertSisteTilstand(3.vedtaksperiode, AVSLUTTET) - assertBeløpstidslinje(inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje, mars, INNTEKT) + assertBeløpstidslinje( + inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje, + mars, + INNTEKT + ) } } @@ -218,9 +360,21 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { opphørsdato = null ) ) - assertBeløpstidslinje(inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, januar, INNTEKT / 2) - assertBeløpstidslinje(inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, februar, INNTEKT / 2) - assertBeløpstidslinje(inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje, mars, INNTEKT / 2) + assertBeløpstidslinje( + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + januar, + INNTEKT / 2 + ) + assertBeløpstidslinje( + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, + februar, + INNTEKT / 2 + ) + assertBeløpstidslinje( + inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje, + mars, + INNTEKT / 2 + ) } } @@ -243,10 +397,22 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { opphørsdato = 30.april ) ) - assertBeløpstidslinje(inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, januar, INNTEKT / 2) - assertBeløpstidslinje(inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, februar, INNTEKT / 2) + assertBeløpstidslinje( + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + januar, + INNTEKT / 2 + ) + assertBeløpstidslinje( + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, + februar, + INNTEKT / 2 + ) - assertBeløpstidslinje(inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje, mars, INNTEKT / 2) + assertBeløpstidslinje( + inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje, + mars, + INNTEKT / 2 + ) assertInfo("Refusjonsservitøren har rester for 01-01-2018 etter servering: 01-04-2018 til 01-05-2018") } } @@ -257,22 +423,51 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { nyttVedtak(januar) håndterSøknad(mars) assertSisteTilstand(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - håndterOverstyrTidslinje(februar.map { ManuellOverskrivingDag(it, Dagtype.ArbeidIkkeGjenopptattDag) }) + håndterOverstyrTidslinje(februar.map { + ManuellOverskrivingDag( + it, + Dagtype.ArbeidIkkeGjenopptattDag + ) + }) assertSisteTilstand(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.mars, beregnetInntekt = INNTEKT*1.1) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.mars, + beregnetInntekt = INNTEKT * 1.1 + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() - assertBeløpstidslinje(inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, januar, INNTEKT) - assertBeløpstidslinje(inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, 1.februar til 31.mars, INNTEKT*1.1) + assertBeløpstidslinje( + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + januar, + INNTEKT + ) + assertBeløpstidslinje( + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, + 1.februar til 31.mars, + INNTEKT * 1.1 + ) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, refusjon = Inntektsmelding.Refusjon(INGEN, null)) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + refusjon = Inntektsmelding.Refusjon(INGEN, null) + ) - assertBeløpstidslinje(inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, januar, INGEN) - assertBeløpstidslinje(inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, 1.februar til 31.mars, INNTEKT*1.1) + assertBeløpstidslinje( + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + januar, + INGEN + ) + assertBeløpstidslinje( + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, + 1.februar til 31.mars, + INNTEKT * 1.1 + ) } } @@ -280,7 +475,14 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { fun `periode med arbeidsdag i halen`() { a1 { nyttVedtak(januar) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(onsdag(31.januar), Dagtype.Arbeidsdag))) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag( + onsdag(31.januar), + Dagtype.Arbeidsdag + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -295,17 +497,36 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { a1 { nyttVedtak(januar) forlengVedtak(februar) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(torsdag(1.februar), Dagtype.Arbeidsdag))) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag( + torsdag(1.februar), + Dagtype.Arbeidsdag + ) + ) + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, refusjon = Inntektsmelding.Refusjon(INGEN, null)) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + refusjon = Inntektsmelding.Refusjon(INGEN, null) + ) - assertBeløpstidslinje(inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, januar, INGEN) - assertBeløpstidslinje(inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, februar, INNTEKT) + assertBeløpstidslinje( + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje, + januar, + INGEN + ) + assertBeløpstidslinje( + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje, + februar, + INNTEKT + ) } } @@ -313,17 +534,24 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { fun `ny vedtaksperiode`() { håndterSøknad(januar) - assertEquals(Beløpstidslinje(), inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje) + assertEquals( + Beløpstidslinje(), + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + ) } @Test fun `IM før vedtaksperiode`() { val tidsstempel = LocalDateTime.now() - val im = håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, mottatt = tidsstempel) + val im = + håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, mottatt = tidsstempel) håndterSøknad(januar) val kilde = Kilde(im, ARBEIDSGIVER, tidsstempel) - assertEquals(Beløpstidslinje.fra(januar, INNTEKT, kilde), inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje) + assertEquals( + Beløpstidslinje.fra(januar, INNTEKT, kilde), + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + ) } @Test @@ -334,13 +562,31 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { nullstillTilstandsendringer() val tidsstempelNy = LocalDateTime.now() - val imNy = håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), mottatt = tidsstempelNy) + val imNy = håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), + mottatt = tidsstempelNy + ) val kildeNy = Kilde(imNy, ARBEIDSGIVER, tidsstempelNy) - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) - assertEquals(forventetTidslinje, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje) - assertTilstander(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + val forventetTidslinje = + Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra( + 28.januar til 31.januar, + INGEN, + kildeNy + ) + assertEquals( + forventetTidslinje, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -352,13 +598,31 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { nullstillTilstandsendringer() val tidsstempelNy = LocalDateTime.now() - val imNy = håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), mottatt = tidsstempelNy) + val imNy = håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), + mottatt = tidsstempelNy + ) val kildeNy = Kilde(imNy, ARBEIDSGIVER, tidsstempelNy) - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) - assertEquals(forventetTidslinje, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje) - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + val forventetTidslinje = + Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra( + 28.januar til 31.januar, + INGEN, + kildeNy + ) + assertEquals( + forventetTidslinje, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) } @Test @@ -371,13 +635,31 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { nullstillTilstandsendringer() val tidsstempelNy = LocalDateTime.now() - val imNy = håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), mottatt = tidsstempelNy) + val imNy = håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), + mottatt = tidsstempelNy + ) val kildeNy = Kilde(imNy, ARBEIDSGIVER, tidsstempelNy) - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) - assertEquals(forventetTidslinje, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje) - assertTilstander(1.vedtaksperiode, AVVENTER_SIMULERING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + val forventetTidslinje = + Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra( + 28.januar til 31.januar, + INGEN, + kildeNy + ) + assertEquals( + forventetTidslinje, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_SIMULERING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) } @Test @@ -390,12 +672,25 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { håndterSimulering(1.vedtaksperiode) val tidsstempelNy = LocalDateTime.now() - val imNy = håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), mottatt = tidsstempelNy) + val imNy = håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), + mottatt = tidsstempelNy + ) val kildeNy = Kilde(imNy, ARBEIDSGIVER, tidsstempelNy) - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) - assertEquals(forventetTidslinje, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje) + val forventetTidslinje = + Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra( + 28.januar til 31.januar, + INGEN, + kildeNy + ) + assertEquals( + forventetTidslinje, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK) } @@ -403,7 +698,11 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { fun `korrigerte refusjonsopplysninger i TilUtbetaling`() { håndterSøknad(januar) val tidsstempelGammel = LocalDateTime.now() - val imGammel = håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, mottatt = tidsstempelGammel) + val imGammel = håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + mottatt = tidsstempelGammel + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -413,7 +712,12 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { nullstillTilstandsendringer() val tidsstempelNy = LocalDateTime.now() - val imNy = håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), mottatt = tidsstempelNy) + val imNy = håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), + mottatt = tidsstempelNy + ) val kildeGammel = Kilde(imGammel, ARBEIDSGIVER, tidsstempelGammel) val kildeNy = Kilde(imNy, ARBEIDSGIVER, tidsstempelNy) @@ -422,11 +726,16 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { assertEquals(2, inspektør.behandlinger.size) inspektør.behandlinger[0].also { - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 31.januar, INNTEKT, kildeGammel) + val forventetTidslinje = + Beløpstidslinje.fra(1.januar til 31.januar, INNTEKT, kildeGammel) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } inspektør.behandlinger[1].also { - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) + val forventetTidslinje = Beløpstidslinje.fra( + 1.januar til 27.januar, + 500.daglig, + kildeNy + ) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } @@ -441,21 +750,36 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { nullstillTilstandsendringer() val tidsstempelNy = LocalDateTime.now() - val imNy = håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), mottatt = tidsstempelNy) + val imNy = håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), + mottatt = tidsstempelNy + ) val kildeNy = Kilde(imNy, ARBEIDSGIVER, tidsstempelNy) val inspektør = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør assertEquals(2, inspektør.behandlinger.size) inspektør.behandlinger[0].also { - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 31.januar, INNTEKT, kildeGammel) + val forventetTidslinje = + Beløpstidslinje.fra(1.januar til 31.januar, INNTEKT, kildeGammel) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } inspektør.behandlinger[1].also { - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) + val forventetTidslinje = Beløpstidslinje.fra( + 1.januar til 27.januar, + 500.daglig, + kildeNy + ) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) } @Test @@ -465,7 +789,12 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val kildeEldst = Kilde(eldstId, ARBEIDSGIVER, tidsstempelEldst) val tidsstempelGammel = LocalDateTime.now().minusDays(1) - val gammelId = nyttVedtak(10.februar til 28.februar, tidsstempelGammel, vedtaksperiode = 2, arbeidsgiverperiode = listOf(1.januar til 16.januar)) + val gammelId = nyttVedtak( + 10.februar til 28.februar, + tidsstempelGammel, + vedtaksperiode = 2, + arbeidsgiverperiode = listOf(1.januar til 16.januar) + ) val kildeGammel = Kilde(gammelId, ARBEIDSGIVER, tidsstempelGammel) nullstillTilstandsendringer() @@ -481,7 +810,8 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { assertEquals(1, inspektør.behandlinger.size) inspektør.behandlinger[0].also { - val forventetTidslinje = Beløpstidslinje.fra(10.februar til 28.februar, INNTEKT, kildeGammel) + val forventetTidslinje = + Beløpstidslinje.fra(10.februar til 28.februar, INNTEKT, kildeGammel) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } } @@ -494,26 +824,45 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val imGammel = nyttVedtak(januar, tidsstempelGammel) val kildeGammel = Kilde(imGammel, ARBEIDSGIVER, tidsstempelGammel) // Trigg en revurdering - håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, mottatt = LocalDateTime.now()) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + mottatt = LocalDateTime.now() + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) nullstillTilstandsendringer() val tidsstempelNy = LocalDateTime.now() - val imNy = håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), mottatt = tidsstempelNy) + val imNy = håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), + mottatt = tidsstempelNy + ) val kildeNy = Kilde(imNy, ARBEIDSGIVER, tidsstempelNy) val inspektør = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør assertEquals(2, inspektør.behandlinger.size) inspektør.behandlinger[0].also { - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 31.januar, INNTEKT, kildeGammel) + val forventetTidslinje = + Beløpstidslinje.fra(1.januar til 31.januar, INNTEKT, kildeGammel) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } inspektør.behandlinger[1].also { - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) + val forventetTidslinje = Beløpstidslinje.fra( + 1.januar til 27.januar, + 500.daglig, + kildeNy + ) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) } @Test @@ -522,27 +871,46 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val imGammel = nyttVedtak(januar, tidsstempelGammel) val kildeGammel = Kilde(imGammel, ARBEIDSGIVER, tidsstempelGammel) // Trigg en revurdering - håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT*1.1, mottatt = LocalDateTime.now()) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT * 1.1, + mottatt = LocalDateTime.now() + ) håndterYtelser(1.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVVENTER_SIMULERING_REVURDERING) nullstillTilstandsendringer() val tidsstempelNy = LocalDateTime.now() - val imNy = håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), mottatt = tidsstempelNy) + val imNy = håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), + mottatt = tidsstempelNy + ) val kildeNy = Kilde(imNy, ARBEIDSGIVER, tidsstempelNy) val inspektør = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør assertEquals(2, inspektør.behandlinger.size) inspektør.behandlinger[0].also { - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 31.januar, INNTEKT, kildeGammel) + val forventetTidslinje = + Beløpstidslinje.fra(1.januar til 31.januar, INNTEKT, kildeGammel) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } inspektør.behandlinger[1].also { - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) + val forventetTidslinje = Beløpstidslinje.fra( + 1.januar til 27.januar, + 500.daglig, + kildeNy + ) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } - assertTilstander(1.vedtaksperiode, AVVENTER_SIMULERING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) } @Test @@ -551,27 +919,46 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val imGammel = nyttVedtak(januar, tidsstempelGammel) val kildeGammel = Kilde(imGammel, ARBEIDSGIVER, tidsstempelGammel) // Trigg en revurdering - håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, mottatt = LocalDateTime.now()) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + mottatt = LocalDateTime.now() + ) håndterYtelser(1.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING) nullstillTilstandsendringer() val tidsstempelNy = LocalDateTime.now() - val imNy = håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), mottatt = tidsstempelNy) + val imNy = håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + refusjon = Inntektsmelding.Refusjon(500.daglig, 27.januar), + mottatt = tidsstempelNy + ) val kildeNy = Kilde(imNy, ARBEIDSGIVER, tidsstempelNy) val inspektør = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør assertEquals(2, inspektør.behandlinger.size) inspektør.behandlinger[0].also { - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 31.januar, INNTEKT, kildeGammel) + val forventetTidslinje = + Beløpstidslinje.fra(1.januar til 31.januar, INNTEKT, kildeGammel) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } inspektør.behandlinger[1].also { - val forventetTidslinje = Beløpstidslinje.fra(1.januar til 27.januar, 500.daglig, kildeNy) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) + val forventetTidslinje = Beløpstidslinje.fra( + 1.januar til 27.januar, + 500.daglig, + kildeNy + ) + Beløpstidslinje.fra(28.januar til 31.januar, INGEN, kildeNy) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) } @Test @@ -583,12 +970,21 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val kildeGammel = Kilde(imGammel, ARBEIDSGIVER, tidsstempelGammel) // Trigger en revurdering - håndterInntektsmelding(listOf(1.januar til 16.januar), INNTEKT, mottatt = LocalDateTime.now()) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + INNTEKT, + mottatt = LocalDateTime.now() + ) assertSisteTilstand(2.vedtaksperiode, AVVENTER_REVURDERING) nullstillTilstandsendringer() val tidsstempelNy = LocalDateTime.now() - val imNy = håndterInntektsmelding(listOf(1.mars til 16.mars), INNTEKT, refusjon = Inntektsmelding.Refusjon(500.daglig, 27.mars), mottatt = tidsstempelNy) + val imNy = håndterInntektsmelding( + listOf(1.mars til 16.mars), + INNTEKT, + refusjon = Inntektsmelding.Refusjon(500.daglig, 27.mars), + mottatt = tidsstempelNy + ) val kildeNy = Kilde(imNy, ARBEIDSGIVER, tidsstempelNy) val inspektør = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør @@ -599,7 +995,12 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } inspektør.behandlinger[1].also { - val forventetTidslinje = Beløpstidslinje.fra(1.mars til 27.mars, 500.daglig, kildeNy) + Beløpstidslinje.fra(28.mars til 31.mars, INGEN, kildeNy) + val forventetTidslinje = + Beløpstidslinje.fra(1.mars til 27.mars, 500.daglig, kildeNy) + Beløpstidslinje.fra( + 28.mars til 31.mars, + INGEN, + kildeNy + ) assertEquals(forventetTidslinje, it.endringer.last().refusjonstidslinje) } assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING) @@ -613,11 +1014,19 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val kilde = Kilde(im, ARBEIDSGIVER, tidsstempel) forlengVedtak(februar) - val refusjonstidslinjeVedtaksperiode1 = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje - val refusjonstidslinjeVedtaksperiode2 = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje + val refusjonstidslinjeVedtaksperiode1 = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje + val refusjonstidslinjeVedtaksperiode2 = + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje - assertEquals(Beløpstidslinje.fra(januar, INNTEKT, kilde), refusjonstidslinjeVedtaksperiode1) - assertEquals(Beløpstidslinje.fra(februar, INNTEKT, kilde), refusjonstidslinjeVedtaksperiode2) + assertEquals( + Beløpstidslinje.fra(januar, INNTEKT, kilde), + refusjonstidslinjeVedtaksperiode1 + ) + assertEquals( + Beløpstidslinje.fra(februar, INNTEKT, kilde), + refusjonstidslinjeVedtaksperiode2 + ) } } @@ -677,7 +1086,7 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { fun `Refusjonsopplysninger på en periode som kiler seg midt mellom to strekker opplysningene fra perioden før seg`() { a1 { nyttVedtak(januar, beregnetInntekt = INNTEKT) - nyttVedtak(mars, beregnetInntekt = INNTEKT*1.1) + nyttVedtak(mars, beregnetInntekt = INNTEKT * 1.1) nyPeriode(februar) assertTrue(inspektør.vedtaksperioder(3.vedtaksperiode).refusjonstidslinje.all { it.beløp == INNTEKT }) @@ -692,11 +1101,19 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val kilde = Kilde(im, ARBEIDSGIVER, tidsstempel) forlengVedtak(februar) - val refusjonstidslinjeVedtaksperiode1 = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje - val refusjonstidslinjeVedtaksperiode2 = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje + val refusjonstidslinjeVedtaksperiode1 = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje + val refusjonstidslinjeVedtaksperiode2 = + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje - assertEquals(Beløpstidslinje.fra(januar, INNTEKT, kilde), refusjonstidslinjeVedtaksperiode1) - assertEquals(Beløpstidslinje.fra(februar, INGEN, kilde), refusjonstidslinjeVedtaksperiode2) + assertEquals( + Beløpstidslinje.fra(januar, INNTEKT, kilde), + refusjonstidslinjeVedtaksperiode1 + ) + assertEquals( + Beløpstidslinje.fra(februar, INGEN, kilde), + refusjonstidslinjeVedtaksperiode2 + ) } } @@ -705,18 +1122,32 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { fun `Forlengelser bruker refusjonsopplysninger fra perioden før, men må hensynta eventuelle endringer i refusjonshistorikken`() { a1 { val tidsstempel = LocalDateTime.now() - val im = nyttVedtak(januar, tidsstempel, endringerIRefusjon = listOf( + val im = nyttVedtak( + januar, tidsstempel, endringerIRefusjon = listOf( Inntektsmelding.Refusjon.EndringIRefusjon(INNTEKT * 0.8, 1.februar), Inntektsmelding.Refusjon.EndringIRefusjon(INNTEKT * 0.5, 20.februar) - )) + ) + ) val kilde = Kilde(im, ARBEIDSGIVER, tidsstempel) forlengVedtak(februar) - val refusjonstidslinjeVedtaksperiode1 = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje - val refusjonstidslinjeVedtaksperiode2 = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje + val refusjonstidslinjeVedtaksperiode1 = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje + val refusjonstidslinjeVedtaksperiode2 = + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje - assertEquals(Beløpstidslinje.fra(januar, INNTEKT, kilde), refusjonstidslinjeVedtaksperiode1) - assertEquals(Beløpstidslinje.fra(1.februar til 19.februar, INNTEKT * 0.8, kilde) + Beløpstidslinje.fra(20.februar til 28.februar, INNTEKT * 0.5, kilde), refusjonstidslinjeVedtaksperiode2) + assertEquals( + Beløpstidslinje.fra(januar, INNTEKT, kilde), + refusjonstidslinjeVedtaksperiode1 + ) + assertEquals( + Beløpstidslinje.fra( + 1.februar til 19.februar, + INNTEKT * 0.8, + kilde + ) + Beløpstidslinje.fra(20.februar til 28.februar, INNTEKT * 0.5, kilde), + refusjonstidslinjeVedtaksperiode2 + ) } } @@ -726,7 +1157,8 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val tidsstempel = LocalDateTime.now() val im = nyttVedtak(januar, tidsstempel) - val refusjonstidslinje = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje + val refusjonstidslinje = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.single().endringer.last().refusjonstidslinje val kilde = Kilde(im, ARBEIDSGIVER, tidsstempel) assertEquals(Beløpstidslinje.fra(januar, INNTEKT, kilde), refusjonstidslinje) @@ -734,18 +1166,29 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val tidsstempel2 = LocalDateTime.now() val saksbehandlerOverstyring = håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, - overstyringer = listOf(OverstyrtArbeidsgiveropplysning( - orgnummer = a1, - inntekt = INNTEKT, - forklaring = "forklaring", - refusjonsopplysninger = listOf(Triple(1.januar, null, INGEN)))), + overstyringer = listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = INNTEKT, + forklaring = "forklaring", + refusjonsopplysninger = listOf(Triple(1.januar, null, INGEN)) + ) + ), tidsstempel = tidsstempel2 ) - val refusjonstidslinje2 = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje - val kildeSaksbehandler = Kilde(saksbehandlerOverstyring.metadata.meldingsreferanseId, Avsender.SAKSBEHANDLER, tidsstempel2) + val refusjonstidslinje2 = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje + val kildeSaksbehandler = Kilde( + saksbehandlerOverstyring.metadata.meldingsreferanseId, + Avsender.SAKSBEHANDLER, + tidsstempel2 + ) - assertEquals(Beløpstidslinje.fra(januar, INGEN, kildeSaksbehandler), refusjonstidslinje2) + assertEquals( + Beløpstidslinje.fra(januar, INGEN, kildeSaksbehandler), + refusjonstidslinje2 + ) } } @@ -759,27 +1202,45 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val tidsstempel2 = LocalDateTime.now() val saksbehandlerOverstyring = håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, - overstyringer = listOf(OverstyrtArbeidsgiveropplysning( - orgnummer = a1, - inntekt = INNTEKT, - forklaring = "forklaring", - refusjonsopplysninger = listOf(Triple(1.januar, null, INGEN)))), + overstyringer = listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = INNTEKT, + forklaring = "forklaring", + refusjonsopplysninger = listOf(Triple(1.januar, null, INGEN)) + ) + ), tidsstempel = tidsstempel2 ) - val kildeSaksbehandler = Kilde(saksbehandlerOverstyring.metadata.meldingsreferanseId, Avsender.SAKSBEHANDLER, tidsstempel2) + val kildeSaksbehandler = Kilde( + saksbehandlerOverstyring.metadata.meldingsreferanseId, + Avsender.SAKSBEHANDLER, + tidsstempel2 + ) inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.arbeidsgiverInntektsopplysninger.single().refusjonsopplysninger.let { - assertEquals(1.januar til LocalDate.MAX, it.inspektør.refusjonsopplysninger.single().periode) + assertEquals( + 1.januar til LocalDate.MAX, + it.inspektør.refusjonsopplysninger.single().periode + ) assertEquals(INGEN, it.inspektør.refusjonsopplysninger.single().beløp) } inspektør.vilkårsgrunnlag(1.mars)!!.inspektør.inntektsgrunnlag.arbeidsgiverInntektsopplysninger.single().refusjonsopplysninger.let { - assertEquals(1.mars til LocalDate.MAX, it.inspektør.refusjonsopplysninger.single().periode) + assertEquals( + 1.mars til LocalDate.MAX, + it.inspektør.refusjonsopplysninger.single().periode + ) assertEquals(INNTEKT, it.inspektør.refusjonsopplysninger.single().beløp) } - val refusjonstidslinje1 = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje - val refusjonstidslinje2 = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje - assertEquals(Beløpstidslinje.fra(januar, INGEN, kildeSaksbehandler), refusjonstidslinje1) + val refusjonstidslinje1 = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje + val refusjonstidslinje2 = + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje + assertEquals( + Beløpstidslinje.fra(januar, INGEN, kildeSaksbehandler), + refusjonstidslinje1 + ) assertEquals(Beløpstidslinje.fra(mars, INNTEKT, kildeIm), refusjonstidslinje2) } } @@ -792,19 +1253,34 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val tidsstempel = LocalDateTime.now() val overstyring = håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, - overstyringer = listOf(OverstyrtArbeidsgiveropplysning( - orgnummer = a1, - inntekt = INNTEKT, - forklaring = "forklaring", - refusjonsopplysninger = listOf(Triple(1.januar, 31.januar, INGEN), Triple(1.februar, null, INNTEKT / 2)))), + overstyringer = listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = INNTEKT, + forklaring = "forklaring", + refusjonsopplysninger = listOf( + Triple(1.januar, 31.januar, INGEN), + Triple(1.februar, null, INNTEKT / 2) + ) + ) + ), tidsstempel = tidsstempel ) - val kildeSaksbehandler = Kilde(overstyring.metadata.meldingsreferanseId, Avsender.SAKSBEHANDLER, tidsstempel) - val refusjonstidslinjeJanuar = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje - val refusjonstidslinjeFebruar = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje + val kildeSaksbehandler = + Kilde(overstyring.metadata.meldingsreferanseId, Avsender.SAKSBEHANDLER, tidsstempel) + val refusjonstidslinjeJanuar = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje + val refusjonstidslinjeFebruar = + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje - assertEquals(Beløpstidslinje.fra(januar, INGEN, kildeSaksbehandler), refusjonstidslinjeJanuar) - assertEquals(Beløpstidslinje.fra(februar, INNTEKT / 2, kildeSaksbehandler), refusjonstidslinjeFebruar) + assertEquals( + Beløpstidslinje.fra(januar, INGEN, kildeSaksbehandler), + refusjonstidslinjeJanuar + ) + assertEquals( + Beløpstidslinje.fra(februar, INNTEKT / 2, kildeSaksbehandler), + refusjonstidslinjeFebruar + ) } } @@ -815,16 +1291,28 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { val tidsstempel = LocalDateTime.now() val overstyring = håndterOverstyrArbeidsgiveropplysninger( skjæringstidspunkt = 1.januar, - overstyringer = listOf(OverstyrtArbeidsgiveropplysning( - orgnummer = a1, - inntekt = INNTEKT, - forklaring = "forklaring", - refusjonsopplysninger = listOf(Triple(1.januar, 15.januar, INGEN), Triple(16.januar, null, INNTEKT / 2)))), + overstyringer = listOf( + OverstyrtArbeidsgiveropplysning( + orgnummer = a1, + inntekt = INNTEKT, + forklaring = "forklaring", + refusjonsopplysninger = listOf( + Triple(1.januar, 15.januar, INGEN), + Triple(16.januar, null, INNTEKT / 2) + ) + ) + ), tidsstempel = tidsstempel ) - val kildeSaksbehandler = Kilde(overstyring.metadata.meldingsreferanseId, Avsender.SAKSBEHANDLER, tidsstempel) - val refusjonstidslinjeJanuar = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje - val expected = Beløpstidslinje.fra(1.januar til 15.januar, INGEN, kildeSaksbehandler) + Beløpstidslinje.fra(16.januar til 31.januar, INNTEKT / 2, kildeSaksbehandler) + val kildeSaksbehandler = + Kilde(overstyring.metadata.meldingsreferanseId, Avsender.SAKSBEHANDLER, tidsstempel) + val refusjonstidslinjeJanuar = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje + val expected = Beløpstidslinje.fra( + 1.januar til 15.januar, + INGEN, + kildeSaksbehandler + ) + Beløpstidslinje.fra(16.januar til 31.januar, INNTEKT / 2, kildeSaksbehandler) assertEquals(expected, refusjonstidslinjeJanuar) } } @@ -846,30 +1334,56 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { inntekt = INNTEKT, forklaring = "forklaring", refusjonsopplysninger = listOf( - Triple(1.januar, 31.januar, INGEN), Triple(1.februar, null, INNTEKT/2), + Triple(1.januar, 31.januar, INGEN), + Triple(1.februar, null, INNTEKT / 2), ) ), OverstyrtArbeidsgiveropplysning( orgnummer = a2, inntekt = INNTEKT, forklaring = "forklaring", - refusjonsopplysninger = listOf(Triple(1.januar, 31.januar, INGEN), Triple(1.februar, null, INNTEKT / 2)) + refusjonsopplysninger = listOf( + Triple(1.januar, 31.januar, INGEN), + Triple(1.februar, null, INNTEKT / 2) + ) ) ), tidsstempel = tidsstempel ) - val refusjonstidslinjeJanuar = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje - val refusjonstidslinjeFebruar = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje + val refusjonstidslinjeJanuar = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje + val refusjonstidslinjeFebruar = + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje - assertEquals(Beløpstidslinje.fra(1.januar til 31.januar, INGEN, kildeSaksbehandler), refusjonstidslinjeJanuar) - assertEquals(Beløpstidslinje.fra(1.februar til 28.februar, INNTEKT / 2, kildeSaksbehandler), refusjonstidslinjeFebruar) + assertEquals( + Beløpstidslinje.fra(1.januar til 31.januar, INGEN, kildeSaksbehandler), + refusjonstidslinjeJanuar + ) + assertEquals( + Beløpstidslinje.fra( + 1.februar til 28.februar, + INNTEKT / 2, + kildeSaksbehandler + ), refusjonstidslinjeFebruar + ) } a2 { - val refusjonstidslinjeJanuar = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje - val refusjonstidslinjeFebruar = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje + val refusjonstidslinjeJanuar = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje + val refusjonstidslinjeFebruar = + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().refusjonstidslinje - assertEquals(Beløpstidslinje.fra(1.januar til 31.januar, INGEN, kildeSaksbehandler), refusjonstidslinjeJanuar) - assertEquals(Beløpstidslinje.fra(1.februar til 28.februar, INNTEKT / 2, kildeSaksbehandler), refusjonstidslinjeFebruar) + assertEquals( + Beløpstidslinje.fra(1.januar til 31.januar, INGEN, kildeSaksbehandler), + refusjonstidslinjeJanuar + ) + assertEquals( + Beløpstidslinje.fra( + 1.februar til 28.februar, + INNTEKT / 2, + kildeSaksbehandler + ), refusjonstidslinjeFebruar + ) } } @@ -907,7 +1421,10 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { @Test fun `Inntektsmelding kommer før søknad`() { a1 { - håndterInntektsmelding(listOf(1.januar til 16.januar), refusjon = Inntektsmelding.Refusjon(INNTEKT, 31.mars, emptyList())) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + refusjon = Inntektsmelding.Refusjon(INNTEKT, 31.mars, emptyList()) + ) assertInfo("Refusjonsservitøren har rester for 01-01-2018 etter servering: 01-01-2018 til 01-04-2018") } } @@ -930,7 +1447,10 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - assertEquals(INNTEKT, inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje[1.februar].beløp) + assertEquals( + INNTEKT, + inspektør.vedtaksperioder(2.vedtaksperiode).refusjonstidslinje[1.februar].beløp + ) } } @@ -938,9 +1458,18 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { fun `Endrer refusjon midt i en periode`() { a1 { nyttVedtak(januar) - assertEquals(INNTEKT, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[19.januar].beløp) - assertEquals(INNTEKT, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[20.januar].beløp) - assertEquals(INNTEKT, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[21.januar].beløp) + assertEquals( + INNTEKT, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[19.januar].beløp + ) + assertEquals( + INNTEKT, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[20.januar].beløp + ) + assertEquals( + INNTEKT, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[21.januar].beløp + ) håndterOverstyrArbeidsgiveropplysninger( 1.januar, listOf( @@ -953,9 +1482,18 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { ) ) håndterYtelser(1.vedtaksperiode) - assertEquals(INNTEKT, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[19.januar].beløp) - assertEquals(INNTEKT / 2, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[20.januar].beløp) - assertEquals(INNTEKT, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[21.januar].beløp) + assertEquals( + INNTEKT, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[19.januar].beløp + ) + assertEquals( + INNTEKT / 2, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[20.januar].beløp + ) + assertEquals( + INNTEKT, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[21.januar].beløp + ) } } @@ -968,8 +1506,14 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { refusjon = Inntektsmelding.Refusjon(INNTEKT / 2, null), beregnetInntekt = INNTEKT ) - assertEquals(INNTEKT, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[19.januar].beløp) - assertEquals(INNTEKT / 2, inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[20.januar].beløp) + assertEquals( + INNTEKT, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[19.januar].beløp + ) + assertEquals( + INNTEKT / 2, + inspektør.vedtaksperioder(1.vedtaksperiode).refusjonstidslinje[20.januar].beløp + ) } private fun nyttVedtak( @@ -986,7 +1530,11 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { INNTEKT, førsteFraværsdag = periode.start, mottatt = tidsstempel, - refusjon = Inntektsmelding.Refusjon(INNTEKT, opphørsdato = opphørAvRefusjon, endringerIRefusjon = endringerIRefusjon) + refusjon = Inntektsmelding.Refusjon( + INNTEKT, + opphørsdato = opphørAvRefusjon, + endringerIRefusjon = endringerIRefusjon + ) ) håndterVilkårsgrunnlag(vedtaksperiode.vedtaksperiode) håndterYtelser(vedtaksperiode.vedtaksperiode) @@ -996,5 +1544,7 @@ internal class RefusjonsopplysningerPåBehandlingE2ETest : AbstractDslTest() { return im } - private fun gjenopprettBeløpstislinjeFor(dato: LocalDate) = dto().tilPersonData().arbeidsgivere.single().ubrukteRefusjonsopplysninger[dato]?.tilDto()?.let { Beløpstidslinje.gjenopprett(it) } ?: Beløpstidslinje() -} \ No newline at end of file + private fun gjenopprettBeløpstislinjeFor(dato: LocalDate) = + dto().tilPersonData().arbeidsgivere.single().ubrukteRefusjonsopplysninger[dato]?.tilDto() + ?.let { Beløpstidslinje.gjenopprett(it) } ?: Beløpstidslinje() +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RevurderingAvRefusjonE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RevurderingAvRefusjonE2ETest.kt index eb2806891a..4000a13133 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RevurderingAvRefusjonE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/refusjon/RevurderingAvRefusjonE2ETest.kt @@ -29,13 +29,17 @@ internal class RevurderingAvRefusjonE2ETest : AbstractDslTest() { nyttVedtak(januar) assertSubsumsjoner { assertEquals(1, antallSubsumsjoner(this)) } - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(a1, INNTEKT, "ingen endring", null, listOf( + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + a1, INNTEKT, "ingen endring", null, listOf( Triple(25.januar, null, INGEN) - )) - )) + ) + ) + ) + ) håndterYtelser(1.vedtaksperiode) assertSubsumsjoner { assertEquals(1, antallSubsumsjoner(this)) } } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest.kt index 17e2b91b03..30c277e314 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest.kt @@ -35,14 +35,28 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : AbstractEndToEndTest() { +internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : + AbstractEndToEndTest() { @Test fun `AUU med infotrygdperiode rett før skal omgjøres`() { nyPeriode(5.januar til 20.januar) nullstillTilstandsendringer() - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 4.januar, 100.prosent, INNTEKT)) - assertForkastetPeriodeTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD, varselkode = RV_IT_14) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 4.januar, + 100.prosent, + INNTEKT + ) + ) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD, + varselkode = RV_IT_14 + ) assertIngenOverlappendeInfotrygdutbetaling() } @@ -51,11 +65,25 @@ internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : A nyPeriode(5.januar til 20.januar) nyttVedtak(21.januar til 31.januar, arbeidsgiverperiode = listOf(5.januar til 20.januar)) nullstillTilstandsendringer() - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 4.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 4.januar, + 100.prosent, + INNTEKT + ) + ) assertVarsel(RV_IT_14, 1.vedtaksperiode.filter()) assertVarsel(RV_IT_38, 1.vedtaksperiode.filter()) håndterVilkårsgrunnlag(1.vedtaksperiode) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK + ) assertIngenOverlappendeInfotrygdutbetaling() } @@ -63,7 +91,15 @@ internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : A fun `helt overlappende infotrygd`() { nyPeriode(5.januar til 20.januar) nullstillTilstandsendringer() - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 5.januar, 20.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 5.januar, + 20.januar, + 100.prosent, + INNTEKT + ) + ) assertVarsel(RV_IT_3, 1.vedtaksperiode.filter()) assertForkastetPeriodeTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) assertIngenOverlappendeInfotrygdutbetaling() @@ -73,7 +109,15 @@ internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : A fun `delvis overlappende infotrygd`() { nyPeriode(5.januar til 20.januar) nullstillTilstandsendringer() - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 5.januar, 15.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 5.januar, + 15.januar, + 100.prosent, + INNTEKT + ) + ) assertVarsel(RV_IT_3, 1.vedtaksperiode.filter()) assertForkastetPeriodeTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) assertIngenOverlappendeInfotrygdutbetaling() @@ -84,10 +128,23 @@ internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : A nyPeriode(5.januar til 20.januar) nyttVedtak(21.januar til 31.januar, arbeidsgiverperiode = listOf(5.januar til 20.januar)) nullstillTilstandsendringer() - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 5.januar, 15.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 5.januar, + 15.januar, + 100.prosent, + INNTEKT + ) + ) assertVarsel(RV_IT_3, 1.vedtaksperiode.filter()) assertVarsel(RV_IT_38, 1.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertOverlappendeInfotrygdutbetalingIAUU(1.vedtaksperiode, "AVVENTER_BLOKKERENDE_PERIODE") } @@ -97,10 +154,23 @@ internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : A nyPeriode(5.januar til 20.januar) nyttVedtak(21.januar til 31.januar, arbeidsgiverperiode = listOf(5.januar til 20.januar)) nullstillTilstandsendringer() - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 5.januar, 18.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 5.januar, + 18.januar, + 100.prosent, + INNTEKT + ) + ) assertVarsel(RV_IT_3, 1.vedtaksperiode.filter()) assertVarsel(RV_IT_38, 1.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) assertOverlappendeInfotrygdutbetalingIAUU(1.vedtaksperiode, "AVVENTER_BLOKKERENDE_PERIODE") } @@ -109,10 +179,23 @@ internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : A nyPeriode(5.januar til 20.januar) nullstillTilstandsendringer() håndterSøknad(Sykdom(1.januar(2023), 31.januar(2023), 100.prosent)) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 5.januar, 20.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 5.januar, + 20.januar, + 100.prosent, + INNTEKT + ) + ) assertVarsel(RV_IT_3, 1.vedtaksperiode.filter()) assertForkastetPeriodeTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) assertIngenOverlappendeInfotrygdutbetaling() } @@ -122,8 +205,21 @@ internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : A nyttVedtak(21.januar til 31.januar, arbeidsgiverperiode = listOf(5.januar til 20.januar)) nullstillTilstandsendringer() håndterSøknad(Sykdom(1.januar(2023), 31.januar(2023), 100.prosent)) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 5.januar, 20.januar, 100.prosent, INNTEKT)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 5.januar, + 20.januar, + 100.prosent, + INNTEKT + ) + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) assertVarsel(RV_IT_3) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) @@ -136,10 +232,23 @@ internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : A nyttVedtak(21.januar til 31.januar, arbeidsgiverperiode = listOf(5.januar til 20.januar)) nullstillTilstandsendringer() håndterSøknad(Sykdom(1.januar(2023), 31.januar(2023), 100.prosent)) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.januar, 4.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.januar, + 4.januar, + 100.prosent, + INNTEKT + ) + ) assertVarsel(RV_IT_14, 1.vedtaksperiode.filter()) assertVarsel(RV_IT_38, 1.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) assertIngenOverlappendeInfotrygdutbetaling() @@ -147,12 +256,19 @@ internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : A @Test fun `Periodene omgjøres i riktig rekkefølge`() { - håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent), orgnummer = a1) // Denne bare for at a1 skal være først i lista for arbeidsgivere + håndterSøknad( + Sykdom(1.januar, 16.januar, 100.prosent), + orgnummer = a1 + ) // Denne bare for at a1 skal være først i lista for arbeidsgivere håndterSøknad(Sykdom(1.mars, 16.mars, 100.prosent), orgnummer = a2) håndterInntektsmelding(listOf(1.mars til 16.mars), orgnummer = a2) håndterSøknad(Sykdom(1.mai, 16.mai, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.mai til 16.mai), orgnummer = a1, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mai til 16.mai), + orgnummer = a1, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) nullstillTilstandsendringer() @@ -161,15 +277,35 @@ internal class ReberegningAvAvsluttetUtenUtbetalingEtterInfotrygdEndringTest : A ArbeidsgiverUtbetalingsperiode(a1, 1.mai, 5.mai, 100.prosent, INNTEKT) ) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, orgnummer = a2) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + orgnummer = a2 + ) } - private fun assertOverlappendeInfotrygdutbetalingIAUU(vedtaksperiode: IdInnhenter, tilstand: String) { + private fun assertOverlappendeInfotrygdutbetalingIAUU( + vedtaksperiode: IdInnhenter, + tilstand: String + ) { val overlapp = observatør.overlappendeInfotrygdperioder.last() val vedtaksperiodeId = vedtaksperiode.id(ORGNUMMER) - assertEquals(vedtaksperiodeId, overlapp.overlappendeInfotrygdperioder.find { it.vedtaksperiodeId == vedtaksperiodeId }?.vedtaksperiodeId) - assertEquals(tilstand, overlapp.overlappendeInfotrygdperioder.find { it.vedtaksperiodeId == vedtaksperiodeId }?.vedtaksperiodetilstand) + assertEquals( + vedtaksperiodeId, + overlapp.overlappendeInfotrygdperioder.find { it.vedtaksperiodeId == vedtaksperiodeId }?.vedtaksperiodeId + ) + assertEquals( + tilstand, + overlapp.overlappendeInfotrygdperioder.find { it.vedtaksperiodeId == vedtaksperiodeId }?.vedtaksperiodetilstand + ) } private fun assertIngenOverlappendeInfotrygdutbetaling() { diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/ReberegningAvAvsluttetUtenUtbetalingNyE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/ReberegningAvAvsluttetUtenUtbetalingNyE2ETest.kt index 01bb2b7c66..7a53a9f120 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/ReberegningAvAvsluttetUtenUtbetalingNyE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/ReberegningAvAvsluttetUtenUtbetalingNyE2ETest.kt @@ -103,7 +103,10 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nyttVedtak(januar) nyPeriode(10.august til 20.august) - håndterInntektsmelding(listOf(1.august til 16.august), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.august til 16.august), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -111,8 +114,14 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT val førsteUtbetaling = inspektør.utbetaling(0) inspektør.utbetaling(1).also { utbetalingInspektør -> assertNotEquals(førsteUtbetaling.korrelasjonsId, utbetalingInspektør.korrelasjonsId) - assertNotEquals(førsteUtbetaling.arbeidsgiverOppdrag.inspektør.fagsystemId(), utbetalingInspektør.arbeidsgiverOppdrag.inspektør.fagsystemId()) - assertNotEquals(førsteUtbetaling.personOppdrag.inspektør.fagsystemId(), utbetalingInspektør.personOppdrag.inspektør.fagsystemId()) + assertNotEquals( + førsteUtbetaling.arbeidsgiverOppdrag.inspektør.fagsystemId(), + utbetalingInspektør.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) + assertNotEquals( + førsteUtbetaling.personOppdrag.inspektør.fagsystemId(), + utbetalingInspektør.personOppdrag.inspektør.fagsystemId() + ) assertEquals(1.august til 20.august, utbetalingInspektør.periode) } } @@ -125,8 +134,18 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterSøknad(Sykdom(9.februar, 20.februar, 100.prosent)) nullstillTilstandsendringer() håndterInntektsmelding(listOf(10.januar til 25.januar)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) assertTrue((21.januar til 25.januar).all { inspektør.sykdomstidslinje[it] is Dag.UkjentDag }) @@ -139,7 +158,12 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nyttVedtak(mars, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) nullstillTilstandsendringer() håndterInntektsmelding(listOf(1.januar til 16.januar)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -154,10 +178,23 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nyttVedtak(mars, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) nullstillTilstandsendringer() - håndterInntektsmelding(listOf(10.januar til 25.januar), vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(10.januar til 25.januar), + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -166,15 +203,31 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterSykmelding(Sykmeldingsperiode(12.januar, 20.januar)) håndterSøknad(Sykdom(12.januar, 20.januar, 100.prosent)) nyttVedtak(mars, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) - håndterInntektsmelding(listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) håndterSykmelding(Sykmeldingsperiode(1.mai, 15.mai)) håndterSykmelding(Sykmeldingsperiode(16.mai, 28.mai)) håndterSøknad(Sykdom(1.mai, 15.mai, 100.prosent)) håndterSøknad(Sykdom(16.mai, 28.mai, 100.prosent)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) assertTilstander(4.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) } @@ -185,7 +238,12 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nullstillTilstandsendringer() håndterInntektsmelding(listOf(5.januar til 20.januar)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -219,7 +277,8 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) nullstillTilstandsendringer() håndterUtbetalingshistorikkEtterInfotrygdendring( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 17.januar, 27.januar, 100.prosent, INNTEKT), inntektshistorikk = listOf( + ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 17.januar, 27.januar, 100.prosent, INNTEKT), + inntektshistorikk = listOf( Inntektsopplysning(ORGNUMMER, 17.januar, INNTEKT, true) ) ) @@ -242,7 +301,8 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) nullstillTilstandsendringer() håndterUtbetalingshistorikkEtterInfotrygdendring( - PersonUtbetalingsperiode(ORGNUMMER, 1.januar, 27.januar, 100.prosent, INNTEKT), inntektshistorikk = listOf( + PersonUtbetalingsperiode(ORGNUMMER, 1.januar, 27.januar, 100.prosent, INNTEKT), + inntektshistorikk = listOf( Inntektsopplysning(ORGNUMMER, 1.januar, INNTEKT, false) ) ) @@ -263,11 +323,16 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterSykmelding(Sykmeldingsperiode(21.januar, 27.januar), orgnummer = a2) håndterSøknad(Sykdom(21.januar, 27.januar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT, orgnummer = a2) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT, + orgnummer = a2 + ) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT, orgnummer = a2) nullstillTilstandsendringer() håndterUtbetalingshistorikkEtterInfotrygdendring( - PersonUtbetalingsperiode(a2, 1.januar, 27.januar, 100.prosent, INNTEKT), inntektshistorikk = listOf( + PersonUtbetalingsperiode(a2, 1.januar, 27.januar, 100.prosent, INNTEKT), + inntektshistorikk = listOf( Inntektsopplysning(a2, 1.januar, INNTEKT, false) ) ) @@ -302,7 +367,16 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertEquals(2, vedtaksperiode1Utbetalinger.size) assertEquals(0, vedtaksperiode2Utbetalinger.size) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + AVSLUTTET + ) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) } @@ -326,8 +400,16 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterUtbetalingsgodkjenning(1.vedtaksperiode, utbetalingGodkjent = false) assertForkastetPeriodeTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(3.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) } @Test @@ -350,7 +432,11 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterUtbetalingsgodkjenning(1.vedtaksperiode, utbetalingGodkjent = false) assertForkastetPeriodeTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) assertForkastetPeriodeTilstander(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) } @@ -371,7 +457,12 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 31.januar, beregnetInntekt = INNTEKT, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 31.januar, + beregnetInntekt = INNTEKT, + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -380,8 +471,16 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterUtbetalingsgodkjenning(1.vedtaksperiode, utbetalingGodkjent = false) assertForkastetPeriodeTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(3.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) } @Test @@ -397,10 +496,23 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) - håndterInntektsmelding(listOf(10.januar til 20.januar, 28.januar til 1.februar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(10.januar til 20.januar, 28.januar til 1.februar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTrue(inspektør.sykdomstidslinje[21.januar] is Dag.FriskHelgedag) assertTrue(inspektør.sykdomstidslinje[27.januar] is Dag.FriskHelgedag) @@ -439,15 +551,28 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertSisteTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(3.vedtaksperiode, AVSLUTTET) - håndterInntektsmelding(listOf(10.januar til 20.januar, 28.januar til 1.februar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(10.januar til 20.januar, 28.januar til 1.februar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @Test - fun `støtter omgjøring om det er utbetalt en senere periode på nyere skjæringstidspunkt`() { + fun `støtter omgjøring om det er utbetalt en senere periode på nyere skjæringstidspunkt`() { håndterSykmelding(Sykmeldingsperiode(19.januar, 20.januar)) håndterSøknad(Sykdom(18.januar, 20.januar, 100.prosent)) @@ -461,10 +586,23 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertSisteTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertSisteTilstand(3.vedtaksperiode, AVSLUTTET) - håndterInntektsmelding(listOf(10.januar til 20.januar, 28.januar til 1.februar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(10.januar til 20.januar, 28.januar til 1.februar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -491,8 +629,18 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT // assertNoWarnings(2.vedtaksperiode.filter(a1)) assertIngenVarsler(3.vedtaksperiode.filter(a1)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) } @@ -519,8 +667,18 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertIngenVarsler(2.vedtaksperiode.filter()) assertVarsel(RV_IM_4, 3.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(3.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE) } @@ -535,8 +693,18 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nullstillTilstandsendringer() håndterInntektsmelding(listOf(10.januar til 25.januar)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -553,7 +721,12 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nullstillTilstandsendringer() håndterInntektsmelding(listOf(5.januar til 20.januar)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_INNTEKTSMELDING) assertTilstander(3.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_INNTEKTSMELDING) } @@ -572,8 +745,18 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nullstillTilstandsendringer() håndterInntektsmelding(listOf(5.januar til 20.januar)) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(3.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_INNTEKTSMELDING) } @@ -584,8 +767,22 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterSykmelding(Sykmeldingsperiode(21.januar, 31.januar)) håndterSøknad(Sykdom(21.januar, 31.januar, 100.prosent)) håndterInntektsmelding(listOf(5.januar til 20.januar)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -601,10 +798,28 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nullstillTilstandsendringer() håndterInntektsmelding(listOf(10.januar til 25.januar)) - håndterInntektsmelding(listOf(10.januar til 25.januar), 30.januar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(10.januar til 25.januar), + 30.januar, + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) } @@ -620,11 +835,31 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterSøknad(Sykdom(30.januar, 31.januar, 100.prosent)) nullstillTilstandsendringer() - håndterInntektsmelding(listOf(10.januar til 25.januar), 30.januar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) - håndterInntektsmelding(listOf(10.januar til 25.januar), vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(10.januar til 25.januar), + 30.januar, + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) + håndterInntektsmelding( + listOf(10.januar til 25.januar), + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertTilstander(3.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) } @@ -645,9 +880,24 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nullstillTilstandsendringer() håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a2) } @@ -668,10 +918,25 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nullstillTilstandsendringer() håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a2) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a1) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) } @Test @@ -691,9 +956,24 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nullstillTilstandsendringer() håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a2) nullstillTilstandsendringer() @@ -703,13 +983,29 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) - assertEquals("FLERE_ARBEIDSGIVERE", person.personLogg.sisteBehov(Godkjenning).detaljer()["inntektskilde"] as? String) + assertEquals( + "FLERE_ARBEIDSGIVERE", + person.personLogg.sisteBehov(Godkjenning).detaljer()["inntektskilde"] as? String + ) assertEquals(FLERE_ARBEIDSGIVERE, inspektør(a1).inntektskilde(1.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + orgnummer = a1 + ) assertTilstander(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) } @Test @@ -729,31 +1025,73 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nullstillTilstandsendringer() håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a2) nullstillTilstandsendringer() håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a2) - assertTilstander(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + orgnummer = a1 + ) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) assertTilstander(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) håndterVilkårsgrunnlag(1.vedtaksperiode, orgnummer = a1) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) - assertEquals("FLERE_ARBEIDSGIVERE", person.personLogg.sisteBehov(Godkjenning).detaljer()["inntektskilde"] as? String) + assertEquals( + "FLERE_ARBEIDSGIVERE", + person.personLogg.sisteBehov(Godkjenning).detaljer()["inntektskilde"] as? String + ) assertEquals(FLERE_ARBEIDSGIVERE, inspektør(a1).inntektskilde(1.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + orgnummer = a1 + ) assertTilstander(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) nullstillTilstandsendringer() håndterUtbetalt(orgnummer = a1) @@ -762,7 +1100,15 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a2) assertTilstander(1.vedtaksperiode, TIL_UTBETALING, AVSLUTTET, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + orgnummer = a2 + ) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) @@ -771,7 +1117,12 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) assertTilstander(1.vedtaksperiode, TIL_UTBETALING, AVSLUTTET, orgnummer = a2) - assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, orgnummer = a1) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + orgnummer = a1 + ) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) } @@ -815,12 +1166,45 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT orgnummer = a1, ) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING, orgnummer = a2) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, orgnummer = a1) - assertTilstander(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) - assertTilstander(3.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) - assertTilstander(4.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING, + orgnummer = a2 + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + orgnummer = a1 + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) + assertTilstander( + 3.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) + assertTilstander( + 4.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a1 + ) } @Test @@ -858,12 +1242,42 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT nullstillTilstandsendringer() håndterUtbetalingsgodkjenning(2.vedtaksperiode, utbetalingGodkjent = false, orgnummer = a1) - assertForkastetPeriodeTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD, orgnummer = a1) - assertForkastetPeriodeTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD, orgnummer = a2) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, TIL_INFOTRYGD, orgnummer = a1) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD, orgnummer = a2) - assertForkastetPeriodeTilstander(3.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD, orgnummer = a1) - assertForkastetPeriodeTilstander(4.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD, orgnummer = a1) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD, + orgnummer = a1 + ) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD, + orgnummer = a2 + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + TIL_INFOTRYGD, + orgnummer = a1 + ) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD, + orgnummer = a2 + ) + assertForkastetPeriodeTilstander( + 3.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD, + orgnummer = a1 + ) + assertForkastetPeriodeTilstander( + 4.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD, + orgnummer = a1 + ) } @Test @@ -879,12 +1293,29 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertSisteTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING) nullstillTilstandsendringer() - val utbetalinger = listOf(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 17.januar, 20.januar, 100.prosent, INNTEKT)) + val utbetalinger = listOf( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 17.januar, + 20.januar, + 100.prosent, + INNTEKT + ) + ) val inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 1.januar, INNTEKT, true)) - håndterUtbetalingshistorikkEtterInfotrygdendring(*utbetalinger.toTypedArray(), inntektshistorikk = inntektshistorikk) + håndterUtbetalingshistorikkEtterInfotrygdendring( + *utbetalinger.toTypedArray(), + inntektshistorikk = inntektshistorikk + ) håndterYtelser(1.vedtaksperiode) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) assertVarsel(RV_IT_3, 1.vedtaksperiode.filter()) assertIngenVarsel(RV_IT_1, 1.vedtaksperiode.filter()) } @@ -915,7 +1346,10 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertVarsel(RV_IM_4, 1.vedtaksperiode.filter()) assertVarsel(RV_IM_24, 1.vedtaksperiode.filter()) assertEquals(22.januar til 11.februar, inspektør.periode(1.vedtaksperiode)) - assertEquals("UUUUUGG UUUUUGG SSSSSHH SSSSSHH SS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "UUUUUGG UUUUUGG SSSSSHH SSSSSHH SS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -935,14 +1369,20 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - assertEquals(riktigInntekt, vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.sykepengegrunnlag) + assertEquals( + riktigInntekt, + vilkårsgrunnlag.inspektør.inntektsgrunnlag.inspektør.sykepengegrunnlag + ) val utbetaling = inspektør.gjeldendeUtbetalingForVedtaksperiode(1.vedtaksperiode) val utbetalingInspektør = utbetaling.inspektør val førsteUtbetalingsdag = utbetalingInspektør.utbetalingstidslinje[7.februar] assertEquals(riktigInntekt, førsteUtbetalingsdag.økonomi.inspektør.aktuellDagsinntekt) - assertEquals(riktigInntekt, førsteUtbetalingsdag.økonomi.inspektør.arbeidsgiverRefusjonsbeløp) + assertEquals( + riktigInntekt, + førsteUtbetalingsdag.økonomi.inspektør.arbeidsgiverRefusjonsbeløp + ) assertTilstander( 1.vedtaksperiode, @@ -980,7 +1420,14 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertTrue(inspektør.sykdomstidslinje[10.februar] is Dag.ArbeidsgiverHelgedag) assertTrue(inspektør.sykdomstidslinje[11.februar] is Dag.ArbeidsgiverHelgedag) assertTrue(inspektør.sykdomstidslinje[13.februar] is Dag.Arbeidsgiverdag) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -989,7 +1436,11 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterSykmelding(Sykmeldingsperiode(10.januar, 25.januar), orgnummer = a1) håndterSøknad(Sykdom(10.januar, 25.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = beregnetInntektA1, orgnummer = a1) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = beregnetInntektA1, + orgnummer = a1 + ) val inntekter = listOf( grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), beregnetInntektA1.repeat(3)), @@ -1033,7 +1484,11 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT fun `revurdere etter at én arbeidsgiver har blitt til to`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), orgnummer = a1) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a1) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = INNTEKT, orgnummer = a1) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = INNTEKT, + orgnummer = a1 + ) håndterVilkårsgrunnlag( 1.vedtaksperiode, orgnummer = a1, inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( @@ -1043,8 +1498,16 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) @@ -1060,9 +1523,11 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars), orgnummer = a1) håndterSøknad(Sykdom(1.mars, 31.mars, 100.prosent), orgnummer = a1) - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(27.februar, Dagtype.Feriedag) - ), orgnummer = a1) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(27.februar, Dagtype.Feriedag) + ), orgnummer = a1 + ) håndterYtelser(2.vedtaksperiode, orgnummer = a1) håndterSimulering(2.vedtaksperiode, orgnummer = a1) @@ -1095,7 +1560,11 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertFunksjonellFeil(RV_SØ_13, 1.vedtaksperiode.filter()) assertForkastetPeriodeTilstander(3.vedtaksperiode, START, TIL_INFOTRYGD) assertForkastetPeriodeTilstander(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, TIL_INFOTRYGD) - assertForkastetPeriodeTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 2.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + TIL_INFOTRYGD + ) } @Test @@ -1141,15 +1610,34 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT @Test fun `allerede utbetalt i Infotrygd uten utbetaling etterpå`() { nyPeriode(2.januar til 17.januar) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 17.januar, 17.januar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 17.januar, + 17.januar, + 100.prosent, + INNTEKT + ) + ) assertVarsel(RV_IT_3, 1.vedtaksperiode.filter()) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) } @Test fun `omgjøring med funksjonell feil i inntektsmelding fra Altinn eller LPS`() { håndterSøknad(Sykdom(2.januar, 17.januar, 100.prosent)) - nyttVedtak(18.januar til 31.januar, arbeidsgiverperiode = listOf(2.januar til 17.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + nyttVedtak( + 18.januar til 31.januar, + arbeidsgiverperiode = listOf(2.januar til 17.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) nullstillTilstandsendringer() val im = håndterInntektsmelding( listOf(1.januar til 16.januar), @@ -1162,7 +1650,12 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT assertInntektshistorikkForDato(INNTEKT, 1.januar, inspektør) assertTrue(im in observatør.inntektsmeldingIkkeHåndtert) assertFunksjonellFeil(RV_IM_8, 1.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.let { assertEquals(4, it.size) assertTrue(it.all { behalding -> behalding.tilstand == AVSLUTTET_UTEN_VEDTAK }) @@ -1173,7 +1666,11 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT @Test fun `omgjøring med funksjonell feil i inntektsmelding fra portalen`() { håndterSøknad(Sykdom(2.januar, 17.januar, 100.prosent)) - nyttVedtak(18.januar til 31.januar, arbeidsgiverperiode = listOf(2.januar til 17.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + nyttVedtak( + 18.januar til 31.januar, + arbeidsgiverperiode = listOf(2.januar til 17.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) nullstillTilstandsendringer() val im = håndterInntektsmelding( listOf(1.januar til 16.januar), @@ -1195,7 +1692,12 @@ internal class ReberegningAvAvsluttetUtenUtbetalingNyE2ETest : AbstractEndToEndT ) assertFunksjonellFeil(RV_IM_8, 1.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.let { assertEquals(4, it.size) assertTrue(it.all { behalding -> behalding.tilstand == AVSLUTTET_UTEN_VEDTAK }) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderInntektFlereArbeidsgivereTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderInntektFlereArbeidsgivereTest.kt index 0a1748eb43..d74f99d9ae 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderInntektFlereArbeidsgivereTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderInntektFlereArbeidsgivereTest.kt @@ -37,7 +37,7 @@ import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { +internal class RevurderInntektFlereArbeidsgivereTest : AbstractDslTest() { @Test fun `over 6G -- revurder inntekt ned på a1 når begge er i Avsluttet`() { @@ -83,30 +83,73 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { } } + @Test fun `over 6G -- revurder inntekt opp på a1 påvirker ikke utbetaling når refusjon er uendret`() { (a1 og a2).nyeVedtak(januar, inntekt = 32000.månedlig) - a1 { assertDag(17.januar, 1081.0.daglig, aktuellDagsinntekt = 32000.månedlig, personbeløp = INGEN) } - a2 { assertDag(17.januar, 1080.0.daglig, aktuellDagsinntekt = 32000.månedlig, personbeløp = INGEN) } + a1 { + assertDag( + 17.januar, + 1081.0.daglig, + aktuellDagsinntekt = 32000.månedlig, + personbeløp = INGEN + ) + } + a2 { + assertDag( + 17.januar, + 1080.0.daglig, + aktuellDagsinntekt = 32000.månedlig, + personbeløp = INGEN + ) + } a1 { håndterOverstyrInntekt(1.januar, 33000.månedlig) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) - assertDag(17.januar, 1081.0.daglig, aktuellDagsinntekt = 33000.månedlig, personbeløp = INGEN) + assertDag( + 17.januar, + 1081.0.daglig, + aktuellDagsinntekt = 33000.månedlig, + personbeløp = INGEN + ) } a2 { håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) - assertDag(17.januar, 1080.0.daglig, aktuellDagsinntekt = 32000.månedlig, personbeløp = INGEN) - assertIngenInfo("En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", AktivitetsloggFilter.person()) + assertDag( + 17.januar, + 1080.0.daglig, + aktuellDagsinntekt = 32000.månedlig, + personbeløp = INGEN + ) + assertIngenInfo( + "En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", + AktivitetsloggFilter.person() + ) } } + @Test fun `over 6G -- revurder inntekt opp på a1 påvirker utbetaling når refusjon er endret`() { (a1 og a2).nyeVedtak(januar, inntekt = 32000.månedlig) - a1 { assertDag(17.januar, 1081.0.daglig, aktuellDagsinntekt = 32000.månedlig, personbeløp = INGEN) } - a2 { assertDag(17.januar, 1080.0.daglig, aktuellDagsinntekt = 32000.månedlig, personbeløp = INGEN) } + a1 { + assertDag( + 17.januar, + 1081.0.daglig, + aktuellDagsinntekt = 32000.månedlig, + personbeløp = INGEN + ) + } + a2 { + assertDag( + 17.januar, + 1080.0.daglig, + aktuellDagsinntekt = 32000.månedlig, + personbeløp = INGEN + ) + } a1 { håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 33000.månedlig) @@ -115,15 +158,28 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertDag(17.januar, 1097.0.daglig, aktuellDagsinntekt = 33000.månedlig, personbeløp = INGEN) + assertDag( + 17.januar, + 1097.0.daglig, + aktuellDagsinntekt = 33000.månedlig, + personbeløp = INGEN + ) } a2 { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertDag(17.januar, 1064.0.daglig, aktuellDagsinntekt = 32000.månedlig, personbeløp = INGEN) - assertInfo("En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", AktivitetsloggFilter.person()) + assertDag( + 17.januar, + 1064.0.daglig, + aktuellDagsinntekt = 32000.månedlig, + personbeløp = INGEN + ) + assertInfo( + "En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", + AktivitetsloggFilter.person() + ) } } @@ -147,13 +203,24 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertIngenInfo("En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", AktivitetsloggFilter.person()) + assertIngenInfo( + "En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", + AktivitetsloggFilter.person() + ) } } + @Test fun `under 6G -- revurder inntekt opp på a1 gir brukerutbetaling når refusjon er uendret`() { (a1 og a2).nyeVedtak(januar, inntekt = 15000.månedlig) - (a1 og a2) { assertDag(17.januar, 692.0.daglig, aktuellDagsinntekt = 15000.månedlig, personbeløp = INGEN) } + (a1 og a2) { + assertDag( + 17.januar, + 692.0.daglig, + aktuellDagsinntekt = 15000.månedlig, + personbeløp = INGEN + ) + } a1 { håndterOverstyrInntekt(1.januar, 16500.månedlig) @@ -161,19 +228,40 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertDag(17.januar, 692.0.daglig, aktuellDagsinntekt = 16500.månedlig, personbeløp = 70.daglig) + assertDag( + 17.januar, + 692.0.daglig, + aktuellDagsinntekt = 16500.månedlig, + personbeløp = 70.daglig + ) } a2 { håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) - assertDag(17.januar, 692.0.daglig, aktuellDagsinntekt = 15000.månedlig, personbeløp = INGEN) - assertIngenInfo("En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", AktivitetsloggFilter.person()) + assertDag( + 17.januar, + 692.0.daglig, + aktuellDagsinntekt = 15000.månedlig, + personbeløp = INGEN + ) + assertIngenInfo( + "En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", + AktivitetsloggFilter.person() + ) } } + @Test fun `under 6G -- revurder inntekt opp på a1 gir økt arbeidsgiverutbetaling når refusjon er endret`() { (a1 og a2).nyeVedtak(januar, inntekt = 15000.månedlig) - (a1 og a2) { assertDag(17.januar, 692.0.daglig, aktuellDagsinntekt = 15000.månedlig, personbeløp = INGEN) } + (a1 og a2) { + assertDag( + 17.januar, + 692.0.daglig, + aktuellDagsinntekt = 15000.månedlig, + personbeløp = INGEN + ) + } a1 { håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 16500.månedlig) @@ -182,13 +270,26 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertDag(17.januar, 762.0.daglig, aktuellDagsinntekt = 16500.månedlig, personbeløp = INGEN) + assertDag( + 17.januar, + 762.0.daglig, + aktuellDagsinntekt = 16500.månedlig, + personbeløp = INGEN + ) } a2 { håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) - assertDag(17.januar, 692.0.daglig, aktuellDagsinntekt = 15000.månedlig, personbeløp = INGEN) - assertIngenInfo("En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", AktivitetsloggFilter.person()) + assertDag( + 17.januar, + 692.0.daglig, + aktuellDagsinntekt = 15000.månedlig, + personbeløp = INGEN + ) + assertIngenInfo( + "En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", + AktivitetsloggFilter.person() + ) } } @@ -253,8 +354,18 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode) @@ -374,8 +485,18 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode) @@ -421,6 +542,7 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } } + @Test fun `revurder inntekt når a1 står i AvventerSimuleringRevurdering`() { (a1 og a2).nyeVedtak(januar) @@ -450,6 +572,7 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } } + @Test fun `revurder inntekt når a1 står i AvventerGodkjenningRevurdering`() { (a1 og a2).nyeVedtak(januar) @@ -508,6 +631,7 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) } } + @Test fun `kun den arbeidsgiveren som har fått overstyrt inntekt som faktisk lagrer inntekten`() { a2 { @@ -525,8 +649,18 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { ) ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(1.vedtaksperiode) @@ -548,7 +682,12 @@ internal class RevurderInntektFlereArbeidsgivereTest: AbstractDslTest() { } } - private fun TestPerson.TestArbeidsgiver.assertDag(dato: LocalDate, arbeidsgiverbeløp: Inntekt, personbeløp: Inntekt = INGEN, aktuellDagsinntekt: Inntekt = INGEN) { + private fun TestPerson.TestArbeidsgiver.assertDag( + dato: LocalDate, + arbeidsgiverbeløp: Inntekt, + personbeløp: Inntekt = INGEN, + aktuellDagsinntekt: Inntekt = INGEN + ) { inspektør.sisteUtbetalingUtbetalingstidslinje()[dato].let { assertEquals(arbeidsgiverbeløp, it.økonomi.inspektør.arbeidsgiverbeløp) assertEquals(personbeløp, it.økonomi.inspektør.personbeløp) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderInntektTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderInntektTest.kt index ee6eefd394..656f40b588 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderInntektTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderInntektTest.kt @@ -154,7 +154,12 @@ internal class RevurderInntektTest : AbstractEndToEndTest() { fun `revurder inntekt ukjent skjæringstidspunkt`() { nyttVedtak(januar, 100.prosent) nullstillTilstandsendringer() - assertThrows { håndterOverstyrInntekt(inntekt = 32000.månedlig, skjæringstidspunkt = 2.januar) } + assertThrows { + håndterOverstyrInntekt( + inntekt = 32000.månedlig, + skjæringstidspunkt = 2.januar + ) + } assertIngenFunksjonelleFeil(AktivitetsloggFilter.person()) assertTilstander(1.vedtaksperiode, AVSLUTTET) assertEquals(1, inspektør.antallUtbetalinger) @@ -252,11 +257,20 @@ internal class RevurderInntektTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - håndterOverstyrInntekt(46000.årlig, skjæringstidspunkt = 1.januar) // da havner vi under greia + håndterOverstyrInntekt( + 46000.årlig, + skjæringstidspunkt = 1.januar + ) // da havner vi under greia håndterYtelser(1.vedtaksperiode) - assertEquals(inspektør.utbetaling(0).arbeidsgiverOppdrag.fagsystemId, inspektør.utbetaling(1).arbeidsgiverOppdrag.fagsystemId) - assertEquals(inspektør.utbetaling(0).arbeidsgiverOppdrag.nettoBeløp(), -1 * inspektør.utbetaling(1).arbeidsgiverOppdrag.nettoBeløp()) + assertEquals( + inspektør.utbetaling(0).arbeidsgiverOppdrag.fagsystemId, + inspektør.utbetaling(1).arbeidsgiverOppdrag.fagsystemId + ) + assertEquals( + inspektør.utbetaling(0).arbeidsgiverOppdrag.nettoBeløp(), + -1 * inspektør.utbetaling(1).arbeidsgiverOppdrag.nettoBeløp() + ) } @Test @@ -301,7 +315,13 @@ internal class RevurderInntektTest : AbstractEndToEndTest() { skalHaEndringskode(Endringskode.ENDR) assertEquals(opprinneligFagsystemId, fagsystemId) assertEquals(1, size) - first().assertUtbetalingslinje(Endringskode.ENDR, 1, null, null, ønsketDatoStatusFom = 17.januar) + first().assertUtbetalingslinje( + Endringskode.ENDR, + 1, + null, + null, + ønsketDatoStatusFom = 17.januar + ) } inspektør.utbetaling(2).arbeidsgiverOppdrag.apply { skalHaEndringskode(Endringskode.ENDR) @@ -449,7 +469,12 @@ internal class RevurderInntektTest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterOverstyrInntekt(INNTEKT * 1.05, skjæringstidspunkt = 1.januar) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) assertNotNull(observatør.avsluttetMedVedtakEvent[2.vedtaksperiode.id(ORGNUMMER)]) } @@ -460,14 +485,19 @@ internal class RevurderInntektTest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterOverstyrInntekt(INNTEKT * 1.05, skjæringstidspunkt = 1.januar) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + TIL_UTBETALING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertNotNull(observatør.avsluttetMedVedtakEvent[1.vedtaksperiode.id(ORGNUMMER)]) } @Test fun `revurdere mens en førstegangsbehandlingen er til utbetaling - utbetalingen feiler`() { tilGodkjent(januar, 100.prosent, 1.januar) - håndterOverstyrInntekt(INNTEKT /2, skjæringstidspunkt = 1.januar) + håndterOverstyrInntekt(INNTEKT / 2, skjæringstidspunkt = 1.januar) nullstillTilstandsendringer() håndterUtbetalt(status = Oppdragstatus.AVVIST) assertTilstander(1.vedtaksperiode, AVVENTER_REVURDERING) @@ -479,7 +509,7 @@ internal class RevurderInntektTest : AbstractEndToEndTest() { nyttVedtak(januar) forlengTilGodkjentVedtak(februar) håndterUtbetalt(status = Oppdragstatus.FEIL) - håndterOverstyrInntekt(INNTEKT /2, skjæringstidspunkt = 1.januar) + håndterOverstyrInntekt(INNTEKT / 2, skjæringstidspunkt = 1.januar) assertTilstander( 1.vedtaksperiode, START, diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderKorrigertSoknadTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderKorrigertSoknadTest.kt index 651bc5cce2..b9f4851eb5 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderKorrigertSoknadTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderKorrigertSoknadTest.kt @@ -102,7 +102,15 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { assertFunksjonellFeil(RV_SØ_13) assertForkastetPeriodeTilstander(4.vedtaksperiode, START, TIL_INFOTRYGD) - håndterUtbetalingshistorikkEtterInfotrygdendring(ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 29.januar, 2.februar, 100.prosent, INNTEKT)) + håndterUtbetalingshistorikkEtterInfotrygdendring( + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 29.januar, + 2.februar, + 100.prosent, + INNTEKT + ) + ) forlengVedtak(april) assertEquals(4, inspektør.antallUtbetalinger) @@ -145,13 +153,22 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { assertEquals(januar, inspektør.sykdomstidslinje.periode()) håndterYtelser(1.vedtaksperiode) (1..16).forEach { - assertEquals(100.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 100.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } (17..25).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } (26..31).forEach { - assertEquals(100.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 100.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } } @@ -198,9 +215,18 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { assertTilstand(1.vedtaksperiode, AVSLUTTET) assertTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) - assertEquals(20, inspektør.sykdomstidslinje.subset(mars).inspektør.dagteller[Sykedag::class]) - assertEquals(2, inspektør.sykdomstidslinje.subset(mars).inspektør.dagteller[Feriedag::class]) - assertEquals(9, inspektør.sykdomstidslinje.subset(mars).inspektør.dagteller[SykHelgedag::class]) + assertEquals( + 20, + inspektør.sykdomstidslinje.subset(mars).inspektør.dagteller[Sykedag::class] + ) + assertEquals( + 2, + inspektør.sykdomstidslinje.subset(mars).inspektør.dagteller[Feriedag::class] + ) + assertEquals( + 9, + inspektør.sykdomstidslinje.subset(mars).inspektør.dagteller[SykHelgedag::class] + ) } @Test @@ -211,9 +237,18 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { assertTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) assertTilstand(2.vedtaksperiode, AVVENTER_REVURDERING) - assertEquals(21, inspektør.sykdomstidslinje.subset(januar).inspektør.dagteller[Sykedag::class]) - assertEquals(2, inspektør.sykdomstidslinje.subset(januar).inspektør.dagteller[Feriedag::class]) - assertEquals(8, inspektør.sykdomstidslinje.subset(januar).inspektør.dagteller[SykHelgedag::class]) + assertEquals( + 21, + inspektør.sykdomstidslinje.subset(januar).inspektør.dagteller[Sykedag::class] + ) + assertEquals( + 2, + inspektør.sykdomstidslinje.subset(januar).inspektør.dagteller[Feriedag::class] + ) + assertEquals( + 8, + inspektør.sykdomstidslinje.subset(januar).inspektør.dagteller[SykHelgedag::class] + ) } @Test @@ -227,13 +262,22 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { assertTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) håndterYtelser(2.vedtaksperiode) (1..4).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.februar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.februar].økonomi.inspektør.grad + ) } (5..20).forEach { - assertEquals(100.prosent, inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.februar].økonomi.inspektør.grad) + assertEquals( + 100.prosent, + inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.februar].økonomi.inspektør.grad + ) } (21..28).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.februar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.februar].økonomi.inspektør.grad + ) } } @@ -296,15 +340,22 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { assertTilstand(1.vedtaksperiode, AVSLUTTET) (17..21).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } (27..31).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } (22..26).forEach { assertTrue(inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar] is Fridag) } } + @Test fun `Korrigerende søknad for periode i AvventerSimuleringRevurdering - setter i gang en overstyring av revurderingen`() { nyttVedtak(januar, 100.prosent) @@ -320,15 +371,22 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { assertTilstand(1.vedtaksperiode, AVSLUTTET) (17..21).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } (27..31).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } (22..26).forEach { assertTrue(inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar] is Fridag) } } + @Test fun `Korrigerende søknad for periode i AvventerHistorikkRevurdering - setter i gang en overstyring av revurderingen`() { nyttVedtak(januar, 100.prosent) @@ -343,19 +401,30 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { assertTilstand(1.vedtaksperiode, AVSLUTTET) (17..21).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } (27..31).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } (22..26).forEach { assertTrue(inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar] is Fridag) } } + @Test fun `Korrigerende søknad for periode i AvventerRevurdering - setter i gang en overstyring av revurderingen`() { nyttVedtak(januar, 100.prosent) - nyttVedtak(15.februar til 15.mars, 100.prosent, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + nyttVedtak( + 15.februar til 15.mars, + 100.prosent, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(18.januar, Dagtype.Feriedag))) assertTilstand(2.vedtaksperiode, AVVENTER_REVURDERING) @@ -373,10 +442,16 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { håndterUtbetalt() (15..28).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.februar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.februar].økonomi.inspektør.grad + ) } (1..15).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.mars].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.mars].økonomi.inspektør.grad + ) } } @@ -398,7 +473,10 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { håndterUtbetalt() (16..16).forEach { - assertEquals(100.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.februar].økonomi.inspektør.grad) + assertEquals( + 100.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.februar].økonomi.inspektør.grad + ) } } @@ -424,12 +502,21 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVVENTER_SIMULERING_REVURDERING) - assertEquals(8, inspektør.sykdomstidslinje.subset(januar).inspektør.dagteller[Arbeidsdag::class]) + assertEquals( + 8, + inspektør.sykdomstidslinje.subset(januar).inspektør.dagteller[Arbeidsdag::class] + ) val utbetalingInspektør = inspektør.utbetaling(0).arbeidsgiverOppdrag.inspektør val utbetalingInspektørRevurdering = inspektør.utbetaling(1).arbeidsgiverOppdrag.inspektør - assertEquals(utbetalingInspektør.fagsystemId(), utbetalingInspektørRevurdering.fagsystemId()) + assertEquals( + utbetalingInspektør.fagsystemId(), + utbetalingInspektørRevurdering.fagsystemId() + ) assertEquals(1, utbetalingInspektørRevurdering.antallLinjer()) - assertEquals(17.januar til 19.januar, utbetalingInspektørRevurdering.fom(0) til utbetalingInspektørRevurdering.tom(0)) + assertEquals( + 17.januar til 19.januar, + utbetalingInspektørRevurdering.fom(0) til utbetalingInspektørRevurdering.tom(0) + ) assertEquals(ENDR, utbetalingInspektørRevurdering.endringskode(0)) } @@ -445,15 +532,27 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Arbeid(20.januar, 31.januar)) håndterYtelser(1.vedtaksperiode) - assertEquals(8, inspektør.sykdomstidslinje.subset(januar).inspektør.dagteller[Arbeidsdag::class]) + assertEquals( + 8, + inspektør.sykdomstidslinje.subset(januar).inspektør.dagteller[Arbeidsdag::class] + ) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING + ) } @Test fun `andre inntektskilder i avsluttet på førstegangsbehandling - skal gi error`() { nyttVedtak(januar, 100.prosent) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent, 20.prosent), andreInntektskilder = true) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent, 20.prosent), + andreInntektskilder = true + ) assertForventetFeil( forklaring = "Produkteier ønsker warning, legal ønsker error. for øyeblikket warning", @@ -471,7 +570,10 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { @Test fun `andre inntektskilder til godkjenning på førstegangsbehandling - skal gi error`() { tilGodkjenning(januar, ORGNUMMER) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent, 20.prosent), andreInntektskilder = true) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent, 20.prosent), + andreInntektskilder = true + ) assertForventetFeil( forklaring = "Produkteier ønsker warning, legal ønsker error. for øyeblikket warning", nå = { @@ -485,15 +587,28 @@ internal class RevurderKorrigertSoknadTest : AbstractEndToEndTest() { ) } - private fun assertRevurderingUtenEndring(vedtakperiodeId: IdInnhenter, orgnummer: String = ORGNUMMER, block:() -> Unit) { + private fun assertRevurderingUtenEndring( + vedtakperiodeId: IdInnhenter, + orgnummer: String = ORGNUMMER, + block: () -> Unit + ) { val sykdomsHistorikkElementerFør = inspektør(orgnummer).sykdomshistorikk.elementer() val utbetalingerFør = inspektør(orgnummer).utbetalinger(vedtakperiodeId) block() val utbetalingerEtter = inspektør(orgnummer).utbetalinger(vedtakperiodeId) val sykdomsHistorikkElementerEtter = inspektør(orgnummer).sykdomshistorikk.elementer() - assertEquals(1, utbetalingerEtter.size - utbetalingerFør.size) { "Forventet at det skal være opprettet en utbetaling" } - assertEquals(UEND, utbetalingerEtter.last().inspektør.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + 1, + utbetalingerEtter.size - utbetalingerFør.size + ) { "Forventet at det skal være opprettet en utbetaling" } + assertEquals( + UEND, + utbetalingerEtter.last().inspektør.arbeidsgiverOppdrag.inspektør.endringskode + ) assertEquals(0, utbetalingerEtter.last().inspektør.personOppdrag.size) - assertEquals(sykdomsHistorikkElementerFør, sykdomsHistorikkElementerEtter) { "Forventet at sykdomshistorikken skal være uendret" } + assertEquals( + sykdomsHistorikkElementerFør, + sykdomsHistorikkElementerEtter + ) { "Forventet at sykdomshistorikken skal være uendret" } } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderKorrigertS\303\270knadFlereArbeidsgivereTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderKorrigertS\303\270knadFlereArbeidsgivereTest.kt" index 556ce728d5..b5a0c60495 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderKorrigertS\303\270knadFlereArbeidsgivereTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderKorrigertS\303\270knadFlereArbeidsgivereTest.kt" @@ -73,7 +73,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( a2 { håndterSøknad(Sykdom(15.januar, 15.februar, 100.prosent)) håndterSykmelding(Sykmeldingsperiode(15.januar, 15.februar)) - håndterInntektsmelding(listOf(15.januar til 30.januar), beregnetInntekt = 20000.månedlig) + håndterInntektsmelding( + listOf(15.januar til 30.januar), + beregnetInntekt = 20000.månedlig + ) } a1 { håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 20000.månedlig) @@ -115,13 +118,22 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( a2 { håndterSykmelding(Sykmeldingsperiode(periodeAg2.start, periodeAg2.endInclusive)) håndterSøknad(Sykdom(periodeAg2.start, periodeAg2.endInclusive, 100.prosent)) - håndterInntektsmelding(listOf(periodeAg2.start til periodeAg2.start.plusDays(15)), beregnetInntekt = 20000.månedlig) + håndterInntektsmelding( + listOf(periodeAg2.start til periodeAg2.start.plusDays(15)), + beregnetInntekt = 20000.månedlig + ) } a1 { - håndterInntektsmelding(listOf(periodeAg1.start til periodeAg1.start.plusDays(15)), beregnetInntekt = 20000.månedlig) + håndterInntektsmelding( + listOf(periodeAg1.start til periodeAg1.start.plusDays(15)), + beregnetInntekt = 20000.månedlig + ) håndterVilkårsgrunnlag( 1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = listOf(a1, a2).lagStandardSykepengegrunnlag(20000.månedlig, periodeAg1.start) + inntektsvurderingForSykepengegrunnlag = listOf(a1, a2).lagStandardSykepengegrunnlag( + 20000.månedlig, + periodeAg1.start + ) ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -151,7 +163,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertTilstand(1.vedtaksperiode, AVSLUTTET) (17..31).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } } a2 { @@ -174,19 +189,39 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( håndterSøknad(Sykdom(25.januar, 25.februar, 100.prosent)) } a1 { - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = TestPerson.INNTEKT) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = TestPerson.INNTEKT + ) håndterSykmelding(Sykmeldingsperiode(24.februar, 24.mars)) håndterSøknad(Sykdom(24.februar, 24.mars, 100.prosent)) - håndterInntektsmelding(listOf(24.februar til 11.mars), beregnetInntekt = TestPerson.INNTEKT) + håndterInntektsmelding( + listOf(24.februar til 11.mars), + beregnetInntekt = TestPerson.INNTEKT + ) } a2 { - håndterInntektsmelding(listOf(25.januar til 9.februar), beregnetInntekt = TestPerson.INNTEKT) + håndterInntektsmelding( + listOf(25.januar til 9.februar), + beregnetInntekt = TestPerson.INNTEKT + ) } a1 { - håndterVilkårsgrunnlag(1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -277,7 +312,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertEquals(24.februar til 24.mars, revurdering.periode) assertEquals(0, revurdering.personOppdrag.size) assertEquals(1, revurdering.arbeidsgiverOppdrag.size) - assertEquals(Endringskode.UEND, revurdering.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.UEND, + revurdering.arbeidsgiverOppdrag.inspektør.endringskode + ) } } a2 { @@ -289,7 +327,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertEquals(25.januar til 25.februar, revurdering.periode) assertEquals(0, revurdering.personOppdrag.size) assertEquals(1, revurdering.arbeidsgiverOppdrag.size) - assertEquals(Endringskode.UEND, revurdering.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.UEND, + revurdering.arbeidsgiverOppdrag.inspektør.endringskode + ) revurdering.arbeidsgiverOppdrag.inspektør.also { arbeidsgiveroppdrag -> assertEquals(10.februar, arbeidsgiveroppdrag.fom(0)) assertEquals(23.februar, arbeidsgiveroppdrag.tom(0)) @@ -373,7 +414,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertTilstand(1.vedtaksperiode, AVSLUTTET) assertTilstand(2.vedtaksperiode, AVSLUTTET) (17..31).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } } @@ -386,7 +430,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertTilstand(1.vedtaksperiode, AVSLUTTET) assertTilstand(2.vedtaksperiode, AVSLUTTET) (17..31).forEach { - assertEquals(100.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 100.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } } } @@ -416,7 +463,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertTilstand(2.vedtaksperiode, AVSLUTTET) assertTrue(inspektør.utbetalingstidslinjer(2.vedtaksperiode)[27.februar] is Utbetalingsdag.Fridag) assertTrue(inspektør.utbetalingstidslinjer(2.vedtaksperiode)[28.februar] is Utbetalingsdag.Fridag) - assertEquals(18, inspektør.utbetalingstidslinjer(2.vedtaksperiode).inspektør.navDagTeller) + assertEquals( + 18, + inspektør.utbetalingstidslinjer(2.vedtaksperiode).inspektør.navDagTeller + ) } a2 { @@ -452,7 +502,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertTilstand(2.vedtaksperiode, AVSLUTTET) assertTrue(inspektør.utbetalingstidslinjer(2.vedtaksperiode)[29.mars] is Utbetalingsdag.Fridag) assertTrue(inspektør.utbetalingstidslinjer(2.vedtaksperiode)[30.mars] is Utbetalingsdag.Fridag) - assertEquals(8, inspektør.utbetalingstidslinjer(2.vedtaksperiode).inspektør.navDagTeller) + assertEquals( + 8, + inspektør.utbetalingstidslinjer(2.vedtaksperiode).inspektør.navDagTeller + ) } a2 { @@ -474,19 +527,39 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( håndterSøknad(Sykdom(25.januar, 25.februar, 100.prosent)) } a1 { - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = TestPerson.INNTEKT) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = TestPerson.INNTEKT + ) håndterSykmelding(Sykmeldingsperiode(24.februar, 24.mars)) håndterSøknad(Sykdom(24.februar, 24.mars, 100.prosent)) - håndterInntektsmelding(listOf(24.februar til 11.mars), beregnetInntekt = TestPerson.INNTEKT) + håndterInntektsmelding( + listOf(24.februar til 11.mars), + beregnetInntekt = TestPerson.INNTEKT + ) } a2 { - håndterInntektsmelding(listOf(25.januar til 9.februar), beregnetInntekt = TestPerson.INNTEKT) + håndterInntektsmelding( + listOf(25.januar til 9.februar), + beregnetInntekt = TestPerson.INNTEKT + ) } a1 { - håndterVilkårsgrunnlag( 1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -540,7 +613,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertTilstand(1.vedtaksperiode, AVSLUTTET) (10..25).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.februar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.februar].økonomi.inspektør.grad + ) } } @@ -560,7 +636,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertEquals(januar, revurdering.periode) assertEquals(0, revurdering.personOppdrag.size) assertEquals(1, revurdering.arbeidsgiverOppdrag.size) - assertEquals(Endringskode.UEND, revurdering.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.UEND, + revurdering.arbeidsgiverOppdrag.inspektør.endringskode + ) } inspektør.utbetaling(1).also { marsutbetaling -> @@ -570,7 +649,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertEquals(24.februar til 24.mars, revurdering.periode) assertEquals(0, revurdering.personOppdrag.size) assertEquals(1, revurdering.arbeidsgiverOppdrag.size) - assertEquals(Endringskode.UEND, revurdering.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.UEND, + revurdering.arbeidsgiverOppdrag.inspektør.endringskode + ) } } @@ -584,7 +666,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertEquals(25.januar til 25.februar, revurdering.periode) assertEquals(0, revurdering.personOppdrag.size) assertEquals(1, revurdering.arbeidsgiverOppdrag.size) - assertEquals(Endringskode.ENDR, revurdering.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.ENDR, + revurdering.arbeidsgiverOppdrag.inspektør.endringskode + ) revurdering.arbeidsgiverOppdrag.inspektør.also { arbeidsgiveroppdrag -> assertEquals(10.februar, arbeidsgiveroppdrag.fom(0)) assertEquals(23.februar, arbeidsgiveroppdrag.tom(0)) @@ -606,19 +691,40 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( håndterSøknad(Sykdom(25.januar, 25.februar, 100.prosent)) } a1 { - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = TestPerson.INNTEKT) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = TestPerson.INNTEKT + ) håndterSykmelding(Sykmeldingsperiode(10.februar, 10.mars)) håndterSøknad(Sykdom(10.februar, 10.mars, 100.prosent)) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = TestPerson.INNTEKT, 10.februar) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = TestPerson.INNTEKT, + 10.februar + ) } a2 { - håndterInntektsmelding(listOf(25.januar til 9.februar), beregnetInntekt = TestPerson.INNTEKT) + håndterInntektsmelding( + listOf(25.januar til 9.februar), + beregnetInntekt = TestPerson.INNTEKT + ) } a1 { - håndterVilkårsgrunnlag( 1.vedtaksperiode, + håndterVilkårsgrunnlag( + 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -667,7 +773,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( håndterUtbetalt() assertTilstand(1.vedtaksperiode, AVSLUTTET) (10..25).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.februar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.februar].økonomi.inspektør.grad + ) } } @@ -706,10 +815,16 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( assertTilstand(1.vedtaksperiode, AVSLUTTET) assertTilstand(2.vedtaksperiode, AVSLUTTET) (17..31).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } (10..28).forEach { - assertEquals(100.prosent, inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.februar].økonomi.inspektør.grad) + assertEquals( + 100.prosent, + inspektør.utbetalingstidslinjer(2.vedtaksperiode)[it.februar].økonomi.inspektør.grad + ) } } } @@ -740,11 +855,20 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( håndterUtbetalt() assertTilstand(1.vedtaksperiode, AVSLUTTET) - assertEquals(9, inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.navDagTeller) - assertEquals(2, inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.fridagTeller) + assertEquals( + 9, + inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.navDagTeller + ) + assertEquals( + 2, + inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.fridagTeller + ) - (17..29).forEach{ - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + (17..29).forEach { + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } } @@ -778,11 +902,20 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( håndterUtbetalt() assertTilstand(1.vedtaksperiode, AVSLUTTET) - assertEquals(9, inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.navDagTeller) - assertEquals(2, inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.fridagTeller) + assertEquals( + 9, + inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.navDagTeller + ) + assertEquals( + 2, + inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.fridagTeller + ) - (17..29).forEach{ - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + (17..29).forEach { + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } } @@ -811,11 +944,20 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( håndterUtbetalt() assertTilstand(1.vedtaksperiode, AVSLUTTET) - assertEquals(9, inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.navDagTeller) - assertEquals(2, inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.fridagTeller) + assertEquals( + 9, + inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.navDagTeller + ) + assertEquals( + 2, + inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.fridagTeller + ) - (17..29).forEach{ - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + (17..29).forEach { + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } } @@ -840,7 +982,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() (17..31).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } } @@ -850,7 +995,10 @@ internal class RevurderKorrigertSøknadFlereArbeidsgivereTest : AbstractDslTest( håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() (17..31).forEach { - assertEquals(50.prosent, inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad) + assertEquals( + 50.prosent, + inspektør.utbetalingstidslinjer(1.vedtaksperiode)[it.januar].økonomi.inspektør.grad + ) } } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderTidslinjeFlereArbeidsgivereTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderTidslinjeFlereArbeidsgivereTest.kt index e6b9d78f0e..ad1b67dab4 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderTidslinjeFlereArbeidsgivereTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderTidslinjeFlereArbeidsgivereTest.kt @@ -59,14 +59,31 @@ internal class RevurderTidslinjeFlereArbeidsgivereTest : AbstractEndToEndTest() håndterSykmelding(Sykmeldingsperiode(17.januar, 25.januar), orgnummer = a2) håndterSøknad(Sykdom(17.januar, 25.januar, 100.prosent), orgnummer = a2) - håndterInntektsmelding(listOf(1.januar til 16.januar), beregnetInntekt = 20000.månedlig, orgnummer = a2) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + beregnetInntekt = 20000.månedlig, + orgnummer = a2 + ) håndterVilkårsgrunnlag( vedtaksperiodeIdInnhenter = 2.vedtaksperiode, orgnummer = a2, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to 20000.månedlig, a2 to 20000.månedlig), 1.januar), + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to 20000.månedlig, + a2 to 20000.månedlig + ), 1.januar + ), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.januar(2017), type = Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a1, 1.januar(2017), type = Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.januar(2017), + type = Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a1, + 1.januar(2017), + type = Arbeidsforholdtype.ORDINÆRT + ) ) ) håndterYtelser(2.vedtaksperiode, orgnummer = a2) @@ -81,7 +98,11 @@ internal class RevurderTidslinjeFlereArbeidsgivereTest : AbstractEndToEndTest() håndterYtelser(2.vedtaksperiode, orgnummer = a2) håndterSimulering(2.vedtaksperiode, orgnummer = a2) - håndterInntektsmelding(listOf(2.januar til 17.januar), beregnetInntekt = 20000.månedlig, orgnummer = a1) + håndterInntektsmelding( + listOf(2.januar til 17.januar), + beregnetInntekt = 20000.månedlig, + orgnummer = a1 + ) assertIngenFunksjonelleFeil() @@ -97,7 +118,10 @@ internal class RevurderTidslinjeFlereArbeidsgivereTest : AbstractEndToEndTest() forlengVedtak(februar, a2, a1) nullstillTilstandsendringer() - håndterOverstyrTidslinje((20.januar til 22.januar).map { manuellFeriedag(it) }, orgnummer = a2) + håndterOverstyrTidslinje( + (20.januar til 22.januar).map { manuellFeriedag(it) }, + orgnummer = a2 + ) håndterYtelser(1.vedtaksperiode, orgnummer = a2) håndterSimulering(1.vedtaksperiode, orgnummer = a2) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a2) @@ -113,16 +137,46 @@ internal class RevurderTidslinjeFlereArbeidsgivereTest : AbstractEndToEndTest() håndterUtbetalingsgodkjenning(2.vedtaksperiode, orgnummer = a1) inspektør(a2) { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) assertIngenFunksjonelleFeil() assertEquals(2, avsluttedeUtbetalingerForVedtaksperiode(1.vedtaksperiode).size) assertEquals(2, avsluttedeUtbetalingerForVedtaksperiode(2.vedtaksperiode).size) } inspektør(a1) { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) assertIngenFunksjonelleFeil() assertEquals(2, avsluttedeUtbetalingerForVedtaksperiode(1.vedtaksperiode).size) assertEquals(2, avsluttedeUtbetalingerForVedtaksperiode(2.vedtaksperiode).size) @@ -139,10 +193,24 @@ internal class RevurderTidslinjeFlereArbeidsgivereTest : AbstractEndToEndTest() håndterSimulering(1.vedtaksperiode, orgnummer = a2) nullstillTilstandsendringer() - håndterOverstyrTidslinje((29.januar til 29.januar).map { manuellFeriedag(it) }, orgnummer = a1) + håndterOverstyrTidslinje( + (29.januar til 29.januar).map { manuellFeriedag(it) }, + orgnummer = a1 + ) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + orgnummer = a2 + ) } @Test @@ -151,11 +219,20 @@ internal class RevurderTidslinjeFlereArbeidsgivereTest : AbstractEndToEndTest() forlengVedtak(februar, a2, a1) nullstillTilstandsendringer() - håndterOverstyrTidslinje((20.januar til 22.januar).map { manuellFeriedag(it) }, orgnummer = a1) + håndterOverstyrTidslinje( + (20.januar til 22.januar).map { manuellFeriedag(it) }, + orgnummer = a1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = a2) inspektør(a2) { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertIngenFunksjonelleFeil() assertEquals(1, avsluttedeUtbetalingerForVedtaksperiode(1.vedtaksperiode).size) @@ -181,7 +258,12 @@ internal class RevurderTidslinjeFlereArbeidsgivereTest : AbstractEndToEndTest() assertPeriode(17.januar til 31.januar, a1, 1081.daglig) assertPeriode(17.januar til 31.januar, a2, 1080.daglig) - håndterOverstyrTidslinje((17.januar til 21.januar).map { ManuellOverskrivingDag(it, Feriedag) }, orgnummer = a1) + håndterOverstyrTidslinje((17.januar til 21.januar).map { + ManuellOverskrivingDag( + it, + Feriedag + ) + }, orgnummer = a1) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) @@ -197,14 +279,25 @@ internal class RevurderTidslinjeFlereArbeidsgivereTest : AbstractEndToEndTest() assertPeriode(17.januar til 31.januar, a2, 1080.daglig) } - private fun assertDag(dato: LocalDate, orgnummer: String, arbeidsgiverbeløp: Inntekt, personbeløp: Inntekt) { + private fun assertDag( + dato: LocalDate, + orgnummer: String, + arbeidsgiverbeløp: Inntekt, + personbeløp: Inntekt + ) { inspektør(orgnummer).sisteUtbetalingUtbetalingstidslinje()[dato].let { if (it is NavHelgDag) return assertEquals(arbeidsgiverbeløp, it.økonomi.inspektør.arbeidsgiverbeløp) assertEquals(personbeløp, it.økonomi.inspektør.personbeløp) } } - private fun assertPeriode(periode: Periode, orgnummer: String, arbeidsgiverbeløp: Inntekt, personbeløp: Inntekt = INGEN) = + + private fun assertPeriode( + periode: Periode, + orgnummer: String, + arbeidsgiverbeløp: Inntekt, + personbeløp: Inntekt = INGEN + ) = periode.forEach { assertDag(it, orgnummer, arbeidsgiverbeløp, personbeløp) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderTidslinjeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderTidslinjeTest.kt index c2e2613841..24e7233f34 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderTidslinjeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderTidslinjeTest.kt @@ -100,7 +100,12 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(31.januar, Dagtype.Feriedag))) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) assertNotNull(observatør.avsluttetMedVedtakEvent[2.vedtaksperiode.id(ORGNUMMER)]) } @@ -111,7 +116,12 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(31.januar, Dagtype.Feriedag))) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + TIL_UTBETALING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertNotNull(observatør.avsluttetMedVedtakEvent[1.vedtaksperiode.id(ORGNUMMER)]) } @@ -150,7 +160,15 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterAnnullerUtbetaling(utbetalingId = inspektør.utbetaling(1).utbetalingId) assertTrue(hendelselogg.harFunksjonelleFeilEllerVerre()) { "kan pt. ikke annullere når siste utbetaling har feilet" } - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -185,8 +203,22 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { assertIngenFunksjonelleFeil() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) } @Test @@ -401,8 +433,24 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterYtelser(3.vedtaksperiode) håndterUtbetalingsgodkjenning(3.vedtaksperiode) assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 3.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) } @Test @@ -505,7 +553,11 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { assertEquals(6, inspektør.sisteMaksdato(1.vedtaksperiode).antallForbrukteDager) - håndterOverstyrTidslinje((3.januar til 20.januar).map { manuellFeriedag(it) } + (21.januar til 26.januar).map { manuellPermisjonsdag(it) }) + håndterOverstyrTidslinje((3.januar til 20.januar).map { manuellFeriedag(it) } + (21.januar til 26.januar).map { + manuellPermisjonsdag( + it + ) + }) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode, true) @@ -532,7 +584,11 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { nyttVedtak(3.mars til 26.mars, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) nullstillTilstandsendringer() - håndterOverstyrTidslinje((3.mars til 20.mars).map { manuellFeriedag(it) } + (21.mars til 26.mars).map { manuellPermisjonsdag(it) }) + håndterOverstyrTidslinje((3.mars til 20.mars).map { manuellFeriedag(it) } + (21.mars til 26.mars).map { + manuellPermisjonsdag( + it + ) + }) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) @@ -562,7 +618,10 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { } assertEquals(1, revurderingenAvMars.arbeidsgiverOppdrag.size) - assertEquals(Endringskode.ENDR, revurderingenAvMars.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.ENDR, + revurderingenAvMars.arbeidsgiverOppdrag.inspektør.endringskode + ) assertEquals(3.mars til 26.mars, revurderingenAvMars.periode) revurderingenAvMars.arbeidsgiverOppdrag[0].inspektør.also { linje -> assertEquals(19.mars til 20.mars, linje.fom til linje.tom) @@ -572,7 +631,11 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { @Test fun `Avslag fører til feilet revurdering`() { håndterSykmelding(januar) - håndterInntektsmelding(listOf(Periode(1.januar, 17.januar)), førsteFraværsdag = 1.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(1.januar, 17.januar)), + førsteFraværsdag = 1.januar, + avsendersystem = ALTINN + ) håndterSøknad(januar) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -622,7 +685,11 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { @Test fun `annullering av feilet revurdering`() { håndterSykmelding(januar) - håndterInntektsmelding(listOf(Periode(1.januar, 17.januar)), førsteFraværsdag = 1.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(1.januar, 17.januar)), + førsteFraværsdag = 1.januar, + avsendersystem = ALTINN + ) håndterSøknad(januar) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -665,7 +732,11 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterPåminnelse(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING, LocalDateTime.now().minusDays(14)) + håndterPåminnelse( + 1.vedtaksperiode, + AVVENTER_GODKJENNING_REVURDERING, + LocalDateTime.now().minusDays(14) + ) assertTilstander( 1.vedtaksperiode, @@ -777,7 +848,12 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterOverstyrTidslinje((15.februar til 28.februar).map { manuellFeriedag(it) }) assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertIngenFunksjonelleFeil() } @@ -797,8 +873,24 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(3.vedtaksperiode) assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 3.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) assertIngenFunksjonelleFeil() assertEquals(0, inspektør.ikkeUtbetalteUtbetalingerForVedtaksperiode(1.vedtaksperiode).size) assertEquals(0, inspektør.ikkeUtbetalteUtbetalingerForVedtaksperiode(2.vedtaksperiode).size) @@ -900,9 +992,19 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) håndterSykmelding(Sykmeldingsperiode(30.januar, 5.februar)) - assertEquals("SSSHH SSSSSHH SFFFFFF FFFFF", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 30.januar, avsendersystem = ALTINN) - assertEquals("UUSSSHH SSSSSHH SFFFFFF FFFFF", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString()) + assertEquals( + "SSSHH SSSSSHH SFFFFFF FFFFF", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 30.januar, + avsendersystem = ALTINN + ) + assertEquals( + "UUSSSHH SSSSSHH SFFFFFF FFFFF", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString() + ) nullstillTilstandsendringer() håndterSøknad(Sykdom(30.januar, 5.februar, 100.prosent)) @@ -975,11 +1077,23 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) håndterPåminnelse(1.vedtaksperiode, AVVENTER_SIMULERING_REVURDERING) - assertEquals(3, person.personLogg.antallEtterspurteBehov(1.vedtaksperiode, Aktivitet.Behov.Behovtype.Simulering)) + assertEquals( + 3, + person.personLogg.antallEtterspurteBehov( + 1.vedtaksperiode, + Aktivitet.Behov.Behovtype.Simulering + ) + ) håndterSimulering(1.vedtaksperiode) håndterPåminnelse(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING) - assertEquals(3, person.personLogg.antallEtterspurteBehov(1.vedtaksperiode, Aktivitet.Behov.Behovtype.Godkjenning)) + assertEquals( + 3, + person.personLogg.antallEtterspurteBehov( + 1.vedtaksperiode, + Aktivitet.Behov.Behovtype.Godkjenning + ) + ) } @Test @@ -994,7 +1108,13 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterUtbetalt() håndterUtbetalingshistorikkEtterInfotrygdendring( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 17.januar, 31.januar, 100.prosent, 1000.daglig), + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 17.januar, + 31.januar, + 100.prosent, + 1000.daglig + ), inntektshistorikk = listOf( Inntektsopplysning( ORGNUMMER, @@ -1005,7 +1125,10 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterOverstyrTidslinje((20.januar til 26.januar).map { manuellFeriedag(it) }) håndterYtelser(1.vedtaksperiode) - assertEquals(listOf(1.januar til 16.januar), inspektør.arbeidsgiverperiode(1.vedtaksperiode)) + assertEquals( + listOf(1.januar til 16.januar), + inspektør.arbeidsgiverperiode(1.vedtaksperiode) + ) val utbetaling1 = inspektør.utbetaling(0) val revurdering = inspektør.utbetaling(1) @@ -1044,7 +1167,13 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterUtbetalt() håndterUtbetalingshistorikkEtterInfotrygdendring( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.februar, 28.februar, 100.prosent, 1000.daglig), + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.februar, + 28.februar, + 100.prosent, + 1000.daglig + ), inntektshistorikk = listOf( Inntektsopplysning( ORGNUMMER, @@ -1062,7 +1191,11 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { @Test fun `revurderer siste utbetalte periode`() { håndterSykmelding(Sykmeldingsperiode(3.januar, 26.januar)) - håndterInntektsmelding(listOf(Periode(2.januar, 18.januar)), førsteFraværsdag = 2.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(2.januar, 18.januar)), + førsteFraværsdag = 2.januar, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(3.januar, 26.januar, 100.prosent)) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -1075,7 +1208,10 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) assertEquals(Utbetalingstatus.UTBETALT, inspektør.utbetalingtilstand(0)) assertEquals(Utbetalingstatus.OVERFØRT, inspektør.utbetalingtilstand(1)) - assertEquals(inspektør.utbetaling(0).arbeidsgiverOppdrag.fagsystemId, inspektør.utbetaling(1).arbeidsgiverOppdrag.fagsystemId) + assertEquals( + inspektør.utbetaling(0).arbeidsgiverOppdrag.fagsystemId, + inspektør.utbetaling(1).arbeidsgiverOppdrag.fagsystemId + ) inspektør.utbetaling(1).arbeidsgiverOppdrag.also { oppdrag -> assertEquals(2, oppdrag.size) assertEquals(18.januar, oppdrag[0].fom) @@ -1091,7 +1227,11 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { @Test fun `revurderer siste utbetalte periode i en forlengelse med bare ferie og permisjon`() { håndterSykmelding(Sykmeldingsperiode(3.januar, 26.januar)) - håndterInntektsmelding(listOf(Periode(2.januar, 18.januar)), førsteFraværsdag = 2.januar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(2.januar, 18.januar)), + førsteFraværsdag = 2.januar, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(3.januar, 26.januar, 100.prosent)) håndterVilkårsgrunnlag(1.vedtaksperiode, INNTEKT) håndterYtelser(1.vedtaksperiode) @@ -1106,14 +1246,21 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode, true) håndterUtbetalt() - håndterOverstyrTidslinje((29.januar til 15.februar).map { manuellFeriedag(it) } + (16.februar til 23.februar).map { manuellPermisjonsdag(it) }) + håndterOverstyrTidslinje((29.januar til 15.februar).map { manuellFeriedag(it) } + (16.februar til 23.februar).map { + manuellPermisjonsdag( + it + ) + }) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) assertEquals(Utbetalingstatus.UTBETALT, inspektør.utbetalingtilstand(0)) assertEquals(Utbetalingstatus.UTBETALT, inspektør.utbetalingtilstand(1)) assertEquals(Utbetalingstatus.OVERFØRT, inspektør.utbetalingtilstand(2)) - assertEquals(inspektør.utbetaling(1).arbeidsgiverOppdrag.fagsystemId, inspektør.utbetaling(2).arbeidsgiverOppdrag.fagsystemId) + assertEquals( + inspektør.utbetaling(1).arbeidsgiverOppdrag.fagsystemId, + inspektør.utbetaling(2).arbeidsgiverOppdrag.fagsystemId + ) inspektør.utbetaling(2).arbeidsgiverOppdrag.also { oppdrag -> assertEquals(1, oppdrag.size) assertEquals(18.januar, oppdrag[0].fom) @@ -1135,14 +1282,30 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { håndterUtbetalt() håndterUtbetalingshistorikkEtterInfotrygdendring( - ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 1.november(2017), 30.november(2017), 100.prosent, 32000.månedlig), + ArbeidsgiverUtbetalingsperiode( + ORGNUMMER, + 1.november(2017), + 30.november(2017), + 100.prosent, + 32000.månedlig + ), inntektshistorikk = listOf( Inntektsopplysning( - orgnummer = ORGNUMMER, sykepengerFom = 1.november, 32000.månedlig, refusjonTilArbeidsgiver = true + orgnummer = ORGNUMMER, + sykepengerFom = 1.november, + 32000.månedlig, + refusjonTilArbeidsgiver = true + ) + ) + ) + håndterOverstyrTidslinje( + overstyringsdager = listOf( + ManuellOverskrivingDag( + 31.januar, + Dagtype.Feriedag ) ) ) - håndterOverstyrTidslinje(overstyringsdager = listOf(ManuellOverskrivingDag(31.januar, Dagtype.Feriedag))) håndterYtelser(1.vedtaksperiode) assertVarsel(RV_UT_23, 1.vedtaksperiode.filter()) @@ -1171,7 +1334,12 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { val hendelseId = UUID.randomUUID() håndterOverstyrTidslinje( meldingsreferanseId = hendelseId, - overstyringsdager = (30.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) } + overstyringsdager = (30.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + } ) assertEquals(januar, inspektør.periode(1.vedtaksperiode)) assertEquals(februar, inspektør.periode(2.vedtaksperiode)) @@ -1186,7 +1354,12 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { val hendelseId = UUID.randomUUID() håndterOverstyrTidslinje( meldingsreferanseId = hendelseId, - overstyringsdager = (30.januar til 31.januar).map { ManuellOverskrivingDag(it, Dagtype.Feriedag) } + overstyringsdager = (30.januar til 31.januar).map { + ManuellOverskrivingDag( + it, + Dagtype.Feriedag + ) + } ) assertEquals(januar, inspektør.periode(1.vedtaksperiode)) assertEquals(2.februar til 28.februar, inspektør.periode(2.vedtaksperiode)) @@ -1198,7 +1371,11 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { fun `revurder første dag i periode på en sykedag som forlenger tidligere arbeidsgiverperiode med nytt skjæringstidspunkt`() { nyttVedtak(1.januar til 20.januar) håndterSøknad(Sykdom(25.januar, 25.januar, 100.prosent)) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 25.januar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 25.januar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -1255,13 +1432,55 @@ internal class RevurderTidslinjeTest : AbstractEndToEndTest() { } private fun assertEtterspurteYtelser(expected: Int, vedtaksperiodeIdInnhenter: IdInnhenter) { - assertEquals(expected, person.personLogg.antallEtterspurteBehov(vedtaksperiodeIdInnhenter, Aktivitet.Behov.Behovtype.Foreldrepenger)) - assertEquals(expected, person.personLogg.antallEtterspurteBehov(vedtaksperiodeIdInnhenter, Aktivitet.Behov.Behovtype.Pleiepenger)) - assertEquals(expected, person.personLogg.antallEtterspurteBehov(vedtaksperiodeIdInnhenter, Aktivitet.Behov.Behovtype.Omsorgspenger)) - assertEquals(expected, person.personLogg.antallEtterspurteBehov(vedtaksperiodeIdInnhenter, Aktivitet.Behov.Behovtype.Opplæringspenger)) - assertEquals(expected, person.personLogg.antallEtterspurteBehov(vedtaksperiodeIdInnhenter, Aktivitet.Behov.Behovtype.Arbeidsavklaringspenger)) - assertEquals(expected, person.personLogg.antallEtterspurteBehov(vedtaksperiodeIdInnhenter, Aktivitet.Behov.Behovtype.Dagpenger)) - assertEquals(expected, person.personLogg.antallEtterspurteBehov(vedtaksperiodeIdInnhenter, Aktivitet.Behov.Behovtype.Institusjonsopphold)) + assertEquals( + expected, + person.personLogg.antallEtterspurteBehov( + vedtaksperiodeIdInnhenter, + Aktivitet.Behov.Behovtype.Foreldrepenger + ) + ) + assertEquals( + expected, + person.personLogg.antallEtterspurteBehov( + vedtaksperiodeIdInnhenter, + Aktivitet.Behov.Behovtype.Pleiepenger + ) + ) + assertEquals( + expected, + person.personLogg.antallEtterspurteBehov( + vedtaksperiodeIdInnhenter, + Aktivitet.Behov.Behovtype.Omsorgspenger + ) + ) + assertEquals( + expected, + person.personLogg.antallEtterspurteBehov( + vedtaksperiodeIdInnhenter, + Aktivitet.Behov.Behovtype.Opplæringspenger + ) + ) + assertEquals( + expected, + person.personLogg.antallEtterspurteBehov( + vedtaksperiodeIdInnhenter, + Aktivitet.Behov.Behovtype.Arbeidsavklaringspenger + ) + ) + assertEquals( + expected, + person.personLogg.antallEtterspurteBehov( + vedtaksperiodeIdInnhenter, + Aktivitet.Behov.Behovtype.Dagpenger + ) + ) + assertEquals( + expected, + person.personLogg.antallEtterspurteBehov( + vedtaksperiodeIdInnhenter, + Aktivitet.Behov.Behovtype.Institusjonsopphold + ) + ) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurdereArbeidsforholdTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurdereArbeidsforholdTest.kt index 8ae4870adc..84a1381603 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurdereArbeidsforholdTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurdereArbeidsforholdTest.kt @@ -46,7 +46,7 @@ import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Assertions.fail import org.junit.jupiter.api.Test -internal class RevurderArbeidsforholdTest: AbstractDslTest() { +internal class RevurderArbeidsforholdTest : AbstractDslTest() { @Test fun `revurder arbeidsforhold i Avsluttet`() { @@ -59,7 +59,8 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -67,24 +68,43 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } } nullstillTilstandsendringer() håndterOverstyrArbeidsforhold(1.januar, ArbeidsforholdOverstyrt(a2, true, "test")) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, 31000.månedlig))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, 31000.månedlig)) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(372000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -92,13 +112,16 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(EN_ARBEIDSGIVER, sykepengegrunnlagInspektør.inntektskilde) assertEquals(EN_ARBEIDSGIVER, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkjønnsmessigFastsatt::class, it.inntektsopplysning::class) } } } } + @Test fun `overstyrer forlengelse, førstegangsbehandling revurderes`() { a1 { @@ -117,7 +140,8 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterSimulering(2.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertSisteTilstand(2.vedtaksperiode, AVVENTER_GODKJENNING) - (inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -125,18 +149,25 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } } nullstillTilstandsendringer() håndterOverstyrArbeidsforhold(1.januar, ArbeidsforholdOverstyrt(a2, true, "test")) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, 31000.månedlig))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, 31000.månedlig)) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -153,8 +184,14 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { TIL_UTBETALING, AVSLUTTET ) - assertTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + assertTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(372000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -162,7 +199,9 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(EN_ARBEIDSGIVER, sykepengegrunnlagInspektør.inntektskilde) assertEquals(EN_ARBEIDSGIVER, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkjønnsmessigFastsatt::class, it.inntektsopplysning::class) } @@ -188,7 +227,8 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterSimulering(2.vedtaksperiode) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertSisteTilstand(2.vedtaksperiode, AVVENTER_GODKJENNING) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -196,11 +236,15 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } @@ -209,7 +253,8 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterOverstyrArbeidsforhold(1.januar, ArbeidsforholdOverstyrt(a2, true, "test")) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(372000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -217,7 +262,9 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(EN_ARBEIDSGIVER, sykepengegrunnlagInspektør.inntektskilde) assertEquals(EN_ARBEIDSGIVER, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } @@ -241,8 +288,14 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET ) - assertTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + assertTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -250,11 +303,15 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } @@ -273,7 +330,8 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -281,18 +339,23 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } } nullstillTilstandsendringer() håndterOverstyrArbeidsforhold(1.januar, ArbeidsforholdOverstyrt(a2, true, "test")) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(372000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -300,13 +363,16 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(EN_ARBEIDSGIVER, sykepengegrunnlagInspektør.inntektskilde) assertEquals(EN_ARBEIDSGIVER, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } } håndterOverstyrArbeidsforhold(1.januar, ArbeidsforholdOverstyrt(a2, false, "test")) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -314,11 +380,15 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } @@ -349,7 +419,8 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -357,18 +428,23 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } } nullstillTilstandsendringer() håndterOverstyrArbeidsforhold(1.januar, ArbeidsforholdOverstyrt(a2, true, "test")) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(372000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -376,14 +452,17 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(EN_ARBEIDSGIVER, sykepengegrunnlagInspektør.inntektskilde) assertEquals(EN_ARBEIDSGIVER, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } } håndterYtelser(1.vedtaksperiode) håndterOverstyrArbeidsforhold(1.januar, ArbeidsforholdOverstyrt(a2, false, "test")) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -391,11 +470,15 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } @@ -433,9 +516,24 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a3, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a3, + 1.desember(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -482,10 +580,12 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterOverstyrArbeidsforhold(1.januar, ArbeidsforholdOverstyrt(a3, true, "test")) a1 { - håndterSkjønnsmessigFastsettelse(1.januar, listOf( + håndterSkjønnsmessigFastsettelse( + 1.januar, listOf( OverstyrtArbeidsgiveropplysning(a1, 31000.månedlig), OverstyrtArbeidsgiveropplysning(a2, 31000.månedlig) - )) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -559,9 +659,15 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertTrue(inspektør.inntektsopplysning(1.vedtaksperiode, a2) is SkattSykepengegrunnlag) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertPeriode(17.januar til 31.januar, 1080.daglig) - håndterOverstyrArbeidsforhold(1.januar, ArbeidsforholdOverstyrt(a2, deaktivert = true, "deaktiverer a2")) + håndterOverstyrArbeidsforhold( + 1.januar, + ArbeidsforholdOverstyrt(a2, deaktivert = true, "deaktiverer a2") + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, inntekt))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, inntekt)) + ) assertTrue(inspektør.inntektsopplysning(1.vedtaksperiode, a1) is SkjønnsmessigFastsatt) håndterYtelser(1.vedtaksperiode) @@ -569,7 +675,10 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() assertPeriode(17.januar til 31.januar, 1523.daglig) - håndterOverstyrArbeidsforhold(1.januar, ArbeidsforholdOverstyrt(a2, deaktivert = false, "aktiverer a2 igjen")) + håndterOverstyrArbeidsforhold( + 1.januar, + ArbeidsforholdOverstyrt(a2, deaktivert = false, "aktiverer a2 igjen") + ) assertTrue(inspektør.inntektsopplysning(1.vedtaksperiode, a1) is Inntektsmelding) assertTrue(inspektør.inntektsopplysning(1.vedtaksperiode, a2) is SkattSykepengegrunnlag) håndterYtelser(1.vedtaksperiode) @@ -577,7 +686,10 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() assertPeriode(17.januar til 31.januar, 1080.daglig) - assertInfo("En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", person()) + assertInfo( + "En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", + person() + ) } } @@ -599,9 +711,24 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterVilkårsgrunnlag( 1.vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a3, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a3, + 1.desember(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -631,10 +758,12 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { a1 { assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) - håndterSkjønnsmessigFastsettelse(1.januar, listOf( + håndterSkjønnsmessigFastsettelse( + 1.januar, listOf( OverstyrtArbeidsgiveropplysning(a1, inntekt), OverstyrtArbeidsgiveropplysning(a2, inntekt) - )) + ) + ) assertTrue(inspektør.inntektsopplysning(1.vedtaksperiode, a1) is SkjønnsmessigFastsatt) assertTrue(inspektør.inntektsopplysning(1.vedtaksperiode, a2) is SkjønnsmessigFastsatt) } @@ -646,7 +775,10 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { håndterUtbetalt() assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) } - håndterOverstyrArbeidsforhold(1.januar, ArbeidsforholdOverstyrt(a3, false, "aktiverer a3 igjen")) + håndterOverstyrArbeidsforhold( + 1.januar, + ArbeidsforholdOverstyrt(a3, false, "aktiverer a3 igjen") + ) (a1 og a2) { håndterYtelser(1.vedtaksperiode) @@ -657,17 +789,25 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { assertTrue(inspektør.inntektsopplysning(1.vedtaksperiode, a2) is Inntektsmelding) assertTrue(inspektør.inntektsopplysning(1.vedtaksperiode, a3) is SkattSykepengegrunnlag) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) - assertInfo("En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", person()) + assertInfo( + "En endring hos en arbeidsgiver har medført at det trekkes tilbake penger hos andre arbeidsgivere", + person() + ) } } - private fun TestPerson.TestArbeidsgiver.assertDag(dato: LocalDate, arbeidsgiverbeløp: Inntekt, personbeløp: Inntekt) { + private fun TestPerson.TestArbeidsgiver.assertDag( + dato: LocalDate, + arbeidsgiverbeløp: Inntekt, + personbeløp: Inntekt + ) { inspektør(orgnummer).sisteUtbetalingUtbetalingstidslinje()[dato].let { if (it is Utbetalingsdag.NavHelgDag) return assertEquals(arbeidsgiverbeløp, it.økonomi.inspektør.arbeidsgiverbeløp) assertEquals(personbeløp, it.økonomi.inspektør.personbeløp) } } + private fun TestPerson.TestArbeidsgiver.assertPeriode( periode: Periode, arbeidsgiverbeløp: Inntekt, @@ -676,12 +816,26 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { periode.forEach { assertDag(it, arbeidsgiverbeløp, personbeløp) } - private fun TestPerson.TestArbeidsgiver.håndterVilkårsgrunnlagMedGhostArbeidsforhold(vedtaksperiode: UUID, skjæringstidspunkt: LocalDate = 1.januar, inntekt: Inntekt = INNTEKT) { + private fun TestPerson.TestArbeidsgiver.håndterVilkårsgrunnlagMedGhostArbeidsforhold( + vedtaksperiode: UUID, + skjæringstidspunkt: LocalDate = 1.januar, + inntekt: Inntekt = INNTEKT + ) { håndterVilkårsgrunnlag( vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.desember(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( @@ -692,5 +846,8 @@ internal class RevurderArbeidsforholdTest: AbstractDslTest() { ) } - private fun TestArbeidsgiverInspektør.inntektsopplysning(vedtaksperiode: UUID, orgnr: String) = vilkårsgrunnlag(vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.first { it.gjelder(orgnr) }.inspektør.inntektsopplysning + private fun TestArbeidsgiverInspektør.inntektsopplysning(vedtaksperiode: UUID, orgnr: String) = + vilkårsgrunnlag(vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.arbeidsgiverInntektsopplysninger.first { + it.gjelder(orgnr) + }.inspektør.inntektsopplysning } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurdereGhostInntektTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurdereGhostInntektTest.kt index ff0c57d793..93ed7db7ea 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurdereGhostInntektTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurdereGhostInntektTest.kt @@ -38,7 +38,7 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.fail import org.junit.jupiter.api.Test -internal class RevurderGhostInntektTest: AbstractDslTest() { +internal class RevurderGhostInntektTest : AbstractDslTest() { @Test fun `revurder ghost-inntekt ned`() { @@ -52,7 +52,8 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() assertPeriode(17.januar til 31.januar, 1080.daglig) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -60,18 +61,32 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } } nullstillTilstandsendringer() - håndterOverstyrInntekt(inntekt = 15000.månedlig, skjæringstidspunkt = 1.januar, organisasjonsnummer = a2) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT), OverstyrtArbeidsgiveropplysning(a2, 15000.månedlig))) + håndterOverstyrInntekt( + inntekt = 15000.månedlig, + skjæringstidspunkt = 1.januar, + organisasjonsnummer = a2 + ) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning(a1, INNTEKT), + OverstyrtArbeidsgiveropplysning(a2, 15000.månedlig) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -89,7 +104,8 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { AVSLUTTET ) assertPeriode(17.januar til 31.januar, 1431.daglig) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(552000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -97,11 +113,15 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkjønnsmessigFastsatt::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(15000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkjønnsmessigFastsatt::class, it.inntektsopplysning::class) } @@ -121,7 +141,8 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() assertPeriode(17.januar til 31.januar, 1080.daglig) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -129,11 +150,15 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } @@ -149,8 +174,18 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() assertPeriode(17.januar til 31.januar, 943.daglig) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(852000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -158,11 +193,15 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(40000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Saksbehandler::class, it.inntektsopplysning::class) } @@ -182,7 +221,8 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() assertPeriode(17.januar til 31.januar, 1080.daglig) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -190,18 +230,32 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } } nullstillTilstandsendringer() - håndterOverstyrInntekt(inntekt = 0.månedlig, skjæringstidspunkt = 1.januar, organisasjonsnummer = a2) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT), OverstyrtArbeidsgiveropplysning(a2, 0.månedlig))) + håndterOverstyrInntekt( + inntekt = 0.månedlig, + skjæringstidspunkt = 1.januar, + organisasjonsnummer = a2 + ) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf( + OverstyrtArbeidsgiveropplysning(a1, INNTEKT), + OverstyrtArbeidsgiveropplysning(a2, 0.månedlig) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -219,7 +273,8 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { TIL_UTBETALING, AVSLUTTET ) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(372000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -227,11 +282,15 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkjønnsmessigFastsatt::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(0.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkjønnsmessigFastsatt::class, it.inntektsopplysning::class) } @@ -256,7 +315,10 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars)) håndterSøknad(mars) håndterInntektsmelding(listOf(1.mars til 16.mars), beregnetInntekt = INNTEKT) - håndterVilkårsgrunnlagMedGhostArbeidsforhold(2.vedtaksperiode, skjæringstidspunkt = 1.mars) + håndterVilkårsgrunnlagMedGhostArbeidsforhold( + 2.vedtaksperiode, + skjæringstidspunkt = 1.mars + ) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) @@ -277,7 +339,12 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { skjæringstidspunkt = 1.januar, organisasjonsnummer = a2 ) - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -286,7 +353,8 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) assertPeriode(17.mars til 31.mars, 1080.daglig) - (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(1.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(564000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -294,16 +362,21 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(1.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(16000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Saksbehandler::class, it.inntektsopplysning::class) } } - (inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> + (inspektør.vilkårsgrunnlag(2.vedtaksperiode)?.inspektør + ?: fail { "finner ikke vilkårsgrunnlag" }).also { vilkårsgrunnlag -> val sykepengegrunnlagInspektør = vilkårsgrunnlag.inntektsgrunnlag.inspektør assertEquals(744000.årlig, sykepengegrunnlagInspektør.beregningsgrunnlag) @@ -311,11 +384,15 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { assertEquals(FLERE_ARBEIDSGIVERE, sykepengegrunnlagInspektør.inntektskilde) assertEquals(FLERE_ARBEIDSGIVERE, inspektør.inntektskilde(2.vedtaksperiode)) assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a1).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a1 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(Inntektsmelding::class, it.inntektsopplysning::class) } - sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue(a2).inspektør.also { + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysningerPerArbeidsgiver.getValue( + a2 + ).inspektør.also { assertEquals(31000.månedlig, it.inntektsopplysning.inspektør.beløp) assertEquals(SkattSykepengegrunnlag::class, it.inntektsopplysning::class) } @@ -341,13 +418,18 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { } - private fun TestPerson.TestArbeidsgiver.assertDag(dato: LocalDate, arbeidsgiverbeløp: Inntekt, personbeløp: Inntekt) { + private fun TestPerson.TestArbeidsgiver.assertDag( + dato: LocalDate, + arbeidsgiverbeløp: Inntekt, + personbeløp: Inntekt + ) { inspektør(orgnummer).sisteUtbetalingUtbetalingstidslinje()[dato].let { if (it is Utbetalingsdag.NavHelgDag) return assertEquals(arbeidsgiverbeløp, it.økonomi.inspektør.arbeidsgiverbeløp) assertEquals(personbeløp, it.økonomi.inspektør.personbeløp) } } + private fun TestPerson.TestArbeidsgiver.assertPeriode( periode: Periode, arbeidsgiverbeløp: Inntekt, @@ -356,12 +438,26 @@ internal class RevurderGhostInntektTest: AbstractDslTest() { periode.forEach { assertDag(it, arbeidsgiverbeløp, personbeløp) } - private fun TestPerson.TestArbeidsgiver.håndterVilkårsgrunnlagMedGhostArbeidsforhold(vedtaksperiode: UUID, skjæringstidspunkt: LocalDate = 1.januar, inntekt: Inntekt = INNTEKT) { + private fun TestPerson.TestArbeidsgiver.håndterVilkårsgrunnlagMedGhostArbeidsforhold( + vedtaksperiode: UUID, + skjæringstidspunkt: LocalDate = 1.januar, + inntekt: Inntekt = INNTEKT + ) { håndterVilkårsgrunnlag( vedtaksperiode, arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, 1.desember(2017), null, Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + null, + Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + 1.desember(2017), + null, + Arbeidsforholdtype.ORDINÆRT + ) ), inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( inntekter = listOf( diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingFerieTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingFerieTest.kt index 7e8885a78b..433f93bbe4 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingFerieTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingFerieTest.kt @@ -37,7 +37,10 @@ internal class RevurderingFerieTest : AbstractEndToEndTest() { @Test fun `Periode med bare ferie, så kommer en tidligere periode med sykdom - ferie skal ikke revurderes`() { håndterSykmelding(Sykmeldingsperiode(5.februar, 28.februar)) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(5.februar, 28.februar, 100.prosent), Søknad.Søknadsperiode.Ferie(5.februar, 28.februar)) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(5.februar, 28.februar, 100.prosent), + Søknad.Søknadsperiode.Ferie(5.februar, 28.februar) + ) håndterInntektsmelding(listOf(5.februar til 21.februar)) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) @@ -51,8 +54,15 @@ internal class RevurderingFerieTest : AbstractEndToEndTest() { fun `Forlengelse med bare ferie, så kommer en tidligere periode med sykdom - ferie skal revurderes`() { nyttVedtak(5.februar til 28.februar) håndterSykmelding(Sykmeldingsperiode(1.mars, 31.mars)) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.mars, 31.mars, 100.prosent), Søknad.Søknadsperiode.Ferie(1.mars, 31.mars)) - håndterInntektsmelding(listOf(5.mars til 21.mars), vedtaksperiodeIdInnhenter = 2.vedtaksperiode, avsendersystem = ALTINN) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.mars, 31.mars, 100.prosent), + Søknad.Søknadsperiode.Ferie(1.mars, 31.mars) + ) + håndterInntektsmelding( + listOf(5.mars til 21.mars), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode, + avsendersystem = ALTINN + ) håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) @@ -71,7 +81,10 @@ internal class RevurderingFerieTest : AbstractEndToEndTest() { fun `Syk - Ferie - Syk, ferie skal i Avsluttet og revurderes ved revurdering av første periode`() { nyttVedtak(januar) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) - håndterSøknad(Søknad.Søknadsperiode.Sykdom(1.februar, 28.februar, 100.prosent), Søknad.Søknadsperiode.Ferie(1.februar, 28.februar)) + håndterSøknad( + Søknad.Søknadsperiode.Sykdom(1.februar, 28.februar, 100.prosent), + Søknad.Søknadsperiode.Ferie(1.februar, 28.februar) + ) håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) forlengVedtak(mars) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingFlereAGV2E2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingFlereAGV2E2ETest.kt index c596cdd223..b9e125289c 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingFlereAGV2E2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingFlereAGV2E2ETest.kt @@ -56,7 +56,7 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Test -internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { +internal class RevurderingFlereAGV2E2ETest : AbstractEndToEndTest() { @Test fun `revurdere første periode - flere ag - ag 1`() { @@ -64,16 +64,35 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { forlengVedtak(februar, a1, a2) forlengVedtak(mars, a1, a2) nullstillTilstandsendringer() - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag)), orgnummer = a1) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(17.januar, Feriedag)), + orgnummer = a1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt(orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET, + orgnummer = a1 + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a1) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a2 + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a2) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a2) } @@ -84,9 +103,18 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { forlengVedtak(februar, a1, a2) forlengVedtak(mars, a1, a2) nullstillTilstandsendringer() - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.februar, Feriedag)), orgnummer = a1) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(5.februar, Feriedag)), + orgnummer = a1 + ) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a1) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a2) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a2) @@ -102,7 +130,13 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.mars, Feriedag)), orgnummer = a1) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) assertTilstander(2.vedtaksperiode, AVSLUTTET, orgnummer = a1) - assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) + assertTilstander( + 3.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a2) assertTilstander(2.vedtaksperiode, AVSLUTTET, orgnummer = a2) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a2) @@ -115,7 +149,13 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { forlengVedtak(mars, a1, a2) nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.januar, Feriedag)), orgnummer = a2) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a1) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a1) assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a2) @@ -129,9 +169,18 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { forlengVedtak(februar, a1, a2) forlengVedtak(mars, a1, a2) nullstillTilstandsendringer() - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.februar, Feriedag)), orgnummer = a2) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(5.februar, Feriedag)), + orgnummer = a2 + ) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a1) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a2) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a2) @@ -147,7 +196,13 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.mars, Feriedag)), orgnummer = a2) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a1) assertTilstander(2.vedtaksperiode, AVSLUTTET, orgnummer = a1) - assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) + assertTilstander( + 3.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) assertTilstander(1.vedtaksperiode, AVSLUTTET, orgnummer = a2) assertTilstander(2.vedtaksperiode, AVSLUTTET, orgnummer = a2) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a2) @@ -165,9 +220,20 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Sykedag, 100)), a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_REVURDERING, orgnummer = a2) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_REVURDERING, + orgnummer = a2 + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, orgnummer = a2) } @@ -187,7 +253,13 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, orgnummer = a1) assertTilstander(1.vedtaksperiode, AVVENTER_REVURDERING, orgnummer = a2) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, orgnummer = a2) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, orgnummer = a2) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + orgnummer = a2 + ) } @Test @@ -226,7 +298,12 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) inspektør(a1) { - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING) } @@ -245,7 +322,14 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode, orgnummer = a1) inspektør(a2) { - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) } @@ -281,7 +365,12 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } inspektør(a3) { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) } nullstillTilstandsendringer() @@ -299,7 +388,14 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } inspektør(a3) { - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) } } @@ -318,13 +414,27 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { håndterUtbetalt() inspektør(a1) { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } inspektør(a2) { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } } @@ -337,7 +447,7 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { * 3. a1 v1 revurdert, a1 v2 revurderes, a2 v1 avventer andre arbeidsgivere * */ nyttVedtak(januar, orgnummer = a1) - førstegangTilGodkjenning(mars, a1 to 2.vedtaksperiode, a2 to null ) + førstegangTilGodkjenning(mars, a1 to 2.vedtaksperiode, a2 to null) håndterUtbetalingsgodkjenning(2.vedtaksperiode, orgnummer = a1) nullstillTilstandsendringer() @@ -356,7 +466,12 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { håndterUtbetalt(orgnummer = a1) inspektør(a1) { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) assertNotNull(observatør.avsluttetMedVedtakEvent[2.vedtaksperiode.id(ORGNUMMER)]) } @@ -393,7 +508,12 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { håndterUtbetalt(orgnummer = a1) inspektør(a1) { - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) assertNotNull(observatør.avsluttetMedVedtakEvent[2.vedtaksperiode.id(ORGNUMMER)]) } @@ -449,7 +569,12 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) inspektør(a1) { - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING) } @@ -464,7 +589,11 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { nyeVedtak(januar, a1, a2) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag)), a1) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(20.januar til 31.januar, 100)), orgnummer = a1) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(20.januar til 31.januar, 100)), + orgnummer = a1 + ) assertVarsel(RV_AY_5, 1.vedtaksperiode.filter(a1)) assertIngenVarsel(RV_AY_5, 1.vedtaksperiode.filter(a2)) } @@ -476,7 +605,11 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { forlengVedtak(mars, a2) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag)), a1) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(20.mars til 31.mars, 100)), orgnummer = a1) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(20.mars til 31.mars, 100)), + orgnummer = a1 + ) assertIngenVarsel(RV_AY_5) } @@ -485,15 +618,19 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { nyeVedtak(januar, a1, a2) forlengVedtak(februar, a1, a2) - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(17.januar, Feriedag), - ManuellOverskrivingDag(18.januar, Feriedag) - ), a1) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(17.januar, Feriedag), + ManuellOverskrivingDag(18.januar, Feriedag) + ), a1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(18.januar, Sykedag, 100) - ), a1) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(18.januar, Sykedag, 100) + ), a1 + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) @@ -510,7 +647,10 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { } inspektør(a2).utbetalinger(1.vedtaksperiode).also { utbetalinger -> assertEquals(3, utbetalinger.size) - assertEquals(100, utbetalinger.last().inspektør.utbetalingstidslinje[18.januar].økonomi.inspektør.totalGrad) + assertEquals( + 100, + utbetalinger.last().inspektør.utbetalingstidslinje[18.januar].økonomi.inspektør.totalGrad + ) } inspektør(a2).utbetalinger(2.vedtaksperiode).also { utbetalinger -> assertEquals(1, utbetalinger.size) @@ -521,8 +661,14 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { fun `Varsel på perioder hos begge AG dersom grad er under 20 prosent`() { nyeVedtak(januar, a1, a2) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Sykedag, 19)), orgnummer = a1) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Sykedag, 19)), orgnummer = a2) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(17.januar, Sykedag, 19)), + orgnummer = a1 + ) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(17.januar, Sykedag, 19)), + orgnummer = a2 + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) assertEquals(19, inspektør(a1).sykdomstidslinje.inspektør.grader[17.januar]) @@ -537,7 +683,10 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { nyPeriode(1.februar til 18.februar, a2) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a2) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag)), orgnummer = a1) + håndterOverstyrTidslinje( + listOf(ManuellOverskrivingDag(17.januar, Feriedag)), + orgnummer = a1 + ) nullstillTilstandsendringer() håndterUtbetalingshistorikkEtterInfotrygdendring( @@ -565,6 +714,11 @@ internal class RevurderingFlereAGV2E2ETest: AbstractEndToEndTest() { assertNull(linje.statuskode) } - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, orgnummer = a1) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + orgnummer = a1 + ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingInntektV2E2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingInntektV2E2ETest.kt index 59398615e1..dfff3a2c09 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingInntektV2E2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingInntektV2E2ETest.kt @@ -93,7 +93,16 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) } @@ -118,7 +127,8 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { assertDiff(-3047) - assertTilstander(1.vedtaksperiode, + assertTilstander( + 1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, @@ -130,8 +140,14 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { AVVENTER_GODKJENNING_REVURDERING ) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim()) - assertEquals("PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim() + ) + assertEquals( + "PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", + inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim() + ) } @Test @@ -152,11 +168,28 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { assertDiff(-3047) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim()) - assertEquals("PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim() + ) + assertEquals( + "PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", + inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim() + ) } @Test @@ -169,7 +202,8 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - assertTilstander(1.vedtaksperiode, + assertTilstander( + 1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, @@ -180,8 +214,14 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { ) assertDiff(-3047) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim()) - assertEquals("PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim() + ) + assertEquals( + "PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", + inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim() + ) } @Test @@ -195,7 +235,8 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - assertTilstander(1.vedtaksperiode, + assertTilstander( + 1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, @@ -207,8 +248,14 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { ) assertDiff(-3047) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim()) - assertEquals("PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim() + ) + assertEquals( + "PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", + inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim() + ) } @Test @@ -246,8 +293,14 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { assertDiff(-11126) assertEquals(33235, inspektør.sisteUtbetaling().arbeidsgiverOppdrag.totalbeløp()) - assertEquals("SSSSSHH SSSSSHH SSSSSFF FFFFFFF FSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim()) - assertEquals("PPPPPPP PPPPPPP PPNNNFF FFFFFFF FNN", inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSFF FFFFFFF FSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim() + ) + assertEquals( + "PPPPPPP PPPPPPP PPNNNFF FFFFFFF FNN", + inspektør.sisteUtbetalingUtbetalingstidslinje().toString().trim() + ) } @Test @@ -275,7 +328,10 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { assertTrue(inspektør.utbetaling(0).erUtbetalt) assertTrue(inspektør.utbetaling(1).erUbetalt) - assertEquals(inspektør.utbetaling(0).arbeidsgiverOppdrag.fagsystemId, inspektør.utbetaling(1).arbeidsgiverOppdrag.fagsystemId) + assertEquals( + inspektør.utbetaling(0).arbeidsgiverOppdrag.fagsystemId, + inspektør.utbetaling(1).arbeidsgiverOppdrag.fagsystemId + ) assertDiff(-2112) } @@ -283,7 +339,12 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { fun `revurder inntekt ukjent skjæringstidspunkt`() { nyttVedtak(januar, 100.prosent) nullstillTilstandsendringer() - assertThrows { håndterOverstyrInntekt(inntekt = 32000.månedlig, skjæringstidspunkt = 2.januar) } + assertThrows { + håndterOverstyrInntekt( + inntekt = 32000.månedlig, + skjæringstidspunkt = 2.januar + ) + } assertIngenFunksjonelleFeil(AktivitetsloggFilter.person()) assertTilstander(1.vedtaksperiode, AVSLUTTET) assertEquals(1, inspektør.antallUtbetalinger) @@ -295,7 +356,8 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { nyttVedtak(mars, 100.prosent, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) nullstillTilstandsendringer() - val korrelasjonsIdPåUtbetaling1 = inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(1.vedtaksperiode).inspektør.korrelasjonsId + val korrelasjonsIdPåUtbetaling1 = + inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(1.vedtaksperiode).inspektør.korrelasjonsId håndterOverstyrInntekt(inntekt = 32000.månedlig, skjæringstidspunkt = 1.januar) håndterYtelser(1.vedtaksperiode) @@ -315,8 +377,10 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { ) assertEquals(3, inspektør.antallUtbetalinger) - val korrelasjonsIdPåUtbetaling2 = inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(1.vedtaksperiode).inspektør.korrelasjonsId - val korrelasjonsIdPåUtbetaling3 = inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(2.vedtaksperiode).inspektør.korrelasjonsId + val korrelasjonsIdPåUtbetaling2 = + inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(1.vedtaksperiode).inspektør.korrelasjonsId + val korrelasjonsIdPåUtbetaling3 = + inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(2.vedtaksperiode).inspektør.korrelasjonsId assertEquals(korrelasjonsIdPåUtbetaling1, korrelasjonsIdPåUtbetaling2) assertNotEquals(korrelasjonsIdPåUtbetaling2, korrelasjonsIdPåUtbetaling3) @@ -331,11 +395,17 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertEquals(4, inspektør.antallUtbetalinger) - val korrelasjonsIdPåUtbetaling4 = inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(1.vedtaksperiode).inspektør.korrelasjonsId - val korrelasjonsIdPåUtbetaling5 = inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(2.vedtaksperiode).inspektør.korrelasjonsId + val korrelasjonsIdPåUtbetaling4 = + inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(1.vedtaksperiode).inspektør.korrelasjonsId + val korrelasjonsIdPåUtbetaling5 = + inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(2.vedtaksperiode).inspektør.korrelasjonsId assertEquals(korrelasjonsIdPåUtbetaling3, korrelasjonsIdPåUtbetaling5) assertNotEquals(korrelasjonsIdPåUtbetaling4, korrelasjonsIdPåUtbetaling5) @@ -345,7 +415,11 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { @Test fun `revurder inntekt tidligere skjæringstidspunkt - med samme AGP`() { nyttVedtak(januar, 100.prosent) - nyttVedtak(2.februar til 28.februar, 100.prosent, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + nyttVedtak( + 2.februar til 28.februar, + 100.prosent, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) nullstillTilstandsendringer() håndterOverstyrInntekt(inntekt = 32000.månedlig, skjæringstidspunkt = 1.januar) @@ -367,8 +441,10 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { assertEquals(3, inspektør.antallUtbetalinger) - val korrelasjonsIdPåUtbetaling1 = inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(1.vedtaksperiode).inspektør.korrelasjonsId - val korrelasjonsIdPåUtbetaling2 = inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(2.vedtaksperiode).inspektør.korrelasjonsId + val korrelasjonsIdPåUtbetaling1 = + inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(1.vedtaksperiode).inspektør.korrelasjonsId + val korrelasjonsIdPåUtbetaling2 = + inspektør.sisteAvsluttedeUtbetalingForVedtaksperiode(2.vedtaksperiode).inspektør.korrelasjonsId assertEquals(korrelasjonsIdPåUtbetaling1, korrelasjonsIdPåUtbetaling2) assertDiff(506) @@ -378,7 +454,10 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { assertEquals(januarutbetaling.korrelasjonsId, revurdering.korrelasjonsId) assertEquals(februarutbetaling.korrelasjonsId, revurdering.korrelasjonsId) - assertEquals("PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", revurdering.utbetalingstidslinje.toString().trim()) + assertEquals( + "PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", + revurdering.utbetalingstidslinje.toString().trim() + ) assertEquals(januar, januarutbetaling.periode) assertEquals(1.januar til 28.februar, februarutbetaling.periode) assertEquals(januar, revurdering.periode) @@ -436,7 +515,10 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { nyttVedtak(januar, 100.prosent, beregnetInntekt = 5000.månedlig) nullstillTilstandsendringer() håndterOverstyrInntekt(inntekt = 3000.månedlig, skjæringstidspunkt = 1.januar) - håndterSkjønnsmessigFastsettelse(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, 3000.månedlig))) + håndterSkjønnsmessigFastsettelse( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, 3000.månedlig)) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -522,7 +604,12 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) assertTilstander( 2.vedtaksperiode, AVSLUTTET, @@ -539,7 +626,10 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { @Test fun `revurdering av inntekt delegeres til den første perioden som har en utbetalingstidslinje - periode uten utbetaling først`() { håndterSykmelding(januar) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Søknad.Søknadsperiode.Ferie(1.januar, 31.januar)) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Søknad.Søknadsperiode.Ferie(1.januar, 31.januar) + ) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) @@ -588,20 +678,29 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { nyttVedtak(mars, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) forlengVedtak(april) val overstyrInntektHendelseId = UUID.randomUUID() - håndterOverstyrInntekt(skjæringstidspunkt = 1.mars, meldingsreferanseId = overstyrInntektHendelseId) + håndterOverstyrInntekt( + skjæringstidspunkt = 1.mars, + meldingsreferanseId = overstyrInntektHendelseId + ) - inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().also { behandling -> - assertNotEquals(overstyrInntektHendelseId, behandling.kilde.meldingsreferanseId) - assertTrue(overstyrInntektHendelseId !in behandling.endringer.map { it.dokumentsporing }.ider()) - } - inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().also { behandling -> - assertEquals(overstyrInntektHendelseId, behandling.kilde.meldingsreferanseId) - assertTrue(overstyrInntektHendelseId !in behandling.endringer.map { it.dokumentsporing }.ider()) - } - inspektør.vedtaksperioder(3.vedtaksperiode).inspektør.behandlinger.last().also { behandling -> - assertEquals(overstyrInntektHendelseId, behandling.kilde.meldingsreferanseId) - assertTrue(overstyrInntektHendelseId !in behandling.endringer.map { it.dokumentsporing }.ider()) - } + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last() + .also { behandling -> + assertNotEquals(overstyrInntektHendelseId, behandling.kilde.meldingsreferanseId) + assertTrue(overstyrInntektHendelseId !in behandling.endringer.map { it.dokumentsporing } + .ider()) + } + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last() + .also { behandling -> + assertEquals(overstyrInntektHendelseId, behandling.kilde.meldingsreferanseId) + assertTrue(overstyrInntektHendelseId !in behandling.endringer.map { it.dokumentsporing } + .ider()) + } + inspektør.vedtaksperioder(3.vedtaksperiode).inspektør.behandlinger.last() + .also { behandling -> + assertEquals(overstyrInntektHendelseId, behandling.kilde.meldingsreferanseId) + assertTrue(overstyrInntektHendelseId !in behandling.endringer.map { it.dokumentsporing } + .ider()) + } } @Test @@ -621,8 +720,14 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { assertDiff(0) assertTrue(inspektør.utbetaling(1).personOppdrag.harUtbetalinger()) assertTrue(inspektør.utbetaling(1).arbeidsgiverOppdrag.harUtbetalinger()) // opphører arbeidsgiveroppdraget - assertEquals(17.januar til 31.januar, Oppdrag.periode(inspektør.utbetaling(1).personOppdrag)) - assertEquals(17.januar, inspektør.utbetaling(1).arbeidsgiverOppdrag.first().inspektør.datoStatusFom) + assertEquals( + 17.januar til 31.januar, + Oppdrag.periode(inspektør.utbetaling(1).personOppdrag) + ) + assertEquals( + 17.januar, + inspektør.utbetaling(1).arbeidsgiverOppdrag.first().inspektør.datoStatusFom + ) assertEquals(15741, inspektør.utbetaling(1).personOppdrag.nettoBeløp()) assertEquals(-15741, inspektør.utbetaling(1).arbeidsgiverOppdrag.nettoBeløp()) @@ -645,8 +750,14 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { assertDiff(0) assertTrue(inspektør.utbetaling(1).personOppdrag.harUtbetalinger()) assertTrue(inspektør.utbetaling(1).arbeidsgiverOppdrag.harUtbetalinger()) // opphører arbeidsgiveroppdraget - assertEquals(17.januar til 31.januar, Oppdrag.periode(inspektør.utbetaling(1).personOppdrag)) - assertEquals(17.januar til 31.januar, Oppdrag.periode(inspektør.utbetaling(1).arbeidsgiverOppdrag)) + assertEquals( + 17.januar til 31.januar, + Oppdrag.periode(inspektør.utbetaling(1).personOppdrag) + ) + assertEquals( + 17.januar til 31.januar, + Oppdrag.periode(inspektør.utbetaling(1).arbeidsgiverOppdrag) + ) assertEquals(3047, inspektør.utbetaling(1).personOppdrag.nettoBeløp()) assertEquals(-3047, inspektør.utbetaling(1).arbeidsgiverOppdrag.nettoBeløp()) @@ -663,7 +774,12 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { assertEquals(1, observatør.avsluttetMedVedtakEvent.size) assertNull(observatør.avsluttetMedVedtakEvent[2.vedtaksperiode.id(ORGNUMMER)]) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) assertEquals(2, observatør.avsluttetMedVedtakEvent.size) assertNotNull(observatør.avsluttetMedVedtakEvent[2.vedtaksperiode.id(ORGNUMMER)]) @@ -684,19 +800,26 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { @Test fun `refusjonsopplysninger er uendret etter revurdert inntekt`() { nyttVedtak(januar) - val refusjonsopplysningerFørRevurdering = inspektør.refusjonsopplysningerFraVilkårsgrunnlag(1.januar) + val refusjonsopplysningerFørRevurdering = + inspektør.refusjonsopplysningerFraVilkårsgrunnlag(1.januar) håndterOverstyrInntekt(inntekt = 25000.månedlig, skjæringstidspunkt = 1.januar) - val refusjonsopplysningerEtterRevurdering = inspektør.refusjonsopplysningerFraVilkårsgrunnlag(1.januar) + val refusjonsopplysningerEtterRevurdering = + inspektør.refusjonsopplysningerFraVilkårsgrunnlag(1.januar) assertEquals(refusjonsopplysningerFørRevurdering, refusjonsopplysningerEtterRevurdering) } - private inline fun assertDag(dato: LocalDate, arbeidsgiverbeløp: Inntekt, personbeløp: Inntekt = INGEN, aktuellDagsinntekt: Inntekt = INGEN) { + private inline fun assertDag( + dato: LocalDate, + arbeidsgiverbeløp: Inntekt, + personbeløp: Inntekt = INGEN, + aktuellDagsinntekt: Inntekt = INGEN + ) { inspektør.sykdomshistorikk.tidslinje(0)[dato].let { - assertTrue(it is D) { "Forventet ${D::class.simpleName} men var ${it::class.simpleName}"} + assertTrue(it is D) { "Forventet ${D::class.simpleName} men var ${it::class.simpleName}" } } inspektør.sisteUtbetalingUtbetalingstidslinje()[dato].let { - assertTrue(it is UD) { "Forventet ${UD::class.simpleName} men var ${it::class.simpleName}"} + assertTrue(it is UD) { "Forventet ${UD::class.simpleName} men var ${it::class.simpleName}" } assertEquals(arbeidsgiverbeløp, it.økonomi.inspektør.arbeidsgiverbeløp) assertEquals(personbeløp, it.økonomi.inspektør.personbeløp) assertEquals(aktuellDagsinntekt, it.økonomi.inspektør.aktuellDagsinntekt) @@ -706,4 +829,4 @@ internal class RevurderingInntektV2E2ETest : AbstractEndToEndTest() { private fun assertDiff(diff: Int) { assertEquals(diff, inspektør.sisteUtbetaling().nettobeløp) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingOutOfOrderGapTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingOutOfOrderGapTest.kt index 4588f6abe7..189168d764 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingOutOfOrderGapTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingOutOfOrderGapTest.kt @@ -94,23 +94,41 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { fun `Arbeidsgiver med kort gap mellom sykefravær blir forsøkt sklitaklet av annen arbeidsgiver som tetter gapet og flytter skjæringstidspunktet`() { håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), orgnummer = a1) håndterInntektsmeldingPortal(listOf(1.januar til 16.januar), orgnummer = a1) - håndterVilkårsgrunnlagMedGhost(1.vedtaksperiode, skjæringstidspunkt = 1.januar, arbeidsgiver = a1, ghost = a2) + håndterVilkårsgrunnlagMedGhost( + 1.vedtaksperiode, + skjæringstidspunkt = 1.januar, + arbeidsgiver = a1, + ghost = a2 + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt() håndterSøknad(Sykdom(25.januar, 31.januar, 100.prosent), orgnummer = a1) - håndterInntektsmeldingPortal(emptyList(), orgnummer = a1, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmeldingPortal( + emptyList(), + orgnummer = a1, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) - håndterVilkårsgrunnlagMedGhost(2.vedtaksperiode, skjæringstidspunkt = 25.januar, arbeidsgiver = a1, ghost = a2) + håndterVilkårsgrunnlagMedGhost( + 2.vedtaksperiode, + skjæringstidspunkt = 25.januar, + arbeidsgiver = a1, + ghost = a2 + ) håndterYtelser(2.vedtaksperiode, orgnummer = a1) håndterSimulering(2.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(2.vedtaksperiode, orgnummer = a1) håndterUtbetalt() håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), orgnummer = a2) - håndterInntektsmeldingPortal(listOf(1.januar til 16.januar), orgnummer = a2, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmeldingPortal( + listOf(1.januar til 16.januar), + orgnummer = a2, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) håndterYtelser(1.vedtaksperiode, orgnummer = a1) håndterSimulering(1.vedtaksperiode, orgnummer = a1) @@ -137,9 +155,18 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { nyttVedtak(1.januar til 25.januar) nyttVedtak(februar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) håndterSøknad(Sykdom(26.januar, 31.januar, 100.prosent)) - håndterYtelser(3.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(26.januar til 31.januar, 100))) + håndterYtelser( + 3.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(26.januar til 31.januar, 100)) + ) assertVarsel(`Overlapper med foreldrepenger`, 3.vedtaksperiode.filter()) - assertTilstander(3.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test @@ -192,8 +219,21 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { } assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK, AVVENTER_GODKJENNING, AVSLUTTET) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK, + AVVENTER_GODKJENNING, + AVSLUTTET + ) } @Test @@ -202,7 +242,11 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { nyttVedtak(april, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) nyPeriode(10.februar til 28.februar) - håndterInntektsmelding(listOf(1.januar til 16.januar), 10.februar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + 10.februar, + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) håndterVilkårsgrunnlag(3.vedtaksperiode) håndterYtelser(3.vedtaksperiode) håndterSimulering(3.vedtaksperiode) @@ -215,7 +259,10 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { inspektør.utbetaling(2).also { inspektør -> assertEquals(inspektør.korrelasjonsId, utbetaling1.korrelasjonsId) - assertEquals(inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), utbetaling1.arbeidsgiverOppdrag.inspektør.fagsystemId()) + assertEquals( + inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + utbetaling1.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) assertEquals(2, inspektør.arbeidsgiverOppdrag.size) assertEquals(UEND, inspektør.arbeidsgiverOppdrag[0].inspektør.endringskode) assertEquals(17.januar, inspektør.arbeidsgiverOppdrag[0].inspektør.fom) @@ -229,14 +276,20 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { @Test fun `out-of-order søknad medfører revurdering -- AvventerVilkårsprøving`() { nyPeriode(1.mars til 10.mars) - håndterInntektsmelding(arbeidsgiverperioder = listOf(20.februar til 7.mars), førsteFraværsdag = 20.februar) + håndterInntektsmelding( + arbeidsgiverperioder = listOf(20.februar til 7.mars), + førsteFraværsdag = 20.februar + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING) nyPeriode(1.januar til 18.januar) assertSisteTilstand(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) - håndterInntektsmelding(listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -271,7 +324,10 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { val antallSykedagerIFebruar2018 = 20 val nettoBeløpForFebruarMedStandardInntektUtenAgp = 1431 * antallSykedagerIFebruar2018 val revurdering = inspektør.sisteUtbetaling() - assertEquals(nettoBeløpForFebruarMedStandardInntektUtenAgp -nettoBeløpForFebruarMedStandardInntektOgAgp, revurdering.nettobeløp) + assertEquals( + nettoBeløpForFebruarMedStandardInntektUtenAgp - nettoBeløpForFebruarMedStandardInntektOgAgp, + revurdering.nettobeløp + ) } @Test @@ -314,7 +370,10 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { nyttVedtak(29.januar til 15.februar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) nyPeriode(17.januar til 25.januar) - håndterInntektsmelding(listOf(1.januar til 15.januar, 17.januar til 17.januar), vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 15.januar, 17.januar til 17.januar), + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) håndterVilkårsgrunnlag(3.vedtaksperiode) håndterYtelser(3.vedtaksperiode) @@ -394,7 +453,10 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { fun `out of order periode rett før - mellom to perioder - arbeidsgiverperioden slutter tidligere`() { nyPeriode(1.januar til 15.januar) nyPeriode(29.januar til 15.februar) - håndterInntektsmelding(listOf(1.januar til 15.januar, 29.januar til 29.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 15.januar, 29.januar til 29.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertEquals(1.januar til 15.januar, inspektør.periode(1.vedtaksperiode)) assertEquals(16.januar til 15.februar, inspektør.periode(2.vedtaksperiode)) @@ -416,7 +478,11 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { nyPeriode(1.januar til 16.januar) nyPeriode(29.januar til 15.februar) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 29.januar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 29.januar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -472,7 +538,12 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { nyttVedtak(januar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode) assertSisteTilstand(3.vedtaksperiode, AVSLUTTET) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -482,7 +553,12 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { nullstillTilstandsendringer() nyPeriode(1.januar til 15.januar) assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_INNTEKTSMELDING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -491,8 +567,18 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { forlengVedtak(juni) nullstillTilstandsendringer() nyPeriode(1.januar til 15.januar) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -501,8 +587,20 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { nyeVedtak(mai, a1, a2) nullstillTilstandsendringer() nyPeriode(1.januar til 15.januar, a1) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, orgnummer = a1) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, orgnummer = a1) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + orgnummer = a1 + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + orgnummer = a1 + ) assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, orgnummer = a2) } @@ -523,12 +621,13 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { håndterVilkårsgrunnlag( vedtaksperiodeIdInnhenter = 1.vedtaksperiode, orgnummer = a1, - inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntektperioderForSykepengegrunnlag { - 1.november(2017) til 1.januar(2018) inntekter { - a1 inntekt INNTEKT - a2 inntekt INNTEKT - } - }), + inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( + inntektperioderForSykepengegrunnlag { + 1.november(2017) til 1.januar(2018) inntekter { + a1 inntekt INNTEKT + a2 inntekt INNTEKT + } + }), arbeidsforhold = listOf( Arbeidsforhold(a1, 1.januar(2017), type = Arbeidsforholdtype.ORDINÆRT), Arbeidsforhold(a2, 1.januar(2017), type = Arbeidsforholdtype.ORDINÆRT) @@ -595,7 +694,11 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.april, 30.april), orgnummer = a1) håndterSøknad(Sykdom(1.april, 30.april, 100.prosent), orgnummer = a1) val inntekt = 20000.månedlig - håndterInntektsmelding(listOf(1.april til 16.april), beregnetInntekt = inntekt, orgnummer = a1) + håndterInntektsmelding( + listOf(1.april til 16.april), + beregnetInntekt = inntekt, + orgnummer = a1 + ) val sykepengegrunnlag = InntektForSykepengegrunnlag( listOf( grunnlag(a1, finnSkjæringstidspunkt(a1, 1.vedtaksperiode), inntekt.repeat(3)), @@ -627,8 +730,16 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a2) assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a3) - håndterInntektsmelding(listOf(1.februar til 16.februar), beregnetInntekt = inntekt, orgnummer = a2) - håndterInntektsmelding(listOf(1.februar til 16.februar), beregnetInntekt = inntekt, orgnummer = a3) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + beregnetInntekt = inntekt, + orgnummer = a2 + ) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + beregnetInntekt = inntekt, + orgnummer = a3 + ) val sykepengegrunnlag2 = InntektForSykepengegrunnlag( listOf( @@ -668,7 +779,11 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.april, 30.april), orgnummer = a1) håndterSøknad(Sykdom(1.april, 30.april, 100.prosent), orgnummer = a1) val inntekt = 20000.månedlig - håndterInntektsmelding(listOf(1.april til 16.april), beregnetInntekt = inntekt, orgnummer = a1) + håndterInntektsmelding( + listOf(1.april til 16.april), + beregnetInntekt = inntekt, + orgnummer = a1 + ) val sykepengegrunnlag = InntektForSykepengegrunnlag( listOf( @@ -700,8 +815,16 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a2) assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING, orgnummer = a3) - håndterInntektsmelding(listOf(1.februar til 16.februar), beregnetInntekt = inntekt, orgnummer = a2) - håndterInntektsmelding(listOf(1.februar til 16.februar), beregnetInntekt = inntekt, orgnummer = a3) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + beregnetInntekt = inntekt, + orgnummer = a2 + ) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + beregnetInntekt = inntekt, + orgnummer = a3 + ) val sykepengegrunnlag2 = InntektForSykepengegrunnlag( listOf( @@ -753,11 +876,19 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { nullstillTilstandsendringer() nyPeriode(januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(2.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE + ) nullstillTilstandsendringer() håndterUtbetalt() @@ -772,9 +903,24 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) - assertTilstander(3.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 3.vedtaksperiode, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + AVSLUTTET + ) assertNotNull(observatør.avsluttetMedVedtakEvent[2.vedtaksperiode.id(ORGNUMMER)]) } @@ -783,13 +929,22 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { tilGodkjent(mars, 100.prosent, 1.mars) nullstillTilstandsendringer() nyPeriode(januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) assertTilstander(1.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) håndterUtbetalt() assertTilstander(1.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) assertNotNull(observatør.avsluttetMedVedtakEvent[1.vedtaksperiode.id(ORGNUMMER)]) nullstillTilstandsendringer() @@ -812,14 +967,23 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { TIL_UTBETALING, AVSLUTTET ) - assertTilstander(1.vedtaksperiode, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) } @Test fun `første periode i til utbetaling når det dukker opp en out of order-periode - utbetalingen feiler`() { tilGodkjent(mars, 100.prosent, 1.mars) nyPeriode(januar) - håndterInntektsmelding(listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) nullstillTilstandsendringer() håndterUtbetalt(status = Oppdragstatus.AVVIST) @@ -836,9 +1000,15 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { nyPeriode(januar) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) - assertIngenInfo("Revurdering førte til at sykefraværstilfellet trenger inntektsmelding", 1.vedtaksperiode.filter()) + assertIngenInfo( + "Revurdering førte til at sykefraværstilfellet trenger inntektsmelding", + 1.vedtaksperiode.filter() + ) - håndterInntektsmelding(listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -859,14 +1029,21 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { nyPeriode(1.februar til 25.februar) assertSisteTilstand(1.vedtaksperiode, AVVENTER_INNTEKTSMELDING) - håndterInntektsmelding(listOf(1.februar til 16.februar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) håndterUtbetalt() - håndterInntektsmelding(listOf(1.februar til 16.februar), førsteFraværsdag = 1.mars, vedtaksperiodeIdInnhenter = 1.vedtaksperiode) + håndterInntektsmelding( + listOf(1.februar til 16.februar), + førsteFraværsdag = 1.mars, + vedtaksperiodeIdInnhenter = 1.vedtaksperiode + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING) @@ -1041,7 +1218,12 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { // siden perioden slutter på en fredag starter ikke oppholdstelling i arbeidsgiverperioden før mandagen. // 10.februar-2.mars hører derfor til samme arbeidsgiverperioden som 20.mars-4.april, ettersom avstanden mellom // 5.mars (påfølgende mandag)-20.mars er akkurat 16 dager - assertUgyldigSituasjon("Burde ikke ha tom refusjonstidslinje i tilstand AVVENTER_VILKÅRSPRØVING") { nyPeriode(10.februar til 2.mars, a2) } + assertUgyldigSituasjon("Burde ikke ha tom refusjonstidslinje i tilstand AVVENTER_VILKÅRSPRØVING") { + nyPeriode( + 10.februar til 2.mars, + a2 + ) + } // Her gjenlagres ikke refusjonsopplysninger når vi tar i bruk nye refusjonsopplysninger så vil denne saken bli stående i AvventerInntektsmelding assertSisteTilstand(2.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, a2) @@ -1127,8 +1309,18 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { nyttVedtak(februar) nullstillTilstandsendringer() nyPeriode(20.januar til 31.januar) - assertTilstander(2.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_VILKÅRSPRØVING_REVURDERING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_VILKÅRSPRØVING_REVURDERING + ) } @Test @@ -1173,13 +1365,24 @@ internal class RevurderingOutOfOrderGapTest : AbstractEndToEndTest() { ) } - private fun håndterVilkårsgrunnlagMedGhost(vedtaksperiode: IdInnhenter, skjæringstidspunkt: LocalDate, arbeidsgiver: String, ghost: String) { - håndterVilkårsgrunnlag(vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(arbeidsgiver to INNTEKT, ghost to INNTEKT),skjæringstidspunkt), + private fun håndterVilkårsgrunnlagMedGhost( + vedtaksperiode: IdInnhenter, + skjæringstidspunkt: LocalDate, + arbeidsgiver: String, + ghost: String + ) { + håndterVilkårsgrunnlag( + vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + arbeidsgiver to INNTEKT, + ghost to INNTEKT + ), skjæringstidspunkt + ), arbeidsforhold = listOf( Arbeidsforhold(arbeidsgiver, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), Arbeidsforhold(ghost, LocalDate.EPOCH, type = Arbeidsforholdtype.ORDINÆRT), ), orgnummer = arbeidsgiver ) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingV2E2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingV2E2ETest.kt index c1a7f661c7..56643b71d1 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingV2E2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingV2E2ETest.kt @@ -82,9 +82,11 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { nyttVedtak(april, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) forlengVedtak(mai) - håndterOverstyrTidslinje(listOf( - ManuellOverskrivingDag(31.januar, Feriedag) - )) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(31.januar, Feriedag) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -119,8 +121,22 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -145,8 +161,22 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) } @Test @@ -165,8 +195,22 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterUtbetalt() assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 3.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) } @Test @@ -186,7 +230,16 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertTilstander(1.vedtaksperiode, AVSLUTTET) assertTilstander(2.vedtaksperiode, AVSLUTTET) - assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 3.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) } @Test @@ -207,8 +260,22 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -225,7 +292,14 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertVarsel(RV_UT_23, 1.vedtaksperiode.filter()) assertIngenVarsler(2.vedtaksperiode.filter()) assertIngenVarsler(3.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(3.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE) } @@ -233,28 +307,44 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { @Test fun `revurdere dager i arbeidsgiverperioden på tidligere utbetaling`() { nyttVedtak(januar) - assertDag(5.januar,0.0) + assertDag(5.januar, 0.0) nyttVedtak(mars, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.januar, Feriedag))) håndterYtelser(1.vedtaksperiode) assertDag(5.januar, 0.0) assertDiff(0) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @Test fun `revurdere periode med nyere førstegangsbehandling innenfor samme agp`() { nyttVedtak(januar) - nyttVedtak(10.februar til 28.februar, arbeidsgiverperiode = listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + nyttVedtak( + 10.februar til 28.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) nullstillTilstandsendringer() - assertDag(5.januar,0.0) + assertDag(5.januar, 0.0) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.januar, Feriedag))) håndterYtelser(1.vedtaksperiode) assertDag(5.januar, 0.0) assertDiff(0) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertEquals(3, inspektør.antallUtbetalinger) @@ -263,7 +353,10 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { val februarutbetaling = inspektør.utbetaling(1) assertEquals(revurdering.korrelasjonsId, januarutbetaling.korrelasjonsId) assertEquals(revurdering.korrelasjonsId, februarutbetaling.korrelasjonsId) - assertEquals("PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", revurdering.utbetalingstidslinje.toString().trim()) + assertEquals( + "PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", + revurdering.utbetalingstidslinje.toString().trim() + ) assertEquals(januar, januarutbetaling.periode) assertEquals(1.januar til 28.februar, februarutbetaling.periode) assertEquals(januar, revurdering.periode) @@ -296,7 +389,13 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) assertDag(31.januar, 0.0) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) @@ -320,7 +419,11 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { @Test fun `revurdere nyere skjæringstidspunkt så revurdere eldste`() { nyttVedtak(januar) - nyttVedtak(10.februar til 28.februar, arbeidsgiverperiode = listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + nyttVedtak( + 10.februar til 28.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) forlengVedtak(mars) nullstillTilstandsendringer() assertDag(15.februar, 1431.0) @@ -338,8 +441,25 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertDag(15.februar, 0.0) assertDiff(-1431) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING + ) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -364,8 +484,25 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertDag(19.mars, 0.0) assertDiff(-1431) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING + ) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -373,7 +510,11 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { fun `revurdere eldre skjæringstidspunkt mens nyere revurdert skjæringstidspunkt utbetales`() { nyttVedtak(1.januar til 20.januar) forlengVedtak(21.januar til 31.januar) - nyttVedtak(10.februar til 28.februar, arbeidsgiverperiode = listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 3.vedtaksperiode) + nyttVedtak( + 10.februar til 28.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 3.vedtaksperiode + ) forlengVedtak(mars) nullstillTilstandsendringer() @@ -395,7 +536,10 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertEquals(revurdering.korrelasjonsId, januar2utbetaling.korrelasjonsId) assertEquals(revurdering.korrelasjonsId, februarutbetaling.korrelasjonsId) assertEquals(revurdering.korrelasjonsId, marsutbetaling.korrelasjonsId) - assertEquals("PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNNAAFF AAAAAHH NNNFNHH NNNNNHH NNN", revurdering.utbetalingstidslinje.toString().trim()) + assertEquals( + "PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNNAAFF AAAAAHH NNNFNHH NNNNNHH NNN", + revurdering.utbetalingstidslinje.toString().trim() + ) assertEquals(1.januar til 20.januar, januar1utbetaling.periode) assertEquals(januar, januar2utbetaling.periode) assertEquals(1.januar til 28.februar, februarutbetaling.periode) @@ -430,7 +574,16 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) - assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVVENTER_REVURDERING) + assertTilstander( + 3.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVVENTER_REVURDERING + ) assertTilstander(4.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) nullstillTilstandsendringer() @@ -452,7 +605,14 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) assertTilstander(3.vedtaksperiode, AVVENTER_REVURDERING) assertTilstander(4.vedtaksperiode, AVVENTER_REVURDERING) @@ -461,7 +621,12 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { @Test fun `revurdering av eldre skjæringstidspunkt mens nyere skjæringstidspunkt utbetales`() { nyttVedtak(januar) - tilGodkjent(mars, 100.prosent, førsteFraværsdag = 1.mars, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + tilGodkjent( + mars, + 100.prosent, + førsteFraværsdag = 1.mars, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag))) @@ -469,7 +634,12 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertTilstander(2.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) assertNotNull(observatør.avsluttetMedVedtakEvent[2.vedtaksperiode.id(ORGNUMMER)]) @@ -482,8 +652,19 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.februar, Feriedag))) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.januar, Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_REVURDERING + ) } @Test @@ -494,8 +675,19 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.februar, Feriedag))) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.januar, Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_REVURDERING + ) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -509,26 +701,50 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.april, 16.april)) håndterSøknad(Sykdom(1.april, 16.april, 100.prosent)) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test fun `revurdere eldste skjæringstidspunkt så revurdere nyeste`() { nyttVedtak(januar) - nyttVedtak(10.februar til 28.februar, arbeidsgiverperiode = listOf(1.januar til 16.januar), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + nyttVedtak( + 10.februar til 28.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) forlengVedtak(mars) nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(19.januar, Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(15.februar, Feriedag))) assertTrue(inspektør.sykdomstidslinje[15.februar] is Dag.Feriedag) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -544,8 +760,20 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertDag(20.mars, 0.0) assertDiff(-1431) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(20.januar, Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_REVURDERING + ) } @Test @@ -560,8 +788,21 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertDiff(-1431) håndterSimulering(2.vedtaksperiode) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(20.januar, Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING + ) } @Test @@ -576,8 +817,21 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertDiff(-1431) håndterSimulering(2.vedtaksperiode) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(5.januar, Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING + ) } @Test @@ -598,9 +852,19 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.juni, 10.juni)) håndterSøknad(Sykdom(1.juni, 10.juni, 100.prosent)) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_REVURDERING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -610,7 +874,12 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag))) assertTilstander(1.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + TIL_UTBETALING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertNotNull(observatør.avsluttetMedVedtakEvent[1.vedtaksperiode.id(ORGNUMMER)]) } @@ -629,7 +898,12 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertTilstander(1.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, TIL_UTBETALING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + TIL_UTBETALING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertNotNull(observatør.avsluttetMedVedtakEvent[1.vedtaksperiode.id(ORGNUMMER)]) } @@ -724,12 +998,23 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertDiff(-1431) assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING + ) nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVVENTER_SIMULERING_REVURDERING, AVVENTER_REVURDERING) } @@ -747,12 +1032,24 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterSimulering(2.vedtaksperiode) assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING + ) nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING) } @@ -767,7 +1064,12 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(4.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) @@ -789,7 +1091,14 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) assertTilstander(3.vedtaksperiode, AVVENTER_REVURDERING) assertTilstander(4.vedtaksperiode, AVVENTER_REVURDERING) @@ -801,7 +1110,12 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterUtbetalt() assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) assertTilstander(3.vedtaksperiode, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) assertTilstander(4.vedtaksperiode, AVVENTER_REVURDERING) @@ -813,7 +1127,12 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertTilstander(1.vedtaksperiode, AVSLUTTET) assertTilstander(2.vedtaksperiode, AVSLUTTET) - assertTilstander(3.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, AVSLUTTET) + assertTilstander( + 3.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + AVSLUTTET + ) assertTilstander(4.vedtaksperiode, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) nullstillTilstandsendringer() @@ -827,7 +1146,14 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { assertTilstander(1.vedtaksperiode, AVSLUTTET) assertTilstander(2.vedtaksperiode, AVSLUTTET) assertTilstander(3.vedtaksperiode, AVSLUTTET) - assertTilstander(4.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 4.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) } @Test @@ -842,7 +1168,12 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(19.desember(2017), Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(3.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) assertTilstander(4.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) @@ -866,7 +1197,14 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING, AVVENTER_GODKJENNING_REVURDERING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING, + AVVENTER_GODKJENNING_REVURDERING, + TIL_UTBETALING, + AVSLUTTET + ) assertTilstander(2.vedtaksperiode, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) assertTilstander(3.vedtaksperiode, AVVENTER_REVURDERING) assertTilstander(4.vedtaksperiode, AVVENTER_REVURDERING) @@ -880,7 +1218,12 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING) } @@ -950,11 +1293,27 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.mars, Feriedag))) assertTilstander(1.vedtaksperiode, AVSLUTTET) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag))) - assertTilstander(1.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING) - assertTilstander(2.vedtaksperiode, AVSLUTTET, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING + ) + assertTilstander( + 2.vedtaksperiode, + AVSLUTTET, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_REVURDERING + ) } @Test @@ -984,7 +1343,13 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag))) håndterYtelser(1.vedtaksperiode) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING, AVVENTER_REVURDERING, AVVENTER_HISTORIKK_REVURDERING, AVVENTER_SIMULERING_REVURDERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING_REVURDERING, + AVVENTER_REVURDERING, + AVVENTER_HISTORIKK_REVURDERING, + AVVENTER_SIMULERING_REVURDERING + ) } @Test @@ -1006,7 +1371,10 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { fun `overlappende ytelser ved revurdering skal gi warning, ikke error`() { nyttVedtak(januar) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(17.januar, Feriedag))) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(1.januar til 10.januar, 100))) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(1.januar til 10.januar, 100)) + ) assertVarsel(RV_AY_5) assertIngenFunksjonelleFeil() @@ -1019,7 +1387,10 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { forlengVedtak(mars) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(2.februar, Feriedag))) - håndterYtelser(2.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(20.januar til 31.januar, 100))) + håndterYtelser( + 2.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(20.januar til 31.januar, 100)) + ) assertTilstand(1.vedtaksperiode, AVSLUTTET) assertTilstand(2.vedtaksperiode, AVVENTER_SIMULERING_REVURDERING) @@ -1075,12 +1446,16 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { } } - private inline fun assertDag(dato: LocalDate, arbeidsgiverbeløp: Double?, personbeløp: Double? = 0.0) { + private inline fun assertDag( + dato: LocalDate, + arbeidsgiverbeløp: Double?, + personbeløp: Double? = 0.0 + ) { inspektør.sykdomshistorikk.sykdomstidslinje()[dato].let { - assertTrue(it is D) { "Forventet at $dato er ${D::class.simpleName} men var ${it::class.simpleName}"} + assertTrue(it is D) { "Forventet at $dato er ${D::class.simpleName} men var ${it::class.simpleName}" } } inspektør.sisteUtbetalingUtbetalingstidslinje()[dato].let { - assertTrue(it is UD) { "Forventet at $dato er ${UD::class.simpleName} men var ${it::class.simpleName}"} + assertTrue(it is UD) { "Forventet at $dato er ${UD::class.simpleName} men var ${it::class.simpleName}" } assertEquals(arbeidsgiverbeløp?.daglig, it.økonomi.inspektør.arbeidsgiverbeløp) assertEquals(personbeløp?.daglig, it.økonomi.inspektør.personbeløp) } @@ -1089,4 +1464,4 @@ internal class RevurderingV2E2ETest : AbstractEndToEndTest() { private fun assertDiff(diff: Int) { assertEquals(diff, inspektør.sisteUtbetaling().nettobeløp) } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingseventyrEventTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingseventyrEventTest.kt index 3f445df4bf..61f7305311 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingseventyrEventTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/revurdering/RevurderingseventyrEventTest.kt @@ -48,6 +48,7 @@ internal class RevurderingseventyrEventTest : AbstractEndToEndTest() { this avTypeEndring "REVURDERING" } } + @Test fun `happy case overstyring`() { tilGodkjenning(januar, a1) @@ -68,17 +69,17 @@ internal class RevurderingseventyrEventTest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, TilstandType.AVVENTER_HISTORIKK) håndterSkjønnsmessigFastsettelse( 1.januar, listOf( - OverstyrtArbeidsgiveropplysning( - orgnummer = ORGNUMMER, - inntekt = 60000.månedlig, - forklaring = "", - subsumsjon = null, - refusjonsopplysninger = listOf( - Triple(1.januar, null, 31000.månedlig) - ) + OverstyrtArbeidsgiveropplysning( + orgnummer = ORGNUMMER, + inntekt = 60000.månedlig, + forklaring = "", + subsumsjon = null, + refusjonsopplysninger = listOf( + Triple(1.januar, null, 31000.månedlig) ) ) ) + ) revurderingIgangsattEvent { this bleForårsaketAv "SKJØNNSMESSIG_FASTSETTELSE" this medSkjæringstidspunkt 1.januar @@ -170,7 +171,11 @@ internal class RevurderingseventyrEventTest : AbstractEndToEndTest() { fun `flere arbeidsgivere`() { nyeVedtak(januar, a1, a2) val overstyringId = UUID.randomUUID() - håndterOverstyrInntekt(30000.månedlig, skjæringstidspunkt = 1.januar, meldingsreferanseId = overstyringId) + håndterOverstyrInntekt( + 30000.månedlig, + skjæringstidspunkt = 1.januar, + meldingsreferanseId = overstyringId + ) val periodeAG1 = observatør.utbetalteVedtaksperioder.first() val periodeAG2 = observatør.utbetalteVedtaksperioder.last() @@ -213,7 +218,11 @@ internal class RevurderingseventyrEventTest : AbstractEndToEndTest() { val april = observatør.utbetalteVedtaksperioder[3] val overstyringId = UUID.randomUUID() - håndterOverstyrInntekt(30000.månedlig, skjæringstidspunkt = 1.januar, meldingsreferanseId = overstyringId) + håndterOverstyrInntekt( + 30000.månedlig, + skjæringstidspunkt = 1.januar, + meldingsreferanseId = overstyringId + ) revurderingIgangsattEvent { this bleForårsaketAv "ARBEIDSGIVEROPPLYSNINGER" @@ -221,12 +230,35 @@ internal class RevurderingseventyrEventTest : AbstractEndToEndTest() { this medførteRevurderingAv (januar og februar og mars og april) assertEquals( listOf( - VedtaksperiodeData(orgnummer = a1, vedtaksperiodeId = januar, periode = 1.januar til 31.januar, skjæringstidspunkt = 1.januar, typeEndring = "REVURDERING"), - VedtaksperiodeData(orgnummer = a1, vedtaksperiodeId = februar, periode = 1.februar til 15.februar, skjæringstidspunkt = 1.januar, typeEndring = "REVURDERING"), - VedtaksperiodeData(orgnummer = a1, vedtaksperiodeId = mars, periode = 1.mars til 31.mars, skjæringstidspunkt = 1.mars, typeEndring = "REVURDERING"), - VedtaksperiodeData(orgnummer = a1, vedtaksperiodeId = april, periode = 1.april til 30.april, skjæringstidspunkt = 1.mars, typeEndring = "REVURDERING") + VedtaksperiodeData( + orgnummer = a1, + vedtaksperiodeId = januar, + periode = 1.januar til 31.januar, + skjæringstidspunkt = 1.januar, + typeEndring = "REVURDERING" + ), + VedtaksperiodeData( + orgnummer = a1, + vedtaksperiodeId = februar, + periode = 1.februar til 15.februar, + skjæringstidspunkt = 1.januar, + typeEndring = "REVURDERING" + ), + VedtaksperiodeData( + orgnummer = a1, + vedtaksperiodeId = mars, + periode = 1.mars til 31.mars, + skjæringstidspunkt = 1.mars, + typeEndring = "REVURDERING" + ), + VedtaksperiodeData( + orgnummer = a1, + vedtaksperiodeId = april, + periode = 1.april til 30.april, + skjæringstidspunkt = 1.mars, + typeEndring = "REVURDERING" ) - , this.berørtePerioder + ), this.berørtePerioder ) } } @@ -251,8 +283,11 @@ internal class RevurderingseventyrEventTest : AbstractEndToEndTest() { } } - private fun revurderingIgangsattEvent(nr: Int = 0, assertBlock: PersonObserver.OverstyringIgangsatt.() -> Unit) { - val revurderingIgangsattEvent = observatør.overstyringIgangsatt[nr] + private fun revurderingIgangsattEvent( + nr: Int = 0, + assertBlock: PersonObserver.OverstyringIgangsatt.() -> Unit + ) { + val revurderingIgangsattEvent = observatør.overstyringIgangsatt[nr] revurderingIgangsattEvent.run(assertBlock) } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/AndreS\303\270knadstyperTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/AndreS\303\270knadstyperTest.kt" index c21bda7fe0..c44a6128dc 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/AndreS\303\270knadstyperTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/AndreS\303\270knadstyperTest.kt" @@ -15,13 +15,16 @@ import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.ValueSource // https://github.com/navikt/sykepengesoknad-kafka/blob/master/src/main/kotlin/no/nav/helse/flex/sykepengesoknad/kafka/SoknadstypeDTO.kt -internal class AndreSøknadstyperTest: AbstractDslTest() { +internal class AndreSøknadstyperTest : AbstractDslTest() { @ParameterizedTest @ValueSource(strings = ["SELVSTENDIGE_OG_FRILANSERE", "OPPHOLD_UTLAND", "ANNET_ARBEIDSFORHOLD", "BEHANDLINGSDAGER", "REISETILSKUDD", "GRADERT_REISETILSKUDD"]) fun `støtter ikke førstegangsbehandlinger`(søknadstype: String) { a1 { - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), søknadstype = Søknadstype(søknadstype)) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + søknadstype = Søknadstype(søknadstype) + ) assertForkastetPeriodeTilstander(1.vedtaksperiode, START, TIL_INFOTRYGD) assertFunksjonellFeil(`Støtter ikke søknadstypen`, 1.vedtaksperiode.filter()) } @@ -32,10 +35,13 @@ internal class AndreSøknadstyperTest: AbstractDslTest() { fun `støtter ikke forlengelser`(søknadstype: String) { a1 { nyttVedtak(januar) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), søknadstype = Søknadstype(søknadstype)) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + søknadstype = Søknadstype(søknadstype) + ) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertForkastetPeriodeTilstander(2.vedtaksperiode, START, TIL_INFOTRYGD) assertFunksjonellFeil(`Støtter ikke søknadstypen`, 2.vedtaksperiode.filter()) } } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/AnnulleringOgUtbetalingTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/AnnulleringOgUtbetalingTest.kt" index baf9c09a0f..fc2bbfe226 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/AnnulleringOgUtbetalingTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/AnnulleringOgUtbetalingTest.kt" @@ -72,7 +72,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { @Test fun `tidligere periode med ferie får samme arbeidsgiverperiode som nyere periode`() = a1 { - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.mai) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.mai + ) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -103,11 +106,34 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { val revurderingAvMars = inspektør.utbetaling(4) assertEquals(13, observatør.utbetaltEndretEventer.size) - assertUtbetalingtilstander(januarutbetaling.utbetalingId, NY, IKKE_UTBETALT, GODKJENT_UTEN_UTBETALING) - assertUtbetalingtilstander(marsutbetaling.utbetalingId, NY, IKKE_UTBETALT, OVERFØRT, UTBETALT) + assertUtbetalingtilstander( + januarutbetaling.utbetalingId, + NY, + IKKE_UTBETALT, + GODKJENT_UTEN_UTBETALING + ) + assertUtbetalingtilstander( + marsutbetaling.utbetalingId, + NY, + IKKE_UTBETALT, + OVERFØRT, + UTBETALT + ) assertUtbetalingtilstander(annulleringAvJanuar.utbetalingId, NY, IKKE_UTBETALT, ANNULLERT) - assertUtbetalingtilstander(februarutbetaling.utbetalingId, NY, IKKE_UTBETALT, OVERFØRT, UTBETALT) - assertUtbetalingtilstander(revurderingAvMars.utbetalingId, NY, IKKE_UTBETALT, OVERFØRT, UTBETALT) + assertUtbetalingtilstander( + februarutbetaling.utbetalingId, + NY, + IKKE_UTBETALT, + OVERFØRT, + UTBETALT + ) + assertUtbetalingtilstander( + revurderingAvMars.utbetalingId, + NY, + IKKE_UTBETALT, + OVERFØRT, + UTBETALT + ) assertNotEquals(januarutbetaling.korrelasjonsId, marsutbetaling.korrelasjonsId) assertEquals(januarutbetaling.korrelasjonsId, annulleringAvJanuar.korrelasjonsId) @@ -119,7 +145,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals(2, februarutbetaling.arbeidsgiverOppdrag.size) assertEquals(0, februarutbetaling.personOppdrag.size) - assertEquals(Endringskode.ENDR, februarutbetaling.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.ENDR, + februarutbetaling.arbeidsgiverOppdrag.inspektør.endringskode + ) februarutbetaling.arbeidsgiverOppdrag[0].inspektør.also { linje -> assertEquals(1.februar, linje.fom) assertEquals(28.februar, linje.tom) @@ -133,7 +162,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals(1, revurderingAvMars.arbeidsgiverOppdrag.size) assertEquals(0, revurderingAvMars.personOppdrag.size) - assertEquals(Endringskode.ENDR, revurderingAvMars.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.ENDR, + revurderingAvMars.arbeidsgiverOppdrag.inspektør.endringskode + ) revurderingAvMars.arbeidsgiverOppdrag[0].inspektør.also { linje -> assertEquals(1.februar, linje.fom) assertEquals(30.mars, linje.tom) @@ -144,6 +176,7 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertSisteTilstand(2.vedtaksperiode, AVSLUTTET) assertSisteTilstand(3.vedtaksperiode, AVSLUTTET) } + @Test fun `Forkaster feilaktig avsluttet periode når to utbetalinger blir til én`() = a1 { nyttVedtak(januar) @@ -159,7 +192,15 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { håndterUtbetalt() håndterVilkårsgrunnlag(3.vedtaksperiode) - håndterYtelser(3.vedtaksperiode, institusjonsoppholdsperioder = listOf(Institusjonsoppholdsperiode(5.februar, 15.februar))) + håndterYtelser( + 3.vedtaksperiode, + institusjonsoppholdsperioder = listOf( + Institusjonsoppholdsperiode( + 5.februar, + 15.februar + ) + ) + ) inspektør.utbetaling(0).let { @@ -192,7 +233,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { @Test fun `reberegne og forkaste utbetaling som inneholder annulleringer`() = a1 { - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.mai) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.mai + ) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) @@ -207,7 +251,17 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { håndterSøknad(februar) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) - håndterUtbetalingshistorikkEtterInfotrygdendring(listOf(ArbeidsgiverUtbetalingsperiode("orgnr", 1.mai(2017), 5.mai(2017), 100.prosent, 1000.daglig))) + håndterUtbetalingshistorikkEtterInfotrygdendring( + listOf( + ArbeidsgiverUtbetalingsperiode( + "orgnr", + 1.mai(2017), + 5.mai(2017), + 100.prosent, + 1000.daglig + ) + ) + ) håndterYtelser(2.vedtaksperiode) assertEquals(6, inspektør.antallUtbetalinger) @@ -247,9 +301,27 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { val revurderingAvMars = inspektør.utbetaling(2) assertEquals(9, observatør.utbetaltEndretEventer.size) - assertUtbetalingtilstander(januarutbetaling.utbetalingId, NY, IKKE_UTBETALT, OVERFØRT, UTBETALT) - assertUtbetalingtilstander(marsutbetaling.utbetalingId, NY, IKKE_UTBETALT, OVERFØRT, UTBETALT) - assertUtbetalingtilstander(revurderingAvMars.utbetalingId, NY, IKKE_UTBETALT, OVERFØRT, UTBETALT) + assertUtbetalingtilstander( + januarutbetaling.utbetalingId, + NY, + IKKE_UTBETALT, + OVERFØRT, + UTBETALT + ) + assertUtbetalingtilstander( + marsutbetaling.utbetalingId, + NY, + IKKE_UTBETALT, + OVERFØRT, + UTBETALT + ) + assertUtbetalingtilstander( + revurderingAvMars.utbetalingId, + NY, + IKKE_UTBETALT, + OVERFØRT, + UTBETALT + ) assertEquals(revurderingAvMars.korrelasjonsId, marsutbetaling.korrelasjonsId) assertNotEquals(januarutbetaling.korrelasjonsId, marsutbetaling.korrelasjonsId) @@ -265,14 +337,20 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals("OPPH", linje.statuskode) } - assertEquals(Endringskode.ENDR, revurderingAvMars.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.ENDR, + revurderingAvMars.arbeidsgiverOppdrag.inspektør.endringskode + ) } @Test fun `to uavhengige arbeidsgiverperioder blir til en som følge av overstyring`() { a1 { nyttVedtak(3.januar til 26.januar) - håndterSøknad(Sykdom(27.januar, 28.februar, 100.prosent), Arbeid(13.februar, 28.februar)) + håndterSøknad( + Sykdom(27.januar, 28.februar, 100.prosent), + Arbeid(13.februar, 28.februar) + ) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) @@ -303,10 +381,34 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { val revurderingAvMars = inspektør.utbetaling(5) assertEquals(19, observatør.utbetaltEndretEventer.size) - assertUtbetalingtilstander(januarutbetaling.utbetalingId, NY, IKKE_UTBETALT, OVERFØRT, UTBETALT) - assertUtbetalingtilstander(februarutbetaling.utbetalingId, NY, IKKE_UTBETALT, OVERFØRT, UTBETALT) - assertUtbetalingtilstander(marsutbetaling.utbetalingId, NY, IKKE_UTBETALT, OVERFØRT, UTBETALT) - assertUtbetalingtilstander(annulleringAvMars.utbetalingId, NY, IKKE_UTBETALT, OVERFØRT, ANNULLERT) + assertUtbetalingtilstander( + januarutbetaling.utbetalingId, + NY, + IKKE_UTBETALT, + OVERFØRT, + UTBETALT + ) + assertUtbetalingtilstander( + februarutbetaling.utbetalingId, + NY, + IKKE_UTBETALT, + OVERFØRT, + UTBETALT + ) + assertUtbetalingtilstander( + marsutbetaling.utbetalingId, + NY, + IKKE_UTBETALT, + OVERFØRT, + UTBETALT + ) + assertUtbetalingtilstander( + annulleringAvMars.utbetalingId, + NY, + IKKE_UTBETALT, + OVERFØRT, + ANNULLERT + ) assertUtbetalingtilstander( revurderingAvFebruar.utbetalingId, NY, @@ -315,7 +417,13 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { OVERFØRT, UTBETALT ) - assertUtbetalingtilstander(revurderingAvMars.utbetalingId, NY, IKKE_UTBETALT, OVERFØRT, UTBETALT) + assertUtbetalingtilstander( + revurderingAvMars.utbetalingId, + NY, + IKKE_UTBETALT, + OVERFØRT, + UTBETALT + ) assertEquals(januarutbetaling.korrelasjonsId, februarutbetaling.korrelasjonsId) assertNotEquals(februarutbetaling.korrelasjonsId, marsutbetaling.korrelasjonsId) @@ -325,7 +433,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals(1, annulleringAvMars.arbeidsgiverOppdrag.size) assertEquals(0, annulleringAvMars.personOppdrag.size) - assertEquals(Endringskode.ENDR, annulleringAvMars.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.ENDR, + annulleringAvMars.arbeidsgiverOppdrag.inspektør.endringskode + ) annulleringAvMars.arbeidsgiverOppdrag[0].inspektør.also { linje -> assertEquals(19.mars, linje.fom) assertEquals(30.mars, linje.tom) @@ -335,7 +446,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals(1, revurderingAvFebruar.arbeidsgiverOppdrag.size) assertEquals(0, revurderingAvFebruar.personOppdrag.size) - assertEquals(Endringskode.ENDR, revurderingAvFebruar.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.ENDR, + revurderingAvFebruar.arbeidsgiverOppdrag.inspektør.endringskode + ) revurderingAvFebruar.arbeidsgiverOppdrag[0].inspektør.also { linje -> assertEquals(19.januar, linje.fom) assertEquals(28.februar, linje.tom) @@ -344,7 +458,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals(2, revurderingAvMars.arbeidsgiverOppdrag.size) assertEquals(0, revurderingAvMars.personOppdrag.size) - assertEquals(Endringskode.ENDR, revurderingAvMars.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.ENDR, + revurderingAvMars.arbeidsgiverOppdrag.inspektør.endringskode + ) revurderingAvMars.arbeidsgiverOppdrag[0].inspektør.also { linje -> assertEquals(19.januar, linje.fom) assertEquals(28.februar, linje.tom) @@ -375,7 +492,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals(juni, inspektør.periode(1.vedtaksperiode)) assertEquals(1.juli til 31.august, inspektør.periode(2.vedtaksperiode)) - assertEquals("SHH SSSSSHH SSSSSHH SSSSSHH SSSSSHF FFFFFFF FFFFFFF FFFFFFF FFFFFFF FASSSHH SSSSSHH SSSSSHH SSSSSHH SSSSS", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "SHH SSSSSHH SSSSSHH SSSSSHH SSSSSHF FFFFFFF FFFFFFF FFFFFFF FFFFFFF FASSSHH SSSSSHH SSSSSHH SSSSSHH SSSSS", + inspektør.sykdomstidslinje.toShortString() + ) val juniutbetaling = inspektør.utbetaling(0) val augustutbetaling = inspektør.utbetaling(1) @@ -388,7 +508,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals(2, revurderingaugust.arbeidsgiverOppdrag.size) assertEquals(0, revurderingaugust.personOppdrag.size) - assertEquals(Endringskode.ENDR, revurderingaugust.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.ENDR, + revurderingaugust.arbeidsgiverOppdrag.inspektør.endringskode + ) revurderingaugust.arbeidsgiverOppdrag[0].inspektør.also { linje -> assertEquals(17.juni, linje.fom) assertEquals(29.juni, linje.tom) @@ -425,7 +548,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals(juni, inspektør.periode(1.vedtaksperiode)) assertEquals(1.juli til 31.august, inspektør.periode(2.vedtaksperiode)) - assertEquals("SHH SSSSSHH SSSSSHH SSSSSHH SSSSSFF FFFFFFF FFFFFFF FFFFFFF FFFFFFF FASSSHH SSSSSHH SSSSSHH SSSSSHH SSSSS", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "SHH SSSSSHH SSSSSHH SSSSSHH SSSSSFF FFFFFFF FFFFFFF FFFFFFF FFFFFFF FASSSHH SSSSSHH SSSSSHH SSSSSHH SSSSS", + inspektør.sykdomstidslinje.toShortString() + ) val juniutbetaling = inspektør.utbetaling(0) val augustutbetaling = inspektør.utbetaling(1) @@ -440,7 +566,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals(1, annulleringaugust.arbeidsgiverOppdrag.size) assertEquals(0, annulleringaugust.personOppdrag.size) - assertEquals(Endringskode.ENDR, annulleringaugust.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.ENDR, + annulleringaugust.arbeidsgiverOppdrag.inspektør.endringskode + ) annulleringaugust.arbeidsgiverOppdrag[0].inspektør.also { linje -> assertEquals(17.august, linje.fom) assertEquals(31.august, linje.tom) @@ -451,7 +580,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals(1, revurderingjuni.arbeidsgiverOppdrag.size) assertEquals(0, revurderingjuni.personOppdrag.size) - assertEquals(Endringskode.UEND, revurderingjuni.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.UEND, + revurderingjuni.arbeidsgiverOppdrag.inspektør.endringskode + ) revurderingjuni.arbeidsgiverOppdrag[0].inspektør.also { linje -> assertEquals(17.juni, linje.fom) assertEquals(29.juni, linje.tom) @@ -460,7 +592,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { assertEquals(2, revurderingaugust.arbeidsgiverOppdrag.size) assertEquals(0, revurderingaugust.personOppdrag.size) - assertEquals(Endringskode.ENDR, revurderingaugust.arbeidsgiverOppdrag.inspektør.endringskode) + assertEquals( + Endringskode.ENDR, + revurderingaugust.arbeidsgiverOppdrag.inspektør.endringskode + ) revurderingaugust.arbeidsgiverOppdrag[0].inspektør.also { linje -> assertEquals(17.juni, linje.fom) assertEquals(29.juni, linje.tom) @@ -526,7 +661,10 @@ internal class AnnulleringOgUtbetalingTest : AbstractDslTest() { observatør.utbetaltEndretEventer .filter { it.utbetalingId == utbetalingId } .also { events -> - assertEquals(status.map(Utbetalingstatus::name).toList(), events.map { it.forrigeStatus }.plus(events.last().gjeldendeStatus)) + assertEquals( + status.map(Utbetalingstatus::name).toList(), + events.map { it.forrigeStatus }.plus(events.last().gjeldendeStatus) + ) } } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/ArbeidsledigS\303\270knadTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/ArbeidsledigS\303\270knadTest.kt" index a2e0bcbb7d..ee1d061c0b 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/ArbeidsledigS\303\270knadTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/ArbeidsledigS\303\270knadTest.kt" @@ -17,7 +17,7 @@ import no.nav.helse.økonomi.Inntekt import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.junit.jupiter.api.Test -internal class ArbeidsledigSøknadTest: AbstractDslTest() { +internal class ArbeidsledigSøknadTest : AbstractDslTest() { @Test fun `støtter arbeidsledigsøknad som forlengelse av tidligere vilkårsprøvd skjæringstidspunkt`() { @@ -28,10 +28,14 @@ internal class ArbeidsledigSøknadTest: AbstractDslTest() { assertVarsel(`Arbeidsledigsøknad er lagt til grunn`, 2.vedtaksperiode.filter()) } } + @Test fun `trenger ikke varsel ved forlengelse hvis det ikke er refusjon`() { a1 { - nyttVedtak(januar, refusjon = Inntektsmelding.Refusjon(Inntekt.INGEN, null, emptyList())) + nyttVedtak( + januar, + refusjon = Inntektsmelding.Refusjon(Inntekt.INGEN, null, emptyList()) + ) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), søknadstype = Arbeidsledig) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK) assertIngenVarsel(`Arbeidsledigsøknad er lagt til grunn`, 2.vedtaksperiode.filter()) @@ -43,7 +47,10 @@ internal class ArbeidsledigSøknadTest: AbstractDslTest() { a1 { håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), søknadstype = Arbeidsledig) assertSisteTilstand(1.vedtaksperiode, TIL_INFOTRYGD) - assertFunksjonellFeil(`Støtter ikke førstegangsbehandlinger for arbeidsledigsøknader`, 1.vedtaksperiode.filter()) + assertFunksjonellFeil( + `Støtter ikke førstegangsbehandlinger for arbeidsledigsøknader`, + 1.vedtaksperiode.filter() + ) } } @@ -52,7 +59,12 @@ internal class ArbeidsledigSøknadTest: AbstractDslTest() { (a1 og a2).nyeVedtak(januar) a1 { håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), søknadstype = Arbeidsledig) - assertTilstander(2.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) } } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/ForeldetS\303\270knadE2ETest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/ForeldetS\303\270knadE2ETest.kt" index f86f040264..0085f86048 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/ForeldetS\303\270knadE2ETest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/ForeldetS\303\270knadE2ETest.kt" @@ -44,16 +44,33 @@ import org.junit.jupiter.api.Test internal class ForeldetSøknadE2ETest : AbstractEndToEndTest() { @Test fun `forledet søknad`() { - håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), mottatt = 1.januar(2019).atStartOfDay()) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.januar(2019)) + håndterSykmelding( + Sykmeldingsperiode(1.januar, 31.januar), + mottatt = 1.januar(2019).atStartOfDay() + ) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.januar(2019) + ) assertVarsel(RV_SØ_2) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) } @Test fun `forledet søknad med inntektsmelding`() { - håndterSykmelding(Sykmeldingsperiode(1.januar, 31.januar), mottatt = 1.januar(2019).atStartOfDay()) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.januar(2019)) + håndterSykmelding( + Sykmeldingsperiode(1.januar, 31.januar), + mottatt = 1.januar(2019).atStartOfDay() + ) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.januar(2019) + ) håndterInntektsmelding(listOf(1.januar til 16.januar)) assertVarsel(RV_SØ_2) håndterVilkårsgrunnlag(1.vedtaksperiode) @@ -84,7 +101,10 @@ internal class ForeldetSøknadE2ETest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) - assertEquals(Dag.ForeldetSykedag::class, inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode)[31.januar]::class) + assertEquals( + Dag.ForeldetSykedag::class, + inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode)[31.januar]::class + ) assertTilstander( 1.vedtaksperiode, START, @@ -97,6 +117,7 @@ internal class ForeldetSøknadE2ETest : AbstractEndToEndTest() { AVSLUTTET ) } + @Test fun `foreldet dag innenfor agp -- kan lukkes uten manuell behandling`() { håndterSykmelding(Sykmeldingsperiode(16.januar, 16.februar)) @@ -106,7 +127,10 @@ internal class ForeldetSøknadE2ETest : AbstractEndToEndTest() { sendtTilNAVEllerArbeidsgiver = 1.mai ) håndterInntektsmelding(listOf(16.januar til 31.januar)) - assertEquals(Dag.ForeldetSykedag::class, inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode)[31.januar]::class) + assertEquals( + Dag.ForeldetSykedag::class, + inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode)[31.januar]::class + ) assertTilstander( 1.vedtaksperiode, START, @@ -121,8 +145,14 @@ internal class ForeldetSøknadE2ETest : AbstractEndToEndTest() { @Test fun `forledet søknad ved forlengelse`() { nyttVedtak(januar) - håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar), mottatt = 1.februar(2019).atStartOfDay()) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.februar(2019)) + håndterSykmelding( + Sykmeldingsperiode(1.februar, 28.februar), + mottatt = 1.februar(2019).atStartOfDay() + ) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.februar(2019) + ) assertVarsel(RV_SØ_2) assertTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK) } @@ -133,14 +163,20 @@ internal class ForeldetSøknadE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(20.januar, 31.januar)) // foreldet søknad :( - håndterSøknad(Sykdom(1.januar, 19.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.mai) + håndterSøknad( + Sykdom(1.januar, 19.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.mai + ) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) // foreldet søknad :( - håndterSøknad(Sykdom(20.januar, 31.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.mai) + håndterSøknad( + Sykdom(20.januar, 31.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.mai + ) håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) @@ -163,15 +199,25 @@ internal class ForeldetSøknadE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(24.januar, 31.januar)) // foreldet søknad :( - håndterSøknad(Sykdom(1.januar, 19.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.mai) + håndterSøknad( + Sykdom(1.januar, 19.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.mai + ) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) // foreldet søknad :( - håndterSøknad(Sykdom(24.januar, 31.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.mai) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 24.januar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterSøknad( + Sykdom(24.januar, 31.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.mai + ) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 24.januar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -203,15 +249,24 @@ internal class ForeldetSøknadE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(19.februar, 12.mars)) // foreldet søknad :( - håndterSøknad(Sykdom(1.januar, 19.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.juni) + håndterSøknad( + Sykdom(1.januar, 19.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.juni + ) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) // foreldet søknad :( - håndterSøknad(Sykdom(19.februar, 12.mars, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.juli) - håndterInntektsmelding(listOf(19.februar til 6.mars), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterSøknad( + Sykdom(19.februar, 12.mars, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.juli + ) + håndterInntektsmelding( + listOf(19.februar til 6.mars), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode) @@ -232,7 +287,10 @@ internal class ForeldetSøknadE2ETest : AbstractEndToEndTest() { @Test fun `skal ikke legge på varsel om avslått dag pga foreldelse når perioden ikke har avslåttte dager fordi den er innenfor arbeidsgiverperioden`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 16.januar)) - håndterSøknad(Sykdom(1.januar, 19.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 3.mai) + håndterSøknad( + Sykdom(1.januar, 19.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 3.mai + ) assertForventetFeil( forklaring = "Skal ikke legge på varsel om avslått dag pga foreldelse når perioden ikke har avslåttte dager fordi den er innenfor arbeidsgiverperioden", diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/FriskmeldtE2ETest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/FriskmeldtE2ETest.kt" index 47fadc9c62..3e12d5f3d5 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/FriskmeldtE2ETest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/FriskmeldtE2ETest.kt" @@ -33,7 +33,13 @@ internal class FriskmeldtE2ETest : AbstractEndToEndTest() { håndterSykmelding(januar) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Arbeid(1.januar, 31.januar)) assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -43,7 +49,12 @@ internal class FriskmeldtE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(17.januar, 31.januar, 100.prosent), Arbeid(17.januar, 31.januar)) assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(17.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -62,7 +73,12 @@ internal class FriskmeldtE2ETest : AbstractEndToEndTest() { assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(21.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -73,6 +89,11 @@ internal class FriskmeldtE2ETest : AbstractEndToEndTest() { assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertEquals(1.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/KorrigertS\303\270knadTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/KorrigertS\303\270knadTest.kt" index 8c2753f698..5dbaeb126e 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/KorrigertS\303\270knadTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/KorrigertS\303\270knadTest.kt" @@ -65,7 +65,10 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) assertTilstand(1.vedtaksperiode, AVVENTER_GODKJENNING_REVURDERING) - assertEquals("AAAAARR AAAAARR AAAAARR AAAAARR AAA", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "AAAAARR AAAAARR AAAAARR AAAAARR AAA", + inspektør.sykdomstidslinje.toShortString() + ) assertEquals(1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) } @@ -82,16 +85,34 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { tilSimulering(3.januar til 26.januar, 100.prosent, 3.januar) nullstillTilstandsendringer() håndterSøknad(Sykdom(3.januar, 26.januar, 80.prosent)) - assertEquals(FORKASTET, inspektør.utbetalinger(1.vedtaksperiode).single().inspektør.tilstand) - assertTilstander(1.vedtaksperiode, AVVENTER_SIMULERING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertEquals( + FORKASTET, + inspektør.utbetalinger(1.vedtaksperiode).single().inspektør.tilstand + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_SIMULERING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) } @Test fun `Arbeidsdag i søknad nr 2 kaster ikke ut perioden`() { håndterSykmelding(januar) val søknadId = håndterSøknad(januar) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Arbeid(31.januar, 31.januar), korrigerer = søknadId, opprinneligSendt = 1.februar) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Arbeid(31.januar, 31.januar), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) } @Test @@ -99,8 +120,15 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(3.januar, 31.januar)) håndterSøknad(Sykdom(3.januar, 31.januar, 100.prosent)) håndterSøknad(januar) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + TIL_INFOTRYGD + ) } + @Test fun `Overlappende søknad som er lengre frem støttes ikke`() { håndterSykmelding(Sykmeldingsperiode(3.januar, 31.januar)) @@ -118,45 +146,81 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { @Test fun `Korrigerer fridager til sykedag`() { håndterSykmelding(januar) - val søknadId = håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Permisjon(30.januar, 30.januar), Ferie(31.januar, 31.januar)) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), korrigerer = søknadId, opprinneligSendt = 1.februar) + val søknadId = håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Permisjon(30.januar, 30.januar), + Ferie(31.januar, 31.januar) + ) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) inspektør.sykdomstidslinje.inspektør.also { assertTrue(it[30.januar] is Sykedag) assertTrue(it[31.januar] is Sykedag) } - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) } @Test fun `Korrigerer sykedag til feriedag`() { håndterSykmelding(januar) val søknadId = håndterSøknad(januar) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Permisjon(30.januar, 30.januar), Ferie(31.januar, 31.januar), korrigerer = søknadId, opprinneligSendt = 1.februar) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Permisjon(30.januar, 30.januar), + Ferie(31.januar, 31.januar), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) inspektør.sykdomstidslinje.inspektør.also { assertTrue(it[30.januar] is Permisjonsdag) assertTrue(it[31.januar] is Feriedag) } - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) } @Test fun `Korrigerer grad`() { håndterSykmelding(januar) val søknadId = håndterSøknad(januar) - håndterSøknad(Sykdom(1.januar, 31.januar, 50.prosent), korrigerer = søknadId, opprinneligSendt = 1.februar) + håndterSøknad( + Sykdom(1.januar, 31.januar, 50.prosent), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) assertEquals(50, inspektør.sykdomstidslinje.inspektør.grader[17.januar]) - assertEquals(50, inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.grad(17.januar)) + assertEquals( + 50, + inspektør.utbetalingstidslinjer(1.vedtaksperiode).inspektør.grad(17.januar) + ) } @Test fun `Korrigerer feriedag til sykedag i forlengelse`() { nyttVedtak(januar) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) - val søknadId = håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Ferie(28.februar, 28.februar)) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), korrigerer = søknadId, opprinneligSendt = 1.mars) + val søknadId = + håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Ferie(28.februar, 28.februar)) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + korrigerer = søknadId, + opprinneligSendt = 1.mars + ) inspektør.sykdomstidslinje.inspektør.also { assertTrue(it[28.februar] is Sykedag) @@ -226,7 +290,12 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Arbeid(25.januar, 31.januar)) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) assertTilstander(2.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_INNTEKTSMELDING) håndterYtelser(1.vedtaksperiode) @@ -245,11 +314,21 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(2.februar, 28.februar)) val søknadId = håndterSøknad(Sykdom(2.februar, 28.februar, 100.prosent)) - håndterSøknad(Sykdom(2.februar, 28.februar, 100.prosent), Ferie(28.februar, 28.februar), korrigerer = søknadId, opprinneligSendt = 1.mars) + håndterSøknad( + Sykdom(2.februar, 28.februar, 100.prosent), + Ferie(28.februar, 28.februar), + korrigerer = søknadId, + opprinneligSendt = 1.mars + ) inspektør.sykdomstidslinje.inspektør.also { assertTrue(it[28.februar] is Feriedag) } - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) assertIngenVarsler(1.vedtaksperiode.filter()) assertIngenVarsler(2.vedtaksperiode.filter()) @@ -262,12 +341,22 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) val søknadId = håndterSøknad(februar) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Ferie(28.februar, 28.februar), korrigerer = søknadId, opprinneligSendt = 1.mars) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + Ferie(28.februar, 28.februar), + korrigerer = søknadId, + opprinneligSendt = 1.mars + ) inspektør.sykdomstidslinje.inspektør.also { assertTrue(it[28.februar] is Feriedag) } - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) assertIngenVarsler(1.vedtaksperiode.filter()) assertIngenVarsler(2.vedtaksperiode.filter()) @@ -283,17 +372,48 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(11.januar, 31.januar)) val søknadId = håndterSøknad(Sykdom(11.januar, 31.januar, 100.prosent)) - håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 1.januar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.januar til 16.januar), + førsteFraværsdag = 1.januar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(3.vedtaksperiode) - håndterSøknad(Sykdom(11.januar, 31.januar, 100.prosent), Ferie(31.januar, 31.januar), korrigerer = søknadId, opprinneligSendt = 1.februar) + håndterSøknad( + Sykdom(11.januar, 31.januar, 100.prosent), + Ferie(31.januar, 31.januar), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) inspektør.sykdomstidslinje.inspektør.also { assertTrue(it[31.januar] is Feriedag) } - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) assertIngenVarsler(1.vedtaksperiode.filter()) assertIngenVarsler(2.vedtaksperiode.filter()) assertIngenVarsler(3.vedtaksperiode.filter()) @@ -303,12 +423,22 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { fun `Blir værende i nåværende tilstand dersom søknad kommer inn i AVVENTER_INNTEKTSMELDING_FERDIG_GAP`() { håndterSykmelding(januar) val søknadId = håndterSøknad(januar) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(31.januar, 31.januar), korrigerer = søknadId, opprinneligSendt = 1.februar) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Ferie(31.januar, 31.januar), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) inspektør.sykdomstidslinje.inspektør.also { assertTrue(it[31.januar] is Feriedag) } - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) assertIngenVarsler(1.vedtaksperiode.filter()) } @@ -317,7 +447,12 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { håndterSykmelding(januar) val søknadId = håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Arbeid(17.januar, 31.januar), korrigerer = søknadId, opprinneligSendt = 1.februar) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Arbeid(17.januar, 31.januar), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) inspektør.sykdomstidslinje.inspektør.also { inspektør -> (17.januar til 31.januar).forEach { @@ -330,7 +465,7 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING ) @@ -342,7 +477,12 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { håndterSykmelding(januar) val søknadId = håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(17.januar, 31.januar), korrigerer = søknadId, opprinneligSendt = 1.februar) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Ferie(17.januar, 31.januar), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) inspektør.sykdomstidslinje.inspektør.also { inspektør -> (17.januar til 31.januar).forEach { @@ -367,7 +507,12 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { håndterSykmelding(januar) val søknadId = håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(31.januar, 31.januar), korrigerer = søknadId, opprinneligSendt = 1.februar) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Ferie(31.januar, 31.januar), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) inspektør.sykdomstidslinje.inspektør.also { assertTrue(it[31.januar] is Feriedag) @@ -391,7 +536,12 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { val søknadId = håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(31.januar, 31.januar), korrigerer = søknadId, opprinneligSendt = 1.februar) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Ferie(31.januar, 31.januar), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) inspektør.sykdomstidslinje.inspektør.also { assertTrue(it[31.januar] is Feriedag) @@ -413,11 +563,16 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { @Test fun `Går tilbake til AVVENTER_HISTORIKK når søknaden kommer inn i AVVENTER_SIMULERING`() { håndterSykmelding(januar) - val søknadId = håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(31.januar, 31.januar)) + val søknadId = + håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(31.januar, 31.januar)) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), korrigerer = søknadId, opprinneligSendt = 1.februar) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) inspektør.sykdomstidslinje.inspektør.also { assertTrue(it[31.januar] is Sykedag) @@ -440,12 +595,17 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { @Test fun `Går tilbake til AVVENTER_HISTORIKK når søknaden kommer inn i AVVENTER_GODKJENNING`() { håndterSykmelding(januar) - val søknadId = håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(31.januar, 31.januar)) + val søknadId = + håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(31.januar, 31.januar)) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), korrigerer = søknadId, opprinneligSendt = 1.februar) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + korrigerer = søknadId, + opprinneligSendt = 1.februar + ) inspektør.sykdomstidslinje.inspektør.also { assertTrue(it[31.januar] is Sykedag) @@ -469,40 +629,100 @@ internal class KorrigertSøknadTest : AbstractEndToEndTest() { @Test fun `Ikke foreld dager ved sen korrigerende søknad om original søknad var innenfor avskjæringsdag`() { håndterSykmelding(januar) - val søknadId = håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 31.januar) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim()) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(31.januar, 31.januar), sendtTilNAVEllerArbeidsgiver = 30.september, korrigerer = søknadId, opprinneligSendt = 31.januar) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSF", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim()) + val søknadId = håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 31.januar + ) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim() + ) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Ferie(31.januar, 31.januar), + sendtTilNAVEllerArbeidsgiver = 30.september, + korrigerer = søknadId, + opprinneligSendt = 31.januar + ) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSF", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim() + ) } @Test fun `Foreld dager ved sen søknad, selv om vi mottar korrigerende søknad`() { håndterSykmelding(januar) - val søknadId = håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), sendtTilNAVEllerArbeidsgiver = 1.mai) - assertEquals("KKKKKHH KKKKKHH KKKKKHH KKKKKHH KKK", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim()) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(31.januar, 31.januar), sendtTilNAVEllerArbeidsgiver = 2.mai, korrigerer = søknadId, opprinneligSendt = 1.mai) - assertEquals("KKKKKHH KKKKKHH KKKKKHH KKKKKHH KKF", inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim()) + val søknadId = håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + sendtTilNAVEllerArbeidsgiver = 1.mai + ) + assertEquals( + "KKKKKHH KKKKKHH KKKKKHH KKKKKHH KKK", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim() + ) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + Ferie(31.januar, 31.januar), + sendtTilNAVEllerArbeidsgiver = 2.mai, + korrigerer = søknadId, + opprinneligSendt = 1.mai + ) + assertEquals( + "KKKKKHH KKKKKHH KKKKKHH KKKKKHH KKF", + inspektør.sykdomshistorikk.sykdomstidslinje().toShortString().trim() + ) } @Test fun `Korrigerende søknad appender egenmeldingsperioder til vedtaksperioden`() { - håndterSøknad(Sykdom(3.januar, 31.januar, 100.prosent), egenmeldinger = listOf(1.januar til 2.januar)) - assertEquals(listOf(1.januar til 2.januar), inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.egenmeldingsperioder) + håndterSøknad( + Sykdom(3.januar, 31.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 2.januar) + ) + assertEquals( + listOf(1.januar til 2.januar), + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.egenmeldingsperioder + ) - håndterSøknad(Sykdom(7.januar, 31.januar, 100.prosent), egenmeldinger = listOf(5.januar til 6.januar)) - assertEquals(listOf(1.januar til 2.januar, 5.januar til 6.januar), inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.egenmeldingsperioder) + håndterSøknad( + Sykdom(7.januar, 31.januar, 100.prosent), + egenmeldinger = listOf(5.januar til 6.januar) + ) + assertEquals( + listOf(1.januar til 2.januar, 5.januar til 6.januar), + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.egenmeldingsperioder + ) - håndterSøknad(Sykdom(6.januar, 31.januar, 100.prosent), egenmeldinger = listOf(2.januar til 5.januar)) - assertEquals(listOf(1.januar til 6.januar), inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.egenmeldingsperioder) + håndterSøknad( + Sykdom(6.januar, 31.januar, 100.prosent), + egenmeldinger = listOf(2.januar til 5.januar) + ) + assertEquals( + listOf(1.januar til 6.januar), + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.egenmeldingsperioder + ) - håndterSøknad(Sykdom(7.januar, 31.januar, 100.prosent), egenmeldinger = listOf(1.januar til 6.januar)) - assertEquals(listOf(1.januar til 6.januar), inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.egenmeldingsperioder) + håndterSøknad( + Sykdom(7.januar, 31.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 6.januar) + ) + assertEquals( + listOf(1.januar til 6.januar), + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.egenmeldingsperioder + ) } @Test fun `Korrigerende søknad som fører til revurdering appender egenmeldingsperioder til vedtaksperioden`() { nyttVedtak(januar) - håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), egenmeldinger = listOf(1.januar til 5.januar, 8.januar til 10.januar)) - assertEquals(listOf(1.januar til 10.januar), inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.egenmeldingsperioder) + håndterSøknad( + Sykdom(1.januar, 31.januar, 100.prosent), + egenmeldinger = listOf(1.januar til 5.januar, 8.januar til 10.januar) + ) + assertEquals( + listOf(1.januar til 10.januar), + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.egenmeldingsperioder + ) } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/OutOfOrderS\303\270knadTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/OutOfOrderS\303\270knadTest.kt" index 6ac6c8b092..730dd28620 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/OutOfOrderS\303\270knadTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/OutOfOrderS\303\270knadTest.kt" @@ -49,7 +49,10 @@ internal class OutOfOrderSøknadTest : AbstractEndToEndTest() { fun `Out of order AUUer- skal beholde perioden som kom først som låst i tillegg til den nye`() { håndterSøknad(Sykdom(9.januar, 16.januar, 100.prosent)) håndterSøknad(Sykdom(1.januar, 8.januar, 100.prosent)) - assertEquals(listOf(1.januar til 8.januar, 9.januar til 16.januar), inspektør.sykdomstidslinje.inspektør.låstePerioder) + assertEquals( + listOf(1.januar til 8.januar, 9.januar til 16.januar), + inspektør.sykdomstidslinje.inspektør.låstePerioder + ) } @Test @@ -57,9 +60,22 @@ internal class OutOfOrderSøknadTest : AbstractEndToEndTest() { tilSimulering(3.mars til 26.mars, 100.prosent, 3.januar) nullstillTilstandsendringer() håndterSøknad(Sykdom(5.januar, 19.januar, 80.prosent)) - assertEquals(Utbetalingstatus.FORKASTET, inspektør.utbetalinger(1.vedtaksperiode).single().inspektør.tilstand) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(1.vedtaksperiode, AVVENTER_SIMULERING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertEquals( + Utbetalingstatus.FORKASTET, + inspektør.utbetalinger(1.vedtaksperiode).single().inspektør.tilstand + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_SIMULERING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) } @Test @@ -70,7 +86,14 @@ internal class OutOfOrderSøknadTest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(1.vedtaksperiode, inntekt = 20000.månedlig) håndterYtelser(1.vedtaksperiode) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) assertIngenFunksjonellFeil(Varselkode.RV_SV_3) } @@ -113,7 +136,12 @@ internal class OutOfOrderSøknadTest : AbstractEndToEndTest() { nullstillTilstandsendringer() forlengVedtak(februar) - assertTilstander(2.vedtaksperiode, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertTilstander( + 2.vedtaksperiode, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) assertSisteTilstand(3.vedtaksperiode, AVSLUTTET) } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/S\303\270knadArbeidsgiverE2ETest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/S\303\270knadArbeidsgiverE2ETest.kt" index 2dcc7bfcbb..95c9906a09 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/S\303\270knadArbeidsgiverE2ETest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/S\303\270knadArbeidsgiverE2ETest.kt" @@ -59,12 +59,23 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterSøknad(Sykdom(10.januar, 31.januar, 100.prosent), Ferie(10.januar, 15.januar)) (10.januar til 12.januar).forEach { dato -> - assertEquals(Dag.Arbeidsdag::class, inspektør.sykdomstidslinje[dato]::class) { "$dato er av annen dagtype" } + assertEquals( + Dag.Arbeidsdag::class, + inspektør.sykdomstidslinje[dato]::class + ) { "$dato er av annen dagtype" } } (13.januar til 15.januar).forEach { dato -> - assertEquals(Dag.Feriedag::class, inspektør.sykdomstidslinje[dato]::class) { "$dato er av annen dagtype" } + assertEquals( + Dag.Feriedag::class, + inspektør.sykdomstidslinje[dato]::class + ) { "$dato er av annen dagtype" } } - assertTilstander(1.vedtaksperiode, AVVENTER_VILKÅRSPRØVING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -76,12 +87,23 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterSøknad(Sykdom(10.januar, 31.januar, 100.prosent), Ferie(10.januar, 15.januar)) (10.januar til 12.januar).forEach { dato -> - assertEquals(Dag.Arbeidsdag::class, inspektør.sykdomstidslinje[dato]::class) { "$dato er av annen dagtype" } + assertEquals( + Dag.Arbeidsdag::class, + inspektør.sykdomstidslinje[dato]::class + ) { "$dato er av annen dagtype" } } (13.januar til 15.januar).forEach { dato -> - assertEquals(Dag.Feriedag::class, inspektør.sykdomstidslinje[dato]::class) { "$dato er av annen dagtype" } + assertEquals( + Dag.Feriedag::class, + inspektør.sykdomstidslinje[dato]::class + ) { "$dato er av annen dagtype" } } - assertTilstander(1.vedtaksperiode, AVVENTER_HISTORIKK, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_HISTORIKK, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -94,12 +116,23 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterSøknad(Sykdom(10.januar, 31.januar, 100.prosent), Ferie(10.januar, 15.januar)) (10.januar til 12.januar).forEach { dato -> - assertEquals(Dag.Arbeidsdag::class, inspektør.sykdomstidslinje[dato]::class) { "$dato er av annen dagtype" } + assertEquals( + Dag.Arbeidsdag::class, + inspektør.sykdomstidslinje[dato]::class + ) { "$dato er av annen dagtype" } } (13.januar til 15.januar).forEach { dato -> - assertEquals(Dag.Feriedag::class, inspektør.sykdomstidslinje[dato]::class) { "$dato er av annen dagtype" } + assertEquals( + Dag.Feriedag::class, + inspektør.sykdomstidslinje[dato]::class + ) { "$dato er av annen dagtype" } } - assertTilstander(1.vedtaksperiode, AVVENTER_SIMULERING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_SIMULERING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -113,19 +146,36 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { nullstillTilstandsendringer() håndterSøknad(Sykdom(10.januar, 31.januar, 100.prosent), Ferie(10.januar, 15.januar)) (10.januar til 12.januar).forEach { dato -> - assertEquals(Dag.Arbeidsdag::class, inspektør.sykdomstidslinje[dato]::class) { "$dato er av annen dagtype" } + assertEquals( + Dag.Arbeidsdag::class, + inspektør.sykdomstidslinje[dato]::class + ) { "$dato er av annen dagtype" } } (13.januar til 15.januar).forEach { dato -> - assertEquals(Dag.Feriedag::class, inspektør.sykdomstidslinje[dato]::class) { "$dato er av annen dagtype" } + assertEquals( + Dag.Feriedag::class, + inspektør.sykdomstidslinje[dato]::class + ) { "$dato er av annen dagtype" } } - assertTilstander(1.vedtaksperiode, AVVENTER_GODKJENNING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + AVVENTER_GODKJENNING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) } @Test fun `avslutter søknad utenfor arbeidsgiverperioden dersom det kun er ferie`() { håndterSykmelding(Sykmeldingsperiode(4.januar, 21.januar)) håndterSøknad(Sykdom(4.januar, 21.januar, 100.prosent), Ferie(19.januar, 21.januar)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -133,7 +183,15 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(4.januar, 21.januar)) håndterSøknad(Sykdom(4.januar, 21.januar, 100.prosent)) håndterSøknad(Sykdom(4.januar, 21.januar, 100.prosent), Ferie(19.januar, 21.januar)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -141,7 +199,12 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { nyttVedtak(1.januar til 23.januar) håndterSykmelding(Sykmeldingsperiode(24.januar, 25.januar)) håndterSøknad(Sykdom(24.januar, 25.januar, 100.prosent), Arbeid(24.januar, 25.januar)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -150,7 +213,12 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(4.januar, 19.januar, 100.prosent)) håndterSykmelding(Sykmeldingsperiode(20.januar, 25.januar)) håndterSøknad(Sykdom(20.januar, 25.januar, 100.prosent), Arbeid(22.januar, 25.januar)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -159,7 +227,12 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 16.januar, 100.prosent)) håndterSykmelding(Sykmeldingsperiode(17.januar, 25.januar)) håndterSøknad(Sykdom(17.januar, 25.januar, 100.prosent), Arbeid(17.januar, 25.januar)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -168,14 +241,25 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), Ferie(16.januar, 20.januar)) håndterSykmelding(Sykmeldingsperiode(21.januar, 25.januar)) håndterSøknad(Sykdom(21.januar, 25.januar, 100.prosent), Arbeid(21.januar, 25.januar)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test fun `avslutter søknad utenfor arbeidsgiverperioden dersom det kun er helg`() { håndterSykmelding(Sykmeldingsperiode(4.januar, 21.januar)) håndterSøknad(Sykdom(4.januar, 21.januar, 100.prosent)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -196,9 +280,27 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { ), førsteFraværsdag = 13.januar, ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -221,9 +323,27 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { ), førsteFraværsdag = 15.januar, ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -240,8 +360,21 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { ), førsteFraværsdag = 12.januar, ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @@ -249,28 +382,52 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { fun `litt permisjon`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 7.januar)) håndterSøknad(Sykdom(1.januar, 7.januar, 100.prosent), Permisjon(2.januar, 7.januar)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test fun `bare ferie - kort periode`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 7.januar)) håndterSøknad(Sykdom(1.januar, 7.januar, 100.prosent), Ferie(1.januar, 7.januar)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test fun `bare permisjon - kort periode`() { håndterSykmelding(Sykmeldingsperiode(1.januar, 7.januar)) håndterSøknad(Sykdom(1.januar, 7.januar, 100.prosent), Permisjon(1.januar, 7.januar)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test fun `bare ferie - lang periode`() { håndterSykmelding(januar) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(1.januar, 31.januar)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -281,8 +438,22 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { håndterSøknad(februar) håndterInntektsmelding(listOf(1.januar til 16.januar)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -291,7 +462,12 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Ferie(1.januar, 31.januar)) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Ferie(1.februar, 28.februar)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -301,14 +477,25 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.januar til 16.januar), førsteFraværsdag = 5.februar) håndterSøknad(Sykdom(5.februar, 28.februar, 100.prosent), Ferie(5.februar, 28.februar)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test fun `bare permisjon - lang periode`() { håndterSykmelding(januar) håndterSøknad(Sykdom(1.januar, 31.januar, 100.prosent), Permisjon(1.januar, 31.januar)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -319,7 +506,13 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { Ferie(1.januar, 3.januar), Ferie(18.januar, 19.januar) ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -329,7 +522,12 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { person.søppelbøtte(forrigeHendelse, 1.januar til 20.januar) håndterSykmelding(Sykmeldingsperiode(10.februar, 15.februar)) håndterSøknad(Sykdom(10.februar, 15.februar, 100.prosent)) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -337,7 +535,15 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar, 20.januar)) håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), Arbeid(17.januar, 20.januar)) håndterInntektsmelding(listOf(1.januar til 16.januar)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -345,7 +551,15 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.januar, 20.januar)) håndterSøknad(Sykdom(1.januar, 20.januar, 100.prosent), Ferie(17.januar, 20.januar)) håndterInntektsmelding(listOf(1.januar til 16.januar)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) } @Test @@ -363,20 +577,35 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { @Test fun `hensyntar historikk fra infotrygd - får vite om det etter IM`() { håndterSykmelding(Sykmeldingsperiode(3.februar, 18.februar)) - håndterInntektsmelding(listOf(Periode(1.januar, 16.januar)), førsteFraværsdag = 3.februar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(1.januar, 16.januar)), + førsteFraværsdag = 3.februar, + avsendersystem = ALTINN + ) håndterSøknad(Sykdom(3.februar, 18.februar, 100.prosent)) håndterUtbetalingshistorikkEtterInfotrygdendring( ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 17.januar, 31.januar, 100.prosent, INNTEKT), inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 17.januar, INNTEKT, true)) ) assertVarsel(RV_IT_3, 1.vedtaksperiode.filter()) - assertForkastetPeriodeTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, TIL_INFOTRYGD) + assertForkastetPeriodeTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + TIL_INFOTRYGD + ) } @Test fun `hensyntar historikk fra infotrygd - får vite om det etter IM - flere perioder`() { håndterSykmelding(Sykmeldingsperiode(2.februar, 2.februar)) - håndterInntektsmelding(listOf(Periode(1.januar, 16.januar)), førsteFraværsdag = 2.februar, avsendersystem = ALTINN) + håndterInntektsmelding( + listOf(Periode(1.januar, 16.januar)), + førsteFraværsdag = 2.februar, + avsendersystem = ALTINN + ) håndterUtbetalingshistorikkEtterInfotrygdendring( ArbeidsgiverUtbetalingsperiode(ORGNUMMER, 17.januar, 31.januar, 100.prosent, INNTEKT), inntektshistorikk = listOf(Inntektsopplysning(ORGNUMMER, 17.januar, INNTEKT, true)) @@ -412,9 +641,30 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { førsteFraværsdag = 16.januar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -434,9 +684,30 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { førsteFraværsdag = 16.januar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -447,10 +718,35 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 5.januar, 100.prosent)) håndterSøknad(Sykdom(9.januar, 12.januar, 100.prosent)) håndterSøknad(Sykdom(13.januar, 31.januar, 100.prosent)) - håndterInntektsmelding(listOf(1.januar til 5.januar, 9.januar til 19.januar), førsteFraværsdag = 9.januar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + håndterInntektsmelding( + listOf(1.januar til 5.januar, 9.januar til 19.januar), + førsteFraværsdag = 9.januar, + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -469,9 +765,30 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { førsteFraværsdag = 9.januar, vedtaksperiodeIdInnhenter = 2.vedtaksperiode ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -491,9 +808,30 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { førsteFraværsdag = 16.januar, vedtaksperiodeIdInnhenter = 3.vedtaksperiode ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -516,9 +854,26 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { assertEquals(1.januar til 5.januar, inspektør.periode(1.vedtaksperiode)) assertEquals(6.januar til 12.januar, inspektør.periode(2.vedtaksperiode)) assertEquals(13.januar til 31.januar, inspektør.periode(3.vedtaksperiode)) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test @@ -540,9 +895,30 @@ internal class SøknadArbeidsgiverE2ETest : AbstractEndToEndTest() { vedtaksperiodeIdInnhenter = 2.vedtaksperiode ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVSLUTTET_UTEN_UTBETALING) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 2.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVSLUTTET_UTEN_UTBETALING + ) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING + ) } @Test diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/S\303\270knadMedDagerUtenforPeriodeE2ETest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/S\303\270knadMedDagerUtenforPeriodeE2ETest.kt" index 314980b7bd..efebe462eb 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/S\303\270knadMedDagerUtenforPeriodeE2ETest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/s\303\270knad/S\303\270knadMedDagerUtenforPeriodeE2ETest.kt" @@ -35,7 +35,7 @@ import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -internal class SøknadMedDagerUtenforPeriodeE2ETest: AbstractEndToEndTest() { +internal class SøknadMedDagerUtenforPeriodeE2ETest : AbstractEndToEndTest() { @Test fun `eldgammel ferieperiode før sykdomsperioden klippes bort`() { @@ -44,11 +44,14 @@ internal class SøknadMedDagerUtenforPeriodeE2ETest: AbstractEndToEndTest() { Sykdom(1.mars, 28.mars, 100.prosent), Ferie(1.juli(2015), 10.juli(2015)), ) - assertEquals(null, inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class]) + assertEquals( + null, + inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class] + ) } @Test - fun `søknad med arbeidsdager mellom to perioder bridger ikke de to periodene`(){ + fun `søknad med arbeidsdager mellom to perioder bridger ikke de to periodene`() { nyttVedtak(1.januar til 19.januar) håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Arbeid(20.januar, 31.januar)) @@ -77,12 +80,23 @@ internal class SøknadMedDagerUtenforPeriodeE2ETest: AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Ferie(25.januar, 31.januar)) - assertEquals(januar, inspektør.periode(1.vedtaksperiode) ) - assertEquals(februar, inspektør.periode(2.vedtaksperiode) ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertEquals(januar, inspektør.periode(1.vedtaksperiode)) + assertEquals(februar, inspektør.periode(2.vedtaksperiode)) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) - assertEquals(7, inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class]) - assertEquals(null, inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).inspektør.dagteller[Feriedag::class]) + assertEquals( + 7, + inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class] + ) + assertEquals( + null, + inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).inspektør.dagteller[Feriedag::class] + ) } @Test @@ -94,8 +108,11 @@ internal class SøknadMedDagerUtenforPeriodeE2ETest: AbstractEndToEndTest() { Permisjon(17.januar, 25.januar), Ferie(26.januar, 31.januar) ) - assertEquals(februar, inspektør.periode(1.vedtaksperiode) ) - assertEquals(null, inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class]) + assertEquals(februar, inspektør.periode(1.vedtaksperiode)) + assertEquals( + null, + inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class] + ) } @Test @@ -107,8 +124,11 @@ internal class SøknadMedDagerUtenforPeriodeE2ETest: AbstractEndToEndTest() { Permisjon(17.januar, 25.januar), Ferie(26.januar, 2.februar) ) - assertEquals(februar, inspektør.periode(1.vedtaksperiode) ) - assertEquals(2, inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class]) + assertEquals(februar, inspektør.periode(1.vedtaksperiode)) + assertEquals( + 2, + inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class] + ) } @Test @@ -119,12 +139,23 @@ internal class SøknadMedDagerUtenforPeriodeE2ETest: AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Ferie(25.januar, 31.januar)) - assertEquals(1.januar til 22.januar, inspektør.periode(1.vedtaksperiode) ) - assertEquals(februar, inspektør.periode(2.vedtaksperiode) ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertEquals(1.januar til 22.januar, inspektør.periode(1.vedtaksperiode)) + assertEquals(februar, inspektør.periode(2.vedtaksperiode)) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) - assertEquals(null, inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class]) - assertEquals(null, inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).inspektør.dagteller[Feriedag::class]) + assertEquals( + null, + inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class] + ) + assertEquals( + null, + inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).inspektør.dagteller[Feriedag::class] + ) assertIngenVarsler() } @@ -136,12 +167,23 @@ internal class SøknadMedDagerUtenforPeriodeE2ETest: AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Ferie(23.januar, 31.januar)) - assertEquals(1.januar til 22.januar, inspektør.periode(1.vedtaksperiode) ) - assertEquals(februar, inspektør.periode(2.vedtaksperiode) ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertEquals(1.januar til 22.januar, inspektør.periode(1.vedtaksperiode)) + assertEquals(februar, inspektør.periode(2.vedtaksperiode)) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) - assertEquals(null, inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class]) - assertEquals(null, inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).inspektør.dagteller[Feriedag::class]) + assertEquals( + null, + inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class] + ) + assertEquals( + null, + inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).inspektør.dagteller[Feriedag::class] + ) } @Test @@ -152,11 +194,22 @@ internal class SøknadMedDagerUtenforPeriodeE2ETest: AbstractEndToEndTest() { håndterSykmelding(Sykmeldingsperiode(1.februar, 28.februar)) håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Ferie(18.januar, 31.januar)) - assertEquals(1.januar til 22.januar, inspektør.periode(1.vedtaksperiode) ) - assertEquals(februar, inspektør.periode(2.vedtaksperiode) ) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING) + assertEquals(1.januar til 22.januar, inspektør.periode(1.vedtaksperiode)) + assertEquals(februar, inspektør.periode(2.vedtaksperiode)) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING + ) assertTilstander(2.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING) - assertEquals(5, inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class]) - assertEquals(null, inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).inspektør.dagteller[Feriedag::class]) + assertEquals( + 5, + inspektør.vedtaksperiodeSykdomstidslinje(1.vedtaksperiode).inspektør.dagteller[Feriedag::class] + ) + assertEquals( + null, + inspektør.vedtaksperiodeSykdomstidslinje(2.vedtaksperiode).inspektør.dagteller[Feriedag::class] + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_arbeidsgiver/NyArbeidsgiverUnderveisTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_arbeidsgiver/NyArbeidsgiverUnderveisTest.kt index 89885551ba..b10af22c9d 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_arbeidsgiver/NyArbeidsgiverUnderveisTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_arbeidsgiver/NyArbeidsgiverUnderveisTest.kt @@ -49,8 +49,14 @@ internal class NyArbeidsgiverUnderveisTest : AbstractDslTest() { a1 { håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT, a2 to 10000.månedlig), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf( + a1 to INNTEKT, + a2 to 10000.månedlig + ), 1.januar + ), arbeidsforhold = listOf( Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = ORDINÆRT), Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = ORDINÆRT), @@ -66,12 +72,21 @@ internal class NyArbeidsgiverUnderveisTest : AbstractDslTest() { } a2 { håndterSøknad(februar) - håndterInntektsmelding(listOf(1.februar til 16.februar), beregnetInntekt = 10000.månedlig, begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening") + håndterInntektsmelding( + listOf(1.februar til 16.februar), + beregnetInntekt = 10000.månedlig, + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening" + ) inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.inntektsgrunnlag.inspektør.also { sykepengegrunnlagInspektør -> assertEquals(2, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - val inntektA2 = sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.single { it.gjelder(a2) } - assertInstanceOf(SkattSykepengegrunnlag::class.java, inntektA2.inspektør.inntektsopplysning) - assertEquals(1.januar til LocalDate.MAX, inntektA2.inspektør.gjelder ) + val inntektA2 = sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.single { + it.gjelder(a2) + } + assertInstanceOf( + SkattSykepengegrunnlag::class.java, + inntektA2.inspektør.inntektsopplysning + ) + assertEquals(1.januar til LocalDate.MAX, inntektA2.inspektør.gjelder) } } } @@ -113,7 +128,12 @@ internal class NyArbeidsgiverUnderveisTest : AbstractDslTest() { fun `Omgjøring av overlappende periode med nytt skjæringstidspunkt`() { a1 { nyttVedtak(januar) - håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(30.januar, Dagtype.Arbeidsdag), ManuellOverskrivingDag(31.januar, Dagtype.Arbeidsdag))) + håndterOverstyrTidslinje( + listOf( + ManuellOverskrivingDag(30.januar, Dagtype.Arbeidsdag), + ManuellOverskrivingDag(31.januar, Dagtype.Arbeidsdag) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) @@ -123,7 +143,10 @@ internal class NyArbeidsgiverUnderveisTest : AbstractDslTest() { håndterSøknad(Sykdom(31.januar, 15.februar, 100.prosent)) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) assertEquals(31.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) - håndterInntektsmelding(listOf(31.januar til 15.februar), begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening") + håndterInntektsmelding( + listOf(31.januar til 15.februar), + begrunnelseForReduksjonEllerIkkeUtbetalt = "ManglerOpptjening" + ) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE) } a1 { @@ -143,8 +166,12 @@ internal class NyArbeidsgiverUnderveisTest : AbstractDslTest() { } a1 { håndterInntektsmelding(listOf(1.januar til 16.januar)) - håndterVilkårsgrunnlag(1.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag(listOf(a1 to INNTEKT), 1.januar), + håndterVilkårsgrunnlag( + 1.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = lagStandardSykepengegrunnlag( + listOf(a1 to INNTEKT), + 1.januar + ), arbeidsforhold = listOf( Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = ORDINÆRT), Vilkårsgrunnlag.Arbeidsforhold(a2, 1.januar, type = ORDINÆRT) @@ -152,9 +179,16 @@ internal class NyArbeidsgiverUnderveisTest : AbstractDslTest() { ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf( - OverstyrtArbeidsgiveropplysning(a2, 5000.månedlig, gjelder = 10.januar til LocalDate.MAX, forklaring = "arbeidsgiveren er tilkommen etter skjæringstidspunktet") - )) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, listOf( + OverstyrtArbeidsgiveropplysning( + a2, + 5000.månedlig, + gjelder = 10.januar til LocalDate.MAX, + forklaring = "arbeidsgiveren er tilkommen etter skjæringstidspunktet" + ) + ) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -167,8 +201,11 @@ internal class NyArbeidsgiverUnderveisTest : AbstractDslTest() { } } inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inspektør.also { vilkårsgrunnlagInspektør -> - assertEquals(INNTEKT, vilkårsgrunnlagInspektør.inntektsgrunnlag.inspektør.sykepengegrunnlag) + assertEquals( + INNTEKT, + vilkårsgrunnlagInspektør.inntektsgrunnlag.inspektør.sykepengegrunnlag + ) } } } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_inntekt/TilkommenInntektF\303\270rsteRakettTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_inntekt/TilkommenInntektF\303\270rsteRakettTest.kt" index cd07d67439..cb121ebd56 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_inntekt/TilkommenInntektF\303\270rsteRakettTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_inntekt/TilkommenInntektF\303\270rsteRakettTest.kt" @@ -24,7 +24,7 @@ internal class TilkommenInntektFørsteRakettTest : AbstractDslTest() { a1 { nyttVedtak(januar) håndterSøknad( - Sykdom(1.februar, 28.februar,100.prosent), + Sykdom(1.februar, 28.februar, 100.prosent), Permisjon(20.februar, 28.februar), tilkomneInntekter = listOf( TilkommenInntekt(1.februar, 28.februar, a2, 10000) @@ -35,7 +35,9 @@ internal class TilkommenInntektFørsteRakettTest : AbstractDslTest() { assertEquals(1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.inspektør.let { sykepengegrunnlagInspektør -> assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - assertTrue(sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.single().gjelder(a1)) + assertTrue( + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.single().gjelder(a1) + ) } } } @@ -56,7 +58,9 @@ internal class TilkommenInntektFørsteRakettTest : AbstractDslTest() { assertEquals(1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.inspektør.let { sykepengegrunnlagInspektør -> assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - assertTrue(sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.single().gjelder(a1)) + assertTrue( + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.single().gjelder(a1) + ) } } } @@ -78,7 +82,9 @@ internal class TilkommenInntektFørsteRakettTest : AbstractDslTest() { assertEquals(1, inspektør.vilkårsgrunnlagHistorikkInnslag().size) inspektør.vilkårsgrunnlag(1.januar)!!.inspektør.inntektsgrunnlag.inspektør.let { sykepengegrunnlagInspektør -> assertEquals(1, sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.size) - assertTrue(sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.single().gjelder(a1)) + assertTrue( + sykepengegrunnlagInspektør.arbeidsgiverInntektsopplysninger.single().gjelder(a1) + ) } } } @@ -88,7 +94,7 @@ internal class TilkommenInntektFørsteRakettTest : AbstractDslTest() { a1 { nyttVedtak(januar) håndterSøknad( - Sykdom(1.februar, 28.februar,100.prosent), + Sykdom(1.februar, 28.februar, 100.prosent), tilkomneInntekter = listOf( TilkommenInntekt(1.februar, 28.februar, a2, 10000) ) @@ -99,4 +105,4 @@ internal class TilkommenInntektFørsteRakettTest : AbstractDslTest() { } } -} \ No newline at end of file +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_inntekt/TilkommenInntektTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_inntekt/TilkommenInntektTest.kt index 8c21cc5066..eec2f942cf 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_inntekt/TilkommenInntektTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/tilkommen_inntekt/TilkommenInntektTest.kt @@ -42,12 +42,25 @@ internal class TilkommenInntektTest : AbstractDslTest() { a1 { nyttVedtak(januar) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), tilkomneInntekter = listOf(TilkommenInntekt(fom = 1.februar, tom = 28.februar, orgnummer = a2, råttBeløp = 4000))) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + tilkomneInntekter = listOf( + TilkommenInntekt( + fom = 1.februar, + tom = 28.februar, + orgnummer = a2, + råttBeløp = 4000 + ) + ) + ) håndterYtelser(2.vedtaksperiode) assertUtbetalingsbeløp(2.vedtaksperiode, 1231, 1431, subset = 1.februar til 28.februar) // Korrigerende søknad som angrer den tilkomne inntekten - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), tilkomneInntekter = emptyList()) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + tilkomneInntekter = emptyList() + ) håndterYtelser(2.vedtaksperiode) assertUtbetalingsbeløp(2.vedtaksperiode, 1431, 1431, subset = 1.februar til 28.februar) } @@ -57,7 +70,17 @@ internal class TilkommenInntektTest : AbstractDslTest() { fun `forlengelse uten tilkommet inntekt - etter periode med tilkommet inntekt`() { a1 { nyttVedtak(januar) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), tilkomneInntekter = listOf(TilkommenInntekt(fom = 1.februar, tom = 28.februar, orgnummer = a2, råttBeløp = 4000))) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + tilkomneInntekter = listOf( + TilkommenInntekt( + fom = 1.februar, + tom = 28.februar, + orgnummer = a2, + råttBeløp = 4000 + ) + ) + ) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode, true) @@ -83,7 +106,14 @@ internal class TilkommenInntektTest : AbstractDslTest() { nyttVedtak(januar) håndterSøknad( Sykdom(1.februar, 28.februar, 100.prosent), - tilkomneInntekter = listOf(TilkommenInntekt(fom = 1.februar, tom = 28.februar, orgnummer = a2, råttBeløp = 4000)) + tilkomneInntekter = listOf( + TilkommenInntekt( + fom = 1.februar, + tom = 28.februar, + orgnummer = a2, + råttBeløp = 4000 + ) + ) ) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -95,7 +125,10 @@ internal class TilkommenInntektTest : AbstractDslTest() { assertEquals(1, tilkommendeInntekter.size) assertEquals(a2, tilkommendeInntekter.single().orgnummer) assertInstanceOf(tilkommendeInntekter.single().beløpstidslinje[1.februar]) - assertEquals(200.daglig, tilkommendeInntekter.single().beløpstidslinje[1.februar].beløp) + assertEquals( + 200.daglig, + tilkommendeInntekter.single().beløpstidslinje[1.februar].beløp + ) } håndterOverstyrArbeidsgiveropplysninger( 1.januar, @@ -117,7 +150,10 @@ internal class TilkommenInntektTest : AbstractDslTest() { assertEquals(1, tilkommendeInntekter.size) assertEquals(a2, tilkommendeInntekter.single().orgnummer) assertInstanceOf(tilkommendeInntekter.single().beløpstidslinje[1.februar]) - assertEquals(250.daglig, tilkommendeInntekter.single().beløpstidslinje[1.februar].beløp) + assertEquals( + 250.daglig, + tilkommendeInntekter.single().beløpstidslinje[1.februar].beløp + ) } } } @@ -128,7 +164,14 @@ internal class TilkommenInntektTest : AbstractDslTest() { nyttVedtak(januar) håndterSøknad( Sykdom(1.februar, 28.februar, 100.prosent), - tilkomneInntekter = listOf(TilkommenInntekt(fom = 1.februar, tom = 28.februar, orgnummer = a2, råttBeløp = 4000)) + tilkomneInntekter = listOf( + TilkommenInntekt( + fom = 1.februar, + tom = 28.februar, + orgnummer = a2, + råttBeløp = 4000 + ) + ) ) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) @@ -136,7 +179,8 @@ internal class TilkommenInntektTest : AbstractDslTest() { håndterUtbetalt() håndterSøknad( Sykdom(1.mars, 31.mars, 100.prosent), - tilkomneInntekter = listOf(TilkommenInntekt(fom = 1.mars, tom = 31.mars, orgnummer = a2, råttBeløp = 8000) + tilkomneInntekter = listOf( + TilkommenInntekt(fom = 1.mars, tom = 31.mars, orgnummer = a2, råttBeløp = 8000) ) ) håndterYtelser(3.vedtaksperiode) @@ -147,9 +191,15 @@ internal class TilkommenInntektTest : AbstractDslTest() { assertEquals(1, tilkommendeInntekter.size) assertEquals(a2, tilkommendeInntekter.single().orgnummer) assertInstanceOf(tilkommendeInntekter.single().beløpstidslinje[1.februar]) - assertEquals(200.daglig, tilkommendeInntekter.single().beløpstidslinje[1.februar].beløp) + assertEquals( + 200.daglig, + tilkommendeInntekter.single().beløpstidslinje[1.februar].beløp + ) assertInstanceOf(tilkommendeInntekter.single().beløpstidslinje[1.mars]) - assertEquals(363.daglig, tilkommendeInntekter.single().beløpstidslinje[1.mars].beløp) + assertEquals( + 363.daglig, + tilkommendeInntekter.single().beløpstidslinje[1.mars].beløp + ) } håndterOverstyrArbeidsgiveropplysninger( 1.januar, @@ -169,9 +219,15 @@ internal class TilkommenInntektTest : AbstractDslTest() { assertEquals(1, tilkommendeInntekter.size) assertEquals(a2, tilkommendeInntekter.single().orgnummer) assertInstanceOf(tilkommendeInntekter.single().beløpstidslinje[1.februar]) - assertEquals(200.daglig, tilkommendeInntekter.single().beløpstidslinje[1.februar].beløp) + assertEquals( + 200.daglig, + tilkommendeInntekter.single().beløpstidslinje[1.februar].beløp + ) assertInstanceOf(tilkommendeInntekter.single().beløpstidslinje[1.mars]) - assertEquals(400.daglig, tilkommendeInntekter.single().beløpstidslinje[1.mars].beløp) + assertEquals( + 400.daglig, + tilkommendeInntekter.single().beløpstidslinje[1.mars].beløp + ) } } } @@ -202,7 +258,10 @@ internal class TilkommenInntektTest : AbstractDslTest() { inspektør.vilkårsgrunnlag(1.vedtaksperiode)!!.inntektsgrunnlag.inspektør.tilkommendeInntekter.also { tilkommendeInntekter -> assertEquals(1, tilkommendeInntekter.size) assertEquals(a2, tilkommendeInntekter.single().orgnummer) - assertEquals(400.daglig, tilkommendeInntekter.single().beløpstidslinje[5.januar].beløp) + assertEquals( + 400.daglig, + tilkommendeInntekter.single().beløpstidslinje[5.januar].beløp + ) } } ) @@ -234,7 +293,17 @@ internal class TilkommenInntektTest : AbstractDslTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, true) håndterUtbetalt() - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), tilkomneInntekter = listOf(TilkommenInntekt(fom = 1.februar, tom = 28.februar, orgnummer = a3, råttBeløp = 4000))) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + tilkomneInntekter = listOf( + TilkommenInntekt( + fom = 1.februar, + tom = 28.februar, + orgnummer = a3, + råttBeløp = 4000 + ) + ) + ) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) håndterUtbetalingsgodkjenning(2.vedtaksperiode, true) @@ -518,7 +587,10 @@ internal class TilkommenInntektTest : AbstractDslTest() { assertIkkeTilkommenInntektTag(1.vedtaksperiode) assertTrue(tags(1.vedtaksperiode).contains("EnArbeidsgiver")) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), tilkomneInntekter = listOf(TilkommenInntekt(1.februar, 28.februar,"a3", 100))) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + tilkomneInntekter = listOf(TilkommenInntekt(1.februar, 28.februar, "a3", 100)) + ) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) assertTilkommenInntektTag(2.vedtaksperiode) @@ -546,7 +618,12 @@ internal class TilkommenInntektTest : AbstractDslTest() { listOf(a1).nyeVedtak( periode = januar, inntekt = 20000.månedlig, - sykepengegrunnlagSkatt = lagStandardSykepengegrunnlag(listOf(a1 to 20000.månedlig, a2 to 20000.månedlig), 1.januar), + sykepengegrunnlagSkatt = lagStandardSykepengegrunnlag( + listOf( + a1 to 20000.månedlig, + a2 to 20000.månedlig + ), 1.januar + ), arbeidsforhold = listOf( Arbeidsforhold(a1, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT), Arbeidsforhold(a2, LocalDate.EPOCH, null, Arbeidsforholdtype.ORDINÆRT) @@ -556,7 +633,10 @@ internal class TilkommenInntektTest : AbstractDslTest() { assertIkkeTilkommenInntektTag(1.vedtaksperiode) assertTrue(tags(1.vedtaksperiode).contains("FlereArbeidsgivere")) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), tilkomneInntekter = listOf(TilkommenInntekt(1.februar, 28.februar,"a3", 100))) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + tilkomneInntekter = listOf(TilkommenInntekt(1.februar, 28.februar, "a3", 100)) + ) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) assertTilkommenInntektTag(2.vedtaksperiode) @@ -579,7 +659,12 @@ internal class TilkommenInntektTest : AbstractDslTest() { } } - private fun tags(vedtaksperiode: UUID) = observatør.utkastTilVedtakEventer.last { it.vedtaksperiodeId == vedtaksperiode }.tags - private fun assertIkkeTilkommenInntektTag(vedtaksperiode: UUID) = assertFalse(tags(vedtaksperiode).contains("TilkommenInntekt")) - private fun assertTilkommenInntektTag(vedtaksperiode: UUID) = assertTrue(tags(vedtaksperiode).contains("TilkommenInntekt")) -} \ No newline at end of file + private fun tags(vedtaksperiode: UUID) = + observatør.utkastTilVedtakEventer.last { it.vedtaksperiodeId == vedtaksperiode }.tags + + private fun assertIkkeTilkommenInntektTag(vedtaksperiode: UUID) = + assertFalse(tags(vedtaksperiode).contains("TilkommenInntekt")) + + private fun assertTilkommenInntektTag(vedtaksperiode: UUID) = + assertTrue(tags(vedtaksperiode).contains("TilkommenInntekt")) +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/InstitusjonsoppholdBehovTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/InstitusjonsoppholdBehovTest.kt index 23168e16ca..c12a0008ef 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/InstitusjonsoppholdBehovTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/InstitusjonsoppholdBehovTest.kt @@ -50,7 +50,7 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, @@ -65,7 +65,10 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, institusjonsoppholdsperioder = listOf(1.januar til 31.januar)) + håndterYtelser( + 1.vedtaksperiode, + institusjonsoppholdsperioder = listOf(1.januar til 31.januar) + ) assertForkastetPeriodeTilstander( 1.vedtaksperiode, @@ -73,7 +76,7 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, TIL_INFOTRYGD ) @@ -85,7 +88,10 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, institusjonsoppholdsperioder = listOf(1.desember(2017) til 1.januar)) + håndterYtelser( + 1.vedtaksperiode, + institusjonsoppholdsperioder = listOf(1.desember(2017) til 1.januar) + ) assertForkastetPeriodeTilstander( 1.vedtaksperiode, @@ -93,7 +99,7 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, TIL_INFOTRYGD ) @@ -105,7 +111,10 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, institusjonsoppholdsperioder = listOf(31.januar til 14.februar)) + håndterYtelser( + 1.vedtaksperiode, + institusjonsoppholdsperioder = listOf(31.januar til 14.februar) + ) assertForkastetPeriodeTilstander( 1.vedtaksperiode, @@ -113,7 +122,7 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, TIL_INFOTRYGD ) @@ -142,7 +151,7 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, @@ -168,7 +177,7 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, @@ -191,7 +200,7 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, TIL_INFOTRYGD ) @@ -203,7 +212,10 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, institusjonsoppholdsperioder = listOf(31.desember(2017) til null)) + håndterYtelser( + 1.vedtaksperiode, + institusjonsoppholdsperioder = listOf(31.desember(2017) til null) + ) assertForkastetPeriodeTilstander( 1.vedtaksperiode, @@ -211,7 +223,7 @@ internal class InstitusjonsoppholdBehovTest : AbstractEndToEndTest() { AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, - AVVENTER_VILKÅRSPRØVING, + AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, TIL_INFOTRYGD ) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/OmsorgspengerE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/OmsorgspengerE2ETest.kt index 961cde69dd..60b052f2cb 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/OmsorgspengerE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/OmsorgspengerE2ETest.kt @@ -49,7 +49,19 @@ internal class OmsorgspengerE2ETest : AbstractEndToEndTest() { håndterUtbetalingsgodkjenning(1.vedtaksperiode, true) håndterUtbetalt(Oppdragstatus.AKSEPTERT) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + AVSLUTTET + ) } @Test @@ -60,7 +72,16 @@ internal class OmsorgspengerE2ETest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode, omsorgspenger = listOf(GradertPeriode(januar, 100))) assertVarsel(Varselkode.RV_AY_7, 1.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test @@ -69,9 +90,21 @@ internal class OmsorgspengerE2ETest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, omsorgspenger = listOf(GradertPeriode(1.desember(2017) til 1.januar, 100))) + håndterYtelser( + 1.vedtaksperiode, + omsorgspenger = listOf(GradertPeriode(1.desember(2017) til 1.januar, 100)) + ) assertVarsel(Varselkode.RV_AY_7, 1.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test @@ -80,9 +113,21 @@ internal class OmsorgspengerE2ETest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, omsorgspenger = listOf(GradertPeriode(31.januar til 14.februar, 100))) + håndterYtelser( + 1.vedtaksperiode, + omsorgspenger = listOf(GradertPeriode(31.januar til 14.februar, 100)) + ) assertVarsel(Varselkode.RV_AY_7) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test @@ -91,7 +136,10 @@ internal class OmsorgspengerE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(3.mars, 19.mars, 100.prosent)) håndterInntektsmelding(listOf(3.mars til 18.mars)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, omsorgspenger = listOf(GradertPeriode(3.februar til 20.februar, 100))) + håndterYtelser( + 1.vedtaksperiode, + omsorgspenger = listOf(GradertPeriode(3.februar til 20.februar, 100)) + ) assertVarsel(Varselkode.RV_AY_7) assertTilstand(1.vedtaksperiode, AVVENTER_SIMULERING) } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/Oppl\303\246ringspengeE2ETest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/Oppl\303\246ringspengeE2ETest.kt" index a5b1487206..fa76bf4ff9 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/Oppl\303\246ringspengeE2ETest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/Oppl\303\246ringspengeE2ETest.kt" @@ -46,7 +46,10 @@ internal class OpplæringspengeE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(3.mars, 19.mars, 100.prosent)) håndterInntektsmelding(listOf(3.mars til 18.mars)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, opplæringspenger = listOf(GradertPeriode(3.februar til 20.februar, 100))) + håndterYtelser( + 1.vedtaksperiode, + opplæringspenger = listOf(GradertPeriode(3.februar til 20.februar, 100)) + ) assertVarsel(Varselkode.RV_AY_8) assertTilstand(1.vedtaksperiode, AVVENTER_SIMULERING) } @@ -57,7 +60,10 @@ internal class OpplæringspengeE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(3.mars, 19.mars, 100.prosent)) håndterInntektsmelding(listOf(3.mars til 18.mars)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, opplæringspenger = listOf(GradertPeriode(3.januar til 20.januar, 100))) + håndterYtelser( + 1.vedtaksperiode, + opplæringspenger = listOf(GradertPeriode(3.januar til 20.januar, 100)) + ) assertIngenFunksjonelleFeil() assertIngenVarsler() } @@ -96,7 +102,16 @@ internal class OpplæringspengeE2ETest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode, opplæringspenger = listOf(GradertPeriode(januar, 100))) assertVarsel(Varselkode.RV_AY_8) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test @@ -105,9 +120,21 @@ internal class OpplæringspengeE2ETest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, opplæringspenger = listOf(GradertPeriode(1.desember(2017) til 1.januar, 100))) + håndterYtelser( + 1.vedtaksperiode, + opplæringspenger = listOf(GradertPeriode(1.desember(2017) til 1.januar, 100)) + ) assertVarsel(Varselkode.RV_AY_8) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test @@ -116,9 +143,21 @@ internal class OpplæringspengeE2ETest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, opplæringspenger = listOf(GradertPeriode(31.januar til 14.februar, 100))) + håndterYtelser( + 1.vedtaksperiode, + opplæringspenger = listOf(GradertPeriode(31.januar til 14.februar, 100)) + ) assertVarsel(Varselkode.RV_AY_8) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/PleiepengerE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/PleiepengerE2ETest.kt index 19e45711fa..563f8ff434 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/PleiepengerE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/PleiepengerE2ETest.kt @@ -73,7 +73,16 @@ internal class PleiepengerE2ETest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode, pleiepenger = listOf(GradertPeriode(januar, 100))) assertVarsel(Varselkode.RV_AY_6) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test @@ -82,9 +91,21 @@ internal class PleiepengerE2ETest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, pleiepenger = listOf(GradertPeriode(1.desember(2017) til 1.januar, 100))) + håndterYtelser( + 1.vedtaksperiode, + pleiepenger = listOf(GradertPeriode(1.desember(2017) til 1.januar, 100)) + ) assertVarsel(Varselkode.RV_AY_6, 1.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test @@ -93,9 +114,21 @@ internal class PleiepengerE2ETest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(Periode(1.januar, 16.januar))) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, pleiepenger = listOf(GradertPeriode(31.januar til 14.februar, 100))) + håndterYtelser( + 1.vedtaksperiode, + pleiepenger = listOf(GradertPeriode(31.januar til 14.februar, 100)) + ) assertVarsel(Varselkode.RV_AY_6, 1.vedtaksperiode.filter()) - assertTilstander(1.vedtaksperiode, START, AVVENTER_INFOTRYGDHISTORIKK, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING) + assertTilstander( + 1.vedtaksperiode, + START, + AVVENTER_INFOTRYGDHISTORIKK, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING + ) } @Test @@ -104,7 +137,10 @@ internal class PleiepengerE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(3.mars, 19.mars, 100.prosent)) håndterInntektsmelding(listOf(3.mars til 18.mars)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, pleiepenger = listOf(GradertPeriode(3.februar til 20.februar, 100))) + håndterYtelser( + 1.vedtaksperiode, + pleiepenger = listOf(GradertPeriode(3.februar til 20.februar, 100)) + ) assertVarsel(Varselkode.RV_AY_6) assertTilstand(1.vedtaksperiode, AVVENTER_SIMULERING) } @@ -116,7 +152,10 @@ internal class PleiepengerE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(3.mars, 19.mars, 100.prosent)) håndterInntektsmelding(listOf(3.mars til 18.mars)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, pleiepenger = listOf(GradertPeriode(3.januar til 20.januar, 100))) + håndterYtelser( + 1.vedtaksperiode, + pleiepenger = listOf(GradertPeriode(3.januar til 20.januar, 100)) + ) assertIngenFunksjonelleFeil() } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/YtelserE2ETest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/YtelserE2ETest.kt index 0b586ab7cb..e3e04281fc 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/YtelserE2ETest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/spleis/e2e/ytelser/YtelserE2ETest.kt @@ -90,7 +90,12 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterSøknad(februar) håndterSøknad(mars) håndterSøknad(april) - håndterOverstyrTidslinje((1.februar til 15.april).map { ManuellOverskrivingDag(it, Dagtype.Foreldrepengerdag) }) + håndterOverstyrTidslinje((1.februar til 15.april).map { + ManuellOverskrivingDag( + it, + Dagtype.Foreldrepengerdag + ) + }) assertSisteTilstand(1.vedtaksperiode, AVSLUTTET) assertEquals(1.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) assertSisteTilstand(2.vedtaksperiode, AVVENTER_HISTORIKK) @@ -105,25 +110,49 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { fun `Det er fotsatt mulig å bli en AUU som vil omgjøres om man kombinerer snax som begrunnelseForReduksjonEllerIkkeUtbetalt og andre ytelser`() { håndterSøknad(1.januar til 15.januar) // Denne må være kortere enn 16 dager nullstillTilstandsendringer() - håndterInntektsmelding(listOf(1.januar til 16.januar), begrunnelseForReduksjonEllerIkkeUtbetalt = "noe") // Denn må jo være satt da + håndterInntektsmelding( + listOf(1.januar til 16.januar), + begrunnelseForReduksjonEllerIkkeUtbetalt = "noe" + ) // Denn må jo være satt da håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - assertTilstander(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_VILKÅRSPRØVING, AVVENTER_HISTORIKK, AVVENTER_SIMULERING, AVVENTER_GODKJENNING, TIL_UTBETALING, AVSLUTTET) + assertTilstander( + 1.vedtaksperiode, + AVSLUTTET_UTEN_UTBETALING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_VILKÅRSPRØVING, + AVVENTER_HISTORIKK, + AVVENTER_SIMULERING, + AVVENTER_GODKJENNING, + TIL_UTBETALING, + AVSLUTTET + ) val forlengelse = 16.januar til 31.januar håndterSøknad(forlengelse) håndterYtelser(2.vedtaksperiode) håndterSimulering(2.vedtaksperiode) assertSisteTilstand(2.vedtaksperiode, AVVENTER_GODKJENNING) - håndterOverstyrTidslinje(forlengelse.map { ManuellOverskrivingDag(it, Dagtype.Foreldrepengerdag) }) + håndterOverstyrTidslinje(forlengelse.map { + ManuellOverskrivingDag( + it, + Dagtype.Foreldrepengerdag + ) + }) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING) observatør.vedtaksperiodeVenter.clear() - assertUgyldigSituasjon("En vedtaksperiode i AVSLUTTET_UTEN_UTBETALING trenger hjelp fordi VIL_OMGJØRES!") { håndterSøknad(februar) } - val venter = observatør.vedtaksperiodeVenter.single { it.vedtaksperiodeId == 2.vedtaksperiode.id(ORGNUMMER) } + assertUgyldigSituasjon("En vedtaksperiode i AVSLUTTET_UTEN_UTBETALING trenger hjelp fordi VIL_OMGJØRES!") { + håndterSøknad( + februar + ) + } + val venter = observatør.vedtaksperiodeVenter.single { + it.vedtaksperiodeId == 2.vedtaksperiode.id(ORGNUMMER) + } assertEquals("HJELP", venter.venterPå.venteårsak.hva) assertEquals("VIL_OMGJØRES", venter.venterPå.venteårsak.hvorfor) } @@ -131,7 +160,10 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { @Test fun `Foreldrepenger påvirker skjæringstidspunkt for senere perioder`() { nyttVedtak(januar) - håndterOverstyrArbeidsgiveropplysninger(1.januar, listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT*1.1))) + håndterOverstyrArbeidsgiveropplysninger( + 1.januar, + listOf(OverstyrtArbeidsgiveropplysning(a1, INNTEKT * 1.1)) + ) håndterYtelser(1.vedtaksperiode) håndterSimulering(1.vedtaksperiode) @@ -149,9 +181,18 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { nullstillTilstandsendringer() assertEquals(1.januar, inspektør.skjæringstidspunkt(3.vedtaksperiode)) - assertEquals("PPPP PPPPPPP PPPPPPP PPPPPPP PPP", inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString()) - håndterYtelser(2.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(1.februar til 1.mars, 100))) - assertEquals("PPPP PPPPPPP PPPPPPP PPPPPPP PPP", inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString()) + assertEquals( + "PPPP PPPPPPP PPPPPPP PPPPPPP PPP", + inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString() + ) + håndterYtelser( + 2.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(1.februar til 1.mars, 100)) + ) + assertEquals( + "PPPP PPPPPPP PPPPPPP PPPPPPP PPP", + inspektør.vedtaksperioder(2.vedtaksperiode).sykdomstidslinje.toShortString() + ) assertEquals(1.januar, inspektør.skjæringstidspunkt(3.vedtaksperiode)) håndterUtbetalingsgodkjenning(2.vedtaksperiode) @@ -169,9 +210,16 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) assertEquals(1.januar, inspektør(a2).skjæringstidspunkt(1.vedtaksperiode)) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(januar, 100)), orgnummer = a1) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(januar, 100)), + orgnummer = a1 + ) assertEquals(1.januar, inspektør(a2).skjæringstidspunkt(1.vedtaksperiode)) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør(a1).vedtaksperioder(1.vedtaksperiode).sykdomstidslinje.toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør(a1).vedtaksperioder(1.vedtaksperiode).sykdomstidslinje.toShortString() + ) håndterSimulering(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) håndterUtbetalt() @@ -188,9 +236,19 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVVENTER_HISTORIKK, orgnummer = a1) assertSisteTilstand(1.vedtaksperiode, AVVENTER_BLOKKERENDE_PERIODE, orgnummer = a2) assertEquals(1.januar, inspektør(a2).skjæringstidspunkt(1.vedtaksperiode)) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør(a1).vedtaksperioder(1.vedtaksperiode).sykdomstidslinje.toShortString()) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(januar, 100)), orgnummer = a1) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør(a1).vedtaksperioder(1.vedtaksperiode).sykdomstidslinje.toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør(a1).vedtaksperioder(1.vedtaksperiode).sykdomstidslinje.toShortString() + ) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(januar, 100)), + orgnummer = a1 + ) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør(a1).vedtaksperioder(1.vedtaksperiode).sykdomstidslinje.toShortString() + ) assertEquals(1.januar, inspektør(a2).skjæringstidspunkt(1.vedtaksperiode)) håndterSimulering(1.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(1.vedtaksperiode, orgnummer = a1) @@ -203,12 +261,17 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { nyttVedtak(januar) håndterSøknad(mars) - håndterInntektsmelding(listOf(1.mars til 16.mars), vedtaksperiodeIdInnhenter = 2.vedtaksperiode) + håndterInntektsmelding( + listOf(1.mars til 16.mars), + vedtaksperiodeIdInnhenter = 2.vedtaksperiode + ) håndterVilkårsgrunnlag(2.vedtaksperiode) håndterYtelser(2.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(mars, 100))) - val korrelasjonsIdJanuar = inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().utbetaling!!.inspektør.korrelasjonsId - val korrelasjonsIdMars = inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().utbetaling!!.inspektør.korrelasjonsId + val korrelasjonsIdJanuar = + inspektør.vedtaksperioder(1.vedtaksperiode).inspektør.behandlinger.last().endringer.last().utbetaling!!.inspektør.korrelasjonsId + val korrelasjonsIdMars = + inspektør.vedtaksperioder(2.vedtaksperiode).inspektør.behandlinger.last().endringer.last().utbetaling!!.inspektør.korrelasjonsId assertNotEquals(korrelasjonsIdJanuar, korrelasjonsIdMars) } @@ -217,11 +280,19 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { fun `Foreldrepenger i halen klemrer ikke vekk skjæringstidspunkt`() { nyttVedtak(1.januar til søndag(28.januar)) // Saksbehandler overstyrer i snuten - håndterOverstyrTidslinje((1.januar til fredag(26.januar)).map { ManuellOverskrivingDag(it, Dagtype.Foreldrepengerdag) }) + håndterOverstyrTidslinje((1.januar til fredag(26.januar)).map { + ManuellOverskrivingDag( + it, + Dagtype.Foreldrepengerdag + ) + }) håndterVilkårsgrunnlag(1.vedtaksperiode) assertEquals(27.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(1.januar til søndag(28.januar), 100))) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(1.januar til søndag(28.januar), 100)) + ) assertTrue(inspektør.sykdomstidslinje[27.januar] is Dag.SykHelgedag) assertTrue(inspektør.sykdomstidslinje[28.januar] is Dag.SykHelgedag) assertEquals(27.januar, inspektør.skjæringstidspunkt(1.vedtaksperiode)) @@ -235,7 +306,10 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(1.vedtaksperiode) assertFalse(hendelselogg.harFunksjonelleFeilEllerVerre()) assertIngenVarsler() - håndterYtelser(1.vedtaksperiode, dagpenger = listOf(3.januar.minusDays(14) til 5.januar.minusDays(15))) + håndterYtelser( + 1.vedtaksperiode, + dagpenger = listOf(3.januar.minusDays(14) til 5.januar.minusDays(15)) + ) assertVarsler(1.vedtaksperiode.filter()) assertIngenFunksjonelleFeil() assertActivities(person) @@ -250,7 +324,10 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(1.vedtaksperiode) assertFalse(hendelselogg.harFunksjonelleFeilEllerVerre()) assertIngenVarsler(1.vedtaksperiode.filter()) - håndterYtelser(1.vedtaksperiode, arbeidsavklaringspenger = listOf(3.januar.minusDays(60) til 5.januar.minusDays(60))) + håndterYtelser( + 1.vedtaksperiode, + arbeidsavklaringspenger = listOf(3.januar.minusDays(60) til 5.januar.minusDays(60)) + ) assertVarsel(Varselkode.RV_AY_3, 1.vedtaksperiode.filter()) assertIngenFunksjonelleFeil() assertActivities(person) @@ -282,7 +359,10 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(3.mars, 19.mars, 100.prosent)) håndterInntektsmelding(listOf(3.mars til 18.mars)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(3.februar til 20.februar, 100))) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(3.februar til 20.februar, 100)) + ) assertVarsel(RV_AY_5, 1.vedtaksperiode.filter()) assertTilstand(1.vedtaksperiode, AVVENTER_SIMULERING) } @@ -292,7 +372,10 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.oktober, 31.oktober, 100.prosent)) håndterInntektsmelding(listOf(1.oktober til 16.oktober)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(16.september til 30.september, 100))) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(16.september til 30.september, 100)) + ) assertVarsel(RV_AY_12, 1.vedtaksperiode.filter()) assertTilstand(1.vedtaksperiode, AVVENTER_SIMULERING) } @@ -302,7 +385,10 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(1.januar, 19.januar, 100.prosent)) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, svangerskapspenger = listOf(GradertPeriode(3.januar til 20.januar, 100))) + håndterYtelser( + 1.vedtaksperiode, + svangerskapspenger = listOf(GradertPeriode(3.januar til 20.januar, 100)) + ) assertVarsel(RV_AY_11) } @@ -312,7 +398,10 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterSøknad(Sykdom(3.mars, 19.mars, 100.prosent)) håndterInntektsmelding(listOf(3.mars til 18.mars)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(3.januar til 20.januar, 100))) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(3.januar til 20.januar, 100)) + ) assertIngenFunksjonelleFeil() } @@ -322,7 +411,8 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { forlengVedtak(februar) håndterOverstyrTidslinje(listOf(ManuellOverskrivingDag(31.januar, Dagtype.Feriedag))) - håndterYtelser(1.vedtaksperiode, + håndterYtelser( + 1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(20.januar til 31.januar, 100)), svangerskapspenger = listOf(GradertPeriode(20.januar til 31.januar, 100)), omsorgspenger = listOf(GradertPeriode(20.januar til 31.januar, 100)), @@ -337,7 +427,8 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterSimulering(1.vedtaksperiode) håndterUtbetalingsgodkjenning(1.vedtaksperiode) håndterUtbetalt() - håndterYtelser(2.vedtaksperiode, + håndterYtelser( + 2.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(20.januar til 31.januar, 100)), svangerskapspenger = listOf(GradertPeriode(20.januar til 31.januar, 100)), omsorgspenger = listOf(GradertPeriode(20.januar til 31.januar, 100)), @@ -346,13 +437,17 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { ) assertIngenVarsler(2.vedtaksperiode.filter()) } + @Test fun `Omsorgspenger starter mer enn 4 uker før sykefraværstilfellet`() { håndterSykmelding(Sykmeldingsperiode(3.mars, 19.mars)) håndterSøknad(Sykdom(3.mars, 19.mars, 100.prosent)) håndterInntektsmelding(listOf(3.mars til 18.mars)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, omsorgspenger = listOf(GradertPeriode(3.januar til 20.januar, 100))) + håndterYtelser( + 1.vedtaksperiode, + omsorgspenger = listOf(GradertPeriode(3.januar til 20.januar, 100)) + ) assertIngenFunksjonelleFeil() } @@ -362,9 +457,12 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterSøknad(april) håndterInntektsmelding(listOf(1.april til 16.april)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf( + håndterYtelser( + 1.vedtaksperiode, foreldrepenger = listOf( GradertPeriode(februar, 100), - GradertPeriode(mai, 100) )) + GradertPeriode(mai, 100) + ) + ) assertIngenFunksjonelleFeil() assertSisteTilstand(1.vedtaksperiode, AVVENTER_SIMULERING) } @@ -419,7 +517,12 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { pleiepenger = listOf(GradertPeriode(februar, 100)), omsorgspenger = listOf(GradertPeriode(februar, 100)), opplæringspenger = listOf(GradertPeriode(februar, 100)), - institusjonsoppholdsperioder = listOf(Institusjonsopphold.Institusjonsoppholdsperiode(1.februar, 28.februar)) + institusjonsoppholdsperioder = listOf( + Institusjonsopphold.Institusjonsoppholdsperiode( + 1.februar, + 28.februar + ) + ) ) assertIngenFunksjonelleFeil() @@ -441,7 +544,12 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { pleiepenger = listOf(GradertPeriode(februar, 100)), omsorgspenger = listOf(GradertPeriode(februar, 100)), opplæringspenger = listOf(GradertPeriode(februar, 100)), - institusjonsoppholdsperioder = listOf(Institusjonsopphold.Institusjonsoppholdsperiode(1.februar, 28.februar)), + institusjonsoppholdsperioder = listOf( + Institusjonsopphold.Institusjonsoppholdsperiode( + 1.februar, + 28.februar + ) + ), arbeidsavklaringspenger = listOf(februar), dagpenger = listOf(februar) ) @@ -449,14 +557,20 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { } @Test - fun `Var ikke permisjon i forlengelsen likevel`(){ + fun `Var ikke permisjon i forlengelsen likevel`() { nyttVedtak(januar) - håndterSøknad(Sykdom(1.februar, 28.februar, 100.prosent), Søknad.Søknadsperiode.Permisjon(1.februar, 28.februar)) + håndterSøknad( + Sykdom(1.februar, 28.februar, 100.prosent), + Søknad.Søknadsperiode.Permisjon(1.februar, 28.februar) + ) håndterYtelser(2.vedtaksperiode, orgnummer = a1) håndterSøknad(februar) håndterYtelser(2.vedtaksperiode, orgnummer = a1) håndterSimulering(2.vedtaksperiode, orgnummer = a1) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomstidslinje.toShortString() + ) } @Test @@ -469,16 +583,26 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a1) håndterInntektsmelding(listOf(1.januar til 16.januar), orgnummer = a2) - håndterVilkårsgrunnlag(2.vedtaksperiode, - inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag(inntektperioderForSykepengegrunnlag { - 1.oktober(2017) til 1.desember(2017) inntekter { - a1 inntekt INNTEKT - a2 inntekt INNTEKT * 0.95 - } - }), + håndterVilkårsgrunnlag( + 2.vedtaksperiode, + inntektsvurderingForSykepengegrunnlag = InntektForSykepengegrunnlag( + inntektperioderForSykepengegrunnlag { + 1.oktober(2017) til 1.desember(2017) inntekter { + a1 inntekt INNTEKT + a2 inntekt INNTEKT * 0.95 + } + }), arbeidsforhold = listOf( - Vilkårsgrunnlag.Arbeidsforhold(a1, LocalDate.EPOCH, type = Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT), - Vilkårsgrunnlag.Arbeidsforhold(a2, LocalDate.EPOCH, type = Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT) + Vilkårsgrunnlag.Arbeidsforhold( + a1, + LocalDate.EPOCH, + type = Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT + ), + Vilkårsgrunnlag.Arbeidsforhold( + a2, + LocalDate.EPOCH, + type = Vilkårsgrunnlag.Arbeidsforhold.Arbeidsforholdtype.ORDINÆRT + ) ), orgnummer = a1 ) @@ -503,8 +627,18 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { assertSisteTilstand(1.vedtaksperiode, AVSLUTTET_UTEN_UTBETALING, orgnummer = a2) assertSisteTilstand(2.vedtaksperiode, AVSLUTTET, orgnummer = a2) - håndterOverstyrTidslinje((20..31).map { ManuellOverskrivingDag(it.januar, Dagtype.Pleiepengerdag) }, orgnummer = a1) - håndterOverstyrTidslinje((20..31).map { ManuellOverskrivingDag(it.januar, Dagtype.Pleiepengerdag) }, orgnummer = a2) + håndterOverstyrTidslinje((20..31).map { + ManuellOverskrivingDag( + it.januar, + Dagtype.Pleiepengerdag + ) + }, orgnummer = a1) + håndterOverstyrTidslinje((20..31).map { + ManuellOverskrivingDag( + it.januar, + Dagtype.Pleiepengerdag + ) + }, orgnummer = a2) håndterYtelser(2.vedtaksperiode, orgnummer = a1) håndterSimulering(2.vedtaksperiode, orgnummer = a1) håndterUtbetalingsgodkjenning(2.vedtaksperiode, orgnummer = a1) @@ -523,7 +657,10 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterVilkårsgrunnlag(1.vedtaksperiode) håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(januar, 100))) assertVarsel(RV_AY_5, 1.vedtaksperiode.filter()) - assertEquals("YYYYYYY YYYYYYY YYYYYYY YYYYYYY YYY", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "YYYYYYY YYYYYYY YYYYYYY YYYYYYY YYY", + inspektør.sykdomstidslinje.toShortString() + ) } @Test @@ -531,9 +668,15 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(30.januar til 31.januar, 50))) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(30.januar til 31.januar, 50)) + ) assertVarsel(RV_AY_5, 1.vedtaksperiode.filter()) - assertEquals("SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "SSSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomstidslinje.toShortString() + ) } @Test @@ -541,9 +684,15 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterSøknad(januar) håndterInntektsmelding(listOf(1.januar til 16.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(1.januar til 10.februar, 100))) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(1.januar til 10.februar, 100)) + ) assertVarsel(RV_AY_5, 1.vedtaksperiode.filter()) - assertEquals("YYYYYYY YYYYYYY YYYYYYY YYYYYYY YYY", inspektør.sykdomstidslinje.toShortString()) + assertEquals( + "YYYYYYY YYYYYYY YYYYYYY YYYYYYY YYY", + inspektør.sykdomstidslinje.toShortString() + ) } @Test @@ -551,7 +700,10 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterSøknad(februar) håndterInntektsmelding(listOf(1.februar til 16.februar)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(1.januar til 28.februar, 100))) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(1.januar til 28.februar, 100)) + ) assertVarsel(RV_AY_5, 1.vedtaksperiode.filter()) assertEquals(1.februar, inspektør.sykdomstidslinje.førsteDag()) assertEquals(28.februar, inspektør.sykdomstidslinje.sisteDag()) @@ -589,7 +741,13 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { assertEquals(1.januar, inspektør.skjæringstidspunkt(2.vedtaksperiode)) assertEquals(1.januar, inspektør.skjæringstidspunkt(3.vedtaksperiode)) - assertTilstander(3.vedtaksperiode, START, AVVENTER_INNTEKTSMELDING, AVVENTER_BLOKKERENDE_PERIODE, AVVENTER_HISTORIKK) + assertTilstander( + 3.vedtaksperiode, + START, + AVVENTER_INNTEKTSMELDING, + AVVENTER_BLOKKERENDE_PERIODE, + AVVENTER_HISTORIKK + ) } @Test @@ -598,8 +756,14 @@ internal class YtelserE2ETest : AbstractEndToEndTest() { håndterInntektsmelding(listOf(2.januar til 17.januar)) håndterVilkårsgrunnlag(1.vedtaksperiode) - håndterYtelser(1.vedtaksperiode, foreldrepenger = listOf(GradertPeriode(31.desember(2017) til 1.februar, 100))) - assertEquals("ASSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", inspektør.sykdomstidslinje.toShortString()) + håndterYtelser( + 1.vedtaksperiode, + foreldrepenger = listOf(GradertPeriode(31.desember(2017) til 1.februar, 100)) + ) + assertEquals( + "ASSSSHH SSSSSHH SSSSSHH SSSSSHH SSS", + inspektør.sykdomstidslinje.toShortString() + ) assertTilstand(1.vedtaksperiode, AVVENTER_SIMULERING) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/BesteDagTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/BesteDagTest.kt index 0dc2923532..7d600e50ca 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/BesteDagTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/BesteDagTest.kt @@ -14,22 +14,38 @@ internal class BesteDagTest { companion object { private val ukjentDag = Dag.UkjentDag(1.januar, TestEvent.søknad) private val arbeidsdagFraSøknad = Dag.Arbeidsdag(1.januar, TestEvent.søknad) - private val arbeidsdagFraInntektsmelding = Dag.Arbeidsdag(1.januar, TestEvent.inntektsmelding) + private val arbeidsdagFraInntektsmelding = + Dag.Arbeidsdag(1.januar, TestEvent.inntektsmelding) private val ferieFraInntektsmelding = Dag.Feriedag(1.januar, TestEvent.inntektsmelding) - private val friskHelgFraInntektsmelding = Dag.FriskHelgedag(1.januar, TestEvent.inntektsmelding) - private val arbeidIkkeGjenopptattDag = Dag.ArbeidIkkeGjenopptattDag(1.januar, TestEvent.saksbehandler) - private val arbeidsgiverdagFraInntektsmelding = Dag.Arbeidsgiverdag(1.januar, Økonomi.sykdomsgrad(100.prosent), TestEvent.inntektsmelding) + private val friskHelgFraInntektsmelding = + Dag.FriskHelgedag(1.januar, TestEvent.inntektsmelding) + private val arbeidIkkeGjenopptattDag = + Dag.ArbeidIkkeGjenopptattDag(1.januar, TestEvent.saksbehandler) + private val arbeidsgiverdagFraInntektsmelding = Dag.Arbeidsgiverdag( + 1.januar, + Økonomi.sykdomsgrad(100.prosent), + TestEvent.inntektsmelding + ) private val ferieFraSøknad = Dag.Feriedag(1.januar, TestEvent.søknad) private val ferieFraSaksbehandler = Dag.Feriedag(1.januar, TestEvent.saksbehandler) private val permisjonFraSøknad = Dag.Permisjonsdag(1.januar, TestEvent.søknad) - private val sykedagFraSøknad = Dag.Sykedag(1.januar, Økonomi.sykdomsgrad(100.prosent), TestEvent.søknad) - private val sykHelgedagFraSøknad = Dag.SykHelgedag(6.januar, Økonomi.sykdomsgrad(100.prosent), TestEvent.søknad) + private val sykedagFraSøknad = + Dag.Sykedag(1.januar, Økonomi.sykdomsgrad(100.prosent), TestEvent.søknad) + private val sykHelgedagFraSøknad = + Dag.SykHelgedag(6.januar, Økonomi.sykdomsgrad(100.prosent), TestEvent.søknad) private val permisjonHelgedagFraSøknad = Dag.Permisjonsdag(6.januar, TestEvent.søknad) - private val sykedagFraSaksbehandler = Dag.Sykedag(1.januar, Økonomi.sykdomsgrad(100.prosent), TestEvent.saksbehandler) - private val egenmeldingsdagFraSaksbehandler = Dag.Arbeidsgiverdag(1.januar, Økonomi.sykdomsgrad(100.prosent), TestEvent.saksbehandler) + private val sykedagFraSaksbehandler = + Dag.Sykedag(1.januar, Økonomi.sykdomsgrad(100.prosent), TestEvent.saksbehandler) + private val egenmeldingsdagFraSaksbehandler = + Dag.Arbeidsgiverdag(1.januar, Økonomi.sykdomsgrad(100.prosent), TestEvent.saksbehandler) private val arbeidsdagFraSaksbehandler = Dag.Arbeidsdag(1.januar, TestEvent.saksbehandler) - private val sykedagNavFraSaksbehandler = Dag.SykedagNav(1.januar, Økonomi.sykdomsgrad(100.prosent), TestEvent.saksbehandler) - private val andreYtelser = Dag.AndreYtelser(1.januar, TestEvent.testkilde, Dag.AndreYtelser.AnnenYtelse.Foreldrepenger) + private val sykedagNavFraSaksbehandler = + Dag.SykedagNav(1.januar, Økonomi.sykdomsgrad(100.prosent), TestEvent.saksbehandler) + private val andreYtelser = Dag.AndreYtelser( + 1.januar, + TestEvent.testkilde, + Dag.AndreYtelser.AnnenYtelse.Foreldrepenger + ) } @Test @@ -170,8 +186,12 @@ internal class BesteDagTest { } private infix fun Dag.slår(taper: Dag) = Pair(Dagturnering.TURNERING::beste, this) slår taper - private infix fun Pair.slår(taper: Dag) = assertWinnerBidirectional(this.second, taper, this.second, this.first) + private infix fun Pair.slår(taper: Dag) = + assertWinnerBidirectional(this.second, taper, this.second, this.first) + private infix fun Dag.mot(høyre: Dag) = Pair(this, høyre) - private infix fun Pair.gir(vinner: Dag) = assertWinner(this.first, this.second, vinner) + private infix fun Pair.gir(vinner: Dag) = + assertWinner(this.first, this.second, vinner) + private infix fun BesteStrategy.betyr_at(dag: Dag) = Pair(this, dag) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/ForeldetSykedagTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/ForeldetSykedagTest.kt index 1109c5e91e..931703d809 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/ForeldetSykedagTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/ForeldetSykedagTest.kt @@ -30,7 +30,8 @@ internal class ForeldetSykedagTest { ) } - @Test fun `omgående innsending`() { + @Test + fun `omgående innsending`() { undersøke(søknad(1.mars)).also { assertEquals(28, it.antallDager) assertEquals(20, it.dagteller[Sykedag::class]) @@ -39,7 +40,8 @@ internal class ForeldetSykedagTest { } } - @Test fun `siste dag innlevering`() { + @Test + fun `siste dag innlevering`() { undersøke(søknad(30.april)).also { assertEquals(28, it.antallDager) assertEquals(20, it.dagteller[Sykedag::class]) @@ -48,7 +50,8 @@ internal class ForeldetSykedagTest { } } - @Test fun `Noen dager er ugyldige`() { + @Test + fun `Noen dager er ugyldige`() { undersøke(søknad(1.mai)).also { assertEquals(28, it.antallDager) assertEquals(10, it.dagteller[Sykedag::class]) @@ -57,7 +60,8 @@ internal class ForeldetSykedagTest { } } - @Test fun `Alle dager er ugyldige`() { + @Test + fun `Alle dager er ugyldige`() { undersøke(søknad(1.juni)).also { assertEquals(28, it.antallDager) assertNull(it.dagteller[Sykedag::class]) @@ -67,7 +71,13 @@ internal class ForeldetSykedagTest { } private fun søknad(sendtTilNAV: LocalDate) = hendelefabrikk.lagSøknad( - perioder = arrayOf(Sykdom(18.januar, 14.februar, 100.prosent)), // 10 sykedag januar & februar + perioder = arrayOf( + Sykdom( + 18.januar, + 14.februar, + 100.prosent + ) + ), // 10 sykedag januar & februar sendtTilNAVEllerArbeidsgiver = sendtTilNAV ) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/HendelsekildeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/HendelsekildeTest.kt index 3a6eb92f36..05ed3c0857 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/HendelsekildeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/HendelsekildeTest.kt @@ -15,7 +15,13 @@ internal class HendelsekildeTest { TestEvent.Sykmelding(1.januar.atStartOfDay()), TestEvent.Sykmelding(3.januar.atStartOfDay()) ).map { it.kilde } - assertEquals(2.januar.atStartOfDay(), SykdomshistorikkHendelse.Hendelseskilde.tidligsteTidspunktFor(kilder, TestEvent.Sykmelding::class)) + assertEquals( + 2.januar.atStartOfDay(), + SykdomshistorikkHendelse.Hendelseskilde.tidligsteTidspunktFor( + kilder, + TestEvent.Sykmelding::class + ) + ) } @Test @@ -25,6 +31,11 @@ internal class HendelsekildeTest { TestEvent.Søknad(1.januar.atStartOfDay()), TestEvent.Sykmelding(3.januar.atStartOfDay()) ).map { it.kilde } - assertThrows { SykdomshistorikkHendelse.Hendelseskilde.tidligsteTidspunktFor(kilder, TestEvent.Sykmelding::class) } + assertThrows { + SykdomshistorikkHendelse.Hendelseskilde.tidligsteTidspunktFor( + kilder, + TestEvent.Sykmelding::class + ) + } } } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/L\303\245stePerioderTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/L\303\245stePerioderTest.kt" index d7cf867bb1..fd135477af 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/L\303\245stePerioderTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/L\303\245stePerioderTest.kt" @@ -14,20 +14,23 @@ import org.junit.jupiter.api.assertThrows internal class LåstePerioderTest { @Test fun `låse hele sykdomtidslinjen`() { - val actual = (1.januar jobbTil 5.januar).lås(Periode(1.januar, 5.januar)).merge(1.januar ferieTil 5.januar) + val actual = (1.januar jobbTil 5.januar).lås(Periode(1.januar, 5.januar)) + .merge(1.januar ferieTil 5.januar) assertEquals(5, actual.filterIsInstance().size) } @Test fun `låse deler av sykdomtidslinje`() { - val actual = (1.januar jobbTil 5.januar).lås(Periode(2.januar, 4.januar)).merge(1.januar ferieTil 5.januar) + val actual = (1.januar jobbTil 5.januar).lås(Periode(2.januar, 4.januar)) + .merge(1.januar ferieTil 5.januar) assertEquals(3, actual.filterIsInstance().size) assertEquals(2, actual.filterIsInstance().size) } @Test fun `låse opp sykdomtidslinje`() { - val initial = (1.januar jobbTil 5.januar).lås(Periode(2.januar, 4.januar)).merge(1.januar ferieTil 5.januar) + val initial = (1.januar jobbTil 5.januar).lås(Periode(2.januar, 4.januar)) + .merge(1.januar ferieTil 5.januar) assertEquals(3, initial.filterIsInstance().size) assertEquals(2, initial.filterIsInstance().size) @@ -37,14 +40,36 @@ internal class LåstePerioderTest { @Test fun `kan bare låse perioder som dekkes av tidslinjen`() { - assertThrows { (2.januar jobbTil 4.januar).lås(Periode(1.januar, 4.januar)) } - assertThrows { (2.januar jobbTil 4.januar).lås(Periode(2.januar, 5.januar)) } - assertThrows { (2.januar jobbTil 4.januar).lås(Periode(10.januar, 15.januar)) } + assertThrows { + (2.januar jobbTil 4.januar).lås( + Periode( + 1.januar, + 4.januar + ) + ) + } + assertThrows { + (2.januar jobbTil 4.januar).lås( + Periode( + 2.januar, + 5.januar + ) + ) + } + assertThrows { + (2.januar jobbTil 4.januar).lås( + Periode( + 10.januar, + 15.januar + ) + ) + } } @Test fun `kan bare låse opp perioder som matcher`() { - val initial = (1.januar jobbTil 5.januar).lås(Periode(2.januar, 4.januar)).merge(1.januar ferieTil 5.januar) + val initial = (1.januar jobbTil 5.januar).lås(Periode(2.januar, 4.januar)) + .merge(1.januar ferieTil 5.januar) assertEquals(3, initial.filterIsInstance().size) assertEquals(2, initial.filterIsInstance().size) @@ -54,12 +79,20 @@ internal class LåstePerioderTest { @Test fun `kan bare låse opp perioder som allerede er låst`() { - assertThrows { (1.januar jobbTil 5.januar).låsOpp(Periode(2.januar, 4.januar)) } + assertThrows { + (1.januar jobbTil 5.januar).låsOpp( + Periode( + 2.januar, + 4.januar + ) + ) + } } @Test fun `låse opp overlappende låste dagperioder`() { - val initial = (1.januar jobbTil 25.januar).lås(Periode(2.januar, 11.januar)).lås(Periode(4.januar, 15.januar)) + val initial = (1.januar jobbTil 25.januar).lås(Periode(2.januar, 11.januar)) + .lås(Periode(4.januar, 15.januar)) .merge(1.januar ferieTil 25.januar) assertEquals(1 + 10, initial.filterIsInstance().size) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/OverlapMergeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/OverlapMergeTest.kt index d037f2d2ab..fd5be00c30 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/OverlapMergeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/OverlapMergeTest.kt @@ -26,7 +26,8 @@ internal class OverlapMergeTest { @Test fun `dagturnering`() { val actual = - (1.januar ferieTil 12.januar).merge(7.januar betalingTil 19.januar).merge(17.januar ferieTil 26.januar) + (1.januar ferieTil 12.januar).merge(7.januar betalingTil 19.januar) + .merge(17.januar ferieTil 26.januar) assertEquals(Periode(1.januar, 26.januar), actual.periode()) assertEquals(6 + 7, actual.filterIsInstance().size) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SimpleMergeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SimpleMergeTest.kt index 874156885f..896632cab5 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SimpleMergeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SimpleMergeTest.kt @@ -121,7 +121,7 @@ internal class SimpleMergeTest { count = 0 for (dag: Dag in sykdomstidslinje) { - count++ + count++ } assertEquals(expected, count) } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/Skj\303\246ringstidspunktTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/Skj\303\246ringstidspunktTest.kt" index a2fd9c542f..b894aaf587 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/Skj\303\246ringstidspunktTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/Skj\303\246ringstidspunktTest.kt" @@ -55,7 +55,10 @@ internal class SkjæringstidspunktTest { fun `skjæringstidspunkter happy cases`() { // snodige egenmeldingsdager fra sykmelding resetSeed(11.juni(2024)) - assertEquals(15.juni(2024), beregnSkjæringstidspunkt(2.U + 2.A + 1.U + 1.UK + 8.S, 11.juni(2024) til 23.juni(2024))) + assertEquals( + 15.juni(2024), + beregnSkjæringstidspunkt(2.U + 2.A + 1.U + 1.UK + 8.S, 11.juni(2024) til 23.juni(2024)) + ) // foreldede dager i forkant av forlengelse resetSeed() @@ -67,11 +70,17 @@ internal class SkjæringstidspunktTest { // ferie mellom sykdomsperioder resetSeed() - assertEquals(1.januar, beregnSkjæringstidspunkt(10.S + 10.F + 10.S, 25.januar til 31.januar)) + assertEquals( + 1.januar, + beregnSkjæringstidspunkt(10.S + 10.F + 10.S, 25.januar til 31.januar) + ) // ferie mellom arbeid og sykdomsperiode resetSeed() - assertEquals(21.januar, beregnSkjæringstidspunkt(10.A + 10.F + 10.S, 20.januar til 31.januar)) + assertEquals( + 21.januar, + beregnSkjæringstidspunkt(10.A + 10.F + 10.S, 20.januar til 31.januar) + ) // skjæringstidspunkt for ukjent dag-hale-periode resetSeed() @@ -79,7 +88,10 @@ internal class SkjæringstidspunktTest { // ukjent dager mellom sykdomsperioder resetSeed() - assertEquals(25.januar, beregnSkjæringstidspunkt(20.S + 4.opphold + 7.S, 25.januar til 31.januar)) + assertEquals( + 25.januar, + beregnSkjæringstidspunkt(20.S + 4.opphold + 7.S, 25.januar til 31.januar) + ) // periode med 100 % friskmelding resetSeed() @@ -91,15 +103,24 @@ internal class SkjæringstidspunktTest { // andre ytelser mellom sykdomsperioder resetSeed() - assertEquals(27.januar, beregnSkjæringstidspunkt(16.S + 10.YF + 5.S, 27.januar til 31.januar)) + assertEquals( + 27.januar, + beregnSkjæringstidspunkt(16.S + 10.YF + 5.S, 27.januar til 31.januar) + ) // ferie etter opphold resetSeed() - assertEquals(27.januar, beregnSkjæringstidspunkt(16.S + 10.opphold + 5.F, 27.januar til 31.januar)) + assertEquals( + 27.januar, + beregnSkjæringstidspunkt(16.S + 10.opphold + 5.F, 27.januar til 31.januar) + ) // periode med litt tøysete hale resetSeed() - assertEquals(7.januar, beregnSkjæringstidspunkt(2.S + 2.YF + 2.F + 2.S, 1.januar til 8.januar)) + assertEquals( + 7.januar, + beregnSkjæringstidspunkt(2.S + 2.YF + 2.F + 2.S, 1.januar til 8.januar) + ) // sykdomsperiode med tøysete hale #2 resetSeed() @@ -111,7 +132,10 @@ internal class SkjæringstidspunktTest { // sykdomsperiode med andre ytelser og ferie forut resetSeed() - assertEquals(7.januar, beregnSkjæringstidspunkt(2.S + 2.YF + 2.F + 2.S, 7.januar til 8.januar)) + assertEquals( + 7.januar, + beregnSkjæringstidspunkt(2.S + 2.YF + 2.F + 2.S, 7.januar til 8.januar) + ) } private fun beregnSkjæringstidspunkt(tidslinje: Sykdomstidslinje, søkeperiode: Periode) = @@ -313,21 +337,36 @@ internal class SkjæringstidspunktTest { val arbeidsgiver1tidslinje = 14.S val arbeidsgiver2tidslinje = 14.S assertTrue(arbeidsgiver1tidslinje.sisteDag().erRettFør(arbeidsgiver2tidslinje.førsteDag())) - assertSkjæringstidspunkt(1.januar, 1.januar til 28.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 1.januar, + 1.januar til 28.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test fun `arbeidsgivertidslinjer med helgegap`() { val arbeidsgiver1tidslinje = 12.S + 2.opphold val arbeidsgiver2tidslinje = 14.S - assertSkjæringstidspunkt(1.januar, 1.januar til 28.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 1.januar, + 1.januar til 28.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test fun `arbeidsgivertidslinjer med arbeidsdager i helg`() { val arbeidsgiver1tidslinje = 12.S + 1.A val arbeidsgiver2tidslinje = 1.A + 14.S - assertSkjæringstidspunkt(15.januar, 1. januar til 28.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 15.januar, + 1.januar til 28.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test @@ -335,21 +374,36 @@ internal class SkjæringstidspunktTest { val arbeidsgiver1tidslinje = 14.S resetSeed(10.januar) val arbeidsgiver2tidslinje = 2.S + 2.A + 7.S - assertSkjæringstidspunkt(1.januar, 1.januar til 20.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 1.januar, + 1.januar til 20.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test fun `arbeidsgivertidslinjer med helgegap og arbeidsdag på fredag`() { val arbeidsgiver1tidslinje = 11.S + 1.A + 2.opphold val arbeidsgiver2tidslinje = 14.S - assertSkjæringstidspunkt(15.januar, 1. januar til 28.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 15.januar, + 1.januar til 28.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test fun `arbeidsgivertidslinjer med helgegap og arbeidsdag på mandag`() { val arbeidsgiver1tidslinje = 12.S + 2.opphold val arbeidsgiver2tidslinje = 1.A + 13.S - assertSkjæringstidspunkt(16.januar, 1. januar til 28.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 16.januar, + 1.januar til 28.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test @@ -357,7 +411,12 @@ internal class SkjæringstidspunktTest { val arbeidsgiver1tidslinje = 6.S + 6.A resetSeed() val arbeidsgiver2tidslinje = 14.S - assertSkjæringstidspunkt(1.januar, 1. januar til 14.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 1.januar, + 1.januar til 14.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test @@ -367,14 +426,25 @@ internal class SkjæringstidspunktTest { val arbeidsgiver2tidslinje = 14.A + 14.S resetSeed() val arbeidsgiver3tidslinje = 7.A + 7.S - assertSkjæringstidspunkt(1.januar, 1. januar til 28.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje, arbeidsgiver3tidslinje) + assertSkjæringstidspunkt( + 1.januar, + 1.januar til 28.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje, + arbeidsgiver3tidslinje + ) } @Test fun `arbeidsgivertidslinjer med ferie som gap blir sammenhengende`() { val arbeidsgiver1tidslinje = 7.S + 1.F val arbeidsgiver2tidslinje = 1.F + 14.S - assertSkjæringstidspunkt(1.januar, 1. januar til 23.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 1.januar, + 1.januar til 23.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test @@ -382,9 +452,14 @@ internal class SkjæringstidspunktTest { val arbeidsgiver1tidslinje = 7.S + 2.F + 7.S resetSeed(1.januar) val arbeidsgiver2tidslinje = 7.S + 2.A + 7.S - assertSkjæringstidspunkt(1.januar, 1. januar til 16.januar, arbeidsgiver1tidslinje) - assertSkjæringstidspunkt(10.januar, 1. januar til 16.januar, arbeidsgiver2tidslinje) - assertSkjæringstidspunkt(1.januar, 1. januar til 16.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt(1.januar, 1.januar til 16.januar, arbeidsgiver1tidslinje) + assertSkjæringstidspunkt(10.januar, 1.januar til 16.januar, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 1.januar, + 1.januar til 16.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test @@ -392,9 +467,14 @@ internal class SkjæringstidspunktTest { val arbeidsgiver1tidslinje = 7.S + 2.A + 7.S resetSeed(1.januar) val arbeidsgiver2tidslinje = 7.S + 2.F + 7.S - assertSkjæringstidspunkt(10.januar, 1. januar til 16.januar, arbeidsgiver1tidslinje) - assertSkjæringstidspunkt(1.januar, 1. januar til 16.januar, arbeidsgiver2tidslinje) - assertSkjæringstidspunkt(1.januar, 1. januar til 16.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt(10.januar, 1.januar til 16.januar, arbeidsgiver1tidslinje) + assertSkjæringstidspunkt(1.januar, 1.januar til 16.januar, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 1.januar, + 1.januar til 16.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test @@ -402,9 +482,14 @@ internal class SkjæringstidspunktTest { val arbeidsgiver1tidslinje = 7.S + 2.F + 7.S resetSeed(1.januar) val arbeidsgiver2tidslinje = 7.S + 2.UK + 7.S - assertSkjæringstidspunkt(1.januar, 1. januar til 16.januar, arbeidsgiver1tidslinje) - assertSkjæringstidspunkt(10.januar, 1. januar til 16.januar, arbeidsgiver2tidslinje) - assertSkjæringstidspunkt(1.januar, 1. januar til 16.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt(1.januar, 1.januar til 16.januar, arbeidsgiver1tidslinje) + assertSkjæringstidspunkt(10.januar, 1.januar til 16.januar, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 1.januar, + 1.januar til 16.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test @@ -412,9 +497,14 @@ internal class SkjæringstidspunktTest { val arbeidsgiver1tidslinje = 7.S + 2.UK + 7.S resetSeed(1.januar) val arbeidsgiver2tidslinje = 7.S + 2.F + 7.S - assertSkjæringstidspunkt(10.januar, 1. januar til 16.januar, arbeidsgiver1tidslinje) - assertSkjæringstidspunkt(1.januar, 1. januar til 16.januar, arbeidsgiver2tidslinje) - assertSkjæringstidspunkt(1.januar, 1. januar til 16.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt(10.januar, 1.januar til 16.januar, arbeidsgiver1tidslinje) + assertSkjæringstidspunkt(1.januar, 1.januar til 16.januar, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 1.januar, + 1.januar til 16.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test @@ -422,22 +512,27 @@ internal class SkjæringstidspunktTest { val arbeidsgiver1tidslinje = 7.F + 7.S resetSeed(1.januar) val arbeidsgiver2tidslinje = 7.A + 7.S - assertSkjæringstidspunkt(8.januar, 1. januar til 14.januar, arbeidsgiver1tidslinje) - assertSkjæringstidspunkt(8.januar, 1. januar til 14.januar, arbeidsgiver2tidslinje) - assertSkjæringstidspunkt(8.januar, 1. januar til 14.januar, arbeidsgiver1tidslinje, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt(8.januar, 1.januar til 14.januar, arbeidsgiver1tidslinje) + assertSkjæringstidspunkt(8.januar, 1.januar til 14.januar, arbeidsgiver2tidslinje) + assertSkjæringstidspunkt( + 8.januar, + 1.januar til 14.januar, + arbeidsgiver1tidslinje, + arbeidsgiver2tidslinje + ) } @Test fun `gir kun skjæringstidspunkt som er relevant for perioden`() { val tidslinje = 7.S + 2.opphold + 3.S + 5.opphold + 3.F assertSkjæringstidspunkt(1.januar, 1.januar til 7.januar, tidslinje) - assertSkjæringstidspunkt(10.januar, 10. januar til 12.januar, tidslinje) + assertSkjæringstidspunkt(10.januar, 10.januar til 12.januar, tidslinje) assertSkjæringstidspunkt(18.januar, 18.januar til 20.januar, tidslinje) assertSkjæringstidspunkt(10.januar, 1.januar til 20.januar, tidslinje) } @Test - fun `Sykedager Nav`(){ + fun `Sykedager Nav`() { val tidslinje = 5.N assertFørsteDagErSkjæringstidspunkt(tidslinje) } @@ -455,13 +550,21 @@ internal class SkjæringstidspunktTest { } @Test - fun `andre ytelser etter sykdom skal bruke sykdommens skjæringstidspunkt` () { + fun `andre ytelser etter sykdom skal bruke sykdommens skjæringstidspunkt`() { val tidslinje = 31.S + 28.YF assertSkjæringstidspunkt(1.januar, februar, tidslinje) } - private fun assertSkjæringstidspunkt(forventetSkjæringstidspunkt: LocalDate?, periode: Periode, vararg tidslinje: Sykdomstidslinje) { - assertEquals(forventetSkjæringstidspunkt, Sykdomstidslinje.beregnSkjæringstidspunkt(tidslinje.toList()).beregnSkjæringstidspunkt(periode)) + private fun assertSkjæringstidspunkt( + forventetSkjæringstidspunkt: LocalDate?, + periode: Periode, + vararg tidslinje: Sykdomstidslinje + ) { + assertEquals( + forventetSkjæringstidspunkt, + Sykdomstidslinje.beregnSkjæringstidspunkt(tidslinje.toList()) + .beregnSkjæringstidspunkt(periode) + ) } private fun assertSkjæringstidspunkt( @@ -500,18 +603,23 @@ internal class SkjæringstidspunktTest { arbeidsgiverperioder = arbeidsgiverperioder, beregnetInntekt = beregnetInntekt, førsteFraværsdag = førsteFraværsdag, - refusjon = Inntektsmelding.Refusjon(refusjonBeløp, refusjonOpphørsdato, endringerIRefusjon), + refusjon = Inntektsmelding.Refusjon( + refusjonBeløp, + refusjonOpphørsdato, + endringerIRefusjon + ), begrunnelseForReduksjonEllerIkkeUtbetalt = null ) val aktivitetslogg = Aktivitetslogg() - inntektsmelding.valider(object: Inntektsmelding.Valideringsgrunnlag { + inntektsmelding.valider(object : Inntektsmelding.Valideringsgrunnlag { override fun vedtaksperiode(vedtaksperiodeId: UUID) = null override fun inntektsmeldingIkkeHåndtert(inntektsmelding: Inntektsmelding) {} }, aktivitetslogg) return inntektsmelding.dager().bitAvInntektsmelding( aktivitetslogg, - arbeidsgiverperioder.plusElement(førsteFraværsdag.somPeriode()).periode()!!)!! + arbeidsgiverperioder.plusElement(førsteFraværsdag.somPeriode()).periode()!! + )!! } private companion object { diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SykdomshistorikkTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SykdomshistorikkTest.kt index 36c916040d..048096d180 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SykdomshistorikkTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SykdomshistorikkTest.kt @@ -85,7 +85,7 @@ internal class SykdomshistorikkTest { } @Test - fun `Overlappende biter`(){ + fun `Overlappende biter`() { val meldingsreferanseId = UUID.randomUUID() val bit1 = TestHendelse(8.U(meldingsreferanseId = meldingsreferanseId)) resetSeed() @@ -99,7 +99,7 @@ internal class SykdomshistorikkTest { } @Test - fun `Hele hendelsen er håndtert for en hendelse siden`(){ + fun `Hele hendelsen er håndtert for en hendelse siden`() { val søknad = TestHendelse(10.S) val heleBiten = TestHendelse(16.U) historikk.håndter(heleBiten, Aktivitetslogg()) @@ -114,7 +114,7 @@ internal class SykdomshistorikkTest { } @Test - fun `En bit av inntektsmeldingen håndteres før annen hendelse, og den andre biten etterpå`(){ + fun `En bit av inntektsmeldingen håndteres før annen hendelse, og den andre biten etterpå`() { val søknad = TestHendelse(10.S) val bit1 = TestHendelse(8.U) val bit2 = TestHendelse(8.U) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SykdomstidslinjeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SykdomstidslinjeTest.kt index 5ee39f10a2..0018e1da5e 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SykdomstidslinjeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/sykdomstidslinje/SykdomstidslinjeTest.kt @@ -58,7 +58,8 @@ internal class SykdomstidslinjeTest { resetSeed() val sykdomstidslinje2 = 5.S(kilde2) resetSeed() - val sykdomstidslinje3 = 5.S(Hendelseskilde(SykdomshistorikkHendelse::class, UUID.randomUUID(), nå)) + val sykdomstidslinje3 = + 5.S(Hendelseskilde(SykdomshistorikkHendelse::class, UUID.randomUUID(), nå)) assertEquals(sykdomstidslinje1, sykdomstidslinje2) assertNotEquals(sykdomstidslinje1, sykdomstidslinje3) } @@ -116,7 +117,7 @@ internal class SykdomstidslinjeTest { @Test fun `unik dagtype short string `() { assertEquals("Tom tidslinje", Sykdomstidslinje().toUnikDagtypeShortString()) - val tidslinje = 5.S + 5.F+ 5.UK + 5.P + val tidslinje = 5.S + 5.F + 5.UK + 5.P assertEquals("SSSSSFF FFF???? ?PPPPP", tidslinje.toShortString()) assertEquals("?FPS", tidslinje.toUnikDagtypeShortString()) } @@ -151,7 +152,7 @@ internal class SykdomstidslinjeTest { } @Test - fun `er rett før for andre ytelser`(){ + fun `er rett før for andre ytelser`() { assertTrue(1.S.erRettFør(1.YF)) assertTrue(1.YF.erRettFør(1.YF)) assertTrue(1.YF.erRettFør(1.YF + 1.S)) @@ -198,8 +199,10 @@ internal class SykdomstidslinjeTest { @Test fun `to sykeperioder med mellomrom får riktig slutt og start dato`() { - val tidslinje1 = Sykdomstidslinje.sykedager(1.mandag, 1.tirsdag, 100.prosent, TestEvent.søknad) - val tidslinje2 = Sykdomstidslinje.sykedager(1.fredag, 2.mandag, 100.prosent, TestEvent.søknad) + val tidslinje1 = + Sykdomstidslinje.sykedager(1.mandag, 1.tirsdag, 100.prosent, TestEvent.søknad) + val tidslinje2 = + Sykdomstidslinje.sykedager(1.fredag, 2.mandag, 100.prosent, TestEvent.søknad) val tidslinje = tidslinje2 + tidslinje1 @@ -211,22 +214,32 @@ internal class SykdomstidslinjeTest { @Test fun `kutter frem til og med`() { - val tidslinje = Sykdomstidslinje.sykedager(1.februar, 1.mars, 100.prosent, TestEvent.testkilde) + val tidslinje = + Sykdomstidslinje.sykedager(1.februar, 1.mars, 100.prosent, TestEvent.testkilde) assertEquals(14.februar, tidslinje.fremTilOgMed(14.februar).sisteDag()) assertEquals(1.mars, tidslinje.fremTilOgMed(1.mars).sisteDag()) assertEquals(1.mars, tidslinje.fremTilOgMed(1.april).sisteDag()) assertEquals(1.februar, tidslinje.fremTilOgMed(1.februar).sisteDag()) - assertEquals(1.februar, Sykdomstidslinje.sykedager(1.februar, 1.februar, 100.prosent, TestEvent.testkilde) - .fremTilOgMed(1.februar) - .sisteDag()) + assertEquals( + 1.februar, + Sykdomstidslinje.sykedager(1.februar, 1.februar, 100.prosent, TestEvent.testkilde) + .fremTilOgMed(1.februar) + .sisteDag() + ) assertEquals(0, tidslinje.fremTilOgMed(tidslinje.førsteDag().minusDays(1)).count()) assertEquals(0, Sykdomstidslinje().fremTilOgMed(1.januar).count()) } @Test fun `overskriving av tidslinje`() { - val tidslinje1 = (Sykdomstidslinje.problemdager(1.mandag, 1.onsdag, TestEvent.sykmelding, "Yes") - + Sykdomstidslinje.sykedager(1.torsdag, 1.fredag, 100.prosent, TestEvent.sykmelding)) + val tidslinje1 = + (Sykdomstidslinje.problemdager(1.mandag, 1.onsdag, TestEvent.sykmelding, "Yes") + + Sykdomstidslinje.sykedager( + 1.torsdag, + 1.fredag, + 100.prosent, + TestEvent.sykmelding + )) val tidslinje2 = (Sykdomstidslinje.arbeidsdager(1.mandag, 1.onsdag, TestEvent.testkilde)) val merged = tidslinje1.merge(tidslinje2, Dag.replace) @@ -269,8 +282,11 @@ internal class SykdomstidslinjeTest { resetSeed(2.januar) val tidslinje2 = 29.S // mangler 1.januar og 31.januar val resultat = tidslinje1 - tidslinje2 - assertEquals(setOf(1.januar, 31.januar), resultat.inspektør.dager.filterValues { it !is Dag.UkjentDag }.keys) - assertEquals(tidslinje1,tidslinje2 + resultat) + assertEquals( + setOf(1.januar, 31.januar), + resultat.inspektør.dager.filterValues { it !is Dag.UkjentDag }.keys + ) + assertEquals(tidslinje1, tidslinje2 + resultat) assertEquals(Sykdomstidslinje(), tidslinje2 - tidslinje1) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Asserts.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Asserts.kt index 05c64862f3..7aa13d23c4 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Asserts.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Asserts.kt @@ -6,7 +6,7 @@ import kotlin.contracts.contract import kotlin.reflect.KClass @OptIn(ExperimentalContracts::class) -fun assertNotNull(value: T?) { +fun assertNotNull(value: T?) { contract { returns() implies (value != null) } @@ -14,7 +14,7 @@ fun assertNotNull(value: T?) { } @OptIn(ExperimentalContracts::class) -inline fun assertInstanceOf(actual: Any) { +inline fun assertInstanceOf(actual: Any) { contract { returns() implies (actual is T) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Inntekter.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Inntekter.kt index b27344dda4..5648cb3726 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Inntekter.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Inntekter.kt @@ -6,7 +6,8 @@ import no.nav.helse.hendelser.Periode import no.nav.helse.økonomi.Inntekt import no.nav.helse.økonomi.Inntekt.Companion.månedlig -internal fun inntektperioderForSykepengegrunnlag(block: Inntektperioder.() -> Unit) = Inntektperioder(block).inntekter() +internal fun inntektperioderForSykepengegrunnlag(block: Inntektperioder.() -> Unit) = + Inntektperioder(block).inntekter() internal class Inntektperioder(block: Inntektperioder.() -> Unit) { private val liste = mutableListOf>>() @@ -23,13 +24,25 @@ internal class Inntektperioder(block: Inntektperioder.() -> Unit) { internal infix fun Periode.inntekter(block: Inntekter.() -> Unit) = - lagInntekter("fastloenn", ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, block) + lagInntekter( + "fastloenn", + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + block + ) internal infix fun Periode.sykepenger(block: Inntekter.() -> Unit) = - lagInntekter("sykepenger", ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.YTELSE_FRA_OFFENTLIGE, block) + lagInntekter( + "sykepenger", + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.YTELSE_FRA_OFFENTLIGE, + block + ) internal infix fun Periode.feriepenger(block: Inntekter.() -> Unit) = - lagInntekter("feriepenger", ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, block) + lagInntekter( + "feriepenger", + ArbeidsgiverInntekt.MånedligInntekt.Inntekttype.LØNNSINNTEKT, + block + ) private fun Periode.lagInntekter( beskrivelse: String = "fastloenn", @@ -39,15 +52,16 @@ internal class Inntektperioder(block: Inntektperioder.() -> Unit) { this.map(YearMonth::from) .distinct() .flatMap { yearMonth -> - Inntekter(block).toList().groupBy({ (arbeidsgiver, _) -> arbeidsgiver }) { (_, inntekt) -> - ArbeidsgiverInntekt.MånedligInntekt( - yearMonth, - inntekt, - type, - "kontantytelse", - beskrivelse - ) - }.toList() + Inntekter(block).toList() + .groupBy({ (arbeidsgiver, _) -> arbeidsgiver }) { (_, inntekt) -> + ArbeidsgiverInntekt.MånedligInntekt( + yearMonth, + inntekt, + type, + "kontantytelse", + beskrivelse + ) + }.toList() } .groupBy({ (arbeidsgiver, _) -> arbeidsgiver }) { (_, inntekt) -> inntekt } .map { (arbeidsgiver, inntekter) -> diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Sykdomstidslinjer.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Sykdomstidslinjer.kt index 3bd798e07d..907421b3f2 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Sykdomstidslinjer.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/Sykdomstidslinjer.kt @@ -33,7 +33,10 @@ internal fun resetSeed(frøDato: LocalDate = 1.januar) { dagensDato = frøDato } -internal fun resetSeed(frøDato: LocalDate = 1.januar, tidslinjegenerator: () -> Sykdomstidslinje): Sykdomstidslinje { +internal fun resetSeed( + frøDato: LocalDate = 1.januar, + tidslinjegenerator: () -> Sykdomstidslinje +): Sykdomstidslinje { resetSeed(frøDato) return tidslinjegenerator() } @@ -54,14 +57,16 @@ internal val Int.N INGEN ).also { dagensDato = dagensDato.plusDays(this.toLong()) } -internal fun Int.S(melding: Melding) = this.S(Hendelseskilde(melding, UUID.randomUUID(), LocalDateTime.now())) +internal fun Int.S(melding: Melding) = + this.S(Hendelseskilde(melding, UUID.randomUUID(), LocalDateTime.now())) -internal fun Int.S(hendelseskilde: Hendelseskilde, grad: Prosentdel = 100.prosent) = Sykdomstidslinje.sykedager( - dagensDato, - dagensDato.plusDays(this.toLong() - 1), - grad, - hendelseskilde -).also { dagensDato = dagensDato.plusDays(this.toLong()) } +internal fun Int.S(hendelseskilde: Hendelseskilde, grad: Prosentdel = 100.prosent) = + Sykdomstidslinje.sykedager( + dagensDato, + dagensDato.plusDays(this.toLong() - 1), + grad, + hendelseskilde + ).also { dagensDato = dagensDato.plusDays(this.toLong()) } internal val Int.U get() = Sykdomstidslinje.arbeidsgiverdager( @@ -71,12 +76,13 @@ internal val Int.U INGEN ).also { dagensDato = dagensDato.plusDays(this.toLong()) } -internal fun Int.U(meldingsreferanseId: UUID = UUID.randomUUID()) = Sykdomstidslinje.arbeidsgiverdager( - dagensDato, - dagensDato.plusDays(this.toLong() - 1), - 100.prosent, - Hendelseskilde(SykdomshistorikkHendelse::class, meldingsreferanseId, LocalDateTime.now()) -).also { dagensDato = dagensDato.plusDays(this.toLong()) } +internal fun Int.U(meldingsreferanseId: UUID = UUID.randomUUID()) = + Sykdomstidslinje.arbeidsgiverdager( + dagensDato, + dagensDato.plusDays(this.toLong() - 1), + 100.prosent, + Hendelseskilde(SykdomshistorikkHendelse::class, meldingsreferanseId, LocalDateTime.now()) + ).also { dagensDato = dagensDato.plusDays(this.toLong()) } internal val Int.K get() = Sykdomstidslinje.sykedager( @@ -115,14 +121,16 @@ internal val Int.AIG internal val Int.YF get() = YF(Dag.AndreYtelser.AnnenYtelse.Foreldrepenger) -internal fun Int.YF(ytelse: Dag.AndreYtelser.AnnenYtelse, kilde: Hendelseskilde = INGEN) = Sykdomstidslinje.andreYtelsedager( - dagensDato, - dagensDato.plusDays(this.toLong() - 1), - kilde, - ytelse -).also { dagensDato = dagensDato.plusDays(this.toLong()) } +internal fun Int.YF(ytelse: Dag.AndreYtelser.AnnenYtelse, kilde: Hendelseskilde = INGEN) = + Sykdomstidslinje.andreYtelsedager( + dagensDato, + dagensDato.plusDays(this.toLong() - 1), + kilde, + ytelse + ).also { dagensDato = dagensDato.plusDays(this.toLong()) } -internal fun unikKilde() = UUID.randomUUID().let { Hendelseskilde(it.toString(), it, LocalDateTime.now()) } +internal fun unikKilde() = + UUID.randomUUID().let { Hendelseskilde(it.toString(), it, LocalDateTime.now()) } internal val Int.YD get() = Sykdomstidslinje.andreYtelsedager( @@ -175,19 +183,31 @@ internal val Int.YOL internal val Int.H get() = Sykdomstidslinje( dagensDato.datesUntil(dagensDato.plusDays(this.toLong() - 1).plusDays(1)) - .collect(Collectors.toMap({ it }, { SykHelgedag(it, Økonomi.sykdomsgrad(100.prosent), INGEN) })) + .collect( + Collectors.toMap( + { it }, + { SykHelgedag(it, Økonomi.sykdomsgrad(100.prosent), INGEN) }) + ) ).also { dagensDato = dagensDato.plusDays(this.toLong()) } internal val Int.P get() = Sykdomstidslinje( dagensDato.datesUntil(dagensDato.plusDays(this.toLong() - 1).plusDays(1)) - .collect(Collectors.toMap({ it }, { Permisjonsdag(it, INGEN) })) + .collect( + Collectors.toMap( + { it }, + { Permisjonsdag(it, INGEN) }) + ) ).also { dagensDato = dagensDato.plusDays(this.toLong()) } internal val Int.R get() = Sykdomstidslinje( dagensDato.datesUntil(dagensDato.plusDays(this.toLong() - 1).plusDays(1)) - .collect(Collectors.toMap({ it }, { FriskHelgedag(it, INGEN) })) + .collect( + Collectors.toMap( + { it }, + { FriskHelgedag(it, INGEN) }) + ) ).also { dagensDato = dagensDato.plusDays(this.toLong()) } internal val Int.UK @@ -199,17 +219,26 @@ internal val Int.UK internal val Int.PROBLEM get() = PROBLEM("Problemdag", INGEN) internal fun Int.PROBLEM(melding: String, kilde: Hendelseskilde) = Sykdomstidslinje( dagensDato.datesUntil(dagensDato.plusDays(this.toLong() - 1).plusDays(1)) - .collect(Collectors.toMap({ it }, { ProblemDag(it, kilde, melding) })) - ).also { dagensDato = dagensDato.plusDays(this.toLong()) } + .collect( + Collectors.toMap( + { it }, + { ProblemDag(it, kilde, melding) }) + ) +).also { dagensDato = dagensDato.plusDays(this.toLong()) } internal val Int.FORELDET get() = Sykdomstidslinje( dagensDato.datesUntil(dagensDato.plusDays(this.toLong() - 1).plusDays(1)) - .collect(Collectors.toMap({ it }, { Dag.ForeldetSykedag(it, Økonomi.sykdomsgrad(100.prosent), INGEN) })) + .collect( + Collectors.toMap( + { it }, + { Dag.ForeldetSykedag(it, Økonomi.sykdomsgrad(100.prosent), INGEN) }) + ) ).also { dagensDato = dagensDato.plusDays(this.toLong()) } -internal class TestHendelse(private val tidslinje: Sykdomstidslinje = Sykdomstidslinje()) : SykdomshistorikkHendelse { +internal class TestHendelse(private val tidslinje: Sykdomstidslinje = Sykdomstidslinje()) : + SykdomshistorikkHendelse { override fun oppdaterFom(other: Periode) = other override fun sykdomstidslinje() = tidslinje } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/TestEvent.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/TestEvent.kt index aa09056edc..f99a845353 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/TestEvent.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/TestEvent.kt @@ -15,7 +15,11 @@ internal sealed class TestEvent(opprettet: LocalDateTime) : SykdomshistorikkHend val testkilde = TestHendelse(LocalDateTime.now()).kilde } - val kilde = SykdomshistorikkHendelse.Hendelseskilde(this::class.simpleName ?: "Ukjent", UUID.randomUUID(), opprettet) + val kilde = SykdomshistorikkHendelse.Hendelseskilde( + this::class.simpleName ?: "Ukjent", + UUID.randomUUID(), + opprettet + ) // Objects impersonating real-life sources of sickness timeline days class Inntektsmelding(opprettet: LocalDateTime) : TestEvent(opprettet) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/TestSykdomstidlinje.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/TestSykdomstidlinje.kt index 3533249f1e..a66edad90a 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/TestSykdomstidlinje.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/TestSykdomstidlinje.kt @@ -18,7 +18,9 @@ internal class TestSykdomstidslinje( internal infix fun grad(grad: Number) = this.also { it.grad = grad.prosent } - internal fun asSykdomstidslinje(kilde: Hendelseskilde = TestEvent.testkilde) = daggenerator(førsteDato, sisteDato, grad, kilde) + internal fun asSykdomstidslinje(kilde: Hendelseskilde = TestEvent.testkilde) = + daggenerator(førsteDato, sisteDato, grad, kilde) + internal infix fun merge(annen: TestSykdomstidslinje) = this.asSykdomstidslinje().merge(annen) internal fun merge(annen: Sykdomstidslinje) = this.asSykdomstidslinje().merge(annen) internal fun lås(periode: Periode) = this.asSykdomstidslinje().also { it.lås(periode) } @@ -26,23 +28,34 @@ internal class TestSykdomstidslinje( } internal infix fun LocalDate.jobbTil(sisteDato: LocalDate) = - TestSykdomstidslinje(this, sisteDato) { første: LocalDate, siste: LocalDate, _, kilde: Hendelseskilde -> + TestSykdomstidslinje( + this, + sisteDato + ) { første: LocalDate, siste: LocalDate, _, kilde: Hendelseskilde -> Sykdomstidslinje.arbeidsdager(første, siste, kilde) } internal infix fun LocalDate.ferieTil(sisteDato: LocalDate) = - TestSykdomstidslinje(this, sisteDato) { første: LocalDate, siste: LocalDate, _, kilde: Hendelseskilde -> + TestSykdomstidslinje( + this, + sisteDato + ) { første: LocalDate, siste: LocalDate, _, kilde: Hendelseskilde -> Sykdomstidslinje.feriedager(første, siste, kilde) } -internal infix fun LocalDate.sykTil(sisteDato: LocalDate) = TestSykdomstidslinje(this, sisteDato, Sykdomstidslinje.Companion::sykedager) +internal infix fun LocalDate.sykTil(sisteDato: LocalDate) = + TestSykdomstidslinje(this, sisteDato, Sykdomstidslinje.Companion::sykedager) -internal infix fun LocalDate.permisjonTil(sisteDato: LocalDate) = TestSykdomstidslinje(this, sisteDato) { førstedato, sistedato, _, kilde -> - Sykdomstidslinje.permisjonsdager(førstedato, sistedato, kilde) -} +internal infix fun LocalDate.permisjonTil(sisteDato: LocalDate) = + TestSykdomstidslinje(this, sisteDato) { førstedato, sistedato, _, kilde -> + Sykdomstidslinje.permisjonsdager(førstedato, sistedato, kilde) + } -internal infix fun LocalDate.betalingTil(sisteDato: LocalDate) = TestSykdomstidslinje(this, sisteDato, Sykdomstidslinje.Companion::arbeidsgiverdager ) +internal infix fun LocalDate.betalingTil(sisteDato: LocalDate) = + TestSykdomstidslinje(this, sisteDato, Sykdomstidslinje.Companion::arbeidsgiverdager) -internal fun Sykdomstidslinje.merge(testTidslinje: TestSykdomstidslinje): Sykdomstidslinje = this.merge(testTidslinje.asSykdomstidslinje()) +internal fun Sykdomstidslinje.merge(testTidslinje: TestSykdomstidslinje): Sykdomstidslinje = + this.merge(testTidslinje.asSykdomstidslinje()) -internal fun List.merge(beste: BesteStrategy) = this.map { it.asSykdomstidslinje() }.merge(beste) +internal fun List.merge(beste: BesteStrategy) = + this.map { it.asSykdomstidslinje() }.merge(beste) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/UtbetalingstidslinjerBuilderTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/UtbetalingstidslinjerBuilderTest.kt index c4e918d39c..a194aa6b36 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/UtbetalingstidslinjerBuilderTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/testhelpers/UtbetalingstidslinjerBuilderTest.kt @@ -56,7 +56,7 @@ internal class UtbetalingstidslinjerBuilderTest { fun `starte på fredag`() { val tidslinje = tidslinjeOf(14.NAVDAGER, startDato = 5.januar) assertRekkefølge(tidslinje) - assertEquals(5.januar til 24.januar,tidslinje.periode()) + assertEquals(5.januar til 24.januar, tidslinje.periode()) assertEquals(6, tidslinje.inspektør.navHelgDagTeller) assertEquals(14, tidslinje.inspektør.navDagTeller) } @@ -76,6 +76,6 @@ internal class UtbetalingstidslinjerBuilderTest { } private fun assertRekkefølge(tidslinje: Utbetalingstidslinje) { - tidslinje.zipWithNext { left, right -> assertEquals(left.dato.plusDays(1L), right.dato)} + tidslinje.zipWithNext { left, right -> assertEquals(left.dato.plusDays(1L), right.dato) } } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/tournament/DagturneringTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/tournament/DagturneringTest.kt index 32b8f48463..07162436ef 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/tournament/DagturneringTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/tournament/DagturneringTest.kt @@ -35,10 +35,13 @@ internal class DagturneringTest { @Test fun `arbeidsdag fra inntektsmelding vinner over egenmelding fra søknad`() { - val søknadArbeidsgiverdag = Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, søknad) - val inntektsmeldingArbeidsdag = Sykdomstidslinje.arbeidsdager(1.mandag, 1.mandag, inntektsmelding) + val søknadArbeidsgiverdag = + Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, søknad) + val inntektsmeldingArbeidsdag = + Sykdomstidslinje.arbeidsdager(1.mandag, 1.mandag, inntektsmelding) - val tidslinje = søknadArbeidsgiverdag.merge(inntektsmeldingArbeidsdag, Dagturnering.TURNERING::beste) + val tidslinje = + søknadArbeidsgiverdag.merge(inntektsmeldingArbeidsdag, Dagturnering.TURNERING::beste) assertTrue(tidslinje[1.mandag] is Arbeidsdag) } @@ -46,58 +49,86 @@ internal class DagturneringTest { @Test fun `arbeidsdag fra inntektsmelding vinner over sykedag fra søknad`() { val søknadSykedag = Sykdomstidslinje.sykedager(1.mandag, 1.mandag, 100.prosent, søknad) - val inntektsmeldingArbeidsdag = Sykdomstidslinje.arbeidsdager(1.mandag, 1.mandag, inntektsmelding) + val inntektsmeldingArbeidsdag = + Sykdomstidslinje.arbeidsdager(1.mandag, 1.mandag, inntektsmelding) - val tidslinje = søknadSykedag.merge(inntektsmeldingArbeidsdag, Dagturnering.TURNERING::beste) + val tidslinje = + søknadSykedag.merge(inntektsmeldingArbeidsdag, Dagturnering.TURNERING::beste) assertTrue(tidslinje[1.mandag] is Arbeidsdag) } + @Test fun `arbeidsgiverdag fra inntektsmelding vinner over arbeidsgiverdag fra søknad`() { - val søknadArbeidsgiverdag = Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, søknad) - val inntektsmeldingArbeidsgiverdag = Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, inntektsmelding) - - val tidslinje = søknadArbeidsgiverdag.merge(inntektsmeldingArbeidsgiverdag, Dagturnering.TURNERING::beste) + val søknadArbeidsgiverdag = + Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, søknad) + val inntektsmeldingArbeidsgiverdag = + Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, inntektsmelding) + + val tidslinje = søknadArbeidsgiverdag.merge( + inntektsmeldingArbeidsgiverdag, + Dagturnering.TURNERING::beste + ) assertTrue(tidslinje[1.mandag].kommerFra(hendelse = Inntektsmelding::class)) } @Test fun `arbeidsgiverdag fra søknad taper for arbeidsgiverdag fra inntektsmelding`() { - val søknadArbeidsgiverdag = Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, søknad) - val inntektsmeldingArbeidsgiverdag = Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, inntektsmelding) - - val tidslinje = inntektsmeldingArbeidsgiverdag.merge(søknadArbeidsgiverdag, Dagturnering.TURNERING::beste) + val søknadArbeidsgiverdag = + Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, søknad) + val inntektsmeldingArbeidsgiverdag = + Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, inntektsmelding) + + val tidslinje = inntektsmeldingArbeidsgiverdag.merge( + søknadArbeidsgiverdag, + Dagturnering.TURNERING::beste + ) assertTrue(tidslinje[1.mandag].kommerFra(hendelse = Inntektsmelding::class)) } @Test fun `arbeidsgiverdag_helgedag fra inntektsmelding vinner over arbeidsgiverdag fra søknad`() { - val søknadArbeidsgiverdag = Sykdomstidslinje.arbeidsgiverdager(1.lørdag, 1.lørdag, 100.prosent, søknad) - val inntektsmeldingArbeidsgiverHelgedag = Sykdomstidslinje.arbeidsgiverdager(1.lørdag, 1.lørdag, 100.prosent, inntektsmelding) - - val tidslinje = søknadArbeidsgiverdag.merge(inntektsmeldingArbeidsgiverHelgedag, Dagturnering.TURNERING::beste) + val søknadArbeidsgiverdag = + Sykdomstidslinje.arbeidsgiverdager(1.lørdag, 1.lørdag, 100.prosent, søknad) + val inntektsmeldingArbeidsgiverHelgedag = + Sykdomstidslinje.arbeidsgiverdager(1.lørdag, 1.lørdag, 100.prosent, inntektsmelding) + + val tidslinje = søknadArbeidsgiverdag.merge( + inntektsmeldingArbeidsgiverHelgedag, + Dagturnering.TURNERING::beste + ) assertTrue(tidslinje[1.lørdag].kommerFra(hendelse = Inntektsmelding::class)) } @Test fun `arbeidsgiverdag_helgedag fra søknad taper for arbeidsgiverdag_helgedag fra inntektsmelding`() { - val søknadArbeidsgiverHelgedag = Sykdomstidslinje.arbeidsgiverdager(1.lørdag, 1.lørdag, 100.prosent, søknad) - val inntektsmeldingArbeidsgiverHelgedag = Sykdomstidslinje.arbeidsgiverdager(1.lørdag, 1.lørdag, 100.prosent, inntektsmelding) - - val tidslinje = inntektsmeldingArbeidsgiverHelgedag.merge(søknadArbeidsgiverHelgedag, Dagturnering.TURNERING::beste) + val søknadArbeidsgiverHelgedag = + Sykdomstidslinje.arbeidsgiverdager(1.lørdag, 1.lørdag, 100.prosent, søknad) + val inntektsmeldingArbeidsgiverHelgedag = + Sykdomstidslinje.arbeidsgiverdager(1.lørdag, 1.lørdag, 100.prosent, inntektsmelding) + + val tidslinje = inntektsmeldingArbeidsgiverHelgedag.merge( + søknadArbeidsgiverHelgedag, + Dagturnering.TURNERING::beste + ) assertTrue(tidslinje[1.lørdag].kommerFra(hendelse = Inntektsmelding::class)) } @Test fun `arbeidsgiverdag fra søknad taper over arbeidsgiverdag fra inntektsmelding selvom søknad kom sist`() { - val inntektsmeldingArbeidsgiverdag = Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, inntektsmelding) - val søknadArbeidsgiverdag = Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, søknad) - - val tidslinje1 = inntektsmeldingArbeidsgiverdag.merge(søknadArbeidsgiverdag, Dagturnering.TURNERING::beste) + val inntektsmeldingArbeidsgiverdag = + Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, inntektsmelding) + val søknadArbeidsgiverdag = + Sykdomstidslinje.arbeidsgiverdager(1.mandag, 1.mandag, 100.prosent, søknad) + + val tidslinje1 = inntektsmeldingArbeidsgiverdag.merge( + søknadArbeidsgiverdag, + Dagturnering.TURNERING::beste + ) assertTrue(tidslinje1[1.mandag].kommerFra(hendelse = Inntektsmelding::class)) } diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/tournament/Turneringsn\303\270kkelTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/tournament/Turneringsn\303\270kkelTest.kt" index cecfa8710a..744ceb76bb 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/tournament/Turneringsn\303\270kkelTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/tournament/Turneringsn\303\270kkelTest.kt" @@ -48,10 +48,19 @@ internal class TurneringsnøkkelTest { assertEquals(Arbeidsdag_SØ, fraDag(Arbeidsdag(enDag, søknad))) assertEquals(Arbeidsgiverdag_IM, fraDag(Arbeidsgiverdag(enDag, økonomi, inntektsmelding))) assertEquals(Arbeidsgiverdag_SØ, fraDag(Arbeidsgiverdag(enDag, økonomi, søknad))) - assertEquals(ArbeidsgiverHelgedag_IM, fraDag(ArbeidsgiverHelgedag(enDag, økonomi, inntektsmelding))) + assertEquals( + ArbeidsgiverHelgedag_IM, + fraDag(ArbeidsgiverHelgedag(enDag, økonomi, inntektsmelding)) + ) assertEquals(ArbeidsgiverHelgedag_SØ, fraDag(ArbeidsgiverHelgedag(enDag, økonomi, søknad))) - assertEquals(Turneringsnøkkel.ForeldetSykedag, fraDag(Dag.ForeldetSykedag(enDag, økonomi, inntektsmelding))) - assertEquals(Turneringsnøkkel.ForeldetSykedag, fraDag(Dag.ForeldetSykedag(enDag, økonomi, søknad))) + assertEquals( + Turneringsnøkkel.ForeldetSykedag, + fraDag(Dag.ForeldetSykedag(enDag, økonomi, inntektsmelding)) + ) + assertEquals( + Turneringsnøkkel.ForeldetSykedag, + fraDag(Dag.ForeldetSykedag(enDag, økonomi, søknad)) + ) assertEquals(Feriedag_IM, fraDag(Feriedag(enDag, inntektsmelding))) assertEquals(Feriedag_SØ, fraDag(Feriedag(enDag, søknad))) assertEquals(Feriedag_IM, fraDag(FriskHelgedag(enDag, inntektsmelding))) @@ -69,7 +78,8 @@ internal class TurneringsnøkkelTest { val inntektsmelding = Inntektsmelding.kilde } - val kilde: Hendelseskilde = Hendelseskilde(this::class, UUID.randomUUID(), LocalDateTime.now()) + val kilde: Hendelseskilde = + Hendelseskilde(this::class, UUID.randomUUID(), LocalDateTime.now()) // Objects impersonating real-life sources of sickness timeline days object Inntektsmelding : TestHendelse() diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/OppdragBuilderTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/OppdragBuilderTest.kt index 49ce020470..5ce684c5b7 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/OppdragBuilderTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/OppdragBuilderTest.kt @@ -67,16 +67,18 @@ internal class OppdragBuilderTest { assertEquals(20.januar til 26.januar, result[0].inspektør.fom til result[0].inspektør.tom) } - private val femhundreKronerIRefusjon: Økonomi = Økonomi.gjenopprett(ØkonomiInnDto( - grad = ProsentdelDto(100.0), - totalGrad = ProsentdelDto(100.0), - arbeidsgiverRefusjonsbeløp = InntektbeløpDto.DagligDouble(500.0), - aktuellDagsinntekt = InntektbeløpDto.DagligDouble(500.0), - beregningsgrunnlag = InntektbeløpDto.DagligDouble(500.0), - dekningsgrunnlag = InntektbeløpDto.DagligDouble(500.0), - grunnbeløpgrense = null, - arbeidsgiverbeløp = InntektbeløpDto.DagligDouble(500.0), - personbeløp = InntektbeløpDto.DagligDouble(0.0), - er6GBegrenset = false - ), erAvvistDag = false) -} \ No newline at end of file + private val femhundreKronerIRefusjon: Økonomi = Økonomi.gjenopprett( + ØkonomiInnDto( + grad = ProsentdelDto(100.0), + totalGrad = ProsentdelDto(100.0), + arbeidsgiverRefusjonsbeløp = InntektbeløpDto.DagligDouble(500.0), + aktuellDagsinntekt = InntektbeløpDto.DagligDouble(500.0), + beregningsgrunnlag = InntektbeløpDto.DagligDouble(500.0), + dekningsgrunnlag = InntektbeløpDto.DagligDouble(500.0), + grunnbeløpgrense = null, + arbeidsgiverbeløp = InntektbeløpDto.DagligDouble(500.0), + personbeløp = InntektbeløpDto.DagligDouble(0.0), + er6GBegrenset = false + ), erAvvistDag = false + ) +} diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/OppdragTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/OppdragTest.kt index 5e17c0e181..a30dfe747e 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/OppdragTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/OppdragTest.kt @@ -17,39 +17,40 @@ internal class OppdragTest { @Test fun `begrense oppdrag til siste dato`() { - val oppdrag1 = Oppdrag("", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 19.januar, - tom = 25.januar, - endringskode = Endringskode.UEND, - beløp = 1000, - grad = 100, - delytelseId = 1, - refDelytelseId = null, - refFagsystemId = null - ), - Utbetalingslinje( - fom = 26.januar, - tom = 28.januar, - endringskode = Endringskode.ENDR, - beløp = 500, - grad = 50, - delytelseId = 2, - refDelytelseId = null, - refFagsystemId = null - ), - Utbetalingslinje( - fom = 29.januar, - tom = 31.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100, - delytelseId = 3, - refDelytelseId = null, - refFagsystemId = null - ) + val oppdrag1 = Oppdrag( + "", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 19.januar, + tom = 25.januar, + endringskode = Endringskode.UEND, + beløp = 1000, + grad = 100, + delytelseId = 1, + refDelytelseId = null, + refFagsystemId = null + ), + Utbetalingslinje( + fom = 26.januar, + tom = 28.januar, + endringskode = Endringskode.ENDR, + beløp = 500, + grad = 50, + delytelseId = 2, + refDelytelseId = null, + refFagsystemId = null + ), + Utbetalingslinje( + fom = 29.januar, + tom = 31.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100, + delytelseId = 3, + refDelytelseId = null, + refFagsystemId = null ) ) + ) assertTrue(oppdrag1.begrensTil(18.januar).isEmpty()) oppdrag1.begrensTil(20.januar).also { result -> @@ -68,39 +69,40 @@ internal class OppdragTest { @Test fun `begrense oppdrag fra første dato`() { - val oppdrag1 = Oppdrag("", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 19.januar, - tom = 25.januar, - endringskode = Endringskode.UEND, - beløp = 1000, - grad = 100, - delytelseId = 1, - refDelytelseId = null, - refFagsystemId = null - ), - Utbetalingslinje( - fom = 26.januar, - tom = 28.januar, - endringskode = Endringskode.ENDR, - beløp = 500, - grad = 50, - delytelseId = 2, - refDelytelseId = null, - refFagsystemId = null - ), - Utbetalingslinje( - fom = 29.januar, - tom = 31.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100, - delytelseId = 3, - refDelytelseId = null, - refFagsystemId = null - ) + val oppdrag1 = Oppdrag( + "", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 19.januar, + tom = 25.januar, + endringskode = Endringskode.UEND, + beløp = 1000, + grad = 100, + delytelseId = 1, + refDelytelseId = null, + refFagsystemId = null + ), + Utbetalingslinje( + fom = 26.januar, + tom = 28.januar, + endringskode = Endringskode.ENDR, + beløp = 500, + grad = 50, + delytelseId = 2, + refDelytelseId = null, + refFagsystemId = null + ), + Utbetalingslinje( + fom = 29.januar, + tom = 31.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100, + delytelseId = 3, + refDelytelseId = null, + refFagsystemId = null ) ) + ) assertTrue(oppdrag1.begrensFra(1.februar).isEmpty()) oppdrag1.begrensFra(29.januar).also { result -> @@ -122,30 +124,31 @@ internal class OppdragTest { @Test fun `begrense oppdrag tar ikke med opphørslinjer`() { - val oppdrag1 = Oppdrag("", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 19.januar, - tom = 25.januar, - endringskode = Endringskode.ENDR, - datoStatusFom = 16.januar, - beløp = 1000, - grad = 100, - delytelseId = 1, - refDelytelseId = null, - refFagsystemId = null - ), - Utbetalingslinje( - fom = 26.januar, - tom = 29.januar, - endringskode = Endringskode.NY, - beløp = 500, - grad = 50, - delytelseId = 2, - refDelytelseId = null, - refFagsystemId = null - ) + val oppdrag1 = Oppdrag( + "", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 19.januar, + tom = 25.januar, + endringskode = Endringskode.ENDR, + datoStatusFom = 16.januar, + beløp = 1000, + grad = 100, + delytelseId = 1, + refDelytelseId = null, + refFagsystemId = null + ), + Utbetalingslinje( + fom = 26.januar, + tom = 29.januar, + endringskode = Endringskode.NY, + beløp = 500, + grad = 50, + delytelseId = 2, + refDelytelseId = null, + refFagsystemId = null ) ) + ) oppdrag1.begrensFra(19.januar).also { result -> assertEquals(1, result.size) @@ -162,129 +165,140 @@ internal class OppdragTest { val result = oppdrag1 + oppdrag2 assertTrue(result.isEmpty()) } + @Test fun `prepend oppdrag`() { - val oppdrag1 = Oppdrag("", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 19.januar, - tom = 25.januar, - endringskode = Endringskode.UEND, - beløp = 1000, - grad = 100, - delytelseId = 1, - refDelytelseId = null, - refFagsystemId = null - ), - Utbetalingslinje( - fom = 26.januar, - tom = 28.januar, - endringskode = Endringskode.ENDR, - beløp = 500, - grad = 50, - delytelseId = 2, - refDelytelseId = null, - refFagsystemId = null - ), - Utbetalingslinje( - fom = 29.januar, - tom = 31.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100, - delytelseId = 3, - refDelytelseId = null, - refFagsystemId = null - ) - ) - ) - val oppdrag2 = Oppdrag("", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 17.januar, - tom = 18.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - ) - ) - - val oppdrag3 = Oppdrag("", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 17.januar, - tom = 25.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100, - delytelseId = 1, - refDelytelseId = null, - refFagsystemId = null - ), - Utbetalingslinje( - fom = 26.januar, - tom = 28.januar, - endringskode = Endringskode.ENDR, - beløp = 500, - grad = 50, - delytelseId = 2, - refDelytelseId = null, - refFagsystemId = null - ), - Utbetalingslinje( - fom = 29.januar, - tom = 31.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100, - delytelseId = 3, - refDelytelseId = null, - refFagsystemId = null - ) + val oppdrag1 = Oppdrag( + "", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 19.januar, + tom = 25.januar, + endringskode = Endringskode.UEND, + beløp = 1000, + grad = 100, + delytelseId = 1, + refDelytelseId = null, + refFagsystemId = null + ), + Utbetalingslinje( + fom = 26.januar, + tom = 28.januar, + endringskode = Endringskode.ENDR, + beløp = 500, + grad = 50, + delytelseId = 2, + refDelytelseId = null, + refFagsystemId = null + ), + Utbetalingslinje( + fom = 29.januar, + tom = 31.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100, + delytelseId = 3, + refDelytelseId = null, + refFagsystemId = null + ) + ) + ) + val oppdrag2 = Oppdrag( + "", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 17.januar, + tom = 18.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 + ) + ) + ) + + val oppdrag3 = Oppdrag( + "", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 17.januar, + tom = 25.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100, + delytelseId = 1, + refDelytelseId = null, + refFagsystemId = null + ), + Utbetalingslinje( + fom = 26.januar, + tom = 28.januar, + endringskode = Endringskode.ENDR, + beløp = 500, + grad = 50, + delytelseId = 2, + refDelytelseId = null, + refFagsystemId = null + ), + Utbetalingslinje( + fom = 29.januar, + tom = 31.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100, + delytelseId = 3, + refDelytelseId = null, + refFagsystemId = null ) ) + ) assertEquals(oppdrag3, oppdrag1 + oppdrag2) assertEquals(oppdrag3, oppdrag2 + oppdrag1) val oppdragSomKanUtbetales = oppdrag3.minus(oppdrag1, Aktivitetslogg()) - val expectedOppdragSomKanUtbetales = Oppdrag("", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 17.januar, - tom = 25.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100, - delytelseId = 4, - refDelytelseId = 3, - refFagsystemId = oppdrag1.inspektør.fagsystemId() - ), - Utbetalingslinje( - fom = 26.januar, - tom = 28.januar, - endringskode = Endringskode.NY, - beløp = 500, - grad = 50, - delytelseId = 5, - refDelytelseId = 4, - refFagsystemId = oppdrag1.inspektør.fagsystemId() - ), - Utbetalingslinje( - fom = 29.januar, - tom = 31.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100, - delytelseId = 6, - refDelytelseId = 5, - refFagsystemId = oppdrag1.inspektør.fagsystemId() - ) + val expectedOppdragSomKanUtbetales = Oppdrag( + "", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 17.januar, + tom = 25.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100, + delytelseId = 4, + refDelytelseId = 3, + refFagsystemId = oppdrag1.inspektør.fagsystemId() + ), + Utbetalingslinje( + fom = 26.januar, + tom = 28.januar, + endringskode = Endringskode.NY, + beløp = 500, + grad = 50, + delytelseId = 5, + refDelytelseId = 4, + refFagsystemId = oppdrag1.inspektør.fagsystemId() + ), + Utbetalingslinje( + fom = 29.januar, + tom = 31.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100, + delytelseId = 6, + refDelytelseId = 5, + refFagsystemId = oppdrag1.inspektør.fagsystemId() ) ) + ) assertEquals(expectedOppdragSomKanUtbetales, oppdragSomKanUtbetales) } private fun assertEquals(expected: Oppdrag, actual: Oppdrag) { assertEquals(expected.size, actual.size) { "antall linjer stemmer ikke" } - assertEquals(expected.inspektør.mottaker, actual.inspektør.mottaker) { "mottaker stemmer ikke" } - assertEquals(expected.inspektør.fagområde, actual.inspektør.fagområde) { "mottaker stemmer ikke" } + assertEquals( + expected.inspektør.mottaker, + actual.inspektør.mottaker + ) { "mottaker stemmer ikke" } + assertEquals( + expected.inspektør.fagområde, + actual.inspektør.fagområde + ) { "mottaker stemmer ikke" } expected.forEachIndexed { index, expectedLinje -> val actualLinje = actual[index] @@ -305,16 +319,17 @@ internal class OppdragTest { @Test fun `tomme oppdrag er synkroniserte med andre ikke tomme`() { - val oppdrag1 = Oppdrag("mottaker", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 1.januar, - tom = 16.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) + val oppdrag1 = Oppdrag( + "mottaker", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 1.januar, + tom = 16.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 ) ) + ) val oppdrag2 = Oppdrag("mottaker", Fagområde.Sykepenger) assertTrue(Oppdrag.synkronisert(oppdrag1, oppdrag1)) assertTrue(Oppdrag.synkronisert(oppdrag1, oppdrag2)) @@ -322,99 +337,172 @@ internal class OppdragTest { @Test fun `oppdrag med status er synkronisert med tomt oppdrag`() { - val oppdrag1 = Oppdrag("mottaker", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 1.januar, - tom = 16.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) + val oppdrag1 = Oppdrag( + "mottaker", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 1.januar, + tom = 16.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 ) ) + ) val oppdrag2 = Oppdrag("mottaker", Fagområde.Sykepenger) - oppdrag1.lagreOverføringsinformasjon(UtbetalingHendelse(UUID.randomUUID(), "orgnr", oppdrag1.fagsystemId, UUID.randomUUID(), Oppdragstatus.AKSEPTERT, "", 1234L, LocalDateTime.now())) + oppdrag1.lagreOverføringsinformasjon( + UtbetalingHendelse( + UUID.randomUUID(), + "orgnr", + oppdrag1.fagsystemId, + UUID.randomUUID(), + Oppdragstatus.AKSEPTERT, + "", + 1234L, + LocalDateTime.now() + ) + ) assertTrue(Oppdrag.synkronisert(oppdrag1, oppdrag1)) assertTrue(Oppdrag.synkronisert(oppdrag1, oppdrag2)) } @Test fun `oppdrag med ulik status er ikke synkroniserte`() { - val oppdrag1 = Oppdrag("mottaker", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 1.januar, - tom = 16.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - ) - ) - val oppdrag2 = Oppdrag("mottaker", Fagområde.Sykepenger, listOf( - Utbetalingslinje( - fom = 1.januar, - tom = 16.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - ) - ) - oppdrag1.lagreOverføringsinformasjon(UtbetalingHendelse(UUID.randomUUID(), "orgnr", oppdrag1.fagsystemId, UUID.randomUUID(), Oppdragstatus.AKSEPTERT, "", 1234L, LocalDateTime.now())) + val oppdrag1 = Oppdrag( + "mottaker", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 1.januar, + tom = 16.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 + ) + ) + ) + val oppdrag2 = Oppdrag( + "mottaker", Fagområde.Sykepenger, listOf( + Utbetalingslinje( + fom = 1.januar, + tom = 16.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 + ) + ) + ) + oppdrag1.lagreOverføringsinformasjon( + UtbetalingHendelse( + UUID.randomUUID(), + "orgnr", + oppdrag1.fagsystemId, + UUID.randomUUID(), + Oppdragstatus.AKSEPTERT, + "", + 1234L, + LocalDateTime.now() + ) + ) assertFalse(Oppdrag.synkronisert(oppdrag1, oppdrag2)) } @Test fun `oppdrag med ulik status er ikke synkroniserte 2`() { - val oppdrag1 = Oppdrag("mottaker", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 1.januar, - tom = 16.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - ) - ) - val oppdrag2 = Oppdrag("mottaker", Fagområde.Sykepenger, listOf( - Utbetalingslinje( - fom = 1.januar, - tom = 16.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - ) - ) - oppdrag1.lagreOverføringsinformasjon(UtbetalingHendelse(UUID.randomUUID(), "orgnr", oppdrag1.fagsystemId, UUID.randomUUID(), Oppdragstatus.AKSEPTERT, "", 1234L, LocalDateTime.now())) - oppdrag2.lagreOverføringsinformasjon(UtbetalingHendelse(UUID.randomUUID(), "orgnr", oppdrag2.fagsystemId, UUID.randomUUID(), Oppdragstatus.AVVIST, "", 1234L, LocalDateTime.now())) + val oppdrag1 = Oppdrag( + "mottaker", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 1.januar, + tom = 16.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 + ) + ) + ) + val oppdrag2 = Oppdrag( + "mottaker", Fagområde.Sykepenger, listOf( + Utbetalingslinje( + fom = 1.januar, + tom = 16.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 + ) + ) + ) + oppdrag1.lagreOverføringsinformasjon( + UtbetalingHendelse( + UUID.randomUUID(), + "orgnr", + oppdrag1.fagsystemId, + UUID.randomUUID(), + Oppdragstatus.AKSEPTERT, + "", + 1234L, + LocalDateTime.now() + ) + ) + oppdrag2.lagreOverføringsinformasjon( + UtbetalingHendelse( + UUID.randomUUID(), + "orgnr", + oppdrag2.fagsystemId, + UUID.randomUUID(), + Oppdragstatus.AVVIST, + "", + 1234L, + LocalDateTime.now() + ) + ) assertFalse(Oppdrag.synkronisert(oppdrag1, oppdrag2)) } @Test fun `oppdrag med lik status er synkroniserte`() { - val oppdrag1 = Oppdrag("mottaker", Fagområde.SykepengerRefusjon, listOf( - Utbetalingslinje( - fom = 1.januar, - tom = 16.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - ) - ) - val oppdrag2 = Oppdrag("mottaker", Fagområde.Sykepenger, listOf( - Utbetalingslinje( - fom = 1.januar, - tom = 16.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - ) - ) - oppdrag1.lagreOverføringsinformasjon(UtbetalingHendelse(UUID.randomUUID(), "orgnr", oppdrag1.fagsystemId, UUID.randomUUID(), Oppdragstatus.AKSEPTERT, "", 1234L, LocalDateTime.now())) - oppdrag2.lagreOverføringsinformasjon(UtbetalingHendelse(UUID.randomUUID(), "orgnr", oppdrag2.fagsystemId, UUID.randomUUID(), Oppdragstatus.AKSEPTERT, "", 1234L, LocalDateTime.now())) + val oppdrag1 = Oppdrag( + "mottaker", Fagområde.SykepengerRefusjon, listOf( + Utbetalingslinje( + fom = 1.januar, + tom = 16.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 + ) + ) + ) + val oppdrag2 = Oppdrag( + "mottaker", Fagområde.Sykepenger, listOf( + Utbetalingslinje( + fom = 1.januar, + tom = 16.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 + ) + ) + ) + oppdrag1.lagreOverføringsinformasjon( + UtbetalingHendelse( + UUID.randomUUID(), + "orgnr", + oppdrag1.fagsystemId, + UUID.randomUUID(), + Oppdragstatus.AKSEPTERT, + "", + 1234L, + LocalDateTime.now() + ) + ) + oppdrag2.lagreOverføringsinformasjon( + UtbetalingHendelse( + UUID.randomUUID(), + "orgnr", + oppdrag2.fagsystemId, + UUID.randomUUID(), + Oppdragstatus.AKSEPTERT, + "", + 1234L, + LocalDateTime.now() + ) + ) assertTrue(Oppdrag.synkronisert(oppdrag1, oppdrag2)) } @@ -430,15 +518,15 @@ internal class OppdragTest { fun `nettobeløp for annulleringer`() { val oppdrag = Oppdrag( "mottaker", Fagområde.Sykepenger, listOf( - Utbetalingslinje( - fom = 1.januar, - tom = 16.januar, - endringskode = Endringskode.UEND, - beløp = 1000, - grad = 100 - ) - + Utbetalingslinje( + fom = 1.januar, + tom = 16.januar, + endringskode = Endringskode.UEND, + beløp = 1000, + grad = 100 ) + + ) ) val annullering = oppdrag.annuller(Aktivitetslogg()) assertEquals(-1 * oppdrag.totalbeløp(), annullering.nettoBeløp()) @@ -448,15 +536,15 @@ internal class OppdragTest { fun `uend linjer i oppdrag ber ikke om simulering (brukerutbetaling)`() { val oppdrag = Oppdrag( "mottaker", Fagområde.Sykepenger, listOf( - Utbetalingslinje( - fom = 1.januar, - tom = 16.januar, - endringskode = Endringskode.UEND, - beløp = 1000, - grad = 100 - ) - + Utbetalingslinje( + fom = 1.januar, + tom = 16.januar, + endringskode = Endringskode.UEND, + beløp = 1000, + grad = 100 ) + + ) ) val aktivitetslogg = Aktivitetslogg() oppdrag.simuler(aktivitetslogg, 1.januar, "Sara Saksbehandler") @@ -498,18 +586,18 @@ internal class OppdragTest { } @Test - fun `simulerer oppdrag med linjer`(){ + fun `simulerer oppdrag med linjer`() { val oppdrag = Oppdrag( "mottaker", Fagområde.Sykepenger, listOf( - Utbetalingslinje( - fom = 17.januar, - tom = 31.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - + Utbetalingslinje( + fom = 17.januar, + tom = 31.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 ) + + ) ) val aktivitetslogg = Aktivitetslogg() oppdrag.simuler(aktivitetslogg, 1.januar, "Sara Saksbehandler") @@ -517,18 +605,18 @@ internal class OppdragTest { } @Test - fun `overfører oppdrag med linjer`(){ + fun `overfører oppdrag med linjer`() { val oppdrag = Oppdrag( "mottaker", Fagområde.Sykepenger, listOf( - Utbetalingslinje( - fom = 17.januar, - tom = 31.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - + Utbetalingslinje( + fom = 17.januar, + tom = 31.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 ) + + ) ) val aktivitetslogg = Aktivitetslogg() oppdrag.overfør(aktivitetslogg, 1.januar, "Sara Saksbehandler") @@ -539,29 +627,31 @@ internal class OppdragTest { fun `lagrer avstemmingsnøkkel, overføringstidspunkt og status på oppdraget ved akseptert ubetaling`() { val oppdrag = Oppdrag( "mottaker", Fagområde.Sykepenger, listOf( - Utbetalingslinje( - fom = 17.januar, - tom = 31.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - + Utbetalingslinje( + fom = 17.januar, + tom = 31.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 ) + + ) ) val avstemmingsnøkkel: Long = 1235 val overføringstidspunkt = LocalDateTime.now() - oppdrag.lagreOverføringsinformasjon(UtbetalingHendelse( - meldingsreferanseId = UUID.randomUUID(), - orgnummer = "5678", - fagsystemId = oppdrag.fagsystemId, - utbetalingId = UUID.randomUUID(), - avstemmingsnøkkel = avstemmingsnøkkel, - overføringstidspunkt = overføringstidspunkt, - melding = "foo", - status = Oppdragstatus.AKSEPTERT - )) + oppdrag.lagreOverføringsinformasjon( + UtbetalingHendelse( + meldingsreferanseId = UUID.randomUUID(), + orgnummer = "5678", + fagsystemId = oppdrag.fagsystemId, + utbetalingId = UUID.randomUUID(), + avstemmingsnøkkel = avstemmingsnøkkel, + overføringstidspunkt = overføringstidspunkt, + melding = "foo", + status = Oppdragstatus.AKSEPTERT + ) + ) assertEquals(avstemmingsnøkkel, oppdrag.inspektør.avstemmingsnøkkel) assertEquals(overføringstidspunkt, oppdrag.inspektør.overføringstidspunkt) @@ -572,41 +662,45 @@ internal class OppdragTest { fun `overskriver ikke overføringstidspunkt`() { val oppdrag = Oppdrag( "mottaker", Fagområde.Sykepenger, listOf( - Utbetalingslinje( - fom = 17.januar, - tom = 31.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - + Utbetalingslinje( + fom = 17.januar, + tom = 31.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 ) + + ) ) val avstemmingsnøkkel: Long = 1235 val overføringstidspunkt = LocalDateTime.now() - oppdrag.lagreOverføringsinformasjon(UtbetalingHendelse( - meldingsreferanseId = UUID.randomUUID(), - orgnummer = "5678", - fagsystemId = oppdrag.fagsystemId, - utbetalingId = UUID.randomUUID(), - avstemmingsnøkkel = avstemmingsnøkkel, - overføringstidspunkt = overføringstidspunkt, - melding = "foo", - status = Oppdragstatus.AKSEPTERT - )) + oppdrag.lagreOverføringsinformasjon( + UtbetalingHendelse( + meldingsreferanseId = UUID.randomUUID(), + orgnummer = "5678", + fagsystemId = oppdrag.fagsystemId, + utbetalingId = UUID.randomUUID(), + avstemmingsnøkkel = avstemmingsnøkkel, + overføringstidspunkt = overføringstidspunkt, + melding = "foo", + status = Oppdragstatus.AKSEPTERT + ) + ) val aksepteringstidspunkt = overføringstidspunkt.plusSeconds(3) - oppdrag.lagreOverføringsinformasjon(UtbetalingHendelse( - meldingsreferanseId = UUID.randomUUID(), - orgnummer = "5678", - fagsystemId = oppdrag.fagsystemId, - utbetalingId = UUID.randomUUID(), - avstemmingsnøkkel = avstemmingsnøkkel, - overføringstidspunkt = aksepteringstidspunkt, - melding = "foo", - status = Oppdragstatus.AKSEPTERT - )) + oppdrag.lagreOverføringsinformasjon( + UtbetalingHendelse( + meldingsreferanseId = UUID.randomUUID(), + orgnummer = "5678", + fagsystemId = oppdrag.fagsystemId, + utbetalingId = UUID.randomUUID(), + avstemmingsnøkkel = avstemmingsnøkkel, + overføringstidspunkt = aksepteringstidspunkt, + melding = "foo", + status = Oppdragstatus.AKSEPTERT + ) + ) assertEquals(avstemmingsnøkkel, oppdrag.inspektør.avstemmingsnøkkel) assertEquals(overføringstidspunkt, oppdrag.inspektør.overføringstidspunkt) @@ -617,38 +711,42 @@ internal class OppdragTest { fun `lagrer ikke avstemmingsnøkkel, overførsingstidspunkt og status på annen fagsystemId`() { val oppdrag = Oppdrag( "mottaker", Fagområde.Sykepenger, listOf( - Utbetalingslinje( - fom = 17.januar, - tom = 31.januar, - endringskode = Endringskode.NY, - beløp = 1000, - grad = 100 - ) - - ) - ) - - oppdrag.lagreOverføringsinformasjon(UtbetalingHendelse( - meldingsreferanseId = UUID.randomUUID(), - orgnummer = "5678", - fagsystemId = "${UUID.randomUUID()}", - utbetalingId = UUID.randomUUID(), - avstemmingsnøkkel = 6666, - overføringstidspunkt = LocalDateTime.now(), - melding = "foo", - status = Oppdragstatus.AKSEPTERT - )) - - oppdrag.lagreOverføringsinformasjon(UtbetalingHendelse( - meldingsreferanseId = UUID.randomUUID(), - orgnummer = "5678", - fagsystemId = "${UUID.randomUUID()}", - utbetalingId = UUID.randomUUID(), - avstemmingsnøkkel = 6666, - overføringstidspunkt = LocalDateTime.now(), - melding = "foo", - status = Oppdragstatus.AKSEPTERT - )) + Utbetalingslinje( + fom = 17.januar, + tom = 31.januar, + endringskode = Endringskode.NY, + beløp = 1000, + grad = 100 + ) + + ) + ) + + oppdrag.lagreOverføringsinformasjon( + UtbetalingHendelse( + meldingsreferanseId = UUID.randomUUID(), + orgnummer = "5678", + fagsystemId = "${UUID.randomUUID()}", + utbetalingId = UUID.randomUUID(), + avstemmingsnøkkel = 6666, + overføringstidspunkt = LocalDateTime.now(), + melding = "foo", + status = Oppdragstatus.AKSEPTERT + ) + ) + + oppdrag.lagreOverføringsinformasjon( + UtbetalingHendelse( + meldingsreferanseId = UUID.randomUUID(), + orgnummer = "5678", + fagsystemId = "${UUID.randomUUID()}", + utbetalingId = UUID.randomUUID(), + avstemmingsnøkkel = 6666, + overføringstidspunkt = LocalDateTime.now(), + melding = "foo", + status = Oppdragstatus.AKSEPTERT + ) + ) assertNull(oppdrag.inspektør.avstemmingsnøkkel) assertNull(oppdrag.inspektør.overføringstidspunkt) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingslinjeForskjellTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingslinjeForskjellTest.kt index fd88bee64c..13165dc366 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingslinjeForskjellTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingslinjeForskjellTest.kt @@ -43,7 +43,7 @@ internal class UtbetalingslinjeForskjellTest { private operator fun Oppdrag.minus(other: Oppdrag) = this.minus(other, aktivitetslogg) @BeforeEach - fun setup(){ + fun setup() { aktivitetslogg = Aktivitetslogg() } @@ -80,19 +80,20 @@ internal class UtbetalingslinjeForskjellTest { @Test fun hendelsemap() { - (1.januar to 5.januar dagsats 500 satstype Satstype.Engang).asUtbetalingslinje().behovdetaljer().also { map -> - assertEquals("${1.januar}", map.getValue("fom")) - assertEquals("${5.januar}", map.getValue("tom")) - assertEquals("ENG", map.getValue("satstype")) - assertEquals(500, map.getValue("sats")) - assertEquals(500, map.getValue("totalbeløp")) - assertEquals(100.0, map.getValue("grad")) - assertEquals(5, map.getValue("stønadsdager")) - assertEquals("NY", map.getValue("endringskode")) - assertEquals(1, map.getValue("delytelseId")) - assertNull(map.getValue("refDelytelseId")) - assertNull(map.getValue("refFagsystemId")) - } + (1.januar to 5.januar dagsats 500 satstype Satstype.Engang).asUtbetalingslinje() + .behovdetaljer().also { map -> + assertEquals("${1.januar}", map.getValue("fom")) + assertEquals("${5.januar}", map.getValue("tom")) + assertEquals("ENG", map.getValue("satstype")) + assertEquals(500, map.getValue("sats")) + assertEquals(500, map.getValue("totalbeløp")) + assertEquals(100.0, map.getValue("grad")) + assertEquals(5, map.getValue("stønadsdager")) + assertEquals("NY", map.getValue("endringskode")) + assertEquals(1, map.getValue("delytelseId")) + assertNull(map.getValue("refDelytelseId")) + assertNull(map.getValue("refFagsystemId")) + } } @Test @@ -164,7 +165,13 @@ internal class UtbetalingslinjeForskjellTest { val deleted = linjer() val opphørtPersonoppdrag = deleted - personOppdrag val personoppdragKjørtFremIgjen = linjer(4.januar to 9.januar) - assertEquals(7, Oppdrag.stønadsdager(arbeidsgiverOppdrag, personoppdragKjørtFremIgjen - opphørtPersonoppdrag)) + assertEquals( + 7, + Oppdrag.stønadsdager( + arbeidsgiverOppdrag, + personoppdragKjørtFremIgjen - opphørtPersonoppdrag + ) + ) } @Test @@ -174,10 +181,12 @@ internal class UtbetalingslinjeForskjellTest { val actual = recalculated - original val linje1 = 2.januar to 5.januar endrer original.last() opphører 2.januar val linje2 = 5.februar to 9.februar pekerPå linje1 - assertUtbetalinger(linjer( - linje1, - linje2 - ), actual) + assertUtbetalinger( + linjer( + linje1, + linje2 + ), actual + ) assertEquals(5, actual.stønadsdager()) assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(ENDR, actual.endringskode) @@ -282,7 +291,10 @@ internal class UtbetalingslinjeForskjellTest { val original = linjer(8.januar to 13.januar) val recalculated = linjer(1.januar to 9.februar) val actual = recalculated - original - assertUtbetalinger(linjer(1.januar to 9.februar endringskode NY pekerPå original.last()), actual) + assertUtbetalinger( + linjer(1.januar to 9.februar endringskode NY pekerPå original.last()), + actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(30, actual.stønadsdager()) assertEquals(ENDR, actual.endringskode) @@ -336,10 +348,12 @@ internal class UtbetalingslinjeForskjellTest { val recalculated = linjer(2.januar to 5.januar) val actual = recalculated - original assertEquals(ENDR, actual.endringskode) - assertUtbetalinger(linjer( - 1.januar to 5.januar endrer original.last() opphører 1.januar, - 2.januar to 5.januar endringskode NY pekerPå actual[0] - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endrer original.last() opphører 1.januar, + 2.januar to 5.januar endringskode NY pekerPå actual[0] + ), actual + ) } @Test @@ -348,10 +362,12 @@ internal class UtbetalingslinjeForskjellTest { val recalculated = linjer(2.januar to 4.januar) val actual = recalculated - original assertEquals(ENDR, actual.endringskode) - assertUtbetalinger(linjer( - 1.januar to 5.januar endrer original.last() opphører 1.januar, - 2.januar to 4.januar endringskode NY pekerPå actual[0] - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endrer original.last() opphører 1.januar, + 2.januar to 4.januar endringskode NY pekerPå actual[0] + ), actual + ) } @Test @@ -360,9 +376,11 @@ internal class UtbetalingslinjeForskjellTest { val recalculated = linjer(1.januar to 5.januar) val actual = recalculated - original assertEquals(ENDR, actual.endringskode) - assertUtbetalinger(linjer( - 1.januar to 5.januar endringskode NY pekerPå original.last() - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endringskode NY pekerPå original.last() + ), actual + ) } @Test @@ -371,10 +389,12 @@ internal class UtbetalingslinjeForskjellTest { val recalculated = linjer(2.januar to 5.januar) val actual = recalculated - original assertEquals(ENDR, actual.endringskode) - assertUtbetalinger(linjer( - 4.januar to 5.januar endrer original.last() opphører 1.januar, - 2.januar to 5.januar endringskode NY pekerPå original.last() - ), actual) + assertUtbetalinger( + linjer( + 4.januar to 5.januar endrer original.last() opphører 1.januar, + 2.januar to 5.januar endringskode NY pekerPå original.last() + ), actual + ) } @Test @@ -382,9 +402,11 @@ internal class UtbetalingslinjeForskjellTest { val original = linjer(1.januar to 2.januar, 4.januar to 5.januar) val recalculated = linjer(1.januar to 4.januar) val actual = recalculated - original - assertUtbetalinger(linjer( - 1.januar to 4.januar endringskode NY pekerPå original.last() - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 4.januar endringskode NY pekerPå original.last() + ), actual + ) } @Test @@ -392,9 +414,11 @@ internal class UtbetalingslinjeForskjellTest { val original = linjer(1.januar to 2.januar, 4.januar to 5.januar) val recalculated = linjer(1.januar to 1.januar) val actual = recalculated - original - assertUtbetalinger(linjer( - 1.januar to 1.januar endringskode NY pekerPå original.last() - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 1.januar endringskode NY pekerPå original.last() + ), actual + ) } @Test @@ -402,9 +426,11 @@ internal class UtbetalingslinjeForskjellTest { val original = linjer(1.januar to 2.januar, 4.januar to 5.januar) val recalculated = linjer(1.januar to 2.januar) val actual = recalculated - original - assertUtbetalinger(linjer( - 1.januar to 2.januar endringskode NY pekerPå original.last() - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 2.januar endringskode NY pekerPå original.last() + ), actual + ) } @Test @@ -414,9 +440,11 @@ internal class UtbetalingslinjeForskjellTest { val deleted = recalculated - original val revised = linjer(2.januar to 5.januar, other = deleted) val actual = revised - deleted - assertUtbetalinger(linjer( - 2.januar to 5.januar endringskode NY pekerPå original.last() - ), actual) + assertUtbetalinger( + linjer( + 2.januar to 5.januar endringskode NY pekerPå original.last() + ), actual + ) } @Test @@ -426,9 +454,11 @@ internal class UtbetalingslinjeForskjellTest { val deleted = recalculated - original val revised = linjer(other = deleted) val actual = revised - deleted - assertUtbetalinger(linjer( - 5.januar to 10.januar endrer original.first() opphører 1.januar endringskode UEND - ), actual) + assertUtbetalinger( + linjer( + 5.januar to 10.januar endrer original.first() opphører 1.januar endringskode UEND + ), actual + ) } @Test @@ -438,9 +468,11 @@ internal class UtbetalingslinjeForskjellTest { val deleted = recalculated - original val revised = linjer() val actual = revised - deleted - assertUtbetalinger(linjer( - 8.januar to 10.januar endrer actual.last() opphører 8.januar - ), actual) + assertUtbetalinger( + linjer( + 8.januar to 10.januar endrer actual.last() opphører 8.januar + ), actual + ) } @Test @@ -450,28 +482,35 @@ internal class UtbetalingslinjeForskjellTest { val revised = recalculated - original val amended = linjer(1.januar to 2.januar, 14.januar to 20.januar) val actual = amended - revised - assertUtbetalinger(linjer( - 14.januar to 20.januar endrer original.first() opphører 1.januar, - 4.januar to 5.januar endringskode NY pekerPå original.last(), - 14.januar to 20.januar endringskode NY pekerPå revised[1] - ), revised) - assertUtbetalinger(linjer( - 1.januar to 2.januar endringskode NY pekerPå revised.last(), - 14.januar to 20.januar endringskode NY pekerPå actual[0] - ), actual) + assertUtbetalinger( + linjer( + 14.januar to 20.januar endrer original.first() opphører 1.januar, + 4.januar to 5.januar endringskode NY pekerPå original.last(), + 14.januar to 20.januar endringskode NY pekerPå revised[1] + ), revised + ) + assertUtbetalinger( + linjer( + 1.januar to 2.januar endringskode NY pekerPå revised.last(), + 14.januar to 20.januar endringskode NY pekerPå actual[0] + ), actual + ) assertTrue(aktivitetslogg.harVarslerEllerVerre()) aktivitetslogg.assertVarsel(RV_OS_2) } + @Test fun `endre fom på siste linje`() { val original = linjer(24.januar to 29.januar, 30.januar to 3.februar) - val recalculated = linjer(24.januar to 29.januar, 1.februar to 3.februar) + val recalculated = linjer(24.januar to 29.januar, 1.februar to 3.februar) val actual = recalculated - original - assertUtbetalinger(linjer( - 24.januar to 29.januar endringskode UEND, - 30.januar to 3.februar endrer original.last() opphører 30.januar, - 1.februar to 3.februar endringskode NY pekerPå actual[1] - ), actual) + assertUtbetalinger( + linjer( + 24.januar to 29.januar endringskode UEND, + 30.januar to 3.februar endrer original.last() opphører 30.januar, + 1.februar to 3.februar endringskode NY pekerPå actual[1] + ), actual + ) } @Test @@ -480,25 +519,31 @@ internal class UtbetalingslinjeForskjellTest { val originalUtvidet = linjer(1.januar to 18.januar, 20.januar to 26.januar) val oppdrag2 = originalUtvidet - oppdrag1 - val oppdrag2EndretSåUtvidet = linjer(1.januar to 18.januar, 24.januar to 29.januar, 30.januar to 3.februar) + val oppdrag2EndretSåUtvidet = + linjer(1.januar to 18.januar, 24.januar to 29.januar, 30.januar to 3.februar) val oppdrag3 = oppdrag2EndretSåUtvidet - oppdrag2 - val oppdrag3EndretSisteFom = linjer(1.januar to 18.januar, 24.januar to 29.januar, 1.februar to 3.februar) + val oppdrag3EndretSisteFom = + linjer(1.januar to 18.januar, 24.januar to 29.januar, 1.februar to 3.februar) val oppdrag4 = oppdrag3EndretSisteFom - oppdrag3 - assertUtbetalinger(linjer( - 1.januar to 18.januar endringskode UEND, - 20.januar to 26.januar endrer oppdrag2.last() opphører 20.januar, - 24.januar to 29.januar endringskode NY pekerPå oppdrag3[1], - 30.januar to 3.februar endringskode NY pekerPå oppdrag3[2] - ), oppdrag3) + assertUtbetalinger( + linjer( + 1.januar to 18.januar endringskode UEND, + 20.januar to 26.januar endrer oppdrag2.last() opphører 20.januar, + 24.januar to 29.januar endringskode NY pekerPå oppdrag3[1], + 30.januar to 3.februar endringskode NY pekerPå oppdrag3[2] + ), oppdrag3 + ) - assertUtbetalinger(linjer( - 1.januar to 18.januar endringskode UEND, - 24.januar to 29.januar endringskode UEND pekerPå oppdrag2.last(), - 30.januar to 3.februar endrer oppdrag3.last() opphører 30.januar, - 1.februar to 3.februar endringskode NY pekerPå oppdrag4[2] - ), oppdrag4) + assertUtbetalinger( + linjer( + 1.januar to 18.januar endringskode UEND, + 24.januar to 29.januar endringskode UEND pekerPå oppdrag2.last(), + 30.januar to 3.februar endrer oppdrag3.last() opphører 30.januar, + 1.februar to 3.februar endringskode NY pekerPå oppdrag4[2] + ), oppdrag4 + ) } @Test @@ -507,10 +552,12 @@ internal class UtbetalingslinjeForskjellTest { val recalculated = linjer(1.januar to 2.januar, 4.januar to 5.januar) val actual = recalculated - original - assertUtbetalinger(linjer( - 1.januar to 2.januar endrer original.last(), - 4.januar to 5.januar endringskode NY pekerPå actual[0] - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 2.januar endrer original.last(), + 4.januar to 5.januar endringskode NY pekerPå actual[0] + ), actual + ) } @Test @@ -521,15 +568,19 @@ internal class UtbetalingslinjeForskjellTest { val gjeninnført = linjer(4.januar to 12.januar grad 50) val revised = gjeninnført - actual - assertUtbetalinger(linjer( - 4.januar to 12.januar grad 50 endrer original.last() opphører 1.januar, - 2.januar to 3.januar endringskode NY pekerPå original.last(), - 4.januar to 12.januar grad 50 endringskode NY pekerPå actual[1] - ), actual) - assertUtbetalinger(linjer( - 4.januar to 12.januar grad 50 endrer actual.last() opphører 2.januar, - 4.januar to 12.januar grad 50 endringskode NY pekerPå actual.last() - ), revised) + assertUtbetalinger( + linjer( + 4.januar to 12.januar grad 50 endrer original.last() opphører 1.januar, + 2.januar to 3.januar endringskode NY pekerPå original.last(), + 4.januar to 12.januar grad 50 endringskode NY pekerPå actual[1] + ), actual + ) + assertUtbetalinger( + linjer( + 4.januar to 12.januar grad 50 endrer actual.last() opphører 2.januar, + 4.januar to 12.januar grad 50 endringskode NY pekerPå actual.last() + ), revised + ) assertEquals(original.fagsystemId, revised.fagsystemId) assertEquals(ENDR, revised.endringskode) } @@ -542,15 +593,19 @@ internal class UtbetalingslinjeForskjellTest { val gjeninnført = linjer(2.januar to 3.januar, 4.januar to 20.januar grad 50) val revised = gjeninnført - actual - assertUtbetalinger(linjer( - 4.januar to 12.januar grad 50 endrer original.last() opphører 1.januar, - 2.januar to 3.januar endringskode NY pekerPå original.last(), - 4.januar to 12.januar grad 50 endringskode NY pekerPå actual[1] - ), actual) - assertUtbetalinger(linjer( - 2.januar to 3.januar endringskode UEND pekerPå original.last(), - 4.januar to 20.januar grad 50 endrer actual.last() - ), revised) + assertUtbetalinger( + linjer( + 4.januar to 12.januar grad 50 endrer original.last() opphører 1.januar, + 2.januar to 3.januar endringskode NY pekerPå original.last(), + 4.januar to 12.januar grad 50 endringskode NY pekerPå actual[1] + ), actual + ) + assertUtbetalinger( + linjer( + 2.januar to 3.januar endringskode UEND pekerPå original.last(), + 4.januar to 20.januar grad 50 endrer actual.last() + ), revised + ) assertEquals(original.fagsystemId, revised.fagsystemId) assertEquals(ENDR, revised.endringskode) } @@ -562,9 +617,11 @@ internal class UtbetalingslinjeForskjellTest { val actual = recalculated - original val revised = original - actual - assertUtbetalinger(linjer( - 1.januar to 5.januar endringskode NY pekerPå actual.last() - ), revised) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endringskode NY pekerPå actual.last() + ), revised + ) } @Test @@ -579,10 +636,12 @@ internal class UtbetalingslinjeForskjellTest { 8.januar to 13.januar ) val actual = recalculated - original - assertUtbetalinger(linjer( - 1.januar to 5.januar endringskode UEND, - 8.januar to 13.januar endringskode NY pekerPå original.last() - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endringskode UEND, + 8.januar to 13.januar endringskode NY pekerPå original.last() + ), actual + ) } @Test @@ -603,11 +662,13 @@ internal class UtbetalingslinjeForskjellTest { 15.januar to 25.januar ) val actual = fremtrukket - revised - assertUtbetalinger(linjer( - 1.januar to 5.januar endringskode UEND, - 8.januar to 13.januar endringskode UEND pekerPå original.last(), - 15.januar to 25.januar endringskode NY pekerPå actual[1] - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endringskode UEND, + 8.januar to 13.januar endringskode UEND pekerPå original.last(), + 15.januar to 25.januar endringskode NY pekerPå actual[1] + ), actual + ) } @Test @@ -627,10 +688,12 @@ internal class UtbetalingslinjeForskjellTest { 8.januar to 25.januar ) val actual = extended - revised - assertUtbetalinger(linjer( - 1.januar to 5.januar endringskode UEND, - 8.januar to 25.januar endrer revised.last() - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endringskode UEND, + 8.januar to 25.januar endrer revised.last() + ), actual + ) } @Test @@ -638,10 +701,14 @@ internal class UtbetalingslinjeForskjellTest { val original = linjer(1.januar to 5.januar) val intermediate = linjer(1.januar to 5.januar, 8.januar to 13.januar) val extended = intermediate - original - val recalculated = linjer(1.januar to 5.januar, 8.januar to 20.januar, 28.januar to 5.februar) + val recalculated = + linjer(1.januar to 5.januar, 8.januar to 20.januar, 28.januar to 5.februar) val actual = recalculated - extended val revised = original - actual - assertUtbetalinger(linjer(1.januar to 5.januar endringskode NY pekerPå actual.last()), revised) + assertUtbetalinger( + linjer(1.januar to 5.januar endringskode NY pekerPå actual.last()), + revised + ) } @Test @@ -661,10 +728,12 @@ internal class UtbetalingslinjeForskjellTest { val tilbakeført = linjer(1.januar to 5.januar, 8.januar to 13.januar) val revised = tilbakeført - actual - assertUtbetalinger(linjer( - 1.januar to 5.januar endringskode UEND, - 8.januar to 13.januar endringskode NY pekerPå actual.last() - ), revised) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endringskode UEND, + 8.januar to 13.januar endringskode NY pekerPå actual.last() + ), revised + ) } @Test @@ -677,10 +746,12 @@ internal class UtbetalingslinjeForskjellTest { ) val tilbakeført = linjer(1.januar to 6.januar, 8.januar to 13.januar) val revised = tilbakeført - original - assertUtbetalinger(linjer( - 1.januar to 6.januar endringskode NY pekerPå original.last(), - 8.januar to 13.januar endringskode NY pekerPå revised[0] - ), revised) + assertUtbetalinger( + linjer( + 1.januar to 6.januar endringskode NY pekerPå original.last(), + 8.januar to 13.januar endringskode NY pekerPå revised[0] + ), revised + ) } @Test @@ -689,7 +760,8 @@ internal class UtbetalingslinjeForskjellTest { val intermediate = linjer(1.januar to 5.januar, 8.januar to 13.januar) val extended = intermediate - original - val recalculated = linjer(1.januar to 5.januar, 8.januar to 13.januar, 23.januar to 5.februar) + val recalculated = + linjer(1.januar to 5.januar, 8.januar to 13.januar, 23.januar to 5.februar) val actual = recalculated - extended val tilbakeført = linjer( @@ -700,12 +772,14 @@ internal class UtbetalingslinjeForskjellTest { ) val revised = tilbakeført - actual - assertUtbetalinger(linjer( - 1.januar to 5.januar endringskode UEND, - 8.januar to 13.januar endringskode UEND pekerPå revised[0], - 23.januar to 26.januar endrer actual.last(), - 1.februar to 5.februar endringskode NY pekerPå revised[2] - ), revised) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endringskode UEND, + 8.januar to 13.januar endringskode UEND pekerPå revised[0], + 23.januar to 26.januar endrer actual.last(), + 1.februar to 5.februar endringskode NY pekerPå revised[2] + ), revised + ) assertEquals(1.januar, revised[0].fom) assertEquals(5.januar, revised[0].tom) @@ -837,12 +911,14 @@ internal class UtbetalingslinjeForskjellTest { assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(ENDR, actual.endringskode) - assertUtbetalinger(linjer( - 1.januar to 5.januar endringskode UEND, - 6.januar to 17.januar grad 50 endringskode NY pekerPå original.last(), - 18.januar to 19.januar grad 80 endringskode NY pekerPå actual[1], - 1.februar to 9.februar endringskode NY pekerPå actual[2] - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endringskode UEND, + 6.januar to 17.januar grad 50 endringskode NY pekerPå original.last(), + 18.januar to 19.januar grad 80 endringskode NY pekerPå actual[1], + 1.februar to 9.februar endringskode NY pekerPå actual[2] + ), actual + ) assertFalse(aktivitetslogg.harVarslerEllerVerre()) } @@ -863,12 +939,14 @@ internal class UtbetalingslinjeForskjellTest { 1.februar to 9.februar ) val actual = recalculated - original - assertUtbetalinger(linjer( - 1.januar to 5.januar endringskode UEND, - 6.januar to 17.januar grad 50 endringskode NY pekerPå original.last(), - 18.januar to 19.januar grad 80 endringskode NY pekerPå actual[1], - 1.februar to 9.februar endringskode NY pekerPå actual[2] - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endringskode UEND, + 6.januar to 17.januar grad 50 endringskode NY pekerPå original.last(), + 18.januar to 19.januar grad 80 endringskode NY pekerPå actual[1], + 1.februar to 9.februar endringskode NY pekerPå actual[2] + ), actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(ENDR, actual.endringskode) assertFalse(aktivitetslogg.harVarslerEllerVerre()) @@ -879,7 +957,10 @@ internal class UtbetalingslinjeForskjellTest { val original = linjer(5.januar to 10.januar) val recalculated = linjer(1.januar to 10.januar) val actual = recalculated - original - assertUtbetalinger(linjer(1.januar to 10.januar endringskode NY pekerPå original.last()), actual) + assertUtbetalinger( + linjer(1.januar to 10.januar endringskode NY pekerPå original.last()), + actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(ENDR, actual.endringskode) assertTrue(aktivitetslogg.harVarslerEllerVerre()) @@ -890,7 +971,10 @@ internal class UtbetalingslinjeForskjellTest { val original = linjer(5.januar to 10.januar) val recalculated = linjer(1.januar to 3.januar) val actual = recalculated - original - assertUtbetalinger(linjer(1.januar to 3.januar endringskode NY pekerPå original.last()), actual) + assertUtbetalinger( + linjer(1.januar to 3.januar endringskode NY pekerPå original.last()), + actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(ENDR, actual.endringskode) assertTrue(aktivitetslogg.harVarslerEllerVerre()) @@ -901,7 +985,10 @@ internal class UtbetalingslinjeForskjellTest { val original = linjer(5.januar to 10.januar) val recalculated = linjer(1.januar to 3.januar, other = original) val actual = recalculated - original - assertUtbetalinger(linjer(1.januar to 3.januar endringskode NY pekerPå original.last()), actual) + assertUtbetalinger( + linjer(1.januar to 3.januar endringskode NY pekerPå original.last()), + actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(ENDR, actual.endringskode) assertTrue(aktivitetslogg.harVarslerEllerVerre()) @@ -920,16 +1007,19 @@ internal class UtbetalingslinjeForskjellTest { 20.januar to 26.januar ) val actual = new - original - assertUtbetalinger(linjer( - 1.januar to 5.januar endringskode UEND, - 6.januar to 19.januar grad 50 endringskode NY pekerPå original.last(), // extend tom - 20.januar to 26.januar endringskode NY pekerPå actual[1] - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endringskode UEND, + 6.januar to 19.januar grad 50 endringskode NY pekerPå original.last(), // extend tom + 20.januar to 26.januar endringskode NY pekerPå actual[1] + ), actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertFalse(aktivitetslogg.harVarslerEllerVerre()) } - @Test fun `slett nøyaktig en periode`() { + @Test + fun `slett nøyaktig en periode`() { val original = linjer(1.januar to 5.januar, 6.januar to 12.januar grad 50) val recalculated = linjer(6.januar to 12.januar grad 50) val actual = recalculated - original @@ -944,44 +1034,54 @@ internal class UtbetalingslinjeForskjellTest { assertTrue(aktivitetslogg.harVarslerEllerVerre()) } - @Test fun `original andre periode samsvarer delvis med ny`() { + @Test + fun `original andre periode samsvarer delvis med ny`() { val original = linjer(1.januar to 5.januar, 6.januar to 12.januar grad 50) val recalculated = linjer(6.januar to 19.januar grad 50) val actual = recalculated - original - assertUtbetalinger(linjer( - 6.januar to 12.januar grad 50 endrer original.last() opphører 1.januar, - 6.januar to 19.januar grad 50 endringskode NY pekerPå actual[0] - ), actual) + assertUtbetalinger( + linjer( + 6.januar to 12.januar grad 50 endrer original.last() opphører 1.januar, + 6.januar to 19.januar grad 50 endringskode NY pekerPå actual[0] + ), actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(ENDR, actual.endringskode) assertTrue(aktivitetslogg.harVarslerEllerVerre()) } - @Test fun `perioden min starter midt i en original periode`() { + @Test + fun `perioden min starter midt i en original periode`() { val original = linjer(1.januar to 3.januar, 4.januar to 12.januar grad 50) val recalculated = linjer(6.januar to 19.januar grad 50) val actual = recalculated - original - assertUtbetalinger(linjer( - 4.januar to 12.januar grad 50 endrer original.last() opphører 1.januar, - 6.januar to 19.januar grad 50 endringskode NY pekerPå original.last() - ), actual) + assertUtbetalinger( + linjer( + 4.januar to 12.januar grad 50 endrer original.last() opphører 1.januar, + 6.januar to 19.januar grad 50 endringskode NY pekerPå original.last() + ), actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(ENDR, actual.endringskode) assertTrue(aktivitetslogg.harVarslerEllerVerre()) } - @Test fun `ny er tom`() { + @Test + fun `ny er tom`() { val original = linjer(1.januar to 3.januar, 4.januar to 12.januar grad 50) val recalculated = tomtOppdrag() val actual = recalculated - original - assertUtbetalinger(linjer( - 4.januar to 12.januar grad 50 endrer original.last() opphører 1.januar - ), actual) + assertUtbetalinger( + linjer( + 4.januar to 12.januar grad 50 endrer original.last() opphører 1.januar + ), actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertFalse(aktivitetslogg.harVarslerEllerVerre()) } - @Test fun `originalen har hale å slette`() { + @Test + fun `originalen har hale å slette`() { val original = linjer(1.januar to 12.januar) val recalculated = linjer(1.januar to 5.januar) val actual = recalculated - original @@ -990,19 +1090,23 @@ internal class UtbetalingslinjeForskjellTest { assertFalse(aktivitetslogg.harVarslerEllerVerre()) } - @Test fun `Sletting hvor alt blir sendt på nytt`() { + @Test + fun `Sletting hvor alt blir sendt på nytt`() { val original = linjer(1.januar to 12.januar) val recalculated = linjer(1.januar to 5.januar, 7.januar to 10.januar) val actual = recalculated - original - assertUtbetalinger(linjer( - 1.januar to 5.januar endrer original.last(), - 7.januar to 10.januar endringskode NY pekerPå actual[0] - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endrer original.last(), + 7.januar to 10.januar endringskode NY pekerPå actual[0] + ), actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertFalse(aktivitetslogg.harVarslerEllerVerre()) } - @Test fun `Sletting med UEND`() { + @Test + fun `Sletting med UEND`() { val original = linjer( 1.januar to 5.januar, 8.januar to 12.januar @@ -1013,24 +1117,29 @@ internal class UtbetalingslinjeForskjellTest { ) val actual = recalculated - original - assertUtbetalinger(linjer( - 1.januar to 5.januar endringskode UEND, - 8.januar to 10.januar endrer original.last() - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 5.januar endringskode UEND, + 8.januar to 10.januar endrer original.last() + ), actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(ENDR, actual.endringskode) assertFalse(aktivitetslogg.harVarslerEllerVerre()) } - @Test fun `slette fra hode og hale av originalen`() { + @Test + fun `slette fra hode og hale av originalen`() { val original = linjer(1.januar to 12.januar) val recalculated = linjer(3.januar to 9.januar) val actual = recalculated - original - assertUtbetalinger(linjer( - 1.januar to 12.januar endrer original.last() opphører 1.januar, - 3.januar to 9.januar endringskode NY pekerPå actual[0] - ), actual) + assertUtbetalinger( + linjer( + 1.januar to 12.januar endrer original.last() opphører 1.januar, + 3.januar to 9.januar endringskode NY pekerPå actual[0] + ), actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(ENDR, actual.endringskode) assertTrue(aktivitetslogg.harVarslerEllerVerre()) @@ -1049,11 +1158,13 @@ internal class UtbetalingslinjeForskjellTest { 20.januar to 26.januar ) val actual = new - original - assertUtbetalinger(linjer( - 20.januar to 31.januar endrer original.last() opphører 1.januar, - 6.januar to 19.januar grad 50 endringskode NY pekerPå actual[0], - 20.januar to 26.januar endringskode NY pekerPå actual[1] - ), actual) + assertUtbetalinger( + linjer( + 20.januar to 31.januar endrer original.last() opphører 1.januar, + 6.januar to 19.januar grad 50 endringskode NY pekerPå actual[0], + 20.januar to 26.januar endringskode NY pekerPå actual[1] + ), actual + ) assertEquals(original.fagsystemId, actual.fagsystemId) assertEquals(ENDR, actual.endringskode) @@ -1112,7 +1223,10 @@ internal class UtbetalingslinjeForskjellTest { assertNotEquals(original[0].hashCode(), actual[0].hashCode()) } - private fun tomtOppdrag(fagsystemId: String = genererUtbetalingsreferanse(UUID.randomUUID()), sisteArbeidsgiverdag: LocalDate? = null) = + private fun tomtOppdrag( + fagsystemId: String = genererUtbetalingsreferanse(UUID.randomUUID()), + sisteArbeidsgiverdag: LocalDate? = null + ) = Oppdrag(ORGNUMMER, SykepengerRefusjon, fagsystemId = fagsystemId) private val Oppdrag.endringskode get() = this.get("endringskode") @@ -1135,28 +1249,40 @@ internal class UtbetalingslinjeForskjellTest { assertEquals(a.beløp, b.beløp, "dagsats stemmer ikke overens") assertEquals(a.grad, b.grad, "grad stemmer ikke overens") assertEquals(a.datoStatusFom, b.datoStatusFom) - assertEquals(a.endringskode, b.endringskode) { "endringskode ${b.endringskode} matcher ikke forventet ${a.endringskode}" } - assertEquals(a.id, b.id) { "delytelseid ${b.id} matcher ikke forventet ${a.id} for ${a.fom} - ${a.tom}"} - assertEquals(a.refId, b.refId) { "refdelytelseid ${b.refId} matcher ikke forventet ${a.refId}"} + assertEquals( + a.endringskode, + b.endringskode + ) { "endringskode ${b.endringskode} matcher ikke forventet ${a.endringskode}" } + assertEquals( + a.id, + b.id + ) { "delytelseid ${b.id} matcher ikke forventet ${a.id} for ${a.fom} - ${a.tom}" } + assertEquals( + a.refId, + b.refId + ) { "refdelytelseid ${b.refId} matcher ikke forventet ${a.refId}" } } } private fun linjer(vararg linjer: TestUtbetalingslinje, other: Oppdrag? = null): Oppdrag { - val fagsystemId = other?.inspektør?.fagsystemId() ?: genererUtbetalingsreferanse(UUID.randomUUID()) - return Oppdrag.gjenopprett(OppdragInnDto( - mottaker = ORGNUMMER, - fagområde = FagområdeDto.SPREF, - linjer = linjer.toList().tilUtbetalingslinjerDto(fagsystemId), - fagsystemId = fagsystemId, - endringskode = EndringskodeDto.NY, - nettoBeløp = 0, - overføringstidspunkt = null, - avstemmingsnøkkel = null, - status = null, - tidsstempel = LocalDateTime.now(), - erSimulert = false, - simuleringsResultat = null - )) + val fagsystemId = + other?.inspektør?.fagsystemId() ?: genererUtbetalingsreferanse(UUID.randomUUID()) + return Oppdrag.gjenopprett( + OppdragInnDto( + mottaker = ORGNUMMER, + fagområde = FagområdeDto.SPREF, + linjer = linjer.toList().tilUtbetalingslinjerDto(fagsystemId), + fagsystemId = fagsystemId, + endringskode = EndringskodeDto.NY, + nettoBeløp = 0, + overføringstidspunkt = null, + avstemmingsnøkkel = null, + status = null, + tidsstempel = LocalDateTime.now(), + erSimulert = false, + simuleringsResultat = null + ) + ) } private fun linjer(vararg linjer: Utbetalingslinje): Oppdrag { @@ -1165,7 +1291,11 @@ internal class UtbetalingslinjeForskjellTest { } private fun List.tilUtbetalingslinjerDto(fagsystemId: String): List { - return (take(1).map { it.asUtbetalingslinje() } + drop(1).map { it.asUtbetalingslinje(fagsystemId) }) + return (take(1).map { it.asUtbetalingslinje() } + drop(1).map { + it.asUtbetalingslinje( + fagsystemId + ) + }) .map { it.dto() } .map { UtbetalingslinjeInnDto( diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AlderTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AlderTest.kt index 4ec3b2c841..d3b195e482 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AlderTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AlderTest.kt @@ -61,11 +61,17 @@ internal class AlderTest { @Test fun `riktig begrunnelse for minimum inntekt ved alder over 67`() { - assertEquals(Begrunnelse.MinimumInntektOver67, FYLLER_67_ÅR_1_JANUAR_2018.begrunnelseForMinimumInntekt(2.januar)) + assertEquals( + Begrunnelse.MinimumInntektOver67, + FYLLER_67_ÅR_1_JANUAR_2018.begrunnelseForMinimumInntekt(2.januar) + ) } @Test fun `riktig begrunnelse for minimum inntekt ved alder 67 eller under`() { - assertEquals(Begrunnelse.MinimumInntekt, FYLLER_67_ÅR_1_JANUAR_2018.begrunnelseForMinimumInntekt(1.januar)) + assertEquals( + Begrunnelse.MinimumInntekt, + FYLLER_67_ÅR_1_JANUAR_2018.begrunnelseForMinimumInntekt(1.januar) + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverperiodeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverperiodeTest.kt index ab39154514..5f2be883a7 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverperiodeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverperiodeTest.kt @@ -47,7 +47,8 @@ internal class ArbeidsgiverperiodeTest { @Test fun `arbeidsgiverperiode anses som like om de slutter på samme dag`() { assertTrue(agp(1.januar til 16.januar).sammenlign(listOf(16.januar til 16.januar))) - assertFalse(agp(1.januar til 16.januar).apply { kjentDag(17.januar) }.sammenlign(listOf(16.januar til 17.januar))) + assertFalse(agp(1.januar til 16.januar).apply { kjentDag(17.januar) } + .sammenlign(listOf(16.januar til 17.januar))) assertFalse(agp(1.januar til 16.januar).sammenlign(listOf(15.januar til 15.januar))) } @@ -55,7 +56,8 @@ internal class ArbeidsgiverperiodeTest { fun `arbeidsgiverperiode anses som like om de slutter på fredag eller helg`() { assertTrue(agp(12.januar til 27.januar).sammenlign(listOf(11.januar til 26.januar))) assertTrue(agp(12.januar til 27.januar).sammenlign(listOf(13.januar til 28.januar))) - assertFalse(agp(12.januar til 27.januar).apply { kjentDag(29.januar) }.sammenlign(listOf(14.januar til 29.januar))) + assertFalse(agp(12.januar til 27.januar).apply { kjentDag(29.januar) } + .sammenlign(listOf(14.januar til 29.januar))) assertTrue(agp(12.januar til 27.januar).sammenlign(listOf(14.januar til 29.januar))) assertTrue(agp(11.januar til 26.januar).sammenlign(listOf(12.januar til 27.januar))) @@ -72,15 +74,30 @@ internal class ArbeidsgiverperiodeTest { @Test fun `har betalt`() { assertFalse(agp(1.januar til 16.januar).erFørsteUtbetalingsdagFørEllerLik(1.januar til 17.januar)) - assertTrue(agp(1.januar til 16.januar).utbetalingsdag(17.januar).erFørsteUtbetalingsdagFørEllerLik(1.januar til 17.januar)) - assertTrue(agp(1.januar til 16.januar).utbetalingsdag(17.januar).erFørsteUtbetalingsdagFørEllerLik(1.januar til 18.januar)) - assertFalse(agp(1.januar til 16.januar).utbetalingsdag(18.januar).erFørsteUtbetalingsdagFørEllerLik(1.januar til 17.januar)) + assertTrue( + agp(1.januar til 16.januar).utbetalingsdag(17.januar) + .erFørsteUtbetalingsdagFørEllerLik(1.januar til 17.januar) + ) + assertTrue( + agp(1.januar til 16.januar).utbetalingsdag(17.januar) + .erFørsteUtbetalingsdagFørEllerLik(1.januar til 18.januar) + ) + assertFalse( + agp(1.januar til 16.januar).utbetalingsdag(18.januar) + .erFørsteUtbetalingsdagFørEllerLik(1.januar til 17.januar) + ) } @Test fun `helg regnes ikke som betalt`() { - assertFalse(agp(1.januar til 16.januar).utbetalingsdag(20.januar).erFørsteUtbetalingsdagFørEllerLik(1.januar til 20.januar)) - assertFalse(Arbeidsgiverperiode.fiktiv(20.januar).erFørsteUtbetalingsdagFørEllerLik(1.januar til 20.januar)) + assertFalse( + agp(1.januar til 16.januar).utbetalingsdag(20.januar) + .erFørsteUtbetalingsdagFørEllerLik(1.januar til 20.januar) + ) + assertFalse( + Arbeidsgiverperiode.fiktiv(20.januar) + .erFørsteUtbetalingsdagFørEllerLik(1.januar til 20.januar) + ) } @Test @@ -97,37 +114,41 @@ internal class ArbeidsgiverperiodeTest { @Test fun `forventer opplysninger fra arbeidsgiver etter periode med opphold`() { - agp(1.januar til 16.januar).utbetalingsdag(17.januar).oppholdsdag(18.januar).utbetalingsdag(fredag den 19.januar).utbetalingsdag(mandag den 22.januar).also { agp -> - assertFalse(agp.forventerOpplysninger(18.januar.somPeriode())) - assertTrue(agp.forventerOpplysninger(17.januar.somPeriode())) - assertTrue(agp.forventerOpplysninger(18.januar til 19.januar)) - assertTrue(agp.forventerOpplysninger(19.januar til 20.januar)) - assertFalse(agp.forventerOpplysninger(20.januar til 21.januar)) - assertFalse(agp.forventerOpplysninger(mandag den 22.januar til 23.januar)) - } + agp(1.januar til 16.januar).utbetalingsdag(17.januar).oppholdsdag(18.januar) + .utbetalingsdag(fredag den 19.januar).utbetalingsdag(mandag den 22.januar).also { agp -> + assertFalse(agp.forventerOpplysninger(18.januar.somPeriode())) + assertTrue(agp.forventerOpplysninger(17.januar.somPeriode())) + assertTrue(agp.forventerOpplysninger(18.januar til 19.januar)) + assertTrue(agp.forventerOpplysninger(19.januar til 20.januar)) + assertFalse(agp.forventerOpplysninger(20.januar til 21.januar)) + assertFalse(agp.forventerOpplysninger(mandag den 22.januar til 23.januar)) + } } @Test fun `forventer opplysninger fra arbeidsgiver etter periode med opphold i helg`() { - agp(1.januar til 16.januar).utbetalingsdag(17.januar).utbetalingsdag(18.januar).utbetalingsdag(fredag den 19.januar).oppholdsdag(lørdag den 20.januar).utbetalingsdag(mandag den 22.januar).also { agp -> - assertTrue(agp.forventerOpplysninger(17.januar til 20.januar)) - assertFalse(agp.forventerInntekt(20.januar til 21.januar)) - assertFalse(agp.forventerOpplysninger(20.januar til 21.januar)) - assertTrue(agp.forventerOpplysninger(22.januar til 23.januar)) - } + agp(1.januar til 16.januar).utbetalingsdag(17.januar).utbetalingsdag(18.januar) + .utbetalingsdag(fredag den 19.januar).oppholdsdag(lørdag den 20.januar) + .utbetalingsdag(mandag den 22.januar).also { agp -> + assertTrue(agp.forventerOpplysninger(17.januar til 20.januar)) + assertFalse(agp.forventerInntekt(20.januar til 21.januar)) + assertFalse(agp.forventerOpplysninger(20.januar til 21.januar)) + assertTrue(agp.forventerOpplysninger(22.januar til 23.januar)) + } } @Test fun `forventer ikke opplysninger fra arbeidsgiver etter periode med kun helg`() { - agp(1.januar til 16.januar).utbetalingsdag(17.januar).utbetalingsdag(18.januar).utbetalingsdag(fredag den 19.januar).utbetalingsdag(mandag den 22.januar).also { agp -> - assertTrue(agp.forventerOpplysninger(17.januar til 20.januar)) - assertTrue(agp.forventerInntekt(lørdag den 20.januar til (søndag den 21.januar))) - assertFalse(agp.forventerOpplysninger(lørdag den 20.januar til (søndag den 21.januar))) - assertFalse(agp.forventerOpplysninger(20.januar til 21.januar)) - assertFalse(agp.forventerOpplysninger(22.januar til 23.januar)) - assertFalse(agp.forventerOpplysninger(lørdag den 20.januar til (mandag den 22.januar))) - assertFalse(agp.forventerOpplysninger(fredag den 19.januar til (mandag den 22.januar))) - } + agp(1.januar til 16.januar).utbetalingsdag(17.januar).utbetalingsdag(18.januar) + .utbetalingsdag(fredag den 19.januar).utbetalingsdag(mandag den 22.januar).also { agp -> + assertTrue(agp.forventerOpplysninger(17.januar til 20.januar)) + assertTrue(agp.forventerInntekt(lørdag den 20.januar til (søndag den 21.januar))) + assertFalse(agp.forventerOpplysninger(lørdag den 20.januar til (søndag den 21.januar))) + assertFalse(agp.forventerOpplysninger(20.januar til 21.januar)) + assertFalse(agp.forventerOpplysninger(22.januar til 23.januar)) + assertFalse(agp.forventerOpplysninger(lørdag den 20.januar til (mandag den 22.januar))) + assertFalse(agp.forventerOpplysninger(fredag den 19.januar til (mandag den 22.januar))) + } } @Test diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverperiodesubsumsjonTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverperiodesubsumsjonTest.kt index 86ac26498e..ef6f8c9367 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverperiodesubsumsjonTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/ArbeidsgiverperiodesubsumsjonTest.kt @@ -196,9 +196,13 @@ internal class ArbeidsgiverperiodesubsumsjonTest { teller = Arbeidsgiverperiodeteller.NormalArbeidstaker } - private fun undersøke(tidslinje: Sykdomstidslinje, infotrygdBetalteDager: List = emptyList()) { + private fun undersøke( + tidslinje: Sykdomstidslinje, + infotrygdBetalteDager: List = emptyList() + ) { val arbeidsgiverperiodeberegner = Arbeidsgiverperiodeberegner(teller) - val arbeidsgiverperioder = arbeidsgiverperiodeberegner.resultat(tidslinje, infotrygdBetalteDager) + val arbeidsgiverperioder = + arbeidsgiverperiodeberegner.resultat(tidslinje, infotrygdBetalteDager) arbeidsgiverperioder.forEach { it.subsummering(jurist, tidslinje) } @@ -209,10 +213,16 @@ internal class ArbeidsgiverperiodesubsumsjonTest { `6G` = Grunnbeløp.`6G`.beløp(1.januar), fastsattÅrsinntekt = 31000.månedlig, gjelder = 1.januar til LocalDate.MAX, - refusjonsopplysninger = Refusjonsopplysning(UUID.randomUUID(), 1.januar, null, 31000.månedlig).refusjonsopplysninger + refusjonsopplysninger = Refusjonsopplysning( + UUID.randomUUID(), + 1.januar, + null, + 31000.månedlig + ).refusjonsopplysninger ), regler = ArbeidsgiverRegler.Companion.NormalArbeidstaker, - arbeidsgiverperiode = arbeidsgiverperioder.flatMap { it.arbeidsgiverperiode }.grupperSammenhengendePerioder(), + arbeidsgiverperiode = arbeidsgiverperioder.flatMap { it.arbeidsgiverperiode } + .grupperSammenhengendePerioder(), refusjonstidslinje = Beløpstidslinje() ) @@ -221,7 +231,10 @@ internal class ArbeidsgiverperiodesubsumsjonTest { observatør = Dagobservatør(utbetalingstidslinje) val subsummering = Utbetalingstidslinjesubsumsjon(jurist, tidslinje, utbetalingstidslinje) - subsummering.subsummer(tidslinje.periode()!!, ArbeidsgiverRegler.Companion.NormalArbeidstaker) + subsummering.subsummer( + tidslinje.periode()!!, + ArbeidsgiverRegler.Companion.NormalArbeidstaker + ) } private class Subsumsjonobservatør : Subsumsjonslogg { @@ -230,25 +243,29 @@ internal class ArbeidsgiverperiodesubsumsjonTest { var `§ 8-17 første ledd bokstav a - oppfylt` = 0 var `§ 8-17 ledd 2` = 0 var `§ 8-11 første ledd` = 0 - var `§ 8-19 første ledd - beregning`= 0 + var `§ 8-19 første ledd - beregning` = 0 var `§ 8-19 andre ledd - beregning` = 0 var `§ 8-19 tredje ledd - beregning` = 0 var `§ 8-19 fjerde ledd - beregning` = 0 private val sykepengerFraTrygden = folketrygdloven.paragraf(Paragraf.PARAGRAF_8_17) - private val beregningAvArbeidsgiverperiode = folketrygdloven.paragraf(Paragraf.PARAGRAF_8_19) + private val beregningAvArbeidsgiverperiode = + folketrygdloven.paragraf(Paragraf.PARAGRAF_8_19) + + private fun ClosedRange.antallDager() = + start.datesUntil(endInclusive.nesteDag).count().toInt() - private fun ClosedRange.antallDager() = start.datesUntil(endInclusive.nesteDag).count().toInt() private fun Collection>.antallDager() = sumOf { it.antallDager() } - private val Subsumsjon.perioder get() = output["perioder"] - ?.let { it as List<*> } - ?.map { it as Map<*, *> } - ?.mapNotNull { - val fom = it["fom"] as? LocalDate - val tom = it["tom"] as? LocalDate - if (fom != null && tom != null) fom..tom else null - } - ?: emptyList() + private val Subsumsjon.perioder + get() = output["perioder"] + ?.let { it as List<*> } + ?.map { it as Map<*, *> } + ?.mapNotNull { + val fom = it["fom"] as? LocalDate + val tom = it["tom"] as? LocalDate + if (fom != null && tom != null) fom..tom else null + } + ?: emptyList() override fun logg(subsumsjon: Subsumsjon) { when { @@ -256,27 +273,33 @@ internal class ArbeidsgiverperiodesubsumsjonTest { subsumsjoner += 1 `§ 8-11 første ledd` += subsumsjon.perioder.antallDager() } + subsumsjon.er(sykepengerFraTrygden.førsteLedd.bokstavA) -> { subsumsjoner += 1 if (subsumsjon.utfall == Utfall.VILKAR_OPPFYLT) `§ 8-17 første ledd bokstav a - oppfylt` += subsumsjon.perioder.antallDager() else `§ 8-17 første ledd bokstav a - ikke oppfylt` += subsumsjon.perioder.antallDager() } + subsumsjon.er(sykepengerFraTrygden.annetLedd) -> { subsumsjoner += 1 `§ 8-17 ledd 2` += subsumsjon.perioder.antallDager() } + subsumsjon.er(beregningAvArbeidsgiverperiode.førsteLedd) -> { subsumsjoner += 1 `§ 8-19 første ledd - beregning` += 1 } + subsumsjon.er(beregningAvArbeidsgiverperiode.annetLedd) -> { subsumsjoner += 1 `§ 8-19 andre ledd - beregning` += subsumsjon.perioder.antallDager() } + subsumsjon.er(beregningAvArbeidsgiverperiode.tredjeLedd) -> { subsumsjoner += 1 `§ 8-19 tredje ledd - beregning` += subsumsjon.perioder.antallDager() } + subsumsjon.er(beregningAvArbeidsgiverperiode.fjerdeLedd) -> { subsumsjoner += 1 `§ 8-19 fjerde ledd - beregning` += 1 diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AvvisAndreYtelserFilterTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AvvisAndreYtelserFilterTest.kt index e14ef2ae20..7ec6f2e3b3 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AvvisAndreYtelserFilterTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AvvisAndreYtelserFilterTest.kt @@ -25,15 +25,23 @@ internal class AvvisAndreYtelserFilterTest { ) val tidslinje = tidslinjeOf(9.NAV) - val result = filter.filter(listOf(tidslinje), tidslinje.periode(), Aktivitetslogg(), EmptyLog).single().inspektør + val result = + filter.filter(listOf(tidslinje), tidslinje.periode(), Aktivitetslogg(), EmptyLog) + .single().inspektør assertEquals(7, result.avvistDagTeller) assertEquals(Begrunnelse.AndreYtelserForeldrepenger, result.begrunnelse(1.januar).single()) - assertEquals(Begrunnelse.AndreYtelserSvangerskapspenger, result.begrunnelse(2.januar).single()) + assertEquals( + Begrunnelse.AndreYtelserSvangerskapspenger, + result.begrunnelse(2.januar).single() + ) assertEquals(Begrunnelse.AndreYtelserPleiepenger, result.begrunnelse(3.januar).single()) assertEquals(Begrunnelse.AndreYtelserDagpenger, result.begrunnelse(4.januar).single()) assertEquals(Begrunnelse.AndreYtelserAap, result.begrunnelse(5.januar).single()) - assertEquals(Begrunnelse.AndreYtelserOpplaringspenger, result.begrunnelse(8.januar).single()) + assertEquals( + Begrunnelse.AndreYtelserOpplaringspenger, + result.begrunnelse(8.januar).single() + ) assertEquals(Begrunnelse.AndreYtelserOmsorgspenger, result.begrunnelse(9.januar).single()) } -} \ No newline at end of file +} diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AvvisDagerEtterD\303\270dsdatofilterTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AvvisDagerEtterD\303\270dsdatofilterTest.kt" index fbc3a1dbfe..4b4dbb8485 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AvvisDagerEtterD\303\270dsdatofilterTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/AvvisDagerEtterD\303\270dsdatofilterTest.kt" @@ -89,9 +89,18 @@ internal class AvvisDagerEtterDødsdatofilterTest { assertEquals(3, resultat.last().inspektør.avvistDagTeller) } - private fun undersøke(tidslinjer: List, dødsdato: LocalDate?, periode: Periode): List { + private fun undersøke( + tidslinjer: List, + dødsdato: LocalDate?, + periode: Periode + ): List { aktivitetslogg = Aktivitetslogg() - val resultat = AvvisDagerEtterDødsdatofilter(Alder(EPOCH, dødsdato)).filter(tidslinjer, periode, aktivitetslogg, EmptyLog) + val resultat = AvvisDagerEtterDødsdatofilter(Alder(EPOCH, dødsdato)).filter( + tidslinjer, + periode, + aktivitetslogg, + EmptyLog + ) inspektør = resultat.first().inspektør return resultat } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/BegrunnelseDtoTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/BegrunnelseDtoTest.kt index f8018c49ca..2cfdc830dd 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/BegrunnelseDtoTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/BegrunnelseDtoTest.kt @@ -22,7 +22,14 @@ internal class BegrunnelseDtoTest { @Test fun `MinimumSykdomsgrad avviser ikke helg`() { assertTrue(Begrunnelse.MinimumSykdomsgrad.skalAvvises(NavDag(1.januar, økonomi))) - assertTrue(Begrunnelse.MinimumSykdomsgrad.skalAvvises(ArbeidsgiverperiodedagNav(1.januar, økonomi))) + assertTrue( + Begrunnelse.MinimumSykdomsgrad.skalAvvises( + ArbeidsgiverperiodedagNav( + 1.januar, + økonomi + ) + ) + ) assertFalse(Begrunnelse.MinimumSykdomsgrad.skalAvvises(NavHelgDag(1.januar, økonomi))) } @@ -35,6 +42,14 @@ internal class BegrunnelseDtoTest { @Test fun `avviser med flere begrunnelser`() { val dag = NavDag(1.januar, økonomi) - assertEquals(2, dag.avvis(listOf(Begrunnelse.MinimumSykdomsgrad, Begrunnelse.MinimumInntekt))?.begrunnelser?.size ?: 0) + assertEquals( + 2, + dag.avvis( + listOf( + Begrunnelse.MinimumSykdomsgrad, + Begrunnelse.MinimumInntekt + ) + )?.begrunnelser?.size ?: 0 + ) } } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/FeriepengeberegnerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/FeriepengeberegnerTest.kt index 4fce9fb18e..9bc8737fb1 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/FeriepengeberegnerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/FeriepengeberegnerTest.kt @@ -57,7 +57,10 @@ internal class FeriepengeberegnerTest { spleisArbeidsgiver = spleisArbeidsgiver(1.januar til 10.februar) ) - assertEquals((1.januar til 10.februar).toList() + (1.mars til 7.mars).toList(), feriepengeberegner.feriepengedatoer()) + assertEquals( + (1.januar til 10.februar).toList() + (1.mars til 7.mars).toList(), + feriepengeberegner.feriepengedatoer() + ) } @Test @@ -67,7 +70,10 @@ internal class FeriepengeberegnerTest { spleisArbeidsgiver = spleisArbeidsgiver(1.januar til 10.februar) ) - assertEquals(41 * SpleisArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver()) + assertEquals( + 41 * SpleisArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver() + ) } @Test @@ -89,7 +95,10 @@ internal class FeriepengeberegnerTest { spleisArbeidsgiver = spleisArbeidsgiver(1.januar til 10.januar) ) - assertEquals(10 * InfotrygdArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver()) + assertEquals( + 10 * InfotrygdArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver() + ) } @Test @@ -100,7 +109,10 @@ internal class FeriepengeberegnerTest { spleisArbeidsgiver = spleisArbeidsgiver(1.januar til 10.januar) ) - assertEquals((12 * InfotrygdPersonbeløp + 10 * InfotrygdArbeidsgiverbeløp) * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygd()) + assertEquals( + (12 * InfotrygdPersonbeløp + 10 * InfotrygdArbeidsgiverbeløp) * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygd() + ) } @Test @@ -109,19 +121,33 @@ internal class FeriepengeberegnerTest { spleisArbeidsgiver = spleisArbeidsgiver(1.januar til 10.januar) ) - assertEquals(10 * SpleisArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver(ORGNUMMER)) + assertEquals( + 10 * SpleisArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver(ORGNUMMER) + ) assertEquals(0.0, feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver("otherOrgn")) } @Test fun `beregner spleis sitt bidrag til feriepengene for to arbeidsgivere`() { val feriepengeberegner = feriepengeberegner( - spleisArbeidsgiver = "456789123".spleisArbeidsgiver(1.januar til 10.januar) + "789123456".spleisArbeidsgiver(1.januar til 12.januar) + spleisArbeidsgiver = "456789123".spleisArbeidsgiver(1.januar til 10.januar) + "789123456".spleisArbeidsgiver( + 1.januar til 12.januar + ) ) - assertEquals((10 + 12) * SpleisArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver()) - assertEquals(10 * SpleisArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver("456789123")) - assertEquals(12 * SpleisArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver("789123456")) + assertEquals( + (10 + 12) * SpleisArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver() + ) + assertEquals( + 10 * SpleisArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver("456789123") + ) + assertEquals( + 12 * SpleisArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver("789123456") + ) } @Test @@ -130,7 +156,10 @@ internal class FeriepengeberegnerTest { infotrygdPerson = itPerson(1.januar til 10.januar) ) - assertEquals(10 * InfotrygdPersonbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygdPerson(ORGNUMMER)) + assertEquals( + 10 * InfotrygdPersonbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygdPerson(ORGNUMMER) + ) assertEquals(0.0, feriepengeberegner.beregnFeriepengerForInfotrygdPerson("otherOrgn")) } @@ -140,9 +169,18 @@ internal class FeriepengeberegnerTest { infotrygdPerson = "456789123".itPerson(1.januar til 10.januar) + "789123456".itPerson(1.januar til 12.januar) ) - assertEquals((10 + 12) * InfotrygdPersonbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygdPerson()) - assertEquals(10 * InfotrygdPersonbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygdPerson("456789123")) - assertEquals(12 * InfotrygdPersonbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygdPerson("789123456")) + assertEquals( + (10 + 12) * InfotrygdPersonbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygdPerson() + ) + assertEquals( + 10 * InfotrygdPersonbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygdPerson("456789123") + ) + assertEquals( + 12 * InfotrygdPersonbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygdPerson("789123456") + ) } @Test @@ -151,19 +189,33 @@ internal class FeriepengeberegnerTest { infotrygdArbeidsgiver = itArbeidsgiver(1.januar til 10.januar) ) - assertEquals(10 * InfotrygdArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver(ORGNUMMER)) + assertEquals( + 10 * InfotrygdArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver(ORGNUMMER) + ) assertEquals(0.0, feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver("otherOrgn")) } @Test fun `beregner infotrygd-arbeidsgiver sitt bidrag til feriepengene for to arbeidsgivere`() { val feriepengeberegner = feriepengeberegner( - infotrygdArbeidsgiver = "456789123".itArbeidsgiver(1.januar til 10.januar) + "789123456".itArbeidsgiver(1.januar til 12.januar) + infotrygdArbeidsgiver = "456789123".itArbeidsgiver(1.januar til 10.januar) + "789123456".itArbeidsgiver( + 1.januar til 12.januar + ) ) - assertEquals((10 + 12) * InfotrygdArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver()) - assertEquals(10 * InfotrygdArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver("456789123")) - assertEquals(12 * InfotrygdArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver("789123456")) + assertEquals( + (10 + 12) * InfotrygdArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver() + ) + assertEquals( + 10 * InfotrygdArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver("456789123") + ) + assertEquals( + 12 * InfotrygdArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygdArbeidsgiver("789123456") + ) } @Test @@ -173,7 +225,10 @@ internal class FeriepengeberegnerTest { infotrygdArbeidsgiver = itArbeidsgiver(1.januar til 12.januar) ) - assertEquals((10 * InfotrygdPersonbeløp + 12 * InfotrygdArbeidsgiverbeløp) * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygd(ORGNUMMER)) + assertEquals( + (10 * InfotrygdPersonbeløp + 12 * InfotrygdArbeidsgiverbeløp) * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygd(ORGNUMMER) + ) assertEquals(0.0, feriepengeberegner.beregnFeriepengerForInfotrygd("otherOrgn")) } @@ -181,12 +236,23 @@ internal class FeriepengeberegnerTest { fun `beregner infotrygd sitt totale bidrag til feriepengene for to arbeidsgivere`() { val feriepengeberegner = feriepengeberegner( infotrygdPerson = "456789123".itPerson(1.januar til 10.januar) + "789123456".itPerson(1.januar til 12.januar), - infotrygdArbeidsgiver = "456789123".itArbeidsgiver(1.januar til 14.januar) + "789123456".itArbeidsgiver(1.januar til 16.januar) + infotrygdArbeidsgiver = "456789123".itArbeidsgiver(1.januar til 14.januar) + "789123456".itArbeidsgiver( + 1.januar til 16.januar + ) ) - assertEquals(((10 + 12) * InfotrygdPersonbeløp + (14 + 16) * InfotrygdArbeidsgiverbeløp) * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygd()) - assertEquals((10 * InfotrygdPersonbeløp + 14 * InfotrygdArbeidsgiverbeløp) * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygd("456789123")) - assertEquals((12 * InfotrygdPersonbeløp + 16 * InfotrygdArbeidsgiverbeløp) * UNG_SATS, feriepengeberegner.beregnFeriepengerForInfotrygd("789123456")) + assertEquals( + ((10 + 12) * InfotrygdPersonbeløp + (14 + 16) * InfotrygdArbeidsgiverbeløp) * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygd() + ) + assertEquals( + (10 * InfotrygdPersonbeløp + 14 * InfotrygdArbeidsgiverbeløp) * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygd("456789123") + ) + assertEquals( + (12 * InfotrygdPersonbeløp + 16 * InfotrygdArbeidsgiverbeløp) * UNG_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygd("789123456") + ) } @Test @@ -198,8 +264,14 @@ internal class FeriepengeberegnerTest { spleisArbeidsgiver = spleisArbeidsgiver(15.januar til 31.januar) ) - assertEquals((10 * InfotrygdPersonbeløp + 14 * InfotrygdArbeidsgiverbeløp) * GAMMEL_SATS, feriepengeberegner.beregnFeriepengerForInfotrygd()) - assertEquals(17 * SpleisArbeidsgiverbeløp * GAMMEL_SATS, feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver()) + assertEquals( + (10 * InfotrygdPersonbeløp + 14 * InfotrygdArbeidsgiverbeløp) * GAMMEL_SATS, + feriepengeberegner.beregnFeriepengerForInfotrygd() + ) + assertEquals( + 17 * SpleisArbeidsgiverbeløp * GAMMEL_SATS, + feriepengeberegner.beregnFeriepengerForSpleisArbeidsgiver() + ) } @Test @@ -210,7 +282,10 @@ internal class FeriepengeberegnerTest { spleisArbeidsgiver = spleisArbeidsgiver(1.januar til 10.januar) ) - assertEquals((10 * InfotrygdArbeidsgiverbeløp + 10 * SpleisArbeidsgiverbeløp) * UNG_SATS, feriepengeberegner.beregnFeriepengerForArbeidsgiver(ORGNUMMER)) + assertEquals( + (10 * InfotrygdArbeidsgiverbeløp + 10 * SpleisArbeidsgiverbeløp) * UNG_SATS, + feriepengeberegner.beregnFeriepengerForArbeidsgiver(ORGNUMMER) + ) } @Test @@ -220,7 +295,10 @@ internal class FeriepengeberegnerTest { spleisPerson = spleisPerson(1.januar til 10.januar) ) - assertEquals((20 * InfotrygdPersonbeløp + 10 * SpleisPersonbeløp) * UNG_SATS, feriepengeberegner.beregnFeriepengerForPerson(ORGNUMMER)) + assertEquals( + (20 * InfotrygdPersonbeløp + 10 * SpleisPersonbeløp) * UNG_SATS, + feriepengeberegner.beregnFeriepengerForPerson(ORGNUMMER) + ) } @Test @@ -231,7 +309,10 @@ internal class FeriepengeberegnerTest { spleisArbeidsgiver = spleisArbeidsgiver(1.januar til 10.januar) ) - assertEquals(10 * SpleisArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnFeriepengedifferansenForArbeidsgiver(ORGNUMMER)) + assertEquals( + 10 * SpleisArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnFeriepengedifferansenForArbeidsgiver(ORGNUMMER) + ) } @Test @@ -242,7 +323,10 @@ internal class FeriepengeberegnerTest { spleisArbeidsgiver = spleisArbeidsgiver(1.januar til 10.januar) ) - assertEquals((10 * SpleisArbeidsgiverbeløp - 10 * InfotrygdArbeidsgiverbeløp) * UNG_SATS, feriepengeberegner.beregnFeriepengedifferansenForArbeidsgiver(ORGNUMMER)) + assertEquals( + (10 * SpleisArbeidsgiverbeløp - 10 * InfotrygdArbeidsgiverbeløp) * UNG_SATS, + feriepengeberegner.beregnFeriepengedifferansenForArbeidsgiver(ORGNUMMER) + ) } @Test @@ -253,20 +337,35 @@ internal class FeriepengeberegnerTest { spleisArbeidsgiver = spleisArbeidsgiver(1.januar til 10.januar) ) - assertEquals(38 * InfotrygdArbeidsgiverbeløp * UNG_SATS, feriepengeberegner.beregnUtbetalteFeriepengerForInfotrygdArbeidsgiver(ORGNUMMER)) + assertEquals( + 38 * InfotrygdArbeidsgiverbeløp * UNG_SATS, + feriepengeberegner.beregnUtbetalteFeriepengerForInfotrygdArbeidsgiver(ORGNUMMER) + ) } private fun itPerson(periode: Periode) = ORGNUMMER.itPerson(periode) private fun String.itPerson(periode: Periode) = - periode.map { Feriepengeberegner.UtbetaltDag.InfotrygdPerson(this, it, InfotrygdPersonbeløp) } + periode.map { + Feriepengeberegner.UtbetaltDag.InfotrygdPerson( + this, + it, + InfotrygdPersonbeløp + ) + } private fun itArbeidsgiver(periode: Periode) = ORGNUMMER.itArbeidsgiver(periode) private fun String.itArbeidsgiver(periode: Periode) = - periode.map { Feriepengeberegner.UtbetaltDag.InfotrygdArbeidsgiver(this, it, InfotrygdArbeidsgiverbeløp) } + periode.map { + Feriepengeberegner.UtbetaltDag.InfotrygdArbeidsgiver( + this, + it, + InfotrygdArbeidsgiverbeløp + ) + } private fun spleisArbeidsgiver(periode: Periode) = ORGNUMMER.spleisArbeidsgiver(periode) @@ -275,7 +374,13 @@ internal class FeriepengeberegnerTest { ORGNUMMER.spleisPerson(periode) private fun String.spleisArbeidsgiver(periode: Periode) = - periode.map { Feriepengeberegner.UtbetaltDag.SpleisArbeidsgiver(this, it, SpleisArbeidsgiverbeløp) } + periode.map { + Feriepengeberegner.UtbetaltDag.SpleisArbeidsgiver( + this, + it, + SpleisArbeidsgiverbeløp + ) + } private fun String.spleisPerson(periode: Periode) = periode.map { Feriepengeberegner.UtbetaltDag.SpleisPerson(this, it, SpleisPersonbeløp) } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/FeriepengedatoerTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/FeriepengedatoerTest.kt index c059d0e8aa..d7705f74f1 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/FeriepengedatoerTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/FeriepengedatoerTest.kt @@ -42,14 +42,31 @@ internal class FeriepengedatoerTest : AbstractEndToEndTest() { private val a2 = "789456213" } - private fun feriepengerFor(opptjeningsår: Year, historikk: UtbetalingshistorikkForFeriepenger, sisteInfotrygdkjøring: LocalDate = LocalDate.MAX) = - Feriepengeberegner(alder, opptjeningsår, grunnlagFraInfotrygd = historikk.grunnlagForFeriepenger(sisteInfotrygdkjøring), grunnlagFraSpleis = person.grunnlagForFeriepenger()) + private fun feriepengerFor( + opptjeningsår: Year, + historikk: UtbetalingshistorikkForFeriepenger, + sisteInfotrygdkjøring: LocalDate = LocalDate.MAX + ) = + Feriepengeberegner( + alder, + opptjeningsår, + grunnlagFraInfotrygd = historikk.grunnlagForFeriepenger(sisteInfotrygdkjøring), + grunnlagFraSpleis = person.grunnlagForFeriepenger() + ) @Test fun `Finner datoer for feriepengeberegning med 48 sammenhengende utbetalingsdager i IT fra første januar`() { val historikk = utbetalingshistorikkForFeriepenger( - listOf(UtbetalingshistorikkForFeriepenger.Utbetalingsperiode.Arbeidsgiverutbetalingsperiode(ORGNUMMER, 1.januar, 7.mars, 1000, 7.mars)) + listOf( + UtbetalingshistorikkForFeriepenger.Utbetalingsperiode.Arbeidsgiverutbetalingsperiode( + ORGNUMMER, + 1.januar, + 7.mars, + 1000, + 7.mars + ) + ) ) val beregner = feriepengerFor(Year.of(2018), historikk) @@ -59,7 +76,15 @@ internal class FeriepengedatoerTest : AbstractEndToEndTest() { @Test fun `Finner datoer for feriepengeberegning med 49 sammenhengende utbetalingsdager i IT fra første januar`() { val historikk = utbetalingshistorikkForFeriepenger( - listOf(UtbetalingshistorikkForFeriepenger.Utbetalingsperiode.Arbeidsgiverutbetalingsperiode(ORGNUMMER, 1.januar, 8.mars, 1000, 8.mars)) + listOf( + UtbetalingshistorikkForFeriepenger.Utbetalingsperiode.Arbeidsgiverutbetalingsperiode( + ORGNUMMER, + 1.januar, + 8.mars, + 1000, + 8.mars + ) + ) ) val beregner = feriepengerFor(Year.of(2018), historikk) @@ -69,7 +94,15 @@ internal class FeriepengedatoerTest : AbstractEndToEndTest() { @Test fun `Finner datoer for feriepengeberegning med 47 sammenhengende utbetalingsdager i IT fra første januar`() { val historikk = utbetalingshistorikkForFeriepenger( - listOf(UtbetalingshistorikkForFeriepenger.Utbetalingsperiode.Arbeidsgiverutbetalingsperiode(ORGNUMMER, 1.januar, 6.mars, 1000, 6.mars)) + listOf( + UtbetalingshistorikkForFeriepenger.Utbetalingsperiode.Arbeidsgiverutbetalingsperiode( + ORGNUMMER, + 1.januar, + 6.mars, + 1000, + 6.mars + ) + ) ) val beregner = feriepengerFor(Year.of(2018), historikk) @@ -108,7 +141,8 @@ internal class FeriepengedatoerTest : AbstractEndToEndTest() { ) ) - val beregner = feriepengerFor(Year.of(2018), historikk, sisteInfotrygdkjøring = 24.august(2024)) + val beregner = + feriepengerFor(Year.of(2018), historikk, sisteInfotrygdkjøring = 24.august(2024)) assertEquals(0, beregner.feriepengedatoer().size) } @@ -206,7 +240,10 @@ internal class FeriepengedatoerTest : AbstractEndToEndTest() { ) val beregner = feriepengerFor(Year.of(2018), historikk) - assertEquals((17.januar(2018) til 23.mars(2018)).filterNot { it.erHelg() }, beregner.feriepengedatoer()) + assertEquals( + (17.januar(2018) til 23.mars(2018)).filterNot { it.erHelg() }, + beregner.feriepengedatoer() + ) assertEquals(0.0, beregner.beregnFeriepengerForInfotrygdPerson()) } @@ -376,12 +413,19 @@ internal class FeriepengedatoerTest : AbstractEndToEndTest() { orgnummer: String = ORGNUMMER, vedtaksperiodeIdInnhenter: IdInnhenter = 1.vedtaksperiode ) { - håndterSykmelding(Sykmeldingsperiode(arbeidsgiverperiode.start, syktil), orgnummer = orgnummer) + håndterSykmelding( + Sykmeldingsperiode(arbeidsgiverperiode.start, syktil), + orgnummer = orgnummer + ) håndterSøknad( Sykdom(arbeidsgiverperiode.start, syktil, 100.prosent), orgnummer = orgnummer ) - håndterInntektsmelding(listOf(arbeidsgiverperiode), orgnummer = orgnummer, vedtaksperiodeIdInnhenter = vedtaksperiodeIdInnhenter) + håndterInntektsmelding( + listOf(arbeidsgiverperiode), + orgnummer = orgnummer, + vedtaksperiodeIdInnhenter = vedtaksperiodeIdInnhenter + ) håndterVilkårsgrunnlag(observatør.sisteVedtaksperiode(), orgnummer = orgnummer) håndterYtelser(observatør.sisteVedtaksperiode(), orgnummer = orgnummer) håndterSimulering(observatør.sisteVedtaksperiode(), orgnummer = orgnummer) @@ -394,7 +438,10 @@ internal class FeriepengedatoerTest : AbstractEndToEndTest() { syktil: LocalDate = 31.januar, orgnummer: String = ORGNUMMER ) { - håndterSykmelding(Sykmeldingsperiode(arbeidsgiverperiode.start, syktil), orgnummer = orgnummer) + håndterSykmelding( + Sykmeldingsperiode(arbeidsgiverperiode.start, syktil), + orgnummer = orgnummer + ) håndterSøknad( Sykdom(arbeidsgiverperiode.start, syktil, 100.prosent), orgnummer = orgnummer diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumSykepengedagerfilterTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumSykepengedagerfilterTest.kt index 7b0930109c..241ae23e87 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumSykepengedagerfilterTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumSykepengedagerfilterTest.kt @@ -66,7 +66,8 @@ internal class MaksimumSykepengedagerfilterTest { fun `vurderer ikke maksdato for infotrygdtidslinje som strekker seg ut over vedtaksperioden`() { val a1 = tidslinjeOf(16.AP, 248.NAVDAGER) val infotrygdlinje = tidslinjeOf(200.ARB, 10.NAVDAGER, startDato = 1.januar(2019)) - val avvisteDager = listOf(a1).utbetalingsavgrenser(UNG_PERSON_FNR_2018, a1.periode(), infotrygdlinje) + val avvisteDager = + listOf(a1).utbetalingsavgrenser(UNG_PERSON_FNR_2018, a1.periode(), infotrygdlinje) assertEquals(emptyList(), avvisteDager) assertEquals(248, forbrukteDager) assertEquals(0, gjenståendeDager) @@ -117,10 +118,12 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `ikke ny maksdato dersom mindre enn 182 dager frisk - nav utbetaler arbeidsgiverperioden`() { val tidslinje = tidslinjeOf(248.NAVDAGER, 100.ARB, 16.NAP, 10.NAV) - assertEquals(listOf( - 8.april(2019) til 12.april(2019), - 15.april(2019) til 17.april(2019), - ).flatten(), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018)) + assertEquals( + listOf( + 8.april(2019) til 12.april(2019), + 15.april(2019) til 17.april(2019), + ).flatten(), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018) + ) assertEquals(setOf(12.desember), maksdatoer) aktivitetslogg.assertInfo("Maks antall sykepengedager er nådd i perioden") } @@ -128,14 +131,18 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `bare avviste dager`() { val tidslinje = tidslinjeOf(16.AP, 10.AVV) - assertEquals((17.januar til 26.januar).toList(), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018)) + assertEquals( + (17.januar til 26.januar).toList(), + tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018) + ) assertEquals(0, forbrukteDager) assertEquals(248, gjenståendeDager) } @Test fun `avvist dag som siste oppholdsdag`() { - val tidslinje = tidslinjeOf(16.AP, 248.NAVDAGER, 181.ARB, 2.AVV(1000, begrunnelse = MinimumSykdomsgrad)) + val tidslinje = + tidslinjeOf(16.AP, 248.NAVDAGER, 181.ARB, 2.AVV(1000, begrunnelse = MinimumSykdomsgrad)) val avvisteDager = tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018) assertEquals(listOf(28.juni(2019), 29.juni(2019)), avvisteDager) @@ -143,7 +150,11 @@ internal class MaksimumSykepengedagerfilterTest { assertNotNull(avvisteTidslinjer.single()[28.juni(2019)].erAvvistMed(SykepengedagerOppbrukt)) assertNotNull(avvisteTidslinjer.single()[29.juni(2019)].erAvvistMed(MinimumSykdomsgrad)) - assertNotNull(avvisteTidslinjer.single()[29.juni(2019)].erAvvistMed(NyVilkårsprøvingNødvendig)) + assertNotNull( + avvisteTidslinjer.single()[29.juni(2019)].erAvvistMed( + NyVilkårsprøvingNødvendig + ) + ) assertEquals(248, forbrukteDager) assertEquals(0, gjenståendeDager) @@ -152,7 +163,10 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `avviste dager etter opphold`() { val tidslinje = tidslinjeOf(1.NAVDAGER, 15.ARB, 10.AVV) - assertEquals((17.januar til 26.januar).toList(), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018)) + assertEquals( + (17.januar til 26.januar).toList(), + tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018) + ) assertEquals(1, forbrukteDager) assertEquals(247, gjenståendeDager) } @@ -160,7 +174,10 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `avviste dager før maksdato, etter syk, teller som opphold`() { val tidslinje = tidslinjeOf(240.NAVDAGER, 182.AVV, 10.NAVDAGER) - assertEquals((1.desember til 31.mai(2019)).toList(), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018)) + assertEquals( + (1.desember til 31.mai(2019)).toList(), + tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018) + ) assertEquals(10, forbrukteDager) assertEquals(238, gjenståendeDager) } @@ -168,7 +185,10 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `avviste dager før maksdato, etter opphold, teller som opphold`() { val tidslinje = tidslinjeOf(240.NAVDAGER, 1.ARB, 181.AVV, 10.NAVDAGER) - assertEquals((2.desember til 31.mai(2019)).toList(), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018)) + assertEquals( + (2.desember til 31.mai(2019)).toList(), + tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018) + ) assertEquals(10, forbrukteDager) assertEquals(238, gjenståendeDager) } @@ -176,7 +196,10 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `avviste dager før maksdato, etter fri, teller som opphold`() { val tidslinje = tidslinjeOf(240.NAVDAGER, 1.FRI, 181.AVV, 10.NAVDAGER) - assertEquals((2.desember til 31.mai(2019)).toList(), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018)) + assertEquals( + (2.desember til 31.mai(2019)).toList(), + tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018) + ) assertEquals(10, forbrukteDager) assertEquals(238, gjenståendeDager) } @@ -207,7 +230,14 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `avviste dager avvises med maksdatobegrunnelse i tillegg`() { - val tidslinje = tidslinjeOf(16.AP, 248.NAVDAGER, 182.AVV(1000, begrunnelse = MinimumSykdomsgrad), 16.AP, 248.NAVDAGER, startDato = 5.juli(2016)) + val tidslinje = tidslinjeOf( + 16.AP, + 248.NAVDAGER, + 182.AVV(1000, begrunnelse = MinimumSykdomsgrad), + 16.AP, + 248.NAVDAGER, + startDato = 5.juli(2016) + ) val forventetFørsteAvvisteDag = 4.juli(2017) val forventetSisteAvvisteDag = forventetFørsteAvvisteDag.plusDays(181) val avvisteDager = (forventetFørsteAvvisteDag til forventetSisteAvvisteDag).toList() @@ -247,16 +277,26 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `stopper betaling etter 248 dager inkl persontidslinje`() { val persontidslinje = tidslinjeOf(16.AP, 247.NAVDAGER) - val tidslinje = tidslinjeOf(2.NAVDAGER, startDato = persontidslinje.periode().endInclusive.plusDays(1)) - assertEquals(listOf(31.desember), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018, personTidslinje = persontidslinje)) + val tidslinje = + tidslinjeOf(2.NAVDAGER, startDato = persontidslinje.periode().endInclusive.plusDays(1)) + assertEquals( + listOf(31.desember), + tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018, personTidslinje = persontidslinje) + ) aktivitetslogg.assertInfo("Maks antall sykepengedager er nådd i perioden") } @Test fun `ingen warning om avvist dag ikke er innenfor perioden`() { val tidslinje = tidslinjeOf(16.AP, 249.NAVDAGER) - assertEquals(listOf(31.desember), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018, Periode(1.januar, 30.desember))) - assertEquals(listOf(31.desember), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018, Periode(1.januar, 31.desember))) + assertEquals( + listOf(31.desember), + tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018, Periode(1.januar, 30.desember)) + ) + assertEquals( + listOf(31.desember), + tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018, Periode(1.januar, 31.desember)) + ) assertTrue(aktivitetslogg.aktiviteter.isNotEmpty()) assertFalse(aktivitetslogg.harVarslerEllerVerre()) } @@ -294,7 +334,13 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `utbetalingsgrense resettes ikke når oppholdsdager nås ved sykhelg`() { - val tidslinje = tidslinjeOf(16.AP, 248.NAVDAGER, (25 * 7).ARB, 5.ARB, 10.NAV) // de to første navdagene er helg + val tidslinje = tidslinjeOf( + 16.AP, + 248.NAVDAGER, + (25 * 7).ARB, + 5.ARB, + 10.NAV + ) // de to første navdagene er helg val periode = 27.juni(2019) til 6.juli(2019) assertEquals(periode.utenHelg(), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018)) } @@ -322,19 +368,28 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `utbetaling stopper når du blir 70 år`() { val tidslinje = tidslinjeOf(11.NAV) - assertEquals(listOf(10.januar, 11.januar), tidslinje.utbetalingsavgrenser(PERSON_70_ÅR_10_JANUAR_2018)) + assertEquals( + listOf(10.januar, 11.januar), + tidslinje.utbetalingsavgrenser(PERSON_70_ÅR_10_JANUAR_2018) + ) } @Test fun `kan ikke bli syk på 70årsdagen`() { val tidslinje = tidslinjeOf(9.UTELATE, 2.NAVDAGER) - assertEquals(listOf(10.januar, 11.januar), tidslinje.utbetalingsavgrenser(PERSON_70_ÅR_10_JANUAR_2018)) + assertEquals( + listOf(10.januar, 11.januar), + tidslinje.utbetalingsavgrenser(PERSON_70_ÅR_10_JANUAR_2018) + ) } @Test fun `kan ikke bli syk etter 70årsdagen`() { val tidslinje = tidslinjeOf(10.UTELATE, 2.NAVDAGER) - assertEquals(listOf(11.januar, 12.januar), tidslinje.utbetalingsavgrenser(PERSON_70_ÅR_10_JANUAR_2018)) + assertEquals( + listOf(11.januar, 12.januar), + tidslinje.utbetalingsavgrenser(PERSON_70_ÅR_10_JANUAR_2018) + ) } @Test @@ -358,12 +413,18 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `forbrukte dager før 67 år`() { tidslinjeOf(11.NAVDAGER, startDato = 1.desember(2017)).also { tidslinje -> - assertEquals(emptyList(), tidslinje.utbetalingsavgrenser(PERSON_67_ÅR_11_JANUAR_2018)) + assertEquals( + emptyList(), + tidslinje.utbetalingsavgrenser(PERSON_67_ÅR_11_JANUAR_2018) + ) assertEquals(setOf(11.januar + 60.ukedager), maksdatoer) assertEquals(79, gjenståendeDager) } tidslinjeOf(10.NAV).also { tidslinje -> - assertEquals(emptyList(), tidslinje.utbetalingsavgrenser(PERSON_67_ÅR_11_JANUAR_2018)) + assertEquals( + emptyList(), + tidslinje.utbetalingsavgrenser(PERSON_67_ÅR_11_JANUAR_2018) + ) assertEquals(setOf(11.januar + 60.ukedager), maksdatoer) assertEquals(61, gjenståendeDager) } @@ -378,7 +439,10 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `sjekk 60 dagers grense for 67 åringer med 26 ukers opphold`() { val tidslinje = tidslinjeOf(10.NAV, 60.NAVDAGER, (26 * 7).ARB, 60.NAVDAGER) - assertEquals(emptyList(), tidslinje.utbetalingsavgrenser(PERSON_67_ÅR_11_JANUAR_2018)) + assertEquals( + emptyList(), + tidslinje.utbetalingsavgrenser(PERSON_67_ÅR_11_JANUAR_2018) + ) } @Test @@ -415,11 +479,27 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `bruke opp alt fom 67 år`() { - val tidslinje = tidslinjeOf(188.NAVDAGER, 61.NAVDAGER, (26 * 7).ARB, 61.NAVDAGER, 36.ARB, 365.ARB, 365.ARB, 1.NAVDAGER, startDato = 30.mars(2017)) - assertEquals(listOf(13.mars, 5.desember, 11.januar(2021)), tidslinje.utbetalingsavgrenser(PERSON_67_ÅR_11_JANUAR_2018)) + val tidslinje = tidslinjeOf( + 188.NAVDAGER, + 61.NAVDAGER, + (26 * 7).ARB, + 61.NAVDAGER, + 36.ARB, + 365.ARB, + 365.ARB, + 1.NAVDAGER, + startDato = 30.mars(2017) + ) + assertEquals( + listOf(13.mars, 5.desember, 11.januar(2021)), + tidslinje.utbetalingsavgrenser(PERSON_67_ÅR_11_JANUAR_2018) + ) val inspektør = avvisteTidslinjer.single().inspektør assertEquals(listOf(SykepengedagerOppbrukt), inspektør.begrunnelse(13.mars)) - assertEquals(listOf(Begrunnelse.SykepengedagerOppbruktOver67), inspektør.begrunnelse(5.desember)) + assertEquals( + listOf(Begrunnelse.SykepengedagerOppbruktOver67), + inspektør.begrunnelse(5.desember) + ) assertEquals(listOf(Begrunnelse.Over70), inspektør.begrunnelse(11.januar(2021))) } @@ -441,11 +521,24 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `begrunnelse ved flere oppbrukte rettigheter - hel tidslinje`() { - val tidslinje = tidslinjeOf(248.NAVDAGER, 1.NAVDAGER, (26 * 7).ARB, 60.NAVDAGER, 1.NAVDAGER, startDato = 23.februar(2017)) + val tidslinje = tidslinjeOf( + 248.NAVDAGER, + 1.NAVDAGER, + (26 * 7).ARB, + 60.NAVDAGER, + 1.NAVDAGER, + startDato = 23.februar(2017) + ) val avvisteDager = tidslinje.utbetalingsavgrenser(PERSON_67_ÅR_11_JANUAR_2018) assertEquals(2, avvisteDager.size) - assertEquals(SykepengedagerOppbrukt, avvisteTidslinjer.first().inspektør.avvistedager.first().begrunnelser.single()) - assertEquals(Begrunnelse.SykepengedagerOppbruktOver67, avvisteTidslinjer.first().inspektør.avvistedager.last().begrunnelser.single()) + assertEquals( + SykepengedagerOppbrukt, + avvisteTidslinjer.first().inspektør.avvistedager.first().begrunnelser.single() + ) + assertEquals( + Begrunnelse.SykepengedagerOppbruktOver67, + avvisteTidslinjer.first().inspektør.avvistedager.last().begrunnelser.single() + ) } @Test @@ -518,14 +611,18 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `helgedager sammen med utbetalingsdager teller som ikke opphold`() { - val tidslinje = tidslinjeOf(248.NAVDAGER, (20 * 7).HELG, 7.NAVDAGER, (5 * 7).HELG, 60.NAVDAGER) + val tidslinje = + tidslinjeOf(248.NAVDAGER, (20 * 7).HELG, 7.NAVDAGER, (5 * 7).HELG, 60.NAVDAGER) assertEquals(67, tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018).size) } @Test fun `sjekk at sykdom i arbgiver periode ikke ødelegger oppholdsperioden`() { val tidslinje = tidslinjeOf(50.NAVDAGER, (25 * 7).ARB, 7.AP, 248.NAVDAGER) - assertEquals(emptyList(), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018, 1.april(2019) til 30.april(2019))) + assertEquals( + emptyList(), + tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018, 1.april(2019) til 30.april(2019)) + ) } @Test @@ -537,7 +634,11 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `ukjente dager generert når du legger til to utbetalingstidslinjer teller som ikke-utbetalingsdager`() { val tidslinje1 = tidslinjeOf(50.NAVDAGER) - val tidslinje2 = tidslinjeOf((26 * 7).UTELATE, 248.NAVDAGER, startDato = tidslinje1.periode().endInclusive.plusDays(1)) + val tidslinje2 = tidslinjeOf( + (26 * 7).UTELATE, + 248.NAVDAGER, + startDato = tidslinje1.periode().endInclusive.plusDays(1) + ) val tidslinje = tidslinje1 + tidslinje2 assertEquals(emptyList(), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018)) } @@ -545,7 +646,10 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `248 dager nådd på 3 år`() { val tidslinje = tilbakevendendeSykdom(3.NAVDAGER, 10.ARB, 1.NAVDAGER) - assertEquals(listOf(5.januar(2021), 18.januar(2021)), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018)) + assertEquals( + listOf(5.januar(2021), 18.januar(2021)), + tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018) + ) } @Test @@ -581,17 +685,68 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `ferie hos ag1 og arbeidsdag hos ag2 - treårsvindu forskyves ikke`() { - val ag1 = tidslinjeOf(11.AP, 52.ARB, 12.NAV, 109.ARB, 8.NAV, 66.ARB, 1.FRI, 15.AP, 1.ARB, 13.NAV, 87.ARB, - 16.AP, 34.NAV, 36.ARB, 1.FRI, 1.AP, 1.ARB, 1.AP, 7.ARB, 1.AP, 6.ARB, 13.AP, 13.NAV, 26.FRI, 51.NAV, 12.FRI, 30.NAV, startDato = 1.mars(2021)) + val ag1 = tidslinjeOf( + 11.AP, + 52.ARB, + 12.NAV, + 109.ARB, + 8.NAV, + 66.ARB, + 1.FRI, + 15.AP, + 1.ARB, + 13.NAV, + 87.ARB, + 16.AP, + 34.NAV, + 36.ARB, + 1.FRI, + 1.AP, + 1.ARB, + 1.AP, + 7.ARB, + 1.AP, + 6.ARB, + 13.AP, + 13.NAV, + 26.FRI, + 51.NAV, + 12.FRI, + 30.NAV, + startDato = 1.mars(2021) + ) // 3. oktober er fridag hos ag1; utfallet skal ikke være at vi teller dagen som Arbeidsdag, da det vil medføre at vi går inn i en // opphold-situasjon, som vi ville gått ut av 17. oktober (ved neste Nav-dag). // Når man går ut av en Opphold-situasjon så vil vi sette et nytt starttidspunkt for treårsvinduet, og da beregne // forbrukte dager annerledes. val ag2 = tidslinjeOf(20.ARB, startDato = 3.oktober(2022)) - val infotrygd = tidslinjeOf(6.NAV, 62.ARB, 124.NAV, 151.ARB, 21.NAV, 12.ARB, 3.NAV, 116.ARB, 19.NAV, - 163.ARB, 14.NAV, 108.ARB, 8.NAV, 83.ARB, 13.NAV, 103.ARB, 34.NAV, startDato = 25.juni(2019)) + val infotrygd = tidslinjeOf( + 6.NAV, + 62.ARB, + 124.NAV, + 151.ARB, + 21.NAV, + 12.ARB, + 3.NAV, + 116.ARB, + 19.NAV, + 163.ARB, + 14.NAV, + 108.ARB, + 8.NAV, + 83.ARB, + 13.NAV, + 103.ARB, + 34.NAV, + startDato = 25.juni(2019) + ) - assertTrue(listOf(ag1, ag2).utbetalingsavgrenser(UNG_PERSON_FNR_2018, personTidslinje = infotrygd).isEmpty()) + assertTrue( + listOf(ag1, ag2).utbetalingsavgrenser( + UNG_PERSON_FNR_2018, + personTidslinje = infotrygd + ).isEmpty() + ) assertEquals(236, forbrukteDager) assertEquals(12, gjenståendeDager) } @@ -636,7 +791,8 @@ internal class MaksimumSykepengedagerfilterTest { @Test fun `26 ukers friske tilbakestiller skyvevindu på 3 år`() { - val tidslinje = enAnnenSykdom(1.NAVDAGER, 3.ARB, 5.NAVDAGER, (248 - 60).NAVDAGER, 1.NAVDAGER) + val tidslinje = + enAnnenSykdom(1.NAVDAGER, 3.ARB, 5.NAVDAGER, (248 - 60).NAVDAGER, 1.NAVDAGER) assertEquals(listOf(1.oktober(2021)), tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018)) } @@ -678,16 +834,25 @@ internal class MaksimumSykepengedagerfilterTest { tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018) val utbetalingstidslinjeInspektør = avvisteTidslinjer.single().inspektør utbetalingstidslinjeInspektør.avvistedatoer.dropLast(1).forEach { dato -> - assertEquals(listOf(SykepengedagerOppbrukt), utbetalingstidslinjeInspektør.begrunnelse(dato)) + assertEquals( + listOf(SykepengedagerOppbrukt), + utbetalingstidslinjeInspektør.begrunnelse(dato) + ) } aktivitetslogg.assertFunksjonellFeil("Bruker er fortsatt syk 26 uker etter maksdato") - assertEquals(listOf(NyVilkårsprøvingNødvendig), utbetalingstidslinjeInspektør.begrunnelse(utbetalingstidslinjeInspektør.avvistedatoer.last())) + assertEquals( + listOf(NyVilkårsprøvingNødvendig), + utbetalingstidslinjeInspektør.begrunnelse(utbetalingstidslinjeInspektør.avvistedatoer.last()) + ) } @Test fun `ikke error dersom 26 uker med sammenhengende sykdom etter maksdato og utenfor vedtaksperioden`() { val tidslinje = tidslinjeOf(248.NAVDAGER, 182.NAV, 1.NAVDAGER) - tidslinje.utbetalingsavgrenser(UNG_PERSON_FNR_2018, tidslinje.periode().start til tidslinje.periode().endInclusive.minusDays(1)) + tidslinje.utbetalingsavgrenser( + UNG_PERSON_FNR_2018, + tidslinje.periode().start til tidslinje.periode().endInclusive.minusDays(1) + ) assertFalse(aktivitetslogg.harFunksjonelleFeilEllerVerre()) } @@ -762,14 +927,30 @@ internal class MaksimumSykepengedagerfilterTest { periode: Periode? = null, personTidslinje: Utbetalingstidslinje = Utbetalingstidslinje() ): List { - val filterperiode = periode ?: (this + listOf(personTidslinje)).filterNot { it.isEmpty() }.map( - Utbetalingstidslinje::periode).reduce( - Periode::plus) - val maksimumSykepengedagerfilter = MaksimumSykepengedagerfilter(fødselsdato.alder, NormalArbeidstaker, personTidslinje) - avvisteTidslinjer = maksimumSykepengedagerfilter.filter(this, filterperiode, aktivitetslogg, EmptyLog) - val maksdatoresultat = maksimumSykepengedagerfilter.maksdatoresultatForVedtaksperiode(filterperiode, EmptyLog) + val filterperiode = + periode ?: (this + listOf(personTidslinje)).filterNot { it.isEmpty() }.map( + Utbetalingstidslinje::periode + ).reduce( + Periode::plus + ) + val maksimumSykepengedagerfilter = + MaksimumSykepengedagerfilter(fødselsdato.alder, NormalArbeidstaker, personTidslinje) + avvisteTidslinjer = + maksimumSykepengedagerfilter.filter(this, filterperiode, aktivitetslogg, EmptyLog) + val maksdatoresultat = + maksimumSykepengedagerfilter.maksdatoresultatForVedtaksperiode(filterperiode, EmptyLog) maksdatoer = maksimumSykepengedagerfilter.maksdatosaker - .map { it.beregnMaksdatoOgSubsummer(fødselsdato.alder, NormalArbeidstaker, filterperiode, EmptyLog, Utbetalingstidslinje(), emptyList(), emptyList())} + .map { + it.beregnMaksdatoOgSubsummer( + fødselsdato.alder, + NormalArbeidstaker, + filterperiode, + EmptyLog, + Utbetalingstidslinje(), + emptyList(), + emptyList() + ) + } .map { it.maksdato } .plusElement(maksdatoresultat.maksdato) .toSet() diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumUtbetalingFilterFlereArbeidsgivereTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumUtbetalingFilterFlereArbeidsgivereTest.kt index 19e5ecae07..e5d7e22fab 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumUtbetalingFilterFlereArbeidsgivereTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumUtbetalingFilterFlereArbeidsgivereTest.kt @@ -28,21 +28,36 @@ internal class MaksimumUtbetalingFilterFlereArbeidsgivereTest { assert6GBegrensetUtbetaling(ag2(), ag1()) } - private fun assert6GBegrensetUtbetaling(ag1: Pair, ag2: Pair) { - val periode = Utbetalingstidslinje.periode(listOf(ag1.first, ag2.first)) ?: fail { "forventer en periode" } + private fun assert6GBegrensetUtbetaling( + ag1: Pair, + ag2: Pair + ) { + val periode = Utbetalingstidslinje.periode(listOf(ag1.first, ag2.first)) + ?: fail { "forventer en periode" } val dato = periode.start val maksDagsats = Grunnbeløp.`6G`.dagsats(dato) - val resultat = MaksimumUtbetalingFilter().betal(listOf(ag2.first, ag1.first), periode, aktivitetslogg, EmptyLog) + val resultat = MaksimumUtbetalingFilter().betal( + listOf(ag2.first, ag1.first), + periode, + aktivitetslogg, + EmptyLog + ) resultat.first().inspektør.also { inspektør -> resultat.first().forEach { dag -> - assertEquals(maksDagsats, inspektør.arbeidsgiverbeløp(dag.dato)) { "noen dager har fått nytt grunnbeløp" } + assertEquals( + maksDagsats, + inspektør.arbeidsgiverbeløp(dag.dato) + ) { "noen dager har fått nytt grunnbeløp" } } } resultat.last().inspektør.also { inspektør -> resultat.last().forEach { dag -> - assertEquals(maksDagsats, inspektør.arbeidsgiverbeløp(dag.dato)) { "noen dager har fått nytt grunnbeløp" } + assertEquals( + maksDagsats, + inspektør.arbeidsgiverbeløp(dag.dato) + ) { "noen dager har fått nytt grunnbeløp" } } } assertEquals(ag1.second, resultat.last().inspektør.totalUtbetaling()) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumUtbetalingFilterHendelseTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumUtbetalingFilterHendelseTest.kt index 44c6532f0d..c06e753cc3 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumUtbetalingFilterHendelseTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/MaksimumUtbetalingFilterHendelseTest.kt @@ -54,5 +54,6 @@ internal class MaksimumUtbetalingFilterHendelseTest { } private fun Utbetalingstidslinje.betal() = - MaksimumUtbetalingFilter().betal(listOf(this), this.periode(), aktivitetslogg, EmptyLog).single() + MaksimumUtbetalingFilter().betal(listOf(this), this.periode(), aktivitetslogg, EmptyLog) + .single() } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/SykdomsgradfilterTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/SykdomsgradfilterTest.kt index d9360feea5..489be6d4c1 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/SykdomsgradfilterTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/SykdomsgradfilterTest.kt @@ -22,11 +22,13 @@ internal class SykdomsgradfilterTest { private lateinit var inspektør: UtbetalingstidslinjeInspektør private lateinit var aktivitetslogg: Aktivitetslogg - private val jurist = BehandlingSubsumsjonslogg(EmptyLog, listOf( + private val jurist = BehandlingSubsumsjonslogg( + EmptyLog, listOf( Subsumsjonskontekst(KontekstType.Fødselsnummer, "fnr"), Subsumsjonskontekst(KontekstType.Organisasjonsnummer, "orgnr"), Subsumsjonskontekst(KontekstType.Vedtaksperiode, "${UUID.randomUUID()}"), - )) + ) + ) @Test fun `sykdomsgrad over 20 prosent`() { @@ -124,18 +126,36 @@ internal class SykdomsgradfilterTest { @Test fun `avviser ikke andre ytelser`() { val tidslinjer = listOf( - tidslinjeOf(16.AP, 6.AVV(grad = 0, dekningsgrunnlag = 0, begrunnelse = Begrunnelse.AndreYtelserForeldrepenger)) + tidslinjeOf( + 16.AP, + 6.AVV( + grad = 0, + dekningsgrunnlag = 0, + begrunnelse = Begrunnelse.AndreYtelserForeldrepenger + ) + ) ) val periode = Periode(1.januar, 22.januar) undersøke(tidslinjer, periode) assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(6, inspektør.avvistDagTeller) - assertEquals(listOf(Begrunnelse.AndreYtelserForeldrepenger), inspektør.begrunnelse(17.januar)) + assertEquals( + listOf(Begrunnelse.AndreYtelserForeldrepenger), + inspektør.begrunnelse(17.januar) + ) } - private fun undersøke(tidslinjer: List, periode: Periode): List { + private fun undersøke( + tidslinjer: List, + periode: Periode + ): List { aktivitetslogg = Aktivitetslogg() - val resultat = Sykdomsgradfilter(MinimumSykdomsgradsvurdering()).filter(tidslinjer, periode, aktivitetslogg, jurist) + val resultat = Sykdomsgradfilter(MinimumSykdomsgradsvurdering()).filter( + tidslinjer, + periode, + aktivitetslogg, + jurist + ) inspektør = resultat.inspektør(0) return resultat } diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeBuilderTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeBuilderTest.kt index f1e6c5a00c..b1ea3c6775 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeBuilderTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeBuilderTest.kt @@ -56,14 +56,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(15, inspektør.size) assertEquals(15, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 15.januar, - arbeidsgiverperiode = listOf(1.januar til 15.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = false, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 15.januar, + arbeidsgiverperiode = listOf(1.januar til 15.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = false, + sisteDag = null + ), perioder.single() + ) } @Test @@ -73,15 +75,23 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(4, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(11, inspektør.arbeidsgiverperiodedagNavTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 15.januar, - arbeidsgiverperiode = listOf(1.januar til 15.januar), - utbetalingsperioder = listOf(1.januar til 5.januar, 8.januar til 12.januar, 15.januar.somPeriode()), - oppholdsperioder = emptyList(), - fullstendig = false, - sisteDag = null - ), perioder.single()) - assertTrue(perioder.first().somArbeidsgiverperiode().forventerInntekt(1.januar til 15.januar)) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 15.januar, + arbeidsgiverperiode = listOf(1.januar til 15.januar), + utbetalingsperioder = listOf( + 1.januar til 5.januar, + 8.januar til 12.januar, + 15.januar.somPeriode() + ), + oppholdsperioder = emptyList(), + fullstendig = false, + sisteDag = null + ), perioder.single() + ) + assertTrue( + perioder.first().somArbeidsgiverperiode().forventerInntekt(1.januar til 15.januar) + ) } @Test @@ -92,14 +102,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(11, inspektør.navDagTeller) assertEquals(4, inspektør.navHelgDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 31.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(17.januar til 31.januar), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 31.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(17.januar til 31.januar), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } @Test @@ -111,14 +123,20 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(11, inspektør.navDagTeller) assertEquals(4, inspektør.navHelgDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 31.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(1.januar til 5.januar, 8.januar til 12.januar, 15.januar til 31.januar), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 31.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf( + 1.januar til 5.januar, + 8.januar til 12.januar, + 15.januar til 31.januar + ), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) utbetalingstidslinje[1.januar].økonomi.inspektør.also { assertEquals(31000.månedlig, it.aktuellDagsinntekt) } @@ -132,14 +150,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(11, inspektør.navDagTeller) assertEquals(4, inspektør.navHelgDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 15.januar, - arbeidsgiverperiode = emptyList(), - utbetalingsperioder = listOf(1.januar til 15.januar), - oppholdsperioder = emptyList(), - fullstendig = false, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 15.januar, + arbeidsgiverperiode = emptyList(), + utbetalingsperioder = listOf(1.januar til 15.januar), + oppholdsperioder = emptyList(), + fullstendig = false, + sisteDag = null + ), perioder.single() + ) assertTrue(perioder.first().somArbeidsgiverperiode().fiktiv()) } @@ -152,14 +172,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(4, inspektør.navDagTeller) assertEquals(2, inspektør.navHelgDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 15.januar, - arbeidsgiverperiode = listOf(1.januar til 9.januar), - utbetalingsperioder = listOf(10.januar til 15.januar), - oppholdsperioder = emptyList(), - fullstendig = false, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 15.januar, + arbeidsgiverperiode = listOf(1.januar til 9.januar), + utbetalingsperioder = listOf(10.januar til 15.januar), + oppholdsperioder = emptyList(), + fullstendig = false, + sisteDag = null + ), perioder.single() + ) } @Test @@ -171,14 +193,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(11, inspektør.navDagTeller) assertEquals(4, inspektør.navHelgDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 15.januar, - arbeidsgiverperiode = emptyList(), - utbetalingsperioder = listOf(1.januar til 15.januar), - oppholdsperioder = emptyList(), - fullstendig = false, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 15.januar, + arbeidsgiverperiode = emptyList(), + utbetalingsperioder = listOf(1.januar til 15.januar), + oppholdsperioder = emptyList(), + fullstendig = false, + sisteDag = null + ), perioder.single() + ) assertTrue(perioder.first().somArbeidsgiverperiode().fiktiv()) } @@ -192,22 +216,26 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(1, inspektør.navHelgDagTeller) assertEquals(16, inspektør.arbeidsdagTeller) assertEquals(2, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 17.januar, - arbeidsgiverperiode = emptyList(), - utbetalingsperioder = listOf(1.januar.somPeriode()), - oppholdsperioder = listOf(2.januar til 17.januar), - fullstendig = false, - sisteDag = 17.januar - ), perioder.first()) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 18.januar til 3.februar, - arbeidsgiverperiode = listOf(18.januar til 2.februar), - utbetalingsperioder = listOf(3.februar.somPeriode()), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.last()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 17.januar, + arbeidsgiverperiode = emptyList(), + utbetalingsperioder = listOf(1.januar.somPeriode()), + oppholdsperioder = listOf(2.januar til 17.januar), + fullstendig = false, + sisteDag = 17.januar + ), perioder.first() + ) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 18.januar til 3.februar, + arbeidsgiverperiode = listOf(18.januar til 2.februar), + utbetalingsperioder = listOf(3.februar.somPeriode()), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.last() + ) assertTrue(perioder.first().somArbeidsgiverperiode().fiktiv()) } @@ -221,14 +249,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(5, inspektør.navHelgDagTeller) assertEquals(15, inspektør.arbeidsdagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 3.februar, - arbeidsgiverperiode = emptyList(), - utbetalingsperioder = listOf(1.januar.somPeriode(), 17.januar til 3.februar), - oppholdsperioder = listOf(2.januar til 16.januar), - fullstendig = false, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 3.februar, + arbeidsgiverperiode = emptyList(), + utbetalingsperioder = listOf(1.januar.somPeriode(), 17.januar til 3.februar), + oppholdsperioder = listOf(2.januar til 16.januar), + fullstendig = false, + sisteDag = null + ), perioder.single() + ) assertTrue(perioder.first().somArbeidsgiverperiode().fiktiv()) } @@ -240,14 +270,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(9, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(16, inspektør.navDagTeller) assertEquals(6, inspektør.navHelgDagTeller) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 1.februar, - arbeidsgiverperiode = listOf(1.januar til 9.januar), - utbetalingsperioder = listOf(11.januar til 1.februar), - oppholdsperioder = listOf(10.januar.somPeriode()), - fullstendig = false, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 1.februar, + arbeidsgiverperiode = listOf(1.januar til 9.januar), + utbetalingsperioder = listOf(11.januar til 1.februar), + oppholdsperioder = listOf(10.januar.somPeriode()), + fullstendig = false, + sisteDag = null + ), perioder.single() + ) } @Test @@ -300,50 +332,64 @@ internal class UtbetalingstidslinjeBuilderTest { fun `ferie etter arbeid etter fullført agp`() { undersøke(31.S + 4.A + 24.F) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 16.februar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(17.januar til 31.januar), - oppholdsperioder = listOf(1.februar til 16.februar), - fullstendig = true, - sisteDag = 16.februar - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 16.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(17.januar til 31.januar), + oppholdsperioder = listOf(1.februar til 16.februar), + fullstendig = true, + sisteDag = 16.februar + ), perioder.single() + ) } @Test fun `ferie og permisjon med i arbeidsgiverperioden`() { - undersøkeLike({ 6.S + 6.F + 6.S }, { 6.S + 6.P + 6.S }, { 6.S + 6.AIG + 6.S }, { 6.S + 6.YF + 6.S }) { + undersøkeLike( + { 6.S + 6.F + 6.S }, + { 6.S + 6.P + 6.S }, + { 6.S + 6.AIG + 6.S }, + { 6.S + 6.YF + 6.S }) { assertEquals(18, inspektør.size) assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(2, inspektør.navDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 18.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(17.januar til 18.januar), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 18.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(17.januar til 18.januar), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } } @Test fun `ferie og permisjon fullfører arbeidsgiverperioden`() { - undersøkeLike({ 1.S + 15.F + 6.S }, { 1.S + 15.P + 6.S }, { 1.S + 15.AIG + 6.S }, { 1.S + 15.YF + 6.S }) { + undersøkeLike( + { 1.S + 15.F + 6.S }, + { 1.S + 15.P + 6.S }, + { 1.S + 15.AIG + 6.S }, + { 1.S + 15.YF + 6.S }) { assertEquals(22, inspektør.size) assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(4, inspektør.navDagTeller) assertEquals(2, inspektør.navHelgDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 22.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(17.januar til 22.januar), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 22.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(17.januar til 22.januar), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } } @@ -357,14 +403,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(2, inspektør.navHelgDagTeller) assertEquals(1, inspektør.fridagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 22.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(18.januar til 22.januar), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 22.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(18.januar til 22.januar), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } @Test @@ -374,14 +422,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(15, inspektør.fridagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 31.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 31.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } } @@ -392,14 +442,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(15, inspektør.avvistDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 31.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 31.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } @Test @@ -409,14 +461,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(16, inspektør.avvistDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 11.februar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(2.februar til 11.februar), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 11.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(2.februar til 11.februar), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } @Test @@ -429,19 +483,24 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(15, inspektør.avvistDagTeller) assertEquals(1, inspektør.arbeidsdagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 11.februar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(2.februar til 11.februar), - oppholdsperioder = listOf(1.februar.somPeriode()), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 11.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(2.februar til 11.februar), + oppholdsperioder = listOf(1.februar.somPeriode()), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } @Test fun `ferie og permisjon umiddelbart etter utbetaling teller ikke som opphold hvis etterfølgt av arbeidsdag`() { - undersøkeLike({ 16.S + 15.F + 1.A + 10.S }, { 16.S + 15.P + 1.A + 10.S }, { 16.S + 15.AIG + 1.A + 10.S }) { + undersøkeLike( + { 16.S + 15.F + 1.A + 10.S }, + { 16.S + 15.P + 1.A + 10.S }, + { 16.S + 15.AIG + 1.A + 10.S }) { assertEquals(42, inspektør.size) assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(6, inspektør.navDagTeller) @@ -449,20 +508,25 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(15, inspektør.fridagTeller) assertEquals(1, inspektør.arbeidsdagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 11.februar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(2.februar til 11.februar), - oppholdsperioder = listOf(1.februar.somPeriode()), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 11.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(2.februar til 11.februar), + oppholdsperioder = listOf(1.februar.somPeriode()), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } } @Test fun `ferie og permisjon etter utbetaling teller ikke som opphold hvis etterfølgt av arbeidsdag`() { - undersøkeLike({ 17.S + 15.F + 1.A + 9.S }, { 17.S + 15.P + 1.A + 9.S }, { 17.S + 15.AIG + 1.A + 9.S }) { + undersøkeLike( + { 17.S + 15.F + 1.A + 9.S }, + { 17.S + 15.P + 1.A + 9.S }, + { 17.S + 15.AIG + 1.A + 9.S }) { assertEquals(42, inspektør.size) assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(6, inspektør.navDagTeller) @@ -470,14 +534,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(15, inspektør.fridagTeller) assertEquals(1, inspektør.arbeidsdagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 11.februar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(17.januar.somPeriode(), 3.februar til 11.februar), - oppholdsperioder = listOf(2.februar.somPeriode()), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 11.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(17.januar.somPeriode(), 3.februar til 11.februar), + oppholdsperioder = listOf(2.februar.somPeriode()), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } } @@ -489,14 +555,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(3, inspektør.navDagTeller) assertEquals(2, inspektør.navHelgDagTeller) assertEquals(10, inspektør.fridagTeller) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 31.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(27.januar til 31.januar), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 31.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(27.januar til 31.januar), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } } @@ -508,22 +576,26 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(15, inspektør.fridagTeller) assertEquals(1, inspektør.arbeidsdagTeller) assertEquals(2, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 17.januar, - arbeidsgiverperiode = listOf(1.januar.somPeriode()), - utbetalingsperioder = emptyList(), - oppholdsperioder = listOf(2.januar til 17.januar), - fullstendig = false, - sisteDag = 17.januar - ), perioder.first()) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 18.januar til 2.februar, - arbeidsgiverperiode = listOf(18.januar til 2.februar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.last()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 17.januar, + arbeidsgiverperiode = listOf(1.januar.somPeriode()), + utbetalingsperioder = emptyList(), + oppholdsperioder = listOf(2.januar til 17.januar), + fullstendig = false, + sisteDag = 17.januar + ), perioder.first() + ) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 18.januar til 2.februar, + arbeidsgiverperiode = listOf(18.januar til 2.februar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.last() + ) } } @@ -537,68 +609,84 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(12, inspektør.navDagTeller) assertEquals(4, inspektør.navHelgDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 2.februar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(18.januar til 2.februar), - oppholdsperioder = listOf(17.januar.somPeriode()), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 2.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(18.januar til 2.februar), + oppholdsperioder = listOf(17.januar.somPeriode()), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } } @Test fun `ferie og permisjon etter arbeidsdag tilbakestiller arbeidsgiverperioden`() { - undersøkeLike({ 1.S + 1.A + 15.F + 16.S }, { 1.S + 1.A + 15.P + 16.S }, { 1.S + 1.A + 15.AIG + 16.S }) { + undersøkeLike( + { 1.S + 1.A + 15.F + 16.S }, + { 1.S + 1.A + 15.P + 16.S }, + { 1.S + 1.A + 15.AIG + 16.S }) { assertEquals(33, inspektør.size) assertEquals(17, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(15, inspektør.fridagTeller) assertEquals(1, inspektør.arbeidsdagTeller) assertEquals(2, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 17.januar, - arbeidsgiverperiode = listOf(1.januar.somPeriode()), - utbetalingsperioder = emptyList(), - oppholdsperioder = listOf(2.januar til 17.januar), - fullstendig = false, - sisteDag = 17.januar - ), perioder.first()) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 18.januar til 2.februar, - arbeidsgiverperiode = listOf(18.januar til 2.februar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.last()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 17.januar, + arbeidsgiverperiode = listOf(1.januar.somPeriode()), + utbetalingsperioder = emptyList(), + oppholdsperioder = listOf(2.januar til 17.januar), + fullstendig = false, + sisteDag = 17.januar + ), perioder.first() + ) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 18.januar til 2.februar, + arbeidsgiverperiode = listOf(18.januar til 2.februar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.last() + ) } } @Test fun `ferie og permisjon etter frisk helg tilbakestiller arbeidsgiverperioden`() { - undersøkeLike({ 6.S + 1.A + 15.F + 16.S }, { 6.S + 1.A + 15.P + 16.S }, { 6.S + 1.A + 15.AIG + 16.S }) { + undersøkeLike( + { 6.S + 1.A + 15.F + 16.S }, + { 6.S + 1.A + 15.P + 16.S }, + { 6.S + 1.A + 15.AIG + 16.S }) { assertEquals(38, inspektør.size) assertEquals(22, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(15, inspektør.fridagTeller) assertEquals(1, inspektør.arbeidsdagTeller) assertEquals(2, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 22.januar, - arbeidsgiverperiode = listOf(1.januar til 6.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = listOf(7.januar til 22.januar), - fullstendig = false, - sisteDag = 22.januar - ), perioder.first()) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 23.januar til 7.februar, - arbeidsgiverperiode = listOf(23.januar til 7.februar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.last()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 22.januar, + arbeidsgiverperiode = listOf(1.januar til 6.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = listOf(7.januar til 22.januar), + fullstendig = false, + sisteDag = 22.januar + ), perioder.first() + ) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 23.januar til 7.februar, + arbeidsgiverperiode = listOf(23.januar til 7.februar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.last() + ) } } @@ -610,22 +698,26 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(15, inspektør.fridagTeller) assertEquals(1, inspektør.arbeidsdagTeller) assertEquals(2, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 21.januar, - arbeidsgiverperiode = listOf(1.januar til 5.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = listOf(6.januar til 21.januar), - fullstendig = false, - sisteDag = 21.januar - ), perioder.first()) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 22.januar til 6.februar, - arbeidsgiverperiode = listOf(22.januar til 6.februar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.last()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 21.januar, + arbeidsgiverperiode = listOf(1.januar til 5.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = listOf(6.januar til 21.januar), + fullstendig = false, + sisteDag = 21.januar + ), perioder.first() + ) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 22.januar til 6.februar, + arbeidsgiverperiode = listOf(22.januar til 6.februar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.last() + ) } } @@ -639,14 +731,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(12, inspektør.navDagTeller) assertEquals(4, inspektør.navHelgDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 6.februar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(22.januar til 6.februar), - oppholdsperioder = listOf(21.januar.somPeriode()), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 6.februar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(22.januar til 6.februar), + oppholdsperioder = listOf(21.januar.somPeriode()), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } } @@ -657,14 +751,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(15, inspektør.fridagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 16.januar til 31.januar, - arbeidsgiverperiode = listOf(16.januar til 31.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 16.januar til 31.januar, + arbeidsgiverperiode = listOf(16.januar til 31.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } } @@ -701,14 +797,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(4, inspektør.fridagTeller) assertEquals(1, inspektør.navDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 29.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(29.januar.somPeriode()), - oppholdsperioder = listOf(17.januar til 28.januar), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 29.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(29.januar.somPeriode()), + oppholdsperioder = listOf(17.januar til 28.januar), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } @Test @@ -725,14 +823,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(16, inspektør.size) assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 16.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 16.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } @Test @@ -742,14 +842,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(3, inspektør.foreldetDagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 19.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(17.januar til 19.januar), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 19.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(17.januar til 19.januar), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } @Test @@ -759,14 +861,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(8, inspektør.navDagTeller) assertEquals(2, inspektør.navHelgDagTeller) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 26.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = listOf(17.januar til 26.januar), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 26.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = listOf(17.januar til 26.januar), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } } @@ -777,14 +881,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(14, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(2, inspektør.arbeidsdagTeller) assertEquals(2, inspektør.fridagTeller) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 18.januar, - arbeidsgiverperiode = listOf(1.januar til 12.januar, 17.januar til 18.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = listOf(13.januar til 16.januar), - fullstendig = false, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 18.januar, + arbeidsgiverperiode = listOf(1.januar til 12.januar, 17.januar til 18.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = listOf(13.januar til 16.januar), + fullstendig = false, + sisteDag = null + ), perioder.single() + ) } @Test @@ -793,14 +899,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(17, inspektør.size) assertEquals(16, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(1, inspektør.avvistDagTeller) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 17.januar, - arbeidsgiverperiode = listOf(1.januar til 16.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 17.januar, + arbeidsgiverperiode = listOf(1.januar til 16.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } @Test @@ -811,14 +919,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(0, inspektør.avvistDagTeller) assertEquals(1, inspektør.navHelgDagTeller) assertEquals(3, inspektør.arbeidsdagTeller) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 4.januar til 20.januar, - arbeidsgiverperiode = listOf(4.januar til 19.januar), - utbetalingsperioder = listOf(20.januar.somPeriode()), - oppholdsperioder = emptyList(), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 4.januar til 20.januar, + arbeidsgiverperiode = listOf(4.januar til 19.januar), + utbetalingsperioder = listOf(20.januar.somPeriode()), + oppholdsperioder = emptyList(), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } @Test @@ -828,14 +938,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(14, inspektør.arbeidsgiverperiodeDagTeller) assertEquals(2, inspektør.arbeidsdagTeller) assertEquals(2, inspektør.fridagTeller) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 18.januar, - arbeidsgiverperiode = listOf(1.januar til 12.januar, 17.januar til 18.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = listOf(13.januar til 16.januar), - fullstendig = false, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 18.januar, + arbeidsgiverperiode = listOf(1.januar til 12.januar, 17.januar til 18.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = listOf(13.januar til 16.januar), + fullstendig = false, + sisteDag = null + ), perioder.single() + ) } @Test @@ -847,14 +959,16 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(15, inspektør.arbeidsdagTeller) assertEquals(0, inspektør.fridagTeller) assertEquals(1, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 1.februar, - arbeidsgiverperiode = listOf(1.januar til 10.januar, 26.januar til 31.januar), - utbetalingsperioder = listOf(1.februar.somPeriode()), - oppholdsperioder = listOf(11.januar til 25.januar), - fullstendig = true, - sisteDag = null - ), perioder.single()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 1.februar, + arbeidsgiverperiode = listOf(1.januar til 10.januar, 26.januar til 31.januar), + utbetalingsperioder = listOf(1.februar.somPeriode()), + oppholdsperioder = listOf(11.januar til 25.januar), + fullstendig = true, + sisteDag = null + ), perioder.single() + ) } @Test @@ -866,22 +980,26 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(16, inspektør.arbeidsdagTeller) assertEquals(0, inspektør.fridagTeller) assertEquals(2, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 26.januar, - arbeidsgiverperiode = listOf(1.januar til 10.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = listOf(11.januar til 26.januar), - fullstendig = false, - sisteDag = 26.januar - ), perioder.first()) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 27.januar til 2.februar, - arbeidsgiverperiode = listOf(27.januar til 2.februar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = false, - sisteDag = null - ), perioder.last()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 26.januar, + arbeidsgiverperiode = listOf(1.januar til 10.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = listOf(11.januar til 26.januar), + fullstendig = false, + sisteDag = 26.januar + ), perioder.first() + ) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 27.januar til 2.februar, + arbeidsgiverperiode = listOf(27.januar til 2.februar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = false, + sisteDag = null + ), perioder.last() + ) } @Test @@ -893,35 +1011,51 @@ internal class UtbetalingstidslinjeBuilderTest { assertEquals(31, inspektør.arbeidsdagTeller) assertEquals(0, inspektør.fridagTeller) assertEquals(2, perioder.size) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 1.januar til 26.januar, - arbeidsgiverperiode = listOf(1.januar til 10.januar), - utbetalingsperioder = emptyList(), - oppholdsperioder = listOf(11.januar til 26.januar), - fullstendig = false, - sisteDag = 26.januar - ), perioder.first()) - assertEquals(Arbeidsgiverperioderesultat( - omsluttendePeriode = 11.februar til 17.februar, - arbeidsgiverperiode = listOf(11.februar til 17.februar), - utbetalingsperioder = emptyList(), - oppholdsperioder = emptyList(), - fullstendig = false, - sisteDag = null - ), perioder.last()) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 1.januar til 26.januar, + arbeidsgiverperiode = listOf(1.januar til 10.januar), + utbetalingsperioder = emptyList(), + oppholdsperioder = listOf(11.januar til 26.januar), + fullstendig = false, + sisteDag = 26.januar + ), perioder.first() + ) + assertEquals( + Arbeidsgiverperioderesultat( + omsluttendePeriode = 11.februar til 17.februar, + arbeidsgiverperiode = listOf(11.februar til 17.februar), + utbetalingsperioder = emptyList(), + oppholdsperioder = emptyList(), + fullstendig = false, + sisteDag = null + ), perioder.last() + ) } @Test fun `avviser andre ytelser med riktige begrunnelser`() { undersøke(16.S + 1.YF + 1.YD + 1.YA + 1.YO + 1.YP + 1.YS + 1.YOL) assertEquals(7, inspektør.avvistDagTeller) - assertEquals(Begrunnelse.AndreYtelserForeldrepenger, inspektør.begrunnelse(17.januar).single()) + assertEquals( + Begrunnelse.AndreYtelserForeldrepenger, + inspektør.begrunnelse(17.januar).single() + ) assertEquals(Begrunnelse.AndreYtelserDagpenger, inspektør.begrunnelse(18.januar).single()) assertEquals(Begrunnelse.AndreYtelserAap, inspektør.begrunnelse(19.januar).single()) - assertEquals(Begrunnelse.AndreYtelserOmsorgspenger, inspektør.begrunnelse(20.januar).single()) + assertEquals( + Begrunnelse.AndreYtelserOmsorgspenger, + inspektør.begrunnelse(20.januar).single() + ) assertEquals(Begrunnelse.AndreYtelserPleiepenger, inspektør.begrunnelse(21.januar).single()) - assertEquals(Begrunnelse.AndreYtelserSvangerskapspenger, inspektør.begrunnelse(22.januar).single()) - assertEquals(Begrunnelse.AndreYtelserOpplaringspenger, inspektør.begrunnelse(23.januar).single()) + assertEquals( + Begrunnelse.AndreYtelserSvangerskapspenger, + inspektør.begrunnelse(22.januar).single() + ) + assertEquals( + Begrunnelse.AndreYtelserOpplaringspenger, + inspektør.begrunnelse(23.januar).single() + ) } private lateinit var teller: Arbeidsgiverperiodeteller @@ -935,9 +1069,13 @@ internal class UtbetalingstidslinjeBuilderTest { private lateinit var utbetalingstidslinje: Utbetalingstidslinje private val perioder: MutableList = mutableListOf() - private fun undersøke(tidslinje: Sykdomstidslinje, infotrygdBetalteDager: List = emptyList()) { + private fun undersøke( + tidslinje: Sykdomstidslinje, + infotrygdBetalteDager: List = emptyList() + ) { val arbeidsgiverperiodeberegner = Arbeidsgiverperiodeberegner(teller) - val arbeidsgiverperioder = arbeidsgiverperiodeberegner.resultat(tidslinje, infotrygdBetalteDager) + val arbeidsgiverperioder = + arbeidsgiverperiodeberegner.resultat(tidslinje, infotrygdBetalteDager) perioder.addAll(arbeidsgiverperioder) val builder = UtbetalingstidslinjeBuilderVedtaksperiode( @@ -946,10 +1084,16 @@ internal class UtbetalingstidslinjeBuilderTest { `6G` = Grunnbeløp.`6G`.beløp(1.januar), fastsattÅrsinntekt = 31000.månedlig, gjelder = 1.januar til LocalDate.MAX, - refusjonsopplysninger = Refusjonsopplysning(UUID.randomUUID(), 1.januar, null, 31000.månedlig).refusjonsopplysninger + refusjonsopplysninger = Refusjonsopplysning( + UUID.randomUUID(), + 1.januar, + null, + 31000.månedlig + ).refusjonsopplysninger ), regler = ArbeidsgiverRegler.Companion.NormalArbeidstaker, - arbeidsgiverperiode = arbeidsgiverperioder.flatMap { it.arbeidsgiverperiode }.grupperSammenhengendePerioder(), + arbeidsgiverperiode = arbeidsgiverperioder.flatMap { it.arbeidsgiverperiode } + .grupperSammenhengendePerioder(), refusjonstidslinje = Beløpstidslinje() ) diff --git a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeTest.kt b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeTest.kt index 491217f525..085a3301ec 100644 --- a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeTest.kt +++ b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/UtbetalingstidslinjeTest.kt @@ -25,9 +25,18 @@ internal class UtbetalingstidslinjeTest { @Test fun subsetting() { - assertEquals(1.januar til 5.januar, tidslinjeOf(5.NAV).subset(1.januar til 5.januar).periode()) - assertEquals(4.januar.somPeriode(), tidslinjeOf(5.NAV).subset(4.januar.somPeriode()).periode()) - assertEquals(1.januar til 5.januar, tidslinjeOf(5.NAV).subset(31.desember(2017) til 6.januar).periode()) + assertEquals( + 1.januar til 5.januar, + tidslinjeOf(5.NAV).subset(1.januar til 5.januar).periode() + ) + assertEquals( + 4.januar.somPeriode(), + tidslinjeOf(5.NAV).subset(4.januar.somPeriode()).periode() + ) + assertEquals( + 1.januar til 5.januar, + tidslinjeOf(5.NAV).subset(31.desember(2017) til 6.januar).periode() + ) assertTrue(tidslinjeOf(5.NAV).subset(6.januar til 6.januar).isEmpty()) } @@ -35,7 +44,10 @@ internal class UtbetalingstidslinjeTest { fun fraOgMed() { assertEquals(3.januar til 5.januar, tidslinjeOf(5.NAV).fraOgMed(3.januar).periode()) assertEquals(0, tidslinjeOf(5.NAV).fraOgMed(6.januar).size) - assertEquals(1.januar til 5.januar, tidslinjeOf(5.NAV).fraOgMed(31.desember(2017)).periode()) + assertEquals( + 1.januar til 5.januar, + tidslinjeOf(5.NAV).fraOgMed(31.desember(2017)).periode() + ) } @Test @@ -49,7 +61,10 @@ internal class UtbetalingstidslinjeTest { fun plus() { assertEquals(0, (tidslinjeOf() + tidslinjeOf()).size) assertEquals(1.januar til 5.januar, (tidslinjeOf() + tidslinjeOf(5.NAV)).periode()) - assertEquals(1.januar til 10.januar, (tidslinjeOf(3.NAV) + tidslinjeOf(5.NAV, startDato = 6.januar)).periode()) + assertEquals( + 1.januar til 10.januar, + (tidslinjeOf(3.NAV) + tidslinjeOf(5.NAV, startDato = 6.januar)).periode() + ) } @Test @@ -59,7 +74,10 @@ internal class UtbetalingstidslinjeTest { input.forEachIndexed { index, input -> assertNull(input[1.januar].økonomi.inspektør.arbeidsgiverbeløp) { "den uberegnede listen skal ikke modifiseres" } - assertEquals(1000, result[index][1.januar].økonomi.inspektør.arbeidsgiverbeløp?.dagligInt) + assertEquals( + 1000, + result[index][1.januar].økonomi.inspektør.arbeidsgiverbeløp?.dagligInt + ) } } @@ -67,9 +85,21 @@ internal class UtbetalingstidslinjeTest { fun `avviser perioder med flere begrunnelser`() { val periode = 1.januar til 5.januar tidslinjeOf(5.NAV).also { - val første = Utbetalingstidslinje.avvis(listOf(it), listOf(periode), listOf(Begrunnelse.MinimumSykdomsgrad)) - val andre = Utbetalingstidslinje.avvis(første, listOf(periode), listOf(Begrunnelse.EtterDødsdato)) - val tredje = Utbetalingstidslinje.avvis(andre, listOf(periode), listOf(Begrunnelse.ManglerMedlemskap)) + val første = Utbetalingstidslinje.avvis( + listOf(it), + listOf(periode), + listOf(Begrunnelse.MinimumSykdomsgrad) + ) + val andre = Utbetalingstidslinje.avvis( + første, + listOf(periode), + listOf(Begrunnelse.EtterDødsdato) + ) + val tredje = Utbetalingstidslinje.avvis( + andre, + listOf(periode), + listOf(Begrunnelse.ManglerMedlemskap) + ) periode.forEach { dato -> val dag = tredje.single()[dato] as AvvistDag assertEquals(3, dag.begrunnelser.size) @@ -79,18 +109,26 @@ internal class UtbetalingstidslinjeTest { @Test fun `samlet periode`() { - assertEquals(1.januar til 1.januar, Utbetalingstidslinje.periode(listOf(tidslinjeOf(1.NAV)))) - assertEquals(1.desember(2017) til 7.mars, Utbetalingstidslinje.periode(listOf( - tidslinjeOf(7.NAV), - tidslinjeOf(7.NAV, startDato = 1.mars), - tidslinjeOf(7.NAV, startDato = 1.desember(2017)), - ))) + assertEquals( + 1.januar til 1.januar, + Utbetalingstidslinje.periode(listOf(tidslinjeOf(1.NAV))) + ) + assertEquals( + 1.desember(2017) til 7.mars, Utbetalingstidslinje.periode( + listOf( + tidslinjeOf(7.NAV), + tidslinjeOf(7.NAV, startDato = 1.mars), + tidslinjeOf(7.NAV, startDato = 1.desember(2017)), + ) + ) + ) } @Test fun `total sykdomsgrad`() { val ag1 = tidslinjeOf(5.NAV(dekningsgrunnlag = 1000, grad = 50)) - val ag2 = tidslinjeOf(1.FRI(dekningsgrunnlag = 2000), 4.NAV(dekningsgrunnlag = 2000, grad = 100)) + val ag2 = + tidslinjeOf(1.FRI(dekningsgrunnlag = 2000), 4.NAV(dekningsgrunnlag = 2000, grad = 100)) val tidslinjer = listOf(ag1, ag2) val result = Utbetalingstidslinje.totalSykdomsgrad(tidslinjer) @@ -114,6 +152,7 @@ internal class UtbetalingstidslinjeTest { } } } + @Test fun `total sykdomsgrad med ukjent dag`() { val ag1 = tidslinjeOf(1.NAV(dekningsgrunnlag = 1000, grad = 50)) diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/Vilk\303\245rspr\303\270vdSkj\303\246ringstidspunktTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/Vilk\303\245rspr\303\270vdSkj\303\246ringstidspunktTest.kt" index d3a5fa3dbb..532de4c5ab 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/Vilk\303\245rspr\303\270vdSkj\303\246ringstidspunktTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/utbetalingstidslinje/Vilk\303\245rspr\303\270vdSkj\303\246ringstidspunktTest.kt" @@ -25,31 +25,47 @@ internal class VilkårsprøvdSkjæringstidspunktTest { skjæringstidspunkt = 1.januar, `6G` = Grunnbeløp.`6G`.beløp(1.januar), inntekter = listOf( - VilkårsprøvdSkjæringstidspunkt.FaktaavklartInntekt("a1", 1000.daglig, 1.januar til 31.januar, Refusjonsopplysning.Refusjonsopplysninger()), - VilkårsprøvdSkjæringstidspunkt.FaktaavklartInntekt("a2", 500.daglig, 25.januar til LocalDate.MAX, Refusjonsopplysning.Refusjonsopplysninger()), + VilkårsprøvdSkjæringstidspunkt.FaktaavklartInntekt( + "a1", + 1000.daglig, + 1.januar til 31.januar, + Refusjonsopplysning.Refusjonsopplysninger() + ), + VilkårsprøvdSkjæringstidspunkt.FaktaavklartInntekt( + "a2", + 500.daglig, + 25.januar til LocalDate.MAX, + Refusjonsopplysning.Refusjonsopplysninger() + ), ), tilkommendeInntekter = emptyList() ) - vilkårsgrunnlag.medGhostOgNyeInntekterUnderveis(mapOf( - "a1" to listOf(tidslinjeOf(16.AP, 8.NAV)) - )).also { result -> + vilkårsgrunnlag.medGhostOgNyeInntekterUnderveis( + mapOf( + "a1" to listOf(tidslinjeOf(16.AP, 8.NAV)) + ) + ).also { result -> assertEquals(1, result.size) assertEquals(24, result["a1"]?.size) } - vilkårsgrunnlag.medGhostOgNyeInntekterUnderveis(mapOf( - "a1" to listOf(tidslinjeOf(16.AP, 15.NAV)) - )).also { result -> + vilkårsgrunnlag.medGhostOgNyeInntekterUnderveis( + mapOf( + "a1" to listOf(tidslinjeOf(16.AP, 15.NAV)) + ) + ).also { result -> assertEquals(2, result.size) assertEquals(31, result["a1"]?.size) assertEquals(7, result["a2"]?.size) assertEquals(25.januar til 31.januar, result["a2"]?.periode()) } - vilkårsgrunnlag.medGhostOgNyeInntekterUnderveis(mapOf( - "a2" to listOf(tidslinjeOf(31.UTELATE, 28.NAV)) - )).also { result -> + vilkårsgrunnlag.medGhostOgNyeInntekterUnderveis( + mapOf( + "a2" to listOf(tidslinjeOf(31.UTELATE, 28.NAV)) + ) + ).also { result -> assertEquals(2, result.size) assertEquals(28, result["a1"]?.size) assertEquals(1.februar til 28.februar, result["a1"]?.periode()) @@ -64,20 +80,30 @@ internal class VilkårsprøvdSkjæringstidspunktTest { skjæringstidspunkt = 1.januar, `6G` = Grunnbeløp.`6G`.beløp(1.januar), inntekter = listOf( - VilkårsprøvdSkjæringstidspunkt.FaktaavklartInntekt("a1", 1000.daglig, 1.januar til 31.januar, Refusjonsopplysning.Refusjonsopplysninger()) + VilkårsprøvdSkjæringstidspunkt.FaktaavklartInntekt( + "a1", + 1000.daglig, + 1.januar til 31.januar, + Refusjonsopplysning.Refusjonsopplysninger() + ) ), tilkommendeInntekter = listOf( - VilkårsprøvdSkjæringstidspunkt.NyInntektUnderveis("a2", Arbeidsgiver oppgir 500.daglig hele januar) + VilkårsprøvdSkjæringstidspunkt.NyInntektUnderveis( + "a2", + Arbeidsgiver oppgir 500.daglig hele januar + ) ) ) - vilkårsgrunnlag.medGhostOgNyeInntekterUnderveis(mapOf( - "a1" to listOf(tidslinjeOf(16.AP, 8.NAV)) - )).also { result -> + vilkårsgrunnlag.medGhostOgNyeInntekterUnderveis( + mapOf( + "a1" to listOf(tidslinjeOf(16.AP, 8.NAV)) + ) + ).also { result -> assertEquals(2, result.size) assertEquals(24, result["a1"]?.size) assertEquals(24, result["a2"]?.size) assertEquals(1.januar til 24.januar, result["a2"]?.periode()) } } -} \ No newline at end of file +} 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 f750dcd54d..7cc6facbe8 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" @@ -54,8 +54,9 @@ internal class CreateØkonomiTest { fun `kan sette arbeidsgiverperiode`() { val data = sykdomstidslinjedag(79.5) createØkonomi(data).also { økonomi -> - assertDoesNotThrow { økonomi - .inntekt(1200.daglig, `6G` = `6G`.beløp(1.januar), refusjonsbeløp = 1200.daglig) + assertDoesNotThrow { + økonomi + .inntekt(1200.daglig, `6G` = `6G`.beløp(1.januar), refusjonsbeløp = 1200.daglig) } } } @@ -71,7 +72,13 @@ internal class CreateØkonomiTest { assertNull(økonomi.inspektør.arbeidsgiverbeløp) assertNull(økonomi.inspektør.personbeløp) // Indirect test of Økonomi state is HarLønn - assertThrows { økonomi.inntekt(1200.daglig, `6G` = `6G`.beløp(1.januar), refusjonsbeløp = 1200.daglig) } + assertThrows { + økonomi.inntekt( + 1200.daglig, + `6G` = `6G`.beløp(1.januar), + refusjonsbeløp = 1200.daglig + ) + } assertDoesNotThrow { listOf(økonomi).betal() } } } @@ -89,7 +96,13 @@ internal class CreateØkonomiTest { assertEquals(320.daglig, økonomi.inspektør.personbeløp) assertTrue(økonomi.er6GBegrenset()) // Indirect test of Økonomi state - assertThrows { økonomi.inntekt(1200.daglig, `6G` = `6G`.beløp(1.januar), refusjonsbeløp = 1200.daglig) } + assertThrows { + økonomi.inntekt( + 1200.daglig, + `6G` = `6G`.beløp(1.januar), + refusjonsbeløp = 1200.daglig + ) + } assertThrows { listOf(økonomi).betal() } } } @@ -121,16 +134,21 @@ internal class CreateØkonomiTest { tom = null ) - private fun sykdomstidslinjedag(grad: Double) = PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( - PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG, - PersonData.ArbeidsgiverData.SykdomstidslinjeData.KildeData("type", UUID.randomUUID(), 1.januar.atStartOfDay()), - grad, - null, - null, - null, - null, - 1.januar - ) + private fun sykdomstidslinjedag(grad: Double) = + PersonData.ArbeidsgiverData.SykdomstidslinjeData.DagData( + PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG, + PersonData.ArbeidsgiverData.SykdomstidslinjeData.KildeData( + "type", + UUID.randomUUID(), + 1.januar.atStartOfDay() + ), + grad, + null, + null, + null, + null, + 1.januar + ) private fun createØkonomi(dagData: UtbetalingstidslinjeData.UtbetalingsdagData): Økonomi { val dagtype = dagData.tilDto() diff --git "a/sykepenger-model/src/test/kotlin/no/nav/helse/\303\270konomi/\303\230konomiDagTest.kt" "b/sykepenger-model/src/test/kotlin/no/nav/helse/\303\270konomi/\303\230konomiDagTest.kt" index 800e41d815..bc5256aa89 100644 --- "a/sykepenger-model/src/test/kotlin/no/nav/helse/\303\270konomi/\303\230konomiDagTest.kt" +++ "b/sykepenger-model/src/test/kotlin/no/nav/helse/\303\270konomi/\303\230konomiDagTest.kt" @@ -69,7 +69,7 @@ internal class ØkonomiDagTest { val b1 = tidslinjeOf(1.NAV(inntekt, 50)) val (b) = listOf(b1).betal() assertØkonomi(b, 115.0, 0.0) - val c1 = tidslinjeOf(1.NAV(inntekt, refusjonsbeløp = inntekt/2)) + val c1 = tidslinjeOf(1.NAV(inntekt, refusjonsbeløp = inntekt / 2)) val (c) = listOf(c1).betal() assertØkonomi(c, 115.0, 116.0) } @@ -110,7 +110,8 @@ internal class ØkonomiDagTest { @Test fun `avvist dag endrer ikke på økonomi til navdag`() { - val økonomi = Økonomi.sykdomsgrad(100.prosent).inntekt(500.daglig, 500.daglig, `6G`= 600000.årlig, refusjonsbeløp = 500.daglig) + val økonomi = Økonomi.sykdomsgrad(100.prosent) + .inntekt(500.daglig, 500.daglig, `6G` = 600000.årlig, refusjonsbeløp = 500.daglig) val builderFør = Økonomitester() økonomi.builder(builderFør) @@ -144,7 +145,11 @@ internal class ØkonomiDagTest { fun `Beløp medNavDag som har blitt avvist`() { val a = tidslinjeOf(2.NAV(1200)) val b = tidslinjeOf(2.NAV(1200)) - val c = Utbetalingstidslinje.avvis(listOf(tidslinjeOf(2.NAV(1200))), listOf(januar), listOf(Begrunnelse.MinimumInntekt)).single() + val c = Utbetalingstidslinje.avvis( + listOf(tidslinjeOf(2.NAV(1200))), + listOf(januar), + listOf(Begrunnelse.MinimumInntekt) + ).single() val (a1, b1, c1) = listOf(a, b, c).betal() assertØkonomi(a, null, null) assertØkonomi(a1, 721.0, 0.0) @@ -165,7 +170,11 @@ internal class ØkonomiDagTest { assertØkonomi(c, 0.0) } - private fun assertØkonomi(tidslinje: Utbetalingstidslinje, arbeidsgiverbeløp: Double?, personbeløp: Double? = 0.0) { + private fun assertØkonomi( + tidslinje: Utbetalingstidslinje, + arbeidsgiverbeløp: Double?, + personbeløp: Double? = 0.0 + ) { tidslinje.forEach { assertEquals(arbeidsgiverbeløp?.daglig, it.økonomi.inspektør.arbeidsgiverbeløp) assertEquals(personbeløp?.daglig, it.økonomi.inspektør.personbeløp) @@ -173,7 +182,8 @@ internal class ØkonomiDagTest { } private fun List.betal(virkningsdato: LocalDate = 1.januar): List { - val periode = virkningsdato til virkningsdato // Brukes ikke når vi eksplisitt setter virkningsdato + val periode = + virkningsdato til virkningsdato // Brukes ikke når vi eksplisitt setter virkningsdato return MaksimumUtbetalingFilter().betal(this, periode, Aktivitetslogg(), EmptyLog) } } diff --git a/sykepenger-opprydding-dev/build.gradle.kts b/sykepenger-opprydding-dev/build.gradle.kts index 62751a2c25..eb884d1132 100644 --- a/sykepenger-opprydding-dev/build.gradle.kts +++ b/sykepenger-opprydding-dev/build.gradle.kts @@ -27,9 +27,10 @@ tasks.named("jar") { manifest { attributes["Main-Class"] = mainClass - attributes["Class-Path"] = configurations.runtimeClasspath.get().joinToString(separator = " ") { - it.name - } + attributes["Class-Path"] = + configurations.runtimeClasspath.get().joinToString(separator = " ") { + it.name + } } doLast { diff --git a/sykepenger-opprydding-dev/src/main/kotlin/no/nav/helse/opprydding/SlettPersonRiver.kt b/sykepenger-opprydding-dev/src/main/kotlin/no/nav/helse/opprydding/SlettPersonRiver.kt index e3f529f7ea..9f8b23119b 100644 --- a/sykepenger-opprydding-dev/src/main/kotlin/no/nav/helse/opprydding/SlettPersonRiver.kt +++ b/sykepenger-opprydding-dev/src/main/kotlin/no/nav/helse/opprydding/SlettPersonRiver.kt @@ -12,7 +12,7 @@ import org.slf4j.LoggerFactory internal class SlettPersonRiver( rapidsConnection: RapidsConnection, private val personRepository: PersonRepository -): River.PacketListener { +) : River.PacketListener { private companion object { private val sikkerlogg = LoggerFactory.getLogger("tjenestekall") @@ -27,7 +27,12 @@ internal class SlettPersonRiver( }.register(this) } - override fun onPacket(packet: JsonMessage, context: MessageContext, metadata: MessageMetadata, meterRegistry: MeterRegistry) { + override fun onPacket( + packet: JsonMessage, + context: MessageContext, + metadata: MessageMetadata, + meterRegistry: MeterRegistry + ) { val fødselsnummer = packet["fødselsnummer"].asText() sikkerlogg.info("Sletter person med fødselsnummer: $fødselsnummer") personRepository.slett(fødselsnummer) diff --git a/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/AppTest.kt b/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/AppTest.kt index ff8b3d31e8..623e574835 100644 --- a/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/AppTest.kt +++ b/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/AppTest.kt @@ -1,18 +1,18 @@ package no.nav.helse.opprydding +import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage +import com.github.navikt.tbd_libs.rapids_and_rivers.test_support.TestRapid import java.time.LocalDateTime import java.util.UUID import kotliquery.queryOf import kotliquery.sessionOf -import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage -import com.github.navikt.tbd_libs.rapids_and_rivers.test_support.TestRapid import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance @TestInstance(TestInstance.Lifecycle.PER_CLASS) -internal class AppTest: DBTest() { +internal class AppTest : DBTest() { private lateinit var testRapid: TestRapid private lateinit var personRepository: PersonRepository @@ -53,7 +53,8 @@ internal class AppTest: DBTest() { assertEquals("123", kvittering["fødselsnummer"].asText()) } - private fun slettemelding(fødselsnummer: String) = JsonMessage.newMessage("slett_person", mapOf("fødselsnummer" to fødselsnummer)).toJson() + private fun slettemelding(fødselsnummer: String) = + JsonMessage.newMessage("slett_person", mapOf("fødselsnummer" to fødselsnummer)).toJson() private fun opprettPerson(fødselsnummer: String) { opprettDummyPerson(fødselsnummer) @@ -63,13 +64,23 @@ internal class AppTest: DBTest() { private fun finnPerson(fødselsnummer: String): Int { return sessionOf(dataSource).use { session -> - session.run(queryOf("SELECT COUNT(1) FROM person WHERE fnr = ?", fødselsnummer.toLong()).map { it.int(1) }.asSingle) + session.run( + queryOf( + "SELECT COUNT(1) FROM person WHERE fnr = ?", + fødselsnummer.toLong() + ).map { it.int(1) }.asSingle + ) } ?: 0 } private fun finnMelding(fødselsnummer: String): Int { return sessionOf(dataSource).use { session -> - session.run(queryOf("SELECT COUNT(1) FROM melding WHERE fnr = ?", fødselsnummer.toLong()).map { it.int(1) }.asSingle) + session.run( + queryOf( + "SELECT COUNT(1) FROM melding WHERE fnr = ?", + fødselsnummer.toLong() + ).map { it.int(1) }.asSingle + ) } ?: 0 } @@ -79,7 +90,14 @@ internal class AppTest: DBTest() { val opprettMelding = "INSERT INTO melding(fnr, melding_id, melding_type, data, behandlet_tidspunkt) VALUES(?, ?, ?, ?::json, ?)" it.run( - queryOf(opprettMelding, fødselsnummer.toLong(), UUID.randomUUID(), "melding", "{}", LocalDateTime.now()).asUpdate + queryOf( + opprettMelding, + fødselsnummer.toLong(), + UUID.randomUUID(), + "melding", + "{}", + LocalDateTime.now() + ).asUpdate ) val opprettPerson = diff --git a/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/DBTest.kt b/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/DBTest.kt index 4d00bc125d..8bb1d069a6 100644 --- a/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/DBTest.kt +++ b/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/DBTest.kt @@ -9,6 +9,7 @@ import org.testcontainers.containers.PostgreSQLContainer internal abstract class DBTest { protected lateinit var dataSource: DataSource + companion object { private val psqlContainer = PostgreSQLContainer("postgres:15").apply { withCreateContainerCmdModifier { command -> command.withName("spleis-opprydding-dev") } @@ -48,4 +49,4 @@ internal abstract class DBTest { initializationFailTimeout = 5000 maxLifetime = 30001 } -} \ No newline at end of file +} diff --git a/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/PersonRepositoryTest.kt b/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/PersonRepositoryTest.kt index 7b8067d38a..bf7a63a257 100644 --- a/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/PersonRepositoryTest.kt +++ b/sykepenger-opprydding-dev/src/test/kotlin/no/nav/helse/opprydding/PersonRepositoryTest.kt @@ -15,7 +15,7 @@ import org.junit.jupiter.api.TestInstance import org.testcontainers.containers.PostgreSQLContainer @TestInstance(TestInstance.Lifecycle.PER_CLASS) -internal class PersonRepositoryTest: DBTest() { +internal class PersonRepositoryTest : DBTest() { private lateinit var personRepository: PersonRepository @@ -61,13 +61,23 @@ internal class PersonRepositoryTest: DBTest() { private fun finnPerson(fødselsnummer: String): Int { return sessionOf(dataSource).use { session -> - session.run(queryOf("SELECT COUNT(1) FROM person WHERE fnr = ?", fødselsnummer.toLong()).map { it.int(1) }.asSingle) + session.run( + queryOf( + "SELECT COUNT(1) FROM person WHERE fnr = ?", + fødselsnummer.toLong() + ).map { it.int(1) }.asSingle + ) } ?: 0 } private fun finnMelding(fødselsnummer: String): Int { return sessionOf(dataSource).use { session -> - session.run(queryOf("SELECT COUNT(1) FROM melding WHERE fnr = ?", fødselsnummer.toLong()).map { it.int(1) }.asSingle) + session.run( + queryOf( + "SELECT COUNT(1) FROM melding WHERE fnr = ?", + fødselsnummer.toLong() + ).map { it.int(1) }.asSingle + ) } ?: 0 } diff --git a/sykepenger-primitiver/src/main/kotlin/no/nav/helse/Dato.kt b/sykepenger-primitiver/src/main/kotlin/no/nav/helse/Dato.kt index 4c577cf630..d59d232701 100644 --- a/sykepenger-primitiver/src/main/kotlin/no/nav/helse/Dato.kt +++ b/sykepenger-primitiver/src/main/kotlin/no/nav/helse/Dato.kt @@ -35,10 +35,13 @@ class Ukedager(private val antallUkedager: Int) { // Et koordinat (x, y) i en 2D-tabell med w kolonner kan omgjøres til et punkt z i en 1D-tabell ved formelen z = f(x, y, w) = wx + y // https://support.claris.com/s/article/Calculating-a-Finish-Date-Given-a-Starting-Date-and-the-Number-of-Work-Days-1503692916564 private const val table = "01234012360125601456034562345612345" - private fun String.tilleggsdager(row: DayOfWeek, col: Int) = this[(row.value - 1) * 5 + col % 5].toString().toInt() + private fun String.tilleggsdager(row: DayOfWeek, col: Int) = + this[(row.value - 1) * 5 + col % 5].toString().toInt() } + private fun dager(dato: LocalDate) = antallUkedager / 5 * 7 + table.tilleggsdager(dato.dayOfWeek, antallUkedager) + operator fun plus(other: LocalDate): LocalDate = other.plusDays(dager(other).toLong()) } @@ -72,4 +75,5 @@ fun ukedager(fom: LocalDate, tom: LocalDate): Int { val justerSisteHelg = if (tom.dayOfWeek == SUNDAY) 1 else 0 return dagerMellom - heleHelger + justerFørsteHelg - justerSisteHelg } -fun ClosedRange.ukedager() = ukedager(start, endInclusive) \ No newline at end of file + +fun ClosedRange.ukedager() = ukedager(start, endInclusive) 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 b407e18674..a195c64bd3 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 @@ -4,11 +4,10 @@ import java.time.DayOfWeek.SATURDAY import java.time.DayOfWeek.SUNDAY import java.time.LocalDate import java.time.format.DateTimeFormatter +import no.nav.helse.dto.PeriodeDto import no.nav.helse.erRettFør import no.nav.helse.forrigeDag -import no.nav.helse.dto.PeriodeDto import no.nav.helse.nesteDag -import kotlin.collections.plus // Understands beginning and end of a time interval class Periode(fom: LocalDate, tom: LocalDate) : ClosedRange, Iterable { @@ -31,13 +30,18 @@ class Periode(fom: LocalDate, tom: LocalDate) : ClosedRange, Iterable fun List.slutterEtter(grense: LocalDate) = any { it.slutterEtter(grense) } - fun Iterable.periode() = if (!iterator().hasNext()) null else minOf { it.start } til maxOf { it.endInclusive } + fun Iterable.periode() = + if (!iterator().hasNext()) null else minOf { it.start } til maxOf { it.endInclusive } + fun Iterable.grupperSammenhengendePerioder() = map(LocalDate::somPeriode).merge( mergeKantIKant ) - fun Iterable.grupperSammenhengendePerioderMedHensynTilHelg() = map(LocalDate::somPeriode).merge( - mergeOverHelg - ) + + fun Iterable.grupperSammenhengendePerioderMedHensynTilHelg() = + map(LocalDate::somPeriode).merge( + mergeOverHelg + ) + fun List.grupperSammenhengendePerioder() = merge(mergeKantIKant) fun List.grupperSammenhengendePerioderMedHensynTilHelg() = merge(mergeOverHelg) @@ -55,13 +59,15 @@ class Periode(fom: LocalDate, tom: LocalDate) : ClosedRange, Iterable result.dropLast(1) + (result.lastOrNull()?.trim(trimperiode) ?: emptyList()) } - val Iterable.omsluttendePeriode get() = this.takeIf { it.iterator().hasNext() }?.let { min() til max() } + val Iterable.omsluttendePeriode + get() = this.takeIf { it.iterator().hasNext() }?.let { min() til max() } fun Iterable.periodeRettFør(dato: LocalDate): Periode? { val rettFør = sorted().lastOrNull { it.erRettFør(dato) } ?: return null - return grupperSammenhengendePerioderMedHensynTilHelg().single { rettFør in it }.let { periode -> - periode.subset(periode.start til rettFør) - } + return grupperSammenhengendePerioderMedHensynTilHelg().single { rettFør in it } + .let { periode -> + periode.subset(periode.start til rettFør) + } } private fun Iterable.merge(erForlengelse: (forrigeDag: LocalDate, nesteDag: LocalDate) -> Boolean = mergeKantIKant): List { @@ -181,7 +187,10 @@ class Periode(fom: LocalDate, tom: LocalDate) : ClosedRange, Iterable override fun hashCode() = start.hashCode() * 37 + endInclusive.hashCode() fun merge(other: Periode, erForlengelseStrategy: (LocalDate, LocalDate) -> Boolean): Periode { - if (this.overlapperMed(other) || erForlengelseStrategy(this.endInclusive, other.start) || erForlengelseStrategy(other.endInclusive, this.start)) { + if (this.overlapperMed(other) || erForlengelseStrategy( + this.endInclusive, + other.start + ) || erForlengelseStrategy(other.endInclusive, this.start)) { return this + other } return this diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/DeserializationException.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/DeserializationException.kt index bffa92b749..832020a967 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/DeserializationException.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/DeserializationException.kt @@ -1,3 +1,4 @@ package no.nav.helse.serde -class DeserializationException(message: String, cause: Throwable) : RuntimeException(message, cause) {} +class DeserializationException(message: String, cause: Throwable) : + RuntimeException(message, cause) {} diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/ObjectMappers.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/ObjectMappers.kt index a25935a3df..2790f417fe 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/ObjectMappers.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/ObjectMappers.kt @@ -10,6 +10,11 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper internal val serdeObjectMapper: ObjectMapper = jacksonObjectMapper() .registerModule(JavaTimeModule()) .registerModule(SimpleModule().addSerializer(SetSerializer(Set::class.java))) - .registerModule(SimpleModule().addDeserializer(Set::class.java, SetDeserializer(Set::class.java))) + .registerModule( + SimpleModule().addDeserializer( + Set::class.java, + SetDeserializer(Set::class.java) + ) + ) .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) \ No newline at end of file + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/PersonData.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/PersonData.kt index d5880f9b2a..5382b547a1 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/PersonData.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/PersonData.kt @@ -6,6 +6,7 @@ import java.time.LocalDateTime import java.time.Year import java.time.YearMonth import java.util.UUID +import kotlin.streams.asSequence import no.nav.helse.dto.AlderDto import no.nav.helse.dto.ArbeidsforholdDto import no.nav.helse.dto.ArbeidsgiverOpptjeningsgrunnlagDto @@ -81,7 +82,6 @@ import no.nav.helse.dto.deserialisering.ØkonomiInnDto import no.nav.helse.serde.PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.AvsenderData import no.nav.helse.serde.PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData.InntektsmeldingKildeDto import no.nav.helse.serde.mapping.JsonMedlemskapstatus -import kotlin.streams.asSequence data class PersonData( val fødselsnummer: String, @@ -102,7 +102,8 @@ data class PersonData( infotrygdhistorikk = InfotrygdhistorikkInnDto(this.infotrygdhistorikk.map { it.tilDto() }), vilkårsgrunnlagHistorikk = VilkårsgrunnlaghistorikkInnDto(vilkårsgrunnlagHistorikk.map { it.tilDto() }), minimumSykdomsgradVurdering = MinimumSykdomsgradVurderingInnDto( - perioder = minimumSykdomsgradVurdering?.map { PeriodeDto(it.fom, it.tom) } ?: emptyList() + perioder = minimumSykdomsgradVurdering?.map { PeriodeDto(it.fom, it.tom) } + ?: emptyList() ) ) @@ -222,6 +223,7 @@ data class PersonData( skjæringstidspunkt = this.skjæringstidspunkt, inntektsgrunnlag = inntektsgrunnlag.tilInfotrygdDto() ) + GrunnlagsdataType.Vilkårsprøving -> VilkårsgrunnlagInnDto.Spleis( vilkårsgrunnlagId = this.vilkårsgrunnlagId, skjæringstidspunkt = this.skjæringstidspunkt, @@ -248,10 +250,12 @@ data class PersonData( fun tilSpleisDto() = InntektsgrunnlagInnDto( arbeidsgiverInntektsopplysninger = this.arbeidsgiverInntektsopplysninger.map { it.tilDto() }, deaktiverteArbeidsforhold = this.deaktiverteArbeidsforhold.map { it.tilDto() }, - tilkommendeInntekter = this.tilkommendeInntekter?.map { it.tilDto() } ?: emptyList(), + tilkommendeInntekter = this.tilkommendeInntekter?.map { it.tilDto() } + ?: emptyList(), vurdertInfotrygd = this.vurdertInfotrygd, `6G` = InntektbeløpDto.Årlig(grunnbeløp!!) ) + fun tilInfotrygdDto() = InntektsgrunnlagInnDto( arbeidsgiverInntektsopplysninger = this.arbeidsgiverInntektsopplysninger.map { it.tilDto() }, deaktiverteArbeidsforhold = this.deaktiverteArbeidsforhold.map { it.tilDto() }, @@ -300,6 +304,7 @@ data class PersonData( PENSJON_ELLER_TRYGD, YTELSE_FRA_OFFENTLIGE } + fun tilDto() = SkatteopplysningDto( hendelseId = this.hendelseId, beløp = InntektbeløpDto.MånedligDouble(beløp = beløp), @@ -333,6 +338,7 @@ data class PersonData( Arbeidsgiver, AOrdningen } + fun tilDto() = when (kilde.let(Inntektsopplysningskilde::valueOf)) { Inntektsopplysningskilde.INFOTRYGD -> InntektsopplysningInnDto.InfotrygdDto( id = this.id, @@ -341,6 +347,7 @@ data class PersonData( beløp = InntektbeløpDto.MånedligDouble(beløp = beløp!!), tidsstempel = this.tidsstempel ) + Inntektsopplysningskilde.INNTEKTSMELDING -> InntektsopplysningInnDto.InntektsmeldingDto( id = this.id, hendelseId = this.hendelseId, @@ -351,15 +358,18 @@ data class PersonData( InntektsmeldingKildeDto.Arbeidsgiver -> InntektsopplysningInnDto.InntektsmeldingDto.KildeDto.Arbeidsgiver InntektsmeldingKildeDto.AOrdningen -> InntektsopplysningInnDto.InntektsmeldingDto.KildeDto.AOrdningen } - } ?: InntektsopplysningInnDto.InntektsmeldingDto.KildeDto.Arbeidsgiver, // todo: denne trenger ikke være nullable etter 20. oktober 2024.. + } + ?: InntektsopplysningInnDto.InntektsmeldingDto.KildeDto.Arbeidsgiver, // todo: denne trenger ikke være nullable etter 20. oktober 2024.. tidsstempel = this.tidsstempel ) + Inntektsopplysningskilde.IKKE_RAPPORTERT -> InntektsopplysningInnDto.IkkeRapportertDto( id = this.id, hendelseId = this.hendelseId, dato = this.dato, tidsstempel = this.tidsstempel ) + Inntektsopplysningskilde.SAKSBEHANDLER -> InntektsopplysningInnDto.SaksbehandlerDto( id = this.id, hendelseId = this.hendelseId, @@ -370,6 +380,7 @@ data class PersonData( forklaring = this.forklaring, subsumsjon = this.subsumsjon?.tilDto() ) + Inntektsopplysningskilde.SKJØNNSMESSIG_FASTSATT -> InntektsopplysningInnDto.SkjønnsmessigFastsattDto( id = this.id, hendelseId = this.hendelseId, @@ -378,6 +389,7 @@ data class PersonData( tidsstempel = this.tidsstempel, overstyrtInntekt = this.overstyrtInntektId!! ) + Inntektsopplysningskilde.SKATT_SYKEPENGEGRUNNLAG -> InntektsopplysningInnDto.SkattSykepengegrunnlagDto( id = this.id, hendelseId = this.hendelseId, @@ -386,6 +398,7 @@ data class PersonData( inntektsopplysninger = this.skatteopplysninger!!.map { it.tilDto() }, ansattPerioder = emptyList() ) + else -> error("Fant ${kilde}. Det er ugyldig for sykepengegrunnlag") } @@ -408,6 +421,7 @@ data class PersonData( arbeidsforhold = this.arbeidsforhold.map { it.tilDto() }, opptjeningsperiode = PeriodeDto(fom = this.opptjeningFom, tom = this.opptjeningTom) ) + data class ArbeidsgiverOpptjeningsgrunnlagData( val orgnummer: String, val ansattPerioder: List @@ -416,6 +430,7 @@ data class PersonData( orgnummer = this.orgnummer, ansattPerioder = this.ansattPerioder.map { it.tilDto() } ) + data class ArbeidsforholdData( val ansattFom: LocalDate, val ansattTom: LocalDate?, @@ -500,6 +515,7 @@ data class PersonData( data class PeriodeData(val fom: LocalDate, val tom: LocalDate) { fun tilDto() = PeriodeDto(fom = this.fom, tom = this.tom) } + data class SykdomstidslinjeData( val dager: List, val periode: PeriodeData?, @@ -522,7 +538,7 @@ data class PersonData( val dato: LocalDate? ) { init { - check (dato != null || (fom != null && tom != null)) { + check(dato != null || (fom != null && tom != null)) { "enten må dato være satt eller så må både fom og tom være satt" } } @@ -533,31 +549,124 @@ data class PersonData( val kilde = this.kilde.tilDto() return datoer.map { tilDto(it, kilde) } } + private fun tilDto(dagen: LocalDate, kilde: HendelseskildeDto) = when (type) { - JsonDagType.ARBEIDSDAG -> SykdomstidslinjeDagDto.ArbeidsdagDto(dato = dagen, kilde = kilde) + JsonDagType.ARBEIDSDAG -> SykdomstidslinjeDagDto.ArbeidsdagDto( + dato = dagen, + kilde = kilde + ) + JsonDagType.ARBEIDSGIVERDAG -> if (dagen.erHelg()) - SykdomstidslinjeDagDto.ArbeidsgiverHelgedagDto(dato = dagen, kilde = kilde, grad = ProsentdelDto(grad)) + SykdomstidslinjeDagDto.ArbeidsgiverHelgedagDto( + dato = dagen, + kilde = kilde, + grad = ProsentdelDto(grad) + ) else - SykdomstidslinjeDagDto.ArbeidsgiverdagDto(dato = dagen, kilde = kilde, grad = ProsentdelDto(grad)) - JsonDagType.FERIEDAG -> SykdomstidslinjeDagDto.FeriedagDto(dato = dagen, kilde = kilde) - JsonDagType.ARBEID_IKKE_GJENOPPTATT_DAG -> SykdomstidslinjeDagDto.ArbeidIkkeGjenopptattDagDto(dato = dagen, kilde = kilde) - JsonDagType.FRISK_HELGEDAG -> SykdomstidslinjeDagDto.FriskHelgedagDto(dato = dagen, kilde = kilde) - JsonDagType.FORELDET_SYKEDAG -> SykdomstidslinjeDagDto.ForeldetSykedagDto(dato = dagen, kilde = kilde, grad = ProsentdelDto(grad)) - JsonDagType.PERMISJONSDAG -> SykdomstidslinjeDagDto.PermisjonsdagDto(dato = dagen, kilde = kilde) - JsonDagType.PROBLEMDAG -> SykdomstidslinjeDagDto.ProblemDagDto(dato = dagen, kilde = kilde, other = this.other!!.tilDto(), melding = this.melding!!) + SykdomstidslinjeDagDto.ArbeidsgiverdagDto( + dato = dagen, + kilde = kilde, + grad = ProsentdelDto(grad) + ) + + JsonDagType.FERIEDAG -> SykdomstidslinjeDagDto.FeriedagDto( + dato = dagen, + kilde = kilde + ) + + JsonDagType.ARBEID_IKKE_GJENOPPTATT_DAG -> SykdomstidslinjeDagDto.ArbeidIkkeGjenopptattDagDto( + dato = dagen, + kilde = kilde + ) + + JsonDagType.FRISK_HELGEDAG -> SykdomstidslinjeDagDto.FriskHelgedagDto( + dato = dagen, + kilde = kilde + ) + + JsonDagType.FORELDET_SYKEDAG -> SykdomstidslinjeDagDto.ForeldetSykedagDto( + dato = dagen, + kilde = kilde, + grad = ProsentdelDto(grad) + ) + + JsonDagType.PERMISJONSDAG -> SykdomstidslinjeDagDto.PermisjonsdagDto( + dato = dagen, + kilde = kilde + ) + + JsonDagType.PROBLEMDAG -> SykdomstidslinjeDagDto.ProblemDagDto( + dato = dagen, + kilde = kilde, + other = this.other!!.tilDto(), + melding = this.melding!! + ) + JsonDagType.SYKEDAG -> if (dagen.erHelg()) - SykdomstidslinjeDagDto.SykHelgedagDto(dato = dagen, kilde = kilde, grad = ProsentdelDto(grad)) + SykdomstidslinjeDagDto.SykHelgedagDto( + dato = dagen, + kilde = kilde, + grad = ProsentdelDto(grad) + ) else - SykdomstidslinjeDagDto.SykedagDto(dato = dagen, kilde = kilde, grad = ProsentdelDto(grad)) - JsonDagType.SYKEDAG_NAV -> SykdomstidslinjeDagDto.SykedagNavDto(dato = dagen, kilde = kilde, grad = ProsentdelDto(grad)) - JsonDagType.ANDRE_YTELSER_FORELDREPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto(dato = dagen, kilde = kilde, SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Foreldrepenger) - JsonDagType.ANDRE_YTELSER_AAP -> SykdomstidslinjeDagDto.AndreYtelserDto(dato = dagen, kilde = kilde, ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.AAP) - JsonDagType.ANDRE_YTELSER_OMSORGSPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto(dato = dagen, kilde = kilde, ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Omsorgspenger) - JsonDagType.ANDRE_YTELSER_PLEIEPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto(dato = dagen, kilde = kilde, ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Pleiepenger) - JsonDagType.ANDRE_YTELSER_SVANGERSKAPSPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto(dato = dagen, kilde = kilde, ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Svangerskapspenger) - JsonDagType.ANDRE_YTELSER_OPPLÆRINGSPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto(dato = dagen, kilde = kilde, ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Opplæringspenger) - JsonDagType.ANDRE_YTELSER_DAGPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto(dato = dagen, kilde = kilde, ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Dagpenger) - JsonDagType.UKJENT_DAG -> SykdomstidslinjeDagDto.UkjentDagDto(dato = dagen, kilde = kilde) + SykdomstidslinjeDagDto.SykedagDto( + dato = dagen, + kilde = kilde, + grad = ProsentdelDto(grad) + ) + + JsonDagType.SYKEDAG_NAV -> SykdomstidslinjeDagDto.SykedagNavDto( + dato = dagen, + kilde = kilde, + grad = ProsentdelDto(grad) + ) + + JsonDagType.ANDRE_YTELSER_FORELDREPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto( + dato = dagen, + kilde = kilde, + SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Foreldrepenger + ) + + JsonDagType.ANDRE_YTELSER_AAP -> SykdomstidslinjeDagDto.AndreYtelserDto( + dato = dagen, + kilde = kilde, + ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.AAP + ) + + JsonDagType.ANDRE_YTELSER_OMSORGSPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto( + dato = dagen, + kilde = kilde, + ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Omsorgspenger + ) + + JsonDagType.ANDRE_YTELSER_PLEIEPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto( + dato = dagen, + kilde = kilde, + ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Pleiepenger + ) + + JsonDagType.ANDRE_YTELSER_SVANGERSKAPSPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto( + dato = dagen, + kilde = kilde, + ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Svangerskapspenger + ) + + JsonDagType.ANDRE_YTELSER_OPPLÆRINGSPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto( + dato = dagen, + kilde = kilde, + ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Opplæringspenger + ) + + JsonDagType.ANDRE_YTELSER_DAGPENGER -> SykdomstidslinjeDagDto.AndreYtelserDto( + dato = dagen, + kilde = kilde, + ytelse = SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.Dagpenger + ) + + JsonDagType.UKJENT_DAG -> SykdomstidslinjeDagDto.UkjentDagDto( + dato = dagen, + kilde = kilde + ) } } @@ -600,7 +709,8 @@ data class PersonData( data class ForkastetVedtaksperiodeData( val vedtaksperiode: VedtaksperiodeData ) { - fun tilDto() = ForkastetVedtaksperiodeInnDto(vedtaksperiode = this.vedtaksperiode.tilDto()) + fun tilDto() = + ForkastetVedtaksperiodeInnDto(vedtaksperiode = this.vedtaksperiode.tilDto()) } data class FeriepengeutbetalingData( @@ -646,21 +756,25 @@ data class PersonData( dato = dato, beløp = beløp ) + "InfotrygdArbeidsgiverDag" -> UtbetaltDagDto.InfotrygdArbeidsgiver( orgnummer = orgnummer, dato = dato, beløp = beløp ) + "SpleisArbeidsgiverDag" -> UtbetaltDagDto.SpleisArbeidsgiver( orgnummer = orgnummer, dato = dato, beløp = beløp ) + "SpleisPersonDag" -> UtbetaltDagDto.SpleisPerson( orgnummer = orgnummer, dato = dato, beløp = beløp ) + else -> error("Ukjent utbetaltdag-type: $type") } } @@ -730,9 +844,11 @@ data class PersonData( opprettet = opprettet, oppdatert = oppdatert ) + enum class MaksdatobestemmelseData { IKKE_VURDERT, ORDINÆR_RETT, BEGRENSET_RETT, SYTTI_ÅR } + data class MaksdatoresultatData( val vurdertTilOgMed: LocalDate, val bestemmelse: MaksdatobestemmelseData, @@ -763,6 +879,7 @@ data class PersonData( grunnlag = grunnlag.tilDto() ) } + data class DokumentsporingData( val dokumentId: UUID, val dokumenttype: DokumentTypeData @@ -786,6 +903,7 @@ data class PersonData( } ) } + enum class DokumentTypeData { Sykmelding, Søknad, @@ -831,12 +949,15 @@ data class PersonData( kilde = this.kilde.tilDto(), endringer = this.endringer.map { it.tilDto() }, ) + 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, ANNULLERT_PERIODE, TIL_INFOTRYGD } + enum class AvsenderData { SYKMELDT, ARBEIDSGIVER, SAKSBEHANDLER, SYSTEM; + fun tilDto() = when (this) { SYKMELDT -> AvsenderDto.SYKMELDT ARBEIDSGIVER -> AvsenderDto.ARBEIDSGIVER @@ -858,6 +979,7 @@ data class PersonData( avsender = this.avsender.tilDto() ) } + data class EndringData( val id: UUID, val tidsstempel: LocalDateTime, @@ -878,7 +1000,10 @@ data class PersonData( fun tilDto() = BehandlingendringInnDto( id = this.id, tidsstempel = this.tidsstempel, - sykmeldingsperiode = PeriodeDto(fom = sykmeldingsperiodeFom, tom = sykmeldingsperiodeTom), + sykmeldingsperiode = PeriodeDto( + fom = sykmeldingsperiodeFom, + tom = sykmeldingsperiodeTom + ), periode = PeriodeDto(fom = this.fom, tom = this.tom), vilkårsgrunnlagId = this.vilkårsgrunnlagId, utbetalingId = this.utbetalingId, @@ -892,6 +1017,7 @@ data class PersonData( ) } } + data class DataForSimuleringData( val totalbeløp: Int, val perioder: List @@ -1011,7 +1137,10 @@ data class PersonData( val beløp: Double, val endringsdato: LocalDate ) { - fun tilDto() = EndringIRefusjonDto(beløp = InntektbeløpDto.MånedligDouble(this.beløp), endringsdato = this.endringsdato) + fun tilDto() = EndringIRefusjonDto( + beløp = InntektbeløpDto.MånedligDouble(this.beløp), + endringsdato = this.endringsdato + ) } } } @@ -1065,6 +1194,7 @@ data class PersonData( ANNULLERT, FORKASTET } + fun tilDto() = UtbetalingInnDto( id = this.id, korrelasjonsId = this.korrelasjonsId, @@ -1134,6 +1264,7 @@ data class PersonData( val simuleringsResultat: ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData? ) { enum class OppdragstatusData { OVERFØRT, AKSEPTERT, AKSEPTERT_MED_FEIL, AVVIST, FEIL } + fun tilDto() = OppdragInnDto( mottaker = this.mottaker, fagområde = when (fagområde) { @@ -1295,7 +1426,11 @@ data class PersonData( beregningsgrunnlag = InntektbeløpDto.DagligDouble(this.beregningsgrunnlag), dekningsgrunnlag = InntektbeløpDto.DagligDouble(this.dekningsgrunnlag), grunnbeløpgrense = this.grunnbeløpgrense?.let { InntektbeløpDto.Årlig(it) }, - arbeidsgiverbeløp = this.arbeidsgiverbeløp?.let { InntektbeløpDto.DagligDouble(it) }, + arbeidsgiverbeløp = this.arbeidsgiverbeløp?.let { + InntektbeløpDto.DagligDouble( + it + ) + }, personbeløp = this.personbeløp?.let { InntektbeløpDto.DagligDouble(it) }, er6GBegrenset = this.er6GBegrenset ) @@ -1304,19 +1439,55 @@ data class PersonData( fun tilDto() = datoer.map { tilDto(it) } private fun tilDto(dato: LocalDate): UtbetalingsdagInnDto { return when (type) { - TypeData.ArbeidsgiverperiodeDag -> UtbetalingsdagInnDto.ArbeidsgiverperiodeDagDto(dato = dato, økonomi = økonomiDto) - TypeData.NavDag -> UtbetalingsdagInnDto.NavDagDto(dato = dato, økonomi = økonomiDto) - TypeData.NavHelgDag -> UtbetalingsdagInnDto.NavHelgDagDto(dato = dato, økonomi = økonomiDto) - TypeData.Arbeidsdag -> UtbetalingsdagInnDto.ArbeidsdagDto(dato = dato, økonomi = økonomiDto) - TypeData.Fridag -> UtbetalingsdagInnDto.FridagDto(dato = dato, økonomi = økonomiDto) - TypeData.AvvistDag -> UtbetalingsdagInnDto.AvvistDagDto(dato = dato, økonomi = økonomiDto, begrunnelser = begrunnelser!!.map { it.tilDto() }) - TypeData.UkjentDag -> UtbetalingsdagInnDto.UkjentDagDto(dato = dato, økonomi = økonomiDto) - TypeData.ForeldetDag -> UtbetalingsdagInnDto.ForeldetDagDto(dato = dato, økonomi = økonomiDto) - TypeData.ArbeidsgiverperiodedagNav -> UtbetalingsdagInnDto.ArbeidsgiverperiodeDagNavDto(dato = dato, økonomi = økonomiDto) + TypeData.ArbeidsgiverperiodeDag -> UtbetalingsdagInnDto.ArbeidsgiverperiodeDagDto( + dato = dato, + økonomi = økonomiDto + ) + + TypeData.NavDag -> UtbetalingsdagInnDto.NavDagDto( + dato = dato, + økonomi = økonomiDto + ) + + TypeData.NavHelgDag -> UtbetalingsdagInnDto.NavHelgDagDto( + dato = dato, + økonomi = økonomiDto + ) + + TypeData.Arbeidsdag -> UtbetalingsdagInnDto.ArbeidsdagDto( + dato = dato, + økonomi = økonomiDto + ) + + TypeData.Fridag -> UtbetalingsdagInnDto.FridagDto( + dato = dato, + økonomi = økonomiDto + ) + + TypeData.AvvistDag -> UtbetalingsdagInnDto.AvvistDagDto( + dato = dato, + økonomi = økonomiDto, + begrunnelser = begrunnelser!!.map { it.tilDto() }) + + TypeData.UkjentDag -> UtbetalingsdagInnDto.UkjentDagDto( + dato = dato, + økonomi = økonomiDto + ) + + TypeData.ForeldetDag -> UtbetalingsdagInnDto.ForeldetDagDto( + dato = dato, + økonomi = økonomiDto + ) + + TypeData.ArbeidsgiverperiodedagNav -> UtbetalingsdagInnDto.ArbeidsgiverperiodeDagNavDto( + dato = dato, + økonomi = økonomiDto + ) } } } } + data class BeløpstidslinjeData(val perioder: List) { fun tilDto() = BeløpstidslinjeDto(perioder.map { BeløpstidslinjeDto.BeløpstidslinjeperiodeDto( @@ -1332,7 +1503,15 @@ data class PersonData( }) } - data class BeløpstidslinjeperiodeData(val fom: LocalDate, val tom: LocalDate, val dagligBeløp: Double, val meldingsreferanseId: UUID, val avsender: AvsenderData, val tidsstempel: LocalDateTime) + + data class BeløpstidslinjeperiodeData( + val fom: LocalDate, + val tom: LocalDate, + val dagligBeløp: Double, + val meldingsreferanseId: UUID, + val avsender: AvsenderData, + val tidsstempel: LocalDateTime + ) } private fun LocalDate.erHelg() = dayOfWeek in setOf(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY) diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/PersonDataBuilder.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/PersonDataBuilder.kt index a05b92ae3b..ce7075e09f 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/PersonDataBuilder.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/PersonDataBuilder.kt @@ -68,6 +68,7 @@ fun PersonData.tilSerialisertPerson(pretty: Boolean = false): SerialisertPerson val node = serdeObjectMapper.valueToTree(this) return SerialisertPerson(if (pretty) node.toPrettyString() else node.toString()) } + fun PersonUtDto.tilPersonData() = PersonData( fødselsdato = this.alder.fødselsdato, fødselsnummer = this.fødselsnummer, @@ -75,7 +76,12 @@ fun PersonUtDto.tilPersonData() = PersonData( arbeidsgivere = this.arbeidsgivere.map { it.tilPersonData() }, infotrygdhistorikk = this.infotrygdhistorikk.elementer.map { it.tilPersonData() }, vilkårsgrunnlagHistorikk = vilkårsgrunnlagHistorikk.historikk.map { it.tilPersonData() }, - minimumSykdomsgradVurdering = minimumSykdomsgradVurdering.perioder.map { PersonData.MinimumSykdomsgradVurderingPeriodeData(it.fom, it.tom) }, + minimumSykdomsgradVurdering = minimumSykdomsgradVurdering.perioder.map { + PersonData.MinimumSykdomsgradVurderingPeriodeData( + it.fom, + it.tom + ) + }, dødsdato = this.alder.dødsdato, skjemaVersjon = SerialisertPerson.gjeldendeVersjon() ) @@ -94,17 +100,18 @@ private fun ArbeidsgiverUtDto.tilPersonData() = PersonData.ArbeidsgiverData( ubrukteRefusjonsopplysninger = this.ubrukteRefusjonsopplysninger.tilPersonData(), ) -private fun InntektsopplysningUtDto.InntektsmeldingDto.tilPersonData() = PersonData.ArbeidsgiverData.InntektsmeldingData( - id = this.id, - dato = this.dato, - hendelseId = this.hendelseId, - beløp = this.beløp.månedligDouble.beløp, - kilde = when (this.kilde) { - InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.Arbeidsgiver -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData.InntektsmeldingKildeDto.Arbeidsgiver - InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.AOrdningen -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData.InntektsmeldingKildeDto.AOrdningen - }, - tidsstempel = this.tidsstempel -) +private fun InntektsopplysningUtDto.InntektsmeldingDto.tilPersonData() = + PersonData.ArbeidsgiverData.InntektsmeldingData( + id = this.id, + dato = this.dato, + hendelseId = this.hendelseId, + beløp = this.beløp.månedligDouble.beløp, + kilde = when (this.kilde) { + InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.Arbeidsgiver -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData.InntektsmeldingKildeDto.Arbeidsgiver + InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.AOrdningen -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData.InntektsmeldingKildeDto.AOrdningen + }, + tidsstempel = this.tidsstempel + ) private fun SykdomshistorikkElementDto.tilPersonData() = PersonData.SykdomshistorikkData( id = this.id, @@ -113,9 +120,15 @@ private fun SykdomshistorikkElementDto.tilPersonData() = PersonData.Sykdomshisto hendelseSykdomstidslinje = this.hendelseSykdomstidslinje.tilPersonData(), beregnetSykdomstidslinje = this.beregnetSykdomstidslinje.tilPersonData(), ) + private fun SykdomstidslinjeDto.tilPersonData() = PersonData.ArbeidsgiverData.SykdomstidslinjeData( dager = dager.map { it.tilPersonData() }.forkortSykdomstidslinje(), - låstePerioder = this.låstePerioder.map { PersonData.ArbeidsgiverData.PeriodeData(it.fom, it.tom) }, + låstePerioder = this.låstePerioder.map { + PersonData.ArbeidsgiverData.PeriodeData( + it.fom, + it.tom + ) + }, periode = this.periode?.let { PersonData.ArbeidsgiverData.PeriodeData(it.fom, it.tom) } ) @@ -152,6 +165,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.AndreYtelserDto -> DagData( type = when (this.ytelse) { SykdomstidslinjeDagDto.AndreYtelserDto.YtelseDto.AAP -> PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ANDRE_YTELSER_AAP @@ -170,6 +184,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ArbeidIkkeGjenopptattDagDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEID_IKKE_GJENOPPTATT_DAG, kilde = this.kilde.tilPersonData(), @@ -180,6 +195,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ArbeidsdagDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEIDSDAG, kilde = this.kilde.tilPersonData(), @@ -190,6 +206,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ArbeidsgiverHelgedagDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEIDSGIVERDAG, kilde = this.kilde.tilPersonData(), @@ -200,6 +217,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ArbeidsgiverdagDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.ARBEIDSGIVERDAG, kilde = this.kilde.tilPersonData(), @@ -210,6 +228,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.FeriedagDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.FERIEDAG, kilde = this.kilde.tilPersonData(), @@ -220,6 +239,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ForeldetSykedagDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.FORELDET_SYKEDAG, kilde = this.kilde.tilPersonData(), @@ -230,6 +250,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.FriskHelgedagDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.FRISK_HELGEDAG, kilde = this.kilde.tilPersonData(), @@ -240,6 +261,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.PermisjonsdagDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.PERMISJONSDAG, kilde = this.kilde.tilPersonData(), @@ -250,6 +272,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.ProblemDagDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.PROBLEMDAG, kilde = this.kilde.tilPersonData(), @@ -260,6 +283,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.SykHelgedagDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG, kilde = this.kilde.tilPersonData(), @@ -270,6 +294,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.SykedagDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG, kilde = this.kilde.tilPersonData(), @@ -280,6 +305,7 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { fom = null, tom = null ) + is SykdomstidslinjeDagDto.SykedagNavDto -> DagData( type = PersonData.ArbeidsgiverData.SykdomstidslinjeData.JsonDagType.SYKEDAG_NAV, kilde = this.kilde.tilPersonData(), @@ -291,31 +317,44 @@ private fun SykdomstidslinjeDagDto.tilPersonData() = when (this) { tom = null ) } -private fun HendelseskildeDto.tilPersonData() = PersonData.ArbeidsgiverData.SykdomstidslinjeData.KildeData( - type = this.type, - id = this.meldingsreferanseId, - tidsstempel = this.tidsstempel -) + +private fun HendelseskildeDto.tilPersonData() = + PersonData.ArbeidsgiverData.SykdomstidslinjeData.KildeData( + type = this.type, + id = this.meldingsreferanseId, + tidsstempel = this.tidsstempel + ) + private fun RefusjonUtDto.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) }, + arbeidsgiverperioder = this.arbeidsgiverperioder.map { + PersonData.ArbeidsgiverData.PeriodeData( + it.fom, + it.tom + ) + }, beløp = this.beløp?.månedligDouble?.beløp, sisteRefusjonsdag = this.sisteRefusjonsdag, endringerIRefusjon = this.endringerIRefusjon.map { it.tilPersonData() }, tidsstempel = this.tidsstempel ) -private fun EndringIRefusjonDto.tilPersonData() = PersonData.ArbeidsgiverData.RefusjonData.EndringIRefusjonData( - beløp = this.beløp.beløp, - endringsdato = this.endringsdato -) + +private fun EndringIRefusjonDto.tilPersonData() = + PersonData.ArbeidsgiverData.RefusjonData.EndringIRefusjonData( + beløp = this.beløp.beløp, + endringsdato = this.endringsdato + ) private fun SykmeldingsperioderDto.tilPersonData() = perioder.map { PersonData.ArbeidsgiverData.SykmeldingsperiodeData(it.fom, it.tom) } -private fun ForkastetVedtaksperiodeUtDto.tilPersonData() = PersonData.ArbeidsgiverData.ForkastetVedtaksperiodeData( - vedtaksperiode = this.vedtaksperiode.tilPersonData() -) + +private fun ForkastetVedtaksperiodeUtDto.tilPersonData() = + PersonData.ArbeidsgiverData.ForkastetVedtaksperiodeData( + vedtaksperiode = this.vedtaksperiode.tilPersonData() + ) + private fun VedtaksperiodeUtDto.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData( id = id, tilstand = when (tilstand) { @@ -340,37 +379,46 @@ private fun VedtaksperiodeUtDto.tilPersonData() = PersonData.ArbeidsgiverData.Ve }, skjæringstidspunkt = skjæringstidspunkt, behandlinger = behandlinger.behandlinger.map { it.tilPersonData() }, - egenmeldingsperioder = egenmeldingsperioder.map { PersonData.ArbeidsgiverData.PeriodeData(it.fom, it.tom) }, + egenmeldingsperioder = egenmeldingsperioder.map { + PersonData.ArbeidsgiverData.PeriodeData( + it.fom, + it.tom + ) + }, opprettet = opprettet, oppdatert = oppdatert ) -private fun BehandlingUtDto.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData( - id = this.id, - tilstand = when (this.tilstand) { - BehandlingtilstandDto.ANNULLERT_PERIODE -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.ANNULLERT_PERIODE - BehandlingtilstandDto.AVSLUTTET_UTEN_VEDTAK -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.AVSLUTTET_UTEN_VEDTAK - BehandlingtilstandDto.BEREGNET -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.BEREGNET - BehandlingtilstandDto.BEREGNET_OMGJØRING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.BEREGNET_OMGJØRING - BehandlingtilstandDto.BEREGNET_REVURDERING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.BEREGNET_REVURDERING - BehandlingtilstandDto.REVURDERT_VEDTAK_AVVIST -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.REVURDERT_VEDTAK_AVVIST - BehandlingtilstandDto.TIL_INFOTRYGD -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.TIL_INFOTRYGD - BehandlingtilstandDto.UBEREGNET -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.UBEREGNET - BehandlingtilstandDto.UBEREGNET_OMGJØRING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.UBEREGNET_OMGJØRING - BehandlingtilstandDto.UBEREGNET_REVURDERING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.UBEREGNET_REVURDERING - BehandlingtilstandDto.VEDTAK_FATTET -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.VEDTAK_FATTET - BehandlingtilstandDto.VEDTAK_IVERKSATT -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.VEDTAK_IVERKSATT - }, - vedtakFattet = this.vedtakFattet, - avsluttet = this.avsluttet, - kilde = this.kilde.tilPersonData(), - endringer = this.endringer.map { it.tilPersonData() }, -) -private fun BehandlingkildeDto.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.KildeData( - meldingsreferanseId = this.meldingsreferanseId, - innsendt = this.innsendt, - registrert = this.registert, - avsender = this.avsender.tilPersonData() -) + +private fun BehandlingUtDto.tilPersonData() = + PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData( + id = this.id, + tilstand = when (this.tilstand) { + BehandlingtilstandDto.ANNULLERT_PERIODE -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.ANNULLERT_PERIODE + BehandlingtilstandDto.AVSLUTTET_UTEN_VEDTAK -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.AVSLUTTET_UTEN_VEDTAK + BehandlingtilstandDto.BEREGNET -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.BEREGNET + BehandlingtilstandDto.BEREGNET_OMGJØRING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.BEREGNET_OMGJØRING + BehandlingtilstandDto.BEREGNET_REVURDERING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.BEREGNET_REVURDERING + BehandlingtilstandDto.REVURDERT_VEDTAK_AVVIST -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.REVURDERT_VEDTAK_AVVIST + BehandlingtilstandDto.TIL_INFOTRYGD -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.TIL_INFOTRYGD + BehandlingtilstandDto.UBEREGNET -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.UBEREGNET + BehandlingtilstandDto.UBEREGNET_OMGJØRING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.UBEREGNET_OMGJØRING + BehandlingtilstandDto.UBEREGNET_REVURDERING -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.UBEREGNET_REVURDERING + BehandlingtilstandDto.VEDTAK_FATTET -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.VEDTAK_FATTET + BehandlingtilstandDto.VEDTAK_IVERKSATT -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.TilstandData.VEDTAK_IVERKSATT + }, + vedtakFattet = this.vedtakFattet, + avsluttet = this.avsluttet, + kilde = this.kilde.tilPersonData(), + endringer = this.endringer.map { it.tilPersonData() }, + ) + +private fun BehandlingkildeDto.tilPersonData() = + PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.KildeData( + meldingsreferanseId = this.meldingsreferanseId, + innsendt = this.innsendt, + registrert = this.registert, + avsender = this.avsender.tilPersonData() + ) private fun AvsenderDto.tilPersonData() = when (this) { AvsenderDto.ARBEIDSGIVER -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.AvsenderData.ARBEIDSGIVER @@ -378,58 +426,85 @@ private fun AvsenderDto.tilPersonData() = when (this) { AvsenderDto.SYKMELDT -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.AvsenderData.SYKMELDT AvsenderDto.SYSTEM -> PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.AvsenderData.SYSTEM } -private fun BehandlingendringUtDto.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.EndringData( - id = id, - tidsstempel = tidsstempel, - sykmeldingsperiodeFom = sykmeldingsperiode.fom, - sykmeldingsperiodeTom = sykmeldingsperiode.tom, - fom = periode.fom, - tom = periode.tom, - skjæringstidspunkt = skjæringstidspunkt, - utbetalingId = utbetalingId, - vilkårsgrunnlagId = vilkårsgrunnlagId, - sykdomstidslinje = sykdomstidslinje.tilPersonData(), - utbetalingstidslinje = utbetalingstidslinje.tilPersonData(), - refusjonstidslinje = refusjonstidslinje.tilPersonData(), - dokumentsporing = dokumentsporing.tilPersonData(), - arbeidsgiverperioder = arbeidsgiverperioder.map { PersonData.ArbeidsgiverData.PeriodeData(it.fom, it.tom) }, - maksdatoresultat = maksdatoresultat.tilPersonData() -) -private fun MaksdatoresultatUtDto.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData.MaksdatoresultatData( - vurdertTilOgMed = vurdertTilOgMed, - bestemmelse = when (bestemmelse) { - MaksdatobestemmelseDto.IKKE_VURDERT -> PersonData.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseData.IKKE_VURDERT - MaksdatobestemmelseDto.ORDINÆR_RETT -> PersonData.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseData.ORDINÆR_RETT - MaksdatobestemmelseDto.BEGRENSET_RETT -> PersonData.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseData.BEGRENSET_RETT - MaksdatobestemmelseDto.SYTTI_ÅR -> PersonData.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseData.SYTTI_ÅR - }, - startdatoTreårsvindu = startdatoTreårsvindu, - startdatoSykepengerettighet = startdatoSykepengerettighet, - forbrukteDager = forbrukteDager.map { PersonData.ArbeidsgiverData.PeriodeData(it.fom, it.tom) }, - oppholdsdager = oppholdsdager.map { PersonData.ArbeidsgiverData.PeriodeData(it.fom, it.tom) }, - avslåtteDager = avslåtteDager.map { PersonData.ArbeidsgiverData.PeriodeData(it.fom, it.tom) }, - maksdato = maksdato, - gjenståendeDager = gjenståendeDager, - grunnlag = grunnlag.tilPersonData() -) -private fun DokumentsporingDto.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentsporingData( - dokumentId = this.id, - dokumenttype = when (type) { - DokumenttypeDto.InntektsmeldingDager -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.InntektsmeldingDager - DokumenttypeDto.InntektsmeldingInntekt -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.InntektsmeldingInntekt - DokumenttypeDto.InntektsmeldingRefusjon -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.InntektsmeldingRefusjon - DokumenttypeDto.InntektFraAOrdningen -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.InntektFraAOrdningen - DokumenttypeDto.OverstyrArbeidsforhold -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrArbeidsforhold - DokumenttypeDto.OverstyrArbeidsgiveropplysninger -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrArbeidsgiveropplysninger - DokumenttypeDto.OverstyrInntekt -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrInntekt - DokumenttypeDto.OverstyrRefusjon -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrRefusjon - DokumenttypeDto.OverstyrTidslinje -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrTidslinje - DokumenttypeDto.SkjønnsmessigFastsettelse -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.SkjønnsmessigFastsettelse - DokumenttypeDto.Sykmelding -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.Sykmelding - DokumenttypeDto.Søknad -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.Søknad - DokumenttypeDto.AndreYtelser -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.AndreYtelser - } -) + +private fun BehandlingendringUtDto.tilPersonData() = + PersonData.ArbeidsgiverData.VedtaksperiodeData.BehandlingData.EndringData( + id = id, + tidsstempel = tidsstempel, + sykmeldingsperiodeFom = sykmeldingsperiode.fom, + sykmeldingsperiodeTom = sykmeldingsperiode.tom, + fom = periode.fom, + tom = periode.tom, + skjæringstidspunkt = skjæringstidspunkt, + utbetalingId = utbetalingId, + vilkårsgrunnlagId = vilkårsgrunnlagId, + sykdomstidslinje = sykdomstidslinje.tilPersonData(), + utbetalingstidslinje = utbetalingstidslinje.tilPersonData(), + refusjonstidslinje = refusjonstidslinje.tilPersonData(), + dokumentsporing = dokumentsporing.tilPersonData(), + arbeidsgiverperioder = arbeidsgiverperioder.map { + PersonData.ArbeidsgiverData.PeriodeData( + it.fom, + it.tom + ) + }, + maksdatoresultat = maksdatoresultat.tilPersonData() + ) + +private fun MaksdatoresultatUtDto.tilPersonData() = + PersonData.ArbeidsgiverData.VedtaksperiodeData.MaksdatoresultatData( + vurdertTilOgMed = vurdertTilOgMed, + bestemmelse = when (bestemmelse) { + MaksdatobestemmelseDto.IKKE_VURDERT -> PersonData.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseData.IKKE_VURDERT + MaksdatobestemmelseDto.ORDINÆR_RETT -> PersonData.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseData.ORDINÆR_RETT + MaksdatobestemmelseDto.BEGRENSET_RETT -> PersonData.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseData.BEGRENSET_RETT + MaksdatobestemmelseDto.SYTTI_ÅR -> PersonData.ArbeidsgiverData.VedtaksperiodeData.MaksdatobestemmelseData.SYTTI_ÅR + }, + startdatoTreårsvindu = startdatoTreårsvindu, + startdatoSykepengerettighet = startdatoSykepengerettighet, + forbrukteDager = forbrukteDager.map { + PersonData.ArbeidsgiverData.PeriodeData( + it.fom, + it.tom + ) + }, + oppholdsdager = oppholdsdager.map { + PersonData.ArbeidsgiverData.PeriodeData( + it.fom, + it.tom + ) + }, + avslåtteDager = avslåtteDager.map { + PersonData.ArbeidsgiverData.PeriodeData( + it.fom, + it.tom + ) + }, + maksdato = maksdato, + gjenståendeDager = gjenståendeDager, + grunnlag = grunnlag.tilPersonData() + ) + +private fun DokumentsporingDto.tilPersonData() = + PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentsporingData( + dokumentId = this.id, + dokumenttype = when (type) { + DokumenttypeDto.InntektsmeldingDager -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.InntektsmeldingDager + DokumenttypeDto.InntektsmeldingInntekt -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.InntektsmeldingInntekt + DokumenttypeDto.InntektsmeldingRefusjon -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.InntektsmeldingRefusjon + DokumenttypeDto.InntektFraAOrdningen -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.InntektFraAOrdningen + DokumenttypeDto.OverstyrArbeidsforhold -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrArbeidsforhold + DokumenttypeDto.OverstyrArbeidsgiveropplysninger -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrArbeidsgiveropplysninger + DokumenttypeDto.OverstyrInntekt -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrInntekt + DokumenttypeDto.OverstyrRefusjon -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrRefusjon + DokumenttypeDto.OverstyrTidslinje -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.OverstyrTidslinje + DokumenttypeDto.SkjønnsmessigFastsettelse -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.SkjønnsmessigFastsettelse + DokumenttypeDto.Sykmelding -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.Sykmelding + DokumenttypeDto.Søknad -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.Søknad + DokumenttypeDto.AndreYtelser -> PersonData.ArbeidsgiverData.VedtaksperiodeData.DokumentTypeData.AndreYtelser + } + ) + private fun UtbetalingUtDto.tilPersonData() = PersonData.UtbetalingData( id = this.id, korrelasjonsId = this.korrelasjonsId, @@ -467,6 +542,7 @@ private fun UtbetalingUtDto.tilPersonData() = PersonData.UtbetalingData( avsluttet = avsluttet, oppdatert = oppdatert ) + private fun UtbetalingstidslinjeUtDto.tilPersonData() = PersonData.UtbetalingstidslinjeData( dager = this.dager.map { it.tilPersonData() }.forkortUtbetalingstidslinje() ) @@ -490,7 +566,8 @@ private fun UtbetalingsdagData.utvideMed(other: UtbetalingsdagData): Utbetalings private fun UtbetalingsdagData.kanUtvidesMed(other: UtbetalingsdagData): Boolean { // alle verdier må være like (untatt datoene) - val utenDatoer = { dag: UtbetalingsdagData -> dag.copy(fom = null, tom = null, dato = LocalDate.EPOCH) } + val utenDatoer = + { dag: UtbetalingsdagData -> dag.copy(fom = null, tom = null, dato = LocalDate.EPOCH) } return utenDatoer(this) == utenDatoer(other) && (dato ?: tom!!).plusDays(1) == other.dato } @@ -553,6 +630,7 @@ private fun UtbetalingVurderingDto.tilPersonData() = PersonData.UtbetalingData.V tidspunkt = tidspunkt, automatiskBehandling = automatiskBehandling ) + private fun OppdragUtDto.tilPersonData() = PersonData.OppdragData( mottaker = this.mottaker, fagområde = when (this.fagområde) { @@ -577,11 +655,13 @@ private fun OppdragUtDto.tilPersonData() = PersonData.OppdragData( erSimulert = this.erSimulert, simuleringsResultat = this.simuleringsResultat?.tilPersonData() ) + private fun EndringskodeDto.tilPersonData() = when (this) { EndringskodeDto.ENDR -> "ENDR" EndringskodeDto.NY -> "NY" EndringskodeDto.UEND -> "UEND" } + private fun UtbetalingslinjeUtDto.tilPersonData() = PersonData.UtbetalingslinjeData( fom = this.fom, tom = this.tom, @@ -598,53 +678,57 @@ private fun UtbetalingslinjeUtDto.tilPersonData() = PersonData.UtbetalingslinjeD klassekode = this.klassekode.tilPersonData(), datoStatusFom = this.datoStatusFom ) + private fun KlassekodeDto.tilPersonData() = when (this) { KlassekodeDto.RefusjonFeriepengerIkkeOpplysningspliktig -> "SPREFAGFER-IOP" KlassekodeDto.RefusjonIkkeOpplysningspliktig -> "SPREFAG-IOP" KlassekodeDto.SykepengerArbeidstakerFeriepenger -> "SPATFER" KlassekodeDto.SykepengerArbeidstakerOrdinær -> "SPATORD" } -private fun SimuleringResultatDto.tilPersonData() = PersonData.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData( - totalbeløp = this.totalbeløp, - perioder = this.perioder.map { - PersonData.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData.SimulertPeriode( - fom = it.fom, - tom = it.tom, - 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.fom, - tom = it.tom, - 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 SimuleringResultatDto.tilPersonData() = + PersonData.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData( + totalbeløp = this.totalbeløp, + perioder = this.perioder.map { + PersonData.ArbeidsgiverData.VedtaksperiodeData.DataForSimuleringData.SimulertPeriode( + fom = it.fom, + tom = it.tom, + + 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.fom, + tom = it.tom, + 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 FeriepengeUtDto.tilPersonData() = PersonData.ArbeidsgiverData.FeriepengeutbetalingData( infotrygdFeriepengebeløpPerson = this.infotrygdFeriepengebeløpPerson, infotrygdFeriepengebeløpArbeidsgiver = this.infotrygdFeriepengebeløpArbeidsgiver, @@ -659,59 +743,73 @@ private fun FeriepengeUtDto.tilPersonData() = PersonData.ArbeidsgiverData.Feriep sendTilOppdrag = sendTilOppdrag, sendPersonoppdragTilOS = sendPersonoppdragTilOS ) -private fun UtbetaltDagDto.tilPersonData() = PersonData.ArbeidsgiverData.FeriepengeutbetalingData.UtbetaltDagData( - type = when (this) { - is UtbetaltDagDto.InfotrygdArbeidsgiver -> "InfotrygdArbeidsgiverDag" - is UtbetaltDagDto.InfotrygdPerson -> "InfotrygdPersonDag" - is UtbetaltDagDto.SpleisArbeidsgiver -> "SpleisArbeidsgiverDag" - is UtbetaltDagDto.SpleisPerson -> "SpleisPersonDag" - }, - orgnummer = orgnummer, - dato = dato, - beløp = beløp -) -private fun InfotrygdhistorikkelementUtDto.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 InfotrygdFerieperiodeDto.tilPersonData() = PersonData.InfotrygdhistorikkElementData.FerieperiodeData( - fom = this.periode.fom, - tom = this.periode.tom -) -private fun InfotrygdArbeidsgiverutbetalingsperiodeUtDto.tilPersonData() = PersonData.InfotrygdhistorikkElementData.ArbeidsgiverutbetalingsperiodeData( - orgnr = this.orgnr, - fom = this.periode.fom, - tom = this.periode.tom, - grad = this.grad.prosent, - inntekt = this.inntekt.dagligInt.beløp -) -private fun InfotrygdPersonutbetalingsperiodeUtDto.tilPersonData() = PersonData.InfotrygdhistorikkElementData.PersonutbetalingsperiodeData( - orgnr = this.orgnr, - fom = this.periode.fom, - tom = this.periode.tom, - grad = this.grad.prosent, - inntekt = this.inntekt.dagligInt.beløp -) -private fun InfotrygdInntektsopplysningUtDto.tilPersonData() = PersonData.InfotrygdhistorikkElementData.InntektsopplysningData( - orgnr = this.orgnummer, - sykepengerFom = this.sykepengerFom, - inntekt = this.inntekt.månedligDouble.beløp, - refusjonTilArbeidsgiver = refusjonTilArbeidsgiver, - refusjonTom = refusjonTom, - lagret = lagret -) + +private fun UtbetaltDagDto.tilPersonData() = + PersonData.ArbeidsgiverData.FeriepengeutbetalingData.UtbetaltDagData( + type = when (this) { + is UtbetaltDagDto.InfotrygdArbeidsgiver -> "InfotrygdArbeidsgiverDag" + is UtbetaltDagDto.InfotrygdPerson -> "InfotrygdPersonDag" + is UtbetaltDagDto.SpleisArbeidsgiver -> "SpleisArbeidsgiverDag" + is UtbetaltDagDto.SpleisPerson -> "SpleisPersonDag" + }, + orgnummer = orgnummer, + dato = dato, + beløp = beløp + ) + +private fun InfotrygdhistorikkelementUtDto.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 InfotrygdFerieperiodeDto.tilPersonData() = + PersonData.InfotrygdhistorikkElementData.FerieperiodeData( + fom = this.periode.fom, + tom = this.periode.tom + ) + +private fun InfotrygdArbeidsgiverutbetalingsperiodeUtDto.tilPersonData() = + PersonData.InfotrygdhistorikkElementData.ArbeidsgiverutbetalingsperiodeData( + orgnr = this.orgnr, + fom = this.periode.fom, + tom = this.periode.tom, + grad = this.grad.prosent, + inntekt = this.inntekt.dagligInt.beløp + ) + +private fun InfotrygdPersonutbetalingsperiodeUtDto.tilPersonData() = + PersonData.InfotrygdhistorikkElementData.PersonutbetalingsperiodeData( + orgnr = this.orgnr, + fom = this.periode.fom, + tom = this.periode.tom, + grad = this.grad.prosent, + inntekt = this.inntekt.dagligInt.beløp + ) + +private fun InfotrygdInntektsopplysningUtDto.tilPersonData() = + PersonData.InfotrygdhistorikkElementData.InntektsopplysningData( + orgnr = this.orgnummer, + sykepengerFom = this.sykepengerFom, + inntekt = this.inntekt.månedligDouble.beløp, + refusjonTilArbeidsgiver = refusjonTilArbeidsgiver, + refusjonTom = refusjonTom, + lagret = lagret + ) + private fun VilkårsgrunnlagInnslagUtDto.tilPersonData() = PersonData.VilkårsgrunnlagInnslagData( id = this.id, opprettet = this.opprettet, vilkårsgrunnlag = this.vilkårsgrunnlag.map { it.tilPersonData() } ) + private fun VilkårsgrunnlagUtDto.tilPersonData() = PersonData.VilkårsgrunnlagElementData( skjæringstidspunkt = this.skjæringstidspunkt, type = when (this) { @@ -730,6 +828,7 @@ private fun VilkårsgrunnlagUtDto.tilPersonData() = PersonData.VilkårsgrunnlagE MedlemskapsvurderingDto.UavklartMedBrukerspørsmål -> JsonMedlemskapstatus.UAVKLART_MED_BRUKERSPØRSMÅL MedlemskapsvurderingDto.VetIkke -> JsonMedlemskapstatus.VET_IKKE } + else -> null }, vurdertOk = when (this) { @@ -759,90 +858,99 @@ private fun OpptjeningUtDto.tilPersonData() = PersonData.VilkårsgrunnlagElement ) } ) -private fun InntektsgrunnlagUtDto.tilPersonData() = PersonData.VilkårsgrunnlagElementData.InntektsgrunnlagData( - grunnbeløp = this.`6G`.årlig.beløp, - arbeidsgiverInntektsopplysninger = this.arbeidsgiverInntektsopplysninger.map { it.tilPersonData() }, - deaktiverteArbeidsforhold = this.deaktiverteArbeidsforhold.map { it.tilPersonData() }, - tilkommendeInntekter = this.tilkommendeInntekter.map { it.tilPersonData() }, - vurdertInfotrygd = this.vurdertInfotrygd -) - -private fun ArbeidsgiverInntektsopplysningUtDto.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 NyInntektUnderveisDto.tilPersonData() = PersonData.VilkårsgrunnlagElementData.NyInntektUnderveisData( - orgnummer = this.orgnummer, - beløpstidslinje = this.beløpstidslinje.tilPersonData() -) +private fun InntektsgrunnlagUtDto.tilPersonData() = + PersonData.VilkårsgrunnlagElementData.InntektsgrunnlagData( + grunnbeløp = this.`6G`.årlig.beløp, + arbeidsgiverInntektsopplysninger = this.arbeidsgiverInntektsopplysninger.map { it.tilPersonData() }, + deaktiverteArbeidsforhold = this.deaktiverteArbeidsforhold.map { it.tilPersonData() }, + tilkommendeInntekter = this.tilkommendeInntekter.map { it.tilPersonData() }, + vurdertInfotrygd = this.vurdertInfotrygd + ) -private fun InntektsopplysningUtDto.tilPersonData() = PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData( - id = this.id, - dato = this.dato, - hendelseId = this.hendelseId, - beløp = when (this) { - is InntektsopplysningUtDto.SkattSykepengegrunnlagDto -> null - is InntektsopplysningUtDto.IkkeRapportertDto -> null - is InntektsopplysningUtDto.InfotrygdDto -> this.beløp.månedligDouble.beløp - is InntektsopplysningUtDto.InntektsmeldingDto -> this.beløp.månedligDouble.beløp - is InntektsopplysningUtDto.SaksbehandlerDto -> this.beløp.månedligDouble.beløp - is InntektsopplysningUtDto.SkjønnsmessigFastsattDto -> this.beløp.månedligDouble.beløp - }, - kilde = when (this) { - is InntektsopplysningUtDto.IkkeRapportertDto -> "IKKE_RAPPORTERT" - is InntektsopplysningUtDto.InfotrygdDto -> "INFOTRYGD" - is InntektsopplysningUtDto.InntektsmeldingDto -> "INNTEKTSMELDING" - is InntektsopplysningUtDto.SaksbehandlerDto -> "SAKSBEHANDLER" - is InntektsopplysningUtDto.SkattSykepengegrunnlagDto -> "SKATT_SYKEPENGEGRUNNLAG" - is InntektsopplysningUtDto.SkjønnsmessigFastsattDto -> "SKJØNNSMESSIG_FASTSATT" - }, - forklaring = when (this) { - is InntektsopplysningUtDto.SaksbehandlerDto -> this.forklaring - else -> null - }, - subsumsjon = when (this) { - is InntektsopplysningUtDto.SaksbehandlerDto -> this.subsumsjon?.let { - PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData.SubsumsjonData( - paragraf = it.paragraf, - bokstav = it.bokstav, - ledd = it.ledd - ) +private fun ArbeidsgiverInntektsopplysningUtDto.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() } - else -> null - }, - tidsstempel = this.tidsstempel, - overstyrtInntektId = when (this) { - is InntektsopplysningUtDto.SaksbehandlerDto -> this.overstyrtInntekt - is InntektsopplysningUtDto.SkjønnsmessigFastsattDto -> this.overstyrtInntekt - else -> null - }, - skatteopplysninger = when (this) { - is InntektsopplysningUtDto.SkattSykepengegrunnlagDto -> this.inntektsopplysninger.map { it.tilPersonDataSkattopplysning() } - else -> null - }, - inntektsmeldingkilde = when (this) { - is InntektsopplysningUtDto.InntektsmeldingDto -> when (this.kilde) { - InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.Arbeidsgiver -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData.InntektsmeldingKildeDto.Arbeidsgiver - InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.AOrdningen -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData.InntektsmeldingKildeDto.AOrdningen + ) + +private fun NyInntektUnderveisDto.tilPersonData() = + PersonData.VilkårsgrunnlagElementData.NyInntektUnderveisData( + orgnummer = this.orgnummer, + beløpstidslinje = this.beløpstidslinje.tilPersonData() + ) + +private fun InntektsopplysningUtDto.tilPersonData() = + PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData( + id = this.id, + dato = this.dato, + hendelseId = this.hendelseId, + beløp = when (this) { + is InntektsopplysningUtDto.SkattSykepengegrunnlagDto -> null + is InntektsopplysningUtDto.IkkeRapportertDto -> null + is InntektsopplysningUtDto.InfotrygdDto -> this.beløp.månedligDouble.beløp + is InntektsopplysningUtDto.InntektsmeldingDto -> this.beløp.månedligDouble.beløp + is InntektsopplysningUtDto.SaksbehandlerDto -> this.beløp.månedligDouble.beløp + is InntektsopplysningUtDto.SkjønnsmessigFastsattDto -> this.beløp.månedligDouble.beløp + }, + kilde = when (this) { + is InntektsopplysningUtDto.IkkeRapportertDto -> "IKKE_RAPPORTERT" + is InntektsopplysningUtDto.InfotrygdDto -> "INFOTRYGD" + is InntektsopplysningUtDto.InntektsmeldingDto -> "INNTEKTSMELDING" + is InntektsopplysningUtDto.SaksbehandlerDto -> "SAKSBEHANDLER" + is InntektsopplysningUtDto.SkattSykepengegrunnlagDto -> "SKATT_SYKEPENGEGRUNNLAG" + is InntektsopplysningUtDto.SkjønnsmessigFastsattDto -> "SKJØNNSMESSIG_FASTSATT" + }, + forklaring = when (this) { + is InntektsopplysningUtDto.SaksbehandlerDto -> this.forklaring + else -> null + }, + subsumsjon = when (this) { + is InntektsopplysningUtDto.SaksbehandlerDto -> 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 InntektsopplysningUtDto.SaksbehandlerDto -> this.overstyrtInntekt + is InntektsopplysningUtDto.SkjønnsmessigFastsattDto -> this.overstyrtInntekt + else -> null + }, + skatteopplysninger = when (this) { + is InntektsopplysningUtDto.SkattSykepengegrunnlagDto -> this.inntektsopplysninger.map { it.tilPersonDataSkattopplysning() } + else -> null + }, + inntektsmeldingkilde = when (this) { + is InntektsopplysningUtDto.InntektsmeldingDto -> when (this.kilde) { + InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.Arbeidsgiver -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData.InntektsmeldingKildeDto.Arbeidsgiver + InntektsopplysningUtDto.InntektsmeldingDto.KildeDto.AOrdningen -> PersonData.VilkårsgrunnlagElementData.ArbeidsgiverInntektsopplysningData.InntektsopplysningData.InntektsmeldingKildeDto.AOrdningen + } + + else -> null } - else -> null - } -) + ) + +private fun RefusjonsopplysningUtDto.tilPersonData() = + PersonData.ArbeidsgiverData.RefusjonsopplysningData( + meldingsreferanseId = this.meldingsreferanseId, + fom = this.fom, + tom = this.tom, + beløp = this.beløp.månedligDouble.beløp, + avsender = this.avsender.tilPersonData(), + tidsstempel = this.tidsstempel + ) -private fun RefusjonsopplysningUtDto.tilPersonData() = PersonData.ArbeidsgiverData.RefusjonsopplysningData( - meldingsreferanseId = this.meldingsreferanseId, - fom = this.fom, - tom = this.tom, - beløp = this.beløp.månedligDouble.beløp, - avsender = this.avsender.tilPersonData(), - tidsstempel = this.tidsstempel -) private fun SkatteopplysningDto.tilPersonDataSkattopplysning() = SkatteopplysningData( hendelseId = this.hendelseId, beløp = this.beløp.beløp, @@ -871,4 +979,5 @@ private fun BeløpstidslinjeDto.tilPersonData() = PersonData.BeløpstidslinjeDat } ) -private fun RefusjonsservitørDto.tilPersonData() = refusjonstidslinjer.mapValues { (_, beløpstidslinje) -> beløpstidslinje.tilPersonData() } \ No newline at end of file +private fun RefusjonsservitørDto.tilPersonData() = + refusjonstidslinjer.mapValues { (_, beløpstidslinje) -> beløpstidslinje.tilPersonData() } diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/SerialisertPerson.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/SerialisertPerson.kt index 566e7b766d..cd2b1cc9a9 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/SerialisertPerson.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/SerialisertPerson.kt @@ -97,7 +97,10 @@ class SerialisertPerson(val json: String) { val personData: PersonData = requireNotNull(serdeObjectMapper.treeToValue(jsonNode)) return personData.tilPersonDto() } catch (err: Exception) { - throw DeserializationException("Feil under oversetting til modellobjekter: ${err.message}", err) + throw DeserializationException( + "Feil under oversetting til modellobjekter: ${err.message}", + err + ) } } } diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/SetDeserializer.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/SetDeserializer.kt index a63e8c44ce..5f362152eb 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/SetDeserializer.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/SetDeserializer.kt @@ -14,7 +14,7 @@ internal class SetDeserializer(t: Class>) : StdDeserializer>(t) { .map { try { fromString(it as String) - } catch(e: Exception) { + } catch (e: Exception) { it } } diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/JsonMigration.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/JsonMigration.kt index 59b805c6e2..991571705b 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/JsonMigration.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/JsonMigration.kt @@ -11,10 +11,15 @@ fun interface MeldingerSupplier { companion object { internal val empty = MeldingerSupplier { emptyMap() } } + fun hentMeldinger(): Map } -data class Hendelse(val meldingsreferanseId: UUID, val meldingstype: String, val lestDato: LocalDateTime) +data class Hendelse( + val meldingsreferanseId: UUID, + val meldingstype: String, + val lestDato: LocalDateTime +) internal fun List.migrate( jsonNode: JsonNode, @@ -22,7 +27,8 @@ internal fun List.migrate( ) = JsonMigration.migrate(this, jsonNode, MemoizedMeldingerSupplier(meldingerSupplier)) -private class MemoizedMeldingerSupplier(private val supplier: MeldingerSupplier): MeldingerSupplier { +private class MemoizedMeldingerSupplier(private val supplier: MeldingerSupplier) : + MeldingerSupplier { private val meldinger: Map by lazy { supplier.hentMeldinger() } override fun hentMeldinger(): Map = meldinger @@ -45,7 +51,9 @@ internal abstract class JsonMigration(private val version: Int) { ) = jsonNode.apply { require(this is ObjectNode) { "Kan kun migrere ObjectNodes" } val sortedMigrations = migrations.sortedBy { it.version } - require(sortedMigrations.windowed(2).none { (a, b) -> a.version == b.version }) { "Versjoner må være unike" } + require( + sortedMigrations.windowed(2) + .none { (a, b) -> a.version == b.version }) { "Versjoner må være unike" } sortedMigrations.forEach { it.migrate(this, supplier) } } diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V279AvsluttettidspunktVedtakFattet.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V279AvsluttettidspunktVedtakFattet.kt index fca1cf7121..cc2d2bf574 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V279AvsluttettidspunktVedtakFattet.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V279AvsluttettidspunktVedtakFattet.kt @@ -9,8 +9,9 @@ import java.util.UUID import no.nav.helse.serde.serdeObjectMapper import org.slf4j.LoggerFactory -internal class V279AvsluttettidspunktVedtakFattet: JsonMigration(279) { - override val description = "flytter generasjoner i VEDTAK_FATTET som skulle vært VEDTAK_IVERKSATT" +internal class V279AvsluttettidspunktVedtakFattet : JsonMigration(279) { + override val description = + "flytter generasjoner i VEDTAK_FATTET som skulle vært VEDTAK_IVERKSATT" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { migrer(jsonNode, jsonNode.path("aktørId").asText()) @@ -19,13 +20,25 @@ internal class V279AvsluttettidspunktVedtakFattet: JsonMigration(279) { private fun migrer(jsonNode: ObjectNode, aktørId: String) { jsonNode.path("arbeidsgivere").forEach { arbeidsgiver -> val avsluttettidspunktForUtbetalinger = arbeidsgiver.path("utbetalinger").associate { - it.path("id").asText().uuid to it.path("overføringstidspunkt").takeIf(JsonNode::isTextual)?.let { LocalDateTime.parse(it.asText()) } + it.path("id").asText().uuid to it.path("overføringstidspunkt") + .takeIf(JsonNode::isTextual)?.let { LocalDateTime.parse(it.asText()) } } arbeidsgiver.path("vedtaksperioder") - .onEach { periode -> migrerVedtaksperiode(aktørId, periode, avsluttettidspunktForUtbetalinger::getValue) } + .onEach { periode -> + migrerVedtaksperiode( + aktørId, + periode, + avsluttettidspunktForUtbetalinger::getValue + ) + } } } - private fun migrerVedtaksperiode(aktørId: String, periode: JsonNode, avsluttettidspunktForUtbetalinger: (UUID) -> LocalDateTime?) { + + private fun migrerVedtaksperiode( + aktørId: String, + periode: JsonNode, + avsluttettidspunktForUtbetalinger: (UUID) -> LocalDateTime? + ) { val tilstandForVedtaksperiode = periode.path("tilstand").asText() if (tilstandForVedtaksperiode != "AVSLUTTET") return val generasjoner = periode.path("generasjoner") as ArrayNode @@ -33,21 +46,54 @@ internal class V279AvsluttettidspunktVedtakFattet: JsonMigration(279) { val tilstandForSisteGenerasjon = sisteGenerasjon.path("tilstand").asText() if (tilstandForSisteGenerasjon != "VEDTAK_FATTET") return - val utbetalingId = sisteGenerasjon.path("endringer").last().path("utbetalingId").takeIf(JsonNode::isTextual)?.let { UUID.fromString(it.asText()) } + val utbetalingId = sisteGenerasjon.path("endringer").last().path("utbetalingId") + .takeIf(JsonNode::isTextual)?.let { UUID.fromString(it.asText()) } if (utbetalingId == null) { - sikkerlogg.error("[V279] $aktørId Skulle flytter generasjon fra $tilstandForSisteGenerasjon til VEDTAK_IVERKSATT for ${periode.path("fom").asText()} - ${periode.path("tom").asText()} (${periode.path("id").asText()}) fordi vedtaksperioden er i $tilstandForVedtaksperiode og siste generasjon har tilstand $tilstandForSisteGenerasjon, men utbetalingId mangler") + sikkerlogg.error( + "[V279] $aktørId Skulle flytter generasjon fra $tilstandForSisteGenerasjon til VEDTAK_IVERKSATT for ${ + periode.path( + "fom" + ).asText() + } - ${periode.path("tom").asText()} (${ + periode.path("id").asText() + }) fordi vedtaksperioden er i $tilstandForVedtaksperiode og siste generasjon har tilstand $tilstandForSisteGenerasjon, men utbetalingId mangler" + ) return } val avsluttettidspunkt = avsluttettidspunktForUtbetalinger(utbetalingId) ?: run { - sikkerlogg.info("[V279] $aktørId Skulle flytter generasjon fra $tilstandForSisteGenerasjon til VEDTAK_IVERKSATT for ${periode.path("fom").asText()} - ${periode.path("tom").asText()} (${periode.path("id").asText()}) fordi vedtaksperioden er i $tilstandForVedtaksperiode og siste generasjon har tilstand $tilstandForSisteGenerasjon, men avsluttettidspunkt mangler") + sikkerlogg.info( + "[V279] $aktørId Skulle flytter generasjon fra $tilstandForSisteGenerasjon til VEDTAK_IVERKSATT for ${ + periode.path( + "fom" + ).asText() + } - ${periode.path("tom").asText()} (${ + periode.path("id").asText() + }) fordi vedtaksperioden er i $tilstandForVedtaksperiode og siste generasjon har tilstand $tilstandForSisteGenerasjon, men avsluttettidspunkt mangler" + ) LocalDateTime.parse(periode.path("oppdatert").asText()) } - sikkerlogg.info("[V279] $aktørId Flytter generasjon fra $tilstandForSisteGenerasjon til VEDTAK_IVERKSATT for ${periode.path("fom").asText()} - ${periode.path("tom").asText()} (${periode.path("id").asText()}) fordi vedtaksperioden er i $tilstandForVedtaksperiode og siste generasjon har tilstand $tilstandForSisteGenerasjon") + sikkerlogg.info( + "[V279] $aktørId Flytter generasjon fra $tilstandForSisteGenerasjon til VEDTAK_IVERKSATT for ${ + periode.path( + "fom" + ).asText() + } - ${periode.path("tom").asText()} (${ + periode.path("id").asText() + }) fordi vedtaksperioden er i $tilstandForVedtaksperiode og siste generasjon har tilstand $tilstandForSisteGenerasjon" + ) sisteGenerasjon.put("tilstand", "VEDTAK_IVERKSATT") sisteGenerasjon.put("avsluttet", "$avsluttettidspunkt") } - private fun lagGenerasjon(starttilstand: String, opprettettidspunkt: LocalDateTime, periodeFom: LocalDate, periodeTom: LocalDate, endringer: List, vedtakFattet: LocalDateTime? = null, avsluttet: LocalDateTime? = null): ObjectNode { + private fun lagGenerasjon( + starttilstand: String, + opprettettidspunkt: LocalDateTime, + periodeFom: LocalDate, + periodeTom: LocalDate, + endringer: List, + vedtakFattet: LocalDateTime? = null, + avsluttet: LocalDateTime? = null + ): ObjectNode { return serdeObjectMapper .createObjectNode() .put("id", "${UUID.randomUUID()}") @@ -67,6 +113,7 @@ internal class V279AvsluttettidspunktVedtakFattet: JsonMigration(279) { it.putArray("endringer").addAll(endringer) } } + private fun lagEndring( dokumentId: UUID, dokumenttype: String, @@ -109,10 +156,11 @@ internal class V279AvsluttettidspunktVedtakFattet: JsonMigration(279) { val type: String ) { companion object { - val JsonNode.dokumentsporing get() = Dokumentsporing( - id = this.path("dokumentId").asText().uuid, - type = this.path("dokumenttype").asText() - ) + val JsonNode.dokumentsporing + get() = Dokumentsporing( + id = this.path("dokumentId").asText().uuid, + type = this.path("dokumenttype").asText() + ) } } diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V280HengendeRevurderinger.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V280HengendeRevurderinger.kt index fc4ee335ef..72696012b7 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V280HengendeRevurderinger.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V280HengendeRevurderinger.kt @@ -8,8 +8,9 @@ import java.util.UUID import no.nav.helse.serde.migration.V280HengendeRevurderinger.Dokumentsporing.Companion.dokumentsporing import org.slf4j.LoggerFactory -internal class V280HengendeRevurderinger: JsonMigration(280) { - override val description = "fjerner hengende uberegnede revurderinger på eldre perioder som er avsluttet" +internal class V280HengendeRevurderinger : JsonMigration(280) { + override val description = + "fjerner hengende uberegnede revurderinger på eldre perioder som er avsluttet" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { migrer(jsonNode, jsonNode.path("aktørId").asText()) @@ -21,6 +22,7 @@ internal class V280HengendeRevurderinger: JsonMigration(280) { .onEach { periode -> migrerVedtaksperiode(aktørId, periode) } } } + private fun migrerVedtaksperiode(aktørId: String, periode: JsonNode) { val tilstandForVedtaksperiode = periode.path("tilstand").asText() if (tilstandForVedtaksperiode != "AVSLUTTET") return @@ -29,10 +31,19 @@ internal class V280HengendeRevurderinger: JsonMigration(280) { val tilstandForSisteGenerasjon = sisteGenerasjon.path("tilstand").asText() if (tilstandForSisteGenerasjon != "UBEREGNET_REVURDERING") return - val sisteIverksettingIndex = generasjoner.indexOfLast { it.path("tilstand").asText() == "VEDTAK_IVERKSATT" } + val sisteIverksettingIndex = + generasjoner.indexOfLast { it.path("tilstand").asText() == "VEDTAK_IVERKSATT" } val sisteIverksetting: JsonNode? = generasjoner.get(sisteIverksettingIndex) if (sisteIverksetting !is ObjectNode || sisteIverksettingIndex < 0) { - sikkerlogg.error("[280] $aktørId Skulle flytte uberegnet revurdering til VEDTAK_IVERKSATT for ${periode.path("fom").asText()} - ${periode.path("tom").asText()} (${periode.path("id").asText()}) fordi vedtaksperioden er i $tilstandForVedtaksperiode og siste generasjon har tilstand $tilstandForSisteGenerasjon, men vedtaksperioden har ikke en generasjon i VEDTAK_IVERKSATT") + sikkerlogg.error( + "[280] $aktørId Skulle flytte uberegnet revurdering til VEDTAK_IVERKSATT for ${ + periode.path( + "fom" + ).asText() + } - ${periode.path("tom").asText()} (${ + periode.path("id").asText() + }) fordi vedtaksperioden er i $tilstandForVedtaksperiode og siste generasjon har tilstand $tilstandForSisteGenerasjon, men vedtaksperioden har ikke en generasjon i VEDTAK_IVERKSATT" + ) return } @@ -40,11 +51,25 @@ internal class V280HengendeRevurderinger: JsonMigration(280) { val dokumentsporing = uberegnede .flatMap { it.path("endringer").map { - LocalDateTime.parse(it.path("tidsstempel").asText()) to it.path("dokumentsporing").dokumentsporing + LocalDateTime.parse( + it.path("tidsstempel").asText() + ) to it.path("dokumentsporing").dokumentsporing } }.toSet() - sikkerlogg.info("[280] $aktørId Flytter ${uberegnede.size} generasjoner (${uberegnede.joinToString { it.path("tilstand").asText() }}) til VEDTAK_IVERKSATT (${sisteIverksetting.path("id").asText()}) for ${periode.path("fom").asText()} - ${periode.path("tom").asText()} (${periode.path("id").asText()}) fordi vedtaksperioden er i $tilstandForVedtaksperiode") + sikkerlogg.info( + "[280] $aktørId Flytter ${uberegnede.size} generasjoner (${ + uberegnede.joinToString { + it.path( + "tilstand" + ).asText() + } + }) til VEDTAK_IVERKSATT (${sisteIverksetting.path("id").asText()}) for ${ + periode.path("fom").asText() + } - ${periode.path("tom").asText()} (${ + periode.path("id").asText() + }) fordi vedtaksperioden er i $tilstandForVedtaksperiode" + ) (sisteIverksetting.path("endringer") as ArrayNode).apply { val sisteEndring = last() dokumentsporing.forEach { (tidsstempel, dokumentsporing) -> @@ -69,10 +94,11 @@ internal class V280HengendeRevurderinger: JsonMigration(280) { val type: String ) { companion object { - val JsonNode.dokumentsporing get() = Dokumentsporing( - id = this.path("dokumentId").asText().uuid, - type = this.path("dokumenttype").asText() - ) + val JsonNode.dokumentsporing + get() = Dokumentsporing( + id = this.path("dokumentId").asText().uuid, + type = this.path("dokumenttype").asText() + ) } } diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V281ForkasteAvsluttedePerioderMedUberegnetGenerasjon.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V281ForkasteAvsluttedePerioderMedUberegnetGenerasjon.kt index 42ab40ea9a..85112f53b9 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V281ForkasteAvsluttedePerioderMedUberegnetGenerasjon.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V281ForkasteAvsluttedePerioderMedUberegnetGenerasjon.kt @@ -6,8 +6,9 @@ import com.fasterxml.jackson.databind.node.ObjectNode import no.nav.helse.serde.serdeObjectMapper import org.slf4j.LoggerFactory -internal class V281ForkasteAvsluttedePerioderMedUberegnetGenerasjon: JsonMigration(281) { - override val description = "forkaster vedtaksperioder som er Avsluttet, men som har én generasjon som er UBEREGNET med forkastet utbetaling" +internal class V281ForkasteAvsluttedePerioderMedUberegnetGenerasjon : JsonMigration(281) { + override val description = + "forkaster vedtaksperioder som er Avsluttet, men som har én generasjon som er UBEREGNET med forkastet utbetaling" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { migrer(jsonNode, jsonNode.path("aktørId").asText()) @@ -28,19 +29,32 @@ internal class V281ForkasteAvsluttedePerioderMedUberegnetGenerasjon: JsonMigrati } val vedtaksperioder = arbeidsgiver.path("vedtaksperioder") as ArrayNode - vedtaksperioder.onEach { periode -> migrerVedtaksperiode(aktørId, periode, ::nyForkasting) } + vedtaksperioder.onEach { periode -> + migrerVedtaksperiode( + aktørId, + periode, + ::nyForkasting + ) + } forkastinger.forEach { periode -> val forkastetPeriode = serdeObjectMapper.createObjectNode().apply { set("vedtaksperiode", periode) } forkastede.add(forkastetPeriode) - val indeks = vedtaksperioder.indexOfFirst { vedtaksperiode -> vedtaksperiode.path("id").asText().uuid == periode.path("id").asText().uuid } + val indeks = vedtaksperioder.indexOfFirst { vedtaksperiode -> + vedtaksperiode.path("id").asText().uuid == periode.path("id").asText().uuid + } vedtaksperioder.remove(indeks) } } } - private fun migrerVedtaksperiode(aktørId: String, periode: JsonNode, leggTilForkastet: (JsonNode) -> Unit) { + + private fun migrerVedtaksperiode( + aktørId: String, + periode: JsonNode, + leggTilForkastet: (JsonNode) -> Unit + ) { val tilstandForVedtaksperiode = periode.path("tilstand").asText() if (tilstandForVedtaksperiode != "AVSLUTTET") return val generasjoner = periode.path("generasjoner") as ArrayNode @@ -48,14 +62,29 @@ internal class V281ForkasteAvsluttedePerioderMedUberegnetGenerasjon: JsonMigrati val tilstandForSisteGenerasjon = sisteGenerasjon.path("tilstand").asText() if (tilstandForSisteGenerasjon != "UBEREGNET") return - val sisteIverksettingIndex = generasjoner.indexOfLast { it.path("tilstand").asText() == "VEDTAK_IVERKSATT" } + val sisteIverksettingIndex = + generasjoner.indexOfLast { it.path("tilstand").asText() == "VEDTAK_IVERKSATT" } val sisteIverksetting: JsonNode? = generasjoner.get(sisteIverksettingIndex) if (sisteIverksetting is ObjectNode) { - sikkerlogg.info("[V281] $aktørId Har UBEREGNET generasjon etter en VEDTAK_IVERKSATT ${periode.path("fom").asText()} - ${periode.path("tom").asText()} (${periode.path("id").asText()}) og vedtaksperioden er $tilstandForVedtaksperiode") + sikkerlogg.info( + "[V281] $aktørId Har UBEREGNET generasjon etter en VEDTAK_IVERKSATT ${ + periode.path( + "fom" + ).asText() + } - ${periode.path("tom").asText()} (${ + periode.path("id").asText() + }) og vedtaksperioden er $tilstandForVedtaksperiode" + ) return } - sikkerlogg.info("[V281] $aktørId Forkaster vedtaksperiode som er i AVSLUTTET, men med FORKASTET utbetaling og er UBEREGNET ${periode.path("fom").asText()} - ${periode.path("tom").asText()} (${periode.path("id").asText()})") + sikkerlogg.info( + "[V281] $aktørId Forkaster vedtaksperiode som er i AVSLUTTET, men med FORKASTET utbetaling og er UBEREGNET ${ + periode.path( + "fom" + ).asText() + } - ${periode.path("tom").asText()} (${periode.path("id").asText()})" + ) leggTilForkastet(periode) } diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V282HengendeRevurderinger.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V282HengendeRevurderinger.kt index 7fc90b4a39..edf3bacb68 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V282HengendeRevurderinger.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V282HengendeRevurderinger.kt @@ -6,8 +6,9 @@ import com.fasterxml.jackson.databind.node.ObjectNode import java.util.UUID import org.slf4j.LoggerFactory -internal class V282HengendeRevurderinger: JsonMigration(282) { - override val description = "fjerner hengende uberegnede revurderinger på perioder som også har en beregnet revurdering" +internal class V282HengendeRevurderinger : JsonMigration(282) { + override val description = + "fjerner hengende uberegnede revurderinger på perioder som også har en beregnet revurdering" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { migrer(jsonNode, jsonNode.path("aktørId").asText()) @@ -19,16 +20,33 @@ internal class V282HengendeRevurderinger: JsonMigration(282) { .onEach { periode -> migrerVedtaksperiode(aktørId, periode) } } } + private fun migrerVedtaksperiode(aktørId: String, periode: JsonNode) { val tilstandForVedtaksperiode = periode.path("tilstand").asText() - if (tilstandForVedtaksperiode !in setOf("AVVENTER_REVURDERING", "AVVENTER_HISTORIKK_REVURDERING", "AVVENTER_SIMULERING_REVURDERING", "AVVENTER_GODKJENNING_REVURDERING")) return + if (tilstandForVedtaksperiode !in setOf( + "AVVENTER_REVURDERING", + "AVVENTER_HISTORIKK_REVURDERING", + "AVVENTER_SIMULERING_REVURDERING", + "AVVENTER_GODKJENNING_REVURDERING" + )) return val generasjoner = periode.path("generasjoner") as ArrayNode val sisteGenerasjon = generasjoner.last() as ObjectNode val tilstandForSisteGenerasjon = sisteGenerasjon.path("tilstand").asText() - val åpneGenerasjoner = generasjoner.filter { it.path("tilstand").asText() in setOf("UBEREGNET_REVURDERING", "BEREGNET_REVURDERING") } + val åpneGenerasjoner = generasjoner.filter { + it.path("tilstand").asText() in setOf( + "UBEREGNET_REVURDERING", + "BEREGNET_REVURDERING" + ) + } if (åpneGenerasjoner.size == 1) return // alt ok if (åpneGenerasjoner.isEmpty()) { - sikkerlogg.error("[V282] $aktørId Perioden ${periode.path("fom").asText()} - ${periode.path("tom").asText()} (${periode.path("id").asText()}) mangler åpen generasjon! Perioden står i $tilstandForVedtaksperiode og siste generasjon er $tilstandForSisteGenerasjon") + sikkerlogg.error( + "[V282] $aktørId Perioden ${ + periode.path("fom").asText() + } - ${periode.path("tom").asText()} (${ + periode.path("id").asText() + }) mangler åpen generasjon! Perioden står i $tilstandForVedtaksperiode og siste generasjon er $tilstandForSisteGenerasjon" + ) return } @@ -39,7 +57,15 @@ internal class V282HengendeRevurderinger: JsonMigration(282) { (it.path("endringer").first() as ObjectNode).put("tidsstempel", tidspunktFørste) } - sikkerlogg.info("[V282] $aktørId Fjerner ${åpneGenerasjoner.size - 1} åpne generasjoner for ${periode.path("fom").asText()} - ${periode.path("tom").asText()} (${periode.path("id").asText()}) i $tilstandForVedtaksperiode") + sikkerlogg.info( + "[V282] $aktørId Fjerner ${åpneGenerasjoner.size - 1} åpne generasjoner for ${ + periode.path( + "fom" + ).asText() + } - ${periode.path("tom").asText()} (${ + periode.path("id").asText() + }) i $tilstandForVedtaksperiode" + ) generasjoner.removeAll { generasjon -> generasjon.path("id").asText().uuid in fjerne } @@ -50,10 +76,11 @@ internal class V282HengendeRevurderinger: JsonMigration(282) { val type: String ) { companion object { - val JsonNode.dokumentsporing get() = Dokumentsporing( - id = this.path("dokumentId").asText().uuid, - type = this.path("dokumenttype").asText() - ) + val JsonNode.dokumentsporing + get() = Dokumentsporing( + id = this.path("dokumentId").asText().uuid, + type = this.path("dokumenttype").asText() + ) } } diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V283BeregningsgrunnlagP\303\245\303\230konomi.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V283BeregningsgrunnlagP\303\245\303\230konomi.kt" index 16515a5f2e..2adedf1c22 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V283BeregningsgrunnlagP\303\245\303\230konomi.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V283BeregningsgrunnlagP\303\245\303\230konomi.kt" @@ -3,8 +3,9 @@ package no.nav.helse.serde.migration import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.ObjectNode -internal class V283BeregningsgrunnlagPåØkonomi: JsonMigration(283) { - override val description = "setter beregningsgrunnlag lik aktuellDagsinntekt på alle økonomiobjekter" +internal class V283BeregningsgrunnlagPåØkonomi : JsonMigration(283) { + override val description = + "setter beregningsgrunnlag lik aktuellDagsinntekt på alle økonomiobjekter" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { migrer(jsonNode, jsonNode.path("aktørId").asText()) @@ -16,6 +17,7 @@ internal class V283BeregningsgrunnlagPåØkonomi: JsonMigration(283) { .onEach { utbetaling -> migrerUtbetaling(aktørId, utbetaling) } } } + private fun migrerUtbetaling(aktørId: String, utbetaling: JsonNode) { utbetaling.path("utbetalingstidslinje").path("dager").forEach { dag -> dag as ObjectNode diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V284GjelderPeriodeArbeidsgiverInntektsopplysning.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V284GjelderPeriodeArbeidsgiverInntektsopplysning.kt index ed9203d8fe..a12c254d63 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V284GjelderPeriodeArbeidsgiverInntektsopplysning.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V284GjelderPeriodeArbeidsgiverInntektsopplysning.kt @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.ObjectNode import java.time.LocalDate -internal class V284GjelderPeriodeArbeidsgiverInntektsopplysning: JsonMigration(284) { +internal class V284GjelderPeriodeArbeidsgiverInntektsopplysning : JsonMigration(284) { override val description = "setter fom og tom på arbeidsgiverinntektsopplysning" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -17,14 +17,17 @@ internal class V284GjelderPeriodeArbeidsgiverInntektsopplysning: JsonMigration(2 .onEach { grunnlag -> migrerSykepengegrunnlag(aktørId, grunnlag) } } } + private fun migrerSykepengegrunnlag(aktørId: String, grunnlagsdata: JsonNode) { val skjæringstidspunkt = grunnlagsdata.path("skjæringstidspunkt").asText() - grunnlagsdata.path("sykepengegrunnlag").path("arbeidsgiverInntektsopplysninger").forEach { opplysning -> - migrerOpplysning(skjæringstidspunkt, opplysning) - } - grunnlagsdata.path("sykepengegrunnlag").path("deaktiverteArbeidsforhold").forEach { opplysning -> - migrerOpplysning(skjæringstidspunkt, opplysning) - } + grunnlagsdata.path("sykepengegrunnlag").path("arbeidsgiverInntektsopplysninger") + .forEach { opplysning -> + migrerOpplysning(skjæringstidspunkt, opplysning) + } + grunnlagsdata.path("sykepengegrunnlag").path("deaktiverteArbeidsforhold") + .forEach { opplysning -> + migrerOpplysning(skjæringstidspunkt, opplysning) + } } private fun migrerOpplysning(skjæringstidspunkt: String, opplysning: JsonNode) { diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V285LoggeRareAnnulleringer.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V285LoggeRareAnnulleringer.kt index 43513549a9..639c497c05 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V285LoggeRareAnnulleringer.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V285LoggeRareAnnulleringer.kt @@ -8,7 +8,7 @@ import org.slf4j.LoggerFactory internal class V285LoggeRareAnnulleringer( private val forkast: Set = setOf("ec293bc9-73ce-4c5f-b7a8-18451f5f623c"), val forkastetTidspunkt: () -> LocalDateTime = { LocalDateTime.now() } -): JsonMigration(version = 285) { +) : JsonMigration(version = 285) { override val description = "Logger rare utbetalinger" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -19,7 +19,10 @@ internal class V285LoggeRareAnnulleringer( val utbetalteKorrelasjonsIder = arbeidsgiver.path("utbetalinger") .groupBy { it.path("korrelasjonsId").asText() } .mapValues { (_, utbetalinger) -> - utbetalinger.filter { it.path("type").asText() == "UTBETALING" && it.path("status").asText() == "UTBETALT" } + utbetalinger.filter { + it.path("type").asText() == "UTBETALING" && it.path("status") + .asText() == "UTBETALT" + } }.filterValues { it.isNotEmpty() } .keys @@ -41,12 +44,13 @@ internal class V285LoggeRareAnnulleringer( .forEach { manglerOverføring -> val id = manglerOverføring.path("id").asText() val nåværendeStatus = manglerOverføring.path("status").asText() - val oppdatert = LocalDateTime.parse(manglerOverføring.path("oppdatert").asText()) + val oppdatert = + LocalDateTime.parse(manglerOverføring.path("oppdatert").asText()) sikkerLogg.warn("Annullering $id i Status $nåværendeStatus ser ikke ut til å være overført til Oppdrag (sist oppdatert $oppdatert). AktørId $aktørId, Organisasjonsnummer $organisasjonsnummer (Versjon4)") if (id in forkast) { sikkerLogg.info("Setter status på Utbetaling $id til FORKASTET og setter nytt oppdatert-tidspunkt") manglerOverføring as ObjectNode - manglerOverføring.put("status","FORKASTET") + manglerOverføring.put("status", "FORKASTET") manglerOverføring.put("oppdatert", "${forkastetTidspunkt()}") } } @@ -55,24 +59,27 @@ internal class V285LoggeRareAnnulleringer( private companion object { private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") - private val JsonNode.oppdragManglerOverføring get(): Boolean { - if (path("linjer").isEmpty) return false - if (path("endringskode").asText() == "UEND") return false - return path("status").isNull - } + private val JsonNode.oppdragManglerOverføring + get(): Boolean { + if (path("linjer").isEmpty) return false + if (path("endringskode").asText() == "UEND") return false + return path("status").isNull + } - private val JsonNode.akseptertAnnullering get(): Boolean { - if (path("type").asText() != "ANNULLERING") return false - if (path("status").asText() != "ANNULLERT") return false - val arbeidsgiverOppdrag = path("arbeidsgiverOppdrag") - val personOppdrag = path("personOppdrag") - return arbeidsgiverOppdrag.akseptertOppdrag && personOppdrag.akseptertOppdrag - } + private val JsonNode.akseptertAnnullering + get(): Boolean { + if (path("type").asText() != "ANNULLERING") return false + if (path("status").asText() != "ANNULLERT") return false + val arbeidsgiverOppdrag = path("arbeidsgiverOppdrag") + val personOppdrag = path("personOppdrag") + return arbeidsgiverOppdrag.akseptertOppdrag && personOppdrag.akseptertOppdrag + } - private val JsonNode.akseptertOppdrag get(): Boolean { - if (path("linjer").isEmpty) return true - if (path("endringskode").asText() == "UEND") return true - return path("status").asText() == "AKSEPTERT" - } + private val JsonNode.akseptertOppdrag + get(): Boolean { + if (path("linjer").isEmpty) return true + if (path("endringskode").asText() == "UEND") return true + return path("status").asText() == "AKSEPTERT" + } } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V286Annullerte\303\205pneRevurderinger.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V286Annullerte\303\205pneRevurderinger.kt" index e5c202b7a0..d344f1174b 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V286Annullerte\303\205pneRevurderinger.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V286Annullerte\303\205pneRevurderinger.kt" @@ -6,8 +6,9 @@ import com.fasterxml.jackson.databind.node.ObjectNode import net.logstash.logback.argument.StructuredArguments.kv import org.slf4j.LoggerFactory -internal class V286AnnullerteÅpneRevurderinger: JsonMigration(version = 286) { - override val description = "smelter sammen til_infotrygd-generasjonen og nest siste generasjon hvis den er en åpen revurdering" +internal class V286AnnullerteÅpneRevurderinger : JsonMigration(version = 286) { + override val description = + "smelter sammen til_infotrygd-generasjonen og nest siste generasjon hvis den er en åpen revurdering" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { val aktørId = jsonNode.path("aktørId").asText() @@ -15,8 +16,15 @@ internal class V286AnnullerteÅpneRevurderinger: JsonMigration(version = 286) { jsonNode.path("arbeidsgivere").forEach { arbeidsgiver -> val organisasjonsnummer = arbeidsgiver.path("organisasjonsnummer").asText() - arbeidsgiver.path("vedtaksperioder").forEach { migrerVedtaksperiode(aktørId, organisasjonsnummer, it) } - arbeidsgiver.path("forkastede").forEach { migrerForkastetVedtaksperiode(aktørId, organisasjonsnummer, it.path("vedtaksperiode")) } + arbeidsgiver.path("vedtaksperioder") + .forEach { migrerVedtaksperiode(aktørId, organisasjonsnummer, it) } + arbeidsgiver.path("forkastede").forEach { + migrerForkastetVedtaksperiode( + aktørId, + organisasjonsnummer, + it.path("vedtaksperiode") + ) + } } } @@ -34,7 +42,12 @@ internal class V286AnnullerteÅpneRevurderinger: JsonMigration(version = 286) { } } } - private fun migrerForkastetVedtaksperiode(aktørId: String, orgnr: String, vedtaksperiode: JsonNode) { + + private fun migrerForkastetVedtaksperiode( + aktørId: String, + orgnr: String, + vedtaksperiode: JsonNode + ) { migrerVedtaksperiode(aktørId, orgnr, vedtaksperiode) val generasjonerNode = vedtaksperiode.path("generasjoner") as ArrayNode @@ -43,10 +56,20 @@ internal class V286AnnullerteÅpneRevurderinger: JsonMigration(version = 286) { val deToSiste = generasjoner.takeLast(2) val nestSist = deToSiste.first() as ObjectNode val sisteGenerasjon = deToSiste.last() - if (nestSist.path("tilstand").asText() !in setOf("UBEREGNET_REVURDERING", "BEREGNET_REVURDERING")) return + if (nestSist.path("tilstand").asText() !in setOf( + "UBEREGNET_REVURDERING", + "BEREGNET_REVURDERING" + )) return nestSist.put("tilstand", "TIL_INFOTRYGD") - val avsluttettidspunkt = sisteGenerasjon.path("avsluttet").asText().takeUnless(String::isBlank) - if (avsluttettidspunkt == null) return sikkerLogg.info("[V286] Ingen avsluttettidspunkt for generasjon ${sisteGenerasjon.path("id").asText()}", kv("aktørId", aktørId), kv("orgnr", orgnr)) + val avsluttettidspunkt = + sisteGenerasjon.path("avsluttet").asText().takeUnless(String::isBlank) + if (avsluttettidspunkt == null) return sikkerLogg.info( + "[V286] Ingen avsluttettidspunkt for generasjon ${ + sisteGenerasjon.path( + "id" + ).asText() + }", kv("aktørId", aktørId), kv("orgnr", orgnr) + ) nestSist.put("avsluttet", avsluttettidspunkt) generasjonerNode.remove(generasjoner.lastIndex) } @@ -55,4 +78,4 @@ internal class V286AnnullerteÅpneRevurderinger: JsonMigration(version = 286) { private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V287Annullerte\303\205pneRevurderingerEnGangTil.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V287Annullerte\303\205pneRevurderingerEnGangTil.kt" index 815117b2e7..7ceed55c19 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V287Annullerte\303\205pneRevurderingerEnGangTil.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V287Annullerte\303\205pneRevurderingerEnGangTil.kt" @@ -6,8 +6,9 @@ import com.fasterxml.jackson.databind.node.ObjectNode import net.logstash.logback.argument.StructuredArguments.kv import org.slf4j.LoggerFactory -internal class V287AnnullerteÅpneRevurderingerEnGangTil: JsonMigration(version = 287) { - override val description = "smelter sammen til_infotrygd-generasjonen og nest siste generasjon hvis den er en åpen revurdering" +internal class V287AnnullerteÅpneRevurderingerEnGangTil : JsonMigration(version = 287) { + override val description = + "smelter sammen til_infotrygd-generasjonen og nest siste generasjon hvis den er en åpen revurdering" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { jsonNode.path("arbeidsgivere").forEach { arbeidsgiver -> @@ -17,17 +18,31 @@ internal class V287AnnullerteÅpneRevurderingerEnGangTil: JsonMigration(version } } - private fun migrerForkastetVedtaksperiode(aktørId: String, orgnr: String, vedtaksperiode: JsonNode) { + private fun migrerForkastetVedtaksperiode( + aktørId: String, + orgnr: String, + vedtaksperiode: JsonNode + ) { val generasjonerNode = vedtaksperiode.path("generasjoner") as ArrayNode val generasjoner = generasjonerNode.toList() if (generasjoner.size < 2) return val deToSiste = generasjoner.takeLast(2) val nestSist = deToSiste.first() as ObjectNode val sisteGenerasjon = deToSiste.last() - if (nestSist.path("tilstand").asText() !in setOf("UBEREGNET_REVURDERING", "BEREGNET_REVURDERING")) return + if (nestSist.path("tilstand").asText() !in setOf( + "UBEREGNET_REVURDERING", + "BEREGNET_REVURDERING" + )) return nestSist.put("tilstand", "TIL_INFOTRYGD") - val avsluttettidspunkt = sisteGenerasjon.path("avsluttet").asText().takeUnless(String::isBlank) - if (avsluttettidspunkt == null) return sikkerLogg.info("[V287] Ingen avsluttettidspunkt for generasjon ${sisteGenerasjon.path("id").asText()}", kv("aktørId", aktørId), kv("orgnr", orgnr)) + val avsluttettidspunkt = + sisteGenerasjon.path("avsluttet").asText().takeUnless(String::isBlank) + if (avsluttettidspunkt == null) return sikkerLogg.info( + "[V287] Ingen avsluttettidspunkt for generasjon ${ + sisteGenerasjon.path( + "id" + ).asText() + }", kv("aktørId", aktørId), kv("orgnr", orgnr) + ) nestSist.put("avsluttet", avsluttettidspunkt) generasjonerNode.remove(generasjoner.lastIndex) } @@ -36,4 +51,4 @@ internal class V287AnnullerteÅpneRevurderingerEnGangTil: JsonMigration(version private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V288FjerneOverfl\303\270digeUberegnedeRevurderinger.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V288FjerneOverfl\303\270digeUberegnedeRevurderinger.kt" index a054c89ef3..d02f19f654 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V288FjerneOverfl\303\270digeUberegnedeRevurderinger.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V288FjerneOverfl\303\270digeUberegnedeRevurderinger.kt" @@ -5,7 +5,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode import com.fasterxml.jackson.databind.node.ObjectNode import org.slf4j.LoggerFactory -internal class V288FjerneOverflødigeUberegnedeRevurderinger: JsonMigration(version = 288) { +internal class V288FjerneOverflødigeUberegnedeRevurderinger : JsonMigration(version = 288) { override val description = "smelter sammen flere uberegnede (revurderinger) til én" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -19,7 +19,11 @@ internal class V288FjerneOverflødigeUberegnedeRevurderinger: JsonMigration(vers } } - private fun migrerUberegnedeRevurderinger(aktørId: String, orgnr: String, vedtaksperiode: JsonNode) { + private fun migrerUberegnedeRevurderinger( + aktørId: String, + orgnr: String, + vedtaksperiode: JsonNode + ) { val generasjonerNode = vedtaksperiode.path("generasjoner") as ArrayNode val generasjoner = generasjonerNode.toList() if (generasjoner.size < 2) return @@ -29,7 +33,11 @@ internal class V288FjerneOverflødigeUberegnedeRevurderinger: JsonMigration(vers smeltSammen(aktørId, generasjonerNode, generasjoner, uberegnede) } - private fun migrerUberegnedeOmgjøringer(aktørId: String, orgnr: String, vedtaksperiode: JsonNode) { + private fun migrerUberegnedeOmgjøringer( + aktørId: String, + orgnr: String, + vedtaksperiode: JsonNode + ) { val generasjonerNode = vedtaksperiode.path("generasjoner") as ArrayNode val generasjoner = generasjonerNode.toList() if (generasjoner.size < 2) return @@ -46,15 +54,27 @@ internal class V288FjerneOverflødigeUberegnedeRevurderinger: JsonMigration(vers smeltSammen(aktørId, generasjonerNode, generasjoner, uberegnede) } - private fun smeltSammen(aktørId: String, generasjonerNode: ArrayNode, generasjoner: List, uberegnede: List) { + private fun smeltSammen( + aktørId: String, + generasjonerNode: ArrayNode, + generasjoner: List, + uberegnede: List + ) { if (uberegnede.isEmpty()) return val sisteGenerasjon = generasjoner.last() check(sisteGenerasjon.path("tilstand").asText() == "TIL_INFOTRYGD") { - "Den siste generasjonen er ikke i TIL_INFOTRYGD for aktørId=$aktørId generasjonId=${sisteGenerasjon.path("id").asText()}" - } - val avsluttettidspunkt = checkNotNull(sisteGenerasjon.path("avsluttet").asText().takeUnless(String::isBlank)) { - "Ingen avsluttetidspunkt på generasjon ${sisteGenerasjon.path("id").asText()} for aktørId=$aktørId" + "Den siste generasjonen er ikke i TIL_INFOTRYGD for aktørId=$aktørId generasjonId=${ + sisteGenerasjon.path( + "id" + ).asText() + }" } + val avsluttettidspunkt = + checkNotNull(sisteGenerasjon.path("avsluttet").asText().takeUnless(String::isBlank)) { + "Ingen avsluttetidspunkt på generasjon ${ + sisteGenerasjon.path("id").asText() + } for aktørId=$aktørId" + } (uberegnede.first() as ObjectNode).apply { put("tilstand", "TIL_INFOTRYGD") put("avsluttet", avsluttettidspunkt) @@ -69,4 +89,4 @@ internal class V288FjerneOverflødigeUberegnedeRevurderinger: JsonMigration(vers private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V289AvsluttetTidspunktForkastedeGenerasjoner.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V289AvsluttetTidspunktForkastedeGenerasjoner.kt index a8e6ab6ad5..c744e6d28a 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V289AvsluttetTidspunktForkastedeGenerasjoner.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V289AvsluttetTidspunktForkastedeGenerasjoner.kt @@ -6,7 +6,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode import net.logstash.logback.argument.StructuredArguments.kv import org.slf4j.LoggerFactory -internal class V289AvsluttetTidspunktForkastedeGenerasjoner: JsonMigration(version = 289) { +internal class V289AvsluttetTidspunktForkastedeGenerasjoner : JsonMigration(version = 289) { override val description = "setter avsluttettidspunkt på TIL_INFOTRYGD-generasjoner" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -20,19 +20,41 @@ internal class V289AvsluttetTidspunktForkastedeGenerasjoner: JsonMigration(versi } } - private fun migrerVedtaksperiode(fnr: String, aktørId: String, orgnr: String, vedtaksperiode: JsonNode) { + private fun migrerVedtaksperiode( + fnr: String, + aktørId: String, + orgnr: String, + vedtaksperiode: JsonNode + ) { val generasjonerNode = vedtaksperiode.path("generasjoner") as ArrayNode val sisteGenerasjon = generasjonerNode.last() as ObjectNode if (sisteGenerasjon.path("tilstand").asText() != "TIL_INFOTRYGD") - return sikkerLogg.info("[V289] siste generasjon er ikke TIL_INFOTRYGD for ${vedtaksperiode.path("fom").asText()} - ${vedtaksperiode.path("tom").asText()} {}, {}, {}", kv("aktørId", aktørId), kv("orgnr", orgnr), kv("vedtaksperiodeId", vedtaksperiode.path("id").asText()), kv("fødselsnummer", fnr)) + return sikkerLogg.info( + "[V289] siste generasjon er ikke TIL_INFOTRYGD for ${ + vedtaksperiode.path( + "fom" + ).asText() + } - ${vedtaksperiode.path("tom").asText()} {}, {}, {}", + kv("aktørId", aktørId), + kv("orgnr", orgnr), + kv("vedtaksperiodeId", vedtaksperiode.path("id").asText()), + kv("fødselsnummer", fnr) + ) if (sisteGenerasjon.hasNonNull("avsluttet")) return - sikkerLogg.info("[V289] setter avsluttettidspunkt på generasjon ${sisteGenerasjon.path("id").asText()} for {}", kv("aktørId", aktørId)) - sisteGenerasjon.put("avsluttet", sisteGenerasjon.path("endringer").last().path("tidsstempel").asText()) + sikkerLogg.info( + "[V289] setter avsluttettidspunkt på generasjon ${ + sisteGenerasjon.path("id").asText() + } for {}", kv("aktørId", aktørId) + ) + sisteGenerasjon.put( + "avsluttet", + sisteGenerasjon.path("endringer").last().path("tidsstempel").asText() + ) } private companion object { private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V290FikseForbrukteDagerSomErNull.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V290FikseForbrukteDagerSomErNull.kt index 29a6d94c32..6705171bdd 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V290FikseForbrukteDagerSomErNull.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V290FikseForbrukteDagerSomErNull.kt @@ -4,8 +4,9 @@ import com.fasterxml.jackson.databind.node.ObjectNode import org.slf4j.LoggerFactory import org.slf4j.MDC -internal class V290FikseForbrukteDagerSomErNull: JsonMigration(version = 290) { - override val description = "fikser historiske utbetalinger som har forbrukteSykedager og gjenståendeSykedager satt til NULL" +internal class V290FikseForbrukteDagerSomErNull : JsonMigration(version = 290) { + override val description = + "fikser historiske utbetalinger som har forbrukteSykedager og gjenståendeSykedager satt til NULL" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { val aktørId = jsonNode.path("aktørId").asText() @@ -16,10 +17,20 @@ internal class V290FikseForbrukteDagerSomErNull: JsonMigration(version = 290) { MDC.putCloseable("orgnr", orgnr).use { arbeidsgiver.path("utbetalinger") .filter { utbetaling -> utbetaling.path("type").asText() == "UTBETALING" } - .filter { utbetaling -> !utbetaling.hasNonNull("forbrukteSykedager") || !utbetaling.hasNonNull("gjenståendeSykedager") } + .filter { utbetaling -> + !utbetaling.hasNonNull("forbrukteSykedager") || !utbetaling.hasNonNull( + "gjenståendeSykedager" + ) + } .forEach { utbetaling -> utbetaling as ObjectNode - sikkerLogg.info("migrerer forbrukteSykedager/gjenståendeSykedager for ${utbetaling.path("id").asText()}") + sikkerLogg.info( + "migrerer forbrukteSykedager/gjenståendeSykedager for ${ + utbetaling.path( + "id" + ).asText() + }" + ) if (!utbetaling.hasNonNull("forbrukeSykedager")) utbetaling.put("forbrukteSykedager", 0) if (!utbetaling.hasNonNull("gjenståendeSykedager")) @@ -34,4 +45,4 @@ internal class V290FikseForbrukteDagerSomErNull: JsonMigration(version = 290) { private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V291FikseTidligereOmgj\303\270ringerSomErRevurderingFeilet.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V291FikseTidligereOmgj\303\270ringerSomErRevurderingFeilet.kt" index 8ad2583791..93a0456fbb 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V291FikseTidligereOmgj\303\270ringerSomErRevurderingFeilet.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V291FikseTidligereOmgj\303\270ringerSomErRevurderingFeilet.kt" @@ -6,8 +6,9 @@ import com.fasterxml.jackson.databind.node.ObjectNode import org.slf4j.LoggerFactory import org.slf4j.MDC -internal class V291FikseTidligereOmgjøringerSomErRevurderingFeilet: JsonMigration(version = 291) { - override val description = "fikser opp i gamle auu-perioder som står i REVURDERING_FEILET, hvor siste behandling er TIL_INFOTRYGD og den nest siste er BEREGNET_OMGJØRING" +internal class V291FikseTidligereOmgjøringerSomErRevurderingFeilet : JsonMigration(version = 291) { + override val description = + "fikser opp i gamle auu-perioder som står i REVURDERING_FEILET, hvor siste behandling er TIL_INFOTRYGD og den nest siste er BEREGNET_OMGJØRING" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { val aktørId = jsonNode.path("aktørId").asText() @@ -26,19 +27,49 @@ internal class V291FikseTidligereOmgjøringerSomErRevurderingFeilet: JsonMigrati } private fun migrerVedtaksperiode(vedtaksperiode: JsonNode) { - if (vedtaksperiode.path("tilstand").asText() !in setOf("TIL_INFOTRYGD", "REVURDERING_FEILET")) return + if (vedtaksperiode.path("tilstand").asText() !in setOf( + "TIL_INFOTRYGD", + "REVURDERING_FEILET" + )) return val generasjoner = vedtaksperiode.path("generasjoner") as ArrayNode if (generasjoner.size() < 3) return val siste = generasjoner.last() - if (siste.path("tilstand").asText() != "TIL_INFOTRYGD") return sikkerLogg.info("siste generasjon ${siste.path("id").asText()} står i ${siste.path("tilstand").asText()}") + if (siste.path("tilstand").asText() != "TIL_INFOTRYGD") return sikkerLogg.info( + "siste generasjon ${ + siste.path( + "id" + ).asText() + } står i ${siste.path("tilstand").asText()}" + ) val nestSist = generasjoner[generasjoner.size() - 2] - if (nestSist.path("tilstand").asText() !in setOf("UBEREGNET_OMGJØRING", "BEREGNET_OMGJØRING")) return sikkerLogg.info("nest siste generasjon ${nestSist.path("id").asText()} står i ${nestSist.path("tilstand").asText()}") + if (nestSist.path("tilstand").asText() !in setOf( + "UBEREGNET_OMGJØRING", + "BEREGNET_OMGJØRING" + )) return sikkerLogg.info( + "nest siste generasjon ${ + nestSist.path("id").asText() + } står i ${nestSist.path("tilstand").asText()}" + ) val nestNestSist = generasjoner[generasjoner.size() - 3] - if (nestNestSist.path("tilstand").asText() != "AVSLUTTET_UTEN_VEDTAK") return sikkerLogg.info("nest-nest siste generasjon ${nestNestSist.path("id").asText()} står i ${nestNestSist.path("tilstand").asText()}") + if (nestNestSist.path("tilstand") + .asText() != "AVSLUTTET_UTEN_VEDTAK") return sikkerLogg.info( + "nest-nest siste generasjon ${ + nestNestSist.path( + "id" + ).asText() + } står i ${nestNestSist.path("tilstand").asText()}" + ) - val avsluttettidspunkt = siste.path("avsluttet").takeIf(JsonNode::isTextual)?.asText() ?: return sikkerLogg.info("siste generasjon ${siste.path("id").asText()} har ikke avsluttettidspunkt") + val avsluttettidspunkt = + siste.path("avsluttet").takeIf(JsonNode::isTextual)?.asText() ?: return sikkerLogg.info( + "siste generasjon ${siste.path("id").asText()} har ikke avsluttettidspunkt" + ) - sikkerLogg.info("fjerner siste generasjon ${siste.path("id").asText()} som står i ${siste.path("tilstand").asText()}") + sikkerLogg.info( + "fjerner siste generasjon ${ + siste.path("id").asText() + } som står i ${siste.path("tilstand").asText()}" + ) nestSist as ObjectNode nestSist.put("avsluttet", avsluttettidspunkt) @@ -50,4 +81,4 @@ internal class V291FikseTidligereOmgjøringerSomErRevurderingFeilet: JsonMigrati private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V292AnnullertPeriode.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V292AnnullertPeriode.kt index 9211bea128..e3023a5495 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V292AnnullertPeriode.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V292AnnullertPeriode.kt @@ -6,7 +6,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode import org.slf4j.LoggerFactory import org.slf4j.MDC -internal class V292AnnullertPeriode: JsonMigration(version = 292) { +internal class V292AnnullertPeriode : JsonMigration(version = 292) { override val description = "setter tilstand=ANNULLERT_PERIODE for annullerte behandlinger" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -16,33 +16,57 @@ internal class V292AnnullertPeriode: JsonMigration(version = 292) { jsonNode.path("arbeidsgivere").forEach { arbeidsgiver -> val orgnr = arbeidsgiver.path("organisasjonsnummer").asText() MDC.putCloseable("orgnr", orgnr).use { - val opphørtAvAndreUtbetalinger = arbeidsgiver.path("utbetalinger").flatMap { utbetaling -> - utbetaling.path("annulleringer").map { it.asText() } - }.toSet() + val opphørtAvAndreUtbetalinger = + arbeidsgiver.path("utbetalinger").flatMap { utbetaling -> + utbetaling.path("annulleringer").map { it.asText() } + }.toSet() val utbetalinger = arbeidsgiver.path("utbetalinger") .associateBy { it.path("id").asText() } val annulleringer = arbeidsgiver.path("utbetalinger") - .filter { utbetaling -> utbetaling.path("type").asText() == "ANNULLERING" && utbetaling.path("status").asText() == "ANNULLERT" } - .filterNot { annullering -> annullering.path("id").asText() in opphørtAvAndreUtbetalinger } + .filter { utbetaling -> + utbetaling.path("type") + .asText() == "ANNULLERING" && utbetaling.path("status") + .asText() == "ANNULLERT" + } + .filterNot { annullering -> + annullering.path("id").asText() in opphørtAvAndreUtbetalinger + } arbeidsgiver.path("forkastede") .forEach { forkastet -> val vedtaksperiode = forkastet.path("vedtaksperiode") - MDC.putCloseable("vedtaksperiodeId", vedtaksperiode.path("id").asText()).use { - migrerVedtaksperiode(utbetalinger, annulleringer, vedtaksperiode) - } + MDC.putCloseable("vedtaksperiodeId", vedtaksperiode.path("id").asText()) + .use { + migrerVedtaksperiode( + utbetalinger, + annulleringer, + vedtaksperiode + ) + } } } } } } - private fun migrerVedtaksperiode(utbetalinger: Map, annulleringer: List, vedtaksperiode: JsonNode) { + private fun migrerVedtaksperiode( + utbetalinger: Map, + annulleringer: List, + vedtaksperiode: JsonNode + ) { val generasjoner = vedtaksperiode.path("generasjoner") as ArrayNode val siste = generasjoner.last() - if (siste.path("tilstand").asText() != "TIL_INFOTRYGD") return sikkerLogg.info("[V292] siste generasjon ${siste.path("id").asText()} som står i ${siste.path("tilstand").asText()} og det er forventet at den skal være TIL_INFOTRYGD") + if (siste.path("tilstand").asText() != "TIL_INFOTRYGD") return sikkerLogg.info( + "[V292] siste generasjon ${ + siste.path( + "id" + ).asText() + } som står i ${ + siste.path("tilstand").asText() + } og det er forventet at den skal være TIL_INFOTRYGD" + ) if (generasjoner.size() == 1) return val nestSist = generasjoner[generasjoner.size() - 2] @@ -50,27 +74,38 @@ internal class V292AnnullertPeriode: JsonMigration(version = 292) { val sisteEndring = nestSist.path("endringer").lastOrNull() ?: return val utbetalingId = sisteEndring.path("utbetalingId")?.takeIf(JsonNode::isTextual)?.asText() - ?: return sikkerLogg.info("[V292] nest siste generasjon ${siste.path("id").asText()} har ingen utbetaling ?!") + ?: return sikkerLogg.info( + "[V292] nest siste generasjon ${ + siste.path("id").asText() + } har ingen utbetaling ?!" + ) val utbetalingen = utbetalinger.getValue(utbetalingId) val tilhørendeAnnullering = annulleringer.firstOrNull { annullering -> - annullering.path("korrelasjonsId").asText() == utbetalingen.path("korrelasjonsId").asText() - } ?: return sikkerLogg.info("[V292] fant ikke en tilhørende annullering for utbetaling $utbetalingId ?!") + annullering.path("korrelasjonsId").asText() == utbetalingen.path("korrelasjonsId") + .asText() + } + ?: return sikkerLogg.info("[V292] fant ikke en tilhørende annullering for utbetaling $utbetalingId ?!") - sikkerLogg.info("[V292] endrer tilstand til ANNULLERT_PERIODE for generasjon ${siste.path("id").asText()}") + sikkerLogg.info( + "[V292] endrer tilstand til ANNULLERT_PERIODE for generasjon ${ + siste.path("id").asText() + }" + ) siste as ObjectNode siste.put("tilstand", "ANNULLERT_PERIODE") val sisteEndringerSisteGenerasjon = siste.path("endringer").last() as ObjectNode val kopi = sisteEndring.deepCopy() sisteEndringerSisteGenerasjon.put("utbetalingId", tilhørendeAnnullering.path("id").asText()) - kopi.path("vilkårsgrunnlagId").takeIf(JsonNode::isTextual)?.asText()?.also { vilkårsgrunnlagId -> - sisteEndringerSisteGenerasjon.put("vilkårsgrunnlagId", vilkårsgrunnlagId) - } + kopi.path("vilkårsgrunnlagId").takeIf(JsonNode::isTextual)?.asText() + ?.also { vilkårsgrunnlagId -> + sisteEndringerSisteGenerasjon.put("vilkårsgrunnlagId", vilkårsgrunnlagId) + } } private companion object { private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V293AvsluttetUberegnedeOmgj\303\270ringer.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V293AvsluttetUberegnedeOmgj\303\270ringer.kt" index 89aa593ca1..e202ed3c0a 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V293AvsluttetUberegnedeOmgj\303\270ringer.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V293AvsluttetUberegnedeOmgj\303\270ringer.kt" @@ -7,7 +7,7 @@ import net.logstash.logback.argument.StructuredArguments.kv import org.slf4j.LoggerFactory import org.slf4j.MDC -internal class V293AvsluttetUberegnedeOmgjøringer: JsonMigration(version = 293) { +internal class V293AvsluttetUberegnedeOmgjøringer : JsonMigration(version = 293) { override val description = "avslutter uberegnede omgjøringer for auu-perioder" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -37,7 +37,10 @@ internal class V293AvsluttetUberegnedeOmgjøringer: JsonMigration(version = 293) if (siste.path("tilstand").asText() != "UBEREGNET_OMGJØRING") return val avsluttet = vedtaksperiode.path("oppdatert").asText() - sikkerLogg.info("lukker behandling=${siste.path("id").asText()} for {}", kv("vedtaksperiodeId", vedtaksperiode.path("id").asText())) + sikkerLogg.info( + "lukker behandling=${siste.path("id").asText()} for {}", + kv("vedtaksperiodeId", vedtaksperiode.path("id").asText()) + ) siste as ObjectNode siste.put("tilstand", "AVSLUTTET_UTEN_VEDTAK") siste.put("avsluttet", avsluttet) @@ -47,4 +50,4 @@ internal class V293AvsluttetUberegnedeOmgjøringer: JsonMigration(version = 293) private val sikkerLogg = LoggerFactory.getLogger("tjenestekall") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V294RenameTilBehandlinger.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V294RenameTilBehandlinger.kt index b64f2d4f79..fb56289a8d 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V294RenameTilBehandlinger.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V294RenameTilBehandlinger.kt @@ -4,13 +4,14 @@ import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.ArrayNode import com.fasterxml.jackson.databind.node.ObjectNode -internal class V294RenameTilBehandlinger: JsonMigration(version = 294) { +internal class V294RenameTilBehandlinger : JsonMigration(version = 294) { override val description = "renamer generasjoner til behandlinger i json" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { jsonNode.path("arbeidsgivere").forEach { arbeidsgiver -> arbeidsgiver.path("vedtaksperioder").forEach { migrerVedtaksperiode(it) } - arbeidsgiver.path("forkastede").forEach { migrerVedtaksperiode(it.path("vedtaksperiode")) } + arbeidsgiver.path("forkastede") + .forEach { migrerVedtaksperiode(it.path("vedtaksperiode")) } } } @@ -20,4 +21,4 @@ internal class V294RenameTilBehandlinger: JsonMigration(version = 294) { node.set("behandlinger", generasjoner) node.remove("generasjoner") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V295BumpVersjon.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V295BumpVersjon.kt index 0338879bfb..03cebd2d92 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V295BumpVersjon.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V295BumpVersjon.kt @@ -2,8 +2,8 @@ package no.nav.helse.serde.migration import com.fasterxml.jackson.databind.node.ObjectNode -internal class V295BumpVersjon: JsonMigration(version = 295) { +internal class V295BumpVersjon : JsonMigration(version = 295) { override val description = "bumper versjon" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) {} -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V296Skj\303\246ringstidspunktP\303\245Behandlinger.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V296Skj\303\246ringstidspunktP\303\245Behandlinger.kt" index 6be185877a..cc12d93103 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V296Skj\303\246ringstidspunktP\303\245Behandlinger.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V296Skj\303\246ringstidspunktP\303\245Behandlinger.kt" @@ -3,7 +3,7 @@ package no.nav.helse.serde.migration import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.ObjectNode -internal class V296SkjæringstidspunktPåBehandlinger: JsonMigration(version = 296) { +internal class V296SkjæringstidspunktPåBehandlinger : JsonMigration(version = 296) { override val description = "skjæringstidspunkt på behandlinger" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -20,9 +20,10 @@ internal class V296SkjæringstidspunktPåBehandlinger: JsonMigration(version = 2 private fun migrerVedtaksperiode(vedtaksperiode: JsonNode) { var gjeldendeSkjæringstidspunkt: String = vedtaksperiode.path("skjæringstidspunkt").asText() vedtaksperiode.path("behandlinger").reversed().forEach { behandling -> - val skjæringstidspunkt = behandling.path("endringer").reversed().firstNotNullOfOrNull { endring -> - endring.path("skjæringstidspunkt").takeIf(JsonNode::isTextual)?.asText() - } + val skjæringstidspunkt = + behandling.path("endringer").reversed().firstNotNullOfOrNull { endring -> + endring.path("skjæringstidspunkt").takeIf(JsonNode::isTextual)?.asText() + } if (skjæringstidspunkt != null) { gjeldendeSkjæringstidspunkt = skjæringstidspunkt @@ -34,4 +35,4 @@ internal class V296SkjæringstidspunktPåBehandlinger: JsonMigration(version = 2 } } } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V297IdentifiserFerdigBehandledePerioderMed\303\205penBehandling.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V297IdentifiserFerdigBehandledePerioderMed\303\205penBehandling.kt" index 43aee043ee..9fcd4dca01 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V297IdentifiserFerdigBehandledePerioderMed\303\205penBehandling.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V297IdentifiserFerdigBehandledePerioderMed\303\205penBehandling.kt" @@ -8,7 +8,8 @@ import net.logstash.logback.argument.StructuredArguments.keyValue import org.intellij.lang.annotations.Language import org.slf4j.LoggerFactory -internal class V297IdentifiserFerdigBehandledePerioderMedÅpenBehandling: JsonMigration(version = 297) { +internal class V297IdentifiserFerdigBehandledePerioderMedÅpenBehandling : + JsonMigration(version = 297) { override val description = "identifisere ferdig behandlede perioder med åpen behandling" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -21,20 +22,41 @@ internal class V297IdentifiserFerdigBehandledePerioderMedÅpenBehandling: JsonMi jsonNode.path("arbeidsgivere").forEach { arbeidsgiver -> val organisasjonsnummer = arbeidsgiver.path("organisasjonsnummer").asText() arbeidsgiver.path("vedtaksperioder") - .filter { it.path("tilstand").asText() in setOf("AVSLUTTET", "AVSLUTTET_UTEN_UTBETALING") } + .filter { + it.path("tilstand").asText() in setOf( + "AVSLUTTET", + "AVSLUTTET_UTEN_UTBETALING" + ) + } .forEach { ferdigBehandletVedtaksperiode -> val påminnelse = - if (ferdigBehandletVedtaksperiode.path("tilstand").asText() == "AVSLUTTET") ferdigBehandletVedtaksperiode.validerVedtakIverksatt(aktørId, fødselsnummer, organisasjonsnummer) - else ferdigBehandletVedtaksperiode.validerAvsluttetUtenVedtak(aktørId, fødselsnummer, organisasjonsnummer) + if (ferdigBehandletVedtaksperiode.path("tilstand") + .asText() == "AVSLUTTET") ferdigBehandletVedtaksperiode.validerVedtakIverksatt( + aktørId, + fødselsnummer, + organisasjonsnummer + ) + else ferdigBehandletVedtaksperiode.validerAvsluttetUtenVedtak( + aktørId, + fødselsnummer, + organisasjonsnummer + ) if (påminnelse != null) påminnelser.add(påminnelse) } } if (påminnelser.isEmpty()) return val snutePåminnelse = påminnelser.minBy { it.first }.second - sikkerLogg.info("Påminnelse for å fikse behandlinger for {}:\n\t${snutePåminnelse}", keyValue("aktørId", aktørId)) + sikkerLogg.info( + "Påminnelse for å fikse behandlinger for {}:\n\t${snutePåminnelse}", + keyValue("aktørId", aktørId) + ) } catch (exception: Exception) { - sikkerLogg.error("Feil ved migrering til versjon 297 for {}", keyValue("aktørId", aktørId), exception) + sikkerLogg.error( + "Feil ved migrering til versjon 297 for {}", + keyValue("aktørId", aktørId), + exception + ) } } @@ -45,24 +67,77 @@ internal class V297IdentifiserFerdigBehandledePerioderMedÅpenBehandling: JsonMi private fun JsonNode.sisteBehandlingOrNull() = path("behandlinger").lastOrNull() private fun JsonNode.fom() = LocalDate.parse(path("endringer").last().path("fom").asText()) - private fun JsonNode.validerVedtakIverksatt(aktørId: String, fødselsnummer: String, organisasjonsnummer: String): Pair? { + private fun JsonNode.validerVedtakIverksatt( + aktørId: String, + fødselsnummer: String, + organisasjonsnummer: String + ): Pair? { val vedtaksperiodeId = path("id").asText() - val sisteBehandling = sisteBehandlingOrNull() ?: return sikkerLogg.error("Avsluttet {} for {} på {} har ingen behandlinger", keyValue("vedtaksperiodeId", vedtaksperiodeId), keyValue("aktørId", aktørId), keyValue("organisasjonsnummer", organisasjonsnummer)).let { null } - val tilstand = sisteBehandling.path("tilstand").asText().takeUnless { it == "VEDTAK_IVERKSATT" } ?: return null - sikkerLogg.error("Avsluttet {} for {} på {} har siste {} i {}", keyValue("vedtaksperiodeId", vedtaksperiodeId), keyValue("aktørId", aktørId), keyValue("organisasjonsnummer", organisasjonsnummer), keyValue("behandlingId", sisteBehandling.path("id").asText()), keyValue("tilstand", tilstand)) - return sisteBehandling.fom() to påminnelse(aktørId, fødselsnummer, organisasjonsnummer, vedtaksperiodeId, "AVSLUTTET") + val sisteBehandling = sisteBehandlingOrNull() ?: return sikkerLogg.error( + "Avsluttet {} for {} på {} har ingen behandlinger", + keyValue("vedtaksperiodeId", vedtaksperiodeId), + keyValue("aktørId", aktørId), + keyValue("organisasjonsnummer", organisasjonsnummer) + ).let { null } + val tilstand = + sisteBehandling.path("tilstand").asText().takeUnless { it == "VEDTAK_IVERKSATT" } + ?: return null + sikkerLogg.error( + "Avsluttet {} for {} på {} har siste {} i {}", + keyValue("vedtaksperiodeId", vedtaksperiodeId), + keyValue("aktørId", aktørId), + keyValue("organisasjonsnummer", organisasjonsnummer), + keyValue("behandlingId", sisteBehandling.path("id").asText()), + keyValue("tilstand", tilstand) + ) + return sisteBehandling.fom() to påminnelse( + aktørId, + fødselsnummer, + organisasjonsnummer, + vedtaksperiodeId, + "AVSLUTTET" + ) } - private fun JsonNode.validerAvsluttetUtenVedtak(aktørId: String, fødselsnummer: String, organisasjonsnummer: String): Pair? { + private fun JsonNode.validerAvsluttetUtenVedtak( + aktørId: String, + fødselsnummer: String, + organisasjonsnummer: String + ): Pair? { val vedtaksperiodeId = path("id").asText() - val sisteBehandling = sisteBehandlingOrNull() ?: return sikkerLogg.error("AvsluttetUtenUtbetaling {} for {} på {} har ingen behandlinger", keyValue("vedtaksperiodeId", vedtaksperiodeId), keyValue("aktørId", aktørId), keyValue("organisasjonsnummer", organisasjonsnummer)).let { null } - val tilstand = sisteBehandling.path("tilstand").asText().takeUnless { it == "AVSLUTTET_UTEN_VEDTAK" } ?: return null - sikkerLogg.error("AvsluttetUtenUtbetaling {} for {} på {} har siste {} i {}", keyValue("vedtaksperiodeId", vedtaksperiodeId), keyValue("aktørId", aktørId), keyValue("organisasjonsnummer", organisasjonsnummer), keyValue("behandlingId", sisteBehandling.path("id").asText()), keyValue("tilstand", tilstand)) - return sisteBehandling.fom() to påminnelse(aktørId, fødselsnummer, organisasjonsnummer, vedtaksperiodeId, "AVSLUTTET_UTEN_UTBETALING") + val sisteBehandling = sisteBehandlingOrNull() ?: return sikkerLogg.error( + "AvsluttetUtenUtbetaling {} for {} på {} har ingen behandlinger", + keyValue("vedtaksperiodeId", vedtaksperiodeId), + keyValue("aktørId", aktørId), + keyValue("organisasjonsnummer", organisasjonsnummer) + ).let { null } + val tilstand = sisteBehandling.path("tilstand").asText() + .takeUnless { it == "AVSLUTTET_UTEN_VEDTAK" } ?: return null + sikkerLogg.error( + "AvsluttetUtenUtbetaling {} for {} på {} har siste {} i {}", + keyValue("vedtaksperiodeId", vedtaksperiodeId), + keyValue("aktørId", aktørId), + keyValue("organisasjonsnummer", organisasjonsnummer), + keyValue("behandlingId", sisteBehandling.path("id").asText()), + keyValue("tilstand", tilstand) + ) + return sisteBehandling.fom() to påminnelse( + aktørId, + fødselsnummer, + organisasjonsnummer, + vedtaksperiodeId, + "AVSLUTTET_UTEN_UTBETALING" + ) } @Language("JSON") - private fun påminnelse(aktørId: String, fødselsnummer: String, organisasjonsnummer: String, vedtaksperiode: String, tilstand: String) = """ + private fun påminnelse( + aktørId: String, + fødselsnummer: String, + organisasjonsnummer: String, + vedtaksperiode: String, + tilstand: String + ) = """ { "@event_name": "påminnelse", "fødselsnummer": "$fødselsnummer", "aktørId": "$aktørId", "organisasjonsnummer": "$organisasjonsnummer", "vedtaksperiodeId": "$vedtaksperiode", "tilstand": "$tilstand", "påminnelsestidspunkt": "{{now}}", "nestePåminnelsestidspunkt": "{{now+1h}}", "tilstandsendringstidspunkt": "{{now-1h}}", "antallGangerPåminnet": 1, "ønskerReberegning": true } """.let { objectMapper.readTree(it) } } diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V298EgenmeldingsdagerP\303\245Vedtaksperiode.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V298EgenmeldingsdagerP\303\245Vedtaksperiode.kt" index faec05c694..97065f8cc2 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V298EgenmeldingsdagerP\303\245Vedtaksperiode.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V298EgenmeldingsdagerP\303\245Vedtaksperiode.kt" @@ -3,7 +3,7 @@ package no.nav.helse.serde.migration import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.ObjectNode -internal class V298EgenmeldingsdagerPåVedtaksperiode: JsonMigration(version = 298) { +internal class V298EgenmeldingsdagerPåVedtaksperiode : JsonMigration(version = 298) { override val description = "lagrer egenmeldingsdager på vedtaksperiode" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -21,4 +21,4 @@ internal class V298EgenmeldingsdagerPåVedtaksperiode: JsonMigration(version = 2 vedtaksperiode as ObjectNode vedtaksperiode.putArray("egenmeldingsperioder") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiode.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiode.kt index db0cd5b3cb..59494e6163 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiode.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiode.kt @@ -5,7 +5,8 @@ import com.fasterxml.jackson.databind.node.ArrayNode import com.fasterxml.jackson.databind.node.ObjectNode import no.nav.helse.serde.serdeObjectMapper -internal class V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiode: JsonMigration(version = 299) { +internal class V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiode : + JsonMigration(version = 299) { override val description = "lagrer egenmeldingsdager på vedtaksperiode" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -29,8 +30,7 @@ internal class V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiode: JsonMigrat serdeObjectMapper.createObjectNode() .put("fom", dag["fom"].asText()) .put("tom", dag["tom"].asText()) - } - else { + } else { serdeObjectMapper.createObjectNode() .put("fom", dag["dato"].asText()) .put("tom", dag["dato"].asText()) @@ -44,6 +44,5 @@ internal class V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiode: JsonMigrat egenmeldingsperioder.addAll(egenmeldingsperioderFraSykdomstidslinjen) - } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V302MaksdatoresultatP\303\245Behandling.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V302MaksdatoresultatP\303\245Behandling.kt" index 7a71dcf533..6f5a5bcaeb 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V302MaksdatoresultatP\303\245Behandling.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V302MaksdatoresultatP\303\245Behandling.kt" @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.ObjectNode import java.time.LocalDate -internal class V302MaksdatoresultatPåBehandling: JsonMigration(version = 302) { +internal class V302MaksdatoresultatPåBehandling : JsonMigration(version = 302) { override val description = "lagrer maksdatoresultat på behandling" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V303KopiereMaksdatoFraUtbetalingTilBehandling.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V303KopiereMaksdatoFraUtbetalingTilBehandling.kt index bab72ce5c6..e83945e8ed 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V303KopiereMaksdatoFraUtbetalingTilBehandling.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V303KopiereMaksdatoFraUtbetalingTilBehandling.kt @@ -10,9 +10,8 @@ import java.time.LocalDateTime import java.util.UUID import net.logstash.logback.argument.StructuredArguments.kv import org.slf4j.LoggerFactory -import kotlin.collections.flatMap -internal class V303KopiereMaksdatoFraUtbetalingTilBehandling: JsonMigration(version = 303) { +internal class V303KopiereMaksdatoFraUtbetalingTilBehandling : JsonMigration(version = 303) { override val description = "lagrer maksdatoresultat på behandling" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -23,12 +22,18 @@ internal class V303KopiereMaksdatoFraUtbetalingTilBehandling: JsonMigration(vers val infotrygdbetalteDager = jsonNode.path("infotrygdhistorikk").map { element -> val tidligsteTidspunkt = LocalDateTime.parse(element.path("tidsstempel").asText()) - val arbeidsgiverutbetalinger = element.path("arbeidsgiverutbetalingsperioder").map { periode -> - LocalDate.parse(periode.path("fom").asText())..LocalDate.parse(periode.path("tom").asText()) - } - val personutbetalinger = element.path("arbeidsgiverutbetalingsperioder").map { periode -> - LocalDate.parse(periode.path("fom").asText())..LocalDate.parse(periode.path("tom").asText()) - } + val arbeidsgiverutbetalinger = + element.path("arbeidsgiverutbetalingsperioder").map { periode -> + LocalDate.parse( + periode.path("fom").asText() + )..LocalDate.parse(periode.path("tom").asText()) + } + val personutbetalinger = + element.path("arbeidsgiverutbetalingsperioder").map { periode -> + LocalDate.parse( + periode.path("fom").asText() + )..LocalDate.parse(periode.path("tom").asText()) + } Infotrygdutbetalinger( tidspunkt = tidligsteTidspunkt, betalteDager = (arbeidsgiverutbetalinger + personutbetalinger) @@ -64,7 +69,8 @@ internal class V303KopiereMaksdatoFraUtbetalingTilBehandling: JsonMigration(vers } .map { dag -> val årsaker = dag.path("begrunnelser").map { it.asText() } - val maksdatobegrunnelse = Maksdatobegrunnelse.entries.first { it.name in årsaker } + val maksdatobegrunnelse = + Maksdatobegrunnelse.entries.first { it.name in årsaker } val periode = dag.somPeriode() maksdatobegrunnelse to periode } @@ -86,71 +92,75 @@ internal class V303KopiereMaksdatoFraUtbetalingTilBehandling: JsonMigration(vers arbeidsgiver.path("organisasjonsnummer").asText() to utbetalinger } - val maksdatoresultater = utbetalingerPerArbeidsgiver.flatMap { (arbeidsgiver, utbetalinger) -> - utbetalinger.map { utbetaling -> - // kanskje er det dager utbetalt i Infotrygd? - // eller på andre arbeidsgivere? - // Vi må danne oss et totalbilde av alt som er forbrukt før utbetalingen ble beregnet - val sisteInfotrygdelementFørBeregning = infotrygdbetalteDager - .firstOrNull { it.tidspunkt < utbetaling.beregningstidspunkt } - ?.betalteDager - ?.flatMap { it.datoer() } - ?.toSet() - ?: emptySet() + val maksdatoresultater = + utbetalingerPerArbeidsgiver.flatMap { (arbeidsgiver, utbetalinger) -> + utbetalinger.map { utbetaling -> + // kanskje er det dager utbetalt i Infotrygd? + // eller på andre arbeidsgivere? + // Vi må danne oss et totalbilde av alt som er forbrukt før utbetalingen ble beregnet + val sisteInfotrygdelementFørBeregning = infotrygdbetalteDager + .firstOrNull { it.tidspunkt < utbetaling.beregningstidspunkt } + ?.betalteDager + ?.flatMap { it.datoer() } + ?.toSet() + ?: emptySet() - val forbrukteDagerAndreArbeidsgivere = utbetalingerPerArbeidsgiver - .flatMap { (_, andreUtbetalinger) -> - andreUtbetalinger - .filterNot { it.korrelasjonsId == utbetaling.korrelasjonsId } - .groupBy { it.korrelasjonsId } - .flatMap { (_, utbetalinger) -> - utbetalinger - .filter { it.beregningstidspunkt < utbetaling.beregningstidspunkt } - .sortedByDescending { it.beregningstidspunkt } - .takeLast(1) - .flatMap { it.forbrukteDager.flatMap { it.datoer() } } - } - } - .toSet() + val forbrukteDagerAndreArbeidsgivere = utbetalingerPerArbeidsgiver + .flatMap { (_, andreUtbetalinger) -> + andreUtbetalinger + .filterNot { it.korrelasjonsId == utbetaling.korrelasjonsId } + .groupBy { it.korrelasjonsId } + .flatMap { (_, utbetalinger) -> + utbetalinger + .filter { it.beregningstidspunkt < utbetaling.beregningstidspunkt } + .sortedByDescending { it.beregningstidspunkt } + .takeLast(1) + .flatMap { it.forbrukteDager.flatMap { it.datoer() } } + } + } + .toSet() - val forbrukteDager = utbetaling.forbrukteDager.flatMap { it.datoer() }.toSet() - val totalbildeForbrukteDager = sisteInfotrygdelementFørBeregning + forbrukteDagerAndreArbeidsgivere + forbrukteDager + val forbrukteDager = utbetaling.forbrukteDager.flatMap { it.datoer() }.toSet() + val totalbildeForbrukteDager = + sisteInfotrygdelementFørBeregning + forbrukteDagerAndreArbeidsgivere + forbrukteDager - val faktiskForbrukte = totalbildeForbrukteDager - .filter { it <= utbetaling.utbetalingTom } - .sortedDescending() - .take(utbetaling.antallForbrukteDager) + val faktiskForbrukte = totalbildeForbrukteDager + .filter { it <= utbetaling.utbetalingTom } + .sortedDescending() + .take(utbetaling.antallForbrukteDager) - val begrunnelerForUtbetalingen = utbetaling.avslåtteDager.keys - val bestemmelse = when { - // bruker først evt. avslagsbegrunnelser som utgangspunkt for å bestemme rettighetsbestemmelsen - Maksdatobegrunnelse.Over70 in begrunnelerForUtbetalingen -> Maksdatobestemmelse.SYTTI_ÅR - Maksdatobegrunnelse.SykepengedagerOppbruktOver67 in begrunnelerForUtbetalingen -> Maksdatobestemmelse.BEGRENSET_RETT - Maksdatobegrunnelse.SykepengedagerOppbrukt in begrunnelerForUtbetalingen -> Maksdatobestemmelse.ORDINÆR_RETT - // hvis maksdato er syttiårsdagen, da er det avgjort! - utbetaling.maksdato == maksdatoSyttiåring -> Maksdatobestemmelse.SYTTI_ÅR - // hvis bruker ikke har gått til maks, men totalt antall sykepengedager er under 248, da må det være snakk om begrenset - (utbetaling.antallGjenståendeDager + utbetaling.antallForbrukteDager) < 248 -> Maksdatobestemmelse.BEGRENSET_RETT - else -> Maksdatobestemmelse.ORDINÆR_RETT - } + val begrunnelerForUtbetalingen = utbetaling.avslåtteDager.keys + val bestemmelse = when { + // bruker først evt. avslagsbegrunnelser som utgangspunkt for å bestemme rettighetsbestemmelsen + Maksdatobegrunnelse.Over70 in begrunnelerForUtbetalingen -> Maksdatobestemmelse.SYTTI_ÅR + Maksdatobegrunnelse.SykepengedagerOppbruktOver67 in begrunnelerForUtbetalingen -> Maksdatobestemmelse.BEGRENSET_RETT + Maksdatobegrunnelse.SykepengedagerOppbrukt in begrunnelerForUtbetalingen -> Maksdatobestemmelse.ORDINÆR_RETT + // hvis maksdato er syttiårsdagen, da er det avgjort! + utbetaling.maksdato == maksdatoSyttiåring -> Maksdatobestemmelse.SYTTI_ÅR + // hvis bruker ikke har gått til maks, men totalt antall sykepengedager er under 248, da må det være snakk om begrenset + (utbetaling.antallGjenståendeDager + utbetaling.antallForbrukteDager) < 248 -> Maksdatobestemmelse.BEGRENSET_RETT + else -> Maksdatobestemmelse.ORDINÆR_RETT + } - utbetaling.utbetalingId to Maksdatoresultat( - vurdertTilOgMed = utbetaling.utbetalingTom, - bestemmelse = bestemmelse, - startdatoTreårsvindu = forbrukteDager.firstOrNull()?.minusYears(3) ?: LocalDate.MIN, - startdatoSykepengerettighet = forbrukteDager.firstOrNull(), - antallForbrukteDager = utbetaling.antallForbrukteDager, - forbrukteDager = faktiskForbrukte.merge().map { Datoperiode(it.start, it.endInclusive) }, - oppholdsdager = emptyList(), - avslåtteDager = utbetaling.avslåtteDager - .flatMap { (_, dager) -> dager.flatMap { it.datoer() } } - .merge() - .map { Datoperiode(it.start, it.endInclusive) }, - maksdato = utbetaling.maksdato, - gjenståendeDager = utbetaling.antallGjenståendeDager - ) - } - }.toMap() + utbetaling.utbetalingId to Maksdatoresultat( + vurdertTilOgMed = utbetaling.utbetalingTom, + bestemmelse = bestemmelse, + startdatoTreårsvindu = forbrukteDager.firstOrNull()?.minusYears(3) + ?: LocalDate.MIN, + startdatoSykepengerettighet = forbrukteDager.firstOrNull(), + antallForbrukteDager = utbetaling.antallForbrukteDager, + forbrukteDager = faktiskForbrukte.merge() + .map { Datoperiode(it.start, it.endInclusive) }, + oppholdsdager = emptyList(), + avslåtteDager = utbetaling.avslåtteDager + .flatMap { (_, dager) -> dager.flatMap { it.datoer() } } + .merge() + .map { Datoperiode(it.start, it.endInclusive) }, + maksdato = utbetaling.maksdato, + gjenståendeDager = utbetaling.antallGjenståendeDager + ) + } + }.toMap() jsonNode.path("arbeidsgivere").forEach { arbeidsgiver -> @@ -163,7 +173,11 @@ internal class V303KopiereMaksdatoFraUtbetalingTilBehandling: JsonMigration(vers } } - private fun migrerVedtaksperiode(aktørId: String, maksdatoresultater: Map, vedtaksperiode: JsonNode) { + private fun migrerVedtaksperiode( + aktørId: String, + maksdatoresultater: Map, + vedtaksperiode: JsonNode + ) { val vedtaksperiodeId = vedtaksperiode.path("id").asText() vedtaksperiode.path("behandlinger").forEach { behandling -> behandling.path("endringer").forEach { endring -> @@ -172,17 +186,29 @@ internal class V303KopiereMaksdatoFraUtbetalingTilBehandling: JsonMigration(vers } } - private fun migrerEndring(aktørId: String, vedtaksperiodeId: String, maksdatoresultater: Map, endring: ObjectNode) { + private fun migrerEndring( + aktørId: String, + vedtaksperiodeId: String, + maksdatoresultater: Map, + endring: ObjectNode + ) { if (!endring.hasNonNull("utbetalingId")) return if (endring.path("maksdatoresultat").path("bestemmelse").asText() != "IKKE_VURDERT") return val utbetalingId = UUID.fromString(endring.path("utbetalingId").asText()) - val resultat = maksdatoresultater[utbetalingId] ?: - return sikkerlogg.info("[V303] Fant ikke maksdatoresultat for utbetaling. KorrelasjonsIDen har muligens blitt annullert", kv("aktørId", aktørId), kv("vedtaksperiodeId", vedtaksperiodeId)) + val resultat = maksdatoresultater[utbetalingId] ?: return sikkerlogg.info( + "[V303] Fant ikke maksdatoresultat for utbetaling. KorrelasjonsIDen har muligens blitt annullert", + kv("aktørId", aktørId), + kv("vedtaksperiodeId", vedtaksperiodeId) + ) /* vurdering av kvaliteten */ if (resultat.antallForbrukteDager > 0 && resultat.forbrukteDager.isEmpty()) - return sikkerlogg.info("[V303] Fant ingen forbrukte dager, men det skulle vært ${resultat.antallForbrukteDager}", kv("aktørId", aktørId), kv("vedtaksperiodeId", vedtaksperiodeId)) + return sikkerlogg.info( + "[V303] Fant ingen forbrukte dager, men det skulle vært ${resultat.antallForbrukteDager}", + kv("aktørId", aktørId), + kv("vedtaksperiodeId", vedtaksperiodeId) + ) val vurdertTilOgMed = endring.path("tom").asText() @@ -279,7 +305,9 @@ internal class V303KopiereMaksdatoFraUtbetalingTilBehandling: JsonMigration(vers if (this.hasNonNull("dato")) LocalDate.parse(this.path("dato").asText()).let { it..it } else - LocalDate.parse(this.path("fom").asText())..LocalDate.parse(this.path("tom").asText()) + LocalDate.parse(this.path("fom").asText())..LocalDate.parse( + this.path("tom").asText() + ) private fun ClosedRange.datoer() = start.datesUntil(endInclusive.plusDays(1)).toList().toSet() @@ -294,17 +322,20 @@ internal class V303KopiereMaksdatoFraUtbetalingTilBehandling: JsonMigration(vers // dagen dekkes av tidligere intervall last.endInclusive == dagen -> resultat // dagen utvider forrige intervall - last.endInclusive.plusDays(1) == dagen -> resultat.dropLast(1).plusElement(last.start..dagen) + last.endInclusive.plusDays(1) == dagen -> resultat.dropLast(1) + .plusElement(last.start..dagen) // dagen er starten på et nytt intervall else -> resultat.plusElement(dagen..dagen) } } } - private fun LocalDate.forrigeVirkedagFør() = minusDays(when (dayOfWeek) { - SUNDAY -> 2 - MONDAY -> 3 - else -> 1 - }) + private fun LocalDate.forrigeVirkedagFør() = minusDays( + when (dayOfWeek) { + SUNDAY -> 2 + MONDAY -> 3 + else -> 1 + } + ) } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V304FjerneArbeidsledigSykmeldingsperioder.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V304FjerneArbeidsledigSykmeldingsperioder.kt index cbd614f363..2c8f54a45d 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V304FjerneArbeidsledigSykmeldingsperioder.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V304FjerneArbeidsledigSykmeldingsperioder.kt @@ -2,7 +2,7 @@ package no.nav.helse.serde.migration import com.fasterxml.jackson.databind.node.ObjectNode -internal class V304FjerneArbeidsledigSykmeldingsperioder: JsonMigration(version = 304) { +internal class V304FjerneArbeidsledigSykmeldingsperioder : JsonMigration(version = 304) { override val description = "lagrer egenmeldingsdager på vedtaksperiode" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { @@ -13,4 +13,4 @@ internal class V304FjerneArbeidsledigSykmeldingsperioder: JsonMigration(version arbeidsledig.putArray("sykmeldingsperioder") } } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V305RenameSykepengegrunnlagTilInntektsgrunnlag.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V305RenameSykepengegrunnlagTilInntektsgrunnlag.kt index d587a98ca9..c37e49a83d 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V305RenameSykepengegrunnlagTilInntektsgrunnlag.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V305RenameSykepengegrunnlagTilInntektsgrunnlag.kt @@ -2,16 +2,19 @@ package no.nav.helse.serde.migration import com.fasterxml.jackson.databind.node.ObjectNode -internal class V305RenameSykepengegrunnlagTilInntektsgrunnlag: JsonMigration(version = 305) { +internal class V305RenameSykepengegrunnlagTilInntektsgrunnlag : JsonMigration(version = 305) { override val description = "renamer sykepengegrunnlag til inntektsgrunnlag" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { jsonNode.path("vilkårsgrunnlagHistorikk").forEach { historikkInnslag -> historikkInnslag.path("vilkårsgrunnlag").forEach { vilkårsgrunnlag -> vilkårsgrunnlag as ObjectNode - vilkårsgrunnlag.replace("inntektsgrunnlag", vilkårsgrunnlag.path("sykepengegrunnlag")) + vilkårsgrunnlag.replace( + "inntektsgrunnlag", + vilkårsgrunnlag.path("sykepengegrunnlag") + ) vilkårsgrunnlag.remove("sykepengegrunnlag") } } } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V306RefusjonstidslinjeP\303\245Behandling.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V306RefusjonstidslinjeP\303\245Behandling.kt" index 1c5a86c828..575188eddb 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V306RefusjonstidslinjeP\303\245Behandling.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V306RefusjonstidslinjeP\303\245Behandling.kt" @@ -2,9 +2,8 @@ package no.nav.helse.serde.migration import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.ObjectNode -import java.time.LocalDate -internal class V306RefusjonstidslinjePåBehandling: JsonMigration(version = 306) { +internal class V306RefusjonstidslinjePåBehandling : JsonMigration(version = 306) { override val description = "lager en tom refusjonstidslinje på behandling" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V307RefusjonstidslinjeP\303\245Behandlingsendring.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V307RefusjonstidslinjeP\303\245Behandlingsendring.kt" index e34779c48b..6b3f883877 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V307RefusjonstidslinjeP\303\245Behandlingsendring.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V307RefusjonstidslinjeP\303\245Behandlingsendring.kt" @@ -3,7 +3,7 @@ package no.nav.helse.serde.migration import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.ObjectNode -internal class V307RefusjonstidslinjePåBehandlingsendring: JsonMigration(version = 307) { +internal class V307RefusjonstidslinjePåBehandlingsendring : JsonMigration(version = 307) { override val description = "lager en tom refusjonstidslinje på behandlingsendring" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V308HendelseIdP\303\245Infotrygdhistorikk.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V308HendelseIdP\303\245Infotrygdhistorikk.kt" index 908d3c4976..636bc61de9 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V308HendelseIdP\303\245Infotrygdhistorikk.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V308HendelseIdP\303\245Infotrygdhistorikk.kt" @@ -2,7 +2,7 @@ package no.nav.helse.serde.migration import com.fasterxml.jackson.databind.node.ObjectNode -internal class V308HendelseIdPåInfotrygdhistorikk: JsonMigration(version = 308) { +internal class V308HendelseIdPåInfotrygdhistorikk : JsonMigration(version = 308) { override val description = "lager en default id på infotrygdhistorikk uten hendelseId" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { diff --git a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V309LeggeTilUbrukteRefusjonsopplysninger.kt b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V309LeggeTilUbrukteRefusjonsopplysninger.kt index 709819abbc..c74c711a2d 100644 --- a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V309LeggeTilUbrukteRefusjonsopplysninger.kt +++ b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V309LeggeTilUbrukteRefusjonsopplysninger.kt @@ -2,7 +2,7 @@ package no.nav.helse.serde.migration import com.fasterxml.jackson.databind.node.ObjectNode -internal class V309LeggeTilUbrukteRefusjonsopplysninger: JsonMigration(version = 309) { +internal class V309LeggeTilUbrukteRefusjonsopplysninger : JsonMigration(version = 309) { override val description = "legger til ubrukte refusjonsopplysninger på arberidsgivere" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V311AvsenderOgTidsstempelP\303\245Refusjonsopplysning.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V311AvsenderOgTidsstempelP\303\245Refusjonsopplysning.kt" index 710a5742c3..c20768e4ec 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V311AvsenderOgTidsstempelP\303\245Refusjonsopplysning.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V311AvsenderOgTidsstempelP\303\245Refusjonsopplysning.kt" @@ -5,47 +5,61 @@ import java.time.LocalDateTime import java.util.UUID import org.slf4j.LoggerFactory -internal class V311AvsenderOgTidsstempelPåRefusjonsopplysning: JsonMigration(version = 311) { - override val description = "legger til avsender og tidsstempel på refusjonsopplysning i inntektsgrunnlaget" +internal class V311AvsenderOgTidsstempelPåRefusjonsopplysning : JsonMigration(version = 311) { + override val description = + "legger til avsender og tidsstempel på refusjonsopplysning i inntektsgrunnlaget" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { val meldinger = meldingerSupplier.hentMeldinger() val fnr = jsonNode.path("fødselsnummer").asText() jsonNode.path("vilkårsgrunnlagHistorikk").forEach { historikkinnslag -> historikkinnslag.path("vilkårsgrunnlag").forEach { vilkårsgrunnlag -> - vilkårsgrunnlag.path("inntektsgrunnlag").path("arbeidsgiverInntektsopplysninger").forEach { arbeidsgiverInntektsopplysning -> - val fallbackTidsstempel = LocalDateTime.parse(arbeidsgiverInntektsopplysning.path("inntektsopplysning").path("tidsstempel").asText()) - arbeidsgiverInntektsopplysning.path("refusjonsopplysninger") - .filter { refusjonsopplysning -> - refusjonsopplysning.path("tidsstempel").isMissingNode || refusjonsopplysning.path("tidsstempel").isNull - } - .forEach { refusjonsopplysning -> - refusjonsopplysning as ObjectNode - val meldingsreferanseId = UUID.fromString(refusjonsopplysning.path("meldingsreferanseId").asText()) - val hendelse = meldinger[meldingsreferanseId] - if (hendelse == null) { - refusjonsopplysning.put("avsender", "ARBEIDSGIVER") - refusjonsopplysning.put("tidsstempel", "$fallbackTidsstempel") - sikkerlogg.info("Fant ikke melding med meldingsreferanse $meldingsreferanseId for person $fnr. Defaulter til ARBEIDSGIVER og tidsstempel for inntektsopplysning") - } else { - refusjonsopplysning.put("avsender", hendelse.meldingstype.avsender) - refusjonsopplysning.put("tidsstempel", "${hendelse.lestDato}") + vilkårsgrunnlag.path("inntektsgrunnlag").path("arbeidsgiverInntektsopplysninger") + .forEach { arbeidsgiverInntektsopplysning -> + val fallbackTidsstempel = LocalDateTime.parse( + arbeidsgiverInntektsopplysning.path("inntektsopplysning") + .path("tidsstempel").asText() + ) + arbeidsgiverInntektsopplysning.path("refusjonsopplysninger") + .filter { refusjonsopplysning -> + refusjonsopplysning.path("tidsstempel").isMissingNode || refusjonsopplysning.path( + "tidsstempel" + ).isNull } - } - } + .forEach { refusjonsopplysning -> + refusjonsopplysning as ObjectNode + val meldingsreferanseId = UUID.fromString( + refusjonsopplysning.path("meldingsreferanseId").asText() + ) + val hendelse = meldinger[meldingsreferanseId] + if (hendelse == null) { + refusjonsopplysning.put("avsender", "ARBEIDSGIVER") + refusjonsopplysning.put("tidsstempel", "$fallbackTidsstempel") + sikkerlogg.info("Fant ikke melding med meldingsreferanse $meldingsreferanseId for person $fnr. Defaulter til ARBEIDSGIVER og tidsstempel for inntektsopplysning") + } else { + refusjonsopplysning.put( + "avsender", + hendelse.meldingstype.avsender + ) + refusjonsopplysning.put("tidsstempel", "${hendelse.lestDato}") + } + } + } } } } internal companion object { - val String.avsender get() = when(this) { - "INNTEKTSMELDING" -> "ARBEIDSGIVER" - "OVERSTYRARBEIDSGIVEROPPLYSNINGER", - "OVERSTYRINNTEKT", - "MANUELL_SAKSBEHANDLING", - "GJENOPPLIV_VILKÅRSGRUNNLAG" -> "SAKSBEHANDLER" - else -> "ARBEIDSGIVER".also { sikkerlogg.info("Mappet meldingstype $this til avsender ARBEIDSGIVER") } - } + val String.avsender + get() = when (this) { + "INNTEKTSMELDING" -> "ARBEIDSGIVER" + "OVERSTYRARBEIDSGIVEROPPLYSNINGER", + "OVERSTYRINNTEKT", + "MANUELL_SAKSBEHANDLING", + "GJENOPPLIV_VILKÅRSGRUNNLAG" -> "SAKSBEHANDLER" + + else -> "ARBEIDSGIVER".also { sikkerlogg.info("Mappet meldingstype $this til avsender ARBEIDSGIVER") } + } private val sikkerlogg = LoggerFactory.getLogger("tjenestekall") } diff --git "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V312AvsenderOgTidsstempelP\303\245RefusjonsopplysningForDeaktiverteArbeidsforhold.kt" "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V312AvsenderOgTidsstempelP\303\245RefusjonsopplysningForDeaktiverteArbeidsforhold.kt" index 3929cc305d..b33d420e05 100644 --- "a/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V312AvsenderOgTidsstempelP\303\245RefusjonsopplysningForDeaktiverteArbeidsforhold.kt" +++ "b/sykepenger-serde/src/main/kotlin/no/nav/helse/serde/migration/V312AvsenderOgTidsstempelP\303\245RefusjonsopplysningForDeaktiverteArbeidsforhold.kt" @@ -5,47 +5,62 @@ import java.time.LocalDateTime import java.util.UUID import org.slf4j.LoggerFactory -internal class V312AvsenderOgTidsstempelPåRefusjonsopplysningForDeaktiverteArbeidsforhold: JsonMigration(version = 312) { - override val description = "legger til avsender og tidsstempel på refusjonsopplysning i deaktiverte arbedisforhold" +internal class V312AvsenderOgTidsstempelPåRefusjonsopplysningForDeaktiverteArbeidsforhold : + JsonMigration(version = 312) { + override val description = + "legger til avsender og tidsstempel på refusjonsopplysning i deaktiverte arbedisforhold" override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { val meldinger = meldingerSupplier.hentMeldinger() val fnr = jsonNode.path("fødselsnummer").asText() jsonNode.path("vilkårsgrunnlagHistorikk").forEach { historikkinnslag -> historikkinnslag.path("vilkårsgrunnlag").forEach { vilkårsgrunnlag -> - vilkårsgrunnlag.path("inntektsgrunnlag").path("deaktiverteArbeidsforhold").forEach { arbeidsgiverInntektsopplysning -> - val fallbackTidsstempel = LocalDateTime.parse(arbeidsgiverInntektsopplysning.path("inntektsopplysning").path("tidsstempel").asText()) - arbeidsgiverInntektsopplysning.path("refusjonsopplysninger") - .filter { refusjonsopplysning -> - refusjonsopplysning.path("tidsstempel").isMissingNode || refusjonsopplysning.path("tidsstempel").isNull - } - .forEach { refusjonsopplysning -> - refusjonsopplysning as ObjectNode - val meldingsreferanseId = UUID.fromString(refusjonsopplysning.path("meldingsreferanseId").asText()) - val hendelse = meldinger[meldingsreferanseId] - if (hendelse == null) { - refusjonsopplysning.put("avsender", "ARBEIDSGIVER") - refusjonsopplysning.put("tidsstempel", "$fallbackTidsstempel") - sikkerlogg.info("Fant ikke melding med meldingsreferanse $meldingsreferanseId for person $fnr. Defaulter til ARBEIDSGIVER og tidsstempel for inntektsopplysning") - } else { - refusjonsopplysning.put("avsender", hendelse.meldingstype.avsender) - refusjonsopplysning.put("tidsstempel", "${hendelse.lestDato}") + vilkårsgrunnlag.path("inntektsgrunnlag").path("deaktiverteArbeidsforhold") + .forEach { arbeidsgiverInntektsopplysning -> + val fallbackTidsstempel = LocalDateTime.parse( + arbeidsgiverInntektsopplysning.path("inntektsopplysning") + .path("tidsstempel").asText() + ) + arbeidsgiverInntektsopplysning.path("refusjonsopplysninger") + .filter { refusjonsopplysning -> + refusjonsopplysning.path("tidsstempel").isMissingNode || refusjonsopplysning.path( + "tidsstempel" + ).isNull } - } - } + .forEach { refusjonsopplysning -> + refusjonsopplysning as ObjectNode + val meldingsreferanseId = UUID.fromString( + refusjonsopplysning.path("meldingsreferanseId").asText() + ) + val hendelse = meldinger[meldingsreferanseId] + if (hendelse == null) { + refusjonsopplysning.put("avsender", "ARBEIDSGIVER") + refusjonsopplysning.put("tidsstempel", "$fallbackTidsstempel") + sikkerlogg.info("Fant ikke melding med meldingsreferanse $meldingsreferanseId for person $fnr. Defaulter til ARBEIDSGIVER og tidsstempel for inntektsopplysning") + } else { + refusjonsopplysning.put( + "avsender", + hendelse.meldingstype.avsender + ) + refusjonsopplysning.put("tidsstempel", "${hendelse.lestDato}") + } + } + } } } } internal companion object { - val String.avsender get() = when(this) { - "INNTEKTSMELDING" -> "ARBEIDSGIVER" - "OVERSTYRARBEIDSGIVEROPPLYSNINGER", - "OVERSTYRINNTEKT", - "MANUELL_SAKSBEHANDLING", - "GJENOPPLIV_VILKÅRSGRUNNLAG" -> "SAKSBEHANDLER" - else -> "ARBEIDSGIVER".also { sikkerlogg.info("Mappet meldingstype $this til avsender ARBEIDSGIVER") } - } + val String.avsender + get() = when (this) { + "INNTEKTSMELDING" -> "ARBEIDSGIVER" + "OVERSTYRARBEIDSGIVEROPPLYSNINGER", + "OVERSTYRINNTEKT", + "MANUELL_SAKSBEHANDLING", + "GJENOPPLIV_VILKÅRSGRUNNLAG" -> "SAKSBEHANDLER" + + else -> "ARBEIDSGIVER".also { sikkerlogg.info("Mappet meldingstype $this til avsender ARBEIDSGIVER") } + } private val sikkerlogg = LoggerFactory.getLogger("tjenestekall") } diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/DagDataTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/DagDataTest.kt index aeeb1ecc7c..c099bfddd3 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/DagDataTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/DagDataTest.kt @@ -50,8 +50,13 @@ internal class DagDataTest { ) assertEquals(expected, actual) - JSONAssert.assertEquals(json, serdeObjectMapper.writeValueAsString(actual), JSONCompareMode.NON_EXTENSIBLE) + JSONAssert.assertEquals( + json, + serdeObjectMapper.writeValueAsString(actual), + JSONCompareMode.NON_EXTENSIBLE + ) } + @Test fun `deserialisere og serialisere flere dager`() { @Language("JSON") @@ -87,6 +92,10 @@ internal class DagDataTest { ) assertEquals(expected, actual) - JSONAssert.assertEquals(json, serdeObjectMapper.writeValueAsString(actual), JSONCompareMode.NON_EXTENSIBLE) + JSONAssert.assertEquals( + json, + serdeObjectMapper.writeValueAsString(actual), + JSONCompareMode.NON_EXTENSIBLE + ) } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/VedtaksperiodeDataTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/VedtaksperiodeDataTest.kt index 11771add7d..a084b7f8ef 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/VedtaksperiodeDataTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/VedtaksperiodeDataTest.kt @@ -48,6 +48,10 @@ internal class VedtaksperiodeDataTest { ) assertEquals(expected, actual) - JSONAssert.assertEquals(json, serdeObjectMapper.writeValueAsString(actual), JSONCompareMode.NON_EXTENSIBLE) + JSONAssert.assertEquals( + json, + serdeObjectMapper.writeValueAsString(actual), + JSONCompareMode.NON_EXTENSIBLE + ) } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/JsonMigrationTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/JsonMigrationTest.kt index 98c49c49f2..43037b8669 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/JsonMigrationTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/JsonMigrationTest.kt @@ -25,13 +25,19 @@ internal class JsonMigrationTest { listOf( object : JsonMigration(1) { override val description = "" - override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { + override fun doMigration( + jsonNode: ObjectNode, + meldingerSupplier: MeldingerSupplier + ) { meldinger.add(meldingerSupplier.hentMeldinger()) } }, object : JsonMigration(2) { override val description = "" - override fun doMigration(jsonNode: ObjectNode, meldingerSupplier: MeldingerSupplier) { + override fun doMigration( + jsonNode: ObjectNode, + meldingerSupplier: MeldingerSupplier + ) { meldinger.add(meldingerSupplier.hentMeldinger()) } } @@ -124,7 +130,11 @@ internal class JsonMigrationTest { private fun JsonNode.migrate(migration: JsonMigration) = listOf(migration).migrate(this) - private class AddFieldMigration(version: Int, private val field: String, private val value: String) : + private class AddFieldMigration( + version: Int, + private val field: String, + private val value: String + ) : JsonMigration(version) { override val description = "Test migration" diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/MigrationTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/MigrationTest.kt index 0ce0ff2bc5..e7444a6f44 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/MigrationTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/MigrationTest.kt @@ -24,7 +24,11 @@ internal abstract class MigrationTest(private val migration: () -> JsonMigration expectedJson: String, originalJson: String, jsonCompareMode: JSONCompareMode = JSONCompareMode.STRICT - ) = assertMigrationRaw(expectedJson.readResource(), originalJson.readResource(), jsonCompareMode) + ) = assertMigrationRaw( + expectedJson.readResource(), + originalJson.readResource(), + jsonCompareMode + ) protected fun assertMigrationRaw( expectedJson: String, @@ -45,9 +49,15 @@ internal abstract class MigrationTest(private val migration: () -> JsonMigration when (expected) { is ArrayNode -> { if (actual is ArrayNode) { - expected.forEachIndexed { index, value -> erstattPlaceholders(value, actual.path(index)) } + expected.forEachIndexed { index, value -> + erstattPlaceholders( + value, + actual.path(index) + ) + } } } + is ObjectNode -> { if (actual is ObjectNode) { expected.fields().forEach { (key, value) -> @@ -59,7 +69,10 @@ internal abstract class MigrationTest(private val migration: () -> JsonMigration } } - is ArrayNode, is ObjectNode -> erstattPlaceholders(value, actual.path(key)) + is ArrayNode, is ObjectNode -> erstattPlaceholders( + value, + actual.path(key) + ) } } } @@ -85,6 +98,7 @@ internal abstract class MigrationTest(private val migration: () -> JsonMigration private val placeholderRegex = "".toRegex() internal fun String.readResource() = - object {}.javaClass.getResource(this)?.readText(Charsets.UTF_8) ?: error("did not find resource <$this>") + object {}.javaClass.getResource(this)?.readText(Charsets.UTF_8) + ?: error("did not find resource <$this>") } } diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V280HengendeRevurderingerTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V280HengendeRevurderingerTest.kt index 4e30f7ea95..c79938b239 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V280HengendeRevurderingerTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V280HengendeRevurderingerTest.kt @@ -2,10 +2,10 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V280HengendeRevurderingerTest: MigrationTest(V280HengendeRevurderinger()) { +internal class V280HengendeRevurderingerTest : MigrationTest(V280HengendeRevurderinger()) { @Test fun `fjerner hengende uberegnede revurderinger`() { assertMigration("/migrations/280/expected.json", "/migrations/280/original.json") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V281ForkasteAvsluttedePerioderMedUberegnetGenerasjonTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V281ForkasteAvsluttedePerioderMedUberegnetGenerasjonTest.kt index 177ba12fc4..4d31e6240b 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V281ForkasteAvsluttedePerioderMedUberegnetGenerasjonTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V281ForkasteAvsluttedePerioderMedUberegnetGenerasjonTest.kt @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V281ForkasteAvsluttedePerioderMedUberegnetGenerasjonTest : MigrationTest(V281ForkasteAvsluttedePerioderMedUberegnetGenerasjon()) { +internal class V281ForkasteAvsluttedePerioderMedUberegnetGenerasjonTest : + MigrationTest(V281ForkasteAvsluttedePerioderMedUberegnetGenerasjon()) { @Test fun `forkaster vedtaksperioder som er UBEREGNET og AVSLUTTET`() { assertMigration("/migrations/281/expected.json", "/migrations/281/original.json") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V282HengendeRevurderingerTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V282HengendeRevurderingerTest.kt index 03c7fd8494..ac824207ad 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V282HengendeRevurderingerTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V282HengendeRevurderingerTest.kt @@ -2,10 +2,10 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V282HengendeRevurderingerTest: MigrationTest(V282HengendeRevurderinger()) { +internal class V282HengendeRevurderingerTest : MigrationTest(V282HengendeRevurderinger()) { @Test fun `fjerner hengende uberegnede revurderinger`() { assertMigration("/migrations/282/expected.json", "/migrations/282/original.json") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V283BeregningsgrunnlagP\303\245\303\230konomiTest.kt" "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V283BeregningsgrunnlagP\303\245\303\230konomiTest.kt" index 711e76a693..9e04a6f8cb 100644 --- "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V283BeregningsgrunnlagP\303\245\303\230konomiTest.kt" +++ "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V283BeregningsgrunnlagP\303\245\303\230konomiTest.kt" @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V283BeregningsgrunnlagPåØkonomiTest: MigrationTest(V283BeregningsgrunnlagPåØkonomi()) { +internal class V283BeregningsgrunnlagPåØkonomiTest : + MigrationTest(V283BeregningsgrunnlagPåØkonomi()) { @Test fun `migrerer inn beregningsgrunnlag`() { assertMigration("/migrations/283/expected.json", "/migrations/283/original.json") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V284GjelderPeriodeArbeidsgiverInntektsopplysningTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V284GjelderPeriodeArbeidsgiverInntektsopplysningTest.kt index d43820a6d8..16877e707b 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V284GjelderPeriodeArbeidsgiverInntektsopplysningTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V284GjelderPeriodeArbeidsgiverInntektsopplysningTest.kt @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V284GjelderPeriodeArbeidsgiverInntektsopplysningTest: MigrationTest(V284GjelderPeriodeArbeidsgiverInntektsopplysning()) { +internal class V284GjelderPeriodeArbeidsgiverInntektsopplysningTest : + MigrationTest(V284GjelderPeriodeArbeidsgiverInntektsopplysning()) { @Test fun `migrerer inn fom og tom`() { assertMigration("/migrations/284/expected.json", "/migrations/284/original.json") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V285LoggeRareAnnulleringerTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V285LoggeRareAnnulleringerTest.kt index 74bba4be05..26090a53d6 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V285LoggeRareAnnulleringerTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V285LoggeRareAnnulleringerTest.kt @@ -3,7 +3,7 @@ package no.nav.helse.serde.migration import java.time.LocalDateTime import org.junit.jupiter.api.Test -internal class V285LoggeRareAnnulleringerTest: MigrationTest(V285LoggeRareAnnulleringer( +internal class V285LoggeRareAnnulleringerTest : MigrationTest(V285LoggeRareAnnulleringer( forkast = setOf("52fc8116-1757-45bc-8ca1-d333b33d3496"), forkastetTidspunkt = { LocalDateTime.parse("2024-01-23T08:15:00.204957") } )) { @@ -12,4 +12,4 @@ internal class V285LoggeRareAnnulleringerTest: MigrationTest(V285LoggeRareAnnull fun `forkaster annulleringer som ikke er sendt til oppdrag`() { assertMigration("/migrations/285/expected.json", "/migrations/285/original.json") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V286Annullerte\303\205pneRevurderingerTest.kt" "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V286Annullerte\303\205pneRevurderingerTest.kt" index 483ff6e0f5..7dc28fc133 100644 --- "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V286Annullerte\303\205pneRevurderingerTest.kt" +++ "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V286Annullerte\303\205pneRevurderingerTest.kt" @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V286AnnullerteÅpneRevurderingerTest: MigrationTest(V286AnnullerteÅpneRevurderinger()) { +internal class V286AnnullerteÅpneRevurderingerTest : + MigrationTest(V286AnnullerteÅpneRevurderinger()) { @Test fun `smelter sammen uberegnet revurdering med til_infotrygd`() { assertMigration("/migrations/286/expected.json", "/migrations/286/original.json") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V287Annullerte\303\205pneRevurderingerTest.kt" "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V287Annullerte\303\205pneRevurderingerTest.kt" index 4229378322..8c32faa724 100644 --- "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V287Annullerte\303\205pneRevurderingerTest.kt" +++ "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V287Annullerte\303\205pneRevurderingerTest.kt" @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V287AnnullerteÅpneRevurderingerEnGangTilTest: MigrationTest(V287AnnullerteÅpneRevurderingerEnGangTil()) { +internal class V287AnnullerteÅpneRevurderingerEnGangTilTest : + MigrationTest(V287AnnullerteÅpneRevurderingerEnGangTil()) { @Test fun `smelter sammen uberegnet revurdering med til_infotrygd`() { assertMigration("/migrations/287/expected.json", "/migrations/287/original.json") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V288FjerneOverfl\303\270digeUberegnedeRevurderingerTest.kt" "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V288FjerneOverfl\303\270digeUberegnedeRevurderingerTest.kt" index 063977ecd3..a1f3be02a3 100644 --- "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V288FjerneOverfl\303\270digeUberegnedeRevurderingerTest.kt" +++ "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V288FjerneOverfl\303\270digeUberegnedeRevurderingerTest.kt" @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V288FjerneOverflødigeUberegnedeRevurderingerTest: MigrationTest(V288FjerneOverflødigeUberegnedeRevurderinger()) { +internal class V288FjerneOverflødigeUberegnedeRevurderingerTest : + MigrationTest(V288FjerneOverflødigeUberegnedeRevurderinger()) { @Test fun `fjerner overflødige uberegnede generasjoner`() { assertMigration("/migrations/288/expected.json", "/migrations/288/original.json") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V289AvsluttetTidspunktForkastedeGenerasjonerTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V289AvsluttetTidspunktForkastedeGenerasjonerTest.kt index 17545cf2a3..0d5749430d 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V289AvsluttetTidspunktForkastedeGenerasjonerTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V289AvsluttetTidspunktForkastedeGenerasjonerTest.kt @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V289AvsluttetTidspunktForkastedeGenerasjonerTest: MigrationTest(V289AvsluttetTidspunktForkastedeGenerasjoner()) { +internal class V289AvsluttetTidspunktForkastedeGenerasjonerTest : + MigrationTest(V289AvsluttetTidspunktForkastedeGenerasjoner()) { @Test fun `setter avsluttettidspunkt`() { assertMigration("/migrations/289/expected.json", "/migrations/289/original.json") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V290FikseForbrukteDagerSomErNullTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V290FikseForbrukteDagerSomErNullTest.kt index 4670d3ee46..976761fea7 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V290FikseForbrukteDagerSomErNullTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V290FikseForbrukteDagerSomErNullTest.kt @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V290FikseForbrukteDagerSomErNullTest: MigrationTest(V290FikseForbrukteDagerSomErNull()) { +internal class V290FikseForbrukteDagerSomErNullTest : + MigrationTest(V290FikseForbrukteDagerSomErNull()) { @Test fun `setter forbrukte og gjenstående dager til 0`() { assertMigration("/migrations/290/expected.json", "/migrations/290/original.json") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V291FikseTidligereOmgj\303\270ringerSomErRevurderingFeiletTest.kt" "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V291FikseTidligereOmgj\303\270ringerSomErRevurderingFeiletTest.kt" index 1659bbad2f..d9c1c75180 100644 --- "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V291FikseTidligereOmgj\303\270ringerSomErRevurderingFeiletTest.kt" +++ "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V291FikseTidligereOmgj\303\270ringerSomErRevurderingFeiletTest.kt" @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V291FikseTidligereOmgjøringerSomErRevurderingFeiletTest: MigrationTest(V291FikseTidligereOmgjøringerSomErRevurderingFeilet()) { +internal class V291FikseTidligereOmgjøringerSomErRevurderingFeiletTest : + MigrationTest(V291FikseTidligereOmgjøringerSomErRevurderingFeilet()) { @Test fun `fjerner feilaktige behandlinger`() { assertMigration("/migrations/291/expected.json", "/migrations/291/original.json") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V292AnnullertPeriodeTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V292AnnullertPeriodeTest.kt index 5ed8c13146..79464f39ff 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V292AnnullertPeriodeTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V292AnnullertPeriodeTest.kt @@ -2,10 +2,10 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V292AnnullertPeriodeTest: MigrationTest(V292AnnullertPeriode()) { +internal class V292AnnullertPeriodeTest : MigrationTest(V292AnnullertPeriode()) { @Test fun `migrerer annullert periode`() { assertMigration("/migrations/292/expected.json", "/migrations/292/original.json") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V293AvsluttetUberegnedeOmgj\303\270ringerTest.kt" "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V293AvsluttetUberegnedeOmgj\303\270ringerTest.kt" index a000e92bc9..828b3a3143 100644 --- "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V293AvsluttetUberegnedeOmgj\303\270ringerTest.kt" +++ "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V293AvsluttetUberegnedeOmgj\303\270ringerTest.kt" @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V293AvsluttetUberegnedeOmgjøringerTest: MigrationTest(V293AvsluttetUberegnedeOmgjøringer()) { +internal class V293AvsluttetUberegnedeOmgjøringerTest : + MigrationTest(V293AvsluttetUberegnedeOmgjøringer()) { @Test fun `migrerer uberegnede omgjøringer`() { assertMigration("/migrations/293/expected.json", "/migrations/293/original.json") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V294RenameTilBehandlingerTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V294RenameTilBehandlingerTest.kt index a70c1eaf93..eaf7e50657 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V294RenameTilBehandlingerTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V294RenameTilBehandlingerTest.kt @@ -2,10 +2,10 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V294RenameTilBehandlingerTest: MigrationTest(V294RenameTilBehandlinger()) { +internal class V294RenameTilBehandlingerTest : MigrationTest(V294RenameTilBehandlinger()) { @Test fun `migrerer til behandlinger`() { assertMigration("/migrations/294/expected.json", "/migrations/294/original.json") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V296Skj\303\246ringstidspunktP\303\245BehandlingerTest.kt" "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V296Skj\303\246ringstidspunktP\303\245BehandlingerTest.kt" index ac0b765610..e729541922 100644 --- "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V296Skj\303\246ringstidspunktP\303\245BehandlingerTest.kt" +++ "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V296Skj\303\246ringstidspunktP\303\245BehandlingerTest.kt" @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V296SkjæringstidspunktPåBehandlingerTest: MigrationTest(V296SkjæringstidspunktPåBehandlinger()) { +internal class V296SkjæringstidspunktPåBehandlingerTest : + MigrationTest(V296SkjæringstidspunktPåBehandlinger()) { @Test fun `migrerer skjæringstidspunkt på behandlinger`() { assertMigration("/migrations/296/expected.json", "/migrations/296/original.json") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V298EgenmeldingsdagerP\303\245VedtaksperiodeTest.kt" "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V298EgenmeldingsdagerP\303\245VedtaksperiodeTest.kt" index 22fb7153fa..31d76f8542 100644 --- "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V298EgenmeldingsdagerP\303\245VedtaksperiodeTest.kt" +++ "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V298EgenmeldingsdagerP\303\245VedtaksperiodeTest.kt" @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V298EgenmeldingsdagerPåVedtaksperiodeTest: MigrationTest(V298EgenmeldingsdagerPåVedtaksperiode()) { +internal class V298EgenmeldingsdagerPåVedtaksperiodeTest : + MigrationTest(V298EgenmeldingsdagerPåVedtaksperiode()) { @Test fun `migrerer skjæringstidspunkt på behandlinger`() { assertMigration("/migrations/298/expected.json", "/migrations/298/original.json") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiodeTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiodeTest.kt index 4b908d75f2..89f8e0f4c5 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiodeTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiodeTest.kt @@ -2,7 +2,8 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiodeTest : MigrationTest(V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiode()) { +internal class V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiodeTest : + MigrationTest(V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiode()) { @Test fun `migrerer egenmeldingsperioder fra sykdomstidslinjen til vedtaksperiode`() { @@ -12,6 +13,9 @@ internal class V299EgenmeldingerFraSykdomstidslinjeTilVedtaksperiodeTest : Migra @Test fun `ingen egenmeldingsperioder fra sykdomstidslinjen`() { - assertMigration("/migrations/299/expected_ingen_egenmeldinger.json", "/migrations/299/original_ingen_egenmeldinger.json") + assertMigration( + "/migrations/299/expected_ingen_egenmeldinger.json", + "/migrations/299/original_ingen_egenmeldinger.json" + ) } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V302MaksdatoresultatP\303\245BehandlingTest.kt" "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V302MaksdatoresultatP\303\245BehandlingTest.kt" index 00ff95ba5b..11877d3e61 100644 --- "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V302MaksdatoresultatP\303\245BehandlingTest.kt" +++ "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V302MaksdatoresultatP\303\245BehandlingTest.kt" @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V302MaksdatoresultatPåBehandlingTest : MigrationTest(V302MaksdatoresultatPåBehandling()) { +internal class V302MaksdatoresultatPåBehandlingTest : + MigrationTest(V302MaksdatoresultatPåBehandling()) { @Test fun `migrerer maksdatoresultat`() { assertMigration("/migrations/302/expected.json", "/migrations/302/original.json") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V303KopiereMaksdatoFraUtbetalingTilBehandlingTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V303KopiereMaksdatoFraUtbetalingTilBehandlingTest.kt index d358479c5e..745d556655 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V303KopiereMaksdatoFraUtbetalingTilBehandlingTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V303KopiereMaksdatoFraUtbetalingTilBehandlingTest.kt @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V303KopiereMaksdatoFraUtbetalingTilBehandlingTest : MigrationTest(V303KopiereMaksdatoFraUtbetalingTilBehandling()) { +internal class V303KopiereMaksdatoFraUtbetalingTilBehandlingTest : + MigrationTest(V303KopiereMaksdatoFraUtbetalingTilBehandling()) { @Test fun `migrerer maksdato`() { assertMigration("/migrations/303/expected.json", "/migrations/303/original.json") } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V304FjerneArbeidsledigSykmeldingsperioderTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V304FjerneArbeidsledigSykmeldingsperioderTest.kt index e11981616d..6704005479 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V304FjerneArbeidsledigSykmeldingsperioderTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V304FjerneArbeidsledigSykmeldingsperioderTest.kt @@ -2,7 +2,8 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V304FjerneArbeidsledigSykmeldingsperioderTest : MigrationTest(V304FjerneArbeidsledigSykmeldingsperioder()) { +internal class V304FjerneArbeidsledigSykmeldingsperioderTest : + MigrationTest(V304FjerneArbeidsledigSykmeldingsperioder()) { @Test fun `fjerner sykmeldingsperioder på arbeidsledig`() { @@ -11,6 +12,9 @@ internal class V304FjerneArbeidsledigSykmeldingsperioderTest : MigrationTest(V30 @Test fun `en person som ikke har arbeidsledig skjer det ingenting med`() { - assertMigration("/migrations/304/expected_uten_arbeidsledig.json", "/migrations/304/original_uten_arbeidsledig.json") + assertMigration( + "/migrations/304/expected_uten_arbeidsledig.json", + "/migrations/304/original_uten_arbeidsledig.json" + ) } -} \ No newline at end of file +} diff --git a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V305RenameSykepengegrunnlagTilInntektsmeldingTest.kt b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V305RenameSykepengegrunnlagTilInntektsmeldingTest.kt index b309c8edff..e9acd67587 100644 --- a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V305RenameSykepengegrunnlagTilInntektsmeldingTest.kt +++ b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V305RenameSykepengegrunnlagTilInntektsmeldingTest.kt @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V305RenameSykepengegrunnlagTilInntektsmeldingTest : MigrationTest(V305RenameSykepengegrunnlagTilInntektsgrunnlag()) { +internal class V305RenameSykepengegrunnlagTilInntektsmeldingTest : + MigrationTest(V305RenameSykepengegrunnlagTilInntektsgrunnlag()) { @Test fun `renamer sykepengegrunnlag til inntektsgrunnlag`() { assertMigration("/migrations/305/expected.json", "/migrations/305/original.json") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V306RefusjonstidslinjeP\303\245BehandlingTest.kt" "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V306RefusjonstidslinjeP\303\245BehandlingTest.kt" index 074c45e1df..381a86a023 100644 --- "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V306RefusjonstidslinjeP\303\245BehandlingTest.kt" +++ "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V306RefusjonstidslinjeP\303\245BehandlingTest.kt" @@ -2,10 +2,11 @@ package no.nav.helse.serde.migration import org.junit.jupiter.api.Test -internal class V306RefusjonstidslinjePåBehandlingTest : MigrationTest(V306RefusjonstidslinjePåBehandling()) { +internal class V306RefusjonstidslinjePåBehandlingTest : + MigrationTest(V306RefusjonstidslinjePåBehandling()) { @Test fun `migrerer refusjonstidslinje`() { assertMigration("/migrations/306/expected.json", "/migrations/306/original.json") } -} \ No newline at end of file +} diff --git "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V311AvsenderOgTidsstempelP\303\245RefusjonsopplysningTest.kt" "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V311AvsenderOgTidsstempelP\303\245RefusjonsopplysningTest.kt" index 592f6d9dd0..84029c5c86 100644 --- "a/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V311AvsenderOgTidsstempelP\303\245RefusjonsopplysningTest.kt" +++ "b/sykepenger-serde/src/test/kotlin/no/nav/helse/serde/migration/V311AvsenderOgTidsstempelP\303\245RefusjonsopplysningTest.kt" @@ -7,10 +7,17 @@ import no.nav.helse.serde.migration.V311AvsenderOgTidsstempelPåRefusjonsopplysn import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -internal class V311AvsenderOgTidsstempelPåRefusjonsopplysningTest : MigrationTest(V311AvsenderOgTidsstempelPåRefusjonsopplysning()) { +internal class V311AvsenderOgTidsstempelPåRefusjonsopplysningTest : + MigrationTest(V311AvsenderOgTidsstempelPåRefusjonsopplysning()) { override fun meldingerSupplier() = MeldingerSupplier { - mapOf(UUID.fromString("75d708d5-e2b1-4ff4-9426-976921505925") to Hendelse("75d708d5-e2b1-4ff4-9426-976921505925".uuid, "INNTEKTSMELDING", LocalDateTime.parse("2024-11-15T12:47:09.829616"))) + mapOf( + UUID.fromString("75d708d5-e2b1-4ff4-9426-976921505925") to Hendelse( + "75d708d5-e2b1-4ff4-9426-976921505925".uuid, + "INNTEKTSMELDING", + LocalDateTime.parse("2024-11-15T12:47:09.829616") + ) + ) } @Test @@ -26,4 +33,4 @@ internal class V311AvsenderOgTidsstempelPåRefusjonsopplysningTest : MigrationTe assertEquals("SAKSBEHANDLER", "GJENOPPLIV_VILKÅRSGRUNNLAG".avsender) assertEquals("ARBEIDSGIVER", "SENDT_SØKNAD_NAV".avsender) } -} \ No newline at end of file +} diff --git a/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/UtbetalingDto.kt b/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/UtbetalingDto.kt index 58aefb6fcc..cc8aabc9a5 100644 --- a/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/UtbetalingDto.kt +++ b/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/UtbetalingDto.kt @@ -36,13 +36,13 @@ sealed class BegrunnelseDto { data object MinimumInntekt : BegrunnelseDto() data object MinimumInntektOver67 : BegrunnelseDto() data object EgenmeldingUtenforArbeidsgiverperiode : BegrunnelseDto() - data object AndreYtelserForeldrepenger: BegrunnelseDto() - data object AndreYtelserAap: BegrunnelseDto() - data object AndreYtelserOmsorgspenger: BegrunnelseDto() - data object AndreYtelserPleiepenger: BegrunnelseDto() - data object AndreYtelserSvangerskapspenger: BegrunnelseDto() - data object AndreYtelserOpplaringspenger: BegrunnelseDto() - data object AndreYtelserDagpenger: BegrunnelseDto() + data object AndreYtelserForeldrepenger : BegrunnelseDto() + data object AndreYtelserAap : BegrunnelseDto() + data object AndreYtelserOmsorgspenger : BegrunnelseDto() + data object AndreYtelserPleiepenger : BegrunnelseDto() + data object AndreYtelserSvangerskapspenger : BegrunnelseDto() + data object AndreYtelserOpplaringspenger : BegrunnelseDto() + data object AndreYtelserDagpenger : BegrunnelseDto() data object MinimumSykdomsgrad : BegrunnelseDto() data object EtterDødsdato : BegrunnelseDto() data object Over70 : BegrunnelseDto() @@ -55,6 +55,7 @@ sealed class FagområdeDto { data object SPREF : FagområdeDto() data object SP : FagområdeDto() } + sealed class EndringskodeDto { data object NY : EndringskodeDto() data object UEND : EndringskodeDto() @@ -79,4 +80,4 @@ sealed class KlassekodeDto(val verdi: String) { sealed class SatstypeDto { data object Daglig : SatstypeDto() data object Engang : SatstypeDto() -} \ No newline at end of file +} diff --git a/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/UtbetalingInnDto.kt b/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/UtbetalingInnDto.kt index 4b676ec3a7..df387a8637 100644 --- a/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/UtbetalingInnDto.kt +++ b/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/UtbetalingInnDto.kt @@ -6,7 +6,6 @@ import java.util.UUID import no.nav.helse.dto.PeriodeDto import no.nav.helse.dto.UtbetalingTilstandDto import no.nav.helse.dto.UtbetalingVurderingDto -import no.nav.helse.dto.serialisering.UtbetalingstidslinjeUtDto import no.nav.helse.dto.UtbetalingtypeDto data class UtbetalingInnDto( @@ -28,4 +27,4 @@ data class UtbetalingInnDto( val avstemmingsnøkkel: Long?, val avsluttet: LocalDateTime?, val oppdatert: LocalDateTime -) \ No newline at end of file +) diff --git a/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/UtbetalingsdagInnDto.kt b/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/UtbetalingsdagInnDto.kt index b46d995451..afd394a3b3 100644 --- a/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/UtbetalingsdagInnDto.kt +++ b/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/deserialisering/UtbetalingsdagInnDto.kt @@ -11,37 +11,45 @@ sealed class UtbetalingsdagInnDto { override val dato: LocalDate, override val økonomi: ØkonomiInnDto ) : UtbetalingsdagInnDto() + data class ArbeidsgiverperiodeDagNavDto( override val dato: LocalDate, override val økonomi: ØkonomiInnDto ) : UtbetalingsdagInnDto() + data class NavDagDto( override val dato: LocalDate, override val økonomi: ØkonomiInnDto ) : UtbetalingsdagInnDto() + data class NavHelgDagDto( override val dato: LocalDate, override val økonomi: ØkonomiInnDto ) : UtbetalingsdagInnDto() + data class FridagDto( override val dato: LocalDate, override val økonomi: ØkonomiInnDto ) : UtbetalingsdagInnDto() + data class ArbeidsdagDto( override val dato: LocalDate, override val økonomi: ØkonomiInnDto ) : UtbetalingsdagInnDto() + data class AvvistDagDto( override val dato: LocalDate, override val økonomi: ØkonomiInnDto, val begrunnelser: List ) : UtbetalingsdagInnDto() + data class ForeldetDagDto( override val dato: LocalDate, override val økonomi: ØkonomiInnDto ) : UtbetalingsdagInnDto() + data class UkjentDagDto( override val dato: LocalDate, override val økonomi: ØkonomiInnDto ) : UtbetalingsdagInnDto() -} \ No newline at end of file +} diff --git a/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/serialisering/UtbetalingsdagUtDto.kt b/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/serialisering/UtbetalingsdagUtDto.kt index 2b7f7e3379..87d929d5b2 100644 --- a/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/serialisering/UtbetalingsdagUtDto.kt +++ b/sykepenger-utbetaling-dto/src/main/kotlin/no/nav/helse/dto/serialisering/UtbetalingsdagUtDto.kt @@ -11,37 +11,45 @@ sealed class UtbetalingsdagUtDto { override val dato: LocalDate, override val økonomi: ØkonomiUtDto ) : UtbetalingsdagUtDto() + data class ArbeidsgiverperiodeDagNavDto( override val dato: LocalDate, override val økonomi: ØkonomiUtDto ) : UtbetalingsdagUtDto() + data class NavDagDto( override val dato: LocalDate, override val økonomi: ØkonomiUtDto ) : UtbetalingsdagUtDto() + data class NavHelgDagDto( override val dato: LocalDate, override val økonomi: ØkonomiUtDto ) : UtbetalingsdagUtDto() + data class FridagDto( override val dato: LocalDate, override val økonomi: ØkonomiUtDto ) : UtbetalingsdagUtDto() + data class ArbeidsdagDto( override val dato: LocalDate, override val økonomi: ØkonomiUtDto ) : UtbetalingsdagUtDto() + data class AvvistDagDto( override val dato: LocalDate, override val økonomi: ØkonomiUtDto, val begrunnelser: List ) : UtbetalingsdagUtDto() + data class ForeldetDagDto( override val dato: LocalDate, override val økonomi: ØkonomiUtDto ) : UtbetalingsdagUtDto() + data class UkjentDagDto( override val dato: LocalDate, override val økonomi: ØkonomiUtDto ) : UtbetalingsdagUtDto() -} \ No newline at end of file +} diff --git "a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/hendelser/Utbetalingsavgj\303\270relseHendelse.kt" "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/hendelser/Utbetalingsavgj\303\270relseHendelse.kt" index ac0f957fd9..c819a5c263 100644 --- "a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/hendelser/Utbetalingsavgj\303\270relseHendelse.kt" +++ "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/hendelser/Utbetalingsavgj\303\270relseHendelse.kt" @@ -14,9 +14,14 @@ interface UtbetalingsavgjørelseHendelse { val avgjørelsestidspunkt: LocalDateTime val automatisert: Boolean } + class Saksbehandler(private val ident: String, private val epost: String) { override fun toString() = ident - internal fun vurdering(godkjent: Boolean, avgjørelsestidspunkt: LocalDateTime, automatisert: Boolean) = Vurdering( + internal fun vurdering( + godkjent: Boolean, + avgjørelsestidspunkt: LocalDateTime, + automatisert: Boolean + ) = Vurdering( godkjent = godkjent, tidspunkt = avgjørelsestidspunkt, automatiskBehandling = automatisert, @@ -24,12 +29,14 @@ class Saksbehandler(private val ident: String, private val epost: String) { epost = epost ) } + val UtbetalingsavgjørelseHendelse.avvist get() = !godkjent -val UtbetalingsavgjørelseHendelse.vurdering get() = saksbehandler().vurdering( - godkjent = godkjent, - avgjørelsestidspunkt = avgjørelsestidspunkt, - automatisert = automatisert -) +val UtbetalingsavgjørelseHendelse.vurdering + get() = saksbehandler().vurdering( + godkjent = godkjent, + avgjørelsestidspunkt = avgjørelsestidspunkt, + automatisert = automatisert + ) private val UtbetalingsavgjørelseHendelse.manueltBehandlet get() = !automatisert fun UtbetalingsavgjørelseHendelse.valider(aktivitetslogg: IAktivitetslogg) { when { @@ -37,13 +44,16 @@ fun UtbetalingsavgjørelseHendelse.valider(aktivitetslogg: IAktivitetslogg) { aktivitetslogg.funksjonellFeil(RV_UT_19) aktivitetslogg.info("Utbetaling markert som ikke godkjent av saksbehandler ${saksbehandler()} $avgjørelsestidspunkt") } + avvist && automatisert -> { aktivitetslogg.funksjonellFeil(RV_UT_18) aktivitetslogg.info("Utbetaling markert som ikke godkjent automatisk $avgjørelsestidspunkt") } + godkjent && manueltBehandlet -> aktivitetslogg.info("Utbetaling markert som godkjent av saksbehandler ${saksbehandler()} $avgjørelsestidspunkt") + else -> aktivitetslogg.info("Utbetaling markert som godkjent automatisk $avgjørelsestidspunkt") } -} \ No newline at end of file +} diff --git "a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Fagomr\303\245de.kt" "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Fagomr\303\245de.kt" index 5dddc5330e..4755a64882 100644 --- "a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Fagomr\303\245de.kt" +++ "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Fagomr\303\245de.kt" @@ -13,16 +13,34 @@ enum class Fagområde( override fun toString() = verdi fun linje(fagsystemId: String, økonomi: Økonomi, dato: LocalDate, grad: Int) = - Utbetalingslinje(dato, dato, Satstype.Daglig, økonomi.dagligBeløpForFagområde(this), grad, fagsystemId, klassekode = klassekode) + Utbetalingslinje( + dato, + dato, + Satstype.Daglig, + økonomi.dagligBeløpForFagområde(this), + grad, + fagsystemId, + klassekode = klassekode + ) fun linje(fagsystemId: String, dato: LocalDate, grad: Int) = - Utbetalingslinje(dato, dato, Satstype.Daglig, null, grad, fagsystemId, klassekode = klassekode) + Utbetalingslinje( + dato, + dato, + Satstype.Daglig, + null, + grad, + fagsystemId, + klassekode = klassekode + ) fun utvidLinje(linje: Utbetalingslinje, dato: LocalDate, økonomi: Økonomi) = linje.kopier(tom = dato, beløp = økonomi.dagligBeløpForFagområde(this)) fun kanLinjeUtvides(linje: Utbetalingslinje, økonomi: Økonomi, grad: Int) = - grad == linje.grad && (linje.beløp == null || linje.beløp == økonomi.dagligBeløpForFagområde(this)) + grad == linje.grad && (linje.beløp == null || linje.beløp == økonomi.dagligBeløpForFagområde( + this + )) companion object { private val map = entries.associateBy(Fagområde::verdi) diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Feriepengegrunnlag.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Feriepengegrunnlag.kt index 2a76a48d79..7d02347170 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Feriepengegrunnlag.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Feriepengegrunnlag.kt @@ -2,11 +2,15 @@ package no.nav.helse.utbetalingslinjer import java.time.LocalDate -data class Arbeidsgiverferiepengegrunnlag(val orgnummer: String, val utbetalinger: List) +data class Arbeidsgiverferiepengegrunnlag( + val orgnummer: String, + val utbetalinger: List +) + data class Feriepengegrunnlag( val arbeidsgiverUtbetalteDager: List, val personUtbetalteDager: List ) { data class UtbetaltDag(val dato: LocalDate, val beløp: Int) -} \ 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 b68b550932..001f96e207 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 @@ -141,9 +141,12 @@ class Oppdrag private constructor( ) } - private operator fun contains(other: Oppdrag) = this.tilhører(other) || this.overlapperMed(other) + private operator fun contains(other: Oppdrag) = + this.tilhører(other) || this.overlapperMed(other) + + fun tilhører(other: Oppdrag) = + this.fagsystemId == other.fagsystemId && this.fagområde == other.fagområde - fun tilhører(other: Oppdrag) = this.fagsystemId == other.fagsystemId && this.fagområde == other.fagområde private fun overlapperMed(other: Oppdrag) = this.linjeperiode?.let { other.linjeperiode?.overlapperMed(it) } ?: false @@ -156,7 +159,11 @@ class Oppdrag private constructor( if (!harUtbetalinger()) return aktivitetslogg.info("Overfører ikke oppdrag uten endring for fagområde=$fagområde med fagsystemId=$fagsystemId") check(endringskode != Endringskode.UEND) aktivitetslogg.kontekst(this) - aktivitetslogg.behov(Behovtype.Utbetaling, "Trenger å sende utbetaling til Oppdrag", behovdetaljer(saksbehandler, maksdato)) + aktivitetslogg.behov( + Behovtype.Utbetaling, + "Trenger å sende utbetaling til Oppdrag", + behovdetaljer(saksbehandler, maksdato) + ) } fun simuler(aktivitetslogg: IAktivitetslogg, maksdato: LocalDate, saksbehandler: String) { @@ -164,12 +171,20 @@ class Oppdrag private constructor( check(endringskode != Endringskode.UEND) check(status == null) aktivitetslogg.kontekst(this) - aktivitetslogg.behov(Behovtype.Simulering, "Trenger simulering fra Oppdragssystemet", behovdetaljer(saksbehandler, maksdato)) + aktivitetslogg.behov( + Behovtype.Simulering, + "Trenger simulering fra Oppdragssystemet", + behovdetaljer(saksbehandler, maksdato) + ) } - override fun toSpesifikkKontekst() = SpesifikkKontekst("Oppdrag", mapOf("fagsystemId" to fagsystemId)) + override fun toSpesifikkKontekst() = + SpesifikkKontekst("Oppdrag", mapOf("fagsystemId" to fagsystemId)) - private fun behovdetaljer(saksbehandler: String, maksdato: LocalDate?): MutableMap { + private fun behovdetaljer( + saksbehandler: String, + maksdato: LocalDate? + ): MutableMap { return mutableMapOf( "mottaker" to mottaker, "fagområde" to "$fagområde", @@ -297,10 +312,13 @@ class Oppdrag private constructor( endringskode = Endringskode.UEND ) else kopierMed( - linjer = listOf(tidligere.last().opphørslinje(tidligere.kopierUtenOpphørslinjer().first().fom)), + linjer = listOf( + tidligere.last().opphørslinje(tidligere.kopierUtenOpphørslinjer().first().fom) + ), fagsystemId = tidligere.fagsystemId, endringskode = Endringskode.ENDR ) + // når man oppretter en NY linje med dato-intervall "(a, b)" vil oppdragsystemet // automatisk opphøre alle eventuelle linjer med fom > b. // @@ -331,9 +349,14 @@ class Oppdrag private constructor( tidligere.last().opphørslinje(tidligere.first().fom) - private fun medFagsystemId(other: Oppdrag) = kopierMed(this.linjer, fagsystemId = other.fagsystemId) + private fun medFagsystemId(other: Oppdrag) = + kopierMed(this.linjer, fagsystemId = other.fagsystemId) - private fun kopierMed(linjer: List, fagsystemId: String = this.fagsystemId, endringskode: Endringskode = this.endringskode) = Oppdrag( + private fun kopierMed( + linjer: List, + fagsystemId: String = this.fagsystemId, + endringskode: Endringskode = this.endringskode + ) = Oppdrag( mottaker = mottaker, fagområde = fagområde, linjer = linjer.map { it.kopier() }.toMutableList(), @@ -356,14 +379,17 @@ class Oppdrag private constructor( fun lagreOverføringsinformasjon(hendelse: UtbetalingmodulHendelse) { if (hendelse.fagsystemId != this.fagsystemId) return if (this.avstemmingsnøkkel == null) this.avstemmingsnøkkel = hendelse.avstemmingsnøkkel - if (this.overføringstidspunkt == null) this.overføringstidspunkt = hendelse.overføringstidspunkt + if (this.overføringstidspunkt == null) this.overføringstidspunkt = + hendelse.overføringstidspunkt this.status = hendelse.status } + fun håndter(simulering: SimuleringHendelse) { if (simulering.fagsystemId != this.fagsystemId || simulering.fagområde != this.fagområde || !simulering.simuleringOK) return this.erSimulert = true this.simuleringsResultat = simulering.simuleringsResultat } + fun erKlarForGodkjenning() = !harUtbetalinger() || erSimulert private class DifferanseBuilder( @@ -379,7 +405,10 @@ class Oppdrag private constructor( // *) en linje kan endres dersom "tom"-dato eller grad er eneste forskjell // ulik dagsats eller fom-dato medfører enten at linjen får status OPPH, eller at man overskriver // ved å sende NY linjer - fun kalkulerDifferanse(avtroppendeOppdrag: Oppdrag, aktivitetslogg: IAktivitetslogg): Oppdrag { + fun kalkulerDifferanse( + avtroppendeOppdrag: Oppdrag, + aktivitetslogg: IAktivitetslogg + ): Oppdrag { this.linkTo = avtroppendeOppdrag.last() val kobletTil = påtroppendeOppdrag.kobleTil(avtroppendeOppdrag) val medLinkeLinjer = kopierLikeLinjer(kobletTil, avtroppendeOppdrag, aktivitetslogg) @@ -402,20 +431,44 @@ class Oppdrag private constructor( return listOf(opphørslinje, linketTilForrige) } - private fun kopierLikeLinjer(nytt: Oppdrag, tidligere: Oppdrag, aktivitetslogg: IAktivitetslogg): Oppdrag { - tilstand = if (tidligere.last().tom > nytt.last().tom) Slett(nytt.last()) else Identisk() + private fun kopierLikeLinjer( + nytt: Oppdrag, + tidligere: Oppdrag, + aktivitetslogg: IAktivitetslogg + ): Oppdrag { + tilstand = + if (tidligere.last().tom > nytt.last().tom) Slett(nytt.last()) else Identisk() sisteLinjeITidligereOppdrag = tidligere.last() - val linjer = nytt.zip(tidligere).map { (a, b) -> tilstand.håndterForskjell(a, b, aktivitetslogg) }.flatten() + val linjer = nytt.zip(tidligere) + .map { (a, b) -> tilstand.håndterForskjell(a, b, aktivitetslogg) }.flatten() val remaining = (nytt.size - minOf(nytt.size, tidligere.size)).coerceAtLeast(0) val nyeLinjer = nytt.takeLast(remaining) return nytt.kopierMed(linjer + kjedeSammenLinjer(nyeLinjer, linjer.last())) } - private fun håndterUlikhet(nåværende: Utbetalingslinje, tidligere: Utbetalingslinje, aktivitetslogg: IAktivitetslogg): List { + private fun håndterUlikhet( + nåværende: Utbetalingslinje, + tidligere: Utbetalingslinje, + aktivitetslogg: IAktivitetslogg + ): List { return when { - nåværende.kanEndreEksisterendeLinje(tidligere, sisteLinjeITidligereOppdrag) -> listOf(nåværende.endreEksisterendeLinje(tidligere)) - nåværende.skalOpphøreOgErstatte(tidligere, sisteLinjeITidligereOppdrag) -> opphørTidligereLinjeOgOpprettNy(nåværende, tidligere, aktivitetslogg) - nåværende.fom > tidligere.fom -> opphørTidligereLinjeOgOpprettNy(nåværende, sisteLinjeITidligereOppdrag, aktivitetslogg, tidligere.fom) + nåværende.kanEndreEksisterendeLinje( + tidligere, + sisteLinjeITidligereOppdrag + ) -> listOf(nåværende.endreEksisterendeLinje(tidligere)) + + nåværende.skalOpphøreOgErstatte( + tidligere, + sisteLinjeITidligereOppdrag + ) -> opphørTidligereLinjeOgOpprettNy(nåværende, tidligere, aktivitetslogg) + + nåværende.fom > tidligere.fom -> opphørTidligereLinjeOgOpprettNy( + nåværende, + sisteLinjeITidligereOppdrag, + aktivitetslogg, + tidligere.fom + ) + else -> listOf(opprettNyLinje(nåværende)) } } @@ -429,18 +482,30 @@ class Oppdrag private constructor( private interface Tilstand { - fun håndterForskjell(nåværende: Utbetalingslinje, tidligere: Utbetalingslinje, aktivitetslogg: IAktivitetslogg): List + fun håndterForskjell( + nåværende: Utbetalingslinje, + tidligere: Utbetalingslinje, + aktivitetslogg: IAktivitetslogg + ): List } private inner class Identisk : Tilstand { - override fun håndterForskjell(nåværende: Utbetalingslinje, tidligere: Utbetalingslinje, aktivitetslogg: IAktivitetslogg): List { + override fun håndterForskjell( + nåværende: Utbetalingslinje, + tidligere: Utbetalingslinje, + aktivitetslogg: IAktivitetslogg + ): List { if (nåværende == tidligere) return listOf(nåværende.markerUendret(tidligere)) return håndterUlikhet(nåværende, tidligere, aktivitetslogg) } } private inner class Slett(private val sisteLinjeINyttOppdrag: Utbetalingslinje) : Tilstand { - override fun håndterForskjell(nåværende: Utbetalingslinje, tidligere: Utbetalingslinje, aktivitetslogg: IAktivitetslogg): List { + override fun håndterForskjell( + nåværende: Utbetalingslinje, + tidligere: Utbetalingslinje, + aktivitetslogg: IAktivitetslogg + ): List { if (nåværende == tidligere) { if (nåværende == sisteLinjeINyttOppdrag) return listOf(nåværende.kobleTil(linkTo)) return listOf(nåværende.markerUendret(tidligere)) @@ -450,7 +515,11 @@ class Oppdrag private constructor( } private inner class Ny : Tilstand { - override fun håndterForskjell(nåværende: Utbetalingslinje, tidligere: Utbetalingslinje, aktivitetslogg: IAktivitetslogg): List { + override fun håndterForskjell( + nåværende: Utbetalingslinje, + tidligere: Utbetalingslinje, + aktivitetslogg: IAktivitetslogg + ): List { val nyLinje = nåværende.kobleTil(linkTo) linkTo = nyLinje return listOf(nyLinje) @@ -500,4 +569,4 @@ class Oppdrag private constructor( ) } -enum class Oppdragstatus { OVERFØRT, AKSEPTERT, AKSEPTERT_MED_FEIL, AVVIST, FEIL } \ No newline at end of file +enum class Oppdragstatus { OVERFØRT, AKSEPTERT, AKSEPTERT_MED_FEIL, AVVIST, FEIL } diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/OppdragBuilder.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/OppdragBuilder.kt index efcce05b9c..148c74be83 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/OppdragBuilder.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/OppdragBuilder.kt @@ -23,7 +23,7 @@ class OppdragBuilder( } fun betalingshelgedag(dato: LocalDate, grad: Int) { - if (utbetalingslinjer.isEmpty() || grad != linje.grad) + if (utbetalingslinjer.isEmpty() || grad != linje.grad) tilstand.nyLinje(dato, grad) else tilstand.helgedag(dato, grad) @@ -47,7 +47,8 @@ class OppdragBuilder( økonomi: Økonomi, dato: LocalDate, grad: Int - ) {} + ) { + } fun helgedag(dato: LocalDate, grad: Int) {} @@ -55,7 +56,8 @@ class OppdragBuilder( økonomi: Økonomi, dato: LocalDate, grad: Int - ) {} + ) { + } fun nyLinje(dato: LocalDate, grad: Int) {} @@ -138,7 +140,13 @@ class OppdragBuilder( dato: LocalDate, grad: Int ) { - utbetalingslinjer.add(fagområde.utvidLinje(utbetalingslinjer.removeLast(), dato, økonomi)) + utbetalingslinjer.add( + fagområde.utvidLinje( + utbetalingslinjer.removeLast(), + dato, + økonomi + ) + ) tilstand = LinjeMedSats() } @@ -160,4 +168,4 @@ class OppdragBuilder( addLinje(dato, grad) } } -} \ No newline at end of file +} diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Satstype.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Satstype.kt index 1de841489c..ea24a51a30 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Satstype.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Satstype.kt @@ -1,6 +1,9 @@ package no.nav.helse.utbetalingslinjer -class Satstype private constructor(private val navn: String, private val beløpStrategy: (beløp: Int, stønadsdager: Int) -> Int) { +class Satstype private constructor( + private val navn: String, + private val beløpStrategy: (beløp: Int, stønadsdager: Int) -> Int +) { companion object { val Daglig = Satstype("DAG") { beløp, stønadsdager -> beløp * stønadsdager } val Engang = Satstype("ENG") { beløp, _ -> beløp } 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 7fd76ecec1..53d803f252 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 @@ -33,7 +33,6 @@ import no.nav.helse.person.aktivitetslogg.Varselkode.RV_UT_7 import no.nav.helse.person.aktivitetslogg.Varselkode.RV_UT_9 import no.nav.helse.utbetalingslinjer.Oppdrag.Companion.trekkerTilbakePenger import no.nav.helse.utbetalingslinjer.Oppdrag.Companion.valider -import no.nav.helse.utbetalingslinjer.Utbetaling.Tilstand import no.nav.helse.utbetalingslinjer.Utbetalingtype.ANNULLERING import no.nav.helse.utbetalingslinjer.Utbetalingtype.UTBETALING import no.nav.helse.utbetalingstidslinje.Utbetalingstidslinje @@ -61,16 +60,17 @@ class Utbetaling private constructor( private var oppdatert: LocalDateTime = tidsstempel ) : Aktivitetskontekst { - val view get() = UtbetalingView( - id = id, - korrelasjonsId = korrelasjonsId, - periode = periode, - utbetalingstidslinje = utbetalingstidslinje, - arbeidsgiverOppdrag = arbeidsgiverOppdrag, - personOppdrag = personOppdrag, - status = tilstand.status, - type = type - ) + val view + get() = UtbetalingView( + id = id, + korrelasjonsId = korrelasjonsId, + periode = periode, + utbetalingstidslinje = utbetalingstidslinje, + arbeidsgiverOppdrag = arbeidsgiverOppdrag, + personOppdrag = personOppdrag, + status = tilstand.status, + type = type + ) constructor( korrelerendeUtbetaling: Utbetaling?, @@ -85,7 +85,11 @@ class Utbetaling private constructor( annulleringer: List = emptyList() ) : this( UUID.randomUUID(), - korrelerendeUtbetaling?.takeIf { arbeidsgiverOppdrag.tilhører(it.arbeidsgiverOppdrag) || personOppdrag.tilhører(it.personOppdrag) }?.korrelasjonsId ?: UUID.randomUUID(), + korrelerendeUtbetaling?.takeIf { + arbeidsgiverOppdrag.tilhører(it.arbeidsgiverOppdrag) || personOppdrag.tilhører( + it.personOppdrag + ) + }?.korrelasjonsId ?: UUID.randomUUID(), periode, utbetalingstidslinje, arbeidsgiverOppdrag, @@ -143,9 +147,11 @@ class Utbetaling private constructor( private fun harOppdragMedUtbetalinger() = arbeidsgiverOppdrag.harUtbetalinger() || personOppdrag.harUtbetalinger() - fun harDelvisRefusjon() = arbeidsgiverOppdrag.harUtbetalinger () && personOppdrag.harUtbetalinger() + fun harDelvisRefusjon() = + arbeidsgiverOppdrag.harUtbetalinger() && personOppdrag.harUtbetalinger() - fun erKlarForGodkjenning() = personOppdrag.erKlarForGodkjenning() && arbeidsgiverOppdrag.erKlarForGodkjenning() + fun erKlarForGodkjenning() = + personOppdrag.erKlarForGodkjenning() && arbeidsgiverOppdrag.erKlarForGodkjenning() fun opprett(aktivitetslogg: IAktivitetslogg) { tilstand.opprett(this, aktivitetslogg) @@ -158,20 +164,29 @@ class Utbetaling private constructor( } fun håndter(utbetaling: UtbetalingmodulHendelse, aktivitetslogg: IAktivitetslogg) { - if (!relevantFor(utbetaling)) return håndterKvitteringForAnnullering(utbetaling, aktivitetslogg) + if (!relevantFor(utbetaling)) return håndterKvitteringForAnnullering( + utbetaling, + aktivitetslogg + ) if (harHåndtert(utbetaling)) return aktivitetslogg.kontekst(this) tilstand.kvittér(this, utbetaling, aktivitetslogg) } - private fun håndterKvitteringForAnnullering(hendelse: UtbetalingmodulHendelse, aktivitetslogg: IAktivitetslogg) { + private fun håndterKvitteringForAnnullering( + hendelse: UtbetalingmodulHendelse, + aktivitetslogg: IAktivitetslogg + ) { if (annulleringer.none { it.relevantFor(hendelse) }) return aktivitetslogg.kontekst(this) tilstand.kvittérAnnullering(this, hendelse, aktivitetslogg) } private fun relevantFor(utbetaling: UtbetalingmodulHendelse) = - utbetaling.utbetalingId == this.id && (utbetaling.fagsystemId in setOf(this.arbeidsgiverOppdrag.fagsystemId, this.personOppdrag.fagsystemId)) + utbetaling.utbetalingId == this.id && (utbetaling.fagsystemId in setOf( + this.arbeidsgiverOppdrag.fagsystemId, + this.personOppdrag.fagsystemId + )) fun håndter(simulering: SimuleringHendelse) { if (simulering.utbetalingId != this.id) return @@ -201,11 +216,16 @@ class Utbetaling private constructor( validerSimuleringsresultat(simulering, aktivitetslogg, personOppdrag) } - private fun validerSimuleringsresultat(simuleringHendelse: SimuleringHendelse, aktivitetslogg: IAktivitetslogg, oppdrag: Oppdrag) { + private fun validerSimuleringsresultat( + simuleringHendelse: SimuleringHendelse, + aktivitetslogg: IAktivitetslogg, + oppdrag: Oppdrag + ) { if (simuleringHendelse.fagsystemId != oppdrag.fagsystemId) return if (simuleringHendelse.fagområde != oppdrag.fagområde) return if (!simuleringHendelse.simuleringOK) return aktivitetslogg.info("Feil under simulering: ${simuleringHendelse.melding}") - val simuleringsResultat = simuleringHendelse.simuleringsResultat ?: return aktivitetslogg.info("Ingenting ble simulert") + val simuleringsResultat = simuleringHendelse.simuleringsResultat + ?: return aktivitetslogg.info("Ingenting ble simulert") val harNegativtTotalbeløp = simuleringsResultat.totalbeløp < 0 if (harNegativtTotalbeløp) aktivitetslogg.varsel(Varselkode.RV_SI_3) } @@ -214,15 +234,21 @@ class Utbetaling private constructor( godkjenn(aktivitetslogg, hendelse.vurdering) } - fun annuller(hendelse: AnnullerUtbetalingHendelse, aktivitetslogg: IAktivitetslogg, alleUtbetalinger: List): Utbetaling? { - val korrelerendeUtbetaling = alleUtbetalinger.firstOrNull { it.id == hendelse.utbetalingId } ?: return null + fun annuller( + hendelse: AnnullerUtbetalingHendelse, + aktivitetslogg: IAktivitetslogg, + alleUtbetalinger: List + ): Utbetaling? { + val korrelerendeUtbetaling = + alleUtbetalinger.firstOrNull { it.id == hendelse.utbetalingId } ?: return null if (korrelerendeUtbetaling.korrelasjonsId != this.korrelasjonsId) return null val aktiveUtbetalinger = alleUtbetalinger.aktive() - val sisteUtbetalteForUtbetaling = checkNotNull(aktiveUtbetalinger.singleOrNull { it.hørerSammen(this) }) { - "Det er gjort forsøk på å annullere en utbetaling som ikke lenger er aktiv" - } + val sisteUtbetalteForUtbetaling = + checkNotNull(aktiveUtbetalinger.singleOrNull { it.hørerSammen(this) }) { + "Det er gjort forsøk på å annullere en utbetaling som ikke lenger er aktiv" + } return sisteUtbetalteForUtbetaling.opphør(aktivitetslogg) } @@ -281,12 +307,28 @@ class Utbetaling private constructor( gjenståendeSykedager: Int, annulleringer: List ): Utbetaling { - val nyttArbeidsgiveroppdrag = byggViderePåOppdrag(aktivitetslogg, vedtaksperiode, utbetalingsaken, this.arbeidsgiverOppdrag, kladd.arbeidsgiveroppdrag) - val nyttPersonoppdrag = byggViderePåOppdrag(aktivitetslogg, vedtaksperiode, utbetalingsaken, this.personOppdrag, kladd.personoppdrag) + val nyttArbeidsgiveroppdrag = byggViderePåOppdrag( + aktivitetslogg, + vedtaksperiode, + utbetalingsaken, + this.arbeidsgiverOppdrag, + kladd.arbeidsgiveroppdrag + ) + val nyttPersonoppdrag = byggViderePåOppdrag( + aktivitetslogg, + vedtaksperiode, + utbetalingsaken, + this.personOppdrag, + kladd.personoppdrag + ) val nyereUtbetalingstidslinje = this.utbetalingstidslinje.subset(kladd.utbetalingsperiode) - val tidligereUtbetalingstidslinje = nyereUtbetalingstidslinje.fremTilOgMed(vedtaksperiode.start.forrigeDag) - val nyUtbetalingstidslinje = tidligereUtbetalingstidslinje + kladd.utbetalingstidslinje + nyereUtbetalingstidslinje.fraOgMed(vedtaksperiode.endInclusive.nesteDag) + val tidligereUtbetalingstidslinje = + nyereUtbetalingstidslinje.fremTilOgMed(vedtaksperiode.start.forrigeDag) + val nyUtbetalingstidslinje = + tidligereUtbetalingstidslinje + kladd.utbetalingstidslinje + nyereUtbetalingstidslinje.fraOgMed( + vedtaksperiode.endInclusive.nesteDag + ) return Utbetaling( korrelerendeUtbetaling = this, @@ -302,18 +344,32 @@ class Utbetaling private constructor( ) } - private fun byggViderePåOppdrag(aktivitetslogg: IAktivitetslogg, vedtaksperiode: Periode, utbetalingsaken: Utbetalingsak, historiskOppdrag: Oppdrag, nyttOppdrag: Oppdrag): Oppdrag { + private fun byggViderePåOppdrag( + aktivitetslogg: IAktivitetslogg, + vedtaksperiode: Periode, + utbetalingsaken: Utbetalingsak, + historiskOppdrag: Oppdrag, + nyttOppdrag: Oppdrag + ): Oppdrag { /* ta bort eventuell hale som er avkortet */ - val linjerFremTilOgMedUtbetalingsaken = historiskOppdrag.begrensTil(utbetalingsaken.omsluttendePeriode.endInclusive) + val linjerFremTilOgMedUtbetalingsaken = + historiskOppdrag.begrensTil(utbetalingsaken.omsluttendePeriode.endInclusive) /* linjer forut før perioden */ - val linjerFørVedtaksperioden = linjerFremTilOgMedUtbetalingsaken.begrensTil(vedtaksperiode.start.forrigeDag) - val linjerEtterVedtaksperioden = linjerFremTilOgMedUtbetalingsaken.begrensFra(vedtaksperiode.endInclusive.nesteDag) + val linjerFørVedtaksperioden = + linjerFremTilOgMedUtbetalingsaken.begrensTil(vedtaksperiode.start.forrigeDag) + val linjerEtterVedtaksperioden = + linjerFremTilOgMedUtbetalingsaken.begrensFra(vedtaksperiode.endInclusive.nesteDag) /* legg inn endringer fra perioden og sy sammen */ - val nyeArbeidsgiverlinjer = linjerFørVedtaksperioden + nyttOppdrag + linjerEtterVedtaksperioden + val nyeArbeidsgiverlinjer = + linjerFørVedtaksperioden + nyttOppdrag + linjerEtterVedtaksperioden - return Oppdrag(historiskOppdrag.mottaker, historiskOppdrag.fagområde, nyeArbeidsgiverlinjer).minus(historiskOppdrag, aktivitetslogg) + return Oppdrag( + historiskOppdrag.mottaker, + historiskOppdrag.fagområde, + nyeArbeidsgiverlinjer + ).minus(historiskOppdrag, aktivitetslogg) } companion object { @@ -339,10 +395,17 @@ class Utbetaling private constructor( val utbetalingsaken = utbetalingsaker.first { periode in it.vedtaksperioder } val utbetalingsperiode = periode.oppdaterFom(utbetalingsaken.omsluttendePeriode) - val vedtaksperiodekladd = UtbetalingkladdBuilder(utbetalingsperiode, utbetalingstidslinje.subset(periode), organisasjonsnummer, fødselsnummer).build() + val vedtaksperiodekladd = UtbetalingkladdBuilder( + utbetalingsperiode, + utbetalingstidslinje.subset(periode), + organisasjonsnummer, + fødselsnummer + ).build() val forrigeUtbetalte = utbetalinger.aktive(utbetalingsaken.omsluttendePeriode) - val korrelerendeUtbetaling = forrigeUtbetalte.firstOrNull { it.harOppdragMedUtbetalinger() } ?: forrigeUtbetalte.firstOrNull() + val korrelerendeUtbetaling = + forrigeUtbetalte.firstOrNull { it.harOppdragMedUtbetalinger() } + ?: forrigeUtbetalte.firstOrNull() val annulleringer = forrigeUtbetalte .filterNot { it === korrelerendeUtbetaling } .mapNotNull { it.opphør(aktivitetslogg) } @@ -371,7 +434,9 @@ class Utbetaling private constructor( gjenståendeSykedager = gjenståendeSykedager, annulleringer = annulleringer ) - listOf(utbetalingen.arbeidsgiverOppdrag, utbetalingen.personOppdrag).valider(aktivitetslogg) + listOf(utbetalingen.arbeidsgiverOppdrag, utbetalingen.personOppdrag).valider( + aktivitetslogg + ) return utbetalingen to annulleringer } @@ -385,10 +450,13 @@ class Utbetaling private constructor( } fun List.aktive() = grupperUtbetalinger(Utbetaling::erAktiv) - private fun List.aktiveMedUbetalte() = grupperUtbetalinger(Utbetaling::erAktivEllerUbetalt) + private fun List.aktiveMedUbetalte() = + grupperUtbetalinger(Utbetaling::erAktivEllerUbetalt) + fun List.aktive(periode: Periode) = this .aktive() .filter { utbetaling -> utbetaling.periode.overlapperMed(periode) } + private fun Collection.grupperUtbetalinger(filter: (Utbetaling) -> Boolean) = this .asSequence() @@ -418,8 +486,12 @@ class Utbetaling private constructor( } // kan forkaste dersom ingen utbetalinger er utbetalt/in flight, eller de er annullert - fun kanForkastes(vedtaksperiodeUtbetalinger: List, arbeidsgiverUtbetalinger: List): Boolean { - val annulleringer = arbeidsgiverUtbetalinger.filter { it.erAnnullering() && it.tilstand != Forkastet } + fun kanForkastes( + vedtaksperiodeUtbetalinger: List, + arbeidsgiverUtbetalinger: List + ): Boolean { + val annulleringer = + arbeidsgiverUtbetalinger.filter { it.erAnnullering() && it.tilstand != Forkastet } return vedtaksperiodeUtbetalinger.filter { it.erAktiv() }.all { utbetaling -> annulleringer.any { annullering -> annullering.hørerSammen(utbetaling) } } @@ -466,14 +538,24 @@ class Utbetaling private constructor( } private fun overførBegge(aktivitetslogg: IAktivitetslogg) { - vurdering?.overfør(aktivitetslogg, arbeidsgiverOppdrag, maksdato.takeUnless { type == ANNULLERING }) - vurdering?.overfør(aktivitetslogg, personOppdrag, maksdato.takeUnless { type == ANNULLERING }) - } - - private fun håndterKvittering(hendelse: UtbetalingmodulHendelse, aktivitetslogg: IAktivitetslogg) { + vurdering?.overfør( + aktivitetslogg, + arbeidsgiverOppdrag, + maksdato.takeUnless { type == ANNULLERING }) + vurdering?.overfør( + aktivitetslogg, + personOppdrag, + maksdato.takeUnless { type == ANNULLERING }) + } + + private fun håndterKvittering( + hendelse: UtbetalingmodulHendelse, + aktivitetslogg: IAktivitetslogg + ) { when (hendelse.status) { Oppdragstatus.OVERFØRT, - Oppdragstatus.AKSEPTERT -> { } // all is good + Oppdragstatus.AKSEPTERT -> { + } // all is good Oppdragstatus.AKSEPTERT_MED_FEIL -> aktivitetslogg.varsel(RV_UT_2) Oppdragstatus.AVVIST, Oppdragstatus.FEIL -> aktivitetslogg.info("Utbetaling feilet med status ${hendelse.status}. Feilmelding fra Oppdragsystemet: ${hendelse.melding}") @@ -481,7 +563,10 @@ class Utbetaling private constructor( val skalForsøkesIgjen = hendelse.status in setOf(Oppdragstatus.AVVIST, Oppdragstatus.FEIL) val nesteTilstand = when { - skalForsøkesIgjen || Oppdrag.harFeil(arbeidsgiverOppdrag, personOppdrag) -> return // utbetaling gjør retry ved neste påminnelse + skalForsøkesIgjen || Oppdrag.harFeil( + arbeidsgiverOppdrag, + personOppdrag + ) -> return // utbetaling gjør retry ved neste påminnelse type == ANNULLERING -> Annullert else -> Utbetalt } @@ -495,19 +580,27 @@ class Utbetaling private constructor( fun overlapperMed(other: Periode): Boolean { return this.periode.overlapperMed(other) } + fun overlapperMed(other: Utbetaling): Boolean { return this.periode.overlapperMed(other.periode) } + fun erNyereEnn(other: LocalDateTime): Boolean { return other <= tidsstempel } - private fun lagreOverføringsinformasjon(aktivitetslogg: IAktivitetslogg, avstemmingsnøkkel: Long, tidspunkt: LocalDateTime) { + + private fun lagreOverføringsinformasjon( + aktivitetslogg: IAktivitetslogg, + avstemmingsnøkkel: Long, + tidspunkt: LocalDateTime + ) { aktivitetslogg.info("Utbetalingen ble overført til Oppdrag/UR $tidspunkt, og har fått avstemmingsnøkkel $avstemmingsnøkkel.\n") if (this.avstemmingsnøkkel != null && this.avstemmingsnøkkel != avstemmingsnøkkel) aktivitetslogg.info("Avstemmingsnøkkel har endret seg.\nTidligere verdi: ${this.avstemmingsnøkkel}") if (this.overføringstidspunkt == null) this.overføringstidspunkt = tidspunkt if (this.avstemmingsnøkkel == null) this.avstemmingsnøkkel = avstemmingsnøkkel } + override fun toString() = "$type(${tilstand.status}) - $periode" internal sealed interface Tilstand { @@ -534,11 +627,20 @@ class Utbetaling private constructor( return null } - fun kvittér(utbetaling: Utbetaling, hendelse: UtbetalingmodulHendelse, aktivitetslogg: IAktivitetslogg) { + fun kvittér( + utbetaling: Utbetaling, + hendelse: UtbetalingmodulHendelse, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.info("Forventet ikke kvittering på utbetaling=${utbetaling.id} i tilstand=${this::class.simpleName}") aktivitetslogg.funksjonellFeil(RV_UT_11) } - fun kvittérAnnullering(utbetaling: Utbetaling, hendelse: UtbetalingmodulHendelse, aktivitetslogg: IAktivitetslogg) { + + fun kvittérAnnullering( + utbetaling: Utbetaling, + hendelse: UtbetalingmodulHendelse, + aktivitetslogg: IAktivitetslogg + ) { aktivitetslogg.info("Forventet ikke kvittering for annullering på utbetaling=${utbetaling.id} i tilstand=${this::class.simpleName}") aktivitetslogg.funksjonellFeil(RV_UT_11) } @@ -571,7 +673,11 @@ class Utbetaling private constructor( utbetaling.tilstand(Forkastet, aktivitetslogg) } - override fun godkjenn(utbetaling: Utbetaling, aktivitetslogg: IAktivitetslogg, vurdering: Vurdering) { + override fun godkjenn( + utbetaling: Utbetaling, + aktivitetslogg: IAktivitetslogg, + vurdering: Vurdering + ) { utbetaling.vurdering = vurdering utbetaling.annulleringer.forEach { it.godkjenn(aktivitetslogg, vurdering) } aktivitetslogg.kontekst(utbetaling) @@ -598,16 +704,22 @@ class Utbetaling private constructor( vurderNesteTilstand(utbetaling, påminnelse) } - override fun kvittérAnnullering(utbetaling: Utbetaling, hendelse: UtbetalingmodulHendelse, aktivitetslogg: IAktivitetslogg) { + override fun kvittérAnnullering( + utbetaling: Utbetaling, + hendelse: UtbetalingmodulHendelse, + aktivitetslogg: IAktivitetslogg + ) { vurderNesteTilstand(utbetaling, aktivitetslogg) } private fun vurderNesteTilstand(utbetaling: Utbetaling, aktivitetslogg: IAktivitetslogg) { if (utbetaling.annulleringer.any { !it.erAvsluttet() }) return - utbetaling.tilstand(when { - utbetaling.harOppdragMedUtbetalinger() -> Overført - else -> GodkjentUtenUtbetaling - }, aktivitetslogg) + utbetaling.tilstand( + when { + utbetaling.harOppdragMedUtbetalinger() -> Overført + else -> GodkjentUtenUtbetaling + }, aktivitetslogg + ) } } @@ -642,8 +754,16 @@ class Utbetaling private constructor( utbetaling.overførBegge(påminnelse) } - override fun kvittér(utbetaling: Utbetaling, hendelse: UtbetalingmodulHendelse, aktivitetslogg: IAktivitetslogg) { - utbetaling.lagreOverføringsinformasjon(aktivitetslogg, hendelse.avstemmingsnøkkel, hendelse.overføringstidspunkt) + override fun kvittér( + utbetaling: Utbetaling, + hendelse: UtbetalingmodulHendelse, + aktivitetslogg: IAktivitetslogg + ) { + utbetaling.lagreOverføringsinformasjon( + aktivitetslogg, + hendelse.avstemmingsnøkkel, + hendelse.overføringstidspunkt + ) utbetaling.arbeidsgiverOppdrag.lagreOverføringsinformasjon(hendelse) utbetaling.personOppdrag.lagreOverføringsinformasjon(hendelse) utbetaling.håndterKvittering(hendelse, aktivitetslogg) @@ -682,6 +802,7 @@ class Utbetaling private constructor( internal object IkkeGodkjent : Tilstand { override val status = Utbetalingstatus.IKKE_GODKJENT } + internal object Forkastet : Tilstand { override val status = Utbetalingstatus.FORKASTET } @@ -834,7 +955,8 @@ enum class Utbetalingstatus { GODKJENT_UTEN_UTBETALING, ANNULLERT, FORKASTET; - internal fun tilTilstand() = when(this) { + + internal fun tilTilstand() = when (this) { NY -> Utbetaling.Ny IKKE_UTBETALT -> Utbetaling.Ubetalt IKKE_GODKJENT -> Utbetaling.IkkeGodkjent @@ -887,4 +1009,4 @@ data class UtbetalingView( val personOppdrag: Oppdrag, val status: Utbetalingstatus, val type: Utbetalingtype -) \ No newline at end of file +) diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingkladdBuilder.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingkladdBuilder.kt index cbb1be3074..4f671ed8c2 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingkladdBuilder.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingkladdBuilder.kt @@ -42,20 +42,39 @@ class UtbetalingkladdBuilder( arbeidsgiveroppdragBuilder.ikkeBetalingsdag() personoppdragBuilder.ikkeBetalingsdag() } + is ArbeidsgiverperiodedagNav, is NavDag -> { - arbeidsgiveroppdragBuilder.betalingsdag(økonomi = dag.økonomi, dato = dag.dato, grad = dag.økonomi.brukAvrundetGrad { grad -> grad }) - personoppdragBuilder.betalingsdag(økonomi = dag.økonomi, dato = dag.dato, grad = dag.økonomi.brukAvrundetGrad { grad -> grad }) + arbeidsgiveroppdragBuilder.betalingsdag( + økonomi = dag.økonomi, + dato = dag.dato, + grad = dag.økonomi.brukAvrundetGrad { grad -> grad }) + personoppdragBuilder.betalingsdag( + økonomi = dag.økonomi, + dato = dag.dato, + grad = dag.økonomi.brukAvrundetGrad { grad -> grad }) } + is NavHelgDag -> { - arbeidsgiveroppdragBuilder.betalingshelgedag(dag.dato, dag.økonomi.brukAvrundetGrad { grad -> grad }) - personoppdragBuilder.betalingshelgedag(dag.dato, dag.økonomi.brukAvrundetGrad { grad -> grad }) + arbeidsgiveroppdragBuilder.betalingshelgedag( + dag.dato, + dag.økonomi.brukAvrundetGrad { grad -> grad }) + personoppdragBuilder.betalingshelgedag( + dag.dato, + dag.økonomi.brukAvrundetGrad { grad -> grad }) } + is Utbetalingsdag.ArbeidsgiverperiodeDag, - is Utbetalingsdag.UkjentDag -> { /* gjør ingenting */ } + is Utbetalingsdag.UkjentDag -> { /* gjør ingenting */ + } } } } - fun build() = Utbetalingkladd(periode, arbeidsgiveroppdragBuilder.build(), personoppdragBuilder.build(), tidslinje) -} \ No newline at end of file + fun build() = Utbetalingkladd( + periode, + arbeidsgiveroppdragBuilder.build(), + personoppdragBuilder.build(), + tidslinje + ) +} diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetalingsaker.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetalingsaker.kt index 7031d33411..447015e129 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetalingsaker.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetalingsaker.kt @@ -20,5 +20,6 @@ data class Utbetalingsak( init { check(vedtaksperioder.isNotEmpty()) } + val omsluttendePeriode = vedtaksperioder.periode()!!.oppdaterFom(startperiode) } 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 1dee1bbb1a..97d00dd042 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 @@ -44,7 +44,10 @@ class Utbetalingslinje( linje.kopier(refFagsystemId = fagsystemId) } - internal fun normaliserLinjer(fagsystemId: String, linjer: List): List { + internal fun normaliserLinjer( + fagsystemId: String, + linjer: List + ): List { val linjerMedBeløp = fjernLinjerUtenUtbetalingsdager(linjer) val nyeLinjerSkalPekePåFagsystemId = nyeLinjer(fagsystemId, linjerMedBeløp) val ferdigeLinjer = sisteLinjeSkalIkkeTrekkesIHelg(nyeLinjerSkalPekePåFagsystemId) @@ -59,16 +62,22 @@ class Utbetalingslinje( // alle nye linjer skal peke på fagsystemId, foruten linje nr 1 private fun nyeLinjer(fagsystemId: String, linjer: List) = - linjer.take(1).map { it.kopier(refFagsystemId = null) } + linjer.drop(1).map { it.kopier(refFagsystemId = fagsystemId) } + linjer.take(1).map { it.kopier(refFagsystemId = null) } + linjer.drop(1) + .map { it.kopier(refFagsystemId = fagsystemId) } // linjer med beløp 0 kr er ugyldige/ikke ønsket å sende OS private fun fjernLinjerUtenUtbetalingsdager(linjer: List) = linjer.filterNot { it.beløp == null || it.beløp == 0 } // oppdraget utgjør på sett og vis en linket liste hvor hver linje har et nummer, og peker tilbake på forrige linje - internal fun kjedeSammenLinjer(linjer: List, koblingslinje: Utbetalingslinje? = null): List { + internal fun kjedeSammenLinjer( + linjer: List, + koblingslinje: Utbetalingslinje? = null + ): List { if (linjer.isEmpty()) return emptyList() - val førstelinje = linjer.first().let { førstelinje -> koblingslinje?.let { førstelinje.kobleTil(it) } ?: førstelinje } + val førstelinje = linjer.first().let { førstelinje -> + koblingslinje?.let { førstelinje.kobleTil(it) } ?: førstelinje + } var forrige = førstelinje val result = mutableListOf(forrige) linjer.drop(1).forEach { linje -> @@ -104,7 +113,8 @@ class Utbetalingslinje( override operator fun iterator() = periode.iterator() - override fun toString() = "$fom til $tom $endringskode $grad ${datoStatusFom?.let { "opphører fom $it" }}" + override fun toString() = + "$fom til $tom $endringskode $grad ${datoStatusFom?.let { "opphører fom $it" }}" internal fun detaljer() = OppdragDetaljer.LinjeDetaljer( @@ -170,28 +180,34 @@ class Utbetalingslinje( private fun equals(other: Utbetalingslinje) = this.fom == other.fom && - this.tom == other.tom && - this.beløp == other.beløp && - this.grad == other.grad && - this.datoStatusFom == other.datoStatusFom - - fun kanEndreEksisterendeLinje(other: Utbetalingslinje, sisteLinjeITidligereOppdrag: Utbetalingslinje) = + this.tom == other.tom && + this.beløp == other.beløp && + this.grad == other.grad && + this.datoStatusFom == other.datoStatusFom + + fun kanEndreEksisterendeLinje( + other: Utbetalingslinje, + sisteLinjeITidligereOppdrag: Utbetalingslinje + ) = other == sisteLinjeITidligereOppdrag && - this.fom == other.fom && - this.beløp == other.beløp && - this.grad == other.grad && - this.datoStatusFom == other.datoStatusFom - - fun skalOpphøreOgErstatte(other: Utbetalingslinje, sisteLinjeITidligereOppdrag: Utbetalingslinje) = + this.fom == other.fom && + this.beløp == other.beløp && + this.grad == other.grad && + this.datoStatusFom == other.datoStatusFom + + fun skalOpphøreOgErstatte( + other: Utbetalingslinje, + sisteLinjeITidligereOppdrag: Utbetalingslinje + ) = other == sisteLinjeITidligereOppdrag && (this.fom > other.fom) override fun hashCode(): Int { return fom.hashCode() * 37 + - tom.hashCode() * 17 + - beløp.hashCode() * 41 + - grad.hashCode() * 61 + - endringskode.name.hashCode() * 59 + - datoStatusFom.hashCode() * 23 + tom.hashCode() * 17 + + beløp.hashCode() * 41 + + grad.hashCode() * 61 + + endringskode.name.hashCode() * 59 + + datoStatusFom.hashCode() * 23 } fun markerUendret(tidligere: Utbetalingslinje) = kopier( @@ -216,7 +232,9 @@ class Utbetalingslinje( internal fun begrensTil(sisteDato: LocalDate) = kopier(tom = sisteDato).kuttHelg() fun slåSammenLinje(førsteLinjeIForrige: Utbetalingslinje): Utbetalingslinje? { - if (this.beløp != førsteLinjeIForrige.beløp || this.grad != førsteLinjeIForrige.grad || !this.tom.erRettFør(førsteLinjeIForrige.fom)) return null + if (this.beløp != førsteLinjeIForrige.beløp || this.grad != førsteLinjeIForrige.grad || !this.tom.erRettFør( + førsteLinjeIForrige.fom + )) return null return kopier(tom = førsteLinjeIForrige.tom) } @@ -226,8 +244,12 @@ class Utbetalingslinje( internal fun kuttHelg(): Utbetalingslinje? { return when (tom.dayOfWeek) { - DayOfWeek.SUNDAY -> tom.minusDays(2).takeUnless { it < fom}?.let { nyTom -> kopier(tom = nyTom) } - DayOfWeek.SATURDAY -> tom.forrigeDag.takeUnless { it < fom}?.let { nyTom -> kopier(tom = nyTom) } + DayOfWeek.SUNDAY -> tom.minusDays(2).takeUnless { it < fom } + ?.let { nyTom -> kopier(tom = nyTom) } + + DayOfWeek.SATURDAY -> tom.forrigeDag.takeUnless { it < fom } + ?.let { nyTom -> kopier(tom = nyTom) } + else -> this } } @@ -278,4 +300,4 @@ class Utbetalingslinje( datoStatusFom = this.datoStatusFom, statuskode = this.statuskode ) -} \ No newline at end of file +} diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingsreferanseBuilder.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingsreferanseBuilder.kt index 8adbc1a387..2c0f04be3a 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingsreferanseBuilder.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingsreferanseBuilder.kt @@ -1,8 +1,8 @@ package no.nav.helse.utbetalingslinjer -import org.apache.commons.codec.binary.Base32 import java.nio.ByteBuffer -import java.util.* +import java.util.UUID +import org.apache.commons.codec.binary.Base32 private const val pad = '=' private const val padByte = pad.code.toByte() 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 c248fd2b63..c6b74104b5 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 @@ -20,23 +20,28 @@ sealed class Utbetalingsdag( return this.prioritet.compareTo(other.prioritet) } - override fun toString() = "${this.javaClass.simpleName} ($dato) ${økonomi.brukAvrundetGrad { grad-> grad }} %" + override fun toString() = + "${this.javaClass.simpleName} ($dato) ${økonomi.brukAvrundetGrad { grad -> grad }} %" fun avvis(begrunnelser: List) = begrunnelser .filter { it.skalAvvises(this) } .takeIf(List<*>::isNotEmpty) ?.let(::avvisDag) - protected open fun avvisDag(begrunnelser: List) = AvvistDag(dato, økonomi, begrunnelser) + protected open fun avvisDag(begrunnelser: List) = + AvvistDag(dato, økonomi, begrunnelser) + internal abstract fun kopierMed(økonomi: Økonomi): Utbetalingsdag open fun erAvvistMed(begrunnelse: Begrunnelse): AvvistDag? = null - class ArbeidsgiverperiodeDag(dato: LocalDate, økonomi: Økonomi) : Utbetalingsdag(dato, økonomi) { + class ArbeidsgiverperiodeDag(dato: LocalDate, økonomi: Økonomi) : + Utbetalingsdag(dato, økonomi) { override val prioritet = 30 override fun kopierMed(økonomi: Økonomi) = ArbeidsgiverperiodeDag(dato, økonomi) override fun dto(dato: LocalDate, økonomi: ØkonomiUtDto) = UtbetalingsdagUtDto.ArbeidsgiverperiodeDagDto(dato, økonomi) + internal companion object { fun gjenopprett(dto: UtbetalingsdagInnDto.ArbeidsgiverperiodeDagDto): ArbeidsgiverperiodeDag { return ArbeidsgiverperiodeDag( @@ -47,11 +52,13 @@ sealed class Utbetalingsdag( } } - class ArbeidsgiverperiodedagNav(dato: LocalDate, økonomi: Økonomi) : Utbetalingsdag(dato, økonomi) { + class ArbeidsgiverperiodedagNav(dato: LocalDate, økonomi: Økonomi) : + Utbetalingsdag(dato, økonomi) { override val prioritet = 45 override fun kopierMed(økonomi: Økonomi) = ArbeidsgiverperiodedagNav(dato, økonomi) override fun dto(dato: LocalDate, økonomi: ØkonomiUtDto) = UtbetalingsdagUtDto.ArbeidsgiverperiodeDagNavDto(dato, økonomi) + internal companion object { fun gjenopprett(dto: UtbetalingsdagInnDto.ArbeidsgiverperiodeDagNavDto): ArbeidsgiverperiodedagNav { return ArbeidsgiverperiodedagNav( @@ -70,6 +77,7 @@ sealed class Utbetalingsdag( override fun kopierMed(økonomi: Økonomi) = NavDag(dato, økonomi) override fun dto(dato: LocalDate, økonomi: ØkonomiUtDto) = UtbetalingsdagUtDto.NavDagDto(dato, økonomi) + internal companion object { fun gjenopprett(dto: UtbetalingsdagInnDto.NavDagDto): NavDag { return NavDag( @@ -86,6 +94,7 @@ sealed class Utbetalingsdag( override fun kopierMed(økonomi: Økonomi) = NavHelgDag(dato, økonomi) override fun dto(dato: LocalDate, økonomi: ØkonomiUtDto) = UtbetalingsdagUtDto.NavHelgDagDto(dato, økonomi) + internal companion object { fun gjenopprett(dto: UtbetalingsdagInnDto.NavHelgDagDto): NavHelgDag { return NavHelgDag( @@ -101,6 +110,7 @@ sealed class Utbetalingsdag( override fun kopierMed(økonomi: Økonomi) = Fridag(dato, økonomi) override fun dto(dato: LocalDate, økonomi: ØkonomiUtDto) = UtbetalingsdagUtDto.FridagDto(dato, økonomi) + internal companion object { fun gjenopprett(dto: UtbetalingsdagInnDto.FridagDto): Fridag { return Fridag( @@ -116,6 +126,7 @@ sealed class Utbetalingsdag( override fun kopierMed(økonomi: Økonomi) = Arbeidsdag(dato, økonomi) override fun dto(dato: LocalDate, økonomi: ØkonomiUtDto) = UtbetalingsdagUtDto.ArbeidsdagDto(dato, økonomi) + internal companion object { fun gjenopprett(dto: UtbetalingsdagInnDto.ArbeidsdagDto): Arbeidsdag { return Arbeidsdag( @@ -140,6 +151,7 @@ sealed class Utbetalingsdag( override fun kopierMed(økonomi: Økonomi) = AvvistDag(dato, økonomi, begrunnelser) override fun dto(dato: LocalDate, økonomi: ØkonomiUtDto) = UtbetalingsdagUtDto.AvvistDagDto(dato, økonomi, begrunnelser.map { it.dto() }) + internal companion object { fun gjenopprett(dto: UtbetalingsdagInnDto.AvvistDagDto): AvvistDag { return AvvistDag( @@ -157,6 +169,7 @@ sealed class Utbetalingsdag( override fun kopierMed(økonomi: Økonomi) = ForeldetDag(dato, økonomi) override fun dto(dato: LocalDate, økonomi: ØkonomiUtDto) = UtbetalingsdagUtDto.ForeldetDagDto(dato, økonomi) + internal companion object { fun gjenopprett(dto: UtbetalingsdagInnDto.ForeldetDagDto): ForeldetDag { return ForeldetDag( @@ -172,6 +185,7 @@ sealed class Utbetalingsdag( override fun kopierMed(økonomi: Økonomi) = UkjentDag(dato, økonomi) override fun dto(dato: LocalDate, økonomi: ØkonomiUtDto) = UtbetalingsdagUtDto.UkjentDagDto(dato, økonomi) + internal companion object { fun gjenopprett(dto: UtbetalingsdagInnDto.UkjentDagDto): UkjentDag { return UkjentDag( @@ -193,8 +207,14 @@ sealed class Utbetalingsdag( fun gjenopprett(dto: UtbetalingsdagInnDto): Utbetalingsdag { return when (dto) { is UtbetalingsdagInnDto.ArbeidsdagDto -> Arbeidsdag.gjenopprett(dto) - is UtbetalingsdagInnDto.ArbeidsgiverperiodeDagDto -> ArbeidsgiverperiodeDag.gjenopprett(dto) - is UtbetalingsdagInnDto.ArbeidsgiverperiodeDagNavDto -> ArbeidsgiverperiodedagNav.gjenopprett(dto) + is UtbetalingsdagInnDto.ArbeidsgiverperiodeDagDto -> ArbeidsgiverperiodeDag.gjenopprett( + dto + ) + + is UtbetalingsdagInnDto.ArbeidsgiverperiodeDagNavDto -> ArbeidsgiverperiodedagNav.gjenopprett( + dto + ) + is UtbetalingsdagInnDto.AvvistDagDto -> AvvistDag.gjenopprett(dto) is UtbetalingsdagInnDto.ForeldetDagDto -> ForeldetDag.gjenopprett(dto) is UtbetalingsdagInnDto.FridagDto -> Fridag.gjenopprett(dto) @@ -207,4 +227,4 @@ sealed class Utbetalingsdag( fun dto() = dto(this.dato, this.økonomi.dto()) protected abstract fun dto(dato: LocalDate, økonomi: ØkonomiUtDto): UtbetalingsdagUtDto -} \ No newline at end of file +} 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 45ad3ddc5c..8747d62543 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 @@ -26,16 +26,19 @@ import no.nav.helse.økonomi.Økonomi * Forstår utbetalingsforpliktelser for en bestemt arbeidsgiver */ -class Utbetalingstidslinje private constructor(private val utbetalingsdager: SortedMap): Collection by utbetalingsdager.values { +class Utbetalingstidslinje private constructor(private val utbetalingsdager: SortedMap) : + Collection by utbetalingsdager.values { private val førsteDato get() = utbetalingsdager.firstKey() private val sisteDato get() = utbetalingsdager.lastKey() - constructor(utbetalingsdager: Collection) : this(utbetalingsdager.associateBy { it.dato }.toSortedMap()) { + constructor(utbetalingsdager: Collection) : this(utbetalingsdager.associateBy { it.dato } + .toSortedMap()) { check(utbetalingsdager.distinctBy { it.dato }.size == utbetalingsdager.size) { "Utbetalingstidslinjen består av minst én dato som pekes på av mer enn én Utbetalingsdag" } } + constructor() : this(mutableListOf()) companion object { @@ -65,7 +68,10 @@ class Utbetalingstidslinje private constructor(private val utbetalingsdager: Sor return beregnDagForDag(tidslinjer, Økonomi::totalSykdomsgrad) } - fun beregnDagForDag(tidslinjer: List, operasjon: (List<Økonomi>) -> List<Økonomi>): List { + fun beregnDagForDag( + tidslinjer: List, + operasjon: (List<Økonomi>) -> List<Økonomi> + ): List { /** * beregn dag-for-dag, lagre resultatet tilbake i listen */ @@ -100,10 +106,14 @@ class Utbetalingstidslinje private constructor(private val utbetalingsdager: Sor } } - private fun avvis(avvistePerioder: List, begrunnelser: List): Utbetalingstidslinje { + private fun avvis( + avvistePerioder: List, + begrunnelser: List + ): Utbetalingstidslinje { if (begrunnelser.isEmpty()) return this return Utbetalingstidslinje(utbetalingsdager.map { (dato, utbetalingsdag) -> - val avvistDag = if (dato in avvistePerioder) utbetalingsdag.avvis(begrunnelser) else null + val avvistDag = + if (dato in avvistePerioder) utbetalingsdag.avvis(begrunnelser) else null avvistDag ?: utbetalingsdag }) } @@ -121,6 +131,7 @@ class Utbetalingstidslinje private constructor(private val utbetalingsdager: Sor true -> Fridag(dag, Økonomi.ikkeBetalt()) false -> Arbeidsdag(dag, Økonomi.ikkeBetalt()) } + venstre == null -> høyre!! høyre == null -> venstre else -> maxOf(venstre, høyre) @@ -155,7 +166,8 @@ class Utbetalingstidslinje private constructor(private val utbetalingsdager: Sor } fun fraOgMed(fom: LocalDate) = Utbetalingstidslinje(utbetalingsdager.tailMap(fom).toSortedMap()) - fun fremTilOgMed(sisteDato: LocalDate) = Utbetalingstidslinje(utbetalingsdager.headMap(sisteDato.nesteDag).toSortedMap()) + fun fremTilOgMed(sisteDato: LocalDate) = + Utbetalingstidslinje(utbetalingsdager.headMap(sisteDato.nesteDag).toSortedMap()) operator fun get(dato: LocalDate) = utbetalingsdager[dato] ?: UkjentDag(dato, Økonomi.ikkeBetalt()) @@ -229,7 +241,8 @@ class Utbetalingstidslinje private constructor(private val utbetalingsdager: Sor private val Utbetalingsdag.avslag get() = this is AvvistDag || this is ForeldetDag fun behandlingsresultat(periode: Periode): String { val relevantUtbetalingstidslinje = this.subset(periode) - val relevanteDager = relevantUtbetalingstidslinje.utbetalingsdager.values.filter { it is NavDag || it.avslag } + val relevanteDager = + relevantUtbetalingstidslinje.utbetalingsdager.values.filter { it is NavDag || it.avslag } return when { relevanteDager.isEmpty() -> "Avslag" relevanteDager.all { it.avslag } -> "Avslag" @@ -242,7 +255,8 @@ class Utbetalingstidslinje private constructor(private val utbetalingsdager: Sor sealed class Begrunnelse { - open fun skalAvvises(utbetalingsdag: Utbetalingsdag) = utbetalingsdag is AvvistDag || utbetalingsdag is NavDag || utbetalingsdag is ArbeidsgiverperiodedagNav + open fun skalAvvises(utbetalingsdag: Utbetalingsdag) = + utbetalingsdag is AvvistDag || utbetalingsdag is NavDag || utbetalingsdag is ArbeidsgiverperiodedagNav fun dto() = when (this) { AndreYtelserAap -> BegrunnelseDto.AndreYtelserAap @@ -270,16 +284,18 @@ sealed class Begrunnelse { object MinimumInntekt : Begrunnelse() object MinimumInntektOver67 : Begrunnelse() object EgenmeldingUtenforArbeidsgiverperiode : Begrunnelse() - object AndreYtelserForeldrepenger: Begrunnelse() - object AndreYtelserAap: Begrunnelse() - object AndreYtelserOmsorgspenger: Begrunnelse() - object AndreYtelserPleiepenger: Begrunnelse() - object AndreYtelserSvangerskapspenger: Begrunnelse() - object AndreYtelserOpplaringspenger: Begrunnelse() - object AndreYtelserDagpenger: Begrunnelse() + object AndreYtelserForeldrepenger : Begrunnelse() + object AndreYtelserAap : Begrunnelse() + object AndreYtelserOmsorgspenger : Begrunnelse() + object AndreYtelserPleiepenger : Begrunnelse() + object AndreYtelserSvangerskapspenger : Begrunnelse() + object AndreYtelserOpplaringspenger : Begrunnelse() + object AndreYtelserDagpenger : Begrunnelse() object MinimumSykdomsgrad : Begrunnelse() { - override fun skalAvvises(utbetalingsdag: Utbetalingsdag) = utbetalingsdag is NavDag || utbetalingsdag is ArbeidsgiverperiodedagNav + override fun skalAvvises(utbetalingsdag: Utbetalingsdag) = + utbetalingsdag is NavDag || utbetalingsdag is ArbeidsgiverperiodedagNav } + object EtterDødsdato : Begrunnelse() object Over70 : Begrunnelse() object ManglerOpptjening : Begrunnelse() @@ -312,5 +328,8 @@ sealed class Begrunnelse { } } -fun List.avvis(avvistePerioder: List, begrunnelser: List) = +fun List.avvis( + avvistePerioder: List, + begrunnelser: List +) = Utbetalingstidslinje.avvis(this, avvistePerioder, begrunnelser) 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 c999ce5597..2d593ba83d 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" @@ -1,9 +1,9 @@ package no.nav.helse.økonomi +import kotlin.math.roundToInt import no.nav.helse.dto.InntektDto import no.nav.helse.dto.InntektbeløpDto import no.nav.helse.økonomi.Prosentdel.Companion.average -import kotlin.math.roundToInt class Inntekt private constructor(val årlig: Double) : Comparable { @@ -28,7 +28,11 @@ class Inntekt private constructor(val årlig: Double) : Comparable { //8-10 ledd 3 private const val ARBEIDSDAGER_PER_ÅR = 260 - fun vektlagtGjennomsnitt(parene: List>, tilkommet: Inntekt, total: Inntekt): Prosentdel { + fun vektlagtGjennomsnitt( + parene: List>, + tilkommet: Inntekt, + total: Inntekt + ): Prosentdel { return parene.map { it.first to it.second.årlig }.average(tilkommet.årlig, total.årlig) } @@ -76,7 +80,8 @@ class Inntekt private constructor(val årlig: Double) : Comparable { private fun equals(other: Inntekt) = this.årlig == other.årlig - override fun compareTo(other: Inntekt) = if (this == other) 0 else this.årlig.compareTo(other.årlig) + override fun compareTo(other: Inntekt) = + if (this == other) 0 else this.årlig.compareTo(other.årlig) override fun toString(): String { return "[Årlig: $årlig, Månedlig: ${månedlig}, Daglig: ${daglig}]" @@ -88,6 +93,7 @@ class Inntekt private constructor(val årlig: Double) : Comparable { dagligInt = dtoDagligInt(), dagligDouble = dtoDagligDouble() ) + private fun dtoÅrlig() = InntektbeløpDto.Årlig(this.årlig) fun dtoMånedligDouble() = InntektbeløpDto.MånedligDouble(månedlig) private fun dtoDagligDouble() = InntektbeløpDto.DagligDouble(daglig) @@ -96,4 +102,4 @@ class Inntekt private constructor(val årlig: Double) : Comparable { interface DekningsgradKilde { fun dekningsgrad(): Double -} \ No newline at end of file +} diff --git "a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/Prosentdel.kt" "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/Prosentdel.kt" index 48459e8457..9cf7eed59d 100644 --- "a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/Prosentdel.kt" +++ "b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/\303\270konomi/Prosentdel.kt" @@ -2,11 +2,11 @@ package no.nav.helse.økonomi import java.math.BigDecimal import java.math.MathContext -import no.nav.helse.etterlevelse.Subsumsjonslogg -import no.nav.helse.dto.ProsentdelDto import kotlin.math.roundToInt +import no.nav.helse.dto.ProsentdelDto +import no.nav.helse.etterlevelse.Subsumsjonslogg -class Prosentdel private constructor(private val brøkdel: BigDecimal): Comparable { +class Prosentdel private constructor(private val brøkdel: BigDecimal) : Comparable { init { require(brøkdel.toDouble() in 0.0..1.0) { "Må være prosent mellom 0 og 100" @@ -21,26 +21,42 @@ class Prosentdel private constructor(private val brøkdel: BigDecimal): Comparab private val EPSILON = BigDecimal("0.00001") internal fun ratio(a: Double, b: Double) = - Prosentdel(if (a < b) a.toBigDecimal(mc).divide(b.toBigDecimal(mc), mc) else SIKKER_BRØK) + Prosentdel( + if (a < b) a.toBigDecimal(mc).divide(b.toBigDecimal(mc), mc) else SIKKER_BRØK + ) fun subsumsjon(subsumsjonslogg: Subsumsjonslogg, block: Subsumsjonslogg.(Double) -> Unit) { subsumsjonslogg.block(GRENSE.toDouble()) } - internal fun Collection>.average(tilkommet: Double, total: Double): Prosentdel { - return map { it.first to it.second.toBigDecimal(mc) }.average(tilkommet.toBigDecimal(mc), total.toBigDecimal(mc)) + internal fun Collection>.average( + tilkommet: Double, + total: Double + ): Prosentdel { + return map { it.first to it.second.toBigDecimal(mc) }.average( + tilkommet.toBigDecimal(mc), + total.toBigDecimal(mc) + ) } - private fun Collection>.average(tilkommet: BigDecimal, total: BigDecimal): Prosentdel { + private fun Collection>.average( + tilkommet: BigDecimal, + total: BigDecimal + ): Prosentdel { require(total > BigDecimal.ZERO) { "Kan ikke dele på 0" } - val teller = maxOf(BigDecimal.ZERO, this.sumOf { it.first.brøkdel.multiply(it.second, mc) } - tilkommet) + val teller = maxOf( + BigDecimal.ZERO, + this.sumOf { it.first.brøkdel.multiply(it.second, mc) } - tilkommet) val totalInntektstapGrad = teller.divide(total, mc).coerceAtMost(BigDecimal.ONE) return Prosentdel(totalInntektstapGrad) } - val Number.prosent get() = Prosentdel(this.toDouble().toBigDecimal(mc).divide(HUNDRE_PROSENT, mc)) + val Number.prosent + get() = Prosentdel( + this.toDouble().toBigDecimal(mc).divide(HUNDRE_PROSENT, mc) + ) fun gjenopprett(dto: ProsentdelDto) = dto.prosent.prosent } @@ -53,15 +69,18 @@ class Prosentdel private constructor(private val brøkdel: BigDecimal): Comparab operator fun not() = Prosentdel(SIKKER_BRØK - this.brøkdel) - internal operator fun div(other: Prosentdel) = Prosentdel(this.brøkdel.divide(other.brøkdel, mc)) + internal operator fun div(other: Prosentdel) = + Prosentdel(this.brøkdel.divide(other.brøkdel, mc)) - override fun compareTo(other: Prosentdel) = if(this.equals(other)) 0 else this.brøkdel.compareTo(other.brøkdel) + override fun compareTo(other: Prosentdel) = + if (this.equals(other)) 0 else this.brøkdel.compareTo(other.brøkdel) override fun toString(): String { return "${(toDouble())} %" } - internal fun gradér(beløp: Double) = beløp.toBigDecimal(mc).divide(this.brøkdel, mc).toDouble().roundToInt().toDouble() + internal fun gradér(beløp: Double) = + beløp.toBigDecimal(mc).divide(this.brøkdel, mc).toDouble().roundToInt().toDouble() internal fun resiprok() = BigDecimal.ONE.divide(this.brøkdel, mc).toDouble() @@ -72,4 +91,4 @@ class Prosentdel private constructor(private val brøkdel: BigDecimal): Comparab internal fun erUnderGrensen() = this < GRENSE fun dto() = ProsentdelDto(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 4e7cc01e31..06b04401d1 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 kotlin.properties.Delegates import no.nav.helse.dto.deserialisering.ØkonomiInnDto import no.nav.helse.dto.serialisering.ØkonomiUtDto import no.nav.helse.utbetalingslinjer.Fagområde @@ -9,7 +10,6 @@ import no.nav.helse.økonomi.Inntekt.Companion.summer import no.nav.helse.økonomi.Inntekt.Companion.årlig import no.nav.helse.økonomi.Prosentdel.Companion.prosent import org.slf4j.LoggerFactory -import kotlin.properties.Delegates class Økonomi private constructor( val grad: Prosentdel, @@ -43,20 +43,29 @@ class Økonomi private constructor( } private fun List<Økonomi>.beregningsgrunnlag() = map { it.beregningsgrunnlag }.summer() - private fun List<Økonomi>.tilkommet() = filter { it.beregningsgrunnlag == INGEN }.map { it.aktuellDagsinntekt }.summer() + private fun List<Økonomi>.tilkommet() = + filter { it.beregningsgrunnlag == INGEN }.map { it.aktuellDagsinntekt }.summer() - private fun totalSykdomsgrad(økonomiList: List<Økonomi>, gradStrategi: (Økonomi) -> Prosentdel): Prosentdel { + private fun totalSykdomsgrad( + økonomiList: List<Økonomi>, + gradStrategi: (Økonomi) -> Prosentdel + ): Prosentdel { val beregningsgrunnlag = økonomiList.beregningsgrunnlag() if (beregningsgrunnlag == INGEN) { return (økonomiList.sumOf { gradStrategi(it).times(100.0) } / økonomiList.size).prosent } - val tilkommet = økonomiList.firstNotNullOfOrNull { it.grunnbeløpgrense }?.let { grunnbeløp -> - // Er det litt rart at vi må justerte den tilkomne inntekten med grunnbeløpet? - val sykepengegrunnlagBegrenset6G = minOf(beregningsgrunnlag, grunnbeløp) - val ratio = (sykepengegrunnlagBegrenset6G ratio beregningsgrunnlag) - if (ratio > 0.prosent) økonomiList.tilkommet() * ratio.resiprok() else INGEN - } ?: INGEN - val totalgrad = Inntekt.vektlagtGjennomsnitt(økonomiList.map { gradStrategi(it) to it.beregningsgrunnlag }, tilkommet, beregningsgrunnlag) + val tilkommet = + økonomiList.firstNotNullOfOrNull { it.grunnbeløpgrense }?.let { grunnbeløp -> + // Er det litt rart at vi må justerte den tilkomne inntekten med grunnbeløpet? + val sykepengegrunnlagBegrenset6G = minOf(beregningsgrunnlag, grunnbeløp) + val ratio = (sykepengegrunnlagBegrenset6G ratio beregningsgrunnlag) + if (ratio > 0.prosent) økonomiList.tilkommet() * ratio.resiprok() else INGEN + } ?: INGEN + val totalgrad = Inntekt.vektlagtGjennomsnitt( + økonomiList.map { gradStrategi(it) to it.beregningsgrunnlag }, + tilkommet, + beregningsgrunnlag + ) return totalgrad } @@ -69,7 +78,8 @@ class Økonomi private constructor( fun List<Økonomi>.erUnderGrensen() = none { !it.totalGrad.erUnderGrensen() } - private fun totalUtbetalingsgrad(økonomiList: List<Økonomi>) = totalSykdomsgrad(økonomiList, Økonomi::utbetalingsgrad) + private fun totalUtbetalingsgrad(økonomiList: List<Økonomi>) = + totalSykdomsgrad(økonomiList, Økonomi::utbetalingsgrad) fun betal(økonomiList: List<Økonomi>): List<Økonomi> { val utbetalingsgrad = totalUtbetalingsgrad(økonomiList) @@ -79,7 +89,10 @@ class Økonomi private constructor( private fun delteUtbetalinger(økonomiList: List<Økonomi>) = økonomiList.map { it.betal() } - private fun fordelBeløp(økonomiList: List<Økonomi>, utbetalingsgrad: Prosentdel): List<Økonomi> { + private fun fordelBeløp( + økonomiList: List<Økonomi>, + utbetalingsgrad: Prosentdel + ): List<Økonomi> { val totalArbeidsgiver = totalArbeidsgiver(økonomiList) val totalPerson = totalPerson(økonomiList) val total = totalArbeidsgiver + totalPerson @@ -91,12 +104,26 @@ class Økonomi private constructor( val sykepengegrunnlagBegrenset6G = minOf(beregningsgrunnlag, grunnbeløp) val er6GBegrenset = beregningsgrunnlag > grunnbeløp - val inntektstapSomSkalDekkesAvNAV = maxOf(INGEN, (sykepengegrunnlagBegrenset6G * utbetalingsgrad).rundTilDaglig()) - val fordelingRefusjon = fordel(økonomiList, totalArbeidsgiver, inntektstapSomSkalDekkesAvNAV, { økonomi, inntekt -> økonomi.kopierMed(arbeidsgiverbeløp = inntekt) }, arbeidsgiverBeløp) + val inntektstapSomSkalDekkesAvNAV = + maxOf(INGEN, (sykepengegrunnlagBegrenset6G * utbetalingsgrad).rundTilDaglig()) + val fordelingRefusjon = fordel( + økonomiList, + totalArbeidsgiver, + inntektstapSomSkalDekkesAvNAV, + { økonomi, inntekt -> økonomi.kopierMed(arbeidsgiverbeløp = inntekt) }, + arbeidsgiverBeløp + ) val totalArbeidsgiverrefusjon = totalArbeidsgiver(fordelingRefusjon) - val fordelingPerson = fordel(fordelingRefusjon, total - totalArbeidsgiverrefusjon, inntektstapSomSkalDekkesAvNAV - totalArbeidsgiverrefusjon, { økonomi, inntekt -> økonomi.kopierMed(personbeløp = inntekt) }, personBeløp) + val fordelingPerson = fordel( + fordelingRefusjon, + total - totalArbeidsgiverrefusjon, + inntektstapSomSkalDekkesAvNAV - totalArbeidsgiverrefusjon, + { økonomi, inntekt -> økonomi.kopierMed(personbeløp = inntekt) }, + personBeløp + ) val totalPersonbeløp = totalPerson(fordelingPerson) - val restbeløp = inntektstapSomSkalDekkesAvNAV - totalArbeidsgiverrefusjon - totalPersonbeløp + val restbeløp = + inntektstapSomSkalDekkesAvNAV - totalArbeidsgiverrefusjon - totalPersonbeløp val restfordeling = restfordeling(fordelingPerson, restbeløp) return restfordeling.map { økonomi -> økonomi.kopierMed(er6GBegrenset = er6GBegrenset) } } @@ -126,13 +153,23 @@ class Økonomi private constructor( } - private fun fordel(økonomiList: List<Økonomi>, total: Inntekt, grense: Inntekt, setter: (Økonomi, Inntekt) -> Økonomi, getter: (Økonomi) -> Inntekt): List<Økonomi> { + private fun fordel( + økonomiList: List<Økonomi>, + total: Inntekt, + grense: Inntekt, + setter: (Økonomi, Inntekt) -> Økonomi, + getter: (Økonomi) -> Inntekt + ): List<Økonomi> { return økonomiList .reduserOver6G(grense, total, getter) .fordel1Kr(grense, total, setter) } - private fun List<Økonomi>.reduserOver6G(grense: Inntekt, total: Inntekt, getter: (Økonomi) -> Inntekt): List> { + private fun List<Økonomi>.reduserOver6G( + grense: Inntekt, + total: Inntekt, + getter: (Økonomi) -> Inntekt + ): List> { val ratio = reduksjon(grense, total) return map { val redusertBeløp = getter(it).times(ratio) @@ -143,12 +180,17 @@ class Økonomi private constructor( } // fordeler 1 kr til hver av arbeidsgiverne som har mest i differanse i beløp - private fun List>.fordel1Kr(grense: Inntekt, total: Inntekt, setter: (Økonomi, Inntekt) -> Økonomi): List<Økonomi> { + private fun List>.fordel1Kr( + grense: Inntekt, + total: Inntekt, + setter: (Økonomi, Inntekt) -> Økonomi + ): List<Økonomi> { val maksimalt = total.coerceAtMost(grense) val rest = (maksimalt - map { it.second }.summer()).dagligInt val sortertEtterTap = sortedByDescending { (_, _, differanse) -> differanse }.take(rest) return map { (økonomi, beløp) -> - val ekstra = if (sortertEtterTap.any { (other) -> other === økonomi }) 1.daglig else INGEN + val ekstra = + if (sortertEtterTap.any { (other) -> other === økonomi }) 1.daglig else INGEN setter(økonomi, beløp + ekstra) } } @@ -161,7 +203,8 @@ class Økonomi private constructor( private fun total(økonomiList: List<Økonomi>, strategi: (Økonomi) -> Inntekt): Inntekt = økonomiList.map { strategi(it) }.summer() - private fun totalArbeidsgiver(økonomiList: List<Økonomi>) = total(økonomiList, arbeidsgiverBeløp) + private fun totalArbeidsgiver(økonomiList: List<Økonomi>) = + total(økonomiList, arbeidsgiverBeløp) private fun totalPerson(økonomiList: List<Økonomi>) = total(økonomiList, personBeløp) @@ -194,7 +237,13 @@ class Økonomi private constructor( require(dekningsgrunnlag >= INGEN) { "dekningsgrunnlag kan ikke være negativ." } } - fun inntekt(aktuellDagsinntekt: Inntekt, dekningsgrunnlag: Inntekt = aktuellDagsinntekt, beregningsgrunnlag: Inntekt = aktuellDagsinntekt, `6G`: Inntekt, refusjonsbeløp: Inntekt): Økonomi = + fun inntekt( + aktuellDagsinntekt: Inntekt, + dekningsgrunnlag: Inntekt = aktuellDagsinntekt, + beregningsgrunnlag: Inntekt = aktuellDagsinntekt, + `6G`: Inntekt, + refusjonsbeløp: Inntekt + ): Økonomi = tilstand.inntekt( økonomi = this, aktuellDagsinntekt = aktuellDagsinntekt, @@ -231,6 +280,7 @@ class Økonomi private constructor( // sykdomsgrader opprettes som int, og det gir ikke mening å runde opp og på den måten "gjøre personen mer syk" fun brukAvrundetGrad(block: (grad: Int) -> R) = block(grad.toDouble().toInt()) + // speil viser grad som nedrundet int (det rundes -ikke- oppover siden det ville gjort 19.5 % (for liten sykdomsgrad) til 20 % (ok sykdomsgrad) fun brukTotalGrad(block: (totalGrad: Int) -> R) = block(totalGrad.toDouble().toInt()) @@ -243,7 +293,8 @@ class Økonomi private constructor( private fun _betal(): Økonomi { val total = (dekningsgrunnlag * utbetalingsgrad()).rundTilDaglig() - val gradertArbeidsgiverRefusjonsbeløp = (arbeidsgiverRefusjonsbeløp * utbetalingsgrad()).rundTilDaglig() + val gradertArbeidsgiverRefusjonsbeløp = + (arbeidsgiverRefusjonsbeløp * utbetalingsgrad()).rundTilDaglig() val arbeidsgiverbeløp = gradertArbeidsgiverRefusjonsbeløp.coerceAtMost(total) return kopierMed( arbeidsgiverbeløp = arbeidsgiverbeløp, @@ -254,7 +305,7 @@ class Økonomi private constructor( fun ikkeBetalt() = kopierMed(tilstand = Tilstand.IkkeBetalt) - internal fun dagligBeløpForFagområde(område: Fagområde): Int? = when(område) { + internal fun dagligBeløpForFagområde(område: Fagområde): Int? = when (område) { Fagområde.SykepengerRefusjon -> arbeidsgiverbeløp?.daglig?.toInt() Fagområde.Sykepenger -> personbeløp?.daglig?.toInt() } @@ -323,7 +374,8 @@ class Økonomi private constructor( økonomi._buildKunGrad(builder) } - override fun utbetalingsgrad(økonomi: Økonomi) = throw IllegalStateException("ingen utbetalingsgrad i KunGrad") + override fun utbetalingsgrad(økonomi: Økonomi) = + throw IllegalStateException("ingen utbetalingsgrad i KunGrad") override fun inntekt( økonomi: Økonomi, @@ -512,4 +564,4 @@ abstract class ØkonomiBuilder { fun List<Økonomi>.betal() = Økonomi.betal(this) -fun List<Økonomi>.er6GBegrenset() = Økonomi.er6GBegrenset(this) \ No newline at end of file +fun List<Økonomi>.er6GBegrenset() = Økonomi.er6GBegrenset(this) diff --git a/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingTest.kt b/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingTest.kt index e4f6173bf4..c37cbd199a 100644 --- a/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingTest.kt +++ b/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/utbetalingslinjer/UtbetalingTest.kt @@ -163,9 +163,19 @@ internal class UtbetalingTest { korrelerendeUtbetaling = null, periode = 1.februar til 15.februar, utbetalingstidslinje = Utbetalingstidslinje(), - arbeidsgiverOppdrag = Oppdrag("orgnr", Fagområde.SykepengerRefusjon, linjer = listOf( - Utbetalingslinje(1.februar, 15.februar, beløp = 500, grad = 10, delytelseId = 1, endringskode = ENDR, datoStatusFom = 1.februar) - )), + arbeidsgiverOppdrag = Oppdrag( + "orgnr", Fagområde.SykepengerRefusjon, linjer = listOf( + Utbetalingslinje( + 1.februar, + 15.februar, + beløp = 500, + grad = 10, + delytelseId = 1, + endringskode = ENDR, + datoStatusFom = 1.februar + ) + ) + ), personOppdrag = Oppdrag("fnr", Fagområde.Sykepenger), type = Utbetalingtype.ANNULLERING, maksdato = 28.desember, @@ -210,7 +220,10 @@ internal class UtbetalingTest { assertEquals(oppdragInspektør.mottaker, detaljer.getValue("mottaker")) assertEquals(oppdragInspektør.fagsystemId(), detaljer.getValue("fagsystemId")) - assertEquals(annullering1.inspektør.utbetalingId.toString(), kontekster.getValue("utbetalingId")) + assertEquals( + annullering1.inspektør.utbetalingId.toString(), + kontekster.getValue("utbetalingId") + ) assertEquals(oppdragInspektør.fagsystemId(), kontekster.getValue("fagsystemId")) } @@ -237,9 +250,19 @@ internal class UtbetalingTest { korrelerendeUtbetaling = null, periode = 1.februar til 15.februar, utbetalingstidslinje = Utbetalingstidslinje(), - arbeidsgiverOppdrag = Oppdrag("orgnr", Fagområde.SykepengerRefusjon, linjer = listOf( - Utbetalingslinje(1.februar, 15.februar, beløp = 500, grad = 10, delytelseId = 1, endringskode = ENDR, datoStatusFom = 1.februar) - )), + arbeidsgiverOppdrag = Oppdrag( + "orgnr", Fagområde.SykepengerRefusjon, linjer = listOf( + Utbetalingslinje( + 1.februar, + 15.februar, + beløp = 500, + grad = 10, + delytelseId = 1, + endringskode = ENDR, + datoStatusFom = 1.februar + ) + ) + ), personOppdrag = Oppdrag("fnr", Fagområde.Sykepenger), type = Utbetalingtype.ANNULLERING, maksdato = 28.desember, @@ -262,9 +285,18 @@ internal class UtbetalingTest { korrelerendeUtbetaling = null, periode = 1.januar til 31.mars, utbetalingstidslinje = Utbetalingstidslinje(), - arbeidsgiverOppdrag = Oppdrag("orgnr", Fagområde.SykepengerRefusjon, linjer = listOf( - Utbetalingslinje(1.januar, 31.januar, beløp = 500, grad = 10, delytelseId = 1, endringskode = NY) - )), + arbeidsgiverOppdrag = Oppdrag( + "orgnr", Fagområde.SykepengerRefusjon, linjer = listOf( + Utbetalingslinje( + 1.januar, + 31.januar, + beløp = 500, + grad = 10, + delytelseId = 1, + endringskode = NY + ) + ) + ), personOppdrag = Oppdrag("fnr", Fagområde.Sykepenger), type = Utbetalingtype.UTBETALING, maksdato = 28.desember, @@ -286,7 +318,10 @@ internal class UtbetalingTest { assertEquals(oppdragInspektør.mottaker, detaljer.getValue("mottaker")) assertEquals(oppdragInspektør.fagsystemId(), detaljer.getValue("fagsystemId")) - assertEquals(annullering1.inspektør.utbetalingId.toString(), kontekster.getValue("utbetalingId")) + assertEquals( + annullering1.inspektør.utbetalingId.toString(), + kontekster.getValue("utbetalingId") + ) assertEquals(oppdragInspektør.fagsystemId(), kontekster.getValue("fagsystemId")) } @@ -310,7 +345,10 @@ internal class UtbetalingTest { assertEquals(oppdragInspektør.mottaker, detaljer.getValue("mottaker")) assertEquals(oppdragInspektør.fagsystemId(), detaljer.getValue("fagsystemId")) - assertEquals(utbetalingen.inspektør.utbetalingId.toString(), kontekster.getValue("utbetalingId")) + assertEquals( + utbetalingen.inspektør.utbetalingId.toString(), + kontekster.getValue("utbetalingId") + ) assertEquals(oppdragInspektør.fagsystemId(), kontekster.getValue("fagsystemId")) } @@ -321,16 +359,22 @@ internal class UtbetalingTest { @Test fun `ny utbetaling splitter opp tidligere utbetaling før`() { - val tidslinje = tidslinjeOf(16.AP, 15.NAV, 1.ARB, 27.NAV, 2.ARB, 29.NAV, startDato = 1.januar).betale() + val tidslinje = + tidslinjeOf(16.AP, 15.NAV, 1.ARB, 27.NAV, 2.ARB, 29.NAV, startDato = 1.januar).betale() val utbetaling1 = opprettUtbetaling(tidslinje) - val tidslinjeNy = tidslinjeOf(16.AP, 15.NAV, 18.ARB, 16.AP, 25.NAV, startDato = 1.januar).betale() - val utbetaling2 = opprettUtbetaling(tidslinjeNy, utbetaling1, periode = 31.januar.somPeriode()) + val tidslinjeNy = + tidslinjeOf(16.AP, 15.NAV, 18.ARB, 16.AP, 25.NAV, startDato = 1.januar).betale() + val utbetaling2 = + opprettUtbetaling(tidslinjeNy, utbetaling1, periode = 31.januar.somPeriode()) val utbetaling1Inspektør = utbetaling1.inspektør val utbetaling2Inspektør = utbetaling2.inspektør - assertEquals("PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNNANHH NNNNNHH NNNNNHH NNNNNHH NNNAAHH NNNNNHH NNNNNHH NNNNNHH NNNNNH", utbetaling1Inspektør.utbetalingstidslinje.toString()) + assertEquals( + "PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNNANHH NNNNNHH NNNNNHH NNNNNHH NNNAAHH NNNNNHH NNNNNHH NNNNNHH NNNNNH", + utbetaling1Inspektør.utbetalingstidslinje.toString() + ) assertEquals(1.januar til 31.mars, utbetaling1Inspektør.utbetalingstidslinje.periode()) assertEquals(3, utbetaling1Inspektør.arbeidsgiverOppdrag.size) utbetaling1Inspektør.arbeidsgiverOppdrag[0].inspektør.also { linje -> @@ -353,8 +397,14 @@ internal class UtbetalingTest { } assertEquals(utbetaling1Inspektør.korrelasjonsId, utbetaling2Inspektør.korrelasjonsId) - assertEquals(utbetaling1Inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), utbetaling2Inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId()) - assertEquals("PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", utbetaling2Inspektør.utbetalingstidslinje.toString()) + assertEquals( + utbetaling1Inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + utbetaling2Inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) + assertEquals( + "PPPPPPP PPPPPPP PPNNNHH NNNNNHH NNN", + utbetaling2Inspektør.utbetalingstidslinje.toString() + ) assertEquals(1.januar til 31.januar, utbetaling2Inspektør.utbetalingstidslinje.periode()) assertEquals(1, utbetaling2Inspektør.arbeidsgiverOppdrag.size) utbetaling2Inspektør.arbeidsgiverOppdrag[0].inspektør.also { linje -> @@ -397,13 +447,17 @@ internal class UtbetalingTest { val utbetaling1 = opprettUtbetaling(tidslinje1, periode = 1.februar til 2.februar) // perioden strekkes tilbake med 31 Foreldrepengedager, og 2 AGP dager etter val tidslinje2 = tidslinjeOf(31.FRI, 2.AP).betale() - val utbetaling2 = opprettUtbetaling(tidslinje2, tidligere = utbetaling1, periode = 1.januar til 2.februar) + val utbetaling2 = + opprettUtbetaling(tidslinje2, tidligere = utbetaling1, periode = 1.januar til 2.februar) val utbetaling1Inspektør = utbetaling1.inspektør val utbetaling2Inspektør = utbetaling2.inspektør assertEquals("?P", utbetaling1Inspektør.utbetalingstidslinje.toString()) - assertEquals("FFFFFFF FFFFFFF FFFFFFF FFFFFFF FFFPP", utbetaling2Inspektør.utbetalingstidslinje.toString()) + assertEquals( + "FFFFFFF FFFFFFF FFFFFFF FFFFFFF FFFPP", + utbetaling2Inspektør.utbetalingstidslinje.toString() + ) assertEquals(1.februar til 2.februar, utbetaling1Inspektør.utbetalingstidslinje.periode()) assertEquals(1.januar til 2.februar, utbetaling2Inspektør.utbetalingstidslinje.periode()) assertEquals(utbetaling2Inspektør.korrelasjonsId, utbetaling1Inspektør.korrelasjonsId) @@ -476,7 +530,10 @@ internal class UtbetalingTest { val annullering = annuller(første) ?: fail { "forventet utbetaling" } val andre = opprettUtbetaling(tidslinje, annullering) assertNotEquals(første.inspektør.korrelasjonsId, andre.inspektør.korrelasjonsId) - assertNotEquals(første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId()) + assertNotEquals( + første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) } @Test @@ -486,10 +543,16 @@ internal class UtbetalingTest { val første = opprettUtbetaling(tidslinje.betale()) val andre = opprettUtbetaling(ferietidslinje.betale(), første) val tredje = opprettUtbetaling(tidslinje.betale(), andre) - assertEquals(første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId()) + assertEquals( + første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) assertEquals(første.inspektør.korrelasjonsId, andre.inspektør.korrelasjonsId) assertTrue(andre.inspektør.arbeidsgiverOppdrag[0].erOpphør()) - assertEquals(første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), tredje.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId()) + assertEquals( + første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + tredje.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) assertEquals(første.inspektør.korrelasjonsId, tredje.inspektør.korrelasjonsId) assertEquals(17.januar, tredje.inspektør.arbeidsgiverOppdrag.first().inspektør.fom) assertEquals(26.januar, tredje.inspektør.arbeidsgiverOppdrag.last().inspektør.tom) @@ -501,11 +564,17 @@ internal class UtbetalingTest { val tidslinje = tidslinjeOf(16.AP, 10.NAV).betale() val første = opprettUtbetaling(tidslinje.fremTilOgMed(16.januar)) val andre = opprettUtbetaling(tidslinje, første) - assertEquals(første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId()) + assertEquals( + første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) assertEquals(første.inspektør.korrelasjonsId, andre.inspektør.korrelasjonsId) assertTrue(første.inspektør.arbeidsgiverOppdrag.isEmpty()) assertTrue(andre.inspektør.arbeidsgiverOppdrag.isNotEmpty()) - assertEquals(første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId()) + assertEquals( + første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) assertEquals(første.inspektør.korrelasjonsId, andre.inspektør.korrelasjonsId) assertEquals(NY, andre.inspektør.arbeidsgiverOppdrag.inspektør.endringskode) assertEquals(NY, andre.inspektør.arbeidsgiverOppdrag[0].inspektør.endringskode) @@ -519,11 +588,24 @@ internal class UtbetalingTest { val ferietidslinje = tidslinjeOf(16.AP, 10.FRI) val første = opprettUtbetaling(tidslinje) val andre = opprettUtbetaling(ferietidslinje.betale(), første) - val tredje = opprettUtbetaling(beregnUtbetalinger(ferietidslinje + tidslinjeOf(10.NAV, startDato = 27.januar)), andre) - assertEquals(første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId()) + val tredje = opprettUtbetaling( + beregnUtbetalinger( + ferietidslinje + tidslinjeOf( + 10.NAV, + startDato = 27.januar + ) + ), andre + ) + assertEquals( + første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) assertEquals(første.inspektør.korrelasjonsId, andre.inspektør.korrelasjonsId) assertTrue(andre.inspektør.arbeidsgiverOppdrag[0].erOpphør()) - assertEquals(første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), tredje.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId()) + assertEquals( + første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + tredje.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) assertEquals(første.inspektør.korrelasjonsId, tredje.inspektør.korrelasjonsId) assertEquals(27.januar, tredje.inspektør.arbeidsgiverOppdrag.first().inspektør.fom) assertNull(tredje.inspektør.arbeidsgiverOppdrag.first().inspektør.datoStatusFom) @@ -539,7 +621,8 @@ internal class UtbetalingTest { ).betale() val tidligere = opprettUtbetaling(tidslinje.fremTilOgMed(19.januar(2020))) - val utbetaling = opprettUtbetaling(tidslinje.fremTilOgMed(24.januar(2020)), tidligere = tidligere) + val utbetaling = + opprettUtbetaling(tidslinje.fremTilOgMed(24.januar(2020)), tidligere = tidligere) assertEquals(tidligere.inspektør.korrelasjonsId, utbetaling.inspektør.korrelasjonsId) utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.also { inspektør -> @@ -593,7 +676,11 @@ internal class UtbetalingTest { fun `kan ikke forkaste feilet utbetaling`() { val tidslinje = tidslinjeOf(16.AP, 15.NAV).betale() val utbetaling = opprettGodkjentUtbetaling(tidslinje) - kvittèr(utbetaling, utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), status = AVVIST) + kvittèr( + utbetaling, + utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + status = AVVIST + ) assertFalse(Utbetaling.kanForkastes(listOf(utbetaling), listOf(utbetaling))) } @@ -609,15 +696,17 @@ internal class UtbetalingTest { fun `kan forkaste utbetalt utbetaling dersom den er annullert`() { val tidslinje = tidslinjeOf(16.AP, 32.NAV).betale() val utbetaling = opprettUtbetaling(tidslinje.fremTilOgMed(31.januar)) - val annullert = opprettUtbetaling(tidslinje.fremTilOgMed(17.februar), tidligere = utbetaling).let { - annuller(it) - } ?: fail { "Kunne ikke annullere" } + val annullert = + opprettUtbetaling(tidslinje.fremTilOgMed(17.februar), tidligere = utbetaling).let { + annuller(it) + } ?: fail { "Kunne ikke annullere" } assertTrue(Utbetaling.kanForkastes(listOf(utbetaling), listOf(annullert))) } @Test fun `går ikke videre når ett av to oppdrag er akseptert`() { - val tidslinje = tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() + val tidslinje = + tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() val utbetaling = opprettGodkjentUtbetaling(tidslinje) kvittèr(utbetaling) assertEquals(OVERFØRT, utbetaling.inspektør.tilstand) @@ -625,7 +714,8 @@ internal class UtbetalingTest { @Test fun `går videre når begge oppdragene er akseptert`() { - val tidslinje = tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() + val tidslinje = + tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() val utbetaling = opprettGodkjentUtbetaling(tidslinje) kvittèr(utbetaling) kvittèr(utbetaling, utbetaling.inspektør.personOppdrag.fagsystemId) @@ -634,17 +724,27 @@ internal class UtbetalingTest { @Test fun `utbetalingen er feilet dersom én av oppdragene er avvist 1`() { - val tidslinje = tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() + val tidslinje = + tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() val utbetaling = opprettGodkjentUtbetaling(tidslinje) - kvittèr(utbetaling, utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), AVVIST) + kvittèr( + utbetaling, + utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + AVVIST + ) assertEquals(OVERFØRT, utbetaling.inspektør.tilstand) } @Test fun `tar imot kvittering på det andre oppdraget selv om utbetalingen har feilet`() { - val tidslinje = tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() + val tidslinje = + tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() val utbetaling = opprettGodkjentUtbetaling(tidslinje) - kvittèr(utbetaling, utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), AVVIST) + kvittèr( + utbetaling, + utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + AVVIST + ) kvittèr(utbetaling, utbetaling.inspektør.personOppdrag.fagsystemId, AKSEPTERT) assertEquals(AVVIST, utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.status()) assertEquals(AKSEPTERT, utbetaling.inspektør.personOppdrag.inspektør.status()) @@ -653,23 +753,30 @@ internal class UtbetalingTest { @Test fun `utbetalingen er feilet dersom én av oppdragene er avvist 2`() { - val tidslinje = tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() + val tidslinje = + tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() val utbetaling = opprettGodkjentUtbetaling(tidslinje) - kvittèr(utbetaling, utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), AKSEPTERT) + kvittèr( + utbetaling, + utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + AKSEPTERT + ) kvittèr(utbetaling, utbetaling.inspektør.personOppdrag.fagsystemId, AVVIST) assertEquals(OVERFØRT, utbetaling.inspektør.tilstand) } @Test fun `delvis refusjon`() { - val tidslinje = tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() + val tidslinje = + tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() val utbetaling = opprettUtbetaling(tidslinje) assertTrue(utbetaling.harDelvisRefusjon()) } @Test fun `annullere delvis refusjon`() { - val tidslinje = tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() + val tidslinje = + tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() val utbetaling = opprettUtbetaling(tidslinje) val annullering = annuller(utbetaling) ?: fail { "forventet utbetaling" } assertTrue(annullering.inspektør.arbeidsgiverOppdrag.last().erOpphør()) @@ -678,7 +785,11 @@ internal class UtbetalingTest { @Test fun `annullere utbetaling med full refusjon, så null refusjon`() { - val tidslinje = tidslinjeOf(16.AP, 5.NAV, 10.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600)).betale() + val tidslinje = tidslinjeOf( + 16.AP, + 5.NAV, + 10.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 600) + ).betale() val første = opprettUtbetaling(tidslinje.fremTilOgMed(21.januar)) val andre = opprettUtbetaling(tidslinje, første) val annullering = annuller(andre) ?: fail { "forventet utbetaling" } @@ -688,7 +799,8 @@ internal class UtbetalingTest { @Test fun `null refusjon`() { - val tidslinje = tidslinjeOf(16.AP, 30.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 0)).betale() + val tidslinje = + tidslinjeOf(16.AP, 30.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 0)).betale() val første = opprettUtbetaling(tidslinje.fremTilOgMed(31.januar)) val andre = opprettUtbetaling(tidslinje, første) assertFalse(første.harDelvisRefusjon()) @@ -699,20 +811,35 @@ internal class UtbetalingTest { @Test fun `korrelasjonsId er lik på brukerutbetalinger direkte fra Infotrygd`() { val tidslinje = - beregnUtbetalinger(tidslinjeOf(5.UKJ, 26.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 0))) + beregnUtbetalinger( + tidslinjeOf( + 5.UKJ, + 26.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 0) + ) + ) val første = opprettUtbetaling(tidslinje.fremTilOgMed(21.januar)) val andre = opprettUtbetaling(tidslinje, første) - assertEquals(første.inspektør.personOppdrag.fagsystemId, andre.inspektør.personOppdrag.fagsystemId) - assertEquals(første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId()) + assertEquals( + første.inspektør.personOppdrag.fagsystemId, + andre.inspektør.personOppdrag.fagsystemId + ) + assertEquals( + første.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + andre.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId() + ) assertEquals(første.inspektør.korrelasjonsId, andre.inspektør.korrelasjonsId) } @Test fun `simulerer ingen refusjon`() { - val tidslinje = tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 0)).betale() + val tidslinje = + tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 0)).betale() val utbetaling = opprettUbetaltUtbetaling(tidslinje) val simulering = opprettSimulering( - utbetaling.inspektør.personOppdrag.fagsystemId, Fagområde.Sykepenger, utbetaling.inspektør.utbetalingId, SimuleringResultatDto( + utbetaling.inspektør.personOppdrag.fagsystemId, + Fagområde.Sykepenger, + utbetaling.inspektør.utbetalingId, + SimuleringResultatDto( totalbeløp = 1000, perioder = emptyList() ) @@ -724,10 +851,14 @@ internal class UtbetalingTest { @Test fun `simulerer full refusjon`() { - val tidslinje = tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 1000)).betale() + val tidslinje = + tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 1000)).betale() val utbetaling = opprettUbetaltUtbetaling(tidslinje) val simulering = opprettSimulering( - utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), Fagområde.SykepengerRefusjon, utbetaling.inspektør.utbetalingId, SimuleringResultatDto( + utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + Fagområde.SykepengerRefusjon, + utbetaling.inspektør.utbetalingId, + SimuleringResultatDto( totalbeløp = 1000, perioder = emptyList() ) @@ -739,17 +870,24 @@ internal class UtbetalingTest { @Test fun `simulerer delvis refusjon`() { - val tidslinje = tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 500)).betale() + val tidslinje = + tidslinjeOf(16.AP, 15.NAV(dekningsgrunnlag = 1000, refusjonsbeløp = 500)).betale() val utbetaling = opprettUbetaltUtbetaling(tidslinje) val simuleringArbeidsgiver = opprettSimulering( - utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), Fagområde.SykepengerRefusjon, utbetaling.inspektør.utbetalingId, SimuleringResultatDto( + utbetaling.inspektør.arbeidsgiverOppdrag.inspektør.fagsystemId(), + Fagområde.SykepengerRefusjon, + utbetaling.inspektør.utbetalingId, + SimuleringResultatDto( totalbeløp = 500, perioder = emptyList() ) ) val simuleringPerson = opprettSimulering( - utbetaling.inspektør.personOppdrag.fagsystemId, Fagområde.Sykepenger, utbetaling.inspektør.utbetalingId, SimuleringResultatDto( + utbetaling.inspektør.personOppdrag.fagsystemId, + Fagområde.Sykepenger, + utbetaling.inspektør.utbetalingId, + SimuleringResultatDto( totalbeløp = 500, perioder = emptyList() ) @@ -761,7 +899,12 @@ internal class UtbetalingTest { assertNotNull(utbetaling.inspektør.personOppdrag.inspektør.simuleringsResultat()) } - private fun opprettSimulering(fagsystemId: String, fagområde: Fagområde, utbetalingId: UUID, simuleringResultat: SimuleringResultatDto? = null) = + private fun opprettSimulering( + fagsystemId: String, + fagområde: Fagområde, + utbetalingId: UUID, + simuleringResultat: SimuleringResultatDto? = null + ) = Simulering( utbetalingId = utbetalingId, fagsystemId = fagsystemId, @@ -770,17 +913,32 @@ internal class UtbetalingTest { ) private fun Utbetalingstidslinje.betale() = beregnUtbetalinger(this) - private fun beregnUtbetalinger(tidslinje: Utbetalingstidslinje) = Utbetalingstidslinje.betale(listOf(tidslinje)).single() + private fun beregnUtbetalinger(tidslinje: Utbetalingstidslinje) = + Utbetalingstidslinje.betale(listOf(tidslinje)).single() private fun opprettGodkjentUtbetaling( tidslinje: Utbetalingstidslinje, periode: Periode = tidslinje.periode(), fødselsnummer: String = UNG_PERSON_FNR_2018, orgnummer: String = ORGNUMMER, - utbetalingsaker: List = listOf(Utbetalingsak(tidslinje.periode().start, listOf(periode))), + utbetalingsaker: List = listOf( + Utbetalingsak( + tidslinje.periode().start, + listOf(periode) + ) + ), aktivitetslogg: Aktivitetslogg = this.aktivitetslogg - ) = opprettUbetaltUtbetaling(tidslinje, null, periode, fødselsnummer, orgnummer, utbetalingsaker, aktivitetslogg) + ) = opprettUbetaltUtbetaling( + tidslinje, + null, + periode, + fødselsnummer, + orgnummer, + utbetalingsaker, + aktivitetslogg + ) .also { godkjenn(it) } + private fun opprettGodkjentUtbetaling() = opprettGodkjentUtbetaling(beregnUtbetalinger(tidslinjeOf(16.AP, 5.NAV(3000)))) @@ -790,7 +948,12 @@ internal class UtbetalingTest { periode: Periode = tidslinje.periode(), fødselsnummer: String = UNG_PERSON_FNR_2018, orgnummer: String = ORGNUMMER, - utbetalingsaker: List = listOf(Utbetalingsak(tidslinje.periode().start, listOf(periode))), + utbetalingsaker: List = listOf( + Utbetalingsak( + tidslinje.periode().start, + listOf(periode) + ) + ), aktivitetslogg: Aktivitetslogg = this.aktivitetslogg ) = Utbetaling.lagUtbetaling( tidligere?.let { listOf(tidligere) } ?: emptyList(), @@ -811,9 +974,22 @@ internal class UtbetalingTest { periode: Periode = tidslinje.periode(), fødselsnummer: String = UNG_PERSON_FNR_2018, orgnummer: String = ORGNUMMER, - utbetalingsaker: List = listOf(Utbetalingsak(tidslinje.periode().start, listOf(periode))), + utbetalingsaker: List = listOf( + Utbetalingsak( + tidslinje.periode().start, + listOf(periode) + ) + ), aktivitetslogg: Aktivitetslogg = this.aktivitetslogg - ) = opprettUbetaltUtbetaling(tidslinje, tidligere, periode, fødselsnummer, orgnummer, utbetalingsaker, aktivitetslogg).also { utbetaling -> + ) = opprettUbetaltUtbetaling( + tidslinje, + tidligere, + periode, + fødselsnummer, + orgnummer, + utbetalingsaker, + aktivitetslogg + ).also { utbetaling -> godkjenn(utbetaling) listOf(utbetaling.inspektør.arbeidsgiverOppdrag, utbetaling.inspektør.personOppdrag) .filter { it.harUtbetalinger() } @@ -837,16 +1013,20 @@ internal class UtbetalingTest { return aktivitetslogg } - private fun godkjenn(utbetaling: Utbetaling, utbetalingGodkjent: Boolean = true) = Aktivitetslogg().also { aktivitetslogg -> - Utbetalingsgodkjenning( - utbetalingId = utbetaling.inspektør.utbetalingId, - godkjent = utbetalingGodkjent - ).also { - utbetaling.håndter(it, aktivitetslogg) + private fun godkjenn(utbetaling: Utbetaling, utbetalingGodkjent: Boolean = true) = + Aktivitetslogg().also { aktivitetslogg -> + Utbetalingsgodkjenning( + utbetalingId = utbetaling.inspektør.utbetalingId, + godkjent = utbetalingGodkjent + ).also { + utbetaling.håndter(it, aktivitetslogg) + } } - } - private fun annuller(utbetaling: Utbetaling, utbetalingId: UUID = utbetaling.inspektør.utbetalingId) = + private fun annuller( + utbetaling: Utbetaling, + utbetalingId: UUID = utbetaling.inspektør.utbetalingId + ) = utbetaling.annuller( hendelse = AnnullerUtbetaling(utbetalingId), Aktivitetslogg(), @@ -865,7 +1045,8 @@ internal class UtbetalingTest { override val utbetalingId: UUID, override val godkjent: Boolean ) : UtbetalingsavgjørelseHendelse { - override fun saksbehandler(): Saksbehandler = Saksbehandler("Z999999", "mille.mellomleder@nav.no") + override fun saksbehandler(): Saksbehandler = + Saksbehandler("Z999999", "mille.mellomleder@nav.no") override val avgjørelsestidspunkt: LocalDateTime = LocalDateTime.now() override val automatisert: Boolean = false @@ -884,7 +1065,8 @@ internal class UtbetalingTest { private class AnnullerUtbetaling( override val utbetalingId: UUID ) : AnnullerUtbetalingHendelse { - override val vurdering: Utbetaling.Vurdering = Utbetaling.Vurdering(true, "Z999999", "utbetaling@nav.no", LocalDateTime.now(), false) + override val vurdering: Utbetaling.Vurdering = + Utbetaling.Vurdering(true, "Z999999", "utbetaling@nav.no", LocalDateTime.now(), false) } private class Simulering( @@ -902,4 +1084,4 @@ private val frø = LocalDate.of(2018, 1, 1) val Int.januar get() = frø.withMonth(1).withDayOfMonth(this) val Int.februar get() = frø.withMonth(2).withDayOfMonth(this) val Int.mars get() = frø.withMonth(3).withDayOfMonth(this) -val Int.desember get() = frø.withMonth(12).withDayOfMonth(this) \ No newline at end of file +val Int.desember get() = frø.withMonth(12).withDayOfMonth(this) diff --git "a/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/Ny\303\230konomiTest.kt" "b/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/Ny\303\230konomiTest.kt" index 29971dbf9a..eaa1b5da44 100644 --- "a/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/Ny\303\230konomiTest.kt" +++ "b/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/Ny\303\230konomiTest.kt" @@ -1,6 +1,5 @@ package no.nav.helse.økonomi -import no.nav.helse.mai import no.nav.helse.økonomi.Inntekt.Companion.INGEN import no.nav.helse.økonomi.Inntekt.Companion.daglig import no.nav.helse.økonomi.Inntekt.Companion.månedlig @@ -49,7 +48,11 @@ data class UberegnetØkonomi( return listOf(this).beregn(`6G`, tilkommet).single() } - fun begrensTil6G(inntektavkorting: Prosentdel, refusjonavkorting: Prosentdel, delAvTilkommet: Inntekt): `6GBegrensetØkonomi` { + fun begrensTil6G( + inntektavkorting: Prosentdel, + refusjonavkorting: Prosentdel, + delAvTilkommet: Inntekt + ): `6GBegrensetØkonomi` { return `6GBegrensetØkonomi`( økonomi = this, inntektandel = this.inntektPåSkjæringstidspunktet * inntektavkorting, @@ -59,14 +62,24 @@ data class UberegnetØkonomi( } companion object { - fun List.beregn(`6G`: Inntekt, tilkommet: Inntekt): List { - val inntektsgrunnlagavkorting = begrensTil6G(`6G`, UberegnetØkonomi::inntektPåSkjæringstidspunktet) + fun List.beregn( + `6G`: Inntekt, + tilkommet: Inntekt + ): List { + val inntektsgrunnlagavkorting = + begrensTil6G(`6G`, UberegnetØkonomi::inntektPåSkjæringstidspunktet) val refusjonsgrunnlagavkorting = begrensTil6G(`6G`, UberegnetØkonomi::ønsketRefusjon) val tilkommetPerArbeidsgiver = tilkommet / size return this - .map { it.begrensTil6G(inntektsgrunnlagavkorting, refusjonsgrunnlagavkorting, tilkommetPerArbeidsgiver) } + .map { + it.begrensTil6G( + inntektsgrunnlagavkorting, + refusjonsgrunnlagavkorting, + tilkommetPerArbeidsgiver + ) + } .fordel() } @@ -80,26 +93,41 @@ data class UberegnetØkonomi( .fordelPerson(totalTaptInntekt, totalGradertPersonbeløp) } - private fun List<`6GBegrensetØkonomi`>.fordelRefusjon(totalTaptInntekt: Inntekt, totalGradertRefusjon: Inntekt): List { + private fun List<`6GBegrensetØkonomi`>.fordelRefusjon( + totalTaptInntekt: Inntekt, + totalGradertRefusjon: Inntekt + ): List { // fordeler refusjonsbeløpene - val fordeltRefusjon = fordel(totalGradertRefusjon, totalTaptInntekt, `6GBegrensetØkonomi`::fordelRefusjon) + val fordeltRefusjon = + fordel(totalGradertRefusjon, totalTaptInntekt, `6GBegrensetØkonomi`::fordelRefusjon) // TODO: return fordeltRefusjon } - private fun List.fordelPerson(totalTaptInntekt: Inntekt, totalGradertPersonbeløp: Inntekt): List { + private fun List.fordelPerson( + totalTaptInntekt: Inntekt, + totalGradertPersonbeløp: Inntekt + ): List { val totalFordeltRefusjon = map { it.refusjonsbeløp }.summer() // pga avrunding så kjører vi først en runde hvor vi fordeler ut refusjon, // og så ser vi summen av avrundet refusjon etterpå val totalFordeltPersonbeløp = maxOf(INGEN, totalTaptInntekt - totalFordeltRefusjon) // fordeler personbeløpene - return fordel(totalGradertPersonbeløp, totalFordeltPersonbeløp, FordeltRefusjon::fordelPersonutbetaling) + return fordel( + totalGradertPersonbeløp, + totalFordeltPersonbeløp, + FordeltRefusjon::fordelPersonutbetaling + ) } - private fun List.fordel(budsjett: Inntekt, total: Inntekt, strategi: T.(Prosentdel) -> R): List { + private fun List.fordel( + budsjett: Inntekt, + total: Inntekt, + strategi: T.(Prosentdel) -> R + ): List { val ratio = when { budsjett == INGEN -> 0.prosent total > budsjett -> 100.prosent @@ -110,7 +138,10 @@ data class UberegnetØkonomi( return map { it.strategi(ratio) } } - private fun List.begrensTil6G(`6G`: Inntekt, strategi: (UberegnetØkonomi) -> Inntekt): Prosentdel { + private fun List.begrensTil6G( + `6G`: Inntekt, + strategi: (UberegnetØkonomi) -> Inntekt + ): Prosentdel { val total = map { strategi(it) }.summer() return minOf(`6G`, total) ratio total } @@ -162,4 +193,4 @@ data class FordeltRefusjon( data class BeregnetØkonomi( val refusjonsbeløp: Inntekt, val personbeløp: Inntekt -) \ No newline at end of file +) diff --git "a/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/ProsentdelTest.kt" "b/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/ProsentdelTest.kt" index 827519148f..85a48fd5d6 100644 --- "a/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/ProsentdelTest.kt" +++ "b/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/ProsentdelTest.kt" @@ -23,11 +23,12 @@ internal class ProsentdelTest { assertEquals(100.prosent, result) } - @Test fun equality() { - assertEquals(ratio(1.0, 4.0), 25.0.prosent ) - assertNotEquals(ratio(1.0, 4.0), 75.0.prosent ) - assertNotEquals(ratio(1.0, 4.0), Any() ) - assertNotEquals(ratio(1.0, 4.0), null ) + @Test + fun equality() { + assertEquals(ratio(1.0, 4.0), 25.0.prosent) + assertNotEquals(ratio(1.0, 4.0), 75.0.prosent) + assertNotEquals(ratio(1.0, 4.0), Any()) + assertNotEquals(ratio(1.0, 4.0), null) } @Test @@ -73,7 +74,8 @@ internal class ProsentdelTest { assertThrows { (100.001).prosent } } - @Test fun minimumssyke() { + @Test + fun minimumssyke() { assertFalse(25.prosent.erUnderGrensen()) assertFalse(20.prosent.erUnderGrensen()) assertTrue(15.prosent.erUnderGrensen()) diff --git "a/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/\303\230konomiTest.kt" "b/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/\303\230konomiTest.kt" index 78cb6b3186..8c37807a79 100644 --- "a/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/\303\230konomiTest.kt" +++ "b/sykepenger-utbetaling/src/test/kotlin/no/nav/helse/\303\270konomi/\303\230konomiTest.kt" @@ -26,7 +26,8 @@ internal class ØkonomiTest { @Test fun `er 6g-begrensning selv om dekningsgrunnlaget er lavere`() { val over6g = `6g` + 260.daglig - val økonomi = listOf(100.prosent.sykdomsgrad.inntekt(over6g, dekningsgrunnlag = `6g`, `6G` = `6g`)) + val økonomi = + listOf(100.prosent.sykdomsgrad.inntekt(over6g, dekningsgrunnlag = `6g`, `6G` = `6g`)) val betalte = Økonomi.betal(økonomi) assertTrue(betalte.er6GBegrenset()) { "sykepengegrunnlaget regnes ut fra innrapportert inntekt (§ 8-28) og ikke dekningsgrunnlaget" } } @@ -311,9 +312,17 @@ internal class ØkonomiTest { refusjonsbeløp = 30000.månedlig * 75.prosent ) val b = - 50.prosent.sykdomsgrad.inntekt(10000.månedlig, `6G` = `6g`, refusjonsbeløp = 10000.månedlig) + 50.prosent.sykdomsgrad.inntekt( + 10000.månedlig, + `6G` = `6g`, + refusjonsbeløp = 10000.månedlig + ) val c = - 70.prosent.sykdomsgrad.inntekt(15000.månedlig, `6G` = `6g`, refusjonsbeløp = 15000.månedlig) + 70.prosent.sykdomsgrad.inntekt( + 15000.månedlig, + `6G` = `6g`, + refusjonsbeløp = 15000.månedlig + ) val betalte = listOf(a, b, c).betal() betalte.forEach { assertTrue(it.er6GBegrenset()) @@ -326,8 +335,10 @@ internal class ØkonomiTest { @Test fun `tre arbeidsgivere med arbeidsgivere`() { - val a = 50.prosent.sykdomsgrad.inntekt(4800.daglig, `6G` = `6g`, refusjonsbeløp = 2400.daglig) - val b = 20.prosent.sykdomsgrad.inntekt(3200.daglig, `6G` = `6g`, refusjonsbeløp = 3200.daglig) + val a = + 50.prosent.sykdomsgrad.inntekt(4800.daglig, `6G` = `6g`, refusjonsbeløp = 2400.daglig) + val b = + 20.prosent.sykdomsgrad.inntekt(3200.daglig, `6G` = `6g`, refusjonsbeløp = 3200.daglig) val c = 60.prosent.sykdomsgrad.inntekt(8000.daglig, `6G` = `6g`, refusjonsbeløp = 0.daglig) val betalte = listOf(a, b, c).betal() assertEquals(49.prosent, betalte.totalSykdomsgrad()) @@ -343,7 +354,11 @@ internal class ØkonomiTest { @Test fun `eksempel fra regneark`() { val a = - 50.prosent.sykdomsgrad.inntekt(21000.månedlig, `6G` = `6g`, refusjonsbeløp = 21000.månedlig) + 50.prosent.sykdomsgrad.inntekt( + 21000.månedlig, + `6G` = `6g`, + refusjonsbeløp = 21000.månedlig + ) val b = 80.prosent.sykdomsgrad.inntekt( 10000.månedlig, `6G` = `6g`, @@ -368,7 +383,11 @@ internal class ØkonomiTest { @Test fun `eksempel fra regneark modifisert for utbetaling til arbeidstaker`() { val a = - 50.prosent.sykdomsgrad.inntekt(21000.månedlig, `6G` = `6g`, refusjonsbeløp = 21000.månedlig) + 50.prosent.sykdomsgrad.inntekt( + 21000.månedlig, + `6G` = `6g`, + refusjonsbeløp = 21000.månedlig + ) val b = 20.prosent.sykdomsgrad.inntekt( 10000.månedlig, `6G` = `6g`, @@ -448,7 +467,8 @@ internal class ØkonomiTest { assertEquals( 1384, betalte.mapNotNull { it.inspektør.arbeidsgiverbeløp }.summer() - .dagligInt) + .dagligInt + ) assertUtbetaling(betalte[0], 692.0, 0.0) assertUtbetaling(betalte[1], 692.0, 0.0) }, @@ -456,7 +476,8 @@ internal class ØkonomiTest { assertEquals( 1385, betalte.mapNotNull { it.inspektør.arbeidsgiverbeløp }.summer() - .dagligInt) + .dagligInt + ) assertUtbetaling(betalte[0], 693.0, 0.0) assertUtbetaling(betalte[1], 692.0, 0.0) } @@ -466,9 +487,17 @@ internal class ØkonomiTest { @Test fun `fordeling mellom arbeidsgivere med lik inntekt og refusjon 2`() { val a = - 100.prosent.sykdomsgrad.inntekt(7750.månedlig, `6G` = `6g`, refusjonsbeløp = 7750.månedlig) + 100.prosent.sykdomsgrad.inntekt( + 7750.månedlig, + `6G` = `6g`, + refusjonsbeløp = 7750.månedlig + ) val b = - 100.prosent.sykdomsgrad.inntekt(7750.månedlig, `6G` = `6g`, refusjonsbeløp = 7750.månedlig) + 100.prosent.sykdomsgrad.inntekt( + 7750.månedlig, + `6G` = `6g`, + refusjonsbeløp = 7750.månedlig + ) val betalte = listOf(a, b).betal().also { assertEquals(100.prosent, it.totalSykdomsgrad()) } @@ -482,9 +511,17 @@ internal class ØkonomiTest { @Test fun `fordeling mellom arbeidsgivere med lik refusjon, men ulik inntekt`() { val a = - 100.prosent.sykdomsgrad.inntekt(8000.månedlig, `6G` = `6g`, refusjonsbeløp = 7750.månedlig) + 100.prosent.sykdomsgrad.inntekt( + 8000.månedlig, + `6G` = `6g`, + refusjonsbeløp = 7750.månedlig + ) val b = - 100.prosent.sykdomsgrad.inntekt(7750.månedlig, `6G` = `6g`, refusjonsbeløp = 7750.månedlig) + 100.prosent.sykdomsgrad.inntekt( + 7750.månedlig, + `6G` = `6g`, + refusjonsbeløp = 7750.månedlig + ) val betalte = listOf(a, b).betal().also { assertEquals(100.prosent, it.totalSykdomsgrad()) } @@ -506,7 +543,11 @@ internal class ØkonomiTest { @Test fun `tilkommen inntekt - total grad bestemmes ut fra sykepengegrunnlaget`() { val `6G` = `6g` - val a = 80.prosent.sykdomsgrad.inntekt(50000.månedlig, beregningsgrunnlag = 50000.månedlig, `6G` = `6G`) + val a = 80.prosent.sykdomsgrad.inntekt( + 50000.månedlig, + beregningsgrunnlag = 50000.månedlig, + `6G` = `6G` + ) val b = 100.prosent.sykdomsgrad.inntekt( 30000.månedlig, beregningsgrunnlag = INGEN, @@ -523,7 +564,11 @@ internal class ØkonomiTest { @Test fun `tilkommen inntekt - mer i tilkommen enn 6G`() { val `6G` = `6g` - val a = 100.prosent.sykdomsgrad.inntekt(31000.månedlig, beregningsgrunnlag = 31000.månedlig, `6G` = `6G`) + val a = 100.prosent.sykdomsgrad.inntekt( + 31000.månedlig, + beregningsgrunnlag = 31000.månedlig, + `6G` = `6G` + ) val b = 0.prosent.sykdomsgrad.inntekt( 50000.månedlig, beregningsgrunnlag = INGEN, @@ -540,8 +585,10 @@ internal class ØkonomiTest { @Test fun `Tilkommen inntekt - fordeler ikke personbeløp ved avsluttet arbeidsforhold`() { val `6G` = `6g` - val a = 0.prosent.sykdomsgrad.inntekt(INGEN, beregningsgrunnlag = 31000.månedlig, `6G`= `6G`) - val b = 100.prosent.sykdomsgrad.inntekt(10000.månedlig, beregningsgrunnlag = INGEN, `6G` = `6G`) + val a = + 0.prosent.sykdomsgrad.inntekt(INGEN, beregningsgrunnlag = 31000.månedlig, `6G` = `6G`) + val b = + 100.prosent.sykdomsgrad.inntekt(10000.månedlig, beregningsgrunnlag = INGEN, `6G` = `6G`) val betalte = listOf(a, b).betal() assertUtbetaling(betalte[0], 0.0, 0.0) assertUtbetaling(betalte[1], 0.0, 0.0) @@ -568,11 +615,12 @@ internal class ØkonomiTest { assertEquals( 2161, betalte.mapNotNull { it.inspektør.arbeidsgiverbeløp }.summer() - .dagligInt) + .dagligInt + ) assertForventetFeil( forklaring = "arbeidsgiver 2 har høyere avrundingsdifferanse enn arbeidsgiver 1, og bør få den 1 kr diffen." + - "sykepengegrunnlaget er 561 860 kr (6G). Arbeidsgiver 1 sin andel utgjør (30,000 / (30,000 + 35,000 kr)) * 561 860 kr = 997,38 kr daglig." + - "Arbeidsgiver 2 sin andel utgjør (35,000 / (30,000 + 35,000 kr)) * 561 860 kr = 1163,62 kr daglig, og har med dette en større avrundingsdifferanse.", + "sykepengegrunnlaget er 561 860 kr (6G). Arbeidsgiver 1 sin andel utgjør (30,000 / (30,000 + 35,000 kr)) * 561 860 kr = 997,38 kr daglig." + + "Arbeidsgiver 2 sin andel utgjør (35,000 / (30,000 + 35,000 kr)) * 561 860 kr = 1163,62 kr daglig, og har med dette en større avrundingsdifferanse.", nå = { assertUtbetaling(betalte[0], 998.0, 0.0) assertUtbetaling(betalte[1], 1163.0, 0.0) @@ -584,8 +632,16 @@ internal class ØkonomiTest { ) } - private fun assertUtbetaling(økonomi: Økonomi, expectedArbeidsgiver: Double, expectedPerson: Double) { - assertEquals(expectedArbeidsgiver.daglig, økonomi.inspektør.arbeidsgiverbeløp, "arbeidsgiverbeløp problem") + private fun assertUtbetaling( + økonomi: Økonomi, + expectedArbeidsgiver: Double, + expectedPerson: Double + ) { + assertEquals( + expectedArbeidsgiver.daglig, + økonomi.inspektør.arbeidsgiverbeløp, + "arbeidsgiverbeløp problem" + ) assertEquals(expectedPerson.daglig, økonomi.inspektør.personbeløp, "personbeløp problem") } @@ -627,6 +683,7 @@ private fun Throwable.håndterØnsketOppførselFeil(forklaring: String?) = when } private fun assertForventetFeil(forklaring: String? = null, nå: () -> Unit, ønsket: () -> Unit) { - runCatching(nå).exceptionOrNull()?.håndterNåOppførselFeil(harØnsketOppførsel = runCatching(ønsket).isSuccess) + runCatching(nå).exceptionOrNull() + ?.håndterNåOppførselFeil(harØnsketOppførsel = runCatching(ønsket).isSuccess) assertThrows(ØnsketOppførsel) { ønsket() }.håndterØnsketOppførselFeil(forklaring) -} \ No newline at end of file +} diff --git "a/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/inspectors/UtbetalingstidslinjeInspekt\303\270r.kt" "b/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/inspectors/UtbetalingstidslinjeInspekt\303\270r.kt" index 43be2999ad..f270adc998 100644 --- "a/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/inspectors/UtbetalingstidslinjeInspekt\303\270r.kt" +++ "b/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/inspectors/UtbetalingstidslinjeInspekt\303\270r.kt" @@ -1,6 +1,7 @@ package no.nav.helse.inspectors import java.time.LocalDate +import kotlin.reflect.KClass import no.nav.helse.utbetalingstidslinje.Begrunnelse import no.nav.helse.utbetalingstidslinje.Utbetalingsdag import no.nav.helse.utbetalingstidslinje.Utbetalingsdag.Arbeidsdag @@ -14,7 +15,6 @@ import no.nav.helse.utbetalingstidslinje.Utbetalingsdag.NavHelgDag import no.nav.helse.utbetalingstidslinje.Utbetalingsdag.UkjentDag import no.nav.helse.utbetalingstidslinje.Utbetalingstidslinje import no.nav.helse.økonomi.Økonomi -import kotlin.reflect.KClass val Utbetalingstidslinje.inspektør get() = UtbetalingstidslinjeInspektør(this) @@ -47,15 +47,16 @@ class UtbetalingstidslinjeInspektør(private val utbetalingstidslinje: Utbetalin private val økonomi = mutableMapOf() val unikedager = mutableSetOf>() - val size get() = - arbeidsdagTeller + - arbeidsgiverperiodeDagTeller + - avvistDagTeller + - fridagTeller + - navDagTeller + - navHelgDagTeller + - foreldetDagTeller + - ukjentDagTeller + + val size + get() = + arbeidsdagTeller + + arbeidsgiverperiodeDagTeller + + avvistDagTeller + + fridagTeller + + navDagTeller + + navHelgDagTeller + + foreldetDagTeller + + ukjentDagTeller + arbeidsgiverperiodedagNavTeller init { @@ -75,16 +76,19 @@ class UtbetalingstidslinjeInspektør(private val utbetalingstidslinje: Utbetalin arbeidsdager.add(dag) collect(dag, dag.dato, dag.økonomi) } + is ArbeidsgiverperiodeDag -> { arbeidsgiverperiodeDagTeller += 1 arbeidsgiverdager.add(dag) collect(dag, dag.dato, dag.økonomi) } + is ArbeidsgiverperiodedagNav -> { arbeidsgiverperiodedagNavTeller += 1 arbeidsgiverperiodedagerNavAnsvar.add(dag) collect(dag, dag.dato, dag.økonomi) } + is AvvistDag -> { avvistDagTeller += 1 avvistedatoer.add(dag.dato) @@ -92,15 +96,18 @@ class UtbetalingstidslinjeInspektør(private val utbetalingstidslinje: Utbetalin begrunnelser[dag.dato] = dag.begrunnelser collect(dag, dag.dato, dag.økonomi) } + is ForeldetDag -> { foreldetDagTeller += 1 collect(dag, dag.dato, dag.økonomi) } + is Fridag -> { fridagTeller += 1 fridager.add(dag) collect(dag, dag.dato, dag.økonomi) } + is NavDag -> { totalUtbetaling += dag.økonomi.arbeidsgiverbeløp?.dagligInt ?: 0 totalUtbetaling += dag.økonomi.personbeløp?.dagligInt ?: 0 @@ -108,11 +115,13 @@ class UtbetalingstidslinjeInspektør(private val utbetalingstidslinje: Utbetalin navdager.add(dag) collect(dag, dag.dato, dag.økonomi) } + is NavHelgDag -> { navHelgDagTeller += 1 navHelgdager.add(dag) collect(dag, dag.dato, dag.økonomi) } + is UkjentDag -> { ukjentDagTeller += 1 collect(dag, dag.dato, dag.økonomi) diff --git "a/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/inspectors/\303\230konomiInspekt\303\270r.kt" "b/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/inspectors/\303\230konomiInspekt\303\270r.kt" index 601d2b75b4..1737735fc5 100644 --- "a/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/inspectors/\303\230konomiInspekt\303\270r.kt" +++ "b/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/inspectors/\303\230konomiInspekt\303\270r.kt" @@ -16,6 +16,7 @@ private class ØkonomiInspektørBuilder(økonomi: Økonomi) { økonomi.arbeidsgiverbeløp, økonomi.personbeløp ) + fun build() = inspektøren } diff --git a/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/testhelpers/UtbetalingstidslinjerBuilder.kt b/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/testhelpers/UtbetalingstidslinjerBuilder.kt index 181935980b..6154272da0 100644 --- a/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/testhelpers/UtbetalingstidslinjerBuilder.kt +++ b/sykepenger-utbetaling/src/testFixtures/kotlin/no/nav/helse/testhelpers/UtbetalingstidslinjerBuilder.kt @@ -24,7 +24,8 @@ fun tidslinjeOf( skjæringstidspunkter: List = listOf(startDato), `6G`: Inntekt = 561804.årlig ) = Utbetalingstidslinje.Builder().apply { - val finnSkjæringstidspunktFor = { dato: LocalDate -> skjæringstidspunkter.filter { dato >= it }.maxOrNull() ?: dato } + val finnSkjæringstidspunktFor = + { dato: LocalDate -> skjæringstidspunkter.filter { dato >= it }.maxOrNull() ?: dato } utbetalingsdager.fold(startDato) { startDato, (antallDagerFun, utbetalingsdag, helgedag, dekningsgrunnlag, grad, arbeidsgiverbeløp) -> var dato = startDato val antallDager = antallDagerFun(startDato) @@ -57,10 +58,24 @@ fun Int.NAP(dekningsgrunnlag: Int, grad: Number = 100.0) = Utbetalingsdager( ) val Int.NAV get() = this.NAV(1200) -fun Int.NAV(dekningsgrunnlag: Number, grad: Number = 100.0, refusjonsbeløp: Number = dekningsgrunnlag) = NAV({ this }, dekningsgrunnlag.daglig, grad, refusjonsbeløp.daglig) -fun Int.NAV(dekningsgrunnlag: Inntekt, grad: Number = 100.0, refusjonsbeløp: Inntekt = dekningsgrunnlag) = NAV({ this }, dekningsgrunnlag, grad, refusjonsbeløp) - -private fun NAV(antallDager: (LocalDate) -> Int, dekningsgrunnlag: Inntekt, grad: Number = 100.0, refusjonsbeløp: Inntekt = dekningsgrunnlag) = Utbetalingsdager( +fun Int.NAV( + dekningsgrunnlag: Number, + grad: Number = 100.0, + refusjonsbeløp: Number = dekningsgrunnlag +) = NAV({ this }, dekningsgrunnlag.daglig, grad, refusjonsbeløp.daglig) + +fun Int.NAV( + dekningsgrunnlag: Inntekt, + grad: Number = 100.0, + refusjonsbeløp: Inntekt = dekningsgrunnlag +) = NAV({ this }, dekningsgrunnlag, grad, refusjonsbeløp) + +private fun NAV( + antallDager: (LocalDate) -> Int, + dekningsgrunnlag: Inntekt, + grad: Number = 100.0, + refusjonsbeløp: Inntekt = dekningsgrunnlag +) = Utbetalingsdager( antallDager = antallDager, addDagFun = Utbetalingstidslinje.Builder::addNAVdag, addHelgFun = Utbetalingstidslinje.Builder::addHelg, @@ -78,8 +93,17 @@ fun Int.HELG(dekningsgrunnlag: Int, grad: Number = 100.0) = Utbetalingsdager( ) val Int.NAVDAGER get() = this.NAVDAGER(1200) -fun Int.NAVDAGER(dekningsgrunnlag: Number, grad: Number = 100.0, refusjonsbeløp: Number = dekningsgrunnlag) = - NAV({ ChronoUnit.DAYS.between(it, it.plus((this - 1).ukedager).plusDays(1)).toInt() }, dekningsgrunnlag.daglig, grad, refusjonsbeløp.daglig) +fun Int.NAVDAGER( + dekningsgrunnlag: Number, + grad: Number = 100.0, + refusjonsbeløp: Number = dekningsgrunnlag +) = + NAV( + { ChronoUnit.DAYS.between(it, it.plus((this - 1).ukedager).plusDays(1)).toInt() }, + dekningsgrunnlag.daglig, + grad, + refusjonsbeløp.daglig + ) val Int.ARB get() = this.ARB(1200) fun Int.ARB(dekningsgrunnlag: Int) = Utbetalingsdager( @@ -104,17 +128,22 @@ fun Int.FOR(dekningsgrunnlag: Int) = Utbetalingsdager( ) val Int.AVV get() = this.AVV(1200) -fun Int.AVV(dekningsgrunnlag: Int, grad: Number = 0, begrunnelse: Begrunnelse = Begrunnelse.SykepengedagerOppbrukt) = Utbetalingsdager( +fun Int.AVV( + dekningsgrunnlag: Int, + grad: Number = 0, + begrunnelse: Begrunnelse = Begrunnelse.SykepengedagerOppbrukt +) = Utbetalingsdager( antallDager = { this }, addDagFun = { dato, økonomi -> addAvvistDag(dato, økonomi, begrunnelse) }, dekningsgrunnlag = dekningsgrunnlag.daglig, grad = grad ) -val Int.UKJ get() = Utbetalingsdager( - antallDager = { this }, - addDagFun = { dato, _ -> addUkjentDag(dato) } -) +val Int.UKJ + get() = Utbetalingsdager( + antallDager = { this }, + addDagFun = { dato, _ -> addUkjentDag(dato) } + ) val Int.UTELATE get() = Utbetalingsdager( @@ -123,7 +152,11 @@ val Int.UTELATE dekningsgrunnlag = INGEN ) -private fun Utbetalingstidslinje.Builder.addAvvistDag(dato: LocalDate, økonomi: Økonomi, begrunnelse: Begrunnelse) = +private fun Utbetalingstidslinje.Builder.addAvvistDag( + dato: LocalDate, + økonomi: Økonomi, + begrunnelse: Begrunnelse +) = this.addAvvistDag(dato, økonomi, listOf(begrunnelse)) data class Utbetalingsdager( @@ -134,12 +167,13 @@ data class Utbetalingsdager( val grad: Number = 0.0, val arbeidsgiverbeløp: Inntekt = dekningsgrunnlag ) { - fun copyWith(beløp: Number? = null, grad: Number? = null, arbeidsgiverbeløp: Number? = null) = Utbetalingsdager( - antallDager = this.antallDager, - addDagFun = addDagFun, - addHelgFun = addHelgFun, - dekningsgrunnlag = beløp?.daglig ?: this.dekningsgrunnlag, - arbeidsgiverbeløp = arbeidsgiverbeløp?.daglig ?: beløp?.daglig ?: this.dekningsgrunnlag, - grad = grad ?: this.grad - ) + fun copyWith(beløp: Number? = null, grad: Number? = null, arbeidsgiverbeløp: Number? = null) = + Utbetalingsdager( + antallDager = this.antallDager, + addDagFun = addDagFun, + addHelgFun = addHelgFun, + dekningsgrunnlag = beløp?.daglig ?: this.dekningsgrunnlag, + arbeidsgiverbeløp = arbeidsgiverbeløp?.daglig ?: beløp?.daglig ?: this.dekningsgrunnlag, + grad = grad ?: this.grad + ) }