Skip to content

Commit 05095ff

Browse files
committed
Henter ikke avbrutte søknader/behandlinger til benk. kan starte ny behandling dersom sist behandling er blitt avbrutt
1 parent 6858a41 commit 05095ff

File tree

8 files changed

+109
-26
lines changed

8 files changed

+109
-26
lines changed

app/src/main/kotlin/no/nav/tiltakspenger/vedtak/repository/benk/BenkOversiktPostgresRepo.kt

+6-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import no.nav.tiltakspenger.vedtak.repository.behandling.toBehandlingstype
2020
class BenkOversiktPostgresRepo(
2121
private val sessionFactory: PostgresSessionFactory,
2222
) : SaksoversiktRepo {
23-
override fun hentAlleBehandlinger(sessionContext: SessionContext?): List<BehandlingEllerSøknadForSaksoversikt> =
23+
override fun hentÅpneBehandlinger(sessionContext: SessionContext?): List<BehandlingEllerSøknadForSaksoversikt> =
2424
sessionFactory.withSession(sessionContext) { session ->
2525
session
2626
.run(
@@ -44,7 +44,7 @@ class BenkOversiktPostgresRepo(
4444
from behandling
4545
left join sak on sak.id = behandling.sak_id
4646
left join søknad on behandling.id = søknad.behandling_id
47-
where behandling.status != 'VEDTATT'
47+
where behandling.status != 'VEDTATT' and behandling.status != 'AVBRUTT'
4848
order by sak.saksnummer, behandling.id
4949
""".trimIndent(),
5050
).map { row ->
@@ -84,7 +84,7 @@ class BenkOversiktPostgresRepo(
8484
)
8585
}
8686

87-
override fun hentAlleSøknader(sessionContext: SessionContext?): List<BehandlingEllerSøknadForSaksoversikt> =
87+
override fun hentÅpneSøknader(sessionContext: SessionContext?): List<BehandlingEllerSøknadForSaksoversikt> =
8888
sessionFactory.withSession(sessionContext) { session ->
8989
session
9090
.run(
@@ -96,9 +96,10 @@ class BenkOversiktPostgresRepo(
9696
søknad.opprettet,
9797
søknad.behandling_id,
9898
søknad.sak_id,
99-
sak.saksnummer
99+
sak.saksnummer,
100+
søknad.avbrutt
100101
from søknad join sak on søknad.sak_id = sak.id
101-
where søknad.behandling_id is null
102+
where søknad.behandling_id is null and søknad.avbrutt is null
102103
order by søknad.id
103104
""".trimIndent(),
104105
).map { row ->

app/src/main/kotlin/no/nav/tiltakspenger/vedtak/routes/behandling/StartBehandlingRoute.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ fun Route.startBehandlingRoute(
4545
{
4646
when (it) {
4747
is KanIkkeStarteSøknadsbehandling.HarAlleredeStartetBehandlingen -> {
48-
call.respond(HttpStatusCode.OK, it.behandling.toDTO())
48+
call.respond400BadRequest(
49+
"Finnes allerede en ikke-avbrutt førstegangsbehandling",
50+
"finnes_allerede_en_ikke_avbrutt_førstegangsbehandling",
51+
)
4952
}
5053

5154
is KanIkkeStarteSøknadsbehandling.OppretteBehandling ->

app/src/test/kotlin/no/nav/tiltakspenger/db/TestDataHelperBehandlingEx.kt

+58
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import no.nav.tiltakspenger.libs.common.Fnr
99
import no.nav.tiltakspenger.libs.common.SakId
1010
import no.nav.tiltakspenger.libs.common.Saksbehandler
1111
import no.nav.tiltakspenger.libs.common.SøknadId
12+
import no.nav.tiltakspenger.libs.common.førsteNovember24
1213
import no.nav.tiltakspenger.libs.common.random
1314
import no.nav.tiltakspenger.libs.periodisering.Periode
1415
import no.nav.tiltakspenger.meldekort.domene.MeldekortBehandling
@@ -30,6 +31,7 @@ import no.nav.tiltakspenger.saksbehandling.domene.vedtak.Rammevedtak
3031
import no.nav.tiltakspenger.saksbehandling.domene.vedtak.opprettVedtak
3132
import no.nav.tiltakspenger.vedtak.repository.behandling.BehandlingRepoTest.Companion.random
3233
import java.time.LocalDate
34+
import java.time.LocalDateTime
3335

3436
internal fun TestDataHelper.persisterOpprettetFørstegangsbehandling(
3537
sakId: SakId = SakId.random(),
@@ -88,6 +90,62 @@ internal fun TestDataHelper.persisterOpprettetFørstegangsbehandling(
8890
)
8991
}
9092

93+
internal fun TestDataHelper.persisterAvbruttFørstegangsbehandling(
94+
sakId: SakId = SakId.random(),
95+
fnr: Fnr = Fnr.random(),
96+
deltakelseFom: LocalDate = 1.januar(2023),
97+
deltakelseTom: LocalDate = 31.mars(2023),
98+
journalpostId: String = random.nextInt().toString(),
99+
saksbehandler: Saksbehandler = ObjectMother.saksbehandler(),
100+
avbruttTidspunkt: LocalDateTime = førsteNovember24,
101+
tiltaksOgVurderingsperiode: Periode = Periode(fraOgMed = deltakelseFom, tilOgMed = deltakelseTom),
102+
sak: Sak = ObjectMother.nySak(
103+
sakId = sakId,
104+
fnr = fnr,
105+
saksnummer = this.saksnummerGenerator.neste(),
106+
),
107+
id: SøknadId = Søknad.randomId(),
108+
knad: Søknad =
109+
ObjectMother.nySøknad(
110+
periode = tiltaksOgVurderingsperiode,
111+
journalpostId = journalpostId,
112+
personopplysninger =
113+
ObjectMother.personSøknad(
114+
fnr = fnr,
115+
),
116+
id = id,
117+
søknadstiltak =
118+
ObjectMother.søknadstiltak(
119+
deltakelseFom = deltakelseFom,
120+
deltakelseTom = deltakelseTom,
121+
),
122+
barnetillegg = listOf(),
123+
sakId = sak.id,
124+
saksnummer = sak.saksnummer,
125+
),
126+
): Pair<Sak, Behandling> {
127+
val (sakMedFørstegangsbehandling, _) = persisterOpprettetFørstegangsbehandling(
128+
sakId = sakId,
129+
fnr = fnr,
130+
deltakelseFom = deltakelseFom,
131+
deltakelseTom = deltakelseTom,
132+
journalpostId = journalpostId,
133+
saksbehandler = saksbehandler,
134+
tiltaksOgVurderingsperiode = tiltaksOgVurderingsperiode,
135+
id = id,
136+
søknad = søknad,
137+
sak = sak,
138+
)
139+
val førstegangsbehandling = sakMedFørstegangsbehandling.førstegangsbehandling
140+
val avbruttBehandling = førstegangsbehandling!!.avbryt(
141+
saksbehandler,
142+
"begrunnelse",
143+
avbruttTidspunkt,
144+
)
145+
behandlingRepo.lagre(avbruttBehandling)
146+
return sakRepo.hentForSakId(sakMedFørstegangsbehandling.id)!! to avbruttBehandling
147+
}
148+
91149
/**
92150
* Persisterer og et rammevedtak.
93151
*/

app/src/test/kotlin/no/nav/tiltakspenger/vedtak/repository/benk/BenkOversiktPostgresRepoTest.kt

+32-10
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package no.nav.tiltakspenger.vedtak.repository.benk
33
import io.kotest.matchers.shouldBe
44
import io.kotest.matchers.shouldNotBe
55
import no.nav.tiltakspenger.common.januarDateTime
6+
import no.nav.tiltakspenger.db.persisterAvbruttFørstegangsbehandling
67
import no.nav.tiltakspenger.db.persisterIverksattFørstegangsbehandling
78
import no.nav.tiltakspenger.db.persisterOpprettetFørstegangsbehandling
89
import no.nav.tiltakspenger.db.persisterOpprettetRevurderingDeprecated
@@ -25,8 +26,8 @@ class BenkOversiktPostgresRepoTest {
2526
val sakId = testDataHelper.søknadRepo.hentSakIdForSoknad(søknad1.id)!!
2627
val (førstegangsBehandlingSak, førstegangsBehandling) = testDataHelper.persisterOpprettetFørstegangsbehandling()
2728
val (revurderingSak, revurdering) = testDataHelper.persisterOpprettetRevurderingDeprecated()
28-
val behandlinger = repo.hentAlleBehandlinger()
29-
val søknader = repo.hentAlleSøknader()
29+
val behandlinger = repo.hentÅpneBehandlinger()
30+
val søknader = repo.hentÅpneSøknader()
3031
val benkOversikt = Saksoversikt(søknader + behandlinger)
3132

3233
benkOversikt.also {
@@ -85,29 +86,50 @@ class BenkOversiktPostgresRepoTest {
8586
fun `Henter ikke ferdigstilte behandlinger`() {
8687
withMigratedDb(runIsolated = true) { testDataHelper ->
8788
val repo = testDataHelper.saksoversiktRepo
88-
val (sak, søknad) = testDataHelper.persisterIverksattFørstegangsbehandling()
89-
val behandlinger = repo.hentAlleBehandlinger()
90-
val søknader = repo.hentAlleSøknader()
89+
val (sak, søknad) = testDataHelper.persisterAvbruttFørstegangsbehandling()
90+
val (sakMedAvbruttBehandling, behandling) = testDataHelper.persisterIverksattFørstegangsbehandling(
91+
sakId = sak.id,
92+
fnr = søknad.fnr,
93+
sak = sak,
94+
)
95+
96+
val behandlinger = repo.hentÅpneBehandlinger()
97+
val søknader = repo.hentÅpneSøknader()
9198
val benkOversikt = Saksoversikt(søknader + behandlinger)
9299

93100
benkOversikt.also {
94101
it shouldNotBe
95102
Saksoversikt(
96103
listOf(
104+
BehandlingEllerSøknadForSaksoversikt(
105+
periode = ObjectMother.virkningsperiode(),
106+
status = BehandlingEllerSøknadForSaksoversikt.Status.Behandling(Behandlingsstatus.AVBRUTT),
107+
behandlingstype = BenkBehandlingstype.FØRSTEGANGSBEHANDLING,
108+
fnr = søknad.fnr,
109+
saksnummer = sakMedAvbruttBehandling.saksnummer,
110+
saksbehandler = sakMedAvbruttBehandling.førstegangsbehandling!!.saksbehandler!!,
111+
beslutter = null,
112+
sakId = sakMedAvbruttBehandling.id,
113+
underkjent = false,
114+
kravtidspunkt = LocalDateTime.from(1.januarDateTime(2022)),
115+
id = sakMedAvbruttBehandling.førstegangsbehandling!!.id,
116+
opprettet = sakMedAvbruttBehandling.førstegangsbehandling!!.opprettet,
117+
),
97118
BehandlingEllerSøknadForSaksoversikt(
98119
periode = ObjectMother.virkningsperiode(),
99120
status = BehandlingEllerSøknadForSaksoversikt.Status.Behandling(Behandlingsstatus.VEDTATT),
100121
behandlingstype = BenkBehandlingstype.FØRSTEGANGSBEHANDLING,
101122
fnr = søknad.fnr,
102-
saksnummer = sak.saksnummer,
103-
saksbehandler = sak.førstegangsbehandling!!.saksbehandler!!,
123+
saksnummer = sakMedAvbruttBehandling.saksnummer,
124+
saksbehandler = behandling.saksbehandlerNavIdent,
104125
beslutter = null,
105-
sakId = sak.id,
126+
sakId = sakMedAvbruttBehandling.id,
106127
underkjent = false,
107128
kravtidspunkt = LocalDateTime.from(1.januarDateTime(2022)),
108-
id = sak.førstegangsbehandling!!.id,
109-
opprettet = sak.førstegangsbehandling!!.opprettet,
129+
id = behandling.id,
130+
opprettet = behandling.opprettet,
110131
),
132+
111133
),
112134
)
113135
}

domene/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/domene/behandling/Behandlinger.kt

+3-4
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@ data class Behandlinger(
1414

1515
constructor(behandling: Behandling) : this(listOf(behandling))
1616

17-
val revurderinger: Revurderinger = Revurderinger(behandlinger.drop(1))
18-
val førstegangsbehandling: Behandling? = behandlinger.firstOrNull()?.also {
19-
require(it.erFørstegangsbehandling)
20-
}
17+
val revurderinger: Revurderinger = Revurderinger(behandlinger.filter { it.erRevurdering })
18+
val førstegangsBehandlinger = this.behandlinger.filter { it.erFørstegangsbehandling }
19+
val førstegangsbehandling: Behandling? = førstegangsBehandlinger.filterNot { it.status == Behandlingsstatus.AVBRUTT }.singleOrNullOrThrow()
2120

2221
fun leggTilRevurdering(
2322
revurdering: Behandling,

domene/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/ports/SaksoversiktRepo.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ import no.nav.tiltakspenger.saksbehandling.domene.benk.BehandlingEllerSøknadFor
77
* Custom spørringer for å vise en oversikt over søknader og behandlinger.
88
*/
99
interface SaksoversiktRepo {
10-
fun hentAlleBehandlinger(sessionContext: SessionContext? = null): List<BehandlingEllerSøknadForSaksoversikt>
11-
fun hentAlleSøknader(sessionContext: SessionContext? = null): List<BehandlingEllerSøknadForSaksoversikt>
10+
fun hentÅpneBehandlinger(sessionContext: SessionContext? = null): List<BehandlingEllerSøknadForSaksoversikt>
11+
fun hentÅpneSøknader(sessionContext: SessionContext? = null): List<BehandlingEllerSøknadForSaksoversikt>
1212
}

domene/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/service/sak/SakServiceImpl.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ class SakServiceImpl(
151151
harRollene = saksbehandler.roller,
152152
).left()
153153
}
154-
val behandlinger = saksoversiktRepo.hentAlleBehandlinger()
155-
val søknader = saksoversiktRepo.hentAlleSøknader()
154+
val behandlinger = saksoversiktRepo.hentÅpneBehandlinger()
155+
val søknader = saksoversiktRepo.hentÅpneSøknader()
156156
val benkOversikt = Saksoversikt(behandlinger + søknader)
157157

158158
if (benkOversikt.isEmpty()) return benkOversikt.right()

test-common/src/main/kotlin/no/nav/tiltakspenger/fakes/repos/SaksoversiktFakeRepo.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class SaksoversiktFakeRepo(
1111
private val behandlingFakeRepo: BehandlingFakeRepo,
1212
) : SaksoversiktRepo {
1313

14-
override fun hentAlleBehandlinger(sessionContext: SessionContext?): List<BehandlingEllerSøknadForSaksoversikt> {
14+
override fun hentÅpneBehandlinger(sessionContext: SessionContext?): List<BehandlingEllerSøknadForSaksoversikt> {
1515
return behandlingFakeRepo.alle.map { behandling ->
1616
val status = BehandlingEllerSøknadForSaksoversikt.Status.Behandling(behandling.status)
1717

@@ -33,7 +33,7 @@ class SaksoversiktFakeRepo(
3333
}
3434
}
3535

36-
override fun hentAlleSøknader(sessionContext: SessionContext?): List<BehandlingEllerSøknadForSaksoversikt> {
36+
override fun hentÅpneSøknader(sessionContext: SessionContext?): List<BehandlingEllerSøknadForSaksoversikt> {
3737
return søknadFakeRepo.alle.map { søknad ->
3838
val status = BehandlingEllerSøknadForSaksoversikt.Status.Søknad
3939
BehandlingEllerSøknadForSaksoversikt(

0 commit comments

Comments
 (0)