Skip to content

Commit

Permalink
Merge branch 'main' into dependabot/maven/all-dependencies-abeabe30b3
Browse files Browse the repository at this point in the history
  • Loading branch information
olekvernberg authored Apr 9, 2024
2 parents 4e5c6c5 + 10757a9 commit 27b7333
Show file tree
Hide file tree
Showing 11 changed files with 169 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,16 @@ class BehandlingsstatistikkProducer(private val kafkaProducerService: KafkaProdu
private val secureLogger = LoggerFactory.getLogger("secureLogger")

fun sendBehandling(behandlingDvh: BehandlingDVH) {
logger.info("Sending to Kafka topic: {}", topic)
secureLogger.debug("Sending to Kafka topic: {}\nBehandlingstatistikk: {}", topic, behandlingDvh)
runCatching {
kafkaProducerService.send(topic, behandlingDvh.behandlingId.toString(), behandlingDvh.toJson())
logger.info(
"Behandlingstatistikk for behandling=${behandlingDvh.behandlingId} " +
"behandlingStatus=${behandlingDvh.behandlingStatus} sent til Kafka",
"behandlingStatus=${behandlingDvh.behandlingStatus} sendt til Kafka",
)
}.onFailure {
val errorMessage = "Could not send behandling to Kafka. Check secure logs for more information."
val errorMessage = "Kunne ikke sende behandlingsstatistikk til topic: $topic. Se securelogs for mer info."
logger.error(errorMessage)
secureLogger.error("Could not send behandling to Kafka", it)
secureLogger.error("Kunne ikke sende behandlingsstatistikk til topic: $topic", it)
throw RuntimeException(errorMessage)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package no.nav.familie.ef.iverksett.behandlingsstatistikk

import no.nav.familie.ef.iverksett.iverksetting.domene.IverksettOvergangsstønad
import no.nav.familie.eksterne.kontrakter.ef.BehandlingÅrsak
import no.nav.familie.eksterne.kontrakter.saksstatistikk.ef.BehandlingDVH
import no.nav.familie.kontrakter.ef.iverksett.AdressebeskyttelseGradering
import no.nav.familie.kontrakter.ef.iverksett.BehandlingKategori
import no.nav.familie.kontrakter.ef.iverksett.BehandlingMetode
import no.nav.familie.kontrakter.ef.iverksett.BehandlingsstatistikkDto
import no.nav.familie.kontrakter.ef.iverksett.Hendelse
import org.springframework.stereotype.Service
Expand All @@ -17,75 +21,133 @@ class BehandlingsstatistikkService(private val behandlingsstatistikkProducer: Be
behandlingsstatistikkProducer.sendBehandling(behandlingDVH)
}

private fun mapTilBehandlingDVH(behandlingstatistikk: BehandlingsstatistikkDto): BehandlingDVH {
fun mapGOmregningIverksettingTilBehandlingDVH(iverksett: IverksettOvergangsstønad): BehandlingDVH {
val zoneId = ZoneId.of("Europe/Oslo")
val tekniskTid = ZonedDateTime.now(zoneId)
return BehandlingDVH(
behandlingId = iverksett.behandling.eksternId,
sakId = iverksett.fagsak.eksternId,
personIdent = iverksett.søker.personIdent,
registrertTid = iverksett.vedtak.vedtakstidspunkt.atZone(zoneId),
endretTid = iverksett.vedtak.vedtakstidspunkt.atZone(zoneId),
tekniskTid = tekniskTid,
behandlingStatus = Hendelse.FERDIG.name,
opprettetAv =
maskerVerdiHvisStrengtFortrolig(
iverksett.søker.adressebeskyttelse.erStrengtFortrolig(),
iverksett.vedtak.saksbehandlerId,
),
saksnummer = iverksett.fagsak.eksternId,
mottattTid = iverksett.vedtak.vedtakstidspunkt.atZone(zoneId),
saksbehandler =
maskerVerdiHvisStrengtFortrolig(
iverksett.søker.adressebeskyttelse.erStrengtFortrolig(),
iverksett.vedtak.saksbehandlerId,
),
opprettetEnhet =
maskerVerdiHvisStrengtFortrolig(
iverksett.søker.adressebeskyttelse.erStrengtFortrolig(),
MASKINELL_JOURNALFOERENDE_ENHET,
),
ansvarligEnhet =
maskerVerdiHvisStrengtFortrolig(
iverksett.søker.adressebeskyttelse.erStrengtFortrolig(),
MASKINELL_JOURNALFOERENDE_ENHET,
),
behandlingMetode = BehandlingMetode.BATCH.name,
behandlingÅrsak = iverksett.behandling.behandlingÅrsak.name,
avsender = "NAV enslig forelder",
behandlingType = iverksett.behandling.behandlingType.name,
sakYtelse = iverksett.fagsak.stønadstype.name,
behandlingResultat = iverksett.vedtak.vedtaksresultat.name,
resultatBegrunnelse = "G-omregning",
ansvarligBeslutter = null,
vedtakTid = iverksett.vedtak.vedtakstidspunkt.atZone(zoneId),
ferdigBehandletTid = iverksett.vedtak.vedtakstidspunkt.atZone(zoneId),
totrinnsbehandling = false,
sakUtland = mapTilStreng(iverksett.behandling.kategori),
relatertBehandlingId = iverksett.behandling.forrigeBehandlingEksternId,
kravMottatt = null,
revurderingÅrsak = BehandlingÅrsak.G_OMREGNING.name,
revurderingOpplysningskilde = null,
avslagAarsak = null,
)
}

private fun mapTilBehandlingDVH(behandlingsstatistikkDto: BehandlingsstatistikkDto): BehandlingDVH {
val tekniskTid = ZonedDateTime.now(ZoneId.of("Europe/Oslo"))
return BehandlingDVH(
behandlingId = behandlingstatistikk.eksternBehandlingId,
sakId = behandlingstatistikk.eksternFagsakId,
personIdent = behandlingstatistikk.personIdent,
behandlingId = behandlingsstatistikkDto.eksternBehandlingId,
sakId = behandlingsstatistikkDto.eksternFagsakId,
personIdent = behandlingsstatistikkDto.personIdent,
registrertTid =
behandlingstatistikk.behandlingOpprettetTidspunkt
?: behandlingstatistikk.hendelseTidspunkt,
endretTid = behandlingstatistikk.hendelseTidspunkt,
behandlingsstatistikkDto.behandlingOpprettetTidspunkt
?: behandlingsstatistikkDto.hendelseTidspunkt,
endretTid = behandlingsstatistikkDto.hendelseTidspunkt,
tekniskTid = tekniskTid,
behandlingStatus = behandlingstatistikk.hendelse.name,
behandlingStatus = behandlingsstatistikkDto.hendelse.name,
opprettetAv =
maskerVerdiHvisStrengtFortrolig(
behandlingstatistikk.strengtFortroligAdresse,
behandlingstatistikk.gjeldendeSaksbehandlerId,
behandlingsstatistikkDto.strengtFortroligAdresse,
behandlingsstatistikkDto.gjeldendeSaksbehandlerId,
),
saksnummer = behandlingstatistikk.eksternFagsakId,
mottattTid = behandlingstatistikk.henvendelseTidspunkt,
saksnummer = behandlingsstatistikkDto.eksternFagsakId,
mottattTid = behandlingsstatistikkDto.henvendelseTidspunkt,
saksbehandler =
maskerVerdiHvisStrengtFortrolig(
behandlingstatistikk.strengtFortroligAdresse,
behandlingstatistikk.gjeldendeSaksbehandlerId,
behandlingsstatistikkDto.strengtFortroligAdresse,
behandlingsstatistikkDto.gjeldendeSaksbehandlerId,
),
opprettetEnhet =
maskerVerdiHvisStrengtFortrolig(
behandlingstatistikk.strengtFortroligAdresse,
behandlingstatistikk.opprettetEnhet,
behandlingsstatistikkDto.strengtFortroligAdresse,
behandlingsstatistikkDto.opprettetEnhet,
),
ansvarligEnhet =
maskerVerdiHvisStrengtFortrolig(
behandlingstatistikk.strengtFortroligAdresse,
behandlingstatistikk.ansvarligEnhet,
behandlingsstatistikkDto.strengtFortroligAdresse,
behandlingsstatistikkDto.ansvarligEnhet,
),
behandlingMetode = behandlingstatistikk.behandlingMetode?.name ?: "MANUELL",
behandlingÅrsak = behandlingstatistikk.behandlingÅrsak?.name,
behandlingMetode = behandlingsstatistikkDto.behandlingMetode?.name ?: "MANUELL",
behandlingÅrsak = behandlingsstatistikkDto.behandlingÅrsak.name,
avsender = "NAV enslig forelder",
behandlingType = behandlingstatistikk.behandlingstype.name,
sakYtelse = behandlingstatistikk.stønadstype.name,
behandlingResultat = behandlingstatistikk.behandlingResultat,
resultatBegrunnelse = behandlingstatistikk.resultatBegrunnelse,
behandlingType = behandlingsstatistikkDto.behandlingstype.name,
sakYtelse = behandlingsstatistikkDto.stønadstype.name,
behandlingResultat = behandlingsstatistikkDto.behandlingResultat,
resultatBegrunnelse = behandlingsstatistikkDto.resultatBegrunnelse,
ansvarligBeslutter =
if (Hendelse.BESLUTTET == behandlingstatistikk.hendelse && behandlingstatistikk.beslutterId.isNotNullOrEmpty()) {
if (Hendelse.BESLUTTET == behandlingsstatistikkDto.hendelse && behandlingsstatistikkDto.beslutterId.isNotNullOrEmpty()) {
maskerVerdiHvisStrengtFortrolig(
behandlingstatistikk.strengtFortroligAdresse,
behandlingstatistikk.beslutterId.toString(),
behandlingsstatistikkDto.strengtFortroligAdresse,
behandlingsstatistikkDto.beslutterId.toString(),
)
} else {
null
},
vedtakTid =
if (Hendelse.VEDTATT == behandlingstatistikk.hendelse) {
behandlingstatistikk.hendelseTidspunkt
if (Hendelse.VEDTATT == behandlingsstatistikkDto.hendelse) {
behandlingsstatistikkDto.hendelseTidspunkt
} else {
null
},
ferdigBehandletTid =
if (Hendelse.FERDIG == behandlingstatistikk.hendelse) {
behandlingstatistikk.hendelseTidspunkt
if (Hendelse.FERDIG == behandlingsstatistikkDto.hendelse) {
behandlingsstatistikkDto.hendelseTidspunkt
} else {
null
},
totrinnsbehandling = true,
sakUtland = mapTilStreng(behandlingstatistikk.kategori),
relatertBehandlingId = behandlingstatistikk.relatertEksternBehandlingId,
kravMottatt = behandlingstatistikk.kravMottatt,
revurderingÅrsak = behandlingstatistikk.årsakRevurdering?.årsak?.name,
revurderingOpplysningskilde = behandlingstatistikk.årsakRevurdering?.opplysningskilde?.name,
avslagAarsak = behandlingstatistikk.avslagÅrsak?.name,
totrinnsbehandling =
if (Hendelse.BESLUTTET == behandlingsstatistikkDto.hendelse) {
true
} else {
false
},
sakUtland = mapTilStreng(behandlingsstatistikkDto.kategori),
relatertBehandlingId = behandlingsstatistikkDto.relatertEksternBehandlingId,
kravMottatt = behandlingsstatistikkDto.kravMottatt,
revurderingÅrsak = behandlingsstatistikkDto.årsakRevurdering?.årsak?.name,
revurderingOpplysningskilde = behandlingsstatistikkDto.årsakRevurdering?.opplysningskilde?.name,
avslagAarsak = behandlingsstatistikkDto.avslagÅrsak?.name,
)
}

Expand All @@ -107,4 +169,10 @@ class BehandlingsstatistikkService(private val behandlingsstatistikkProducer: Be
BehandlingKategori.NASJONAL -> "Nasjonal"
null -> "Nasjonal"
}

companion object {
const val MASKINELL_JOURNALFOERENDE_ENHET = "9999"
}
}

fun AdressebeskyttelseGradering?.erStrengtFortrolig() = this == AdressebeskyttelseGradering.STRENGT_FORTROLIG || this == AdressebeskyttelseGradering.STRENGT_FORTROLIG_UTLAND
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package no.nav.familie.ef.iverksett.behandlingsstatistikk

import no.nav.familie.ef.iverksett.featuretoggle.FeatureToggleService
import no.nav.familie.ef.iverksett.iverksetting.IverksettingRepository
import no.nav.familie.ef.iverksett.iverksetting.domene.IverksettOvergangsstønad
import no.nav.familie.ef.iverksett.repository.findByIdOrThrow
import no.nav.familie.prosessering.AsyncTaskStep
import no.nav.familie.prosessering.TaskStepBeskrivelse
import no.nav.familie.prosessering.domene.Task
import org.springframework.stereotype.Service
import java.util.UUID

@Service
@TaskStepBeskrivelse(
taskStepType = BehandlingsstatistikkTask.TYPE,
beskrivelse = "Sender melding til behandlingsstatistikk om at behandling er G-omregnet",
settTilManuellOppfølgning = true,
)
class BehandlingsstatistikkTask(
val behandlingsstatistikkService: BehandlingsstatistikkService,
val behandlingsstatistikkProducer: BehandlingsstatistikkProducer,
val iverksettingRepository: IverksettingRepository,
val featureToggleService: FeatureToggleService,
) : AsyncTaskStep {
override fun doTask(task: Task) {
val behandlingId = UUID.fromString(task.payload)
val iverksett = iverksettingRepository.findByIdOrThrow(behandlingId).data as IverksettOvergangsstønad
val behandlingDVH = behandlingsstatistikkService.mapGOmregningIverksettingTilBehandlingDVH(iverksett)
behandlingsstatistikkProducer.sendBehandling(behandlingDVH)
}

companion object {
const val TYPE = "BehandlingsstatistikkTask"
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package no.nav.familie.ef.iverksett.brukernotifikasjon

import no.nav.familie.ef.iverksett.featuretoggle.FeatureToggleService
import no.nav.familie.ef.iverksett.infrastruktur.task.opprettNestePubliseringTask
import no.nav.familie.ef.iverksett.iverksetting.IverksettingRepository
import no.nav.familie.ef.iverksett.iverksetting.domene.IverksettOvergangsstønad
import no.nav.familie.ef.iverksett.repository.findByIdOrThrow
import no.nav.familie.prosessering.AsyncTaskStep
import no.nav.familie.prosessering.TaskStepBeskrivelse
import no.nav.familie.prosessering.domene.Task
import no.nav.familie.prosessering.internal.TaskService
import org.springframework.stereotype.Service
import java.util.UUID

Expand All @@ -20,6 +22,7 @@ class SendBrukernotifikasjonVedGOmregningTask(
val brukernotifikasjonKafkaProducer: BrukernotifikasjonKafkaProducer,
val iverksettingRepository: IverksettingRepository,
val featureToggleService: FeatureToggleService,
val taskService: TaskService,
) : AsyncTaskStep {
override fun doTask(task: Task) {
val behandlingId = UUID.fromString(task.payload)
Expand All @@ -32,6 +35,14 @@ class SendBrukernotifikasjonVedGOmregningTask(
}
}

override fun onCompletion(task: Task) {
val behandlingId = UUID.fromString(task.payload)
val iverksett = iverksettingRepository.findByIdOrThrow(behandlingId).data
if (iverksett.erGOmregning() && featureToggleService.isEnabled("familie.ef.sak.g-beregning-scheduler")) {
taskService.save(task.opprettNestePubliseringTask())
}
}

companion object {
const val TYPE = "sendBrukernotifikasjonVedGOmregningTask"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package no.nav.familie.ef.iverksett.infrastruktur.task

import no.nav.familie.ef.iverksett.arbeidsoppfolging.SendVedtakTilArbeidsoppfølgingTask
import no.nav.familie.ef.iverksett.arena.SendFattetVedtakTilArenaTask
import no.nav.familie.ef.iverksett.behandlingsstatistikk.BehandlingsstatistikkTask
import no.nav.familie.ef.iverksett.brev.DistribuerVedtaksbrevTask
import no.nav.familie.ef.iverksett.brev.JournalførVedtaksbrevTask
import no.nav.familie.ef.iverksett.brukernotifikasjon.SendBrukernotifikasjonVedGOmregningTask
Expand Down Expand Up @@ -42,6 +43,7 @@ fun publiseringsflyt() =
TaskType(OpprettFremleggsoppgaveForOvergangsstønadTask.TYPE),
TaskType(VedtakstatistikkTask.TYPE),
TaskType(SendBrukernotifikasjonVedGOmregningTask.TYPE),
TaskType(BehandlingsstatistikkTask.TYPE),
)

fun TaskType.nesteHovedflytTask() = hovedflyt().zipWithNext().first { this.type == it.first.type }.second
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ data class Behandlingsdetaljer(
val behandlingType: BehandlingType,
val behandlingÅrsak: BehandlingÅrsak,
val relatertBehandlingId: UUID? = null,
val forrigeBehandlingEksternId: Long? = null,
val vilkårsvurderinger: List<Vilkårsvurdering> = emptyList(),
val aktivitetspliktInntrefferDato: LocalDate? = null,
val kravMottatt: LocalDate? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,17 @@ import no.nav.familie.ef.iverksett.util.mockFeatureToggleService
import no.nav.familie.ef.iverksett.util.opprettIverksettDto
import no.nav.familie.kontrakter.ef.felles.BehandlingÅrsak
import no.nav.familie.prosessering.domene.Task
import no.nav.familie.prosessering.internal.TaskService
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import java.util.UUID

class SendBrukernotifikasjonVedGOmregningTaskTest {
private val iverksettingRepository = mockk<IverksettingRepository>()
private val brukernotifikasjonKafkaProducer = mockk<BrukernotifikasjonKafkaProducer>()
private val taskService = mockk<TaskService>()
private val task =
SendBrukernotifikasjonVedGOmregningTask(brukernotifikasjonKafkaProducer, iverksettingRepository, mockFeatureToggleService())
SendBrukernotifikasjonVedGOmregningTask(brukernotifikasjonKafkaProducer, iverksettingRepository, mockFeatureToggleService(), taskService)

@BeforeEach
internal fun setUp() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package no.nav.familie.ef.iverksett.infrastruktur.task

import no.nav.familie.ef.iverksett.arbeidsoppfolging.SendVedtakTilArbeidsoppfølgingTask
import no.nav.familie.ef.iverksett.arena.SendFattetVedtakTilArenaTask
import no.nav.familie.ef.iverksett.behandlingsstatistikk.BehandlingsstatistikkTask
import no.nav.familie.ef.iverksett.brev.DistribuerVedtaksbrevTask
import no.nav.familie.ef.iverksett.brev.JournalførVedtaksbrevTask
import no.nav.familie.ef.iverksett.brukernotifikasjon.SendBrukernotifikasjonVedGOmregningTask
Expand Down Expand Up @@ -80,6 +81,10 @@ class TaskTypeTest {
val sendBrukernotifikasjonVedGOmregningTask = vedtaksstatistikkTask.opprettNestePubliseringTask()
assertThat(sendBrukernotifikasjonVedGOmregningTask.type).isEqualTo(SendBrukernotifikasjonVedGOmregningTask.TYPE)
assertThat(sendBrukernotifikasjonVedGOmregningTask.triggerTid).isBefore(LocalDateTime.now().plusMinutes(1))

val behandlingsstatistikkTask = sendBrukernotifikasjonVedGOmregningTask.opprettNestePubliseringTask()
assertThat(behandlingsstatistikkTask.type).isEqualTo(BehandlingsstatistikkTask.TYPE)
assertThat(behandlingsstatistikkTask.triggerTid).isBefore(LocalDateTime.now().plusMinutes(1))
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"behandling": {
"behandlingId": "234bed7c-b1d3-11eb-8529-0242ac130003",
"forrigeBehandlingId": "999abcde-fabc-11eb-8529-0242ac130003",
"forrigeBehandlingEksternId": 11,
"eksternId": 14,
"behandlingType": "FØRSTEGANGSBEHANDLING",
"behandlingÅrsak": "NYE_OPPLYSNINGER",
Expand Down
1 change: 1 addition & 0 deletions src/test/resources/json/IverksettDtoEksempel.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"behandling": {
"behandlingId": "234bed7c-b1d3-11eb-8529-0242ac130003",
"forrigeBehandlingId": "999abcde-fabc-11eb-8529-0242ac130003",
"forrigeBehandlingEksternId": 11,
"eksternId": 14,
"behandlingType": "FØRSTEGANGSBEHANDLING",
"behandlingÅrsak": "NYE_OPPLYSNINGER",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"behandling": {
"behandlingId": "234bed7c-b1d3-11eb-8529-0242ac130003",
"forrigeBehandlingId": "999abcde-fabc-11eb-8529-0242ac130003",
"forrigeBehandlingEksternId": 11,
"eksternId": 14,
"behandlingType": "FØRSTEGANGSBEHANDLING",
"behandlingÅrsak": "NYE_OPPLYSNINGER",
Expand Down

0 comments on commit 27b7333

Please sign in to comment.