1
1
package no.nav.pleiepengerbarn.uttak.regler
2
2
3
- import no.nav.pleiepengerbarn.uttak.kontrakter.*
3
+ import no.nav.pleiepengerbarn.uttak.kontrakter.Arbeidsforhold
4
+ import no.nav.pleiepengerbarn.uttak.kontrakter.ArbeidsforholdPeriodeInfo
5
+ import no.nav.pleiepengerbarn.uttak.kontrakter.OverstyrtInput
6
+ import no.nav.pleiepengerbarn.uttak.kontrakter.OverstyrtUtbetalingsgradPerArbeidsforhold
7
+ import no.nav.pleiepengerbarn.uttak.kontrakter.Prosent
4
8
import no.nav.pleiepengerbarn.uttak.regler.domene.Utbetalingsgrad
5
9
import java.math.BigDecimal
6
10
import java.math.RoundingMode
7
11
import java.time.Duration
8
12
9
- enum class Arbeidstype (val kode : String ) {
10
- ARBEIDSTAKER (" AT" ),
11
- FRILANSER (" FL" ),
12
- DAGPENGER (" DP" ),
13
- SELVSTENDIG_N ÆRINGSDRIVENDE (" SN" ),
14
- IKKE_YRKESAKTIV (" IKKE_YRKESAKTIV" ),
15
- IKKE_YRKESAKTIV_UTEN_ERSTATNING (" IKKE_YRKESAKTIV_UTEN_ERSTATNING" ),
16
- KUN_YTELSE (" BA" ),
17
- INAKTIV (" MIDL_INAKTIV" ),
18
- SYKEPENGER_AV_DAGPENGER (" SP_AV_DP" ),
19
- PSB_AV_DP (" PSB_AV_DP" )
20
- }
21
-
22
- val GRUPPE_SOM_SKAL_SPESIALH ÅNDTERES = setOf (
23
- Arbeidstype .IKKE_YRKESAKTIV_UTEN_ERSTATNING ,
24
- Arbeidstype .KUN_YTELSE
25
- )
26
- private val AKTIVITETS_GRUPPER = listOf (
27
- setOf (
28
- Arbeidstype .ARBEIDSTAKER ,
29
- Arbeidstype .IKKE_YRKESAKTIV ,
30
- Arbeidstype .FRILANSER ,
31
- Arbeidstype .SELVSTENDIG_N ÆRINGSDRIVENDE
32
- ),
33
- setOf (
34
- Arbeidstype .SYKEPENGER_AV_DAGPENGER ,
35
- Arbeidstype .PSB_AV_DP ,
36
- Arbeidstype .DAGPENGER ,
37
- Arbeidstype .INAKTIV
38
- ),
39
- GRUPPE_SOM_SKAL_SPESIALH ÅNDTERES
40
- )
41
-
42
13
object BeregnUtbetalingsgrader {
43
14
44
15
internal fun beregn (
@@ -47,8 +18,8 @@ object BeregnUtbetalingsgrader {
47
18
gradertMotTilsyn : Boolean ,
48
19
beregnGraderGrunnlag : BeregnGraderGrunnlag
49
20
): Map <Arbeidsforhold , Utbetalingsgrad > {
50
- beregnGraderGrunnlag.arbeid.sjekkAtArbeidsforholdFinnesBlandtAktivitetsgrupper()
51
21
val brukNyeRegler = gjelderNyeRegler(beregnGraderGrunnlag)
22
+ beregnGraderGrunnlag.arbeid.sjekkAtArbeidsforholdFinnesBlandtAktivitetsgrupper(brukNyeRegler)
52
23
53
24
// Timer som jobbes normalt
54
25
var sumJobberNormalt = finnTotalNormalarbeidstid(beregnGraderGrunnlag, brukNyeRegler)
@@ -68,7 +39,7 @@ object BeregnUtbetalingsgrader {
68
39
// Map for holde på utbetalingsgrader
69
40
val alleUtbetalingsgrader = mutableMapOf<Arbeidsforhold , Utbetalingsgrad >()
70
41
// Beregner utbetalingsgrad gruppevis
71
- AKTIVITETS_GRUPPER .forEach { aktivitetsgruppe ->
42
+ getAktivitetsgruppe(brukNyeRegler) .forEach { aktivitetsgruppe ->
72
43
val arbeidForAktivitetsgruppe = beregnGraderGrunnlag.arbeid.forAktivitetsgruppe(aktivitetsgruppe)
73
44
if (! gjelderSpesialgruppePåGamleRegler (aktivitetsgruppe, brukNyeRegler)) {
74
45
// HOVEDLØYPE FOR AKTIVITETER
@@ -91,6 +62,7 @@ object BeregnUtbetalingsgrader {
91
62
// Finner ut om vi skal har kombinasjonen IKKE_YREKSAKTIV/KUN_YTELSE og Frilans uten fravær på gamle regler
92
63
val spesialhåndteringsgruppeSkalSpesialhåndteres =
93
64
beregnGraderGrunnlag.arbeid.harSpesialhåndteringstilfelleForGamleRegler(
65
+ brukNyeRegler,
94
66
beregnGraderGrunnlag.periode,
95
67
beregnGraderGrunnlag.nyeReglerUtbetalingsgrad
96
68
)
@@ -113,7 +85,7 @@ object BeregnUtbetalingsgrader {
113
85
private fun gjelderSpesialgruppeP åGamleRegler (
114
86
aktivitetsgruppe : Set <Arbeidstype >,
115
87
brukNyeRegler : Boolean
116
- ) = aktivitetsgruppe == GRUPPE_SOM_SKAL_SPESIALH Å NDTERES && ! brukNyeRegler
88
+ ) = aktivitetsgruppe == getGruppeSomSkalSpesialhåndteres(brukNyeRegler) && ! brukNyeRegler
117
89
118
90
private fun gjelderNyeRegler (beregnGraderGrunnlag : BeregnGraderGrunnlag ) =
119
91
(beregnGraderGrunnlag.nyeReglerUtbetalingsgrad != null
@@ -125,7 +97,7 @@ object BeregnUtbetalingsgrader {
125
97
): Duration {
126
98
var sumJobberNormalt1 = Duration .ZERO
127
99
beregnGraderGrunnlag.arbeid.entries.filter {
128
- brukNyeRegler || ! GRUPPE_SOM_SKAL_SPESIALH Å NDTERES .contains(
100
+ brukNyeRegler || ! getGruppeSomSkalSpesialhåndteres(brukNyeRegler) .contains(
129
101
Arbeidstype .values().find { arbeidstype -> arbeidstype.kode == it.key.type })
130
102
}.filter {
131
103
it.value.tilkommet != true || ! brukNyeRegler
@@ -317,8 +289,8 @@ private fun Map<Arbeidsforhold, ArbeidsforholdPeriodeInfo>.forAktivitetsgruppe(a
317
289
return arbeidForAktivitetsgruppe
318
290
}
319
291
320
- private fun Map <Arbeidsforhold , ArbeidsforholdPeriodeInfo >.sjekkAtArbeidsforholdFinnesBlandtAktivitetsgrupper () {
321
- val lovligeArbeidstyper = AKTIVITETS_GRUPPER .flatten().map { it.kode }.toSet()
292
+ private fun Map <Arbeidsforhold , ArbeidsforholdPeriodeInfo >.sjekkAtArbeidsforholdFinnesBlandtAktivitetsgrupper (skalBrukeNyeRegler : Boolean ) {
293
+ val lovligeArbeidstyper = getAktivitetsgruppe(skalBrukeNyeRegler) .flatten().map { it.kode }.toSet()
322
294
this .keys.forEach {
323
295
if (! lovligeArbeidstyper.contains(it.type)) {
324
296
throw IllegalArgumentException (" Ulovlig arbeidstype ${it.type} " )
0 commit comments