diff --git a/deploy/dev-fss-k9saksbehandling.yml b/deploy/dev-fss-k9saksbehandling.yml index fdee5a7e8e..88d918e3fd 100644 --- a/deploy/dev-fss-k9saksbehandling.yml +++ b/deploy/dev-fss-k9saksbehandling.yml @@ -101,3 +101,5 @@ spec: value: "true" - name: LOKALE_PAKKER value: "true" + - name: "OVERSTYRING_UTTAK" + value: "true" diff --git a/deploy/prod-fss-k9saksbehandling.yml b/deploy/prod-fss-k9saksbehandling.yml index a9e66fb953..8bde4761fb 100644 --- a/deploy/prod-fss-k9saksbehandling.yml +++ b/deploy/prod-fss-k9saksbehandling.yml @@ -101,3 +101,5 @@ spec: value: "true" - name: LOKALE_PAKKER value: "false" + - name: "OVERSTYRING_UTTAK" + value: "false" diff --git a/feature-toggles.json b/feature-toggles.json index 592deff7fa..0f7a800095 100644 --- a/feature-toggles.json +++ b/feature-toggles.json @@ -74,5 +74,9 @@ { "key": "LOKALE_PAKKER", "value": "${LOKALE_PAKKER}" + }, + { + "key": "OVERSTYRING_UTTAK", + "value": "${OVERSTYRING_UTTAK}" } ] diff --git a/package.json b/package.json index d09f27ba4f..d9c9b7b5f0 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,9 @@ "lint:fix": "eslint --fix --cache packages --ext .ts,.tsx,.js,.jsx", "css:lint": "stylelint \"packages/**/*.css\"", "dev": "yarn dev-env-variables cross-env NODE_ENV=development APP_URL_K9FORMIDLING=http://localhost:8060/rest/dummy webpack serve --config webpack/webpack.dev.ts", - "dev-env-variables": "cross-env KLAGE_KABAL=true VARSELTEKST=true DOKUMENTDATA=true UNNTAKSBEHANDLING=true UTENLANDSOPPHOLD=true SOKNADPERIODESTRIPE=false TYPE_MEDISINSKE_OPPLYSNINGER_BREV=true LOS_MARKER_BEHANDLING=true LOS_MARKER_BEHANDLING_SUBMIT=true AKSJONSPUNKT_9014=true AKSJONSPUNKT_9015=true FRITEKST_REDIGERING=true FIX_SOKNADSFRIST_KALENDER_OG_READONLY=true INKLUDER_KALENDER_PILS=true FAKTA_BEREGNING_REDESIGN=true LOKALE_PAKKER=true", + "dev-env-variables": "cross-env OVERSTYRING_UTTAK=true KLAGE_KABAL=true VARSELTEKST=true DOKUMENTDATA=true UNNTAKSBEHANDLING=true UTENLANDSOPPHOLD=true SOKNADPERIODESTRIPE=false TYPE_MEDISINSKE_OPPLYSNINGER_BREV=true LOS_MARKER_BEHANDLING=true LOS_MARKER_BEHANDLING_SUBMIT=true AKSJONSPUNKT_9014=true AKSJONSPUNKT_9015=true FRITEKST_REDIGERING=true FIX_SOKNADSFRIST_KALENDER_OG_READONLY=true INKLUDER_KALENDER_PILS=true FAKTA_BEREGNING_REDESIGN=true LOKALE_PAKKER=true", "dev-lokal": "cross-env NODE_ENV=development APP_URL_SAK=http://k9-sak:8080 APP_URL_K9OPPDRAG=http://k9-oppdrag:8070 APP_URL_K9FORMIDLING_DD=http://k9-formidling-dokumentdata:8294 APP_URL_K9FORMIDLING=http://k9-formidling:8290 SPLITTET_SAMMENLINGNING_BEREGNING=true webpack serve --config webpack/webpack.dev.ts", - "dev-med-formidling": "cross-env NODE_ENV=development webpack serve --config webpack/webpack.dev.ts", + "dev-med-formidling": "yarn dev-env-variables cross-env NODE_ENV=development webpack serve --config webpack/webpack.dev.ts", "build": "cross-env NODE_ENV=production SENTRY_RELEASE=$(git rev-parse --short HEAD) webpack --config webpack/webpack.prod.ts", "build-ci": "cross-env NODE_ENV=development webpack --env ci='true' --config webpack/webpack.dev.ts", "lerna": "lerna", @@ -41,7 +41,7 @@ "packages/*" ], "dependencies": { - "@babel/runtime": "7.23.5", + "@babel/runtime": "7.23.6", "@formatjs/intl-datetimeformat": "6.11.1", "@formatjs/intl-numberformat": "8.8.0", "@hookform/error-message": "^2.0.1", @@ -73,10 +73,10 @@ "react-router-dom": "6.18.0" }, "devDependencies": { - "@babel/core": "7.23.5", + "@babel/core": "7.23.6", "@babel/eslint-parser": "7.23.3", "@babel/helper-regex": "7.10.5", - "@babel/preset-env": "7.23.5", + "@babel/preset-env": "7.23.6", "@babel/preset-react": "7.23.3", "@babel/preset-typescript": "7.23.3", "@babel/register": "7.22.15", diff --git a/packages/behandling-felles/src/components/ProsessStegPanel.tsx b/packages/behandling-felles/src/components/ProsessStegPanel.tsx index 412cefba28..a8b3ceb909 100644 --- a/packages/behandling-felles/src/components/ProsessStegPanel.tsx +++ b/packages/behandling-felles/src/components/ProsessStegPanel.tsx @@ -28,6 +28,8 @@ interface OwnProps { lagreOverstyrteAksjonspunkter?: (params: any, keepData?: boolean) => Promise; useMultipleRestApi: (endpoints: EndpointData[], options: Options) => RestApiData; featureToggles?: FeatureToggles; + lagreOverstyringUttak?: (params: any) => void; + erOverstyrer?: boolean; } const ProsessStegPanel = ({ @@ -42,6 +44,8 @@ const ProsessStegPanel = ({ lagreOverstyrteAksjonspunkter, useMultipleRestApi, featureToggles, + lagreOverstyringUttak, + erOverstyrer = false, }: OwnProps) => { const erHenlagtOgVedtakStegValgt = behandling.behandlingHenlagt && valgtProsessSteg && valgtProsessSteg.getUrlKode() === prosessStegCodes.VEDTAK; @@ -119,6 +123,8 @@ const ProsessStegPanel = ({ formData, setFormData, submitCallback: bekreftAksjonspunktCallback, + lagreOverstyringUttak, + erOverstyrer, ...delPaneler[0].getKomponentData(), ...data, })} diff --git a/packages/behandling-opplaeringspenger/package.json b/packages/behandling-opplaeringspenger/package.json index 4a3fdbee3b..14f5ec064e 100644 --- a/packages/behandling-opplaeringspenger/package.json +++ b/packages/behandling-opplaeringspenger/package.json @@ -43,12 +43,12 @@ "@navikt/ft-fakta-beregning-redesign": "1.0.17", "@navikt/ft-fakta-fordel-beregningsgrunnlag": "7.3.20", "@navikt/ft-prosess-beregningsgrunnlag": "6.3.20", - "@navikt/k9-fe-etablert-tilsyn": "1.0.3", + "@navikt/k9-fe-etablert-tilsyn": "1.0.4", "@navikt/k9-fe-http-utils": "1.0.8", - "@navikt/k9-fe-inntektsmelding": "1.0.4", - "@navikt/k9-fe-medisinsk-vilkar": "1.0.3", - "@navikt/k9-fe-om-barnet": "1.0.3", - "@navikt/k9-fe-omsorgen-for": "1.0.3", + "@navikt/k9-fe-inntektsmelding": "1.0.5", + "@navikt/k9-fe-medisinsk-vilkar": "1.0.4", + "@navikt/k9-fe-om-barnet": "1.0.4", + "@navikt/k9-fe-omsorgen-for": "1.0.4", "axios": "1.6.2", "nav-frontend-alertstriper": "4.0.2", "react": "18.2.0", diff --git a/packages/behandling-opplaeringspenger/src/components/Uttak.tsx b/packages/behandling-opplaeringspenger/src/components/Uttak.tsx index bf17d574a3..23a16e1ea2 100644 --- a/packages/behandling-opplaeringspenger/src/components/Uttak.tsx +++ b/packages/behandling-opplaeringspenger/src/components/Uttak.tsx @@ -1,8 +1,10 @@ +import React from 'react'; + import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; import aksjonspunktStatus from '@fpsak-frontend/kodeverk/src/aksjonspunktStatus'; import { Aksjonspunkt, AlleKodeverk, ArbeidsgiverOpplysningerPerId } from '@k9-sak-web/types'; import { Uttak } from '@k9-sak-web/prosess-uttak'; -import React from 'react'; +import { useFeatureToggles } from '@fpsak-frontend/shared-components'; interface UttakProps { uuid: string; @@ -25,6 +27,7 @@ export default ({ submitCallback, virkningsdatoUttakNyeRegler, }: UttakProps) => { + const [featureToggles] = useFeatureToggles(); const relevanteAksjonspunkter = [aksjonspunktCodes.VENT_ANNEN_PSB_SAK, aksjonspunktCodes.VURDER_DATO_NY_REGEL_UTTAK]; const funnedeRelevanteAksjonspunkter = aksjonspunkter.filter(aksjonspunkt => relevanteAksjonspunkter.some(relevantAksjonspunkt => relevantAksjonspunkt === aksjonspunkt.definisjon.kode), @@ -48,6 +51,8 @@ export default ({ kodeverkUtenlandsoppholdÅrsak: alleKodeverk?.UtenlandsoppholdÅrsak, løsAksjonspunktVurderDatoNyRegelUttak, virkningsdatoUttakNyeRegler, + featureToggles, + erOverstyrer: false, // Overstyring er ikke implementert for Pleiepenger }} /> ); diff --git a/packages/behandling-pleiepenger-sluttfase/package.json b/packages/behandling-pleiepenger-sluttfase/package.json index 48b29007af..349ff40996 100644 --- a/packages/behandling-pleiepenger-sluttfase/package.json +++ b/packages/behandling-pleiepenger-sluttfase/package.json @@ -40,8 +40,8 @@ "@navikt/ft-fakta-fordel-beregningsgrunnlag": "7.3.20", "@navikt/ft-prosess-beregningsgrunnlag": "6.3.20", "@navikt/k9-fe-http-utils": "1.0.8", - "@navikt/k9-fe-inntektsmelding": "1.0.4", - "@navikt/k9-fe-medisinsk-vilkar": "1.0.3", + "@navikt/k9-fe-inntektsmelding": "1.0.5", + "@navikt/k9-fe-medisinsk-vilkar": "1.0.4", "axios": "1.6.2", "nav-frontend-alertstriper": "4.0.2", "react": "18.2.0", diff --git a/packages/behandling-pleiepenger-sluttfase/src/components/Uttak.tsx b/packages/behandling-pleiepenger-sluttfase/src/components/Uttak.tsx index c5ebb0fa91..c58e06789e 100644 --- a/packages/behandling-pleiepenger-sluttfase/src/components/Uttak.tsx +++ b/packages/behandling-pleiepenger-sluttfase/src/components/Uttak.tsx @@ -1,8 +1,10 @@ +import React from 'react'; + import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; import aksjonspunktStatus from '@fpsak-frontend/kodeverk/src/aksjonspunktStatus'; import { Aksjonspunkt, AlleKodeverk, ArbeidsgiverOpplysningerPerId } from '@k9-sak-web/types'; import { Uttak } from '@k9-sak-web/prosess-uttak'; -import React from 'react'; +import { useFeatureToggles } from '@fpsak-frontend/shared-components'; interface UttakProps { uuid: string; @@ -27,6 +29,7 @@ export default ({ submitCallback, virkningsdatoUttakNyeRegler, }: UttakProps) => { + const [featureToggles] = useFeatureToggles(); const relevanteAksjonspunkter = [aksjonspunktCodes.VENT_ANNEN_PSB_SAK, aksjonspunktCodes.VURDER_DATO_NY_REGEL_UTTAK]; const funnedeRelevanteAksjonspunkter = aksjonspunkter.filter(aksjonspunkt => relevanteAksjonspunkter.some(relevantAksjonspunkt => relevantAksjonspunkt === aksjonspunkt.definisjon.kode), @@ -51,6 +54,8 @@ export default ({ løsAksjonspunktVurderDatoNyRegelUttak, virkningsdatoUttakNyeRegler, aksjonspunkter: funnedeRelevanteAksjonspunkter, + featureToggles, + erOverstyrer: false, // Overstyring er ikke implementert for PILS }} /> ); diff --git a/packages/behandling-pleiepenger/package.json b/packages/behandling-pleiepenger/package.json index e8d90a4c17..aa8c211f8c 100644 --- a/packages/behandling-pleiepenger/package.json +++ b/packages/behandling-pleiepenger/package.json @@ -44,12 +44,12 @@ "@navikt/ft-fakta-beregning-redesign": "1.0.17", "@navikt/ft-fakta-fordel-beregningsgrunnlag": "7.3.20", "@navikt/ft-prosess-beregningsgrunnlag": "6.3.20", - "@navikt/k9-fe-etablert-tilsyn": "1.0.3", + "@navikt/k9-fe-etablert-tilsyn": "1.0.4", "@navikt/k9-fe-http-utils": "1.0.8", - "@navikt/k9-fe-inntektsmelding": "1.0.4", - "@navikt/k9-fe-medisinsk-vilkar": "1.0.3", - "@navikt/k9-fe-om-barnet": "1.0.3", - "@navikt/k9-fe-omsorgen-for": "1.0.3", + "@navikt/k9-fe-inntektsmelding": "1.0.5", + "@navikt/k9-fe-medisinsk-vilkar": "1.0.4", + "@navikt/k9-fe-om-barnet": "1.0.4", + "@navikt/k9-fe-omsorgen-for": "1.0.4", "axios": "1.6.2", "nav-frontend-alertstriper": "4.0.2", "react": "18.2.0", diff --git a/packages/behandling-pleiepenger/src/BehandlingPleiepengerIndex.tsx b/packages/behandling-pleiepenger/src/BehandlingPleiepengerIndex.tsx index 7c703b3431..4fb193aca8 100644 --- a/packages/behandling-pleiepenger/src/BehandlingPleiepengerIndex.tsx +++ b/packages/behandling-pleiepenger/src/BehandlingPleiepengerIndex.tsx @@ -21,7 +21,7 @@ import { requestPleiepengerApi, restApiPleiepengerHooks, } from './data/pleiepengerBehandlingApi'; -import FetchedData from './types/fetchedDataTsType'; +import { OverstyringUttakRequest, FetchedData } from './types'; const pleiepengerData = [ { key: PleiepengerBehandlingApiKeys.AKSJONSPUNKTER }, @@ -133,6 +133,21 @@ const BehandlingPleiepengerIndex = ({ PleiepengerBehandlingApiKeys.SAVE_AKSJONSPUNKT, ); + const { startRequest: lagreOverstyringUttakRequest } = restApiPleiepengerHooks.useRestApiRunner( + PleiepengerBehandlingApiKeys.SAVE_OVERSTYRT_AKSJONSPUNKT, + ); + + const lagreOverstyringUttak = async (values: OverstyringUttakRequest): Promise => { + lagreOverstyringUttakRequest({ + saksnummer: fagsak.saksnummer, + behandlingId: behandling.id, + behandlingVersjon: behandling.versjon, + overstyrteAksjonspunktDtoer: [values], + }) + .then(() => hentBehandling({ behandlingId }, true)) + .then(() => window.scroll(0, 0)); + }; + useEffect(() => { behandlingEventHandler.setHandler({ endreBehandlendeEnhet: params => nyBehandlendeEnhet(params).then(() => hentBehandling({ behandlingId }, true)), @@ -191,6 +206,7 @@ const BehandlingPleiepengerIndex = ({ arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysninger ? arbeidsgiverOpplysninger.arbeidsgivere : {}} featureToggles={featureToggles} dokumenter={alleDokumenter} + lagreOverstyringUttak={lagreOverstyringUttak} /> ); diff --git a/packages/behandling-pleiepenger/src/components/ArbeidsgiverMedManglendePerioderListe.tsx b/packages/behandling-pleiepenger/src/components/ArbeidsgiverMedManglendePerioderListe.tsx index 74c16f209e..4d1f619e53 100644 --- a/packages/behandling-pleiepenger/src/components/ArbeidsgiverMedManglendePerioderListe.tsx +++ b/packages/behandling-pleiepenger/src/components/ArbeidsgiverMedManglendePerioderListe.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { arbeidstypeTilVisning, Arbeidstype } from '../types/Arbeidstype'; +import { arbeidstypeTilVisning, Arbeidstype } from '../types'; interface ArbeidsgiverMedPerioder { arbeidsgiverNavn: string; diff --git a/packages/behandling-pleiepenger/src/components/PleiepengerFakta.spec.tsx b/packages/behandling-pleiepenger/src/components/PleiepengerFakta.spec.tsx index 6e9d4e3ed1..a89640cc8e 100644 --- a/packages/behandling-pleiepenger/src/components/PleiepengerFakta.spec.tsx +++ b/packages/behandling-pleiepenger/src/components/PleiepengerFakta.spec.tsx @@ -16,7 +16,7 @@ import { Behandling, Fagsak } from '@k9-sak-web/types'; import sivilstandType from '@fpsak-frontend/kodeverk/src/sivilstandType'; import opplysningAdresseType from '@fpsak-frontend/kodeverk/src/opplysningAdresseType'; import ForeldrepengerFakta from './PleiepengerFakta'; -import FetchedData from '../types/fetchedDataTsType'; +import FetchedData from '../types/FetchedData'; import { PleiepengerBehandlingApiKeys, requestPleiepengerApi } from '../data/pleiepengerBehandlingApi'; describe('', () => { @@ -99,7 +99,7 @@ describe('', () => { statsborgerskap: { kode: '', kodeverk: '', - navn: '' + navn: '', }, diskresjonskode: { kode: '', diff --git a/packages/behandling-pleiepenger/src/components/PleiepengerFakta.tsx b/packages/behandling-pleiepenger/src/components/PleiepengerFakta.tsx index d50f56533f..ddb676413b 100644 --- a/packages/behandling-pleiepenger/src/components/PleiepengerFakta.tsx +++ b/packages/behandling-pleiepenger/src/components/PleiepengerFakta.tsx @@ -16,7 +16,7 @@ import { LoadingPanel } from '@fpsak-frontend/shared-components'; import { RestApiState, useRestApiErrorDispatcher } from '@k9-sak-web/rest-api-hooks'; import faktaPanelDefinisjoner from '../panelDefinisjoner/faktaPleiepengerPanelDefinisjoner'; -import FetchedData from '../types/fetchedDataTsType'; +import FetchedData from '../types/FetchedData'; import { restApiPleiepengerHooks, PleiepengerBehandlingApiKeys } from '../data/pleiepengerBehandlingApi'; const overstyringApCodes = [ac.OVERSTYRING_AV_BEREGNINGSAKTIVITETER, ac.OVERSTYRING_AV_BEREGNINGSGRUNNLAG]; diff --git a/packages/behandling-pleiepenger/src/components/PleiepengerPaneler.tsx b/packages/behandling-pleiepenger/src/components/PleiepengerPaneler.tsx index c97d673f85..6aad908326 100644 --- a/packages/behandling-pleiepenger/src/components/PleiepengerPaneler.tsx +++ b/packages/behandling-pleiepenger/src/components/PleiepengerPaneler.tsx @@ -18,12 +18,13 @@ import { } from '@k9-sak-web/types'; import moment from 'moment'; import React, { useState } from 'react'; -import { Arbeidstype } from '../types/Arbeidstype'; -import FetchedData from '../types/fetchedDataTsType'; +import { Arbeidstype } from '../types'; +import FetchedData from '../types/FetchedData'; import ArbeidsgiverMedManglendePerioderListe from './ArbeidsgiverMedManglendePerioderListe'; import DataFetcher from './DataFetcher'; import PleiepengerFakta from './PleiepengerFakta'; import PleiepengerProsess from './PleiepengerProsess'; +import { OverstyringUttakRequest } from '../types/OverstyringUttakRequest'; interface OwnProps { fetchedData: FetchedData; @@ -43,6 +44,7 @@ interface OwnProps { arbeidsgiverOpplysningerPerId: ArbeidsgiverOpplysningerPerId; featureToggles: FeatureToggles; dokumenter: Dokument[]; + lagreOverstyringUttak: (values: OverstyringUttakRequest) => void; } interface FaktaPanelInfo { @@ -79,6 +81,7 @@ const PleiepengerPaneler = ({ arbeidsgiverOpplysningerPerId, featureToggles, dokumenter, + lagreOverstyringUttak, }: OwnProps) => { const [apentFaktaPanelInfo, setApentFaktaPanel] = useState(); const [beregningErBehandlet, setBeregningErBehandlet] = useState(false); @@ -152,6 +155,7 @@ const PleiepengerPaneler = ({ arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId} featureToggles={featureToggles} setBeregningErBehandlet={setBeregningErBehandlet} + lagreOverstyringUttak={lagreOverstyringUttak} /> ', () => { @@ -199,6 +199,7 @@ describe('', () => { arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId} featureToggles={{}} setBeregningErBehandlet={() => {}} + lagreOverstyringUttak={sinon.spy()} />, ); @@ -294,6 +295,7 @@ describe('', () => { arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId} featureToggles={{}} setBeregningErBehandlet={() => {}} + lagreOverstyringUttak={sinon.spy()} />, ); @@ -353,6 +355,7 @@ describe('', () => { arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId} featureToggles={{}} setBeregningErBehandlet={() => {}} + lagreOverstyringUttak={sinon.spy()} />, ); @@ -416,6 +419,7 @@ describe('', () => { arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId} featureToggles={{}} setBeregningErBehandlet={() => {}} + lagreOverstyringUttak={sinon.spy()} />, ); @@ -477,6 +481,7 @@ describe('', () => { arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId} featureToggles={{}} setBeregningErBehandlet={() => {}} + lagreOverstyringUttak={sinon.spy()} />, ); @@ -514,6 +519,7 @@ describe('', () => { arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId} featureToggles={{}} setBeregningErBehandlet={() => {}} + lagreOverstyringUttak={sinon.spy()} />, ); @@ -554,6 +560,7 @@ describe('', () => { arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId} featureToggles={{}} setBeregningErBehandlet={() => {}} + lagreOverstyringUttak={sinon.spy()} />, ); @@ -599,6 +606,7 @@ describe('', () => { arbeidsgiverOpplysningerPerId={arbeidsgiverOpplysningerPerId} featureToggles={{}} setBeregningErBehandlet={() => {}} + lagreOverstyringUttak={sinon.spy()} />, ); diff --git a/packages/behandling-pleiepenger/src/components/PleiepengerProsess.tsx b/packages/behandling-pleiepenger/src/components/PleiepengerProsess.tsx index 67c7faf6ab..8be02907b0 100644 --- a/packages/behandling-pleiepenger/src/components/PleiepengerProsess.tsx +++ b/packages/behandling-pleiepenger/src/components/PleiepengerProsess.tsx @@ -24,7 +24,7 @@ import { import { PleiepengerBehandlingApiKeys, restApiPleiepengerHooks } from '../data/pleiepengerBehandlingApi'; import prosessStegPanelDefinisjoner from '../panelDefinisjoner/prosessStegPleiepengerPanelDefinisjoner'; -import FetchedData from '../types/fetchedDataTsType'; +import FetchedData from '../types/FetchedData'; interface OwnProps { data: FetchedData; @@ -44,84 +44,87 @@ interface OwnProps { arbeidsgiverOpplysningerPerId: ArbeidsgiverOpplysningerPerId; featureToggles: FeatureToggles; setBeregningErBehandlet: (value: boolean) => void; + lagreOverstyringUttak: (values: any) => void; } -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, +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)); }; - 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 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 visFatterVedtakModal = - aksjonspunktModels[0].isVedtakSubmission && aksjonspunktModels[0].kode === aksjonspunktCodes.FORESLA_VEDTAK; + const visIverksetterVedtakModal = aksjonspunktModels.some( + aksjonspunkt => + aksjonspunkt.isVedtakSubmission && + [ + aksjonspunktCodes.VEDTAK_UTEN_TOTRINNSKONTROLL, + aksjonspunktCodes.FATTER_VEDTAK, + aksjonspunktCodes.FORESLA_VEDTAK_MANUELT, + ].includes(aksjonspunkt.kode), + ); - if (aksjonspunktModels[0].isVedtakSubmission) { - const dokumentdata = lagDokumentdata(aksjonspunktModels[0]); - if (dokumentdata) await lagreDokumentdata(dokumentdata); - } + const visFatterVedtakModal = + aksjonspunktModels[0].isVedtakSubmission && aksjonspunktModels[0].kode === aksjonspunktCodes.FORESLA_VEDTAK; - // 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'); + 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 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 PleiepengerProsess = ({ data, @@ -141,16 +144,16 @@ const PleiepengerProsess = ({ arbeidsgiverOpplysningerPerId, featureToggles, setBeregningErBehandlet, + lagreOverstyringUttak, }: OwnProps) => { prosessStegHooks.useOppdateringAvBehandlingsversjon(behandling.versjon, oppdaterBehandlingVersjon); - const { startRequest: lagreAksjonspunkter, data: apBehandlingRes } = restApiPleiepengerHooks.useRestApiRunner< - Behandling - >(PleiepengerBehandlingApiKeys.SAVE_AKSJONSPUNKT); - const { - startRequest: lagreOverstyrteAksjonspunkter, - data: apOverstyrtBehandlingRes, - } = restApiPleiepengerHooks.useRestApiRunner(PleiepengerBehandlingApiKeys.SAVE_OVERSTYRT_AKSJONSPUNKT); + const { startRequest: lagreAksjonspunkter, data: apBehandlingRes } = + restApiPleiepengerHooks.useRestApiRunner(PleiepengerBehandlingApiKeys.SAVE_AKSJONSPUNKT); + + const { startRequest: lagreOverstyrteAksjonspunkter, data: apOverstyrtBehandlingRes } = + restApiPleiepengerHooks.useRestApiRunner(PleiepengerBehandlingApiKeys.SAVE_OVERSTYRT_AKSJONSPUNKT); + const { startRequest: forhandsvisMelding } = restApiPleiepengerHooks.useRestApiRunner( PleiepengerBehandlingApiKeys.PREVIEW_MESSAGE, ); @@ -257,6 +260,8 @@ const PleiepengerProsess = ({ lagreOverstyrteAksjonspunkter={lagreOverstyrteAksjonspunkter} useMultipleRestApi={restApiPleiepengerHooks.useMultipleRestApi} featureToggles={featureToggles} + lagreOverstyringUttak={lagreOverstyringUttak} + erOverstyrer={rettigheter.kanOverstyreAccess.isEnabled} /> diff --git a/packages/behandling-pleiepenger/src/components/Uttak.tsx b/packages/behandling-pleiepenger/src/components/Uttak.tsx index 5ef8d9e4a3..6c8ff8658e 100644 --- a/packages/behandling-pleiepenger/src/components/Uttak.tsx +++ b/packages/behandling-pleiepenger/src/components/Uttak.tsx @@ -1,11 +1,17 @@ +import React from 'react'; + +import { useFeatureToggles } from '@fpsak-frontend/shared-components'; import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes'; import aksjonspunktStatus from '@fpsak-frontend/kodeverk/src/aksjonspunktStatus'; -import { Aksjonspunkt, AlleKodeverk, ArbeidsgiverOpplysningerPerId } from '@k9-sak-web/types'; +import { Aksjonspunkt, AlleKodeverk, ArbeidsgiverOpplysningerPerId, Behandling } from '@k9-sak-web/types'; import { Uttak } from '@k9-sak-web/prosess-uttak'; -import React from 'react'; +import { useRestApiErrorDispatcher } from '@k9-sak-web/rest-api-hooks'; +import { findEndpointsForMicrofrontend, httpErrorHandler } from '@fpsak-frontend/utils'; +import { VilkarResultPicker } from '@k9-sak-web/prosess-felles'; interface UttakProps { uuid: string; + behandling: Behandling; uttaksperioder: any; utsattePerioder: string[]; virkningsdatoUttakNyeRegler?: string; @@ -13,9 +19,14 @@ interface UttakProps { aksjonspunkter: Aksjonspunkt[]; alleKodeverk: AlleKodeverk; submitCallback: (data: { kode: string; begrunnelse: string; virkningsdato: string }[]) => void; + lagreOverstyringUttak: (values: any) => void; + relevanteAksjonspunkter: string[]; + erOverstyrer: boolean; } + export default ({ uuid, + behandling, uttaksperioder, utsattePerioder, arbeidsgiverOpplysningerPerId, @@ -23,8 +34,16 @@ export default ({ alleKodeverk, submitCallback, virkningsdatoUttakNyeRegler, + lagreOverstyringUttak, + relevanteAksjonspunkter, + erOverstyrer, }: UttakProps) => { - const relevanteAksjonspunkter = [aksjonspunktCodes.VENT_ANNEN_PSB_SAK, aksjonspunktCodes.VURDER_DATO_NY_REGEL_UTTAK]; + const [featureToggles] = useFeatureToggles(); + const { versjon, links } = behandling; + const { addErrorMessage } = useRestApiErrorDispatcher(); + const httpErrorHandlerCaller = (status: number, locationHeader?: string) => + httpErrorHandler(status, addErrorMessage, locationHeader); + const funnedeRelevanteAksjonspunkter = aksjonspunkter.filter(aksjonspunkt => relevanteAksjonspunkter.some(relevantAksjonspunkt => relevantAksjonspunkt === aksjonspunkt.definisjon.kode), ); @@ -35,9 +54,22 @@ export default ({ const løsAksjonspunktVurderDatoNyRegelUttak = ({ begrunnelse, virkningsdato }) => submitCallback([{ kode: aksjonspunktCodes.VURDER_DATO_NY_REGEL_UTTAK, begrunnelse, virkningsdato }]); + const handleOverstyringAksjonspunkt = async values => { + lagreOverstyringUttak({ + '@type': aksjonspunktCodes.OVERSTYRING_AV_UTTAK_KODE, + ...VilkarResultPicker.transformValues(values), + ...values, + }); + }; + return ( ); diff --git a/packages/behandling-pleiepenger/src/panelDefinisjoner/prosessStegPaneler/UttakProsessStegPanelDef.tsx b/packages/behandling-pleiepenger/src/panelDefinisjoner/prosessStegPaneler/UttakProsessStegPanelDef.tsx index e10c723d50..04a99b395c 100644 --- a/packages/behandling-pleiepenger/src/panelDefinisjoner/prosessStegPaneler/UttakProsessStegPanelDef.tsx +++ b/packages/behandling-pleiepenger/src/panelDefinisjoner/prosessStegPaneler/UttakProsessStegPanelDef.tsx @@ -15,21 +15,32 @@ class PanelDef extends ProsessStegPanelDef { aksjonspunkter, alleKodeverk, submitCallback, - virkningsdatoUttakNyeRegler, + lagreOverstyringUttak, + virkningsDatoUttakNyeRegler, + relevanteAksjonspunkter, + erOverstyrer, }) => ( ); - getAksjonspunktKoder = () => [aksjonspunktCodes.VENT_ANNEN_PSB_SAK, aksjonspunktCodes.VURDER_DATO_NY_REGEL_UTTAK]; + getAksjonspunktKoder = () => [ + aksjonspunktCodes.VENT_ANNEN_PSB_SAK, + aksjonspunktCodes.VURDER_DATO_NY_REGEL_UTTAK, + aksjonspunktCodes.OVERSTYRING_AV_UTTAK_KODE, + ]; getOverstyrVisningAvKomponent = () => true; @@ -55,12 +66,12 @@ class PanelDef extends ProsessStegPanelDef { getEndepunkter = () => [PleiepengerBehandlingApiKeys.ARBEIDSFORHOLD]; getData = ({ uttak, arbeidsgiverOpplysningerPerId, alleKodeverk }) => ({ - uttaksperioder: - uttak?.uttaksplan != null ? uttak?.uttaksplan?.perioder : uttak?.simulertUttaksplan?.perioder, + uttaksperioder: uttak?.uttaksplan != null ? uttak?.uttaksplan?.perioder : uttak?.simulertUttaksplan?.perioder, utsattePerioder: uttak?.utsattePerioder, virkningsdatoUttakNyeRegler: uttak?.virkningsdatoUttakNyeRegler, arbeidsgiverOpplysningerPerId, alleKodeverk, + relevanteAksjonspunkter: this.getAksjonspunktKoder(), }); } diff --git a/packages/behandling-pleiepenger/src/types/fetchedDataTsType.ts b/packages/behandling-pleiepenger/src/types/FetchedData.ts similarity index 93% rename from packages/behandling-pleiepenger/src/types/fetchedDataTsType.ts rename to packages/behandling-pleiepenger/src/types/FetchedData.ts index f9f2704ec3..5de619b41b 100644 --- a/packages/behandling-pleiepenger/src/types/fetchedDataTsType.ts +++ b/packages/behandling-pleiepenger/src/types/FetchedData.ts @@ -8,7 +8,7 @@ import { BeregningsresultatUtbetalt, } from '@k9-sak-web/types'; -interface FetchedData { +export interface FetchedData { aksjonspunkter: Aksjonspunkt[]; vilkar: Vilkar[]; personopplysninger: Personopplysninger; diff --git a/packages/behandling-pleiepenger/src/types/OverstyringUttakRequest.ts b/packages/behandling-pleiepenger/src/types/OverstyringUttakRequest.ts new file mode 100644 index 0000000000..8fc2dffb9c --- /dev/null +++ b/packages/behandling-pleiepenger/src/types/OverstyringUttakRequest.ts @@ -0,0 +1,32 @@ +export type OverstyringUttakArbeidsforhold = { + type: string | null; + organisasjonsnummer: string | null; + aktørId: string | null; + arbeidsforholdId: string | null; +}; + +export type OverstyringUttakUtbetalingsgrad = { + arbeidsforhold: OverstyringUttakArbeidsforhold; + utbetalingsgrad: string; +}; + +export type EnkeltOverstyringUttak = { + periode: { fom: string; tom: string }; + lagreEllerOppdater: { + erVilkarOk: boolean; + begrunnelse: string; + periode: { fom: string; tom: string }; + søkersUttaksgrad: string; + utbetalingsgrader: OverstyringUttakUtbetalingsgrad[]; + }; +}; + +export type OverstyringUttakRequest = { + '@type@': string; + periode: { fom?: string; tom?: string }; + erVilkarOk: boolean | undefined; + avslagsDato: string | undefined; + avslagskode: string | undefined; + lagreEllerOppdater: EnkeltOverstyringUttak[]; + slett: [{ id: number | string }][]; +}; diff --git a/packages/behandling-pleiepenger/src/types/index.ts b/packages/behandling-pleiepenger/src/types/index.ts new file mode 100644 index 0000000000..6beb0494e4 --- /dev/null +++ b/packages/behandling-pleiepenger/src/types/index.ts @@ -0,0 +1,3 @@ +export * from './Arbeidstype'; +export * from './FetchedData'; +export * from './OverstyringUttakRequest'; diff --git a/packages/behandling-utvidet-rett/src/panelDefinisjoner/prosessStegPaneler/utvidetRettPanel/utvidetRettMikrofrontend/formateringAvDataTilMikrofrontend/KroniskSykObjektTilMikrofrontend.ts b/packages/behandling-utvidet-rett/src/panelDefinisjoner/prosessStegPaneler/utvidetRettPanel/utvidetRettMikrofrontend/formateringAvDataTilMikrofrontend/KroniskSykObjektTilMikrofrontend.ts index f95bd4be08..af0cdbed98 100644 --- a/packages/behandling-utvidet-rett/src/panelDefinisjoner/prosessStegPaneler/utvidetRettPanel/utvidetRettMikrofrontend/formateringAvDataTilMikrofrontend/KroniskSykObjektTilMikrofrontend.ts +++ b/packages/behandling-utvidet-rett/src/panelDefinisjoner/prosessStegPaneler/utvidetRettPanel/utvidetRettMikrofrontend/formateringAvDataTilMikrofrontend/KroniskSykObjektTilMikrofrontend.ts @@ -27,7 +27,12 @@ const formatereLosAksjonspunktObjektForKroniskSyk = ( fraDato: string, vilkar: Vilkar, avslagsårsakKode: string, + soknad: UtvidetRettSoknad, ) => { + const angittBarn = soknad.angittePersoner.find(person => person.rolle === 'BARN'); + const barnetsFodselsdato = new Date(angittBarn.fødselsdato); + const åretBarnetFyller18 = `${barnetsFodselsdato.getFullYear() + 18}-12-31`; + const losAksjonspunktObjekt = { kode: aksjonspunktKode, begrunnelse, @@ -36,9 +41,9 @@ const formatereLosAksjonspunktObjektForKroniskSyk = ( periode: { fom: fraDato, tom: - typeof vilkar.perioder[0]?.periode.tom !== 'undefined' && vilkar.perioder[0]?.periode.tom !== null + typeof vilkar.perioder[0]?.periode.tom && vilkar.perioder[0]?.periode.tom !== '9999-12-31' ? vilkar.perioder[0]?.periode.tom - : '', + : åretBarnetFyller18, }, }; @@ -98,6 +103,7 @@ const KroniskSykObjektTilMikrofrontend = ({ fraDato || soknad.soknadsdato, vilkar, avslagsårsakKode, + soknad, ), ]); }, diff --git a/packages/fakta-etablert-tilsyn/package.json b/packages/fakta-etablert-tilsyn/package.json index abef2d138b..19a19b77c0 100644 --- a/packages/fakta-etablert-tilsyn/package.json +++ b/packages/fakta-etablert-tilsyn/package.json @@ -20,7 +20,6 @@ "classnames": "2.3.2", "dayjs": "1.11.10", "lodash": "4.17.21", - "lodash.throttle": "4.1.1", "nav-frontend-alertstriper": "4.0.2", "nav-frontend-alertstriper-style": "3.0.2", "nav-frontend-chevron": "1.0.30", diff --git a/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynMedSmoring.tsx b/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynMedSmoring.tsx index ef51573e91..b01523f24f 100644 --- a/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynMedSmoring.tsx +++ b/packages/fakta-etablert-tilsyn/src/ui/components/etablertTilsyn/EtablertTilsynMedSmoring.tsx @@ -1,7 +1,7 @@ import { isDayAfter, Period } from '@fpsak-frontend/utils'; import { Table } from '@navikt/ds-react'; import dayjs from 'dayjs'; -import { uniq } from 'lodash'; +import uniq from 'lodash/uniq'; import React from 'react'; import EtablertTilsynType from '../../../types/EtablertTilsynType'; import EtablertTilsynRowContent from './EtablertTilsynRowContent'; diff --git a/packages/fakta-inntektsmelding/package.json b/packages/fakta-inntektsmelding/package.json index 08b8bc0885..723acb793e 100644 --- a/packages/fakta-inntektsmelding/package.json +++ b/packages/fakta-inntektsmelding/package.json @@ -31,7 +31,7 @@ "date-fns": "2.30.0", "dayjs": "1.11.10", "express": "4.18.2", - "lodash.throttle": "4.1.1", + "lodash": "4.17.21", "msw": "1.3.2", "msw-storybook-addon": "1.10.0", "nav-frontend-alertstriper": "4.0.2", @@ -77,7 +77,7 @@ "classnames": "2.3.2", "date-fns": "2.30.0", "dayjs": "1.11.10", - "lodash.throttle": "4.1.1", + "lodash": "4.17.21", "msw-storybook-addon": "1.10.0", "nav-frontend-alertstriper": "4.0.2", "nav-frontend-alertstriper-style": "3.0.2", diff --git a/packages/fakta-institusjon/package.json b/packages/fakta-institusjon/package.json index 156d5ed4ea..0d5a574e0a 100644 --- a/packages/fakta-institusjon/package.json +++ b/packages/fakta-institusjon/package.json @@ -8,7 +8,7 @@ "@fpsak-frontend/form": "*", "@k9-sak-web/types": "*", "@navikt/ft-plattform-komponenter": "2.3.14", - "@navikt/k9-fe-form-utils": "1.0.17", + "@navikt/k9-fe-form-utils": "1.0.18", "@navikt/k9-fe-period-utils": "1.0.12", "formik": "2.4.5", "yup": "0.32.11" diff --git "a/packages/fakta-medisinsk-vilk\303\245r/package.json" "b/packages/fakta-medisinsk-vilk\303\245r/package.json" index 3f329fce78..adc41dcbaf 100644 --- "a/packages/fakta-medisinsk-vilk\303\245r/package.json" +++ "b/packages/fakta-medisinsk-vilk\303\245r/package.json" @@ -21,7 +21,7 @@ "axios": "1.6.2", "classnames": "2.3.2", "dayjs": "1.11.10", - "lodash.throttle": "4.1.1", + "lodash": "4.17.21", "react": "18.2.0", "react-collapse": "5.1.1", "react-dom": "18.2.0", diff --git a/packages/fakta-om-barnet/package.json b/packages/fakta-om-barnet/package.json index d86247a8e9..28ec9ff9b1 100644 --- a/packages/fakta-om-barnet/package.json +++ b/packages/fakta-om-barnet/package.json @@ -18,7 +18,7 @@ "axios": "1.6.2", "classnames": "2.3.2", "dayjs": "1.11.10", - "lodash.throttle": "4.1.1", + "lodash": "4.17.21", "react": "18.2.0", "react-collapse": "5.1.1", "react-dom": "18.2.0", diff --git a/packages/fakta-omsorgen-for/package.json b/packages/fakta-omsorgen-for/package.json index ba5eabca9c..9edec2f320 100644 --- a/packages/fakta-omsorgen-for/package.json +++ b/packages/fakta-omsorgen-for/package.json @@ -19,7 +19,7 @@ "axios": "1.6.2", "classnames": "2.3.2", "dayjs": "1.11.10", - "lodash.throttle": "4.1.1", + "lodash": "4.17.21", "nav-frontend-alertstriper": "4.0.2", "nav-frontend-alertstriper-style": "3.0.2", "nav-frontend-chevron": "1.0.30", diff --git a/packages/fakta-omsorgsdager/package.json b/packages/fakta-omsorgsdager/package.json index ccbd9108b3..7f63ccce7b 100644 --- a/packages/fakta-omsorgsdager/package.json +++ b/packages/fakta-omsorgsdager/package.json @@ -19,7 +19,6 @@ "classnames": "2.3.2", "dayjs": "1.11.10", "lodash": "4.17.21", - "lodash.throttle": "4.1.1", "nav-datovelger": "12.6.0", "nav-frontend-alertstriper": "4.0.2", "nav-frontend-alertstriper-style": "3.0.2", diff --git a/packages/fakta-omsorgsdager/src/util/useFormSessionStorageUtils.ts b/packages/fakta-omsorgsdager/src/util/useFormSessionStorageUtils.ts index efa43d8b02..34721639aa 100644 --- a/packages/fakta-omsorgsdager/src/util/useFormSessionStorageUtils.ts +++ b/packages/fakta-omsorgsdager/src/util/useFormSessionStorageUtils.ts @@ -1,5 +1,5 @@ import { useCallback, useEffect, useRef } from 'react'; -import throttle from 'lodash.throttle'; +import throttle from 'lodash/throttle'; // Brukes for midlertidig mellomlagring av input fra saksbehandlare som ett global objekt i k9-sak-web. export const BrukFormSesjonslagring = ( diff --git a/packages/fakta-opplaering/package.json b/packages/fakta-opplaering/package.json index b6cd32fae8..e50ec242a0 100644 --- a/packages/fakta-opplaering/package.json +++ b/packages/fakta-opplaering/package.json @@ -12,7 +12,7 @@ "@navikt/ds-react": "5.11.2", "@navikt/ft-plattform-komponenter": "2.3.14", "@navikt/k9-fe-date-utils": "1.0.9", - "@navikt/k9-fe-form-utils": "1.0.17", + "@navikt/k9-fe-form-utils": "1.0.18", "@navikt/k9-fe-period-utils": "1.0.12", "classnames": "2.3.2", "dayjs": "1.11.10", diff --git a/packages/form/package.json b/packages/form/package.json index ac36fb2037..5f55b0f0dc 100644 --- a/packages/form/package.json +++ b/packages/form/package.json @@ -11,7 +11,7 @@ "@navikt/ft-plattform-komponenter": "2.3.14", "classnames": "2.3.2", "formik": "2.4.5", - "lodash.throttle": "4.1.1", + "lodash": "4.17.21", "moment": "2.29.4", "nav-frontend-core": "6.0.1", "nav-frontend-etiketter": "3.0.3", diff --git a/packages/kodeverk/src/aksjonspunktCodes.ts b/packages/kodeverk/src/aksjonspunktCodes.ts index 65b3d862f8..90c026279a 100644 --- a/packages/kodeverk/src/aksjonspunktCodes.ts +++ b/packages/kodeverk/src/aksjonspunktCodes.ts @@ -62,6 +62,7 @@ const aksjonspunktCodes = { OVERSTYR_BEREGNING: '6007', OVERSTYRING_AV_UTTAKPERIODER: '6008', OVERSTYRING_AV_OPPTJENINGSVILKARET: '6011', + OVERSTYRING_AV_UTTAK_KODE: '6017', VURDER_OPPTJENINGSVILKARET: '5089', OVERSTYR_LØPENDE_MEDLEMSKAPSVILKAR: '6012', OVERSTYRING_AV_BEREGNINGSAKTIVITETER: '6014', diff --git a/packages/prosess-aarskvantum-oms/package.json b/packages/prosess-aarskvantum-oms/package.json index db7214b5bd..99ebd36dd8 100644 --- a/packages/prosess-aarskvantum-oms/package.json +++ b/packages/prosess-aarskvantum-oms/package.json @@ -14,7 +14,7 @@ "@k9-sak-web/konstanter": "1.0.0", "@k9-sak-web/types": "1.0.0", "classnames": "2.3.2", - "lodash.throttle": "4.1.1", + "lodash": "4.17.21", "moment": "2.29.4", "nav-frontend-alertstriper": "4.0.2", "nav-frontend-alertstriper-style": "3.0.2", diff --git a/packages/prosess-uttak/package.json b/packages/prosess-uttak/package.json index e33ceb8aea..f4e74587c8 100644 --- a/packages/prosess-uttak/package.json +++ b/packages/prosess-uttak/package.json @@ -38,7 +38,7 @@ "cors": "2.8.5", "dayjs": "1.11.10", "express": "4.18.2", - "lodash.throttle": "4.1.1", + "lodash": "4.17.21", "nav-frontend-alertstriper": "4.0.2", "nav-frontend-alertstriper-style": "3.0.2", "nav-frontend-chevron": "1.0.30", diff --git a/packages/prosess-uttak/src/constants/AnnenPart.ts b/packages/prosess-uttak/src/constants/AnnenPart.ts index accbce7932..9c738b85b4 100644 --- a/packages/prosess-uttak/src/constants/AnnenPart.ts +++ b/packages/prosess-uttak/src/constants/AnnenPart.ts @@ -1,4 +1,4 @@ -enum AnnenPart { +export enum AnnenPart { ALENE = 'ALENE', MED_ANDRE = 'MED_ANDRE', VENTER_ANDRE = 'VENTER_ANDRE', diff --git a/packages/prosess-uttak/src/constants/Arbeidstype.ts b/packages/prosess-uttak/src/constants/Arbeidstype.ts index 6d07102eeb..0b4c2c33ea 100644 --- a/packages/prosess-uttak/src/constants/Arbeidstype.ts +++ b/packages/prosess-uttak/src/constants/Arbeidstype.ts @@ -1,4 +1,4 @@ -enum Arbeidstype { +export enum Arbeidstype { AT = 'ARBEIDSTAKER', FL = 'FRILANSER', DP = 'DAGPENGER', diff --git "a/packages/prosess-uttak/src/constants/IkkeOppfylte\303\205rsakerMedTekst.ts" "b/packages/prosess-uttak/src/constants/IkkeOppfylte\303\205rsakerMedTekst.ts" index a70bd77463..9a998ac643 100644 --- "a/packages/prosess-uttak/src/constants/IkkeOppfylte\303\205rsakerMedTekst.ts" +++ "b/packages/prosess-uttak/src/constants/IkkeOppfylte\303\205rsakerMedTekst.ts" @@ -1,6 +1,6 @@ import Årsaker from './Årsaker'; -const IkkeOppfylteÅrsakerMedTekst = [ +export const IkkeOppfylteÅrsakerMedTekst = [ { årsak: Årsaker.LOVBESTEMT_FERIE, tekst: 'Årsak for 0 % uttak: Søker avvikler lovbestemt ferie', diff --git "a/packages/prosess-uttak/src/constants/OverseEtablertTilsyn\303\205rsak.ts" "b/packages/prosess-uttak/src/constants/OverseEtablertTilsyn\303\205rsak.ts" index d9960c4df2..8ce49e77a8 100644 --- "a/packages/prosess-uttak/src/constants/OverseEtablertTilsyn\303\205rsak.ts" +++ "b/packages/prosess-uttak/src/constants/OverseEtablertTilsyn\303\205rsak.ts" @@ -1,4 +1,4 @@ -enum OverseEtablertTilsynÅrsak { +export enum OverseEtablertTilsynÅrsak { FOR_LAVT = 'FOR_LAVT', NATTEVÅK = 'NATTEVÅK', BEREDSKAP = 'BEREDSKAP', diff --git a/packages/prosess-uttak/src/constants/OverstyrUttakFormFieldName.ts b/packages/prosess-uttak/src/constants/OverstyrUttakFormFieldName.ts new file mode 100644 index 0000000000..d25827a300 --- /dev/null +++ b/packages/prosess-uttak/src/constants/OverstyrUttakFormFieldName.ts @@ -0,0 +1,17 @@ +export enum OverstyrUttakFormFieldName { + FOM = 'fom', + TOM = 'tom', + UTTAKSGRAD = 'søkersUttaksgrad', + OVERSTYRING = 'overstyring', + BEGRUNNELSE = 'begrunnelse', + UTBETALINGSGRADER = 'utbetalingsgrader', + UTBETALINGSGRAD = 'utbetalingsgrad', + AKTIVITET_ID = 'aktivitetId', + AKTIVITET_NAVN = 'aktivitetNavn', + AKTIVITET_UTBETALINGSGRAD = 'aktivitetUtbetalingsgrad', + ARBEIDSFORHOLD = 'arbeidsforhold', + TYPE = 'type', + ORGANISASJONSNUMMER = 'organisasjonsnummer', + AKTØR_ID = 'aktørId', + ARBEIDSFORHOLD_ID = 'arbeidsforholdId', +} diff --git a/packages/prosess-uttak/src/constants/Parter.ts b/packages/prosess-uttak/src/constants/Parter.ts index 09396337a3..ce3fa64e83 100644 --- a/packages/prosess-uttak/src/constants/Parter.ts +++ b/packages/prosess-uttak/src/constants/Parter.ts @@ -1,4 +1,4 @@ -enum Parter { +export enum Parter { SØKER = 'Søker', } diff --git a/packages/prosess-uttak/src/constants/Utfall.ts b/packages/prosess-uttak/src/constants/Utfall.ts index 2606a69692..a5d293c032 100644 --- a/packages/prosess-uttak/src/constants/Utfall.ts +++ b/packages/prosess-uttak/src/constants/Utfall.ts @@ -1,4 +1,4 @@ -enum Utfall { +export enum Utfall { OPPFYLT = 'OPPFYLT', IKKE_OPPFYLT = 'IKKE_OPPFYLT', } diff --git a/packages/prosess-uttak/src/constants/index.ts b/packages/prosess-uttak/src/constants/index.ts new file mode 100644 index 0000000000..fcbc782c6a --- /dev/null +++ b/packages/prosess-uttak/src/constants/index.ts @@ -0,0 +1,8 @@ +export * from './AnnenPart'; +export * from './Arbeidstype'; +export * from './BarnetsDødsfallÅrsakerMedTekst'; +export * from './IkkeOppfylteÅrsakerMedTekst'; +export * from './OverseEtablertTilsynÅrsak'; +export * from './OverstyrUttakFormFieldName'; +export * from './Parter'; +export * from './Utfall'; diff --git "a/packages/prosess-uttak/src/constants/\303\205rsaker.ts" "b/packages/prosess-uttak/src/constants/\303\205rsaker.ts" index 59fb0b8bda..a143838743 100644 --- "a/packages/prosess-uttak/src/constants/\303\205rsaker.ts" +++ "b/packages/prosess-uttak/src/constants/\303\205rsaker.ts" @@ -1,4 +1,4 @@ -enum Årsaker { +export enum Årsaker { // Oppfylt årsaker GRADERT_MOT_TILSYN = 'GRADERT_MOT_TILSYN', AVKORTET_MOT_INNTEKT = 'AVKORTET_MOT_INNTEKT', diff --git a/packages/prosess-uttak/src/types/Arbeidsforhold.ts b/packages/prosess-uttak/src/types/Arbeidsforhold.ts index 7f3150eddf..7e0551fbf7 100644 --- a/packages/prosess-uttak/src/types/Arbeidsforhold.ts +++ b/packages/prosess-uttak/src/types/Arbeidsforhold.ts @@ -1,6 +1,7 @@ export interface Arbeidsforhold { type: string; - organisasjonsnummer: string; + organisasjonsnummer?: string; + orgnr?: string; aktørId?: string; arbeidsforholdId?: string; } diff --git a/packages/prosess-uttak/src/types/ArbeidsgiverOpplysninger.ts b/packages/prosess-uttak/src/types/ArbeidsgiverOpplysninger.ts index 9f7fed270d..2af25079a5 100644 --- a/packages/prosess-uttak/src/types/ArbeidsgiverOpplysninger.ts +++ b/packages/prosess-uttak/src/types/ArbeidsgiverOpplysninger.ts @@ -1,4 +1,4 @@ -type ArbeidsgiverOpplysninger = Readonly<{ +export type ArbeidsgiverOpplysninger = Readonly<{ navn: string; fødselsdato?: string; identifikator?: string; diff --git a/packages/prosess-uttak/src/types/ContainerContract.ts b/packages/prosess-uttak/src/types/ContainerContract.ts index 05f29fab28..1feecf69a8 100644 --- a/packages/prosess-uttak/src/types/ContainerContract.ts +++ b/packages/prosess-uttak/src/types/ContainerContract.ts @@ -1,24 +1,14 @@ +import { Aksjonspunkt } from '@k9-sak-web/types'; import Uttaksperioder from './Uttaksperioder'; import ArbeidsgiverOpplysninger from './ArbeidsgiverOpplysninger'; import KodeverkMedNavn from './kodeverkMedNavnTsType'; -import Kodeverk from './kodeverkTsType'; - -export type Aksjonspunkt = Readonly<{ - definisjon: Kodeverk; - status: Kodeverk; - begrunnelse?: string; - vilkarType?: Kodeverk; - toTrinnsBehandling?: boolean; - toTrinnsBehandlingGodkjent?: boolean; - vurderPaNyttArsaker?: Kodeverk[]; - besluttersBegrunnelse?: string; - aksjonspunktType?: Kodeverk; - kanLoses: boolean; - erAktivt: boolean; - venteårsakVariant?: string; -}>; interface ContainerContract { + httpErrorHandler?: (status: number, locationHeader?: string) => void; + endpoints?: { + behandlingUttakOverstyrbareAktiviteter: string; + behandlingUttakOverstyrt: string; + }; uttaksperioder: Uttaksperioder; utsattePerioder: string[]; aktivBehandlingUuid: string; @@ -26,6 +16,7 @@ interface ContainerContract { aksjonspunktkoder: string[]; erFagytelsetypeLivetsSluttfase: boolean; kodeverkUtenlandsoppholdÅrsak: KodeverkMedNavn[]; + handleOverstyringAksjonspunkt?: (data: any) => Promise; løsAksjonspunktVurderDatoNyRegelUttak: ({ begrunnelse, virkningsdato, @@ -35,6 +26,9 @@ interface ContainerContract { }) => void; virkningsdatoUttakNyeRegler: string; aksjonspunkter?: Aksjonspunkt[]; + versjon?: number; + featureToggles: { [key: string]: boolean }; + erOverstyrer?: boolean; } export default ContainerContract; diff --git a/packages/prosess-uttak/src/types/Endringsstatus.ts b/packages/prosess-uttak/src/types/Endringsstatus.ts index 98450b8100..dd38836f1a 100644 --- a/packages/prosess-uttak/src/types/Endringsstatus.ts +++ b/packages/prosess-uttak/src/types/Endringsstatus.ts @@ -1,3 +1,3 @@ -type Endringsstatus = 'NY' | 'ENDRET' | 'UENDRET' | 'UENDRET_RESULTAT' | null; +export type Endringsstatus = 'NY' | 'ENDRET' | 'UENDRET' | 'UENDRET_RESULTAT' | null; export default Endringsstatus; diff --git a/packages/prosess-uttak/src/types/FormatertOverstyring.ts b/packages/prosess-uttak/src/types/FormatertOverstyring.ts new file mode 100644 index 0000000000..40908d8e7f --- /dev/null +++ b/packages/prosess-uttak/src/types/FormatertOverstyring.ts @@ -0,0 +1,18 @@ +export type FormatertOverstyring = { + id?: string; + begrunnelse?: string; + periode: { + fom: string; + tom: string; + }; + søkersUttaksgrad: number; + utbetalingsgrader: { + arbeidsforhold: { + type: string; + organisasjonsnummer: string; + aktørId: string; + arbeidsforholdId: string; + }; + utbetalingsgrad: number; + }[]; +}; diff --git a/packages/prosess-uttak/src/types/OverstyrUttakFormData.ts b/packages/prosess-uttak/src/types/OverstyrUttakFormData.ts new file mode 100644 index 0000000000..9df1a9e16f --- /dev/null +++ b/packages/prosess-uttak/src/types/OverstyrUttakFormData.ts @@ -0,0 +1,10 @@ +import { OverstyrUttakFormFieldName } from '../constants/OverstyrUttakFormFieldName'; +import { OverstyrUttakFormDataUtbetalingsgrad } from '.'; + +export type OverstyrUttakFormData = { + [OverstyrUttakFormFieldName.FOM]: Date | undefined; + [OverstyrUttakFormFieldName.TOM]: Date | undefined; + [OverstyrUttakFormFieldName.UTTAKSGRAD]: number; + [OverstyrUttakFormFieldName.BEGRUNNELSE]: string; + [OverstyrUttakFormFieldName.UTBETALINGSGRADER]: OverstyrUttakFormDataUtbetalingsgrad[]; +}; diff --git a/packages/prosess-uttak/src/types/OverstyrUttakFormDataUtbetalingsgrad.ts b/packages/prosess-uttak/src/types/OverstyrUttakFormDataUtbetalingsgrad.ts new file mode 100644 index 0000000000..5ffacbae1a --- /dev/null +++ b/packages/prosess-uttak/src/types/OverstyrUttakFormDataUtbetalingsgrad.ts @@ -0,0 +1,11 @@ +import { OverstyrUttakFormFieldName } from '../constants/OverstyrUttakFormFieldName'; + +export type OverstyrUttakFormDataUtbetalingsgrad = { + [OverstyrUttakFormFieldName.ARBEIDSFORHOLD]: { + [OverstyrUttakFormFieldName.TYPE]: string; + [OverstyrUttakFormFieldName.ORGANISASJONSNUMMER]: string; + [OverstyrUttakFormFieldName.AKTØR_ID]: string; + [OverstyrUttakFormFieldName.ARBEIDSFORHOLD_ID]: string; + }; + [OverstyrUttakFormFieldName.AKTIVITET_UTBETALINGSGRAD]: number; +}; diff --git a/packages/prosess-uttak/src/types/OverstyrbareAktiviteterRequest.ts b/packages/prosess-uttak/src/types/OverstyrbareAktiviteterRequest.ts new file mode 100644 index 0000000000..ea5717b30a --- /dev/null +++ b/packages/prosess-uttak/src/types/OverstyrbareAktiviteterRequest.ts @@ -0,0 +1,6 @@ +export interface OverstyrbareAktiviteterRequest { + behandlingIdDto: string; + fom: string; + tom: string; +} +export default OverstyrbareAktiviteterRequest; diff --git a/packages/prosess-uttak/src/types/OverstyrbareAktiviteterResponse.ts b/packages/prosess-uttak/src/types/OverstyrbareAktiviteterResponse.ts new file mode 100644 index 0000000000..03912fe0e4 --- /dev/null +++ b/packages/prosess-uttak/src/types/OverstyrbareAktiviteterResponse.ts @@ -0,0 +1,5 @@ +import { Arbeidsforhold } from './Arbeidsforhold'; + +export interface OverstyrbareAktiviteterResponse { + arbeidsforholdsperioder: Arbeidsforhold[]; +} diff --git a/packages/prosess-uttak/src/types/OverstyringUttak.ts b/packages/prosess-uttak/src/types/OverstyringUttak.ts new file mode 100644 index 0000000000..93d8d99fe2 --- /dev/null +++ b/packages/prosess-uttak/src/types/OverstyringUttak.ts @@ -0,0 +1,18 @@ +export type OverstyringUttak = { + id: string; + periode: { + fom: Date; + tom: Date; + }; + søkersUttaksgrad: number; + utbetalingsgrader: { + arbeidsforhold: { + type: string; + organisasjonsnummer: string | null; + aktørId: string | null; + arbeidsforholdId: string | null; + }; + utbetalingsgrad: number; + }[]; + begrunnelse: string; +}; diff --git a/packages/prosess-uttak/src/types/OverstyrtUttakResponse.ts b/packages/prosess-uttak/src/types/OverstyrtUttakResponse.ts new file mode 100644 index 0000000000..0bda54b742 --- /dev/null +++ b/packages/prosess-uttak/src/types/OverstyrtUttakResponse.ts @@ -0,0 +1,19 @@ +import { OverstyringUttak } from './OverstyringUttak'; + +export interface OverstyrtUttakResponse { + overstyringer: OverstyringUttak[]; + arbeidsgiverOversikt: { + arbeidsgivere: { + [key: string]: { + identifikator: string; + personIdentifikator: string; + navn: string; + fødselsdato: string; + arbeidsforholdreferanser: { + internArbeidsforholdId: string; + eksternArbeidsforholdId: string; + }[]; + }; + }; + }; +} diff --git a/packages/prosess-uttak/src/types/Utbetalingsgrad.ts b/packages/prosess-uttak/src/types/Utbetalingsgrad.ts index 8c0f4bdaf8..a311fcbb6c 100644 --- a/packages/prosess-uttak/src/types/Utbetalingsgrad.ts +++ b/packages/prosess-uttak/src/types/Utbetalingsgrad.ts @@ -1,6 +1,6 @@ import { Arbeidsforhold } from './Arbeidsforhold'; -interface Utbetalingsgrad { +export interface Utbetalingsgrad { arbeidsforhold: Arbeidsforhold; normalArbeidstid: string; faktiskArbeidstid: string; diff --git a/packages/prosess-uttak/src/types/UttakOverstyring.ts b/packages/prosess-uttak/src/types/UttakOverstyring.ts new file mode 100644 index 0000000000..4805daa7a3 --- /dev/null +++ b/packages/prosess-uttak/src/types/UttakOverstyring.ts @@ -0,0 +1,8 @@ +export type UttakOverstyring = { + id: string; + navn: string; + fraDato: string; + tilDato: string; + uttaksgrad: number; + begrunnelse: string; +}; diff --git a/packages/prosess-uttak/src/types/Uttaksperioder.ts b/packages/prosess-uttak/src/types/Uttaksperioder.ts index 4dccc9b7a8..a9a7ad0594 100644 --- a/packages/prosess-uttak/src/types/Uttaksperioder.ts +++ b/packages/prosess-uttak/src/types/Uttaksperioder.ts @@ -1,6 +1,6 @@ import { Uttaksperiodeelement } from './Uttaksperiode'; -interface Uttaksperioder { +export interface Uttaksperioder { [key: string]: Uttaksperiodeelement; } diff --git a/packages/prosess-uttak/src/types/index.ts b/packages/prosess-uttak/src/types/index.ts new file mode 100644 index 0000000000..42a556087e --- /dev/null +++ b/packages/prosess-uttak/src/types/index.ts @@ -0,0 +1,21 @@ +export * from './Arbeidsforhold'; +export * from './ArbeidsgiverOpplysninger'; +export * from './ContainerContract'; +export * from './Endringsstatus'; +export * from './FormatertOverstyring'; +export * from './GraderingMotTilsyn'; +export * from './HttpErrorHandler'; +export * from './Inngangsvilkår'; +export * from './kodeverkMedNavnTsType'; +export * from './kodeverkTsType'; +export * from './OverstyrbareAktiviteterRequest'; +export * from './OverstyrbareAktiviteterResponse'; +export * from './OverstyringUttak'; +export * from './OverstyrtUttakResponse'; +export * from './OverstyrUttakFormData'; +export * from './OverstyrUttakFormDataUtbetalingsgrad'; +export * from './Period'; +export * from './Utbetalingsgrad'; +export * from './UttakOverstyring'; +export * from './Uttaksperiode'; +export * from './Uttaksperioder'; diff --git a/packages/prosess-uttak/src/ui/MainComponent.tsx b/packages/prosess-uttak/src/ui/MainComponent.tsx index f0806d15d2..6003439dd3 100644 --- a/packages/prosess-uttak/src/ui/MainComponent.tsx +++ b/packages/prosess-uttak/src/ui/MainComponent.tsx @@ -1,5 +1,7 @@ import React from 'react'; -import { Heading } from '@navikt/ds-react'; + +import { Alert, BodyShort, Heading } from '@navikt/ds-react'; + import ContainerContract from '../types/ContainerContract'; import lagUttaksperiodeliste from '../util/uttaksperioder'; import UttaksperiodeListe from './components/uttaksperiode-liste/UttaksperiodeListe'; @@ -8,28 +10,62 @@ import Infostripe from './components/infostripe/Infostripe'; import UtsattePerioderStripe from './components/utsattePerioderStripe/UtsattePerioderStripe'; import VurderDato from './components/vurderDato/VurderDato'; import { aksjonspunktVurderDatoKode, aksjonspunktkodeVentAnnenPSBSakKode } from '../constants/Aksjonspunkter'; +import OverstyringIkon from './components/overstyrUttakForm/components/OverstyringIkon'; +import { OverstyrUttakContextProvider } from './context/OverstyrUttakContext'; +import OverstyrUttakForm from './components/overstyrUttakForm/OverstyrUttakForm'; interface MainComponentProps { containerData: ContainerContract; } const MainComponent = ({ containerData }: MainComponentProps): JSX.Element => { - const { uttaksperioder, aksjonspunktkoder, aksjonspunkter, virkningsdatoUttakNyeRegler } = containerData; + const { + featureToggles, + uttaksperioder, + aksjonspunktkoder, + aksjonspunkter, + virkningsdatoUttakNyeRegler, + erOverstyrer, + } = containerData; const [redigerVirkningsdato, setRedigervirkningsdato] = React.useState(false); const aksjonspunktVurderDato = aksjonspunkter?.find(ap => ap.definisjon.kode === aksjonspunktVurderDatoKode); + const [overstyringAktiv, setOverstyringAktiv] = React.useState(aksjonspunktkoder.includes('6017')); + const toggleOverstyring = () => setOverstyringAktiv(!overstyringAktiv); + const harVentAnnenPSBSakAksjonspunkt = aksjonspunktkoder?.some( aksjonspunktkode => aksjonspunktkode === aksjonspunktkodeVentAnnenPSBSakKode, ); const harAksjonspunktVurderDatoMedStatusOpprettet = aksjonspunktkoder?.some( aksjonspunktkode => aksjonspunktkode === aksjonspunktVurderDatoKode, ); + return ( Uttak + {featureToggles?.OVERSTYRING_UTTAK && ( + + )} + + {overstyringAktiv && ( + + + Vurder overstrying av uttaksgrad + + + Det er lagt til overstyring av uttaksgrad i en tidligere periode. Vurder om det skal legges til overstyring + for nye perioder i uttak. + + + )} + + + {erOverstyrer && overstyringAktiv && } + + {harAksjonspunktVurderDatoMedStatusOpprettet && } {virkningsdatoUttakNyeRegler && redigerVirkningsdato && ( diff --git a/packages/prosess-uttak/src/ui/components/icons/key-1-rotert-utgraet.svg b/packages/prosess-uttak/src/ui/components/icons/key-1-rotert-utgraet.svg new file mode 100644 index 0000000000..da254eeb6a --- /dev/null +++ b/packages/prosess-uttak/src/ui/components/icons/key-1-rotert-utgraet.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/prosess-uttak/src/ui/components/icons/key-1-rotert.svg b/packages/prosess-uttak/src/ui/components/icons/key-1-rotert.svg new file mode 100644 index 0000000000..82aed8ce87 --- /dev/null +++ b/packages/prosess-uttak/src/ui/components/icons/key-1-rotert.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/prosess-uttak/src/ui/components/overstyrUttakForm/AktivitetRad.tsx b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/AktivitetRad.tsx new file mode 100644 index 0000000000..6f6dc563c2 --- /dev/null +++ b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/AktivitetRad.tsx @@ -0,0 +1,76 @@ +import React from 'react'; + +import { Table, Button } from '@navikt/ds-react'; +import { Edit, Delete } from '@navikt/ds-icons'; + +import dayjs from 'dayjs'; + +import styles from './aktivitetRad.css'; +import BegrunnelseBoks from './components/BegrunnelseBoks'; +import { OverstyringUttak } from '../../../types'; + +interface ownProps { + index: number; + overstyring: OverstyringUttak; + handleRediger: (index: number) => void; + visOverstyringSkjema: boolean; + handleSlett: (id: string) => void; + loading: boolean; + setLoading: (loading: boolean) => void; +} + +const AktivitetRad: React.FC = ({ + overstyring, + index, + handleRediger, + visOverstyringSkjema, + handleSlett, + loading, +}) => { + const [ekspandert, setEkspandert] = React.useState(false); + const { id, periode, søkersUttaksgrad, begrunnelse } = overstyring; + const { fom, tom } = periode; + + return ( + + + + } + open={ekspandert} + > + setEkspandert(!ekspandert)}>{dayjs(fom).format('DD.MM.YYYY')} + setEkspandert(!ekspandert)}>{dayjs(tom).format('DD.MM.YYYY')} + setEkspandert(!ekspandert)}>{søkersUttaksgrad} + + + + + + + ); +}; + +export default AktivitetRad; diff --git a/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyrAktivitetListe.css b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyrAktivitetListe.css new file mode 100644 index 0000000000..24940d76fd --- /dev/null +++ b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyrAktivitetListe.css @@ -0,0 +1,26 @@ +.overstyringSkjemaAktiviteter { + display: table; + margin-top: var(--a-spacing-4); +} + +.overstyringSkjemaAktivitet { + display: table-row; +} + +.overstyringSkjemaAktivitet > div { + display: table-cell; + padding: var(--a-spacing-2) var(--a-spacing-8); +} + +.overstyringSkjemaAktivitet > div:first-child { + padding-left: 0; +} + +.overstyringSkjemaAktivitet > div:last-child { + padding-right: 0; +} + +.overstyringSkjemaAktivitet > div > div { + display: inline-block; + margin-right: var(--a-spacing-2); +} diff --git a/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyrAktivitetListe.tsx b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyrAktivitetListe.tsx new file mode 100644 index 0000000000..49ab822bac --- /dev/null +++ b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyrAktivitetListe.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import { useFormContext, FieldArrayWithId } from 'react-hook-form'; + +import { Label, TextField } from '@navikt/ds-react'; +import { OverstyrUttakFormFieldName } from '../../../constants'; + +import styles from './OverstyrAktivitetListe.css'; +import { OverstyrUttakFormData } from '../../../types'; + +type ownProps = { + fields: FieldArrayWithId[]; + loading: boolean; +}; + +const OverstyrAktivitetListe: React.FC = ({ fields, loading }) => { + const { register } = useFormContext(); + + const utledAtkivitetNavn = ( + field: FieldArrayWithId, + ): string => { + const arbeidsforhold = field[OverstyrUttakFormFieldName.ARBEIDSFORHOLD]; + if (arbeidsforhold[OverstyrUttakFormFieldName.AKTØR_ID]) + return `${arbeidsforhold[OverstyrUttakFormFieldName.TYPE]} ${ + arbeidsforhold[OverstyrUttakFormFieldName.AKTØR_ID] + }`; + if (arbeidsforhold[OverstyrUttakFormFieldName.ORGANISASJONSNUMMER]) + return `${arbeidsforhold[OverstyrUttakFormFieldName.TYPE]} ${ + arbeidsforhold[OverstyrUttakFormFieldName.ORGANISASJONSNUMMER] + }`; + if (arbeidsforhold[OverstyrUttakFormFieldName.ARBEIDSFORHOLD_ID]) + return `${arbeidsforhold[OverstyrUttakFormFieldName.TYPE]} ${ + arbeidsforhold[OverstyrUttakFormFieldName.ARBEIDSFORHOLD_ID] + }`; + + return `${arbeidsforhold[OverstyrUttakFormFieldName.TYPE]}`; + }; + + return ( + <> + +
+ {fields.map((field, index) => ( +
+
{utledAtkivitetNavn(field)}
+
+ + % +
+
+ ))} +
+ + ); +}; + +export default OverstyrAktivitetListe; diff --git a/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyrUttakForm.tsx b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyrUttakForm.tsx new file mode 100644 index 0000000000..d91a3f87a3 --- /dev/null +++ b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyrUttakForm.tsx @@ -0,0 +1,145 @@ +import React, { useState } from 'react'; + +import { Button, Heading, Table } from '@navikt/ds-react'; +import { PlusIcon } from '@navikt/ft-plattform-komponenter'; + +import NavFrontendSpinner from 'nav-frontend-spinner'; +import ContainerContext from '../../context/ContainerContext'; +import OverstyringUttakForm from './OverstyringUttakForm'; +import AktivitetRad from './AktivitetRad'; + +import styles from './overstyrUttakForm.css'; +import { useOverstyrUttak } from '../../context/OverstyrUttakContext'; +import { UttakOverstyring } from '../../../types/UttakOverstyring'; +import { formaterOverstyringTilFormData } from '../../../util/overstyringUtils'; + +const tableHeaders = ( + + + + Fra og med + Til og med + Ny uttaksgrad + Valg for overstyring + + +); + +const nyOverstyring: UttakOverstyring = { + id: '', + navn: '', + fraDato: '', + tilDato: '', + uttaksgrad: 0, + begrunnelse: '', +}; + +const OverstyrUttakForm: React.FC = () => { + const [loading, setLoading] = useState(false); + const { handleOverstyringAksjonspunkt } = React.useContext(ContainerContext); + const [visOverstyringSkjema, setVisOverstyringSkjema] = React.useState(false); + const { lasterOverstyringer, overstyrte } = useOverstyrUttak(); + const [redigerOverstyring, setRedigerOverstyring] = React.useState(false); + const handleSubmit = () => { + setLoading(true); + handleOverstyringAksjonspunkt({ + gåVidere: true, + lagreEllerOppdater: [], + slett: [], + periode: {}, + }); + }; + + const handleSlett = (id: string): void => { + setLoading(true); + handleOverstyringAksjonspunkt({ + gåVidere: false, + lagreEllerOppdater: [], + slett: [{ id }], + periode: {}, + }); + }; + + const handleAvbrytOverstyringForm = () => { + setVisOverstyringSkjema(false); + setRedigerOverstyring(false); + }; + + const handleRediger = (index: number) => { + setRedigerOverstyring(index); + setVisOverstyringSkjema(true); + }; + + return ( +
+ {lasterOverstyringer && } + {!lasterOverstyringer && ( + <> + {overstyrte?.length === 0 && !visOverstyringSkjema && <>Det er ingen overstyrte aktiviteter i denne saken} + {overstyrte?.length > 0 && ( + <> + Overstyrte perioder + + {tableHeaders} + + {overstyrte.map((overstyring, index) => ( + + ))} + +
+ + )} + + )} + + {!visOverstyringSkjema && ( +
+ +
+ )} + + {!visOverstyringSkjema && overstyrte?.length > 0 && ( +
+ +
+ )} + {visOverstyringSkjema && redigerOverstyring === false && ( + + )} + {visOverstyringSkjema && typeof redigerOverstyring === 'number' && ( + + )} +
+ ); +}; + +export default OverstyrUttakForm; diff --git a/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyringUttakForm.css b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyringUttakForm.css new file mode 100644 index 0000000000..b90ff4c31d --- /dev/null +++ b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyringUttakForm.css @@ -0,0 +1,48 @@ +@import '@navikt/ds-tokens'; + +.overstyringSkjemaWrapper { + border: 1px solid var(--a-border-divider); + background-color: var(--a-deepblue-50); + padding: var(--a-spacing-6); + border-radius: 3px; + max-width: 800px; + margin-top: var(--a-spacing-8); + margin-bottom: var(--a-spacing-8); +} + +.overstyringDatoOgUttaksgrad { + display: flex; + justify-content: left; + flex-wrap: wrap; + gap: var(--a-spacing-4); + margin-bottom: var(--a-spacing-4); + margin-top: var(--a-spacing-4); +} + +.overstyringDatoVelger { + display: flex; + justify-content: left; + flex-wrap: wrap; + gap: var(--a-spacing-4); +} + +.overstyringDatoVelger > div { + justify-items: start; + display: grid; +} + +.overstyringKnapperad { + margin-top: var(--a-spacing-4); + display: flex; + justify-content: left; + flex-wrap: wrap; + gap: var(--a-spacing-4); +} + +.overstyringBegrunnelse > div { + margin-top: var(--a-spacing-4); +} + +.overstyringAktivitetListe { + margin-top: var(--a-spacing-4); +} diff --git a/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyringUttakForm.tsx b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyringUttakForm.tsx new file mode 100644 index 0000000000..17390ae8a7 --- /dev/null +++ b/packages/prosess-uttak/src/ui/components/overstyrUttakForm/OverstyringUttakForm.tsx @@ -0,0 +1,156 @@ +import React, { useContext, useState } from 'react'; +import { FormProvider, useForm, useFieldArray } from 'react-hook-form'; +import dayjs from 'dayjs'; + +import DatePicker from '@navikt/ds-react/esm/date/datepicker/DatePicker'; +import { useRangeDatepicker } from '@navikt/ds-react/esm/date/hooks/useRangeDatepicker'; +import { Alert, Button, Heading, Loader, TextField, Textarea } from '@navikt/ds-react'; +import { Form } from '@navikt/ft-form-hooks'; + +import OverstyrAktivitetListe from './OverstyrAktivitetListe'; +import ContainerContext from '../../context/ContainerContext'; +import { useOverstyrUttak } from '../../context/OverstyrUttakContext'; +import { formaterOverstyring, formaterOverstyringAktiviteter } from '../../../util/overstyringUtils'; +import { OverstyrUttakFormFieldName } from '../../../constants/OverstyrUttakFormFieldName'; +import { OverstyrUttakFormData } from '../../../types'; +import { finnSisteSluttDatoFraUttaksperioder, finnTidligsteStartDatoFraUttaksperioder } from '../../../util/dateUtils'; + +import styles from './OverstyringUttakForm.css'; + +type OwnProps = { + handleAvbrytOverstyringForm: () => void; + overstyring?: OverstyrUttakFormData; + loading: boolean; + setLoading: (loading: boolean) => void; +}; + +const OverstyringUttakForm: React.FC = ({ + handleAvbrytOverstyringForm, + overstyring, + loading, + setLoading, +}) => { + const erNyOverstyring = overstyring === undefined; + const { handleOverstyringAksjonspunkt, uttaksperioder } = useContext(ContainerContext); + const { lasterAktiviteter, hentAktuelleAktiviteter } = useOverstyrUttak(); + const [deaktiverLeggTil, setDeaktiverLeggTil] = useState(true); + + const formMethods = useForm({ + reValidateMode: 'onSubmit', + defaultValues: overstyring || { + [OverstyrUttakFormFieldName.FOM]: undefined, + [OverstyrUttakFormFieldName.TOM]: undefined, + [OverstyrUttakFormFieldName.UTTAKSGRAD]: 0, + [OverstyrUttakFormFieldName.BEGRUNNELSE]: '', + [OverstyrUttakFormFieldName.UTBETALINGSGRADER]: [], + }, + mode: 'onChange', + }); + + const tidligesteStartDato = finnTidligsteStartDatoFraUttaksperioder(uttaksperioder); + const { control, setValue, watch, register } = formMethods; + + const { fields, replace: replaceAktiviteter } = useFieldArray({ + control, + name: OverstyrUttakFormFieldName.UTBETALINGSGRADER, + }); + + const { datepickerProps, toInputProps, fromInputProps } = useRangeDatepicker({ + onRangeChange: values => { + setValue(OverstyrUttakFormFieldName.FOM, values.from); + setValue(OverstyrUttakFormFieldName.TOM, values.to); + }, + defaultSelected: erNyOverstyring + ? undefined + : { from: dayjs(overstyring.fom).toDate(), to: dayjs(overstyring.tom).toDate() }, + defaultMonth: dayjs(tidligesteStartDato).toDate(), + }); + + const watchFraDato = watch(OverstyrUttakFormFieldName.FOM, undefined); + const watchTilDato = watch(OverstyrUttakFormFieldName.TOM, undefined); + + React.useEffect(() => { + const handleHentAktuelleAktiviteter = async (fom: Date, tom: Date) => { + const aktiviteter = await hentAktuelleAktiviteter(fom, tom); + replaceAktiviteter(formaterOverstyringAktiviteter(aktiviteter)); + }; + + if (watchFraDato && watchTilDato) { + handleHentAktuelleAktiviteter(watchFraDato, watchTilDato); + setDeaktiverLeggTil(false); + } + }, [watchFraDato, watchTilDato]); + + const disabledDays = [ + date => dayjs(date).isBefore(tidligesteStartDato), + date => dayjs(date).isAfter(finnSisteSluttDatoFraUttaksperioder(uttaksperioder)), + ]; + + const handleSubmit = (values: OverstyrUttakFormData) => { + setLoading(true); + handleOverstyringAksjonspunkt({ + periode: {}, // MÅ legge til denne inntill videre, hack, for å komme rundt validering i backen + lagreEllerOppdater: [{ erVilkarOk: false, ...formaterOverstyring(values) }], + slett: [], + }); + }; + + return ( +
+ Overstyr periode + +
+
+ +
+ + +
+
+ +
+ + {lasterAktiviteter !== null && ( +
+ {lasterAktiviteter && } + {!lasterAktiviteter && ( + <> + {fields.length > 0 && } + {fields.length === 0 && <>Kunne ikke finne noen aktiviteter i den angitte perioden} + + )} +
+ )} + +
+