Skip to content

Commit 131d599

Browse files
authoredFeb 10, 2025··
Merge pull request #1953 from navikt/støtt-klage-på-tilbakekrevingsvedtak
Støtt klage på tilbakekrevingsvedtak
2 parents 6628071 + 6c8d7c4 commit 131d599

File tree

13 files changed

+246
-118
lines changed

13 files changed

+246
-118
lines changed
 

‎.idea/inspectionProfiles/Project_Default.xml

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎client/src/test/kotlin/no/nav/su/se/bakover/client/person/PersonClientTest.kt

+1-6
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import no.nav.su.se.bakover.client.krr.KontaktOgReservasjonsregister
1313
import no.nav.su.se.bakover.client.krr.Kontaktinformasjon
1414
import no.nav.su.se.bakover.client.skjerming.Skjerming
1515
import no.nav.su.se.bakover.common.auth.AzureAd
16-
import no.nav.su.se.bakover.common.domain.extensions.toNonEmptyList
1716
import no.nav.su.se.bakover.common.domain.tid.februar
1817
import no.nav.su.se.bakover.common.infrastructure.config.ApplicationConfig
1918
import no.nav.su.se.bakover.common.infrastructure.token.JwtToken
@@ -52,7 +51,7 @@ internal class PersonClientTest {
5251
@Test
5352
fun `andre kall med nytt token hentes ikke fra cache`() {
5453
val mocks = PersonClientConfigTestMocks(
55-
BrukertokenGenerator(listOf("1", "2")),
54+
BrukertokenGenerator(nonEmptyListOf("1", "2").map { JwtToken.BrukerToken(it) }),
5655
)
5756
val first =
5857
mocks.personClient.person(fnr = mocks.fnr).also { it shouldBe mocks.person().right() }.getOrFail()
@@ -170,10 +169,6 @@ internal class PersonClientTest {
170169
private val brukerTokens: NonEmptyList<JwtToken.BrukerToken> = nonEmptyListOf(JwtToken.BrukerToken("bruker-token")),
171170
) : List<JwtToken.BrukerToken> by brukerTokens {
172171

173-
constructor(brukerTokens: List<String>) : this(
174-
brukerTokens.map { JwtToken.BrukerToken(it) }.toNonEmptyList(),
175-
)
176-
177172
var currentIndex = 0
178173
fun next(): JwtToken.BrukerToken = brukerTokens[currentIndex++ % brukerTokens.size]
179174
}

‎common/domain/src/main/kotlin/no/nav/su/se/bakover/common/domain/MånedsperiodiserteSatser.kt

+1-4
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ fun <T> RåSatser<T>.periodisert(tidligsteTilgjengeligeMåned: Måned): Månedss
5353
emptyList()
5454
}
5555
}
56-
}.let { Månedssatser(it) }
56+
}.let { Månedssatser(it.toNonEmptyList<Månedssats<T>>()) }
5757
}
5858

5959
data class RåSatser<T>(
@@ -84,9 +84,6 @@ data class Månedssatser<T>(
8484
val satser: NonEmptyList<Månedssats<T>>,
8585
) : List<Månedssats<T>> by satser {
8686
constructor(sats: Månedssats<T>) : this(nonEmptyListOf(sats))
87-
constructor(satser: List<Månedssats<T>>) : this(
88-
satser.toNonEmptyList<Månedssats<T>>(),
89-
)
9087

9188
init {
9289
satser.map { it.måned }.let {

‎service/src/main/kotlin/no/nav/su/se/bakover/service/klage/KlageService.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import no.nav.su.se.bakover.domain.klage.OversendtKlage
2424
import no.nav.su.se.bakover.domain.klage.VilkårsvurdertKlage
2525
import no.nav.su.se.bakover.domain.klage.VurdertKlage
2626
import no.nav.su.se.bakover.domain.klage.brev.KunneIkkeLageBrevutkast
27+
import java.util.UUID
2728

2829
interface KlageService {
2930
fun opprett(request: NyKlageRequest): Either<KunneIkkeOppretteKlage, OpprettetKlage>
@@ -53,14 +54,14 @@ interface KlageService {
5354

5455
fun underkjenn(request: UnderkjennKlageRequest): Either<KunneIkkeUnderkjenneKlage, Klage>
5556

56-
fun oversend(klageId: KlageId, attestant: NavIdentBruker.Attestant): Either<KunneIkkeOversendeKlage, OversendtKlage>
57+
fun oversend(sakId: UUID, klageId: KlageId, attestant: NavIdentBruker.Attestant): Either<KunneIkkeOversendeKlage, OversendtKlage>
5758

5859
fun iverksettAvvistKlage(
5960
klageId: KlageId,
6061
attestant: NavIdentBruker.Attestant,
6162
): Either<KunneIkkeIverksetteAvvistKlage, IverksattAvvistKlage>
6263

63-
fun brevutkast(klageId: KlageId, ident: NavIdentBruker): Either<KunneIkkeLageBrevutkast, PdfA>
64+
fun brevutkast(sakId: UUID, klageId: KlageId, ident: NavIdentBruker): Either<KunneIkkeLageBrevutkast, PdfA>
6465

6566
fun avslutt(
6667
klageId: KlageId,

‎service/src/main/kotlin/no/nav/su/se/bakover/service/klage/KlageServiceImpl.kt

+58-10
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import arrow.core.right
88
import behandling.klage.domain.KlageId
99
import dokument.domain.Dokument
1010
import dokument.domain.brev.BrevService
11+
import dokument.domain.hendelser.DokumentHendelseRepo
1112
import dokument.domain.journalføring.ErTilknyttetSak
1213
import dokument.domain.journalføring.KunneIkkeSjekkeTilknytningTilSak
1314
import dokument.domain.journalføring.QueryJournalpostClient
@@ -21,6 +22,7 @@ import no.nav.su.se.bakover.domain.klage.AvsluttetKlage
2122
import no.nav.su.se.bakover.domain.klage.AvvistKlage
2223
import no.nav.su.se.bakover.domain.klage.IverksattAvvistKlage
2324
import no.nav.su.se.bakover.domain.klage.KanBekrefteKlagevurdering
25+
import no.nav.su.se.bakover.domain.klage.KanGenerereBrevutkast
2426
import no.nav.su.se.bakover.domain.klage.KanLeggeTilFritekstTilAvvistBrev
2527
import no.nav.su.se.bakover.domain.klage.Klage
2628
import no.nav.su.se.bakover.domain.klage.KlageClient
@@ -30,6 +32,7 @@ import no.nav.su.se.bakover.domain.klage.KlageTilAttestering
3032
import no.nav.su.se.bakover.domain.klage.KunneIkkeAvslutteKlage
3133
import no.nav.su.se.bakover.domain.klage.KunneIkkeBekrefteKlagesteg
3234
import no.nav.su.se.bakover.domain.klage.KunneIkkeIverksetteAvvistKlage
35+
import no.nav.su.se.bakover.domain.klage.KunneIkkeLageBrevKommandoForKlage
3336
import no.nav.su.se.bakover.domain.klage.KunneIkkeLeggeTilFritekstForAvvist
3437
import no.nav.su.se.bakover.domain.klage.KunneIkkeOppretteKlage
3538
import no.nav.su.se.bakover.domain.klage.KunneIkkeOversendeKlage
@@ -57,6 +60,8 @@ import no.nav.su.se.bakover.oppgave.domain.Oppgavetype
5760
import no.nav.su.se.bakover.vedtak.application.VedtakService
5861
import org.slf4j.LoggerFactory
5962
import java.time.Clock
63+
import java.time.LocalDate
64+
import java.util.UUID
6065

6166
class KlageServiceImpl(
6267
private val sakService: SakService,
@@ -67,6 +72,7 @@ class KlageServiceImpl(
6772
private val sessionFactory: SessionFactory,
6873
private val oppgaveService: OppgaveService,
6974
private val queryJournalpostClient: QueryJournalpostClient,
75+
private val dokumentHendelseRepo: DokumentHendelseRepo,
7076
val clock: Clock,
7177
) : KlageService {
7278

@@ -135,7 +141,8 @@ class KlageServiceImpl(
135141
throw RuntimeException("Fant ikke sak med id ${command.sakId}")
136142
}
137143
command.vedtakId?.let {
138-
val vedtak = sak.hentVedtakForId(command.vedtakId) ?: return KunneIkkeVilkårsvurdereKlage.FantIkkeVedtak.left()
144+
val vedtak =
145+
sak.hentVedtakForId(command.vedtakId) ?: return KunneIkkeVilkårsvurdereKlage.FantIkkeVedtak.left()
139146
if (!vedtak.skalSendeBrev) {
140147
// Dersom vi ikke har sendt ut et vedtaksbrev, kan det ikke beklages.
141148
return KunneIkkeVilkårsvurdereKlage.VedtakSkalIkkeSendeBrev.left()
@@ -248,7 +255,7 @@ class KlageServiceImpl(
248255
} ?: OppdaterOppgaveInfo.TilordnetRessurs.IkkeTilordneRessurs,
249256
),
250257
).mapLeft {
251-
log.error("Feil ved oppdatering av oppgave ${klage.oppgaveId}, for klage ${klage.id}. Feilen var $it")
258+
log.error("Send klagebehandling til attestering: Feil ved oppdatering av oppgave ${klage.oppgaveId}, for klage ${klage.id}. Feilen var $it")
252259
}
253260
}
254261
}
@@ -272,26 +279,38 @@ class KlageServiceImpl(
272279
tilordnetRessurs = OppdaterOppgaveInfo.TilordnetRessurs.NavIdent(klage.saksbehandler.navIdent),
273280
),
274281
).mapLeft {
275-
log.error("Feil ved oppdatering av oppgave ${klage.oppgaveId}, for klage ${klage.id}. Feilen var $it")
282+
log.error("Underkjenn klagebehandling: Feil ved oppdatering av oppgave ${klage.oppgaveId}, for klage ${klage.id}. Feilen var $it")
276283
}
277284
}
278285
}
279286

280287
override fun oversend(
288+
sakId: UUID,
281289
klageId: KlageId,
282290
attestant: NavIdentBruker.Attestant,
283291
): Either<KunneIkkeOversendeKlage, OversendtKlage> {
284-
val klage = (klageRepo.hentKlage(klageId) ?: return KunneIkkeOversendeKlage.FantIkkeKlage.left()).let {
285-
it as? KlageTilAttestering.Vurdert ?: return KunneIkkeOversendeKlage.UgyldigTilstand(it::class)
286-
.left()
287-
}
292+
val sak = sakService.hentSak(sakId)
293+
.getOrElse {
294+
throw java.lang.IllegalStateException("Kunne ikke generere brevutkast for sak. Fant ikke sak med id $sakId og klageId $klageId")
295+
}
296+
297+
val klage = (
298+
sak.hentKlage(klageId)
299+
?: run {
300+
log.error("Kunne ikke generere brevutkast for sak. Fant ikke klage med id $klageId på sak $sakId")
301+
return KunneIkkeOversendeKlage.FantIkkeKlage.left()
302+
}
288303

304+
).let {
305+
(it as? KlageTilAttestering.Vurdert) ?: return KunneIkkeOversendeKlage.UgyldigTilstand(it::class).left()
306+
}
307+
val vedtakId = klage.vilkårsvurderinger.vedtakId
289308
val oversendtKlage =
290309
klage.oversend(Attestering.Iverksatt(attestant = attestant, opprettet = Tidspunkt.now(clock)))
291310
.getOrElse { return it.left() }
292311

293312
val dokument = oversendtKlage.genererOversendelsesbrev(
294-
hentVedtaksbrevDato = { klageRepo.hentVedtaksbrevDatoSomDetKlagesPå(klage.id) },
313+
hentVedtaksbrevDato = { hentVedtaksbrevDatoForKlage(sakId, vedtakId, klageId) },
295314
).getOrElse {
296315
return KunneIkkeOversendeKlage.KunneIkkeLageBrevRequest(it).left()
297316
}.let {
@@ -390,20 +409,49 @@ class KlageServiceImpl(
390409
}
391410

392411
override fun brevutkast(
412+
sakId: UUID,
393413
klageId: KlageId,
394414
ident: NavIdentBruker,
395415
): Either<KunneIkkeLageBrevutkast, PdfA> {
416+
val sak = sakService.hentSak(sakId)
417+
.getOrElse { throw IllegalStateException("Kunne ikke generere brevutkast for sak. Fant ikke sak med id $sakId og klageId $klageId") }
418+
val klage = sak.hentKlage(klageId)
419+
?: run {
420+
log.error("Kunne ikke generere brevutkast for sak. Fant ikke klage med id $klageId på sak $sakId")
421+
return KunneIkkeLageBrevutkast.FantIkkeKlage.left()
422+
}
423+
(klage as? KanGenerereBrevutkast) ?: return KunneIkkeLageBrevutkast.FeilVedBrevRequest(
424+
KunneIkkeLageBrevKommandoForKlage.UgyldigTilstand(fra = klage::class),
425+
).left()
426+
val vedtakId = klage.vilkårsvurderinger?.vedtakId ?: return KunneIkkeLageBrevutkast.FeilVedBrevRequest(KunneIkkeLageBrevKommandoForKlage.UgyldigTilstand(klage::class)).left()
427+
val vedtaksbrevdato = hentVedtaksbrevDatoForKlage(sakId, vedtakId, klageId)
428+
?: run {
429+
log.error("Kunne ikke generere brevutkast for sak. Fant ikke vedtaksbrevdato for sak $sakId og vedtakId $vedtakId")
430+
return KunneIkkeLageBrevutkast.FeilVedBrevRequest(KunneIkkeLageBrevKommandoForKlage.FeilVedHentingAvVedtaksbrevDato)
431+
.left()
432+
}
396433
return genererBrevutkastForKlage(
397434
klageId = klageId,
398435
ident = ident,
399-
hentKlage = { klageRepo.hentKlage(klageId) },
400-
hentVedtaksbrevDato = { klageRepo.hentVedtaksbrevDatoSomDetKlagesPå(klageId) },
436+
hentKlage = { klage },
437+
hentVedtaksbrevDato = { vedtaksbrevdato },
401438
genererPdf = {
402439
brevService.lagDokument(command = it).map { it.generertDokument }
403440
},
404441
)
405442
}
406443

444+
private fun hentVedtaksbrevDatoForKlage(
445+
sakId: UUID,
446+
vedtakId: UUID,
447+
klageId: KlageId,
448+
): LocalDate? {
449+
return (
450+
klageRepo.hentVedtaksbrevDatoSomDetKlagesPå(klageId)
451+
?: dokumentHendelseRepo.hentVedtaksbrevdatoForSakOgVedtakId(sakId, vedtakId)
452+
)
453+
}
454+
407455
override fun avslutt(
408456
klageId: KlageId,
409457
saksbehandler: NavIdentBruker.Saksbehandler,

0 commit comments

Comments
 (0)
Please sign in to comment.