Skip to content
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

Justeringer for UNG i tilkjent ytelse #6713

Merged
merged 7 commits into from
Oct 23, 2024
Merged
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 @@ -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"
}
}
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