Skip to content

Commit

Permalink
⏪️ Revert kode for håndtering av personer som skulle holdes igjen
Browse files Browse the repository at this point in the history
  • Loading branch information
oydisrefsum committed Nov 1, 2024
1 parent 41a2497 commit 5142025
Show file tree
Hide file tree
Showing 12 changed files with 24 additions and 156 deletions.
2 changes: 1 addition & 1 deletion deploy/prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ spec:
diskSize: 1024
diskType: SSD
name: spesialist
tier: db-custom-64-65536
tier: db-custom-10-20480
retainedBackups: 14
databases:
- name: spesialist
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import no.nav.helse.spesialist.api.graphql.schema.Person
import no.nav.helse.spesialist.api.saksbehandler.SaksbehandlerFraApi
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.util.UUID

private sealed interface Inputvalidering {
class Ok(valdselsnummer: String) : Inputvalidering
Expand All @@ -42,11 +41,6 @@ interface PersonoppslagService {
tilganger: SaksbehandlerTilganger,
): FetchPersonResult

fun personSkalHoldesIgjen(
dselsnummer: String,
saksbehandlerOid: UUID,
): Boolean

fun finnesPersonMedFødselsnummer(fødselsnummer: String): Boolean

fun fødselsnumreKnyttetTil(aktørId: String): Set<String>
Expand Down Expand Up @@ -91,12 +85,6 @@ class PersonQuery(
}
sikkerLogg.info("Personoppslag på fnr=$fødselsnummer")

// Skal ikke kunne slå opp personer som holdes igjen på grunn av replikeringsfeil
val saksbehandler = env.graphQlContext.get<SaksbehandlerFraApi>(SAKSBEHANDLER)
if (personoppslagService.personSkalHoldesIgjen(fødselsnummer, saksbehandler.oid)) {
return forbiddenError(fødselsnummer).tilGraphqlResult()
}

val tilganger = env.graphQlContext.get<SaksbehandlerTilganger>(TILGANGER)

return when (val result = personoppslagService.hentPerson(fødselsnummer, tilganger)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,9 @@ import no.nav.helse.db.MedDataSource
import no.nav.helse.db.QueryRunner
import no.nav.helse.spesialist.api.vedtaksperiode.EnhetDto
import java.time.LocalDateTime
import java.util.UUID
import javax.sql.DataSource

class PersonApiDao(dataSource: DataSource) : QueryRunner by MedDataSource(dataSource) {
fun skalHoldesIgjen(
dselsnummer: String,
saksbehandlerOid: UUID,
): Boolean {
return asSQL(
"""SELECT true FROM person_som_skal_holdes_igjen WHERE fodselsnummer = :fodselsnummer AND NOT (:oid = ANY(oider_som_kan_sla_opp))""",
"fodselsnummer" to fødselsnummer, "oid" to saksbehandlerOid,
).singleOrNull {
it.boolean(1)
} ?: false
}

fun personKlargjøres(fødselsnummer: String) {
asSQL(
"INSERT INTO person_klargjores(fødselsnummer, opprettet) VALUES(:fodselsnummer, :opprettet) ON CONFLICT DO NOTHING",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import no.nav.helse.spesialist.api.varsel.ApiVarselRepository
import no.nav.helse.spesialist.api.vergemål.VergemålApiDao
import no.nav.helse.spleis.graphql.hentsnapshot.GraphQLPerson
import org.slf4j.LoggerFactory
import java.util.UUID

private sealed interface HentSnapshotResult {
class Ok(val snapshot: Pair<Personinfo, GraphQLPerson>) : HentSnapshotResult
Expand Down Expand Up @@ -109,15 +108,6 @@ class PersonService(
return person(fødselsnummer, snapshot, tilganger, reservasjon)
}

override fun personSkalHoldesIgjen(
dselsnummer: String,
saksbehandlerOid: UUID,
): Boolean =
personApiDao.skalHoldesIgjen(
fødselsnummer,
saksbehandlerOid,
)

private fun person(
dselsnummer: String,
snapshot: Pair<Personinfo, GraphQLPerson>,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
package no.nav.helse.spesialist.api.person

import kotliquery.queryOf
import kotliquery.sessionOf
import no.nav.helse.spesialist.api.DatabaseIntegrationTest
import no.nav.helse.spesialist.api.person.Adressebeskyttelse.Ugradert
import no.nav.helse.spesialist.test.lagFødselsnummer
import org.intellij.lang.annotations.Language
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
import java.time.LocalDateTime
import java.util.UUID

internal class PersonApiDaoTest : DatabaseIntegrationTest() {

Expand All @@ -21,22 +15,6 @@ internal class PersonApiDaoTest : DatabaseIntegrationTest() {
assertTrue(personApiDao.personHarAdressebeskyttelse(FØDSELSNUMMER, Adressebeskyttelse.Fortrolig))
}

@Test
fun `person skal holdes igjen`() {
val fødselsnummer = lagFødselsnummer()
opprettPersonSomSkalHoldesIgjen(fødselsnummer)
assertTrue(personApiDao.skalHoldesIgjen(fødselsnummer, UUID.randomUUID()))
}

@Test
fun `person skal ikke holdes igjen hvis saksbehandler har fått tilgang eksplisitt`() {
val fødselsnummer = lagFødselsnummer()
opprettPersonSomSkalHoldesIgjen(fødselsnummer)
val saksbehandlerOid = UUID.randomUUID()
giSaksbehandlerTilgangTilPersonSomHoldesIgjen(fødselsnummer, saksbehandlerOid)
assertFalse(personApiDao.skalHoldesIgjen(fødselsnummer, saksbehandlerOid))
}

@Test
fun `person med ugradert adresse er ikke kode 7`() {
opprettPerson(adressebeskyttelse = Ugradert)
Expand Down Expand Up @@ -106,22 +84,6 @@ internal class PersonApiDaoTest : DatabaseIntegrationTest() {
assertTrue(personApiDao.klargjøringPågår(FØDSELSNUMMER))
}

private fun opprettPersonSomSkalHoldesIgjen(fødselsnummer: String) {
@Language("PostgreSQL")
val query = """INSERT INTO person_som_skal_holdes_igjen(fodselsnummer, opprettet) VALUES (:fodselsnummer, :opprettet)"""
sessionOf(dataSource).use { session ->
session.run(queryOf(query, mapOf("fodselsnummer" to fødselsnummer, "opprettet" to LocalDateTime.now())).asExecute)
}
}

private fun giSaksbehandlerTilgangTilPersonSomHoldesIgjen(fødselsnummer: String, saksbehandlerOid: UUID) {
@Language("PostgreSQL")
val query = """UPDATE person_som_skal_holdes_igjen SET oider_som_kan_sla_opp = ARRAY[:oid] WHERE fodselsnummer = :fodselsnummer"""
sessionOf(dataSource).use { session ->
session.run(queryOf(query, mapOf("fodselsnummer" to fødselsnummer, "oid" to saksbehandlerOid)).asExecute)
}
}

private fun harDataNødvendigForVisning() = personApiDao.harDataNødvendigForVisning(FØDSELSNUMMER)
private fun assertPersonenErIkkeKlar() = assertFalse(harDataNødvendigForVisning())
private fun assertPersonenErKlar() = assertTrue(harDataNødvendigForVisning())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Drop table person_som_skal_holdes_igjen;
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@ internal abstract class AbstractDatabaseTest {
"melding_duplikatkontroll",
"poison_pill",
"dialog",
"person_som_skal_holdes_igjen"
),
)
tabeller.forEach { tabellnavn ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ internal class PersonServiceTest : AbstractDatabaseTest() {

@Test
fun `antall tabeller - du må antakelig rette opp i sletting i dev dersom du har lagt til eller fjernet tabeller`() {
assertEquals(79, finnTabeller().size)
assertEquals(78, finnTabeller().size)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,4 @@ internal interface AutomatiseringRepository {
): List<String>

fun finnVedtaksperiode(vedtaksperiodeId: UUID): Long?

fun skalHoldesIgjen(fødselsnummer: String): Boolean
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ package no.nav.helse.modell.automatisering
import kotliquery.Row
import kotliquery.Session
import no.nav.helse.HelseDao.Companion.asSQL
import no.nav.helse.HelseDao.Companion.list
import no.nav.helse.HelseDao.Companion.single
import no.nav.helse.HelseDao.Companion.update
import no.nav.helse.db.AutomatiseringRepository
import no.nav.helse.db.MedSession
import no.nav.helse.db.QueryRunner
import java.util.UUID

internal class AutomatiseringDao(val session: Session) : AutomatiseringRepository, QueryRunner by MedSession(session) {
internal class AutomatiseringDao(val session: Session) : AutomatiseringRepository {
override fun settAutomatiseringInaktiv(
vedtaksperiodeId: UUID,
hendelseId: UUID,
Expand All @@ -24,7 +25,7 @@ internal class AutomatiseringDao(val session: Session) : AutomatiseringRepositor
""".trimIndent(),
"vedtaksperiodeId" to vedtaksperiodeId,
"hendelseRef" to hendelseId,
).update()
).update(session)
}

override fun settAutomatiseringProblemInaktiv(
Expand All @@ -42,7 +43,7 @@ internal class AutomatiseringDao(val session: Session) : AutomatiseringRepositor
""".trimIndent(),
"vedtaksperiodeId" to vedtaksperiodeId,
"hendelseRef" to hendelseId,
).update()
).update(session)
}

override fun plukketUtTilStikkprøve(
Expand All @@ -58,7 +59,7 @@ internal class AutomatiseringDao(val session: Session) : AutomatiseringRepositor
AND (inaktiv_fra IS NULL OR inaktiv_fra > now())
""".trimIndent(),
"vedtaksperiodeId" to vedtaksperiodeId, "hendelseId" to hendelseId,
).singleOrNull { it.boolean(1) } ?: false
).single(session) { it.boolean(1) } ?: false

override fun automatisert(
vedtaksperiodeId: UUID,
Expand Down Expand Up @@ -97,7 +98,7 @@ internal class AutomatiseringDao(val session: Session) : AutomatiseringRepositor
""".trimIndent(),
"vedtaksperiodeRef" to vedtaksperiodeRef,
"hendelseId" to hendelseId,
).singleOrNull { tilAutomatiseringDto(problemer, it) }
).single(session) { tilAutomatiseringDto(problemer, it) }
}

private fun lagre(
Expand All @@ -124,7 +125,7 @@ internal class AutomatiseringDao(val session: Session) : AutomatiseringRepositor
"automatisert" to automatisert,
"stikkproeve" to stikkprøve,
"utbetalingId" to utbetalingId,
).update()
).update(session)

problems.forEach { problem ->
asSQL(
Expand All @@ -135,7 +136,7 @@ internal class AutomatiseringDao(val session: Session) : AutomatiseringRepositor
"vedtaksperiodeId" to vedtaksperiodeId,
"hendelseId" to hendelseId,
"problem" to problem,
).update()
).update(session)
}
}

Expand All @@ -151,22 +152,13 @@ internal class AutomatiseringDao(val session: Session) : AutomatiseringRepositor
""".trimIndent(),
"hendelseId" to hendelseId,
"vedtaksperiodeRef" to vedtaksperiodeRef,
).list { it.string("problem") }
).list(session) { it.string("problem") }

override fun finnVedtaksperiode(vedtaksperiodeId: UUID) =
asSQL(
"SELECT id FROM vedtak WHERE vedtaksperiode_id = :vedtaksperiodeId",
"vedtaksperiodeId" to vedtaksperiodeId,
).singleOrNull { it.long(1) }

override fun skalHoldesIgjen(fødselsnummer: String): Boolean {
return asSQL(
"SELECT true FROM person_som_skal_holdes_igjen WHERE fodselsnummer = :fodselsnummer",
"fodselsnummer" to fødselsnummer,
).singleOrNull {
it.boolean(1)
} ?: false
}
).single(session) { it.long(1) }

private fun tilAutomatiseringDto(
problemer: List<String>,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package no.nav.helse.modell.automatisering

import net.logstash.logback.argument.StructuredArguments.keyValue
import net.logstash.logback.argument.StructuredArguments.kv
import no.nav.helse.db.AutomatiseringRepository
import no.nav.helse.mediator.GodkjenningMediator
import no.nav.helse.mediator.oppgave.OppgaveService
Expand Down Expand Up @@ -42,17 +41,9 @@ internal class VurderAutomatiskInnvilgelse(
)

override fun execute(context: CommandContext): Boolean {
val fødselsnummer = godkjenningsbehov.fødselsnummer
if (automatiseringRepository.skalHoldesIgjen(fødselsnummer)) {
sikkerlogg.info(
"Person med {} skal holdes igjen på grunn av replikeringsfeil",
kv("fødselsnummer", fødselsnummer),
)
return false
}
val resultat =
automatisering.utfør(
fødselsnummer = fødselsnummer,
fødselsnummer = godkjenningsbehov.fødselsnummer,
vedtaksperiodeId = vedtaksperiodeId,
utbetaling = utbetaling,
periodetype = godkjenningsbehov.periodetype,
Expand Down Expand Up @@ -90,18 +81,6 @@ internal class VurderAutomatiskInnvilgelse(
return true
}

override fun resume(context: CommandContext): Boolean {
val fødselsnummer = godkjenningsbehov.fødselsnummer
if (automatiseringRepository.skalHoldesIgjen(fødselsnummer)) {
sikkerlogg.info(
"Person med {} skal holdes igjen på grunn av replikeringsfeil",
kv("fødselsnummer", fødselsnummer),
)
return false
}
return true
}

private fun manuellSaksbehandling(problemer: List<String>) {
automatiseringRepository.manuellSaksbehandling(problemer, vedtaksperiodeId, hendelseId, utbetalingId)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import no.nav.helse.spesialist.test.lagAktørId
import no.nav.helse.spesialist.test.lagFødselsnummer
import no.nav.helse.spesialist.test.lagOrganisasjonsnummer
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
Expand All @@ -32,12 +31,14 @@ import java.time.LocalDateTime
import java.util.UUID

internal class VurderAutomatiskInnvilgelseTest {
private val vedtaksperiodeId = UUID.randomUUID()
private val utbetalingId = UUID.randomUUID()
private val fødselsnummer = lagFødselsnummer()
private val orgnummer = lagOrganisasjonsnummer()
private val hendelseId = UUID.randomUUID()
private val periodetype = Periodetype.FORLENGELSE
private companion object {
private val vedtaksperiodeId = UUID.randomUUID()
private val utbetalingId = UUID.randomUUID()
private const val fødselsnummer = "12345678910"
private const val orgnummer = "123456789"
private val hendelseId = UUID.randomUUID()
private val periodetype = Periodetype.FORLENGELSE
}

private val automatisering = mockk<Automatisering>(relaxed = true)
private val generasjon = Generasjon(UUID.randomUUID(), vedtaksperiodeId, 1.januar, 31.januar, 1.januar)
Expand All @@ -55,7 +56,6 @@ internal class VurderAutomatiskInnvilgelseTest {
gjeldendeGenerasjoner = listOf(generasjon),
),
godkjenningsbehov = godkjenningsbehov(
fødselsnummer = fødselsnummer,
id = hendelseId,
organisasjonsnummer = orgnummer,
periodetype = periodetype,
Expand Down Expand Up @@ -180,34 +180,6 @@ internal class VurderAutomatiskInnvilgelseTest {
assertEquals("FERDIGSTILT", observatør.gjeldendeTilstand)
}

@Test
fun `Skal holde igjen personer som er berørt av replikeringsfeil - KanAutomatiseres`() {
every { automatiseringRepository.skalHoldesIgjen(fødselsnummer) } returns true
assertFalse(command.execute(context))
assertFalse(command.resume(context))
}

@Test
fun `Skal holde igjen personer som er berørt av replikeringsfeil - KanAutomatisereSpesialsak`() {
every { automatiseringRepository.skalHoldesIgjen(fødselsnummer) } returns true
assertFalse(command.execute(context))
assertFalse(command.resume(context))
}

@Test
fun `Skal holde igjen personer som er berørt av replikeringsfeil - Stikkprøve`() {
every { automatiseringRepository.skalHoldesIgjen(fødselsnummer) } returns true
assertFalse(command.execute(context))
assertFalse(command.resume(context))
}

@Test
fun `Skal holde igjen personer som er berørt av replikeringsfeil - KanIkkeAutomatiseres`() {
every { automatiseringRepository.skalHoldesIgjen(fødselsnummer) } returns true
assertFalse(command.execute(context))
assertFalse(command.resume(context))
}

private val commandContextRepository = object : CommandContextRepository {
override fun nyContext(meldingId: UUID): CommandContext = TODO("Not yet implemented")
override fun opprett(hendelseId: UUID, contextId: UUID) {}
Expand Down

0 comments on commit 5142025

Please sign in to comment.