Skip to content

Commit 6861519

Browse files
committed
IS-2271: WIP
1 parent 4c40278 commit 6861519

12 files changed

+132
-20
lines changed

src/main/kotlin/no/nav/syfo/App.kt

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import no.nav.syfo.cronjob.behandlendeenhet.PersonBehandlendeEnhetService
1919
import no.nav.syfo.cronjob.launchCronjobModule
2020
import no.nav.syfo.kafka.launchKafkaModule
2121
import no.nav.syfo.personstatus.PersonoversiktStatusService
22+
import no.nav.syfo.personstatus.infrastructure.database.PersonOversiktStatusRepository
2223
import org.slf4j.LoggerFactory
2324
import java.util.concurrent.TimeUnit
2425

@@ -67,9 +68,11 @@ fun main() {
6768
databaseModule(
6869
databaseEnvironment = environment.database,
6970
)
71+
val personoversiktStatusRepository = PersonOversiktStatusRepository(database = database)
7072
personoversiktStatusService = PersonoversiktStatusService(
7173
database = database,
7274
pdlClient = pdlClient,
75+
personoversiktStatusRepository = personoversiktStatusRepository,
7376
)
7477
personBehandlendeEnhetService = PersonBehandlendeEnhetService(
7578
database = database,

src/main/kotlin/no/nav/syfo/personstatus/PersonoversiktStatusService.kt

+6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import no.nav.syfo.client.pdl.PdlClient
55
import no.nav.syfo.domain.PersonIdent
66
import no.nav.syfo.oppfolgingstilfelle.domain.PersonOppfolgingstilfelleVirksomhet
77
import no.nav.syfo.personoppgavehendelse.kafka.*
8+
import no.nav.syfo.personstatus.application.IPersonOversiktStatusRepository
89
import no.nav.syfo.personstatus.db.*
910
import no.nav.syfo.personstatus.domain.*
1011
import java.sql.Connection
@@ -13,6 +14,7 @@ import java.time.LocalDate
1314
class PersonoversiktStatusService(
1415
private val database: DatabaseInterface,
1516
private val pdlClient: PdlClient,
17+
private val personoversiktStatusRepository: IPersonOversiktStatusRepository,
1618
) {
1719
private val isUbehandlet = true
1820
private val isBehandlet = false
@@ -83,6 +85,10 @@ class PersonoversiktStatusService(
8385
}
8486
}
8587

88+
fun updateArbeidsuforhetVurderingStatus(personident: PersonIdent, isAktivVurdering: Boolean) {
89+
personoversiktStatusRepository.updateArbeidsuforhetVurderingStatus(personident, isAktivVurdering)
90+
}
91+
8692
private fun createOrUpdatePersonOversiktStatus(
8793
connection: Connection,
8894
personident: PersonIdent,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package no.nav.syfo.personstatus.application
2+
3+
import no.nav.syfo.domain.PersonIdent
4+
5+
interface IPersonOversiktStatusRepository {
6+
7+
fun updateArbeidsuforhetVurderingStatus(personIdent: PersonIdent, isAktivVurdering: Boolean)
8+
}

src/main/kotlin/no/nav/syfo/personstatus/db/getFromPersonOversiktStatus.kt

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ fun ResultSet.toPPersonOversiktStatus(): PPersonOversiktStatus =
125125
antallSykedager = getObject("antall_sykedager") as Int?,
126126
arbeidsuforhetVurderAvslagUbehandlet = getBoolean("arbeidsuforhet_vurder_avslag_ubehandlet"),
127127
friskmeldingTilArbeidsformidlingFom = getObject("friskmelding_til_arbeidsformidling_fom", LocalDate::class.java),
128+
isAktivArbeidsuforhetVurdering = getBoolean("arbeidsuforhet_aktiv_vurdering")
128129
)
129130

130131
fun ResultSet.toVeilederBrukerKnytning(): VeilederBrukerKnytning =

src/main/kotlin/no/nav/syfo/personstatus/domain/PPersonOversiktStatus.kt

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ data class PPersonOversiktStatus(
4242
val antallSykedager: Int?,
4343
val arbeidsuforhetVurderAvslagUbehandlet: Boolean,
4444
val friskmeldingTilArbeidsformidlingFom: LocalDate?,
45+
val isAktivArbeidsuforhetVurdering: Boolean,
4546
)
4647

4748
fun PPersonOversiktStatus.toPersonOversiktStatus(

src/main/kotlin/no/nav/syfo/personstatus/domain/PersonOversiktStatus.kt

+1-14
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ data class PersonOversiktStatus(
3737
val behandlerBerOmBistandUbehandlet: Boolean = false,
3838
val arbeidsuforhetVurderAvslagUbehandlet: Boolean = false,
3939
val friskmeldingTilArbeidsformidlingFom: LocalDate? = null,
40+
val isAktivArbeidsuforhetVurdering: Boolean = false,
4041
) {
4142
constructor(fnr: String) : this(
4243
null, fnr = fnr, null, null, null,
@@ -135,59 +136,45 @@ fun PersonOversiktStatus.applyHendelse(
135136
OversikthendelseType.MOTEBEHOV_SVAR_MOTTATT -> this.copy(
136137
motebehovUbehandlet = true,
137138
)
138-
139139
OversikthendelseType.MOTEBEHOV_SVAR_BEHANDLET -> this.copy(
140140
motebehovUbehandlet = false,
141141
)
142-
143142
OversikthendelseType.OPPFOLGINGSPLANLPS_BISTAND_MOTTATT -> this.copy(
144143
oppfolgingsplanLPSBistandUbehandlet = true,
145144
)
146-
147145
OversikthendelseType.OPPFOLGINGSPLANLPS_BISTAND_BEHANDLET -> this.copy(
148146
oppfolgingsplanLPSBistandUbehandlet = false,
149147
)
150-
151148
OversikthendelseType.DIALOGMOTESVAR_MOTTATT -> this.copy(
152149
dialogmotesvarUbehandlet = true,
153150
)
154-
155151
OversikthendelseType.DIALOGMOTESVAR_BEHANDLET -> this.copy(
156152
dialogmotesvarUbehandlet = false,
157153
)
158-
159154
OversikthendelseType.BEHANDLERDIALOG_SVAR_MOTTATT -> this.copy(
160155
behandlerdialogSvarUbehandlet = true,
161156
)
162-
163157
OversikthendelseType.BEHANDLERDIALOG_SVAR_BEHANDLET -> this.copy(
164158
behandlerdialogSvarUbehandlet = false,
165159
)
166-
167160
OversikthendelseType.BEHANDLERDIALOG_MELDING_UBESVART_MOTTATT -> this.copy(
168161
behandlerdialogUbesvartUbehandlet = true,
169162
)
170-
171163
OversikthendelseType.BEHANDLERDIALOG_MELDING_UBESVART_BEHANDLET -> this.copy(
172164
behandlerdialogUbesvartUbehandlet = false,
173165
)
174-
175166
OversikthendelseType.BEHANDLERDIALOG_MELDING_AVVIST_MOTTATT -> this.copy(
176167
behandlerdialogAvvistUbehandlet = true,
177168
)
178-
179169
OversikthendelseType.BEHANDLERDIALOG_MELDING_AVVIST_BEHANDLET -> this.copy(
180170
behandlerdialogAvvistUbehandlet = false,
181171
)
182-
183172
OversikthendelseType.AKTIVITETSKRAV_VURDER_STANS_MOTTATT -> this.copy(
184173
aktivitetskravVurderStansUbehandlet = true,
185174
)
186-
187175
OversikthendelseType.AKTIVITETSKRAV_VURDER_STANS_BEHANDLET -> this.copy(
188176
aktivitetskravVurderStansUbehandlet = false,
189177
)
190-
191178
OversikthendelseType.BEHANDLER_BER_OM_BISTAND_MOTTATT -> this.copy(
192179
behandlerBerOmBistandUbehandlet = true
193180
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package no.nav.syfo.personstatus.infrastructure.database
2+
3+
import no.nav.syfo.application.database.DatabaseInterface
4+
import no.nav.syfo.domain.PersonIdent
5+
import no.nav.syfo.personstatus.application.IPersonOversiktStatusRepository
6+
7+
class PersonOversiktStatusRepository(private val database: DatabaseInterface) : IPersonOversiktStatusRepository {
8+
9+
override fun updateArbeidsuforhetVurderingStatus(personIdent: PersonIdent, isAktivVurdering: Boolean) {
10+
database.connection.use { connection ->
11+
connection.prepareStatement(UPDATE_ARBEIDSUFORHET_VURDERING_STATUS).use {
12+
it.setBoolean(1, isAktivVurdering)
13+
it.setString(2, personIdent.value)
14+
it.executeQuery()
15+
connection.commit()
16+
}
17+
}
18+
}
19+
20+
companion object {
21+
private const val UPDATE_ARBEIDSUFORHET_VURDERING_STATUS =
22+
"""
23+
UPDATE person_oversikt_status
24+
SET arbeidsuforhet_aktiv_vurdering = ?
25+
WHERE fnr = ?
26+
"""
27+
}
28+
}

src/main/kotlin/no/nav/syfo/personstatus/infrastructure/kafka/ArbeidsuforhetVurderingConsumer.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package no.nav.syfo.personstatus.infrastructure.kafka
33
import no.nav.syfo.application.ApplicationState
44
import no.nav.syfo.application.kafka.KafkaEnvironment
55
import no.nav.syfo.application.kafka.kafkaAivenConsumerConfig
6+
import no.nav.syfo.domain.PersonIdent
67
import no.nav.syfo.kafka.KafkaConsumerService
78
import no.nav.syfo.kafka.launchKafkaTask
89
import no.nav.syfo.personstatus.PersonoversiktStatusService
@@ -35,11 +36,10 @@ class ArbeidsuforhetVurderingConsumer(
3536
val validRecords = records.requireNoNulls()
3637
validRecords.map { record ->
3738
val recordValue = record.value()
38-
log.info("ArbeidsuforhetVurderingConsumer record value:\n$recordValue")
39-
// personoversiktStatusService.updateArbeidsuforhetVurderingStatus(
40-
// personident = PersonIdent(recordValue.personident),
41-
// isFinalVurdering = recordValue.isFinalVurdering,
42-
// )
39+
personoversiktStatusService.updateArbeidsuforhetVurderingStatus(
40+
personident = PersonIdent(recordValue.personident),
41+
isAktivVurdering = !recordValue.isFinalVurdering,
42+
)
4343
}
4444
}
4545

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
ALTER TABLE person_oversikt_status
2+
ADD COLUMN arbeidsuforhet_aktiv_vurdering BOOLEAN DEFAULT FALSE;
3+
4+
DROP INDEX IX_PERSON_OVERSIKT_STATUS_ENHETENS_OVERSIKT;
5+
6+
CREATE INDEX IX_PERSON_OVERSIKT_STATUS_ENHETENS_OVERSIKT
7+
ON PERSON_OVERSIKT_STATUS (tildelt_enhet, dialogmotekandidat_generated_at)
8+
WHERE (motebehov_ubehandlet
9+
OR oppfolgingsplan_lps_bistand_ubehandlet
10+
OR dialogmotesvar_ubehandlet
11+
OR dialogmotekandidat
12+
OR ((aktivitetskrav = 'NY' OR aktivitetskrav = 'AVVENT') AND aktivitetskrav_stoppunkt > '2023-03-10')
13+
OR behandlerdialog_svar_ubehandlet
14+
OR behandlerdialog_ubesvart_ubehandlet
15+
OR behandlerdialog_avvist_ubehandlet
16+
OR aktivitetskrav_vurder_stans_ubehandlet
17+
OR trenger_oppfolging
18+
OR behandler_bistand_ubehandlet
19+
OR arbeidsuforhet_vurder_avslag_ubehandlet
20+
OR arbeidsuforhet_aktiv_vurdering
21+
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package no.nav.syfo.personstatus.infrastructure
2+
3+
import io.ktor.server.testing.*
4+
import no.nav.syfo.domain.PersonIdent
5+
import no.nav.syfo.personstatus.db.createPersonOversiktStatus
6+
import no.nav.syfo.personstatus.db.getPersonOversiktStatusList
7+
import no.nav.syfo.personstatus.domain.PersonOversiktStatus
8+
import no.nav.syfo.personstatus.infrastructure.database.PersonOversiktStatusRepository
9+
import no.nav.syfo.testutil.ExternalMockEnvironment
10+
import no.nav.syfo.testutil.UserConstants
11+
import org.amshove.kluent.shouldBe
12+
import org.amshove.kluent.shouldNotBe
13+
import org.spekframework.spek2.Spek
14+
import org.spekframework.spek2.style.specification.describe
15+
16+
class PersonOversiktStatusRepositorySpek : Spek({
17+
18+
describe(PersonOversiktStatusRepository::class.java.simpleName) {
19+
with(TestApplicationEngine()) {
20+
start()
21+
val externalMockEnvironment = ExternalMockEnvironment.instance
22+
val database = externalMockEnvironment.database
23+
val personOversiktStatusRepository = PersonOversiktStatusRepository(database = database)
24+
25+
afterEachTest {
26+
// drop data
27+
}
28+
29+
describe("Successfully updates arbeidsuforhet vurdering status") {
30+
// Store person_oversikt_status to be changed
31+
val newPersonOversiktStatus = PersonOversiktStatus(fnr = UserConstants.ARBEIDSTAKER_FNR)
32+
database.connection.use { connection ->
33+
connection.createPersonOversiktStatus(
34+
commit = true,
35+
personOversiktStatus = newPersonOversiktStatus,
36+
)
37+
}
38+
39+
personOversiktStatusRepository.updateArbeidsuforhetVurderingStatus(
40+
personIdent = PersonIdent(UserConstants.ARBEIDSTAKER_FNR),
41+
isAktivVurdering = true
42+
)
43+
44+
// Retrieve and see the difference
45+
val personOversiktStatus = database.getPersonOversiktStatusList(fnr = UserConstants.ARBEIDSTAKER_FNR).first()
46+
47+
newPersonOversiktStatus.isAktivArbeidsuforhetVurdering shouldNotBe personOversiktStatus.isAktivArbeidsuforhetVurdering
48+
newPersonOversiktStatus.isAktivArbeidsuforhetVurdering shouldBe true
49+
}
50+
}
51+
}
52+
})

src/test/kotlin/no/nav/syfo/testutil/InternalMockEnvironment.kt

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import no.nav.syfo.cronjob.behandlendeenhet.PersonBehandlendeEnhetService
1010
import no.nav.syfo.cronjob.virksomhetsnavn.PersonOppfolgingstilfelleVirksomhetnavnCronjob
1111
import no.nav.syfo.cronjob.virksomhetsnavn.PersonOppfolgingstilfelleVirksomhetsnavnService
1212
import no.nav.syfo.personstatus.PersonoversiktStatusService
13+
import no.nav.syfo.personstatus.infrastructure.database.PersonOversiktStatusRepository
1314

1415
class InternalMockEnvironment private constructor() {
1516
private val externalMockEnvironment: ExternalMockEnvironment = ExternalMockEnvironment.instance
@@ -52,9 +53,11 @@ class InternalMockEnvironment private constructor() {
5253
val personOppfolgingstilfelleVirksomhetnavnCronjob = PersonOppfolgingstilfelleVirksomhetnavnCronjob(
5354
personOppfolgingstilfelleVirksomhetsnavnService = personOppfolgingstilfelleVirksomhetsnavnService,
5455
)
56+
val personoversiktRepository = PersonOversiktStatusRepository(database = database)
5557
val personoversiktStatusService = PersonoversiktStatusService(
5658
database = database,
5759
pdlClient = pdlClient,
60+
personoversiktStatusRepository = personoversiktRepository,
5861
)
5962

6063
companion object {

src/test/kotlin/no/nav/syfo/testutil/TestApiModule.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import no.nav.syfo.application.cache.RedisStore
66
import no.nav.syfo.client.azuread.AzureAdClient
77
import no.nav.syfo.client.pdl.PdlClient
88
import no.nav.syfo.personstatus.PersonoversiktStatusService
9+
import no.nav.syfo.personstatus.infrastructure.database.PersonOversiktStatusRepository
910

1011
fun Application.testApiModule(
1112
externalMockEnvironment: ExternalMockEnvironment
@@ -20,10 +21,11 @@ fun Application.testApiModule(
2021
azureAdClient = azureAdClient,
2122
clientEnvironment = externalMockEnvironment.environment.clients.pdl,
2223
)
23-
24+
val personoversiktRepository = PersonOversiktStatusRepository(database = externalMockEnvironment.database)
2425
val personoversiktStatusService = PersonoversiktStatusService(
2526
database = externalMockEnvironment.database,
2627
pdlClient = pdlClient,
28+
personoversiktStatusRepository = personoversiktRepository
2729
)
2830

2931
this.apiModule(

0 commit comments

Comments
 (0)