From 3ae1360e356b8b6c0c4423213aca9a9b25020507 Mon Sep 17 00:00:00 2001 From: Hallvard Andreas Stark <57254397+hallvardastark@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:28:18 +0200 Subject: [PATCH] =?UTF-8?q?P=C3=A5begynt=20ungdomsytelse=20(#6626)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * init * Rydding * Rydding * Legger til manglende tekst * lazy load av pakke --- packages/behandling-ungdomsytelse/index.ts | 2 + .../behandling-ungdomsytelse/package.json | 25 ++ .../src/BehandlingUngdomsytelseIndex.tsx | 169 ++++++++++++ .../src/components/UngdomsytelsePaneler.tsx | 80 ++++++ .../components/UngdomsytelseProsess.spec.tsx | 172 ++++++++++++ .../src/components/UngdomsytelseProsess.tsx | 258 ++++++++++++++++++ .../src/data/ungdomsytelseBehandlingApi.ts | 91 ++++++ .../InngangsvilkarProsessStegPanelDef.tsx | 16 ++ .../SaksopplysningerProsessStegPanelDef.tsx | 28 ++ .../SimuleringProsessStegPanelDef.tsx | 36 +++ .../TilkjentYtelseProsessStegPanelDef.tsx | 53 ++++ .../VedtakProsessStegPanelDef.tsx | 76 ++++++ .../inngangsvilkarPaneler/AlderPanelDef.tsx | 22 ++ .../OmsorgenForPanelDef.tsx | 24 ++ .../SoknadsfristPanelDef.tsx | 65 +++++ ...sessStegUngdomsytelsePanelDefinisjoner.tsx | 15 + .../vedtakStatusUtlederUngdomsytelse.ts | 39 +++ .../src/types/FetchedData.ts | 21 ++ .../src/types/index.ts | 1 + packages/kodeverk/src/fagsakYtelseType.ts | 1 + packages/prosess-vedtak/i18n/nb_NO.json | 2 + .../src/components/VedtakHelper.jsx | 24 +- .../src/behandling/BehandlingIndex.tsx | 18 ++ public/mockServiceWorker.js | 2 +- yarn.lock | 23 ++ 25 files changed, 1254 insertions(+), 9 deletions(-) create mode 100644 packages/behandling-ungdomsytelse/index.ts create mode 100644 packages/behandling-ungdomsytelse/package.json create mode 100644 packages/behandling-ungdomsytelse/src/BehandlingUngdomsytelseIndex.tsx create mode 100644 packages/behandling-ungdomsytelse/src/components/UngdomsytelsePaneler.tsx create mode 100644 packages/behandling-ungdomsytelse/src/components/UngdomsytelseProsess.spec.tsx create mode 100644 packages/behandling-ungdomsytelse/src/components/UngdomsytelseProsess.tsx create mode 100644 packages/behandling-ungdomsytelse/src/data/ungdomsytelseBehandlingApi.ts create mode 100644 packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/InngangsvilkarProsessStegPanelDef.tsx create mode 100644 packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/SaksopplysningerProsessStegPanelDef.tsx create mode 100644 packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/SimuleringProsessStegPanelDef.tsx create mode 100644 packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/TilkjentYtelseProsessStegPanelDef.tsx create mode 100644 packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/VedtakProsessStegPanelDef.tsx create mode 100644 packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/AlderPanelDef.tsx create mode 100644 packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/OmsorgenForPanelDef.tsx create mode 100644 packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/SoknadsfristPanelDef.tsx create mode 100644 packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegUngdomsytelsePanelDefinisjoner.tsx create mode 100644 packages/behandling-ungdomsytelse/src/panelDefinisjoner/vedtakStatusUtlederUngdomsytelse.ts create mode 100644 packages/behandling-ungdomsytelse/src/types/FetchedData.ts create mode 100644 packages/behandling-ungdomsytelse/src/types/index.ts diff --git a/packages/behandling-ungdomsytelse/index.ts b/packages/behandling-ungdomsytelse/index.ts new file mode 100644 index 0000000000..aa0e2abcab --- /dev/null +++ b/packages/behandling-ungdomsytelse/index.ts @@ -0,0 +1,2 @@ +export { default } from './src/BehandlingUngdomsytelseIndex'; +export * from './src/types'; diff --git a/packages/behandling-ungdomsytelse/package.json b/packages/behandling-ungdomsytelse/package.json new file mode 100644 index 0000000000..95f77a240b --- /dev/null +++ b/packages/behandling-ungdomsytelse/package.json @@ -0,0 +1,25 @@ +{ + "name": "@k9-sak-web/behandling-ungdomsytelse", + "version": "1.0.0", + "module": "index.ts", + "license": "MIT", + "private": true, + "dependencies": { + "@fpsak-frontend/kodeverk": "1.0.0", + "@fpsak-frontend/prosess-saksopplysninger": "1.0.0", + "@fpsak-frontend/prosess-tilkjent-ytelse": "1.0.0", + "@fpsak-frontend/prosess-vedtak": "1.0.0", + "@fpsak-frontend/shared-components": "1.0.0", + "@fpsak-frontend/utils": "1.0.0", + "@k9-sak-web/behandling-felles": "1.0.0", + "@k9-sak-web/konstanter": "1.0.0", + "@k9-sak-web/prosess-vilkar-soknadsfrist": "1.0.0", + "@k9-sak-web/rest-api": "1.0.0", + "@k9-sak-web/rest-api-hooks": "1.0.0", + "@k9-sak-web/sak-app": "1.0.0", + "@k9-sak-web/types": "1.0.0", + "axios": "1.7.7", + "react": "18.3.1", + "react-intl": "6.6.8" + } +} diff --git a/packages/behandling-ungdomsytelse/src/BehandlingUngdomsytelseIndex.tsx b/packages/behandling-ungdomsytelse/src/BehandlingUngdomsytelseIndex.tsx new file mode 100644 index 0000000000..d81531ce72 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/BehandlingUngdomsytelseIndex.tsx @@ -0,0 +1,169 @@ +import { useCallback, useEffect, useState } from 'react'; + +import { LoadingPanel } from '@fpsak-frontend/shared-components'; +import { ReduxFormStateCleaner, Rettigheter, useSetBehandlingVedEndring } from '@k9-sak-web/behandling-felles'; +import { RestApiState, useRestApiErrorDispatcher } from '@k9-sak-web/rest-api-hooks'; +import { + ArbeidsgiverOpplysningerWrapper, + Behandling, + Fagsak, + FagsakPerson, + FeatureToggles, + KodeverkMedNavn, +} from '@k9-sak-web/types'; + +import UngdomsytelsePaneler from './components/UngdomsytelsePaneler'; +import { + UngdomsytelseBehandlingApiKeys, + requestUngdomsytelseApi, + restApiUngdomsytelseHooks, +} from './data/ungdomsytelseBehandlingApi'; +import { FetchedData } from './types'; + +const ungdomsytelseData = [ + { key: UngdomsytelseBehandlingApiKeys.AKSJONSPUNKTER }, + { key: UngdomsytelseBehandlingApiKeys.VILKAR }, + { key: UngdomsytelseBehandlingApiKeys.PERSONOPPLYSNINGER }, + { key: UngdomsytelseBehandlingApiKeys.SOKNAD }, + { key: UngdomsytelseBehandlingApiKeys.BEREGNINGSRESULTAT_UTBETALING }, + { key: UngdomsytelseBehandlingApiKeys.BEREGNINGSGRUNNLAG }, + { key: UngdomsytelseBehandlingApiKeys.SIMULERING_RESULTAT }, +]; + +interface OwnProps { + behandlingId: number; + fagsak: Fagsak; + fagsakPerson: FagsakPerson; + rettigheter: Rettigheter; + oppdaterProsessStegOgFaktaPanelIUrl: (punktnavn?: string, faktanavn?: string) => void; + valgtProsessSteg?: string; + valgtFaktaSteg?: string; + oppdaterBehandlingVersjon: (versjon: number) => void; + behandlingEventHandler: { + setHandler: (events: { [key: string]: (params: any) => Promise }) => void; + clear: () => void; + }; + opneSokeside: () => void; + featureToggles: FeatureToggles; + kodeverk?: { [key: string]: KodeverkMedNavn[] }; + arbeidsgiverOpplysninger?: ArbeidsgiverOpplysningerWrapper; + setRequestPendingMessage: (message: string) => void; +} + +const BehandlingUngdomsytelseIndex = ({ + behandlingEventHandler, + behandlingId, + oppdaterBehandlingVersjon, + kodeverk, + fagsak, + fagsakPerson, + rettigheter, + oppdaterProsessStegOgFaktaPanelIUrl, + valgtProsessSteg, + opneSokeside, + valgtFaktaSteg, + arbeidsgiverOpplysninger, + setRequestPendingMessage, + featureToggles, +}: OwnProps) => { + const [nyOgForrigeBehandling, setBehandlinger] = useState<{ current?: Behandling; previous?: Behandling }>({ + current: undefined, + previous: undefined, + }); + const behandling = nyOgForrigeBehandling.current; + const forrigeBehandling = nyOgForrigeBehandling.previous; + + const setBehandling = useCallback(nyBehandling => { + requestUngdomsytelseApi.resetCache(); + requestUngdomsytelseApi.setLinks(nyBehandling.links); + setBehandlinger(prevState => ({ current: nyBehandling, previous: prevState.current })); + }, []); + + const { + startRequest: hentBehandling, + data: behandlingRes, + state: behandlingState, + } = restApiUngdomsytelseHooks.useRestApiRunner(UngdomsytelseBehandlingApiKeys.BEHANDLING_UU); + useSetBehandlingVedEndring(behandlingRes, setBehandling); + + const { addErrorMessage } = useRestApiErrorDispatcher(); + + const { startRequest: nyBehandlendeEnhet } = restApiUngdomsytelseHooks.useRestApiRunner( + UngdomsytelseBehandlingApiKeys.BEHANDLING_NY_BEHANDLENDE_ENHET, + ); + const { startRequest: settBehandlingPaVent } = restApiUngdomsytelseHooks.useRestApiRunner( + UngdomsytelseBehandlingApiKeys.BEHANDLING_ON_HOLD, + ); + const { startRequest: taBehandlingAvVent } = restApiUngdomsytelseHooks.useRestApiRunner( + UngdomsytelseBehandlingApiKeys.RESUME_BEHANDLING, + ); + const { startRequest: henleggBehandling } = restApiUngdomsytelseHooks.useRestApiRunner( + UngdomsytelseBehandlingApiKeys.HENLEGG_BEHANDLING, + ); + const { startRequest: settPaVent } = restApiUngdomsytelseHooks.useRestApiRunner( + UngdomsytelseBehandlingApiKeys.UPDATE_ON_HOLD, + ); + const { startRequest: lagreRisikoklassifiseringAksjonspunkt } = restApiUngdomsytelseHooks.useRestApiRunner( + UngdomsytelseBehandlingApiKeys.SAVE_AKSJONSPUNKT, + ); + + useEffect(() => { + behandlingEventHandler.setHandler({ + endreBehandlendeEnhet: params => nyBehandlendeEnhet(params).then(() => hentBehandling({ behandlingId }, true)), + settBehandlingPaVent: params => settBehandlingPaVent(params).then(() => hentBehandling({ behandlingId }, true)), + taBehandlingAvVent: params => + taBehandlingAvVent(params).then(behandlingResTaAvVent => setBehandling(behandlingResTaAvVent)), + henleggBehandling: params => henleggBehandling(params), + lagreRisikoklassifiseringAksjonspunkt: params => lagreRisikoklassifiseringAksjonspunkt(params), + }); + + requestUngdomsytelseApi.setRequestPendingHandler(setRequestPendingMessage); + requestUngdomsytelseApi.setAddErrorMessageHandler(addErrorMessage); + + hentBehandling({ behandlingId }, false); + + return () => { + behandlingEventHandler.clear(); + }; + }, []); + + const { data, state } = restApiUngdomsytelseHooks.useMultipleRestApi(ungdomsytelseData, { + keepData: true, + updateTriggers: [behandling?.versjon], + suspendRequest: !behandling, + }); + + const harIkkeHentetBehandlingsdata = state === RestApiState.LOADING || state === RestApiState.NOT_STARTED; + if (!behandling || (harIkkeHentetBehandlingsdata && data === undefined) || state === RestApiState.ERROR) { + return ; + } + + return ( + <> + + + + ); +}; + +export default BehandlingUngdomsytelseIndex; diff --git a/packages/behandling-ungdomsytelse/src/components/UngdomsytelsePaneler.tsx b/packages/behandling-ungdomsytelse/src/components/UngdomsytelsePaneler.tsx new file mode 100644 index 0000000000..7da07e2a13 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/components/UngdomsytelsePaneler.tsx @@ -0,0 +1,80 @@ +import { BehandlingPaVent, Rettigheter, SettPaVentParams } from '@k9-sak-web/behandling-felles'; +import { + ArbeidsgiverOpplysningerPerId, + Behandling, + Fagsak, + FagsakPerson, + FeatureToggles, + KodeverkMedNavn, +} from '@k9-sak-web/types'; +import FetchedData from '../types/FetchedData'; +import UngdomsytelseProsess from './UngdomsytelseProsess'; + +interface OwnProps { + fetchedData: FetchedData; + fagsak: Fagsak; + fagsakPerson: FagsakPerson; + behandling: Behandling; + alleKodeverk: { [key: string]: KodeverkMedNavn[] }; + rettigheter: Rettigheter; + valgtProsessSteg?: string; + valgtFaktaSteg?: string; + oppdaterProsessStegOgFaktaPanelIUrl: (punktnavn?: string, faktanavn?: string) => void; + oppdaterBehandlingVersjon: (versjon: number) => void; + settPaVent: (params: SettPaVentParams) => Promise; + opneSokeside: () => void; + hasFetchError: boolean; + setBehandling: (behandling: Behandling) => void; + arbeidsgiverOpplysningerPerId: ArbeidsgiverOpplysningerPerId; + featureToggles: FeatureToggles; +} + +const UngdomsytelsePaneler = ({ + fetchedData, + fagsak, + fagsakPerson, + behandling, + alleKodeverk, + rettigheter, + valgtProsessSteg, + oppdaterProsessStegOgFaktaPanelIUrl, + valgtFaktaSteg, + oppdaterBehandlingVersjon, + settPaVent, + opneSokeside, + hasFetchError, + setBehandling, + arbeidsgiverOpplysningerPerId, + featureToggles, +}: OwnProps) => { + return ( + <> + + + + + ); +}; + +export default UngdomsytelsePaneler; diff --git a/packages/behandling-ungdomsytelse/src/components/UngdomsytelseProsess.spec.tsx b/packages/behandling-ungdomsytelse/src/components/UngdomsytelseProsess.spec.tsx new file mode 100644 index 0000000000..e6264f92ea --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/components/UngdomsytelseProsess.spec.tsx @@ -0,0 +1,172 @@ +import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; +import aksjonspunktStatus from '@fpsak-frontend/kodeverk/src/aksjonspunktStatus'; +import behandlingStatus from '@fpsak-frontend/kodeverk/src/behandlingStatus'; +import behandlingType from '@fpsak-frontend/kodeverk/src/behandlingType'; +import fagsakStatus from '@fpsak-frontend/kodeverk/src/fagsakStatus'; +import kodeverkTyper from '@fpsak-frontend/kodeverk/src/kodeverkTyper'; +import personstatusType from '@fpsak-frontend/kodeverk/src/personstatusType'; +import soknadType from '@fpsak-frontend/kodeverk/src/soknadType'; +import vilkarType from '@fpsak-frontend/kodeverk/src/vilkarType'; +import vilkarUtfallType from '@fpsak-frontend/kodeverk/src/vilkarUtfallType'; +import { renderWithIntlAndReduxForm } from '@fpsak-frontend/utils-test/test-utils'; +import { fagsakYtelsesType } from '@k9-sak-web/backend/k9sak/kodeverk/FagsakYtelsesType.js'; +import { K9sakApiKeys, requestApi } from '@k9-sak-web/sak-app/src/data/k9sakApi'; +import { Behandling, Fagsak, Soknad } from '@k9-sak-web/types'; +import { act, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { UngdomsytelseBehandlingApiKeys, requestUngdomsytelseApi } from '../data/ungdomsytelseBehandlingApi'; +import FetchedData from '../types/FetchedData'; +import UngdomsytelseProsess from './UngdomsytelseProsess'; + +describe('', () => { + const fagsak = { + saksnummer: '123456', + sakstype: { kode: fagsakYtelsesType.FP, kodeverk: 'FAGSAK_YTELSE' }, + status: { kode: fagsakStatus.UNDER_BEHANDLING, kodeverk: 'FAGSAK_STATUS' }, + } as Fagsak; + + const fagsakPerson = { + alder: 30, + personstatusType: { kode: personstatusType.BOSATT, kodeverk: 'test' }, + erDod: false, + erKvinne: true, + navn: 'Espen Utvikler', + personnummer: '12345', + }; + const behandling = { + id: 1, + versjon: 2, + status: { kode: behandlingStatus.BEHANDLING_UTREDES, kodeverk: 'test' }, + type: { kode: behandlingType.FORSTEGANGSSOKNAD, kodeverk: 'test' }, + behandlingPaaVent: false, + taskStatus: { + readOnly: false, + }, + behandlingHenlagt: false, + links: [], + }; + const rettigheter = { + writeAccess: { + isEnabled: true, + employeeHasAccess: true, + }, + kanOverstyreAccess: { + isEnabled: true, + employeeHasAccess: true, + }, + }; + const aksjonspunkter = [ + { + definisjon: { kode: aksjonspunktCodes.AUTOMATISK_MARKERING_AV_UTENLANDSSAK, kodeverk: 'test' }, + status: { kode: aksjonspunktStatus.OPPRETTET, kodeverk: 'test' }, + kanLoses: true, + erAktivt: true, + }, + ]; + const vilkar = [ + { + vilkarType: { kode: vilkarType.ALDERSVILKARET, kodeverk: 'test' }, + overstyrbar: true, + perioder: [ + { + merknadParametere: {}, + vilkarStatus: { kode: vilkarUtfallType.IKKE_VURDERT, kodeverk: 'test' }, + periode: { fom: '2020-12-30', tom: '2021-02-28' }, + }, + ], + }, + ]; + + const soknad = { + fodselsdatoer: { + 0: '2019-01-01', + } as Record, + antallBarn: 1, + soknadType: { + kode: soknadType.FODSEL, + kodeverk: 'test', + }, + } as Soknad; + + const arbeidsgiverOpplysningerPerId = { + 123: { + erPrivatPerson: false, + identifikator: 'testId', + navn: 'testNavn', + arbeidsforholdreferanser: [], + }, + }; + + const fetchedData: Partial = { + aksjonspunkter, + vilkar, + soknad, + }; + + it('skal vise alle aktuelle prosessSteg i meny', () => { + requestUngdomsytelseApi.mock(UngdomsytelseBehandlingApiKeys.SOKNADSFRIST_STATUS); + requestApi.mock(K9sakApiKeys.FEATURE_TOGGLE, []); + renderWithIntlAndReduxForm( + , + ); + + expect(screen.getByRole('button', { name: 'Inngangsvilkår' })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: /Tilkjent ytelse/i })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: /Simulering/i })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: /Vedtak/i })).toBeInTheDocument(); + }); + + it('skal sette nytt valgt prosessSteg ved trykk i meny', async () => { + requestApi.mock(K9sakApiKeys.FEATURE_TOGGLE, []); + const oppdaterProsessStegOgFaktaPanelIUrl = vi.fn(); + renderWithIntlAndReduxForm( + , + ); + + await act(async () => { + await userEvent.click(screen.getByRole('button', { name: 'Vedtak' })); + }); + + const opppdaterKall = oppdaterProsessStegOgFaktaPanelIUrl.mock.calls; + expect(opppdaterKall).toHaveLength(1); + expect(opppdaterKall[0]).toHaveLength(2); + expect(opppdaterKall[0][0]).toEqual('vedtak'); + expect(opppdaterKall[0][1]).toEqual('default'); + }); +}); diff --git a/packages/behandling-ungdomsytelse/src/components/UngdomsytelseProsess.tsx b/packages/behandling-ungdomsytelse/src/components/UngdomsytelseProsess.tsx new file mode 100644 index 0000000000..597fd077e8 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/components/UngdomsytelseProsess.tsx @@ -0,0 +1,258 @@ +import { useCallback, useState } from 'react'; + +import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; +import behandlingStatus from '@fpsak-frontend/kodeverk/src/behandlingStatus'; +import { bestemAvsenderApp, forhandsvis, getForhandsvisCallback } from '@fpsak-frontend/utils/src/formidlingUtils'; +import { + FatterVedtakStatusModal, + IverksetterVedtakStatusModal, + ProsessStegContainer, + ProsessStegPanel, + Rettigheter, + lagDokumentdata, + prosessStegHooks, + useSetBehandlingVedEndring, +} from '@k9-sak-web/behandling-felles'; +import { + ArbeidsgiverOpplysningerPerId, + Behandling, + Fagsak, + FagsakPerson, + FeatureToggles, + KodeverkMedNavn, +} from '@k9-sak-web/types'; + +import { UngdomsytelseBehandlingApiKeys, restApiUngdomsytelseHooks } from '../data/ungdomsytelseBehandlingApi'; +import prosessStegPanelDefinisjoner from '../panelDefinisjoner/prosessStegUngdomsytelsePanelDefinisjoner'; +import FetchedData from '../types/FetchedData'; + +interface OwnProps { + data: FetchedData; + fagsak: Fagsak; + fagsakPerson: FagsakPerson; + behandling: Behandling; + alleKodeverk: { [key: string]: KodeverkMedNavn[] }; + rettigheter: Rettigheter; + valgtProsessSteg?: string; + valgtFaktaSteg?: string; + hasFetchError: boolean; + oppdaterBehandlingVersjon: (versjon: number) => void; + oppdaterProsessStegOgFaktaPanelIUrl: (punktnavn?: string, faktanavn?: string) => void; + opneSokeside: () => void; + setBehandling: (behandling: Behandling) => void; + arbeidsgiverOpplysningerPerId: ArbeidsgiverOpplysningerPerId; + featureToggles: FeatureToggles; +} + +const getForhandsvisFptilbakeCallback = + (forhandsvisTilbakekrevingMelding: (data: any) => Promise, fagsak: Fagsak, behandling: Behandling) => + (mottaker: string, brevmalkode: string, fritekst: string, saksnummer: string) => { + const data = { + behandlingUuid: behandling.uuid, + fagsakYtelseType: fagsak.sakstype, + varseltekst: fritekst || '', + mottaker, + brevmalkode, + saksnummer, + }; + return forhandsvisTilbakekrevingMelding(data).then(response => forhandsvis(response)); + }; + +const getLagringSideeffekter = + ( + toggleIverksetterVedtakModal, + toggleFatterVedtakModal, + oppdaterProsessStegOgFaktaPanelIUrl, + opneSokeside, + lagreDokumentdata, + ) => + async aksjonspunktModels => { + const erRevurderingsaksjonspunkt = aksjonspunktModels.some( + apModel => + (apModel.kode === aksjonspunktCodes.VARSEL_REVURDERING_MANUELL || + apModel.kode === aksjonspunktCodes.VARSEL_REVURDERING_ETTERKONTROLL) && + apModel.sendVarsel, + ); + + const visIverksetterVedtakModal = aksjonspunktModels.some( + aksjonspunkt => + aksjonspunkt.isVedtakSubmission && + [ + aksjonspunktCodes.VEDTAK_UTEN_TOTRINNSKONTROLL, + aksjonspunktCodes.FATTER_VEDTAK, + aksjonspunktCodes.FORESLA_VEDTAK_MANUELT, + ].includes(aksjonspunkt.kode), + ); + + const visFatterVedtakModal = + aksjonspunktModels[0].isVedtakSubmission && aksjonspunktModels[0].kode === aksjonspunktCodes.FORESLA_VEDTAK; + + if (aksjonspunktModels[0].isVedtakSubmission) { + const dokumentdata = lagDokumentdata(aksjonspunktModels[0]); + if (dokumentdata) await lagreDokumentdata(dokumentdata); + } + + // Returner funksjon som blir kjørt etter lagring av aksjonspunkt(er) + return () => { + if (visFatterVedtakModal) { + toggleFatterVedtakModal(true); + } else if (visIverksetterVedtakModal) { + toggleIverksetterVedtakModal(true); + } else if (erRevurderingsaksjonspunkt) { + opneSokeside(); + } else { + oppdaterProsessStegOgFaktaPanelIUrl('default', 'default'); + } + }; + }; + +const getHentFritekstbrevHtmlCallback = + ( + hentFriteksbrevHtml: (data: any) => Promise, + behandling: Behandling, + fagsak: Fagsak, + fagsakPerson: FagsakPerson, + ) => + (parameters: any) => + hentFriteksbrevHtml({ + ...parameters, + eksternReferanse: behandling.uuid, + ytelseType: fagsak.sakstype, + saksnummer: fagsak.saksnummer, + aktørId: fagsakPerson.aktørId, + avsenderApplikasjon: bestemAvsenderApp(behandling.type.kode), + }); + +const UngdomsytelseProsess = ({ + data, + fagsak, + fagsakPerson, + behandling, + alleKodeverk, + rettigheter, + valgtProsessSteg, + valgtFaktaSteg, + hasFetchError, + oppdaterBehandlingVersjon, + oppdaterProsessStegOgFaktaPanelIUrl, + opneSokeside, + setBehandling, + arbeidsgiverOpplysningerPerId, + featureToggles, +}: OwnProps) => { + prosessStegHooks.useOppdateringAvBehandlingsversjon(behandling.versjon, oppdaterBehandlingVersjon); + + const { startRequest: lagreAksjonspunkter, data: apBehandlingRes } = + restApiUngdomsytelseHooks.useRestApiRunner(UngdomsytelseBehandlingApiKeys.SAVE_AKSJONSPUNKT); + + const { startRequest: lagreOverstyrteAksjonspunkter, data: apOverstyrtBehandlingRes } = + restApiUngdomsytelseHooks.useRestApiRunner(UngdomsytelseBehandlingApiKeys.SAVE_OVERSTYRT_AKSJONSPUNKT); + + const { startRequest: forhandsvisMelding } = restApiUngdomsytelseHooks.useRestApiRunner( + UngdomsytelseBehandlingApiKeys.PREVIEW_MESSAGE, + ); + const { startRequest: forhandsvisTilbakekrevingMelding } = restApiUngdomsytelseHooks.useRestApiRunner( + UngdomsytelseBehandlingApiKeys.PREVIEW_TILBAKEKREVING_MESSAGE, + ); + const { startRequest: lagreDokumentdata } = restApiUngdomsytelseHooks.useRestApiRunner( + UngdomsytelseBehandlingApiKeys.DOKUMENTDATA_LAGRE, + ); + const { startRequest: hentFriteksbrevHtml } = restApiUngdomsytelseHooks.useRestApiRunner( + UngdomsytelseBehandlingApiKeys.HENT_FRITEKSTBREV_HTML, + ); + + useSetBehandlingVedEndring(apBehandlingRes, setBehandling); + useSetBehandlingVedEndring(apOverstyrtBehandlingRes, setBehandling); + + const dataTilUtledingAvUngdomsytelsePaneler = { + fagsakPerson, + previewCallback: useCallback(getForhandsvisCallback(forhandsvisMelding, fagsak, fagsakPerson, behandling), [ + behandling.versjon, + ]), + previewFptilbakeCallback: useCallback( + getForhandsvisFptilbakeCallback(forhandsvisTilbakekrevingMelding, fagsak, behandling), + [behandling.versjon], + ), + hentFritekstbrevHtmlCallback: useCallback( + getHentFritekstbrevHtmlCallback(hentFriteksbrevHtml, behandling, fagsak, fagsakPerson), + [behandling.versjon], + ), + alleKodeverk, + featureToggles, + arbeidsgiverOpplysningerPerId, + lagreDokumentdata, + ...data, + }; + + const [prosessStegPaneler, valgtPanel, formaterteProsessStegPaneler] = prosessStegHooks.useProsessStegPaneler( + prosessStegPanelDefinisjoner, + dataTilUtledingAvUngdomsytelsePaneler, + fagsak, + rettigheter, + behandling, + data.aksjonspunkter, + data.vilkar, + hasFetchError, + valgtProsessSteg, + ); + + const [visIverksetterVedtakModal, toggleIverksetterVedtakModal] = useState(false); + const [visFatterVedtakModal, toggleFatterVedtakModal] = useState(false); + const lagringSideeffekterCallback = getLagringSideeffekter( + toggleIverksetterVedtakModal, + toggleFatterVedtakModal, + oppdaterProsessStegOgFaktaPanelIUrl, + opneSokeside, + lagreDokumentdata, + ); + + const velgProsessStegPanelCallback = prosessStegHooks.useProsessStegVelger( + prosessStegPaneler, + valgtFaktaSteg, + behandling, + oppdaterProsessStegOgFaktaPanelIUrl, + valgtProsessSteg, + valgtPanel, + ); + + return ( + <> + { + toggleIverksetterVedtakModal(false); + opneSokeside(); + }, [])} + behandlingsresultat={behandling.behandlingsresultat} + /> + { + toggleFatterVedtakModal(false); + opneSokeside(); + }, [])} + tekstkode="FatterVedtakStatusModal.ModalDescriptionPleiepenger" + /> + + + + + ); +}; + +export default UngdomsytelseProsess; diff --git a/packages/behandling-ungdomsytelse/src/data/ungdomsytelseBehandlingApi.ts b/packages/behandling-ungdomsytelse/src/data/ungdomsytelseBehandlingApi.ts new file mode 100644 index 0000000000..b01c3dd1d2 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/data/ungdomsytelseBehandlingApi.ts @@ -0,0 +1,91 @@ +import { RestApiConfigBuilder, createRequestApi } from '@k9-sak-web/rest-api'; +import { RestApiHooks } from '@k9-sak-web/rest-api-hooks'; + +// NB! ALDRI BRUK DETTE UTENFOR DENNE BEHANDLINGSPAKKEN + +export enum UngdomsytelseBehandlingApiKeys { + BEHANDLING_UU = 'BEHANDLING_UU', + UPDATE_ON_HOLD = 'UPDATE_ON_HOLD', + SAVE_AKSJONSPUNKT = 'SAVE_AKSJONSPUNKT', + SAVE_OVERSTYRT_AKSJONSPUNKT = 'SAVE_OVERSTYRT_AKSJONSPUNKT', + PREVIEW_MESSAGE = 'PREVIEW_MESSAGE', + PREVIEW_TILBAKEKREVING_MESSAGE = 'PREVIEW_TILBAKEKREVING_MESSAGE', + HENT_FRITEKSTBREV_HTML = 'HENT_FRITEKSTBREV_HTML', + AKSJONSPUNKTER = 'AKSJONSPUNKTER', + VILKAR = 'VILKAR', + SOKNADSFRIST_STATUS = 'SOKNADSFRIST_STATUS', + PERSONOPPLYSNINGER = 'PERSONOPPLYSNINGER', + SIMULERING_RESULTAT = 'SIMULERING_RESULTAT', + TILBAKEKREVINGVALG = 'TILBAKEKREVINGVALG', + BEREGNINGSRESULTAT_UTBETALING = 'BEREGNINGSRESULTAT_UTBETALING', + BEREGNINGSGRUNNLAG = 'BEREGNINGSGRUNNLAG', + SOKNAD = 'SOKNAD', + MEDLEMSKAP = 'MEDLEMSKAP', + SEND_VARSEL_OM_REVURDERING = 'SEND_VARSEL_OM_REVURDERING', + BEHANDLING_NY_BEHANDLENDE_ENHET = 'BEHANDLING_NY_BEHANDLENDE_ENHET', + HENLEGG_BEHANDLING = 'HENLEGG_BEHANDLING', + RESUME_BEHANDLING = 'RESUME_BEHANDLING', + BEHANDLING_ON_HOLD = 'BEHANDLING_ON_HOLD', + TILGJENGELIGE_VEDTAKSBREV = 'TILGJENGELIGE_VEDTAKSBREV', + INFORMASJONSBEHOV_VEDTAKSBREV = 'INFORMASJONSBEHOV_VEDTAKSBREV', + DOKUMENTDATA_LAGRE = 'DOKUMENTDATA_LAGRE', + DOKUMENTDATA_HENTE = 'DOKUMENTDATA_HENTE', + FRITEKSTDOKUMENTER = 'FRITEKSTDOKUMENTER', + OVERLAPPENDE_YTELSER = 'OVERLAPPENDE_YTELSER', +} + +const endpoints = new RestApiConfigBuilder() + .withAsyncPost('/k9/sak/api/behandlinger', UngdomsytelseBehandlingApiKeys.BEHANDLING_UU) + + // behandlingsdata + .withRel('beregningsresultat-utbetalt', UngdomsytelseBehandlingApiKeys.BEREGNINGSRESULTAT_UTBETALING) + .withRel('aksjonspunkter', UngdomsytelseBehandlingApiKeys.AKSJONSPUNKTER) + .withRel('vilkar-v3', UngdomsytelseBehandlingApiKeys.VILKAR) + .withRel('soknadsfrist-status', UngdomsytelseBehandlingApiKeys.SOKNADSFRIST_STATUS) + .withRel('soeker-personopplysninger', UngdomsytelseBehandlingApiKeys.PERSONOPPLYSNINGER) + .withRel('simuleringResultat', UngdomsytelseBehandlingApiKeys.SIMULERING_RESULTAT) + .withRel('tilbakekrevingvalg', UngdomsytelseBehandlingApiKeys.TILBAKEKREVINGVALG) + .withRel('beregningsgrunnlag-alle', UngdomsytelseBehandlingApiKeys.BEREGNINGSGRUNNLAG) + .withRel('soknad', UngdomsytelseBehandlingApiKeys.SOKNAD) + .withRel('soeker-medlemskap-v2', UngdomsytelseBehandlingApiKeys.MEDLEMSKAP) + .withRel('sendt-varsel-om-revurdering', UngdomsytelseBehandlingApiKeys.SEND_VARSEL_OM_REVURDERING) + .withRel('tilgjengelige-vedtaksbrev', UngdomsytelseBehandlingApiKeys.TILGJENGELIGE_VEDTAKSBREV) + .withRel('informasjonsbehov-vedtaksbrev', UngdomsytelseBehandlingApiKeys.INFORMASJONSBEHOV_VEDTAKSBREV) + .withRel('pleiepenger-fritekstdokumenter', UngdomsytelseBehandlingApiKeys.FRITEKSTDOKUMENTER) + .withRel('overlappende-ytelser', UngdomsytelseBehandlingApiKeys.OVERLAPPENDE_YTELSER) + + // operasjoner + .withRel('dokumentdata-lagre', UngdomsytelseBehandlingApiKeys.DOKUMENTDATA_LAGRE) + .withRel('dokumentdata-hente', UngdomsytelseBehandlingApiKeys.DOKUMENTDATA_HENTE) + + // TODO Flytt alle endepunkter under til backend på same måte som i fp-frontend + .withPost('/k9/sak/api/behandlinger/endre-pa-vent', UngdomsytelseBehandlingApiKeys.UPDATE_ON_HOLD) + .withAsyncPost('/k9/sak/api/behandling/aksjonspunkt', UngdomsytelseBehandlingApiKeys.SAVE_AKSJONSPUNKT) + .withAsyncPost( + '/k9/sak/api/behandling/aksjonspunkt/overstyr', + UngdomsytelseBehandlingApiKeys.SAVE_OVERSTYRT_AKSJONSPUNKT, + ) + + .withPost('/k9/sak/api/behandlinger/bytt-enhet', UngdomsytelseBehandlingApiKeys.BEHANDLING_NY_BEHANDLENDE_ENHET) + .withPost('/k9/sak/api/behandlinger/henlegg', UngdomsytelseBehandlingApiKeys.HENLEGG_BEHANDLING) + .withAsyncPost('/k9/sak/api/behandlinger/gjenoppta', UngdomsytelseBehandlingApiKeys.RESUME_BEHANDLING) + .withPost('/k9/sak/api/behandlinger/sett-pa-vent', UngdomsytelseBehandlingApiKeys.BEHANDLING_ON_HOLD) + + /* FPTILBAKE */ + .withPost( + '/k9/tilbake/api/dokument/forhandsvis-varselbrev', + UngdomsytelseBehandlingApiKeys.PREVIEW_TILBAKEKREVING_MESSAGE, + { isResponseBlob: true }, + ) + + /* K9FORMIDLING */ + .withPost('/k9/formidling/api/brev/forhaandsvis', UngdomsytelseBehandlingApiKeys.PREVIEW_MESSAGE, { + isResponseBlob: true, + }) + .withPost('/k9/formidling/api/brev/html', UngdomsytelseBehandlingApiKeys.HENT_FRITEKSTBREV_HTML) + + .build(); + +export const requestUngdomsytelseApi = createRequestApi(endpoints); + +export const restApiUngdomsytelseHooks = RestApiHooks.initHooks(requestUngdomsytelseApi); diff --git a/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/InngangsvilkarProsessStegPanelDef.tsx b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/InngangsvilkarProsessStegPanelDef.tsx new file mode 100644 index 0000000000..d359c4d8e9 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/InngangsvilkarProsessStegPanelDef.tsx @@ -0,0 +1,16 @@ +import { prosessStegCodes } from '@k9-sak-web/konstanter'; +import { ProsessStegDef } from '@k9-sak-web/behandling-felles'; + +import SoknadsfristPanelDef from './inngangsvilkarPaneler/SoknadsfristPanelDef'; +import AlderPanelDef from './inngangsvilkarPaneler/AlderPanelDef'; +import OmsorgenForPanelDef from './inngangsvilkarPaneler/OmsorgenForPanelDef'; + +class InngangsvilkarProsessStegPanelDef extends ProsessStegDef { + getUrlKode = () => prosessStegCodes.INNGANGSVILKAR; + + getTekstKode = () => 'Behandlingspunkt.Inngangsvilkar'; + + getPanelDefinisjoner = () => [new SoknadsfristPanelDef(), new AlderPanelDef(), new OmsorgenForPanelDef()]; +} + +export default InngangsvilkarProsessStegPanelDef; diff --git a/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/SaksopplysningerProsessStegPanelDef.tsx b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/SaksopplysningerProsessStegPanelDef.tsx new file mode 100644 index 0000000000..cd0c0d7246 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/SaksopplysningerProsessStegPanelDef.tsx @@ -0,0 +1,28 @@ +import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; +import CheckPersonStatusIndex from '@fpsak-frontend/prosess-saksopplysninger'; +import { ProsessStegDef, ProsessStegPanelDef } from '@k9-sak-web/behandling-felles'; +import { prosessStegCodes } from '@k9-sak-web/konstanter'; + +import { UngdomsytelseBehandlingApiKeys } from '../../data/ungdomsytelseBehandlingApi'; + +class PanelDef extends ProsessStegPanelDef { + getKomponent = props => ; + + getAksjonspunktKoder = () => [aksjonspunktCodes.AVKLAR_PERSONSTATUS]; + + getEndepunkter = () => [UngdomsytelseBehandlingApiKeys.MEDLEMSKAP]; + + getData = ({ personopplysninger }) => ({ + personopplysninger, + }); +} + +class SaksopplysningerProsessStegPanelDef extends ProsessStegDef { + getUrlKode = () => prosessStegCodes.SAKSOPPLYSNINGER; + + getTekstKode = () => 'Behandlingspunkt.Saksopplysninger'; + + getPanelDefinisjoner = () => [new PanelDef()]; +} + +export default SaksopplysningerProsessStegPanelDef; diff --git a/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/SimuleringProsessStegPanelDef.tsx b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/SimuleringProsessStegPanelDef.tsx new file mode 100644 index 0000000000..0dd9141eb7 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/SimuleringProsessStegPanelDef.tsx @@ -0,0 +1,36 @@ +import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; +import vilkarUtfallType from '@fpsak-frontend/kodeverk/src/vilkarUtfallType'; +import AvregningProsessIndex from '@fpsak-frontend/prosess-avregning'; +import { ProsessStegDef, ProsessStegPanelDef } from '@k9-sak-web/behandling-felles'; +import { prosessStegCodes } from '@k9-sak-web/konstanter'; + +import { UngdomsytelseBehandlingApiKeys } from '../../data/ungdomsytelseBehandlingApi'; + +class PanelDef extends ProsessStegPanelDef { + getKomponent = props => ; + + getAksjonspunktKoder = () => [aksjonspunktCodes.VURDER_FEILUTBETALING]; + + getEndepunkter = () => [UngdomsytelseBehandlingApiKeys.TILBAKEKREVINGVALG]; + + getOverstyrVisningAvKomponent = () => true; + + getOverstyrtStatus = ({ simuleringResultat }) => + simuleringResultat ? vilkarUtfallType.OPPFYLT : vilkarUtfallType.IKKE_VURDERT; + + getData = ({ fagsak, previewFptilbakeCallback, simuleringResultat }) => ({ + fagsak, + previewFptilbakeCallback, + simuleringResultat, + }); +} + +class SimuleringProsessStegPanelDef extends ProsessStegDef { + getUrlKode = () => prosessStegCodes.AVREGNING; + + getTekstKode = () => 'Behandlingspunkt.Avregning'; + + getPanelDefinisjoner = () => [new PanelDef()]; +} + +export default SimuleringProsessStegPanelDef; diff --git a/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/TilkjentYtelseProsessStegPanelDef.tsx b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/TilkjentYtelseProsessStegPanelDef.tsx new file mode 100644 index 0000000000..98b57dc9e6 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/TilkjentYtelseProsessStegPanelDef.tsx @@ -0,0 +1,53 @@ +import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; +import vilkarUtfallType from '@fpsak-frontend/kodeverk/src/vilkarUtfallType'; +import TilkjentYtelseProsessIndex from '@fpsak-frontend/prosess-tilkjent-ytelse'; +import { ProsessStegDef, ProsessStegPanelDef } from '@k9-sak-web/behandling-felles'; +import { prosessStegCodes } from '@k9-sak-web/konstanter'; +import { konverterKodeverkTilKode } from '@k9-sak-web/lib/kodeverk/konverterKodeverkTilKode.js'; + +const harKunAvslåtteUttak = beregningsresultatUtbetaling => { + const { perioder } = beregningsresultatUtbetaling; + const alleUtfall = perioder.flatMap(({ andeler }) => [ + ...andeler.flatMap(({ uttak }) => [...uttak.flatMap(({ utfall }) => utfall)]), + ]); + return !alleUtfall.some(utfall => utfall === 'INNVILGET'); +}; + +class PanelDef extends ProsessStegPanelDef { + getKomponent = props => { + const deepCopyProps = JSON.parse(JSON.stringify(props)); + konverterKodeverkTilKode(deepCopyProps, false); + return ; + }; + + getAksjonspunktKoder = () => [aksjonspunktCodes.VURDER_TILBAKETREKK]; + + getOverstyrVisningAvKomponent = () => true; + + getOverstyrtStatus = ({ beregningsresultatUtbetaling }) => { + if (!beregningsresultatUtbetaling) { + return vilkarUtfallType.IKKE_VURDERT; + } + if (harKunAvslåtteUttak(beregningsresultatUtbetaling)) { + return vilkarUtfallType.IKKE_OPPFYLT; + } + return vilkarUtfallType.OPPFYLT; + }; + + getData = ({ fagsak, beregningsresultatUtbetaling, personopplysninger, arbeidsgiverOpplysningerPerId }) => ({ + fagsak, + beregningsresultat: beregningsresultatUtbetaling, + personopplysninger, + arbeidsgiverOpplysningerPerId, + }); +} + +class TilkjentYtelseProsessStegPanelDef extends ProsessStegDef { + getUrlKode = () => prosessStegCodes.TILKJENT_YTELSE; + + getTekstKode = () => 'Behandlingspunkt.TilkjentYtelse'; + + getPanelDefinisjoner = () => [new PanelDef()]; +} + +export default TilkjentYtelseProsessStegPanelDef; diff --git a/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/VedtakProsessStegPanelDef.tsx b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/VedtakProsessStegPanelDef.tsx new file mode 100644 index 0000000000..95039c0c76 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/VedtakProsessStegPanelDef.tsx @@ -0,0 +1,76 @@ +import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; +import fagsakYtelseType from '@fpsak-frontend/kodeverk/src/fagsakYtelseType'; +import VedtakProsessIndex from '@fpsak-frontend/prosess-vedtak'; +import { ProsessStegDef, ProsessStegPanelDef } from '@k9-sak-web/behandling-felles'; +import { prosessStegCodes } from '@k9-sak-web/konstanter'; + +import { UngdomsytelseBehandlingApiKeys } from '../../data/ungdomsytelseBehandlingApi'; +import findStatusForVedtak from '../vedtakStatusUtlederUngdomsytelse'; + +class PanelDef extends ProsessStegPanelDef { + getKomponent = props => ; + + getAksjonspunktKoder = () => [ + aksjonspunktCodes.FORESLA_VEDTAK, + aksjonspunktCodes.FATTER_VEDTAK, + aksjonspunktCodes.FORESLA_VEDTAK_MANUELT, + aksjonspunktCodes.VEDTAK_UTEN_TOTRINNSKONTROLL, + aksjonspunktCodes.VURDERE_ANNEN_YTELSE, + aksjonspunktCodes.VURDERE_OVERLAPPENDE_YTELSER_FØR_VEDTAK, + aksjonspunktCodes.VURDERE_DOKUMENT, + aksjonspunktCodes.KONTROLLER_REVURDERINGSBEHANDLING_VARSEL_VED_UGUNST, + aksjonspunktCodes.KONTROLL_AV_MAUNELT_OPPRETTET_REVURDERINGSBEHANDLING, + aksjonspunktCodes.SJEKK_TILBAKEKREVING, + ]; + + getEndepunkter = () => [ + UngdomsytelseBehandlingApiKeys.TILBAKEKREVINGVALG, + UngdomsytelseBehandlingApiKeys.SEND_VARSEL_OM_REVURDERING, + UngdomsytelseBehandlingApiKeys.MEDLEMSKAP, + UngdomsytelseBehandlingApiKeys.TILGJENGELIGE_VEDTAKSBREV, + UngdomsytelseBehandlingApiKeys.INFORMASJONSBEHOV_VEDTAKSBREV, + UngdomsytelseBehandlingApiKeys.DOKUMENTDATA_HENTE, + UngdomsytelseBehandlingApiKeys.FRITEKSTDOKUMENTER, + UngdomsytelseBehandlingApiKeys.OVERLAPPENDE_YTELSER, + ]; + + getOverstyrVisningAvKomponent = () => true; + + getOverstyrtStatus = ({ vilkar, aksjonspunkter, behandling, aksjonspunkterForSteg }) => + findStatusForVedtak(vilkar, aksjonspunkter, aksjonspunkterForSteg, behandling.behandlingsresultat); + + getData = ({ + previewCallback, + hentFritekstbrevHtmlCallback, + rettigheter, + aksjonspunkter, + vilkar, + simuleringResultat, + beregningsgrunnlag, + arbeidsgiverOpplysningerPerId, + lagreDokumentdata, + }) => ({ + previewCallback, + hentFritekstbrevHtmlCallback, + aksjonspunkter, + vilkar, + simuleringResultat, + beregningsgrunnlag, + ytelseTypeKode: fagsakYtelseType.UNGDOMSYTELSE, + employeeHasAccess: rettigheter.kanOverstyreAccess.isEnabled, + arbeidsgiverOpplysningerPerId, + lagreDokumentdata, + }); + + getId = () => 'VEDTAK'; +} + +class VedtakProsessStegPanelDef extends ProsessStegDef { + getUrlKode = () => prosessStegCodes.VEDTAK; + + getTekstKode = () => 'Behandlingspunkt.Vedtak'; + + getPanelDefinisjoner = () => [new PanelDef()]; +} + +export default VedtakProsessStegPanelDef; diff --git a/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/AlderPanelDef.tsx b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/AlderPanelDef.tsx new file mode 100644 index 0000000000..a2f72cd999 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/AlderPanelDef.tsx @@ -0,0 +1,22 @@ +import vilkarType from '@fpsak-frontend/kodeverk/src/vilkarType'; +import { ProsessStegPanelDef, ProsessStegOverstyringPanelDef } from '@k9-sak-web/behandling-felles'; + +class AlderPanelDef extends ProsessStegPanelDef { + overstyringDef = new ProsessStegOverstyringPanelDef(this); + + getId = () => 'ALDER'; + + getTekstKode = () => 'Inngangsvilkar.Alder'; + + getKomponent = props => this.overstyringDef.getKomponent(props); + + getAksjonspunktKoder = () => []; + + getVilkarKoder = () => [vilkarType.ALDERSVILKARET]; + + getOverstyrVisningAvKomponent = ({ vilkarForSteg }) => vilkarForSteg.length > 0; + + getData = data => this.overstyringDef.getData(data); +} + +export default AlderPanelDef; diff --git a/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/OmsorgenForPanelDef.tsx b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/OmsorgenForPanelDef.tsx new file mode 100644 index 0000000000..0227942ae4 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/OmsorgenForPanelDef.tsx @@ -0,0 +1,24 @@ +/* eslint-disable class-methods-use-this */ +import vilkarType from '@fpsak-frontend/kodeverk/src/vilkarType'; +import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; +import { ProsessStegPanelDef, ProsessStegOverstyringPanelDef } from '@k9-sak-web/behandling-felles'; + +class OmsorgenForPanelDef extends ProsessStegPanelDef { + overstyringDef = new ProsessStegOverstyringPanelDef(this); + + getId = () => 'OMSORGENFOR'; + + getTekstKode = () => 'Inngangsvilkar.OmsorgenFor'; + + getKomponent = props => this.overstyringDef.getKomponent(props); + + getAksjonspunktKoder = () => [aksjonspunktCodes.OVERSTYR_OMSORGEN_FOR]; + + getVilkarKoder = () => [vilkarType.OMSORGENFORVILKARET]; + + getOverstyrVisningAvKomponent = ({ vilkarForSteg }) => vilkarForSteg.length > 0; + + getData = data => this.overstyringDef.getData(data); +} + +export default OmsorgenForPanelDef; diff --git a/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/SoknadsfristPanelDef.tsx b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/SoknadsfristPanelDef.tsx new file mode 100644 index 0000000000..ca0f02c767 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegPaneler/inngangsvilkarPaneler/SoknadsfristPanelDef.tsx @@ -0,0 +1,65 @@ +import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; +import behandlingStatus from '@fpsak-frontend/kodeverk/src/behandlingStatus'; +import kodeverkTyper from '@fpsak-frontend/kodeverk/src/kodeverkTyper'; +import vilkarType from '@fpsak-frontend/kodeverk/src/vilkarType'; +import { ProsessStegPanelDef } from '@k9-sak-web/behandling-felles'; +import { konverterKodeverkTilKode } from '@k9-sak-web/lib/kodeverk/konverterKodeverkTilKode.js'; +import SoknadsfristVilkarProsessIndex from '@k9-sak-web/prosess-vilkar-soknadsfrist'; +import SoknadsfristVilkarProsessIndexV2 from '@k9-sak-web/prosess-vilkar-soknadsfrist-v2'; +import { UngdomsytelseBehandlingApiKeys } from '../../../data/ungdomsytelseBehandlingApi'; + +class SoknadsfristPanelDef extends ProsessStegPanelDef { + getId = () => 'SOKNADSFRIST'; + + getTekstKode = () => 'Søknadsfrist'; + + getKomponent = props => { + if (props.featureToggles?.PROSESS_VILKAR_SOKNADSFRIST) { + const deepCopyProps = JSON.parse(JSON.stringify(props)); + konverterKodeverkTilKode(deepCopyProps, false); + return ; + } + return ; + }; + + getAksjonspunktKoder = () => [ + aksjonspunktCodes.OVERSTYR_SOKNADSFRISTVILKAR, + aksjonspunktCodes.KONTROLLER_OPPLYSNINGER_OM_SØKNADSFRIST, + ]; + + getVilkarKoder = () => [vilkarType.SOKNADSFRISTVILKARET]; + + getEndepunkter = () => [UngdomsytelseBehandlingApiKeys.SOKNADSFRIST_STATUS]; + + getOverstyrVisningAvKomponent = ({ vilkarForSteg }) => vilkarForSteg.length > 0; + + getData = ({ + vilkarForSteg, + alleKodeverk, + overstyrteAksjonspunktKoder, + prosessStegTekstKode, + overrideReadOnly, + kanOverstyreAccess, + toggleOverstyring, + featureToggles, + behandling, + rettigheter, + }): any => { + const behandlingenErAvsluttet = behandlingStatus.AVSLUTTET === behandling.status.kode; + const kanEndrePåSøknadsopplysninger = rettigheter.writeAccess.isEnabled && !behandlingenErAvsluttet; + + return { + avslagsarsaker: alleKodeverk[kodeverkTyper.AVSLAGSARSAK][vilkarForSteg[0].vilkarType.kode], + erOverstyrt: overstyrteAksjonspunktKoder.some(o => this.getAksjonspunktKoder().some(a => a === o)), + panelTittelKode: this.getTekstKode() ? this.getTekstKode() : prosessStegTekstKode, + lovReferanse: vilkarForSteg.length > 0 ? vilkarForSteg[0].lovReferanse : undefined, + overrideReadOnly, + kanOverstyreAccess, + toggleOverstyring, + featureToggles, + kanEndrePåSøknadsopplysninger, + }; + }; +} + +export default SoknadsfristPanelDef; diff --git a/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegUngdomsytelsePanelDefinisjoner.tsx b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegUngdomsytelsePanelDefinisjoner.tsx new file mode 100644 index 0000000000..f682464280 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/prosessStegUngdomsytelsePanelDefinisjoner.tsx @@ -0,0 +1,15 @@ +import InngangsvilkarProsessStegPanelDef from './prosessStegPaneler/InngangsvilkarProsessStegPanelDef'; +import SaksopplysningerProsessStegPanelDef from './prosessStegPaneler/SaksopplysningerProsessStegPanelDef'; +import SimuleringProsessStegPanelDef from './prosessStegPaneler/SimuleringProsessStegPanelDef'; +import TilkjentYtelseProsessStegPanelDef from './prosessStegPaneler/TilkjentYtelseProsessStegPanelDef'; +import VedtakProsessStegPanelDef from './prosessStegPaneler/VedtakProsessStegPanelDef'; + +const prosessStegPanelDefinisjoner = [ + new SaksopplysningerProsessStegPanelDef(), + new InngangsvilkarProsessStegPanelDef(), + new TilkjentYtelseProsessStegPanelDef(), + new SimuleringProsessStegPanelDef(), + new VedtakProsessStegPanelDef(), +]; + +export default prosessStegPanelDefinisjoner; diff --git a/packages/behandling-ungdomsytelse/src/panelDefinisjoner/vedtakStatusUtlederUngdomsytelse.ts b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/vedtakStatusUtlederUngdomsytelse.ts new file mode 100644 index 0000000000..aaf29758c1 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/panelDefinisjoner/vedtakStatusUtlederUngdomsytelse.ts @@ -0,0 +1,39 @@ +import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; +import { isAksjonspunktOpen } from '@fpsak-frontend/kodeverk/src/aksjonspunktStatus'; +import { isAvslag } from '@fpsak-frontend/kodeverk/src/behandlingResultatType'; +import vilkarUtfallType from '@fpsak-frontend/kodeverk/src/vilkarUtfallType'; + +// TODO (TOR) Kan denne skrivast om? For høg kompleksitet. + +const hasOnlyClosedAps = (aksjonspunkter, vedtakAksjonspunkter) => + aksjonspunkter + .filter(ap => !vedtakAksjonspunkter.some(vap => vap.definisjon.kode === ap.definisjon.kode)) + .every(ap => !isAksjonspunktOpen(ap.status.kode)); + +const hasAksjonspunkt = ap => ap.definisjon.kode === aksjonspunktCodes.OVERSTYR_BEREGNING; + +const isAksjonspunktOpenAndOfType = ap => hasAksjonspunkt(ap) && isAksjonspunktOpen(ap.status.kode); + +const findStatusForVedtak = (vilkar, aksjonspunkter, vedtakAksjonspunkter, behandlingsresultat) => { + if (vilkar.length === 0) { + return vilkarUtfallType.IKKE_VURDERT; + } + + if ( + vilkar.some(v => v.perioder.some(periode => periode.vilkarStatus.kode === vilkarUtfallType.IKKE_VURDERT)) || + aksjonspunkter.some(isAksjonspunktOpenAndOfType) + ) { + return vilkarUtfallType.IKKE_VURDERT; + } + + if (!hasOnlyClosedAps(aksjonspunkter, vedtakAksjonspunkter)) { + return vilkarUtfallType.IKKE_VURDERT; + } + + if (isAvslag(behandlingsresultat.type.kode)) { + return vilkarUtfallType.IKKE_OPPFYLT; + } + return vilkarUtfallType.OPPFYLT; +}; + +export default findStatusForVedtak; diff --git a/packages/behandling-ungdomsytelse/src/types/FetchedData.ts b/packages/behandling-ungdomsytelse/src/types/FetchedData.ts new file mode 100644 index 0000000000..5de619b41b --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/types/FetchedData.ts @@ -0,0 +1,21 @@ +import { + Aksjonspunkt, + Beregningsgrunnlag, + Personopplysninger, + SimuleringResultat, + Soknad, + Vilkar, + BeregningsresultatUtbetalt, +} from '@k9-sak-web/types'; + +export interface FetchedData { + aksjonspunkter: Aksjonspunkt[]; + vilkar: Vilkar[]; + personopplysninger: Personopplysninger; + soknad: Soknad; + beregningsresultatUtbetaling: BeregningsresultatUtbetalt; + beregningsgrunnlag: Beregningsgrunnlag; + simuleringResultat: SimuleringResultat; +} + +export default FetchedData; diff --git a/packages/behandling-ungdomsytelse/src/types/index.ts b/packages/behandling-ungdomsytelse/src/types/index.ts new file mode 100644 index 0000000000..97cc021702 --- /dev/null +++ b/packages/behandling-ungdomsytelse/src/types/index.ts @@ -0,0 +1 @@ +export * from './FetchedData'; diff --git a/packages/kodeverk/src/fagsakYtelseType.ts b/packages/kodeverk/src/fagsakYtelseType.ts index 74b471fa92..c56dfc1eda 100644 --- a/packages/kodeverk/src/fagsakYtelseType.ts +++ b/packages/kodeverk/src/fagsakYtelseType.ts @@ -10,6 +10,7 @@ const fagsakYtelseType = { FRISINN: 'FRISINN', PLEIEPENGER_SLUTTFASE: 'PPN', OPPLAERINGSPENGER: 'OLP', + UNGDOMSYTELSE: 'UNG', }; export default fagsakYtelseType; diff --git a/packages/prosess-vedtak/i18n/nb_NO.json b/packages/prosess-vedtak/i18n/nb_NO.json index 672243a154..e00e866e0e 100644 --- a/packages/prosess-vedtak/i18n/nb_NO.json +++ b/packages/prosess-vedtak/i18n/nb_NO.json @@ -6,6 +6,7 @@ "VedtakForm.EngangsstonadIkkeInnvilget": "Engangsstønad er avslått", "VedtakForm.SvangerskapspengerIkkeInnvilget": "Svangerskapspenger er avslått", "VedtakForm.PleiepengerIkkeInnvilget": "Pleiepenger er avslått", + "VedtakForm.UngdomsytelseIkkeInnvilget": "Ungdomsytelse er avslått", "VedtakForm.OmsorgspengerIkkeInnvilget": "Omsorgspenger er avslått", "VedtakForm.UtvidetRettIkkeInnvilget": "Ekstra omsorgsdager er avslått", "VedtakForm.FrisinnIkkeInnvilget": "Frisinn er avslått", @@ -26,6 +27,7 @@ "VedtakForm.VilkarStatusInnvilgetOmsorgspenger": "Omsorgspenger er innvilget", "VedtakForm.VilkarStatusInnvilgetFrisinn": "Frisinn er innvilget", "VedtakForm.VilkarStatusInnvilgetLivetsSluttfase": "Pleiepenger i livets sluttfase er innvilget", + "VedtakForm.VilkarStatusInnvilgetUngdomsytelse": "Ungdomsytelse er innvilget", "VedtakForm.TilbakekrInfotrygdOgInntrekk": "Feilutbetaling med tilbakekreving hvor beløp er redusert med inntrekk", "VedtakForm.FritekstBrevLagre": "Lagre utkast", "VedtakForm.FritekstBrevIkkeLagret": "Du har gjort endringer i brevet, men endringene er foreløpig ikke lagret. Trykk på \"Lagre\" for å lagre endringene uten å sende til godkjenning eller fatte vedtak.", diff --git a/packages/prosess-vedtak/src/components/VedtakHelper.jsx b/packages/prosess-vedtak/src/components/VedtakHelper.jsx index 4278e6b955..ec2f7bdb61 100644 --- a/packages/prosess-vedtak/src/components/VedtakHelper.jsx +++ b/packages/prosess-vedtak/src/components/VedtakHelper.jsx @@ -1,18 +1,18 @@ -import { createSelector } from 'reselect'; import moment from 'moment'; +import { createSelector } from 'reselect'; +import { isBGAksjonspunktSomGirFritekstfelt } from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; +import aksjonspunktStatus from '@fpsak-frontend/kodeverk/src/aksjonspunktStatus'; import behandlingResultatType from '@fpsak-frontend/kodeverk/src/behandlingResultatType'; -import vilkarType from '@fpsak-frontend/kodeverk/src/vilkarType'; -import klageVurdering from '@fpsak-frontend/kodeverk/src/klageVurdering'; -import vilkarUtfallType from '@fpsak-frontend/kodeverk/src/vilkarUtfallType'; import behandlingStatusCode from '@fpsak-frontend/kodeverk/src/behandlingStatus'; import fagsakYtelseType from '@fpsak-frontend/kodeverk/src/fagsakYtelseType'; -import { isBGAksjonspunktSomGirFritekstfelt } from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; -import aksjonspunktStatus from '@fpsak-frontend/kodeverk/src/aksjonspunktStatus'; -import tilbakekrevingVidereBehandling from '@fpsak-frontend/kodeverk/src/tilbakekrevingVidereBehandling'; +import klageVurdering from '@fpsak-frontend/kodeverk/src/klageVurdering'; import kodeverkTyper from '@fpsak-frontend/kodeverk/src/kodeverkTyper'; +import tilbakekrevingVidereBehandling from '@fpsak-frontend/kodeverk/src/tilbakekrevingVidereBehandling'; +import vilkarType from '@fpsak-frontend/kodeverk/src/vilkarType'; +import vilkarUtfallType from '@fpsak-frontend/kodeverk/src/vilkarUtfallType'; import { TIDENES_ENDE, getKodeverknavnFn } from '@fpsak-frontend/utils'; -import {erFagytelseTypeUtvidetRett} from '@k9-sak-web/behandling-utvidet-rett/src/utils/utvidetRettHjelpfunksjoner'; +import { erFagytelseTypeUtvidetRett } from '@k9-sak-web/behandling-utvidet-rett/src/utils/utvidetRettHjelpfunksjoner'; const tilbakekrevingMedInntrekk = (tilbakekrevingKode, simuleringResultat) => tilbakekrevingKode === tilbakekrevingVidereBehandling.TILBAKEKR_OPPRETT && @@ -83,6 +83,10 @@ export const findInnvilgetResultatText = (behandlingResultatTypeKode, ytelseType return 'VedtakForm.VilkarStatusInnvilgetLivetsSluttfase'; } + if (ytelseType === fagsakYtelseType.UNGDOMSYTELSE) { + return 'VedtakForm.VilkarStatusInnvilgetUngdomsytelse'; + } + return 'VedtakForm.VilkarStatusInnvilgetPleiepenger'; }; @@ -114,6 +118,10 @@ export const findAvslagResultatText = (behandlingResultatTypeKode, ytelseType) = return 'VedtakForm.LivetsSluttfaseIkkeInnvilget'; } + if (ytelseType === fagsakYtelseType.UNGDOMSYTELSE) { + return 'VedtakForm.UngdomsytelseIkkeInnvilget'; + } + return 'VedtakForm.PleiepengerIkkeInnvilget'; }; diff --git a/packages/sak-app/src/behandling/BehandlingIndex.tsx b/packages/sak-app/src/behandling/BehandlingIndex.tsx index 9709ea2d0d..c904a01eac 100644 --- a/packages/sak-app/src/behandling/BehandlingIndex.tsx +++ b/packages/sak-app/src/behandling/BehandlingIndex.tsx @@ -41,6 +41,9 @@ const BehandlingFrisinnIndex = React.lazy(() => import('@k9-sak-web/behandling-f const BehandlingUnntakIndex = React.lazy(() => import('@k9-sak-web/behandling-unntak')); const BehandlingUtvidetRettIndex = React.lazy(() => import('@k9-sak-web/behandling-utvidet-rett')); const BehandlingOpplaeringspengerIndex = React.lazy(() => import('@k9-sak-web/behandling-opplaeringspenger')); +const BehandlingUngdomsytelseIndex = React.lazy( + () => import('@k9-sak-web/behandling-ungdomsytelse/src/BehandlingUngdomsytelseIndex'), +); const erTilbakekreving = (behandlingTypeKode: string): boolean => behandlingTypeKode === BehandlingType.TILBAKEKREVING || @@ -324,6 +327,21 @@ const BehandlingIndex = ({ ); } + if (fagsak.sakstype.kode === FagsakYtelseType.UNGDOMSYTELSE) { + return ( + }> + + + + + ); + } + return ( }> diff --git a/public/mockServiceWorker.js b/public/mockServiceWorker.js index b65d2b97b5..a8262f093f 100644 --- a/public/mockServiceWorker.js +++ b/public/mockServiceWorker.js @@ -8,7 +8,7 @@ * - Please do NOT serve this file on production. */ -const PACKAGE_VERSION = '2.4.8' +const PACKAGE_VERSION = '2.4.9' const INTEGRITY_CHECKSUM = '26357c79639bfa20d64c0efca2a87423' const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') const activeClientIds = new Set() diff --git a/yarn.lock b/yarn.lock index 125f4a5353..cb4c5230d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4208,6 +4208,29 @@ __metadata: languageName: unknown linkType: soft +"@k9-sak-web/behandling-ungdomsytelse@workspace:packages/behandling-ungdomsytelse": + version: 0.0.0-use.local + resolution: "@k9-sak-web/behandling-ungdomsytelse@workspace:packages/behandling-ungdomsytelse" + dependencies: + "@fpsak-frontend/kodeverk": 1.0.0 + "@fpsak-frontend/prosess-saksopplysninger": 1.0.0 + "@fpsak-frontend/prosess-tilkjent-ytelse": 1.0.0 + "@fpsak-frontend/prosess-vedtak": 1.0.0 + "@fpsak-frontend/shared-components": 1.0.0 + "@fpsak-frontend/utils": 1.0.0 + "@k9-sak-web/behandling-felles": 1.0.0 + "@k9-sak-web/konstanter": 1.0.0 + "@k9-sak-web/prosess-vilkar-soknadsfrist": 1.0.0 + "@k9-sak-web/rest-api": 1.0.0 + "@k9-sak-web/rest-api-hooks": 1.0.0 + "@k9-sak-web/sak-app": 1.0.0 + "@k9-sak-web/types": 1.0.0 + axios: 1.7.7 + react: 18.3.1 + react-intl: 6.6.8 + languageName: unknown + linkType: soft + "@k9-sak-web/behandling-unntak@1.0.0, @k9-sak-web/behandling-unntak@workspace:packages/behandling-unntak": version: 0.0.0-use.local resolution: "@k9-sak-web/behandling-unntak@workspace:packages/behandling-unntak"