Skip to content

Commit 2f2d294

Browse files
committed
TFP-6071: legg til overstyring i fakta-fødsel
1 parent 9dded30 commit 2f2d294

File tree

19 files changed

+209
-22
lines changed

19 files changed

+209
-22
lines changed

apps/fp-frontend-app/src/behandling/fellesPaneler/fakta/FodselvilkaretFaktaInitPanel.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@ import { useStandardFaktaPanelProps } from '../../felles/fakta/useStandardFaktaP
1616
import { BehandlingDataContext } from '../../felles/utils/behandlingDataContext';
1717

1818
const AKSJONSPUNKT_KODER = [AksjonspunktKode.TERMINBEKREFTELSE, AksjonspunktKode.SJEKK_MANGLENDE_FODSEL];
19+
const OVERSTYRING_KODER = [AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL];
1920

2021
export const FodselvilkaretFaktaInitPanel = () => {
2122
const intl = useIntl();
2223

23-
const { behandling, fagsak } = use(BehandlingDataContext);
24+
const { behandling, fagsak, rettigheter } = use(BehandlingDataContext);
2425

2526
const skalPanelVisesIMeny = behandling.vilkår.some(v => fodselsvilkarene.some(fv => fv === v.vilkarType));
2627

27-
const standardPanelProps = useStandardFaktaPanelProps(AKSJONSPUNKT_KODER);
28+
const standardPanelProps = useStandardFaktaPanelProps(AKSJONSPUNKT_KODER, OVERSTYRING_KODER);
2829

2930
const api = useBehandlingApi(behandling);
3031
const fagsakApi = useFagsakApi();
@@ -48,6 +49,7 @@ export const FodselvilkaretFaktaInitPanel = () => {
4849
fødsel={faktafødsel}
4950
terminbekreftelseDokument={terminbekreftelseDokument}
5051
submittable={standardPanelProps.submittable}
52+
kanOverstyre={rettigheter.kanOverstyreAccess.isEnabled}
5153
/>
5254
) : (
5355
<LoadingPanel />

packages/fakta/felles/i18n/nb_NO.json

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
{
22
"AdresseVisning.Adresse": "Adresse",
3-
43
"ForelderPanel.Soker": "Søker",
54
"ForelderPanel.AnnenForelder": "Annen forelder",
6-
75
"AlleBarnPanel.Barn": "Barn",
86
"AlleBarnPanel.BarnNr": "Barn {nummer}",
97
"AlleBarnPanel.Fodt": "Født",
108
"AlleBarnPanel.Dod": "Død",
11-
129
"PersonPanel.RolleOgNavn": "{rolle, select, BRUKER {Søker, } ANNEN_PART {Den andre forelderen, } BARN {Barnet, } other {} }{navn}",
1310
"PersonPanel.Beskrivelse.Bruker": "Adresser for søker registrert i folkeregisteret gyldige for de siste 12 månedene",
1411
"PersonPanel.Beskrivelse.Barn": "Adresser for barnet registrert i folkeregisteret gyldige på skjæringstidspunktet",
@@ -21,7 +18,6 @@
2118
"AdresseTabell.PeriodeLabel": "Periode",
2219
"AdresseTabell.AdresseLabel": "Adresse",
2320
"AdresseTabell.TypeLabel": "Type",
24-
2521
"MerkePanel.Dod": "DØD",
2622
"MerkePanel.DodTittel": "Personen er død",
2723
"MerkePanel.DodFodt": "DØDFØDT",
@@ -33,15 +29,12 @@
3329
"MerkePanel.Diskresjon7Tittel": "Personen har diskresjonsmerking kode 7",
3430
"MerkePanel.EgenAnsattTittel": "Personen er ansatt i Nav",
3531
"MerkePanel.VergeTittel": "Personen har verge",
36-
3732
"SubmitButton.ConfirmInformation": "Bekreft og fortsett",
3833
"FaktaBegrunnelseTextField.BegrunnEndringene": "Begrunn endringene",
3934
"FaktaBegrunnelseTextField.Vurdering": "Vurdering",
4035
"FaktaBegrunnelseTextField.Begrunnelse": "Begrunnelse",
41-
4236
"TrueFalseInput.True": "Ja",
4337
"TrueFalseInput.False": "Nei",
44-
4538
"FaktaKilde.Soknad": "FRA SØKNADEN",
4639
"FaktaKilde.FREG": "FRA FOLKEREGISTERET",
4740
"FaktaKilde.MEDL": "FRA MEDLEMSKAPSREGISTERET",

packages/fakta/felles/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,5 @@ export { Personopplysninger } from './src/components/personer/Personopplysninger
1616
export { PersonopplysningerForFamilie } from './src/components/personer/PersonopplysningerForFamilie';
1717

1818
export { AdresseTabell } from './src/components/adresser/AdresseTabell';
19+
20+
export { ValueLabel } from './src/components/ValueLabel';
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import type { ReactElement, ReactNode } from 'react';
2+
3+
import { BodyShort, Label, VStack } from '@navikt/ds-react';
4+
5+
interface Props {
6+
label: ReactElement | string;
7+
children: ReactNode | ReactElement | string | number | (ReactNode | string | ReactElement | null | '')[];
8+
}
9+
10+
export const ValueLabel = ({ label, children }: Props) => {
11+
return (
12+
<VStack gap="1">
13+
<Label>{label}</Label>
14+
{isStringOrNumber(children) ? <BodyShort>{children}</BodyShort> : children}
15+
</VStack>
16+
);
17+
};
18+
19+
const isStringOrNumber = (value: unknown): value is string | number => {
20+
return typeof value === 'string' || typeof value === 'number';
21+
};

packages/fakta/fodsel/i18n/nb_NO.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
{
22
"FodselInfoPanel.KontrollerMotTerminbekreftelsen": "Kontroller terminbekreftelse",
33
"FodselInfoPanel.KontrollerMotFodselsdokumentasjon": "Kontroller mot opplysningene fra fødselsdokumentasjonen",
4+
"OverstyringPanel.Tittel": "Fakta om fødsel",
5+
"OverstyringForm.Tittel": "Overstyring av fødselsdetaljer",
6+
"OverstyringForm.Avbryt": "Avbryt",
47
"TermindatoFaktaForm.Tittel": "Kontroller opplysninger om termin oppgitt i søknaden",
58
"TermindatoFaktaForm.AdvarselForTidligUtstedtdato": "Terminbekreftelsen utstedt før 22. svangerskapsuke. Kontakt søker for en nyere terminbekreftelse og sett saken på vent. Fortsett dersom ny bekreftelse ikke skal hentes inn. Behandlingen vil avslås på grunn av manglende dokumentasjon",
69
"AvklartBarnFieldArray.LeggTilBarn": "Legg til barn",

packages/fakta/fodsel/src/FodselFaktaIndex.stories.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ const meta = {
3232
args: {
3333
submittable: true,
3434
isReadOnly: false,
35+
kanOverstyre: false,
3536
aksjonspunkterForPanel: [],
3637
alleMerknaderFraBeslutter: {},
3738
terminbekreftelseDokument: {
@@ -80,6 +81,7 @@ const meta = {
8081
},
8182
render: args => <FodselFaktaIndex {...args} />,
8283
} satisfies Meta<PanelDataArgs & ComponentProps<typeof FodselFaktaIndex>>;
84+
8385
export default meta;
8486

8587
type Story = StoryObj<typeof meta>;
@@ -276,3 +278,22 @@ export const SjekkManglendeFødselVedDødfødselForEnTvilling: Story = {
276278
},
277279
},
278280
};
281+
282+
export const Overstyring: Story = {
283+
args: {
284+
kanOverstyre: true,
285+
},
286+
};
287+
export const Overstyrt: Story = {
288+
args: {
289+
kanOverstyre: true,
290+
aksjonspunkterForPanel: [
291+
{
292+
definisjon: AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
293+
status: AksjonspunktStatus.UTFORT,
294+
begrunnelse: 'Denne saken har blitt overstyrt',
295+
kanLoses: false,
296+
},
297+
],
298+
},
299+
};

packages/fakta/fodsel/src/FodselFaktaIndex.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ interface Props {
1515
fødsel: Fødsel;
1616
terminbekreftelseDokument: DokumentLinkReferanse | undefined;
1717
submittable: boolean;
18+
kanOverstyre: boolean;
1819
}
1920

2021
export const FodselFaktaIndex = (props: Props) => (

packages/fakta/fodsel/src/components/FodselInfoPanel.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,31 @@ import { SjekkTerminbekreftelseForm } from './aksjonspunkt/SjekkTerminbekreftels
1313
import { FaktaFraFReg } from './fakta/FaktaFraFReg';
1414
import { FaktaFraSøknad } from './fakta/FaktaFraSøknad';
1515
import { Situasjon } from './fakta/Situasjon';
16+
import { OverstyringPanel } from './overstyring/OverstyringPanel';
1617

1718
const { TERMINBEKREFTELSE, SJEKK_MANGLENDE_FODSEL } = AksjonspunktKode;
1819

1920
interface Props {
2021
fødsel: Fødsel;
21-
submittable: boolean;
2222
terminbekreftelseDokument: DokumentLinkReferanse | undefined;
23+
submittable: boolean;
24+
kanOverstyre: boolean;
2325
}
2426

2527
/**
2628
* FodselInfoPanel
2729
*
2830
* Har ansvar for å sette opp formen for faktapenelet til Fødselsvilkåret.
2931
*/
30-
export const FodselInfoPanel = ({ submittable, fødsel, terminbekreftelseDokument }: Props) => {
32+
export const FodselInfoPanel = ({ submittable, fødsel, terminbekreftelseDokument, kanOverstyre }: Props) => {
3133
const { aksjonspunkterForPanel, harÅpneAksjonspunkter } = usePanelDataContext();
3234

3335
const terminbekreftelseAp = aksjonspunkterForPanel.find(ap => ap.definisjon === TERMINBEKREFTELSE);
3436
const manglendeFødselAp = aksjonspunkterForPanel.find(ap => ap.definisjon === SJEKK_MANGLENDE_FODSEL);
3537

3638
return (
3739
<VStack gap="4">
40+
<OverstyringPanel kanOverstyre={kanOverstyre} gjeldende={fødsel.gjeldende} submittable={submittable} />
3841
{harÅpneAksjonspunkter && (
3942
<AksjonspunktHelpTextHTML>
4043
<>

packages/fakta/fodsel/src/components/aksjonspunkt/SjekkManglendeFødselForm.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ const transformValues = (values: FormValues): SjekkManglendeFodselAp => ({
105105
kode: AksjonspunktKode.SJEKK_MANGLENDE_FODSEL,
106106
dokumentasjonForeligger: values.dokumentasjonForeligger!,
107107
brukAntallBarnITps: false,
108-
...BarnFieldArray.transformValues(values),
108+
109+
uidentifiserteBarn: BarnFieldArray.transformValues(values).barn,
109110
...FaktaBegrunnelseTextField.transformValues(values),
110111
});

packages/fakta/fodsel/src/components/aksjonspunkt/SjekkTerminbekreftelseForm.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
} from '@navikt/fp-fakta-felles';
1515
import { AksjonspunktKode } from '@navikt/fp-kodeverk';
1616
import type { Aksjonspunkt, Fødsel, FødselGjeldende } from '@navikt/fp-types';
17-
import type { BekreftTerminbekreftelseAp } from '@navikt/fp-types-avklar-aksjonspunkter';
17+
import type { SjekkTerminbekreftelseAp } from '@navikt/fp-types-avklar-aksjonspunkter';
1818
import { FaktaKort } from '@navikt/fp-ui-komponenter';
1919
import {
2020
maxTerminbekreftelseDato,
@@ -45,7 +45,7 @@ interface Props {
4545
export const SjekkTerminbekreftelseForm = ({ fødsel: { gjeldende, søknad }, submittable, aksjonspunkt }: Props) => {
4646
const intl = useIntl();
4747

48-
const { submitCallback, alleMerknaderFraBeslutter, isReadOnly } = usePanelDataContext<BekreftTerminbekreftelseAp>();
48+
const { submitCallback, alleMerknaderFraBeslutter, isReadOnly } = usePanelDataContext<SjekkTerminbekreftelseAp>();
4949

5050
const { mellomlagretFormData, setMellomlagretFormData } = useMellomlagretFormData<FormValues>();
5151

@@ -132,7 +132,7 @@ const initialValues = (gjeldende: FødselGjeldende, aksjonspunkt: Aksjonspunkt):
132132
...FaktaBegrunnelseTextField.initialValues(aksjonspunkt),
133133
});
134134

135-
const transformValues = (values: FormValues): BekreftTerminbekreftelseAp => ({
135+
const transformValues = (values: FormValues): SjekkTerminbekreftelseAp => ({
136136
kode: AksjonspunktKode.TERMINBEKREFTELSE,
137137
utstedtdato: values.utstedtdato!,
138138
termindato: values.termindato!,

packages/fakta/fodsel/src/components/form/BarnFieldArray.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,8 @@ BarnFieldArray.initialValues = (gjeldende: FødselGjeldende): BarnFormValues =>
149149
: lagBarn(gjeldende.antallBarn || 0),
150150
});
151151

152-
BarnFieldArray.transformValues = (values: BarnFormValues) => ({
153-
uidentifiserteBarn: values.barn.map(ab => ({
152+
BarnFieldArray.transformValues = ({ barn }: BarnFormValues) => ({
153+
barn: barn.map(ab => ({
154154
fodselsdato: ab.fodselsdato,
155155
dodsdato: ab.dodsdato === '' || ab.dodsdato === null ? undefined : ab.dodsdato,
156156
})),
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import { useForm } from 'react-hook-form';
2+
import { FormattedMessage } from 'react-intl';
3+
4+
import { Button, HStack, VStack } from '@navikt/ds-react';
5+
import { Form } from '@navikt/ft-form-hooks';
6+
7+
import { type FaktaBegrunnelseFormValues, FaktaBegrunnelseTextField, FaktaSubmitButton } from '@navikt/fp-fakta-felles';
8+
import { AksjonspunktKode } from '@navikt/fp-kodeverk';
9+
import type { FødselGjeldende } from '@navikt/fp-types';
10+
import type { OverstyringFaktaFødselAp } from '@navikt/fp-types-avklar-aksjonspunkter';
11+
import { usePanelDataContext } from '@navikt/fp-utils';
12+
13+
import { BarnFieldArray, type BarnFormValues } from '../form/BarnFieldArray';
14+
import { Termindato, type TermindatoFormValues } from '../form/Termindato';
15+
16+
interface Props {
17+
gjeldende: FødselGjeldende;
18+
isReadOnly: boolean;
19+
submittable: boolean;
20+
avbrytOverstyring: () => void;
21+
}
22+
23+
type FormValues = TermindatoFormValues & BarnFormValues & FaktaBegrunnelseFormValues;
24+
25+
export const OverstyringForm = ({ gjeldende, isReadOnly, submittable, avbrytOverstyring }: Props) => {
26+
const { submitCallback } = usePanelDataContext();
27+
28+
const formMethods = useForm<FormValues>({
29+
defaultValues: initialValues(gjeldende),
30+
});
31+
32+
return (
33+
<Form formMethods={formMethods} onSubmit={values => submitCallback(transformValues(values))}>
34+
<VStack gap="4">
35+
<Termindato isReadOnly={isReadOnly} />
36+
<BarnFieldArray isReadOnly={isReadOnly} />
37+
38+
<FaktaBegrunnelseTextField isSubmittable={submittable} isReadOnly={isReadOnly} hasBegrunnelse={true} />
39+
<HStack gap="2">
40+
<FaktaSubmitButton
41+
isSubmittable={submittable}
42+
isReadOnly={isReadOnly}
43+
isSubmitting={formMethods.formState.isSubmitting}
44+
isDirty={formMethods.formState.isDirty}
45+
/>
46+
<Button
47+
variant="secondary"
48+
size="small"
49+
type="button"
50+
onClick={() => avbrytOverstyring()}
51+
disabled={isReadOnly}
52+
>
53+
<FormattedMessage id="OverstyringForm.Avbryt" />
54+
</Button>
55+
</HStack>
56+
</VStack>
57+
</Form>
58+
);
59+
};
60+
61+
const initialValues = (gjeldende: FødselGjeldende) => ({
62+
termindato: gjeldende.termindato?.termindato ?? '',
63+
...BarnFieldArray.initialValues(gjeldende),
64+
...FaktaBegrunnelseTextField.initialValues(),
65+
});
66+
67+
const transformValues = (values: FormValues): OverstyringFaktaFødselAp => ({
68+
kode: AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
69+
termindato: values.termindato,
70+
...BarnFieldArray.transformValues(values),
71+
...FaktaBegrunnelseTextField.transformValues(values),
72+
});
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { useState } from 'react';
2+
import { FormattedMessage, useIntl } from 'react-intl';
3+
4+
import { Heading, HStack } from '@navikt/ds-react';
5+
import { OverstyringKnapp } from '@navikt/ft-ui-komponenter';
6+
7+
import { AksjonspunktKode } from '@navikt/fp-kodeverk';
8+
import type { FødselGjeldende } from '@navikt/fp-types';
9+
import { FaktaKort } from '@navikt/fp-ui-komponenter';
10+
import { usePanelDataContext } from '@navikt/fp-utils';
11+
12+
import { OverstyringForm } from './OverstyringForm';
13+
14+
interface Props {
15+
kanOverstyre: boolean;
16+
gjeldende: FødselGjeldende;
17+
submittable: boolean;
18+
}
19+
20+
export const OverstyringPanel = ({ kanOverstyre, gjeldende, submittable }: Props) => {
21+
const intl = useIntl();
22+
if (!kanOverstyre) return undefined;
23+
24+
const { aksjonspunkterForPanel, isReadOnly, alleMerknaderFraBeslutter } = usePanelDataContext();
25+
const overstyringAksjonspunkter = aksjonspunkterForPanel.filter(
26+
a => a.definisjon === AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
27+
);
28+
const [erOverstyrt, setErOverstyrt] = useState(!!overstyringAksjonspunkter[0]?.begrunnelse);
29+
return (
30+
<>
31+
<HStack gap="4">
32+
<Heading size="small">
33+
<FormattedMessage id="OverstyringPanel.Tittel" />
34+
</Heading>
35+
{!isReadOnly && <OverstyringKnapp onClick={() => setErOverstyrt(true)} erOverstyrt={erOverstyrt} />}
36+
</HStack>
37+
38+
{erOverstyrt && (
39+
<FaktaKort
40+
label={intl.formatMessage({ id: 'OverstyringForm.Tittel' })}
41+
merknaderFraBeslutter={alleMerknaderFraBeslutter[AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL]}
42+
>
43+
<OverstyringForm
44+
isReadOnly={isReadOnly}
45+
gjeldende={gjeldende}
46+
submittable={submittable}
47+
avbrytOverstyring={() => setErOverstyrt(false)}
48+
/>
49+
</FaktaKort>
50+
)}
51+
</>
52+
);
53+
};

packages/kodeverk/src/aksjonspunktCodes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export enum AksjonspunktKode {
3535
VARSEL_REVURDERING_ETTERKONTROLL = '5025', // Utgått, brukes i historikk
3636
VARSEL_REVURDERING_MANUELL = '5026',
3737
SJEKK_MANGLENDE_FODSEL = '5027',
38+
OVERSTYRING_AV_FAKTA_OM_FØDSEL = '6019',
3839
FORESLA_VEDTAK_MANUELT = '5028',
3940
KONTROLLER_STOR_ETTERBETALING_SØKER = '5029',
4041
AVKLAR_VERGE = '5030',

packages/types-avklar-aksjonspunkter/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ export type { BekreftErMedlemVurderingAp } from './src/fakta/BekreftErMedlemVurd
1313
export type { BekreftOppholdsrettVurderingAp } from './src/fakta/BekreftOppholdsrettVurderingAp';
1414
export type { BekreftLovligOppholdVurderingAp } from './src/fakta/BekreftLovligOppholdVurderingAp';
1515
export type { AvklarFortsattMedlemskapAp } from './src/fakta/AvklarFortsattMedlemskapAp';
16-
export type { BekreftTerminbekreftelseAp } from './src/fakta/BekreftTerminbekreftelseAp';
17-
export type { SjekkManglendeFodselAp } from './src/fakta/SjekkManglendeFodselAp';
16+
export type { SjekkTerminbekreftelseAp } from './src/fakta/fødsel/SjekkTerminbekreftelseAp';
17+
export type { SjekkManglendeFodselAp } from './src/fakta/fødsel/SjekkManglendeFodselAp';
18+
export type { OverstyringFaktaFødselAp } from './src/fakta/fødsel/OverstyringFaktaFødselAp';
1819
export type { AvklarAnnenforelderHarRettAp } from './src/fakta/AvklarAnnenforelderHarRettAp';
1920
export type { BekreftUttaksperioderAp } from './src/fakta/BekreftUttaksperioderAp';
2021
export type { VurderArbeidsforholdPermisjonAp } from './src/fakta/VurderArbeidsforholdPermisjonAp';

0 commit comments

Comments
 (0)