Skip to content

Commit

Permalink
FIX: Utvider siste periode over helg dersom den ikke dekkes av andre …
Browse files Browse the repository at this point in the history
…sammenslåtte perioder (#1079)
  • Loading branch information
espenjv authored Feb 23, 2025
1 parent 97fa767 commit 966ac83
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ internal fun Uttaksplan.slåSammenLikePerioder(): Uttaksplan {
//Slå sammen perioder og bygg nye perioder
val nyePerioder = mutableMapOf<LukketPeriode, UttaksperiodeInfo>()
perioderMedLikInfo.forEach { (info, perioder) ->
val sammenslåttePerioder = perioder.slåSammen()
val sammenslåttePerioder = perioder.slåSammen(this.perioder)
sammenslåttePerioder.forEach { sammenslåttPeriode ->
nyePerioder[sammenslåttPeriode] = info
}
Expand All @@ -29,7 +29,7 @@ internal fun Uttaksplan.slåSammenLikePerioder(): Uttaksplan {
return Uttaksplan(perioder = nyePerioder, trukketUttak = this.trukketUttak, kvoteInfo = this.kvoteInfo, commitId = this.commitId)
}

private fun List<LukketPeriode>.slåSammen(): List<LukketPeriode> {
private fun List<LukketPeriode>.slåSammen(allePerioder: Map<LukketPeriode, UttaksperiodeInfo>): List<LukketPeriode> {
val sortertePerioder = this.sortedBy { it.fom }

var nyPeriode: LukketPeriode? = null
Expand All @@ -41,17 +41,33 @@ private fun List<LukketPeriode>.slåSammen(): List<LukketPeriode> {
} else if (bareHelgEllerIngenDagerMellom(nyPeriode!!.tom, periode.fom)) {
nyPeriode = LukketPeriode(nyPeriode!!.fom, periode.tom)
} else {
if (slutterPåFredagOgHelgErInkludertIUttaksplanen(nyPeriode!!, allePerioder)) {
nyPeriode = utvidOverHelgIEtterkant(nyPeriode!!)
}
nyePerioder.add(nyPeriode!!)
nyPeriode = periode
}
}
if (nyPeriode != null) {
if (slutterPåFredagOgHelgErInkludertIUttaksplanen(nyPeriode!!, allePerioder)) {
nyPeriode = utvidOverHelgIEtterkant(nyPeriode!!)
}
nyePerioder.add(nyPeriode!!)

}

return nyePerioder
}

private fun utvidOverHelgIEtterkant(nyPeriode: LukketPeriode) =
LukketPeriode(nyPeriode.fom, nyPeriode.tom.plusDays(2))

private fun slutterPåFredagOgHelgErInkludertIUttaksplanen(
nyPeriode: LukketPeriode,
allePerioder: Map<LukketPeriode, UttaksperiodeInfo>
): Boolean =
nyPeriode.tom.dayOfWeek == DayOfWeek.FRIDAY && allePerioder.any { it.key.fom.isAfter(nyPeriode.tom) }

internal fun bareHelgEllerIngenDagerMellom(dato1: LocalDate, dato2: LocalDate): Boolean {
require(dato1 < dato2) {"Dato1($dato1) må være før dato2($dato2)."}
val dagerMellom = ChronoUnit.DAYS.between(dato1, dato2)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,53 @@ class UttakplanApiTest(@Autowired val restTemplate: TestRestTemplate) {
)
}

@Test
internal fun `Utvider sammenslått periode over helg ved endring på mandag`() {
val søknadsperiode1 = LukketPeriode("2025-02-01/2025-02-23")
val søknadsperiode2 = LukketPeriode("2025-02-24/2025-03-31")

val grunnlag = lagGrunnlag(
søknadsperiode = LukketPeriode("2025-02-01/2025-03-31"),
arbeid = listOf(
Arbeid(
ARBEIDSFORHOLD1,
mapOf(søknadsperiode1 to ArbeidsforholdPeriodeInfo(jobberNormalt = FULL_DAG, jobberNå = INGENTING), søknadsperiode2 to ArbeidsforholdPeriodeInfo(jobberNormalt = FULL_DAG, jobberNå = HALV_DAG))
)
),
pleiebehov = mapOf(LukketPeriode("2025-02-01/2025-03-31") to Pleiebehov.PROSENT_100),
)

val postResponse = testClient.opprettUttaksplan(grunnlag)
assertThat(postResponse.statusCode).isEqualTo(HttpStatus.CREATED)

val hentResponse = testClient.hentUttaksplan(grunnlag.behandlingUUID, true)
assertThat(hentResponse.statusCode).isEqualTo(HttpStatus.OK)
val uttaksplan = hentResponse.body ?: fail("Mangler uttaksplan")

uttaksplan.assertOppfylt(
perioder = listOf(LukketPeriode("2025-02-03/2025-02-23")),
grad = HUNDRE_PROSENT,
gradPerArbeidsforhold = mapOf(
ARBEIDSFORHOLD1 to HUNDRE_PROSENT
),
oppfyltÅrsak = Årsak.FULL_DEKNING,
endringsstatus = Endringsstatus.NY
)


uttaksplan.assertOppfylt(
perioder = listOf(LukketPeriode("2025-02-24/2025-03-31")),
grad = Prosent(50),
gradPerArbeidsforhold = mapOf(
ARBEIDSFORHOLD1 to Prosent(50)
),
oppfyltÅrsak = Årsak.AVKORTET_MOT_INNTEKT,
endringsstatus = Endringsstatus.NY
)
}



@Test
internal fun `Enkelt uttak på flere arbeidsforhold`() {
val grunnlag = lagGrunnlag(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import java.time.LocalDate
import java.util.*

internal val FULL_DAG = Duration.ofHours(7).plusMinutes(30)
internal val HALV_DAG = Duration.ofHours(3).plusMinutes(45)
internal val INGENTING = Duration.ZERO

internal val HELE_2020 = LukketPeriode("2020-01-01/2020-12-31")
Expand Down

0 comments on commit 966ac83

Please sign in to comment.