Skip to content

Commit

Permalink
Justeringer for UNG i tilkjent ytelse (#6713)
Browse files Browse the repository at this point in the history
* Justeringner for UNG i tilkjent ytelse
Tar bort uttak i ung beregning
Justeringer i tabell

* Bedre typesikring på henting av data
Story

* Fikser tester

* Bruker generert type

* Fiks story

* Rydding
  • Loading branch information
hallvardastark authored Oct 23, 2024
1 parent 398acc8 commit 967da23
Show file tree
Hide file tree
Showing 15 changed files with 208 additions and 167 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,16 @@ import { action } from '@storybook/addon-actions';
import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes';
import aksjonspunktStatus from '@fpsak-frontend/kodeverk/src/aksjonspunktStatus';
import { behandlingType } from '@k9-sak-web/backend/k9sak/kodeverk/behandling/BehandlingType.js';
import { fagsakYtelsesType } from '@k9-sak-web/backend/k9sak/kodeverk/FagsakYtelsesType.js';
import { KodeverkProvider } from '@k9-sak-web/gui/kodeverk/index.js';
import alleKodeverk from '@k9-sak-web/gui/storybook/mocks/alleKodeverk.json';
import { AksjonspunktDto, BehandlingDto } from '@navikt/k9-sak-typescript-client';
import TilkjentYtelseProsessIndex from './TilkjentYtelseProsessIndex';

const fagsak = {
sakstype: { kode: fagsakYtelsesType.PSB, kodeverk: 'FAGSAK_YTELSE' },
};

const behandling = {
id: 1,
versjon: 1,
Expand Down Expand Up @@ -160,6 +165,7 @@ export const visUtenAksjonspunkt = args => (
alleKodeverk={alleKodeverk as any}
submitCallback={action('button-click')}
arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId}
fagsak={fagsak}
{...args}
/>
);
Expand All @@ -184,6 +190,7 @@ export const visÅpentAksjonspunktTilbaketrekk = args => (
alleKodeverk={alleKodeverk as any}
submitCallback={action('button-click')}
arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId}
fagsak={fagsak}
{...args}
/>
);
Expand Down Expand Up @@ -213,6 +220,7 @@ export const visÅpentAksjonspunktManuellTilkjentYtelse = args => (
}
submitCallback={action('button-click')}
arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId}
fagsak={fagsak}
{...args}
/>
</KodeverkProvider>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { fagsakYtelsesType } from '@k9-sak-web/backend/k9sak/kodeverk/FagsakYtelsesType.js';
import { ArbeidsgiverOpplysningerPerId } from '@k9-sak-web/types';
import {
AksjonspunktDto,
Expand Down Expand Up @@ -35,6 +36,7 @@ const TilkjentYtelseProsessIndex = ({
submitCallback,
readOnlySubmitButton,
arbeidsgiverOpplysningerPerId,
fagsak,
}: OwnProps) => (
<RawIntlProvider value={intl}>
<TilkjentYtelsePanel
Expand All @@ -44,6 +46,7 @@ const TilkjentYtelseProsessIndex = ({
submitCallback={submitCallback}
readOnlySubmitButton={readOnlySubmitButton}
arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId}
isUngdomsytelseFagsak={fagsak.sakstype === fagsakYtelsesType.UNG}
/>
</RawIntlProvider>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ describe('<TilkjentYtelse>', () => {
groups={[]}
kodeverkNavnFraKode={kodeverkNavnFraKode}
arbeidsgiverOpplysningerPerId={{}}
isUngdomsytelseFagsak={false}
/>,
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ interface OwnProps {
}[];
kodeverkNavnFraKode: (kode: string, kodeverkType: KodeverkType) => string;
arbeidsgiverOpplysningerPerId: ArbeidsgiverOpplysningerPerId;
isUngdomsytelseFagsak: boolean;
}

interface OwnState {
Expand Down Expand Up @@ -237,7 +238,7 @@ export class TilkjentYtelse extends Component<OwnProps, OwnState> {
goBackward,
goForward,
openPeriodInfo,
props: { groups, items, kodeverkNavnFraKode, arbeidsgiverOpplysningerPerId },
props: { groups, items, kodeverkNavnFraKode, arbeidsgiverOpplysningerPerId, isUngdomsytelseFagsak },
selectHandler,
state: { selectedItem },
zoomIn,
Expand Down Expand Up @@ -277,6 +278,7 @@ export class TilkjentYtelse extends Component<OwnProps, OwnState> {
callbackForward={nextPeriod}
callbackBackward={prevPeriod}
arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId}
isUngdomsytelseFagsak={isUngdomsytelseFagsak}
/>
)}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ interface PureOwnProps {
submitCallback: (data: any) => Promise<any>;
readOnlySubmitButton: boolean;
arbeidsgiverOpplysningerPerId: ArbeidsgiverOpplysningerPerId;
isUngdomsytelseFagsak: boolean;
}

const TilkjentYtelsePanelImpl = ({
Expand All @@ -56,6 +57,7 @@ const TilkjentYtelsePanelImpl = ({
aksjonspunkter,
readOnly,
arbeidsgiverOpplysningerPerId,
isUngdomsytelseFagsak,
}: Partial<PureOwnProps>) => {
const { getKodeverkNavnFraKodeFn } = useKodeverkContext();
const kodeverkNavnFraKode = getKodeverkNavnFraKodeFn();
Expand All @@ -73,6 +75,7 @@ const TilkjentYtelsePanelImpl = ({
groups={groups}
arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId}
kodeverkNavnFraKode={kodeverkNavnFraKode}
isUngdomsytelseFagsak={isUngdomsytelseFagsak}
/>
)}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ describe('<TilkjentYtelseTimeLineData>', () => {
selectedItemStartDate={selectedItemStartDate}
selectedItemEndDate={selectedItemEndDate}
arbeidsgiverOpplysningerPerId={{}}
isUngdomsytelseFagsak={false}
/>,
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ interface OwnProps {
callbackForward: (...args: any[]) => any;
callbackBackward: (...args: any[]) => any;
arbeidsgiverOpplysningerPerId: ArbeidsgiverOpplysningerPerId;
isUngdomsytelseFagsak: boolean;
}

/**
Expand All @@ -38,6 +39,7 @@ const TilkjentYtelseTimeLineData = ({
callbackForward,
callbackBackward,
arbeidsgiverOpplysningerPerId,
isUngdomsytelseFagsak,
}: OwnProps) => {
const { kodeverkNavnFraKode } = useKodeverkContext();
const { andeler } = selectedItemData;
Expand Down Expand Up @@ -145,45 +147,47 @@ const TilkjentYtelseTimeLineData = ({
</div>
))}
</div>
<Tabs className="mt-12" value={String(selectedAndelIndex)} onChange={setSelectedAndelIndex}>
<Tabs.List>
{andeler.map((andel, index) => {
const label = createArbeidsgiverVisningsnavnForAndel(
andel,
kodeverkNavnFraKode,
arbeidsgiverOpplysningerPerId,
);
return <Tabs.Tab value={String(index)} key={label} label={label} />;
})}
</Tabs.List>
{andeler.map((andel, index) => (
<Tabs.Panel
key={createArbeidsgiverVisningsnavnForAndel(andel, kodeverkNavnFraKode, arbeidsgiverOpplysningerPerId)}
value={String(index)}
>
<div className="p-4">
<BodyShort size="small">
{`Utbetalt refusjon: `}
<span className="font-semibold inline-block">{andel?.refusjon} kr</span>
</BodyShort>
<BodyShort size="small">
{`Utbetalt til søker: `}
<span className="font-semibold inline-block">{andel?.tilSoker} kr</span>
</BodyShort>
<BodyShort size="small">
{`Utbetalingsgrad: `}
<span className="font-semibold inline-block">{andel?.utbetalingsgrad} %</span>
</BodyShort>
<BodyShort size="small">
{`Aktivitetsstatus: `}
<span className="font-semibold inline-block">
{getAktivitet(andel?.aktivitetStatus, kodeverkNavnFraKode)}
</span>
</BodyShort>
</div>
</Tabs.Panel>
))}
</Tabs>
{!isUngdomsytelseFagsak && (
<Tabs className="mt-12" value={String(selectedAndelIndex)} onChange={setSelectedAndelIndex}>
<Tabs.List>
{andeler.map((andel, index) => {
const label = createArbeidsgiverVisningsnavnForAndel(
andel,
kodeverkNavnFraKode,
arbeidsgiverOpplysningerPerId,
);
return <Tabs.Tab value={String(index)} key={label} label={label} />;
})}
</Tabs.List>
{andeler.map((andel, index) => (
<Tabs.Panel
key={createArbeidsgiverVisningsnavnForAndel(andel, kodeverkNavnFraKode, arbeidsgiverOpplysningerPerId)}
value={String(index)}
>
<div className="p-4">
<BodyShort size="small">
{`Utbetalt refusjon: `}
<span className="font-semibold inline-block">{andel?.refusjon} kr</span>
</BodyShort>
<BodyShort size="small">
{`Utbetalt til søker: `}
<span className="font-semibold inline-block">{andel?.tilSoker} kr</span>
</BodyShort>
<BodyShort size="small">
{`Utbetalingsgrad: `}
<span className="font-semibold inline-block">{andel?.utbetalingsgrad} %</span>
</BodyShort>
<BodyShort size="small">
{`Aktivitetsstatus: `}
<span className="font-semibold inline-block">
{getAktivitet(andel?.aktivitetStatus, kodeverkNavnFraKode)}
</span>
</BodyShort>
</div>
</Tabs.Panel>
))}
</Tabs>
)}
</TimeLineDataContainer>
);
};
Expand Down
2 changes: 1 addition & 1 deletion packages/v2/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@
},
"dependencies": {
"@navikt/k9-klage-typescript-client": "1.0.20240513162434-997f3da",
"@navikt/k9-sak-typescript-client": "1.0.20240916120432"
"@navikt/k9-sak-typescript-client": "1.0.20241022074528"
}
}
14 changes: 14 additions & 0 deletions packages/v2/gui/src/prosess/ung-beregning/UngBeregning.stories.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import type { Meta, StoryObj } from '@storybook/react';
import { FakeUngBeregningBackendApi } from '../../storybook/mocks/FakeUngBeregningBackendApi';
import UngBeregning from './UngBeregning';

const api = new FakeUngBeregningBackendApi();
const meta = {
title: 'gui/prosess/ung-beregning/UngBeregning.tsx',
component: UngBeregning,
} satisfies Meta<typeof UngBeregning>;
export default meta;

type Story = StoryObj<typeof meta>;

export const DefaultStory: Story = { args: { behandling: { uuid: '123' }, api } };
85 changes: 85 additions & 0 deletions packages/v2/gui/src/prosess/ung-beregning/UngBeregning.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import type { UngdomsytelseSatsPeriodeDto } from '@k9-sak-web/backend/k9sak/generated';
import { formatPeriod } from '@k9-sak-web/lib/dateUtils/dateUtils.js';
import { Alert, Heading, Loader, Table } from '@navikt/ds-react';
import { useQuery } from '@tanstack/react-query';
import type { UngBeregningBackendApiType } from './UngBeregningBackendApiType';

const formatCurrencyWithKr = (value: number) => {
const formattedValue = Number(value).toLocaleString('nb-NO').replace(/,|\s/g, ' ');
return `${formattedValue} kr`;
};

const formatCurrencyNoKr = (value: number) => {
if (value === null || value === undefined) {
return undefined;
}
// Fjerner mellomrom i tilfelle vi får inn tall med det
const newVal = value.toString().replace(/\s/g, '');
if (Number.isNaN(newVal)) {
return undefined;
}
return Number(Math.round(+newVal)).toLocaleString('nb-NO').replace(/,|\s/g, ' ');
};

interface Props {
behandling: { uuid: string };
api: UngBeregningBackendApiType;
}

const UngBeregning = ({ api, behandling }: Props) => {
const {
data: satser,
isLoading: satserIsLoading,
isSuccess: satserSuccess,
isError: satserIsError,
} = useQuery<UngdomsytelseSatsPeriodeDto[]>({
queryKey: ['satser'],
queryFn: () => api.getSatser(behandling.uuid),
});

if (satserIsLoading) {
return <Loader size="large" />;
}

if (satserIsError) {
return <Alert variant="error">Noe gikk galt, vennligst prøv igjen senere</Alert>;
}

return (
<div className="max-w-[768px]">
{satserSuccess && (
<div>
<Heading size="small" level="2">
Satser
</Heading>
<Table>
<Table.Header>
<Table.Row>
<Table.HeaderCell scope="col">Periode</Table.HeaderCell>
<Table.HeaderCell scope="col">Sats</Table.HeaderCell>
<Table.HeaderCell scope="col" align="right">
Grunnbeløp
</Table.HeaderCell>
<Table.HeaderCell scope="col" align="right">
Dagsats
</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
{satser.map(({ fom, tom, satsType, dagsats, grunnbeløp }) => (
<Table.Row key={`${fom}_${tom}`}>
<Table.DataCell>{fom && tom && formatPeriod(fom, tom)}</Table.DataCell>
<Table.DataCell>{satsType}</Table.DataCell>
<Table.DataCell align="right">{grunnbeløp && formatCurrencyWithKr(grunnbeløp)}</Table.DataCell>
<Table.DataCell align="right">{dagsats && formatCurrencyNoKr(dagsats)} kr</Table.DataCell>
</Table.Row>
))}
</Table.Body>
</Table>
</div>
)}
</div>
);
};

export default UngBeregning;
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import type { UngdomsytelseSatsPeriodeDto } from '@k9-sak-web/backend/k9sak/generated';

export type UngBeregningBackendApiType = {
getSatser(behandlingUuid: string): Promise<UngdomsytelseSatsPeriodeDto[]>;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import type { K9SakClient, UngdomsytelseSatsPeriodeDto } from '@k9-sak-web/backend/k9sak/generated';

export default class UngBeregningBackendClient {
#k9sak: K9SakClient;

constructor(k9sakClient: K9SakClient) {
this.#k9sak = k9sakClient;
}

async getSatser(behandlingUuid: string): Promise<UngdomsytelseSatsPeriodeDto[]> {
return this.#k9sak.ung.getUngdomsytelseInnvilgetSats(behandlingUuid);
}
}
Loading

0 comments on commit 967da23

Please sign in to comment.