Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
664ab5f
Legger til støtte for vurdering av avslag 11-27, inkludert API, datam…
thao1 Jun 15, 2026
5138500
Oppdaterer VurderAvslag11_27Steg med riktig avklaringsbehov og reposi…
thao1 Jun 15, 2026
3f18579
Refaktorerer Avslag1127‑API/DTO‑er for tydeligere domenemodell.
thao1 Jun 16, 2026
1649501
Merge branch 'main' into avslag11_27
thao1 Jun 16, 2026
182bb12
Oppdatere endringer etter merge fra main
thao1 Jun 16, 2026
6676726
Legger til vurdert_tidspunkt i avslag 11-27 datamodeller og oppdatere…
thao1 Jun 17, 2026
a366561
Fikset henting av vurderinger.
thao1 Jun 17, 2026
e1973ee
Legger til vurderingerMeta i Avslag 11-27 DTO-er og oppdaterer lagrin…
thao1 Jun 19, 2026
06ae311
Merge branch 'main' into avslag11_27
thao1 Jun 19, 2026
b905811
Oppdaterer til å hente ut vedtatteVurderinger kun fra forrigeBehandli…
thao1 Jun 19, 2026
459a827
- Fiks etter QA. Ta i bruk orEmpty() og la til docstring.
thao1 Jun 19, 2026
10e4abb
Merge branch 'main' into avslag11_27
thao1 Jun 22, 2026
5735211
Implementerer vurdering av avslag 11-27 og oppdater relaterte DTO-er.
thao1 Jun 22, 2026
ca7d92b
Merge branch 'main' into avslag11_27
thao1 Jun 22, 2026
4596e29
Renamer V1.312 til V1.313 for avslag 11-27 grunnlag
thao1 Jun 22, 2026
8c2027a
Merge branch 'main' into avslag11_27
thao1 Jun 23, 2026
ceffd51
- Flytter og endret funksjonalitet for tilbakestilling av grunnlag i …
thao1 Jun 23, 2026
860252b
Oppdaterer Avslag11_27VisningUtleder for å vise steget når avklarings…
thao1 Jun 23, 2026
0604577
Rename Avslag11_27Api til Avslag11_27GrunnlagApi og oppdatere krav ti…
thao1 Jun 24, 2026
9ebf944
Merge branch 'main' into avslag11_27
thao1 Jun 25, 2026
0193104
Merge branch 'main' into avslag11_27
thao1 Jun 26, 2026
850c2f2
Merge branch 'main' into avslag11_27
thao1 Jun 27, 2026
9385e5a
- Endret Avslagsårsak til ANNEN_FULL_YTELSE_AVSLAG.
thao1 Jun 28, 2026
7abb587
Fikser tester.
thao1 Jun 28, 2026
872f90c
- Fjernet ubrukt klasse Avslag11_27KravVurdering og utkommentert kode…
thao1 Jun 28, 2026
ef66dfe
- Fjernet ubrukt import
thao1 Jun 28, 2026
4d938dd
Merge branch 'main' into avslag11_27
thao1 Jun 29, 2026
77fe6eb
Lagt til feature toggle for AVSLAG11_27
thao1 Jun 29, 2026
634c6a0
Flytter SamordningAnnenFullYtelseVilkårTest til riktig mappe som i Sa…
thao1 Jun 29, 2026
ea9698a
Merge branch 'main' into avslag11_27
thao1 Jun 29, 2026
e783ed5
Merge branch 'main' into avslag11_27
thao1 Jun 30, 2026
dfe9ae2
Merge branch 'main' into avslag11_27
thao1 Jul 1, 2026
12c2488
Fiks etter QA.
thao1 Jul 1, 2026
d06bf3f
Oppdater lagSjekker til å sjekke 'VURDER_AVSLAG_11_27' når feature to…
thao1 Jul 1, 2026
c1242a3
Legger tilbake kommentar for student som var i lagSjekker.
thao1 Jul 1, 2026
6f573cb
Fjernet test som ikke lenger er relevant etter kodeendring.
thao1 Jul 1, 2026
5b556d9
Legger til brukersYtelseAlternativer i Avslag11_27GrunnlagDto som bru…
thao1 Jul 1, 2026
35fc257
Merge branch 'main' into avslag11_27
thao1 Jul 1, 2026
136373f
Fiks etter QA.
thao1 Jul 1, 2026
6c5d4a7
Sletter migreringskript da den allerede er merget til main.
thao1 Jul 2, 2026
adf47ed
Merge branch 'main' into avslag11_27
thao1 Jul 2, 2026
70ba200
Småfiks
thao1 Jul 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package no.nav.aap.behandlingsflyt.behandling.grunnlag.avslag_11_27

import com.papsign.ktor.openapigen.route.path.normal.NormalOpenAPIRoute
import com.papsign.ktor.openapigen.route.response.respond
import com.papsign.ktor.openapigen.route.route
import no.nav.aap.behandlingsflyt.behandling.avslag11_27.Avslag11_27Repository
import no.nav.aap.behandlingsflyt.behandling.avslag11_27.Avslag11_27Vurdering
import no.nav.aap.behandlingsflyt.faktagrunnlag.saksbehandler.krav.KravRepository
import no.nav.aap.behandlingsflyt.faktagrunnlag.saksbehandler.krav.NyttKrav
import no.nav.aap.behandlingsflyt.kontrakt.behandling.BehandlingReferanse
import no.nav.aap.behandlingsflyt.sakogbehandling.behandling.BehandlingRepository
import no.nav.aap.behandlingsflyt.tilgang.kanSaksbehandle
import no.nav.aap.behandlingsflyt.tilgang.relevanteIdenterForBehandlingResolver
import no.nav.aap.komponenter.dbconnect.transaction
import no.nav.aap.komponenter.gateway.GatewayProvider
import no.nav.aap.komponenter.repository.RepositoryRegistry
import no.nav.aap.tilgang.AuthorizationParamPathConfig
import no.nav.aap.tilgang.BehandlingPathParam
import no.nav.aap.tilgang.Operasjon
import no.nav.aap.tilgang.authorizedGet
import javax.sql.DataSource

fun NormalOpenAPIRoute.avslag11_27GrunnlagApi(
dataSource: DataSource,
repositoryRegistry: RepositoryRegistry,
gatewayProvider: GatewayProvider,

Check failure

Code scanning / detekt

Function parameter is unused and should be removed. Error

Function parameter gatewayProvider is unused.
) {
route("/api/behandling/{referanse}/grunnlag/avslag-11-27").authorizedGet<BehandlingReferanse, Avslag11_27KravDto.Avslag11_27GrunnlagDto>(
AuthorizationParamPathConfig(
relevanteIdenterResolver = relevanteIdenterForBehandlingResolver(repositoryRegistry, dataSource),
operasjon = Operasjon.SE,
behandlingPathParam = BehandlingPathParam("referanse")
)
) { req ->
val avslag11_27grunnlagDto = dataSource.transaction(readOnly = true) { connection ->
val repositoryProvider = repositoryRegistry.provider(connection)
val behandlingRepository = repositoryProvider.provide<BehandlingRepository>()
val avslag_11_27Repository = repositoryProvider.provide<Avslag11_27Repository>()
val kravRepository = repositoryProvider.provide<KravRepository>()

val behandling = behandlingRepository.hent(BehandlingReferanse(req.referanse))
val nyttKravListe =
kravRepository.hentHvisEksisterer(behandling.id)?.vurderinger?.filterIsInstance<NyttKrav>()
?: emptyList()
val grunnlag = avslag_11_27Repository.hentHvisEksisterer(behandling.id)

val nyVurderinger =
grunnlag?.vurderinger?.filter { it.vurdertIBehandling === behandling.id }
?: emptyList()
Comment thread
thao1 marked this conversation as resolved.
Outdated

val vedtatteVurderinger =
grunnlag?.vurderinger?.filter { it.vurdertIBehandling === behandling.forrigeBehandlingId }
?: emptyList()
Comment thread
thao1 marked this conversation as resolved.
Outdated

val nyttKravListeDto = Avslag11_27KravDto.avslag11_27TilDto(nyttKravListe);

Avslag11_27KravDto.Avslag11_27GrunnlagDto(
harTilgangTilÅSaksbehandle = kanSaksbehandle(),
krav = nyttKravListeDto,
vurderinger = mapVurderingerTilDto(nyVurderinger),
vedtatteVurdering = mapVurderingerTilDto(vedtatteVurderinger)
)
}

respond(avslag11_27grunnlagDto)
}
}

private fun mapVurderingerTilDto(vurderinger: List<Avslag11_27Vurdering>): List<Avslag11_27KravDto.Avslag11_27VurderingDto> {
return vurderinger.map { vurdering ->
Avslag11_27KravDto.Avslag11_27VurderingDto(
journalpostId = vurdering.journalpostId.identifikator,
begrunnelse = vurdering.begrunnelse,
harAnnenFullYtelse = vurdering.harAnnenFullYtelse,
brukersYtelse = vurdering.brukersYtelse,
harSykepengegrunnlagOver2G = vurdering.harSykepengegrunnlagOver2G,
skalAvslås1127 = vurdering.skalAvslås1127
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package no.nav.aap.behandlingsflyt.behandling.grunnlag.avslag_11_27

import no.nav.aap.behandlingsflyt.behandling.samordning.Ytelse
import no.nav.aap.behandlingsflyt.faktagrunnlag.saksbehandler.avslag11_27.Avslag11_27KravVurdering
import no.nav.aap.behandlingsflyt.faktagrunnlag.saksbehandler.krav.KravType
import no.nav.aap.behandlingsflyt.faktagrunnlag.saksbehandler.krav.NyttKrav
import java.time.LocalDate

data class Avslag11_27KravDto(
val søknadsdokument: String,
val type: String,
val søknadsdato: LocalDate?,
val muligRettighetFra: LocalDate?
) {
companion object {
fun avslag11_27TilDto(kravListe: List<NyttKrav>): List<Avslag11_27KravDto> {
return kravListe.map { krav ->
Avslag11_27KravDto(
søknadsdokument = krav.journalpostId.identifikator,
type = KravType.NYTT_KRAV_AAP.name,
søknadsdato = krav.søknadsdato.dato,
muligRettighetFra = krav.muligRettFra?.dato,
)
}
}
}

data class Avslag11_27GrunnlagDto(
val harTilgangTilÅSaksbehandle: Boolean,
val krav: List<Avslag11_27KravDto>,
val vurderinger: List<Avslag11_27VurderingDto>?,
val vedtatteVurdering: List<Avslag11_27VurderingDto>?,
)

data class Avslag11_27VurderingDto(
val journalpostId: String,
val begrunnelse: String,
val harAnnenFullYtelse: Boolean,
val brukersYtelse: Ytelse? = null,
val harSykepengegrunnlagOver2G: Boolean? = null, // Kun for sykepenger
val skalAvslås1127: Boolean
)

enum class Avslag11_27KravVurderingDto {
AVSLÅTT,
GODKJENT
}

fun Avslag11_27KravVurdering.toDto() = when (this) {
Avslag11_27KravVurdering.AVSLÅTT -> Avslag11_27KravVurderingDto.AVSLÅTT
Avslag11_27KravVurdering.GODKJENT -> Avslag11_27KravVurderingDto.GODKJENT
}
}
2 changes: 2 additions & 0 deletions app/src/main/kotlin/no/nav/aap/behandlingsflyt/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import no.nav.aap.behandlingsflyt.behandling.brev.sykdomsvurderingForBrevApi
import no.nav.aap.behandlingsflyt.behandling.etableringegenvirksomhet.etableringEgenVirksomhetApi
import no.nav.aap.behandlingsflyt.behandling.foreslåvedtak.foreslaaVedtakApi
import no.nav.aap.behandlingsflyt.behandling.foreslåvedtak.foreslaaVedtakVedtakslengdeApi
import no.nav.aap.behandlingsflyt.behandling.grunnlag.avslag_11_27.avslag11_27GrunnlagApi
import no.nav.aap.behandlingsflyt.behandling.grunnlag.samordning.samordningGrunnlag
import no.nav.aap.behandlingsflyt.behandling.inntektsbortfall.inntektsbortfallGrunnlagApi
import no.nav.aap.behandlingsflyt.behandling.institusjonsopphold.institusjonApi
Expand Down Expand Up @@ -284,6 +285,7 @@ internal fun Application.server(
beregningVurderingApi(fellesDataSource, repositoryRegistry, gatewayProvider)
beregningsGrunnlagApi(fellesDataSource, repositoryRegistry)
aldersGrunnlagApi(fellesDataSource, repositoryRegistry)
avslag11_27GrunnlagApi(fellesDataSource, repositoryRegistry, gatewayProvider)
barnetilleggApi(fellesDataSource, repositoryRegistry, gatewayProvider)
motorApi(fellesDataSource)
behandlingsflytPipApi(fellesDataSource, repositoryRegistry)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package no.nav.aap.behandlingsflyt.behandling.avklaringsbehov.løser

import no.nav.aap.behandlingsflyt.behandling.avklaringsbehov.AvklaringsbehovKontekst
import no.nav.aap.behandlingsflyt.behandling.avklaringsbehov.løsning.VurderAvslag11_27Løsning
import no.nav.aap.behandlingsflyt.behandling.avslag11_27.Avslag11_27Repository
import no.nav.aap.behandlingsflyt.behandling.avslag11_27.Avslag11_27Vurdering
import no.nav.aap.behandlingsflyt.faktagrunnlag.saksbehandler.avslag11_27.flate.Avslag11_27VurderingDto
import no.nav.aap.behandlingsflyt.kontrakt.avklaringsbehov.Definisjon
import no.nav.aap.behandlingsflyt.sakogbehandling.behandling.BehandlingId
import no.nav.aap.behandlingsflyt.sakogbehandling.behandling.BehandlingRepository
import no.nav.aap.komponenter.verdityper.Bruker
import no.nav.aap.lookup.repository.RepositoryProvider
import no.nav.aap.verdityper.dokument.JournalpostId

class VurderAvslag11_27Løser (
private val behandlingRepository: BehandlingRepository,
private val avslag1127repository: Avslag11_27Repository
): AvklaringsbehovsLøser<VurderAvslag11_27Løsning> {

constructor(repositoryProvider: RepositoryProvider) : this(
behandlingRepository = repositoryProvider.provide(),
avslag1127repository = repositoryProvider.provide()
)

override fun løs(
kontekst: AvklaringsbehovKontekst,
løsning: VurderAvslag11_27Løsning
): LøsningsResultat {
val vurdertAv = kontekst.bruker.ident

avslag1127repository.lagre(
kontekst.behandlingId(),
tilAvslag11_27Vurderinger(løsning.avslag11_27Vurdering.vurderinger, vurdertAv,kontekst.behandlingId())
)

return LøsningsResultat(løsning.avslag11_27Vurdering.vurderinger.joinToString(" ") {it.begrunnelse})
}

override fun forBehov(): Definisjon {
return Definisjon.VURDER_AVSLAG_11_27
}

private fun tilAvslag11_27Vurderinger(
nyeVurderinger: List<Avslag11_27VurderingDto>,
vurdertAv: String,
behandlingId: BehandlingId
): List<Avslag11_27Vurdering> = nyeVurderinger.map { vurdering ->
Avslag11_27Vurdering(
journalpostId = JournalpostId(vurdering.journalpostId),
skalAvslås1127 = vurdering.skalAvslås1127,
brukersYtelse = vurdering.brukersYtelse,
harSykepengegrunnlagOver2G = vurdering.harSykepengegrunnlagOver2G,
harAnnenFullYtelse = vurdering.harAnnenFullYtelse,
begrunnelse = vurdering.begrunnelse,
vurdertAv = Bruker(vurdertAv),
vurdertIBehandling = behandlingId
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package no.nav.aap.behandlingsflyt.behandling.avklaringsbehov.løsning

import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonTypeName
import no.nav.aap.behandlingsflyt.behandling.avklaringsbehov.AvklaringsbehovKontekst
import no.nav.aap.behandlingsflyt.behandling.avklaringsbehov.løser.LøsningsResultat
import no.nav.aap.behandlingsflyt.behandling.avklaringsbehov.løser.VurderAvslag11_27Løser
import no.nav.aap.behandlingsflyt.faktagrunnlag.saksbehandler.avslag11_27.flate.Avslag11_27VurderingerDto
import no.nav.aap.behandlingsflyt.kontrakt.avklaringsbehov.AvklaringsbehovKode
import no.nav.aap.behandlingsflyt.kontrakt.avklaringsbehov.VURDER_AVSLAG_11_27_KODE
import no.nav.aap.komponenter.gateway.GatewayProvider
import no.nav.aap.lookup.repository.RepositoryProvider

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeName(value = VURDER_AVSLAG_11_27_KODE)
class VurderAvslag11_27Løsning(
@param:JsonProperty(
"avslag11_27Vurdering",
required = true
) val avslag11_27Vurdering: Avslag11_27VurderingerDto,
@param:JsonProperty(
"behovstype",
required = true,
defaultValue = VURDER_AVSLAG_11_27_KODE
) val behovstype: AvklaringsbehovKode = AvklaringsbehovKode.`5042`
) :
EnkeltAvklaringsbehovLøsning {
override fun løs(
repositoryProvider: RepositoryProvider,
kontekst: AvklaringsbehovKontekst,
gatewayProvider: GatewayProvider
): LøsningsResultat {
return VurderAvslag11_27Løser(repositoryProvider).løs(kontekst, this)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package no.nav.aap.behandlingsflyt.behandling.avslag11_27

import no.nav.aap.verdityper.dokument.JournalpostId

class Avslag11_27Grunnlag (
val vurderinger: List<Avslag11_27Vurdering>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package no.nav.aap.behandlingsflyt.behandling.avslag11_27

import no.nav.aap.behandlingsflyt.sakogbehandling.behandling.BehandlingId
import no.nav.aap.lookup.repository.Repository

interface Avslag11_27Repository : Repository {
fun lagre(behandlingId: BehandlingId, vurderinger: List<Avslag11_27Vurdering>)
fun hentHvisEksisterer(behandlingId: BehandlingId): Avslag11_27Grunnlag?
override fun kopier(fraBehandling: BehandlingId, tilBehandling: BehandlingId)
override fun slett(behandlingId: BehandlingId)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package no.nav.aap.behandlingsflyt.behandling.avslag11_27

import no.nav.aap.behandlingsflyt.behandling.samordning.Ytelse
import no.nav.aap.behandlingsflyt.sakogbehandling.behandling.BehandlingId
import no.nav.aap.komponenter.verdityper.Bruker
import no.nav.aap.verdityper.dokument.JournalpostId

class Avslag11_27Vurdering (
val journalpostId: JournalpostId,
Comment thread
thao1 marked this conversation as resolved.
Outdated
val begrunnelse: String,
val harAnnenFullYtelse: Boolean,
val brukersYtelse: Ytelse? = null,
val harSykepengegrunnlagOver2G: Boolean? = null, // Kun for sykepenger
Comment thread
thao1 marked this conversation as resolved.
Outdated
val skalAvslås1127: Boolean,
val vurdertIBehandling: BehandlingId,
val vurdertAv: Bruker,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package no.nav.aap.behandlingsflyt.faktagrunnlag.saksbehandler.avslag11_27

enum class Avslag11_27KravVurdering {
AVSLÅTT,
GODKJENT;

fun prioritertVerdi(other: Avslag11_27KravVurdering): Avslag11_27KravVurdering {
if (this == GODKJENT || other == GODKJENT) {
return GODKJENT
}
return AVSLÅTT;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package no.nav.aap.behandlingsflyt.faktagrunnlag.saksbehandler.avslag11_27.flate

import no.nav.aap.behandlingsflyt.behandling.samordning.Ytelse
import no.nav.aap.verdityper.dokument.JournalpostId

data class Avslag11_27VurderingDto(
val journalpostId: String,
val begrunnelse: String,
val harAnnenFullYtelse: Boolean,
val brukersYtelse: Ytelse? = null,
val harSykepengegrunnlagOver2G: Boolean? = null, // Kun for sykepenger
Comment thread
thao1 marked this conversation as resolved.
Outdated
val skalAvslås1127: Boolean,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package no.nav.aap.behandlingsflyt.faktagrunnlag.saksbehandler.avslag11_27.flate

data class Avslag11_27VurderingerDto(
val vurderinger: List<Avslag11_27VurderingDto>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package no.nav.aap.behandlingsflyt.flyt.flate.visning

import no.nav.aap.behandlingsflyt.kontrakt.steg.StegGruppe
import no.nav.aap.behandlingsflyt.sakogbehandling.behandling.BehandlingId
import no.nav.aap.behandlingsflyt.sakogbehandling.behandling.BehandlingRepository
import no.nav.aap.behandlingsflyt.sakogbehandling.flyt.Vurderingsbehov
import no.nav.aap.lookup.repository.RepositoryProvider

// Brukes via reflection/dynamisk oppslag av rammeverk, ikke fjern selv om den ser ubrukt ut
@Suppress("unused")
class Avslag11_27VisningUtleder (
private val behandlingRepository: BehandlingRepository,
) : StegGruppeVisningUtleder {
constructor(repositoryProvider: RepositoryProvider): this(
behandlingRepository = repositoryProvider.provide()
)

override fun skalVises(behandlingId: BehandlingId): Boolean {
Comment thread
thao1 marked this conversation as resolved.
val behandling = behandlingRepository.hent(behandlingId)
return behandling.vurderingsbehov().any {
it.type == Vurderingsbehov.VURDER_AVSLAG_11_27
}
}

override fun gruppe(): StegGruppe {
return StegGruppe.AVSLAG_11_27
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ import no.nav.aap.behandlingsflyt.forretningsflyt.steg.UnderveisSteg
import no.nav.aap.behandlingsflyt.forretningsflyt.steg.VedtakslengdeSteg
import no.nav.aap.behandlingsflyt.forretningsflyt.steg.VisGrunnlagSteg
import no.nav.aap.behandlingsflyt.forretningsflyt.steg.VurderAlderSteg
import no.nav.aap.behandlingsflyt.forretningsflyt.steg.VurderAvslag11_27Steg
import no.nav.aap.behandlingsflyt.forretningsflyt.steg.VurderBistandsbehovSteg
import no.nav.aap.behandlingsflyt.forretningsflyt.steg.VurderForutgåendeMedlemskapSteg
import no.nav.aap.behandlingsflyt.forretningsflyt.steg.VurderLovvalgSteg
Expand Down Expand Up @@ -127,6 +128,7 @@ object Revurdering : BehandlingType {
)
.medSteg(steg = FastsettMeldeperiodeSteg, vurderingsbehovRelevanteForSteg = Vurderingsbehov.alle())
.medSteg(steg = VurderAlderSteg, vurderingsbehovRelevanteForSteg = Vurderingsbehov.alle())
.medSteg(steg = VurderAvslag11_27Steg, vurderingsbehovRelevanteForSteg = listOf(Vurderingsbehov.VURDER_AVSLAG_11_27))
.medSteg(
steg = VurderStudentSteg,
vurderingsbehovRelevanteForSteg = listOf(
Expand Down
Loading
Loading