From 9daca40b359737eb776f99dd422175f653dbac6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Mon, 16 Dec 2024 11:56:21 +0100 Subject: [PATCH] =?UTF-8?q?Legge=20til=20journalforendeEnhet=20for=20?= =?UTF-8?q?=C3=A5=20se=20om=20den=20kan=20brukes=20til=20=C3=A5=20rute=20k?= =?UTF-8?q?lage/anke=20ref=20DAG-896?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mottak/db/InnsendingPostgresRepository.kt | 182 +++++++++--------- .../dagpenger/mottak/tjenester/JoarkMottak.kt | 2 +- .../mottak/tjenester/JournalpostMottak.kt | 2 + .../migration/V16__JOURNALFORENDE_ENHET.sql | 2 + .../kotlin/no/nav/dagpenger/TestHelper.kt | 1 + .../db/InnsendingPostgresRepositoryTest.kt | 57 +++--- .../no/nav/dagpenger/mottak/db/SkjemaTest.kt | 2 +- .../nav/dagpenger/mottak/InnsendingVisitor.kt | 1 + .../dagpenger/mottak/meldinger/Journalpost.kt | 18 +- .../dagpenger/mottak/serder/InnsendingData.kt | 11 +- .../mottak/serder/InnsendingDataTest.kt | 1 + 11 files changed, 151 insertions(+), 128 deletions(-) create mode 100644 mediator/src/main/resources/db/migration/V16__JOURNALFORENDE_ENHET.sql diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/mottak/db/InnsendingPostgresRepository.kt b/mediator/src/main/kotlin/no/nav/dagpenger/mottak/db/InnsendingPostgresRepository.kt index 1be824a5..8b3f7cf2 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/mottak/db/InnsendingPostgresRepository.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/mottak/db/InnsendingPostgresRepository.kt @@ -24,8 +24,9 @@ import org.postgresql.util.PGobject import java.time.LocalDateTime import javax.sql.DataSource -internal class InnsendingPostgresRepository(private val datasource: DataSource = PostgresDataSourceBuilder.dataSource) : - InnsendingRepository { +internal class InnsendingPostgresRepository( + private val datasource: DataSource = PostgresDataSourceBuilder.dataSource, +) : InnsendingRepository { // language=PostgreSQL private val hentDataSql = """ @@ -38,6 +39,7 @@ internal class InnsendingPostgresRepository(private val datasource: DataSource = journalpost.brukertype as "brukerType", journalpost.behandlingstema as "behandlingstema", journalpost.registrertdato as "registrertdato", + journalpost.journalforendeEnhet as "journalforendeEnhet", arenasak.fagsakid as "fagsakId", arenasak.oppgaveId as "oppgaveId", soknad.data as "søknadsData", @@ -62,88 +64,90 @@ internal class InnsendingPostgresRepository(private val datasource: DataSource = override fun hent(journalpostId: String): Innsending? = using(sessionOf(datasource)) { session -> - session.run( - queryOf( - hentDataSql, - mapOf("jpId" to journalpostId.toLong()), - ).map { row -> - InnsendingData( - id = row.long("internId"), - journalpostId = row.long("journalpostId").toString(), - tilstand = TilstandData(TilstandData.InnsendingTilstandTypeData.valueOf(row.string("tilstand"))), - journalpostData = - row.localDateTimeOrNull("registrertDato")?.let { - InnsendingData.JournalpostData( - journalpostId = row.long("journalpostId").toString(), - bruker = - row.stringOrNull("brukerType")?.let { type -> - BrukerData(BrukerTypeData.valueOf(type), row.string("brukerId")) - }, - journalpostStatus = row.string("status"), - behandlingstema = row.stringOrNull("behandlingstema"), - registertDato = it, - dokumenter = listOf(), - ) - }, - personData = - row.stringOrNull("ident")?.let { - InnsendingData.PersonData( - navn = row.string("navn"), - aktørId = row.string("aktørId"), - fødselsnummer = row.string("ident"), - norskTilknytning = row.boolean("norsktilknytning"), - diskresjonskode = row.boolean("diskresjonskode"), - egenAnsatt = row.boolean("egenansatt"), - ) - }, - arenaSakData = - row.stringOrNull("fagsakId")?.let { - InnsendingData.ArenaSakData( - oppgaveId = row.string("oppgaveId"), - fagsakId = it, - ) - }, - søknadsData = - row.binaryStreamOrNull("søknadsData")?.use { - JsonMapper.jacksonJsonAdapter.readTree(it) - }, - aktivitetslogg = - row.binaryStream("aktivitetslogg").use { - JsonMapper.jacksonJsonAdapter.readValue( - it, - InnsendingData.AktivitetsloggData::class.java, + session + .run( + queryOf( + hentDataSql, + mapOf("jpId" to journalpostId.toLong()), + ).map { row -> + InnsendingData( + id = row.long("internId"), + journalpostId = row.long("journalpostId").toString(), + tilstand = TilstandData(TilstandData.InnsendingTilstandTypeData.valueOf(row.string("tilstand"))), + journalpostData = + row.localDateTimeOrNull("registrertDato")?.let { + InnsendingData.JournalpostData( + journalpostId = row.long("journalpostId").toString(), + bruker = + row.stringOrNull("brukerType")?.let { type -> + BrukerData(BrukerTypeData.valueOf(type), row.string("brukerId")) + }, + journalpostStatus = row.string("status"), + behandlingstema = row.stringOrNull("behandlingstema"), + journalførendeEnhet = row.stringOrNull("journalforendeEnhet"), + registertDato = it, + dokumenter = listOf(), + ) + }, + personData = + row.stringOrNull("ident")?.let { + InnsendingData.PersonData( + navn = row.string("navn"), + aktørId = row.string("aktørId"), + fødselsnummer = row.string("ident"), + norskTilknytning = row.boolean("norsktilknytning"), + diskresjonskode = row.boolean("diskresjonskode"), + egenAnsatt = row.boolean("egenansatt"), + ) + }, + arenaSakData = + row.stringOrNull("fagsakId")?.let { + InnsendingData.ArenaSakData( + oppgaveId = row.string("oppgaveId"), + fagsakId = it, + ) + }, + søknadsData = + row.binaryStreamOrNull("søknadsData")?.use { + JsonMapper.jacksonJsonAdapter.readTree(it) + }, + aktivitetslogg = + row.binaryStream("aktivitetslogg").use { + JsonMapper.jacksonJsonAdapter.readValue( + it, + InnsendingData.AktivitetsloggData::class.java, + ) + }, + ) + }.asSingle, + )?.let { + val dokumenter = + session.run( + queryOf( + //language=PostgreSQL + """ + SELECT + brevkode, + tittel, + dokumentinfoid, + hovedDokument + FROM journalpost_dokumenter_v1 WHERE id = :internId + """.trimIndent(), + mapOf( + "internId" to it.id, + ), + ).map { row -> + InnsendingData.JournalpostData.DokumentInfoData( + brevkode = row.string("brevkode"), + tittel = row.string("tittel"), + dokumentInfoId = row.string("dokumentInfoId"), + hovedDokument = row.boolean("hovedDokument"), ) - }, - ) - }.asSingle, - )?.let { - val dokumenter = - session.run( - queryOf( - //language=PostgreSQL - """ - SELECT - brevkode, - tittel, - dokumentinfoid, - hovedDokument - FROM journalpost_dokumenter_v1 WHERE id = :internId - """.trimIndent(), - mapOf( - "internId" to it.id, - ), - ).map { row -> - InnsendingData.JournalpostData.DokumentInfoData( - brevkode = row.string("brevkode"), - tittel = row.string("tittel"), - dokumentInfoId = row.string("dokumentInfoId"), - hovedDokument = row.boolean("hovedDokument"), - ) - }.asList, - ) + }.asList, + ) - it.copy(journalpostData = it.journalpostData?.copy(dokumenter = dokumenter)).createInnsending() - } + it.copy(journalpostData = it.journalpostData?.copy(dokumenter = dokumenter)).createInnsending() + } } override fun lagre(innsending: Innsending): Int { @@ -199,8 +203,7 @@ internal class InnsendingPostgresRepository(private val datasource: DataSource = class NyInnsendingQueryVisiotor( private val innsending: Innsending, private val transactionalSession: TransactionalSession, - ) : - InnsendingVisitor { + ) : InnsendingVisitor { var internId: Long = 0 init { @@ -223,7 +226,10 @@ internal class InnsendingPostgresRepository(private val datasource: DataSource = } } - class InnsendingQueryVisitor(innsending: Innsending, private val internId: Long) : InnsendingVisitor { + class InnsendingQueryVisitor( + innsending: Innsending, + private val internId: Long, + ) : InnsendingVisitor { val lagreQueries: MutableList = mutableListOf() init { @@ -251,6 +257,7 @@ internal class InnsendingPostgresRepository(private val datasource: DataSource = journalpostStatus: String, bruker: Journalpost.Bruker?, behandlingstema: String?, + journalførendeEnhet: String?, registrertDato: LocalDateTime, dokumenter: List, ) { @@ -258,8 +265,8 @@ internal class InnsendingPostgresRepository(private val datasource: DataSource = queryOf( //language=PostgreSQL """ - INSERT INTO journalpost_v1(id,status, brukerId,brukerType,behandlingstema,registrertDato) - VALUES(:id, :status,:brukerId, :brukerType, :behandlingstema,:registrertDato) + INSERT INTO journalpost_v1(id,status, brukerId,brukerType,behandlingstema,journalforendeEnhet,registrertDato) + VALUES(:id, :status,:brukerId, :brukerType, :behandlingstema,:journalforendeEnhet,:registrertDato) ON CONFLICT(id) DO NOTHING """.trimIndent(), mapOf( @@ -268,6 +275,7 @@ internal class InnsendingPostgresRepository(private val datasource: DataSource = "brukerId" to bruker?.id, "brukerType" to bruker?.type?.name, "behandlingstema" to behandlingstema, + "journalforendeEnhet" to journalførendeEnhet, "registrertDato" to registrertDato, ), ), diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/mottak/tjenester/JoarkMottak.kt b/mediator/src/main/kotlin/no/nav/dagpenger/mottak/tjenester/JoarkMottak.kt index 63d3a4c3..1b5b8ea8 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/mottak/tjenester/JoarkMottak.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/mottak/tjenester/JoarkMottak.kt @@ -20,7 +20,7 @@ internal class JoarkMottak( private val logg = KotlinLogging.logger {} private val forbudteMottaksKanaler = - setOf( + setOf( "EESSI", "NAV_NO_CHAT", ) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/mottak/tjenester/JournalpostMottak.kt b/mediator/src/main/kotlin/no/nav/dagpenger/mottak/tjenester/JournalpostMottak.kt index 37486386..dc39c561 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/mottak/tjenester/JournalpostMottak.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/mottak/tjenester/JournalpostMottak.kt @@ -75,12 +75,14 @@ internal class JournalpostMottak( ?.asText() .let { LocalDateTime.parse(it) } ?: LocalDateTime.now(), behandlingstema = it["behandlingstema"].textValue(), + journalførendeEnhet = it["journalfoerendeEnhet"]?.asText(), ).also { logg.info { """Mottok ny journalpost. |Antall dokumenter=${it.dokumenter().size}, |brevkode=${it.hovedDokument().brevkode}, |registrertDato=${it.datoRegistrert()}, + |journalførendeEnhet=${it.journalførendeEnhet()}, |behandlingstema=${packet[løsning]["behandlingstema"].textValue()} """.trimMargin() } diff --git a/mediator/src/main/resources/db/migration/V16__JOURNALFORENDE_ENHET.sql b/mediator/src/main/resources/db/migration/V16__JOURNALFORENDE_ENHET.sql new file mode 100644 index 00000000..55104170 --- /dev/null +++ b/mediator/src/main/resources/db/migration/V16__JOURNALFORENDE_ENHET.sql @@ -0,0 +1,2 @@ +ALTER TABLE journalpost_v1 + ADD COLUMN journalforendeEnhet TEXT NULL; \ No newline at end of file diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/TestHelper.kt b/mediator/src/test/kotlin/no/nav/dagpenger/TestHelper.kt index 8e5cb631..0c0893ca 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/TestHelper.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/TestHelper.kt @@ -81,6 +81,7 @@ val innsendingData = behandlingstema = "DAG", registertDato = registrertdato, dokumenter = dokumenter, + journalførendeEnhet = "ENHET", ), personData = InnsendingData.PersonData( diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/mottak/db/InnsendingPostgresRepositoryTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/mottak/db/InnsendingPostgresRepositoryTest.kt index a9095020..08467dbc 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/mottak/db/InnsendingPostgresRepositoryTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/mottak/db/InnsendingPostgresRepositoryTest.kt @@ -22,7 +22,9 @@ import org.junit.jupiter.api.Test import java.time.LocalDateTime internal class InnsendingPostgresRepositoryTest { - class TestVisitor(innsending: Innsending) : InnsendingVisitor { + class TestVisitor( + innsending: Innsending, + ) : InnsendingVisitor { val forventetDokumenter = mutableListOf() init { @@ -34,6 +36,7 @@ internal class InnsendingPostgresRepositoryTest { journalpostStatus: String, bruker: Journalpost.Bruker?, behandlingstema: String?, + journalførendeEnhet: String?, registrertDato: LocalDateTime, dokumenter: List, ) { @@ -82,13 +85,14 @@ internal class InnsendingPostgresRepositoryTest { ) } val innsending2 = - innsendingData.copy( - aktivitetslogg = InnsendingData.AktivitetsloggData(nyLogg.toList()), - tilstand = - InnsendingData.TilstandData( - InnsendingData.TilstandData.InnsendingTilstandTypeData.AvventerFerdigstillJournalpostType, - ), - ).createInnsending() + innsendingData + .copy( + aktivitetslogg = InnsendingData.AktivitetsloggData(nyLogg.toList()), + tilstand = + InnsendingData.TilstandData( + InnsendingData.TilstandData.InnsendingTilstandTypeData.AvventerFerdigstillJournalpostType, + ), + ).createInnsending() withMigratedDb { with(InnsendingPostgresRepository(PostgresDataSourceBuilder.dataSource)) { lagre(innsending).also { @@ -153,13 +157,14 @@ internal class InnsendingPostgresRepositoryTest { val innsending = innsendingData.createInnsending() val innsending2 = - innsendingData.copy( - journalpostId = "287689", - personData = - innsendingData.personData!!.copy( - fødselsnummer = dnr, - ), - ).createInnsending() + innsendingData + .copy( + journalpostId = "287689", + personData = + innsendingData.personData!!.copy( + fødselsnummer = dnr, + ), + ).createInnsending() withMigratedDb { with(InnsendingPostgresRepository(PostgresDataSourceBuilder.dataSource)) { lagre(innsending).also { @@ -181,13 +186,14 @@ internal class InnsendingPostgresRepositoryTest { @Test fun `Lagring der arena sak er null`() { val innsending = - innsendingData.copy( - arenaSakData = - InnsendingData.ArenaSakData( - oppgaveId = "2234", - fagsakId = null, - ), - ).createInnsending() + innsendingData + .copy( + arenaSakData = + InnsendingData.ArenaSakData( + oppgaveId = "2234", + fagsakId = null, + ), + ).createInnsending() withMigratedDb { with(InnsendingPostgresRepository(PostgresDataSourceBuilder.dataSource)) { lagre(innsending).also { @@ -221,9 +227,10 @@ internal class InnsendingPostgresRepositoryTest { val faktiskeRader = using(sessionOf(PostgresDataSourceBuilder.dataSource)) { session -> session.run( - queryOf("select count(1) from $tabell").map { row -> - row.int(1) - }.asSingle, + queryOf("select count(1) from $tabell") + .map { row -> + row.int(1) + }.asSingle, ) } assertEquals(antallRader, faktiskeRader, "Feil antall rader for tabell: $tabell") diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/mottak/db/SkjemaTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/mottak/db/SkjemaTest.kt index b74656d7..6aa94fd5 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/mottak/db/SkjemaTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/mottak/db/SkjemaTest.kt @@ -8,7 +8,7 @@ internal class SkjemaTest { @Test fun `riktig anntall migreringer`() { withCleanDb { - assertEquals(15, PostgresDataSourceBuilder.runMigration()) + assertEquals(16, PostgresDataSourceBuilder.runMigration()) } } } diff --git a/modell/src/main/kotlin/no/nav/dagpenger/mottak/InnsendingVisitor.kt b/modell/src/main/kotlin/no/nav/dagpenger/mottak/InnsendingVisitor.kt index 8386b6a8..10b2619c 100644 --- a/modell/src/main/kotlin/no/nav/dagpenger/mottak/InnsendingVisitor.kt +++ b/modell/src/main/kotlin/no/nav/dagpenger/mottak/InnsendingVisitor.kt @@ -9,6 +9,7 @@ interface JournalpostVisitor { journalpostStatus: String, bruker: Journalpost.Bruker?, behandlingstema: String?, + journalførendeEnhet: String?, registrertDato: LocalDateTime, dokumenter: List, ) { diff --git a/modell/src/main/kotlin/no/nav/dagpenger/mottak/meldinger/Journalpost.kt b/modell/src/main/kotlin/no/nav/dagpenger/mottak/meldinger/Journalpost.kt index de8d6fd5..380bcdf7 100644 --- a/modell/src/main/kotlin/no/nav/dagpenger/mottak/meldinger/Journalpost.kt +++ b/modell/src/main/kotlin/no/nav/dagpenger/mottak/meldinger/Journalpost.kt @@ -25,6 +25,7 @@ class Journalpost constructor( aktivitetslogg: Aktivitetslogg = Aktivitetslogg(), private val journalpostId: String, private val journalpostStatus: String, + private val journalførendeEnhet: String? = null, private val bruker: Bruker?, private val behandlingstema: String?, registrertDato: LocalDateTime, @@ -96,6 +97,8 @@ class Journalpost constructor( fun dokumenter() = dokumenter + fun journalførendeEnhet() = journalførendeEnhet + fun erEttersending() = hovedskjema().startsWith("NAVe") fun hovedskjema() = dokumenter.hovedDokument().brevkode @@ -152,9 +155,7 @@ class Journalpost constructor( val type: BrukerType, val id: String, ) { - override fun toString(): String { - return "Bruker(type=$type, id='')" - } + override fun toString(): String = "Bruker(type=$type, id='')" } enum class BrukerType { @@ -180,16 +181,13 @@ class Journalpost constructor( } } - private fun klageType(journalpost: Journalpost): KategorisertJournalpost { - return when (journalpost.behandlingstema) { + private fun klageType(journalpost: Journalpost): KategorisertJournalpost = + when (journalpost.behandlingstema) { "ab0451" -> KlageForskudd(journalpost) else -> Klage(journalpost) } - } - private fun ankeType(journalpost: Journalpost): KategorisertJournalpost { - return Anke(journalpost) - } + private fun ankeType(journalpost: Journalpost): KategorisertJournalpost = Anke(journalpost) override fun toSpesifikkKontekst(): SpesifikkKontekst = SpesifikkKontekst( @@ -200,6 +198,6 @@ class Journalpost constructor( ) fun accept(visitor: JournalpostVisitor) { - visitor.visitJournalpost(journalpostId, journalpostStatus, bruker, behandlingstema, registrertDato, dokumenter) + visitor.visitJournalpost(journalpostId, journalpostStatus, bruker, behandlingstema, journalførendeEnhet, registrertDato, dokumenter) } } diff --git a/modell/src/main/kotlin/no/nav/dagpenger/mottak/serder/InnsendingData.kt b/modell/src/main/kotlin/no/nav/dagpenger/mottak/serder/InnsendingData.kt index 3f749ccb..fca76961 100644 --- a/modell/src/main/kotlin/no/nav/dagpenger/mottak/serder/InnsendingData.kt +++ b/modell/src/main/kotlin/no/nav/dagpenger/mottak/serder/InnsendingData.kt @@ -20,8 +20,9 @@ data class InnsendingData( val søknadsData: JsonNode?, val aktivitetslogg: AktivitetsloggData, ) { - fun createInnsending(): Innsending { - return Innsending::class.primaryConstructor!! + fun createInnsending(): Innsending = + Innsending::class + .primaryConstructor!! .apply { isAccessible = true } .call( journalpostId, @@ -33,6 +34,7 @@ data class InnsendingData( journalpostStatus = journalpostData.journalpostStatus, behandlingstema = journalpostData.behandlingstema, registrertDato = journalpostData.registertDato, + journalførendeEnhet = journalpostData.journalførendeEnhet, dokumenter = journalpostData.dokumenter.map { Journalpost.DokumentInfo( @@ -55,11 +57,11 @@ data class InnsendingData( it.egenAnsatt, ) }, - arenaSakData?.takeIf { it.fagsakId != null } + arenaSakData + ?.takeIf { it.fagsakId != null } ?.let { ArenaOppgaveOpprettet.ArenaSak(it.oppgaveId, it.fagsakId) }, aktivitetslogg.let(::konverterTilAktivitetslogg), ) - } data class TilstandData( val type: InnsendingTilstandTypeData, @@ -147,6 +149,7 @@ data class InnsendingData( val bruker: BrukerData?, val behandlingstema: String?, val registertDato: LocalDateTime, + val journalførendeEnhet: String?, val dokumenter: List, ) { enum class BrukerTypeData { diff --git a/modell/src/test/kotlin/no/nav/dagpenger/mottak/serder/InnsendingDataTest.kt b/modell/src/test/kotlin/no/nav/dagpenger/mottak/serder/InnsendingDataTest.kt index f4fc2833..7b95f7fa 100644 --- a/modell/src/test/kotlin/no/nav/dagpenger/mottak/serder/InnsendingDataTest.kt +++ b/modell/src/test/kotlin/no/nav/dagpenger/mottak/serder/InnsendingDataTest.kt @@ -47,6 +47,7 @@ internal class InnsendingDataTest { behandlingstema = "DAG", registertDato = registrertdato, dokumenter = dokumenter, + journalførendeEnhet = "ENHET", ), personData = PersonData(