Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ny behandling etteroppgjoer #7079

Merged
merged 9 commits into from
Feb 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions apps/etterlatte-behandling/src/main/kotlin/Application.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import no.nav.etterlatte.behandling.behandlingVedtakRoute
import no.nav.etterlatte.behandling.behandlinginfo.behandlingInfoRoutes
import no.nav.etterlatte.behandling.behandlingsstatusRoutes
import no.nav.etterlatte.behandling.bosattutland.bosattUtlandRoutes
import no.nav.etterlatte.behandling.etteroppgjoer.etteroppgjoerRoutes
import no.nav.etterlatte.behandling.generellbehandling.generellbehandlingRoutes
import no.nav.etterlatte.behandling.klage.klageRoutes
import no.nav.etterlatte.behandling.omregning.migreringRoutes
Expand Down Expand Up @@ -171,6 +172,7 @@ private fun Route.settOppRoutes(applicationContext: ApplicationContext) {
featureToggleService = applicationContext.featureToggleService,
)
tilbakekrevingRoutes(service = applicationContext.tilbakekrevingService)
etteroppgjoerRoutes(service = applicationContext.etteroppgjoerService)
behandlingRoutes(
behandlingService = applicationContext.behandlingService,
gyldighetsproevingService = applicationContext.gyldighetsproevingService,
Expand Down Expand Up @@ -272,6 +274,9 @@ private fun Route.settOppTilganger(
harTilgangTilTilbakekreving = { tilbakekrevingId, saksbehandlerMedRoller ->
tilgangService.harTilgangTilTilbakekreving(tilbakekrevingId, saksbehandlerMedRoller)
}
harTilgangTilEtteroppgjoer = { etteroppgjoerId, saksbehandlerMedRoller ->
tilgangService.harTilgangTilEtteroppgjoer(etteroppgjoerId, saksbehandlerMedRoller)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package no.nav.etterlatte.behandling.etteroppgjoer

import no.nav.etterlatte.common.ConnectionAutoclosing
import no.nav.etterlatte.libs.common.Enhetsnummer
import no.nav.etterlatte.libs.common.feilhaandtering.krev
import no.nav.etterlatte.libs.common.sak.Sak
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.common.tidspunkt.getTidspunkt
import no.nav.etterlatte.libs.common.tidspunkt.setTidspunkt
import no.nav.etterlatte.libs.database.setSakId
import no.nav.etterlatte.libs.database.singleOrNull
import java.sql.ResultSet
import java.util.UUID

class EtteroppgjoerDao(
private val connectionAutoclosing: ConnectionAutoclosing,
) {
fun hentEtteroppgjoer(behandlingId: UUID): EtteroppgjoerBehandling? =
connectionAutoclosing.hentConnection {
with(it) {
val statement =
prepareStatement(
"""
SELECT t.id, t.sak_id, s.saktype, s.fnr, s.enhet, t.opprettet, t.status
FROM etteroppgjoer_behandling t INNER JOIN sak s on t.sak_id = s.id
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mangler vi aar fra EtteroppgjoerBehandling?

WHERE t.id = ?
""".trimIndent(),
)
statement.setObject(1, behandlingId)
statement.executeQuery().singleOrNull { toEtteroppgjoer() }
}
}

fun lagreEtteroppgjoer(etteroppgjoer: EtteroppgjoerBehandling) =
connectionAutoclosing.hentConnection {
with(it) {
val statement =
prepareStatement(
"""
INSERT INTO etteroppgjoer_behandling(
id, status, sak_id, opprettet
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mangler vi aar fra EtteroppgjoerBehandling?

)
VALUES (?, ?, ?, ?)
ON CONFLICT (id) DO UPDATE SET
status = excluded.status
""".trimIndent(),
)
statement.setObject(1, etteroppgjoer.id)
statement.setString(2, etteroppgjoer.status)
statement.setSakId(3, etteroppgjoer.sak.id)
statement.setTidspunkt(4, etteroppgjoer.opprettet)
statement.executeUpdate().also {
krev(it == 1) {
"Kunne ikke lagre forbehandling etteroppgjør for sakid ${etteroppgjoer.sak.id}"
}
}
}
}

private fun ResultSet.toEtteroppgjoer(): EtteroppgjoerBehandling =
EtteroppgjoerBehandling(
id = getString("id").let { UUID.fromString(it) },
sak =
Sak(
id = SakId(getLong("sak_id")),
sakType = enumValueOf(getString("saktype")),
ident = getString("fnr"),
enhet = Enhetsnummer(getString("enhet")),
),
opprettet = getTidspunkt("opprettet"),
status = getString("status"),
aar = 2024,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package no.nav.etterlatte.behandling.etteroppgjoer

import io.ktor.http.HttpStatusCode
import io.ktor.server.application.call
import io.ktor.server.response.respond
import io.ktor.server.routing.Route
import io.ktor.server.routing.get
import io.ktor.server.routing.post
import io.ktor.server.routing.route
import no.nav.etterlatte.libs.common.sak.Sak
import no.nav.etterlatte.libs.common.tidspunkt.Tidspunkt
import no.nav.etterlatte.libs.ktor.route.ETTEROPPGJOER_CALL_PARAMETER
import no.nav.etterlatte.libs.ktor.route.SAKID_CALL_PARAMETER
import no.nav.etterlatte.libs.ktor.route.etteroppgjoerId
import no.nav.etterlatte.libs.ktor.route.sakId
import no.nav.etterlatte.tilgangsstyring.kunSkrivetilgang
import java.util.UUID

fun Route.etteroppgjoerRoutes(service: EtteroppgjoerService) {
route("/api/etteroppgjoer/{$ETTEROPPGJOER_CALL_PARAMETER}") {
get {
kunSkrivetilgang {
val etteroppgjoer = service.hentEtteroppgjoer(etteroppgjoerId)
call.respond(etteroppgjoer)
}
}
}

route("/etteroppgjoer/{$SAKID_CALL_PARAMETER}") {
post {
kunSkrivetilgang {
service.opprettEtteroppgjoer(sakId)
call.respond(HttpStatusCode.OK)
}
}
}
}

data class Etteroppgjoer(
val behandling: EtteroppgjoerBehandling,
val opplysninger: EtteroppgjoerOpplysninger,
)

data class EtteroppgjoerBehandling(
val id: UUID,
// val referanse: String, TODO en referanse/id til en hendelse el.
val status: String, // TODO enum
val sak: Sak,
val aar: Int,
val opprettet: Tidspunkt,
)

data class EtteroppgjoerOpplysninger(
val skatt: OpplysnignerSkatt,
val ainntekt: AInntekt,
// TODO..
)

data class OpplysnignerSkatt(
val aarsinntekt: Int,
)

data class AInntekt(
val inntektsmaaneder: List<AInntektMaaned>,
)

data class AInntektMaaned(
val maaned: String,
val summertBeloep: Int,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package no.nav.etterlatte.behandling.etteroppgjoer

import io.ktor.server.plugins.NotFoundException
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.libs.common.feilhaandtering.IkkeFunnetException
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.common.tidspunkt.Tidspunkt
import no.nav.etterlatte.sak.SakLesDao
import java.util.UUID

class EtteroppgjoerService(
private val dao: EtteroppgjoerDao,
private val sakDao: SakLesDao,
) {
fun hentEtteroppgjoer(behandlingId: UUID): Etteroppgjoer {
val etteroppgjoerBehandling =
inTransaction {
dao.hentEtteroppgjoer(behandlingId)
} ?: throw IkkeFunnetException(
code = "MANGLER_FORBEHANDLING_ETTEROPPGJOER",
detail = "Fant ikke forbehandling etteroppgjør $behandlingId",
)

// TODO egen tabell? I beregning?
val opplysninger =
EtteroppgjoerOpplysninger(
skatt =
OpplysnignerSkatt(
aarsinntekt = 200000,
),
ainntekt =
AInntekt(
inntektsmaaneder =
listOf(
AInntektMaaned(
maaned = "Januar",
summertBeloep = 150000,
),
AInntektMaaned(
maaned = "Januar",
summertBeloep = 150000,
),
),
),
)

return Etteroppgjoer(
behandling = etteroppgjoerBehandling,
opplysninger = opplysninger,
)
}

fun opprettEtteroppgjoer(sakId: SakId) {
inTransaction {
val sak = sakDao.hentSak(sakId) ?: throw NotFoundException("Fant ikke sak med id=$sakId")

// TODO skal opplysninger mottas eller hentes her?

val ny =
EtteroppgjoerBehandling(
id = UUID.randomUUID(),
status = "opprettet",
sak = sak,
aar = 2024,
opprettet = Tidspunkt.now(),
)

dao.lagreEtteroppgjoer(ny)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ import no.nav.etterlatte.behandling.behandlinginfo.BehandlingInfoService
import no.nav.etterlatte.behandling.bosattutland.BosattUtlandDao
import no.nav.etterlatte.behandling.bosattutland.BosattUtlandService
import no.nav.etterlatte.behandling.doedshendelse.DoedshendelseReminderService
import no.nav.etterlatte.behandling.etteroppgjoer.EtteroppgjoerDao
import no.nav.etterlatte.behandling.etteroppgjoer.EtteroppgjoerService
import no.nav.etterlatte.behandling.generellbehandling.GenerellBehandlingDao
import no.nav.etterlatte.behandling.generellbehandling.GenerellBehandlingService
import no.nav.etterlatte.behandling.hendelse.HendelseDao
Expand Down Expand Up @@ -334,6 +336,7 @@ internal class ApplicationContext(
val gjenopprettingMetrikkerDao = GjenopprettingMetrikkerDao(dataSource)
val klageDao = KlageDaoImpl(autoClosingDatabase)
val tilbakekrevingDao = TilbakekrevingDao(autoClosingDatabase)
val etteroppgjoerDao = EtteroppgjoerDao(autoClosingDatabase)
val behandlingInfoDao = BehandlingInfoDao(autoClosingDatabase)
val bosattUtlandDao = BosattUtlandDao(autoClosingDatabase)
val saksbehandlerInfoDao = SaksbehandlerInfoDao(autoClosingDatabase)
Expand Down Expand Up @@ -618,6 +621,12 @@ internal class ApplicationContext(
tilbakekrevinghendelser = tilbakekrevingHendelserService,
)

val etteroppgjoerService =
EtteroppgjoerService(
dao = etteroppgjoerDao,
sakDao = sakLesDao,
)

val saksbehandlerJobService = SaksbehandlerJobService(saksbehandlerInfoDao, navAnsattKlient, axsysKlient)

val aktivitetspliktOppgaveUnntakUtloeperJobService =
Expand Down
Loading