Skip to content

Commit

Permalink
Ny behovsmeldingmodell (#66)
Browse files Browse the repository at this point in the history
  • Loading branch information
olesls authored Aug 27, 2024
1 parent 8671cae commit 4305b2d
Show file tree
Hide file tree
Showing 17 changed files with 1,905 additions and 17 deletions.
1 change: 1 addition & 0 deletions .github/workflows/deploy-dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ on:
branches:
- main
- tilbehør-mapping
- ny-behovsmeldingmodell

jobs:
build:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.module.kotlin.treeToValue
import no.nav.hjelpemidler.behovsmeldingsmodell.BehovsmeldingStatus
import no.nav.hjelpemidler.behovsmeldingsmodell.BehovsmeldingType
import no.nav.hjelpemidler.behovsmeldingsmodell.Brukerpassbytte
import no.nav.hjelpemidler.behovsmeldingsmodell.FritakFraBegrunnelseÅrsak
import no.nav.hjelpemidler.behovsmeldingsmodell.Hast
import no.nav.hjelpemidler.behovsmeldingsmodell.Hasteårsak
import no.nav.hjelpemidler.behovsmeldingsmodell.SøknadId
import no.nav.hjelpemidler.behovsmeldingsmodell.v1.Brukerpassbytte
import no.nav.hjelpemidler.behovsmeldingsmodell.v1.Hast
import no.nav.hjelpemidler.soknad.db.client.hmdb.enums.MediaType
import no.nav.hjelpemidler.soknad.db.client.hmdb.hentproduktermedhmsnrs.Product
import no.nav.hjelpemidler.soknad.db.jsonMapper
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package no.nav.hjelpemidler.soknad.db.store

import com.fasterxml.jackson.databind.JsonNode
import io.github.oshai.kotlinlogging.KotlinLogging
import no.nav.hjelpemidler.behovsmeldingsmodell.BehovsmeldingStatus
import no.nav.hjelpemidler.behovsmeldingsmodell.BehovsmeldingType
import no.nav.hjelpemidler.behovsmeldingsmodell.Fødselsnummer
import no.nav.hjelpemidler.behovsmeldingsmodell.v1.Behovsmelding
import no.nav.hjelpemidler.behovsmeldingsmodell.v2.Formidlerbehovsmelding
import no.nav.hjelpemidler.behovsmeldingsmodell.v2.mapping.tilFormidlerbehovsmeldingV2
import no.nav.hjelpemidler.database.JdbcOperations
import no.nav.hjelpemidler.database.Store
import no.nav.hjelpemidler.database.enum
Expand All @@ -17,6 +22,8 @@ import java.util.UUID

private const val UKER_TILGJENGELIG_ETTER_ENDELIG_STATUS = 4

private val logg = KotlinLogging.logger {}

class SøknadStoreInnsender(private val tx: JdbcOperations) : Store {
fun hentSøknaderForInnsender(
fnrInnsender: String,
Expand Down Expand Up @@ -160,6 +167,15 @@ class SøknadStoreInnsender(private val tx: JdbcOperations) : Store {
navnBruker = it.stringOrNull("navn_bruker"),
søknadsdata = Søknadsdata(it.json<JsonNode>("data"), null),
valgteÅrsaker = it.jsonOrNull<List<String>?>("arsaker") ?: emptyList(),
behovsmeldingV2 = try {
tilFormidlerbehovsmeldingV2(
it.json<Behovsmelding>("data"),
Fødselsnummer(fnrInnsender),
)
} catch (e: Exception) {
logg.error(e) { "Mapping til BehovsmeldingV2 feilet. Data: ${it.json<JsonNode>("data")}" }
null
},
)
}
}
Expand All @@ -176,4 +192,5 @@ class SøknadForInnsender(
val navnBruker: String?,
valknadsdata: Søknadsdata? = null,
val valgteÅrsaker: List<String>,
val behovsmeldingV2: Formidlerbehovsmelding? = null,
)
10 changes: 10 additions & 0 deletions behovsmeldingsmodell/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@ group = "no.nav.hjelpemidler"
version = System.getenv("VERSION_TAG") ?: "local"

dependencies {
/*
TODO: Det tryggeste er å ha denne avhengigheten her, slik at vi kan sikre at den alltid blir brukt,
men samtidig vi vil helst ikke ha ekstra avhengigheter her. Kan vi gjøre det på en bedre måte?
*/

// TODO: legg til i hm-katalog

// OWASP
implementation("com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer:20240325.1")

testImplementation(libs.kotlin.test.junit5)
testImplementation(libs.bundles.jackson)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ data class HjelpemiddelProdukt(
@JsonProperty("techdataAsText")
var technicalDataAsText: String?,
@JsonProperty("paakrevdGodkjenningskurs")
varkrevdGodkjenningskurs: PåkrevdGodkjenningskurs?,
valkrevdGodkjenningskurs: PåkrevdGodkjenningskurs?,
) {
data class TechnicalDatum(
@JsonProperty("techlabeldk")
Expand All @@ -42,7 +42,7 @@ data class HjelpemiddelProdukt(
)

data class PåkrevdGodkjenningskurs(
val kursId: String?,
val kursId: Int?,
val tittel: String?,
val isokode: String?,
@JsonProperty("formidlersGjennomforing")
Expand All @@ -53,4 +53,11 @@ data class HjelpemiddelProdukt(
GODKJENNINGSKURS_DB,
VALGT_AV_FORMIDLER,
}

enum class KursId(val id: Int) {
ELEKTRISK_RULLESTOL(1),
PERSONLØFTER_OG_SEIL(2),
ELEKTRISK_SENG(3),
BESTILLERKURS(4),
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,31 @@ enum class Bruksarena {
SKOLEFRITIDSORDNING,
INSTITUSJON,
INSTITUSJON_BARNEBOLIG,
INSTITUSJON_BARNEBOLIG_IKKE_PERSONLIG_BRUK,

/**
* NB! Misvisende navn. Skal KUN være til personlig bruk.
*/
@JsonProperty("INSTITUSJON_BARNEBOLIG_IKKE_PERSONLIG_BRUK")
INSTITUSJON_BARNEBOLIG_KUN_PERSONLIG_BRUK,
}

enum class KanIkkeAvhjelpesMedEnklereÅrsak {
HAR_LUFTVEISPROBLEMER,
BEGRENSNING_VED_FUNKSJONSNEDSETTELSE,
ANNET,
}

enum class ÅrsakForAntall {
BEHOV_I_FLERE_ETASJER,
BEHOV_I_FLERE_ROM,
BEHOV_INNENDØRS_OG_UTENDØRS,
BEHOV_FOR_FLERE_PUTER_FOR_RULLESTOL,
BEHOV_FOR_JEVNLIG_VASK_ELLER_VEDLIKEHOLD,
BRUKER_HAR_TO_HJEM,
ANNET_BEHOV,
PUTENE_SKAL_KOMBINERES_I_POSISJONERING,
BEHOV_HJEMME_OG_I_BARNEHAGE,
PUTENE_SKAL_SETTES_SAMMEN_VED_BRUK,
}

enum class BytteÅrsak {
Expand Down Expand Up @@ -238,6 +262,13 @@ enum class SitteputeValg {
HAR_FRA_FØR,
}

enum class BehovForSeng {
DYSFUNKSJONELT_SØVNMØNSTER,
RISIKO_FOR_FALL_UT_AV_SENG,
STERKE_UFRIVILLIGE_BEVEGELSER,
ANNET_BEHOV,
}

enum class MadrassValg {
@JsonProperty("TrengerMadrass")
TRENGER_MADRASS,
Expand All @@ -255,3 +286,8 @@ enum class FritakFraBegrunnelseÅrsak {
ER_PÅ_BESTILLINGSORDNING,
IKKE_I_PILOT,
}

enum class Prioritet {
NORMAL,
HAST,
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,45 @@
package no.nav.hjelpemidler.behovsmeldingsmodell
package no.nav.hjelpemidler.behovsmeldingsmodell.v1

import com.fasterxml.jackson.annotation.JsonIgnore
import com.fasterxml.jackson.annotation.JsonProperty
import no.nav.hjelpemidler.behovsmeldingsmodell.AutomatiskGenerertTilbehør
import no.nav.hjelpemidler.behovsmeldingsmodell.BehovForSeng
import no.nav.hjelpemidler.behovsmeldingsmodell.BehovsmeldingType
import no.nav.hjelpemidler.behovsmeldingsmodell.Brukerkilde
import no.nav.hjelpemidler.behovsmeldingsmodell.BrukersituasjonVilkår
import no.nav.hjelpemidler.behovsmeldingsmodell.Bruksarena
import no.nav.hjelpemidler.behovsmeldingsmodell.BruksområdeGanghjelpemiddel
import no.nav.hjelpemidler.behovsmeldingsmodell.BytteÅrsak
import no.nav.hjelpemidler.behovsmeldingsmodell.FritakFraBegrunnelseÅrsak
import no.nav.hjelpemidler.behovsmeldingsmodell.Fødselsnummer
import no.nav.hjelpemidler.behovsmeldingsmodell.GanghjelpemiddelType
import no.nav.hjelpemidler.behovsmeldingsmodell.HarPersonnavn
import no.nav.hjelpemidler.behovsmeldingsmodell.Hasteårsak
import no.nav.hjelpemidler.behovsmeldingsmodell.HjelpemiddelProdukt
import no.nav.hjelpemidler.behovsmeldingsmodell.InnsenderRolle
import no.nav.hjelpemidler.behovsmeldingsmodell.KanIkkeAvhjelpesMedEnklereÅrsak
import no.nav.hjelpemidler.behovsmeldingsmodell.Kontaktperson
import no.nav.hjelpemidler.behovsmeldingsmodell.LeveringTilleggsinfo
import no.nav.hjelpemidler.behovsmeldingsmodell.MadrassValg
import no.nav.hjelpemidler.behovsmeldingsmodell.Oppfølgingsansvarlig
import no.nav.hjelpemidler.behovsmeldingsmodell.OppreisningsstolBehov
import no.nav.hjelpemidler.behovsmeldingsmodell.OppreisningsstolBruksområde
import no.nav.hjelpemidler.behovsmeldingsmodell.OppreisningsstolLøftType
import no.nav.hjelpemidler.behovsmeldingsmodell.Organisasjon
import no.nav.hjelpemidler.behovsmeldingsmodell.Personnavn
import no.nav.hjelpemidler.behovsmeldingsmodell.PlasseringType
import no.nav.hjelpemidler.behovsmeldingsmodell.PosisjoneringsputeBehov
import no.nav.hjelpemidler.behovsmeldingsmodell.PosisjoneringsputeForBarnBruk
import no.nav.hjelpemidler.behovsmeldingsmodell.PosisjoneringsputeOppgaverIDagligliv
import no.nav.hjelpemidler.behovsmeldingsmodell.SidebetjeningspanelPosisjon
import no.nav.hjelpemidler.behovsmeldingsmodell.Signaturtype
import no.nav.hjelpemidler.behovsmeldingsmodell.SitteputeValg
import no.nav.hjelpemidler.behovsmeldingsmodell.Utleveringsmåte
import no.nav.hjelpemidler.behovsmeldingsmodell.UtlevertType
import no.nav.hjelpemidler.behovsmeldingsmodell.Veiadresse
import no.nav.hjelpemidler.behovsmeldingsmodell.lagPersonnavn
import no.nav.hjelpemidler.behovsmeldingsmodell.lagVeiadresse
import no.nav.hjelpemidler.behovsmeldingsmodell.ÅrsakForAntall
import java.time.LocalDate
import java.util.UUID

Expand Down Expand Up @@ -272,7 +310,7 @@ data class Hjelpemiddel(
val årsakForAntall: String? = null,
@JsonProperty("arsakForAntallBegrunnelse")
val årsakForAntallBegrunnelse: String? = null,
val beskrivelse: String,
val beskrivelse: String, // = navn
val hjelpemiddelkategori: String,
@JsonProperty("hmsNr")
val hmsnr: String,
Expand All @@ -289,8 +327,8 @@ data class Hjelpemiddel(
@JsonProperty("begrunnelsen") // hvorfor bestemt form?
val begrunnelse: String? = null,
@JsonProperty("kanIkkeTilsvarande") // nynorsk
val kanIkkeTilsvarende: String? = null,
val navn: String? = null,
val kanIkkeTilsvarende: Boolean? = null,
val navn: String? = null, // = beskrivelse
val produkt: HjelpemiddelProdukt? = null,
val rullestolInfo: RullestolInfo? = null,
val utlevertInfo: UtlevertInfo? = null,
Expand All @@ -310,7 +348,21 @@ data class Hjelpemiddel(
val diverseInfo: DiverseInfo? = null,
val bytter: List<Bytte> = emptyList(),
val bruksarena: Set<Bruksarena> = emptySet(),
)
) {
val årsakForAntallEnum: ÅrsakForAntall? = when (årsakForAntall) {
"Behov i flere etasjer" -> ÅrsakForAntall.BEHOV_I_FLERE_ETASJER
"Behov i flere rom" -> ÅrsakForAntall.BEHOV_I_FLERE_ROM
"Behov både innendørs og utendørs" -> ÅrsakForAntall.BEHOV_INNENDØRS_OG_UTENDØRS
"Behov for pute til flere rullestoler eller sitteenheter" -> ÅrsakForAntall.BEHOV_FOR_FLERE_PUTER_FOR_RULLESTOL
"Behov for jevnlig vask eller vedlikehold" -> ÅrsakForAntall.BEHOV_FOR_JEVNLIG_VASK_ELLER_VEDLIKEHOLD
"Bruker har to hjem" -> ÅrsakForAntall.BRUKER_HAR_TO_HJEM
"Annet behov" -> ÅrsakForAntall.ANNET_BEHOV
"PUTENE_SKAL_KOMBINERES_I_POSISJONERING" -> ÅrsakForAntall.PUTENE_SKAL_KOMBINERES_I_POSISJONERING
"BEHOV_HJEMME_OG_I_BARNEHAGE" -> ÅrsakForAntall.BEHOV_HJEMME_OG_I_BARNEHAGE
"PUTENE_SKAL_SETTES_SAMMEN_VED_BRUK" -> ÅrsakForAntall.PUTENE_SKAL_SETTES_SAMMEN_VED_BRUK
else -> null
}
}

data class Bytte(
val erTilsvarende: Boolean,
Expand Down Expand Up @@ -375,9 +427,9 @@ data class SengForVendesystemMontering(
)

data class SengInfo(
valkrevdBehov: String?,
valkrevdBehov: BehovForSeng?,
val brukerOppfyllerPåkrevdBehov: Boolean?,
val behovForSeng: String?,
val behovForSeng: BehovForSeng?,
val behovForSengBegrunnelse: String?,
val madrassValg: MadrassValg?,
valyGrindValg: HøyGrindValg?,
Expand All @@ -404,7 +456,12 @@ data class ElektriskRullestolInfo(
val kanBetjeneMotorisertStyring: Boolean?,
val ferdesSikkertITrafikk: Boolean?,
val nedsattGangfunksjon: Boolean?,
val oppbevaringOgLagring: Boolean?,
/**
* Her har det sneket seg inn en skrivefeil både i koden og i enkelte tekster.
* Det er oppbevaring og LADING vi er ute etter.
*/
@JsonProperty("oppbevaringOgLagring")
val oppbevaringOgLading: Boolean?,
val oppbevaringInfo: String?,
val kjentMedForsikring: Boolean?,
val harSpesialsykkel: Boolean?,
Expand All @@ -415,7 +472,7 @@ data class ElektriskRullestolInfo(
data class Kabin(
val brukerOppfyllerKrav: Boolean,
@JsonProperty("kanIkkeAvhjelpesMedEnklereArsak")
val kanIkkeAvhjelpesMedEnklereÅrsak: String?,
val kanIkkeAvhjelpesMedEnklereÅrsak: KanIkkeAvhjelpesMedEnklereÅrsak?,
val kanIkkeAvhjelpesMedEnklereBegrunnelse: String?,
@JsonProperty("arsakForBehovBegrunnelse")
val årsakForBehovBegrunnelse: String?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.hjelpemidler.behovsmeldingsmodell
package no.nav.hjelpemidler.behovsmeldingsmodell.v1

import com.fasterxml.jackson.annotation.JsonAlias
import no.nav.hjelpemidler.behovsmeldingsmodell.BehovsmeldingStatus
import java.util.UUID

data class BehovsmeldingResponse(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.hjelpemidler.behovsmeldingsmodell
package no.nav.hjelpemidler.behovsmeldingsmodell.v1

import com.fasterxml.jackson.annotation.JsonProperty

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.hjelpemidler.behovsmeldingsmodell
package no.nav.hjelpemidler.behovsmeldingsmodell.v1

import com.fasterxml.jackson.annotation.JsonProperty
import no.nav.hjelpemidler.behovsmeldingsmodell.Fødselsnummer
import java.time.LocalDate
import java.util.UUID

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package no.nav.hjelpemidler.behovsmeldingsmodell.v2

import no.nav.hjelpemidler.behovsmeldingsmodell.BehovsmeldingType
import no.nav.hjelpemidler.behovsmeldingsmodell.Fødselsnummer
import no.nav.hjelpemidler.behovsmeldingsmodell.Prioritet
import java.time.LocalDate
import java.util.UUID

interface BehovsmeldingBase {
val id: UUID
val type: BehovsmeldingType
val innsendingsdato: LocalDate
val prioritet: Prioritet
val hjmBrukersFnr: Fødselsnummer
val innsendersFnr: Fødselsnummer
val skjemaversjon: Int
}

/*
Minimal Behovsmelding-klasse som er den som legges på Kafka og som
dekker behovet til de apper som ikke har behov for å vise frem hele behovsmeldingen.
*/
// TODO: Synes vi dette er nyttig, eller vil vi heller ha feks. supersmå events (eventname+søknadId)
// og flere kall til soknadsbehandling-db?
data class Behovsmelding(
override val id: UUID,
override val type: BehovsmeldingType,
override val innsendingsdato: LocalDate,
override val prioritet: Prioritet,
override val hjmBrukersFnr: Fødselsnummer,
override val innsendersFnr: Fødselsnummer,
override val skjemaversjon: Int,
) : BehovsmeldingBase
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package no.nav.hjelpemidler.behovsmeldingsmodell.v2

import no.nav.hjelpemidler.behovsmeldingsmodell.BehovsmeldingType
import no.nav.hjelpemidler.behovsmeldingsmodell.Fødselsnummer
import no.nav.hjelpemidler.behovsmeldingsmodell.Personnavn
import no.nav.hjelpemidler.behovsmeldingsmodell.Prioritet
import no.nav.hjelpemidler.behovsmeldingsmodell.Veiadresse
import no.nav.hjelpemidler.behovsmeldingsmodell.v1.Brukerpassbytte
import java.time.LocalDate
import java.util.UUID

data class Brukerpassbytte(
val navn: Personnavn,
val folkeregistrertAdresse: Veiadresse,
val annenUtleveringsadresse: Veiadresse?,
val hjelpemiddel: Hjelpemiddel,
val bytteårsak: Brukerpassbytte.Bytteårsak,
val byttebegrunnelse: String?,
val utleveringsmåte: Brukerpassbytte.Utleveringsmåte,

override val id: UUID,
override val type: BehovsmeldingType = BehovsmeldingType.BRUKERPASSBYTTE,
override val skjemaversjon: Int = 2,
override val innsendingsdato: LocalDate,
override val hjmBrukersFnr: Fødselsnummer,
override val innsendersFnr: Fødselsnummer = hjmBrukersFnr,
override val prioritet: Prioritet = Prioritet.NORMAL,
) : BehovsmeldingBase {
data class Hjelpemiddel(
val hmsArtNr: String,
val artikkelnavn: String,
val iso6Tittel: String,
val iso6: Iso6,
)
}
Loading

0 comments on commit 4305b2d

Please sign in to comment.