From 3e0bf345904181a866be80d5ccd956bf92b2b2bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20Steinar=20Lillest=C3=B8l=20Skrede?= Date: Mon, 7 Oct 2024 16:52:55 +0200 Subject: [PATCH] fjern kode som ikke lenger er i bruk og oppdater tester --- .github/workflows/deploy-dev.yaml | 3 +- .../db/domain/S\303\270knadForBruker.kt" | 886 +----------------- .../db/domain/kommuneapi/Valideringsmodell.kt | 16 +- .../soknad/db/store/S\303\270knadStore.kt" | 1 - .../db/store/S\303\270knadStoreInnsender.kt" | 4 - .../db/soknad/LagBehovsmeldingsgrunnlag.kt | 6 +- .../store/S\303\270knadStoreInnsenderTest.kt" | 2 +- .../db/store/S\303\270knadStoreTest.kt" | 132 +-- 8 files changed, 102 insertions(+), 948 deletions(-) diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml index 8e11138..1d4d808 100644 --- a/.github/workflows/deploy-dev.yaml +++ b/.github/workflows/deploy-dev.yaml @@ -9,8 +9,7 @@ on: - "CODEOWNERS" branches: - main - - tilbehør-mapping - - ny-behovsmeldingmodell + - opprydding jobs: build: diff --git "a/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/domain/S\303\270knadForBruker.kt" "b/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/domain/S\303\270knadForBruker.kt" index 2f58b0d..b6362c8 100644 --- "a/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/domain/S\303\270knadForBruker.kt" +++ "b/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/domain/S\303\270knadForBruker.kt" @@ -1,16 +1,12 @@ package no.nav.hjelpemidler.soknad.db.domain -import com.fasterxml.jackson.core.type.TypeReference 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.FritakFraBegrunnelseÅrsak -import no.nav.hjelpemidler.behovsmeldingsmodell.Hasteårsak import no.nav.hjelpemidler.behovsmeldingsmodell.SøknadId import no.nav.hjelpemidler.behovsmeldingsmodell.v1.Behovsmelding import no.nav.hjelpemidler.behovsmeldingsmodell.v1.Brukerpassbytte -import no.nav.hjelpemidler.behovsmeldingsmodell.v1.Hast import no.nav.hjelpemidler.behovsmeldingsmodell.v2.Innsenderbehovsmelding import no.nav.hjelpemidler.behovsmeldingsmodell.v2.mapping.tilInnsenderbehovsmeldingV2 import no.nav.hjelpemidler.soknad.db.client.hmdb.enums.MediaType @@ -28,7 +24,6 @@ class SøknadForBruker private constructor( val status: BehovsmeldingStatus, val fullmakt: Boolean, val fnrBruker: String, - val søknadsdata: Søknadsdata?, val brukerpassbyttedata: Brukerpassbytte?, val er_digital: Boolean, val soknadGjelder: String?, @@ -48,7 +43,6 @@ class SøknadForBruker private constructor( søknad: JsonNode, status: BehovsmeldingStatus, fullmakt: Boolean, - kommunenavn: String?, fnrBruker: String, er_digital: Boolean, soknadGjelder: String?, @@ -66,14 +60,6 @@ class SøknadForBruker private constructor( status = status, fullmakt = fullmakt, fnrBruker = fnrBruker, - søknadsdata = when (behovsmeldingType) { - BehovsmeldingType.SØKNAD, BehovsmeldingType.BESTILLING, BehovsmeldingType.BYTTE -> Søknadsdata( - søknad, - kommunenavn, - ) - - BehovsmeldingType.BRUKERPASSBYTTE -> null - }, brukerpassbyttedata = when (behovsmeldingType) { BehovsmeldingType.SØKNAD, BehovsmeldingType.BESTILLING, BehovsmeldingType.BYTTE -> null BehovsmeldingType.BRUKERPASSBYTTE -> jsonMapper.treeToValue(søknad["brukerpassbytte"]) @@ -111,837 +97,26 @@ class SøknadForBruker private constructor( valgteÅrsaker: List, ) = SøknadForBruker( - søknadId, - behovsmeldingType, - journalpostId, - datoOpprettet, - datoOppdatert, - status, - fullmakt, - fnrBruker, - null, - null, - er_digital, - soknadGjelder, - ordrelinjer, - fagsakId, - søknadType, - valgteÅrsaker, + søknadId = søknadId, + behovsmeldingType = behovsmeldingType, + journalpostId = journalpostId, + datoOpprettet = datoOpprettet, + datoOppdatert = datoOppdatert, + status = status, + fullmakt = fullmakt, + fnrBruker = fnrBruker, + brukerpassbyttedata = null, + er_digital = er_digital, + soknadGjelder = soknadGjelder, + ordrelinjer = ordrelinjer, + fagsakId = fagsakId, + søknadType = søknadType, + valgteÅrsaker = valgteÅrsaker, innsenderbehovsmelding = null, ) } } -private val bekreftedeVilkårReader = - jsonMapper.readerFor(object : TypeReference?>() {}) - -private fun bruker(søknad: JsonNode): Bruker { - val brukerNode = søknad["soknad"]["bruker"] - val brukerSituasjonNode = søknad["soknad"]["brukersituasjon"] - val storreBehov = brukerSituasjonNode["storreBehov"]?.booleanValue() ?: false - val praktiskeProblem = brukerSituasjonNode["praktiskeProblem"]?.booleanValue() ?: false - val nedsattFunksjon = brukerSituasjonNode["nedsattFunksjon"]?.booleanValue() ?: false - val skalIkkeBrukesTilAndreFormaal = brukerSituasjonNode["skalIkkeBrukesTilAndreFormaal"]?.booleanValue() ?: false - val bruksarenaErDagliglivet = brukerSituasjonNode["bruksarenaErDagliglivet"]?.booleanValue() ?: false - - var bekreftedeVilkår: List = - brukerSituasjonNode["bekreftedeVilkår"]?.let { bekreftedeVilkårReader.readValue(it) } - ?: emptyList() - if (bekreftedeVilkår.isEmpty()) { - bekreftedeVilkår = mutableListOf().apply { - // Håndter eldre variant av datamodellen - if (skalIkkeBrukesTilAndreFormaal) { - // Bestilling - add(BrukersituasjonVilkår.VESENTLIG_OG_VARIG_NEDSATT_FUNKSJONSEVNE_V1) - if (storreBehov) add(BrukersituasjonVilkår.KAN_IKKE_LOESES_MED_ENKLERE_HJELPEMIDLER_V1) - if (praktiskeProblem) add(BrukersituasjonVilkår.I_STAND_TIL_AA_BRUKE_HJELEPMIDLENE_V1) - if (bruksarenaErDagliglivet) add(BrukersituasjonVilkår.PRAKTISKE_PROBLEMER_I_DAGLIGLIVET_V1) - } else { - // Formidler søknad - if (storreBehov) add(BrukersituasjonVilkår.STORRE_BEHOV) - if (praktiskeProblem) add(BrukersituasjonVilkår.PRAKTISKE_PROBLEM) - if (nedsattFunksjon) add(BrukersituasjonVilkår.NEDSATT_FUNKSJON) - } - } - } - - return Bruker( - fnummer = brukerNode["fnummer"].textValue(), - fornavn = brukerNode["fornavn"].textValue(), - etternavn = brukerNode["etternavn"].textValue(), - telefonNummer = brukerNode["telefonNummer"].textValue(), - adresse = brukerNode["adresse"]?.textValue(), - postnummer = brukerNode["postnummer"]?.textValue(), - poststed = brukerNode["poststed"]?.textValue(), - boform = brukerSituasjonNode["bostedRadioButton"]?.textValue(), - bruksarena = bruksarenaBruker(søknad["soknad"]["brukersituasjon"]), - funksjonsnedsettelser = funksjonsnedsettelser(søknad), - signatur = signaturType(søknad), - kroppsmaal = kroppsmaal(brukerNode), - brukernummer = brukerNode["brukernummer"]?.textValue(), - bekreftedeVilkår = bekreftedeVilkår, - ) -} - -fun bruksarenaBruker(brukersituasjon: JsonNode): BruksarenaBruker { - return when (brukersituasjon["bruksarenaErDagliglivet"]?.booleanValue()) { - true -> BruksarenaBruker.DAGLIGLIVET - else -> BruksarenaBruker.UKJENT - } -} - -fun kroppsmaal(brukerNode: JsonNode): Kroppsmaal? { - val kroppsmaal = brukerNode["kroppsmaal"] ?: return null - - return Kroppsmaal( - setebredde = kroppsmaal["setebredde"]?.intValue(), - laarlengde = kroppsmaal["laarlengde"]?.intValue(), - legglengde = kroppsmaal["legglengde"]?.intValue(), - hoyde = kroppsmaal["hoyde"]?.intValue(), - kroppsvekt = kroppsmaal["kroppsvekt"]?.intValue(), - ) -} - -private fun formidler(søknad: JsonNode, kommunenavn: String?): Formidler { - val leveringNode = søknad["soknad"]["levering"] - return Formidler( - navn = "${leveringNode["hmfFornavn"].textValue()} ${leveringNode["hmfEtternavn"].textValue()}", - arbeidssted = leveringNode["hmfArbeidssted"].textValue(), - stilling = leveringNode["hmfStilling"].textValue(), - adresse = "${leveringNode["hmfPostadresse"].textValue()} ${leveringNode["hmfPostnr"].textValue()} ${leveringNode["hmfPoststed"].textValue()}", - telefon = leveringNode["hmfTelefon"].textValue(), - treffesEnklest = leveringNode["hmfTreffesEnklest"].textValue(), - epost = leveringNode["hmfEpost"].textValue(), - kommunenavn = kommunenavn, - ) -} - -private fun oppfolgingsansvarlig(søknad: JsonNode): Oppfolgingsansvarlig? { - val leveringNode = søknad["soknad"]["levering"] - - if (leveringNode["opfRadioButton"].textValue() == "Hjelpemiddelformidler") { - return null - } - - return Oppfolgingsansvarlig( - navn = "${leveringNode["opfFornavn"].textValue()} ${leveringNode["opfEtternavn"].textValue()}", - arbeidssted = leveringNode["opfArbeidssted"].textValue(), - stilling = leveringNode["opfStilling"].textValue(), - telefon = leveringNode["opfTelefon"].textValue(), - ansvarFor = leveringNode["opfAnsvarFor"].textValue(), - ) -} - -private val leveringTilleggsinfoReader = - jsonMapper.readerFor(object : TypeReference?>() {}) - -private fun levering(søknad: JsonNode): Levering { - val leveringNode = søknad["soknad"]["levering"] - val leveringsMaate = leveringsMaate(søknad) - return Levering( - leveringsmaate = leveringsMaate, - adresse = if (leveringsMaate == Leveringsmaate.ANNEN_ADRESSE) "${leveringNode["utleveringPostadresse"].textValue()} ${leveringNode["utleveringPostnr"].textValue()} ${leveringNode["utleveringPoststed"].textValue()}" else null, - kontaktPerson = kontaktPerson(søknad), - merknad = leveringNode["merknadTilUtlevering"]?.textValue(), - tilleggsinfo = leveringNode["tilleggsinfo"]?.let { leveringTilleggsinfoReader.readValue(it) } ?: emptyList(), - ) -} - -private val hasteårsakerReader = - jsonMapper.readerFor(object : TypeReference?>() {}) - -private fun hast(søknad: JsonNode): Hast? { - val hastNode = søknad["soknad"]["hast"] ?: return null - - return Hast( - hasteårsaker = hastNode["hasteårsaker"].let { hasteårsakerReader.readValue(it) }, - hastBegrunnelse = hastNode["hastBegrunnelse"]?.textValue(), - ) -} - -private fun kontaktPerson(søknad: JsonNode): KontaktPerson { - val leveringNode = søknad["soknad"]["levering"] - val kontaktPersonType = kontaktPersonType(søknad) - - return if (kontaktPersonType == KontaktpersonType.ANNEN_KONTAKTPERSON) { - KontaktPerson( - navn = "${leveringNode["utleveringFornavn"].textValue()} ${leveringNode["utleveringEtternavn"].textValue()}", - telefon = leveringNode["utleveringTelefon"].textValue(), - kontaktpersonType = kontaktPersonType, - ) - } else { - KontaktPerson( - kontaktpersonType = kontaktPersonType, - ) - } -} - -private fun kontaktPersonType(søknad: JsonNode): KontaktpersonType { - val leveringNode = søknad["soknad"]["levering"] - - return when (leveringNode["utleveringskontaktpersonRadioButton"]?.textValue()) { - "Hjelpemiddelbruker" -> KontaktpersonType.HJELPEMIDDELBRUKER - "Hjelpemiddelformidler" -> KontaktpersonType.HJELPEMIDDELFORMIDLER - "AnnenKontaktperson" -> KontaktpersonType.ANNEN_KONTAKTPERSON - else -> KontaktpersonType.INGEN_KONTAKTPERSON - } -} - -private fun signaturType(søknad: JsonNode): SignaturType = - jsonMapper.treeToValue(søknad["soknad"]["bruker"]["signatur"]) - -private fun leveringsMaate(søknad: JsonNode): Leveringsmaate? { - val leveringNode = søknad["soknad"]["levering"] - - return when (leveringNode["utleveringsmaateRadioButton"]?.textValue()) { - "AnnenBruksadresse" -> Leveringsmaate.ANNEN_ADRESSE - "FolkeregistrertAdresse" -> Leveringsmaate.FOLKEREGISTRERT_ADRESSE - "Hjelpemiddelsentralen" -> Leveringsmaate.HJELPEMIDDELSENTRAL - "AlleredeUtlevertAvNav" -> Leveringsmaate.ALLEREDE_LEVERT - null -> null - else -> throw RuntimeException("Ugyldig leveringsmåte") - } -} - -private fun funksjonsnedsettelser(søknad: JsonNode): List { - val funksjonsnedsettelser = mutableListOf() - - val funksjonsnedsettelseNode = søknad["soknad"]["brukersituasjon"]["nedsattFunksjonTypes"] - if (funksjonsnedsettelseNode["bevegelse"].booleanValue()) funksjonsnedsettelser.add(Funksjonsnedsettelse.BEVEGELSE) - if (funksjonsnedsettelseNode["kognisjon"].booleanValue()) funksjonsnedsettelser.add(Funksjonsnedsettelse.KOGNISJON) - if (funksjonsnedsettelseNode["horsel"].booleanValue()) funksjonsnedsettelser.add(Funksjonsnedsettelse.HØRSEL) - - return funksjonsnedsettelser -} - -private fun hjelpemidler(søknad: JsonNode): List { - val hjelpemidler = mutableListOf() - søknad["soknad"]["hjelpemidler"]["hjelpemiddelListe"].forEach { - val hjelpemiddel = Hjelpemiddel( - antall = it["antall"].intValue(), - arsakForAntall = arsakForAntall(it), - arsakForAntallBegrunnelse = it["arsakForAntallBegrunnelse"]?.textValue(), - beskrivelse = it["beskrivelse"].textValue(), - hjelpemiddelkategori = it["hjelpemiddelkategori"].textValue(), - hmsNr = it["hmsNr"].textValue(), - tilleggsinformasjon = it["tilleggsinformasjon"].textValue(), - rangering = it["produkt"]["postrank"].textValue(), - utlevertFraHjelpemiddelsentralen = it["utlevertFraHjelpemiddelsentralen"].booleanValue(), - vilkarliste = vilkaar(it), - tilbehorListe = tilbehor(it), - begrunnelse = it["begrunnelsen"]?.textValue(), - kanIkkeTilsvarande = it["kanIkkeTilsvarande"].booleanValue(), - navn = it["navn"]?.textValue(), - rullestolInfo = rullestolinfo(it), - elektriskRullestolInfo = elektriskRullestolInfo(it), - personlofterInfo = personlofterInfo(it), - utlevertInfo = utlevertInfo(it), - appInfo = appInfo(it), - varmehjelpemiddelInfo = varmehjelpemiddelInfo(it), - sengeInfo = sengeInfo(it), - elektriskVendesystemInfo = elektriskVendesystemInfo(it), - ganghjelpemiddelInfo = ganghjelpemiddelInfo(it), - posisjoneringssystemInfo = posisjoneringssystemInfo(it), - posisjoneringsputeForBarnInfo = posisjoneringsputeForBarnInfo(it), - oppreisningsStolInfo = oppreisningsStolInfo(it), - diverseInfo = diverseInfo(it), - bytter = bytter(it), - bruksarena = bruksarena(it), - ) - hjelpemidler.add(hjelpemiddel) - } - return hjelpemidler -} - -private fun oppreisningsStolInfo(hjelpemiddel: JsonNode): OppreisningsStolInfo? { - val oppreisningsStolInfo = hjelpemiddel["oppreisningsStolInfo"] ?: return null - return jsonMapper.treeToValue(oppreisningsStolInfo) -} - -private fun arsakForAntall(hjelpemiddel: JsonNode): String? { - val arsak = hjelpemiddel["arsakForAntall"]?.let { - when (hjelpemiddel["arsakForAntall"].textValue()) { - // Returner enums så det blir lettere å legge inn translations - "Behov i flere etasjer" -> "BEHOV_I_FLERE_ETASJER" - "Behov i flere rom" -> "BEHOV_I_FLERE_ROM" - "Behov både innendørs og utendørs" -> "BEHOV_INNENDØRS_OG_UTENDØRS" - "Behov for pute til flere rullestoler eller sitteenheter" -> "BEHOV_FOR_FLERE_PUTER_FOR_RULLESTOL" - "Behov for jevnlig vask eller vedlikehold" -> "BEHOV_FOR_JEVNLIG_VASK_ELLER_VEDLIKEHOLD" - "Bruker har to hjem" -> "BRUKER_HAR_TO_HJEM" - "Annet behov" -> "ANNET_BEHOV" - "PUTENE_SKAL_KOMBINERES_I_POSISJONERING" -> "PUTENE_SKAL_KOMBINERES_I_POSISJONERING" - "BEHOV_HJEMME_OG_I_BARNEHAGE" -> "BEHOV_HJEMME_OG_I_BARNEHAGE" - "PUTENE_SKAL_SETTES_SAMMEN_VED_BRUK" -> "PUTENE_SKAL_SETTES_SAMMEN_VED_BRUK" - else -> "UKJENT_ÅRSAK" - } - } - - return arsak -} - -private fun vilkaar(hjelpemiddel: JsonNode): List { - val vilkarListe = mutableListOf() - hjelpemiddel["vilkarliste"]?.filter { it["checked"].asBoolean() }?.forEach { - vilkarListe.add( - HjelpemiddelVilkar( - vilkaarTekst = it["vilkartekst"].textValue(), - tilleggsinfo = it["tilleggsinfo"]?.textValue(), - ), - ) - } - return vilkarListe -} - -private fun tilbehor(hjelpemiddel: JsonNode): List { - return hjelpemiddel["tilbehorListe"]?.map { - jsonMapper.treeToValue(it) - } ?: emptyList() -} - -private fun elektriskRullestolInfo(hjelpemiddel: JsonNode): ElektriskRullestolInfo? { - val elRullestolinfoJson = hjelpemiddel["elektriskRullestolInfo"] ?: return null - return ElektriskRullestolInfo( - godkjenningskurs = elRullestolinfoJson["godkjenningskurs"]?.booleanValue(), - kanBetjeneManuellStyring = elRullestolinfoJson["kanBetjeneManuellStyring"]?.booleanValue(), - kanBetjeneMotorisertStyring = elRullestolinfoJson["kanBetjeneMotorisertStyring"]?.booleanValue(), - ferdesSikkertITrafikk = elRullestolinfoJson["ferdesSikkertITrafikk"]?.booleanValue(), - nedsattGangfunksjon = elRullestolinfoJson["nedsattGangfunksjon"]?.booleanValue(), - oppbevaringOgLagring = elRullestolinfoJson["oppbevaringOgLagring"]?.booleanValue(), - oppbevaringInfo = elRullestolinfoJson["oppbevaringInfo"]?.textValue(), - kjentMedForsikring = elRullestolinfoJson["kjentMedForsikring"]?.booleanValue(), - harSpesialsykkel = elRullestolinfoJson["harSpesialsykkel"]?.booleanValue(), - plasseringAvHendel = when (elRullestolinfoJson["plasseringAvHendel"]?.textValue()) { - "Høyre" -> HendelPlassering.Høyre - "Venstre" -> HendelPlassering.Venstre - null -> null - else -> throw IllegalArgumentException("Ugyldig hendelplassering") - }, - kabin = when (elRullestolinfoJson["kabin"]) { - null -> null - else -> Kabin( - brukerOppfyllerKrav = elRullestolinfoJson["kabin"]["brukerOppfyllerKrav"].booleanValue(), - kanIkkeAvhjelpesMedEnklereArsak = elRullestolinfoJson["kabin"]["kanIkkeAvhjelpesMedEnklereArsak"]?.textValue(), - kanIkkeAvhjelpesMedEnklereBegrunnelse = elRullestolinfoJson["kabin"]["kanIkkeAvhjelpesMedEnklereBegrunnelse"]?.textValue(), - arsakForBehovBegrunnelse = elRullestolinfoJson["kabin"]["arsakForBehovBegrunnelse"]?.textValue(), - ) - }, - ) -} - -private fun rullestolinfo(hjelpemiddel: JsonNode): RullestolInfo? { - val rullestolInfoJson = hjelpemiddel["rullestolInfo"] ?: return null - return RullestolInfo( - skalBrukesIBil = rullestolInfoJson["skalBrukesIBil"]?.booleanValue(), - sitteputeValg = when (rullestolInfoJson["sitteputeValg"]?.textValue()) { - "TrengerSittepute" -> SitteputeValg.TrengerSittepute - "StandardSittepute" -> SitteputeValg.StandardSittepute - "LeggesTilSeparat" -> SitteputeValg.LeggesTilSeparat - "HarFraFor" -> SitteputeValg.HarFraFor - null -> null - else -> throw RuntimeException("Ugyldig sitteputeValg") - }, - ) -} - -private fun personlofterInfo(hjelpemiddel: JsonNode): PersonlofterInfo? { - val personlofterInfoJson = hjelpemiddel["personlofterInfo"] ?: return null - return PersonlofterInfo(harBehovForSeilEllerSele = personlofterInfoJson["harBehovForSeilEllerSele"].booleanValue()) -} - -private fun utlevertInfo(hjelpemiddel: JsonNode): UtlevertInfo? { - val utlevertInfoJson = hjelpemiddel["utlevertInfo"] ?: return null - return UtlevertInfo( - overførtFraBruker = utlevertInfoJson["overførtFraBruker"]?.textValue(), - annenKommentar = utlevertInfoJson["annenKommentar"]?.textValue(), - utlevertType = when (utlevertInfoJson["utlevertType"]?.textValue()) { - "FremskuttLager" -> UtlevertType.FremskuttLager - "Korttidslån" -> UtlevertType.Korttidslån - "Overført" -> UtlevertType.Overført - "Annet" -> UtlevertType.Annet - null -> null - else -> throw java.lang.RuntimeException("ugyldig utlevertInfo") - }, - ) -} - -private fun appInfo(hjelpemiddel: JsonNode): AppInfo? { - val appInfoJson = hjelpemiddel["appInfo"] ?: return null - return AppInfo( - brukerHarProvdProvelisens = appInfoJson["brukerHarProvdProvelisens"].booleanValue(), - stottepersonSkalAdministrere = appInfoJson["stottepersonSkalAdministrere"].booleanValue(), - stottepersonHarProvdProvelisens = appInfoJson["stottepersonHarProvdProvelisens"]?.booleanValue(), - ) -} - -private fun varmehjelpemiddelInfo(hjelpemiddel: JsonNode): VarmehjelpemiddelInfo? { - val varmehjelpemiddelInfoJson = hjelpemiddel["varmehjelpemiddelInfo"] ?: return null - return VarmehjelpemiddelInfo( - harHelseopplysningerFraFør = varmehjelpemiddelInfoJson["harHelseopplysningerFraFør"]?.booleanValue(), - legeBekrefterDiagnose = varmehjelpemiddelInfoJson["legeBekrefterDiagnose"]?.booleanValue(), - opplysningerFraLegeOppbevaresIKommune = varmehjelpemiddelInfoJson["opplysningerFraLegeOppbevaresIKommune"]?.booleanValue(), - ) -} - -private fun sengeInfo(hjelpemiddel: JsonNode): SengeInfo? { - val sengeInfoJson = hjelpemiddel["sengeInfo"] ?: return null - val høyGrindValg = sengeInfoJson["høyGrindValg"] ?: null - return SengeInfo( - påkrevdBehov = sengeInfoJson["påkrevdBehov"]?.textValue(), - brukerOppfyllerPåkrevdBehov = sengeInfoJson["brukerOppfyllerPåkrevdBehov"]?.booleanValue(), - behovForSeng = sengeInfoJson["behovForSeng"]?.textValue(), - behovForSengBegrunnelse = sengeInfoJson["behovForSengBegrunnelse"]?.textValue(), - madrassValg = when (sengeInfoJson["madrassValg"]?.textValue()) { - "TrengerMadrass" -> MadrassValg.TrengerMadrass - "HarFraFor" -> MadrassValg.HarFraFor - null -> null - else -> throw RuntimeException("Ugyldig sitteputeValg") - }, - høyGrindValg = høyGrindValg?.let { jsonMapper.treeToValue(it) }, - ) -} - -private fun elektriskVendesystemInfo(hjelpemiddel: JsonNode): ElektriskVendesystemInfo? { - val elektriskVendesystemInfoJson = hjelpemiddel["elektriskVendesystemInfo"] ?: return null - return ElektriskVendesystemInfo( - sengForMontering = sengForMontering(elektriskVendesystemInfoJson), - standardLakenByttesTilRiktigStørrelseAvNav = elektriskVendesystemInfoJson["standardLakenByttesTilRiktigStørrelseAvNav"]?.booleanValue(), - ) -} - -private fun ganghjelpemiddelInfoBruksområde(value: String?): BruksområdeGanghjelpemiddel? { - return when (value) { - "TIL_FORFLYTNING" -> BruksområdeGanghjelpemiddel.TIL_FORFLYTNING - "TIL_TRENING_OG_ANNET" -> BruksområdeGanghjelpemiddel.TIL_TRENING_OG_ANNET - null -> null - else -> throw IllegalArgumentException("Ukjent enum verdi '$value'") - } -} - -private fun ganghjelpemiddelInfoType(value: String?): GanghjelpemiddelType? { - return when (value) { - "GÅBORD" -> GanghjelpemiddelType.GÅBORD - "SPARKESYKKEL" -> GanghjelpemiddelType.SPARKESYKKEL - "KRYKKE" -> GanghjelpemiddelType.KRYKKE - "GÅTRENING" -> GanghjelpemiddelType.GÅTRENING - "GÅSTOL" -> GanghjelpemiddelType.GÅSTOL - null -> null - else -> throw IllegalArgumentException("Ukjent enum verdi '$value'") - } -} - -private fun ganghjelpemiddelInfo(hjelpemiddel: JsonNode): GanghjelpemiddelInfo? { - val ganghjelpemiddelInfoJson = hjelpemiddel["ganghjelpemiddelInfo"] ?: return null - return GanghjelpemiddelInfo( - brukerErFylt26År = ganghjelpemiddelInfoJson["brukerErFylt26År"]?.booleanValue(), - hovedformålErForflytning = ganghjelpemiddelInfoJson["hovedformålErForflytning"]?.booleanValue(), - kanIkkeBrukeMindreAvansertGanghjelpemiddel = ganghjelpemiddelInfoJson["kanIkkeBrukeMindreAvansertGanghjelpemiddel"]?.booleanValue(), - type = ganghjelpemiddelInfoType(ganghjelpemiddelInfoJson["type"]?.textValue()), - bruksområde = ganghjelpemiddelInfoBruksområde(ganghjelpemiddelInfoJson["bruksområde"]?.textValue()), - detErLagetEnMålrettetPlan = ganghjelpemiddelInfoJson["detErLagetEnMålrettetPlan"]?.booleanValue(), - planenOppbevaresIKommunen = ganghjelpemiddelInfoJson["planenOppbevaresIKommunen"]?.booleanValue(), - ) -} - -private fun sengForMontering(hjelpemiddel: JsonNode): SengForVendesystemMontering? { - val sengForMonteringJson = hjelpemiddel["sengForMontering"] ?: return null - return SengForVendesystemMontering( - hmsnr = sengForMonteringJson["hmsnr"]?.textValue(), - navn = sengForMonteringJson["navn"]?.textValue(), - madrassbredde = sengForMonteringJson["madrassbredde"]?.intValue(), - ) -} - -private val posisjoneringsputeOppgaverIDagliglivReader = - jsonMapper.readerFor(object : TypeReference?>() {}) - -private fun posisjoneringssystemInfo(hjelpemiddel: JsonNode): PosisjoneringssystemInfo? { - val posisjoneringssystemInfoJson = hjelpemiddel["posisjoneringssystemInfo"] ?: return null - return PosisjoneringssystemInfo( - skalIkkeBrukesSomBehandlingshjelpemiddel = posisjoneringssystemInfoJson["skalIkkeBrukesSomBehandlingshjelpemiddel"]?.booleanValue(), - skalIkkeBrukesTilRenSmertelindring = posisjoneringssystemInfoJson["skalIkkeBrukesTilRenSmertelindring"]?.booleanValue(), - behov = posisjoneringsputeBehov(posisjoneringssystemInfoJson["behov"]?.textValue()), - oppgaverIDagliglivet = posisjoneringssystemInfoJson["oppgaverIDagliglivet"]?.let { - posisjoneringsputeOppgaverIDagliglivReader.readValue( - it, - ) - } ?: emptyList(), - oppgaverIDagliglivetAnnet = posisjoneringssystemInfoJson["oppgaverIDagliglivetAnnet"]?.textValue(), - ) -} - -private fun posisjoneringsputeForBarnInfo(hjelpemiddel: JsonNode): PosisjoneringsputeForBarnInfo? { - val posisjoneringsputeForBarnInfoJson = hjelpemiddel["posisjoneringsputeForBarnInfo"] ?: return null - return PosisjoneringsputeForBarnInfo( - bruksområde = posisjoneringsputeForBarnBruk(posisjoneringsputeForBarnInfoJson["bruksområde"]?.textValue()), - brukerErOver26År = posisjoneringsputeForBarnInfoJson["brukerErOver26År"]?.booleanValue(), - detErLagetEnMålrettetPlan = posisjoneringsputeForBarnInfoJson["detErLagetEnMålrettetPlan"]?.booleanValue(), - planenOppbevaresIKommunen = posisjoneringsputeForBarnInfoJson["planenOppbevaresIKommunen"]?.booleanValue(), - ) -} - -private fun bruksarena(hjelpemiddel: JsonNode): List { - val bruksarenaJson = hjelpemiddel["bruksarena"] ?: return emptyList() - return jsonMapper.treeToValue(bruksarenaJson) -} - -private fun diverseInfo(hjelpemiddel: JsonNode): Map { - val diverseInfoJson = hjelpemiddel["diverseInfo"] ?: return emptyMap() - return jsonMapper.treeToValue(diverseInfoJson) -} - -private fun bytter(hjelpemiddel: JsonNode): List { - val diverseInfoJson = hjelpemiddel["bytter"] ?: return emptyList() - return jsonMapper.treeToValue(diverseInfoJson) -} - -class Søknadsdata(søknad: JsonNode, kommunenavn: String?) { - val bruker = bruker(søknad) - val formidler = formidler(søknad, kommunenavn) - val hjelpemidler = hjelpemidler(søknad) - val hjelpemiddelTotalAntall = søknad["soknad"]["hjelpemidler"]["hjelpemiddelTotaltAntall"].intValue() - val oppfolgingsansvarlig = oppfolgingsansvarlig(søknad) - val levering = levering(søknad) - val hast = hast(søknad) -} - -class Bruker( - val etternavn: String, - val fnummer: String, - val fornavn: String, - val telefonNummer: String, - val adresse: String?, - val postnummer: String?, - val poststed: String?, - val boform: String?, - val bruksarena: BruksarenaBruker, - val funksjonsnedsettelser: List, - val signatur: SignaturType, - val kroppsmaal: Kroppsmaal?, - val brukernummer: String?, - val bekreftedeVilkår: List, -) - -enum class BrukersituasjonVilkår { - NEDSATT_FUNKSJON, // Bruker har vesentlig og varig nedsatt funksjonsevne som følge av sykdom, skade eller lyte. Med varig menes 2 år eller livet ut. - STORRE_BEHOV, // Hjelpemiddelet(ene) er nødvendig for å avhjelpe praktiske problemer i dagliglivet eller bli pleid i hjemmet. Brukers behov kan ikke løses med enklere og rimeligere hjelpemidler eller ved andre tiltak som ikke dekkes av NAV. - PRAKTISKE_PROBLEM, // Hjelpemiddelet(ene) er egnet til å avhjelpe funksjonsnedsettelsen og bruker vil være i stand til å bruke det. - PRAKTISKE_PROBLEMER_I_DAGLIGLIVET_V1, // Hjelpemiddelet er nødvendig for å avhjelpe praktiske problemer i dagliglivet, eller for å bli pleid i hjemmet. - VESENTLIG_OG_VARIG_NEDSATT_FUNKSJONSEVNE_V1, // Bruker har vesentlig og varig nedsatt funksjonsevne som følge av sykdom, skade eller lyte. Med varig menes 2 år eller livet ut. Hjelpemiddelet skal ikke brukes til korttidsutlån eller til andre formål. - KAN_IKKE_LOESES_MED_ENKLERE_HJELPEMIDLER_V1, // Innbyggers behov kan ikke løses med enklere og rimeligere hjelpemidler, eller ved andre tiltak som ikke dekkes av NAV. - I_STAND_TIL_AA_BRUKE_HJELEPMIDLENE_V1, // Innbyggeren vil være i stand til å bruke hjelpemidlene. Jeg har ansvaret for at hjelpemidlene blir levert, og at nødvendig opplæring, tilpasning og montering blir gjort. -} - -enum class SignaturType { BRUKER_BEKREFTER, FULLMAKT, FRITAK_FRA_FULLMAKT, IKKE_INNHENTET_FORDI_BYTTE } -enum class BruksarenaBruker { DAGLIGLIVET, UKJENT } -enum class Funksjonsnedsettelse { BEVEGELSE, HØRSEL, KOGNISJON } - -data class Kroppsmaal( - val setebredde: Int?, - val laarlengde: Int?, - val legglengde: Int?, - val hoyde: Int?, - val kroppsvekt: Int?, -) - -class Formidler( - val navn: String, - val arbeidssted: String, - val stilling: String, - val adresse: String, - val telefon: String, - val treffesEnklest: String, - val epost: String, - val kommunenavn: String?, -) - -class Oppfolgingsansvarlig( - val navn: String, - val arbeidssted: String, - val stilling: String, - val telefon: String, - val ansvarFor: String, -) - -class Hjelpemiddel( - val antall: Int, - val arsakForAntall: String?, - val arsakForAntallBegrunnelse: String?, - val beskrivelse: String, - val hjelpemiddelkategori: String, - val hmsNr: String, - val tilleggsinformasjon: String, - var rangering: String?, - val utlevertFraHjelpemiddelsentralen: Boolean, - val vilkarliste: List?, - val tilbehorListe: List?, - val begrunnelse: String?, - val kanIkkeTilsvarande: Boolean, - val navn: String?, - val rullestolInfo: RullestolInfo?, - val elektriskRullestolInfo: ElektriskRullestolInfo?, - val personlofterInfo: PersonlofterInfo?, - val utlevertInfo: UtlevertInfo?, - val appInfo: AppInfo?, - val varmehjelpemiddelInfo: VarmehjelpemiddelInfo?, - val sengeInfo: SengeInfo?, - val elektriskVendesystemInfo: ElektriskVendesystemInfo?, - val ganghjelpemiddelInfo: GanghjelpemiddelInfo?, - val posisjoneringssystemInfo: PosisjoneringssystemInfo?, - val posisjoneringsputeForBarnInfo: PosisjoneringsputeForBarnInfo?, - val oppreisningsStolInfo: OppreisningsStolInfo?, - val diverseInfo: Map = emptyMap(), - val bytter: List = emptyList(), - val bruksarena: List? = null, // TODO Kan fjerne nullable når ny rammeavtale gangehjelpemidler er lansert (etter 2. jan 2023) -) - -enum class Bruksarena { - EGET_HJEM, - EGET_HJEM_IKKE_AVLASTNING, - OMSORGSBOLIG_BOFELLESKAP_SERVICEBOLIG, - BARNEHAGE, - GRUNN_ELLER_VIDEREGÅENDESKOLE, - SKOLEFRITIDSORDNING, - INSTITUSJON, - INSTITUSJON_BARNEBOLIG, - INSTITUSJON_BARNEBOLIG_IKKE_PERSONLIG_BRUK, -} - -data class Bytte( - val erTilsvarende: Boolean, - val hmsnr: String, - val serienr: String? = null, - val hjmNavn: String, - val hjmKategori: String, - val årsak: BytteÅrsak? = null, -) - -enum class BytteÅrsak { - UTSLITT, - VOKST_FRA, - ENDRINGER_I_INNBYGGERS_FUNKSJON, - FEIL_STØRRELSE, - VURDERT_SOM_ØDELAGT_AV_LOKAL_TEKNIKER, -} - -data class PosisjoneringsputeForBarnInfo( - val bruksområde: PosisjoneringsputeForBarnBruk?, - val brukerErOver26År: Boolean?, - val detErLagetEnMålrettetPlan: Boolean?, - val planenOppbevaresIKommunen: Boolean?, -) - -enum class PosisjoneringsputeForBarnBruk { - TILRETTELEGGE_UTGANGSSTILLING, - TRENING_AKTIVITET_STIMULERING, -} - -private fun posisjoneringsputeForBarnBruk(value: String?): PosisjoneringsputeForBarnBruk? { - return when (value) { - "TILRETTELEGGE_UTGANGSSTILLING" -> PosisjoneringsputeForBarnBruk.TILRETTELEGGE_UTGANGSSTILLING - "TRENING_AKTIVITET_STIMULERING" -> PosisjoneringsputeForBarnBruk.TRENING_AKTIVITET_STIMULERING - null -> null - else -> throw IllegalArgumentException("Ukjent enum verdi '$value'") - } -} - -data class PosisjoneringssystemInfo( - val skalIkkeBrukesSomBehandlingshjelpemiddel: Boolean?, - val skalIkkeBrukesTilRenSmertelindring: Boolean?, - val behov: PosisjoneringsputeBehov?, - val oppgaverIDagliglivet: List?, - val oppgaverIDagliglivetAnnet: String?, -) - -enum class PosisjoneringsputeBehov { - STORE_LAMMELSER, - DIREKTE_AVHJELPE_I_DAGLIGLIVET, -} - -private fun posisjoneringsputeBehov(value: String?): PosisjoneringsputeBehov? { - return when (value) { - "STORE_LAMMELSER" -> PosisjoneringsputeBehov.STORE_LAMMELSER - "DIREKTE_AVHJELPE_I_DAGLIGLIVET" -> PosisjoneringsputeBehov.DIREKTE_AVHJELPE_I_DAGLIGLIVET - null -> null - else -> throw IllegalArgumentException("Ukjent enum verdi '$value'") - } -} - -enum class PosisjoneringsputeOppgaverIDagligliv { - SPISE_DRIKKE_OL, - BRUKE_DATAUTSTYR, - FØLGE_OPP_BARN, - HOBBY_FRITID_U26, - ANNET, -} - -enum class BruksområdeGanghjelpemiddel { - TIL_FORFLYTNING, - TIL_TRENING_OG_ANNET, -} - -enum class GanghjelpemiddelType { - GÅBORD, - SPARKESYKKEL, - KRYKKE, - GÅTRENING, - GÅSTOL, -} - -data class GanghjelpemiddelInfo( - val brukerErFylt26År: Boolean?, - val hovedformålErForflytning: Boolean?, - val kanIkkeBrukeMindreAvansertGanghjelpemiddel: Boolean?, - val type: GanghjelpemiddelType?, - val bruksområde: BruksområdeGanghjelpemiddel?, - val detErLagetEnMålrettetPlan: Boolean?, - val planenOppbevaresIKommunen: Boolean?, -) - -data class ElektriskVendesystemInfo( - val sengForMontering: SengForVendesystemMontering?, - val standardLakenByttesTilRiktigStørrelseAvNav: Boolean?, -) - -data class SengForVendesystemMontering( - val hmsnr: String?, - val navn: String?, - val madrassbredde: Int?, -) - -data class SengeInfo( - val påkrevdBehov: String?, - val brukerOppfyllerPåkrevdBehov: Boolean?, - val behovForSeng: String?, - val behovForSengBegrunnelse: String?, - val madrassValg: MadrassValg?, - val høyGrindValg: HøyGrindValg?, -) - -data class VarmehjelpemiddelInfo( - val harHelseopplysningerFraFør: Boolean?, - val legeBekrefterDiagnose: Boolean?, - val opplysningerFraLegeOppbevaresIKommune: Boolean?, -) - -data class RullestolInfo( - val skalBrukesIBil: Boolean?, - val sitteputeValg: SitteputeValg?, -) - -data class AppInfo( - val brukerHarProvdProvelisens: Boolean, - val stottepersonSkalAdministrere: Boolean, - val stottepersonHarProvdProvelisens: Boolean?, -) - -data class PersonlofterInfo( - val harBehovForSeilEllerSele: Boolean, -) - -enum class SitteputeValg { - TrengerSittepute, - HarFraFor, - StandardSittepute, - LeggesTilSeparat, -} - -enum class MadrassValg { - TrengerMadrass, - HarFraFor, -} - -data class HøyGrindValg( - val erKjentMedTvangsAspekt: Boolean, - val harForsøktOpptrening: Boolean, - val harIkkeForsøktOpptreningBegrunnelse: String?, - val erLagetPlanForOppfølging: Boolean, -) - -data class UtlevertInfo( - val utlevertType: UtlevertType?, - val overførtFraBruker: String?, - val annenKommentar: String?, -) - -enum class UtlevertType { - FremskuttLager, - Korttidslån, - Overført, - Annet, -} - -class ElektriskRullestolInfo( - val godkjenningskurs: Boolean?, - val kanBetjeneManuellStyring: Boolean?, - val kanBetjeneMotorisertStyring: Boolean?, - val ferdesSikkertITrafikk: Boolean?, - val nedsattGangfunksjon: Boolean?, - val oppbevaringOgLagring: Boolean?, - val oppbevaringInfo: String?, - val kjentMedForsikring: Boolean?, - val harSpesialsykkel: Boolean?, - val plasseringAvHendel: HendelPlassering?, - val kabin: Kabin?, -) - -data class Kabin( - val brukerOppfyllerKrav: Boolean, - val kanIkkeAvhjelpesMedEnklereArsak: String?, - val kanIkkeAvhjelpesMedEnklereBegrunnelse: String?, - val arsakForBehovBegrunnelse: String?, -) - -enum class HendelPlassering { - Høyre, - Venstre, -} - -class Levering( - val kontaktPerson: KontaktPerson, - val leveringsmaate: Leveringsmaate?, - val adresse: String?, - val merknad: String?, - val tilleggsinfo: List, -) - -enum class LeveringTilleggsinfo { - UTLEVERING_KALENDERAPP, - ALLE_HJELPEMIDLER_ER_UTLEVERT, -} - -class KontaktPerson( - val navn: String? = null, - val telefon: String? = null, - val kontaktpersonType: KontaktpersonType, -) - -enum class Leveringsmaate { - FOLKEREGISTRERT_ADRESSE, - ANNEN_ADRESSE, - HJELPEMIDDELSENTRAL, - ALLEREDE_LEVERT, -} - -enum class KontaktpersonType { - HJELPEMIDDELBRUKER, - HJELPEMIDDELFORMIDLER, - ANNEN_KONTAKTPERSON, - INGEN_KONTAKTPERSON, -} - -class HjelpemiddelVilkar( - val vilkaarTekst: String, - val tilleggsinfo: String?, -) - -class Tilbehor( - val hmsnr: String, - val antall: Int?, - val navn: String, - val begrunnelse: String?, - val fritakFraBegrunnelseÅrsak: FritakFraBegrunnelseÅrsak?, -) - data class SøknadForBrukerOrdrelinje( val antall: Double, val antallEnhet: String, @@ -977,34 +152,3 @@ data class SøknadForBrukerOrdrelinje( return this } } - -data class OppreisningsStolInfo( - val kanBrukerReiseSegSelvFraVanligStol: Boolean, - val behov: List?, - val behovForStolBegrunnelse: String?, - val sideBetjeningsPanel: SideBetjeningsPanelPosisjon?, - val bruksområde: OppreisningsStolBruksområde?, - val annetTrekkKanBenyttes: Boolean, - val løftType: OppreisningsStolLøftType, -) - -enum class OppreisningsStolLøftType { - SKRÅLØFT, - RETTLØFT, -} - -enum class OppreisningsStolBruksområde { - EGEN_BOENHET, - FELLESAREAL, -} - -enum class OppreisningsStolBehov { - OPPGAVER_I_DAGLIGLIVET, - PLEID_I_HJEMMET, - FLYTTE_MELLOM_STOL_OG_RULLESTOL, -} - -enum class SideBetjeningsPanelPosisjon { - HØYRE, - VENSTRE, -} diff --git a/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/domain/kommuneapi/Valideringsmodell.kt b/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/domain/kommuneapi/Valideringsmodell.kt index 9443c98..95a47bd 100644 --- a/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/domain/kommuneapi/Valideringsmodell.kt +++ b/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/domain/kommuneapi/Valideringsmodell.kt @@ -12,13 +12,9 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonMapperBuilder import com.fasterxml.jackson.module.kotlin.readValue import no.nav.hjelpemidler.behovsmeldingsmodell.FritakFraBegrunnelseÅrsak +import no.nav.hjelpemidler.behovsmeldingsmodell.LeveringTilleggsinfo import no.nav.hjelpemidler.behovsmeldingsmodell.ÅrsakForAntall import no.nav.hjelpemidler.configuration.Environment -import no.nav.hjelpemidler.soknad.db.domain.BrukersituasjonVilkår -import no.nav.hjelpemidler.soknad.db.domain.Bruksarena -import no.nav.hjelpemidler.soknad.db.domain.HøyGrindValg -import no.nav.hjelpemidler.soknad.db.domain.LeveringTilleggsinfo -import no.nav.hjelpemidler.soknad.db.domain.VarmehjelpemiddelInfo import no.nav.hjelpemidler.soknad.db.rolle.Næringskode import java.util.UUID @@ -197,6 +193,16 @@ data class NedsattFunksjonTypes( val horsel: Boolean, ) +enum class BrukersituasjonVilkår { + NEDSATT_FUNKSJON, // Bruker har vesentlig og varig nedsatt funksjonsevne som følge av sykdom, skade eller lyte. Med varig menes 2 år eller livet ut. + STORRE_BEHOV, // Hjelpemiddelet(ene) er nødvendig for å avhjelpe praktiske problemer i dagliglivet eller bli pleid i hjemmet. Brukers behov kan ikke løses med enklere og rimeligere hjelpemidler eller ved andre tiltak som ikke dekkes av NAV. + PRAKTISKE_PROBLEM, // Hjelpemiddelet(ene) er egnet til å avhjelpe funksjonsnedsettelsen og bruker vil være i stand til å bruke det. + PRAKTISKE_PROBLEMER_I_DAGLIGLIVET_V1, // Hjelpemiddelet er nødvendig for å avhjelpe praktiske problemer i dagliglivet, eller for å bli pleid i hjemmet. + VESENTLIG_OG_VARIG_NEDSATT_FUNKSJONSEVNE_V1, // Bruker har vesentlig og varig nedsatt funksjonsevne som følge av sykdom, skade eller lyte. Med varig menes 2 år eller livet ut. Hjelpemiddelet skal ikke brukes til korttidsutlån eller til andre formål. + KAN_IKKE_LOESES_MED_ENKLERE_HJELPEMIDLER_V1, // Innbyggers behov kan ikke løses med enklere og rimeligere hjelpemidler, eller ved andre tiltak som ikke dekkes av NAV. + I_STAND_TIL_AA_BRUKE_HJELEPMIDLENE_V1, // Innbyggeren vil være i stand til å bruke hjelpemidlene. Jeg har ansvaret for at hjelpemidlene blir levert, og at nødvendig opplæring, tilpasning og montering blir gjort. +} + @JsonInclude(JsonInclude.Include.NON_NULL) data class Hjelpemidler( val hjelpemiddelListe: List, diff --git "a/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStore.kt" "b/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStore.kt" index af848ca..2c93c9d 100644 --- "a/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStore.kt" +++ "b/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStore.kt" @@ -157,7 +157,6 @@ class SøknadStore(private val tx: JdbcOperations, private val slackClient: Slac datoOpprettet = datoOpprettet, datoOppdatert = datoOppdatert, søknad = it.jsonOrNull("data") ?: jsonMapper.createObjectNode(), - kommunenavn = it.stringOrNull("kommunenavn"), fnrBruker = it.string("fnr_bruker"), er_digital = it.boolean("er_digital"), soknadGjelder = it.stringOrNull("soknad_gjelder"), diff --git "a/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreInnsender.kt" "b/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreInnsender.kt" index fc73196..33ee053 100644 --- "a/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreInnsender.kt" +++ "b/app/src/main/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreInnsender.kt" @@ -1,6 +1,5 @@ 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 @@ -13,7 +12,6 @@ import no.nav.hjelpemidler.database.enum import no.nav.hjelpemidler.database.json import no.nav.hjelpemidler.database.jsonOrNull import no.nav.hjelpemidler.database.sql.Sql -import no.nav.hjelpemidler.soknad.db.domain.Søknadsdata import no.nav.hjelpemidler.soknad.db.rolle.InnsenderRolle import java.time.LocalDateTime import java.util.Date @@ -164,7 +162,6 @@ class SøknadStoreInnsender(private val tx: JdbcOperations) : Store { fullmakt = it.boolean("fullmakt"), fnrBruker = it.string("fnr_bruker"), navnBruker = it.stringOrNull("navn_bruker"), - søknadsdata = Søknadsdata(it.json("data"), null), valgteÅrsaker = it.jsonOrNull?>("arsaker") ?: emptyList(), behovsmelding = tilInnsenderbehovsmeldingV2(it.json("data")), ) @@ -181,7 +178,6 @@ class SøknadForInnsender( val fullmakt: Boolean, val fnrBruker: String, val navnBruker: String?, - val søknadsdata: Søknadsdata? = null, val valgteÅrsaker: List, val behovsmelding: Innsenderbehovsmelding? = null, ) diff --git a/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/soknad/LagBehovsmeldingsgrunnlag.kt b/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/soknad/LagBehovsmeldingsgrunnlag.kt index f470cd4..48963a3 100644 --- a/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/soknad/LagBehovsmeldingsgrunnlag.kt +++ b/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/soknad/LagBehovsmeldingsgrunnlag.kt @@ -36,6 +36,8 @@ fun lagBehovsmeldingsgrunnlagDigital( "signatur": "FULLMAKT", "etternavn": "Etternavn", "telefonNummer": "12345678", + "adresse": "adresseveien 2", + "postnummer": "1234", "poststed": "poststed", "kommunenummer": "9999", "kroppsmaal": {} @@ -55,7 +57,7 @@ fun lagBehovsmeldingsgrunnlagDigital( { "uniqueKey": "1", "hmsNr": "123456", - "beskrivelse": "beskrivelse", + "beskrivelse": "Hjelpemiddelnavn", "begrunnelsen": "begrunnelse", "antall": 1, "navn": "Hjelpemiddelnavn", @@ -68,7 +70,7 @@ fun lagBehovsmeldingsgrunnlagDigital( "isocode": "11111111", "isotitle": "Isotittel", "aposttitle": "Delkontrakt", - "kategori": "Kategori" + "kategori": "Arbeidsstoler" }, "vilkarliste": [ { diff --git "a/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreInnsenderTest.kt" "b/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreInnsenderTest.kt" index 45f21c3..c5f4262 100644 --- "a/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreInnsenderTest.kt" +++ "b/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreInnsenderTest.kt" @@ -49,7 +49,7 @@ class SøknadStoreInnsenderTest { .hentSøknadForInnsender(fnrFormidler, søknadId, InnsenderRolle.FORMIDLER) .shouldNotBeNull { this.søknadId shouldBe søknadId - this.søknadsdata.shouldNotBeNull() + this.behovsmelding.shouldNotBeNull() } } } diff --git "a/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreTest.kt" "b/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreTest.kt" index 21c93f3..5f60bc0 100644 --- "a/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreTest.kt" +++ "b/app/src/test/kotlin/no/nav/hjelpemidler/soknad/db/store/S\303\270knadStoreTest.kt" @@ -9,10 +9,10 @@ import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe import no.nav.hjelpemidler.behovsmeldingsmodell.BehovsmeldingStatus import no.nav.hjelpemidler.behovsmeldingsmodell.Behovsmeldingsgrunnlag -import no.nav.hjelpemidler.soknad.db.domain.BruksarenaBruker -import no.nav.hjelpemidler.soknad.db.domain.Funksjonsnedsettelse -import no.nav.hjelpemidler.soknad.db.domain.LeveringTilleggsinfo -import no.nav.hjelpemidler.soknad.db.domain.SitteputeValg +import no.nav.hjelpemidler.behovsmeldingsmodell.LeveringTilleggsinfo +import no.nav.hjelpemidler.behovsmeldingsmodell.v2.Funksjonsnedsettelser +import no.nav.hjelpemidler.domain.geografi.Veiadresse +import no.nav.hjelpemidler.domain.person.Personnavn import no.nav.hjelpemidler.soknad.db.domain.lagFødselsnummer import no.nav.hjelpemidler.soknad.db.soknad.lagBehovsmeldingsgrunnlagDigital import no.nav.hjelpemidler.soknad.db.soknad.lagBehovsmeldingsgrunnlagPapir @@ -22,8 +22,8 @@ import no.nav.hjelpemidler.soknad.db.test.readMap import java.util.UUID import kotlin.test.Test import kotlin.test.assertEquals -import kotlin.test.assertNotNull import kotlin.test.assertNull +import kotlin.test.assertTrue class SøknadStoreTest { @Test @@ -35,55 +35,53 @@ class SøknadStoreTest { søknadStore.lagreBehovsmelding(lagBehovsmeldingsgrunnlagDigital(søknadId, fnrBruker = fnrBruker)) val søknad = søknadStore.hentSøknad(søknadId) - assertEquals(fnrBruker, søknad?.søknadsdata?.bruker?.fnummer) - assertEquals("Fornavn", søknad?.søknadsdata?.bruker?.fornavn) - assertEquals("Etternavn", søknad?.søknadsdata?.bruker?.etternavn) - assertEquals("12345678", søknad?.søknadsdata?.bruker?.telefonNummer) - assertNull(søknad?.søknadsdata?.bruker?.adresse) - assertNull(søknad?.søknadsdata?.bruker?.postnummer) - assertEquals("poststed", søknad?.søknadsdata?.bruker?.poststed) - assertEquals("formidlerFornavn formidlerEtternavn", søknad?.søknadsdata?.formidler?.navn) - assertEquals("arbeidssted", søknad?.søknadsdata?.formidler?.arbeidssted) - assertEquals("stilling", søknad?.søknadsdata?.formidler?.stilling) - assertEquals("postadresse arbeidssted 9999 poststed", søknad?.søknadsdata?.formidler?.adresse) - assertEquals("12345678", søknad?.søknadsdata?.formidler?.telefon) - assertEquals("treffesEnklest", søknad?.søknadsdata?.formidler?.treffesEnklest) - assertEquals("formidler@kommune.no", søknad?.søknadsdata?.formidler?.epost) - assertNull(søknad?.søknadsdata?.oppfolgingsansvarlig) - assertEquals("Hjemme", søknad?.søknadsdata?.bruker?.boform) - assertEquals(BruksarenaBruker.DAGLIGLIVET, søknad?.søknadsdata?.bruker?.bruksarena) + assertEquals(fnrBruker, søknad?.innsenderbehovsmelding!!.bruker.fnr.value) + assertEquals("Fornavn", søknad.innsenderbehovsmelding.bruker.navn.fornavn) + assertEquals("Etternavn", søknad.innsenderbehovsmelding.bruker.navn.etternavn) + assertEquals("12345678", søknad.innsenderbehovsmelding.bruker.telefon) + assertEquals("adresseveien 2", søknad.innsenderbehovsmelding.bruker.veiadresse?.adresse) + assertEquals("1234", søknad.innsenderbehovsmelding.bruker.veiadresse?.postnummer) + assertEquals("poststed", søknad.innsenderbehovsmelding.bruker.veiadresse?.poststed) assertEquals( - listOf(Funksjonsnedsettelse.BEVEGELSE, Funksjonsnedsettelse.HØRSEL), - søknad?.søknadsdata?.bruker?.funksjonsnedsettelser, + Personnavn("formidlerFornavn", etternavn = "formidlerEtternavn"), + søknad.innsenderbehovsmelding.levering.hjelpemiddelformidler.navn, ) - - assertEquals(2, søknad?.søknadsdata?.hjelpemiddelTotalAntall) - assertEquals(1, søknad?.søknadsdata?.hjelpemidler?.size) - assertEquals(1, søknad?.søknadsdata?.hjelpemidler?.first()?.antall) - assertEquals("Hjelpemiddelnavn", søknad?.søknadsdata?.hjelpemidler?.first()?.navn) - assertEquals("beskrivelse", søknad?.søknadsdata?.hjelpemidler?.first()?.beskrivelse) - assertEquals("Arbeidsstoler", søknad?.søknadsdata?.hjelpemidler?.first()?.hjelpemiddelkategori) - assertEquals("123456", søknad?.søknadsdata?.hjelpemidler?.first()?.hmsNr) - assertEquals("Tilleggsinformasjon", søknad?.søknadsdata?.hjelpemidler?.first()?.tilleggsinformasjon) - assertEquals("1", søknad?.søknadsdata?.hjelpemidler?.first()?.rangering) - assertEquals(true, søknad?.søknadsdata?.hjelpemidler?.first()?.utlevertFraHjelpemiddelsentralen) - assertEquals(1, søknad?.søknadsdata?.hjelpemidler?.first()?.vilkarliste?.size) + assertEquals("arbeidssted", søknad.innsenderbehovsmelding.levering.hjelpemiddelformidler.arbeidssted) + assertEquals("stilling", søknad.innsenderbehovsmelding.levering.hjelpemiddelformidler.stilling) assertEquals( - "Vilkår 1", - søknad?.søknadsdata?.hjelpemidler?.first()?.vilkarliste?.first()?.vilkaarTekst, + Veiadresse("postadresse arbeidssted", "9999", "poststed"), + søknad.innsenderbehovsmelding.levering.hjelpemiddelformidler.adresse, ) + assertEquals("12345678", søknad.innsenderbehovsmelding.levering.hjelpemiddelformidler.telefon) + assertEquals("treffesEnklest", søknad.innsenderbehovsmelding.levering.hjelpemiddelformidler.treffesEnklest) + assertEquals("formidler@kommune.no", søknad.innsenderbehovsmelding.levering.hjelpemiddelformidler.epost) + assertNull(søknad.innsenderbehovsmelding.levering.annenOppfølgingsansvarlig) + assertTrue(søknad.innsenderbehovsmelding.bruker.legacyopplysninger.any { it.ledetekst.nb == "Boform" && it.innhold.nb == "Hjemme" }) + assertTrue(søknad.innsenderbehovsmelding.bruker.legacyopplysninger.any { it.ledetekst.nb == "Bruksarena" && it.innhold.nb == "Dagliglivet" }) assertEquals( - "Tilleggsinfo", - søknad?.søknadsdata?.hjelpemidler?.first()?.vilkarliste?.first()?.tilleggsinfo, + setOf(Funksjonsnedsettelser.BEVEGELSE, Funksjonsnedsettelser.HØRSEL), + søknad.innsenderbehovsmelding.brukersituasjon.funksjonsnedsettelser, ) - assertEquals(1, søknad?.søknadsdata?.hjelpemidler?.first()?.tilbehorListe?.size) - assertEquals("654321", søknad?.søknadsdata?.hjelpemidler?.first()?.tilbehorListe?.first()?.hmsnr) - assertEquals("Tilbehør 1", søknad?.søknadsdata?.hjelpemidler?.first()?.tilbehorListe?.first()?.navn) - assertEquals(1, søknad?.søknadsdata?.hjelpemidler?.first()?.tilbehorListe?.first()?.antall) - assertEquals("begrunnelse", søknad?.søknadsdata?.hjelpemidler?.first()?.begrunnelse) - assertEquals(true, søknad?.søknadsdata?.hjelpemidler?.first()?.kanIkkeTilsvarande) - assertNull(søknad?.søknadsdata?.levering?.adresse) + assertEquals(2, søknad.innsenderbehovsmelding.hjelpemidler.totaltAntall) + assertEquals(1, søknad.innsenderbehovsmelding.hjelpemidler.hjelpemidler.size) + with(søknad.innsenderbehovsmelding.hjelpemidler.hjelpemidler.first()) { + assertEquals(1, antall) + assertEquals("Hjelpemiddelnavn", produkt.artikkelnavn) + assertEquals("Arbeidsstoler", produkt.sortimentkategori) + assertEquals("123456", produkt.hmsArtNr) + assertTrue(opplysninger.any { it.ledetekst.nb == "Kommentar" && it.innhold.first().fritekst == "Tilleggsinformasjon" }) + assertEquals(1, produkt.rangering) + assertEquals(true, utlevertinfo.alleredeUtlevertFraHjelpemiddelsentralen) + assertTrue(opplysninger.any { it.ledetekst.nb == "Behov" && it.innhold.first().fritekst == "Tilleggsinfo" }) + assertEquals(1, tilbehør.size) + assertEquals("654321", tilbehør.first().hmsArtNr) + assertEquals("Tilbehør 1", tilbehør.first().navn) + assertEquals(1, tilbehør.first().antall) + assertTrue(opplysninger.any { it.ledetekst.nb == "Kan ikke ha tilsvarende fordi" && it.innhold.first().fritekst == "begrunnelse" }) + } + + assertNull(søknad.innsenderbehovsmelding.levering.annenUtleveringsadresse) assertEquals(true, søknad?.er_digital) } @@ -219,11 +217,12 @@ class SøknadStoreTest { ), ) val hentSoknad = søknadStore.hentSøknad(søknadId) - assertEquals(fnrBruker, hentSoknad!!.søknadsdata!!.bruker.fnummer) + assertEquals(fnrBruker, hentSoknad!!.innsenderbehovsmelding!!.bruker.fnr.value) assertEquals(true, hentSoknad.er_digital) - assertEquals( - LeveringTilleggsinfo.UTLEVERING_KALENDERAPP, - hentSoknad.søknadsdata!!.levering.tilleggsinfo.first(), + assertTrue( + hentSoknad.innsenderbehovsmelding!!.levering.automatiskUtledetTilleggsinfo.contains( + LeveringTilleggsinfo.UTLEVERING_KALENDERAPP, + ), ) } } @@ -454,20 +453,29 @@ class SøknadStoreTest { testTransaction { søknadStore.lagreBehovsmelding(mockSøknadMedRullestol(søknadId)) val søknad = søknadStore.hentSøknad(søknadId) + val hjelpemiddel = søknad!!.innsenderbehovsmelding!!.hjelpemidler.hjelpemidler.first() + + assertEquals(5, hjelpemiddel.opplysninger.size) + assertTrue( + hjelpemiddel.opplysninger.any { + it.ledetekst.nb == "Bil" && + it.innhold.first().forhåndsdefinertTekst!!.nb == "Rullestolen skal brukes som sete i bil" + }, + ) - assertNotNull(søknad?.søknadsdata?.bruker?.kroppsmaal) - assertEquals(176, søknad?.søknadsdata?.bruker?.kroppsmaal?.hoyde) - assertEquals(99, søknad?.søknadsdata?.bruker?.kroppsmaal?.kroppsvekt) - assertEquals(23, søknad?.søknadsdata?.bruker?.kroppsmaal?.legglengde) - assertEquals(56, søknad?.søknadsdata?.bruker?.kroppsmaal?.laarlengde) - assertEquals(23, søknad?.søknadsdata?.bruker?.kroppsmaal?.setebredde) + assertTrue( + hjelpemiddel.opplysninger.any { + it.ledetekst.nb == "Kroppsmål" && + it.innhold.first().forhåndsdefinertTekst!!.nb == "Setebredde: 23 cm, legglengde: 23 cm, lårlengde: 56 cm, høyde: 176 cm, kroppsvekt: 99 kg." + }, + ) - assertNotNull(søknad?.søknadsdata?.hjelpemidler?.first()?.rullestolInfo) - assertEquals( - SitteputeValg.TrengerSittepute, - søknad?.søknadsdata?.hjelpemidler?.first()?.rullestolInfo?.sitteputeValg, + assertTrue( + hjelpemiddel.opplysninger.any { + it.ledetekst.nb == "Sittepute" && + it.innhold.first().forhåndsdefinertTekst!!.nb == "Bruker skal ha sittepute" + }, ) - assertEquals(true, søknad?.søknadsdata?.hjelpemidler?.first()?.rullestolInfo?.skalBrukesIBil) } } }