Skip to content

Commit fe9076a

Browse files
committed
La til initiell håndtering ev Melding mottatt
1 parent 3add725 commit fe9076a

File tree

7 files changed

+80
-20
lines changed

7 files changed

+80
-20
lines changed
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
Periode starter -> - oppretter intern state med start tidspunkt fra periode
2+
- opprette bekreftelse i tilstand "ikke klar"
3+
Schedule task:
4+
for hver bekreftelse i "ikke klar", sett til til "klar for utfylling" x tid før gjelderTil og send hendelse BekreftelseTilgjenelig
5+
6+
for hver bekreftelse i "klar for utfylling" og gjelderTil passert, sett til til "venter på svar" og send hendelse LeveringsFristUtloept
7+
8+
for hver bekreftelse i "venter på svar" og ingen purring sendt og x tid passert siden frist, send RegisterGracePeriodeGjenstaaendeTid og sett purring sendt timestamp til now()
9+
10+
for hver bekreftelse i "venter på svar" og grace periode utløpt, send RegisterGracePeriodeUtloept
11+
12+
Melding med svar fra bruker mottatt -> - finn matchene berkreftelse i status "venter på svar" || "klar for utfylling" og set til "levert", ta vare på x siste bekreftelser.
13+
- Send ut BekreftelseMeldingMottatt
14+
- Dersom ønsker å avslutte: send BaOmAaAvsluttePeriode
15+
16+
Periode avsluttet -> slett intern state og send PeriodeAvsluttet hendelse
17+

apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekretelsetjeneste/ApplicationConfiguration.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@ data class ApplicationConfiguration(
99
val bekreftelseHendelseloggTopic: String,
1010
val stateStoreName: String,
1111
val punctuateInterval: Duration
12-
)
12+
) {
13+
val pawNamespace = "paw"
14+
}
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,76 @@
11
package no.nav.paw.bekretelsetjeneste
22

3-
import no.nav.paw.config.kafka.streams.genericProcess
4-
import no.nav.paw.bekretelsetjeneste.tilstand.InternTilstand
3+
import no.nav.paw.bekreftelse.internehendelser.BaOmAaAvsluttePeriode
54
import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelse
5+
import no.nav.paw.bekreftelse.internehendelser.BekreftelseMeldingMottatt
6+
import no.nav.paw.bekretelsetjeneste.tilstand.Bekreftelse
7+
import no.nav.paw.bekretelsetjeneste.tilstand.InternTilstand
8+
import no.nav.paw.bekretelsetjeneste.tilstand.Tilstand
9+
import no.nav.paw.bekretelsetjeneste.tilstand.Tilstand.KlarForUtfylling
10+
import no.nav.paw.bekretelsetjeneste.tilstand.Tilstand.VenterSvar
11+
import no.nav.paw.config.kafka.streams.genericProcess
612
import no.nav.paw.rapportering.melding.v1.Melding
713
import org.apache.kafka.streams.StreamsBuilder
14+
import org.apache.kafka.streams.processor.api.Record
815
import org.slf4j.LoggerFactory
16+
import java.util.*
917

1018
context(ApplicationConfiguration, ApplicationContext)
11-
fun StreamsBuilder.processRapporteringsMeldingTopic() {
19+
fun StreamsBuilder.processBekreftelseMeldingTopic() {
1220
stream<Long, Melding>(bekreftelseTopic)
1321
.genericProcess<Long, Melding, Long, BekreftelseHendelse>(
1422
name = "meldingMottatt",
1523
stateStoreName
1624
) { record ->
17-
val gjeldeneTilstand: InternTilstand? = getStateStore<StateStore>(stateStoreName)[record.value().periodeId]
25+
val stateStore = getStateStore<StateStore>(stateStoreName)
26+
val gjeldeneTilstand: InternTilstand? = stateStore[record.value().periodeId]
1827
if (gjeldeneTilstand == null) {
1928
meldingsLogger.warn("Melding mottatt for periode som ikke er aktiv/eksisterer")
20-
} else {
21-
TODO()
29+
return@genericProcess
30+
}
31+
if (record.value().namespace == pawNamespace) {
32+
val bekreftelse = gjeldeneTilstand.bekreftelser.find { bekreftelse -> bekreftelse.bekreftelseId == record.value().id }
33+
when {
34+
bekreftelse == null -> {
35+
meldingsLogger.warn("Melding {} har ingen matchene bekreftelse", record.value().id)
36+
}
37+
bekreftelse.tilstand is VenterSvar || bekreftelse.tilstand is KlarForUtfylling -> {
38+
val (hendelser, oppdatertBekreftelse) = behandleGyldigSvar(gjeldeneTilstand.periode.arbeidsoekerId, record, bekreftelse)
39+
val oppdatertBekreftelser = gjeldeneTilstand.bekreftelser
40+
.filterNot { t -> t.bekreftelseId == oppdatertBekreftelse.bekreftelseId } + oppdatertBekreftelse
41+
val oppdatertTilstand = gjeldeneTilstand.copy(bekreftelser = oppdatertBekreftelser)
42+
stateStore.put(oppdatertTilstand.periode.periodeId, oppdatertTilstand)
43+
hendelser
44+
.map (record::withValue)
45+
.forEach (::forward)
46+
}
47+
else -> {
48+
meldingsLogger.warn("Melding {} har ikke forventet tilstand, tilstand={}", record.value().id, bekreftelse.tilstand)
49+
}
50+
}
2251
}
23-
2452
}
53+
}
2554

55+
fun behandleGyldigSvar(arbeidssoekerId: Long, record: Record<Long, Melding>, bekreftelse: Bekreftelse): Pair<List<BekreftelseHendelse>, Bekreftelse> {
56+
val oppdatertBekreftelse = bekreftelse.copy(tilstand = Tilstand.Levert)
57+
val baOmAaAvslutte = if (!record.value().svar.vilFortsetteSomArbeidssoeker) {
58+
BaOmAaAvsluttePeriode(
59+
hendelseId = UUID.randomUUID(),
60+
periodeId = record.value().periodeId,
61+
arbeidssoekerId = arbeidssoekerId
62+
)
63+
} else null
64+
val meldingMottatt = BekreftelseMeldingMottatt(
65+
hendelseId = UUID.randomUUID(),
66+
periodeId = record.value().periodeId,
67+
arbeidssoekerId = arbeidssoekerId,
68+
bekreftelseId = bekreftelse.bekreftelseId
69+
)
70+
return listOfNotNull(meldingMottatt, baOmAaAvslutte) to oppdatertBekreftelse
2671
}
2772

73+
2874
private val meldingsLogger = LoggerFactory.getLogger("meldingsLogger")
2975

3076

apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekretelsetjeneste/Topology.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ context(ApplicationConfiguration, ApplicationContext)
1212
fun StreamsBuilder.appTopology(): Topology {
1313
processPeriodeTopic()
1414
processAnsvarTopic()
15-
processRapporteringsMeldingTopic()
15+
processBekreftelseMeldingTopic()
1616

1717
return build()
1818
}

apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekretelsetjeneste/tilstand/InternTilstand.kt

+4-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package no.nav.paw.bekretelsetjeneste.tilstand
22

33
import no.nav.paw.arbeidssokerregisteret.api.v1.Periode
4-
import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelse
54
import java.time.Instant
65
import java.util.UUID
76

@@ -13,22 +12,18 @@ data class InternTilstand(
1312

1413
@JvmRecord
1514
data class Bekreftelse(
16-
val tilstand: Set<BekreftelseTilstand>,
17-
val rapporteringsId: UUID,
15+
val tilstand: Tilstand,
16+
val sistePurring: Instant?,
17+
val bekreftelseId: UUID,
1818
val gjelderFra: Instant,
1919
val gjelderTil: Instant
2020
)
2121

22-
@JvmRecord
23-
data class BekreftelseTilstand(
24-
val tidspunkt: Instant,
25-
val tilstand: Tilstand
26-
)
27-
2822
sealed interface Tilstand{
2923
data object IkkeKlarForUtfylling: Tilstand
3024
data object KlarForUtfylling: Tilstand
3125
data object VenterSvar: Tilstand
26+
data object Levert : Tilstand
3227
}
3328

3429

domain/bekreftelse-interne-hendelser/src/test/kotlin/no/nav/paw/bekreftelse/internehendelser/SerdeTest.kt

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ class SerdeTest : FreeSpec({
1010
val hendelse = LeveringsfristUtloept(
1111
hendelseId = UUID.randomUUID(),
1212
periodeId = UUID.randomUUID(),
13-
identitetsnummer = "12345678901",
1413
bekreftelseId = UUID.randomUUID(),
1514
arbeidssoekerId = 1234567890L
1615
)

settings.gradle.kts

+2-1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ dependencyResolutionManagement {
6565
val pawPdlClientVersion = "24.08.08.40-1"
6666
val pawAaregClientVersion = "24.07.04.18-1"
6767
val arbeidssokerregisteretVersion = "1.9348086045.48-1"
68+
val rapporteringsSchemaVersion = "24.09.11.8-1"
69+
6870

6971
//Arrow
7072
val arrowVersion = "1.2.4"
@@ -97,7 +99,6 @@ dependencyResolutionManagement {
9799
val otelInstrumentationVersion = "2.4.0"
98100
val otelInstrumentationKtorVersion = "2.4.0-alpha"
99101
val coroutinesVersion = "1.8.1"
100-
val rapporteringsSchemaVersion = "24.05.15.2-1"
101102
val postgresDriverVersion = "42.7.3"
102103
val flywayVersion = "10.15.0"
103104
val hikariVersion = "5.1.0"

0 commit comments

Comments
 (0)