Skip to content

TFP-6071: overstyring i fakta fødsel #6440

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: feature/TFP-6071
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,16 @@ import { useStandardFaktaPanelProps } from '../../felles/fakta/useStandardFaktaP
import { BehandlingDataContext } from '../../felles/utils/behandlingDataContext';

const AKSJONSPUNKT_KODER = [AksjonspunktKode.TERMINBEKREFTELSE, AksjonspunktKode.SJEKK_MANGLENDE_FODSEL];
const OVERSTYRING_KODER = [AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL];

export const FodselvilkaretFaktaInitPanel = () => {
const intl = useIntl();

const { behandling, fagsak } = use(BehandlingDataContext);
const { behandling, fagsak, rettigheter } = use(BehandlingDataContext);

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

const standardPanelProps = useStandardFaktaPanelProps(AKSJONSPUNKT_KODER);
const standardPanelProps = useStandardFaktaPanelProps(AKSJONSPUNKT_KODER, OVERSTYRING_KODER);

const api = useBehandlingApi(behandling);
const fagsakApi = useFagsakApi();
Expand All @@ -48,6 +49,7 @@ export const FodselvilkaretFaktaInitPanel = () => {
fødsel={faktafødsel}
terminbekreftelseDokument={terminbekreftelseDokument}
submittable={standardPanelProps.submittable}
kanOverstyre={rettigheter.kanOverstyreAccess.isEnabled}
/>
) : (
<LoadingPanel />
Expand Down
8 changes: 7 additions & 1 deletion packages/fakta/fodsel/i18n/nb_NO.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
{
"FodselInfoPanel.KontrollerMotTerminbekreftelsen": "Kontroller terminbekreftelse",
"FodselInfoPanel.KontrollerMotFodselsdokumentasjon": "Kontroller mot opplysningene fra fødselsdokumentasjonen",
"OverstyringPanel.Tittel": "Fakta om fødsel",
"OverstyringForm.Tittel": "Overstyring av fødselsdetaljer",
"OverstyringForm.Avbryt": "Avbryt",
"OverstyringForm.ErBarnetFødt": "Er barnet født?",
"OverstyringForm.Ja": "Ja",
"OverstyringForm.Nei": "Nei",
"TermindatoFaktaForm.Tittel": "Kontroller opplysninger om termin oppgitt i søknaden",
"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",
"AvklartBarnFieldArray.LeggTilBarn": "Legg til barn",
Expand All @@ -11,7 +17,7 @@
"FaktaFødselFraFReg.Tittel": "Opplysninger fra Folkeregisteret",
"FaktaFødselFraFReg.IngenBarn": "Det er ikke registrert noen fødselshendelse i Folkeregisteret",
"FaktaFødselFraSøknad.Tittel": "Opplysninger oppgitt i søknaden",
"FaktaFødselFraSøknad.Terminbekreftelse" : "Terminbekreftelse",
"FaktaFødselFraSøknad.Terminbekreftelse": "Terminbekreftelse",
"FaktaFødselFraSøknad.VisTerminbekreftelse": "Vis terminbekreftelse",
"Situasjon.OpplysningerGjeldende": "Gjeldende opplysninger",
"Label.NummerertBarn": "Barn {nummer}",
Expand Down
18 changes: 16 additions & 2 deletions packages/fakta/fodsel/src/FodselFaktaIndex.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,13 @@ import { expect } from 'vitest';

import * as stories from './FodselFaktaIndex.stories';

const { Default, APTerminbekreftelse, APSjekkManglendeFødselPåEngangstønad, APSjekkManglendeFødselPåForeldrepenger } =
composeStories(stories);
const {
Default,
APTerminbekreftelse,
APSjekkManglendeFødselPåEngangstønad,
APSjekkManglendeFødselPåForeldrepenger,
Overstyring,
} = composeStories(stories);

describe('FodselFaktaIndex', () => {
it('skal bekrefte aksjonspunkt for termin', async () => {
Expand Down Expand Up @@ -170,4 +175,13 @@ describe('FodselFaktaIndex', () => {
begrunnelse: 'Dette er en begrunnelse',
});
});

it('skal overstyre termindato og legge til et barn', async () => {
render(<Overstyring />);

expect(screen.getByText('Fakta om fødsel')).toBeInTheDocument();
await userEvent.click(screen.getByText('Overstyr'));

expect(screen.getByText('Overstyring av fødselsdetaljer')).toBeInTheDocument();
});
});
22 changes: 22 additions & 0 deletions packages/fakta/fodsel/src/FodselFaktaIndex.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const meta = {
args: {
submittable: true,
isReadOnly: false,
kanOverstyre: false,
aksjonspunkterForPanel: [],
alleMerknaderFraBeslutter: {},
terminbekreftelseDokument: {
Expand Down Expand Up @@ -79,6 +80,7 @@ const meta = {
},
render: args => <FodselFaktaIndex {...args} />,
} satisfies Meta<PanelDataArgs & ComponentProps<typeof FodselFaktaIndex>>;

export default meta;

type Story = StoryObj<typeof meta>;
Expand Down Expand Up @@ -271,3 +273,23 @@ export const SjekkManglendeFødselVedDødfødselForEnTvilling: Story = {
},
},
};

export const Overstyring: Story = {
args: {
kanOverstyre: true,
},
};
export const Overstyrt: Story = {
args: {
kanOverstyre: true,
isReadOnly: true,
aksjonspunkterForPanel: [
{
definisjon: AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
status: AksjonspunktStatus.UTFORT,
begrunnelse: 'Denne saken har blitt overstyrt',
kanLoses: false,
},
],
},
};
1 change: 1 addition & 0 deletions packages/fakta/fodsel/src/FodselFaktaIndex.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ interface Props {
fødsel: Fødsel;
terminbekreftelseDokument: DokumentLinkReferanse | undefined;
submittable: boolean;
kanOverstyre: boolean;
}

export const FodselFaktaIndex = (props: Props) => (
Expand Down
7 changes: 5 additions & 2 deletions packages/fakta/fodsel/src/components/FodselInfoPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,31 @@ import { SjekkTerminbekreftelseForm } from './aksjonspunkt/SjekkTerminbekreftels
import { FaktaFraFReg } from './fakta/FaktaFraFReg';
import { FaktaFraSøknad } from './fakta/FaktaFraSøknad';
import { Situasjon } from './fakta/Situasjon';
import { OverstyringPanel } from './overstyring/OverstyringPanel';

const { TERMINBEKREFTELSE, SJEKK_MANGLENDE_FODSEL } = AksjonspunktKode;

interface Props {
fødsel: Fødsel;
submittable: boolean;
terminbekreftelseDokument: DokumentLinkReferanse | undefined;
submittable: boolean;
kanOverstyre: boolean;
}

/**
* FodselInfoPanel
*
* Har ansvar for å sette opp formen for faktapenelet til Fødselsvilkåret.
*/
export const FodselInfoPanel = ({ submittable, fødsel, terminbekreftelseDokument }: Props) => {
export const FodselInfoPanel = ({ submittable, fødsel, terminbekreftelseDokument, kanOverstyre }: Props) => {
const { aksjonspunkterForPanel, harÅpneAksjonspunkter } = usePanelDataContext();

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

return (
<VStack gap="4">
<OverstyringPanel kanOverstyre={kanOverstyre} gjeldende={fødsel.gjeldende} submittable={submittable} />
{harÅpneAksjonspunkter && (
<AksjonspunktHelpTextHTML>
<>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,6 @@ const initialValues = (gjeldende: FødselGjeldende, aksjonspunkt: Aksjonspunkt):
const transformValues = (values: FormValues): SjekkManglendeFodselAp => ({
kode: AksjonspunktKode.SJEKK_MANGLENDE_FODSEL,
dokumentasjonForeligger: values.dokumentasjonForeligger!,
...BarnFieldArray.transformValues(values, !!values.dokumentasjonForeligger),
uidentifiserteBarn: BarnFieldArray.transformValues(values,!!values.dokumentasjonForeligger).barn,
...FaktaBegrunnelseTextField.transformValues(values),
});
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
} from '@navikt/fp-fakta-felles';
import { AksjonspunktKode } from '@navikt/fp-kodeverk';
import type { Aksjonspunkt, Fødsel, FødselGjeldende } from '@navikt/fp-types';
import type { BekreftTerminbekreftelseAp } from '@navikt/fp-types-avklar-aksjonspunkter';
import type { SjekkTerminbekreftelseAp } from '@navikt/fp-types-avklar-aksjonspunkter';
import { FaktaKort } from '@navikt/fp-ui-komponenter';
import {
maxTerminbekreftelseDato,
Expand Down Expand Up @@ -45,7 +45,7 @@ interface Props {
export const SjekkTerminbekreftelseForm = ({ fødsel: { gjeldende, søknad }, submittable, aksjonspunkt }: Props) => {
const intl = useIntl();

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

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

Expand Down Expand Up @@ -136,7 +136,7 @@ const initialValues = (gjeldende: FødselGjeldende, aksjonspunkt: Aksjonspunkt):
...FaktaBegrunnelseTextField.initialValues(aksjonspunkt),
});

const transformValues = (values: FormValues): BekreftTerminbekreftelseAp => ({
const transformValues = (values: FormValues): SjekkTerminbekreftelseAp => ({
kode: AksjonspunktKode.TERMINBEKREFTELSE,
utstedtdato: values.utstedtdato!,
termindato: values.termindato!,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,12 +157,12 @@ BarnFieldArray.initialValues = (gjeldende: FødselGjeldende): BarnFormValues =>
});

BarnFieldArray.transformValues = (
values: BarnFormValues,
{ barn }: BarnFormValues,
skalListeBrukes: boolean,
): { uidentifiserteBarn: { fodselsdato: string; dodsdato: string | undefined }[] } => ({
): { barn: { fodselsdato: string; dodsdato: string | undefined }[] } => ({
// @ts-expect-error skal være en tom liste eller null men backend må fikses
uidentifiserteBarn: skalListeBrukes
? values.barn.map(ab => ({
barn: skalListeBrukes
? barn.map(ab => ({
fodselsdato: ab.fodselsdato,
dodsdato: ab.dodsdato === '' || ab.dodsdato === null ? undefined : ab.dodsdato,
}))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import { useForm } from 'react-hook-form';
import { FormattedMessage } from 'react-intl';

import { Button, HStack, VStack } from '@navikt/ds-react';
import { Form, RadioGroupPanel } from '@navikt/ft-form-hooks';
import { required } from '@navikt/ft-form-validators';

import { type FaktaBegrunnelseFormValues, FaktaBegrunnelseTextField, FaktaSubmitButton } from '@navikt/fp-fakta-felles';
import { AksjonspunktKode } from '@navikt/fp-kodeverk';
import type { Aksjonspunkt, FødselGjeldende } from '@navikt/fp-types';
import type { OverstyringFaktaFødselAp } from '@navikt/fp-types-avklar-aksjonspunkter';
import { usePanelDataContext } from '@navikt/fp-utils';

import { BarnFieldArray, type BarnFormValues } from '../form/BarnFieldArray';
import { Termindato, type TermindatoFormValues } from '../form/Termindato';

interface Props {
gjeldende: FødselGjeldende;
isReadOnly: boolean;
submittable: boolean;
overstyringsAP: Aksjonspunkt | undefined;
avbrytOverstyring: () => void;
}

type FormValues = { erBarnetFødt: boolean } & TermindatoFormValues & BarnFormValues & FaktaBegrunnelseFormValues;

export const OverstyringForm = ({ gjeldende, isReadOnly, submittable, avbrytOverstyring, overstyringsAP }: Props) => {
const { submitCallback } = usePanelDataContext();

const formMethods = useForm<FormValues>({
defaultValues: initialValues(gjeldende, overstyringsAP),
});

return (
<Form formMethods={formMethods} onSubmit={values => submitCallback(transformValues(values))}>
<VStack gap="6">
<Termindato isReadOnly={isReadOnly} />
<RadioGroupPanel
name="erBarnetFødt"
label={<FormattedMessage id="OverstyringForm.ErBarnetFødt" />}
validate={[required]}
isReadOnly={isReadOnly}
isHorizontal
size="medium"
isTrueOrFalseSelection
radios={[
{
label: <FormattedMessage id="OverstyringForm.Ja" />,
value: 'true',
element: <BarnFieldArray isReadOnly={isReadOnly} />,
},
{
label: <FormattedMessage id="OverstyringForm.Nei" />,
value: 'false',
disabled: gjeldende.barn.some(b => b.kilde === 'FOLKEREGISTER'),
},
]}
/>
<FaktaBegrunnelseTextField
isSubmittable={submittable}
isReadOnly={isReadOnly}
hasBegrunnelse={true}
size="medium"
/>

{!isReadOnly && (
<HStack gap="2">
<FaktaSubmitButton
isSubmittable={submittable}
isReadOnly={isReadOnly}
isSubmitting={formMethods.formState.isSubmitting}
isDirty={formMethods.formState.isDirty}
/>
<Button variant="secondary" size="small" type="button" onClick={() => avbrytOverstyring()}>
<FormattedMessage id="OverstyringForm.Avbryt" />
</Button>
</HStack>
)}
</VStack>
</Form>
);
};

const initialValues = (gjeldende: FødselGjeldende, overstyringsAP?: Aksjonspunkt) => ({
termindato: gjeldende.termin?.termindato ?? '',
erBarnetFødt: gjeldende.barn.length > 0,
...BarnFieldArray.initialValues(gjeldende),
...FaktaBegrunnelseTextField.initialValues(overstyringsAP),
});

const transformValues = (values: FormValues): OverstyringFaktaFødselAp => ({
kode: AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
termindato: values.termindato,
...BarnFieldArray.transformValues(values, values.erBarnetFødt),
...FaktaBegrunnelseTextField.transformValues(values),
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { useState } from 'react';
import { FormattedMessage, useIntl } from 'react-intl';

import { Heading, HStack } from '@navikt/ds-react';
import { OverstyringKnapp } from '@navikt/ft-ui-komponenter';

import { AksjonspunktKode } from '@navikt/fp-kodeverk';
import type { FødselGjeldende } from '@navikt/fp-types';
import { FaktaKort } from '@navikt/fp-ui-komponenter';
import { usePanelDataContext } from '@navikt/fp-utils';

import { OverstyringForm } from './OverstyringForm';

interface Props {
kanOverstyre: boolean;
gjeldende: FødselGjeldende;
submittable: boolean;
}

export const OverstyringPanel = ({ kanOverstyre, gjeldende, submittable }: Props) => {
const intl = useIntl();
if (!kanOverstyre) return undefined;

const { aksjonspunkterForPanel, isReadOnly, alleMerknaderFraBeslutter } = usePanelDataContext();
const overstyringsAP = aksjonspunkterForPanel.find(
a => a.definisjon === AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL,
);
const [erOverstyrt, setErOverstyrt] = useState(!!overstyringsAP);
return (
<>
<HStack gap="4">
<Heading size="small">
<FormattedMessage id="OverstyringPanel.Tittel" />
</Heading>
{!isReadOnly && <OverstyringKnapp onClick={() => setErOverstyrt(true)} erOverstyrt={erOverstyrt} />}
</HStack>

{erOverstyrt && (
<FaktaKort
label={intl.formatMessage({ id: 'OverstyringForm.Tittel' })}
merknaderFraBeslutter={alleMerknaderFraBeslutter[AksjonspunktKode.OVERSTYRING_AV_FAKTA_OM_FØDSEL]}
>
<OverstyringForm
isReadOnly={isReadOnly}
gjeldende={gjeldende}
submittable={submittable}
overstyringsAP={overstyringsAP}
avbrytOverstyring={() => setErOverstyrt(false)}
/>
</FaktaKort>
)}
</>
);
};
1 change: 1 addition & 0 deletions packages/kodeverk/src/aksjonspunktCodes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export enum AksjonspunktKode {
VARSEL_REVURDERING_ETTERKONTROLL = '5025', // Utgått, brukes i historikk
VARSEL_REVURDERING_MANUELL = '5026',
SJEKK_MANGLENDE_FODSEL = '5027',
OVERSTYRING_AV_FAKTA_OM_FØDSEL = '6019',
FORESLA_VEDTAK_MANUELT = '5028',
KONTROLLER_STOR_ETTERBETALING_SØKER = '5029',
AVKLAR_VERGE = '5030',
Expand Down
5 changes: 3 additions & 2 deletions packages/types-avklar-aksjonspunkter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ export type { BekreftErMedlemVurderingAp } from './src/fakta/BekreftErMedlemVurd
export type { BekreftOppholdsrettVurderingAp } from './src/fakta/BekreftOppholdsrettVurderingAp';
export type { BekreftLovligOppholdVurderingAp } from './src/fakta/BekreftLovligOppholdVurderingAp';
export type { AvklarFortsattMedlemskapAp } from './src/fakta/AvklarFortsattMedlemskapAp';
export type { BekreftTerminbekreftelseAp } from './src/fakta/BekreftTerminbekreftelseAp';
export type { SjekkManglendeFodselAp } from './src/fakta/SjekkManglendeFodselAp';
export type { SjekkTerminbekreftelseAp } from './src/fakta/fødsel/SjekkTerminbekreftelseAp';
export type { SjekkManglendeFodselAp } from './src/fakta/fødsel/SjekkManglendeFodselAp';
export type { OverstyringFaktaFødselAp } from './src/fakta/fødsel/OverstyringFaktaFødselAp';
export type { AvklarAnnenforelderHarRettAp } from './src/fakta/AvklarAnnenforelderHarRettAp';
export type { BekreftUttaksperioderAp } from './src/fakta/BekreftUttaksperioderAp';
export type { VurderArbeidsforholdPermisjonAp } from './src/fakta/VurderArbeidsforholdPermisjonAp';
Expand Down
Loading
Loading