Skip to content

Commit

Permalink
Tester på stuck-filtrering er kjappere i kode enn spørring
Browse files Browse the repository at this point in the history
  • Loading branch information
fraadsbrandth committed May 26, 2024
1 parent 7fbda86 commit 30467d3
Showing 1 changed file with 41 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import kotliquery.Query
import kotliquery.Row
import kotliquery.queryOf
import kotliquery.sessionOf
import no.nav.helse.Util.uuid
import no.nav.helse.sikkerlogg
import org.intellij.lang.annotations.Language
import java.time.LocalDateTime
import java.time.ZoneId
import java.util.*
import javax.sql.DataSource

Expand Down Expand Up @@ -58,9 +60,9 @@ internal class VedtaksperiodeVentetilstandDao(private val dataSource: DataSource
}

internal fun stuck() = sessionOf(dataSource).use { session ->
session.list(Query(STUCK)) { row ->
session.list(Query(GJELDENDE_VEDTAKSPERIODER_SOM_VENTER)) { row ->
row.vedtaksperiodeVenter
}
}.stuck
}

internal data class Ventegruppe(val årsak: String, val antall: Int, val propp: Boolean)
Expand Down Expand Up @@ -132,6 +134,42 @@ internal class VedtaksperiodeVentetilstandDao(private val dataSource: DataSource
)
"""


@Language("PostgreSQL")
private val GJELDENDE_VEDTAKSPERIODER_SOM_VENTER = """
SELECT * FROM vedtaksperiode_ventetilstand
WHERE gjeldende = true
AND venter = true
-- Må ha ventet minst 5 minutter før vi anser det som at de har begynt å vente
AND ventetSiden < (now() AT TIME ZONE 'Europe/Oslo') - INTERVAL '5 MINUTES'
"""

private val DefinitivtStuck = setOf("BEREGNING", "UTBETALING", "HJELP")
private val KanTaMerEnnTreMåneder = setOf("GODKJENNING", "INNTEKTSMELDING")
private val List<VedtaksperiodeVenter>.stuck get(): List<VedtaksperiodeVenter> {
val stuck = mutableListOf<VedtaksperiodeVenter>()
val= LocalDateTime.now(ZoneId.of("Europe/Oslo"))
sikkerlogg.info("Stuck i kode: ${this.size} vedtksperioder venter.")
// Om vi venter på en av disse tingene skal det alltid være alarm
val (defnitivtStuck, potensieltStuck) = this.partition { it.venterPå.hva in DefinitivtStuck }
sikkerlogg.info("Stuck i kode: Sortert ut de som definitivt er stuck.")
stuck.addAll(defnitivtStuck)
// Om vi ikke har noe makstid skal alarmen gå når vi har ventet 3 måneder, så fremt det ikke venter på godkjenning fra saksbehandler eller inntektsmelding
val (ventetTreMånederUtenMakstid, resten) = potensieltStuck.partition {
it.venterPå.hva !in KanTaMerEnnTreMåneder && it.venterTil.year == 9999 && it.ventetSiden < nå.minusMonths(3)
}
sikkerlogg.info("Stuck i kode: Sortert ut de som har ventet mer enn tre måneder uten makstid.")
stuck.addAll(ventetTreMånederUtenMakstid)
// Om maksdato er nådd så tyder det på at vi er en periode som ikke kan forkastes tross at maksdato er nådd.
// Trekker fra ekstra 10 dager for å være sikker på at den ikke bare venter på å få en påminnelse fra Spock før den forkastes
val nåddMakstidMenKanIkkeForkastes = resten.filter {
it.venterTil.year != 9999 && it.venterTil < nå.minusDays(10)
}
sikkerlogg.info("Stuck i kode: Sortert ut de som har nådd makstid, men ikke kan forkastes.")
stuck.addAll(nåddMakstidMenKanIkkeForkastes)
return stuck
}

@Language("PostgreSQL")
private val OPPSUMMERING = """
SELECT concat(TRIM(TRAILING '_FORDI_' FROM concat(venterpahva, '_FORDI_', venterpahvorfor)), case when date_part('Year', ventertil) = 9999 AND ventetSiden <= (now() AT TIME ZONE 'Europe/Oslo') - INTERVAL '3 MONTHS' then '_SOM_IKKE_KAN_FORKASTES_OG_HAR_VENTET_MER_ENN_3_MÅNEDER' else '' end) as arsak, vedtaksperiodeid = venterpavedtaksperiodeid as propp, count(1) as antall
Expand Down

0 comments on commit 30467d3

Please sign in to comment.