From 87b8f5c3f141b6edad86c58e16e3bc0b54eb6112 Mon Sep 17 00:00:00 2001 From: John Andre Hestad Date: Mon, 10 Feb 2025 20:34:57 +0100 Subject: [PATCH] Fix innlesing av journalpostId fra tilbakekrevingsvedtak --- .../domain/hendelser/DokumentHendelseRepo.kt | 31 ++++++++++++++++--- .../database/DokumentHendelsePostgresRepo.kt | 25 +++++++++++++++ .../DokumentHendelsePostgresRepoTest.kt | 2 +- .../bakover/service/klage/KlageServiceImpl.kt | 14 +++++++-- .../service/klage/OversendKlageTest.kt | 4 +++ 5 files changed, 68 insertions(+), 8 deletions(-) diff --git a/dokument/domain/src/main/kotlin/dokument/domain/hendelser/DokumentHendelseRepo.kt b/dokument/domain/src/main/kotlin/dokument/domain/hendelser/DokumentHendelseRepo.kt index 141f4d4bbf..aad79c3c66 100644 --- a/dokument/domain/src/main/kotlin/dokument/domain/hendelser/DokumentHendelseRepo.kt +++ b/dokument/domain/src/main/kotlin/dokument/domain/hendelser/DokumentHendelseRepo.kt @@ -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 @@ -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 - fun hentHendelseOgFilForDokumentId(dokumentId: UUID, sessionContext: SessionContext? = null): Pair + fun hentHendelseOgFilFor( + hendelseId: HendelseId, + sessionContext: SessionContext? = null, + ): Pair + + fun hentHendelseOgFilForDokumentId( + dokumentId: UUID, + sessionContext: SessionContext? = null, + ): Pair 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? } diff --git a/dokument/infrastructure/src/main/kotlin/no/nav/su/se/bakover/dokument/infrastructure/database/DokumentHendelsePostgresRepo.kt b/dokument/infrastructure/src/main/kotlin/no/nav/su/se/bakover/dokument/infrastructure/database/DokumentHendelsePostgresRepo.kt index 65cc757472..7c9575ee58 100644 --- a/dokument/infrastructure/src/main/kotlin/no/nav/su/se/bakover/dokument/infrastructure/database/DokumentHendelsePostgresRepo.kt +++ b/dokument/infrastructure/src/main/kotlin/no/nav/su/se/bakover/dokument/infrastructure/database/DokumentHendelsePostgresRepo.kt @@ -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 @@ -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 { diff --git a/dokument/infrastructure/src/test/kotlin/no/nav/su/se/bakover/dokument/infrastructure/database/DokumentHendelsePostgresRepoTest.kt b/dokument/infrastructure/src/test/kotlin/no/nav/su/se/bakover/dokument/infrastructure/database/DokumentHendelsePostgresRepoTest.kt index 5302788a8f..6d77c3ba7c 100644 --- a/dokument/infrastructure/src/test/kotlin/no/nav/su/se/bakover/dokument/infrastructure/database/DokumentHendelsePostgresRepoTest.kt +++ b/dokument/infrastructure/src/test/kotlin/no/nav/su/se/bakover/dokument/infrastructure/database/DokumentHendelsePostgresRepoTest.kt @@ -29,7 +29,7 @@ class DokumentHendelsePostgresRepoTest { relaterteHendelse = relaterteHendelse, generertDokumentJson = """{ "personalia": { - "dato": "2021-02-01" + "dato": "01.02.2021" } } """.trimIndent(), diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/klage/KlageServiceImpl.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/klage/KlageServiceImpl.kt index 34e9b922e0..7283ac0970 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/klage/KlageServiceImpl.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/klage/KlageServiceImpl.kt @@ -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 @@ -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() @@ -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") @@ -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, diff --git a/service/src/test/kotlin/no/nav/su/se/bakover/service/klage/OversendKlageTest.kt b/service/src/test/kotlin/no/nav/su/se/bakover/service/klage/OversendKlageTest.kt index 21c7ef83e6..1c719ef2d5 100644 --- a/service/src/test/kotlin/no/nav/su/se/bakover/service/klage/OversendKlageTest.kt +++ b/service/src/test/kotlin/no/nav/su/se/bakover/service/klage/OversendKlageTest.kt @@ -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( @@ -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() }