Skip to content

Commit

Permalink
Fiks for VTAO og inntektslinjer (#129)
Browse files Browse the repository at this point in the history

For å unngå feilmelding når en VTAO-avtale godkjennes,
må vi gjøre en endring i backend som sjekker om man faktisk
må ta stilling til inntekter før man sjekker om det er blitt tatt
stilling til.

Foreløpig er det bare for VTAO-avtaler at man ikke må ta stilling
til inntekter, så sjekken er foreløpig ganske enkel.

Setter også opp litt VTAO-testdata

---------

Co-authored-by: MagnusRom <[email protected]>
Co-authored-by: Odd Andreas Sørsæther <[email protected]>
  • Loading branch information
3 people authored Oct 2, 2024
1 parent 27c74b8 commit 2778bb6
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,13 @@ class Korreksjon(
var besluttetTidspunkt: Instant? = null

@JsonProperty
fun harTattStillingTilAlleInntektslinjer(): Boolean = refusjonsgrunnlag.inntektsgrunnlag?.inntekter?.filter { it.erMedIInntektsgrunnlag() }?.find { inntekt -> inntekt.erOpptjentIPeriode === null } === null
fun harTattStillingTilAlleInntektslinjer(): Boolean =
refusjonsgrunnlag.inntektsgrunnlag?.inntekter?.filter { it.erMedIInntektsgrunnlag() }
?.find { inntekt -> inntekt.erOpptjentIPeriode == null } == null

@JsonProperty
fun måTaStillingTilInntekter(): Boolean =
refusjonsgrunnlag.tilskuddsgrunnlag.tiltakstype != Tiltakstype.VTAO

override fun getFnrOgBedrift(): FnrOgBedrift = FnrOgBedrift(deltakerFnr, bedriftNr)

Expand Down Expand Up @@ -130,7 +136,7 @@ class Korreksjon(
if (kostnadssted.isBlank()) {
throw FeilkodeException(Feilkode.KOSTNADSSTED_MANGLER)
}
if (!this.harTattStillingTilAlleInntektslinjer()) {
if (this.måTaStillingTilInntekter() && !this.harTattStillingTilAlleInntektslinjer()) {
throw FeilkodeException(Feilkode.IKKE_TATT_STILLING_TIL_ALLE_INNTEKTSLINJER)
}

Expand All @@ -150,7 +156,7 @@ class Korreksjon(
if (refusjonsbeløp == null || refusjonsbeløp != 0) {
throw FeilkodeException(Feilkode.KORREKSJONSBELOP_IKKE_NULL)
}
if (!this.harTattStillingTilAlleInntektslinjer()) {
if (this.måTaStillingTilInntekter() && !this.harTattStillingTilAlleInntektslinjer()) {
throw FeilkodeException(Feilkode.IKKE_TATT_STILLING_TIL_ALLE_INNTEKTSLINJER)
}
this.godkjentTidspunkt = Now.instant()
Expand All @@ -166,7 +172,7 @@ class Korreksjon(
if (refusjonsbeløp == null || refusjonsbeløp >= 0) {
throw FeilkodeException(Feilkode.KORREKSJONSBELOP_POSITIVT)
}
if (!this.harTattStillingTilAlleInntektslinjer()) {
if (this.måTaStillingTilInntekter() && !this.harTattStillingTilAlleInntektslinjer()) {
throw FeilkodeException(Feilkode.IKKE_TATT_STILLING_TIL_ALLE_INNTEKTSLINJER)
}
this.godkjentTidspunkt = Now.instant()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,13 @@ class Refusjon(
}

@JsonProperty
fun harTattStillingTilAlleInntektslinjer(): Boolean {
val harTattStilling = refusjonsgrunnlag.inntektsgrunnlag?.inntekter?.filter { it.erMedIInntektsgrunnlag() }?.find { inntekt -> inntekt.erOpptjentIPeriode == null }
return harTattStilling == null
}
fun harTattStillingTilAlleInntektslinjer(): Boolean =
refusjonsgrunnlag.inntektsgrunnlag?.inntekter?.filter { it.erMedIInntektsgrunnlag() }
?.find { inntekt -> inntekt.erOpptjentIPeriode == null } == null

@JsonProperty
fun måTaStillingTilInntekter(): Boolean =
refusjonsgrunnlag.tilskuddsgrunnlag.tiltakstype != Tiltakstype.VTAO

private fun krevStatus(vararg gyldigeStatuser: RefusjonStatus) {
if (status !in gyldigeStatuser) throw FeilkodeException(Feilkode.UGYLDIG_STATUS)
Expand Down Expand Up @@ -162,7 +165,7 @@ class Refusjon(
if (refusjonsgrunnlag.bedriftKontonummer == null) {
throw FeilkodeException(Feilkode.INGEN_BEDRIFTKONTONUMMER)
}
if (!this.harTattStillingTilAlleInntektslinjer()) {
if (this.måTaStillingTilInntekter() && !this.harTattStillingTilAlleInntektslinjer()) {
throw FeilkodeException(Feilkode.IKKE_TATT_STILLING_TIL_ALLE_INNTEKTSLINJER)
}
if (refusjonsgrunnlag.beregning == null) {
Expand Down
113 changes: 111 additions & 2 deletions src/test/kotlin/no/nav/arbeidsgiver/tiltakrefusjon/TestData.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
package no.nav.arbeidsgiver.tiltakrefusjon

import no.nav.arbeidsgiver.tiltakrefusjon.autorisering.InnloggetBruker
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.*
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.BrukerRolle
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Inntektsgrunnlag
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Inntektslinje
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Refusjon
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.RefusjonStatus
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Tilskuddsgrunnlag
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Tiltakstype
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.beregnRefusjonsbeløp
import no.nav.arbeidsgiver.tiltakrefusjon.utils.Now
import no.nav.arbeidsgiver.tiltakrefusjon.utils.ulid
import no.nav.arbeidsgiver.tiltakrefusjon.varsling.VarselType
import no.nav.arbeidsgiver.tiltakrefusjon.varsling.Varsling
import java.time.YearMonth
import java.time.ZoneId
import java.time.temporal.TemporalAdjusters.firstDayOfMonth
import java.time.temporal.TemporalAdjusters.lastDayOfMonth
import java.util.UUID
import java.util.*

val innloggetTestbruker = innloggetBruker("testsystem", BrukerRolle.SYSTEM)

Expand Down Expand Up @@ -449,6 +458,9 @@ fun refusjoner(): List<Refusjon> {
`Amalie Skram`(),
`Suzanna Hansen`(),
`Siri Hansen`(),
`Vidar Fortidlig`(),
`Vidar SendKrav`(),
`Vidar Utbetalt`(),
`Camilla Collett`(),
`Snorre Sturlason`(),
`Sigrid Undset`(),
Expand Down Expand Up @@ -767,6 +779,103 @@ fun `Siri Hansen`(): Refusjon {
return refusjon
}

fun `Vidar Fortidlig`(): Refusjon {
val deltakerFnr = "23119409195"
val bedriftNr = "999999999"
val refusjon = Refusjon(
tilskuddsgrunnlag = etTilskuddsgrunnlag().copy(
avtaleId = UUID.randomUUID().toString(),
avtaleNr = 4414,
tilskuddsperiodeId = UUID.randomUUID().toString(),
tiltakstype = Tiltakstype.VTAO,
deltakerFornavn = "Vidar",
deltakerEtternavn = "Olsen",
deltakerFnr = deltakerFnr,
bedriftNr = bedriftNr,
tilskuddsbeløp = 6808,
veilederNavIdent = "X123456",
avtaleFom = Now.localDate().minusMonths(3).withDayOfMonth(1),
avtaleTom = Now.localDate().plusYears(2).withDayOfMonth(1),
), bedriftNr = bedriftNr, deltakerFnr = deltakerFnr,
)

refusjon.let {
it.medBedriftKontonummer()
it.status = RefusjonStatus.FOR_TIDLIG
}

return refusjon
}

fun `Vidar SendKrav`(): Refusjon {
val deltakerFnr = "23119409195"
val bedriftNr = "999999999"
val refusjon = Refusjon(
tilskuddsgrunnlag = etTilskuddsgrunnlag().copy(
avtaleId = UUID.randomUUID().toString(),
avtaleNr = 4414,
tilskuddsperiodeId = UUID.randomUUID().toString(),
tiltakstype = Tiltakstype.VTAO,
deltakerFornavn = "Vidar",
deltakerEtternavn = "Olsen",
deltakerFnr = deltakerFnr,
bedriftNr = bedriftNr,
tilskuddsbeløp = 6808,
veilederNavIdent = "X123456",
avtaleFom = Now.localDate().minusMonths(3).withDayOfMonth(1),
avtaleTom = Now.localDate().plusYears(2).withDayOfMonth(1),
), bedriftNr = bedriftNr, deltakerFnr = deltakerFnr
)

refusjon.let {
it.medBedriftKontonummer()
it.status = RefusjonStatus.SENDT_KRAV
it.godkjentAvArbeidsgiver = Now.localDate()
.with(firstDayOfMonth())
.atStartOfDay(ZoneId.of("Europe/Oslo"))
.toInstant()
}

return refusjon
}

fun `Vidar Utbetalt`(): Refusjon {
val deltakerFnr = "23119409195"
val bedriftNr = "999999999"
val refusjon = Refusjon(
tilskuddsgrunnlag = etTilskuddsgrunnlag().copy(
avtaleId = UUID.randomUUID().toString(),
avtaleNr = 4414,
tilskuddsperiodeId = UUID.randomUUID().toString(),
tiltakstype = Tiltakstype.VTAO,
deltakerFornavn = "Vidar",
deltakerEtternavn = "Olsen",
deltakerFnr = deltakerFnr,
bedriftNr = bedriftNr,
tilskuddsbeløp = 6808,
veilederNavIdent = "X123456",
avtaleFom = Now.localDate().minusMonths(3).withDayOfMonth(1),
avtaleTom = Now.localDate().plusYears(2).withDayOfMonth(1),
), bedriftNr = bedriftNr, deltakerFnr = deltakerFnr
)

refusjon.let {
it.medBedriftKontonummer()
it.status = RefusjonStatus.UTBETALT
it.godkjentAvArbeidsgiver = Now.localDate()
.with(firstDayOfMonth())
.atStartOfDay(ZoneId.of("Europe/Oslo"))
.toInstant()
it.utbetaltTidspunkt = Now.localDate()
.with(firstDayOfMonth())
.plusDays(2)
.atStartOfDay(ZoneId.of("Europe/Oslo"))
.toInstant()
}

return refusjon
}

fun dodsfallUnderTiltakRefusjon():Refusjon{
val deltakerFnrMedMasseUtbetalt = "30038738743"
val bedriftNr = "999999999"
Expand Down

0 comments on commit 2778bb6

Please sign in to comment.