Skip to content

Commit 6addf38

Browse files
authored
Bruk tildato for oppslag på oppfølgingsperiode hvis hvis før moddato (#89)
* Sette modDato til not optional * Bruk tildato for oppslag hvis før moddato * Test overnevnte case
1 parent 9e9e9ca commit 6addf38

File tree

5 files changed

+53
-15
lines changed

5 files changed

+53
-15
lines changed

src/main/kotlin/no/nav/arena_tiltak_aktivitet_acl/domain/kafka/arena/tiltak/ArenaDeltakelse.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ data class ArenaDeltakelse(
6666
innsokBegrunnelse = BEGRUNNELSE_BESTILLING,
6767
modUser = MOD_USER,
6868
regUser = REG_USER,
69-
modDato = MOD_DATO?.asValidatedLocalDateTime("MOD_DATO"),
69+
modDato = MOD_DATO.asValidatedLocalDateTime("MOD_DATO"),
7070
)
7171
}
7272

src/main/kotlin/no/nav/arena_tiltak_aktivitet_acl/domain/kafka/arena/tiltak/TiltakDeltakelse.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ data class TiltakDeltakelse(
1818
val innsokBegrunnelse: String?,
1919
val regUser: String?,
2020
val modUser: String?,
21-
val modDato: LocalDateTime?,
21+
val modDato: LocalDateTime,
2222
)
2323

2424
data class DeltakelseId(

src/main/kotlin/no/nav/arena_tiltak_aktivitet_acl/processors/DeltakerProcessor.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ open class DeltakerProcessor(
5656
}
5757

5858
var opprettetFoerMenAktivEtterLansering = false
59-
if (deltakelse.regDato.isBefore(AKTIVITETSPLAN_LANSERINGSDATO)) {
59+
if (deltakelse.regDato.isBefore(AKTIVITETSPLAN_LANSERINGSDATO) && deltakelse.modDato.isBefore(
60+
AKTIVITETSPLAN_LANSERINGSDATO)) {
6061
// Hvis deltakelsen er opprettet før aktivitetsplan lanseringsdato,
6162
// _men_ datoTil er etter aktivitetsplan lanseringsdato,
6263
// _og_ bruker hadde en aktiv oppfølgingsperiode ved aktivitetsplan lanseringsdato
@@ -165,10 +166,9 @@ open class DeltakerProcessor(
165166
}
166167

167168
private fun getOppfolgingsPeriodeOrThrow(deltaker: TiltakDeltakelse, personIdent: String): FinnOppfolgingResult.FunnetPeriodeResult {
168-
val funnetPeriode = deltaker.modDato
169-
?.let { modDato -> oppfolgingsperiodeService.finnOppfolgingsperiode(personIdent, modDato) }
170-
?: oppfolgingsperiodeService.finnOppfolgingsperiode(personIdent, deltaker.regDato)
171-
.also { log.info("arenaId: ${deltaker.tiltakdeltakelseId} Fant ikke oppfolgingsperiode på modDato, bruker fallback til regDato") }
169+
val oppslagsDato = deltaker.datoTil
170+
?.let { tilDato -> minOf(tilDato.atStartOfDay(), deltaker.modDato) } ?: deltaker.modDato
171+
val funnetPeriode = oppfolgingsperiodeService.finnOppfolgingsperiode(personIdent, oppslagsDato)
172172
return when (funnetPeriode) {
173173
is FinnOppfolgingResult.FunnetPeriodeResult -> funnetPeriode
174174
is FinnOppfolgingResult.IngenPeriodeResult -> handleOppfolgingsperiodeNull(deltaker, personIdent, deltaker.modDato ?: deltaker.regDato, deltaker.tiltakdeltakelseId)

src/main/kotlin/no/nav/arena_tiltak_aktivitet_acl/services/OppfolgingsperiodeService.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import org.springframework.stereotype.Service
77
import java.time.Duration
88
import java.time.LocalDateTime
99
import java.time.ZoneId
10-
import java.time.chrono.ChronoZonedDateTime
10+
import java.time.ZonedDateTime
1111
import java.time.temporal.ChronoUnit
1212
import java.time.temporal.TemporalAmount
1313
import kotlin.math.abs
@@ -42,14 +42,14 @@ open class OppfolgingsperiodeService(
4242
return FinnOppfolgingResult.IngenPeriodeResult( emptyList())
4343
}
4444

45-
val tidspunktCZDT = ChronoZonedDateTime.from(tidspunkt.atZone(ZoneId.systemDefault()))
45+
val tidspunktZDT = ZonedDateTime.from(tidspunkt.atZone(ZoneId.systemDefault()))
4646
val oppfolgingsperiode = oppfolgingsperioder
47-
.find {periode -> periode.tidspunktInnenforPeriode(tidspunktCZDT) }
47+
.find {periode -> periode.tidspunktInnenforPeriode(tidspunktZDT) }
4848
if (oppfolgingsperiode != null) return FinnOppfolgingResult.FunnetPeriodeResult(oppfolgingsperiode, oppfolgingsperioder)
4949

5050
return oppfolgingsperioder
51-
.filter { it.sluttDato == null || it.sluttDato.isAfter(tidspunktCZDT) }
52-
.minByOrNull { abs(ChronoUnit.MILLIS.between(tidspunktCZDT, it.startDato)) }
51+
.filter { it.sluttDato == null || it.sluttDato.isAfter(tidspunktZDT) }
52+
.minByOrNull { abs(ChronoUnit.MILLIS.between(tidspunktZDT, it.startDato)) }
5353
.let { periodeMatch ->
5454
if (periodeMatch == null || !tidspunktRettFoerStartDatoEllerSenere(tidspunkt, periodeMatch.startDato.toLocalDateTime(), defaultSlakk)) {
5555
secureLog.info(

src/test/kotlin/no/nav/arena_tiltak_aktivitet_acl/integration/DeltakerIntegrationTests.kt

+41-3
Original file line numberDiff line numberDiff line change
@@ -380,14 +380,15 @@ class DeltakerIntegrationTests : IntegrationTestBase() {
380380
}
381381

382382
@Test
383-
fun `ignore deltaker before aktivitetsplan launch if tilDato before aktivitetsplan launch`() {
383+
fun `ignore deltaker moddato before aktivitetsplan launch if tilDato before aktivitetsplan launch`() {
384384
val (gjennomforingId, deltakerId) = setup()
385385
val deltakerInput = DeltakerInput(
386386
tiltakDeltakelseId = deltakerId,
387387
tiltakgjennomforingId = gjennomforingId,
388388
innsokBegrunnelse = "innsøkbegrunnelse",
389389
endretAv = Ident(ident = "SIG123"),
390390
datoTil = AKTIVITETSPLAN_LANSERINGSDATO.toLocalDate().minusDays(1),
391+
endretTidspunkt = AKTIVITETSPLAN_LANSERINGSDATO.minusDays(1),
391392
registrertDato = AKTIVITETSPLAN_LANSERINGSDATO.minusDays(2)
392393
)
393394
val deltakerCommand = NyDeltakerCommand(deltakerInput)
@@ -400,14 +401,15 @@ class DeltakerIntegrationTests : IntegrationTestBase() {
400401
}
401402

402403
@Test
403-
fun `ignore deltaker before aktivitetsplan launch if tilDato after aktivitetplan launch, but no oppfolgingsperiode`() {
404+
fun `ignore deltaker moddato before aktivitetsplan launch if tilDato after aktivitetplan launch, but no oppfolgingsperiode`() {
404405
val (gjennomforingId, deltakerId) = setup()
405406
val deltakerInput = DeltakerInput(
406407
tiltakDeltakelseId = deltakerId,
407408
tiltakgjennomforingId = gjennomforingId,
408409
innsokBegrunnelse = "innsøkbegrunnelse",
409410
endretAv = Ident(ident = "SIG123"),
410411
datoTil = AKTIVITETSPLAN_LANSERINGSDATO.plusMonths(1).toLocalDate(),
412+
endretTidspunkt = AKTIVITETSPLAN_LANSERINGSDATO.minusDays(1),
411413
registrertDato = AKTIVITETSPLAN_LANSERINGSDATO.minusDays(1)
412414
)
413415
val deltakerCommand = NyDeltakerCommand(deltakerInput)
@@ -420,7 +422,7 @@ class DeltakerIntegrationTests : IntegrationTestBase() {
420422
}
421423

422424
@Test
423-
fun `dont ignore deltaker before aktivitetsplan launch if tildato after aktivitetsplan launch and oppfolgingsperiode was active`() {
425+
fun `dont ignore deltaker moddato before aktivitetsplan launch if tildato after aktivitetsplan launch and oppfolgingsperiode was active`() {
424426
val (gjennomforingId, deltakerId) = setup()
425427

426428
val foerstePeriode = Oppfolgingsperiode(
@@ -454,6 +456,42 @@ class DeltakerIntegrationTests : IntegrationTestBase() {
454456
}
455457
}
456458

459+
@Test
460+
fun `find correct periode for deltakelse before aktivitetsplan launch when moddato is very recent`() {
461+
val (gjennomforingId, deltakerId) = setup()
462+
463+
val foerstePeriode = Oppfolgingsperiode(
464+
uuid = UUID.randomUUID(),
465+
startDato = ZonedDateTime.of(AKTIVITETSPLAN_LANSERINGSDATO.minusDays(1), ZoneId.systemDefault()),
466+
sluttDato = null
467+
)
468+
469+
val deltakerInput = DeltakerInput(
470+
personId = 345L,
471+
tiltakDeltakelseId = deltakerId,
472+
tiltakgjennomforingId = gjennomforingId,
473+
innsokBegrunnelse = "innsøkbegrunnelse",
474+
endretAv = Ident(ident = "SIG123"),
475+
registrertDato = AKTIVITETSPLAN_LANSERINGSDATO.minusYears(1),
476+
endretTidspunkt = LocalDateTime.now(),
477+
datoTil = LocalDate.now().plusYears(25)
478+
)
479+
480+
val fnr = "12345678901"
481+
OrdsClientMock.fnrHandlers[deltakerInput.personId!!] = { fnr }
482+
OppfolgingClientMock.oppfolgingsperioder[fnr] = listOf(foerstePeriode)
483+
484+
485+
486+
val deltakerCommand = NyDeltakerCommand(deltakerInput)
487+
val result = deltakerExecutor.execute(deltakerCommand)
488+
489+
result.expectHandled {
490+
data -> data.headers.oppfolgingsperiode shouldBe foerstePeriode.uuid
491+
}
492+
}
493+
494+
457495
@Test
458496
fun `tittel should be set to default value when gjennomforing navn is null`() {
459497
val gjennomforingId: Long = Random.nextLong()

0 commit comments

Comments
 (0)