Skip to content

Commit 87b8f5c

Browse files
committed
Fix innlesing av journalpostId fra tilbakekrevingsvedtak
1 parent e9a2465 commit 87b8f5c

File tree

5 files changed

+68
-8
lines changed

5 files changed

+68
-8
lines changed

dokument/domain/src/main/kotlin/dokument/domain/hendelser/DokumentHendelseRepo.kt

+27-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dokument.domain.hendelser
22

33
import dokument.domain.Dokument
44
import dokument.domain.DokumentHendelser
5+
import no.nav.su.se.bakover.common.journal.JournalpostId
56
import no.nav.su.se.bakover.common.persistence.SessionContext
67
import no.nav.su.se.bakover.hendelse.domain.DefaultHendelseMetadata
78
import no.nav.su.se.bakover.hendelse.domain.HendelseFil
@@ -43,12 +44,34 @@ interface DokumentHendelseRepo {
4344
dokumentId: UUID,
4445
sessionContext: SessionContext? = null,
4546
): Dokument.MedMetadata?
47+
4648
fun hentHendelse(hendelseId: HendelseId, sessionContext: SessionContext? = null): DokumentHendelse?
4749
fun hentFilFor(hendelseId: HendelseId, sessionContext: SessionContext? = null): HendelseFil?
48-
fun hentHendelseOgFilFor(hendelseId: HendelseId, sessionContext: SessionContext? = null): Pair<DokumentHendelse?, HendelseFil?>
49-
fun hentHendelseOgFilForDokumentId(dokumentId: UUID, sessionContext: SessionContext? = null): Pair<DokumentHendelse?, HendelseFil?>
50+
fun hentHendelseOgFilFor(
51+
hendelseId: HendelseId,
52+
sessionContext: SessionContext? = null,
53+
): Pair<DokumentHendelse?, HendelseFil?>
54+
55+
fun hentHendelseOgFilForDokumentId(
56+
dokumentId: UUID,
57+
sessionContext: SessionContext? = null,
58+
): Pair<DokumentHendelse?, HendelseFil?>
5059

5160
fun hentHendelseForDokumentId(dokumentId: UUID, sessionContext: SessionContext? = null): DokumentHendelse?
52-
fun hentHendelseForRelatertHendelseId(relatertHendelseId: HendelseId, sessionContext: SessionContext? = null): DokumentHendelse?
53-
fun hentVedtaksbrevdatoForSakOgVedtakId(sakId: UUID, vedtakId: UUID, sessionContext: SessionContext? = null): LocalDate?
61+
fun hentHendelseForRelatertHendelseId(
62+
relatertHendelseId: HendelseId,
63+
sessionContext: SessionContext? = null,
64+
): DokumentHendelse?
65+
66+
fun hentVedtaksbrevdatoForSakOgVedtakId(
67+
sakId: UUID,
68+
vedtakId: UUID,
69+
sessionContext: SessionContext? = null,
70+
): LocalDate?
71+
72+
fun hentJournalpostIdForSakOgVedtakId(
73+
sakId: UUID,
74+
vedtakId: UUID,
75+
sessionContext: SessionContext? = null,
76+
): JournalpostId?
5477
}

dokument/infrastructure/src/main/kotlin/no/nav/su/se/bakover/dokument/infrastructure/database/DokumentHendelsePostgresRepo.kt

+25
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import dokument.domain.hendelser.JournalførtDokument
1212
import dokument.domain.hendelser.JournalførtDokumentHendelse
1313
import no.nav.su.se.bakover.common.infrastructure.persistence.PostgresSessionContext.Companion.withOptionalSession
1414
import no.nav.su.se.bakover.common.infrastructure.persistence.hent
15+
import no.nav.su.se.bakover.common.journal.JournalpostId
1516
import no.nav.su.se.bakover.common.persistence.SessionContext
1617
import no.nav.su.se.bakover.common.persistence.SessionFactory
1718
import no.nav.su.se.bakover.dokument.infrastructure.database.DistribuertDokumentHendelseDbJson.Companion.dataDbJson
@@ -245,6 +246,30 @@ class DokumentHendelsePostgresRepo(
245246
}
246247
}
247248
}
249+
250+
override fun hentJournalpostIdForSakOgVedtakId(
251+
sakId: UUID,
252+
vedtakId: UUID,
253+
sessionContext: SessionContext?,
254+
): JournalpostId? {
255+
return sessionContext.withOptionalSession(sessionFactory) {
256+
// generertDokumentJson er lagret som en string (escaped json)
257+
"""
258+
select (h1.data->>'journalpostId') as journalpostId
259+
from hendelse h1
260+
join hendelse h2 on (h1.data->>'relaterteHendelse')::uuid = h2.hendelseId
261+
where h1.sakid = :sakId
262+
and h1.type = '$JournalførtDokument'
263+
and (h2.data->'dokumentMeta'->>'vedtakId') = :vedtakId
264+
""".trimIndent().hent(
265+
// vedtakId: Vi gjør en string-comparison, så slipper vi kaste til ::uuid
266+
mapOf("sakId" to sakId, "vedtakId" to vedtakId.toString()),
267+
it,
268+
) {
269+
JournalpostId(it.string("journalpostId"))
270+
}
271+
}
272+
}
248273
}
249274

250275
private fun PersistertHendelse.toDokumentHendelse(): DokumentHendelse {

dokument/infrastructure/src/test/kotlin/no/nav/su/se/bakover/dokument/infrastructure/database/DokumentHendelsePostgresRepoTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class DokumentHendelsePostgresRepoTest {
2929
relaterteHendelse = relaterteHendelse,
3030
generertDokumentJson = """{
3131
"personalia": {
32-
"dato": "2021-02-01"
32+
"dato": "01.02.2021"
3333
}
3434
}
3535
""".trimIndent(),

service/src/main/kotlin/no/nav/su/se/bakover/service/klage/KlageServiceImpl.kt

+11-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import kotlinx.coroutines.runBlocking
1616
import no.nav.su.se.bakover.common.domain.PdfA
1717
import no.nav.su.se.bakover.common.domain.attestering.Attestering
1818
import no.nav.su.se.bakover.common.ident.NavIdentBruker
19+
import no.nav.su.se.bakover.common.journal.JournalpostId
1920
import no.nav.su.se.bakover.common.persistence.SessionFactory
2021
import no.nav.su.se.bakover.common.tid.Tidspunkt
2122
import no.nav.su.se.bakover.domain.klage.AvsluttetKlage
@@ -326,9 +327,9 @@ class KlageServiceImpl(
326327
distribueringsadresse = null,
327328
)
328329

329-
val journalpostIdForVedtak = vedtakService.hentJournalpostId(oversendtKlage.vilkårsvurderinger.vedtakId)
330+
val journalpostIdForVedtak = hentJournalpostIdForVedtakId(sakId, vedtakId)
330331
?: return KunneIkkeOversendeKlage.FantIkkeJournalpostIdKnyttetTilVedtaket.left().onLeft {
331-
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.)")
332+
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.)")
332333
}
333334

334335
class KunneIkkeOversendeTilKlageinstansEx : RuntimeException()
@@ -423,7 +424,9 @@ class KlageServiceImpl(
423424
(klage as? KanGenerereBrevutkast) ?: return KunneIkkeLageBrevutkast.FeilVedBrevRequest(
424425
KunneIkkeLageBrevKommandoForKlage.UgyldigTilstand(fra = klage::class),
425426
).left()
426-
val vedtakId = klage.vilkårsvurderinger?.vedtakId ?: return KunneIkkeLageBrevutkast.FeilVedBrevRequest(KunneIkkeLageBrevKommandoForKlage.UgyldigTilstand(klage::class)).left()
427+
val vedtakId = klage.vilkårsvurderinger?.vedtakId ?: return KunneIkkeLageBrevutkast.FeilVedBrevRequest(
428+
KunneIkkeLageBrevKommandoForKlage.UgyldigTilstand(klage::class),
429+
).left()
427430
val vedtaksbrevdato = hentVedtaksbrevDatoForKlage(sakId, vedtakId, klageId)
428431
?: run {
429432
log.error("Kunne ikke generere brevutkast for sak. Fant ikke vedtaksbrevdato for sak $sakId og vedtakId $vedtakId")
@@ -452,6 +455,11 @@ class KlageServiceImpl(
452455
)
453456
}
454457

458+
private fun hentJournalpostIdForVedtakId(sakId: UUID, vedtakId: UUID): JournalpostId? {
459+
return vedtakService.hentJournalpostId(vedtakId)
460+
?: dokumentHendelseRepo.hentJournalpostIdForSakOgVedtakId(sakId, vedtakId)
461+
}
462+
455463
override fun avslutt(
456464
klageId: KlageId,
457465
saksbehandler: NavIdentBruker.Saksbehandler,

service/src/test/kotlin/no/nav/su/se/bakover/service/klage/OversendKlageTest.kt

+4
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,9 @@ internal class OversendKlageTest {
201201
vedtakServiceMock = mock {
202202
on { hentJournalpostId(any()) } doReturn null
203203
},
204+
dokumentHendelseRepo = mock {
205+
on { hentJournalpostIdForSakOgVedtakId(any(), any(), anyOrNull()) } doReturn null
206+
},
204207
)
205208
val attestant = NavIdentBruker.Attestant("s2")
206209
mocks.service.oversend(
@@ -226,6 +229,7 @@ internal class OversendKlageTest {
226229
anyOrNull(),
227230
)
228231
verify(mocks.vedtakServiceMock).hentJournalpostId(argThat { it shouldBe klage.vilkårsvurderinger.vedtakId })
232+
verify(mocks.dokumentHendelseRepo).hentJournalpostIdForSakOgVedtakId(any(), any(), anyOrNull())
229233
mocks.verifyNoMoreInteractions()
230234
}
231235

0 commit comments

Comments
 (0)