Skip to content

Commit

Permalink
Refactor og/eller and introduce missing ubestemt for og/eller.
Browse files Browse the repository at this point in the history
- Add new outlet for og/eller of type ubestemt
- Use the built in features of og/eller to deduce the utfall of behandling instead of deducing it from the flattened vilkår wrapped inside
  • Loading branch information
jacob-meidell committed Dec 2, 2024
1 parent 4b81b84 commit 64601b5
Show file tree
Hide file tree
Showing 17 changed files with 209 additions and 254 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,13 @@ package no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.om
data class AvgjørBehandlingUtfall(
private val vilkårsvurdering: VilkarsVurdering<*>
) {
private val innvilget = vilkårsvurdering.finnAlleInnvilget()
private val avslag = vilkårsvurdering.finnAlleAvslatte()
private val ubestemt = vilkårsvurdering.finnAlleUbestemte()

fun utfall(): BehandlingUtfall {
return when {
innvilget.isNotEmpty() && avslag.isEmpty() && ubestemt.isEmpty() -> {
vilkårsvurdering.erInnvilget() -> {
BehandlingUtfall.Innvilget
}

innvilget.isNotEmpty() && avslag.isEmpty() && ubestemt.isNotEmpty() -> {
BehandlingUtfall.Manuell
}

innvilget.isEmpty() && avslag.isEmpty() && ubestemt.isNotEmpty() -> {
vilkårsvurdering.erUbestemt() -> {
BehandlingUtfall.Manuell
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,16 @@ class Eller : Vilkar<List<VilkarsVurdering<*>>>() {
}

override fun <T : Vilkar<List<VilkarsVurdering<*>>>> T.bestemUtfall(grunnlag: List<VilkarsVurdering<*>>): VilkårsvurderingUtfall {
val alleUtfall = grunnlag.map { it.utfall }
return when {
grunnlag.map { it.utfall }.any { it.erInnvilget() } -> {
alleUtfall.any { it.erInnvilget() } -> {
EllerInnvilget
}

alleUtfall.none { it.erInnvilget() } && alleUtfall.any { it.erUbestemt() } -> {
EllerUbestemt
}

else -> {
EllerAvslått
}
Expand All @@ -43,5 +48,5 @@ data class EllerVurdering(
) : VilkarsVurdering<List<VilkarsVurdering<*>>>()

data object EllerInnvilget : VilkårsvurderingUtfall.Innvilget()

data object EllerUbestemt : VilkårsvurderingUtfall.Ubestemt()
data object EllerAvslått : VilkårsvurderingUtfall.Avslag()
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,16 @@ class Og : Vilkar<List<VilkarsVurdering<*>>>() {
}

override fun <T : Vilkar<List<VilkarsVurdering<*>>>> T.bestemUtfall(grunnlag: List<VilkarsVurdering<*>>): VilkårsvurderingUtfall {
val alleUtfall = grunnlag.map { it.utfall }
return when {
grunnlag.map { it.utfall }.all { it.erInnvilget() } -> {
alleUtfall.all { it.erInnvilget() } -> {
OgInnvilget
}

alleUtfall.none { it.erAvslag() } && alleUtfall.any { it.erUbestemt() } -> {
OgUbestemt
}

else -> {
OgAvslått
}
Expand All @@ -35,5 +40,5 @@ data class OgVurdering(
) : VilkarsVurdering<List<VilkarsVurdering<*>>>()

data object OgInnvilget : VilkårsvurderingUtfall.Innvilget()

data object OgUbestemt : VilkårsvurderingUtfall.Ubestemt()
data object OgAvslått : VilkårsvurderingUtfall.Avslag()
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ object OmsorgsopptjeningIkkeInnvilgetAnnetFellesbarn :
).let { referanser ->
when {
grunnlag.erManuell() -> {
VilkårsvurderingUtfall.Ubestemt(referanser)
VilkårsvurderingUtfall.Ubestemt.Vilkår(referanser)
}

else -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ object OmsorgsyterErMedlemIFolketrygden : ParagrafVilkår<OmsorgsyterErMedlemIFo
}

grunnlag.manuell() -> {
VilkårsvurderingUtfall.Ubestemt(it)
VilkårsvurderingUtfall.Ubestemt.Vilkår(it)
}

else -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ object OmsorgsyterHarIkkeDødsdato : ParagrafVilkår<OmsorgsyterHarIkkeDødsdato

override fun <T : Vilkar<Grunnlag>> T.bestemUtfall(grunnlag: Grunnlag): VilkårsvurderingUtfall {
return when (grunnlag.harDødsdato()) {
true -> VilkårsvurderingUtfall.Ubestemt(emptySet())
true -> VilkårsvurderingUtfall.Ubestemt.Vilkår(emptySet())
false -> VilkårsvurderingUtfall.Innvilget.Vilkår(emptySet())
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ object OmsorgsyterHarMestOmsorgAvAlleOmsorgsytere :
}

grunnlag.omsorgsyterErEnAvFlereMedFlestOmsorgsmånederMedFullOmsorg() -> {
VilkårsvurderingUtfall.Ubestemt(setOf(JuridiskHenvisning.Forskrift_Om_Alderspensjon_I_Folketrygden_Kap_3_Paragraf_4_Tredje_Ledd))
VilkårsvurderingUtfall.Ubestemt.Vilkår(setOf(JuridiskHenvisning.Forskrift_Om_Alderspensjon_I_Folketrygden_Kap_3_Paragraf_4_Tredje_Ledd))
}

grunnlag.omsorgsyterErEnAvFlereMedFlestOmsorgsmånederMedDeltOmsorg() -> {
VilkårsvurderingUtfall.Ubestemt(setOf(JuridiskHenvisning.Forskrift_Om_Alderspensjon_I_Folketrygden_Kap_3_Paragraf_4_Tredje_Ledd))
VilkårsvurderingUtfall.Ubestemt.Vilkår(setOf(JuridiskHenvisning.Forskrift_Om_Alderspensjon_I_Folketrygden_Kap_3_Paragraf_4_Tredje_Ledd))
}

else -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ object OmsorgsyterHarTilstrekkeligOmsorgsarbeid : ParagrafVilkår<OmsorgsyterHar
}

grunnlag.erManuell() -> {
VilkårsvurderingUtfall.Ubestemt(it)
VilkårsvurderingUtfall.Ubestemt.Vilkår(it)
}

else -> {
Expand Down Expand Up @@ -57,7 +57,7 @@ object OmsorgsyterHarTilstrekkeligOmsorgsarbeid : ParagrafVilkår<OmsorgsyterHar
}

grunnlag.erManuell() -> {
VilkårsvurderingUtfall.Ubestemt(it)
VilkårsvurderingUtfall.Ubestemt.Vilkår(it)
}

else -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ object OmsorgsyterMottarIkkePensjonEllerUføretrygdIEøs :
}

grunnlag.manuell() -> {
VilkårsvurderingUtfall.Ubestemt(it)
VilkårsvurderingUtfall.Ubestemt.Vilkår(it)
}

else -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ sealed class VilkårsvurderingUtfall {
data class Vilkår(val henvisninger: Set<JuridiskHenvisning>) : Avslag()
}

data class Ubestemt(val henvisninger: Set<JuridiskHenvisning>) : VilkårsvurderingUtfall()
sealed class Ubestemt : VilkårsvurderingUtfall() {
data class Vilkår(val henvisninger: Set<JuridiskHenvisning>) : Ubestemt()
}


fun erInnvilget(): Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,36 +13,51 @@ sealed class VilkarsVurdering<Grunnlag : Any> {

sealed class ParagrafVurdering<T : ParagrafGrunnlag> : VilkarsVurdering<T>()

@JvmName("reifiedErAvslått")
inline fun <reified T : ParagrafVurdering<*>> VilkarsVurdering<*>.erAvslått(): Boolean {
return UnwrapOgEllerVisitor.unwrap(this).filterIsInstance<T>().map { it.utfall.erAvslag() }.single()
return UnwrapOgEllerVisitor.unwrap(this).filterIsInstance<T>().map { it.erAvslått() }.single()
}

fun VilkarsVurdering<*>.erAvslått(): Boolean {
return utfall.erAvslag()
}

@JvmName("reifiedErInnvilget")
inline fun <reified T : ParagrafVurdering<*>> VilkarsVurdering<*>.erInnvilget(): Boolean {
return UnwrapOgEllerVisitor.unwrap(this).filterIsInstance<T>().map { it.utfall.erInnvilget() }.single()
return UnwrapOgEllerVisitor.unwrap(this).filterIsInstance<T>().map { it.erInnvilget() }.single()
}

fun VilkarsVurdering<*>.erInnvilget(): Boolean {
return utfall.erInnvilget()
}

@JvmName("reifiedErUbestemt")
inline fun <reified T : ParagrafVurdering<*>> VilkarsVurdering<*>.erUbestemt(): Boolean {
return UnwrapOgEllerVisitor.unwrap(this).filterIsInstance<T>().map { it.utfall.erUbestemt() }.single()
return UnwrapOgEllerVisitor.unwrap(this).filterIsInstance<T>().map { erUbestemt() }.single()
}

fun VilkarsVurdering<*>.erUbestemt(): Boolean {
return utfall.erUbestemt()
}

fun VilkarsVurdering<*>.finnAlleInnvilget(): List<VilkarsVurdering<*>> {
return UnwrapOgEllerVisitor.unwrap(this).filter { it.utfall is VilkårsvurderingUtfall.Innvilget }
return UnwrapOgEllerVisitor.unwrap(this).filter { it.erInnvilget() }
}

fun VilkarsVurdering<*>.finnAlleAvslatte(): List<VilkarsVurdering<*>> {
return UnwrapOgEllerVisitor.unwrap(this).filter { it.utfall is VilkårsvurderingUtfall.Avslag }
return UnwrapOgEllerVisitor.unwrap(this).filter { it.erAvslått() }
}

fun VilkarsVurdering<*>.finnAlleUbestemte(): List<VilkarsVurdering<*>> {
return UnwrapOgEllerVisitor.unwrap(this).filter { it.utfall is VilkårsvurderingUtfall.Ubestemt }
return UnwrapOgEllerVisitor.unwrap(this).filter { it.erUbestemt() }
}

inline fun <reified T : ParagrafVurdering<*>> VilkarsVurdering<*>.erEnesteAvslag(): Boolean {
return erAvslått<T>() && UnwrapOgEllerVisitor.unwrap(this).count { it.utfall.erAvslag() } == 1
return erAvslått<T>() && UnwrapOgEllerVisitor.unwrap(this).count { it.erAvslått() } == 1
}

inline fun <reified T : ParagrafVurdering<*>> VilkarsVurdering<*>.erEnesteUbestemt(): Boolean {
return erUbestemt<T>() && UnwrapOgEllerVisitor.unwrap(this).count { it.utfall.erUbestemt() } == 1
return erUbestemt<T>() && UnwrapOgEllerVisitor.unwrap(this).count { it.erUbestemt() } == 1
}

inline fun <reified T : ParagrafVurdering<*>> VilkarsVurdering<*>.finnVurdering(): T {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import com.fasterxml.jackson.annotation.JsonTypeName
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.BehandlingUtfall
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.EllerAvslått
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.EllerInnvilget
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.EllerUbestemt
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.OgAvslått
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.OgInnvilget
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.OgUbestemt
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.VilkårsvurderingUtfall


Expand All @@ -19,12 +21,18 @@ internal sealed class VilkårsvurderingUtfallDb {
@JsonTypeName("EllerAvslått")
data object EllerAvslått : VilkårsvurderingUtfallDb()

@JsonTypeName("EllerUbestemt")
data object EllerUbestemt : VilkårsvurderingUtfallDb()

@JsonTypeName("EllerInnvilget")
data object EllerInnvilget : VilkårsvurderingUtfallDb()

@JsonTypeName("OgAvslått")
data object OgAvslått : VilkårsvurderingUtfallDb()

@JsonTypeName("OgUbestemt")
data object OgUbestemt : VilkårsvurderingUtfallDb()

@JsonTypeName("OgInnvilget")
data object OgInnvilget : VilkårsvurderingUtfallDb()

Expand Down Expand Up @@ -95,10 +103,18 @@ internal fun VilkårsvurderingUtfall.toDb(): VilkårsvurderingUtfallDb {
VilkårsvurderingUtfallDb.EllerAvslått
}

is OgUbestemt -> {
VilkårsvurderingUtfallDb.OgUbestemt
}

is EllerInnvilget -> {
VilkårsvurderingUtfallDb.EllerInnvilget
}

is EllerUbestemt -> {
VilkårsvurderingUtfallDb.EllerUbestemt
}

is OgAvslått -> {
VilkårsvurderingUtfallDb.OgAvslått
}
Expand All @@ -115,7 +131,7 @@ internal fun VilkårsvurderingUtfall.toDb(): VilkårsvurderingUtfallDb {
VilkårsvurderingUtfallDb.VilkårAvslag(henvisning = henvisninger.toDb())
}

is VilkårsvurderingUtfall.Ubestemt -> {
is VilkårsvurderingUtfall.Ubestemt.Vilkår -> {
VilkårsvurderingUtfallDb.Manuell(henvisning = henvisninger.toDb())
}
}
Expand All @@ -127,6 +143,10 @@ internal fun VilkårsvurderingUtfallDb.toDomain(): VilkårsvurderingUtfall {
EllerAvslått
}

is VilkårsvurderingUtfallDb.EllerUbestemt -> {
EllerUbestemt
}

is VilkårsvurderingUtfallDb.EllerInnvilget -> {
EllerInnvilget
}
Expand All @@ -135,6 +155,10 @@ internal fun VilkårsvurderingUtfallDb.toDomain(): VilkårsvurderingUtfall {
OgAvslått
}

is VilkårsvurderingUtfallDb.OgUbestemt -> {
OgUbestemt
}

is VilkårsvurderingUtfallDb.OgInnvilget -> {
OgInnvilget
}
Expand All @@ -148,7 +172,7 @@ internal fun VilkårsvurderingUtfallDb.toDomain(): VilkårsvurderingUtfall {
}

is VilkårsvurderingUtfallDb.Manuell -> {
VilkårsvurderingUtfall.Ubestemt(henvisninger = henvisning.toDomain())
VilkårsvurderingUtfall.Ubestemt.Vilkår(henvisninger = henvisning.toDomain())
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,3 @@ internal fun Periode.tilUtbetalingsmåneder(utbetalt: Int, landstilknytning: Lan
internal fun Periode.utbetalingsmåneder(utbetalt: Int, landstilknytning: Landstilknytning): Utbetalingsmåneder {
return Utbetalingsmåneder(tilUtbetalingsmåneder(utbetalt, landstilknytning))
}

Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class AvgjørBehandlingUtfallTest {
)

private val avslag = innvilget.copy(utfall = VilkårsvurderingUtfall.Avslag.Vilkår(emptySet()))
private val manuell = innvilget.copy(utfall = VilkårsvurderingUtfall.Ubestemt(emptySet()))
private val manuell = innvilget.copy(utfall = VilkårsvurderingUtfall.Ubestemt.Vilkår(emptySet()))


@Test
Expand Down
Loading

0 comments on commit 64601b5

Please sign in to comment.