Skip to content

Commit

Permalink
Lagt til trukket uttaksperioder i uttaksplan. (#269)
Browse files Browse the repository at this point in the history
  • Loading branch information
frodeli authored Sep 10, 2021
1 parent 3472308 commit f619ae6
Show file tree
Hide file tree
Showing 13 changed files with 202 additions and 100 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ enum class Endringsstatus {
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
@JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, fieldVisibility = JsonAutoDetect.Visibility.ANY)
data class Uttaksplan(
@JsonProperty("perioder") val perioder: Map<LukketPeriode, UttaksperiodeInfo> = mapOf()
@JsonProperty("perioder") val perioder: Map<LukketPeriode, UttaksperiodeInfo> = mapOf(),
@JsonProperty("trukketUttak") val trukketUttak: List<LukketPeriode> = listOf()
)

@JsonIgnoreProperties(ignoreUnknown = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ object EndringsstatusOppdaterer {
oppdatertePerioder[periode] = infoFraNyUttaksplan.copy(endringsstatus = endringsstatus)
}

return Uttaksplan(perioder = oppdatertePerioder)
return nyUttaksplan.copy(perioder = oppdatertePerioder)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,22 @@ object UttaksplanMerger {
val timelineForrigeUttaksplan = lagTimeline(forrigeUttaksplan)
val timelineForrigeUttaksplanMinusTrukketUttak = fjernTrukketUttak(timelineForrigeUttaksplan, trukketUttak)
val timelineNyUttaksplan = lagTimeline(nyUttaksplan)
return lagSammenslåttUttaksplan(timelineForrigeUttaksplanMinusTrukketUttak, timelineNyUttaksplan)
val uttaksperioder = lagSammenslåttUttaksplan(timelineForrigeUttaksplanMinusTrukketUttak, timelineNyUttaksplan)
return Uttaksplan(perioder = uttaksperioder, trukketUttak = trukketUttak)
}

private fun lagTimeline(uttaksplan:Uttaksplan): LocalDateTimeline<UttaksperiodeInfo> {
val segmenter = uttaksplan.perioder.map { (periode, info) -> LocalDateSegment(periode.fom, periode.tom, info) }
return LocalDateTimeline(segmenter)
}

private fun lagSammenslåttUttaksplan(timelineForrigeUttaksplan: LocalDateTimeline<UttaksperiodeInfo>, timelineNyUttaksplan: LocalDateTimeline<UttaksperiodeInfo>): Uttaksplan {
private fun lagSammenslåttUttaksplan(timelineForrigeUttaksplan: LocalDateTimeline<UttaksperiodeInfo>, timelineNyUttaksplan: LocalDateTimeline<UttaksperiodeInfo>): Map<LukketPeriode, UttaksperiodeInfo> {
val sammenslåttTimeline = timelineNyUttaksplan.crossJoin(timelineForrigeUttaksplan).compress()
val perioder = mutableMapOf<LukketPeriode, UttaksperiodeInfo>()
sammenslåttTimeline.toSegments().forEach {
perioder[LukketPeriode(it.fom, it.tom)] = it.value
}
return Uttaksplan(perioder)
return perioder
}

private fun fjernTrukketUttak(timelineForrigeUttaksplan: LocalDateTimeline<UttaksperiodeInfo>, trukketUttak: List<LukketPeriode>): LocalDateTimeline<UttaksperiodeInfo> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ internal object UttaksplanRegler {
}

private fun fastsettUttaksplanRegler(perioder: Map<LukketPeriode, UttaksperiodeInfo>, grunnlag: RegelGrunnlag): Uttaksplan {
var uttaksplan = Uttaksplan(perioder)
var uttaksplan = Uttaksplan(perioder, grunnlag.trukketUttak)
UttaksplanRegler.forEach {uttaksplanRegler ->
uttaksplan = uttaksplanRegler.kjør(
uttaksplan = uttaksplan,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,20 +210,23 @@ internal class UttakTjenesteGraderingTest {
helePeriodenSøktUttak
),
andrePartersUttaksplan = mapOf(
"999" to Uttaksplan(perioder = mapOf(
helePerioden to UttaksperiodeInfo.oppfylt(
kildeBehandlingUUID = nesteBehandlingUUID(),
uttaksgrad = Prosent(40),
utbetalingsgrader = mapOf(arbeidsforhold1 to Prosent(40)).somUtbetalingsgrader(),
søkersTapteArbeidstid = Prosent(40),
oppgittTilsyn = null,
årsak = Årsak.AVKORTET_MOT_INNTEKT, knekkpunktTyper = setOf(),
pleiebehov = Pleiebehov.PROSENT_100.prosent,
annenPart = AnnenPart.ALENE,
nattevåk = null,
beredskap = null
)
))
"999" to Uttaksplan(
perioder = mapOf(
helePerioden to UttaksperiodeInfo.oppfylt(
kildeBehandlingUUID = nesteBehandlingUUID(),
uttaksgrad = Prosent(40),
utbetalingsgrader = mapOf(arbeidsforhold1 to Prosent(40)).somUtbetalingsgrader(),
søkersTapteArbeidstid = Prosent(40),
oppgittTilsyn = null,
årsak = Årsak.AVKORTET_MOT_INNTEKT, knekkpunktTyper = setOf(),
pleiebehov = Pleiebehov.PROSENT_100.prosent,
annenPart = AnnenPart.ALENE,
nattevåk = null,
beredskap = null
)
),
trukketUttak = listOf()
)
),
arbeid = mapOf(
arbeidsforhold1 to mapOf(helePerioden to ArbeidsforholdPeriodeInfo(FULL_DAG, FULL_DAG.prosent(75)))
Expand Down Expand Up @@ -265,26 +268,31 @@ internal class UttakTjenesteGraderingTest {
helePeriodenSøktUttak
),
andrePartersUttaksplan = mapOf(
"999" to Uttaksplan(perioder = mapOf(helePerioden to UttaksperiodeInfo.oppfylt(
uttaksgrad = Prosent(60),
utbetalingsgrader = mapOf(arbeidsforhold1 to Prosent(40)).somUtbetalingsgrader(),
årsak = Årsak.GRADERT_MOT_TILSYN,
knekkpunktTyper = setOf(),
graderingMotTilsyn = GraderingMotTilsyn(
etablertTilsyn = Prosent(40),
overseEtablertTilsynÅrsak = null,
andreSøkeresTilsyn = NULL_PROSENT,
andreSøkeresTilsynReberegnet = false,
tilgjengeligForSøker = Prosent(60)
"999" to Uttaksplan(
perioder = mapOf(
helePerioden to UttaksperiodeInfo.oppfylt(
uttaksgrad = Prosent(60),
utbetalingsgrader = mapOf(arbeidsforhold1 to Prosent(40)).somUtbetalingsgrader(),
årsak = Årsak.GRADERT_MOT_TILSYN,
knekkpunktTyper = setOf(),
graderingMotTilsyn = GraderingMotTilsyn(
etablertTilsyn = Prosent(40),
overseEtablertTilsynÅrsak = null,
andreSøkeresTilsyn = NULL_PROSENT,
andreSøkeresTilsynReberegnet = false,
tilgjengeligForSøker = Prosent(60)
),
annenPart = AnnenPart.ALENE,
kildeBehandlingUUID = UUID.randomUUID().toString(),
pleiebehov = HUNDRE_PROSENT,
søkersTapteArbeidstid = Prosent(40),
oppgittTilsyn = null,
nattevåk = null,
beredskap = null
)
),
annenPart = AnnenPart.ALENE,
kildeBehandlingUUID = UUID.randomUUID().toString(),
pleiebehov = HUNDRE_PROSENT,
søkersTapteArbeidstid = Prosent(40),
oppgittTilsyn = null,
nattevåk = null,
beredskap = null
)))
trukketUttak = listOf()
)
),
arbeid = mapOf(
arbeidsforhold1 to mapOf(helePerioden to ArbeidsforholdPeriodeInfo(FULL_DAG, FULL_DAG.prosent(30)))
Expand Down Expand Up @@ -329,21 +337,24 @@ internal class UttakTjenesteGraderingTest {
helePeriodenSøktUttak
),
andrePartersUttaksplan = mapOf(
"999" to Uttaksplan(perioder = mapOf(
helePerioden to UttaksperiodeInfo.oppfylt(
kildeBehandlingUUID = nesteBehandlingUUID(),
uttaksgrad = Prosent(40),
utbetalingsgrader = mapOf(arbeidsforhold1 to Prosent(40)).somUtbetalingsgrader(),
søkersTapteArbeidstid = Prosent(40),
oppgittTilsyn = null,
årsak = Årsak.AVKORTET_MOT_INNTEKT,
pleiebehov = Pleiebehov.PROSENT_100.prosent,
knekkpunktTyper = setOf(),
annenPart = AnnenPart.ALENE,
nattevåk = null,
beredskap = null
)
))
"999" to Uttaksplan(
perioder = mapOf(
helePerioden to UttaksperiodeInfo.oppfylt(
kildeBehandlingUUID = nesteBehandlingUUID(),
uttaksgrad = Prosent(40),
utbetalingsgrader = mapOf(arbeidsforhold1 to Prosent(40)).somUtbetalingsgrader(),
søkersTapteArbeidstid = Prosent(40),
oppgittTilsyn = null,
årsak = Årsak.AVKORTET_MOT_INNTEKT,
pleiebehov = Pleiebehov.PROSENT_100.prosent,
knekkpunktTyper = setOf(),
annenPart = AnnenPart.ALENE,
nattevåk = null,
beredskap = null
)
),
trukketUttak = listOf()
)
),
tilsynsperioder = mapOf(
helePerioden to Prosent(45)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,55 +39,59 @@ internal class UttaksplanMergerTest {
beredskap = null
)



@Test
fun `En uttaksplan med delvis overlapp en annen uttaksplan skal slås sammen`() {

val uttaksplan1 = Uttaksplan(
mapOf(LukketPeriode("2020-01-01/2020-01-31") to oppfylt(behandling1))
mapOf(LukketPeriode("2020-01-01/2020-01-31") to oppfylt(behandling1)),
listOf()
)
val uttaksplan2 = Uttaksplan(
mapOf(LukketPeriode("2020-01-15/2020-02-10") to oppfylt(behandling2))
mapOf(LukketPeriode("2020-01-15/2020-02-10") to oppfylt(behandling2)),
listOf()
)

val sammenslåttUttaksplan = UttaksplanMerger.slåSammenUttaksplaner(uttaksplan1, uttaksplan2, listOf())

assertThat(sammenslåttUttaksplan).isEqualTo(Uttaksplan(mapOf(
LukketPeriode("2020-01-01/2020-01-14") to oppfylt(behandling1),
LukketPeriode("2020-01-15/2020-02-10") to oppfylt(behandling2)
)))
), listOf()))
}

@Test
fun `En uttaksplan med delvis overlapp en annen uttaksplan(første uttaksperioder i nyeste uttaksplan) skal slås sammen`() {

val uttaksplan1 = Uttaksplan(
mapOf(LukketPeriode("2020-01-01/2020-02-10") to oppfylt(behandling1))
mapOf(LukketPeriode("2020-01-01/2020-02-10") to oppfylt(behandling1)),
listOf()
)
val uttaksplan2 = Uttaksplan(
mapOf(LukketPeriode("2020-01-17/2020-03-31") to oppfylt(behandling2))
mapOf(LukketPeriode("2020-01-17/2020-03-31") to oppfylt(behandling2)),
listOf()
)

val sammenslåttUttaksplan = UttaksplanMerger.slåSammenUttaksplaner(uttaksplan1, uttaksplan2, listOf())

assertThat(sammenslåttUttaksplan).isEqualTo(Uttaksplan(mapOf(
LukketPeriode("2020-01-01/2020-01-16") to oppfylt(behandling1),
LukketPeriode("2020-01-17/2020-03-31") to oppfylt(behandling2)
)))
), listOf()))
}

@Test
fun `En uttaksplan med hull, skal føre til at underliggende uttaksplan skal brukes i hullet`() {

val uttaksplan1 = Uttaksplan(
mapOf(LukketPeriode("2020-01-01/2020-01-31") to oppfylt(behandling1))
mapOf(LukketPeriode("2020-01-01/2020-01-31") to oppfylt(behandling1)),
listOf()
)
val uttaksplan2 = Uttaksplan(
mapOf(
LukketPeriode("2020-01-01/2020-01-15") to oppfylt(behandling2),
LukketPeriode("2020-01-25/2020-02-15") to oppfylt(behandling2)
)
mapOf(
LukketPeriode("2020-01-01/2020-01-15") to oppfylt(behandling2),
LukketPeriode("2020-01-25/2020-02-15") to oppfylt(behandling2)
),
listOf()
)

val sammenslåttUttaksplan = UttaksplanMerger.slåSammenUttaksplaner(uttaksplan1, uttaksplan2, listOf())
Expand All @@ -96,17 +100,19 @@ internal class UttaksplanMergerTest {
LukketPeriode("2020-01-01/2020-01-15") to oppfylt(behandling2),
LukketPeriode("2020-01-16/2020-01-24") to oppfylt(behandling1),
LukketPeriode("2020-01-25/2020-02-15") to oppfylt(behandling2)
)))
), listOf()))
}

@Test
fun `En tidligere uttaksplan med oppfylt periode og en nyere uttaksplan med en ikke oppfylt periode, skal føre til at opprinnelige uttaksperioder blir splittet`() {

val uttaksplan1 = Uttaksplan(
mapOf(LukketPeriode("2020-01-01/2020-01-31") to oppfylt(behandling1))
mapOf(LukketPeriode("2020-01-01/2020-01-31") to oppfylt(behandling1)),
listOf()
)
val uttaksplan2 = Uttaksplan(
mapOf(LukketPeriode("2020-01-10/2020-01-20") to ikkeOppfylt(behandling2))
mapOf(LukketPeriode("2020-01-10/2020-01-20") to ikkeOppfylt(behandling2)),
listOf()
)

val sammenslåttUttaksplan = UttaksplanMerger.slåSammenUttaksplaner(uttaksplan1, uttaksplan2, listOf())
Expand All @@ -115,35 +121,39 @@ internal class UttaksplanMergerTest {
LukketPeriode("2020-01-01/2020-01-09") to oppfylt(behandling1),
LukketPeriode("2020-01-10/2020-01-20") to ikkeOppfylt(behandling2),
LukketPeriode("2020-01-21/2020-01-31") to oppfylt(behandling1)
)))
), listOf()))
}

@Test
fun `Søker trekker uttak fra tidligere uttaksplan`() {
val uttaksplan1 = Uttaksplan(
mapOf(LukketPeriode("2020-01-01/2020-01-31") to oppfylt(behandling1))
mapOf(LukketPeriode("2020-01-01/2020-01-31") to oppfylt(behandling1)),
listOf()
)

val uttaksplan2 = Uttaksplan(
mapOf()
mapOf(),
listOf()
)

val sammenslåttUttaksplan = UttaksplanMerger.slåSammenUttaksplaner(uttaksplan1, uttaksplan2, listOf(LukketPeriode("2020-01-10/2020-01-20")))
assertThat(sammenslåttUttaksplan.perioder.keys.size).isEqualTo(2)
assertThat(sammenslåttUttaksplan).isEqualTo(Uttaksplan(mapOf(
LukketPeriode("2020-01-01/2020-01-09") to oppfylt(behandling1),
LukketPeriode("2020-01-21/2020-01-31") to oppfylt(behandling1)
)))
), listOf(LukketPeriode("2020-01-10/2020-01-20"))))
}

@Test
fun `Søker trekker uttak fra tidligere uttaksplan og legget til nytt uttak`() {
val uttaksplan1 = Uttaksplan(
mapOf(LukketPeriode("2020-01-01/2020-01-31") to oppfylt(behandling1))
mapOf(LukketPeriode("2020-01-01/2020-01-31") to oppfylt(behandling1)),
listOf()
)

val uttaksplan2 = Uttaksplan(
mapOf(LukketPeriode("2020-02-01/2020-02-20") to oppfylt(behandling2))
mapOf(LukketPeriode("2020-02-01/2020-02-20") to oppfylt(behandling2)),
listOf()
)

val sammenslåttUttaksplan = UttaksplanMerger.slåSammenUttaksplaner(uttaksplan1, uttaksplan2, listOf(LukketPeriode("2020-01-10/2020-01-20")))
Expand All @@ -153,7 +163,7 @@ internal class UttaksplanMergerTest {
LukketPeriode("2020-01-21/2020-01-31") to oppfylt(behandling1),
LukketPeriode("2020-02-01/2020-02-20") to oppfylt(behandling2)

)))
), listOf(LukketPeriode("2020-01-10/2020-01-20"))))
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ internal fun Uttaksplan.slåSammenLikePerioder(): Uttaksplan {
}
}

return Uttaksplan(perioder = nyePerioder)
return Uttaksplan(perioder = nyePerioder, trukketUttak = this.trukketUttak)
}

private fun List<LukketPeriode>.slåSammenDersomBareHelgMellom(): List<LukketPeriode> {
Expand Down
Loading

0 comments on commit f619ae6

Please sign in to comment.