Skip to content

Commit a419177

Browse files
authored
Merge pull request #1889 from navikt/sjekker-om-eps-har-sak
kan sjekke om eps har sak for en gitt brukers sak
2 parents bdeb406 + 3f50bba commit a419177

File tree

12 files changed

+89
-6
lines changed

12 files changed

+89
-6
lines changed

database/src/main/kotlin/no/nav/su/se/bakover/database/sak/SakPostgresRepo.kt

+16
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,22 @@ internal class SakPostgresRepo(
234234
}
235235
}
236236

237+
override fun hentSakInfo(fnr: Fnr): SakInfo? {
238+
return dbMetrics.timeQuery("hentSakInfoForFnr") {
239+
sessionFactory.withSession { session ->
240+
"""
241+
SELECT
242+
id, saksnummer, fnr, type
243+
FROM sak
244+
WHERE fnr = :fnr
245+
""".trimIndent().hent(
246+
mapOf("fnr" to fnr),
247+
session,
248+
) { row -> row.toSakInfo() }
249+
}
250+
}
251+
}
252+
237253
private fun Row.toSakInfo(): SakInfo {
238254
return SakInfo(
239255
sakId = uuid("id"),

database/src/test/kotlin/no/nav/su/se/bakover/database/sak/SakPostgresRepoTest.kt

+15
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,21 @@ internal class SakPostgresRepoTest {
126126
}
127127
}
128128

129+
@Test
130+
fun `henter sakinfo for et gitt fnr`() {
131+
withMigratedDb { dataSource ->
132+
val testDataHelper = TestDataHelper(dataSource)
133+
val repo = testDataHelper.sakRepo
134+
val (sak) = testDataHelper.persisterSøknadsbehandlingIverksatt()
135+
val hentetSakInfo = repo.hentSakInfo(sak.fnr)
136+
137+
hentetSakInfo?.fnr shouldBe sak.fnr
138+
hentetSakInfo?.sakId shouldBe sak.id
139+
hentetSakInfo?.saksnummer shouldBe sak.saksnummer
140+
hentetSakInfo?.type shouldBe sak.type
141+
}
142+
}
143+
129144
@Test
130145
fun `Henter alle restanser for alle saker`() {
131146
withMigratedDb { dataSource ->

domain/src/main/kotlin/no/nav/su/se/bakover/domain/sak/SakRepo.kt

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ interface SakRepo {
2424
fun hentSak(hendelseId: HendelseId): Sak?
2525
fun hentSakInfoForIdenter(personidenter: NonEmptyList<String>): SakInfo?
2626
fun hentSakInfo(sakId: UUID): SakInfo?
27+
fun hentSakInfo(fnr: Fnr): SakInfo?
2728
fun opprettSak(sak: NySak)
2829
fun hentÅpneBehandlinger(): List<Behandlingssammendrag>
2930
fun hentFerdigeBehandlinger(): List<Behandlingssammendrag>

domain/src/main/kotlin/no/nav/su/se/bakover/domain/sak/SakService.kt

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ interface SakService {
7575
fun oppdaterFødselsnummer(command: OppdaterFødselsnummerPåSakCommand): Either<KunneIkkeOppdatereFødselsnummer, Sak>
7676

7777
fun hentSakIdSaksnummerOgFnrForAlleSaker(): List<SakInfo>
78+
fun hentEpsSaksIderForBrukersSak(sakId: UUID): List<UUID>
7879
}
7980

8081
data object FantIkkeSak

service/src/main/kotlin/no/nav/su/se/bakover/service/sak/SakServiceImpl.kt

+6
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,12 @@ class SakServiceImpl(
256256
return sakRepo.hentSakIdSaksnummerOgFnrForAlleSaker()
257257
}
258258

259+
override fun hentEpsSaksIderForBrukersSak(sakId: UUID): List<UUID> {
260+
val sak = sakRepo.hentSak(sakId) ?: throw IllegalArgumentException("Fant ikke sak med id $sakId")
261+
val fnrs = sak.vedtakstidslinje()?.flatMap { it.grunnlagsdata.eps } ?: emptyList()
262+
return fnrs.mapNotNull { sakRepo.hentSakInfo(it)?.sakId }
263+
}
264+
259265
private fun sakTilBegrensetSakInfo(sak: Sak?): BegrensetSakinfo {
260266
if (sak == null) {
261267
return BegrensetSakinfo(false, null)

service/src/test/kotlin/no/nav/su/se/bakover/service/sak/SakServiceImplTest.kt

+28-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import no.nav.su.se.bakover.common.domain.sak.Behandlingssammendrag
1717
import no.nav.su.se.bakover.common.domain.sak.SakInfo
1818
import no.nav.su.se.bakover.common.ident.NavIdentBruker
1919
import no.nav.su.se.bakover.common.journal.JournalpostId
20+
import no.nav.su.se.bakover.common.person.Fnr
2021
import no.nav.su.se.bakover.common.tid.periode.år
2122
import no.nav.su.se.bakover.domain.Sak
2223
import no.nav.su.se.bakover.domain.brev.command.FritekstDokumentCommand
@@ -29,7 +30,10 @@ import no.nav.su.se.bakover.test.argThat
2930
import no.nav.su.se.bakover.test.dokumentUtenMetadataInformasjonAnnet
3031
import no.nav.su.se.bakover.test.fixedClock
3132
import no.nav.su.se.bakover.test.fixedTidspunkt
33+
import no.nav.su.se.bakover.test.fullstendigMedEPSUnder67UførFlyktning
34+
import no.nav.su.se.bakover.test.generer
3235
import no.nav.su.se.bakover.test.getOrFail
36+
import no.nav.su.se.bakover.test.iverksattSøknadsbehandling
3337
import no.nav.su.se.bakover.test.nySøknadsbehandlingMedStønadsperiode
3438
import no.nav.su.se.bakover.test.opprettetRevurdering
3539
import no.nav.su.se.bakover.test.revurderingTilAttestering
@@ -40,6 +44,7 @@ import no.nav.su.se.bakover.test.søknad.nySakMedjournalførtSøknadOgOppgave
4044
import no.nav.su.se.bakover.test.søknadsbehandlingTilAttesteringInnvilget
4145
import no.nav.su.se.bakover.test.søknadsbehandlingUnderkjentInnvilget
4246
import no.nav.su.se.bakover.test.tikkendeFixedClock
47+
import no.nav.su.se.bakover.test.vilkår.formuevilkårMedEps0Innvilget
4348
import org.junit.jupiter.api.Test
4449
import org.junit.jupiter.api.assertThrows
4550
import org.mockito.kotlin.any
@@ -417,7 +422,7 @@ internal class SakServiceImplTest {
417422
SakServiceImpl(sakRepo, fixedClock, mock(), mock(), queryJournalpostClient, mock())
418423
.hentAlleJournalposter(sak.id).shouldBeRight()
419424

420-
verify(sakRepo).hentSakInfo(argThat { it shouldBe sak.id })
425+
verify(sakRepo).hentSakInfo(argThat<UUID> { it shouldBe sak.id })
421426
verify(queryJournalpostClient).hentJournalposterFor(argThat { it shouldBe sak.saksnummer }, eq(50))
422427
}
423428

@@ -432,6 +437,27 @@ internal class SakServiceImplTest {
432437
SakServiceImpl(sakRepo, fixedClock, mock(), mock(), mock(), mock())
433438
.hentAlleJournalposter(sak.id)
434439
}
435-
verify(sakRepo).hentSakInfo(argThat { it shouldBe sak.id })
440+
verify(sakRepo).hentSakInfo(argThat<UUID> { it shouldBe sak.id })
441+
}
442+
443+
@Test
444+
fun `henter saksIder for eps`() {
445+
val (epsSak) = nySakMedjournalførtSøknadOgOppgave(sakId = UUID.randomUUID(), fnr = Fnr.generer())
446+
val brukersSak = iverksattSøknadsbehandling(
447+
customVilkår = listOf(formuevilkårMedEps0Innvilget(epsFnr = epsSak.fnr)),
448+
customGrunnlag = listOf(fullstendigMedEPSUnder67UførFlyktning(fnr = epsSak.fnr)),
449+
).first
450+
val sakRepo: SakRepo = mock {
451+
on { hentSak(any<UUID>()) } doReturn brukersSak
452+
on { hentSakInfo(any<Fnr>()) } doReturn epsSak.info()
453+
}
454+
SakServiceImpl(
455+
sakRepo,
456+
fixedClock,
457+
mock(),
458+
mock(),
459+
mock(),
460+
mock(),
461+
).hentEpsSaksIderForBrukersSak(brukersSak.id) shouldBe listOf(epsSak.id)
436462
}
437463
}

test-common/src/main/kotlin/BosituasjonTestData.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,13 @@ fun fullstendigMedEPSUnder67UførFlyktning(
4141
id: UUID = UUID.randomUUID(),
4242
opprettet: Tidspunkt = fixedTidspunkt,
4343
periode: Periode = stønadsperiode2021.periode,
44+
fnr: Fnr = Fnr.generer(),
4445
): Bosituasjon.Fullstendig.EktefellePartnerSamboer.Under67.UførFlyktning =
4546
Bosituasjon.Fullstendig.EktefellePartnerSamboer.Under67.UførFlyktning(
4647
id = id,
4748
opprettet = opprettet,
4849
periode = periode,
49-
fnr = Fnr.generer(),
50+
fnr = fnr,
5051
)
5152

5253
fun fullstendigMedEPSUnder67IkkeUførFlyktning(

test-common/src/main/kotlin/vilkår/FormueVilkårTestData.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ package no.nav.su.se.bakover.test.vilkår
22

33
import arrow.core.NonEmptyList
44
import arrow.core.nonEmptyListOf
5+
import no.nav.su.se.bakover.common.person.Fnr
56
import no.nav.su.se.bakover.common.tid.Tidspunkt
67
import no.nav.su.se.bakover.common.tid.periode.Periode
78
import no.nav.su.se.bakover.common.tid.periode.år
89
import no.nav.su.se.bakover.test.bosituasjongrunnlagEnslig
910
import no.nav.su.se.bakover.test.create
1011
import no.nav.su.se.bakover.test.createFromGrunnlag
1112
import no.nav.su.se.bakover.test.empty
12-
import no.nav.su.se.bakover.test.epsFnr
1313
import no.nav.su.se.bakover.test.fixedTidspunkt
1414
import no.nav.su.se.bakover.test.formuegrenserFactoryTestPåDato
1515
import no.nav.su.se.bakover.test.grunnlag.formueGrunnlagMedEps0Innvilget
@@ -66,6 +66,7 @@ fun formuevilkårUtenEps0Innvilget(
6666
fun formuevilkårMedEps0Innvilget(
6767
opprettet: Tidspunkt = fixedTidspunkt,
6868
periode: Periode = år(2021),
69+
epsFnr: Fnr = no.nav.su.se.bakover.test.epsFnr,
6970
bosituasjon: NonEmptyList<Bosituasjon.Fullstendig.EktefellePartnerSamboer> = nonEmptyListOf(
7071
Bosituasjon.Fullstendig.EktefellePartnerSamboer.Under67.UførFlyktning(
7172
id = UUID.randomUUID(),

vilkår/institusjonsopphold/application/src/test/kotlin/no/nav/su/se/bakover/institusjonsopphold/application/service/OpprettOppgaverForInstitusjonsoppholdshendelserTest.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class OpprettOppgaverForInstitusjonsoppholdshendelserTest {
8787
)
8888
verify(oppgaveHendelseRepo).hentForSak(argThat { it shouldBe sak.id }, anyOrNull())
8989
verify(institusjonsoppholdHendelseRepo).hentForSak(argThat { it shouldBe sak.id })
90-
verify(sakRepo).hentSakInfo(argThat { it shouldBe sak.id })
90+
verify(sakRepo).hentSakInfo(argThat<UUID> { it shouldBe sak.id })
9191
testMocks.verifyNoMoreInteractions()
9292
}
9393

@@ -136,7 +136,7 @@ class OpprettOppgaverForInstitusjonsoppholdshendelserTest {
136136
)
137137
verify(oppgaveHendelseRepo).hentForSak(argThat { it shouldBe sak.id }, anyOrNull())
138138
verify(institusjonsoppholdHendelseRepo).hentForSak(argThat { it shouldBe sak.id })
139-
verify(sakRepo).hentSakInfo(argThat { it shouldBe sak.id })
139+
verify(sakRepo).hentSakInfo(argThat<UUID> { it shouldBe sak.id })
140140

141141
verify(oppgaveService).opprettOppgaveMedSystembruker(
142142
argThat {

vilkår/vurderinger/domain/src/main/kotlin/vilkår/vurderinger/domain/Grunnlagsdata.kt

+3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ data class Grunnlagsdata private constructor(
3434
val fradragsgrunnlag: List<Fradragsgrunnlag>,
3535
val bosituasjon: List<Bosituasjon>,
3636
) {
37+
/**
38+
* Distincte fnr for eps i bosituasjonen.
39+
*/
3740
val eps: List<Fnr> = bosituasjon.mapNotNull { it.eps }.distinct().sortedBy { it.toString() }
3841

3942
/**

web/src/main/kotlin/no/nav/su/se/bakover/web/routes/sak/SakRoutes.kt

+9
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,15 @@ internal fun Route.sakRoutes(
328328
}
329329
}
330330
}
331+
332+
get("$SAK_PATH/{sakId}/epsSak") {
333+
authorize(Brukerrolle.Saksbehandler, Brukerrolle.Attestant) {
334+
call.withSakId {
335+
val sakIder = sakService.hentEpsSaksIderForBrukersSak(it)
336+
call.svar(Resultat.json(OK, serialize(sakIder)))
337+
}
338+
}
339+
}
331340
}
332341

333342
fun KunneIkkeOppretteDokument.tilResultat(): Resultat = when (this) {

web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt

+4
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,10 @@ open class AccessCheckProxy(
418418
}
419419

420420
override fun hentSakIdSaksnummerOgFnrForAlleSaker() = kastKanKunKallesFraAnnenService()
421+
override fun hentEpsSaksIderForBrukersSak(sakId: UUID): List<UUID> {
422+
assertHarTilgangTilSak(sakId)
423+
return services.sak.hentEpsSaksIderForBrukersSak(sakId)
424+
}
421425

422426
override fun opprettSak(sak: NySak) {
423427
assertHarTilgangTilPerson(sak.fnr)

0 commit comments

Comments
 (0)