Skip to content

Commit

Permalink
Fastlege oppslag (#138)
Browse files Browse the repository at this point in the history
* 🔥 Sletter mye av det som ble brukt i forbindelse med soknad-api

* 🔥 Fjerner feltet "brukerMellomLagretSøknadFraAApInnsending" da vi ikke trenger feature toggling når soknad-api er borte

* 🔥 Fjerner FileInputWrapper.tsx

* clean up

* 👽 Henter fastlege fra oppslag

Går mot oppslagstjenesten for å hente ut fastlege.
Laget migrering for mellomlagrede søknader som har
fastlege på struktur fra soknad-api

* 🔇 Fjerner log-linjer

* ✅ Tester for migreringsscript

* ♻️ Lager ny prop for å holde på fastlege

Flytter ting vekk fra den gamle registrerteBehandlere
da vi kun ser på fastlege. Dette gjør igjen at
migrering av mellomlagrede behandler blir mer
ryddig.

* ♻️ Mocker data for testing

Vanskelig å få satt fastlege i testdata, tester derfor en liten mock

---------

Co-authored-by: Thomas Rognes <[email protected]>
Co-authored-by: Tor Idland <[email protected]>
  • Loading branch information
3 people authored May 21, 2024
1 parent 3b31788 commit 3081c19
Show file tree
Hide file tree
Showing 23 changed files with 325 additions and 370 deletions.
2 changes: 1 addition & 1 deletion components/SoknadFormWrapper/SlettModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ interface Props {
const SlettModal = ({ isOpen, onClose }: Props) => {
const [isDeletingSøknad, setIsDeletingSøknad] = useState<boolean>(false);
const [slettSøknadSuccess, setSlettSøknadSuccess] = useState<boolean>(false);
const { søknadState, søknadDispatch } = useSoknad();
const { søknadState } = useSoknad();
const { formatMessage } = useIntl();
const router = useRouter();

Expand Down
14 changes: 7 additions & 7 deletions components/pageComponents/standard/Behandlere/Behandlere.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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);
Expand Down Expand Up @@ -112,18 +112,18 @@ export const Behandlere = ({ onBackClick }: Props) => {
<Heading size={'small'} level={'3'}>
{formatMessage({ id: 'søknad.helseopplysninger.registrertFastlege.title' })}
</Heading>
{søknadState?.søknad?.registrerteBehandlere?.length === 0 && (
{søknadState?.søknad?.fastlege?.length === 0 && (
<BodyLong>
{formatMessage({ id: 'søknad.helseopplysninger.registrertFastlege.ingenFastlege' })}
</BodyLong>
)}
{søknadState?.søknad?.registrerteBehandlere?.map((registrertBehandler, index) => (
{søknadState?.søknad?.fastlege?.map((fastlege, index) => (
<RegistrertBehandler
key={registrertBehandler.kontaktinformasjon.behandlerRef}
key={fastlege.behandlerRef}
index={index}
registrertBehandler={registrertBehandler}
fastlege={fastlege}
clearErrors={clearErrors}
errorMessage={findError(`registrerteBehandlere[${index}].erRegistrertFastlegeRiktig`)}
errorMessage={findError(`fastlege[${index}].erRegistrertFastlegeRiktig`)}
/>
))}
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -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,
},
],
Expand All @@ -43,9 +34,9 @@ describe('Behandlere validation', () => {
});
it('har registrert behandler, info er feil', async () => {
const form = {
registrerteBehandlere: [
fastlege: [
{
...registrertBehandler,
...fastlege,
erRegistrertFastlegeRiktig: JaEllerNei.NEI,
},
],
Expand All @@ -55,9 +46,9 @@ describe('Behandlere validation', () => {
});
it('har registrert behandler, må svare om info er riktig', async () => {
const form = {
registrerteBehandlere: [
fastlege: [
{
...registrertBehandler,
...fastlege,
},
],
};
Expand Down
Original file line number Diff line number Diff line change
@@ -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();

Expand All @@ -31,7 +26,7 @@ export const RegistrertBehandler = ({
{formatMessage({ id: 'søknad.helseopplysninger.registrertFastlege.navn' })}
</Label>
</dt>
<dd>{formatNavn(registrertBehandler.navn)}</dd>
<dd>{fastlege.navn}</dd>
<dt>
<Label as={'span'}>
{formatMessage({
Expand All @@ -40,37 +35,34 @@ export const RegistrertBehandler = ({
</Label>
</dt>

<dd>{registrertBehandler.kontaktinformasjon.kontor}</dd>
<dd>{fastlege.kontaktinformasjon.kontor}</dd>
<dt>
<Label as={'span'}>
{formatMessage({ id: 'søknad.helseopplysninger.registrertFastlege.adresse' })}
</Label>
</dt>

<dd>{formatFullAdresse(registrertBehandler.kontaktinformasjon.adresse)}</dd>
<dd>{fastlege.kontaktinformasjon.adresse}</dd>
<dt>
<Label as={'span'}>
{formatMessage({ id: 'søknad.helseopplysninger.registrertFastlege.telefon' })}
</Label>
</dt>

<dd>{formatTelefonnummer(registrertBehandler.kontaktinformasjon.telefon)}</dd>
<dd>{formatTelefonnummer(fastlege.kontaktinformasjon.telefon)}</dd>
</dl>
<RadioGroup
name={`registrerteBehandlere[${index}].erRegistrertFastlegeRiktig`}
id={`registrerteBehandlere[${index}].erRegistrertFastlegeRiktig`}
name={`fastlege[${index}].erRegistrertFastlegeRiktig`}
id={`fastlege[${index}].erRegistrertFastlegeRiktig`}
legend={formatMessage({
id: `søknad.helseopplysninger.erRegistrertFastlegeRiktig.label`,
})}
value={registrertBehandler.erRegistrertFastlegeRiktig || ''}
value={fastlege.erRegistrertFastlegeRiktig || ''}
onChange={(value) => {
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;
Expand All @@ -87,7 +79,7 @@ export const RegistrertBehandler = ({
<BodyShort>{JaEllerNei.NEI}</BodyShort>
</Radio>
</RadioGroup>
{registrertBehandler.erRegistrertFastlegeRiktig === JaEllerNei.NEI && (
{fastlege.erRegistrertFastlegeRiktig === JaEllerNei.NEI && (
<Alert variant={'info'}>
{formatMessage({
id: 'søknad.helseopplysninger.erRegistrertFastlegeRiktig.alertInfo',
Expand Down
16 changes: 8 additions & 8 deletions components/pageComponents/standard/Oppsummering/Oppsummering.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -284,20 +284,20 @@ const Oppsummering = ({
hasError={behandlereHasErrors}
>
<>
{søknadState?.søknad?.registrerteBehandlere?.map((behandler, index) => (
<article key={'behandler-' + index}>
{søknadState?.søknad?.fastlege?.map((fastlege, index) => (
<article key={'fastlege-' + index}>
<Heading size={'small'} level={'3'}>
{formatMessage({ id: 'søknad.oppsummering.helseopplysninger.fastlege' })}
</Heading>
<BodyShort>{formatNavn(behandler.navn)}</BodyShort>
<BodyShort>{behandler.kontaktinformasjon.kontor}</BodyShort>
<BodyShort>{formatFullAdresse(behandler.kontaktinformasjon.adresse)}</BodyShort>
<BodyShort>{fastlege.navn}</BodyShort>
<BodyShort>{fastlege.kontaktinformasjon.kontor}</BodyShort>
<BodyShort>{fastlege.kontaktinformasjon.adresse}</BodyShort>
<BodyShort>{`Telefon: ${formatTelefonnummer(
behandler.kontaktinformasjon.telefon,
fastlege.kontaktinformasjon.telefon,
)}`}</BodyShort>
<BodyShort>{`${formatMessage({
id: 'søknad.oppsummering.helseopplysninger.informasjonOmFastlege',
})} ${behandler.erRegistrertFastlegeRiktig}`}</BodyShort>
})} ${fastlege.erRegistrertFastlegeRiktig}`}</BodyShort>
</article>
))}

Expand Down
7 changes: 6 additions & 1 deletion context/sokerOppslagContext.tsx
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -29,6 +30,10 @@ export type OppslagBarn = {
fødselsdato: string;
fnr: string;
};

/**
* @deprecated - erstattet av Fastlege
*/
export interface OppslagBehandler {
type: 'FASTLEGE' | 'SYKMELDER';
navn: Navn;
Expand Down Expand Up @@ -59,7 +64,7 @@ export type KontaktInfoView = {
};
export type SokerOppslagState = {
søker: Soker;
behandlere: Array<OppslagBehandler>;
behandlere: Fastlege[];
kontaktinformasjon?: KontaktInfoView;
};
const søkerOppslagInitialValue = {
Expand Down
19 changes: 8 additions & 11 deletions context/soknadcontext/actions.tsx
Original file line number Diff line number Diff line change
@@ -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',
Expand All @@ -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;
Expand Down Expand Up @@ -64,7 +64,7 @@ export type SoknadAction =
| SetSoknad
| UpdateSoknad
| AddBarnIfMissing
| AddBehandlerIfMissing
| AddFastlegeIfMissing
| AddRequiredVedlegg
| RemoveRequiredVedlegg
| AddVedlegg
Expand Down Expand Up @@ -121,11 +121,8 @@ export async function removeRequiredVedlegg(
if (vedleggType)
dispatch({ type: SoknadActionKeys.REMOVE_REQUIRED_VEDLEGG, payload: vedleggType });
}
export const addBehandlerIfMissing = (
dispatch: Dispatch<SoknadAction>,
data: OppslagBehandler[],
) => {
dispatch({ type: SoknadActionKeys.ADD_BEHANDLER_IF_MISSING, payload: data });
export const addFastlegeIfMissing = (dispatch: Dispatch<SoknadAction>, data: Fastlege[]) => {
dispatch({ type: SoknadActionKeys.ADD_FASTLEGE_IF_MISSING, payload: data });
};
export const addBarnIfMissing = (dispatch: Dispatch<SoknadAction>, data: Barn[]) => {
dispatch({ type: SoknadActionKeys.ADD_BARN_IF_MISSING, payload: data });
Expand Down
25 changes: 12 additions & 13 deletions context/soknadcontext/reducer.tsx
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -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,
},
};
}
Expand Down
2 changes: 2 additions & 0 deletions hooks/useDebounceLagreSoknad.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { SoknadContextState } from 'context/soknadcontext/soknadContext';

export function useDebounceLagreSoknad<SoknadStateType>() {
const { appStateDispatch } = useAppStateContext();

async function lagrePartialSøknad<SoknadStateType>(
state: SoknadContextState,
stepList: StepType[],
Expand All @@ -21,6 +22,7 @@ export function useDebounceLagreSoknad<SoknadStateType>() {
const res = await fetchPOST(`/aap/soknad/api/mellomlagring/lagre`, payload);
if (res.ok) setSistLagret(formatDateTime(new Date()), appStateDispatch);
}

const debouncedLagre = () => {
let timerId: ReturnType<typeof setTimeout> | undefined;
return (state: SoknadContextState, stepList: StepType[], partialSøknad: any) => {
Expand Down
Loading

0 comments on commit 3081c19

Please sign in to comment.