Skip to content

Commit 2de6641

Browse files
committed
Start arbeidet på å lage en ny, mer generisk modell
1 parent 5640bc4 commit 2de6641

File tree

26 files changed

+407
-6
lines changed

26 files changed

+407
-6
lines changed

build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ dependencies {
9898

9999
api(project(":kontrakter-intern"))
100100
api(project(":kontrakter-ekstern"))
101+
api(project(":modell"))
101102
api("no.nav.familie:prosessering-core:2.20250219093533_62416e5") {
102103
// La spring boot håndtere flyway versjon selv om den er eldre enn den som er inkludert i prosessering-core
103104
exclude("org.flywaydb")
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
plugins {
2+
kotlin("jvm")
3+
}
4+
5+
group = "no.nav"
6+
7+
repositories {
8+
mavenCentral()
9+
}
10+
11+
dependencies {
12+
api("com.fasterxml.jackson.core:jackson-annotations:2.18.3")
13+
api(project("::kontrakter-felles"))
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package no.nav.tilbakekreving.api.v2
2+
3+
import no.nav.tilbakekreving.kontrakter.bruker.Språkkode
4+
5+
data class BrukerDto(
6+
val ident: String,
7+
val språkkode: Språkkode,
8+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package no.nav.tilbakekreving.api.v2
2+
3+
import no.nav.tilbakekreving.kontrakter.ytelse.Fagsystem
4+
import no.nav.tilbakekreving.kontrakter.ytelse.Ytelsestype
5+
6+
data class EksternFagsakDto(
7+
val eksternId: String,
8+
val ytelsestype: Ytelsestype,
9+
val fagsystem: Fagsystem,
10+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package no.nav.tilbakekreving.api.v2
2+
3+
data class OpprettTilbakekrevingEvent(
4+
val eksternFagsak: EksternFagsakDto,
5+
val opprettelsesvalg: Opprettelsevalg,
6+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package no.nav.tilbakekreving.api.v2
2+
3+
enum class Opprettelsevalg {
4+
UTSETT_BEHANDLING_MED_VARSEL,
5+
UTSETT_BEHANDLING_UTEN_VARSEL,
6+
OPPRETT_BEHANDLING_MED_VARSEL,
7+
}

kontrakter-intern/src/main/kotlin/no/nav/tilbakekreving/api/v1/dto/FagsakDto.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package no.nav.tilbakekreving.api.v1.dto
22

33
import no.nav.tilbakekreving.kontrakter.behandling.Behandlingsstatus
44
import no.nav.tilbakekreving.kontrakter.behandling.Behandlingstype
5-
import no.nav.tilbakekreving.kontrakter.bruker.BrukerDto
5+
import no.nav.tilbakekreving.kontrakter.bruker.FrontendBrukerDto
66
import no.nav.tilbakekreving.kontrakter.bruker.Språkkode
77
import no.nav.tilbakekreving.kontrakter.ytelse.Fagsystem
88
import no.nav.tilbakekreving.kontrakter.ytelse.Ytelsestype
@@ -13,7 +13,7 @@ data class FagsakDto(
1313
val ytelsestype: Ytelsestype,
1414
val fagsystem: Fagsystem,
1515
val språkkode: Språkkode,
16-
val bruker: BrukerDto,
16+
val bruker: FrontendBrukerDto,
1717
val behandlinger: List<BehandlingsoppsummeringDto>,
1818
val institusjon: InstitusjonDto? = null,
1919
)

kontrakter-intern/src/main/kotlin/no/nav/tilbakekreving/kontrakter/bruker/BrukerDto.kt kontrakter-intern/src/main/kotlin/no/nav/tilbakekreving/kontrakter/bruker/FrontendBrukerDto.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ package no.nav.tilbakekreving.kontrakter.bruker
22

33
import java.time.LocalDate
44

5-
data class BrukerDto(
5+
data class FrontendBrukerDto(
66
val personIdent: String,
77
val navn: String,
8-
valdselsdato: LocalDate,
8+
valdselsdato: LocalDate?,
99
val kjønn: Kjønn,
1010
valdsdato: LocalDate? = null,
1111
)

modell/build.gradle.kts

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
plugins {
2+
kotlin("jvm")
3+
}
4+
5+
group = "no.nav"
6+
7+
repositories {
8+
mavenCentral()
9+
}
10+
11+
dependencies {
12+
api(project(":kontrakter-intern"))
13+
api(project(":kontrakter-ekstern-v2"))
14+
15+
testImplementation("org.junit.jupiter:junit-jupiter:5.12.0")
16+
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
17+
testImplementation("io.kotest:kotest-assertions-core:5.9.1")
18+
}
19+
20+
tasks.test {
21+
useJUnitPlatform()
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package no.nav.tilbakekreving
2+
3+
interface FrontendDto<Dto> {
4+
fun tilFrontendDto(): Dto
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package no.nav.tilbakekreving
2+
3+
import no.nav.tilbakekreving.api.v1.dto.FagsakDto
4+
import no.nav.tilbakekreving.api.v2.OpprettTilbakekrevingEvent
5+
import no.nav.tilbakekreving.eksternfagsak.EksternFagsak
6+
import no.nav.tilbakekreving.kontrakter.bruker.Språkkode
7+
import no.nav.tilbakekreving.person.Bruker
8+
import no.nav.tilbakekreving.person.Bruker.Companion.tilNullableFrontendDto
9+
import no.nav.tilbakekreving.tilstand.Start
10+
import no.nav.tilbakekreving.tilstand.Tilstand
11+
import java.time.LocalDateTime
12+
13+
class Tilbakekreving(
14+
private val eksternFagsak: EksternFagsak,
15+
private val opprettet: LocalDateTime,
16+
) : FrontendDto<FagsakDto> {
17+
var tilstand: Tilstand = Start
18+
private var bruker: Bruker? = null
19+
20+
fun byttTilstand(nyTilstand: Tilstand) {
21+
tilstand = nyTilstand
22+
tilstand.entering(this)
23+
}
24+
25+
fun håndter(opprettTilbakekrevingEvent: OpprettTilbakekrevingEvent) {
26+
tilstand.håndter(this, opprettTilbakekrevingEvent)
27+
}
28+
29+
override fun tilFrontendDto(): FagsakDto {
30+
val eksternFagsakDto = eksternFagsak.tilFrontendDto()
31+
return FagsakDto(
32+
eksternFagsakId = eksternFagsakDto.eksternId,
33+
ytelsestype = eksternFagsakDto.ytelsestype,
34+
fagsystem = eksternFagsakDto.fagsystem,
35+
språkkode = bruker?.språkkode ?: Språkkode.NB,
36+
bruker = bruker.tilNullableFrontendDto(),
37+
behandlinger = emptyList(),
38+
)
39+
}
40+
41+
companion object {
42+
fun opprett(opprettTilbakekrevingEvent: OpprettTilbakekrevingEvent): Tilbakekreving {
43+
return Tilbakekreving(
44+
opprettet = LocalDateTime.now(),
45+
eksternFagsak =
46+
EksternFagsak(
47+
eksternId = opprettTilbakekrevingEvent.eksternFagsak.eksternId,
48+
ytelsestype = opprettTilbakekrevingEvent.eksternFagsak.ytelsestype,
49+
fagsystem = opprettTilbakekrevingEvent.eksternFagsak.fagsystem,
50+
),
51+
)
52+
}
53+
}
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package no.nav.tilbakekreving.eksternfagsak
2+
3+
import no.nav.tilbakekreving.FrontendDto
4+
import no.nav.tilbakekreving.api.v2.EksternFagsakDto
5+
import no.nav.tilbakekreving.kontrakter.ytelse.Fagsystem
6+
import no.nav.tilbakekreving.kontrakter.ytelse.Ytelsestype
7+
8+
class EksternFagsak(
9+
private val eksternId: String,
10+
private val ytelsestype: Ytelsestype,
11+
private val fagsystem: Fagsystem,
12+
) : FrontendDto<EksternFagsakDto> {
13+
override fun tilFrontendDto(): EksternFagsakDto {
14+
return EksternFagsakDto(
15+
eksternId = eksternId,
16+
ytelsestype = ytelsestype,
17+
fagsystem = fagsystem,
18+
)
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package no.nav.tilbakekreving.person
2+
3+
import no.nav.tilbakekreving.FrontendDto
4+
import no.nav.tilbakekreving.kontrakter.bruker.FrontendBrukerDto
5+
import no.nav.tilbakekreving.kontrakter.bruker.Kjønn
6+
import no.nav.tilbakekreving.kontrakter.bruker.Språkkode
7+
import java.time.LocalDate
8+
9+
class Bruker(
10+
private val ident: String,
11+
val språkkode: Språkkode,
12+
) : FrontendDto<FrontendBrukerDto> {
13+
private var navn: String? = null
14+
private var fødselsdato: LocalDate? = null
15+
private var kjønn: Kjønn? = null
16+
private var dødsdato: LocalDate? = null
17+
18+
override fun tilFrontendDto(): FrontendBrukerDto {
19+
return FrontendBrukerDto(
20+
personIdent = ident,
21+
navn = navn ?: "Ukjent",
22+
fødselsdato = fødselsdato,
23+
kjønn = kjønn ?: Kjønn.UKJENT,
24+
dødsdato = dødsdato,
25+
)
26+
}
27+
28+
companion object {
29+
fun Bruker?.tilNullableFrontendDto(): FrontendBrukerDto {
30+
return this?.tilFrontendDto() ?: FrontendBrukerDto(
31+
personIdent = "Ukjent",
32+
navn = "Ukjent",
33+
fødselsdato = null,
34+
kjønn = Kjønn.UKJENT,
35+
dødsdato = null,
36+
)
37+
}
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package no.nav.tilbakekreving.tilstand
2+
3+
import no.nav.tilbakekreving.Tilbakekreving
4+
5+
object AvventerKravgrunnlag : Tilstand {
6+
override val navn: String = "AvventerKravgrunnlag"
7+
8+
override fun entering(tilbakekreving: Tilbakekreving) {}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package no.nav.tilbakekreving.tilstand
2+
3+
import no.nav.tilbakekreving.Tilbakekreving
4+
5+
object AvventerUtsattBehandlingMedVarsel : Tilstand {
6+
override val navn: String = "AvventerUtsattBehandlingMedVarsel"
7+
8+
override fun entering(tilbakekreving: Tilbakekreving) {
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package no.nav.tilbakekreving.tilstand
2+
3+
import no.nav.tilbakekreving.Tilbakekreving
4+
5+
object AvventerUtsattBehandlingUtenVarsel : Tilstand {
6+
override val navn: String = "AvventerUtsattBehandlingUtenVarsel"
7+
8+
override fun entering(tilbakekreving: Tilbakekreving) {
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package no.nav.tilbakekreving.tilstand
2+
3+
import no.nav.tilbakekreving.Tilbakekreving
4+
import no.nav.tilbakekreving.api.v2.OpprettTilbakekrevingEvent
5+
import no.nav.tilbakekreving.api.v2.Opprettelsevalg
6+
7+
object Start : Tilstand {
8+
override val navn: String = "Start"
9+
10+
override fun entering(tilbakekreving: Tilbakekreving) {}
11+
12+
override fun håndter(
13+
tilbakekreving: Tilbakekreving,
14+
hendelse: OpprettTilbakekrevingEvent,
15+
) {
16+
when (hendelse.opprettelsesvalg) {
17+
Opprettelsevalg.UTSETT_BEHANDLING_MED_VARSEL -> tilbakekreving.byttTilstand(AvventerUtsattBehandlingMedVarsel)
18+
Opprettelsevalg.UTSETT_BEHANDLING_UTEN_VARSEL -> tilbakekreving.byttTilstand(AvventerUtsattBehandlingUtenVarsel)
19+
Opprettelsevalg.OPPRETT_BEHANDLING_MED_VARSEL -> tilbakekreving.byttTilstand(AvventerKravgrunnlag)
20+
}
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package no.nav.tilbakekreving.tilstand
2+
3+
import no.nav.tilbakekreving.Tilbakekreving
4+
import no.nav.tilbakekreving.api.v2.OpprettTilbakekrevingEvent
5+
6+
sealed interface Tilstand {
7+
val navn: String
8+
9+
fun entering(tilbakekreving: Tilbakekreving)
10+
11+
fun håndter(
12+
tilbakekreving: Tilbakekreving,
13+
hendelse: OpprettTilbakekrevingEvent,
14+
) {
15+
error("Forventet ikke OpprettTilbakekrevingEvent i $navn")
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package no.nav.tilbakekreving
2+
3+
import no.nav.tilbakekreving.api.v2.BrukerDto
4+
import no.nav.tilbakekreving.api.v2.EksternFagsakDto
5+
import no.nav.tilbakekreving.api.v2.OpprettTilbakekrevingEvent
6+
import no.nav.tilbakekreving.api.v2.Opprettelsevalg
7+
import no.nav.tilbakekreving.kontrakter.bruker.Språkkode
8+
import no.nav.tilbakekreving.kontrakter.ytelse.Fagsystem
9+
import no.nav.tilbakekreving.kontrakter.ytelse.Ytelsestype
10+
11+
fun eksternFagsak() =
12+
EksternFagsakDto(
13+
eksternId = "101010",
14+
ytelsestype = Ytelsestype.BARNETRYGD,
15+
fagsystem = Fagsystem.BA,
16+
)
17+
18+
fun bruker() =
19+
BrukerDto(
20+
ident = "31126900011",
21+
språkkode = Språkkode.NB,
22+
)
23+
24+
fun opprettTilbakekrevingEvent(
25+
eksternFagsak: EksternFagsakDto = eksternFagsak(),
26+
opprettelsevalg: Opprettelsevalg = Opprettelsevalg.OPPRETT_BEHANDLING_MED_VARSEL,
27+
) = OpprettTilbakekrevingEvent(
28+
eksternFagsak = eksternFagsak,
29+
opprettelsesvalg = opprettelsevalg,
30+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package no.nav.tilbakekreving
2+
3+
import io.kotest.matchers.shouldBe
4+
import no.nav.tilbakekreving.api.v2.Opprettelsevalg
5+
import no.nav.tilbakekreving.tilstand.AvventerKravgrunnlag
6+
import no.nav.tilbakekreving.tilstand.AvventerUtsattBehandlingMedVarsel
7+
import no.nav.tilbakekreving.tilstand.AvventerUtsattBehandlingUtenVarsel
8+
import no.nav.tilbakekreving.tilstand.Start
9+
import org.junit.jupiter.api.Test
10+
11+
class TilbakekrevingTest {
12+
@Test
13+
fun `oppretter tilbakekreving`() {
14+
val opprettEvent = opprettTilbakekrevingEvent(opprettelsevalg = Opprettelsevalg.OPPRETT_BEHANDLING_MED_VARSEL)
15+
val tilbakekreving = Tilbakekreving.opprett(opprettEvent)
16+
17+
tilbakekreving.tilstand shouldBe Start
18+
tilbakekreving.håndter(opprettEvent)
19+
tilbakekreving.tilstand shouldBe AvventerKravgrunnlag
20+
}
21+
22+
@Test
23+
fun `oppretter tilbakekreving som avventer oppdatert kravgrunnlag uten varsel`() {
24+
val opprettEvent = opprettTilbakekrevingEvent(opprettelsevalg = Opprettelsevalg.UTSETT_BEHANDLING_UTEN_VARSEL)
25+
val tilbakekreving = Tilbakekreving.opprett(opprettEvent)
26+
27+
tilbakekreving.håndter(opprettEvent)
28+
tilbakekreving.tilstand shouldBe AvventerUtsattBehandlingUtenVarsel
29+
}
30+
31+
@Test
32+
fun `oppretter tilbakekreving som avventer oppdatert kravgrunnlag med varsel`() {
33+
val opprettEvent = opprettTilbakekrevingEvent(opprettelsevalg = Opprettelsevalg.UTSETT_BEHANDLING_MED_VARSEL)
34+
val tilbakekreving = Tilbakekreving.opprett(opprettEvent)
35+
36+
tilbakekreving.håndter(opprettEvent)
37+
tilbakekreving.tilstand shouldBe AvventerUtsattBehandlingMedVarsel
38+
}
39+
}

settings.gradle.kts

+2
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ rootProject.name = "familie-tilbake"
22
include("kontrakter-intern")
33
include("kontrakter-ekstern")
44
include("kontrakter-felles")
5+
include("modell")
6+
include("kontrakter-ekstern-v2")

0 commit comments

Comments
 (0)