diff --git a/components/SoknadFormWrapper/SlettModal.tsx b/components/SoknadFormWrapper/SlettModal.tsx index 9ea80db5..1831d91e 100644 --- a/components/SoknadFormWrapper/SlettModal.tsx +++ b/components/SoknadFormWrapper/SlettModal.tsx @@ -15,7 +15,7 @@ interface Props { const SlettModal = ({ isOpen, onClose }: Props) => { const [isDeletingSøknad, setIsDeletingSøknad] = useState(false); const [slettSøknadSuccess, setSlettSøknadSuccess] = useState(false); - const { søknadState, søknadDispatch } = useSoknad(); + const { søknadState } = useSoknad(); const { formatMessage } = useIntl(); const router = useRouter(); diff --git a/components/pageComponents/standard/Behandlere/Behandlere.tsx b/components/pageComponents/standard/Behandlere/Behandlere.tsx index 0851b574..6f67c62d 100644 --- a/components/pageComponents/standard/Behandlere/Behandlere.tsx +++ b/components/pageComponents/standard/Behandlere/Behandlere.tsx @@ -27,7 +27,7 @@ interface Props { export const getBehandlerSchema = (formatMessage: IntlFormatters['formatMessage']) => yup.object().shape({ - registrerteBehandlere: yup.array().of( + fastlege: yup.array().of( yup.object().shape({ erRegistrertFastlegeRiktig: yup .string() @@ -52,7 +52,7 @@ export const Behandlere = ({ onBackClick }: Props) => { useEffect(() => { debouncedLagre(søknadState, stepList, {}); - }, [søknadState.søknad?.andreBehandlere, søknadState.søknad?.registrerteBehandlere]); + }, [søknadState.søknad?.andreBehandlere, søknadState.søknad?.fastlege]); function clearErrors() { setErrors(undefined); @@ -112,18 +112,18 @@ export const Behandlere = ({ onBackClick }: Props) => { {formatMessage({ id: 'søknad.helseopplysninger.registrertFastlege.title' })} - {søknadState?.søknad?.registrerteBehandlere?.length === 0 && ( + {søknadState?.søknad?.fastlege?.length === 0 && ( {formatMessage({ id: 'søknad.helseopplysninger.registrertFastlege.ingenFastlege' })} )} - {søknadState?.søknad?.registrerteBehandlere?.map((registrertBehandler, index) => ( + {søknadState?.søknad?.fastlege?.map((fastlege, index) => ( ))} diff --git a/components/pageComponents/standard/Behandlere/BehandlereValidation.test.ts b/components/pageComponents/standard/Behandlere/BehandlereValidation.test.ts index ec67a6fc..6c2be77a 100644 --- a/components/pageComponents/standard/Behandlere/BehandlereValidation.test.ts +++ b/components/pageComponents/standard/Behandlere/BehandlereValidation.test.ts @@ -1,39 +1,30 @@ import { JaEllerNei } from 'types/Generic'; import { getBehandlerSchema } from './Behandlere'; +import { Fastlege } from 'pages/api/oppslag/fastlege'; describe('Behandlere validation', () => { const schema = getBehandlerSchema(jest.fn()); - const registrertBehandler = { - type: 'FASTLEGE', - navn: { fornavn: 'Lise', etternavn: 'Legesen' }, - kategori: 'LEGE', + const fastlege: Fastlege = { + navn: 'Lise Legesen', + behandlerRef: 'd182f24b-ebca-4f44-bf86-65901ec6141b', kontaktinformasjon: { - behandlerRef: 'd182f24b-ebca-4f44-bf86-65901ec6141b', kontor: 'ASKØY KOMMUNE SAMFUNNSMEDISINSK AVD ALMENNLEGETJENESTEN', - orgnummer: '976673867', - adresse: { - adressenavn: 'Kleppeveien', - husnummer: '17', - postnummer: { - postnr: '5300', - poststed: 'KLEPPESTØ', - }, - }, + adresse: 'Kleppeveien 17, 5300 KLEPPESTØ', telefon: '99 99 99 99', }, }; it('ingenting registrerte behandlere', async () => { const form = { - registrerteBehandlere: [], + fastlege: [], }; const result = await schema.validate(form, { abortEarly: false }).catch((err) => err); expect(result).toStrictEqual(form); }); it('har registrert behandler, info er riktig', async () => { const form = { - registrerteBehandlere: [ + fastlege: [ { - ...registrertBehandler, + ...fastlege, erRegistrertFastlegeRiktig: JaEllerNei.JA, }, ], @@ -43,9 +34,9 @@ describe('Behandlere validation', () => { }); it('har registrert behandler, info er feil', async () => { const form = { - registrerteBehandlere: [ + fastlege: [ { - ...registrertBehandler, + ...fastlege, erRegistrertFastlegeRiktig: JaEllerNei.NEI, }, ], @@ -55,9 +46,9 @@ describe('Behandlere validation', () => { }); it('har registrert behandler, må svare om info er riktig', async () => { const form = { - registrerteBehandlere: [ + fastlege: [ { - ...registrertBehandler, + ...fastlege, }, ], }; diff --git a/components/pageComponents/standard/Behandlere/RegistrertBehandler.tsx b/components/pageComponents/standard/Behandlere/RegistrertBehandler.tsx index 35156ce8..0c55f2e9 100644 --- a/components/pageComponents/standard/Behandlere/RegistrertBehandler.tsx +++ b/components/pageComponents/standard/Behandlere/RegistrertBehandler.tsx @@ -1,25 +1,20 @@ import * as classes from './Behandlere.module.css'; import { Alert, BodyShort, Label, Radio, RadioGroup } from '@navikt/ds-react'; -import { formatFullAdresse, formatNavn, formatTelefonnummer } from 'utils/StringFormatters'; +import { formatTelefonnummer } from 'utils/StringFormatters'; import { JaEllerNei } from 'types/Generic'; import React from 'react'; import { useIntl } from 'react-intl'; -import { RegistrertBehandler as RegistrertBehandlerType } from 'types/Soknad'; +import { RegistrertFastlege } from 'types/Soknad'; import { useSoknad } from 'hooks/SoknadHook'; import { updateSøknadData } from 'context/soknadcontext/actions'; interface Props { - registrertBehandler: RegistrertBehandlerType; + fastlege: RegistrertFastlege; index: number; clearErrors: () => void; errorMessage?: string; } -export const RegistrertBehandler = ({ - registrertBehandler, - index, - clearErrors, - errorMessage, -}: Props) => { +export const RegistrertBehandler = ({ fastlege, index, clearErrors, errorMessage }: Props) => { const { formatMessage } = useIntl(); const { søknadState, søknadDispatch } = useSoknad(); @@ -31,7 +26,7 @@ export const RegistrertBehandler = ({ {formatMessage({ id: 'søknad.helseopplysninger.registrertFastlege.navn' })} -
{formatNavn(registrertBehandler.navn)}
+
{fastlege.navn}
-
{registrertBehandler.kontaktinformasjon.kontor}
+
{fastlege.kontaktinformasjon.kontor}
-
{formatFullAdresse(registrertBehandler.kontaktinformasjon.adresse)}
+
{fastlege.kontaktinformasjon.adresse}
-
{formatTelefonnummer(registrertBehandler.kontaktinformasjon.telefon)}
+
{formatTelefonnummer(fastlege.kontaktinformasjon.telefon)}
{ clearErrors(); updateSøknadData(søknadDispatch, { - registrerteBehandlere: søknadState.søknad?.registrerteBehandlere?.map((behandler) => { - if ( - behandler.kontaktinformasjon.behandlerRef === - registrertBehandler.kontaktinformasjon.behandlerRef - ) { + fastlege: søknadState.søknad?.fastlege?.map((behandler) => { + if (behandler.behandlerRef === fastlege.behandlerRef) { return { ...behandler, erRegistrertFastlegeRiktig: value }; } else { return behandler; @@ -87,7 +79,7 @@ export const RegistrertBehandler = ({ {JaEllerNei.NEI} - {registrertBehandler.erRegistrertFastlegeRiktig === JaEllerNei.NEI && ( + {fastlege.erRegistrertFastlegeRiktig === JaEllerNei.NEI && ( {formatMessage({ id: 'søknad.helseopplysninger.erRegistrertFastlegeRiktig.alertInfo', diff --git a/components/pageComponents/standard/Oppsummering/Oppsummering.tsx b/components/pageComponents/standard/Oppsummering/Oppsummering.tsx index 58023213..c96efb51 100644 --- a/components/pageComponents/standard/Oppsummering/Oppsummering.tsx +++ b/components/pageComponents/standard/Oppsummering/Oppsummering.tsx @@ -29,7 +29,7 @@ import { StønadType, stønadTypeToAlternativNøkkel, } from 'components/pageComponents/standard/AndreUtbetalinger/AndreUtbetalinger'; -import { formatFullAdresse, formatNavn, formatTelefonnummer } from 'utils/StringFormatters'; +import { formatTelefonnummer } from 'utils/StringFormatters'; import OppsummeringPeriode from './OppsummeringPeriode/OppsummeringPeriode'; import { isNonEmptyPeriode } from 'utils/periode'; import { @@ -284,20 +284,20 @@ const Oppsummering = ({ hasError={behandlereHasErrors} > <> - {søknadState?.søknad?.registrerteBehandlere?.map((behandler, index) => ( -
+ {søknadState?.søknad?.fastlege?.map((fastlege, index) => ( +
{formatMessage({ id: 'søknad.oppsummering.helseopplysninger.fastlege' })} - {formatNavn(behandler.navn)} - {behandler.kontaktinformasjon.kontor} - {formatFullAdresse(behandler.kontaktinformasjon.adresse)} + {fastlege.navn} + {fastlege.kontaktinformasjon.kontor} + {fastlege.kontaktinformasjon.adresse} {`Telefon: ${formatTelefonnummer( - behandler.kontaktinformasjon.telefon, + fastlege.kontaktinformasjon.telefon, )}`} {`${formatMessage({ id: 'søknad.oppsummering.helseopplysninger.informasjonOmFastlege', - })} ${behandler.erRegistrertFastlegeRiktig}`} + })} ${fastlege.erRegistrertFastlegeRiktig}`}
))} diff --git a/context/sokerOppslagContext.tsx b/context/sokerOppslagContext.tsx index 5df7a36f..47fec646 100644 --- a/context/sokerOppslagContext.tsx +++ b/context/sokerOppslagContext.tsx @@ -1,5 +1,6 @@ import React, { createContext, Dispatch, ReactNode, useReducer, useContext, useMemo } from 'react'; import { formatNavn, formatFullAdresse } from 'utils/StringFormatters'; +import { Fastlege } from 'pages/api/oppslag/fastlege'; interface DispatchSokerOppslagAction { payload?: any; @@ -29,6 +30,10 @@ export type OppslagBarn = { fødselsdato: string; fnr: string; }; + +/** + * @deprecated - erstattet av Fastlege + */ export interface OppslagBehandler { type: 'FASTLEGE' | 'SYKMELDER'; navn: Navn; @@ -59,7 +64,7 @@ export type KontaktInfoView = { }; export type SokerOppslagState = { søker: Soker; - behandlere: Array; + behandlere: Fastlege[]; kontaktinformasjon?: KontaktInfoView; }; const søkerOppslagInitialValue = { diff --git a/context/soknadcontext/actions.tsx b/context/soknadcontext/actions.tsx index 88a112bd..b501edad 100644 --- a/context/soknadcontext/actions.tsx +++ b/context/soknadcontext/actions.tsx @@ -1,17 +1,17 @@ import { AttachmentType, RequiredVedlegg } from 'types/SoknadContext'; -import { OppslagBehandler } from '../sokerOppslagContext'; import { Vedlegg } from '@navikt/aap-felles-react'; import { Soknad, SoknadVedlegg } from 'types/Soknad'; import { Dispatch } from 'react'; import { SoknadContextState } from './soknadContext'; import { Barn } from 'pages/api/oppslag/barn'; +import { Fastlege } from 'pages/api/oppslag/fastlege'; export enum SoknadActionKeys { SET_STATE_FROM_CACHE = 'SET_STATE_FROM_CACHE', SET_SOKNAD = 'SET_SOKNAD', UPDATE_SOKNAD = 'UPDATE_SOKNAD', ADD_BARN_IF_MISSING = 'ADD_BARN_IF_MISSING', - ADD_BEHANDLER_IF_MISSING = 'ADD_BEHANDLER_IF_MISSING', + ADD_FASTLEGE_IF_MISSING = 'ADD_FASTLEGE_IF_MISSING', ADD_REQUIRED_VEDLEGG = 'ADD_REQUIRED_VEDLEGG', REMOVE_REQUIRED_VEDLEGG = 'REMOVE_REQUIRED_VEDLEGG', ADD_VEDLEGG = 'ADD_VEDLEGG', @@ -34,9 +34,9 @@ type AddBarnIfMissing = { type: SoknadActionKeys.ADD_BARN_IF_MISSING; payload: Barn[]; }; -type AddBehandlerIfMissing = { - type: SoknadActionKeys.ADD_BEHANDLER_IF_MISSING; - payload: OppslagBehandler[]; +type AddFastlegeIfMissing = { + type: SoknadActionKeys.ADD_FASTLEGE_IF_MISSING; + payload: Fastlege[]; }; type AddRequiredVedlegg = { type: SoknadActionKeys.ADD_REQUIRED_VEDLEGG; @@ -64,7 +64,7 @@ export type SoknadAction = | SetSoknad | UpdateSoknad | AddBarnIfMissing - | AddBehandlerIfMissing + | AddFastlegeIfMissing | AddRequiredVedlegg | RemoveRequiredVedlegg | AddVedlegg @@ -121,11 +121,8 @@ export async function removeRequiredVedlegg( if (vedleggType) dispatch({ type: SoknadActionKeys.REMOVE_REQUIRED_VEDLEGG, payload: vedleggType }); } -export const addBehandlerIfMissing = ( - dispatch: Dispatch, - data: OppslagBehandler[], -) => { - dispatch({ type: SoknadActionKeys.ADD_BEHANDLER_IF_MISSING, payload: data }); +export const addFastlegeIfMissing = (dispatch: Dispatch, data: Fastlege[]) => { + dispatch({ type: SoknadActionKeys.ADD_FASTLEGE_IF_MISSING, payload: data }); }; export const addBarnIfMissing = (dispatch: Dispatch, data: Barn[]) => { dispatch({ type: SoknadActionKeys.ADD_BARN_IF_MISSING, payload: data }); diff --git a/context/soknadcontext/reducer.tsx b/context/soknadcontext/reducer.tsx index 62bdbec9..fe314d14 100644 --- a/context/soknadcontext/reducer.tsx +++ b/context/soknadcontext/reducer.tsx @@ -1,4 +1,4 @@ -import { RegistrertBehandler } from 'types/Soknad'; +import { RegistrertFastlege } from 'types/Soknad'; import structuredClone from '@ungap/structured-clone'; import { SoknadContextState } from './soknadContext'; import { SoknadAction, SoknadActionKeys } from './actions'; @@ -33,24 +33,23 @@ export function soknadReducer(state: SoknadContextState, action: SoknadAction): }, }; } - case SoknadActionKeys.ADD_BEHANDLER_IF_MISSING: { - const oldRegistrerteBehandlere = state?.søknad?.registrerteBehandlere || []; - const registrerteBehandlere: RegistrertBehandler[] = structuredClone(action.payload) - .filter((behandler) => behandler.type === 'FASTLEGE') - .map((behandler) => { - const eksisterende = oldRegistrerteBehandlere.find( - (e) => - e?.kontaktinformasjon?.behandlerRef === behandler?.kontaktinformasjon?.behandlerRef, + case SoknadActionKeys.ADD_FASTLEGE_IF_MISSING: { + const oldRegistrertFastlege = state?.søknad?.fastlege || []; + const registrerteFastleger: RegistrertFastlege[] = structuredClone(action.payload).map( + (fastlege) => { + const eksisterende = oldRegistrertFastlege.find( + (e) => e?.behandlerRef === fastlege?.behandlerRef, ); return eksisterende?.erRegistrertFastlegeRiktig - ? { ...behandler, erRegistrertFastlegeRiktig: eksisterende.erRegistrertFastlegeRiktig } - : behandler; - }); + ? { ...fastlege, erRegistrertFastlegeRiktig: eksisterende.erRegistrertFastlegeRiktig } + : fastlege; + }, + ); return { ...state, søknad: { ...state.søknad, - registrerteBehandlere: registrerteBehandlere, + fastlege: registrerteFastleger, }, }; } diff --git a/hooks/useDebounceLagreSoknad.tsx b/hooks/useDebounceLagreSoknad.tsx index 387bf93a..f876abb2 100644 --- a/hooks/useDebounceLagreSoknad.tsx +++ b/hooks/useDebounceLagreSoknad.tsx @@ -7,6 +7,7 @@ import { SoknadContextState } from 'context/soknadcontext/soknadContext'; export function useDebounceLagreSoknad() { const { appStateDispatch } = useAppStateContext(); + async function lagrePartialSøknad( state: SoknadContextState, stepList: StepType[], @@ -21,6 +22,7 @@ export function useDebounceLagreSoknad() { const res = await fetchPOST(`/aap/soknad/api/mellomlagring/lagre`, payload); if (res.ok) setSistLagret(formatDateTime(new Date()), appStateDispatch); } + const debouncedLagre = () => { let timerId: ReturnType | undefined; return (state: SoknadContextState, stepList: StepType[], partialSøknad: any) => { diff --git a/lib/utils/migrerMellomlagretBehandler.test.ts b/lib/utils/migrerMellomlagretBehandler.test.ts new file mode 100644 index 00000000..cb60cf4d --- /dev/null +++ b/lib/utils/migrerMellomlagretBehandler.test.ts @@ -0,0 +1,146 @@ +import { JaEllerNei } from 'types/Generic'; +import { migrerMellomlagretBehandler } from 'lib/utils/migrerMellomlagretBehandler'; +import { SoknadContextState } from 'context/soknadcontext/soknadContext'; + +const mellomlagretSøknadBehandlerFraOppslag: SoknadContextState = { + version: 1, + requiredVedlegg: [], + søknad: { + fastlege: [ + { + navn: 'Sonja Paracet Plastersen', + erRegistrertFastlegeRiktig: JaEllerNei.JA, + behandlerRef: 'd182f24b-ebca-4f44-bf86-65901ec6141b', + kontaktinformasjon: { + adresse: 'Skogveien 17, 1234 Andeby', + kontor: 'Andeby legekontor', + telefon: '99999999', + }, + }, + ], + }, +}; + +const mellomlagretSøknadBehandlerFraSøknadAPI: SoknadContextState = { + requiredVedlegg: [], + version: 1, + søknad: { + registrerteBehandlere: [ + { + erRegistrertFastlegeRiktig: JaEllerNei.JA, + type: 'FASTLEGE', + navn: { fornavn: 'Sonja', mellomnavn: 'Paracet', etternavn: 'Plastersen' }, + kategori: 'LEGE', + kontaktinformasjon: { + behandlerRef: 'd182f24b-ebca-4f44-bf86-65901ec6141b', + kontor: 'Andeby legekontor', + orgnummer: '999999', + adresse: { + adressenavn: 'Skogveien', + husnummer: '17', + postnummer: { + postnr: '1234', + poststed: 'Andeby', + }, + }, + telefon: '99999999', + }, + }, + ], + }, +}; + +describe('migrer mellomlagret behandler', () => { + describe('migrerer når', () => { + test('behandler kommer fra gammel struktur og spørsmål om behandler er korrekt er besvart', () => { + const migrertMellomlagring = migrerMellomlagretBehandler( + mellomlagretSøknadBehandlerFraSøknadAPI, + ); + + expect(migrertMellomlagring.søknad?.fastlege).toHaveLength(1); + + const migrertFastlege = + migrertMellomlagring.søknad?.fastlege && migrertMellomlagring.søknad.fastlege[0]; + expect(migrertFastlege).not.toBeUndefined(); + + // @ts-ignore - Typen sier den kan være undef, men den er ikke det her. + const forventetBehandler = mellomlagretSøknadBehandlerFraOppslag.søknad?.fastlege[0]; + expect(migrertMellomlagring).toEqual(mellomlagretSøknadBehandlerFraOppslag); + expect(migrertFastlege).toEqual(forventetBehandler); + }); + }); + + describe('migrerer ikke når', () => { + test('mellomlagret behandler kommer fra oppslag', () => { + const res = migrerMellomlagretBehandler(mellomlagretSøknadBehandlerFraOppslag); + expect(res).toEqual(mellomlagretSøknadBehandlerFraOppslag); + }); + + test('mellomlagret søknad ikke inneholder noen behandlere', () => { + const mellomlagretSøknadUtenRegistrertBehandler: SoknadContextState = { + version: 1, + requiredVedlegg: [], + søknad: { + registrerteBehandlere: [], + }, + }; + + const res = migrerMellomlagretBehandler(mellomlagretSøknadUtenRegistrertBehandler); + expect(res.søknad?.registrerteBehandlere).toEqual([]); + }); + + test('registerteBehandlere ikke finnes', () => { + const mellomlagretSøknadUtenRegistrertBehandler: SoknadContextState = { + version: 1, + requiredVedlegg: [], + søknad: {}, + }; + + const res = migrerMellomlagretBehandler(mellomlagretSøknadUtenRegistrertBehandler); + expect(res.søknad?.registrerteBehandlere).toEqual(undefined); + }); + + test('registrerteBehandlere er undefined', () => { + const mellomlagretSøknadUtenRegistrertBehandler: SoknadContextState = { + version: 1, + requiredVedlegg: [], + søknad: { + registrerteBehandlere: undefined, + }, + }; + + const res = migrerMellomlagretBehandler(mellomlagretSøknadUtenRegistrertBehandler); + expect(res.søknad?.registrerteBehandlere).toEqual(undefined); + }); + + test('behandler kommer fra soknad-api og spørsmål om behandler er korrekt ikke er besvart', () => { + const fastlegeSpmIkkeBesvart: any = { + søknad: { + registrerteBehandlere: [ + { + type: 'FASTLEGE', + navn: { fornavn: 'Sonja', mellomnavn: 'Paracet', etternavn: 'Plastersen' }, + kategori: 'LEGE', + kontaktinformasjon: { + behandlerRef: 'd182f24b-ebca-4f44-bf86-65901ec6141b', + kontor: 'Andeby legekontor', + orgnummer: '999999', + adresse: { + adressenavn: 'Skogveien', + husnummer: '17', + postnummer: { + postnr: '1234', + poststed: 'Andeby', + }, + }, + telefon: '99999999', + }, + }, + ], + }, + }; + const res = migrerMellomlagretBehandler(fastlegeSpmIkkeBesvart); + expect(res).toEqual(fastlegeSpmIkkeBesvart); + }); + }); +}); diff --git a/lib/utils/migrerMellomlagretBehandler.ts b/lib/utils/migrerMellomlagretBehandler.ts new file mode 100644 index 00000000..97d8367e --- /dev/null +++ b/lib/utils/migrerMellomlagretBehandler.ts @@ -0,0 +1,45 @@ +import { formatFullAdresse, formatNavn } from 'utils/StringFormatters'; +import { SoknadContextState } from 'context/soknadcontext/soknadContext'; + +/** + * Migrerer behandlere som er mellomlagret på struktur fra soknad-api + * @param mellomlagretSøknad + */ + +export const migrerMellomlagretBehandler = ( + mellomlagretSøknad: SoknadContextState, +): SoknadContextState => { + if ( + mellomlagretSøknad.søknad?.registrerteBehandlere && + mellomlagretSøknad.søknad?.registrerteBehandlere.length > 0 + ) { + const behandler = mellomlagretSøknad?.søknad?.registrerteBehandlere[0]; + + const behandlerErKorrektErBesvart = behandler.erRegistrertFastlegeRiktig !== undefined; + + // trenger ikke migrere hvis spørsmålet om behandler ikke er besvart enda. Behandler vil da bli satt + // i addBehandlerIfMissing som kalles fra [step].tsx + if (behandlerErKorrektErBesvart) { + delete mellomlagretSøknad.søknad.registrerteBehandlere; + return { + ...mellomlagretSøknad, + søknad: { + ...mellomlagretSøknad.søknad, + fastlege: [ + { + erRegistrertFastlegeRiktig: behandler?.erRegistrertFastlegeRiktig, + navn: formatNavn(behandler.navn), + behandlerRef: behandler.kontaktinformasjon.behandlerRef, + kontaktinformasjon: { + adresse: formatFullAdresse(behandler.kontaktinformasjon.adresse), + telefon: behandler.kontaktinformasjon.telefon, + kontor: behandler.kontaktinformasjon.kontor, + }, + }, + ], + }, + }; + } + } + return mellomlagretSøknad; +}; diff --git a/mock/fastlege.ts b/mock/fastlege.ts new file mode 100644 index 00000000..b74a8241 --- /dev/null +++ b/mock/fastlege.ts @@ -0,0 +1,13 @@ +import { Fastlege } from 'pages/api/oppslag/fastlege'; + +export const mockFastlege: Fastlege[] = [ + { + navn: 'Sonja Paracet Plastersen', + behandlerRef: 'd182f24b-ebca-4f44-bf86-65901ec6141b', + kontaktinformasjon: { + kontor: 'Andeby legekontor', + adresse: 'Skogveien 17, 1234 Andeby', + telefon: '99999999', + }, + }, +]; diff --git a/mock/mellomlagringsCache.ts b/mock/mellomlagringsCache.ts index 42627ea4..7293bb35 100644 --- a/mock/mellomlagringsCache.ts +++ b/mock/mellomlagringsCache.ts @@ -1,5 +1,4 @@ import fs from 'fs/promises'; -import { SøknadsType } from 'utils/api'; export const lesCache = async () => { try { diff --git "a/mock/s\303\270ker.ts" "b/mock/s\303\270ker.ts" index 6a74ffb4..97586edf 100644 --- "a/mock/s\303\270ker.ts" +++ "b/mock/s\303\270ker.ts" @@ -1,8 +1,7 @@ import { sub } from 'date-fns'; import { formatDate } from 'utils/date'; -import { SokerOppslagState } from 'context/sokerOppslagContext'; -export const mockSøker: SokerOppslagState = { +export const mockSøker: any = { søker: { navn: { fornavn: 'Jackie', diff --git a/pages/[step].tsx b/pages/[step].tsx index 73d71a7c..229ed833 100644 --- a/pages/[step].tsx +++ b/pages/[step].tsx @@ -14,7 +14,6 @@ import { import { Soknad } from 'types/Soknad'; import { fetchPOST } from 'api/fetch'; import { StepNames } from './index'; -import { mapSøknadToBackend, mapSøknadToPdf } from 'utils/api'; import StartDato from 'components/pageComponents/standard/StartDato/StartDato'; import { Medlemskap } from 'components/pageComponents/standard/Medlemskap/Medlemskap'; import { Yrkesskade } from 'components/pageComponents/standard/Yrkesskade/Yrkesskade'; @@ -38,9 +37,8 @@ import { SoknadContextProvider, SoknadContextState } from 'context/soknadcontext import { useSoknad } from 'hooks/SoknadHook'; import { addBarnIfMissing, - addBehandlerIfMissing, + addFastlegeIfMissing, setSoknadStateFraProps, - SoknadActionKeys, } from 'context/soknadcontext/actions'; import { getKrr } from 'pages/api/oppslag/krr'; import { Barn, getBarn } from 'pages/api/oppslag/barn'; @@ -49,20 +47,21 @@ import { hentMellomlagring } from 'pages/api/mellomlagring/les'; import { RequiredVedlegg } from 'types/SoknadContext'; import { logError, logInfo, logWarning } from '@navikt/aap-felles-utils'; import { parse } from 'date-fns'; +import { Fastlege, getFastlege } from 'pages/api/oppslag/fastlege'; +import { migrerMellomlagretBehandler } from 'lib/utils/migrerMellomlagretBehandler'; interface PageProps { søker: SokerOppslagState; mellomlagretSøknad: SoknadContextState; kontaktinformasjon: KontaktInfoView | null; barn: Barn[]; + fastlege: Fastlege[]; } -const Steps = ({ søker, mellomlagretSøknad, kontaktinformasjon, barn }: PageProps) => { +const Steps = ({ søker, mellomlagretSøknad, kontaktinformasjon, barn, fastlege }: PageProps) => { const router = useRouter(); const { step } = router.query; - const { formatMessage } = useIntl(); - const { søknadState, søknadDispatch } = useSoknad(); const { oppslagDispatch } = useSokerOppslag(); const { currentStep, stepList, stepWizardDispatch } = useStepWizard(); @@ -80,7 +79,7 @@ const Steps = ({ søker, mellomlagretSøknad, kontaktinformasjon, barn }: PagePr setSokerOppslagFraProps(søker, oppslagDispatch); if (barn) addBarnIfMissing(søknadDispatch, barn); - if (søker.behandlere) addBehandlerIfMissing(søknadDispatch, søker.behandlere); + if (fastlege) addFastlegeIfMissing(søknadDispatch, fastlege); } }, []); @@ -108,17 +107,6 @@ const Steps = ({ søker, mellomlagretSøknad, kontaktinformasjon, barn }: PagePr const submitSoknad = async () => { if (currentStep?.name === StepNames.OPPSUMMERING) { setShowFetchErrorMessage(false); - const sendtTimestamp = new Date(); - - // Må massere dataene litt før vi sender de inn - const søknad = mapSøknadToBackend(søknadState?.søknad); - - const søknadPdf = mapSøknadToPdf( - søknadState?.søknad, - sendtTimestamp, - formatMessage, - søknadState?.requiredVedlegg, - ); const postResponse = await postSøknadMedAAPInnsending( søknadState.søknad, @@ -218,6 +206,15 @@ const StepsWithContextProvider = (props: PageProps) => ( ); +const hentFastlege = async (bearerToken?: string) => { + try { + return await getFastlege(bearerToken); + } catch (e) { + logError('Noe gikk galt i kallet mot oppslag/fastlege', e); + return []; + } +}; + export const getServerSideProps = beskyttetSide( async (ctx: NextPageContext): Promise> => { const stopTimer = metrics.getServersidePropsDurationHistogram.startTimer({ @@ -232,14 +229,19 @@ export const getServerSideProps = beskyttetSide( logError(`Noe gikk galt i kallet mot oppslag/krr`, e); } - let mellomlagretSøknad: SoknadContextState | undefined; + const fastlege = await hentFastlege(bearerToken); + let mellomlagretSøknad: SoknadContextState | undefined; try { mellomlagretSøknad = await hentMellomlagring(ctx.req); } catch (e) { logError('Noe gikk galt i innhenting av mellomlagret søknad', e); } + if (mellomlagretSøknad) { + mellomlagretSøknad = migrerMellomlagretBehandler(mellomlagretSøknad); + } + let barn: Barn[] = []; try { barn = await getBarn(bearerToken); @@ -269,7 +271,7 @@ export const getServerSideProps = beskyttetSide( } return { - props: { søker, mellomlagretSøknad, kontaktinformasjon, barn }, + props: { søker, mellomlagretSøknad, kontaktinformasjon, barn, fastlege }, }; }, ); diff --git a/pages/api/innsending/soknadinnsending.ts b/pages/api/innsending/soknadinnsending.ts index 1ab26727..c7a86517 100644 --- a/pages/api/innsending/soknadinnsending.ts +++ b/pages/api/innsending/soknadinnsending.ts @@ -15,7 +15,6 @@ import { getMedlemskapSchema } from 'components/pageComponents/standard/Medlemsk import { getStartDatoSchema } from 'components/pageComponents/standard/StartDato/StartDato'; import { getStudentSchema } from 'components/pageComponents/standard/Student/Student'; import { getYrkesskadeSchema } from 'components/pageComponents/standard/Yrkesskade/Yrkesskade'; -import { getAccessTokenFromRequest } from 'auth/accessToken'; import { AttachmentType, RequiredVedlegg } from 'types/SoknadContext'; import { SOKNAD_VERSION } from 'context/soknadcontext/soknadContext'; import { deleteCache } from 'mock/mellomlagringsCache'; diff --git a/pages/api/oppslagapi/fastlege.ts b/pages/api/oppslag/fastlege.ts similarity index 85% rename from pages/api/oppslagapi/fastlege.ts rename to pages/api/oppslag/fastlege.ts index 247a8946..5dd0b557 100644 --- a/pages/api/oppslagapi/fastlege.ts +++ b/pages/api/oppslag/fastlege.ts @@ -3,8 +3,9 @@ import { getAccessTokenFromRequest } from 'auth/accessToken'; import { beskyttetApi } from 'auth/beskyttetApi'; import { logError, tokenXApiProxy } from '@navikt/aap-felles-utils'; import metrics from 'utils/metrics'; -import { OppslagBehandler } from 'context/sokerOppslagContext'; import { z } from 'zod'; +import { isDev, isMock } from 'utils/environments'; +import { mockFastlege } from 'mock/fastlege'; const Fastlege = z.object({ navn: z.string(), @@ -15,13 +16,16 @@ const Fastlege = z.object({ telefon: z.string().optional(), }), }); + export type Fastlege = z.infer; const handler = beskyttetApi(async (req: NextApiRequest, res: NextApiResponse) => { const accessToken = getAccessTokenFromRequest(req); res.status(200).json(await getFastlege(accessToken)); }); -export const getFastlege = async (accessToken?: string) => { +export const getFastlege = async (accessToken?: string): Promise => { + if (isMock() || isDev()) return mockFastlege; + const fastlege: Fastlege = await tokenXApiProxy({ url: `${process.env.OPPSLAG_URL}/fastlege`, prometheusPath: 'oppslag/fastlege', @@ -35,7 +39,7 @@ export const getFastlege = async (accessToken?: string) => { const validatedResponse = z.array(Fastlege).safeParse(fastlege); if (!validatedResponse.success) { logError(`oppslag/person valideringsfeil: ${validatedResponse.error.message}`); - return {}; + return []; } return validatedResponse.data; }; diff --git a/pages/index.tsx b/pages/index.tsx index 907b35df..1368c354 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -24,7 +24,6 @@ export enum StepNames { FASTLEGE = 'FASTLEGE', MEDLEMSKAP = 'MEDLEMSKAP', YRKESSKADE = 'YRKESSKADE', - TILLEGGSOPPLYSNINGER = 'TILLEGGSOPPLYSNINGER', STUDENT = 'STUDENT', ANDRE_UTBETALINGER = 'ANDRE_UTBETALINGER', BARNETILLEGG = 'BARNETILLEGG', diff --git a/tests/unhappypath.spec.ts b/tests/unhappypath.spec.ts index d8d67c1f..cb0e00be 100644 --- a/tests/unhappypath.spec.ts +++ b/tests/unhappypath.spec.ts @@ -304,7 +304,7 @@ test('at alle feilmeldinger skal dukke opp', async ({ page }) => { }) .click(); await expect(page).toHaveURL( - 'http://localhost:3000/aap/soknad/4/#registrerteBehandlere[0].erRegistrertFastlegeRiktig', + 'http://localhost:3000/aap/soknad/4/#fastlege[0].erRegistrertFastlegeRiktig', ); await page.getByLabel('Nei').check(); await expect( diff --git a/types/Soknad.ts b/types/Soknad.ts index cfae71e1..b4390e17 100644 --- a/types/Soknad.ts +++ b/types/Soknad.ts @@ -2,10 +2,11 @@ import { StønadType } from 'components/pageComponents/standard/AndreUtbetalinge import { Relasjon } from 'components/pageComponents/standard/Barnetillegg/AddBarnModal'; import { JaEllerNei, JaNeiVetIkke } from './Generic'; import { JaNeiAvbrutt } from 'components/pageComponents/standard/Student/Student'; -import { OppslagBehandler } from 'context/sokerOppslagContext'; import { FerieType } from 'components/pageComponents/standard/StartDato/StartDato'; import { Vedlegg } from '@navikt/aap-felles-react'; import { Barn } from 'pages/api/oppslag/barn'; +import { Fastlege } from 'pages/api/oppslag/fastlege'; +import { OppslagBehandler } from 'context/sokerOppslagContext'; export type Navn = { fornavn?: string; @@ -46,6 +47,11 @@ export type Behandler = { export interface RegistrertBehandler extends OppslagBehandler { erRegistrertFastlegeRiktig?: JaEllerNei; } + +export interface RegistrertFastlege extends Fastlege { + erRegistrertFastlegeRiktig?: JaEllerNei; +} + type Student = { erStudent?: JaNeiAvbrutt; kommeTilbake?: JaNeiVetIkke; @@ -98,7 +104,11 @@ export interface Soknad { sykepenger?: JaEllerNei; yrkesskade?: JaEllerNei; medlemskap?: Medlemskap; + /** + * @Deprecated + */ registrerteBehandlere?: RegistrertBehandler[]; + fastlege?: RegistrertFastlege[]; andreBehandlere?: Behandler[]; student?: Student; andreUtbetalinger?: AndreUtbetalinger; diff --git a/types/SoknadBackendState.ts b/types/SoknadBackendState.ts deleted file mode 100644 index 957770fc..00000000 --- a/types/SoknadBackendState.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { StønadType } from 'components/pageComponents/standard/AndreUtbetalinger/AndreUtbetalinger'; -import { Adresse } from 'context/sokerOppslagContext'; -import { FerieType } from 'components/pageComponents/standard/StartDato/StartDato'; - -export interface SøknadBackendState { - sykepenger?: boolean; - ferie?: { - ferieType?: FerieType | 'NEI'; - periode?: { - fom?: string; - tom?: string; - }; - dager?: number | string; - }; - medlemsskap: { - boddINorgeSammenhengendeSiste5?: boolean; - jobbetUtenforNorgeFørSyk?: boolean; - jobbetSammenhengendeINorgeSiste5?: boolean; - iTilleggArbeidUtenforNorge?: boolean; - utenlandsopphold: { - land?: string; - periode: { fom?: string; tom?: string }; - arbeidet?: boolean; - id?: string; - landsNavn?: string; - }[]; - }; - studier: { - erStudent?: 'JA' | 'NEI' | 'AVBRUTT'; - kommeTilbake?: 'JA' | 'NEI' | 'VET_IKKE'; - vedlegg: Array; - }; - andreBehandlere: Array; - registrerteBehandlere: Array; - yrkesskadeType?: 'JA' | 'NEI'; - utbetalinger: { - fraArbeidsgiver?: boolean; - andreStønader: Array<{ type: StønadType; hvemUtbetalerAFP?: string; vedlegg?: Array }>; - }; - registrerteBarn: Array<{ - merEnnIG?: null; - barnepensjon?: boolean; - }>; - andreBarn: Array<{ - barn: { - fødseldato?: string; - navn?: { - fornavn?: string; - mellomnavn?: string; - etternavn?: string; - }; - }; - relasjon?: 'FORELDER' | 'FOSTERFORELDER'; - merEnnIG?: null; - barnepensjon?: boolean; - }>; - tilleggsopplysninger?: string; -} - -export interface BehandlerBackendState { - type: 'FASTLEGE' | 'SYKMELDER'; - navn: { fornavn?: string; mellomnavn?: string; etternavn?: string }; - kategori?: 'LEGE' | 'FYSIOTERAPEUT' | 'KIROPRAKTOR' | 'MANUELLTERAPEUT' | 'TANNLEGE'; - kontaktinformasjon: { - behandlerRef?: string; - kontor?: string; - orgnummer?: string; - adresse?: Adresse; - telefon?: string; - }; - erRegistrertFastlegeRiktig?: boolean; -} diff --git a/utils/api.ts b/utils/api.ts index 9d495e88..82c57d14 100644 --- a/utils/api.ts +++ b/utils/api.ts @@ -9,16 +9,11 @@ import { stønadTypeToAlternativNøkkel, } from 'components/pageComponents/standard/AndreUtbetalinger/AndreUtbetalinger'; import { Soknad, SoknadVedlegg } from 'types/Soknad'; -import { BehandlerBackendState, SøknadBackendState } from 'types/SoknadBackendState'; import { formatDate } from './date'; import { formatFullAdresse, formatNavn } from 'utils/StringFormatters'; import { RequiredVedlegg } from 'types/SoknadContext'; import { Relasjon } from 'components/pageComponents/standard/Barnetillegg/AddBarnModal'; -import { - FerieType, - FerieTypeToMessageKey, -} from 'components/pageComponents/standard/StartDato/StartDato'; -import { JaEllerNei } from 'types/Generic'; +import { FerieTypeToMessageKey } from 'components/pageComponents/standard/StartDato/StartDato'; import { utenlandsPeriodeArbeidEllerBodd } from 'components/pageComponents/standard/Medlemskap/medlemskapUtils'; export type SøknadsType = 'UTLAND' | 'STANDARD'; @@ -28,176 +23,6 @@ export const GYLDIGE_SØKNADS_TYPER = ['UTLAND', 'STANDARD']; export const erGyldigSøknadsType = (type?: string) => typeof type === 'undefined' || !GYLDIGE_SØKNADS_TYPER.includes(type); -const getFerieType = (skalHaFerie?: string, ferieType?: FerieType) => { - if (skalHaFerie === 'Nei') { - return 'NEI'; - } else { - return ferieType; - } -}; - -const getJaNeiVetIkke = (value?: string) => { - if (value === 'Ja') return 'JA'; - if (value === 'Nei') return 'NEI'; - if (value === 'Vet ikke') return 'VET_IKKE'; - return undefined; -}; - -const getJaNeiAvbrutt = (value?: string) => { - if (value === 'Ja') return 'JA'; - if (value === 'Nei') return 'NEI'; - if (value === 'Avbrutt') return 'AVBRUTT'; - return undefined; -}; - -const jaNeiToBoolean = (value?: string) => { - if (value === 'Ja') return true; - if (value === 'Nei') return false; - return undefined; -}; - -const getJaEllerNei = (value?: string) => { - if (value === 'Ja') return 'JA'; - if (value === 'Nei') return 'NEI'; - return undefined; -}; - -export const mapSøknadToBackend = (søknad?: Soknad): SøknadBackendState => { - const ferieType = getFerieType(søknad?.ferie?.skalHaFerie, søknad?.ferie?.ferieType); - const registrerteBehandlere: BehandlerBackendState[] = - søknad?.registrerteBehandlere?.map((behandler) => ({ - ...behandler, - erRegistrertFastlegeRiktig: jaNeiToBoolean(behandler.erRegistrertFastlegeRiktig), - })) ?? []; - - const andreBehandlere: BehandlerBackendState[] = - søknad?.andreBehandlere?.map((behandler) => { - return { - type: 'SYKMELDER', - navn: { - fornavn: behandler.firstname, - etternavn: behandler.lastname, - }, - kontaktinformasjon: { - kontor: behandler.legekontor, - telefon: behandler.telefon, - adresse: { - adressenavn: behandler.gateadresse, - postnummer: { - postnr: behandler.postnummer, - poststed: behandler.poststed, - }, - }, - }, - }; - }) ?? []; - - return { - sykepenger: jaNeiToBoolean(søknad?.sykepenger), - ...(søknad?.sykepenger === JaEllerNei.JA && { - ferie: { - ferieType, - ...(ferieType === FerieType.PERIODE && { - periode: { - fom: formatDate(søknad?.ferie?.fraDato, 'yyyy-MM-dd'), - tom: formatDate(søknad?.ferie?.tilDato, 'yyyy-MM-dd'), - }, - }), - ...(ferieType === FerieType.DAGER && { dager: søknad?.ferie?.antallDager }), - }, - }), - medlemsskap: { - boddINorgeSammenhengendeSiste5: jaNeiToBoolean(søknad?.medlemskap?.harBoddINorgeSiste5År), - jobbetUtenforNorgeFørSyk: jaNeiToBoolean(søknad?.medlemskap?.arbeidetUtenforNorgeFørSykdom), - jobbetSammenhengendeINorgeSiste5: jaNeiToBoolean( - søknad?.medlemskap?.harArbeidetINorgeSiste5År, - ), - iTilleggArbeidUtenforNorge: jaNeiToBoolean(søknad?.medlemskap?.iTilleggArbeidUtenforNorge), - utenlandsopphold: - søknad?.medlemskap?.utenlandsOpphold?.map((utenlandsopphold) => ({ - land: utenlandsopphold.land ? utenlandsopphold.land.split(':')[0] : undefined, - periode: { - fom: formatDate(utenlandsopphold.fraDato, 'yyyy-MM-dd'), - tom: formatDate(utenlandsopphold.tilDato, 'yyyy-MM-dd'), - }, - arbeidet: jaNeiToBoolean(utenlandsopphold.iArbeid), - id: utenlandsopphold.utenlandsId, - })) ?? [], - }, - studier: { - erStudent: getJaNeiAvbrutt(søknad?.student?.erStudent), - kommeTilbake: getJaNeiVetIkke(søknad?.student?.kommeTilbake), - vedlegg: søknad?.vedlegg?.AVBRUTT_STUDIE?.map((vedlegg) => vedlegg.vedleggId) ?? [], - }, - registrerteBehandlere, - andreBehandlere, - yrkesskadeType: getJaEllerNei(søknad?.yrkesskade), - utbetalinger: { - ...(søknad?.andreUtbetalinger?.lønn - ? { - ekstraFraArbeidsgiver: { - fraArbeidsgiver: jaNeiToBoolean(søknad?.andreUtbetalinger?.lønn), - vedlegg: - søknad?.vedlegg?.LØNN_OG_ANDRE_GODER?.map((vedlegg) => vedlegg.vedleggId) ?? [], - }, - } - : {}), - andreStønader: - søknad?.andreUtbetalinger?.stønad?.map((stønad) => { - switch (stønad) { - case StønadType.AFP: - return { - type: stønad, - hvemUtbetalerAFP: søknad?.andreUtbetalinger?.afp?.hvemBetaler, - }; - case StønadType.OMSORGSSTØNAD: - return { - type: stønad, - vedlegg: søknad?.vedlegg?.OMSORGSSTØNAD?.map((vedlegg) => vedlegg.vedleggId) ?? [], - }; - case StønadType.LÅN: - return { - type: stønad, - vedlegg: søknad?.vedlegg?.LÅN?.map((vedlegg) => vedlegg.vedleggId) ?? [], - }; - case StønadType.STIPEND: - return { - type: stønad, - vedlegg: søknad?.vedlegg?.SYKESTIPEND?.map((vedlegg) => vedlegg.vedleggId) ?? [], - }; - case StønadType.UTLAND: - return { - type: stønad, - vedlegg: søknad?.vedlegg?.UTLANDSSTØNAD?.map((vedlegg) => vedlegg.vedleggId) ?? [], - }; - default: - return { type: stønad }; - } - }) ?? [], - }, - registrerteBarn: - søknad?.barn?.map(() => ({ - merEnnIG: null, - })) ?? [], - andreBarn: - søknad?.manuelleBarn?.map((barn) => ({ - barn: { - fødseldato: formatDate(barn.fødseldato, 'yyyy-MM-dd'), - navn: barn.navn, - }, - relasjon: barn.relasjon, - merEnnIG: null, - vedlegg: getVedleggForManueltBarn(barn.internId, søknad?.vedlegg)?.map( - (vedlegg) => vedlegg?.vedleggId, - ), - })) ?? [], - tilleggsopplysninger: søknad?.tilleggsopplysninger, - ...(søknad?.vedlegg?.ANNET - ? { vedlegg: søknad?.vedlegg?.ANNET?.map((e) => e?.vedleggId) } - : {}), - }; -}; - export function getVedleggForManueltBarn(internId?: string, vedlegg?: SoknadVedlegg) { const keys = vedlegg ? Object.keys(vedlegg) : []; const vedleggKey = keys.find((key) => key === internId); @@ -369,17 +194,15 @@ export const mapSøknadToPdf = ( ]); }; const getRegistrerteBehandlere = (søknad?: Soknad) => { - if (!søknad?.registrerteBehandlere?.length) { + if (!søknad?.fastlege?.length) { } - const registrerteBehandlere = !søknad?.registrerteBehandlere?.length + const fastleger = !søknad?.fastlege?.length ? createFritekst('Fant ingen registrert fastlege') - : søknad?.registrerteBehandlere?.map((behandler) => + : søknad?.fastlege?.map((behandler) => createFeltgruppe([ - ...createField('Type', behandler?.type), - ...createField('Kategori', behandler?.kategori), - ...createField('Navn', formatNavn(behandler?.navn)), + ...createField('Navn', behandler?.navn), ...createField('Kontor', behandler?.kontaktinformasjon?.kontor), - ...createField('Adresse', formatFullAdresse(behandler?.kontaktinformasjon?.adresse)), + ...createField('Adresse', behandler?.kontaktinformasjon?.adresse), ...createField('Telefon', behandler?.kontaktinformasjon?.telefon), ...createField( formatMessage({ id: `søknad.helseopplysninger.erRegistrertFastlegeRiktig.label` }), @@ -387,7 +210,7 @@ export const mapSøknadToPdf = ( ), ]), ) || []; - return createTema('Registrerte behandlere', registrerteBehandlere); + return createTema('Registrerte behandlere', fastleger); }; const getAndreBehandlere = (søknad?: Soknad) => { const andreBehandlere = !søknad?.andreBehandlere?.length diff --git a/utils/environments.ts b/utils/environments.ts index 51b09393..3df0209b 100644 --- a/utils/environments.ts +++ b/utils/environments.ts @@ -5,5 +5,7 @@ export const isMock = () => export const isFunctionalTest = () => process.env.FUNCTIONAL_TESTS === 'enabled'; +export const isDev = () => process.env.RUNTIME_ENVIRONMENT === 'dev'; + export const clientSideIsProd = () => typeof window !== 'undefined' && window.location.href.includes('www.nav.no');