diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/partials/DetaljertSykemelding.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/partials/DetaljertSykemelding.tsx index d1af31c44de..464a9478002 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/partials/DetaljertSykemelding.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/partials/DetaljertSykemelding.tsx @@ -7,13 +7,17 @@ import { Kategori } from '@/components/ui/form/kategori/Kategori' import { SelectOptionsManager as Options } from '@/service/SelectOptions' import { OrganisasjonMedArbeidsforholdSelect } from '@/components/organisasjonSelect' import { SelectOptionsDiagnoser } from './SelectOptionsDiagnoser' -import HelsepersonellSelect from './HelsepersonellSelect' import { ArbeidKodeverk } from '@/config/kodeverk' import { Arbeidsgiver, Helsepersonell, SykemeldingForm, } from '@/components/fagsystem/sykdom/SykemeldingTypes' +import { useKodeverk } from '@/utils/hooks/useKodeverk' +import { getRandomValue } from '@/components/fagsystem/utils' +import { useEffect } from 'react' +import * as _ from 'lodash-es' +import { useHelsepersonellOptions } from '@/utils/hooks/useSelectOptions' type DiagnoseSelect = { diagnoseNavn: string @@ -68,6 +72,28 @@ export const DetaljertSykemelding = ({ formikBag }: SykemeldingForm) => { }) } + const { kodeverk: yrker } = useKodeverk(ArbeidKodeverk.Yrker) + const randomYrke = getRandomValue(yrker?.koder) + + useEffect(() => { + const yrkePath = 'sykemelding.detaljertSykemelding.arbeidsgiver.yrkesbetegnelse' + if (_.get(formikBag.values, yrkePath) === '') { + formikBag.setFieldValue(yrkePath, randomYrke?.value || '') + } + }, [randomYrke]) + + const { helsepersonellOptions, helsepersonellError } = useHelsepersonellOptions() + const randomHelsepersonell = getRandomValue(helsepersonellOptions) + + useEffect(() => { + if ( + _.get(formikBag.values, 'sykemelding.detaljertSykemelding.helsepersonell.ident') === '' && + randomHelsepersonell + ) { + handleLegeChange(randomHelsepersonell) + } + }, [randomHelsepersonell]) + return (
@@ -114,10 +140,14 @@ export const DetaljertSykemelding = ({ formikBag }: SykemeldingForm) => { )} - handleLegeChange(v)} + isClearable={false} + feil={helsepersonellError} /> @@ -177,17 +207,17 @@ export const DetaljertSykemelding = ({ formikBag }: SykemeldingForm) => { { - function mapSamhandlerType(samhandlerType: string) { - switch (samhandlerType) { - case 'KI': - return 'KIROPRAKTOR' - case 'LE': - return 'LEGE' - case 'FT': - return 'FYSIOTERAPEUT' - case 'TL': - return 'TANNLEGE' - case 'MT': - return 'MANUELLTERAPEUT' - default: - return samhandlerType - } - } - - return ( - - - SelectOptionsOppslag.hentHelsepersonell().then((response) => - response.helsepersonell.map((helsepersonell: Option) => ({ - value: helsepersonell.fnr, - label: `${helsepersonell.fnr} - ${helsepersonell.fornavn} - ${helsepersonell.mellomnavn ? helsepersonell.mellomnavn : ''} - ${helsepersonell.etternavn} - (${mapSamhandlerType(helsepersonell.samhandlerType)})`, - fnr: helsepersonell.fnr, - fornavn: helsepersonell.fornavn, - mellomnavn: helsepersonell.mellomnavn, - etternavn: helsepersonell.etternavn, - hprId: helsepersonell.hprId, - samhandlerType: mapSamhandlerType(helsepersonell.samhandlerType), - })) - ) - } - render={(data: Array - ) -} diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/partials/Sykemelding.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/partials/Sykemelding.tsx index 80637368c4a..8593a03942c 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/partials/Sykemelding.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/partials/Sykemelding.tsx @@ -4,6 +4,11 @@ import { SyntSykemelding } from './SyntSykemelding' import { DetaljertSykemelding } from './DetaljertSykemelding' import { Diagnose, SykemeldingForm } from '@/components/fagsystem/sykdom/SykemeldingTypes' import { ToggleGroup } from '@navikt/ds-react' +import { addDays } from 'date-fns' +import { getRandomValue } from '@/components/fagsystem/utils' +import { SelectOptionsDiagnoser } from '@/components/fagsystem/sykdom/form/partials/SelectOptionsDiagnoser' + +const randomDiagnose = getRandomValue(SelectOptionsDiagnoser()) const initialValuesSyntSykemelding = { syntSykemelding: { @@ -28,9 +33,9 @@ const initialValuesDetaljertSykemelding = { tiltakNav: '', }, hovedDiagnose: { - diagnose: '', - diagnosekode: '', - system: '', + diagnose: randomDiagnose?.diagnoseNavn || '', + diagnosekode: randomDiagnose?.value || '', + system: randomDiagnose ? '2.16.578.1.12.4.1.1.7170' : '', }, helsepersonell: { etternavn: '', @@ -59,8 +64,8 @@ const initialValuesDetaljertSykemelding = { grad: 0, reisetilskudd: false, }, - fom: '', - tom: '', + fom: addDays(new Date(), -7), + tom: addDays(new Date(), -1), }, ], startDato: new Date(), diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx index 310cb611c51..79c7148436e 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx @@ -4,28 +4,105 @@ import { SyntSykemelding } from './partials/SyntSykemelding' import { DetaljertSykemelding } from './partials/DetaljertSykemelding' import { Sykemelding, SykemeldingDetaljert, SykemeldingSynt } from '../SykemeldingTypes' import { erGyldig } from '@/components/transaksjonid/GyldigeBestillinger' +import { Alert } from '@navikt/ds-react' +import React from 'react' +import { MiljoTabs } from '@/components/ui/miljoTabs/MiljoTabs' +import { useBestilteMiljoer } from '@/utils/hooks/useBestilling' +import Loading from '@/components/ui/loading/Loading' -export const SykemeldingVisning = ({ data }: Sykemelding) => { - // Viser foreløpig bestillingsdata - if (!data || data.length < 1) { +export const sjekkManglerSykemeldingData = (sykemeldingData) => { + return ( + !sykemeldingData || + sykemeldingData?.length < 1 || + sykemeldingData?.every((miljoData) => !miljoData.data) + ) +} + +export const sjekkManglerSykemeldingBestilling = (sykemeldingBestilling) => { + return !sykemeldingBestilling || sykemeldingBestilling?.length < 1 +} + +const VisningAvBestilling = ({ bestillinger }) => { + if (!bestillinger) { return null } + return bestillinger?.map((bestilling: SykemeldingSynt | SykemeldingDetaljert, idx: number) => { + if (!bestilling.erGjenopprettet) { + const syntSykemelding = _.get(bestilling, 'data.sykemelding.syntSykemelding') + const detaljertSykemelding = _.get(bestilling, 'data.sykemelding.detaljertSykemelding') + + return syntSykemelding ? ( + + ) : detaljertSykemelding ? ( + + ) : null + } + }) +} + +const VisningAvTransaksjonsId = ({ data }) => { + if (!data) { + return null + } + + const syntSykemelding = _.get(data, 'syntSykemeldingRequest') + const detaljertSykemelding = _.get(data, 'detaljertSykemeldingRequest') + + return syntSykemelding ? ( + + ) : detaljertSykemelding ? ( + + ) : null +} + +export const SykemeldingVisning = ({ + data, + loading, + bestillingIdListe, + tilgjengeligMiljoe, + bestillinger, +}: Sykemelding) => { + const { bestilteMiljoer } = useBestilteMiljoer(bestillingIdListe, 'SYKEMELDING') + + if (loading) { + return + } + + if (!data && !bestillinger) { + return null + } + + const manglerFagsystemData = + sjekkManglerSykemeldingData(data) && sjekkManglerSykemeldingBestilling(bestillinger) + + const miljoerMedData = data?.map((miljoData) => miljoData.data && miljoData.miljo) + const errorMiljoer = bestilteMiljoer?.filter((miljo) => !miljoerMedData?.includes(miljo)) + + const forsteMiljo = data?.find((miljoData) => miljoData?.data)?.miljo + + const filteredData = + tilgjengeligMiljoe && data?.filter((item) => item.miljo === tilgjengeligMiljoe) + return (
- - {data.map((bestilling: SykemeldingSynt | SykemeldingDetaljert, idx: number) => { - if (!bestilling.erGjenopprettet) { - const syntSykemelding = _.get(bestilling, 'data.sykemelding.syntSykemelding') - const detaljertSykemelding = _.get(bestilling, 'data.sykemelding.detaljertSykemelding') - - return syntSykemelding ? ( - - ) : detaljertSykemelding ? ( - - ) : null - } - })} + + {manglerFagsystemData ? ( + + Fant ikke sykemelding-data på person + + ) : sjekkManglerSykemeldingData(data) ? ( + + ) : ( + + + + )}
) } @@ -34,6 +111,7 @@ SykemeldingVisning.filterValues = (bestillinger: Array, ident: stri if (!bestillinger) { return null } + return bestillinger.filter( (bestilling: any) => bestilling.data.sykemelding && erGyldig(bestilling.id, 'SYKEMELDING', ident), diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/partials/DetaljertSykemelding.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/partials/DetaljertSykemelding.tsx index 036bad7be97..68b98a77b40 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/partials/DetaljertSykemelding.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/partials/DetaljertSykemelding.tsx @@ -5,74 +5,96 @@ import { Bidiagnoser } from './Bidiagnoser' import { Perioder } from './Perioder' import { ArbeidKodeverk } from '@/config/kodeverk' import { SykemeldingDetaljert } from '@/components/fagsystem/sykdom/SykemeldingTypes' +import styled from 'styled-components' -export const DetaljertSykemelding = ({ sykemelding, idx }: SykemeldingDetaljert) => ( -
- -
- - - -
- <> -

Diagnose

-
- - -
- - - <> -

Helsepersonell

-
- - - - -
- - <> -

Arbeidsgiver

-
- - - -
- - - <> -

Detaljer

+export const SykemeldingKategori = styled.div` + width: 100%; + h4 { + margin-top: 5px; + margin-bottom: 15px; + } +` + +export const DetaljertSykemelding = ({ sykemelding, idx }: SykemeldingDetaljert) => { + return ( +
+
- - +
- -
-
-) + <> + +

Diagnose

+
+
+ + +
+ + + <> + +

Helsepersonell

+
+
+ + + + +
+ + <> + +

Arbeidsgiver

+
+
+ + + +
+ + + <> + +

Detaljer

+
+
+ + + + +
+ +
+
+ ) +} diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/partials/Perioder.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/partials/Perioder.tsx index d5ecb16bfd6..d3928770f01 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/partials/Perioder.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/partials/Perioder.tsx @@ -3,6 +3,7 @@ import { TitleValue } from '@/components/ui/titleValue/TitleValue' import { formatStringDates, oversettBoolean } from '@/utils/DataFormatter' import { Periode } from '@/components/fagsystem/sykdom/SykemeldingTypes' import { ErrorBoundary } from '@/components/ui/appError/ErrorBoundary' +import { SykemeldingKategori } from '@/components/fagsystem/sykdom/visning/partials/DetaljertSykemelding' type PerioderProps = { data: Array @@ -14,7 +15,9 @@ export const Perioder = ({ data }: PerioderProps) => { } return ( <> -

Perioder

+ +

Perioder

+
{(periode: Periode, idx: string) => ( diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/utils.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/utils.tsx index 34fc1964f31..c806afaf1e7 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/utils.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/utils.tsx @@ -23,11 +23,11 @@ export const testDatoTom = (val, fomPath, feilmelding = 'Dato må være etter fr export const getEksisterendeNyPerson = ( relasjoner: Array, ident: String, - relasjonTyper: Array + relasjonTyper: Array, ) => { const relasjon = relasjoner?.find( (relasjon) => - relasjon?.relatertPerson?.ident === ident && relasjonTyper.includes(relasjon.relasjonType) + relasjon?.relatertPerson?.ident === ident && relasjonTyper.includes(relasjon.relasjonType), ) if (!relasjon) { @@ -39,3 +39,11 @@ export const getEksisterendeNyPerson = ( label: `${relasjon?.relatertPerson?.ident} - ${relasjon?.relatertPerson?.navn?.[0]?.fornavn} ${relasjon?.relatertPerson?.navn?.[0]?.etternavn}`, } } + +export const getRandomValue = (liste: Array) => { + if (!liste || liste?.length < 1) { + return null + } + const random = Math.floor(Math.random() * liste.length) //NOSONAR not used in secure contexts + return liste[random] +} diff --git a/apps/dolly-frontend/src/main/js/src/components/transaksjonid/GyldigeBestillinger.tsx b/apps/dolly-frontend/src/main/js/src/components/transaksjonid/GyldigeBestillinger.tsx index 485127c7aa2..5ddac947396 100644 --- a/apps/dolly-frontend/src/main/js/src/components/transaksjonid/GyldigeBestillinger.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/transaksjonid/GyldigeBestillinger.tsx @@ -1,19 +1,6 @@ -import { useAsync } from 'react-use' -import { DollyApi } from '@/service/Api' - -type Bestilling = { - data: Array -} - -type BestillingData = { - status: string -} +import { useTransaksjonsid } from '@/utils/hooks/useTransaksjonsid' export const erGyldig = (bestillingId: number, system: string, ident: string) => { - const finnBestilling = useAsync(async () => { - const response: Bestilling = await DollyApi.getTransaksjonid(system, ident, bestillingId) - return response.data - }, []) - - return finnBestilling.value && finnBestilling.value.length > 0 + const { transaksjonsid, loading } = useTransaksjonsid(system, ident, bestillingId) + return !loading && transaksjonsid && transaksjonsid.length > 0 } diff --git a/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx b/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx index 52de956d34d..d783ca41484 100644 --- a/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx +++ b/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx @@ -60,6 +60,7 @@ import { harInstBestilling, harMedlBestilling, harPoppBestilling, + harSykemeldingBestilling, harTpBestilling, harUforetrygdBestilling, } from '@/utils/SjekkBestillingFagsystem' @@ -73,6 +74,10 @@ import _has from 'lodash/has' import { MedlVisning } from '@/components/fagsystem/medl/visning' import { useMedlPerson } from '@/utils/hooks/useMedl' import StyledAlert from '@/components/ui/alert/StyledAlert' +import { + sjekkManglerSykemeldingBestilling, + sjekkManglerSykemeldingData, +} from '@/components/fagsystem/sykdom/visning/Visning' import { sjekkManglerUforetrygdData, UforetrygdVisning, @@ -174,7 +179,9 @@ export default ({ const { loading: loadingArenaData, arenaData } = useArenaData( ident.ident, - harArenaBestilling(bestillingerFagsystemer), + harArenaBestilling(bestillingerFagsystemer) || + (harAaregBestilling(bestillingerFagsystemer) && + harSykemeldingBestilling(bestillingerFagsystemer)), ) const { pensjonEnvironments } = usePensjonEnvironments() @@ -193,6 +200,14 @@ export default ({ pensjonEnvironments, ) + const { loading: loadingSykemeldingData, data: sykemeldingData } = useTransaksjonIdData( + ident.ident, + 'SYKEMELDING', + harSykemeldingBestilling(bestillingerFagsystemer), + ) + + const sykemeldingBestilling = SykemeldingVisning.filterValues(bestillingListe, ident.ident) + const getGruppeIdenter = () => { return useAsync(async () => DollyApi.getGruppeById(gruppeId), [DollyApi.getGruppeById]) } @@ -239,7 +254,14 @@ export default ({ if (instData && sjekkManglerInstData(instData)) { return true } - + if ( + sykemeldingData && + sjekkManglerSykemeldingData(sykemeldingData) && + harSykemeldingBestilling(bestillingerFagsystemer) && + sjekkManglerSykemeldingBestilling(sykemeldingBestilling) + ) { + return true + } return false } @@ -432,7 +454,15 @@ export default ({ ident={ident} tilgjengeligMiljoe={tilgjengeligMiljoe} /> - + Api.fetchJson(`${helse_uri}/helsepersonell`, { method: 'GET' }), - hentKrrLeverandoerer: () => { return useAsync(async () => KrrApi.getSdpLeverandoerListe(), [KrrApi.getSdpLeverandoerListe]) }, @@ -95,7 +92,7 @@ export const SelectOptionsOppslag = { hentArbeidsforholdstyperInntektstub: () => { return useAsync( async () => DollyApi.getKodeverkByNavn('Arbeidsforholdstyper'), - [DollyApi.getKodeverkByNavn] + [DollyApi.getKodeverkByNavn], ) }, @@ -156,7 +153,7 @@ export const SelectOptionsOppslag = { personInfo.fnr options.push({ value: personInfo.fnr, label: navnOgFnr }) } - } + }, ) return options } else if (type === 'arbeidsforholdstyper') { diff --git a/apps/dolly-frontend/src/main/js/src/utils/SjekkBestillingFagsystem.tsx b/apps/dolly-frontend/src/main/js/src/utils/SjekkBestillingFagsystem.tsx index dd772454d8a..d4fb7028804 100644 --- a/apps/dolly-frontend/src/main/js/src/utils/SjekkBestillingFagsystem.tsx +++ b/apps/dolly-frontend/src/main/js/src/utils/SjekkBestillingFagsystem.tsx @@ -107,3 +107,13 @@ export const harArenaBestilling = (bestillingerFagsystemer) => { }) return arena } + +export const harSykemeldingBestilling = (bestillingerFagsystemer) => { + let sykemelding = false + bestillingerFagsystemer?.forEach((i) => { + if (i.sykemelding) { + sykemelding = true + } + }) + return sykemelding +} diff --git a/apps/dolly-frontend/src/main/js/src/utils/hooks/useSelectOptions.tsx b/apps/dolly-frontend/src/main/js/src/utils/hooks/useSelectOptions.tsx index eb3f9dc5e19..55caeb22f02 100644 --- a/apps/dolly-frontend/src/main/js/src/utils/hooks/useSelectOptions.tsx +++ b/apps/dolly-frontend/src/main/js/src/utils/hooks/useSelectOptions.tsx @@ -1,5 +1,5 @@ import useSWR from 'swr' -import { multiFetcherAll } from '@/api' +import { fetcher, multiFetcherAll } from '@/api' const sliceGruppe = (gruppe, maxAntall, url) => { let urlListe = [] @@ -56,18 +56,18 @@ export const useTestnorgeOptions = (gruppe) => { } const relasjoner = [] as Array person.forelderBarnRelasjon?.forEach((relasjon) => - relasjoner.push(relasjon.relatertPersonsIdent) + relasjoner.push(relasjon.relatertPersonsIdent), ) person.fullmakt?.forEach((relasjon) => relasjoner.push(relasjon.motpartsPersonident)) person.kontaktinformasjonForDoedsbo?.forEach((relasjon) => - relasjoner.push(relasjon.personSomKontakt?.identifikasjonsnummer) + relasjoner.push(relasjon.personSomKontakt?.identifikasjonsnummer), ) person.sivilstand?.forEach( (relasjon) => - relasjon.relatertVedSivilstand && relasjoner.push(relasjon.relatertVedSivilstand) + relasjon.relatertVedSivilstand && relasjoner.push(relasjon.relatertVedSivilstand), ) person.vergemaalEllerFremtidsfullmakt?.forEach((relasjon) => - relasjoner.push(relasjon.vergeEllerFullmektig?.motpartsPersonident) + relasjoner.push(relasjon.vergeEllerFullmektig?.motpartsPersonident), ) return relasjoner } @@ -90,3 +90,45 @@ export const useTestnorgeOptions = (gruppe) => { error: gruppe ? error : undefined, } } + +export const useHelsepersonellOptions = () => { + function mapSamhandlerType(samhandlerType: string) { + switch (samhandlerType) { + case 'KI': + return 'KIROPRAKTOR' + case 'LE': + return 'LEGE' + case 'FT': + return 'FYSIOTERAPEUT' + case 'TL': + return 'TANNLEGE' + case 'MT': + return 'MANUELLTERAPEUT' + default: + return samhandlerType + } + } + + const { data, isLoading, error } = useSWR( + '/testnav-helsepersonell-service/api/v1/helsepersonell', + fetcher, + ) + + const options = data?.helsepersonell?.map((helsepersonell) => ({ + value: helsepersonell.fnr, + label: `${helsepersonell.fnr} - ${helsepersonell.fornavn} ${ + helsepersonell.mellomnavn ? helsepersonell.mellomnavn : '' + } ${helsepersonell.etternavn} (${mapSamhandlerType(helsepersonell.samhandlerType)})`, + fnr: helsepersonell.fnr, + fornavn: helsepersonell.fornavn, + mellomnavn: helsepersonell.mellomnavn, + etternavn: helsepersonell.etternavn, + hprId: helsepersonell.hprId, + samhandlerType: mapSamhandlerType(helsepersonell.samhandlerType), + })) + return { + helsepersonellOptions: options, + loading: isLoading, + helsepersonellError: error, + } +}