Skip to content

Commit fe55357

Browse files
committed
IS-2274: Frisk til arbeid
1 parent 1a76557 commit fe55357

File tree

7 files changed

+94
-7
lines changed

7 files changed

+94
-7
lines changed

src/main/kotlin/no/nav/syfo/cronjob/preloadcache/PreloadCacheCronjob.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ class PreloadCacheCronjob(
3535
database.getEnheter()
3636
.forEach { enhetNr ->
3737
try {
38+
val now = LocalDate.now()
3839
val personer = database.hentUbehandledePersonerTilknyttetEnhet(enhetNr).map { pPersonOversiktStatus ->
3940
pPersonOversiktStatus.toPersonOversiktStatus(emptyList())
4041
}.filter { personOversiktStatus ->
41-
personOversiktStatus.hasActiveOppgave(arenaCutoff)
42+
personOversiktStatus.hasActiveOppgave(arenaCutoff, now)
4243
}
4344

4445
log.info("Caching ${personer.size} for enhet $enhetNr")

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class PersonoversiktStatusService(
2323
val personListe = database.hentUbehandledePersonerTilknyttetEnhet(
2424
enhet = enhet,
2525
)
26+
val today = LocalDate.now()
2627
return personListe.map { pPersonOversikStatus ->
2728
val personOppfolgingstilfelleVirksomhetList = getPersonOppfolgingstilfelleVirksomhetList(
2829
pPersonOversikStatusId = pPersonOversikStatus.id,
@@ -31,7 +32,7 @@ class PersonoversiktStatusService(
3132
personOppfolgingstilfelleVirksomhetList = personOppfolgingstilfelleVirksomhetList,
3233
)
3334
}.filter { personOversiktStatus ->
34-
personOversiktStatus.hasActiveOppgave(arenaCutoff = arenaCutoff)
35+
personOversiktStatus.hasActiveOppgave(arenaCutoff = arenaCutoff, today = today)
3536
}
3637
}
3738

src/main/kotlin/no/nav/syfo/personstatus/api/v2/PersonOversiktStatusDTO.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ data class PersonOversiktStatusDTO(
2525
val trengerOppfolgingFrist: LocalDate?,
2626
val behandlerBerOmBistandUbehandlet: Boolean,
2727
val arbeidsuforhetVurderAvslagUbehandlet: Boolean,
28-
val friskmeldingtilarbeidsformidlingFom: LocalDate?
28+
val friskmeldingtilarbeidsformidlingFom: LocalDate?,
2929
)
3030

3131
data class PersonOppfolgingstilfelleDTO(

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

+6-2
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,14 @@ fun PersonOversiktStatus.isActiveAktivitetskrav(arenaCutoff: LocalDate) =
6666
(aktivitetskrav == AktivitetskravStatus.NY || aktivitetskrav == AktivitetskravStatus.AVVENT) &&
6767
aktivitetskravStoppunkt?.isAfter(arenaCutoff) ?: false
6868

69-
fun PersonOversiktStatus.hasActiveOppgave(arenaCutoff: LocalDate): Boolean {
69+
fun PersonOversiktStatus.hasActiveOppgave(arenaCutoff: LocalDate, today: LocalDate): Boolean {
7070
return this.oppfolgingsplanLPSBistandUbehandlet == true ||
7171
this.dialogmotesvarUbehandlet ||
7272
this.isDialogmotekandidat() ||
7373
(this.motebehovUbehandlet == true && this.latestOppfolgingstilfelle != null) ||
7474
this.isActiveAktivitetskrav(arenaCutoff = arenaCutoff) ||
75-
hasActiveBehandlerdialogOppgave() ||
75+
this.hasActiveBehandlerdialogOppgave() ||
76+
this.hasFriskmeldingTilArbeidsformidling(today) ||
7677
this.aktivitetskravVurderStansUbehandlet ||
7778
this.trengerOppfolging || this.behandlerBerOmBistandUbehandlet || this.arbeidsuforhetVurderAvslagUbehandlet
7879
}
@@ -127,6 +128,9 @@ fun PersonOversiktStatus.hasActiveBehandlerdialogOppgave(): Boolean {
127128
this.behandlerdialogAvvistUbehandlet
128129
}
129130

131+
private fun PersonOversiktStatus.hasFriskmeldingTilArbeidsformidling(today: LocalDate): Boolean =
132+
this.friskmeldingtilarbeidsformidlingFom != null && today.isBeforeOrEqual(this.friskmeldingtilarbeidsformidlingFom)
133+
130134
fun PersonOversiktStatus.applyHendelse(
131135
oversikthendelseType: OversikthendelseType,
132136
): PersonOversiktStatus =

src/main/resources/db/migration/V16_1__add_column_friskmeldingtilarbeidsformidling_fradato.sql

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ ALTER TABLE person_oversikt_status
22
ADD COLUMN friskmelding_til_arbeidsformidling_fom DATE;
33

44
CREATE INDEX IX_PERSON_OVERSIKT_FTA_FOM
5-
ON PERSON_OVERSIKT_STATUS (tildelt_enhet, friskmelding_til_arbeidsformidling_fom)
5+
ON PERSON_OVERSIKT_STATUS (friskmelding_til_arbeidsformidling_fom)
66
WHERE (friskmelding_til_arbeidsformidling_fom IS NOT NULL);

src/test/kotlin/no/nav/syfo/personstatus/api/v2/PersonoversiktStatusApiV2Spek.kt

+59
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,65 @@ object PersonoversiktStatusApiV2Spek : Spek({
587587
personOversiktStatus.dialogmotesvarUbehandlet shouldBeEqualTo true
588588
}
589589
}
590+
it("return person with friskmelding til arbeidsformidling starting tomorrow") {
591+
val personident = PersonIdent(ARBEIDSTAKER_FNR)
592+
with(database) {
593+
createPersonOversiktStatus(PersonOversiktStatus(personident.value))
594+
setTildeltEnhet(personident, NAV_ENHET)
595+
setFriskmeldingtilarbeidsformidlingFom(personident, LocalDate.now().plusDays(1))
596+
}
597+
598+
with(
599+
handleRequest(HttpMethod.Get, url) {
600+
addHeader(HttpHeaders.Authorization, bearerHeader(validToken))
601+
}
602+
) {
603+
response.status() shouldBeEqualTo HttpStatusCode.OK
604+
605+
val personOversiktStatus =
606+
objectMapper.readValue<List<PersonOversiktStatusDTO>>(response.content!!).first()
607+
personOversiktStatus.fnr shouldBeEqualTo personident.value
608+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
609+
personOversiktStatus.friskmeldingtilarbeidsformidlingFom!! shouldBeAfter LocalDate.now()
610+
}
611+
}
612+
it("return person with friskmelding til arbeidsformidling starting today") {
613+
val personident = PersonIdent(ARBEIDSTAKER_FNR)
614+
with(database) {
615+
createPersonOversiktStatus(PersonOversiktStatus(personident.value))
616+
setTildeltEnhet(personident, NAV_ENHET)
617+
setFriskmeldingtilarbeidsformidlingFom(personident, LocalDate.now())
618+
}
619+
620+
with(
621+
handleRequest(HttpMethod.Get, url) {
622+
addHeader(HttpHeaders.Authorization, bearerHeader(validToken))
623+
}
624+
) {
625+
response.status() shouldBeEqualTo HttpStatusCode.OK
626+
627+
val personOversiktStatus =
628+
objectMapper.readValue<List<PersonOversiktStatusDTO>>(response.content!!).first()
629+
personOversiktStatus.fnr shouldBeEqualTo personident.value
630+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
631+
personOversiktStatus.friskmeldingtilarbeidsformidlingFom!! shouldBeEqualTo LocalDate.now()
632+
}
633+
}
634+
it("does not return person with friskmelding til arbeidsformidling starting yesterday") {
635+
val personident = PersonIdent(ARBEIDSTAKER_FNR)
636+
with(database) {
637+
createPersonOversiktStatus(PersonOversiktStatus(personident.value))
638+
setTildeltEnhet(personident, NAV_ENHET)
639+
setFriskmeldingtilarbeidsformidlingFom(personident, LocalDate.now().minusDays(1))
640+
}
641+
with(
642+
handleRequest(HttpMethod.Get, url) {
643+
addHeader(HttpHeaders.Authorization, bearerHeader(validToken))
644+
}
645+
) {
646+
response.status() shouldBeEqualTo HttpStatusCode.NoContent
647+
}
648+
}
590649

591650
it("Should update name in database") {
592651
val personIdent = PersonIdent(ARBEIDSTAKER_FNR)

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

+23-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import no.nav.syfo.personstatus.domain.PersonOversiktStatus
88
import org.flywaydb.core.Flyway
99
import java.sql.Connection
1010
import java.sql.Timestamp
11+
import java.time.LocalDate
1112
import java.time.OffsetDateTime
1213

1314
class TestDatabase : DatabaseInterface {
@@ -105,7 +106,28 @@ fun DatabaseInterface.setTildeltEnhet(
105106
connection.prepareStatement(querySetTildeltEnhet).use {
106107
it.setString(1, enhet)
107108
it.setString(2, ident.value)
108-
it.execute()
109+
if (it.executeUpdate() != 1) throw RuntimeException("No row updated")
110+
}
111+
connection.commit()
112+
}
113+
}
114+
115+
const val queryFriskmeldingtilarbeidsformidlingFom =
116+
"""
117+
UPDATE PERSON_OVERSIKT_STATUS
118+
SET friskmelding_til_arbeidsformidling_fom = ?
119+
WHERE fnr = ?
120+
"""
121+
122+
fun DatabaseInterface.setFriskmeldingtilarbeidsformidlingFom(
123+
ident: PersonIdent,
124+
fom: LocalDate,
125+
) {
126+
this.connection.use { connection ->
127+
connection.prepareStatement(queryFriskmeldingtilarbeidsformidlingFom).use {
128+
it.setObject(1, fom)
129+
it.setString(2, ident.value)
130+
if (it.executeUpdate() != 1) throw RuntimeException("No row updated")
109131
}
110132
connection.commit()
111133
}

0 commit comments

Comments
 (0)