Skip to content

Commit

Permalink
Hvis omregning for inntektsendring feiler skal behandling flyttes til…
Browse files Browse the repository at this point in the history
… manuell prosesstype
  • Loading branch information
Bjodn committed Dec 6, 2024
1 parent 1e2a187 commit 4813ef3
Show file tree
Hide file tree
Showing 6 changed files with 247 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -193,22 +193,22 @@ class BehandlingDao(
status = rs.getString("status").let { BehandlingStatus.valueOf(it) },
virkningstidspunkt = rs.getString("virkningstidspunkt")?.let { objectMapper.readValue(it) },
utlandstilknytning =
rs
.getString("utlandstilknytning")
?.let { objectMapper.readValue(it) },
rs
.getString("utlandstilknytning")
?.let { objectMapper.readValue(it) },
boddEllerArbeidetUtlandet =
rs
.getString("bodd_eller_arbeidet_utlandet")
?.let { objectMapper.readValue(it) },
rs
.getString("bodd_eller_arbeidet_utlandet")
?.let { objectMapper.readValue(it) },
kommerBarnetTilgode = kommerBarnetTilGodeDao.hentKommerBarnetTilGode(id),
prosesstype = rs.getString("prosesstype").let { Prosesstype.valueOf(it) },
kilde = rs.getString("kilde").let { Vedtaksloesning.valueOf(it) },
sendeBrev = rs.getBoolean("sende_brev"),
opphoerFraOgMed = rs.getString("opphoer_fom")?.let { objectMapper.readValue(it) },
tidligereFamiliepleier =
rs
.getString("tidligere_familiepleier")
?.let { objectMapper.readValue(it) },
rs
.getString("tidligere_familiepleier")
?.let { objectMapper.readValue(it) },
erSluttbehandling = rs.getBoolean("omgjoering_sluttbehandling_utland"),
)
}
Expand Down Expand Up @@ -316,7 +316,8 @@ class BehandlingDao(
kommentar: String,
) = connectionAutoclosing.hentConnection {
with(it) {
val stmt = prepareStatement("UPDATE behandling SET aarsak_til_avbrytelse = ?, kommentar_til_avbrytelse = ? WHERE id = ?")
val stmt =
prepareStatement("UPDATE behandling SET aarsak_til_avbrytelse = ?, kommentar_til_avbrytelse = ? WHERE id = ?")

stmt.setString(1, aarsakTilAvbrytelse.name)
stmt.setString(2, kommentar)
Expand Down Expand Up @@ -481,7 +482,8 @@ class BehandlingDao(
}
}

private fun ResultSet.behandlingsListe(): List<Behandling> = toList { tilBehandling(getString("behandlingstype")) }.filterNotNull()
private fun ResultSet.behandlingsListe(): List<Behandling> =
toList { tilBehandling(getString("behandlingstype")) }.filterNotNull()

private fun ResultSet.tilBehandling(key: String?) =
when (key) {
Expand Down Expand Up @@ -531,6 +533,16 @@ class BehandlingDao(
statement.executeUpdate()
}
}

fun endreProsesstype(behandlingId: UUID, ny: Prosesstype) = connectionAutoclosing.hentConnection {
with(it) {
val statement = prepareStatement("UPDATE behandling SET prosesstype = ? WHERE id = ?")
statement.setString(1, ny.name)
statement.setObject(2, behandlingId)
statement.executeUpdate()
}
}

}

fun ResultSet.somLocalDateTimeUTC(kolonne: String) = getTidspunkt(kolonne).toLocalDatetimeUTC()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import no.nav.etterlatte.libs.common.behandling.DetaljertBehandling
import no.nav.etterlatte.libs.common.behandling.JaNei
import no.nav.etterlatte.libs.common.behandling.KommerBarnetTilgode
import no.nav.etterlatte.libs.common.behandling.Persongalleri
import no.nav.etterlatte.libs.common.behandling.Prosesstype
import no.nav.etterlatte.libs.common.behandling.RedigertFamilieforhold
import no.nav.etterlatte.libs.common.behandling.Revurderingaarsak
import no.nav.etterlatte.libs.common.behandling.SakMedBehandlinger
Expand Down Expand Up @@ -71,84 +72,84 @@ import java.util.UUID

class BehandlingFinnesIkkeException(
message: String,
) : Exception(message)
): Exception(message)

class KravdatoMaaFinnesHvisBosattutland(
message: String,
) : UgyldigForespoerselException(code = "BOSATTUTLAND_MAA_HA_KRAVDATO", detail = message)
): UgyldigForespoerselException(code = "BOSATTUTLAND_MAA_HA_KRAVDATO", detail = message)

class VirkningstidspunktMaaHaUtenlandstilknytning(
message: String,
) : UgyldigForespoerselException(code = "VIRK_MAA_HA_UTENLANDSTILKNYTNING", detail = message)
): UgyldigForespoerselException(code = "VIRK_MAA_HA_UTENLANDSTILKNYTNING", detail = message)

class VirkningstidspunktKanIkkeVaereEtterOpphoer(
virk: YearMonth?,
opphoerVirk: YearMonth?,
) : UgyldigForespoerselException(
code = "VIRK_KAN_IKKE_VAERE_ETTER_OPPHOER",
detail = "Virkningstidspunkt ($virk) kan ikke være etter opphør ($opphoerVirk)",
)
): UgyldigForespoerselException(
code = "VIRK_KAN_IKKE_VAERE_ETTER_OPPHOER",
detail = "Virkningstidspunkt ($virk) kan ikke være etter opphør ($opphoerVirk)",
)

class VirkFoerIverksattVirk(
virk: YearMonth,
foersteVirk: YearMonth,
) : UgyldigForespoerselException(
code = "VIRK_FOER_FOERSTE_IVERKSATT_VIRK",
detail = "Virkningstidspunktet du har satt ($virk) er før det første iverksatte virkningstidspunktet ($foersteVirk)",
)
): UgyldigForespoerselException(
code = "VIRK_FOER_FOERSTE_IVERKSATT_VIRK",
detail = "Virkningstidspunktet du har satt ($virk) er før det første iverksatte virkningstidspunktet ($foersteVirk)",
)

class VirkFoerOmsKildePesys :
class VirkFoerOmsKildePesys:
UgyldigForespoerselException(
code = "VIRK_FOER_REFORM_MED_OPPRINNELSE_PESYS",
detail =
"Denne saken er overført fra Pesys. Ved revurdering før 01.01.2024 må det gjøres revurdering i Pesys for perioden før og i Gjenny for perioden etter.",
"Denne saken er overført fra Pesys. Ved revurdering før 01.01.2024 må det gjøres revurdering i Pesys for perioden før og i Gjenny for perioden etter.",
)

class BehandlingNotFoundException(
behandlingId: UUID,
) : IkkeFunnetException(
code = "FANT_IKKE_BEHANDLING",
detail = "Kunne ikke finne ønsket behandling, id: $behandlingId",
)
): IkkeFunnetException(
code = "FANT_IKKE_BEHANDLING",
detail = "Kunne ikke finne ønsket behandling, id: $behandlingId",
)

class BehandlingKanIkkeAvbrytesException(
behandlingStatus: BehandlingStatus,
) : UgyldigForespoerselException(
code = "BEHANDLING_KAN_IKKE_AVBRYTES",
detail = "Behandlingen kan ikke avbrytes, status: $behandlingStatus",
)
): UgyldigForespoerselException(
code = "BEHANDLING_KAN_IKKE_AVBRYTES",
detail = "Behandlingen kan ikke avbrytes, status: $behandlingStatus",
)

class PersongalleriFinnesIkkeException :
class PersongalleriFinnesIkkeException:
IkkeFunnetException(
code = "FANT_IKKE_PERSONGALLERI",
detail = "Kunne ikke finne persongalleri",
)

class KanIkkeEndreSendeBrevForFoerstegangsbehandling :
class KanIkkeEndreSendeBrevForFoerstegangsbehandling:
UgyldigForespoerselException(
"KAN_IKKE_ENDRE_SEND_BREV",
"Kan ikke endre send brev for førstegangsbehandling, skal alltid sendes",
)

class KanIkkeOppretteRevurderingUtenIverksattFoerstegangsbehandling :
class KanIkkeOppretteRevurderingUtenIverksattFoerstegangsbehandling:
UgyldigForespoerselException(
"KAN_IKKE_OPPRETTE_REVURDERING_MANGLER_FOERSTEGANGSBEHANDLING_IVERKSATT",
"Kan ikke opprette revurdering når man mangler føstegangsbehandling med virkningstidspunkt",
)

class VilkaarMaaFinnesHvisViderefoertOpphoer :
class VilkaarMaaFinnesHvisViderefoertOpphoer:
UgyldigForespoerselException(
"VIDEREFOERT_OPPHOER_MAA_HA_VILKAAR",
"Vilkår må angis hvis opphør skal videreføres",
)

class PleieforholdMaaStarteFoerDetOpphoerer :
class PleieforholdMaaStarteFoerDetOpphoerer:
UgyldigForespoerselException(
code = "PLEIEFORHOLD_MAA_STARTE_FOER_DET_OPPHOERER",
detail = "Pleieforholdet må ha startdato som er før opphørsdato",
)

class PleieforholdMaaHaStartOgOpphoer :
class PleieforholdMaaHaStartOgOpphoer:
UgyldigForespoerselException(
code = "PLEIEFORHOLD_MAA_HA_START_OG_OPPHOER",
detail = "Pleieforholdet må ha både startdato og opphørsdato",
Expand Down Expand Up @@ -265,6 +266,8 @@ interface BehandlingService {

fun hentAapenOmregning(sakId: SakId): Revurdering?

fun endreProsesstype(behandlingId: UUID, ny: Prosesstype)

fun oppdaterTidligereFamiliepleier(
behandlingId: UUID,
tidligereFamiliepleier: TidligereFamiliepleier,
Expand All @@ -285,7 +288,7 @@ internal class BehandlingServiceImpl(
private val oppgaveService: OppgaveService,
private val grunnlagService: GrunnlagServiceImpl,
private val beregningKlient: BeregningKlient,
) : BehandlingService {
): BehandlingService {
private val logger = LoggerFactory.getLogger(this::class.java)

private fun hentBehandlingForId(id: UUID) =
Expand Down Expand Up @@ -643,7 +646,8 @@ internal class BehandlingServiceImpl(
}
}

override fun hentUtlandstilknytningForSak(sakId: SakId): Utlandstilknytning? = hentBehandlingerForSakId(sakId).hentUtlandstilknytning()
override fun hentUtlandstilknytningForSak(sakId: SakId): Utlandstilknytning? =
hentBehandlingerForSakId(sakId).hentUtlandstilknytning()

override fun lagreOpphoerFom(
behandlingId: UUID,
Expand Down Expand Up @@ -843,7 +847,10 @@ internal class BehandlingServiceImpl(
}

if (virkningstidspunktErEtterOpphoerFraOgMed(behandling.virkningstidspunkt?.dato, viderefoertOpphoer.dato)) {
throw VirkningstidspunktKanIkkeVaereEtterOpphoer(behandling.virkningstidspunkt?.dato, viderefoertOpphoer.dato)
throw VirkningstidspunktKanIkkeVaereEtterOpphoer(
behandling.virkningstidspunkt?.dato,
viderefoertOpphoer.dato
)
}

behandling
Expand Down Expand Up @@ -890,6 +897,11 @@ internal class BehandlingServiceImpl(
it.status != BehandlingStatus.AVBRUTT && it.status != BehandlingStatus.IVERKSATT
}

override fun endreProsesstype(behandlingId: UUID, ny: Prosesstype) {
behandlingDao.endreProsesstype(behandlingId, ny)
}


override fun oppdaterTidligereFamiliepleier(
behandlingId: UUID,
tidligereFamiliepleier: TidligereFamiliepleier,
Expand All @@ -915,7 +927,8 @@ internal class BehandlingServiceImpl(
override fun hentTidligereFamiliepleier(behandlingId: UUID): TidligereFamiliepleier? =
behandlingDao.hentTidligereFamiliepleier(behandlingId)

override fun hentAapneBehandlingerForSak(sakId: SakId): List<BehandlingOgSak> = behandlingDao.hentAapneBehandlinger(listOf(sakId))
override fun hentAapneBehandlingerForSak(sakId: SakId): List<BehandlingOgSak> =
behandlingDao.hentAapneBehandlinger(listOf(sakId))

private fun hentBehandlingOrThrow(behandlingId: UUID) =
behandlingDao.hentBehandling(behandlingId)
Expand Down Expand Up @@ -967,7 +980,7 @@ internal class BehandlingServiceImpl(
opplysningsType = Opplysningstype.PERSONGALLERI_V1,
kilde = Grunnlagsopplysning.Saksbehandler.create(brukerTokenInfo.ident()),
opplysning =
transform(forrigePersonGalleri).toJsonNode(),
transform(forrigePersonGalleri).toJsonNode(),
periode = null,
),
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.etterlatte.behandling.omregning

import no.nav.etterlatte.behandling.BehandlingService
import no.nav.etterlatte.libs.common.behandling.Prosesstype
import no.nav.etterlatte.libs.common.behandling.Revurderingaarsak
import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException
import no.nav.etterlatte.libs.common.oppgave.OppgaveType
Expand All @@ -14,6 +15,7 @@ import no.nav.etterlatte.libs.ktor.token.Fagsaksystem
import no.nav.etterlatte.libs.ktor.token.HardkodaSystembruker
import no.nav.etterlatte.logger
import no.nav.etterlatte.oppgave.OppgaveService
import java.util.UUID

class OmregningService(
private val behandlingService: BehandlingService,
Expand Down Expand Up @@ -43,19 +45,13 @@ class OmregningService(
}

behandlingService.hentAapenOmregning(request.sakId)?.let { omregning ->
if (omregning.revurderingsaarsak == Revurderingaarsak.INNTEKTSENDRING) {
val oppgave =
oppgaveService
.hentOppgaverForReferanse(omregning.id.toString())
.singleOrNull { it.type === OppgaveType.INNTEKTSOPPLYSNING }
?: throw InternfeilException("Kan ikke eksistere en INNTEKTSENDRING uten oppgave")
when (omregning.revurderingsaarsak) {
Revurderingaarsak.INNTEKTSENDRING -> endreTilManuell(omregning.id)

if (oppgave.saksbehandler?.navn == Fagsaksystem.EY.navn) {
oppgaveService.fjernSaksbehandler(oppgave.id)
}
} else {
if (omregning.status.kanAvbrytes()) {
behandlingService.avbrytBehandling(omregning.id, bruker)
else -> {
if (omregning.status.kanAvbrytes()) {
behandlingService.avbrytBehandling(omregning.id, bruker)
}
}
}
}
Expand All @@ -64,6 +60,19 @@ class OmregningService(
omregningDao.oppdaterKjoering(request)
}

private fun endreTilManuell(behandlingId: UUID) {
val oppgave =
oppgaveService
.hentOppgaverForReferanse(behandlingId.toString())
.singleOrNull { it.type === OppgaveType.REVURDERING }
?: throw InternfeilException("Kan ikke eksistere en INNTEKTSENDRING uten oppgave")

if (oppgave.saksbehandler?.navn == Fagsaksystem.EY.navn) {
oppgaveService.fjernSaksbehandler(oppgave.id)
}
behandlingService.endreProsesstype(behandlingId, Prosesstype.MANUELL)
}

fun kjoeringFullfoert(request: LagreKjoeringRequest) {
if (!listOf(KjoeringStatus.FERDIGSTILT, KjoeringStatus.FERDIGSTILT_FATTET).contains(request.status)) {
throw IllegalStateException("Prøver å lagre at kjøring er fullført, men status er ikke ferdigstilt.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,18 +212,18 @@ internal class BehandlingDaoTest(
val gyldighetsproevingBehandling =
lagretPersongalleriBehandling.copy(
gyldighetsproeving =
GyldighetsResultat(
resultat = VurderingsResultat.OPPFYLT,
vurderinger =
listOf(
VurdertGyldighet(
navn = GyldighetsTyper.INNSENDER_ER_FORELDER,
resultat = VurderingsResultat.OPPFYLT,
basertPaaOpplysninger = "innsenderfnr",
),
),
vurdertDato = Tidspunkt.now().toLocalDatetimeUTC(),
GyldighetsResultat(
resultat = VurderingsResultat.OPPFYLT,
vurderinger =
listOf(
VurdertGyldighet(
navn = GyldighetsTyper.INNSENDER_ER_FORELDER,
resultat = VurderingsResultat.OPPFYLT,
basertPaaOpplysninger = "innsenderfnr",
),
),
vurdertDato = Tidspunkt.now().toLocalDatetimeUTC(),
),
status = BehandlingStatus.OPPRETTET,
)

Expand Down Expand Up @@ -639,4 +639,25 @@ internal class BehandlingDaoTest(

behandling?.opphoerFraOgMed shouldBe YearMonth.of(2024, 6)
}

@Test
fun `endreProsesstype skal oppdatere behandling med ny prosesstype`() {
val sak = sakRepo.opprettSak("123", SakType.BARNEPENSJON, Enheter.defaultEnhet.enhetNr).id
val opprettBehandling =
opprettBehandling(
type = BehandlingType.REVURDERING,
revurderingAarsak = Revurderingaarsak.INNTEKTSENDRING,
sakId = sak,
status = BehandlingStatus.OPPRETTET,
prosesstype = Prosesstype.AUTOMATISK
)

behandlingRepo.opprettBehandling(opprettBehandling)

behandlingRepo.endreProsesstype(opprettBehandling.id, Prosesstype.MANUELL)

val behandling = behandlingRepo.hentBehandling(opprettBehandling.id)

behandling?.prosesstype shouldBe Prosesstype.MANUELL
}
}
Loading

0 comments on commit 4813ef3

Please sign in to comment.