Skip to content
Closed
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
11 changes: 9 additions & 2 deletions packages/fakta-fordel-beregningsgrunnlag/i18n/nb_NO.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"BeregningInfoPanel.RefusjonBG.IngenTidligereRefusjon": "<b>{ag}</b> krever refusjon fra og med {dato}",
"BeregningInfoPanel.RefusjonBG.TidligereRefusjon": "<b>{ag}</b> krever refusjon fra og med {dato}. Det er tidligere innvilget et lavere refusjonsbeløp",
"BeregningInfoPanel.RefusjonBG.RefusjonFra": "Refusjonsbeløpet skal gjelde fra og med",
"BeregningInfoPanel.RefusjonBG.Aksjonspunkt": "Nytt refusjonskrav overlapper tidligere utbetalinger. Sett endringsdato for ny refusjon.",
"BeregningInfoPanel.RefusjonBG.Aksjonspunkt": "<b>Vurder refusjonskrav</b> {br} {harRefusjonskravForSent, select, true {Refusjonskrav er mottatt etter fristen. Vurder om krav skal tas med i beregningen.} other {}} {skalHaBr, select, true {{br}} other {}} {harAndeler, select, true {Nytt refusjonskrav overlapper tidligere utbetalinger. Sett endringsdato for ny refusjon.} other {}}",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ser Tor foreslo å løse det slik, så det er mulig det bare er et meg problem, men jeg syns denne er ganske tung å lese. hadde det kanskje vært bedre å bryte den opp i flere setninger? Så blir det mindre logikk i .json fila og mer i .tsx fila der jeg tenker det hører hjemme

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Litt sånn som jeg hadde det i utgangspunktet eller noe annet igjen? 😄

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kunne vi endret denne setningen: "Sett endringsdato for ny refusjon." til feks "Sett startdato for når nytt refusjonskrav skal gjelde fra eller "Sett startdato for nytt refusjonskrav" ?

"BeregningInfoPanel.RefusjonBG.DelvisPrMnd": "Før denne datoen skal refusjonsbeløpet per måned være",

"BeregningInfoPanel.TilkommetAktivitet.Aktivitet": "Aktivitet",
Expand Down Expand Up @@ -71,5 +71,12 @@
"TilkommetAktivitet.AlertHeading.Frilans": "Søker har en ny frilansaktivitet i AA-registeret.",
"TilkommetAktivitet.AlertHeading.Arbeidsforhold": "Søker har et nytt arbeidsforhold i AA-registeret",
"TilkommetAktivitet.AlertHeading.Dagpenger": "Søker har en ny periode med dagpenger",
"Fordeling.VurdertTidligere": "Vurdert i en tidligere behandling"
"Fordeling.VurdertTidligere": "Vurdert i en tidligere behandling",

"BeregningInfoPanel.RefusjonskravForSent.Tittel": "Refusjonskrav som har kommet for sent",
"BeregningInfoPanel.RefusjonskravForSent.ErRefusjonskravGyldig": "Skal refusjonskravet for {arbeidsgiverVisningsnavn} som ikke har kommet innen fristen tas med i beregning?",
"BeregningInfoPanel.RefusjonskravForSent.ReadMore": "Undersøk om det har vært fristavbrytende kontakt med arbeidsgiver innen frist for refusjonskrav (3 måneder).",
"BeregningInfoPanel.RefusjonskravForSent.HvordanGarJegFrem": "Hvordan går jeg frem?",
"BeregningInfoPanel.FormAlternativ.Ja": "Ja",
"BeregningInfoPanel.FormAlternativ.Nei": "Nei"
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const {
AapOgRefusjonAp5046,
AapOgRefusjonFlereBeregningsgrunnlagMedKunEnTilVurderingAp5046,
ViseVurderTilkommetRefusjonskravAp5059,
ViseVurderTilkommetRefusjonskravOgRefusjonskravForSentAp5059,
SkalVurdereTilkommetØktRefusjonPåTidligereInnvilgetDelvisRefusjonAp5059,
FordelingFlereBeregningsgrunnlagKanEndreRefusjonskravAp5046,
TilkommetAktivitet,
Expand Down Expand Up @@ -469,6 +470,75 @@ describe('FordelBeregningsgrunnlagFaktaIndex', () => {
internArbeidsforholdRef: undefined,
},
],
refusjonskravForSentListe: [],
},
],
});
});

it('skal kunne løse aksjonspunkt for tilkommet refusjonskrav og refusjonskrav for sent', async () => {
const lagre = vi.fn();

render(<ViseVurderTilkommetRefusjonskravOgRefusjonskravForSentAp5059 submitCallback={lagre} />);

expect(
await screen.findByText(content =>
content.includes('Refusjonskrav er mottatt etter fristen. Vurder om krav skal tas med i beregningen.'),
),
).toBeInTheDocument();
expect(
screen.getByText(content =>
content.includes('Nytt refusjonskrav overlapper tidligere utbetalinger. Sett endringsdato for ny refusjon.'),
),
).toBeInTheDocument();
expect(screen.getByText('Bekreft og fortsett').closest('button')).toBeDisabled();
expect(screen.getAllByText('TESTY TEST (01.01.2000)')).toHaveLength(3);
expect(screen.getByText('krever refusjon fra og med 01.07.2020')).toBeInTheDocument();
expect(screen.getByText('Refusjonsbeløpet skal gjelde fra og med')).toBeInTheDocument();
expect(
screen.getByText(
'Skal refusjonskravet for TESTY TEST (01.01.2000) som ikke har kommet innen fristen tas med i beregning?',
),
).toBeInTheDocument();

const alleInputfelt = screen.getAllByRole('textbox');
expect(alleInputfelt).toHaveLength(2);
const datofelt = alleInputfelt[0];
const begrunnelsefelt = alleInputfelt[1];

await userEvent.click(screen.getByText('Ja'));
await userEvent.type(datofelt, '01.07.2020');
await userEvent.type(begrunnelsefelt, 'Begrunnelse for refusjonsdato');

expect(await screen.findByText('Bekreft og fortsett')).toBeEnabled();
await userEvent.click(screen.getByText('Bekreft og fortsett'));

await waitFor(() => expect(lagre).toHaveBeenCalledTimes(1));
expect(lagre).toHaveBeenNthCalledWith(1, {
begrunnelse: 'Begrunnelse for refusjonsdato',
kode: 'VURDER_REFUSJONSKRAV',
grunnlag: [
{
periode: {
fom: '2020-06-01',
tom: '9999-12-31',
},
begrunnelse: 'Begrunnelse for refusjonsdato',
fastsatteAndeler: [
{
arbeidsgiverAktoerId: '999999998',
arbeidsgiverOrgnr: undefined,
delvisRefusjonPrMndFørStart: undefined,
fastsattRefusjonFom: '2020-07-01',
internArbeidsforholdRef: undefined,
},
],
refusjonskravForSentListe: [
{
arbeidsgiverId: '999999998',
skalUtvideGyldighet: true,
},
],
},
],
});
Expand Down Expand Up @@ -524,6 +594,7 @@ describe('FordelBeregningsgrunnlagFaktaIndex', () => {
internArbeidsforholdRef: undefined,
},
],
refusjonskravForSentListe: [],
},
],
});
Expand Down Expand Up @@ -577,6 +648,7 @@ describe('FordelBeregningsgrunnlagFaktaIndex', () => {
internArbeidsforholdRef: undefined,
},
],
refusjonskravForSentListe: [],
},
],
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import { beregningsgrunnlag as bgTilkommetAktivitetTrePerioderHelgMellom } from
import {
bgMedDelvisRefusjon as vurderDelvisRefBG,
bgUtenDelvisRefusjon as vurderRefusjonBG,
bgUtenDelvisRefusjonMedRefusjonskravForSent as vurderDelvisRefOgRefusjonskravForSentBG,
} from '../testdata/VurderRefusjon';
import { FordelBeregningsgrunnlagFaktaIndex } from './FordelBeregningsgrunnlagFaktaIndex';
import type { AksjonspunktSubmitType } from './types/AksjonspunktSubmitType';
Expand Down Expand Up @@ -347,6 +348,20 @@ export const ViseVurderTilkommetRefusjonskravAp5059: Story = {
},
};

export const ViseVurderTilkommetRefusjonskravOgRefusjonskravForSentAp5059: Story = {
args: {
readOnly: false,
beregningsgrunnlagListe: [vurderDelvisRefOgRefusjonskravForSentBG],
beregningsgrunnlagVilkår: lagVilkår(
[vurderDelvisRefOgRefusjonskravForSentBG].map(bg => ({
fom: bg.vilkårsperiodeFom,
tom: TIDENES_ENDE,
vurderesIBehandlingen: true,
})),
),
},
};

export const SkalVurdereTilkommetØktRefusjonPåTidligereInnvilgetDelvisRefusjonAp5059: Story = {
args: {
readOnly: false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,15 @@ import type {
RefusjonTilVurderingAndel,
} from '@navikt/ft-types';
import { AksjonspunktHelpTextHTML } from '@navikt/ft-ui-komponenter';
import { isAksjonspunktOpen } from '@navikt/ft-utils';
import { BTag, isAksjonspunktOpen } from '@navikt/ft-utils';

import type { VurderRefusjonFormValues } from '../../types/FordelBeregningsgrunnlagPanelValues';
import { FaktaFordelBeregningAvklaringsbehovCode } from '../../types/interface/FaktaFordelBeregningAvklaringsbehovCode';
import { FaktaBegrunnelseTextField } from '../felles/FaktaBegrunnelseTextField';
import { SubmitButton } from '../felles/SubmitButton';
import { TidligereUtbetalinger } from './TidligereUtbetalinger';
import { VurderEndringRefusjonRad } from './VurderEndringRefusjonRad';
import { VurderRefusjonKravForSentRad } from './VurderRefusjonKravForSentRad';

const FORM_NAME = 'VURDER_REFUSJON_BERGRUNN_FORM';

Expand All @@ -27,7 +28,7 @@ const { VURDER_REFUSJON_BERGRUNN } = FaktaFordelBeregningAvklaringsbehovCode;
const finnAvklaringsbehov = (avklaringsbehov: BeregningAvklaringsbehov[]): BeregningAvklaringsbehov | undefined =>
avklaringsbehov ? avklaringsbehov.find(ap => ap.definisjon === VURDER_REFUSJON_BERGRUNN) : undefined;

const lagRadNøkkel = (andel: RefusjonTilVurderingAndel): string => {
const lagRadNøkkelAndel = (andel: RefusjonTilVurderingAndel): string => {
if (!andel.arbeidsgiver) {
return `${andel.aktivitetStatus}${andel.internArbeidsforholdRef})`;
}
Expand Down Expand Up @@ -58,6 +59,9 @@ export const VurderEndringRefusjonField = ({
ab => ab.definisjon === FaktaFordelBeregningAvklaringsbehovCode.VURDER_REFUSJON_BERGRUNN,
);
const andeler = beregningsgrunnlag.refusjonTilVurdering?.andeler ?? [];
const refusjonskravForSentListe = beregningsgrunnlag.refusjonTilVurdering?.refusjonskravForSentListe ?? [];
const harAndeler = andeler.length > 0;
const harRefusjonskravForSent = refusjonskravForSentListe.length > 0;
const avklaringsbehovRefusjon = finnAvklaringsbehov(beregningsgrunnlag.avklaringsbehov);
const erAksjonspunktÅpent = isAksjonspunktOpen(avklaringsbehovRefusjon);
const formMethods = useFormContext<VurderRefusjonFormValues>();
Expand All @@ -66,23 +70,52 @@ export const VurderEndringRefusjonField = ({
<VStack gap="space-16">
{erAksjonspunktÅpent && (
<AksjonspunktHelpTextHTML>
<FormattedMessage id="BeregningInfoPanel.RefusjonBG.Aksjonspunkt" />
<FormattedMessage
id="BeregningInfoPanel.RefusjonBG.Aksjonspunkt"
values={{
b: BTag,
br: <br />,
harRefusjonskravForSent,
harAndeler,
skalHaBr: harRefusjonskravForSent && harAndeler,
}}
/>
</AksjonspunktHelpTextHTML>
)}
<Heading size="small" level="4">
<FormattedMessage id="BeregningInfoPanel.RefusjonBG.Tittel" />
</Heading>
<TidligereUtbetalinger
beregningsgrunnlag={beregningsgrunnlag}
arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId}
/>
{andeler.map(andel => (
{harRefusjonskravForSent && (
<Heading size="small" level="4">
<FormattedMessage id="BeregningInfoPanel.RefusjonskravForSent.Tittel" />
</Heading>
)}
{refusjonskravForSentListe.map((krav, index) => (
<VurderRefusjonKravForSentRad
key={`${krav.arbeidsgiverIdent}_${krav.erRefusjonskravGyldig}`}
refusjonskrav={krav}
kravIndex={index}
readOnly={manglerAksjonspunkt || readOnly}
arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId}
beregningsgrunnlagIndeks={vilkårperiodeFieldIndex}
/>
))}
{harAndeler && (
<>
<Heading size="small" level="4">
<FormattedMessage id="BeregningInfoPanel.RefusjonBG.Tittel" />
</Heading>
<TidligereUtbetalinger
beregningsgrunnlag={beregningsgrunnlag}
arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId}
/>
</>
)}
{andeler.map((andel, index) => (
<VurderEndringRefusjonRad
refusjonAndel={andel}
andelIndex={index}
readOnly={manglerAksjonspunkt || readOnly}
erAksjonspunktÅpent={erAksjonspunktÅpent}
arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId}
key={lagRadNøkkel(andel)}
key={lagRadNøkkelAndel(andel)}
skjæringstidspunkt={beregningsgrunnlag.skjaeringstidspunktBeregning}
formName={FORM_NAME}
vilkårperiodeFieldIndex={vilkårperiodeFieldIndex}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import type { Vilkårperiode } from '../../types/Vilkår';
import { finnVilkårsperiode, vurderesIBehandlingen } from '../felles/vilkårsperiodeUtils';
import { VurderEndringRefusjonField } from './VurderEndringRefusjonField';
import { VurderEndringRefusjonRad } from './VurderEndringRefusjonRad';
import { VurderRefusjonKravForSentRad } from './VurderRefusjonKravForSentRad.tsx';

const FORM_NAME = 'VURDER_REFUSJON_BERGRUNN_FORM';

Expand All @@ -32,34 +33,37 @@ const finnAvklaringsbehov = (avklaringsbehov: BeregningAvklaringsbehov[]): Bereg
avklaringsbehov ? avklaringsbehov.find(ap => ap.definisjon === VURDER_REFUSJON_BERGRUNN) : undefined;

const buildFieldInitialValues = (bg: Beregningsgrunnlag, vilkårsperiode: Vilkårperiode): VurderRefusjonFieldValues => {
const andeler = bg.refusjonTilVurdering?.andeler ?? [];
const refusjonAP = finnAvklaringsbehov(bg.avklaringsbehov);
let initialValues = {
const andeler = bg.refusjonTilVurdering?.andeler ?? [];
const refusjonskravListe = bg.refusjonTilVurdering?.refusjonskravForSentListe ?? [];
return {
beregningsgrunnlagStp: bg.skjaeringstidspunktBeregning,
periode: vilkårsperiode.periode,
begrunnelse: refusjonAP?.begrunnelse,
} as unknown as VurderRefusjonFieldValues;
andeler.forEach(andel => {
initialValues = {
...initialValues,
...VurderEndringRefusjonRad.buildInitialValues(andel),
};
});
return initialValues;
begrunnelse: refusjonAP?.begrunnelse || '',
refusjon: andeler.map(andel => VurderEndringRefusjonRad.buildInitialValues(andel)),
refusjonskrav: refusjonskravListe.map(krav => VurderRefusjonKravForSentRad.buildInitialValues(krav)),
};
};

const transformFieldValues = (
values: VurderRefusjonFieldValues,
bg: Beregningsgrunnlag,
): BeregningsgrunnlagTilBekreftelse<VurderRefusjonTransformedValues> => {
const andeler = bg.refusjonTilVurdering?.andeler ?? [];
const transformedAndeler = andeler.map(andel =>
VurderEndringRefusjonRad.transformValues(values, andel, bg.skjaeringstidspunktBeregning),
const transformedAndeler = andeler.map((andel, index) =>
VurderEndringRefusjonRad.transformValues(values.refusjon, andel, bg.skjaeringstidspunktBeregning, index),
);

const refusjonskravForSentListe = bg.refusjonTilVurdering?.refusjonskravForSentListe ?? [];
const transformedRefusjonskrav = refusjonskravForSentListe.map((krav, index) =>
VurderRefusjonKravForSentRad.transformValues(values.refusjonskrav, krav, index),
);

return {
periode: values.periode,
begrunnelse: values.begrunnelse,
fastsatteAndeler: transformedAndeler,
refusjonskravForSentListe: transformedRefusjonskrav,
};
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ const erValgtDatoLikSTP = (stp: string, verdiFraForm?: string): boolean => {

interface Props {
refusjonAndel: RefusjonTilVurderingAndel;
andelIndex: number;
readOnly: boolean;
erAksjonspunktÅpent: boolean;
arbeidsgiverOpplysningerPerId: ArbeidsgiverOpplysningerPerId;
Expand All @@ -49,6 +50,7 @@ interface Props {

export const VurderEndringRefusjonRad = ({
refusjonAndel,
andelIndex,
readOnly,
erAksjonspunktÅpent,
arbeidsgiverOpplysningerPerId,
Expand All @@ -61,7 +63,7 @@ export const VurderEndringRefusjonRad = ({
: 'BeregningInfoPanel.RefusjonBG.IngenTidligereRefusjon';
const formMethods = useFormContext<VurderRefusjonFormValues>();
const valgtStartdato = formMethods.watch(
`VURDER_REFUSJON_BERGRUNN_FORM.${vilkårperiodeFieldIndex}.${lagNøkkelRefusjonsstart(refusjonAndel)}`,
`VURDER_REFUSJON_BERGRUNN_FORM.${vilkårperiodeFieldIndex}.refusjon.${andelIndex}.${lagNøkkelRefusjonsstart(refusjonAndel)}`,
);
const aksjonspunktErLøstUtenDelvisRef =
!erAksjonspunktÅpent &&
Expand All @@ -87,7 +89,7 @@ export const VurderEndringRefusjonRad = ({
<FormattedMessage id="BeregningInfoPanel.RefusjonBG.RefusjonFra" />
</BodyShort>
<RhfDatepicker
name={`VURDER_REFUSJON_BERGRUNN_FORM.${vilkårperiodeFieldIndex}.${lagNøkkelRefusjonsstart(refusjonAndel)}`}
name={`VURDER_REFUSJON_BERGRUNN_FORM.${vilkårperiodeFieldIndex}.refusjon.${andelIndex}.${lagNøkkelRefusjonsstart(refusjonAndel)}`}
control={formMethods.control}
size="small"
readOnly={readOnly}
Expand All @@ -104,7 +106,7 @@ export const VurderEndringRefusjonRad = ({
<FormattedMessage id="BeregningInfoPanel.RefusjonBG.DelvisPrMnd" />
</BodyShort>
<RhfTextField
name={`VURDER_REFUSJON_BERGRUNN_FORM.${vilkårperiodeFieldIndex}.${lagNøkkelDelvisRefusjon(refusjonAndel)}`}
name={`VURDER_REFUSJON_BERGRUNN_FORM.${vilkårperiodeFieldIndex}.refusjon.${andelIndex}.${lagNøkkelDelvisRefusjon(refusjonAndel)}`}
control={formMethods.control}
className={styles.bredde}
size="small"
Expand All @@ -129,16 +131,17 @@ VurderEndringRefusjonRad.buildInitialValues = (refusjonAndel: RefusjonTilVurderi
};

VurderEndringRefusjonRad.transformValues = (
values: VurderRefusjonValues,
values: VurderRefusjonValues[],
andel: RefusjonTilVurderingAndel,
skjæringstidspunkt: string,
index: number,
): VurderRefusjonAndelTransformedValues => {
const datoNøkkel = lagNøkkelRefusjonsstart(andel);
const fastsattDato = values[datoNøkkel];
const fastsattDato = values[index][datoNøkkel];
let delvisRefusjonPrMnd;
if (andel.skalKunneFastsetteDelvisRefusjon && fastsattDato !== skjæringstidspunkt) {
const delvisNøkkel = lagNøkkelDelvisRefusjon(andel);
delvisRefusjonPrMnd = removeSpacesFromNumber(values[delvisNøkkel]);
delvisRefusjonPrMnd = removeSpacesFromNumber(values[index][delvisNøkkel]);
}
return {
arbeidsgiverOrgnr: andel.arbeidsgiver?.arbeidsgiverOrgnr,
Expand Down
Loading