Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Legg til inntekt endring aarsak #540

Merged
merged 7 commits into from
Dec 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,6 @@ dependencies {
runtimeOnly("ch.qos.logback:logback-classic:$logbackClassicVersion")
runtimeOnly("io.micrometer:micrometer-registry-prometheus:$micrometerVersion")

implementation("org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion")
implementation("org.junit.jupiter:junit-jupiter-engine:$junitJupiterVersion")
implementation("no.nav.teamdokumenthandtering:teamdokumenthandtering-avro-schemas:$joarkHendelseVersion")
implementation("org.jetbrains.kotlin:$jetbrainsStdLib")
implementation("com.google.guava:guava:$guavaVersion")
Expand Down Expand Up @@ -201,6 +199,9 @@ dependencies {
implementation("no.nav.helsearbeidsgiver:domene-inntektsmelding:$hagDomeneInntektsmeldingVersion")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxSerializationVersion")

testImplementation("org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion")
testImplementation("org.junit.jupiter:junit-jupiter-engine:$junitJupiterVersion")
testImplementation("org.junit.jupiter:junit-jupiter-params:$junitJupiterVersion")
testImplementation(testFixtures("no.nav.helsearbeidsgiver:utils:$hagUtilsVersion"))
testImplementation("io.insert-koin:koin-test:$koinVersion")
testImplementation("io.ktor:ktor-client-mock-jvm:$ktorVersion")
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ guavaVersion=31.0.1-jre
kotlinLibsVersion=kotlin-stdlib-jdk8
postgresVersion=42.3.1
neethiVersion=3.2.0
imkontraktVersion=2023.10.13-04-47-c372d
imkontraktVersion=2023.12.13-04-13-2ca03
altinnInntektsmeldingVersion=1.2021.02.22-10.45-4201aaea72fb
navSyfoCommonVersion=2019.09.25-05-44-08e26429f4e37cd57d99ba4d39fc74099a078b97
vaultJdbcVersion=1.3.7
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
package no.nav.syfo.domain.inntektsmelding

import no.nav.syfo.domain.Periode
import java.time.LocalDate

/**
* Basert på Inntekt fra Simba
* @see no.nav.helsearbeidsgiver.domene.inntektsmelding.Inntekt

**/

data class RapportertInntekt(
val bekreftet: Boolean,
val beregnetInntekt: Double,
val endringAarsak: String? = null,
val endringAarsakData: SpinnInntektEndringAarsak? = null,
val manueltKorrigert: Boolean,
)
data class SpinnInntektEndringAarsak(
val aarsak: String,
val perioder: List<Periode>? = null,
val gjelderFra: LocalDate? = null,
val bleKjent: LocalDate? = null
)
13 changes: 12 additions & 1 deletion src/main/kotlin/no/nav/syfo/mapping/InntektsmeldingMapper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import no.nav.inntektsmeldingkontrakt.Arbeidsgivertype
import no.nav.inntektsmeldingkontrakt.AvsenderSystem
import no.nav.inntektsmeldingkontrakt.EndringIRefusjon
import no.nav.inntektsmeldingkontrakt.GjenopptakelseNaturalytelse
import no.nav.inntektsmeldingkontrakt.InntektEndringAarsak
import no.nav.inntektsmeldingkontrakt.Naturalytelse
import no.nav.inntektsmeldingkontrakt.OpphoerAvNaturalytelse
import no.nav.inntektsmeldingkontrakt.Periode
import no.nav.inntektsmeldingkontrakt.Refusjon
import no.nav.inntektsmeldingkontrakt.Status
import no.nav.syfo.domain.inntektsmelding.Gyldighetsstatus
import no.nav.syfo.domain.inntektsmelding.Inntektsmelding
import no.nav.syfo.domain.inntektsmelding.SpinnInntektEndringAarsak

fun mapInntektsmeldingKontrakt(
inntektsmelding: Inntektsmelding,
Expand Down Expand Up @@ -45,10 +47,19 @@ fun mapInntektsmeldingKontrakt(
innsenderFulltNavn = inntektsmelding.kontaktinformasjon.navn.orEmpty(),
innsenderTelefon = inntektsmelding.kontaktinformasjon.telefon.orEmpty(),
naerRelasjon = inntektsmelding.nærRelasjon,
avsenderSystem = mapAvsenderSystem(inntektsmelding.avsenderSystem)
avsenderSystem = mapAvsenderSystem(inntektsmelding.avsenderSystem),
inntektEndringAarsak = inntektsmelding.rapportertInntekt?.endringAarsakData?.tilInntektEndringAarsak()
)
}

fun SpinnInntektEndringAarsak.tilInntektEndringAarsak(): InntektEndringAarsak =
InntektEndringAarsak(
aarsak = aarsak,
perioder = perioder?.map { Periode(it.fom, it.tom) },
gjelderFra = gjelderFra,
bleKjent = bleKjent
)

fun mapFerieperioder(inntektsmelding: Inntektsmelding): List<Periode> {
return inntektsmelding.feriePerioder.map { p -> Periode(p.fom, p.tom) }
}
Expand Down
31 changes: 18 additions & 13 deletions src/main/kotlin/no/nav/syfo/simba/MapInntektsmelding.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import no.nav.syfo.domain.inntektsmelding.Naturalytelse
import no.nav.syfo.domain.inntektsmelding.OpphoerAvNaturalytelse
import no.nav.syfo.domain.inntektsmelding.RapportertInntekt
import no.nav.syfo.domain.inntektsmelding.Refusjon
import no.nav.syfo.domain.inntektsmelding.SpinnInntektEndringAarsak
import java.time.LocalDateTime
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Inntektsmelding as InntektmeldingSimba

Expand Down Expand Up @@ -76,22 +77,26 @@ fun Inntekt.tilRapportertInntekt() =
bekreftet = this.bekreftet,
beregnetInntekt = this.beregnetInntekt,
endringAarsak = this.endringÅrsak?.aarsak(),
endringAarsakData = this.endringÅrsak?.tilSpinnInntektEndringAarsak(),
manueltKorrigert = this.manueltKorrigert
)

fun InntektEndringAarsak.aarsak(): String =
this.tilSpinnInntektEndringAarsak()?.aarsak ?: this::class.simpleName ?: "Ukjent"

fun InntektEndringAarsak.tilSpinnInntektEndringAarsak(): SpinnInntektEndringAarsak? =
when (this) {
is Permisjon -> "Permisjon"
is Ferie -> "Ferie"
is Ferietrekk -> "Ferietrekk"
is Permittering -> "Permittering"
is Tariffendring -> "Tariffendring"
is VarigLonnsendring -> "VarigLonnsendring"
is NyStilling -> "NyStilling"
is NyStillingsprosent -> "NyStillingsprosent"
is Bonus -> "Bonus"
is Sykefravaer -> "Sykefravaer"
is Nyansatt -> "Nyansatt"
is Feilregistrert -> "Feilregistrert"
else -> this::class.simpleName ?: "Ukjent"
is Permisjon -> SpinnInntektEndringAarsak(aarsak = "Permisjon", perioder = liste.map { Periode(it.fom, it.tom) })
is Ferie -> SpinnInntektEndringAarsak(aarsak = "Ferie", perioder = liste.map { Periode(it.fom, it.tom) })
is Ferietrekk -> SpinnInntektEndringAarsak(aarsak = "Ferietrekk")
is Permittering -> SpinnInntektEndringAarsak(aarsak = "Permittering", perioder = liste.map { Periode(it.fom, it.tom) })
is Tariffendring -> SpinnInntektEndringAarsak("Tariffendring", gjelderFra = gjelderFra, bleKjent = bleKjent)
is VarigLonnsendring -> SpinnInntektEndringAarsak("VarigLonnsendring", gjelderFra = gjelderFra)
is NyStilling -> SpinnInntektEndringAarsak(aarsak = "NyStilling", gjelderFra = gjelderFra)
is NyStillingsprosent -> SpinnInntektEndringAarsak(aarsak = "NyStillingsprosent", gjelderFra = gjelderFra)
is Bonus -> SpinnInntektEndringAarsak(aarsak = "Bonus")
is Sykefravaer -> SpinnInntektEndringAarsak(aarsak = "Sykefravaer", perioder = liste.map { Periode(it.fom, it.tom) })
is Nyansatt -> SpinnInntektEndringAarsak(aarsak = "Nyansatt")
is Feilregistrert -> SpinnInntektEndringAarsak(aarsak = "Feilregistrert")
else -> null
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package no.nav.syfo.mapping

import no.nav.helsearbeidsgiver.domene.inntektsmelding.BegrunnelseIngenEllerRedusertUtbetalingKode
import no.nav.syfo.domain.Periode
import no.nav.syfo.domain.inntektsmelding.Gyldighetsstatus
import no.nav.syfo.domain.inntektsmelding.Kontaktinformasjon
import no.nav.syfo.domain.inntektsmelding.RapportertInntekt
import no.nav.syfo.domain.inntektsmelding.SpinnInntektEndringAarsak
import no.nav.syfo.grunnleggendeInntektsmelding
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNull
import org.junit.jupiter.api.Test
import java.math.BigDecimal
import java.time.LocalDate
import java.util.UUID

class InntektsmeldingMapperFraInternSyfoTilHAGKontraktTest {
Expand All @@ -34,7 +38,18 @@ class InntektsmeldingMapperFraInternSyfoTilHAGKontraktTest {
val syfoInternInntektsmelding = grunnleggendeInntektsmelding.copy(
bruttoUtbetalt = bruttoUtbetalt,
begrunnelseRedusert = begrunnelse,
kontaktinformasjon = Kontaktinformasjon(navn = innsenderNavn, telefon = innsenderTelefon)
kontaktinformasjon = Kontaktinformasjon(navn = innsenderNavn, telefon = innsenderTelefon),
avsenderSystem = no.nav.syfo.domain.inntektsmelding.AvsenderSystem("NAV_NO", "1.0"),
rapportertInntekt = RapportertInntekt(
bekreftet = true,
beregnetInntekt = 39013.0,
endringAarsak = "Ferie",
endringAarsakData = SpinnInntektEndringAarsak(
aarsak = "Ferie",
perioder = listOf(Periode(LocalDate.of(2021, 1, 1), LocalDate.of(2021, 1, 31))),
),
manueltKorrigert = true
)
)
val inntektsmelding = mapInntektsmeldingKontrakt(
syfoInternInntektsmelding,
Expand All @@ -47,5 +62,9 @@ class InntektsmeldingMapperFraInternSyfoTilHAGKontraktTest {
assertEquals(begrunnelse, inntektsmelding.begrunnelseForReduksjonEllerIkkeUtbetalt)
assertEquals(innsenderNavn, inntektsmelding.innsenderFulltNavn)
assertEquals(innsenderTelefon, inntektsmelding.innsenderTelefon)
assertEquals("Ferie", inntektsmelding.inntektEndringAarsak?.aarsak)
assertEquals(1, inntektsmelding.inntektEndringAarsak?.perioder?.size)
assertNull(inntektsmelding.inntektEndringAarsak?.gjelderFra)
assertNull(inntektsmelding.inntektEndringAarsak?.bleKjent)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package no.nav.syfo.simba

import no.nav.helsearbeidsgiver.domene.inntektsmelding.Bonus
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Feilregistrert
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Ferie
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Ferietrekk
import no.nav.helsearbeidsgiver.domene.inntektsmelding.InntektEndringAarsak
import no.nav.helsearbeidsgiver.domene.inntektsmelding.NyStilling
import no.nav.helsearbeidsgiver.domene.inntektsmelding.NyStillingsprosent
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Nyansatt
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Periode
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Permisjon
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Permittering
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Sykefravaer
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Tariffendring
import no.nav.helsearbeidsgiver.domene.inntektsmelding.VarigLonnsendring
import no.nav.syfo.domain.inntektsmelding.SpinnInntektEndringAarsak
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.MethodSource
import java.time.LocalDate

class MapInntektEndringAarsakFraSimbaTest {

companion object {

// SpinnInntektEndringAarsak som tilsvarer InntektEndringAarsak
@JvmStatic
fun inntektEndringerProvider() =
listOf(
Pair(Mock.spinnInntektEndringAarsak, Bonus()),
Pair(Mock.spinnInntektEndringAarsak.copy(aarsak = "Feilregistrert"), Feilregistrert),
Pair(Mock.spinnInntektEndringAarsak.copy(aarsak = "Ferie", perioder = listOf(Mock.spinnPeriode)), Ferie(liste = listOf(Mock.periode))),
Pair(Mock.spinnInntektEndringAarsak.copy(aarsak = "Ferietrekk"), Ferietrekk),
Pair(Mock.spinnInntektEndringAarsak.copy(aarsak = "Nyansatt"), Nyansatt),
Pair(Mock.spinnInntektEndringAarsak.copy(aarsak = "NyStilling", gjelderFra = Mock.gjelderFra), NyStilling(gjelderFra = Mock.gjelderFra)),
Pair(Mock.spinnInntektEndringAarsak.copy(aarsak = "NyStillingsprosent", gjelderFra = Mock.gjelderFra), NyStillingsprosent(gjelderFra = Mock.gjelderFra)),
Pair(Mock.spinnInntektEndringAarsak.copy(aarsak = "Permisjon", perioder = listOf(Mock.spinnPeriode)), Permisjon(liste = listOf(Mock.periode))),
Pair(Mock.spinnInntektEndringAarsak.copy(aarsak = "Permittering", perioder = listOf(Mock.spinnPeriode)), Permittering(liste = listOf(Mock.periode))),
Pair(Mock.spinnInntektEndringAarsak.copy(aarsak = "Sykefravaer", perioder = listOf(Mock.spinnPeriode)), Sykefravaer(liste = listOf(Mock.periode))),
Pair(Mock.spinnInntektEndringAarsak.copy(aarsak = "Tariffendring", gjelderFra = Mock.gjelderFra, bleKjent = Mock.bleKjent), Tariffendring(gjelderFra = Mock.gjelderFra, bleKjent = Mock.bleKjent)),
Pair(Mock.spinnInntektEndringAarsak.copy(aarsak = "VarigLonnsendring", gjelderFra = Mock.gjelderFra), VarigLonnsendring(gjelderFra = Mock.gjelderFra)),
)
}

object Mock {
val periode = Periode(
LocalDate.of(2021, 1, 1),
LocalDate.of(2021, 1, 30)
)
val spinnPeriode = no.nav.syfo.domain.Periode(
fom = periode.fom,
tom = periode.tom
)
val gjelderFra = LocalDate.of(2021, 1, 1)
val bleKjent = LocalDate.of(2021, 5, 1)
val spinnInntektEndringAarsak = SpinnInntektEndringAarsak(aarsak = "Bonus")
}
@ParameterizedTest
@MethodSource("inntektEndringerProvider")
fun `InntektEndringAarsak mappes til riktig SpinnInntektEndringAarsak`(pair: Pair<SpinnInntektEndringAarsak, InntektEndringAarsak>) {
val (spinnInntektEndringAarsak, inntektEndringAarsak) = pair
assertEquals(spinnInntektEndringAarsak, inntektEndringAarsak.tilSpinnInntektEndringAarsak())
}

@Test
fun oversettInntektEndringAarsakTilRapportertInntektEndringAarsak() {
assertEquals("Permisjon", Permisjon(emptyList()).aarsak())
assertEquals("Ferie", Ferie(emptyList()).aarsak())
assertEquals("Ferietrekk", Ferietrekk.aarsak())
assertEquals("Permittering", Permittering(emptyList()).aarsak())
assertEquals("Tariffendring", Tariffendring(LocalDate.now(), LocalDate.now()).aarsak())
assertEquals("VarigLonnsendring", VarigLonnsendring(LocalDate.now()).aarsak())
assertEquals("NyStilling", NyStilling(LocalDate.now()).aarsak())
assertEquals("NyStillingsprosent", NyStillingsprosent(LocalDate.now()).aarsak())
assertEquals("Bonus", Bonus().aarsak())
assertEquals("Sykefravaer", Sykefravaer(emptyList()).aarsak())
assertEquals("Nyansatt", Nyansatt.aarsak())
assertEquals("Feilregistrert", Feilregistrert.aarsak())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,21 @@ package no.nav.syfo.simba
import no.nav.helsearbeidsgiver.domene.inntektsmelding.AarsakInnsending
import no.nav.helsearbeidsgiver.domene.inntektsmelding.BegrunnelseIngenEllerRedusertUtbetalingKode
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Bonus
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Feilregistrert
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Ferie
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Ferietrekk
import no.nav.helsearbeidsgiver.domene.inntektsmelding.FullLoennIArbeidsgiverPerioden
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Inntekt
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Inntektsmelding
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Naturalytelse
import no.nav.helsearbeidsgiver.domene.inntektsmelding.NaturalytelseKode
import no.nav.helsearbeidsgiver.domene.inntektsmelding.NyStilling
import no.nav.helsearbeidsgiver.domene.inntektsmelding.NyStillingsprosent
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Nyansatt
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Periode
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Permisjon
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Permittering
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Refusjon
import no.nav.helsearbeidsgiver.domene.inntektsmelding.RefusjonEndring
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Sykefravaer
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Tariffendring
import no.nav.helsearbeidsgiver.domene.inntektsmelding.VarigLonnsendring
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNull
import org.junit.jupiter.api.Test
import java.time.LocalDate
import java.time.OffsetDateTime

class MapInntektsmeldingFraSimbaTest {

@Test
fun mapInntektsmeldingMedNaturalytelser() {
val naturalytelser = NaturalytelseKode.entries.map { Naturalytelse(it, LocalDate.now(), 1.0) }
Expand Down Expand Up @@ -80,35 +68,16 @@ class MapInntektsmeldingFraSimbaTest {

@Test
fun mapInntektEndringAArsak() {
val im = mapInntektsmelding("1", "2", "3", lagInntektsmelding().copy(inntekt = lagInntekt()))
val im = mapInntektsmelding("1", "2", "3", lagInntektsmelding().copy(inntekt = Mock.inntektEndringBonus))
assertEquals("", im.begrunnelseRedusert)
assertNull(im.bruttoUtbetalt)
assertEquals("Bonus", im.rapportertInntekt?.endringAarsak)
assertEquals("Bonus", im.rapportertInntekt?.endringAarsakData?.aarsak)
assertNull(im.rapportertInntekt?.endringAarsakData?.perioder)
assertNull(im.rapportertInntekt?.endringAarsakData?.gjelderFra)
assertNull(im.rapportertInntekt?.endringAarsakData?.bleKjent)
}

@Test
fun oversettInntektEndringAarsakTilRapportertInntektEndringAarsak() {
assertEquals("Permisjon", Permisjon(emptyList()).aarsak())
assertEquals("Ferie", Ferie(emptyList()).aarsak())
assertEquals("Ferietrekk", Ferietrekk.aarsak())
assertEquals("Permittering", Permittering(emptyList()).aarsak())
assertEquals("Tariffendring", Tariffendring(LocalDate.now(), LocalDate.now()).aarsak())
assertEquals("VarigLonnsendring", VarigLonnsendring(LocalDate.now()).aarsak())
assertEquals("NyStilling", NyStilling(LocalDate.now()).aarsak())
assertEquals("NyStillingsprosent", NyStillingsprosent(LocalDate.now()).aarsak())
assertEquals("Bonus", Bonus().aarsak())
assertEquals("Sykefravaer", Sykefravaer(emptyList()).aarsak())
assertEquals("Nyansatt", Nyansatt.aarsak())
assertEquals("Feilregistrert", Feilregistrert.aarsak())
}

private fun lagInntekt() = Inntekt(
bekreftet = true,
beregnetInntekt = 100_000.0,
endringÅrsak = Bonus(),
manueltKorrigert = false
)

private fun lagInntektsmelding(): Inntektsmelding {
val dato1 = LocalDate.now().minusDays(7)
val dato2 = LocalDate.now().minusDays(5)
Expand Down Expand Up @@ -140,4 +109,15 @@ class MapInntektsmeldingFraSimbaTest {
)
return imFraSimba
}
object Mock {
val bonus = Bonus()
val forslagInntekt = 50_000.0
val endretInntekt = 60_000.0
val inntektUtenEndring = Inntekt(
bekreftet = true,
beregnetInntekt = forslagInntekt,
manueltKorrigert = false
)
val inntektEndringBonus = inntektUtenEndring.copy(beregnetInntekt = endretInntekt, endringÅrsak = bonus, manueltKorrigert = true)
}
}
Loading