Skip to content

Commit

Permalink
Fix innlesing av journalpostId fra tilbakekrevingsvedtak
Browse files Browse the repository at this point in the history
  • Loading branch information
hestad committed Feb 10, 2025
1 parent e9a2465 commit 87b8f5c
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package dokument.domain.hendelser

import dokument.domain.Dokument
import dokument.domain.DokumentHendelser
import no.nav.su.se.bakover.common.journal.JournalpostId
import no.nav.su.se.bakover.common.persistence.SessionContext
import no.nav.su.se.bakover.hendelse.domain.DefaultHendelseMetadata
import no.nav.su.se.bakover.hendelse.domain.HendelseFil
Expand Down Expand Up @@ -43,12 +44,34 @@ interface DokumentHendelseRepo {
dokumentId: UUID,
sessionContext: SessionContext? = null,
): Dokument.MedMetadata?

fun hentHendelse(hendelseId: HendelseId, sessionContext: SessionContext? = null): DokumentHendelse?
fun hentFilFor(hendelseId: HendelseId, sessionContext: SessionContext? = null): HendelseFil?
fun hentHendelseOgFilFor(hendelseId: HendelseId, sessionContext: SessionContext? = null): Pair<DokumentHendelse?, HendelseFil?>
fun hentHendelseOgFilForDokumentId(dokumentId: UUID, sessionContext: SessionContext? = null): Pair<DokumentHendelse?, HendelseFil?>
fun hentHendelseOgFilFor(
hendelseId: HendelseId,
sessionContext: SessionContext? = null,
): Pair<DokumentHendelse?, HendelseFil?>

fun hentHendelseOgFilForDokumentId(
dokumentId: UUID,
sessionContext: SessionContext? = null,
): Pair<DokumentHendelse?, HendelseFil?>

fun hentHendelseForDokumentId(dokumentId: UUID, sessionContext: SessionContext? = null): DokumentHendelse?
fun hentHendelseForRelatertHendelseId(relatertHendelseId: HendelseId, sessionContext: SessionContext? = null): DokumentHendelse?
fun hentVedtaksbrevdatoForSakOgVedtakId(sakId: UUID, vedtakId: UUID, sessionContext: SessionContext? = null): LocalDate?
fun hentHendelseForRelatertHendelseId(
relatertHendelseId: HendelseId,
sessionContext: SessionContext? = null,
): DokumentHendelse?

fun hentVedtaksbrevdatoForSakOgVedtakId(
sakId: UUID,
vedtakId: UUID,
sessionContext: SessionContext? = null,
): LocalDate?

fun hentJournalpostIdForSakOgVedtakId(
sakId: UUID,
vedtakId: UUID,
sessionContext: SessionContext? = null,
): JournalpostId?
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import dokument.domain.hendelser.JournalførtDokument
import dokument.domain.hendelser.JournalførtDokumentHendelse
import no.nav.su.se.bakover.common.infrastructure.persistence.PostgresSessionContext.Companion.withOptionalSession
import no.nav.su.se.bakover.common.infrastructure.persistence.hent
import no.nav.su.se.bakover.common.journal.JournalpostId
import no.nav.su.se.bakover.common.persistence.SessionContext
import no.nav.su.se.bakover.common.persistence.SessionFactory
import no.nav.su.se.bakover.dokument.infrastructure.database.DistribuertDokumentHendelseDbJson.Companion.dataDbJson
Expand Down Expand Up @@ -245,6 +246,30 @@ class DokumentHendelsePostgresRepo(
}
}
}

override fun hentJournalpostIdForSakOgVedtakId(
sakId: UUID,
vedtakId: UUID,
sessionContext: SessionContext?,
): JournalpostId? {
return sessionContext.withOptionalSession(sessionFactory) {
// generertDokumentJson er lagret som en string (escaped json)
"""
select (h1.data->>'journalpostId') as journalpostId
from hendelse h1
join hendelse h2 on (h1.data->>'relaterteHendelse')::uuid = h2.hendelseId
where h1.sakid = :sakId
and h1.type = '$JournalførtDokument'
and (h2.data->'dokumentMeta'->>'vedtakId') = :vedtakId
""".trimIndent().hent(
// vedtakId: Vi gjør en string-comparison, så slipper vi kaste til ::uuid
mapOf("sakId" to sakId, "vedtakId" to vedtakId.toString()),
it,
) {
JournalpostId(it.string("journalpostId"))
}
}
}
}

private fun PersistertHendelse.toDokumentHendelse(): DokumentHendelse {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class DokumentHendelsePostgresRepoTest {
relaterteHendelse = relaterteHendelse,
generertDokumentJson = """{
"personalia": {
"dato": "2021-02-01"
"dato": "01.02.2021"
}
}
""".trimIndent(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import kotlinx.coroutines.runBlocking
import no.nav.su.se.bakover.common.domain.PdfA
import no.nav.su.se.bakover.common.domain.attestering.Attestering
import no.nav.su.se.bakover.common.ident.NavIdentBruker
import no.nav.su.se.bakover.common.journal.JournalpostId
import no.nav.su.se.bakover.common.persistence.SessionFactory
import no.nav.su.se.bakover.common.tid.Tidspunkt
import no.nav.su.se.bakover.domain.klage.AvsluttetKlage
Expand Down Expand Up @@ -326,9 +327,9 @@ class KlageServiceImpl(
distribueringsadresse = null,
)

val journalpostIdForVedtak = vedtakService.hentJournalpostId(oversendtKlage.vilkårsvurderinger.vedtakId)
val journalpostIdForVedtak = hentJournalpostIdForVedtakId(sakId, vedtakId)
?: return KunneIkkeOversendeKlage.FantIkkeJournalpostIdKnyttetTilVedtaket.left().onLeft {
log.error("Kunne ikke iverksette klage ${oversendtKlage.id} fordi vi ikke fant journalpostId til vedtak ${oversendtKlage.vilkårsvurderinger.vedtakId} (kan tyde på at klagen er knyttet til et vedtak vi ikke har laget brev for eller at databasen er i en ugyldig tilstand.)")
log.error("Kunne ikke iverksette klage ${oversendtKlage.id} fordi vi ikke fant journalpostId til vedtak $vedtakId (kan tyde på at klagen er knyttet til et vedtak vi ikke har laget brev for eller at databasen er i en ugyldig tilstand.)")
}

class KunneIkkeOversendeTilKlageinstansEx : RuntimeException()
Expand Down Expand Up @@ -423,7 +424,9 @@ class KlageServiceImpl(
(klage as? KanGenerereBrevutkast) ?: return KunneIkkeLageBrevutkast.FeilVedBrevRequest(
KunneIkkeLageBrevKommandoForKlage.UgyldigTilstand(fra = klage::class),
).left()
val vedtakId = klage.vilkårsvurderinger?.vedtakId ?: return KunneIkkeLageBrevutkast.FeilVedBrevRequest(KunneIkkeLageBrevKommandoForKlage.UgyldigTilstand(klage::class)).left()
val vedtakId = klage.vilkårsvurderinger?.vedtakId ?: return KunneIkkeLageBrevutkast.FeilVedBrevRequest(
KunneIkkeLageBrevKommandoForKlage.UgyldigTilstand(klage::class),
).left()
val vedtaksbrevdato = hentVedtaksbrevDatoForKlage(sakId, vedtakId, klageId)
?: run {
log.error("Kunne ikke generere brevutkast for sak. Fant ikke vedtaksbrevdato for sak $sakId og vedtakId $vedtakId")
Expand Down Expand Up @@ -452,6 +455,11 @@ class KlageServiceImpl(
)
}

private fun hentJournalpostIdForVedtakId(sakId: UUID, vedtakId: UUID): JournalpostId? {
return vedtakService.hentJournalpostId(vedtakId)
?: dokumentHendelseRepo.hentJournalpostIdForSakOgVedtakId(sakId, vedtakId)
}

override fun avslutt(
klageId: KlageId,
saksbehandler: NavIdentBruker.Saksbehandler,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,9 @@ internal class OversendKlageTest {
vedtakServiceMock = mock {
on { hentJournalpostId(any()) } doReturn null
},
dokumentHendelseRepo = mock {
on { hentJournalpostIdForSakOgVedtakId(any(), any(), anyOrNull()) } doReturn null
},
)
val attestant = NavIdentBruker.Attestant("s2")
mocks.service.oversend(
Expand All @@ -226,6 +229,7 @@ internal class OversendKlageTest {
anyOrNull(),
)
verify(mocks.vedtakServiceMock).hentJournalpostId(argThat { it shouldBe klage.vilkårsvurderinger.vedtakId })
verify(mocks.dokumentHendelseRepo).hentJournalpostIdForSakOgVedtakId(any(), any(), anyOrNull())
mocks.verifyNoMoreInteractions()
}

Expand Down

0 comments on commit 87b8f5c

Please sign in to comment.