From 002e3866c169d96a42662c273a35e551725297a3 Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Tue, 10 Dec 2024 16:57:19 +0100 Subject: [PATCH 01/17] Oppdatering av tekst. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa Co-authored-by: Mathias Sundt Müller --- Saksstatistikk.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Saksstatistikk.md b/Saksstatistikk.md index cf5a2b6e..20a4bcae 100644 --- a/Saksstatistikk.md +++ b/Saksstatistikk.md @@ -20,8 +20,8 @@ Felter og beskrivelse av disse: | TEKNISK_TID | Tidspunktet da fagsystemet legger hendelsen i databasen. Kan være at en oppdaterer i batchjobb eller lign. Kan være det samme som endret_tid | Må være med | | SAK_YTELSE | Kode som angir hvilken ytelse/stønad behandlingen gjelder.
Uppercase. Kodeverk må vi finne ut av. | | | BEHANDLING_TYPE | Kode som angir hvilken type behandling det er snakk om.
typisk: vedtak, revurdering, klage, etc. | | -| BEHANDLING_STATUS | Kode som angir hvilken status behandlingen har. Bruk "Oversendt KA" for klager. Ellers: Bruk STATUS. | Skal det være noen markering av at vedtaket er et resultat av klage? Må komme seinere. | -| BEHANDLING_RESULTAT | Kode som angir resultatet på behandling -
Vi kan bruke INNSATSGRUPPE eller avbrutt. | Utkast ikke relevant. Hva skal dette egentlig være? | +| BEHANDLING_STATUS | Kode som angir hvilken status behandlingen har. Bruk "Oversendt KA" for klager. Ellers: Bruk STATUS. UTKAST, SENDT, HISTORISK | Skal det være noen markering av at vedtaket er et resultat av klage? Må komme seinere. | +| BEHANDLING_RESULTAT | Kode som angir resultatet på behandling -
Vi kan bruke INNSATSGRUPPE eller AVBRUTT. | Utkast ikke relevant. Hva skal dette egentlig være? | | BEHANDLING_METODE | Kode som angir om behandlingen er manuell eller to-trinns (Innsatsgruppe Jobbe delvis og Liten mulighet til å jobbe) | Kun manuell | | OPPRETTET_AV | -5 ved kode 6
Nav-Ident ellers | | | SAKSBEHANDLER | -5 ved kode 6
Nav-Ident ellers. Den som sender ut vedtaket, VEILEDER_IDENT. | | From 08f345cbdfc8bb0f5043d1de28d8428b0cfdfcf4 Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Mon, 16 Dec 2024 14:16:08 +0100 Subject: [PATCH 02/17] =?UTF-8?q?F=C3=B8rste=20versjon=20insert=20av=20sak?= =?UTF-8?q?sstatistikkrader=20p=C3=A5=20utkast.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa --- .../java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt b/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt index 4a2a445c..4aca3935 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt @@ -9,8 +9,6 @@ import no.nav.common.client.aktoroppslag.PdlAktorOppslagClient import no.nav.common.client.pdl.PdlClientImpl import no.nav.common.job.leader_election.LeaderElectionClient import no.nav.common.job.leader_election.LeaderElectionHttpClient -import no.nav.common.metrics.InfluxClient -import no.nav.common.metrics.MetricsClient import no.nav.common.token_client.client.AzureAdMachineToMachineTokenClient import no.nav.common.token_client.client.AzureAdOnBehalfOfTokenClient import no.nav.common.utils.AuthUtils From 645ca1cd9e6179eb4f69da7dfdbfe41626798e9c Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Mon, 16 Dec 2024 14:19:32 +0100 Subject: [PATCH 03/17] =?UTF-8?q?F=C3=B8rste=20versjon=20insert=20av=20sak?= =?UTF-8?q?sstatistikkrader=20p=C3=A5=20utkast.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa --- .../domain/statistikk/SakStatistikk.kt | 32 +++++ .../repository/SakStatistikkRepository.kt | 135 ++++++++++++++++++ .../service/SakStatistikkService.kt | 63 ++++++++ .../service/VedtakService.java | 17 ++- .../config/ApplicationTestConfig.kt | 4 +- .../config/RepositoryTestConfig.java | 4 +- .../repository/SakStatistikkRepositoryTest.kt | 110 ++++++++++++++ .../service/VedtakServiceTest.java | 17 ++- 8 files changed, 362 insertions(+), 20 deletions(-) create mode 100644 src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt create mode 100644 src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt create mode 100644 src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt create mode 100644 src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt b/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt new file mode 100644 index 00000000..a81bd017 --- /dev/null +++ b/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt @@ -0,0 +1,32 @@ +package no.nav.veilarbvedtaksstotte.domain.statistikk + +import no.nav.common.types.identer.AktorId +import java.math.BigInteger +import java.time.LocalDateTime +import java.util.* + + +data class SakStatistikk( + val behandlingId: BigInteger, + val behandlingUuid: UUID? = null, + val relatertBehandlingId: BigInteger? = null, + val relatertFagsystem: String? = null, + val sakId: String? = null, + val aktorId: String, + val mottattTid: LocalDateTime, + val registrertTid: LocalDateTime? = null, + val ferdigbehandletTid: LocalDateTime? = null, + val endretTid: LocalDateTime? = null, + val tekniskTid: LocalDateTime? = null, + val sakYtelse: String? = null, + val behandlingType: String? = null, + val behandlingStatus: String? = null, + val behandlingResultat: String? = null, + val behandlingMetode: String? = null, + val opprettetAv: String? = null, + val saksbehandler: String? = null, + val ansvarligBeslutter: String? = null, + val ansvarligEnhet: String? = null, + val avsender: String? = null, + val versjon: String? = null, +) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt new file mode 100644 index 00000000..6b86122c --- /dev/null +++ b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt @@ -0,0 +1,135 @@ +package no.nav.veilarbvedtaksstotte.repository + +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk +import org.springframework.jdbc.core.JdbcTemplate +import org.springframework.jdbc.core.RowMapper +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate +import org.springframework.stereotype.Repository +import java.math.BigInteger +import java.sql.Types +import java.util.* + +@Repository +class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { + + val namedParameterJdbcTemplate = NamedParameterJdbcTemplate(jdbcTemplate) + + val SAK_STATISTIKK_TABLE = "SAK_STATISTIKK" + val BEHANDLING_ID = "BEHANDLING_ID" + val BEHANDLING_UUID = "BEHANDLING_UUID" + val RELATERT_BEHANDLING_ID = "RELATERT_BEHANDLING_ID" + val RELATERT_FAGSYSTEM = "RELATERT_FAGSYSTEM" + val SAK_ID = "SAK_ID" + val AKTOR_ID = "AKTOR_ID" + val MOTTATT_TID = "MOTTATT_TID" + val REGISTRERT_TID = "REGISTRERT_TID" + val FERDIGBEHANDLET_TID = "FERDIGBEHANDLET_TID" + val ENDRET_TID = "ENDRET_TID" + val TEKNISK_TID = "TEKNISK_TID" + val SAK_YTELSE = "SAK_YTELSE" + val BEHANDLING_TYPE = "BEHANDLING_TYPE" + val BEHANDLING_STATUS = "BEHANDLING_STATUS" + val BEHANDLING_RESULTAT = "BEHANDLING_RESULTAT" + val BEHANDLING_METODE = "BEHANDLING_METODE" + val OPPRETTET_AV = "OPPRETTET_AV" + val SAKSBEHANDLER = "SAKSBEHANDLER" + val ANSVARLIG_BESLUTTER = "ANSVARLIG_BESLUTTER" + val ANSVARLIG_ENHET = "ANSVARLIG_ENHET" + val AVSENDER = "AVSENDER" + val VERSJON = "VERSJON" + + fun insertSakStatistikkRad(sakStatistikkRad: SakStatistikk) { + val sql = + """ + INSERT INTO $SAK_STATISTIKK_TABLE ($BEHANDLING_ID, $BEHANDLING_UUID, $RELATERT_BEHANDLING_ID, + $RELATERT_FAGSYSTEM, $SAK_ID, $AKTOR_ID, $MOTTATT_TID, $REGISTRERT_TID, $FERDIGBEHANDLET_TID, + $ENDRET_TID, $TEKNISK_TID, $SAK_YTELSE, $BEHANDLING_TYPE, $BEHANDLING_STATUS, + $BEHANDLING_RESULTAT, $BEHANDLING_METODE, $OPPRETTET_AV, $SAKSBEHANDLER, $ANSVARLIG_BESLUTTER, + $ANSVARLIG_ENHET, $AVSENDER, $VERSJON) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + + """ + + jdbcTemplate.update( + sql, + sakStatistikkRad.behandlingId, + sakStatistikkRad.behandlingUuid, + sakStatistikkRad.relatertBehandlingId, + sakStatistikkRad.relatertFagsystem, + sakStatistikkRad.sakId, + sakStatistikkRad.aktorId, + sakStatistikkRad.mottattTid, + sakStatistikkRad.registrertTid, + sakStatistikkRad.ferdigbehandletTid, + sakStatistikkRad.endretTid, + sakStatistikkRad.tekniskTid, + sakStatistikkRad.sakYtelse, + sakStatistikkRad.behandlingType, + sakStatistikkRad.behandlingStatus, + sakStatistikkRad.behandlingResultat, + sakStatistikkRad.behandlingMetode, + sakStatistikkRad.opprettetAv, + sakStatistikkRad.saksbehandler, + sakStatistikkRad.ansvarligBeslutter, + sakStatistikkRad.ansvarligEnhet, + sakStatistikkRad.avsender, + sakStatistikkRad.versjon + ) + } + fun hentSakStatistikkListeAlt(behandlingId: BigInteger): List { + val parameters = MapSqlParameterSource("behandlingId", behandlingId) + val sql = "SELECT * FROM $SAK_STATISTIKK_TABLE WHERE $BEHANDLING_ID = :behandlingId" + + return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper) + } + fun hentSakStatistikkListe(aktorId: String): List { + val parameters = MapSqlParameterSource("aktorId", aktorId) + + val sql = "SELECT * FROM $SAK_STATISTIKK_TABLE WHERE $AKTOR_ID = :aktorId" + + return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper) + } + /* + fun insertSakStatistikkRadUtkast(behandlingId: String, aktorId: String, opprettetAv: String, ansvarligEnhet: String) { + val parameters = MapSqlParameterSource() + .addValue("behandlingId", behandlingId.toBigInteger(), Types.BIGINT) + .addValue("aktorId", aktorId, Types.VARCHAR) + .addValue("opprettetAv", opprettetAv, Types.VARCHAR) + .addValue("ansvarligEnhet", ansvarligEnhet, Types.VARCHAR) + .addValue("avsender", "Oppfølgingsvedtak § 14 a", Types.VARCHAR) + .addValue("versjon", "Dockerimage_tag_1", Types.VARCHAR) + + val sql = """INSERT INTO $SAK_STATISTIKK_TABLE ($BEHANDLING_ID, $AKTOR_ID, $OPPRETTET_AV, $ANSVARLIG_ENHET, $AVSENDER, $VERSJON) + VALUES (:behandlingId, :aktorId, :opprettetAv, :ansvarligEnhet, :avsender, :versjon)""" + jdbcTemplate.update(sql, parameters) + } +*/ + + private val sakStatistikkRowMapper: RowMapper = RowMapper { rs, _ -> + SakStatistikk( + behandlingId = rs.getBigDecimal(BEHANDLING_ID).toBigInteger(), + behandlingUuid = rs.getString(BEHANDLING_UUID)?.let { UUID.fromString(it) }, + relatertBehandlingId = rs.getBigDecimal(RELATERT_BEHANDLING_ID)?.toBigInteger(), + relatertFagsystem = rs.getString(RELATERT_FAGSYSTEM), + sakId = rs.getString(SAK_ID), + aktorId = rs.getString(AKTOR_ID), + mottattTid = rs.getTimestamp(MOTTATT_TID).toLocalDateTime(), + registrertTid = rs.getTimestamp(REGISTRERT_TID).toLocalDateTime(), + ferdigbehandletTid = rs.getTimestamp(FERDIGBEHANDLET_TID)?.toLocalDateTime(), + endretTid = rs.getTimestamp(ENDRET_TID)?.toLocalDateTime(), + tekniskTid = rs.getTimestamp(TEKNISK_TID)?.toLocalDateTime(), + sakYtelse = rs.getString(SAK_YTELSE), + behandlingType = rs.getString(BEHANDLING_TYPE), + behandlingStatus = rs.getString(BEHANDLING_STATUS), + behandlingResultat = rs.getString(BEHANDLING_RESULTAT), + behandlingMetode = rs.getString(BEHANDLING_METODE), + opprettetAv = rs.getString(OPPRETTET_AV), + saksbehandler = rs.getString(SAKSBEHANDLER), + ansvarligBeslutter = rs.getString(ANSVARLIG_BESLUTTER), + ansvarligEnhet = rs.getString(ANSVARLIG_ENHET), + avsender = rs.getString(AVSENDER), + versjon = rs.getString(VERSJON) + ) + } +} diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt new file mode 100644 index 00000000..6701b17e --- /dev/null +++ b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt @@ -0,0 +1,63 @@ +package no.nav.veilarbvedtaksstotte.service + +import no.nav.common.client.aktoroppslag.AktorOppslagClient +import org.slf4j.LoggerFactory +import no.nav.common.types.identer.Fnr +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk +import no.nav.veilarbvedtaksstotte.repository.SakStatistikkRepository +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Service +import java.time.LocalDateTime +import java.util.Date + +private val log = LoggerFactory.getLogger(SakStatistikkService::class.java) +private val AVSENDER = "Oppfølgingsvedtak § 14 a" +@Service +class SakStatistikkService @Autowired constructor( + private val sakStatistikkRepository: SakStatistikkRepository, + private val authService: AuthService, + private val aktorOppslagClient: AktorOppslagClient, +) { + private fun sjekkOmUtkastRadFinnes(statistikkListe: List?): Boolean { + if (statistikkListe == null) { + return false + } + val antallUtkast = statistikkListe.stream() + .filter { item: SakStatistikk -> item.behandlingMetode == "UTKAST" } + .toList() + .size + return antallUtkast == 0 + } + + fun hentStatistikkRader(fnr: Fnr): List { + val aktorId = aktorOppslagClient.hentAktorId(fnr) + authService.sjekkTilgangTilBrukerOgEnhet(fnr) + return sakStatistikkRepository.hentSakStatistikkListe(aktorId.toString()) + } + + + fun leggTilStatistikkRad(sakStatistikkRad: SakStatistikk): Boolean { + val personFnr = authService.getFnrOrThrow(sakStatistikkRad.aktorId) + val eksisterendeRader = hentStatistikkRader(personFnr) + log.debug("Eksisterende rader: {}", true) + if (sjekkOmUtkastRadFinnes(eksisterendeRader) + ) { + log.info("Insert SakStatistikk-rad for bruker: {}", sakStatistikkRad) + sakStatistikkRepository.insertSakStatistikkRad(sakStatistikkRad) + return true + } + return false + } + + fun leggTilStatistikkRadUtkast(behandlingId: Long, aktorId: String, veilederIdent: String, oppfolgingsenhetId: String): Boolean { + //TODO: Hent mottattTid (som er start oppfølgingsperiode på første vedtak, vi må komme tilbake til hva det er ved seinere vedtak i samme periode. + //TODO: Avsender er en konstant, versjon må hentes fra Docker-image + val sakStatistikk = SakStatistikk(behandlingId = behandlingId.toBigInteger(), aktorId = aktorId, mottattTid = LocalDateTime.now(), endretTid = LocalDateTime.now(), tekniskTid = LocalDateTime.now(), + opprettetAv = veilederIdent, ansvarligEnhet = oppfolgingsenhetId, avsender = AVSENDER, versjon = "Dockerimage_tag_1") + sakStatistikkRepository.insertSakStatistikkRad(sakStatistikk) + return true + } + + +} + diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java b/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java index 54a55311..6d88930a 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java +++ b/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java @@ -1,6 +1,5 @@ package no.nav.veilarbvedtaksstotte.service; -import io.getunleash.DefaultUnleash; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -16,15 +15,13 @@ import no.nav.veilarbvedtaksstotte.domain.arkiv.BrevKode; import no.nav.veilarbvedtaksstotte.domain.dialog.SystemMeldingType; import no.nav.veilarbvedtaksstotte.domain.oyeblikksbilde.OyeblikksbildeType; +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk; import no.nav.veilarbvedtaksstotte.domain.vedtak.BeslutterProsessStatus; import no.nav.veilarbvedtaksstotte.domain.vedtak.Innsatsgruppe; import no.nav.veilarbvedtaksstotte.domain.vedtak.Kilde; import no.nav.veilarbvedtaksstotte.domain.vedtak.Vedtak; import no.nav.veilarbvedtaksstotte.domain.vedtak.VedtakStatus; -import no.nav.veilarbvedtaksstotte.repository.BeslutteroversiktRepository; -import no.nav.veilarbvedtaksstotte.repository.KilderRepository; -import no.nav.veilarbvedtaksstotte.repository.MeldingRepository; -import no.nav.veilarbvedtaksstotte.repository.VedtaksstotteRepository; +import no.nav.veilarbvedtaksstotte.repository.*; import no.nav.veilarbvedtaksstotte.utils.VedtakUtils; import org.springframework.http.HttpStatus; import org.springframework.scheduling.annotation.Scheduled; @@ -67,6 +64,7 @@ public class VedtakService { private final MetricsService metricsService; private final LeaderElectionClient leaderElection; + private final SakStatistikkService sakStatistikkService; @SneakyThrows public void fattVedtak(long vedtakId) { @@ -141,7 +139,7 @@ public void journalforeVedtak(Vedtak vedtak) { if (journalpost.getDokumenter().isEmpty()) { log.error("Ingen dokumentInfoId i respons fra journalføring"); } else { - dokumentInfoId = journalpost.getDokumenter().get(0).getDokumentInfoId(); + dokumentInfoId = journalpost.getDokumenter().getFirst().getDokumentInfoId(); } boolean journalpostferdigstilt = journalpost.getJournalpostferdigstilt(); @@ -197,6 +195,9 @@ public void lagUtkast(Fnr fnr) { vedtaksstotteRepository.opprettUtkast(aktorId, innloggetVeilederIdent, oppfolgingsenhetId); Vedtak utkast = vedtaksstotteRepository.hentUtkast(aktorId); + Boolean lagreStatistikk = sakStatistikkService.leggTilStatistikkRadUtkast(utkast.getId(), aktorId, innloggetVeilederIdent, oppfolgingsenhetId); + + vedtakStatusEndringService.utkastOpprettet(utkast); meldingRepository.opprettSystemMelding(utkast.getId(), SystemMeldingType.UTKAST_OPPRETTET, innloggetVeilederIdent); @@ -233,9 +234,7 @@ private void oppdatereDokumentIdforJournalfortOyeblikksbilde(long vedtakId, Stri Arrays.stream(journalpost.getData().getJournalpost().dokumenter) .filter(journalfortDokument -> OyeblikksbildeType.contains(journalfortDokument.brevkode)) .forEach( - journalfortDokument -> { - oyeblikksbildeService.lagreJournalfortDokumentId(vedtakId, journalfortDokument.dokumentInfoId, OyeblikksbildeType.from(BrevKode.valueOf(journalfortDokument.brevkode))); - } + journalfortDokument -> oyeblikksbildeService.lagreJournalfortDokumentId(vedtakId, journalfortDokument.dokumentInfoId, OyeblikksbildeType.from(BrevKode.valueOf(journalfortDokument.brevkode))) ); log.info(format( "Oppdatert dokumentId for oyeblikksbilde for vedtakId: %s", diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt b/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt index 3f56edf6..31623502 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt +++ b/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt @@ -19,6 +19,7 @@ import no.nav.veilarbvedtaksstotte.metrics.DokumentdistribusjonMeterBinder import no.nav.veilarbvedtaksstotte.mock.MetricsClientMock import no.nav.veilarbvedtaksstotte.mock.PoaoTilgangClientMock import no.nav.veilarbvedtaksstotte.service.PdfService +import no.nav.veilarbvedtaksstotte.service.SakStatistikkService import no.nav.veilarbvedtaksstotte.utils.JsonUtils.init import no.nav.veilarbvedtaksstotte.utils.PostgresContainer import no.nav.veilarbvedtaksstotte.utils.SingletonKafkaContainer @@ -53,7 +54,8 @@ import javax.sql.DataSource KafkaConsumerConfig::class, DokumentdistribusjonMeterBinder::class, PdfService::class, - ArbeidssoekerRegisteretService::class + ArbeidssoekerRegisteretService::class, + SakStatistikkService::class ) class ApplicationTestConfig { @Bean diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java b/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java index 6494e241..00bb3a9a 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java +++ b/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java @@ -7,6 +7,7 @@ import no.nav.veilarbvedtaksstotte.repository.OyeblikksbildeRepository; import no.nav.veilarbvedtaksstotte.repository.UtrullingRepository; import no.nav.veilarbvedtaksstotte.repository.VedtaksstotteRepository; +import no.nav.veilarbvedtaksstotte.repository.SakStatistikkRepository; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @@ -18,6 +19,7 @@ OyeblikksbildeRepository.class, VedtaksstotteRepository.class, UtrullingRepository.class, - ArenaVedtakRepository.class + ArenaVedtakRepository.class, + SakStatistikkRepository.class }) public class RepositoryTestConfig {} diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt new file mode 100644 index 00000000..fa2393d8 --- /dev/null +++ b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt @@ -0,0 +1,110 @@ +package no.nav.veilarbvedtaksstotte.repository + +import no.nav.common.types.identer.AktorId +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk +import no.nav.veilarbvedtaksstotte.utils.DatabaseTest +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.BeforeAll +import java.time.LocalDateTime +import java.util.* + +class SakStatistikkRepositoryTest : DatabaseTest() { + /* + class VedtakUtkast( + val id: String, + val aktorId: String, + val veilederIdent: String, + val oppfolgingsenhetId: String, + ) + + */ + companion object { + lateinit var sakStatistikkRepository: SakStatistikkRepository + + @BeforeAll + @JvmStatic + fun setup(): Unit { + sakStatistikkRepository = SakStatistikkRepository(jdbcTemplate) + } + } + + @Test + fun `lagre statistikkrad`() { + + val statistikkRad = SakStatistikk( + behandlingId = 3001.toBigInteger(), + behandlingUuid = UUID.fromString("f47ac10b-58cc-4372-a567-0e02b2c3d479"), + relatertBehandlingId = null, + relatertFagsystem = null, + sakId = "Arbeidsoppfølging", + aktorId = "2004140973848", + mottattTid = LocalDateTime.now().minusDays(2), + registrertTid = LocalDateTime.now(), + ferdigbehandletTid = null, + endretTid = LocalDateTime.now(), + tekniskTid = LocalDateTime.now().plusHours(1), + sakYtelse = null, + behandlingType = "VEDTAK", + behandlingStatus = "UTKAST", + behandlingResultat = null, + behandlingMetode = "MANUELL", + opprettetAv = "Z123456", + saksbehandler = "Z123456", + ansvarligBeslutter = null, + ansvarligEnhet = "0220", + avsender = "Oppfølgingsvedtak § 14 a", + versjon = "Dockerimage_tag_1" + ) + sakStatistikkRepository.insertSakStatistikkRad(statistikkRad) + val lagretStatistikkRadAlt = sakStatistikkRepository.hentSakStatistikkListeAlt(3001.toBigInteger()) + val lagretStatistikkRad = sakStatistikkRepository.hentSakStatistikkListe("2004140973848") + assertEquals(lagretStatistikkRadAlt.get(0).behandlingId, lagretStatistikkRad.get(1).behandlingId) + } + + @Test + fun `lagre statistikkrad utkast`() { + val statistikkRad2 = SakStatistikk( + behandlingId = 3002.toBigInteger(), + behandlingUuid = null, + relatertBehandlingId = null, + relatertFagsystem = null, + sakId = null, + aktorId = "2004140973848", + mottattTid = LocalDateTime.now().minusDays(2), + registrertTid = LocalDateTime.now(), + ferdigbehandletTid = null, + endretTid = LocalDateTime.now(), + tekniskTid = LocalDateTime.now().plusHours(1), + sakYtelse = null, + behandlingType = "VEDTAK", + behandlingStatus = "UTKAST", + behandlingResultat = null, + behandlingMetode = "MANUELL", + opprettetAv = "Z123456", + saksbehandler = "Z123456", + ansvarligBeslutter = null, + ansvarligEnhet = "0220", + avsender = "Oppfølgingsvedtak § 14 a", + versjon = "Dockerimage_tag_1" + ) + val aktorId = AktorId.of("2004140973848") + val behandlingId = 3002.toBigInteger() + sakStatistikkRepository.insertSakStatistikkRad(statistikkRad2) + val lagretStatistikkRadUtkast = behandlingId.let { sakStatistikkRepository.hentSakStatistikkListe(aktorId.toString()) } + assertEquals(behandlingId.toString(), lagretStatistikkRadUtkast.get(0).behandlingId.toString())}} +/* + @Test + fun `lagre statistikkrad utkast2`() { + + val vedtakUtkast = VedtakUtkast( + id = "1", + aktorId = "aktor123", + veilederIdent = "2004140973848", + oppfolgingsenhetId = "0220" + ) + sakStatistikkRepository.insertSakStatistikkRadUtkast(vedtakUtkast.id, vedtakUtkast.aktorId, vedtakUtkast.veilederIdent, vedtakUtkast.oppfolgingsenhetId) + val lagretStatistikkRadUtkast = vedtakUtkast.id.let { sakStatistikkRepository.hentSakStatistikkListe(vedtakUtkast.aktorId.toString()) } + assertEquals(vedtakUtkast.id.toString(), lagretStatistikkRadUtkast.get(0).behandlingId.toString())} +} +*/ \ No newline at end of file diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java b/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java index 41093f09..b9535b53 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java +++ b/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java @@ -48,11 +48,7 @@ import no.nav.veilarbvedtaksstotte.domain.vedtak.Innsatsgruppe; import no.nav.veilarbvedtaksstotte.domain.vedtak.Vedtak; import no.nav.veilarbvedtaksstotte.domain.vedtak.VedtakStatus; -import no.nav.veilarbvedtaksstotte.repository.BeslutteroversiktRepository; -import no.nav.veilarbvedtaksstotte.repository.KilderRepository; -import no.nav.veilarbvedtaksstotte.repository.MeldingRepository; -import no.nav.veilarbvedtaksstotte.repository.OyeblikksbildeRepository; -import no.nav.veilarbvedtaksstotte.repository.VedtaksstotteRepository; +import no.nav.veilarbvedtaksstotte.repository.*; import no.nav.veilarbvedtaksstotte.utils.DatabaseTest; import no.nav.veilarbvedtaksstotte.utils.DbTestUtils; import no.nav.veilarbvedtaksstotte.utils.JsonUtils; @@ -104,7 +100,7 @@ public class VedtakServiceTest extends DatabaseTest { private static VedtaksstotteRepository vedtaksstotteRepository; private static KilderRepository kilderRepository; private static MeldingRepository meldingRepository; - + private static SakStatistikkRepository sakStatistikkRepository; private static VedtakService vedtakService; private static OyeblikksbildeService oyeblikksbildeService; private static AuthService authService; @@ -130,7 +126,7 @@ public class VedtakServiceTest extends DatabaseTest { private static final SafClient safClient = mock(SafClient.class); private static final MetricsService metricsService = mock(MetricsService.class); private static final PoaoTilgangClient poaoTilgangClient = mock(PoaoTilgangClient.class); - + private static final SakStatistikkService sakStatistikkService = mock(SakStatistikkService.class); private static final PdfService pdfService = mock(PdfService.class); @BeforeAll @@ -141,8 +137,10 @@ public static void setupOnce() { vedtaksstotteRepository = new VedtaksstotteRepository(jdbcTemplate, transactor); OyeblikksbildeRepository oyeblikksbildeRepository = new OyeblikksbildeRepository(jdbcTemplate); BeslutteroversiktRepository beslutteroversiktRepository = new BeslutteroversiktRepository(jdbcTemplate); - authService = spy(new AuthService(aktorOppslagClient, veilarbarenaService, AuthContextHolderThreadLocal.instance(), utrullingService, poaoTilgangClient)); + SakStatistikkRepository sakStatistikkRepository = new SakStatistikkRepository(jdbcTemplate); + SakStatistikkService sakStatistikkService = new SakStatistikkService(sakStatistikkRepository,authService, aktorOppslagClient); + oyeblikksbildeService = new OyeblikksbildeService(authService, oyeblikksbildeRepository, vedtaksstotteRepository, veilarbpersonClient, aia_backend_client, arbeidssoekerRegistretService); MalTypeService malTypeService = new MalTypeService(arbeidssoekerRegistretService); DokumentService dokumentService = new DokumentService( @@ -167,7 +165,8 @@ public static void setupOnce() { dokumentService, veilarbarenaService, metricsService, - leaderElectionClient); + leaderElectionClient, + sakStatistikkService); } @BeforeEach From 9a1f91fc730f93c31fbcd192846967d15dfc799a Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Mon, 16 Dec 2024 14:16:08 +0100 Subject: [PATCH 04/17] =?UTF-8?q?F=C3=B8rste=20versjon=20insert=20av=20sak?= =?UTF-8?q?sstatistikkrader=20p=C3=A5=20utkast.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa --- .../java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt b/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt index 4a2a445c..4aca3935 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt @@ -9,8 +9,6 @@ import no.nav.common.client.aktoroppslag.PdlAktorOppslagClient import no.nav.common.client.pdl.PdlClientImpl import no.nav.common.job.leader_election.LeaderElectionClient import no.nav.common.job.leader_election.LeaderElectionHttpClient -import no.nav.common.metrics.InfluxClient -import no.nav.common.metrics.MetricsClient import no.nav.common.token_client.client.AzureAdMachineToMachineTokenClient import no.nav.common.token_client.client.AzureAdOnBehalfOfTokenClient import no.nav.common.utils.AuthUtils From 740cc6596503854424cec17830e5842950aef4a4 Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Mon, 16 Dec 2024 14:19:32 +0100 Subject: [PATCH 05/17] =?UTF-8?q?F=C3=B8rste=20versjon=20insert=20av=20sak?= =?UTF-8?q?sstatistikkrader=20p=C3=A5=20utkast.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa --- .../domain/statistikk/SakStatistikk.kt | 32 +++++ .../repository/SakStatistikkRepository.kt | 135 ++++++++++++++++++ .../service/SakStatistikkService.kt | 63 ++++++++ .../service/VedtakService.java | 17 ++- .../config/ApplicationTestConfig.kt | 4 +- .../config/RepositoryTestConfig.java | 4 +- .../repository/SakStatistikkRepositoryTest.kt | 110 ++++++++++++++ .../service/VedtakServiceTest.java | 17 ++- 8 files changed, 362 insertions(+), 20 deletions(-) create mode 100644 src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt create mode 100644 src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt create mode 100644 src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt create mode 100644 src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt b/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt new file mode 100644 index 00000000..a81bd017 --- /dev/null +++ b/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt @@ -0,0 +1,32 @@ +package no.nav.veilarbvedtaksstotte.domain.statistikk + +import no.nav.common.types.identer.AktorId +import java.math.BigInteger +import java.time.LocalDateTime +import java.util.* + + +data class SakStatistikk( + val behandlingId: BigInteger, + val behandlingUuid: UUID? = null, + val relatertBehandlingId: BigInteger? = null, + val relatertFagsystem: String? = null, + val sakId: String? = null, + val aktorId: String, + val mottattTid: LocalDateTime, + val registrertTid: LocalDateTime? = null, + val ferdigbehandletTid: LocalDateTime? = null, + val endretTid: LocalDateTime? = null, + val tekniskTid: LocalDateTime? = null, + val sakYtelse: String? = null, + val behandlingType: String? = null, + val behandlingStatus: String? = null, + val behandlingResultat: String? = null, + val behandlingMetode: String? = null, + val opprettetAv: String? = null, + val saksbehandler: String? = null, + val ansvarligBeslutter: String? = null, + val ansvarligEnhet: String? = null, + val avsender: String? = null, + val versjon: String? = null, +) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt new file mode 100644 index 00000000..6b86122c --- /dev/null +++ b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt @@ -0,0 +1,135 @@ +package no.nav.veilarbvedtaksstotte.repository + +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk +import org.springframework.jdbc.core.JdbcTemplate +import org.springframework.jdbc.core.RowMapper +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate +import org.springframework.stereotype.Repository +import java.math.BigInteger +import java.sql.Types +import java.util.* + +@Repository +class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { + + val namedParameterJdbcTemplate = NamedParameterJdbcTemplate(jdbcTemplate) + + val SAK_STATISTIKK_TABLE = "SAK_STATISTIKK" + val BEHANDLING_ID = "BEHANDLING_ID" + val BEHANDLING_UUID = "BEHANDLING_UUID" + val RELATERT_BEHANDLING_ID = "RELATERT_BEHANDLING_ID" + val RELATERT_FAGSYSTEM = "RELATERT_FAGSYSTEM" + val SAK_ID = "SAK_ID" + val AKTOR_ID = "AKTOR_ID" + val MOTTATT_TID = "MOTTATT_TID" + val REGISTRERT_TID = "REGISTRERT_TID" + val FERDIGBEHANDLET_TID = "FERDIGBEHANDLET_TID" + val ENDRET_TID = "ENDRET_TID" + val TEKNISK_TID = "TEKNISK_TID" + val SAK_YTELSE = "SAK_YTELSE" + val BEHANDLING_TYPE = "BEHANDLING_TYPE" + val BEHANDLING_STATUS = "BEHANDLING_STATUS" + val BEHANDLING_RESULTAT = "BEHANDLING_RESULTAT" + val BEHANDLING_METODE = "BEHANDLING_METODE" + val OPPRETTET_AV = "OPPRETTET_AV" + val SAKSBEHANDLER = "SAKSBEHANDLER" + val ANSVARLIG_BESLUTTER = "ANSVARLIG_BESLUTTER" + val ANSVARLIG_ENHET = "ANSVARLIG_ENHET" + val AVSENDER = "AVSENDER" + val VERSJON = "VERSJON" + + fun insertSakStatistikkRad(sakStatistikkRad: SakStatistikk) { + val sql = + """ + INSERT INTO $SAK_STATISTIKK_TABLE ($BEHANDLING_ID, $BEHANDLING_UUID, $RELATERT_BEHANDLING_ID, + $RELATERT_FAGSYSTEM, $SAK_ID, $AKTOR_ID, $MOTTATT_TID, $REGISTRERT_TID, $FERDIGBEHANDLET_TID, + $ENDRET_TID, $TEKNISK_TID, $SAK_YTELSE, $BEHANDLING_TYPE, $BEHANDLING_STATUS, + $BEHANDLING_RESULTAT, $BEHANDLING_METODE, $OPPRETTET_AV, $SAKSBEHANDLER, $ANSVARLIG_BESLUTTER, + $ANSVARLIG_ENHET, $AVSENDER, $VERSJON) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + + """ + + jdbcTemplate.update( + sql, + sakStatistikkRad.behandlingId, + sakStatistikkRad.behandlingUuid, + sakStatistikkRad.relatertBehandlingId, + sakStatistikkRad.relatertFagsystem, + sakStatistikkRad.sakId, + sakStatistikkRad.aktorId, + sakStatistikkRad.mottattTid, + sakStatistikkRad.registrertTid, + sakStatistikkRad.ferdigbehandletTid, + sakStatistikkRad.endretTid, + sakStatistikkRad.tekniskTid, + sakStatistikkRad.sakYtelse, + sakStatistikkRad.behandlingType, + sakStatistikkRad.behandlingStatus, + sakStatistikkRad.behandlingResultat, + sakStatistikkRad.behandlingMetode, + sakStatistikkRad.opprettetAv, + sakStatistikkRad.saksbehandler, + sakStatistikkRad.ansvarligBeslutter, + sakStatistikkRad.ansvarligEnhet, + sakStatistikkRad.avsender, + sakStatistikkRad.versjon + ) + } + fun hentSakStatistikkListeAlt(behandlingId: BigInteger): List { + val parameters = MapSqlParameterSource("behandlingId", behandlingId) + val sql = "SELECT * FROM $SAK_STATISTIKK_TABLE WHERE $BEHANDLING_ID = :behandlingId" + + return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper) + } + fun hentSakStatistikkListe(aktorId: String): List { + val parameters = MapSqlParameterSource("aktorId", aktorId) + + val sql = "SELECT * FROM $SAK_STATISTIKK_TABLE WHERE $AKTOR_ID = :aktorId" + + return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper) + } + /* + fun insertSakStatistikkRadUtkast(behandlingId: String, aktorId: String, opprettetAv: String, ansvarligEnhet: String) { + val parameters = MapSqlParameterSource() + .addValue("behandlingId", behandlingId.toBigInteger(), Types.BIGINT) + .addValue("aktorId", aktorId, Types.VARCHAR) + .addValue("opprettetAv", opprettetAv, Types.VARCHAR) + .addValue("ansvarligEnhet", ansvarligEnhet, Types.VARCHAR) + .addValue("avsender", "Oppfølgingsvedtak § 14 a", Types.VARCHAR) + .addValue("versjon", "Dockerimage_tag_1", Types.VARCHAR) + + val sql = """INSERT INTO $SAK_STATISTIKK_TABLE ($BEHANDLING_ID, $AKTOR_ID, $OPPRETTET_AV, $ANSVARLIG_ENHET, $AVSENDER, $VERSJON) + VALUES (:behandlingId, :aktorId, :opprettetAv, :ansvarligEnhet, :avsender, :versjon)""" + jdbcTemplate.update(sql, parameters) + } +*/ + + private val sakStatistikkRowMapper: RowMapper = RowMapper { rs, _ -> + SakStatistikk( + behandlingId = rs.getBigDecimal(BEHANDLING_ID).toBigInteger(), + behandlingUuid = rs.getString(BEHANDLING_UUID)?.let { UUID.fromString(it) }, + relatertBehandlingId = rs.getBigDecimal(RELATERT_BEHANDLING_ID)?.toBigInteger(), + relatertFagsystem = rs.getString(RELATERT_FAGSYSTEM), + sakId = rs.getString(SAK_ID), + aktorId = rs.getString(AKTOR_ID), + mottattTid = rs.getTimestamp(MOTTATT_TID).toLocalDateTime(), + registrertTid = rs.getTimestamp(REGISTRERT_TID).toLocalDateTime(), + ferdigbehandletTid = rs.getTimestamp(FERDIGBEHANDLET_TID)?.toLocalDateTime(), + endretTid = rs.getTimestamp(ENDRET_TID)?.toLocalDateTime(), + tekniskTid = rs.getTimestamp(TEKNISK_TID)?.toLocalDateTime(), + sakYtelse = rs.getString(SAK_YTELSE), + behandlingType = rs.getString(BEHANDLING_TYPE), + behandlingStatus = rs.getString(BEHANDLING_STATUS), + behandlingResultat = rs.getString(BEHANDLING_RESULTAT), + behandlingMetode = rs.getString(BEHANDLING_METODE), + opprettetAv = rs.getString(OPPRETTET_AV), + saksbehandler = rs.getString(SAKSBEHANDLER), + ansvarligBeslutter = rs.getString(ANSVARLIG_BESLUTTER), + ansvarligEnhet = rs.getString(ANSVARLIG_ENHET), + avsender = rs.getString(AVSENDER), + versjon = rs.getString(VERSJON) + ) + } +} diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt new file mode 100644 index 00000000..6701b17e --- /dev/null +++ b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt @@ -0,0 +1,63 @@ +package no.nav.veilarbvedtaksstotte.service + +import no.nav.common.client.aktoroppslag.AktorOppslagClient +import org.slf4j.LoggerFactory +import no.nav.common.types.identer.Fnr +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk +import no.nav.veilarbvedtaksstotte.repository.SakStatistikkRepository +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Service +import java.time.LocalDateTime +import java.util.Date + +private val log = LoggerFactory.getLogger(SakStatistikkService::class.java) +private val AVSENDER = "Oppfølgingsvedtak § 14 a" +@Service +class SakStatistikkService @Autowired constructor( + private val sakStatistikkRepository: SakStatistikkRepository, + private val authService: AuthService, + private val aktorOppslagClient: AktorOppslagClient, +) { + private fun sjekkOmUtkastRadFinnes(statistikkListe: List?): Boolean { + if (statistikkListe == null) { + return false + } + val antallUtkast = statistikkListe.stream() + .filter { item: SakStatistikk -> item.behandlingMetode == "UTKAST" } + .toList() + .size + return antallUtkast == 0 + } + + fun hentStatistikkRader(fnr: Fnr): List { + val aktorId = aktorOppslagClient.hentAktorId(fnr) + authService.sjekkTilgangTilBrukerOgEnhet(fnr) + return sakStatistikkRepository.hentSakStatistikkListe(aktorId.toString()) + } + + + fun leggTilStatistikkRad(sakStatistikkRad: SakStatistikk): Boolean { + val personFnr = authService.getFnrOrThrow(sakStatistikkRad.aktorId) + val eksisterendeRader = hentStatistikkRader(personFnr) + log.debug("Eksisterende rader: {}", true) + if (sjekkOmUtkastRadFinnes(eksisterendeRader) + ) { + log.info("Insert SakStatistikk-rad for bruker: {}", sakStatistikkRad) + sakStatistikkRepository.insertSakStatistikkRad(sakStatistikkRad) + return true + } + return false + } + + fun leggTilStatistikkRadUtkast(behandlingId: Long, aktorId: String, veilederIdent: String, oppfolgingsenhetId: String): Boolean { + //TODO: Hent mottattTid (som er start oppfølgingsperiode på første vedtak, vi må komme tilbake til hva det er ved seinere vedtak i samme periode. + //TODO: Avsender er en konstant, versjon må hentes fra Docker-image + val sakStatistikk = SakStatistikk(behandlingId = behandlingId.toBigInteger(), aktorId = aktorId, mottattTid = LocalDateTime.now(), endretTid = LocalDateTime.now(), tekniskTid = LocalDateTime.now(), + opprettetAv = veilederIdent, ansvarligEnhet = oppfolgingsenhetId, avsender = AVSENDER, versjon = "Dockerimage_tag_1") + sakStatistikkRepository.insertSakStatistikkRad(sakStatistikk) + return true + } + + +} + diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java b/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java index 54a55311..6d88930a 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java +++ b/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java @@ -1,6 +1,5 @@ package no.nav.veilarbvedtaksstotte.service; -import io.getunleash.DefaultUnleash; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -16,15 +15,13 @@ import no.nav.veilarbvedtaksstotte.domain.arkiv.BrevKode; import no.nav.veilarbvedtaksstotte.domain.dialog.SystemMeldingType; import no.nav.veilarbvedtaksstotte.domain.oyeblikksbilde.OyeblikksbildeType; +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk; import no.nav.veilarbvedtaksstotte.domain.vedtak.BeslutterProsessStatus; import no.nav.veilarbvedtaksstotte.domain.vedtak.Innsatsgruppe; import no.nav.veilarbvedtaksstotte.domain.vedtak.Kilde; import no.nav.veilarbvedtaksstotte.domain.vedtak.Vedtak; import no.nav.veilarbvedtaksstotte.domain.vedtak.VedtakStatus; -import no.nav.veilarbvedtaksstotte.repository.BeslutteroversiktRepository; -import no.nav.veilarbvedtaksstotte.repository.KilderRepository; -import no.nav.veilarbvedtaksstotte.repository.MeldingRepository; -import no.nav.veilarbvedtaksstotte.repository.VedtaksstotteRepository; +import no.nav.veilarbvedtaksstotte.repository.*; import no.nav.veilarbvedtaksstotte.utils.VedtakUtils; import org.springframework.http.HttpStatus; import org.springframework.scheduling.annotation.Scheduled; @@ -67,6 +64,7 @@ public class VedtakService { private final MetricsService metricsService; private final LeaderElectionClient leaderElection; + private final SakStatistikkService sakStatistikkService; @SneakyThrows public void fattVedtak(long vedtakId) { @@ -141,7 +139,7 @@ public void journalforeVedtak(Vedtak vedtak) { if (journalpost.getDokumenter().isEmpty()) { log.error("Ingen dokumentInfoId i respons fra journalføring"); } else { - dokumentInfoId = journalpost.getDokumenter().get(0).getDokumentInfoId(); + dokumentInfoId = journalpost.getDokumenter().getFirst().getDokumentInfoId(); } boolean journalpostferdigstilt = journalpost.getJournalpostferdigstilt(); @@ -197,6 +195,9 @@ public void lagUtkast(Fnr fnr) { vedtaksstotteRepository.opprettUtkast(aktorId, innloggetVeilederIdent, oppfolgingsenhetId); Vedtak utkast = vedtaksstotteRepository.hentUtkast(aktorId); + Boolean lagreStatistikk = sakStatistikkService.leggTilStatistikkRadUtkast(utkast.getId(), aktorId, innloggetVeilederIdent, oppfolgingsenhetId); + + vedtakStatusEndringService.utkastOpprettet(utkast); meldingRepository.opprettSystemMelding(utkast.getId(), SystemMeldingType.UTKAST_OPPRETTET, innloggetVeilederIdent); @@ -233,9 +234,7 @@ private void oppdatereDokumentIdforJournalfortOyeblikksbilde(long vedtakId, Stri Arrays.stream(journalpost.getData().getJournalpost().dokumenter) .filter(journalfortDokument -> OyeblikksbildeType.contains(journalfortDokument.brevkode)) .forEach( - journalfortDokument -> { - oyeblikksbildeService.lagreJournalfortDokumentId(vedtakId, journalfortDokument.dokumentInfoId, OyeblikksbildeType.from(BrevKode.valueOf(journalfortDokument.brevkode))); - } + journalfortDokument -> oyeblikksbildeService.lagreJournalfortDokumentId(vedtakId, journalfortDokument.dokumentInfoId, OyeblikksbildeType.from(BrevKode.valueOf(journalfortDokument.brevkode))) ); log.info(format( "Oppdatert dokumentId for oyeblikksbilde for vedtakId: %s", diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt b/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt index 3f56edf6..31623502 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt +++ b/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt @@ -19,6 +19,7 @@ import no.nav.veilarbvedtaksstotte.metrics.DokumentdistribusjonMeterBinder import no.nav.veilarbvedtaksstotte.mock.MetricsClientMock import no.nav.veilarbvedtaksstotte.mock.PoaoTilgangClientMock import no.nav.veilarbvedtaksstotte.service.PdfService +import no.nav.veilarbvedtaksstotte.service.SakStatistikkService import no.nav.veilarbvedtaksstotte.utils.JsonUtils.init import no.nav.veilarbvedtaksstotte.utils.PostgresContainer import no.nav.veilarbvedtaksstotte.utils.SingletonKafkaContainer @@ -53,7 +54,8 @@ import javax.sql.DataSource KafkaConsumerConfig::class, DokumentdistribusjonMeterBinder::class, PdfService::class, - ArbeidssoekerRegisteretService::class + ArbeidssoekerRegisteretService::class, + SakStatistikkService::class ) class ApplicationTestConfig { @Bean diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java b/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java index 6494e241..00bb3a9a 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java +++ b/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java @@ -7,6 +7,7 @@ import no.nav.veilarbvedtaksstotte.repository.OyeblikksbildeRepository; import no.nav.veilarbvedtaksstotte.repository.UtrullingRepository; import no.nav.veilarbvedtaksstotte.repository.VedtaksstotteRepository; +import no.nav.veilarbvedtaksstotte.repository.SakStatistikkRepository; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @@ -18,6 +19,7 @@ OyeblikksbildeRepository.class, VedtaksstotteRepository.class, UtrullingRepository.class, - ArenaVedtakRepository.class + ArenaVedtakRepository.class, + SakStatistikkRepository.class }) public class RepositoryTestConfig {} diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt new file mode 100644 index 00000000..fa2393d8 --- /dev/null +++ b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt @@ -0,0 +1,110 @@ +package no.nav.veilarbvedtaksstotte.repository + +import no.nav.common.types.identer.AktorId +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk +import no.nav.veilarbvedtaksstotte.utils.DatabaseTest +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.BeforeAll +import java.time.LocalDateTime +import java.util.* + +class SakStatistikkRepositoryTest : DatabaseTest() { + /* + class VedtakUtkast( + val id: String, + val aktorId: String, + val veilederIdent: String, + val oppfolgingsenhetId: String, + ) + + */ + companion object { + lateinit var sakStatistikkRepository: SakStatistikkRepository + + @BeforeAll + @JvmStatic + fun setup(): Unit { + sakStatistikkRepository = SakStatistikkRepository(jdbcTemplate) + } + } + + @Test + fun `lagre statistikkrad`() { + + val statistikkRad = SakStatistikk( + behandlingId = 3001.toBigInteger(), + behandlingUuid = UUID.fromString("f47ac10b-58cc-4372-a567-0e02b2c3d479"), + relatertBehandlingId = null, + relatertFagsystem = null, + sakId = "Arbeidsoppfølging", + aktorId = "2004140973848", + mottattTid = LocalDateTime.now().minusDays(2), + registrertTid = LocalDateTime.now(), + ferdigbehandletTid = null, + endretTid = LocalDateTime.now(), + tekniskTid = LocalDateTime.now().plusHours(1), + sakYtelse = null, + behandlingType = "VEDTAK", + behandlingStatus = "UTKAST", + behandlingResultat = null, + behandlingMetode = "MANUELL", + opprettetAv = "Z123456", + saksbehandler = "Z123456", + ansvarligBeslutter = null, + ansvarligEnhet = "0220", + avsender = "Oppfølgingsvedtak § 14 a", + versjon = "Dockerimage_tag_1" + ) + sakStatistikkRepository.insertSakStatistikkRad(statistikkRad) + val lagretStatistikkRadAlt = sakStatistikkRepository.hentSakStatistikkListeAlt(3001.toBigInteger()) + val lagretStatistikkRad = sakStatistikkRepository.hentSakStatistikkListe("2004140973848") + assertEquals(lagretStatistikkRadAlt.get(0).behandlingId, lagretStatistikkRad.get(1).behandlingId) + } + + @Test + fun `lagre statistikkrad utkast`() { + val statistikkRad2 = SakStatistikk( + behandlingId = 3002.toBigInteger(), + behandlingUuid = null, + relatertBehandlingId = null, + relatertFagsystem = null, + sakId = null, + aktorId = "2004140973848", + mottattTid = LocalDateTime.now().minusDays(2), + registrertTid = LocalDateTime.now(), + ferdigbehandletTid = null, + endretTid = LocalDateTime.now(), + tekniskTid = LocalDateTime.now().plusHours(1), + sakYtelse = null, + behandlingType = "VEDTAK", + behandlingStatus = "UTKAST", + behandlingResultat = null, + behandlingMetode = "MANUELL", + opprettetAv = "Z123456", + saksbehandler = "Z123456", + ansvarligBeslutter = null, + ansvarligEnhet = "0220", + avsender = "Oppfølgingsvedtak § 14 a", + versjon = "Dockerimage_tag_1" + ) + val aktorId = AktorId.of("2004140973848") + val behandlingId = 3002.toBigInteger() + sakStatistikkRepository.insertSakStatistikkRad(statistikkRad2) + val lagretStatistikkRadUtkast = behandlingId.let { sakStatistikkRepository.hentSakStatistikkListe(aktorId.toString()) } + assertEquals(behandlingId.toString(), lagretStatistikkRadUtkast.get(0).behandlingId.toString())}} +/* + @Test + fun `lagre statistikkrad utkast2`() { + + val vedtakUtkast = VedtakUtkast( + id = "1", + aktorId = "aktor123", + veilederIdent = "2004140973848", + oppfolgingsenhetId = "0220" + ) + sakStatistikkRepository.insertSakStatistikkRadUtkast(vedtakUtkast.id, vedtakUtkast.aktorId, vedtakUtkast.veilederIdent, vedtakUtkast.oppfolgingsenhetId) + val lagretStatistikkRadUtkast = vedtakUtkast.id.let { sakStatistikkRepository.hentSakStatistikkListe(vedtakUtkast.aktorId.toString()) } + assertEquals(vedtakUtkast.id.toString(), lagretStatistikkRadUtkast.get(0).behandlingId.toString())} +} +*/ \ No newline at end of file diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java b/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java index 41093f09..b9535b53 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java +++ b/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java @@ -48,11 +48,7 @@ import no.nav.veilarbvedtaksstotte.domain.vedtak.Innsatsgruppe; import no.nav.veilarbvedtaksstotte.domain.vedtak.Vedtak; import no.nav.veilarbvedtaksstotte.domain.vedtak.VedtakStatus; -import no.nav.veilarbvedtaksstotte.repository.BeslutteroversiktRepository; -import no.nav.veilarbvedtaksstotte.repository.KilderRepository; -import no.nav.veilarbvedtaksstotte.repository.MeldingRepository; -import no.nav.veilarbvedtaksstotte.repository.OyeblikksbildeRepository; -import no.nav.veilarbvedtaksstotte.repository.VedtaksstotteRepository; +import no.nav.veilarbvedtaksstotte.repository.*; import no.nav.veilarbvedtaksstotte.utils.DatabaseTest; import no.nav.veilarbvedtaksstotte.utils.DbTestUtils; import no.nav.veilarbvedtaksstotte.utils.JsonUtils; @@ -104,7 +100,7 @@ public class VedtakServiceTest extends DatabaseTest { private static VedtaksstotteRepository vedtaksstotteRepository; private static KilderRepository kilderRepository; private static MeldingRepository meldingRepository; - + private static SakStatistikkRepository sakStatistikkRepository; private static VedtakService vedtakService; private static OyeblikksbildeService oyeblikksbildeService; private static AuthService authService; @@ -130,7 +126,7 @@ public class VedtakServiceTest extends DatabaseTest { private static final SafClient safClient = mock(SafClient.class); private static final MetricsService metricsService = mock(MetricsService.class); private static final PoaoTilgangClient poaoTilgangClient = mock(PoaoTilgangClient.class); - + private static final SakStatistikkService sakStatistikkService = mock(SakStatistikkService.class); private static final PdfService pdfService = mock(PdfService.class); @BeforeAll @@ -141,8 +137,10 @@ public static void setupOnce() { vedtaksstotteRepository = new VedtaksstotteRepository(jdbcTemplate, transactor); OyeblikksbildeRepository oyeblikksbildeRepository = new OyeblikksbildeRepository(jdbcTemplate); BeslutteroversiktRepository beslutteroversiktRepository = new BeslutteroversiktRepository(jdbcTemplate); - authService = spy(new AuthService(aktorOppslagClient, veilarbarenaService, AuthContextHolderThreadLocal.instance(), utrullingService, poaoTilgangClient)); + SakStatistikkRepository sakStatistikkRepository = new SakStatistikkRepository(jdbcTemplate); + SakStatistikkService sakStatistikkService = new SakStatistikkService(sakStatistikkRepository,authService, aktorOppslagClient); + oyeblikksbildeService = new OyeblikksbildeService(authService, oyeblikksbildeRepository, vedtaksstotteRepository, veilarbpersonClient, aia_backend_client, arbeidssoekerRegistretService); MalTypeService malTypeService = new MalTypeService(arbeidssoekerRegistretService); DokumentService dokumentService = new DokumentService( @@ -167,7 +165,8 @@ public static void setupOnce() { dokumentService, veilarbarenaService, metricsService, - leaderElectionClient); + leaderElectionClient, + sakStatistikkService); } @BeforeEach From 27470aebac61c7641cd62192f178f9573fdfb335 Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Tue, 17 Dec 2024 13:24:02 +0100 Subject: [PATCH 06/17] Tilpasser tester til tre nye kolonner i sakstatistikk. Co-authored-by: Julie Hill Roa --- .../domain/statistikk/SakStatistikk.kt | 6 +++-- .../repository/SakStatistikkRepository.kt | 24 +++++++++++------ .../repository/SakStatistikkRepositoryTest.kt | 27 ++++++++----------- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt b/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt index a81bd017..13f1292c 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt @@ -1,6 +1,5 @@ package no.nav.veilarbvedtaksstotte.domain.statistikk -import no.nav.common.types.identer.AktorId import java.math.BigInteger import java.time.LocalDateTime import java.util.* @@ -8,11 +7,12 @@ import java.util.* data class SakStatistikk( val behandlingId: BigInteger, + val aktorId: String, + val oppfolgingPeriodeUUID: UUID? = null, val behandlingUuid: UUID? = null, val relatertBehandlingId: BigInteger? = null, val relatertFagsystem: String? = null, val sakId: String? = null, - val aktorId: String, val mottattTid: LocalDateTime, val registrertTid: LocalDateTime? = null, val ferdigbehandletTid: LocalDateTime? = null, @@ -23,6 +23,8 @@ data class SakStatistikk( val behandlingStatus: String? = null, val behandlingResultat: String? = null, val behandlingMetode: String? = null, + val innsatsgruppe: String? = null, + val hovedmal: String? = null, val opprettetAv: String? = null, val saksbehandler: String? = null, val ansvarligBeslutter: String? = null, diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt index 6b86122c..1507f8cc 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt @@ -7,7 +7,6 @@ import org.springframework.jdbc.core.namedparam.MapSqlParameterSource import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate import org.springframework.stereotype.Repository import java.math.BigInteger -import java.sql.Types import java.util.* @Repository @@ -16,12 +15,13 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { val namedParameterJdbcTemplate = NamedParameterJdbcTemplate(jdbcTemplate) val SAK_STATISTIKK_TABLE = "SAK_STATISTIKK" + val AKTOR_ID = "AKTOR_ID" + val OPPFOLGING_PERIODE_UUID = "OPPFOLGING_PERIODE_UUID" val BEHANDLING_ID = "BEHANDLING_ID" val BEHANDLING_UUID = "BEHANDLING_UUID" val RELATERT_BEHANDLING_ID = "RELATERT_BEHANDLING_ID" val RELATERT_FAGSYSTEM = "RELATERT_FAGSYSTEM" val SAK_ID = "SAK_ID" - val AKTOR_ID = "AKTOR_ID" val MOTTATT_TID = "MOTTATT_TID" val REGISTRERT_TID = "REGISTRERT_TID" val FERDIGBEHANDLET_TID = "FERDIGBEHANDLET_TID" @@ -32,6 +32,8 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { val BEHANDLING_STATUS = "BEHANDLING_STATUS" val BEHANDLING_RESULTAT = "BEHANDLING_RESULTAT" val BEHANDLING_METODE = "BEHANDLING_METODE" + val INNSATSGRUPPE = "INNSATSGRUPPE" + val HOVEDMAL = "HOVEDMAL" val OPPRETTET_AV = "OPPRETTET_AV" val SAKSBEHANDLER = "SAKSBEHANDLER" val ANSVARLIG_BESLUTTER = "ANSVARLIG_BESLUTTER" @@ -42,23 +44,24 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { fun insertSakStatistikkRad(sakStatistikkRad: SakStatistikk) { val sql = """ - INSERT INTO $SAK_STATISTIKK_TABLE ($BEHANDLING_ID, $BEHANDLING_UUID, $RELATERT_BEHANDLING_ID, - $RELATERT_FAGSYSTEM, $SAK_ID, $AKTOR_ID, $MOTTATT_TID, $REGISTRERT_TID, $FERDIGBEHANDLET_TID, + INSERT INTO $SAK_STATISTIKK_TABLE ($AKTOR_ID, $OPPFOLGING_PERIODE_UUID, $BEHANDLING_ID, $BEHANDLING_UUID, $RELATERT_BEHANDLING_ID, + $RELATERT_FAGSYSTEM, $SAK_ID, $MOTTATT_TID, $REGISTRERT_TID, $FERDIGBEHANDLET_TID, $ENDRET_TID, $TEKNISK_TID, $SAK_YTELSE, $BEHANDLING_TYPE, $BEHANDLING_STATUS, - $BEHANDLING_RESULTAT, $BEHANDLING_METODE, $OPPRETTET_AV, $SAKSBEHANDLER, $ANSVARLIG_BESLUTTER, + $BEHANDLING_RESULTAT, $BEHANDLING_METODE, $INNSATSGRUPPE, $HOVEDMAL, $OPPRETTET_AV, $SAKSBEHANDLER, $ANSVARLIG_BESLUTTER, $ANSVARLIG_ENHET, $AVSENDER, $VERSJON) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?) """ jdbcTemplate.update( sql, sakStatistikkRad.behandlingId, + sakStatistikkRad.aktorId, + sakStatistikkRad.oppfolgingPeriodeUUID, sakStatistikkRad.behandlingUuid, sakStatistikkRad.relatertBehandlingId, sakStatistikkRad.relatertFagsystem, sakStatistikkRad.sakId, - sakStatistikkRad.aktorId, sakStatistikkRad.mottattTid, sakStatistikkRad.registrertTid, sakStatistikkRad.ferdigbehandletTid, @@ -69,6 +72,8 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { sakStatistikkRad.behandlingStatus, sakStatistikkRad.behandlingResultat, sakStatistikkRad.behandlingMetode, + sakStatistikkRad.innsatsgruppe, + sakStatistikkRad.hovedmal, sakStatistikkRad.opprettetAv, sakStatistikkRad.saksbehandler, sakStatistikkRad.ansvarligBeslutter, @@ -108,12 +113,13 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { private val sakStatistikkRowMapper: RowMapper = RowMapper { rs, _ -> SakStatistikk( + aktorId = rs.getString(AKTOR_ID), + oppfolgingPeriodeUUID = rs.getString(OPPFOLGING_PERIODE_UUID)?.let { UUID.fromString(it) }, behandlingId = rs.getBigDecimal(BEHANDLING_ID).toBigInteger(), behandlingUuid = rs.getString(BEHANDLING_UUID)?.let { UUID.fromString(it) }, relatertBehandlingId = rs.getBigDecimal(RELATERT_BEHANDLING_ID)?.toBigInteger(), relatertFagsystem = rs.getString(RELATERT_FAGSYSTEM), sakId = rs.getString(SAK_ID), - aktorId = rs.getString(AKTOR_ID), mottattTid = rs.getTimestamp(MOTTATT_TID).toLocalDateTime(), registrertTid = rs.getTimestamp(REGISTRERT_TID).toLocalDateTime(), ferdigbehandletTid = rs.getTimestamp(FERDIGBEHANDLET_TID)?.toLocalDateTime(), @@ -124,6 +130,8 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { behandlingStatus = rs.getString(BEHANDLING_STATUS), behandlingResultat = rs.getString(BEHANDLING_RESULTAT), behandlingMetode = rs.getString(BEHANDLING_METODE), + innsatsgruppe = rs.getString(INNSATSGRUPPE), + hovedmal = rs.getString(HOVEDMAL), opprettetAv = rs.getString(OPPRETTET_AV), saksbehandler = rs.getString(SAKSBEHANDLER), ansvarligBeslutter = rs.getString(ANSVARLIG_BESLUTTER), diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt index fa2393d8..ee4708ea 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt +++ b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt @@ -10,15 +10,7 @@ import java.time.LocalDateTime import java.util.* class SakStatistikkRepositoryTest : DatabaseTest() { - /* - class VedtakUtkast( - val id: String, - val aktorId: String, - val veilederIdent: String, - val oppfolgingsenhetId: String, - ) - */ companion object { lateinit var sakStatistikkRepository: SakStatistikkRepository @@ -30,28 +22,31 @@ class SakStatistikkRepositoryTest : DatabaseTest() { } @Test - fun `lagre statistikkrad`() { + fun `lagre statistikkrad vedtak`() { val statistikkRad = SakStatistikk( + aktorId = "2004140973848", + oppfolgingPeriodeUUID = UUID.fromString("1a930d0d-6931-403e-852c-b85e39673aaf"), behandlingId = 3001.toBigInteger(), behandlingUuid = UUID.fromString("f47ac10b-58cc-4372-a567-0e02b2c3d479"), relatertBehandlingId = null, relatertFagsystem = null, sakId = "Arbeidsoppfølging", - aktorId = "2004140973848", mottattTid = LocalDateTime.now().minusDays(2), - registrertTid = LocalDateTime.now(), - ferdigbehandletTid = null, + registrertTid = LocalDateTime.now().minusDays(1), + ferdigbehandletTid = LocalDateTime.now(), endretTid = LocalDateTime.now(), tekniskTid = LocalDateTime.now().plusHours(1), - sakYtelse = null, + sakYtelse = "BIST14A_IKVAL", behandlingType = "VEDTAK", - behandlingStatus = "UTKAST", - behandlingResultat = null, + behandlingStatus = "SENDT", + behandlingResultat = "STANDARD_INNSATS", behandlingMetode = "MANUELL", + innsatsgruppe = "STANDARD_INNSATS", + hovedmal = "SKAFFE_ARBEID", opprettetAv = "Z123456", saksbehandler = "Z123456", - ansvarligBeslutter = null, + ansvarligBeslutter = "Z123456", ansvarligEnhet = "0220", avsender = "Oppfølgingsvedtak § 14 a", versjon = "Dockerimage_tag_1" From 8be3244e65c866b6f30aed96a39d4b05a73de918 Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Tue, 17 Dec 2024 13:47:09 +0100 Subject: [PATCH 07/17] =?UTF-8?q?S=C3=B8rger=20for=20riktig=20rekkef=C3=B8?= =?UTF-8?q?lge=20p=C3=A5=20felter.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa --- .../repository/SakStatistikkRepository.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt index 1507f8cc..ece4377c 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt @@ -49,15 +49,15 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { $ENDRET_TID, $TEKNISK_TID, $SAK_YTELSE, $BEHANDLING_TYPE, $BEHANDLING_STATUS, $BEHANDLING_RESULTAT, $BEHANDLING_METODE, $INNSATSGRUPPE, $HOVEDMAL, $OPPRETTET_AV, $SAKSBEHANDLER, $ANSVARLIG_BESLUTTER, $ANSVARLIG_ENHET, $AVSENDER, $VERSJON) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """ jdbcTemplate.update( sql, - sakStatistikkRad.behandlingId, sakStatistikkRad.aktorId, sakStatistikkRad.oppfolgingPeriodeUUID, + sakStatistikkRad.behandlingId, sakStatistikkRad.behandlingUuid, sakStatistikkRad.relatertBehandlingId, sakStatistikkRad.relatertFagsystem, From f00614de7765d3ca52d41d5a3b1415b83bcaf69a Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Mon, 16 Dec 2024 14:16:08 +0100 Subject: [PATCH 08/17] =?UTF-8?q?F=C3=B8rste=20versjon=20insert=20av=20sak?= =?UTF-8?q?sstatistikkrader=20p=C3=A5=20utkast.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa --- .../java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt b/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt index 4a2a445c..4aca3935 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/config/ClientConfig.kt @@ -9,8 +9,6 @@ import no.nav.common.client.aktoroppslag.PdlAktorOppslagClient import no.nav.common.client.pdl.PdlClientImpl import no.nav.common.job.leader_election.LeaderElectionClient import no.nav.common.job.leader_election.LeaderElectionHttpClient -import no.nav.common.metrics.InfluxClient -import no.nav.common.metrics.MetricsClient import no.nav.common.token_client.client.AzureAdMachineToMachineTokenClient import no.nav.common.token_client.client.AzureAdOnBehalfOfTokenClient import no.nav.common.utils.AuthUtils From 1e13c08901ca6504562afdd792006443fbd6fb54 Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Mon, 16 Dec 2024 14:19:32 +0100 Subject: [PATCH 09/17] =?UTF-8?q?F=C3=B8rste=20versjon=20insert=20av=20sak?= =?UTF-8?q?sstatistikkrader=20p=C3=A5=20utkast.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa --- .../domain/statistikk/SakStatistikk.kt | 32 +++++ .../repository/SakStatistikkRepository.kt | 135 ++++++++++++++++++ .../service/SakStatistikkService.kt | 63 ++++++++ .../service/VedtakService.java | 17 ++- .../config/ApplicationTestConfig.kt | 4 +- .../config/RepositoryTestConfig.java | 4 +- .../repository/SakStatistikkRepositoryTest.kt | 110 ++++++++++++++ .../service/VedtakServiceTest.java | 17 ++- 8 files changed, 362 insertions(+), 20 deletions(-) create mode 100644 src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt create mode 100644 src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt create mode 100644 src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt create mode 100644 src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt b/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt new file mode 100644 index 00000000..a81bd017 --- /dev/null +++ b/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt @@ -0,0 +1,32 @@ +package no.nav.veilarbvedtaksstotte.domain.statistikk + +import no.nav.common.types.identer.AktorId +import java.math.BigInteger +import java.time.LocalDateTime +import java.util.* + + +data class SakStatistikk( + val behandlingId: BigInteger, + val behandlingUuid: UUID? = null, + val relatertBehandlingId: BigInteger? = null, + val relatertFagsystem: String? = null, + val sakId: String? = null, + val aktorId: String, + val mottattTid: LocalDateTime, + val registrertTid: LocalDateTime? = null, + val ferdigbehandletTid: LocalDateTime? = null, + val endretTid: LocalDateTime? = null, + val tekniskTid: LocalDateTime? = null, + val sakYtelse: String? = null, + val behandlingType: String? = null, + val behandlingStatus: String? = null, + val behandlingResultat: String? = null, + val behandlingMetode: String? = null, + val opprettetAv: String? = null, + val saksbehandler: String? = null, + val ansvarligBeslutter: String? = null, + val ansvarligEnhet: String? = null, + val avsender: String? = null, + val versjon: String? = null, +) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt new file mode 100644 index 00000000..6b86122c --- /dev/null +++ b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt @@ -0,0 +1,135 @@ +package no.nav.veilarbvedtaksstotte.repository + +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk +import org.springframework.jdbc.core.JdbcTemplate +import org.springframework.jdbc.core.RowMapper +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate +import org.springframework.stereotype.Repository +import java.math.BigInteger +import java.sql.Types +import java.util.* + +@Repository +class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { + + val namedParameterJdbcTemplate = NamedParameterJdbcTemplate(jdbcTemplate) + + val SAK_STATISTIKK_TABLE = "SAK_STATISTIKK" + val BEHANDLING_ID = "BEHANDLING_ID" + val BEHANDLING_UUID = "BEHANDLING_UUID" + val RELATERT_BEHANDLING_ID = "RELATERT_BEHANDLING_ID" + val RELATERT_FAGSYSTEM = "RELATERT_FAGSYSTEM" + val SAK_ID = "SAK_ID" + val AKTOR_ID = "AKTOR_ID" + val MOTTATT_TID = "MOTTATT_TID" + val REGISTRERT_TID = "REGISTRERT_TID" + val FERDIGBEHANDLET_TID = "FERDIGBEHANDLET_TID" + val ENDRET_TID = "ENDRET_TID" + val TEKNISK_TID = "TEKNISK_TID" + val SAK_YTELSE = "SAK_YTELSE" + val BEHANDLING_TYPE = "BEHANDLING_TYPE" + val BEHANDLING_STATUS = "BEHANDLING_STATUS" + val BEHANDLING_RESULTAT = "BEHANDLING_RESULTAT" + val BEHANDLING_METODE = "BEHANDLING_METODE" + val OPPRETTET_AV = "OPPRETTET_AV" + val SAKSBEHANDLER = "SAKSBEHANDLER" + val ANSVARLIG_BESLUTTER = "ANSVARLIG_BESLUTTER" + val ANSVARLIG_ENHET = "ANSVARLIG_ENHET" + val AVSENDER = "AVSENDER" + val VERSJON = "VERSJON" + + fun insertSakStatistikkRad(sakStatistikkRad: SakStatistikk) { + val sql = + """ + INSERT INTO $SAK_STATISTIKK_TABLE ($BEHANDLING_ID, $BEHANDLING_UUID, $RELATERT_BEHANDLING_ID, + $RELATERT_FAGSYSTEM, $SAK_ID, $AKTOR_ID, $MOTTATT_TID, $REGISTRERT_TID, $FERDIGBEHANDLET_TID, + $ENDRET_TID, $TEKNISK_TID, $SAK_YTELSE, $BEHANDLING_TYPE, $BEHANDLING_STATUS, + $BEHANDLING_RESULTAT, $BEHANDLING_METODE, $OPPRETTET_AV, $SAKSBEHANDLER, $ANSVARLIG_BESLUTTER, + $ANSVARLIG_ENHET, $AVSENDER, $VERSJON) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + + """ + + jdbcTemplate.update( + sql, + sakStatistikkRad.behandlingId, + sakStatistikkRad.behandlingUuid, + sakStatistikkRad.relatertBehandlingId, + sakStatistikkRad.relatertFagsystem, + sakStatistikkRad.sakId, + sakStatistikkRad.aktorId, + sakStatistikkRad.mottattTid, + sakStatistikkRad.registrertTid, + sakStatistikkRad.ferdigbehandletTid, + sakStatistikkRad.endretTid, + sakStatistikkRad.tekniskTid, + sakStatistikkRad.sakYtelse, + sakStatistikkRad.behandlingType, + sakStatistikkRad.behandlingStatus, + sakStatistikkRad.behandlingResultat, + sakStatistikkRad.behandlingMetode, + sakStatistikkRad.opprettetAv, + sakStatistikkRad.saksbehandler, + sakStatistikkRad.ansvarligBeslutter, + sakStatistikkRad.ansvarligEnhet, + sakStatistikkRad.avsender, + sakStatistikkRad.versjon + ) + } + fun hentSakStatistikkListeAlt(behandlingId: BigInteger): List { + val parameters = MapSqlParameterSource("behandlingId", behandlingId) + val sql = "SELECT * FROM $SAK_STATISTIKK_TABLE WHERE $BEHANDLING_ID = :behandlingId" + + return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper) + } + fun hentSakStatistikkListe(aktorId: String): List { + val parameters = MapSqlParameterSource("aktorId", aktorId) + + val sql = "SELECT * FROM $SAK_STATISTIKK_TABLE WHERE $AKTOR_ID = :aktorId" + + return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper) + } + /* + fun insertSakStatistikkRadUtkast(behandlingId: String, aktorId: String, opprettetAv: String, ansvarligEnhet: String) { + val parameters = MapSqlParameterSource() + .addValue("behandlingId", behandlingId.toBigInteger(), Types.BIGINT) + .addValue("aktorId", aktorId, Types.VARCHAR) + .addValue("opprettetAv", opprettetAv, Types.VARCHAR) + .addValue("ansvarligEnhet", ansvarligEnhet, Types.VARCHAR) + .addValue("avsender", "Oppfølgingsvedtak § 14 a", Types.VARCHAR) + .addValue("versjon", "Dockerimage_tag_1", Types.VARCHAR) + + val sql = """INSERT INTO $SAK_STATISTIKK_TABLE ($BEHANDLING_ID, $AKTOR_ID, $OPPRETTET_AV, $ANSVARLIG_ENHET, $AVSENDER, $VERSJON) + VALUES (:behandlingId, :aktorId, :opprettetAv, :ansvarligEnhet, :avsender, :versjon)""" + jdbcTemplate.update(sql, parameters) + } +*/ + + private val sakStatistikkRowMapper: RowMapper = RowMapper { rs, _ -> + SakStatistikk( + behandlingId = rs.getBigDecimal(BEHANDLING_ID).toBigInteger(), + behandlingUuid = rs.getString(BEHANDLING_UUID)?.let { UUID.fromString(it) }, + relatertBehandlingId = rs.getBigDecimal(RELATERT_BEHANDLING_ID)?.toBigInteger(), + relatertFagsystem = rs.getString(RELATERT_FAGSYSTEM), + sakId = rs.getString(SAK_ID), + aktorId = rs.getString(AKTOR_ID), + mottattTid = rs.getTimestamp(MOTTATT_TID).toLocalDateTime(), + registrertTid = rs.getTimestamp(REGISTRERT_TID).toLocalDateTime(), + ferdigbehandletTid = rs.getTimestamp(FERDIGBEHANDLET_TID)?.toLocalDateTime(), + endretTid = rs.getTimestamp(ENDRET_TID)?.toLocalDateTime(), + tekniskTid = rs.getTimestamp(TEKNISK_TID)?.toLocalDateTime(), + sakYtelse = rs.getString(SAK_YTELSE), + behandlingType = rs.getString(BEHANDLING_TYPE), + behandlingStatus = rs.getString(BEHANDLING_STATUS), + behandlingResultat = rs.getString(BEHANDLING_RESULTAT), + behandlingMetode = rs.getString(BEHANDLING_METODE), + opprettetAv = rs.getString(OPPRETTET_AV), + saksbehandler = rs.getString(SAKSBEHANDLER), + ansvarligBeslutter = rs.getString(ANSVARLIG_BESLUTTER), + ansvarligEnhet = rs.getString(ANSVARLIG_ENHET), + avsender = rs.getString(AVSENDER), + versjon = rs.getString(VERSJON) + ) + } +} diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt new file mode 100644 index 00000000..6701b17e --- /dev/null +++ b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt @@ -0,0 +1,63 @@ +package no.nav.veilarbvedtaksstotte.service + +import no.nav.common.client.aktoroppslag.AktorOppslagClient +import org.slf4j.LoggerFactory +import no.nav.common.types.identer.Fnr +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk +import no.nav.veilarbvedtaksstotte.repository.SakStatistikkRepository +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Service +import java.time.LocalDateTime +import java.util.Date + +private val log = LoggerFactory.getLogger(SakStatistikkService::class.java) +private val AVSENDER = "Oppfølgingsvedtak § 14 a" +@Service +class SakStatistikkService @Autowired constructor( + private val sakStatistikkRepository: SakStatistikkRepository, + private val authService: AuthService, + private val aktorOppslagClient: AktorOppslagClient, +) { + private fun sjekkOmUtkastRadFinnes(statistikkListe: List?): Boolean { + if (statistikkListe == null) { + return false + } + val antallUtkast = statistikkListe.stream() + .filter { item: SakStatistikk -> item.behandlingMetode == "UTKAST" } + .toList() + .size + return antallUtkast == 0 + } + + fun hentStatistikkRader(fnr: Fnr): List { + val aktorId = aktorOppslagClient.hentAktorId(fnr) + authService.sjekkTilgangTilBrukerOgEnhet(fnr) + return sakStatistikkRepository.hentSakStatistikkListe(aktorId.toString()) + } + + + fun leggTilStatistikkRad(sakStatistikkRad: SakStatistikk): Boolean { + val personFnr = authService.getFnrOrThrow(sakStatistikkRad.aktorId) + val eksisterendeRader = hentStatistikkRader(personFnr) + log.debug("Eksisterende rader: {}", true) + if (sjekkOmUtkastRadFinnes(eksisterendeRader) + ) { + log.info("Insert SakStatistikk-rad for bruker: {}", sakStatistikkRad) + sakStatistikkRepository.insertSakStatistikkRad(sakStatistikkRad) + return true + } + return false + } + + fun leggTilStatistikkRadUtkast(behandlingId: Long, aktorId: String, veilederIdent: String, oppfolgingsenhetId: String): Boolean { + //TODO: Hent mottattTid (som er start oppfølgingsperiode på første vedtak, vi må komme tilbake til hva det er ved seinere vedtak i samme periode. + //TODO: Avsender er en konstant, versjon må hentes fra Docker-image + val sakStatistikk = SakStatistikk(behandlingId = behandlingId.toBigInteger(), aktorId = aktorId, mottattTid = LocalDateTime.now(), endretTid = LocalDateTime.now(), tekniskTid = LocalDateTime.now(), + opprettetAv = veilederIdent, ansvarligEnhet = oppfolgingsenhetId, avsender = AVSENDER, versjon = "Dockerimage_tag_1") + sakStatistikkRepository.insertSakStatistikkRad(sakStatistikk) + return true + } + + +} + diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java b/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java index 54a55311..6d88930a 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java +++ b/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java @@ -1,6 +1,5 @@ package no.nav.veilarbvedtaksstotte.service; -import io.getunleash.DefaultUnleash; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -16,15 +15,13 @@ import no.nav.veilarbvedtaksstotte.domain.arkiv.BrevKode; import no.nav.veilarbvedtaksstotte.domain.dialog.SystemMeldingType; import no.nav.veilarbvedtaksstotte.domain.oyeblikksbilde.OyeblikksbildeType; +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk; import no.nav.veilarbvedtaksstotte.domain.vedtak.BeslutterProsessStatus; import no.nav.veilarbvedtaksstotte.domain.vedtak.Innsatsgruppe; import no.nav.veilarbvedtaksstotte.domain.vedtak.Kilde; import no.nav.veilarbvedtaksstotte.domain.vedtak.Vedtak; import no.nav.veilarbvedtaksstotte.domain.vedtak.VedtakStatus; -import no.nav.veilarbvedtaksstotte.repository.BeslutteroversiktRepository; -import no.nav.veilarbvedtaksstotte.repository.KilderRepository; -import no.nav.veilarbvedtaksstotte.repository.MeldingRepository; -import no.nav.veilarbvedtaksstotte.repository.VedtaksstotteRepository; +import no.nav.veilarbvedtaksstotte.repository.*; import no.nav.veilarbvedtaksstotte.utils.VedtakUtils; import org.springframework.http.HttpStatus; import org.springframework.scheduling.annotation.Scheduled; @@ -67,6 +64,7 @@ public class VedtakService { private final MetricsService metricsService; private final LeaderElectionClient leaderElection; + private final SakStatistikkService sakStatistikkService; @SneakyThrows public void fattVedtak(long vedtakId) { @@ -141,7 +139,7 @@ public void journalforeVedtak(Vedtak vedtak) { if (journalpost.getDokumenter().isEmpty()) { log.error("Ingen dokumentInfoId i respons fra journalføring"); } else { - dokumentInfoId = journalpost.getDokumenter().get(0).getDokumentInfoId(); + dokumentInfoId = journalpost.getDokumenter().getFirst().getDokumentInfoId(); } boolean journalpostferdigstilt = journalpost.getJournalpostferdigstilt(); @@ -197,6 +195,9 @@ public void lagUtkast(Fnr fnr) { vedtaksstotteRepository.opprettUtkast(aktorId, innloggetVeilederIdent, oppfolgingsenhetId); Vedtak utkast = vedtaksstotteRepository.hentUtkast(aktorId); + Boolean lagreStatistikk = sakStatistikkService.leggTilStatistikkRadUtkast(utkast.getId(), aktorId, innloggetVeilederIdent, oppfolgingsenhetId); + + vedtakStatusEndringService.utkastOpprettet(utkast); meldingRepository.opprettSystemMelding(utkast.getId(), SystemMeldingType.UTKAST_OPPRETTET, innloggetVeilederIdent); @@ -233,9 +234,7 @@ private void oppdatereDokumentIdforJournalfortOyeblikksbilde(long vedtakId, Stri Arrays.stream(journalpost.getData().getJournalpost().dokumenter) .filter(journalfortDokument -> OyeblikksbildeType.contains(journalfortDokument.brevkode)) .forEach( - journalfortDokument -> { - oyeblikksbildeService.lagreJournalfortDokumentId(vedtakId, journalfortDokument.dokumentInfoId, OyeblikksbildeType.from(BrevKode.valueOf(journalfortDokument.brevkode))); - } + journalfortDokument -> oyeblikksbildeService.lagreJournalfortDokumentId(vedtakId, journalfortDokument.dokumentInfoId, OyeblikksbildeType.from(BrevKode.valueOf(journalfortDokument.brevkode))) ); log.info(format( "Oppdatert dokumentId for oyeblikksbilde for vedtakId: %s", diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt b/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt index 3f56edf6..31623502 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt +++ b/src/test/java/no/nav/veilarbvedtaksstotte/config/ApplicationTestConfig.kt @@ -19,6 +19,7 @@ import no.nav.veilarbvedtaksstotte.metrics.DokumentdistribusjonMeterBinder import no.nav.veilarbvedtaksstotte.mock.MetricsClientMock import no.nav.veilarbvedtaksstotte.mock.PoaoTilgangClientMock import no.nav.veilarbvedtaksstotte.service.PdfService +import no.nav.veilarbvedtaksstotte.service.SakStatistikkService import no.nav.veilarbvedtaksstotte.utils.JsonUtils.init import no.nav.veilarbvedtaksstotte.utils.PostgresContainer import no.nav.veilarbvedtaksstotte.utils.SingletonKafkaContainer @@ -53,7 +54,8 @@ import javax.sql.DataSource KafkaConsumerConfig::class, DokumentdistribusjonMeterBinder::class, PdfService::class, - ArbeidssoekerRegisteretService::class + ArbeidssoekerRegisteretService::class, + SakStatistikkService::class ) class ApplicationTestConfig { @Bean diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java b/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java index 6494e241..00bb3a9a 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java +++ b/src/test/java/no/nav/veilarbvedtaksstotte/config/RepositoryTestConfig.java @@ -7,6 +7,7 @@ import no.nav.veilarbvedtaksstotte.repository.OyeblikksbildeRepository; import no.nav.veilarbvedtaksstotte.repository.UtrullingRepository; import no.nav.veilarbvedtaksstotte.repository.VedtaksstotteRepository; +import no.nav.veilarbvedtaksstotte.repository.SakStatistikkRepository; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @@ -18,6 +19,7 @@ OyeblikksbildeRepository.class, VedtaksstotteRepository.class, UtrullingRepository.class, - ArenaVedtakRepository.class + ArenaVedtakRepository.class, + SakStatistikkRepository.class }) public class RepositoryTestConfig {} diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt new file mode 100644 index 00000000..fa2393d8 --- /dev/null +++ b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt @@ -0,0 +1,110 @@ +package no.nav.veilarbvedtaksstotte.repository + +import no.nav.common.types.identer.AktorId +import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk +import no.nav.veilarbvedtaksstotte.utils.DatabaseTest +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.BeforeAll +import java.time.LocalDateTime +import java.util.* + +class SakStatistikkRepositoryTest : DatabaseTest() { + /* + class VedtakUtkast( + val id: String, + val aktorId: String, + val veilederIdent: String, + val oppfolgingsenhetId: String, + ) + + */ + companion object { + lateinit var sakStatistikkRepository: SakStatistikkRepository + + @BeforeAll + @JvmStatic + fun setup(): Unit { + sakStatistikkRepository = SakStatistikkRepository(jdbcTemplate) + } + } + + @Test + fun `lagre statistikkrad`() { + + val statistikkRad = SakStatistikk( + behandlingId = 3001.toBigInteger(), + behandlingUuid = UUID.fromString("f47ac10b-58cc-4372-a567-0e02b2c3d479"), + relatertBehandlingId = null, + relatertFagsystem = null, + sakId = "Arbeidsoppfølging", + aktorId = "2004140973848", + mottattTid = LocalDateTime.now().minusDays(2), + registrertTid = LocalDateTime.now(), + ferdigbehandletTid = null, + endretTid = LocalDateTime.now(), + tekniskTid = LocalDateTime.now().plusHours(1), + sakYtelse = null, + behandlingType = "VEDTAK", + behandlingStatus = "UTKAST", + behandlingResultat = null, + behandlingMetode = "MANUELL", + opprettetAv = "Z123456", + saksbehandler = "Z123456", + ansvarligBeslutter = null, + ansvarligEnhet = "0220", + avsender = "Oppfølgingsvedtak § 14 a", + versjon = "Dockerimage_tag_1" + ) + sakStatistikkRepository.insertSakStatistikkRad(statistikkRad) + val lagretStatistikkRadAlt = sakStatistikkRepository.hentSakStatistikkListeAlt(3001.toBigInteger()) + val lagretStatistikkRad = sakStatistikkRepository.hentSakStatistikkListe("2004140973848") + assertEquals(lagretStatistikkRadAlt.get(0).behandlingId, lagretStatistikkRad.get(1).behandlingId) + } + + @Test + fun `lagre statistikkrad utkast`() { + val statistikkRad2 = SakStatistikk( + behandlingId = 3002.toBigInteger(), + behandlingUuid = null, + relatertBehandlingId = null, + relatertFagsystem = null, + sakId = null, + aktorId = "2004140973848", + mottattTid = LocalDateTime.now().minusDays(2), + registrertTid = LocalDateTime.now(), + ferdigbehandletTid = null, + endretTid = LocalDateTime.now(), + tekniskTid = LocalDateTime.now().plusHours(1), + sakYtelse = null, + behandlingType = "VEDTAK", + behandlingStatus = "UTKAST", + behandlingResultat = null, + behandlingMetode = "MANUELL", + opprettetAv = "Z123456", + saksbehandler = "Z123456", + ansvarligBeslutter = null, + ansvarligEnhet = "0220", + avsender = "Oppfølgingsvedtak § 14 a", + versjon = "Dockerimage_tag_1" + ) + val aktorId = AktorId.of("2004140973848") + val behandlingId = 3002.toBigInteger() + sakStatistikkRepository.insertSakStatistikkRad(statistikkRad2) + val lagretStatistikkRadUtkast = behandlingId.let { sakStatistikkRepository.hentSakStatistikkListe(aktorId.toString()) } + assertEquals(behandlingId.toString(), lagretStatistikkRadUtkast.get(0).behandlingId.toString())}} +/* + @Test + fun `lagre statistikkrad utkast2`() { + + val vedtakUtkast = VedtakUtkast( + id = "1", + aktorId = "aktor123", + veilederIdent = "2004140973848", + oppfolgingsenhetId = "0220" + ) + sakStatistikkRepository.insertSakStatistikkRadUtkast(vedtakUtkast.id, vedtakUtkast.aktorId, vedtakUtkast.veilederIdent, vedtakUtkast.oppfolgingsenhetId) + val lagretStatistikkRadUtkast = vedtakUtkast.id.let { sakStatistikkRepository.hentSakStatistikkListe(vedtakUtkast.aktorId.toString()) } + assertEquals(vedtakUtkast.id.toString(), lagretStatistikkRadUtkast.get(0).behandlingId.toString())} +} +*/ \ No newline at end of file diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java b/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java index 41093f09..b9535b53 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java +++ b/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java @@ -48,11 +48,7 @@ import no.nav.veilarbvedtaksstotte.domain.vedtak.Innsatsgruppe; import no.nav.veilarbvedtaksstotte.domain.vedtak.Vedtak; import no.nav.veilarbvedtaksstotte.domain.vedtak.VedtakStatus; -import no.nav.veilarbvedtaksstotte.repository.BeslutteroversiktRepository; -import no.nav.veilarbvedtaksstotte.repository.KilderRepository; -import no.nav.veilarbvedtaksstotte.repository.MeldingRepository; -import no.nav.veilarbvedtaksstotte.repository.OyeblikksbildeRepository; -import no.nav.veilarbvedtaksstotte.repository.VedtaksstotteRepository; +import no.nav.veilarbvedtaksstotte.repository.*; import no.nav.veilarbvedtaksstotte.utils.DatabaseTest; import no.nav.veilarbvedtaksstotte.utils.DbTestUtils; import no.nav.veilarbvedtaksstotte.utils.JsonUtils; @@ -104,7 +100,7 @@ public class VedtakServiceTest extends DatabaseTest { private static VedtaksstotteRepository vedtaksstotteRepository; private static KilderRepository kilderRepository; private static MeldingRepository meldingRepository; - + private static SakStatistikkRepository sakStatistikkRepository; private static VedtakService vedtakService; private static OyeblikksbildeService oyeblikksbildeService; private static AuthService authService; @@ -130,7 +126,7 @@ public class VedtakServiceTest extends DatabaseTest { private static final SafClient safClient = mock(SafClient.class); private static final MetricsService metricsService = mock(MetricsService.class); private static final PoaoTilgangClient poaoTilgangClient = mock(PoaoTilgangClient.class); - + private static final SakStatistikkService sakStatistikkService = mock(SakStatistikkService.class); private static final PdfService pdfService = mock(PdfService.class); @BeforeAll @@ -141,8 +137,10 @@ public static void setupOnce() { vedtaksstotteRepository = new VedtaksstotteRepository(jdbcTemplate, transactor); OyeblikksbildeRepository oyeblikksbildeRepository = new OyeblikksbildeRepository(jdbcTemplate); BeslutteroversiktRepository beslutteroversiktRepository = new BeslutteroversiktRepository(jdbcTemplate); - authService = spy(new AuthService(aktorOppslagClient, veilarbarenaService, AuthContextHolderThreadLocal.instance(), utrullingService, poaoTilgangClient)); + SakStatistikkRepository sakStatistikkRepository = new SakStatistikkRepository(jdbcTemplate); + SakStatistikkService sakStatistikkService = new SakStatistikkService(sakStatistikkRepository,authService, aktorOppslagClient); + oyeblikksbildeService = new OyeblikksbildeService(authService, oyeblikksbildeRepository, vedtaksstotteRepository, veilarbpersonClient, aia_backend_client, arbeidssoekerRegistretService); MalTypeService malTypeService = new MalTypeService(arbeidssoekerRegistretService); DokumentService dokumentService = new DokumentService( @@ -167,7 +165,8 @@ public static void setupOnce() { dokumentService, veilarbarenaService, metricsService, - leaderElectionClient); + leaderElectionClient, + sakStatistikkService); } @BeforeEach From a14065c125929f7aa6eb68beb52ffff3c971bb24 Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Tue, 10 Dec 2024 16:57:19 +0100 Subject: [PATCH 10/17] Oppdatering av tekst. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa Co-authored-by: Mathias Sundt Müller --- Saksstatistikk.md | 53 ++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/Saksstatistikk.md b/Saksstatistikk.md index 3bf2529e..20a4bcae 100644 --- a/Saksstatistikk.md +++ b/Saksstatistikk.md @@ -4,31 +4,28 @@ En tabell som inneholder data til saksstatistikk er lagt til i databasen. Denne Felter og beskrivelse av disse: -| Felt | Beskrivelse team Sak | Merknader team Obo | -|-------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| SEKVENSNUMMER | Felt for BigQuery tabeller.
Identifiserende unik verdi for hver enkelt rad på BigQuery. | | -| AKTOR_ID | Aktør-IDen tilknyttet søker eller hovedaktør for ytelsen (Alt. kan Fnr. benyttes). | aktør-id fra vedtakstabellen. Sjekk om team Sak og Oppfølging heller vil ha fnr | -| OPPFOLGING_PERIODE_UUID | UUID for gjeldende oppfølgingsperiode. | aktør-id fra vedtakstabellen. Sjekk om team Sak og Oppfølging heller vil ha fnr | -| BEHANDLING_ID | Fagsystemets behandlings-ID. Tilsvarer VEDTAK_ID | | -| BEHANDLING_UUID | Behandlingens UUID. Tilsvarer REFERANSE | | -| RELATERT_BEHANDLING_ID | Hvis behandlingen har oppsått med bakgrunn i en annen, skal den foregående behandlingen refereres til her. BEHANDLING_ID fra tidligere vedtak i samme oppfølgingsperiode, skal stå her. | vedtak_referanse (UUID)? | -| RELATERT_FAGSYSTEM | Hvis feltet relatertBehandlingId er populert skal denne fylles ut med fagsystemet til den relaterte behandlingen. Default kan være samme fagsystem | | -| SAK_ID | Her skal ny saks-ID for arbeidsoppfølging brukes. | | -| MOTTATT_TID | Tidspunktet da behandlingen oppstår (eks. søknad mottas).
Dette er starten på beregning av saksbehandlingstid. Hentes fra veilarboppfolging, start oppfølgingsperiode. | Inngangshendelse, registreringstidspunkt når førstegangsbehandling.
Utkast opprettet-tid når det er en revurdering
eller nytt vedtak innenfor samme oppfølgingsperiode. | -| REGISTRERT_TID | Tidspunkt da behandlingen første gang ble registrert i fagsystemet.
Ved digitale søknader bør denne være tilnærmet lik mottattTid. UTKAST_OPPRETTET | Kan dette være start av utkast (utkast opprettet)?
Da vil i såfall være det samme som mottattTid. | -| FERDIGBEHANDLET_TID | Tidspunkt for siste endring. Ved første melding, tidspunkt er lik registrert_tid. VEDTAK_FATTET | Når oppfølging avsluttes
når flagg Gjeldende settes false | -| ENDRET_TID | Tidspunkt når behandling ble avsluttet,
enten avbrutt, henlagt, vedtak innvilget/avslått, etc. UTKAST_SIST_OPPDATERT | Når oppfølging avsluttes
når flagg Gjeldende settes false | -| TEKNISK_TID | Tidspunktet da fagsystemet legger hendelsen i databasen. Kan være at en oppdaterer i batchjobb eller lign. Kan være det samme som endret_tid | Må være med | -| SAK_YTELSE | Kode som angir hvilken ytelse/stønad behandlingen gjelder.
Uppercase. Kodeverk må vi finne ut av. | | -| BEHANDLING_TYPE | Kode som angir hvilken type behandling det er snakk om.
typisk: vedtak, revurdering, klage, etc. | | -| BEHANDLING_STATUS | Kode som angir hvilken status behandlingen har. Bruk "Oversendt KA" for klager. Ellers: Bruk STATUS. UTKAST, SENDT, HISTORISK | Skal det være noen markering av at vedtaket er et resultat av klage? Må komme seinere. | -| BEHANDLING_RESULTAT | Kode som angir resultatet på behandling -
Vi kan bruke INNSATSGRUPPE eller AVBRUTT. | Utkast ikke relevant. Hva skal dette egentlig være? | -| BEHANDLING_METODE | Kode som angir om behandlingen er manuell eller to-trinns (Innsatsgruppe Jobbe delvis og Liten mulighet til å jobbe) | Kun manuell | -| INNSATSGRUPPE | Innsatsgruppe, fylles bare ut på sendt vedtak. | | -| HOVEDMAL | Hovedmål, fylles bare ut på sendt vedtak. | | -| OPPRETTET_AV | -5 ved kode 6
Nav-Ident ellers | | -| SAKSBEHANDLER | -5 ved kode 6
Nav-Ident ellers. Den som sender ut vedtaket, VEILEDER_IDENT. | | -| ANSVARLIG_BESLUTTER | -5 ved kode 6
Nav-Ident ellers. Ikke avklart. | | -| ANSVARLIG_ENHET | -5 ved Kode 6
Organisasjons-Id til NAV-enhet som har ansvaret for behandlingen. OPPFOLGINGSENHET_ID | antageligvis oppfølgingsenhet | -| AVSENDER | Angir fagsystemets eget navn. "Oppfølgingsvedtak § 14 a" | Er det GCP namespace-navn? Hva skal stå her? | -| VERSJON | Kode som sier hvilken versjonen av koden dataene er generert med bakgrunn på.
Kan godt være relatert til Git repoet. Må se på dette. | | +| Felt | Beskrivelse team Sak | Merknader team Obo | +|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| SEKVENSNUMMER | Felt for BigQuery tabeller.
Identifiserende unik verdi for hver enkelt rad på BigQuery. | | +| BEHANDLING_ID | Fagsystemets behandlings-ID. Tilsvarer VEDTAK_ID | | +| BEHANDLING_UUID | Behandlingens UUID. Tilsvarer REFERANSE | | +| RELATERT_BEHANDLING_ID | Hvis behandlingen har oppsått med bakgrunn i en annen, skal den foregående behandlingen refereres til her. BEHANDLING_ID fra tidligere vedtak i samme oppfølgingsperiode, skal stå her. | vedtak_referanse (UUID)? | +| RELATERT_FAGSYSTEM | Hvis feltet relatertBehandlingId er populert skal denne fylles ut med fagsystemet til den relaterte behandlingen. Default kan være samme fagsystem | | +| SAK_ID | Her skal ny saks-ID for arbeidsoppfølging brukes. | | +| AKTOR_ID | Aktør-IDen tilknyttet søker eller hovedaktør for ytelsen (Alt. kan Fnr. benyttes). | aktør-id fra vedtakstabellen. Sjekk om team Sak og Oppfølging heller vil ha fnr | +| MOTTATT_TID | Tidspunktet da behandlingen oppstår (eks. søknad mottas).
Dette er starten på beregning av saksbehandlingstid. Hentes fra veilarboppfolging, start oppfølgingsperiode. | Inngangshendelse, registreringstidspunkt når førstegangsbehandling.
Utkast opprettet-tid når det er en revurdering
eller nytt vedtak innenfor samme oppfølgingsperiode. | +| REGISTRERT_TID | Tidspunkt da behandlingen første gang ble registrert i fagsystemet.
Ved digitale søknader bør denne være tilnærmet lik mottattTid. UTKAST_OPPRETTET | Kan dette være start av utkast (utkast opprettet)?
Da vil i såfall være det samme som mottattTid. | +| FERDIGBEHANDLET_TID | Tidspunkt for siste endring. Ved første melding, tidspunkt er lik registrert_tid. VEDTAK_FATTET | Når oppfølging avsluttes
når flagg Gjeldende settes false | +| ENDRET_TID | Tidspunkt når behandling ble avsluttet,
enten avbrutt, henlagt, vedtak innvilget/avslått, etc. UTKAST_SIST_OPPDATERT | Når oppfølging avsluttes
når flagg Gjeldende settes false | +| TEKNISK_TID | Tidspunktet da fagsystemet legger hendelsen i databasen. Kan være at en oppdaterer i batchjobb eller lign. Kan være det samme som endret_tid | Må være med | +| SAK_YTELSE | Kode som angir hvilken ytelse/stønad behandlingen gjelder.
Uppercase. Kodeverk må vi finne ut av. | | +| BEHANDLING_TYPE | Kode som angir hvilken type behandling det er snakk om.
typisk: vedtak, revurdering, klage, etc. | | +| BEHANDLING_STATUS | Kode som angir hvilken status behandlingen har. Bruk "Oversendt KA" for klager. Ellers: Bruk STATUS. UTKAST, SENDT, HISTORISK | Skal det være noen markering av at vedtaket er et resultat av klage? Må komme seinere. | +| BEHANDLING_RESULTAT | Kode som angir resultatet på behandling -
Vi kan bruke INNSATSGRUPPE eller AVBRUTT. | Utkast ikke relevant. Hva skal dette egentlig være? | +| BEHANDLING_METODE | Kode som angir om behandlingen er manuell eller to-trinns (Innsatsgruppe Jobbe delvis og Liten mulighet til å jobbe) | Kun manuell | +| OPPRETTET_AV | -5 ved kode 6
Nav-Ident ellers | | +| SAKSBEHANDLER | -5 ved kode 6
Nav-Ident ellers. Den som sender ut vedtaket, VEILEDER_IDENT. | | +| ANSVARLIG_BESLUTTER | -5 ved kode 6
Nav-Ident ellers. Ikke avklart. | | +| ANSVARLIG_ENHET | -5 ved Kode 6
Organisasjons-Id til NAV-enhet som har ansvaret for behandlingen. OPPFOLGINGSENHET_ID | antageligvis oppfølgingsenhet | +| AVSENDER | Angir fagsystemets eget navn. "Oppfølgingsvedtak § 14 a" | Er det GCP namespace-navn? Hva skal stå her? | +| VERSJON | Kode som sier hvilken versjonen av koden dataene er generert med bakgrunn på.
Kan godt være relatert til Git repoet. Må se på dette. | | From 6df2102378d9e29691e82482c14bcf3a6d51077e Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Tue, 17 Dec 2024 13:24:02 +0100 Subject: [PATCH 11/17] Tilpasser tester til tre nye kolonner i sakstatistikk. Co-authored-by: Julie Hill Roa --- .../domain/statistikk/SakStatistikk.kt | 6 +++-- .../repository/SakStatistikkRepository.kt | 24 +++++++++++------ .../repository/SakStatistikkRepositoryTest.kt | 27 ++++++++----------- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt b/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt index a81bd017..13f1292c 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/domain/statistikk/SakStatistikk.kt @@ -1,6 +1,5 @@ package no.nav.veilarbvedtaksstotte.domain.statistikk -import no.nav.common.types.identer.AktorId import java.math.BigInteger import java.time.LocalDateTime import java.util.* @@ -8,11 +7,12 @@ import java.util.* data class SakStatistikk( val behandlingId: BigInteger, + val aktorId: String, + val oppfolgingPeriodeUUID: UUID? = null, val behandlingUuid: UUID? = null, val relatertBehandlingId: BigInteger? = null, val relatertFagsystem: String? = null, val sakId: String? = null, - val aktorId: String, val mottattTid: LocalDateTime, val registrertTid: LocalDateTime? = null, val ferdigbehandletTid: LocalDateTime? = null, @@ -23,6 +23,8 @@ data class SakStatistikk( val behandlingStatus: String? = null, val behandlingResultat: String? = null, val behandlingMetode: String? = null, + val innsatsgruppe: String? = null, + val hovedmal: String? = null, val opprettetAv: String? = null, val saksbehandler: String? = null, val ansvarligBeslutter: String? = null, diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt index 6b86122c..1507f8cc 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt @@ -7,7 +7,6 @@ import org.springframework.jdbc.core.namedparam.MapSqlParameterSource import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate import org.springframework.stereotype.Repository import java.math.BigInteger -import java.sql.Types import java.util.* @Repository @@ -16,12 +15,13 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { val namedParameterJdbcTemplate = NamedParameterJdbcTemplate(jdbcTemplate) val SAK_STATISTIKK_TABLE = "SAK_STATISTIKK" + val AKTOR_ID = "AKTOR_ID" + val OPPFOLGING_PERIODE_UUID = "OPPFOLGING_PERIODE_UUID" val BEHANDLING_ID = "BEHANDLING_ID" val BEHANDLING_UUID = "BEHANDLING_UUID" val RELATERT_BEHANDLING_ID = "RELATERT_BEHANDLING_ID" val RELATERT_FAGSYSTEM = "RELATERT_FAGSYSTEM" val SAK_ID = "SAK_ID" - val AKTOR_ID = "AKTOR_ID" val MOTTATT_TID = "MOTTATT_TID" val REGISTRERT_TID = "REGISTRERT_TID" val FERDIGBEHANDLET_TID = "FERDIGBEHANDLET_TID" @@ -32,6 +32,8 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { val BEHANDLING_STATUS = "BEHANDLING_STATUS" val BEHANDLING_RESULTAT = "BEHANDLING_RESULTAT" val BEHANDLING_METODE = "BEHANDLING_METODE" + val INNSATSGRUPPE = "INNSATSGRUPPE" + val HOVEDMAL = "HOVEDMAL" val OPPRETTET_AV = "OPPRETTET_AV" val SAKSBEHANDLER = "SAKSBEHANDLER" val ANSVARLIG_BESLUTTER = "ANSVARLIG_BESLUTTER" @@ -42,23 +44,24 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { fun insertSakStatistikkRad(sakStatistikkRad: SakStatistikk) { val sql = """ - INSERT INTO $SAK_STATISTIKK_TABLE ($BEHANDLING_ID, $BEHANDLING_UUID, $RELATERT_BEHANDLING_ID, - $RELATERT_FAGSYSTEM, $SAK_ID, $AKTOR_ID, $MOTTATT_TID, $REGISTRERT_TID, $FERDIGBEHANDLET_TID, + INSERT INTO $SAK_STATISTIKK_TABLE ($AKTOR_ID, $OPPFOLGING_PERIODE_UUID, $BEHANDLING_ID, $BEHANDLING_UUID, $RELATERT_BEHANDLING_ID, + $RELATERT_FAGSYSTEM, $SAK_ID, $MOTTATT_TID, $REGISTRERT_TID, $FERDIGBEHANDLET_TID, $ENDRET_TID, $TEKNISK_TID, $SAK_YTELSE, $BEHANDLING_TYPE, $BEHANDLING_STATUS, - $BEHANDLING_RESULTAT, $BEHANDLING_METODE, $OPPRETTET_AV, $SAKSBEHANDLER, $ANSVARLIG_BESLUTTER, + $BEHANDLING_RESULTAT, $BEHANDLING_METODE, $INNSATSGRUPPE, $HOVEDMAL, $OPPRETTET_AV, $SAKSBEHANDLER, $ANSVARLIG_BESLUTTER, $ANSVARLIG_ENHET, $AVSENDER, $VERSJON) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?) """ jdbcTemplate.update( sql, sakStatistikkRad.behandlingId, + sakStatistikkRad.aktorId, + sakStatistikkRad.oppfolgingPeriodeUUID, sakStatistikkRad.behandlingUuid, sakStatistikkRad.relatertBehandlingId, sakStatistikkRad.relatertFagsystem, sakStatistikkRad.sakId, - sakStatistikkRad.aktorId, sakStatistikkRad.mottattTid, sakStatistikkRad.registrertTid, sakStatistikkRad.ferdigbehandletTid, @@ -69,6 +72,8 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { sakStatistikkRad.behandlingStatus, sakStatistikkRad.behandlingResultat, sakStatistikkRad.behandlingMetode, + sakStatistikkRad.innsatsgruppe, + sakStatistikkRad.hovedmal, sakStatistikkRad.opprettetAv, sakStatistikkRad.saksbehandler, sakStatistikkRad.ansvarligBeslutter, @@ -108,12 +113,13 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { private val sakStatistikkRowMapper: RowMapper = RowMapper { rs, _ -> SakStatistikk( + aktorId = rs.getString(AKTOR_ID), + oppfolgingPeriodeUUID = rs.getString(OPPFOLGING_PERIODE_UUID)?.let { UUID.fromString(it) }, behandlingId = rs.getBigDecimal(BEHANDLING_ID).toBigInteger(), behandlingUuid = rs.getString(BEHANDLING_UUID)?.let { UUID.fromString(it) }, relatertBehandlingId = rs.getBigDecimal(RELATERT_BEHANDLING_ID)?.toBigInteger(), relatertFagsystem = rs.getString(RELATERT_FAGSYSTEM), sakId = rs.getString(SAK_ID), - aktorId = rs.getString(AKTOR_ID), mottattTid = rs.getTimestamp(MOTTATT_TID).toLocalDateTime(), registrertTid = rs.getTimestamp(REGISTRERT_TID).toLocalDateTime(), ferdigbehandletTid = rs.getTimestamp(FERDIGBEHANDLET_TID)?.toLocalDateTime(), @@ -124,6 +130,8 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { behandlingStatus = rs.getString(BEHANDLING_STATUS), behandlingResultat = rs.getString(BEHANDLING_RESULTAT), behandlingMetode = rs.getString(BEHANDLING_METODE), + innsatsgruppe = rs.getString(INNSATSGRUPPE), + hovedmal = rs.getString(HOVEDMAL), opprettetAv = rs.getString(OPPRETTET_AV), saksbehandler = rs.getString(SAKSBEHANDLER), ansvarligBeslutter = rs.getString(ANSVARLIG_BESLUTTER), diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt index fa2393d8..ee4708ea 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt +++ b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt @@ -10,15 +10,7 @@ import java.time.LocalDateTime import java.util.* class SakStatistikkRepositoryTest : DatabaseTest() { - /* - class VedtakUtkast( - val id: String, - val aktorId: String, - val veilederIdent: String, - val oppfolgingsenhetId: String, - ) - */ companion object { lateinit var sakStatistikkRepository: SakStatistikkRepository @@ -30,28 +22,31 @@ class SakStatistikkRepositoryTest : DatabaseTest() { } @Test - fun `lagre statistikkrad`() { + fun `lagre statistikkrad vedtak`() { val statistikkRad = SakStatistikk( + aktorId = "2004140973848", + oppfolgingPeriodeUUID = UUID.fromString("1a930d0d-6931-403e-852c-b85e39673aaf"), behandlingId = 3001.toBigInteger(), behandlingUuid = UUID.fromString("f47ac10b-58cc-4372-a567-0e02b2c3d479"), relatertBehandlingId = null, relatertFagsystem = null, sakId = "Arbeidsoppfølging", - aktorId = "2004140973848", mottattTid = LocalDateTime.now().minusDays(2), - registrertTid = LocalDateTime.now(), - ferdigbehandletTid = null, + registrertTid = LocalDateTime.now().minusDays(1), + ferdigbehandletTid = LocalDateTime.now(), endretTid = LocalDateTime.now(), tekniskTid = LocalDateTime.now().plusHours(1), - sakYtelse = null, + sakYtelse = "BIST14A_IKVAL", behandlingType = "VEDTAK", - behandlingStatus = "UTKAST", - behandlingResultat = null, + behandlingStatus = "SENDT", + behandlingResultat = "STANDARD_INNSATS", behandlingMetode = "MANUELL", + innsatsgruppe = "STANDARD_INNSATS", + hovedmal = "SKAFFE_ARBEID", opprettetAv = "Z123456", saksbehandler = "Z123456", - ansvarligBeslutter = null, + ansvarligBeslutter = "Z123456", ansvarligEnhet = "0220", avsender = "Oppfølgingsvedtak § 14 a", versjon = "Dockerimage_tag_1" From fca15302afceae301564b1ab85f9c05a8a0545d2 Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Tue, 17 Dec 2024 13:47:09 +0100 Subject: [PATCH 12/17] =?UTF-8?q?S=C3=B8rger=20for=20riktig=20rekkef=C3=B8?= =?UTF-8?q?lge=20p=C3=A5=20felter.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa --- .../repository/SakStatistikkRepository.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt index 1507f8cc..ece4377c 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt @@ -49,15 +49,15 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { $ENDRET_TID, $TEKNISK_TID, $SAK_YTELSE, $BEHANDLING_TYPE, $BEHANDLING_STATUS, $BEHANDLING_RESULTAT, $BEHANDLING_METODE, $INNSATSGRUPPE, $HOVEDMAL, $OPPRETTET_AV, $SAKSBEHANDLER, $ANSVARLIG_BESLUTTER, $ANSVARLIG_ENHET, $AVSENDER, $VERSJON) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """ jdbcTemplate.update( sql, - sakStatistikkRad.behandlingId, sakStatistikkRad.aktorId, sakStatistikkRad.oppfolgingPeriodeUUID, + sakStatistikkRad.behandlingId, sakStatistikkRad.behandlingUuid, sakStatistikkRad.relatertBehandlingId, sakStatistikkRad.relatertFagsystem, From f05efd67c6b30318c0d83f8120e7b45b51eeafda Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Tue, 17 Dec 2024 14:40:45 +0100 Subject: [PATCH 13/17] =?UTF-8?q?Tar=20inn=20oppf=C3=B8lgingsperiode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa --- .../service/SakStatistikkService.kt | 31 ++++++++++++++++--- .../service/VedtakService.java | 2 +- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt index 6701b17e..3047a966 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt @@ -3,6 +3,7 @@ package no.nav.veilarbvedtaksstotte.service import no.nav.common.client.aktoroppslag.AktorOppslagClient import org.slf4j.LoggerFactory import no.nav.common.types.identer.Fnr +import no.nav.veilarbvedtaksstotte.client.veilarboppfolging.VeilarboppfolgingClient import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk import no.nav.veilarbvedtaksstotte.repository.SakStatistikkRepository import org.springframework.beans.factory.annotation.Autowired @@ -12,11 +13,13 @@ import java.util.Date private val log = LoggerFactory.getLogger(SakStatistikkService::class.java) private val AVSENDER = "Oppfølgingsvedtak § 14 a" + @Service class SakStatistikkService @Autowired constructor( private val sakStatistikkRepository: SakStatistikkRepository, private val authService: AuthService, private val aktorOppslagClient: AktorOppslagClient, + private val veilarboppfolgingClient: VeilarboppfolgingClient ) { private fun sjekkOmUtkastRadFinnes(statistikkListe: List?): Boolean { if (statistikkListe == null) { @@ -49,13 +52,31 @@ class SakStatistikkService @Autowired constructor( return false } - fun leggTilStatistikkRadUtkast(behandlingId: Long, aktorId: String, veilederIdent: String, oppfolgingsenhetId: String): Boolean { + fun leggTilStatistikkRadUtkast( + behandlingId: Long, + aktorId: String, + fnr: Fnr, + veilederIdent: String, + oppfolgingsenhetId: String + ) { //TODO: Hent mottattTid (som er start oppfølgingsperiode på første vedtak, vi må komme tilbake til hva det er ved seinere vedtak i samme periode. //TODO: Avsender er en konstant, versjon må hentes fra Docker-image - val sakStatistikk = SakStatistikk(behandlingId = behandlingId.toBigInteger(), aktorId = aktorId, mottattTid = LocalDateTime.now(), endretTid = LocalDateTime.now(), tekniskTid = LocalDateTime.now(), - opprettetAv = veilederIdent, ansvarligEnhet = oppfolgingsenhetId, avsender = AVSENDER, versjon = "Dockerimage_tag_1") - sakStatistikkRepository.insertSakStatistikkRad(sakStatistikk) - return true + val oppfolgingsperiode = veilarboppfolgingClient.hentGjeldendeOppfolgingsperiode(fnr) + oppfolgingsperiode.ifPresent { + val sakId = veilarboppfolgingClient.hentOppfolgingsperiodeSak(oppfolgingsperiode.get().uuid).sakId + val sakStatistikk = SakStatistikk( + aktorId = aktorId, + oppfolgingPeriodeUUID = oppfolgingsperiode.get().uuid, + behandlingId = behandlingId.toBigInteger(), + sakId = sakId.toString(), + mottattTid = LocalDateTime.now(), + endretTid = LocalDateTime.now(), tekniskTid = LocalDateTime.now(), + opprettetAv = veilederIdent, + ansvarligEnhet = oppfolgingsenhetId, + avsender = AVSENDER, versjon = "Dockerimage_tag_1" + ) + sakStatistikkRepository.insertSakStatistikkRad(sakStatistikk) + } } diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java b/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java index 6d88930a..7d4bdf05 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java +++ b/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java @@ -195,7 +195,7 @@ public void lagUtkast(Fnr fnr) { vedtaksstotteRepository.opprettUtkast(aktorId, innloggetVeilederIdent, oppfolgingsenhetId); Vedtak utkast = vedtaksstotteRepository.hentUtkast(aktorId); - Boolean lagreStatistikk = sakStatistikkService.leggTilStatistikkRadUtkast(utkast.getId(), aktorId, innloggetVeilederIdent, oppfolgingsenhetId); + sakStatistikkService.leggTilStatistikkRadUtkast(utkast.getId(), aktorId, fnr, innloggetVeilederIdent, oppfolgingsenhetId); From 9b6ee9c82025923ca6193e542b0ede9c2caee0f0 Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Tue, 17 Dec 2024 15:32:15 +0100 Subject: [PATCH 14/17] =?UTF-8?q?Legger=20inn=20featuretoggle=20for=20?= =?UTF-8?q?=C3=A5=20styre=20innlegging=20av=20statistikkrader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julie Hill Roa --- .../service/SakStatistikkService.kt | 74 ++++++++++--------- .../utils/UnleashUtils.kt | 1 + .../service/VedtakServiceTest.java | 5 +- 3 files changed, 46 insertions(+), 34 deletions(-) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt index 3047a966..d9a6bb57 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt @@ -1,7 +1,6 @@ package no.nav.veilarbvedtaksstotte.service import no.nav.common.client.aktoroppslag.AktorOppslagClient -import org.slf4j.LoggerFactory import no.nav.common.types.identer.Fnr import no.nav.veilarbvedtaksstotte.client.veilarboppfolging.VeilarboppfolgingClient import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk @@ -9,17 +8,18 @@ import no.nav.veilarbvedtaksstotte.repository.SakStatistikkRepository import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import java.time.LocalDateTime -import java.util.Date +import io.getunleash.DefaultUnleash +import no.nav.veilarbvedtaksstotte.utils.SAK_STATISTIKK_PAA -private val log = LoggerFactory.getLogger(SakStatistikkService::class.java) -private val AVSENDER = "Oppfølgingsvedtak § 14 a" +private const val AVSENDER = "Oppfølgingsvedtak § 14 a" @Service class SakStatistikkService @Autowired constructor( private val sakStatistikkRepository: SakStatistikkRepository, private val authService: AuthService, private val aktorOppslagClient: AktorOppslagClient, - private val veilarboppfolgingClient: VeilarboppfolgingClient + private val veilarboppfolgingClient: VeilarboppfolgingClient, + private val unleashClient: DefaultUnleash ) { private fun sjekkOmUtkastRadFinnes(statistikkListe: List?): Boolean { if (statistikkListe == null) { @@ -38,20 +38,20 @@ class SakStatistikkService @Autowired constructor( return sakStatistikkRepository.hentSakStatistikkListe(aktorId.toString()) } - - fun leggTilStatistikkRad(sakStatistikkRad: SakStatistikk): Boolean { - val personFnr = authService.getFnrOrThrow(sakStatistikkRad.aktorId) - val eksisterendeRader = hentStatistikkRader(personFnr) - log.debug("Eksisterende rader: {}", true) - if (sjekkOmUtkastRadFinnes(eksisterendeRader) - ) { - log.info("Insert SakStatistikk-rad for bruker: {}", sakStatistikkRad) - sakStatistikkRepository.insertSakStatistikkRad(sakStatistikkRad) - return true + /* + fun leggTilStatistikkRad(sakStatistikkRad: SakStatistikk): Boolean { + val personFnr = authService.getFnrOrThrow(sakStatistikkRad.aktorId) + val eksisterendeRader = hentStatistikkRader(personFnr) + log.debug("Eksisterende rader: {}", true) + if (sjekkOmUtkastRadFinnes(eksisterendeRader) + ) { + log.info("Insert SakStatistikk-rad for bruker: {}", sakStatistikkRad) + sakStatistikkRepository.insertSakStatistikkRad(sakStatistikkRad) + return true + } + return false } - return false - } - + */ fun leggTilStatistikkRadUtkast( behandlingId: Long, aktorId: String, @@ -61,21 +61,29 @@ class SakStatistikkService @Autowired constructor( ) { //TODO: Hent mottattTid (som er start oppfølgingsperiode på første vedtak, vi må komme tilbake til hva det er ved seinere vedtak i samme periode. //TODO: Avsender er en konstant, versjon må hentes fra Docker-image - val oppfolgingsperiode = veilarboppfolgingClient.hentGjeldendeOppfolgingsperiode(fnr) - oppfolgingsperiode.ifPresent { - val sakId = veilarboppfolgingClient.hentOppfolgingsperiodeSak(oppfolgingsperiode.get().uuid).sakId - val sakStatistikk = SakStatistikk( - aktorId = aktorId, - oppfolgingPeriodeUUID = oppfolgingsperiode.get().uuid, - behandlingId = behandlingId.toBigInteger(), - sakId = sakId.toString(), - mottattTid = LocalDateTime.now(), - endretTid = LocalDateTime.now(), tekniskTid = LocalDateTime.now(), - opprettetAv = veilederIdent, - ansvarligEnhet = oppfolgingsenhetId, - avsender = AVSENDER, versjon = "Dockerimage_tag_1" - ) - sakStatistikkRepository.insertSakStatistikkRad(sakStatistikk) + val statistikkPaa = unleashClient.isEnabled(SAK_STATISTIKK_PAA) + val mottattTid = if (sjekkOmUtkastRadFinnes(hentStatistikkRader(fnr))) { + LocalDateTime.now() + } else { + veilarboppfolgingClient.hentGjeldendeOppfolgingsperiode(fnr).get().startDato.toLocalDateTime() + } + if (statistikkPaa) { + val oppfolgingsperiode = veilarboppfolgingClient.hentGjeldendeOppfolgingsperiode(fnr) + oppfolgingsperiode.ifPresent { + val sakId = veilarboppfolgingClient.hentOppfolgingsperiodeSak(oppfolgingsperiode.get().uuid).sakId + val sakStatistikk = SakStatistikk( + aktorId = aktorId, + oppfolgingPeriodeUUID = oppfolgingsperiode.get().uuid, + behandlingId = behandlingId.toBigInteger(), + sakId = sakId.toString(), + mottattTid = mottattTid, + endretTid = LocalDateTime.now(), tekniskTid = LocalDateTime.now(), + opprettetAv = veilederIdent, + ansvarligEnhet = oppfolgingsenhetId, + avsender = AVSENDER, versjon = "Dockerimage_tag_1" + ) + sakStatistikkRepository.insertSakStatistikkRad(sakStatistikk) + } } } diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/utils/UnleashUtils.kt b/src/main/java/no/nav/veilarbvedtaksstotte/utils/UnleashUtils.kt index 593b3b0b..144bd260 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/utils/UnleashUtils.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/utils/UnleashUtils.kt @@ -1,3 +1,4 @@ package no.nav.veilarbvedtaksstotte.utils const val KAFKA_KONSUMERING_GCP_SKRUDD_AV = "veilarbvedtaksstotte.kafka-konsumering-gcp-skrudd-av" +const val SAK_STATISTIKK_PAA = "veilarbvedtaksstotte.sak_statistikk_paa" diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java b/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java index b9535b53..1f254aac 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java +++ b/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java @@ -34,6 +34,7 @@ import no.nav.veilarbvedtaksstotte.client.regoppslag.RegoppslagClient; import no.nav.veilarbvedtaksstotte.client.regoppslag.RegoppslagResponseDTO; import no.nav.veilarbvedtaksstotte.client.regoppslag.RegoppslagResponseDTO.Adresse; +import no.nav.veilarbvedtaksstotte.client.veilarboppfolging.VeilarboppfolgingClient; import no.nav.veilarbvedtaksstotte.client.veilederogenhet.VeilarbveilederClient; import no.nav.veilarbvedtaksstotte.client.veilederogenhet.dto.Veileder; import no.nav.veilarbvedtaksstotte.controller.dto.OppdaterUtkastDTO; @@ -128,6 +129,8 @@ public class VedtakServiceTest extends DatabaseTest { private static final PoaoTilgangClient poaoTilgangClient = mock(PoaoTilgangClient.class); private static final SakStatistikkService sakStatistikkService = mock(SakStatistikkService.class); private static final PdfService pdfService = mock(PdfService.class); + private static final VeilarboppfolgingClient veilarboppfolgingClient = mock(VeilarboppfolgingClient.class); + private static final DefaultUnleash unleashClient = mock(DefaultUnleash.class); @BeforeAll public static void setupOnce() { @@ -139,7 +142,7 @@ public static void setupOnce() { BeslutteroversiktRepository beslutteroversiktRepository = new BeslutteroversiktRepository(jdbcTemplate); authService = spy(new AuthService(aktorOppslagClient, veilarbarenaService, AuthContextHolderThreadLocal.instance(), utrullingService, poaoTilgangClient)); SakStatistikkRepository sakStatistikkRepository = new SakStatistikkRepository(jdbcTemplate); - SakStatistikkService sakStatistikkService = new SakStatistikkService(sakStatistikkRepository,authService, aktorOppslagClient); + SakStatistikkService sakStatistikkService = new SakStatistikkService(sakStatistikkRepository,authService, aktorOppslagClient, veilarboppfolgingClient, unleashClient); oyeblikksbildeService = new OyeblikksbildeService(authService, oyeblikksbildeRepository, vedtaksstotteRepository, veilarbpersonClient, aia_backend_client, arbeidssoekerRegistretService); MalTypeService malTypeService = new MalTypeService(arbeidssoekerRegistretService); From 8b0f18474b1f3c5acda7d1ea40b93aaeac2581b7 Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Tue, 17 Dec 2024 16:24:28 +0100 Subject: [PATCH 15/17] Fjerner utkommentert kode. Co-authored-by: Julie Hill Roa --- .../repository/SakStatistikkRepository.kt | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt index ece4377c..2d4a2847 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt @@ -82,12 +82,14 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { sakStatistikkRad.versjon ) } + fun hentSakStatistikkListeAlt(behandlingId: BigInteger): List { val parameters = MapSqlParameterSource("behandlingId", behandlingId) val sql = "SELECT * FROM $SAK_STATISTIKK_TABLE WHERE $BEHANDLING_ID = :behandlingId" return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper) } + fun hentSakStatistikkListe(aktorId: String): List { val parameters = MapSqlParameterSource("aktorId", aktorId) @@ -95,21 +97,6 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper) } - /* - fun insertSakStatistikkRadUtkast(behandlingId: String, aktorId: String, opprettetAv: String, ansvarligEnhet: String) { - val parameters = MapSqlParameterSource() - .addValue("behandlingId", behandlingId.toBigInteger(), Types.BIGINT) - .addValue("aktorId", aktorId, Types.VARCHAR) - .addValue("opprettetAv", opprettetAv, Types.VARCHAR) - .addValue("ansvarligEnhet", ansvarligEnhet, Types.VARCHAR) - .addValue("avsender", "Oppfølgingsvedtak § 14 a", Types.VARCHAR) - .addValue("versjon", "Dockerimage_tag_1", Types.VARCHAR) - - val sql = """INSERT INTO $SAK_STATISTIKK_TABLE ($BEHANDLING_ID, $AKTOR_ID, $OPPRETTET_AV, $ANSVARLIG_ENHET, $AVSENDER, $VERSJON) - VALUES (:behandlingId, :aktorId, :opprettetAv, :ansvarligEnhet, :avsender, :versjon)""" - jdbcTemplate.update(sql, parameters) - } -*/ private val sakStatistikkRowMapper: RowMapper = RowMapper { rs, _ -> SakStatistikk( From 5635d1bc0b7d9bdd6fb75f076636159d98076d14 Mon Sep 17 00:00:00 2001 From: JulieHillRoa Date: Tue, 17 Dec 2024 16:25:19 +0100 Subject: [PATCH 16/17] Saksstatistikk.md --- Saksstatistikk.md | 53 +++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/Saksstatistikk.md b/Saksstatistikk.md index 20a4bcae..3bf2529e 100644 --- a/Saksstatistikk.md +++ b/Saksstatistikk.md @@ -4,28 +4,31 @@ En tabell som inneholder data til saksstatistikk er lagt til i databasen. Denne Felter og beskrivelse av disse: -| Felt | Beskrivelse team Sak | Merknader team Obo | -|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| SEKVENSNUMMER | Felt for BigQuery tabeller.
Identifiserende unik verdi for hver enkelt rad på BigQuery. | | -| BEHANDLING_ID | Fagsystemets behandlings-ID. Tilsvarer VEDTAK_ID | | -| BEHANDLING_UUID | Behandlingens UUID. Tilsvarer REFERANSE | | -| RELATERT_BEHANDLING_ID | Hvis behandlingen har oppsått med bakgrunn i en annen, skal den foregående behandlingen refereres til her. BEHANDLING_ID fra tidligere vedtak i samme oppfølgingsperiode, skal stå her. | vedtak_referanse (UUID)? | -| RELATERT_FAGSYSTEM | Hvis feltet relatertBehandlingId er populert skal denne fylles ut med fagsystemet til den relaterte behandlingen. Default kan være samme fagsystem | | -| SAK_ID | Her skal ny saks-ID for arbeidsoppfølging brukes. | | -| AKTOR_ID | Aktør-IDen tilknyttet søker eller hovedaktør for ytelsen (Alt. kan Fnr. benyttes). | aktør-id fra vedtakstabellen. Sjekk om team Sak og Oppfølging heller vil ha fnr | -| MOTTATT_TID | Tidspunktet da behandlingen oppstår (eks. søknad mottas).
Dette er starten på beregning av saksbehandlingstid. Hentes fra veilarboppfolging, start oppfølgingsperiode. | Inngangshendelse, registreringstidspunkt når førstegangsbehandling.
Utkast opprettet-tid når det er en revurdering
eller nytt vedtak innenfor samme oppfølgingsperiode. | -| REGISTRERT_TID | Tidspunkt da behandlingen første gang ble registrert i fagsystemet.
Ved digitale søknader bør denne være tilnærmet lik mottattTid. UTKAST_OPPRETTET | Kan dette være start av utkast (utkast opprettet)?
Da vil i såfall være det samme som mottattTid. | -| FERDIGBEHANDLET_TID | Tidspunkt for siste endring. Ved første melding, tidspunkt er lik registrert_tid. VEDTAK_FATTET | Når oppfølging avsluttes
når flagg Gjeldende settes false | -| ENDRET_TID | Tidspunkt når behandling ble avsluttet,
enten avbrutt, henlagt, vedtak innvilget/avslått, etc. UTKAST_SIST_OPPDATERT | Når oppfølging avsluttes
når flagg Gjeldende settes false | -| TEKNISK_TID | Tidspunktet da fagsystemet legger hendelsen i databasen. Kan være at en oppdaterer i batchjobb eller lign. Kan være det samme som endret_tid | Må være med | -| SAK_YTELSE | Kode som angir hvilken ytelse/stønad behandlingen gjelder.
Uppercase. Kodeverk må vi finne ut av. | | -| BEHANDLING_TYPE | Kode som angir hvilken type behandling det er snakk om.
typisk: vedtak, revurdering, klage, etc. | | -| BEHANDLING_STATUS | Kode som angir hvilken status behandlingen har. Bruk "Oversendt KA" for klager. Ellers: Bruk STATUS. UTKAST, SENDT, HISTORISK | Skal det være noen markering av at vedtaket er et resultat av klage? Må komme seinere. | -| BEHANDLING_RESULTAT | Kode som angir resultatet på behandling -
Vi kan bruke INNSATSGRUPPE eller AVBRUTT. | Utkast ikke relevant. Hva skal dette egentlig være? | -| BEHANDLING_METODE | Kode som angir om behandlingen er manuell eller to-trinns (Innsatsgruppe Jobbe delvis og Liten mulighet til å jobbe) | Kun manuell | -| OPPRETTET_AV | -5 ved kode 6
Nav-Ident ellers | | -| SAKSBEHANDLER | -5 ved kode 6
Nav-Ident ellers. Den som sender ut vedtaket, VEILEDER_IDENT. | | -| ANSVARLIG_BESLUTTER | -5 ved kode 6
Nav-Ident ellers. Ikke avklart. | | -| ANSVARLIG_ENHET | -5 ved Kode 6
Organisasjons-Id til NAV-enhet som har ansvaret for behandlingen. OPPFOLGINGSENHET_ID | antageligvis oppfølgingsenhet | -| AVSENDER | Angir fagsystemets eget navn. "Oppfølgingsvedtak § 14 a" | Er det GCP namespace-navn? Hva skal stå her? | -| VERSJON | Kode som sier hvilken versjonen av koden dataene er generert med bakgrunn på.
Kan godt være relatert til Git repoet. Må se på dette. | | +| Felt | Beskrivelse team Sak | Merknader team Obo | +|-------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| SEKVENSNUMMER | Felt for BigQuery tabeller.
Identifiserende unik verdi for hver enkelt rad på BigQuery. | | +| AKTOR_ID | Aktør-IDen tilknyttet søker eller hovedaktør for ytelsen (Alt. kan Fnr. benyttes). | aktør-id fra vedtakstabellen. Sjekk om team Sak og Oppfølging heller vil ha fnr | +| OPPFOLGING_PERIODE_UUID | UUID for gjeldende oppfølgingsperiode. | aktør-id fra vedtakstabellen. Sjekk om team Sak og Oppfølging heller vil ha fnr | +| BEHANDLING_ID | Fagsystemets behandlings-ID. Tilsvarer VEDTAK_ID | | +| BEHANDLING_UUID | Behandlingens UUID. Tilsvarer REFERANSE | | +| RELATERT_BEHANDLING_ID | Hvis behandlingen har oppsått med bakgrunn i en annen, skal den foregående behandlingen refereres til her. BEHANDLING_ID fra tidligere vedtak i samme oppfølgingsperiode, skal stå her. | vedtak_referanse (UUID)? | +| RELATERT_FAGSYSTEM | Hvis feltet relatertBehandlingId er populert skal denne fylles ut med fagsystemet til den relaterte behandlingen. Default kan være samme fagsystem | | +| SAK_ID | Her skal ny saks-ID for arbeidsoppfølging brukes. | | +| MOTTATT_TID | Tidspunktet da behandlingen oppstår (eks. søknad mottas).
Dette er starten på beregning av saksbehandlingstid. Hentes fra veilarboppfolging, start oppfølgingsperiode. | Inngangshendelse, registreringstidspunkt når førstegangsbehandling.
Utkast opprettet-tid når det er en revurdering
eller nytt vedtak innenfor samme oppfølgingsperiode. | +| REGISTRERT_TID | Tidspunkt da behandlingen første gang ble registrert i fagsystemet.
Ved digitale søknader bør denne være tilnærmet lik mottattTid. UTKAST_OPPRETTET | Kan dette være start av utkast (utkast opprettet)?
Da vil i såfall være det samme som mottattTid. | +| FERDIGBEHANDLET_TID | Tidspunkt for siste endring. Ved første melding, tidspunkt er lik registrert_tid. VEDTAK_FATTET | Når oppfølging avsluttes
når flagg Gjeldende settes false | +| ENDRET_TID | Tidspunkt når behandling ble avsluttet,
enten avbrutt, henlagt, vedtak innvilget/avslått, etc. UTKAST_SIST_OPPDATERT | Når oppfølging avsluttes
når flagg Gjeldende settes false | +| TEKNISK_TID | Tidspunktet da fagsystemet legger hendelsen i databasen. Kan være at en oppdaterer i batchjobb eller lign. Kan være det samme som endret_tid | Må være med | +| SAK_YTELSE | Kode som angir hvilken ytelse/stønad behandlingen gjelder.
Uppercase. Kodeverk må vi finne ut av. | | +| BEHANDLING_TYPE | Kode som angir hvilken type behandling det er snakk om.
typisk: vedtak, revurdering, klage, etc. | | +| BEHANDLING_STATUS | Kode som angir hvilken status behandlingen har. Bruk "Oversendt KA" for klager. Ellers: Bruk STATUS. UTKAST, SENDT, HISTORISK | Skal det være noen markering av at vedtaket er et resultat av klage? Må komme seinere. | +| BEHANDLING_RESULTAT | Kode som angir resultatet på behandling -
Vi kan bruke INNSATSGRUPPE eller AVBRUTT. | Utkast ikke relevant. Hva skal dette egentlig være? | +| BEHANDLING_METODE | Kode som angir om behandlingen er manuell eller to-trinns (Innsatsgruppe Jobbe delvis og Liten mulighet til å jobbe) | Kun manuell | +| INNSATSGRUPPE | Innsatsgruppe, fylles bare ut på sendt vedtak. | | +| HOVEDMAL | Hovedmål, fylles bare ut på sendt vedtak. | | +| OPPRETTET_AV | -5 ved kode 6
Nav-Ident ellers | | +| SAKSBEHANDLER | -5 ved kode 6
Nav-Ident ellers. Den som sender ut vedtaket, VEILEDER_IDENT. | | +| ANSVARLIG_BESLUTTER | -5 ved kode 6
Nav-Ident ellers. Ikke avklart. | | +| ANSVARLIG_ENHET | -5 ved Kode 6
Organisasjons-Id til NAV-enhet som har ansvaret for behandlingen. OPPFOLGINGSENHET_ID | antageligvis oppfølgingsenhet | +| AVSENDER | Angir fagsystemets eget navn. "Oppfølgingsvedtak § 14 a" | Er det GCP namespace-navn? Hva skal stå her? | +| VERSJON | Kode som sier hvilken versjonen av koden dataene er generert med bakgrunn på.
Kan godt være relatert til Git repoet. Må se på dette. | | From b6da5e04684c72157eac25c8df063dc29e50a175 Mon Sep 17 00:00:00 2001 From: Klara M Helgemo Date: Tue, 17 Dec 2024 17:00:50 +0100 Subject: [PATCH 17/17] Endringer etter review. Co-authored-by: Julie Hill Roa --- .../repository/SakStatistikkRepository.kt | 7 ++ .../service/SakStatistikkService.kt | 66 ++++++------------- .../service/VedtakService.java | 52 ++++----------- .../repository/SakStatistikkRepositoryTest.kt | 20 ++---- .../service/VedtakServiceTest.java | 2 +- 5 files changed, 44 insertions(+), 103 deletions(-) diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt index 2d4a2847..a4679f6d 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepository.kt @@ -97,6 +97,13 @@ class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) { return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper) } + fun hentSakStatistikkListeInnenforOppfolgingsperiode(oppfolgingsperiodeUuid: UUID): List { + val parameters = MapSqlParameterSource("oppfolgingPeriodeUuid", oppfolgingsperiodeUuid) + + val sql = "SELECT * FROM $SAK_STATISTIKK_TABLE WHERE $OPPFOLGING_PERIODE_UUID = :oppfolgingPeriodeUuid" + + return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper) + } private val sakStatistikkRowMapper: RowMapper = RowMapper { rs, _ -> SakStatistikk( diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt index d9a6bb57..f87154ac 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt +++ b/src/main/java/no/nav/veilarbvedtaksstotte/service/SakStatistikkService.kt @@ -1,6 +1,5 @@ package no.nav.veilarbvedtaksstotte.service -import no.nav.common.client.aktoroppslag.AktorOppslagClient import no.nav.common.types.identer.Fnr import no.nav.veilarbvedtaksstotte.client.veilarboppfolging.VeilarboppfolgingClient import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk @@ -10,66 +9,43 @@ import org.springframework.stereotype.Service import java.time.LocalDateTime import io.getunleash.DefaultUnleash import no.nav.veilarbvedtaksstotte.utils.SAK_STATISTIKK_PAA +import java.util.UUID private const val AVSENDER = "Oppfølgingsvedtak § 14 a" @Service class SakStatistikkService @Autowired constructor( private val sakStatistikkRepository: SakStatistikkRepository, - private val authService: AuthService, - private val aktorOppslagClient: AktorOppslagClient, private val veilarboppfolgingClient: VeilarboppfolgingClient, private val unleashClient: DefaultUnleash ) { - private fun sjekkOmUtkastRadFinnes(statistikkListe: List?): Boolean { - if (statistikkListe == null) { - return false - } - val antallUtkast = statistikkListe.stream() - .filter { item: SakStatistikk -> item.behandlingMetode == "UTKAST" } - .toList() - .size - return antallUtkast == 0 - } - fun hentStatistikkRader(fnr: Fnr): List { - val aktorId = aktorOppslagClient.hentAktorId(fnr) - authService.sjekkTilgangTilBrukerOgEnhet(fnr) - return sakStatistikkRepository.hentSakStatistikkListe(aktorId.toString()) + fun hentStatistikkRader(oppfolgingsperiodeUuid: UUID): Boolean { + val statistikkListe = + sakStatistikkRepository.hentSakStatistikkListeInnenforOppfolgingsperiode(oppfolgingsperiodeUuid) + val antallUtkast = + statistikkListe.stream().filter { item: SakStatistikk -> item.behandlingMetode == "UTKAST" }.toList().size + return antallUtkast == 0 } - /* - fun leggTilStatistikkRad(sakStatistikkRad: SakStatistikk): Boolean { - val personFnr = authService.getFnrOrThrow(sakStatistikkRad.aktorId) - val eksisterendeRader = hentStatistikkRader(personFnr) - log.debug("Eksisterende rader: {}", true) - if (sjekkOmUtkastRadFinnes(eksisterendeRader) - ) { - log.info("Insert SakStatistikk-rad for bruker: {}", sakStatistikkRad) - sakStatistikkRepository.insertSakStatistikkRad(sakStatistikkRad) - return true - } - return false - } - */ fun leggTilStatistikkRadUtkast( - behandlingId: Long, - aktorId: String, - fnr: Fnr, - veilederIdent: String, - oppfolgingsenhetId: String + behandlingId: Long, aktorId: String, fnr: Fnr, veilederIdent: String, oppfolgingsenhetId: String ) { //TODO: Hent mottattTid (som er start oppfølgingsperiode på første vedtak, vi må komme tilbake til hva det er ved seinere vedtak i samme periode. //TODO: Avsender er en konstant, versjon må hentes fra Docker-image val statistikkPaa = unleashClient.isEnabled(SAK_STATISTIKK_PAA) - val mottattTid = if (sjekkOmUtkastRadFinnes(hentStatistikkRader(fnr))) { - LocalDateTime.now() - } else { - veilarboppfolgingClient.hentGjeldendeOppfolgingsperiode(fnr).get().startDato.toLocalDateTime() - } + if (statistikkPaa) { + val oppfolgingsperiode = veilarboppfolgingClient.hentGjeldendeOppfolgingsperiode(fnr) oppfolgingsperiode.ifPresent { + val mottattTid = if (hentStatistikkRader(oppfolgingsperiode.get().uuid)) { + LocalDateTime.now() + } else { + veilarboppfolgingClient.hentGjeldendeOppfolgingsperiode(fnr).get().startDato.toLocalDateTime() + } + + val sakId = veilarboppfolgingClient.hentOppfolgingsperiodeSak(oppfolgingsperiode.get().uuid).sakId val sakStatistikk = SakStatistikk( aktorId = aktorId, @@ -77,16 +53,16 @@ class SakStatistikkService @Autowired constructor( behandlingId = behandlingId.toBigInteger(), sakId = sakId.toString(), mottattTid = mottattTid, - endretTid = LocalDateTime.now(), tekniskTid = LocalDateTime.now(), + endretTid = LocalDateTime.now(), + tekniskTid = LocalDateTime.now(), opprettetAv = veilederIdent, ansvarligEnhet = oppfolgingsenhetId, - avsender = AVSENDER, versjon = "Dockerimage_tag_1" + avsender = AVSENDER, + versjon = "Dockerimage_tag_1" ) sakStatistikkRepository.insertSakStatistikkRad(sakStatistikk) } } } - - } diff --git a/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java b/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java index 7d4bdf05..ae2f57c7 100644 --- a/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java +++ b/src/main/java/no/nav/veilarbvedtaksstotte/service/VedtakService.java @@ -15,7 +15,6 @@ import no.nav.veilarbvedtaksstotte.domain.arkiv.BrevKode; import no.nav.veilarbvedtaksstotte.domain.dialog.SystemMeldingType; import no.nav.veilarbvedtaksstotte.domain.oyeblikksbilde.OyeblikksbildeType; -import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk; import no.nav.veilarbvedtaksstotte.domain.vedtak.BeslutterProsessStatus; import no.nav.veilarbvedtaksstotte.domain.vedtak.Innsatsgruppe; import no.nav.veilarbvedtaksstotte.domain.vedtak.Kilde; @@ -131,8 +130,7 @@ public void journalforeVedtak(Vedtak vedtak) { try { Fnr brukerFnr = authService.getFnrOrThrow(vedtak.getAktorId()); - OpprettetJournalpostDTO journalpost = - dokumentService.produserOgJournalforDokumenterForVedtak(vedtak, brukerFnr); + OpprettetJournalpostDTO journalpost = dokumentService.produserOgJournalforDokumenterForVedtak(vedtak, brukerFnr); String journalpostId = journalpost.getJournalpostId(); String dokumentInfoId = null; @@ -143,9 +141,7 @@ public void journalforeVedtak(Vedtak vedtak) { } boolean journalpostferdigstilt = journalpost.getJournalpostferdigstilt(); - log.info(format( - "Journalføring utført: journalpostId=%s, dokumentInfoId=%s, ferdigstilt=%s", - journalpostId, dokumentInfoId, journalpostferdigstilt)); + log.info(format("Journalføring utført: journalpostId=%s, dokumentInfoId=%s, ferdigstilt=%s", journalpostId, dokumentInfoId, journalpostferdigstilt)); vedtaksstotteRepository.lagreJournalforingVedtak(vedtak.getId(), journalpostId, dokumentInfoId); @@ -184,9 +180,7 @@ public void lagUtkast(Fnr fnr) { String aktorId = authKontekst.getAktorId(); if (vedtaksstotteRepository.hentUtkast(aktorId) != null) { - throw new ResponseStatusException( - HttpStatus.BAD_REQUEST, "Kan ikke lage utkast til bruker som allerede har et utkast" - ); + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Kan ikke lage utkast til bruker som allerede har et utkast"); } String innloggetVeilederIdent = authService.getInnloggetVeilederIdent(); @@ -198,7 +192,6 @@ public void lagUtkast(Fnr fnr) { sakStatistikkService.leggTilStatistikkRadUtkast(utkast.getId(), aktorId, fnr, innloggetVeilederIdent, oppfolgingsenhetId); - vedtakStatusEndringService.utkastOpprettet(utkast); meldingRepository.opprettSystemMelding(utkast.getId(), SystemMeldingType.UTKAST_OPPRETTET, innloggetVeilederIdent); } @@ -210,10 +203,7 @@ public void oppdaterUtkast(long vedtakId, OppdaterUtkastDTO vedtakDTO) { oppdaterUtkastFraDto(utkast, vedtakDTO); - List utkastKilder = kilderRepository.hentKilderForVedtak(utkast.getId()) - .stream() - .map(Kilde::getTekst) - .collect(Collectors.toList()); + List utkastKilder = kilderRepository.hentKilderForVedtak(utkast.getId()).stream().map(Kilde::getTekst).collect(Collectors.toList()); transactor.executeWithoutResult((status) -> { vedtaksstotteRepository.oppdaterUtkast(utkast.getId(), utkast); @@ -231,14 +221,8 @@ private void oppdatereDokumentIdforJournalfortOyeblikksbilde(long vedtakId, Stri JournalpostGraphqlResponse journalpost = safClient.hentJournalpost(journalpostId); if (journalpost.getData().getJournalpost().dokumenter != null) { - Arrays.stream(journalpost.getData().getJournalpost().dokumenter) - .filter(journalfortDokument -> OyeblikksbildeType.contains(journalfortDokument.brevkode)) - .forEach( - journalfortDokument -> oyeblikksbildeService.lagreJournalfortDokumentId(vedtakId, journalfortDokument.dokumentInfoId, OyeblikksbildeType.from(BrevKode.valueOf(journalfortDokument.brevkode))) - ); - log.info(format( - "Oppdatert dokumentId for oyeblikksbilde for vedtakId: %s", - vedtakId)); + Arrays.stream(journalpost.getData().getJournalpost().dokumenter).filter(journalfortDokument -> OyeblikksbildeType.contains(journalfortDokument.brevkode)).forEach(journalfortDokument -> oyeblikksbildeService.lagreJournalfortDokumentId(vedtakId, journalfortDokument.dokumentInfoId, OyeblikksbildeType.from(BrevKode.valueOf(journalfortDokument.brevkode)))); + log.info(format("Oppdatert dokumentId for oyeblikksbilde for vedtakId: %s", vedtakId)); } } catch (Exception e) { log.error("Feil med oppdatering av dokumentId for oyeblikksbilde " + e, e); @@ -366,20 +350,13 @@ public void taOverUtkast(long vedtakId) { } private void flettInnOpplysinger(Vedtak vedtak) { - List opplysninger = kilderRepository - .hentKilderForVedtak(vedtak.getId()) - .stream() - .map(Kilde::getTekst) - .collect(Collectors.toList()); + List opplysninger = kilderRepository.hentKilderForVedtak(vedtak.getId()).stream().map(Kilde::getTekst).collect(Collectors.toList()); vedtak.setOpplysninger(opplysninger); } private void flettInnVeilederNavn(Vedtak vedtak) { - veilederService - .hentVeilederEllerNull(vedtak.getVeilederIdent()) - .map(Veileder::getNavn) - .ifPresent(vedtak::setVeilederNavn); + veilederService.hentVeilederEllerNull(vedtak.getVeilederIdent()).map(Veileder::getNavn).ifPresent(vedtak::setVeilederNavn); } private void flettInnBeslutterNavn(Vedtak vedtak) { @@ -387,10 +364,7 @@ private void flettInnBeslutterNavn(Vedtak vedtak) { return; } - veilederService - .hentVeilederEllerNull(vedtak.getBeslutterIdent()) - .map(Veileder::getNavn) - .ifPresent(vedtak::setBeslutterNavn); + veilederService.hentVeilederEllerNull(vedtak.getBeslutterIdent()).map(Veileder::getNavn).ifPresent(vedtak::setBeslutterNavn); } private void flettInnEnhetNavn(Vedtak vedtak) { @@ -432,10 +406,7 @@ static void validerVedtakForFerdigstilling(Vedtak vedtak, Vedtak gjeldendeVedtak boolean harIkkeBegrunnelse = vedtak.getBegrunnelse() == null || vedtak.getBegrunnelse().trim().isEmpty(); boolean erStandard = innsatsgruppe == Innsatsgruppe.STANDARD_INNSATS; - boolean erGjeldendeVedtakVarig = - gjeldendeVedtak != null && - (gjeldendeVedtak.getInnsatsgruppe() == Innsatsgruppe.VARIG_TILPASSET_INNSATS || - gjeldendeVedtak.getInnsatsgruppe() == Innsatsgruppe.GRADERT_VARIG_TILPASSET_INNSATS); + boolean erGjeldendeVedtakVarig = gjeldendeVedtak != null && (gjeldendeVedtak.getInnsatsgruppe() == Innsatsgruppe.VARIG_TILPASSET_INNSATS || gjeldendeVedtak.getInnsatsgruppe() == Innsatsgruppe.GRADERT_VARIG_TILPASSET_INNSATS); if (harIkkeBegrunnelse && erStandard && erGjeldendeVedtakVarig) { throw new IllegalStateException("Vedtak mangler begrunnelse siden gjeldende vedtak er varig"); @@ -443,8 +414,7 @@ static void validerVedtakForFerdigstilling(Vedtak vedtak, Vedtak gjeldendeVedtak throw new IllegalStateException("Vedtak mangler begrunnelse"); } - if (vedtak.getJournalpostId() != null || - vedtak.getDokumentInfoId() != null) { + if (vedtak.getJournalpostId() != null || vedtak.getDokumentInfoId() != null) { throw new IllegalStateException("Vedtak er allerede journalført"); } } diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt index ee4708ea..fbc66a8a 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt +++ b/src/test/java/no/nav/veilarbvedtaksstotte/repository/SakStatistikkRepositoryTest.kt @@ -86,20 +86,8 @@ class SakStatistikkRepositoryTest : DatabaseTest() { val aktorId = AktorId.of("2004140973848") val behandlingId = 3002.toBigInteger() sakStatistikkRepository.insertSakStatistikkRad(statistikkRad2) - val lagretStatistikkRadUtkast = behandlingId.let { sakStatistikkRepository.hentSakStatistikkListe(aktorId.toString()) } - assertEquals(behandlingId.toString(), lagretStatistikkRadUtkast.get(0).behandlingId.toString())}} -/* - @Test - fun `lagre statistikkrad utkast2`() { - - val vedtakUtkast = VedtakUtkast( - id = "1", - aktorId = "aktor123", - veilederIdent = "2004140973848", - oppfolgingsenhetId = "0220" - ) - sakStatistikkRepository.insertSakStatistikkRadUtkast(vedtakUtkast.id, vedtakUtkast.aktorId, vedtakUtkast.veilederIdent, vedtakUtkast.oppfolgingsenhetId) - val lagretStatistikkRadUtkast = vedtakUtkast.id.let { sakStatistikkRepository.hentSakStatistikkListe(vedtakUtkast.aktorId.toString()) } - assertEquals(vedtakUtkast.id.toString(), lagretStatistikkRadUtkast.get(0).behandlingId.toString())} + val lagretStatistikkRadUtkast = + behandlingId.let { sakStatistikkRepository.hentSakStatistikkListe(aktorId.toString()) } + assertEquals(behandlingId.toString(), lagretStatistikkRadUtkast.get(0).behandlingId.toString()) + } } -*/ \ No newline at end of file diff --git a/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java b/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java index 1f254aac..12f7f69f 100644 --- a/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java +++ b/src/test/java/no/nav/veilarbvedtaksstotte/service/VedtakServiceTest.java @@ -142,7 +142,7 @@ public static void setupOnce() { BeslutteroversiktRepository beslutteroversiktRepository = new BeslutteroversiktRepository(jdbcTemplate); authService = spy(new AuthService(aktorOppslagClient, veilarbarenaService, AuthContextHolderThreadLocal.instance(), utrullingService, poaoTilgangClient)); SakStatistikkRepository sakStatistikkRepository = new SakStatistikkRepository(jdbcTemplate); - SakStatistikkService sakStatistikkService = new SakStatistikkService(sakStatistikkRepository,authService, aktorOppslagClient, veilarboppfolgingClient, unleashClient); + SakStatistikkService sakStatistikkService = new SakStatistikkService(sakStatistikkRepository, veilarboppfolgingClient, unleashClient); oyeblikksbildeService = new OyeblikksbildeService(authService, oyeblikksbildeRepository, vedtaksstotteRepository, veilarbpersonClient, aia_backend_client, arbeidssoekerRegistretService); MalTypeService malTypeService = new MalTypeService(arbeidssoekerRegistretService);