diff --git a/README.md b/README.md index 4ec2676..dffdc56 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,9 @@ ![Build and deploy](https://github.com/navikt/dagpenger-events/workflows/Build%20and%20deploy/badge.svg) -[![](https://jitpack.io/v/navikt/dagpenger-events.svg)](https://jitpack.io/#navikt/dagpenger-events) - # Event -Holder definisjonen av dagpenger inntekt (brukt av [dp-inntekt](https://github.com/navikt/dp-inntekt) og 'packet'. -Packet er dagpengers gamle svar på JsonMessage på [Rapid and rivers](https://github.com/navikt/rapids-and-rivers). Brukes stort sett bare av [dp-regel*](https://github.com/navikt/dp-regel-api) riggen. +Holder definisjonen av dagpenger 'packet'. Packet er dagpengers gamle svar på JsonMessage på [Rapid and rivers](https://github.com/navikt/rapids-and-rivers). Brukes stort sett bare av [dp-regel*](https://github.com/navikt/dp-regel-api) riggen. + diff --git a/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/Inntekt.kt b/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/Inntekt.kt deleted file mode 100644 index 2ada52f..0000000 --- a/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/Inntekt.kt +++ /dev/null @@ -1,46 +0,0 @@ -package no.nav.dagpenger.events.inntekt.v1 - -import java.time.YearMonth - -class Inntekt( - val inntektsId: String, - val inntektsListe: List, - val manueltRedigert: Boolean? = false, - val sisteAvsluttendeKalenderMåned: YearMonth, -) { - - fun splitIntoInntektsPerioder(): InntektsPerioder { - return Triple( - (0L..11L).map { i -> - inntektsListe.find { it.årMåned == sisteAvsluttendeKalenderMåned.minusMonths(i) } - ?: KlassifisertInntektMåned( - sisteAvsluttendeKalenderMåned.minusMonths(i), - emptyList(), - ) - }.sortedBy { it.årMåned }, - (12L..23L).map { i -> - inntektsListe.find { it.årMåned == sisteAvsluttendeKalenderMåned.minusMonths(i) } - ?: KlassifisertInntektMåned( - sisteAvsluttendeKalenderMåned.minusMonths(i), - emptyList(), - ) - }.sortedBy { it.årMåned }, - (24L..35L).map { i -> - inntektsListe.find { it.årMåned == sisteAvsluttendeKalenderMåned.minusMonths(i) } - ?: KlassifisertInntektMåned( - sisteAvsluttendeKalenderMåned.minusMonths(i), - emptyList(), - ) - }.sortedBy { it.årMåned }, - ) - } - - fun filterPeriod(from: YearMonth, to: YearMonth): Inntekt { - if (from.isAfter(to)) throw IllegalArgumentException("Argument from=$from is after argument to=$to") - return Inntekt( - inntektsId, - inntektsListe.filter { it.årMåned !in from..to }, - sisteAvsluttendeKalenderMåned = sisteAvsluttendeKalenderMåned, - ) - } -} diff --git a/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/KlassifisertInntekt.kt b/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/KlassifisertInntekt.kt deleted file mode 100644 index 19e0c2f..0000000 --- a/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/KlassifisertInntekt.kt +++ /dev/null @@ -1,21 +0,0 @@ -package no.nav.dagpenger.events.inntekt.v1 - -import java.math.BigDecimal - -data class KlassifisertInntekt( - val beløp: BigDecimal, - val inntektKlasse: InntektKlasse, -) - -enum class InntektKlasse { - ARBEIDSINNTEKT, - DAGPENGER, - DAGPENGER_FANGST_FISKE, - SYKEPENGER_FANGST_FISKE, - FANGST_FISKE, - SYKEPENGER, - TILTAKSLØNN, - PLEIEPENGER, - OMSORGSPENGER, - OPPLÆRINGSPENGER, -} diff --git "a/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/KlassifisertInntektM\303\245ned.kt" "b/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/KlassifisertInntektM\303\245ned.kt" deleted file mode 100644 index a88a959..0000000 --- "a/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/KlassifisertInntektM\303\245ned.kt" +++ /dev/null @@ -1,22 +0,0 @@ -package no.nav.dagpenger.events.inntekt.v1 - -import java.math.BigDecimal -import java.time.YearMonth - -data class KlassifisertInntektMåned( - val årMåned: YearMonth, - val klassifiserteInntekter: List, - val harAvvik: Boolean? = null, -) - -fun Collection.sumInntekt(inntektsKlasserToSum: List) = - this.flatMap { klassifisertInntektMåned -> - klassifisertInntektMåned.klassifiserteInntekter - .filter { it.inntektKlasse in inntektsKlasserToSum } - .map { it.beløp } - }.fold(BigDecimal.ZERO, BigDecimal::add) - -typealias InntektsPerioder = Triple, List, List> - -fun InntektsPerioder.all() = - this.toList().flatten() diff --git a/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/PosteringsType.kt b/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/PosteringsType.kt deleted file mode 100644 index e9138b1..0000000 --- a/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/PosteringsType.kt +++ /dev/null @@ -1,108 +0,0 @@ -package no.nav.dagpenger.events.inntekt.v1 - -enum class PosteringsType(val beskrivelse: String) { - L_AKSJER_GRUNNFONDSBEVIS_TIL_UNDERKURS("Aksjer/grunnfondsbevis til underkurs"), - L_ANNET("Annen arbeidsinntekt"), - L_ANNET_H("Hyre - Annet"), - L_ANNET_IKKE_SKATTEPLIKTIG("Annen arbeidsinntekt - Ikke skattepliktig"), - L_ANNET_UTLANDET("Annen arbeidsinntekt - Utlandet"), - L_ANNET_KONKURS("Annen arbeidsinntekt - Konkurs"), - L_ANNET_T("Tiltak - Annet"), - L_ARBEIDSOPPHOLD_KOST("Arbeidsopphold kost"), - L_ARBEIDSOPPHOLD_LOSJI("Arbeidsopphold losji"), - L_BEREGNET_SKATT("Beregnet skatt"), - L_BESØKSREISER_HJEMMET_ANNET("Besøksreiser hjemmet annet"), - L_BESØKSREISER_HJEMMET_KILOMETERGODTGJØRELSE_BIL("Besøksreiser hjemmet kilometergodtgjørelse bil"), - L_BETALT_UTENLANDSK_SKATT("Betalt utenlandsk skatt"), - L_BIL("Bil"), - L_BOLIG("Bolig"), - L_BONUS("Bonus"), - L_BONUS_FRA_FORSVARET("Bonus fra forsvaret"), - L_BONUS_H("Hyre - Bonus"), - L_BONUS_T("Tiltak - Bonus"), - L_ELEKTRONISK_KOMMUNIKASJON("Elektronisk kommunikasjon"), - L_FAST_BILGODTGJØRELSE("Fast bilgodtgjørelse"), - L_FAST_TILLEGG("Faste tillegg"), - L_FAST_TILLEGG_H("Hyre - Faste tillegg"), - L_FAST_TILLEGG_T("Tiltak - Faste tillegg"), - L_FASTLØNN("Fastlønn"), - L_FASTLØNN_H("Hyre - Fastlønn"), - L_FASTLØNN_T("Tiltak - Fastlønn"), - L_FERIEPENGER("Feriepenger"), - L_FERIEPENGER_H("Hyre - Feriepenger"), - L_FERIEPENGER_T("Tiltak - Feriepenger"), - L_FOND_FOR_IDRETTSUTØVERE("Fond for idrettsutøvere"), - L_HELLIGDAGSTILLEGG("Helligdagstillegg"), - L_HELLIGDAGSTILLEGG_H("Hyre - Helligdagstillegg"), - L_HELLIGDAGSTILLEGG_T("Tiltak - Helligdagstillegg"), - L_HONORAR_AKKORD_PROSENT_PROVISJON("Honorar, akkord, prosent eller provisjonslønn"), - L_HONORAR_AKKORD_PROSENT_PROVISJON_H("Hyre - Honorar, akkord, prosent eller provisjonslønn"), - L_HYRETILLEGG("Hyretillegg"), - L_IKKE_SKATTEPLIKTIG_LØNN_FRA_UTENLANDSK_DIPLOM_KONSUL_STASJON("Lønn mv som ikke er skattepliktig i Norge fra utenlandsk diplomatisk eller konsulær stasjon"), - L_INNBETALING_TIL_UTENLANDSK_PENSJONSORDNING("Innbetaling til utenlandsk pensjonsordning"), - L_KILOMETERGODTGJØRELSE_BIL("Kilometergodtgjørelse bil"), - L_KOMMUNAL_OMSORGSLØNN_OG_FOSTERHJEMSGODTGJØRELSE("Kommunal omsorgslønn og fosterhjemsgodtgjørelse"), - L_KOST_DAGER("Kost (dager)"), - L_KOST_DØGN("Kost (døgn)"), - L_KOSTBESPARELSE_I_HJEMMET("Kostbesparelse i hjemmet"), - L_LØNN_FOR_BARNEPASS_I_BARNETS_HJEM("Lønn og godtgjørelse til dagmamma eller praktikant som passer barn i barnets hjem"), - L_LØNN_TIL_PRIVATPERSONER_FOR_ARBEID_I_HJEMMET("Lønn og godtgjørelse til privatpersoner for arbeidsoppdrag i oppdragsgivers hjem"), - L_LØNN_TIL_VERGE_FRA_FYLKESMANNEN("Lønn til verge fra Fylkesmannen"), - L_LØNN_TIL_VERGE_FRA_STATSFORVALTEREN("Lønn til verge fra Statsforvalteren"), - L_LØNN_UTBETALT_AV_VELDEDIG_ELLER_ALLMENNYTTIG_INSTITUSJON_ELLER_ORGANISASJON("Lønn og godtgjørelse utbetalt av veldedig eller allmennyttig institusjon eller organisasjon"), - L_LOSJI("Losji"), - L_OPSJONER("Opsjoner"), - L_OVERTIDSGODTGJØRELSE("Overtidsgodtgjørelse"), - L_OVERTIDSGODTGJØRELSE_H("Hyre - Overtidsgodtgjørelse"), - L_OVERTIDSGODTGJØRELSE_T("Tiltak - Overtidsgodtgjørelse"), - L_REISE_ANNET("Reise annet"), - L_REISE_KOST("Reise kost"), - L_REISE_LOSJI("Reise losji"), - L_RENTEFORDEL_LÅN("Rentefordel lån"), - L_SKATTEPLIKTIG_DEL_FORSIKRINGER("Skattepliktig del av visse typer forsikringer"), - L_SKATTEPLIKTIG_PERSONALRABATT("Skattepliktig personalrabatt"), - L_SKATTEPLIKTIG_GODTGJOERELSE_SAERAVTALE_UTLAND("Skattepliktig godtgjørelse særavtale utland"), - L_SLUTTVEDERLAG(" Sluttvederlag"), - L_SLUTTVEDERLAG_H("Hyre - Sluttvederlag"), - L_SLUTTVEDERLAG_T("Tiltak - Sluttvederlag"), - L_SMUSSTILLEGG("Smusstillegg"), - L_STIPEND("Stipend"), - L_STYREHONORAR_OG_GODTGJØRELSE_VERV("Styrehonorar og godtgjørelse i forbindelse med verv"), - L_TIMELØNN("Timelønn"), - L_TIMELØNN_H("Hyre - Timelønn"), - L_TIMELØNN_T("Tiltak - Timelønn"), - L_TIPS("Tips"), - L_TREKK_I_LØNN_FOR_FERIE("Trekk i lønn for ferie"), - L_TREKK_I_LØNN_FOR_FERIE_H("Trekk i lønn for ferie - Hyre"), - L_TREKK_I_LØNN_FOR_FERIE_T("Trekk i lønn for ferie - Tiltak"), - L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_ARBEIDET_TID("Uregelmessige tillegg knyttet til arbeidet tid"), - L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_ARBEIDET_TID_H("Hyre - Uregelmessige tillegg knyttet til arbeidet tid"), - L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_ARBEIDET_TID_T("Tiltak - Uregelmessige tillegg knyttet til arbeidet tid"), - L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_IKKE_ARBEIDET_TID("Uregelmessige tillegg knyttet til ikke-arbeidet tid"), - L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_IKKE_ARBEIDET_TID_H("Hyre - Uregelmessige tillegg knyttet til ikke-arbeidet tid"), - L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_IKKE_ARBEIDET_TID_T("Tiltak - Uregelmessige tillegg knyttet til ikke-arbeidet tid"), - L_YRKEBIL_TJENESTLIGBEHOV_KILOMETER("Yrkebil tjenestligbehov kilometer"), - L_YRKEBIL_TJENESTLIGBEHOV_LISTEPRIS("Yrkebil tjenestligbehov listepris"), - N_DAGPENGER_TIL_FISKER("Dagpenger til fisker"), - N_LOTT_KUN_TRYGDEAVGIFT("Lott det skal beregnes trygdeavgift av"), - N_SYKEPENGER_TIL_FISKER("Sykepenger til fisker"), - N_VEDERLAG("Vederlag lott"), - Y_DAGPENGER_TIL_FISKER_SOM_BARE_HAR_HYRE("Dagpenger til fisker som bare har hyre"), - Y_DAGPENGER_TIL_FISKER_SOM_BARE_HAR_HYRE_FERIETILLEGG("Ferietillegg for dagpenger til fisker som bare har hyre"), - Y_DAGPENGER_VED_ARBEIDSLØSHET("Dagpenger ved arbeidsløshet"), - Y_DAGPENGER_VED_ARBEIDSLØSHET_FERIETILLEGG("Ferietillegg for dagpenger ved arbeidsløshet"), - Y_FORELDREPENGER("Foreldrepenger fra folketrygden"), - Y_FORELDREPENGER_FERIEPENGER("Feriepenger av foreldrepenger fra folketrygden"), - Y_SVANGERSKAPSPENGER("Svangerskapspenger"), - Y_SVANGERSKAPSPENGER_FERIEPENGER("Feriepenger av svangerskapspenger"), - Y_SYKEPENGER("Sykepenger fra folketrygden"), - Y_SYKEPENGER_FERIEPENGER("Feriepenger av sykepenger fra folketrygden"), - Y_SYKEPENGER_TIL_FISKER_SOM_BARE_HAR_HYRE("Sykepenger til fisker som bare har hyre"), - Y_SYKEPENGER_TIL_FISKER_SOM_BARE_HAR_HYRE_FERIEPENGER("Feriepenger av sykepenger til fisker som bare har hyre"), - Y_PLEIEPENGER("Pleiepenger fra folketrygden"), - Y_PLEIEPENGER_FERIEPENGER("Feriepenger av pleiepenger fra folketrygden"), - Y_OMSORGSPENGER("Omsorgspenger fra folketrygden"), - Y_OMSORGSPENGER_FERIEPENGER("Feriepenger av omsorgspenger fra folketrygden"), - Y_OPPLÆRINGSPENGER("Opplæringspenger fra folketrygden"), - Y_OPPLÆRINGSPENGER_FERIEPENGER("Feriepenger av opplæringspenger fra folketrygden"), -} diff --git a/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/SpesifisertInntekt.kt b/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/SpesifisertInntekt.kt deleted file mode 100644 index 7d06c73..0000000 --- a/src/main/kotlin/no/nav/dagpenger/events/inntekt/v1/SpesifisertInntekt.kt +++ /dev/null @@ -1,75 +0,0 @@ -package no.nav.dagpenger.events.inntekt.v1 - -import de.huxhorn.sulky.ulid.ULID -import java.math.BigDecimal -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.YearMonth - -data class SpesifisertInntekt( - val inntektId: InntektId, - val avvik: List, - val posteringer: List, - val sisteAvsluttendeKalenderMåned: YearMonth, - val ident: Aktør, - val manueltRedigert: Boolean, - val timestamp: LocalDateTime, -) - -data class Avvik( - val ident: Aktør, - val opplysningspliktig: Aktør, - val virksomhet: Aktør? = null, - val avvikPeriode: YearMonth, - val tekst: String, -) - -data class Postering( - val posteringsMåned: YearMonth, - val beløp: BigDecimal, - val fordel: String, - val inntektskilde: String, - val inntektsstatus: String, - val inntektsperiodetype: String, - val leveringstidspunkt: YearMonth? = null, - val opptjeningsland: String? = null, - val opptjeningsperiode: Periode? = null, - val skattemessigBosattLand: String? = null, - val utbetaltIMåned: YearMonth, - val opplysningspliktig: Aktør? = null, - val inntektsinnsender: Aktør? = null, - val virksomhet: Aktør? = null, - val inntektsmottaker: Aktør? = null, - val inngårIGrunnlagForTrekk: Boolean? = null, - val utløserArbeidsgiveravgift: Boolean? = null, - val informasjonsstatus: String? = null, - val posteringsType: PosteringsType, -) - -data class InntektId(val id: String) { - init { - try { - ULID.parseULID(id) - } catch (e: IllegalArgumentException) { - throw IllegalInntektIdException("ID $id is not a valid ULID", e) - } - } -} - -data class Periode( - val startDato: LocalDate, - val sluttDato: LocalDate, -) - -data class Aktør( - val aktørType: AktørType, - val identifikator: String, -) - -enum class AktørType { - AKTOER_ID, - NATURLIG_IDENT, - ORGANISASJON, -} - -class IllegalInntektIdException(override val message: String, override val cause: Throwable?) : java.lang.RuntimeException(message, cause) diff --git a/src/test/kotlin/no/nav/dagpenger/events/inntekt/v1/InntektTest.kt b/src/test/kotlin/no/nav/dagpenger/events/inntekt/v1/InntektTest.kt deleted file mode 100644 index 971f3ba..0000000 --- a/src/test/kotlin/no/nav/dagpenger/events/inntekt/v1/InntektTest.kt +++ /dev/null @@ -1,219 +0,0 @@ -package no.nav.dagpenger.events.inntekt.v1 - -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Assertions.assertTrue -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertThrows -import java.math.BigDecimal -import java.time.YearMonth - -class InntektTest { - - private val sisteAvsluttendeKalenderMåned = YearMonth.of(2019, 3) - - val testInntektsListe = (0..38).toList().map { - KlassifisertInntektMåned( - sisteAvsluttendeKalenderMåned.minusMonths(it.toLong()), - listOf( - KlassifisertInntekt( - BigDecimal(1000), - InntektKlasse.ARBEIDSINNTEKT, - ), - KlassifisertInntekt( - BigDecimal(2000), - InntektKlasse.DAGPENGER_FANGST_FISKE, - ), - ), - ) - } - - val testInntekt = Inntekt("id", testInntektsListe, sisteAvsluttendeKalenderMåned = sisteAvsluttendeKalenderMåned) - - @Test - fun `filtering period of last three months affects sum of inntekt`() { - val filteredInntekt = testInntekt.filterPeriod( - sisteAvsluttendeKalenderMåned.minusMonths(2), - sisteAvsluttendeKalenderMåned.minusMonths(0), - ) - assertEquals( - BigDecimal(9000), - filteredInntekt.splitIntoInntektsPerioder().first.sumInntekt(listOf(InntektKlasse.ARBEIDSINNTEKT)), - ) - assertEquals( - BigDecimal(33000), - filteredInntekt.splitIntoInntektsPerioder().all().sumInntekt(listOf(InntektKlasse.ARBEIDSINNTEKT)), - ) - } - - @Test - fun `filtering period not overlapping exisiting months does not affect sum `() { - val filteredInntekt = testInntekt.filterPeriod( - sisteAvsluttendeKalenderMåned.minusMonths(48), - sisteAvsluttendeKalenderMåned.minusMonths(37), - ) - assertEquals( - testInntekt.splitIntoInntektsPerioder().first.sumInntekt(listOf(InntektKlasse.ARBEIDSINNTEKT)), - filteredInntekt.splitIntoInntektsPerioder().first.sumInntekt(listOf(InntektKlasse.ARBEIDSINNTEKT)), - ) - assertEquals( - testInntekt.splitIntoInntektsPerioder().all().sumInntekt(listOf(InntektKlasse.ARBEIDSINNTEKT)), - filteredInntekt.splitIntoInntektsPerioder().all().sumInntekt(listOf(InntektKlasse.ARBEIDSINNTEKT)), - ) - } - - @Test - fun `filter period throws exception if from-argument is more recent than to`() { - assertThrows { - testInntekt.filterPeriod( - YearMonth.of(2019, 5), - YearMonth.of(2019, 4), - ) - } - } - - @Test - fun `inntektsPerioder splits up inntekt correctly`() { - val inntekts_up_to_march_2019 = Inntekt( - "id", - inntektsListe = (0..36).toList().map { - KlassifisertInntektMåned( - sisteAvsluttendeKalenderMåned.minusMonths(it.toLong()), - listOf( - KlassifisertInntekt( - BigDecimal(1000), - InntektKlasse.ARBEIDSINNTEKT, - ), - ), - ) - }, - sisteAvsluttendeKalenderMåned = sisteAvsluttendeKalenderMåned, - ) - - val (first, second, third) = inntekts_up_to_march_2019.splitIntoInntektsPerioder() - - assertEquals(12, first.size) - assertEquals(12, second.size) - assertEquals(12, third.size) - - assertTrue(first.all { it.årMåned in YearMonth.of(2018, 4)..YearMonth.of(2019, 3) }) - assertEquals(YearMonth.of(2019, 3), first.last().årMåned) - assertEquals(YearMonth.of(2018, 4), first.first().årMåned) - - assertTrue(second.all { it.årMåned in YearMonth.of(2017, 4)..YearMonth.of(2018, 3) }) - assertEquals(YearMonth.of(2018, 3), second.last().årMåned) - assertEquals(YearMonth.of(2017, 4), second.first().årMåned) - - assertTrue(third.all { it.årMåned in YearMonth.of(2016, 4)..YearMonth.of(2017, 3) }) - assertEquals(YearMonth.of(2017, 3), third.last().årMåned) - assertEquals(YearMonth.of(2016, 4), third.first().årMåned) - } - - @Test - fun `inntektsPerioder correctly splits up inntekt for only last year`() { - val senesteMåned = YearMonth.of(2019, 3) - val onlyInntektLastYear = Inntekt( - "id", - inntektsListe = (0..11).toList().map { - KlassifisertInntektMåned( - senesteMåned.minusMonths(it.toLong()), - listOf(KlassifisertInntekt(BigDecimal(1000), InntektKlasse.ARBEIDSINNTEKT)), - ) - }, - sisteAvsluttendeKalenderMåned = senesteMåned, - ) - val (first, second, third) = onlyInntektLastYear.splitIntoInntektsPerioder() - - assertEquals(12, first.size) - assertEquals(12, second.size) - assertEquals(12, third.size) - - assertTrue(first.all { it.årMåned in YearMonth.of(2018, 4)..YearMonth.of(2019, 3) }) - assertEquals(YearMonth.of(2019, 3), first.last().årMåned) - assertEquals(YearMonth.of(2018, 4), first.first().årMåned) - - assertTrue(second.all { it.årMåned in YearMonth.of(2017, 4)..YearMonth.of(2018, 3) }) - assertEquals(YearMonth.of(2018, 3), second.last().årMåned) - assertEquals(YearMonth.of(2017, 4), second.first().årMåned) - - assertTrue(third.all { it.årMåned in YearMonth.of(2016, 4)..YearMonth.of(2017, 3) }) - assertEquals(YearMonth.of(2017, 3), third.last().årMåned) - assertEquals(YearMonth.of(2016, 4), third.first().årMåned) - - assertTrue(first.all { it.klassifiserteInntekter.isNotEmpty() }) - assertTrue(second.all { it.klassifiserteInntekter.isEmpty() }) - assertTrue(third.all { it.klassifiserteInntekter.isEmpty() }) - } - - @Test - fun `inntektsPerioder correctly splits up inntekt missing earliest year`() { - val senesteMåned = YearMonth.of(2019, 3) - val noInntektThirdPeriod = Inntekt( - "id", - inntektsListe = (0..23).toList().map { - KlassifisertInntektMåned( - senesteMåned.minusMonths(it.toLong()), - listOf(KlassifisertInntekt(BigDecimal(1000), InntektKlasse.ARBEIDSINNTEKT)), - ) - }, - sisteAvsluttendeKalenderMåned = senesteMåned, - ) - - val (first, second, third) = noInntektThirdPeriod.splitIntoInntektsPerioder() - - assertEquals(12, first.size) - assertEquals(12, second.size) - assertEquals(12, third.size) - - assertTrue(first.all { it.årMåned in YearMonth.of(2018, 4)..YearMonth.of(2019, 3) }) - assertEquals(YearMonth.of(2019, 3), first.last().årMåned) - assertEquals(YearMonth.of(2018, 4), first.first().årMåned) - - assertTrue(second.all { it.årMåned in YearMonth.of(2017, 4)..YearMonth.of(2018, 3) }) - assertEquals(YearMonth.of(2018, 3), second.last().årMåned) - assertEquals(YearMonth.of(2017, 4), second.first().årMåned) - - assertTrue(third.all { it.årMåned in YearMonth.of(2016, 4)..YearMonth.of(2017, 3) }) - assertEquals(YearMonth.of(2017, 3), third.last().årMåned) - assertEquals(YearMonth.of(2016, 4), third.first().årMåned) - - assertTrue(first.all { it.klassifiserteInntekter.isNotEmpty() }) - assertTrue(second.all { it.klassifiserteInntekter.isNotEmpty() }) - assertTrue(third.all { it.klassifiserteInntekter.isEmpty() }) - } - - @Test - fun `inntektsPerioder correctly splits up noncontinous inntekt`() { - val nonContinous = Inntekt( - "id", - inntektsListe = ((0..5).toList() + (10..24).toList()).map { - KlassifisertInntektMåned( - sisteAvsluttendeKalenderMåned.minusMonths(it.toLong()), - listOf(KlassifisertInntekt(BigDecimal(1000), InntektKlasse.ARBEIDSINNTEKT)), - ) - }, - sisteAvsluttendeKalenderMåned = sisteAvsluttendeKalenderMåned, - ) - - val (first, second, third) = nonContinous.splitIntoInntektsPerioder() - - assertEquals(12, first.size) - assertEquals(12, second.size) - assertEquals(12, third.size) - - assertTrue(first.all { it.årMåned in YearMonth.of(2018, 4)..YearMonth.of(2019, 3) }) - assertEquals(YearMonth.of(2019, 3), first.last().årMåned) - assertEquals(YearMonth.of(2018, 4), first.first().årMåned) - - assertTrue(second.all { it.årMåned in YearMonth.of(2017, 4)..YearMonth.of(2018, 3) }) - assertEquals(YearMonth.of(2018, 3), second.last().årMåned) - assertEquals(YearMonth.of(2017, 4), second.first().årMåned) - - assertTrue(third.all { it.årMåned in YearMonth.of(2016, 4)..YearMonth.of(2017, 3) }) - assertEquals(YearMonth.of(2017, 3), third.last().årMåned) - assertEquals(YearMonth.of(2016, 4), third.first().årMåned) - - assertEquals(8, first.filter { it.klassifiserteInntekter.isNotEmpty() }.size) - assertEquals(12, second.filter { it.klassifiserteInntekter.isNotEmpty() }.size) - assertEquals(1, third.filter { it.klassifiserteInntekter.isNotEmpty() }.size) - } -} diff --git "a/src/test/kotlin/no/nav/dagpenger/events/inntekt/v1/KlassifisertInntektM\303\245nedTest.kt" "b/src/test/kotlin/no/nav/dagpenger/events/inntekt/v1/KlassifisertInntektM\303\245nedTest.kt" deleted file mode 100644 index ac402e5..0000000 --- "a/src/test/kotlin/no/nav/dagpenger/events/inntekt/v1/KlassifisertInntektM\303\245nedTest.kt" +++ /dev/null @@ -1,111 +0,0 @@ -package no.nav.dagpenger.events.inntekt.v1 - -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Test -import java.math.BigDecimal -import java.time.YearMonth - -class KlassifisertInntektMånedTest { - - val senesteMåned = YearMonth.of(2019, 3) - - val testInntektsListe = (0..38).toList().map { - KlassifisertInntektMåned( - senesteMåned.minusMonths(it.toLong()), - listOf( - KlassifisertInntekt( - BigDecimal(1000), - InntektKlasse.ARBEIDSINNTEKT, - ), - KlassifisertInntekt( - BigDecimal(2000), - InntektKlasse.DAGPENGER_FANGST_FISKE, - ), - ), - ) - } - - val testInntekt = Inntekt("id", testInntektsListe, sisteAvsluttendeKalenderMåned = senesteMåned) - - @Test - fun `sum with empty list of inntektsklasserToSum returns 0`() { - assertEquals(BigDecimal(0), testInntektsListe.sumInntekt(emptyList())) - } - - @Test - fun `empty inntekt returns 0`() { - assertEquals(BigDecimal(0), emptyList().sumInntekt(InntektKlasse.values().toList())) - } - - @Test - fun ` should sum arbeidsinntekt correctly`() { - assertEquals( - BigDecimal(12000), - testInntekt.splitIntoInntektsPerioder().first.sumInntekt(listOf(InntektKlasse.ARBEIDSINNTEKT)), - ) - - assertEquals( - BigDecimal(36000), - testInntekt.splitIntoInntektsPerioder().all().sumInntekt(listOf(InntektKlasse.ARBEIDSINNTEKT)), - ) - } - - @Test - fun ` should sum dp fangst fiske correctly `() { - assertEquals( - BigDecimal(24000), - testInntekt.splitIntoInntektsPerioder().first.sumInntekt(listOf(InntektKlasse.DAGPENGER_FANGST_FISKE)), - ) - - assertEquals( - BigDecimal(72000), - testInntekt.splitIntoInntektsPerioder().all().sumInntekt(listOf(InntektKlasse.DAGPENGER_FANGST_FISKE)), - ) - } - - @Test - fun ` should sum multiple inntektsklasser`() { - assertEquals( - BigDecimal(36000), - testInntekt.splitIntoInntektsPerioder().first.sumInntekt( - listOf( - InntektKlasse.DAGPENGER_FANGST_FISKE, - InntektKlasse.ARBEIDSINNTEKT, - ), - ), - ) - - assertEquals( - BigDecimal(108000), - testInntekt.splitIntoInntektsPerioder().all().sumInntekt( - listOf( - InntektKlasse.DAGPENGER_FANGST_FISKE, - InntektKlasse.ARBEIDSINNTEKT, - ), - ), - ) - } - - @Test - fun ` should return 0 when no inntekt matches `() { - assertEquals( - BigDecimal(0), - testInntektsListe.sumInntekt(listOf(InntektKlasse.SYKEPENGER)), - ) - } - - @Test - fun `all combines three inntektsperioder correctly`() { - assertEquals(emptyList(), Triple(emptyList(), emptyList(), emptyList()).all()) - - val first = (1..5).toList().map { KlassifisertInntektMåned(senesteMåned, emptyList()) } - val second = (1..7).toList().map { KlassifisertInntektMåned(senesteMåned.minusMonths(2), emptyList()) } - val third = listOf(KlassifisertInntektMåned(senesteMåned.plusMonths(1), emptyList())) - val all = Triple(first, second, third).all() - - assertEquals(13, all.size) - assertEquals(5, all.filter { it.årMåned == senesteMåned }.size) - assertEquals(7, all.filter { it.årMåned == senesteMåned.minusMonths(2) }.size) - assertEquals(1, all.filter { it.årMåned == senesteMåned.plusMonths(1) }.size) - } -}