Skip to content

Commit

Permalink
Revert "Aggregate information from all behandlinger when creating opp…
Browse files Browse the repository at this point in the history
…gave."

This reverts commit 4d7d7ab
  • Loading branch information
jacob-meidell committed Dec 2, 2024
1 parent d5ef395 commit 4b81b84
Show file tree
Hide file tree
Showing 9 changed files with 93 additions and 428 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,15 @@ import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.god
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Behandling
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Brevopplysninger
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.FullførtBehandling
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Oppgaveopplysninger
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.repository.BehandlingRowMapper
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.repository.toDb
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.repository.toDomain
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.oppgave.model.Oppgave
import no.nav.pensjon.opptjening.omsorgsopptjening.felles.InnlesingId
import no.nav.pensjon.opptjening.omsorgsopptjening.felles.deserializeList
import no.nav.pensjon.opptjening.omsorgsopptjening.felles.mapToJson
import no.nav.pensjon.opptjening.omsorgsopptjening.felles.serialize
import no.nav.pensjon.opptjening.omsorgsopptjening.felles.serializeList
import org.springframework.jdbc.core.ResultSetExtractor
import org.springframework.jdbc.core.RowMapper
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
Expand Down Expand Up @@ -215,54 +214,40 @@ class KontrollbehandlingRepo(
}
}

fun oppdaterMedGodskriv(
fullførtBehandling: FullførtBehandling,
godskrivOpptjening: GodskrivOpptjening.Transient,
referanse: String,
) {
fun oppdaterMedGodskriv(fullførtBehandling: FullførtBehandling, godskrivOpptjening: GodskrivOpptjening.Transient) {
jdbcTemplate.update(
"""update kontrollbehandling set godskriv = to_jsonb(:godskriv::jsonb) where id = :id and referanse = :referanse""",
"""update kontrollbehandling set godskriv = to_jsonb(:godskriv::jsonb) where id = :id""",
MapSqlParameterSource(
mapOf(
"id" to fullførtBehandling.id,
"godskriv" to serialize(godskrivOpptjening),
"referanse" to referanse
"godskriv" to serialize(godskrivOpptjening)
)
)
)
}

fun oppdaterMedBrev(
fullførtBehandling: FullførtBehandling,
brevopplysninger: Brevopplysninger.InfobrevOmsorgsyterForHjelpestønadsmottaker,
referanse: String,
brevopplysninger: Brevopplysninger.InfobrevOmsorgsyterForHjelpestønadsmottaker
) {
jdbcTemplate.update(
"""update kontrollbehandling set brev = to_jsonb(:brev::jsonb) where id = :id and referanse = :referanse""",
"""update kontrollbehandling set brev = to_jsonb(:brev::jsonb) where id = :id""",
MapSqlParameterSource(
mapOf(
"id" to fullførtBehandling.id,
"brev" to serialize(brevopplysninger),
"referanse" to referanse
"brev" to serialize(brevopplysninger)
)
)
)
}

fun oppdaterMedOppgave(oppgave: Oppgave.Transient, referanse: String) {
val sql = if (oppgave.behandlingId != null) {
"""update kontrollbehandling set oppgave = to_jsonb(:oppgave::jsonb) where id = :id and referanse = :referanse"""
} else {
"""update kontrollbehandling set oppgave = to_jsonb(:oppgave::jsonb) where kafkameldingid = :kafkameldingid and referanse = :referanse"""
}
fun oppdaterMedOppgave(fullførtBehandling: FullførtBehandling, oppgaveopplysninger: List<Oppgaveopplysninger>) {
jdbcTemplate.update(
sql,
"""update kontrollbehandling set oppgave = to_jsonb(:oppgave::jsonb) where id = :id""",
MapSqlParameterSource(
mapOf(
"id" to oppgave.behandlingId,
"kafkameldingid" to oppgave.meldingId,
"oppgave" to serialize(oppgave),
"referanse" to referanse
"id" to fullførtBehandling.id,
"oppgave" to serialize(oppgaveopplysninger)
)
)
)
Expand Down Expand Up @@ -322,30 +307,6 @@ class KontrollbehandlingRepo(
).toDomain()
}

fun existsForOmsorgsyterOgÅr(omsorgsyter: String, år: Int, referanse: String): Boolean {
return jdbcTemplate.query(
"""select count(1) as antall from kontrollbehandling where omsorgsyter = :omsorgsyter and omsorgs_ar = :omsorgsar and oppgave is not null and referanse = :referanse""".trimMargin(),
mapOf<String, Any>(
"omsorgsyter" to omsorgsyter,
"omsorgsar" to år,
"referanse" to referanse,
),
ResultSetExtractor { rs -> if (rs.next()) rs.getInt("antall") > 0 else throw RuntimeException("Could not extract resultset") }
)!!
}

fun existsForOmsorgsmottakerOgÅr(omsorgsmottaker: String, år: Int, referanse: String): Boolean {
return jdbcTemplate.query(
"""select count(1) as antall from kontrollbehandling where omsorgsmottaker = :omsorgsmottaker and omsorgs_ar = :omsorgsar and oppgave is not null and referanse = :referanse""".trimMargin(),
mapOf<String, Any>(
"omsorgsmottaker" to omsorgsmottaker,
"omsorgsar" to år,
"referanse" to referanse,
),
ResultSetExtractor { rs -> if (rs.next()) rs.getInt("antall") > 0 else throw RuntimeException("Could not extract resultset") }
)!!
}


internal class KontrollbehandlingRowMapper : RowMapper<Kontrollbehandling> {
override fun mapRow(rs: ResultSet, rowNum: Int): Kontrollbehandling {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.ko
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Behandling
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Brevopplysninger
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.FullførteBehandlinger
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Oppgaveopplysninger
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.VilkårsvurderingFactory
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.oppgave.model.AggregertOppgaveForFullførteBehandlinger
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.persongrunnlag.model.HentPensjonspoengClient
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.persongrunnlag.model.OmsorgsopptjeningsgrunnlagService
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.persongrunnlag.repository.PersongrunnlagRepo
Expand Down Expand Up @@ -67,11 +67,7 @@ class KontrollbehandlingServiceImpl(
).also { fullførteBehandlinger ->
fullførteBehandlinger.håndterUtfall(
innvilget = {
kontrollbehandlingRepo.oppdaterMedGodskriv(
fullførtBehandling = it,
godskrivOpptjening = it.godskrivOpptjening(),
referanse = kontrollbehandling.referanse
)
kontrollbehandlingRepo.oppdaterMedGodskriv(it, it.godskrivOpptjening())
it.hentBrevopplysninger(
hentPensjonspoengForOmsorgsopptjening = hentPensjonspoeng::hentPensjonspoengForOmsorgstype,
hentPensjonspoengForInntekt = hentPensjonspoeng::hentPensjonspoengForInntekt
Expand All @@ -80,38 +76,22 @@ class KontrollbehandlingServiceImpl(
is Brevopplysninger.InfobrevOmsorgsyterForHjelpestønadsmottaker -> {
kontrollbehandlingRepo.oppdaterMedBrev(
fullførtBehandling = it,
brevopplysninger = brevopplysninger,
referanse = kontrollbehandling.referanse,
brevopplysninger = brevopplysninger
)
}

Brevopplysninger.Ingen -> {} //noop
}
}
},
manuell = {
AggregertOppgaveForFullførteBehandlinger(
omsorgsyterHarOppgave = { omsorgsyter, år ->
kontrollbehandlingRepo.existsForOmsorgsyterOgÅr(
omsorgsyter = omsorgsyter,
år = år,
referanse = kontrollbehandling.referanse
)
},
omsorgsmottakerHarOppgave = { omsorgsmottaker, år ->
kontrollbehandlingRepo.existsForOmsorgsmottakerOgÅr(
omsorgsmottaker = omsorgsmottaker,
år = år,
referanse = kontrollbehandling.referanse
)
},
alleOppgaveopplysninger = fullførteBehandlinger.hentOppgaveopplysninger()
).oppgave?.let {
kontrollbehandlingRepo.oppdaterMedOppgave(
oppgave = it,
referanse = kontrollbehandling.referanse,
)
}
manuell = { b ->
//TODO litt mikk for å få dette helt likt som oppgaveservice
b.hentOppgaveopplysninger()
.filterNot { it is Oppgaveopplysninger.Ingen }
.takeIf { it.isNotEmpty() }
?.let {
kontrollbehandlingRepo.oppdaterMedOppgave(b, it)
}
},
avslag = {} //noop,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model

import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.oppgave.model.FullførtBehandlingOppgaveopplysninger
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.oppgave.model.FullførteBehandlingerOppgaveopplysninger
import org.jetbrains.annotations.TestOnly
import java.util.UUID

/**
* [FullførtBehandling] for alle barn omsorgsyter har blitt vurdert omsorgsopptjening for i et gitt omsorgsår.
*/
data class FullførteBehandlinger(
private val behandlinger: List<FullførtBehandling>
) {
val aggregertUtfall = AggregertBehandlingsutfall(behandlinger.map { it.utfall }).utfall()
private val aggregertUtfall = AggregertBehandlingsutfall(behandlinger.map { it.utfall }).utfall()

init {
require(
Expand All @@ -20,26 +15,23 @@ data class FullførteBehandlinger(
require(
behandlinger.isEmpty() || behandlinger.alleOmsorgsytere().count() == 1
) { "Forventet bare behandlinger for en omsorgsyter" }
require(
behandlinger.isEmpty() || behandlinger.alleMeldingIder().count() == 1
) { "Forventer bare fullførte behandlinger med utgangspunkt i samme kafkamelding" }
}

fun innvilget(): FullførtBehandling {
private fun innvilget(): FullførtBehandling {
return behandlinger.single { it.erInnvilget() }
}

fun alleManuelle(): List<FullførtBehandling> {
private fun manuell(): List<FullførtBehandling> {
return behandlinger.filter { it.erManuell() }
}

fun alleAvslåtte(): List<FullførtBehandling> {
private fun avslag(): List<FullførtBehandling> {
return behandlinger.filter { it.erAvslag() }
}

fun håndterUtfall(
innvilget: (behandling: FullførtBehandling) -> Unit,
manuell: (behandlinger: FullførteBehandlinger) -> Unit,
manuell: (behandling: FullførtBehandling) -> Unit,
avslag: () -> Unit,
) {
when (aggregertUtfall) {
Expand All @@ -52,7 +44,7 @@ data class FullførteBehandlinger(
}

AggregertBehandlingUtfall.Manuell -> {
manuell(this)
manuell().forEach { manuell(it) }
}
}
}
Expand Down Expand Up @@ -83,66 +75,34 @@ data class FullførteBehandlinger(
return map { it.omsorgsyter }.distinct().toSet()
}

private fun List<FullførtBehandling>.alleMeldingIder(): Set<UUID> {
return map { it.meldingId }.distinct().toSet()
}

fun statistikk(): FullførteBehandlingerStatistikk {
return FullførteBehandlingerStatistikk(
innvilgetOpptjening = if (aggregertUtfall.erInnvilget()) 1 else 0,
avslåttOpptjening = if (aggregertUtfall.erAvslag()) 1 else 0,
manuellBehandling = if (aggregertUtfall.erManuell()) 1 else 0,
//summerer bare avslagsårsaker for tilfeller hvor aggregert utfall er avslag
summertAvslagPerVilkår = if (aggregertUtfall.erAvslag())
alleAvslåtte()
avslag()
.flatMap { it.avslåtteVilkår() }
.fold(mutableMapOf()) { acc, vilkarsVurdering ->
acc.merge(vilkarsVurdering, 1) { gammel, value -> gammel + value }
acc
} else emptyMap(),
summertManuellPerVilkår = if (aggregertUtfall.erManuell())
alleManuelle()
.flatMap { it.ubestemteVilkår() }
.fold(mutableMapOf()) { acc, vilkarsVurdering ->
summertManuellPerVilkår = if(aggregertUtfall.erManuell())
manuell()
.flatMap { it.ubestemteVilkår()}
.fold(mutableMapOf()) {acc, vilkarsVurdering ->
acc.merge(vilkarsVurdering, 1) { gammel, value -> gammel + value }
acc
} else emptyMap()
)
}

fun meldingId(): UUID {
return behandlinger.alleMeldingIder().single()
}

fun omsorgsyter(): String {
return behandlinger.alleOmsorgsytere().single()
}

fun omsorgsår(): Int {
return behandlinger.alleOmsorgsår().single()
}

fun hentOppgaveopplysninger(): FullførteBehandlingerOppgaveopplysninger {
require(aggregertUtfall.erManuell())
return FullførteBehandlingerOppgaveopplysninger(
omsorgsyter = omsorgsyter(),
omsorgsAr = omsorgsår(),
behandlingOppgaveopplysninger = alleManuelle().map {
FullførtBehandlingOppgaveopplysninger(
behandlingId = it.id,
omsorgsmottaker = it.omsorgsmottaker,
oppgaveopplysninger = it.hentOppgaveopplysninger()
)
},
meldingId = meldingId()
)
}
}

data class FullførteBehandlingerStatistikk(
val innvilgetOpptjening: Int,
val avslåttOpptjening: Int,
val manuellBehandling: Int,
val summertAvslagPerVilkår: Map<VilkarsVurdering<*>, Int>,
val summertManuellPerVilkår: Map<VilkarsVurdering<*>, Int>
)
data class FullførteBehandlingerStatistikk(
val innvilgetOpptjening: Int,
val avslåttOpptjening: Int,
val manuellBehandling: Int,
val summertAvslagPerVilkår: Map<VilkarsVurdering<*>, Int>,
val summertManuellPerVilkår: Map<VilkarsVurdering<*>, Int>
)
}

This file was deleted.

Loading

0 comments on commit 4b81b84

Please sign in to comment.