|
| 1 | +package no.nav.dagpenger.inntekt.klassifiserer |
| 2 | + |
| 3 | +import no.nav.dagpenger.events.inntekt.v1.InntektKlasse |
| 4 | +import no.nav.dagpenger.events.inntekt.v1.Postering |
| 5 | +import no.nav.dagpenger.events.inntekt.v1.PosteringsType |
| 6 | + |
| 7 | +internal data class KlassifisertPostering(val postering: Postering, val inntektKlasse: InntektKlasse) |
| 8 | + |
| 9 | +internal fun klassifiserPosteringer(posteringer: List<Postering>): List<KlassifisertPostering> { |
| 10 | + return posteringer.map { KlassifisertPostering(it, klassifiserPosteringsType(it.posteringsType)) } |
| 11 | +} |
| 12 | + |
| 13 | +private fun klassifiserPosteringsType(posteringsType: PosteringsType): InntektKlasse { |
| 14 | + return when { |
| 15 | + isArbeidsInntekt(posteringsType) -> InntektKlasse.ARBEIDSINNTEKT |
| 16 | + isFangstFiske(posteringsType) -> InntektKlasse.FANGST_FISKE |
| 17 | + isDagpenger(posteringsType) -> InntektKlasse.DAGPENGER |
| 18 | + isDagpengerFangstFiske(posteringsType) -> InntektKlasse.DAGPENGER_FANGST_FISKE |
| 19 | + isSykepengerFangstFiske(posteringsType) -> InntektKlasse.SYKEPENGER_FANGST_FISKE |
| 20 | + isSykepenger(posteringsType) -> InntektKlasse.SYKEPENGER |
| 21 | + isTiltakslønn(posteringsType) -> InntektKlasse.TILTAKSLØNN |
| 22 | + else -> throw KlassifiseringsException("Unknown inntektklasse for $posteringsType") |
| 23 | + } |
| 24 | +} |
| 25 | + |
| 26 | +private fun isArbeidsInntekt(posteringsType: PosteringsType): Boolean { |
| 27 | + val arbeidsPosteringsTyper = listOf( |
| 28 | + PosteringsType.L_SKATTEPLIKTIG_PERSONALRABATT, |
| 29 | + PosteringsType.L_TIPS, |
| 30 | + PosteringsType.L_AKSJER_GRUNNFONDSBEVIS_TIL_UNDERKURS, |
| 31 | + PosteringsType.L_ANNET, |
| 32 | + PosteringsType.L_ARBEIDSOPPHOLD_KOST, |
| 33 | + PosteringsType.L_ARBEIDSOPPHOLD_LOSJI, |
| 34 | + PosteringsType.L_BEREGNET_SKATT, |
| 35 | + PosteringsType.L_BESØKSREISER_HJEMMET_ANNET, |
| 36 | + PosteringsType.L_BESØKSREISER_HJEMMET_KILOMETERGODTGJØRELSE_BIL, |
| 37 | + PosteringsType.L_BETALT_UTENLANDSK_SKATT, |
| 38 | + PosteringsType.L_BIL, |
| 39 | + PosteringsType.L_BOLIG, |
| 40 | + PosteringsType.L_BONUS, |
| 41 | + PosteringsType.L_BONUS_FRA_FORSVARET, |
| 42 | + PosteringsType.L_ELEKTRONISK_KOMMUNIKASJON, |
| 43 | + PosteringsType.L_FAST_BILGODTGJØRELSE, |
| 44 | + PosteringsType.L_FAST_TILLEGG, |
| 45 | + PosteringsType.L_FASTLØNN, |
| 46 | + PosteringsType.L_FERIEPENGER, |
| 47 | + PosteringsType.L_FOND_FOR_IDRETTSUTØVERE, |
| 48 | + PosteringsType.Y_FORELDREPENGER, |
| 49 | + PosteringsType.L_HELLIGDAGSTILLEGG, |
| 50 | + PosteringsType.L_HONORAR_AKKORD_PROSENT_PROVISJON, |
| 51 | + PosteringsType.L_HYRETILLEGG, |
| 52 | + PosteringsType.L_INNBETALING_TIL_UTENLANDSK_PENSJONSORDNING, |
| 53 | + PosteringsType.L_KILOMETERGODTGJØRELSE_BIL, |
| 54 | + PosteringsType.L_KOMMUNAL_OMSORGSLØNN_OG_FOSTERHJEMSGODTGJØRELSE, |
| 55 | + PosteringsType.L_KOST_DAGER, |
| 56 | + PosteringsType.L_KOST_DØGN, |
| 57 | + PosteringsType.L_KOSTBESPARELSE_I_HJEMMET, |
| 58 | + PosteringsType.L_LOSJI, |
| 59 | + PosteringsType.L_IKKE_SKATTEPLIKTIG_LØNN_FRA_UTENLANDSK_DIPLOM_KONSUL_STASJON, |
| 60 | + PosteringsType.L_LØNN_FOR_BARNEPASS_I_BARNETS_HJEM, |
| 61 | + PosteringsType.L_LØNN_TIL_PRIVATPERSONER_FOR_ARBEID_I_HJEMMET, |
| 62 | + PosteringsType.L_LØNN_UTBETALT_AV_VELDEDIG_ELLER_ALLMENNYTTIG_INSTITUSJON_ELLER_ORGANISASJON, |
| 63 | + PosteringsType.L_LØNN_TIL_VERGE_FRA_FYLKESMANNEN, |
| 64 | + PosteringsType.L_OPSJONER, |
| 65 | + PosteringsType.L_OVERTIDSGODTGJØRELSE, |
| 66 | + PosteringsType.L_REISE_ANNET, |
| 67 | + PosteringsType.L_REISE_KOST, |
| 68 | + PosteringsType.L_REISE_LOSJI, |
| 69 | + PosteringsType.L_RENTEFORDEL_LÅN, |
| 70 | + PosteringsType.L_SKATTEPLIKTIG_DEL_FORSIKRINGER, |
| 71 | + PosteringsType.L_SLUTTVEDERLAG, |
| 72 | + PosteringsType.L_SMUSSTILLEGG, |
| 73 | + PosteringsType.L_STIPEND, |
| 74 | + PosteringsType.L_STYREHONORAR_OG_GODTGJØRELSE_VERV, |
| 75 | + PosteringsType.Y_SVANGERSKAPSPENGER, |
| 76 | + PosteringsType.L_TIMELØNN, |
| 77 | + PosteringsType.L_TREKK_I_LØNN_FOR_FERIE, |
| 78 | + PosteringsType.L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_ARBEIDET_TID, |
| 79 | + PosteringsType.L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_IKKE_ARBEIDET_TID, |
| 80 | + PosteringsType.L_YRKEBIL_TJENESTLIGBEHOV_KILOMETER, |
| 81 | + PosteringsType.L_YRKEBIL_TJENESTLIGBEHOV_LISTEPRIS, |
| 82 | + PosteringsType.L_ANNET_H, |
| 83 | + PosteringsType.L_BONUS_H, |
| 84 | + PosteringsType.L_FAST_TILLEGG_H, |
| 85 | + PosteringsType.L_FASTLØNN_H, |
| 86 | + PosteringsType.L_FERIEPENGER_H, |
| 87 | + PosteringsType.L_HELLIGDAGSTILLEGG_H, |
| 88 | + PosteringsType.L_OVERTIDSGODTGJØRELSE_H, |
| 89 | + PosteringsType.L_SLUTTVEDERLAG_H, |
| 90 | + PosteringsType.L_TIMELØNN_H, |
| 91 | + PosteringsType.L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_ARBEIDET_TID_H, |
| 92 | + PosteringsType.L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_IKKE_ARBEIDET_TID_H, |
| 93 | + PosteringsType.L_TREKK_I_LØNN_FOR_FERIE_H, |
| 94 | + PosteringsType.L_ANNET_IKKE_SKATTEPLIKTIG, |
| 95 | + PosteringsType.L_ANNET_UTLANDET, |
| 96 | + PosteringsType.L_ANNET_KONKURS, |
| 97 | + PosteringsType.L_HONORAR_AKKORD_PROSENT_PROVISJON_H |
| 98 | + |
| 99 | + ) |
| 100 | + return arbeidsPosteringsTyper.contains(posteringsType) |
| 101 | +} |
| 102 | + |
| 103 | +private fun isDagpenger(posteringsType: PosteringsType): Boolean { |
| 104 | + val dagpengerPosteringsTyper = listOf( |
| 105 | + PosteringsType.Y_DAGPENGER_VED_ARBEIDSLØSHET, |
| 106 | + PosteringsType.Y_DAGPENGER_TIL_FISKER_SOM_BARE_HAR_HYRE |
| 107 | + ) |
| 108 | + return dagpengerPosteringsTyper.contains(posteringsType) |
| 109 | +} |
| 110 | + |
| 111 | +private fun isSykepenger(posteringsType: PosteringsType): Boolean { |
| 112 | + val sykepengerPosteringsTyper = listOf( |
| 113 | + PosteringsType.Y_SYKEPENGER, |
| 114 | + PosteringsType.Y_SYKEPENGER_TIL_FISKER_SOM_BARE_HAR_HYRE |
| 115 | + ) |
| 116 | + return sykepengerPosteringsTyper.contains(posteringsType) |
| 117 | +} |
| 118 | + |
| 119 | +private fun isFangstFiske(posteringsType: PosteringsType): Boolean { |
| 120 | + val fangstFiskePosteringsTyper = listOf( |
| 121 | + PosteringsType.N_LOTT_KUN_TRYGDEAVGIFT, |
| 122 | + PosteringsType.N_VEDERLAG |
| 123 | + ) |
| 124 | + return fangstFiskePosteringsTyper.contains(posteringsType) |
| 125 | +} |
| 126 | + |
| 127 | +private fun isDagpengerFangstFiske(posteringsType: PosteringsType): Boolean { |
| 128 | + val dagpengerFangstFiskePosteringsTyper = listOf( |
| 129 | + PosteringsType.N_DAGPENGER_TIL_FISKER |
| 130 | + ) |
| 131 | + return dagpengerFangstFiskePosteringsTyper.contains(posteringsType) |
| 132 | +} |
| 133 | + |
| 134 | +private fun isSykepengerFangstFiske(posteringsType: PosteringsType): Boolean { |
| 135 | + val sykepengerFangstFiskePosteringsTyper = listOf( |
| 136 | + PosteringsType.N_SYKEPENGER_TIL_FISKER |
| 137 | + ) |
| 138 | + return sykepengerFangstFiskePosteringsTyper.contains(posteringsType) |
| 139 | +} |
| 140 | + |
| 141 | +private fun isTiltakslønn(posteringsType: PosteringsType): Boolean { |
| 142 | + val tiltakslønnPosteringsTyper = listOf( |
| 143 | + PosteringsType.L_ANNET_T, |
| 144 | + PosteringsType.L_BONUS_T, |
| 145 | + PosteringsType.L_FAST_TILLEGG_T, |
| 146 | + PosteringsType.L_FASTLØNN_T, |
| 147 | + PosteringsType.L_FERIEPENGER_T, |
| 148 | + PosteringsType.L_HELLIGDAGSTILLEGG_T, |
| 149 | + PosteringsType.L_OVERTIDSGODTGJØRELSE_T, |
| 150 | + PosteringsType.L_SLUTTVEDERLAG_T, |
| 151 | + PosteringsType.L_TIMELØNN_T, |
| 152 | + PosteringsType.L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_ARBEIDET_TID_T, |
| 153 | + PosteringsType.L_UREGELMESSIGE_TILLEGG_KNYTTET_TIL_IKKE_ARBEIDET_TID_T, |
| 154 | + PosteringsType.L_TREKK_I_LØNN_FOR_FERIE_T |
| 155 | + ) |
| 156 | + return tiltakslønnPosteringsTyper.contains(posteringsType) |
| 157 | +} |
| 158 | + |
| 159 | +class KlassifiseringsException(message: String) : RuntimeException(message) |
0 commit comments