diff --git a/apps/endringsmelding-pleiepenger/e2e/playwright/tests/ikke-tilgang/ikke-tilgang-melding.spec.ts b/apps/endringsmelding-pleiepenger/e2e/playwright/tests/ikke-tilgang/ikke-tilgang-melding.spec.ts index 0fa1f0c999..73dd801c87 100644 --- a/apps/endringsmelding-pleiepenger/e2e/playwright/tests/ikke-tilgang/ikke-tilgang-melding.spec.ts +++ b/apps/endringsmelding-pleiepenger/e2e/playwright/tests/ikke-tilgang/ikke-tilgang-melding.spec.ts @@ -34,3 +34,14 @@ test('Er selvstendig næringsdrivende', async ({ page }) => { await expect(page.getByText('Hei Nora')).toBeVisible(); await expect(page.getByTestId('erSN')).toBeVisible(); }); + +test('Har en arbeidsgiver med to ansettelsesforhold som slutter og starter samme uke med opphold', async ({ page }) => { + await routeUtils.resumeFromRoute( + page, + SøknadRoutes.VELKOMMEN, + 'en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold', + ); + await expect(page).toHaveTitle('Ingen tilgang - Endringsmelding for pleiepenger sykt barn'); + await expect(page.getByText('Hei Nora')).toBeVisible(); + await expect(page.getByTestId('enArbeidsgiverToAnsettelserSammeUkeMedOpphold')).toBeVisible(); +}); diff --git a/apps/endringsmelding-pleiepenger/e2e/playwright/tests/utfylling/ny-arbeidsgiver.spec.ts b/apps/endringsmelding-pleiepenger/e2e/playwright/tests/utfylling/ny-arbeidsgiver.spec.ts index 616dbe610f..2f677d5fcd 100644 --- a/apps/endringsmelding-pleiepenger/e2e/playwright/tests/utfylling/ny-arbeidsgiver.spec.ts +++ b/apps/endringsmelding-pleiepenger/e2e/playwright/tests/utfylling/ny-arbeidsgiver.spec.ts @@ -40,7 +40,8 @@ test('test', async ({ page }) => { await page.getByTestId('timer-verdi').click(); await page.getByTestId('timer-verdi').fill('5'); await page.getByRole('button', { name: 'Ok' }).click(); - await page.getByLabel('Endre uke 5 (01.02.2023 - 05.').click(); + await page.getByLabel('Endre uke 6 (06.02').first().click(); + await page.getByTestId('toggle-timer').click(); await page.getByTestId('timer-verdi').click(); await page.getByTestId('timer-verdi').fill('5'); await page.getByRole('button', { name: 'Ok' }).click(); diff --git a/apps/endringsmelding-pleiepenger/package.json b/apps/endringsmelding-pleiepenger/package.json index d9d394c088..e6f29b7957 100644 --- a/apps/endringsmelding-pleiepenger/package.json +++ b/apps/endringsmelding-pleiepenger/package.json @@ -5,7 +5,7 @@ "license": "MIT", "name": "@navikt/endringsmelding-pleiepenger", "repository": "https://github.com/navikt/sif-brukerdialog", - "version": "2.37.1", + "version": "2.4.0", "private": true, "dependencies": { "@navikt/ds-css": "7.10.0", diff --git a/apps/endringsmelding-pleiepenger/src/app/api/__tests__/fetchInitialData.test.ts b/apps/endringsmelding-pleiepenger/src/app/api/__tests__/fetchInitialData.test.ts index 95474f10c9..c01d3c8f47 100644 --- a/apps/endringsmelding-pleiepenger/src/app/api/__tests__/fetchInitialData.test.ts +++ b/apps/endringsmelding-pleiepenger/src/app/api/__tests__/fetchInitialData.test.ts @@ -1,25 +1,82 @@ -import { ISODateRangeToDateRange, dateToISODate } from '@navikt/sif-common-utils'; -import { getPeriodeForArbeidsgiverOppslag } from '../../utils/initialDataUtils'; +import { dateToISODate, ISODateRangeToDateRange, ISODateToDate } from '@navikt/sif-common-utils'; +import { ArbeidsgiverMedAnsettelseperioder } from '../../types'; +import { + getArbeidsgivereFromArbeidsgiverOrganisasjoner, + getPeriodeForArbeidsgiverOppslag, +} from '../../utils/initialDataUtils'; +import { AARegArbeidsgiverOrganisasjon } from '../endpoints/arbeidsgivereEndpoint'; -describe('getPeriodeForArbeidsgiverOppslag', () => { - const endringsperiode = ISODateRangeToDateRange('2022-05-01/2022-10-01'); +describe('initialDataUtils', () => { + describe('getPeriodeForArbeidsgiverOppslag', () => { + const endringsperiode = ISODateRangeToDateRange('2022-05-01/2022-10-01'); - it('returnerer minste dateRange ut fra maks endringsperiode og samletSøknadsperiode', () => { - const samletSøknadsperiode = ISODateRangeToDateRange('2022-06-01/2022-09-01'); - const result = getPeriodeForArbeidsgiverOppslag(samletSøknadsperiode, endringsperiode); - expect(result).toBeDefined(); - if (result) { - expect(dateToISODate(result.from)).toEqual('2022-06-01'); - expect(dateToISODate(result.to)).toEqual('2022-09-01'); - } + it('returnerer minste dateRange ut fra maks endringsperiode og samletSøknadsperiode', () => { + const samletSøknadsperiode = ISODateRangeToDateRange('2022-06-01/2022-09-01'); + const result = getPeriodeForArbeidsgiverOppslag(samletSøknadsperiode, endringsperiode); + expect(result).toBeDefined(); + if (result) { + expect(dateToISODate(result.from)).toEqual('2022-06-01'); + expect(dateToISODate(result.to)).toEqual('2022-09-01'); + } + }); + it('returnerer endringsperiode hvis samletSøknadsperiode går utover endringsperiode', () => { + const samletSøknadsperiode = ISODateRangeToDateRange('2021-01-01/2023-01-01'); + const result = getPeriodeForArbeidsgiverOppslag(samletSøknadsperiode, endringsperiode); + expect(result).toBeDefined(); + if (result) { + expect(dateToISODate(result.from)).toEqual('2022-05-01'); + expect(dateToISODate(result.to)).toEqual('2022-10-01'); + } + }); }); - it('returnerer endringsperiode hvis samletSøknadsperiode går utover endringsperiode', () => { - const samletSøknadsperiode = ISODateRangeToDateRange('2021-01-01/2023-01-01'); - const result = getPeriodeForArbeidsgiverOppslag(samletSøknadsperiode, endringsperiode); - expect(result).toBeDefined(); - if (result) { - expect(dateToISODate(result.from)).toEqual('2022-05-01'); - expect(dateToISODate(result.to)).toEqual('2022-10-01'); - } + + describe('getArbeidsgivereFromArbeidsgiverOrganisasjoner', () => { + it('oppretter ansettelsesperiode riktig når bruker har ett ansettelsesforhold hos én arbeidsgiver', () => { + const organisasjoner: AARegArbeidsgiverOrganisasjon[] = [ + { + navn: 'a', + organisasjonsnummer: '123', + ansattFom: '2022-01-01', + ansattTom: '2022-02-01', + }, + ]; + + const expectedResult: ArbeidsgiverMedAnsettelseperioder[] = [ + { + key: 'a_123', + navn: 'a', + organisasjonsnummer: '123', + ansettelsesperioder: [{ from: ISODateToDate('2022-01-01'), to: ISODateToDate('2022-02-01') }], + }, + ]; + expect(getArbeidsgivereFromArbeidsgiverOrganisasjoner(organisasjoner)).toEqual(expectedResult); + }); + it('oppretter ansettelsesperioder riktig når bruker har to ansettelsesforhold hos samme arbeidsgiver', () => { + const organisasjoner: AARegArbeidsgiverOrganisasjon[] = [ + { + navn: 'a', + organisasjonsnummer: '123', + ansattFom: '2022-01-01', + ansattTom: '2022-02-01', + }, + { + navn: 'a', + organisasjonsnummer: '123', + ansattFom: '2022-02-15', + }, + ]; + const expectedResult: ArbeidsgiverMedAnsettelseperioder[] = [ + { + key: 'a_123', + navn: 'a', + organisasjonsnummer: '123', + ansettelsesperioder: [ + { from: ISODateToDate('2022-01-01'), to: ISODateToDate('2022-02-01') }, + { from: ISODateToDate('2022-02-15') }, + ], + }, + ]; + expect(getArbeidsgivereFromArbeidsgiverOrganisasjoner(organisasjoner)).toEqual(expectedResult); + }); }); }); diff --git a/apps/endringsmelding-pleiepenger/src/app/api/endpoints/arbeidsgivereEndpoint.ts b/apps/endringsmelding-pleiepenger/src/app/api/endpoints/arbeidsgivereEndpoint.ts index 2833c6dc48..2b3cb39dbb 100644 --- a/apps/endringsmelding-pleiepenger/src/app/api/endpoints/arbeidsgivereEndpoint.ts +++ b/apps/endringsmelding-pleiepenger/src/app/api/endpoints/arbeidsgivereEndpoint.ts @@ -1,37 +1,29 @@ -import { DateRange, dateToISODate, ISODate, ISODateToDate } from '@navikt/sif-common-utils'; -import { Arbeidsgiver } from '@types'; +import { DateRange, dateToISODate, ISODate } from '@navikt/sif-common-utils'; +import { ArbeidsgiverMedAnsettelseperioder } from '@types'; +import { getArbeidsgivereFromArbeidsgiverOrganisasjoner } from '../../utils/initialDataUtils'; import api from '../api'; import { ApiEndpointPsb } from './'; -import { getArbeidsgiverKey } from '../../utils/arbeidsgiverUtils'; -type AAregArbeidsgiver = { - organisasjoner?: Array<{ - organisasjonsnummer: string; - navn: string; - ansattFom?: ISODate; - ansattTom?: ISODate; - }>; +export type AAregArbeidsgiver = { + organisasjoner?: AARegArbeidsgiverOrganisasjon[]; +}; + +export type AARegArbeidsgiverOrganisasjon = { + organisasjonsnummer: string; + navn: string; + ansattFom?: ISODate; + ansattTom?: ISODate; }; export const arbeidsgivereEndpoint = { - fetch: async (periode: DateRange): Promise => { + fetch: async (periode: DateRange): Promise => { try { const { from, to } = periode; const { data } = await api.psb.get( ApiEndpointPsb.arbeidsgiver, - `ytelse=endringsmelding-pleiepenger&fra_og_med=${dateToISODate(from)}&til_og_med=${dateToISODate(to)}`, + `ytelse=endringsmelding-pleiepenger&fra_og_med=${dateToISODate(from)}&til_og_med=${dateToISODate(to)}&inkluderAlleAnsettelsesperioder=true`, ); - const aaArbeidsgivere: Arbeidsgiver[] = []; - (data.organisasjoner || []).forEach((a) => { - aaArbeidsgivere.push({ - key: getArbeidsgiverKey(a.organisasjonsnummer), - organisasjonsnummer: a.organisasjonsnummer, - navn: a.navn, - ansattFom: a.ansattFom ? ISODateToDate(a.ansattFom) : undefined, - ansattTom: a.ansattTom ? ISODateToDate(a.ansattTom) : undefined, - }); - }); - return Promise.resolve(aaArbeidsgivere); + return Promise.resolve(getArbeidsgivereFromArbeidsgiverOrganisasjoner(data.organisasjoner || [])); } catch (error) { return Promise.reject(error); } diff --git a/apps/endringsmelding-pleiepenger/src/app/api/fetchInitialData.ts b/apps/endringsmelding-pleiepenger/src/app/api/fetchInitialData.ts index cdbf370e65..acdb60e1e5 100644 --- a/apps/endringsmelding-pleiepenger/src/app/api/fetchInitialData.ts +++ b/apps/endringsmelding-pleiepenger/src/app/api/fetchInitialData.ts @@ -2,7 +2,7 @@ import { isForbidden, isUnauthorized } from '@navikt/sif-common-core-ds/src/util import { getMaybeEnv } from '@navikt/sif-common-env'; import { DateRange, dateRangeUtils } from '@navikt/sif-common-utils'; import { - Arbeidsgiver, + ArbeidsgiverMedAnsettelseperioder, IngenTilgangÅrsak, isK9Sak, isUgyldigK9SakFormat, @@ -32,7 +32,7 @@ export const fetchInitialData = async ( søker: Søker; k9saker: K9Sak[]; antallSakerFørEndringsperiode: number; - arbeidsgivere: Arbeidsgiver[]; + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[]; lagretSøknadState?: SøknadStatePersistence; }> => { const [søker, k9sakerResult] = await Promise.all([søkerEndpoint.fetch(), sakerEndpoint.fetch()]); @@ -53,7 +53,7 @@ export const fetchInitialData = async ( try { let k9saker: K9Sak[]; - let arbeidsgivere: Arbeidsgiver[]; + let arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[]; const sakerInnenforEndringsperiode = k9sakerResult.k9Saker; const sakerFørEndringsperiode = k9sakerResult.eldreSaker; @@ -76,7 +76,7 @@ export const fetchInitialData = async ( }) .then((result) => { arbeidsgivere = result; - return kontrollerTilgang(k9saker, tillattEndringsperiode); + return kontrollerTilgang(k9saker, tillattEndringsperiode, arbeidsgivere); }) .then(() => hentOgKontrollerLagretSøknadState(søker, k9saker)) .then((lagretSøknadState) => { @@ -152,8 +152,13 @@ const kontrollerSaker = ( return Promise.resolve({ k9saker, dateRangeAlleSaker }); }; -const kontrollerTilgang = async (k9saker: K9Sak[], tillattEndringsperiode: DateRange): Promise => { - const resultat = tilgangskontroll(k9saker, tillattEndringsperiode); +const kontrollerTilgang = async ( + k9saker: K9Sak[], + tillattEndringsperiode: DateRange, + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], +): Promise => { + const resultat = tilgangskontroll(k9saker, tillattEndringsperiode, arbeidsgivere); + if (resultat.kanBrukeSøknad) { return Promise.resolve(true); } diff --git a/apps/endringsmelding-pleiepenger/src/app/components/arbeidsaktivitet-block/AnsettelsesperioderInfo.tsx b/apps/endringsmelding-pleiepenger/src/app/components/arbeidsaktivitet-block/AnsettelsesperioderInfo.tsx new file mode 100644 index 0000000000..2b93bb2288 --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/app/components/arbeidsaktivitet-block/AnsettelsesperioderInfo.tsx @@ -0,0 +1,65 @@ +import { dateFormatter, MaybeDateRange, sortMaybeDateRange } from '@navikt/sif-common-utils'; +import { AppText, useAppIntl } from '../../i18n'; +import { Box, List } from '@navikt/ds-react'; +import ExpandableInfo from '@navikt/sif-common-core-ds/src/components/expandable-info/ExpandableInfo'; + +interface Props { + ansettelsesperioder: MaybeDateRange[]; +} + +const Ansettelsesperiode = ({ periode }: { periode: MaybeDateRange }) => { + if (periode.from === undefined && periode.to === undefined) { + return null; + } + if (periode.from && periode.to) { + return ( + + ); + } + if (periode.from) { + return ( + + ); + } + if (periode.to) { + return ( + + ); + } + return null; +}; + +const AnsettelsesperioderInfo = ({ ansettelsesperioder }: Props) => { + const { text } = useAppIntl(); + return ansettelsesperioder.length === 1 ? ( + + ) : ( + + + + {ansettelsesperioder + .sort(sortMaybeDateRange) + .reverse() + .map((periode, index) => { + return ( + + + + ); + })} + + + + ); +}; + +export default AnsettelsesperioderInfo; diff --git a/apps/endringsmelding-pleiepenger/src/app/components/arbeidsaktivitet-block/ArbeidsaktivitetBlock.tsx b/apps/endringsmelding-pleiepenger/src/app/components/arbeidsaktivitet-block/ArbeidsaktivitetBlock.tsx index bd7888cc93..b9ad6fd155 100644 --- a/apps/endringsmelding-pleiepenger/src/app/components/arbeidsaktivitet-block/ArbeidsaktivitetBlock.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/components/arbeidsaktivitet-block/ArbeidsaktivitetBlock.tsx @@ -1,12 +1,12 @@ import { ExpansionCard, Panel } from '@navikt/ds-react'; import Block from '@navikt/sif-common-core-ds/src/atoms/block/Block'; -import { ArbeidsaktivitetType, Arbeidsgiver } from '@types'; +import { ArbeidsaktivitetType, ArbeidsgiverMedAnsettelseperioder } from '@types'; import ArbeidsaktivitetBlockHeader from './ArbeidsaktivitetBlockHeader'; interface Props { navn: string; type: ArbeidsaktivitetType; - arbeidsgiver?: Arbeidsgiver; + arbeidsgiver?: ArbeidsgiverMedAnsettelseperioder; endret?: { tekst: string }; erUkjent?: boolean; renderAsExpansionCard?: boolean; diff --git a/apps/endringsmelding-pleiepenger/src/app/components/arbeidsaktivitet-block/ArbeidsaktivitetBlockHeader.tsx b/apps/endringsmelding-pleiepenger/src/app/components/arbeidsaktivitet-block/ArbeidsaktivitetBlockHeader.tsx index f1acdf6ead..68e481ecf8 100644 --- a/apps/endringsmelding-pleiepenger/src/app/components/arbeidsaktivitet-block/ArbeidsaktivitetBlockHeader.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/components/arbeidsaktivitet-block/ArbeidsaktivitetBlockHeader.tsx @@ -1,17 +1,17 @@ -import { BodyLong, Heading } from '@navikt/ds-react'; +import { BodyLong, Box, Heading } from '@navikt/ds-react'; import React from 'react'; import { Office1 } from '@navikt/ds-icons'; import Block from '@navikt/sif-common-core-ds/src/atoms/block/Block'; -import { dateFormatter } from '@navikt/sif-common-utils'; -import { ArbeidsaktivitetType, Arbeidsgiver } from '@types'; +import { ArbeidsaktivitetType, ArbeidsgiverMedAnsettelseperioder } from '@types'; import { AppText } from '../../i18n'; import EndretTag from '../tags/EndretTag'; import NyTag from '../tags/NyTag'; import './arbeidsaktivitetBlockHeader.scss'; +import AnsettelsesperioderInfo from './AnsettelsesperioderInfo'; interface Props { navn: string; - arbeidsgiver?: Arbeidsgiver; + arbeidsgiver?: ArbeidsgiverMedAnsettelseperioder; type: ArbeidsaktivitetType; erUkjentAktivitet?: boolean; endret?: { @@ -38,24 +38,13 @@ const ArbeidsaktivitetBlockHeader: React.FunctionComponent = ({ {type === ArbeidsaktivitetType.arbeidstaker && arbeidsgiver !== undefined ? ( -
+ -
- {arbeidsgiver.ansattFom && ( - - )} - {arbeidsgiver.ansattTom && ( - - )} + +
) : undefined} {(endret || erUkjentAktivitet) && ( diff --git a/apps/endringsmelding-pleiepenger/src/app/components/tags/KortUkeTag.tsx b/apps/endringsmelding-pleiepenger/src/app/components/tags/KortUkeTag.tsx index 5da7782372..d41e34b2fc 100644 --- a/apps/endringsmelding-pleiepenger/src/app/components/tags/KortUkeTag.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/components/tags/KortUkeTag.tsx @@ -1,18 +1,27 @@ -import { Tag, TagProps } from '@navikt/ds-react'; +import { Tag, TagProps, Tooltip } from '@navikt/ds-react'; import React from 'react'; import { useAppIntl } from '../../i18n'; interface Props extends Omit { children?: React.ReactNode; + tooltip?: string; } -const KortUkeTag: React.FunctionComponent = ({ children, ...rest }) => { +const KortUkeTag: React.FunctionComponent = ({ children, tooltip, ...rest }) => { const { text } = useAppIntl(); - return ( + + const tag = ( {children || text('tags.kortUke')} ); + return tooltip ? ( + <> + {tag} + + ) : ( + tag + ); }; export default KortUkeTag; diff --git a/apps/endringsmelding-pleiepenger/src/app/dev/scenarioer.ts b/apps/endringsmelding-pleiepenger/src/app/dev/scenarioer.ts index 4fc96bd1c9..6212ec3757 100644 --- a/apps/endringsmelding-pleiepenger/src/app/dev/scenarioer.ts +++ b/apps/endringsmelding-pleiepenger/src/app/dev/scenarioer.ts @@ -4,13 +4,15 @@ export type ScenarioType = | 'arbeidsgiver-og-frilanser' | 'arbeidsgivere-og-frilanser' | 'arbeidsgiver-ikke-i-sak' - | 'flere-saker-kun-en-aktiv' + | 'arbeidsgiver-ikke-i-sak-flere-ansettelser' | 'debug' | 'selvstendig-næringsdrivende' | 'flere-saker' | 'ingen-sak' | 'arbeidsaktivitet-uten-arbeidsgiver' - | 'ugyldig-k9-format'; + | 'ugyldig-k9-format' + | 'en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold' + | 'en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold'; export interface Scenario { name: string; @@ -46,9 +48,9 @@ export const scenarioer: Scenario[] = [ harTilgang: true, }, { - name: 'Flere saker, kun én aktiv', - value: 'flere-saker-kun-en-aktiv', - harTilgang: true, + name: 'Arbeidsgiver som ikke er i sak med flere ansettelser', + value: 'arbeidsgiver-ikke-i-sak-flere-ansettelser', + harTilgang: false, }, { name: 'Selvstendig næringsdrivende', @@ -80,6 +82,16 @@ export const scenarioer: Scenario[] = [ value: 'ugyldig-k9-format', harTilgang: false, }, + { + name: 'Arbeidsgiver med to ansettelser samme uke med opphold', + value: 'en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold', + harTilgang: false, + }, + { + name: 'Arbeidsgiver med to ansettelser samme uke uten opphold', + value: 'en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold', + harTilgang: true, + }, ]; export const defaultScenario = scenarioer[0]; diff --git "a/apps/endringsmelding-pleiepenger/src/app/hooks/useS\303\270knadInitialData.ts" "b/apps/endringsmelding-pleiepenger/src/app/hooks/useS\303\270knadInitialData.ts" index 31b1fc9d06..aca2acc62c 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/hooks/useS\303\270knadInitialData.ts" +++ "b/apps/endringsmelding-pleiepenger/src/app/hooks/useS\303\270knadInitialData.ts" @@ -3,7 +3,7 @@ import { getMaybeEnv } from '@navikt/sif-common-env'; import { useEffectOnce } from '@navikt/sif-common-hooks'; import { DateRange } from '@navikt/sif-common-utils'; import { - Arbeidsgiver, + ArbeidsgiverMedAnsettelseperioder, IngenTilgangÅrsak, K9Sak, RequestStatus, @@ -47,7 +47,7 @@ const prepInitialData = ( søker: Søker; k9saker: K9Sak[]; antallSakerFørEndringsperiode: number; - arbeidsgivere: Arbeidsgiver[]; + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[]; lagretSøknadState?: SøknadStatePersistence; }, tillattEndringsperiode: DateRange, diff --git "a/apps/endringsmelding-pleiepenger/src/app/hooks/useS\303\270knadsdataStatus.ts" "b/apps/endringsmelding-pleiepenger/src/app/hooks/useS\303\270knadsdataStatus.ts" index f965424539..461e6cc7f9 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/hooks/useS\303\270knadsdataStatus.ts" +++ "b/apps/endringsmelding-pleiepenger/src/app/hooks/useS\303\270knadsdataStatus.ts" @@ -3,7 +3,7 @@ import isEqual from 'react-fast-compare'; import { useSøknadContext } from '@hooks'; import { useEffectOnce } from '@navikt/sif-common-hooks'; import { SoknadStepsConfig } from '@navikt/sif-common-soknad-ds'; -import { Arbeidsgiver, Søknadsdata } from '@types'; +import { ArbeidsgiverMedAnsettelseperioder, Søknadsdata } from '@types'; import { StepFormValues } from '../søknad/config/StepFormValues'; import { StepId } from '../søknad/config/StepId'; import { useStepFormValuesContext } from '../søknad/context/StepFormValuesContext'; @@ -18,7 +18,7 @@ const getPrecedingSteps = (currentStepIndex: number, stepConfig: SoknadStepsConf const getStepSøknadsdataFromStepFormValues = ( step: StepId, stepFormValues: StepFormValues, - arbeidsgivere: Arbeidsgiver[], + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], ) => { const formValues = stepFormValues[step]; if (!formValues) { @@ -39,7 +39,7 @@ const isStepFormValuesAndStepSøknadsdataValid = ( step: StepId, stepFormValues: StepFormValues, søknadsdata: Søknadsdata, - arbeidsgivere: Arbeidsgiver[], + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], ): boolean => { if (stepFormValues[step]) { const stepSøknadsdata = søknadsdata[step]; @@ -54,7 +54,7 @@ const isStepFormValuesAndStepSøknadsdataValid = ( export const useSøknadsdataStatus = ( stepId: StepId, stepConfig: SoknadStepsConfig, - arbeidsgivere: Arbeidsgiver[], + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], ) => { const [invalidSteps, setInvalidSteps] = useState([]); diff --git a/apps/endringsmelding-pleiepenger/src/app/i18n/appMessages.ts b/apps/endringsmelding-pleiepenger/src/app/i18n/appMessages.ts index cec102af43..167b03f514 100644 --- a/apps/endringsmelding-pleiepenger/src/app/i18n/appMessages.ts +++ b/apps/endringsmelding-pleiepenger/src/app/i18n/appMessages.ts @@ -29,7 +29,9 @@ const nb = { 'arbeidsaktivitetBlockHeader.nyttArbeidsforhold': 'Nytt arbeidsforhold', 'arbeidsaktivitetBlockHeader.arbeidsgiver.orgnummer': 'Organisasjonsnummer: {orgnr}', - 'arbeidsaktivitetBlockHeader.arbeidsgiver.ansattFom': 'Ansatt: {dato}.', + 'arbeidsaktivitetBlockHeader.arbeidsgiver.ansettelsesperioder': 'Ansettelsesperioder', + 'arbeidsaktivitetBlockHeader.arbeidsgiver.ansattFomTom': 'Ansatt: {fom} - {tom}.', + 'arbeidsaktivitetBlockHeader.arbeidsgiver.ansattFom': 'Ansatt: {dato} - pågående', 'arbeidsaktivitetBlockHeader.arbeidsgiver.ansattTom': ' Sluttdato: {dato}.', 'ikkeAnsattMelding.tekst': @@ -87,9 +89,10 @@ const nb = { 'Hvis du har søkt om pleiepenger for en periode frem i tid, eller for barn som ikke er folkeregistrert på deg, kan det ta tid før du kan bruke endringsmeldingen. Du kan foreløpig melde endringer i pleiepengesaken din via {SkrivTilOssLink}.', 'ingenTilgangPage.harIngenSak.3': 'Hvis du ønsker at en av våre veiledere skal undersøke hvorfor du ikke kan bruke endringsmeldingen, kan du kontakte oss på telefon 55 55 33 33.', - 'ingenTilgangPage.harArbeidsgiverUtenArbeidsaktivitet.1': - 'Du kan ikke bruke denne tjenesten. Dette er fordi vi har funnet et arbeidsforhold på deg, som ikke er registrert i pleiepengesaken din. Du må derfor sende en ny søknad, slik at saken og utbetalingene dine blir riktige.', - 'ingenTilgangPage.harArbeidsgiverUtenArbeidsaktivitet.2': + 'ingenTilgangPage.harFlereAnsettelsesforholdHosUkjentArbeidsgiver.1': + 'Du kan ikke bruke denne tjenesten. Dette er fordi vi har funnet arbeidsforhold på deg som ikke er registrert i pleiepengesaken din, og hvor du har flere ansettelsesforhold. Du må derfor sende en ny søknad, slik at saken og utbetalingene dine blir riktige.', + + 'ingenTilgangPage.harFlereAnsettelsesforholdHosUkjentArbeidsgiver.2': 'Hvis du mener at dette ikke stemmer, er det fint at du sender en melding til oss {SkrivTilOssLink}.', 'ingenTilgangPage.harArbeidstidSomSelvstendigNæringsdrivende.1': 'Du kan ikke bruke denne tjenesten per i dag. Dette er fordi tjenesten foreløpig ikke kan ta imot endringer fra selvstendig næringsdrivende. Vi jobber for å få det til, og selvstendig næringsdrivende blir også tilbudt denne tjenesten på et senere tidspunkt.', @@ -99,6 +102,8 @@ const nb = { 'Du kan ikke bruke denne tjenesten fordi siste søknadsperiode gikk ut for mer enn enn {ANTALL_MÅNEDER_TILLATT_FOR_ENDRING} måneder siden. Du kan melde fra om endring i tjenesten {SkrivTilOssLink}, eller sende oss en ny søknad.', 'ingenTilgangPage.utenforEndringsperiode.2': 'Hvis du mener at dette ikke stemmer, er det fint at du sender en melding til oss {SkrivTilOssLink}.', + 'ingenTilgangPage.slutterOgStarterInneforSammeUke': + 'Vi ser at du har to ansettelsesforhold hos samme arbeidsgiver som slutter og starter samme uke. Da kan du desverre ikke bruke denne løsningen for å melde fra om endringer.', 'kvitteringPage.pageTitle': 'Endringsmelding er mottatt', 'kvitteringPage.title': 'Melding om endring er lagt til saken din', diff --git a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/ArbeidstidUker.tsx b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/ArbeidstidUker.tsx index 5c8785768c..feec86b2bb 100644 --- a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/ArbeidstidUker.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/ArbeidstidUker.tsx @@ -35,7 +35,6 @@ const ArbeidstidUker: React.FunctionComponent = ({ arbeidstidKolonneTittel, triggerResetValgCounter, visEndringSomOpprinnelig, - onEndreUker, }) => { const { text, intl } = useAppIntl(); diff --git a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/arbeidstidUker.scss b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/arbeidstidUker.scss index 06372648e8..9512a5dd9a 100644 --- a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/arbeidstidUker.scss +++ b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/arbeidstidUker.scss @@ -21,7 +21,6 @@ } &__info { font-size: 1.4rem; - white-space: nowrap; svg { margin: 0 0.25rem; } diff --git a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeInfo.tsx b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeInfo.tsx index 65e7c44da2..d860efa8dc 100644 --- a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeInfo.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeInfo.tsx @@ -33,7 +33,11 @@ const ArbeidstidUkeInfo: React.FunctionComponent = ({ uke, medLabels = fa const { endretProsent } = uke.endret; return ( <> - {medLabels && Arbeidstimer:} + {medLabels && ( + + Arbeidstimer: + + )} diff --git a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeInfoListe.tsx b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeInfoListe.tsx index 356866027b..4db0e0d012 100644 --- a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeInfoListe.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeInfoListe.tsx @@ -74,12 +74,12 @@ const ArbeidstidUkeInfoListe: React.FunctionComponent = ({ uke, visEndrin )} {erEndret && ( -
+ Endret fra {uke.opprinnelig.faktisk && } -
+ )}

diff --git a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeListe.tsx b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeListe.tsx index 28e654f6f7..c2fa3e32d8 100644 --- a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeListe.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/ArbeidstidUkeListe.tsx @@ -1,7 +1,7 @@ -import { BodyShort, Heading } from '@navikt/ds-react'; +import { BodyShort, Box, Heading, HStack } from '@navikt/ds-react'; import React, { ReactElement } from 'react'; import Block from '@navikt/sif-common-core-ds/src/atoms/block/Block'; -import { dateFormatter } from '@navikt/sif-common-utils'; +import { getDateRangeText } from '@navikt/sif-common-utils'; import dayjs from 'dayjs'; import { SelectableListType } from '../../../hooks/useSelectableList'; import { AppText } from '../../../i18n'; @@ -9,6 +9,8 @@ import { ArbeidstidUkerItem } from '../types/ArbeidstidUkerItem'; import ArbeidstidUkeInfoListe from './ArbeidstidUkeInfoListe'; import UkeTags from './UkeTags'; import VelgArbeidsukeItem from './VelgArbeidsukeItem'; +import { useIntl } from 'react-intl'; +import { getKortUkeTooltipText } from './UkeInfoTooltip'; interface Props { uker: ArbeidstidUkerItem[]; @@ -23,6 +25,7 @@ const ArbeidstidUkeListe: React.FunctionComponent = ({ selectableList, renderEditButton, }) => { + const intl = useIntl(); const { isItemSelected, setItemSelected, @@ -52,10 +55,12 @@ const ArbeidstidUkeListe: React.FunctionComponent = ({ - {dateFormatter.compact(uke.periode.from)} - {` `} - {dateFormatter.compact(uke.periode.to)} + + {getDateRangeText(uke.periode, intl.locale)} + = ({
-
- {dateFormatter.compact(uke.periode.from)} - {` `} - {dateFormatter.compact(uke.periode.to)} -
+
{getDateRangeText(uke.periode, intl.locale)}
@@ -147,6 +144,7 @@ const ArbeidstidUkeTabell: React.FunctionComponent = ({ {(uke.harFeriedager || uke.harFjernetFeriedager || uke.erKortUke) && ( = ({ )} - {uke.erKortUke && } + {uke.erKortUke && }
diff --git a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/KortUkeInfo.tsx b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/KortUkeInfo.tsx new file mode 100644 index 0000000000..45da893352 --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/KortUkeInfo.tsx @@ -0,0 +1,16 @@ +import { Box } from '@navikt/ds-react'; +import { getDagerTekst } from '../../../utils'; +import { Arbeidsuke } from '../../../types'; +import { AppText } from '../../../i18n'; + +interface Props { + arbeidsuke: Arbeidsuke; +} + +const KortUkeInfo = ({ arbeidsuke }: Props) => ( + + + +); + +export default KortUkeInfo; diff --git a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/UkeInfo.tsx b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/UkeInfoTooltip.tsx similarity index 52% rename from apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/UkeInfo.tsx rename to apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/UkeInfoTooltip.tsx index 73233391e2..2621fdc34c 100644 --- a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/UkeInfo.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/UkeInfoTooltip.tsx @@ -8,14 +8,19 @@ interface Props { uke: ArbeidstidUkerItem; } -const UkeInfoIkon: React.FunctionComponent = ({ uke }) => { - return ( - - - - - - ); +export const getKortUkeTooltipText = (periode: DateRange): string => `Kort uke - ${getDagerPeriode(periode, false)}`; + +const UkeInfoTooltip: React.FunctionComponent = ({ uke }) => { + const { erKortUke } = uke; + if (erKortUke) { + return ( + + + + + + ); + } }; const getDagerPeriode = ({ from, to }: DateRange, visDato = true): string => { @@ -27,4 +32,4 @@ const getDagerPeriode = ({ from, to }: DateRange, visDato = true): string => { return `${fra} til ${til}`; }; -export default UkeInfoIkon; +export default UkeInfoTooltip; diff --git a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/UkeTags.tsx b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/UkeTags.tsx index 1a0c285879..a88ea04ee1 100644 --- a/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/UkeTags.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/modules/arbeidstid-uker/components/UkeTags.tsx @@ -5,16 +5,17 @@ import KortUkeTag from '../../../components/tags/KortUkeTag'; import TagsContainer from '../../../components/tags/tags-container/TagsContainer'; interface Props { + kortUkeTooltip?: string; erKortUke?: boolean; dagerMedFerie: Date[] | undefined; dagerMedFjernetFerie?: Date[] | undefined; visDagNavn?: boolean; } -const UkeTags = ({ dagerMedFerie = [], dagerMedFjernetFerie = [], visDagNavn, erKortUke }: Props) => { +const UkeTags = ({ dagerMedFerie = [], dagerMedFjernetFerie = [], visDagNavn, erKortUke, kortUkeTooltip }: Props) => { const tags: React.ReactNode[] = []; if (erKortUke) { - tags.push(); + tags.push(); } if (dagerMedFerie?.length > 0) { tags.push( @@ -39,7 +40,7 @@ const UkeTags = ({ dagerMedFerie = [], dagerMedFjernetFerie = [], visDagNavn, er return ( <> - {erKortUke && } + {erKortUke && } {dagerMedFerie?.length > 0 && ( {visDagNavn diff --git a/apps/endringsmelding-pleiepenger/src/app/modules/endre-arbeidstid-form/EndreArbeidstidForm.tsx b/apps/endringsmelding-pleiepenger/src/app/modules/endre-arbeidstid-form/EndreArbeidstidForm.tsx index b457e8cc9b..b3353fac70 100644 --- a/apps/endringsmelding-pleiepenger/src/app/modules/endre-arbeidstid-form/EndreArbeidstidForm.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/modules/endre-arbeidstid-form/EndreArbeidstidForm.tsx @@ -21,6 +21,7 @@ import { import dayjs from 'dayjs'; import { AppIntlShape, AppText, useAppIntl } from '../../i18n'; import actionsCreator from '../../søknad/context/action/actionCreator'; +import KortUkeInfo from '../arbeidstid-uker/components/KortUkeInfo'; import UkeTags from '../arbeidstid-uker/components/UkeTags'; import { getArbeidstidSpørsmålDescription, getArbeidsukerPerÅr } from './endreArbeidstidFormUtils'; import { getEndreArbeidstidIntlValues } from './endreArbeidstidIntlValues'; @@ -155,7 +156,6 @@ const EndreArbeidstidForm: React.FunctionComponent = (
- {dagerMedFjernetFerie && dagerMedFjernetFerie.length > 0 && ( @@ -198,16 +198,11 @@ const EndreArbeidstidForm: React.FunctionComponent = ( - {gjelderKortUke && ( + {gjelderKortUke ? ( - - - + - )} + ) : null} {timerEllerProsent === TimerEllerProsent.PROSENT && ( diff --git a/apps/endringsmelding-pleiepenger/src/app/pages/ingen-tilgang/IngenTilgangPage.stories.tsx b/apps/endringsmelding-pleiepenger/src/app/pages/ingen-tilgang/IngenTilgangPage.stories.tsx index 01f0a2f200..97eb66b97b 100644 --- a/apps/endringsmelding-pleiepenger/src/app/pages/ingen-tilgang/IngenTilgangPage.stories.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/pages/ingen-tilgang/IngenTilgangPage.stories.tsx @@ -21,10 +21,10 @@ export default meta; type Story = StoryObj; export const Default: Story = { - name: 'harArbeidsgiverUtenArbeidsaktivitet', + name: 'harFlereAnsettelsesforholdHosUkjentArbeidsgiver', args: { søker, - årsak: [IngenTilgangÅrsak.harArbeidsgiverUtenArbeidsaktivitet], + årsak: [IngenTilgangÅrsak.harFlereAnsettelsesforholdHosUkjentArbeidsgiver], }, }; @@ -52,6 +52,14 @@ export const IngenSak: Story = { }, }; +export const EnArbeidsgiverToAnsettelserSammeUkeMedOpphold: Story = { + name: 'enArbeidsgiverToAnsettelserSammeUkeMedOpphold', + args: { + søker, + årsak: [IngenTilgangÅrsak.enArbeidsgiverToAnsettelserSammeUkeMedOpphold], + }, +}; + export const MerEnnEnSak: Story = { name: 'harMerEnnEnSak', args: { diff --git a/apps/endringsmelding-pleiepenger/src/app/pages/ingen-tilgang/IngenTilgangPage.tsx b/apps/endringsmelding-pleiepenger/src/app/pages/ingen-tilgang/IngenTilgangPage.tsx index 1790f82dab..7056a6c826 100644 --- a/apps/endringsmelding-pleiepenger/src/app/pages/ingen-tilgang/IngenTilgangPage.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/pages/ingen-tilgang/IngenTilgangPage.tsx @@ -23,7 +23,7 @@ const getÅrsakMelding = (årsak: IngenTilgangÅrsak) => { , + SkrivTilOssLink: , }} /> ); @@ -48,7 +48,7 @@ const getÅrsakMelding = (årsak: IngenTilgangÅrsak) => {

}} + values={{ SkrivTilOssLink: }} />

@@ -56,16 +56,16 @@ const getÅrsakMelding = (årsak: IngenTilgangÅrsak) => {

); - case IngenTilgangÅrsak.harArbeidsgiverUtenArbeidsaktivitet: + case IngenTilgangÅrsak.harFlereAnsettelsesforholdHosUkjentArbeidsgiver: return (

- +

}} + id="ingenTilgangPage.harFlereAnsettelsesforholdHosUkjentArbeidsgiver.2" + values={{ SkrivTilOssLink: }} />

@@ -88,19 +88,31 @@ const getÅrsakMelding = (årsak: IngenTilgangÅrsak) => {

{skrivTilOssGenerell}

); + case IngenTilgangÅrsak.enArbeidsgiverToAnsettelserSammeUkeMedOpphold: + return ( + +

+ +

+

{skrivTilOssGenerell}

+
+ ); case IngenTilgangÅrsak.søknadsperioderUtenforTillattEndringsperiode: return (

}} + values={{ + ANTALL_MÅNEDER_TILLATT_FOR_ENDRING, + SkrivTilOssLink: , + }} />

}} + values={{ SkrivTilOssLink: }} />

diff --git a/apps/endringsmelding-pleiepenger/src/app/pages/kvittering/KvitteringPage.tsx b/apps/endringsmelding-pleiepenger/src/app/pages/kvittering/KvitteringPage.tsx index 90644d12a3..0ddfaabfe6 100644 --- a/apps/endringsmelding-pleiepenger/src/app/pages/kvittering/KvitteringPage.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/pages/kvittering/KvitteringPage.tsx @@ -23,7 +23,11 @@ const KvitteringPage = ({ onUnmount }: Props) => { {children}, + Lenke: (children) => ( + + {children} + + ), }} />
diff --git a/apps/endringsmelding-pleiepenger/src/app/pages/velkommen/BehandlingAvPersonopplysningerContent.tsx b/apps/endringsmelding-pleiepenger/src/app/pages/velkommen/BehandlingAvPersonopplysningerContent.tsx index 4ae61fca85..49c8ecee24 100644 --- a/apps/endringsmelding-pleiepenger/src/app/pages/velkommen/BehandlingAvPersonopplysningerContent.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/pages/velkommen/BehandlingAvPersonopplysningerContent.tsx @@ -47,7 +47,7 @@ const BehandlingAvPersonopplysningerContent: React.FunctionComponent = () => { id="personopplysninger.5" values={{ Link: (children) => ( - + {children} ), diff --git a/apps/endringsmelding-pleiepenger/src/app/pages/velkommen/VelkommenPage.tsx b/apps/endringsmelding-pleiepenger/src/app/pages/velkommen/VelkommenPage.tsx index 02d0a89c13..50225da40e 100644 --- a/apps/endringsmelding-pleiepenger/src/app/pages/velkommen/VelkommenPage.tsx +++ b/apps/endringsmelding-pleiepenger/src/app/pages/velkommen/VelkommenPage.tsx @@ -51,7 +51,10 @@ const VelkommenPage = () => { {barnetsNavn}, samletSøknadsperiodeTekst }} + values={{ + barnetsNavn: {barnetsNavn}, + samletSøknadsperiodeTekst, + }} /> diff --git "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/arbeidstid/ArbeidstidForm.tsx" "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/arbeidstid/ArbeidstidForm.tsx" index 72bc7495f5..d048ebc1e7 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/arbeidstid/ArbeidstidForm.tsx" +++ "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/arbeidstid/ArbeidstidForm.tsx" @@ -6,7 +6,7 @@ import Block from '@navikt/sif-common-core-ds/src/atoms/block/Block'; import { getTypedFormComponents, ValidationError } from '@navikt/sif-common-formik-ds'; import getIntlFormErrorHandler from '@navikt/sif-common-formik-ds/src/validation/intlFormErrorHandler'; import { ArbeiderIPeriodenSvar, ArbeidsaktivitetType, ArbeidstidEndringMap, SøknadContextState } from '@types'; -import { getArbeidsaktiviteterForUkjenteArbeidsforhold } from '@utils'; +import { getArbeidsaktiviteterForUkjenteArbeidsforhold, getEndringsdato, getTillattEndringsperiode } from '@utils'; import { AppText } from '../../../i18n'; import { getLenker } from '../../../lenker'; import PersistStepFormValues from '../../../modules/persist-step-form-values/PersistStepFormValues'; @@ -106,6 +106,7 @@ const ArbeidstidForm: React.FunctionComponent = ({ goBack }) => { sak.søknadsperioder, sak.arbeidsgivereIkkeISak, aktiviteterValuesMap, + getTillattEndringsperiode(getEndringsdato()), søknadsdata.ukjentArbeidsforhold, ), ...getAktiviteterSomSkalEndres(sak.arbeidsaktiviteter), @@ -119,7 +120,9 @@ const ArbeidstidForm: React.FunctionComponent = ({ goBack }) => { id="arbeidstidStep.ingenArbeidsaktiviteter" values={{ Lenke: (txt: string) => ( - {txt} + + {txt} + ), }} /> diff --git "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/arbeidstid/arbeidsaktivitet-form-part/components/ArbeidsaktivitetUtenforPeriodeInfo.tsx" "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/arbeidstid/arbeidsaktivitet-form-part/components/ArbeidsaktivitetUtenforPeriodeInfo.tsx" index c21923640e..57c4b9e175 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/arbeidstid/arbeidsaktivitet-form-part/components/ArbeidsaktivitetUtenforPeriodeInfo.tsx" +++ "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/arbeidstid/arbeidsaktivitet-form-part/components/ArbeidsaktivitetUtenforPeriodeInfo.tsx" @@ -20,7 +20,7 @@ const ArbeidsaktivitetUtenforPeriodeInfo: React.FunctionComponent = ({ const intlValues = { førDato: dateFormatter.full(tillattEndringsperiode.from), etterDato: dateFormatter.full(tillattEndringsperiode.to), - skrivTilOssLink: , + skrivTilOssLink: , }; return ( diff --git "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/oppsummering/ArbeidstidArbeidstakerOppsummering.tsx" "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/oppsummering/ArbeidstidArbeidstakerOppsummering.tsx" index 6bca966541..e6a5ccc18e 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/oppsummering/ArbeidstidArbeidstakerOppsummering.tsx" +++ "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/oppsummering/ArbeidstidArbeidstakerOppsummering.tsx" @@ -1,6 +1,6 @@ import { Heading } from '@navikt/ds-react'; import Block from '@navikt/sif-common-core-ds/src/atoms/block/Block'; -import { ArbeiderIPeriodenSvar, Arbeidsgiver, ArbeidstakerApiData } from '@types'; +import { ArbeiderIPeriodenSvar, ArbeidsgiverMedAnsettelseperioder, ArbeidstakerApiData } from '@types'; import { AppText } from '../../../i18n'; import ArbeidstidUker from '../../../modules/arbeidstid-uker/ArbeidstidUker'; import { ArbeiderIPeriodenSvarIntlKey } from '../arbeidstid/arbeidsaktivitet-form-part/components/ArbeiderIPeriodenSpørsmål'; @@ -8,7 +8,7 @@ import { oppsummeringStepUtils } from './oppsummeringStepUtils'; type Props = { arbeidstaker: ArbeidstakerApiData; - arbeidsgivere: Arbeidsgiver[]; + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[]; arbeidstidKolonneTittel?: string; }; diff --git "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/oppsummering/ArbeidstidOppsummering.tsx" "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/oppsummering/ArbeidstidOppsummering.tsx" index e52d946d4c..a4ae1d6a2c 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/oppsummering/ArbeidstidOppsummering.tsx" +++ "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/oppsummering/ArbeidstidOppsummering.tsx" @@ -1,7 +1,7 @@ import { Heading } from '@navikt/ds-react'; import React from 'react'; import Block from '@navikt/sif-common-core-ds/src/atoms/block/Block'; -import { Arbeidsgiver, ArbeidstidApiData } from '@types'; +import { ArbeidsgiverMedAnsettelseperioder, ArbeidstidApiData } from '@types'; import ArbeidstidUker from '../../../modules/arbeidstid-uker/ArbeidstidUker'; import ArbeidstidArbeidstakerOppsummering from './ArbeidstidArbeidstakerOppsummering'; import { oppsummeringStepUtils } from './oppsummeringStepUtils'; @@ -9,7 +9,7 @@ import { AppText, useAppIntl } from '../../../i18n'; interface Props { arbeidstid: ArbeidstidApiData; - arbeidsgivere: Arbeidsgiver[]; + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[]; } const ArbeidstidOppsummering: React.FunctionComponent = ({ arbeidstid, arbeidsgivere }) => { diff --git "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/ukjent-arbeidsforhold/UkjentArbeidsforholdForm.tsx" "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/ukjent-arbeidsforhold/UkjentArbeidsforholdForm.tsx" index 1519ff65d1..9df972a9ca 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/ukjent-arbeidsforhold/UkjentArbeidsforholdForm.tsx" +++ "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/ukjent-arbeidsforhold/UkjentArbeidsforholdForm.tsx" @@ -10,7 +10,12 @@ import { YesOrNo, } from '@navikt/sif-common-formik-ds'; import getIntlFormErrorHandler from '@navikt/sif-common-formik-ds/src/validation/intlFormErrorHandler'; -import { ArbeidsaktivitetType, Arbeidsgiver, SøknadContextState, UkjentArbeidsforholdSøknadsdata } from '@types'; +import { + ArbeidsaktivitetType, + ArbeidsgiverMedAnsettelseperioder, + SøknadContextState, + UkjentArbeidsforholdSøknadsdata, +} from '@types'; import ArbeidsaktivitetBlock from '../../../components/arbeidsaktivitet-block/ArbeidsaktivitetBlock'; import IkkeAnsattMelding from '../../../components/ikke-ansatt-melding/IkkeAnsattMelding'; import InfoNormalarbeidstid from '../../../components/info-normalarbeidstid/InfoNormalarbeidstid'; @@ -58,8 +63,8 @@ const { FormikWrapper, Form } = getTypedFormComponents< >(); interface Props { - arbeidsgivere: Arbeidsgiver[]; - arbeidsgivereIkkeISak: Arbeidsgiver[]; + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[]; + arbeidsgivereIkkeISak: ArbeidsgiverMedAnsettelseperioder[]; ukjentArbeidsforholdSøknadsdata?: UkjentArbeidsforholdSøknadsdata; stepId: StepId; goBack?: () => void; diff --git "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/ukjent-arbeidsforhold/ukjentArbeidsforholdStepUtils.ts" "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/ukjent-arbeidsforhold/ukjentArbeidsforholdStepUtils.ts" index 27387a64e8..38bdb5959c 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/ukjent-arbeidsforhold/ukjentArbeidsforholdStepUtils.ts" +++ "b/apps/endringsmelding-pleiepenger/src/app/s\303\270knad/steps/ukjent-arbeidsforhold/ukjentArbeidsforholdStepUtils.ts" @@ -1,7 +1,7 @@ import { getNumberFromNumberInputValue, IntlErrorObject, YesOrNo } from '@navikt/sif-common-formik-ds'; import { getNumberValidator, getYesOrNoValidator } from '@navikt/sif-common-formik-ds/src/validation'; import { decimalDurationToDuration, durationToDecimalDuration } from '@navikt/sif-common-utils'; -import { Arbeidsforhold, Arbeidsgiver, UkjentArbeidsforholdSøknadsdata } from '@types'; +import { Arbeidsforhold, ArbeidsgiverMedAnsettelseperioder, UkjentArbeidsforholdSøknadsdata } from '@types'; import { UkjentArbeidsforholdFormValues, UkjentArbeidsgiverFormField, @@ -25,7 +25,7 @@ const arbeidsforholdSøknadsdataToFormValues = ( const ukjentArbeidsgiverFormValuesToSøknadsdata = ( formValues: UkjentArbeidsforholdArbeidsgiverFormValues, - arbeidsgiver?: Arbeidsgiver, + arbeidsgiver?: ArbeidsgiverMedAnsettelseperioder, ): Arbeidsforhold | undefined => { if (!arbeidsgiver) { return undefined; @@ -54,7 +54,7 @@ const ukjentArbeidsgiverFormValuesToSøknadsdata = ( export const getUkjentArbeidsforholdStepInitialValues = ( ukjentArbeidsforholdSøknadsdata: UkjentArbeidsforholdSøknadsdata | undefined, formValues: UkjentArbeidsforholdFormValues | undefined, - arbeidsgivereIkkeISak: Arbeidsgiver[], + arbeidsgivereIkkeISak: ArbeidsgiverMedAnsettelseperioder[], ): UkjentArbeidsforholdFormValues => { if (formValues) { return formValues; @@ -79,7 +79,7 @@ export const getUkjentArbeidsforholdStepInitialValues = ( export const getUkjentArbeidsforholdSøknadsdataFromFormValues = ( values: UkjentArbeidsforholdFormValues, - arbeidsgivere: Arbeidsgiver[], + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], ): UkjentArbeidsforholdSøknadsdata => { const arbeidsforhold: Arbeidsforhold[] = []; Object.keys(values.arbeidsforhold).forEach((key) => { diff --git a/apps/endringsmelding-pleiepenger/src/app/types/Arbeidsgiver.ts b/apps/endringsmelding-pleiepenger/src/app/types/Arbeidsgiver.ts deleted file mode 100644 index 9eb45da42f..0000000000 --- a/apps/endringsmelding-pleiepenger/src/app/types/Arbeidsgiver.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface Arbeidsgiver { - key: string /** orgnummer prefixet med a_ */; - organisasjonsnummer: string; - navn: string; - ansattFom?: Date; - ansattTom?: Date; -} diff --git a/apps/endringsmelding-pleiepenger/src/app/types/ArbeidsgiverMedAnsettelseperioder.ts b/apps/endringsmelding-pleiepenger/src/app/types/ArbeidsgiverMedAnsettelseperioder.ts new file mode 100644 index 0000000000..4831b5f9ad --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/app/types/ArbeidsgiverMedAnsettelseperioder.ts @@ -0,0 +1,8 @@ +import { MaybeDateRange } from '@navikt/sif-common-utils'; + +export interface ArbeidsgiverMedAnsettelseperioder { + key: string /** orgnummer prefixet med a_ */; + organisasjonsnummer: string; + navn: string; + ansettelsesperioder: MaybeDateRange[]; +} diff --git "a/apps/endringsmelding-pleiepenger/src/app/types/IngenTilgang\303\205rsak.ts" "b/apps/endringsmelding-pleiepenger/src/app/types/IngenTilgang\303\205rsak.ts" index dd30569002..afeb2b4c75 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/types/IngenTilgang\303\205rsak.ts" +++ "b/apps/endringsmelding-pleiepenger/src/app/types/IngenTilgang\303\205rsak.ts" @@ -4,6 +4,7 @@ export enum IngenTilgangÅrsak { 'søknadsperioderUtenforTillattEndringsperiode' = 'søknadsperioderUtenforTillattEndringsperiode', 'harMerEnnEnSak' = 'harMerEnnEnSak', 'harIngenPerioder' = 'harIngenPerioder', - 'harArbeidsgiverUtenArbeidsaktivitet' = 'harArbeidsgiverUtenArbeidsaktivitet', 'harArbeidstidSomSelvstendigNæringsdrivende' = 'harArbeidstidSomSelvstendigNæringsdrivende', + 'enArbeidsgiverToAnsettelserSammeUkeMedOpphold' = 'harAnsettelsesforholdSomSlutterOgStarterInneforSammeUke', + 'harFlereAnsettelsesforholdHosUkjentArbeidsgiver' = 'harFlereAnsettelsesforholdHosUkjentArbeidsgiver', } diff --git a/apps/endringsmelding-pleiepenger/src/app/types/Sak.ts b/apps/endringsmelding-pleiepenger/src/app/types/Sak.ts index 4394a04670..a46f6d7073 100644 --- a/apps/endringsmelding-pleiepenger/src/app/types/Sak.ts +++ b/apps/endringsmelding-pleiepenger/src/app/types/Sak.ts @@ -1,6 +1,6 @@ import { DateRange, Duration, ISODate, ISODateRangeMap } from '@navikt/sif-common-utils'; import { FeriedagMap } from '../søknad/steps/lovbestemt-ferie/LovbestemtFerieStep'; -import { Arbeidsgiver } from './Arbeidsgiver'; +import { ArbeidsgiverMedAnsettelseperioder } from './ArbeidsgiverMedAnsettelseperioder'; import { K9SakBarn } from './K9Sak'; export interface Sak { @@ -9,7 +9,7 @@ export interface Sak { /** Settes til true hvis det finnes en arbeidsgiver som ikke har arbeidstid i sak */ harArbeidsgivereIkkeISak: boolean; /** Alle arbeidsgivere som ikke finnes i sak, men som finnes i Aa-reg */ - arbeidsgivereIkkeISak: Arbeidsgiver[]; + arbeidsgivereIkkeISak: ArbeidsgiverMedAnsettelseperioder[]; /** Alle aktiviteter som ikke har arbeidsgiver i AA-reg */ arbeidsaktivitetMedUkjentArbeidsgiver: ArbeidsaktivitetUkjentArbeidsgiver[]; /** Alle arbeidsaktiviteter i sak. Arbeidsgivere flates ut og legges sammen med evt. frilans og selvstendig */ @@ -62,6 +62,7 @@ export interface Arbeidsuke { faktisk?: ArbeidsukeTimer; normalt: ArbeidsukeTimer; antallDagerMedArbeidstid: number; + dagerSøktFor: Date[]; } export type ArbeidsukeMap = ISODateRangeMap; @@ -77,11 +78,12 @@ interface ArbeidsaktivitetBase { perioderMedArbeidstid: PeriodeMedArbeidstid[]; harPerioderFørTillattEndringsperiode: boolean; harPerioderEtterTillattEndringsperiode: boolean; + ansettelsesperioderInnenforEndringsperiode: DateRange[]; } export interface ArbeidsaktivitetArbeidstaker extends ArbeidsaktivitetBase { type: ArbeidsaktivitetType.arbeidstaker; - arbeidsgiver: Arbeidsgiver; + arbeidsgiver: ArbeidsgiverMedAnsettelseperioder; erUkjentArbeidsforhold: boolean; } export interface ArbeidsaktivitetUkjentArbeidsgiver { diff --git "a/apps/endringsmelding-pleiepenger/src/app/types/S\303\270knadContextState.ts" "b/apps/endringsmelding-pleiepenger/src/app/types/S\303\270knadContextState.ts" index 1ea6986245..963b1588d7 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/types/S\303\270knadContextState.ts" +++ "b/apps/endringsmelding-pleiepenger/src/app/types/S\303\270knadContextState.ts" @@ -1,7 +1,7 @@ import { DateRange } from '@navikt/sif-common-utils'; import { StepId } from '../søknad/config/StepId'; import { SøknadRoutes } from '../søknad/config/SøknadRoutes'; -import { Arbeidsgiver } from './Arbeidsgiver'; +import { ArbeidsgiverMedAnsettelseperioder } from './ArbeidsgiverMedAnsettelseperioder'; import { K9Sak } from './K9Sak'; import { Sak } from './Sak'; import { Søker } from './Søker'; @@ -15,7 +15,7 @@ export interface SøknadContextState { k9saker: K9Sak[]; sak: Sak; tillattEndringsperiode: DateRange; - arbeidsgivere: Arbeidsgiver[]; + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[]; søknadsdata: Søknadsdata; søknadRoute?: SøknadRoutes; endringsmeldingSendt?: boolean; diff --git a/apps/endringsmelding-pleiepenger/src/app/types/index.ts b/apps/endringsmelding-pleiepenger/src/app/types/index.ts index 71882538d3..0c2d8e138f 100644 --- a/apps/endringsmelding-pleiepenger/src/app/types/index.ts +++ b/apps/endringsmelding-pleiepenger/src/app/types/index.ts @@ -1,7 +1,7 @@ export * from './ArbeiderIPeriodenSvar'; export * from './Arbeidsforhold'; export * from './ArbeidstidEndring'; -export * from './Arbeidsgiver'; +export * from './ArbeidsgiverMedAnsettelseperioder'; export * from './ArbeidsgiverIkkeFunnetError'; export * from './ArbeidstidSøknadsdata'; export * from './EndringType'; diff --git a/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/getSakFromK9Sak.test.ts b/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/getSakFromK9Sak.test.ts index 148b9a39c1..c1b771f634 100644 --- a/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/getSakFromK9Sak.test.ts +++ b/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/getSakFromK9Sak.test.ts @@ -9,7 +9,12 @@ import { ISODuration, ISODurationToDuration, } from '@navikt/sif-common-utils'; -import { Arbeidsgiver, ArbeidstidEnkeltdagMap, FaktiskOgNormalArbeidstid, K9SakArbeidstidPeriodeMap } from '@types'; +import { + ArbeidsgiverMedAnsettelseperioder, + ArbeidstidEnkeltdagMap, + FaktiskOgNormalArbeidstid, + K9SakArbeidstidPeriodeMap, +} from '@types'; import { _getSakFromK9Sak } from '../getSakFromK9Sak'; const { @@ -38,15 +43,15 @@ describe('getSakFromK9Sak', () => { const endringsperiode: DateRange = { from: ISODateToDate(isoFrom), to: ISODateToDate(isoTo) }; it('beholder uendret endringsperiode hvis bruker er fortsatt ansatt', () => { const result = getEndringsperiodeForArbeidsgiver(endringsperiode, { - ansattTom: undefined, - } as Arbeidsgiver); + ansettelsesperioder: [{ to: undefined }], + } as ArbeidsgiverMedAnsettelseperioder); expect(dateToISODate(result.from)).toEqual(isoFrom); expect(dateToISODate(result.to)).toEqual(isoTo); }); it('justerer endringsperiode hvis sluttdato er før endringsperiode sluttdato', () => { const result = getEndringsperiodeForArbeidsgiver(endringsperiode, { - ansattTom: ISODateToDate(isoSluttdato), - } as Arbeidsgiver); + ansettelsesperioder: [{ to: ISODateToDate(isoSluttdato) }], + } as ArbeidsgiverMedAnsettelseperioder); expect(dateToISODate(result.from)).toEqual(isoFrom); expect(dateToISODate(result.to)).toEqual(isoSluttdato); }); @@ -188,6 +193,9 @@ describe('getSakFromK9Sak', () => { }); describe('getArbeidsukerFromEnkeltdager', () => { + const ansettelsesperioder: DateRange[] = [ + { from: ISODateToDate('2022-01-01'), to: ISODateToDate('2023-01-31') }, + ]; const arbeidstid: FaktiskOgNormalArbeidstid = { faktisk: faktiskArbeidTimerPerDag, normalt: jobberNormaltTimerPerDag, @@ -213,21 +221,21 @@ describe('getSakFromK9Sak', () => { }; it('returnerer riktig for én enkeltdag', () => { - const result = getArbeidsukerFromEnkeltdager(enkeltdag); + const result = getArbeidsukerFromEnkeltdager(enkeltdag, ansettelsesperioder); expect(result.length).toEqual(1); const uke = result[0]; expect(dateRangeToISODateRange(uke.periode)).toEqual('2022-01-03/2022-01-03'); expect(uke.antallDagerMedArbeidstid).toEqual(1); }); it('returnerer riktig for dager som går over én hel uke', () => { - const result = getArbeidsukerFromEnkeltdager(helUke); + const result = getArbeidsukerFromEnkeltdager(helUke, ansettelsesperioder); expect(result.length).toEqual(1); const uke = result[0]; expect(dateRangeToISODateRange(uke.periode)).toEqual('2022-01-03/2022-01-07'); expect(uke.antallDagerMedArbeidstid).toEqual(5); }); it('returnerer riktig for dager som går mer enn én uker', () => { - const result = getArbeidsukerFromEnkeltdager(flereUker); + const result = getArbeidsukerFromEnkeltdager(flereUker, ansettelsesperioder); expect(result.length).toEqual(2); const uke1 = result[0]; const uke2 = result[1]; @@ -290,9 +298,9 @@ describe('getSakFromK9Sak', () => { ISODateRangeToDateRange('2020-01-01/2020-02-01'), ISODateRangeToDateRange('2020-04-01/2020-05-01'), ]; - const arbeidsgiver: Arbeidsgiver = { - ansattFom: ISODateToDate('2019-01-01'), - } as Arbeidsgiver; + const arbeidsgiver: ArbeidsgiverMedAnsettelseperioder = { + ansettelsesperioder: [{ from: ISODateToDate('2019-01-01') }], + } as ArbeidsgiverMedAnsettelseperioder; describe('uten ansattTom', () => { it('returnerer true når ansattFom er før søknadsperiode', () => { @@ -301,7 +309,9 @@ describe('getSakFromK9Sak', () => { it('returnerer true når ansattFom er mellom to søknadsperiode', () => { expect( erArbeidsgiverInnenforSøknadsperioder( - { ansattFom: ISODateToDate('2020-02-03') } as Arbeidsgiver, + { + ansettelsesperioder: [{ from: ISODateToDate('2020-02-03') }], + } as ArbeidsgiverMedAnsettelseperioder, søknadsperioder, ), ).toBeTruthy(); @@ -309,7 +319,9 @@ describe('getSakFromK9Sak', () => { it('returnerer true når ansattFom er i en søknadsperiode', () => { expect( erArbeidsgiverInnenforSøknadsperioder( - { ansattFom: ISODateToDate('2020-03-02') } as Arbeidsgiver, + { + ansettelsesperioder: [{ from: ISODateToDate('2020-03-02') }], + } as ArbeidsgiverMedAnsettelseperioder, søknadsperioder, ), ).toBeTruthy(); @@ -317,7 +329,9 @@ describe('getSakFromK9Sak', () => { it('returnerer false når ansattFom er etter søknadsperiode', () => { expect( erArbeidsgiverInnenforSøknadsperioder( - { ansattFom: ISODateToDate('2020-05-02') } as Arbeidsgiver, + { + ansettelsesperioder: [{ from: ISODateToDate('2020-05-02') }], + } as ArbeidsgiverMedAnsettelseperioder, søknadsperioder, ), ).toBeFalsy(); @@ -328,9 +342,10 @@ describe('getSakFromK9Sak', () => { expect( erArbeidsgiverInnenforSøknadsperioder( { - ansattFom: ISODateToDate('2019-01-01'), - ansattTom: ISODateToDate('2023-01-01'), - } as Arbeidsgiver, + ansettelsesperioder: [ + { from: ISODateToDate('2019-01-01'), to: ISODateToDate('2023-01-01') }, + ], + } as ArbeidsgiverMedAnsettelseperioder, søknadsperioder, ), ).toBeTruthy(); @@ -339,9 +354,10 @@ describe('getSakFromK9Sak', () => { expect( erArbeidsgiverInnenforSøknadsperioder( { - ansattFom: ISODateToDate('2019-01-01'), - ansattTom: ISODateToDate('2020-03-01'), - } as Arbeidsgiver, + ansettelsesperioder: [ + { from: ISODateToDate('2019-01-01'), to: ISODateToDate('2020-03-01') }, + ], + } as ArbeidsgiverMedAnsettelseperioder, søknadsperioder, ), ).toBeTruthy(); @@ -350,9 +366,13 @@ describe('getSakFromK9Sak', () => { expect( erArbeidsgiverInnenforSøknadsperioder( { - ansattFom: ISODateToDate('2019-01-01'), - ansattTom: ISODateToDate('2019-12-31'), - } as Arbeidsgiver, + ansettelsesperioder: [ + { + from: ISODateToDate('2019-01-01'), + to: ISODateToDate('2019-12-31'), + }, + ], + } as ArbeidsgiverMedAnsettelseperioder, søknadsperioder, ), ).toBeFalsy(); @@ -361,9 +381,10 @@ describe('getSakFromK9Sak', () => { expect( erArbeidsgiverInnenforSøknadsperioder( { - ansattFom: ISODateToDate('2020-03-01'), - ansattTom: ISODateToDate('2020-03-02'), - } as Arbeidsgiver, + ansettelsesperioder: [ + { from: ISODateToDate('2020-03-01'), to: ISODateToDate('2020-03-02') }, + ], + } as ArbeidsgiverMedAnsettelseperioder, søknadsperioder, ), ).toBeFalsy(); diff --git a/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/tilgangskontroll.test.ts b/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/tilgangskontroll.test.ts index 6f151cf20c..85c46f6eb7 100644 --- a/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/tilgangskontroll.test.ts +++ b/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/tilgangskontroll.test.ts @@ -1,11 +1,32 @@ import { DateRange, ISODateRangeToDateRange, ISODurationToDuration } from '@navikt/sif-common-utils'; -import { Arbeidsgiver, K9SakArbeidstaker, K9SakArbeidstidPeriodeMap } from '@types'; +import { ArbeidsgiverMedAnsettelseperioder, K9SakArbeidstaker, K9SakArbeidstidPeriodeMap } from '@types'; import { tilgangskontroll, tilgangskontrollUtils } from '../tilgangskontroll'; import { vi } from 'vitest'; -const arbeidsgiver1: Arbeidsgiver = { key: 'a_1', organisasjonsnummer: '1' } as Arbeidsgiver; -const arbeidsgiver2: Arbeidsgiver = { key: 'a_2', organisasjonsnummer: '2' } as Arbeidsgiver; -const arbeidsgiver3: Arbeidsgiver = { key: 'a_3', organisasjonsnummer: '3' } as Arbeidsgiver; +const ansettelsesperioder: DateRange[] = [ISODateRangeToDateRange('2022-01-01/2023-03-01')]; + +const arbeidsgiver1: ArbeidsgiverMedAnsettelseperioder = { + key: 'a_1', + navn: 'a_1', + ansettelsesperioder, + organisasjonsnummer: '1', +}; +const arbeidsgiver2: ArbeidsgiverMedAnsettelseperioder = { + key: 'a_2', + navn: 'a_2', + ansettelsesperioder, + organisasjonsnummer: '2', +}; + +const arbeidsgiverFlereAnsettelsesperioder: ArbeidsgiverMedAnsettelseperioder = { + key: 'a_4', + navn: 'a_4', + ansettelsesperioder: [ + ISODateRangeToDateRange('2022-01-01/2023-02-01'), + ISODateRangeToDateRange('2023-02-01/2023-03-01'), + ], + organisasjonsnummer: '4', +} as ArbeidsgiverMedAnsettelseperioder; const arbeidstaker1: K9SakArbeidstaker = { organisasjonsnummer: '1' } as K9SakArbeidstaker; const arbeidstaker2: K9SakArbeidstaker = { organisasjonsnummer: '2' } as K9SakArbeidstaker; @@ -29,41 +50,49 @@ describe('tilgangskontroll', () => { const tillattEndringsperiode = ISODateRangeToDateRange('2022-01-01/2023-03-01'); it('stopper ved ingen sak', () => { - const result = tilgangskontroll([], tillattEndringsperiode); + const result = tilgangskontroll([], tillattEndringsperiode, []); expect(result.kanBrukeSøknad).toBeFalsy(); }); it('stopper hvis bruker har flere enn én sak', () => { - const result = tilgangskontroll([true, false] as any, tillattEndringsperiode); + const result = tilgangskontroll([true, false] as any, tillattEndringsperiode, []); expect(result.kanBrukeSøknad).toBeFalsy(); }); }); -describe('harArbeidsgiverUtenArbeidstakerK9Sak', () => { - it('returnerer true hvis arbeidsgiver ikke har arbeidsaktivitet i sak', () => { - const result = tilgangskontrollUtils.harArbeidsgiverUtenArbeidsaktivitet( - [arbeidsgiver3], +describe('harFlereAnsettelsesforholdHosUkjentArbeidsgiver', () => { + /** TODO - oppdatere */ + it('returnerer true hvis arbeidsgiver ikke har arbeidsaktivitet i sak og har flere ansettelseperioder', () => { + const result = tilgangskontrollUtils.harFlereAnsettelsesforholdHosUkjentArbeidsgiver( + [arbeidsgiverFlereAnsettelsesperioder], [arbeidstaker1, arbeidstaker2], ); expect(result).toBeTruthy(); }); it('returnerer false hvis alle arbeidsgivere har arbeidsaktivitet i sak', () => { - const result = tilgangskontrollUtils.harArbeidsgiverUtenArbeidsaktivitet( + const result = tilgangskontrollUtils.harFlereAnsettelsesforholdHosUkjentArbeidsgiver( [arbeidsgiver1, arbeidsgiver2], [arbeidstaker1, arbeidstaker2], ); expect(result).toBeFalsy(); }); + it('returnerer true hvis arbeidsgiver ikke har arbeidsaktivitet i sak men har kun én ansettelseperiode', () => { + const result = tilgangskontrollUtils.harFlereAnsettelsesforholdHosUkjentArbeidsgiver( + [arbeidsgiver1], + [arbeidstaker1], + ); + expect(result).toBeFalsy(); + }); }); describe('harSakSøknadsperiodeInnenforTillattEndringsperiode', () => { - const tillatEndringsperiode = ISODateRangeToDateRange('2022-01-02/2022-02-01'); + const tillattEndringsperiode = ISODateRangeToDateRange('2022-01-02/2022-02-01'); const søknadsperiodeUtenfor: DateRange = ISODateRangeToDateRange('2022-01-01/2022-01-01'); const søknadsperiodeInnenfor: DateRange = ISODateRangeToDateRange('2022-01-02/2022-02-01'); it('returnerer true hvis søknadsperioder er innenfor tillatt endringsperiode', () => { const result = tilgangskontrollUtils.harSøknadsperiodeInnenforTillattEndringsperiode( søknadsperiodeInnenfor, - tillatEndringsperiode, + tillattEndringsperiode, ); expect(result).toBeTruthy(); }); @@ -71,7 +100,7 @@ describe('harSakSøknadsperiodeInnenforTillattEndringsperiode', () => { it('returnerer false hvis søknadsperioder er før tillatt endringsperiode', () => { const result = tilgangskontrollUtils.harSøknadsperiodeInnenforTillattEndringsperiode( søknadsperiodeUtenfor, - tillatEndringsperiode, + tillattEndringsperiode, ); expect(result).toBeFalsy(); }); @@ -146,3 +175,32 @@ describe('ingenTilgangMeta', () => { expect(result.erSN).toBeTruthy(); }); }); + +describe('slutterOgStarterHosArbeidsgiverSammeUke', () => { + const uke2: DateRange = ISODateRangeToDateRange('2025-01-06/2025-01-12'); + const uke4: DateRange = ISODateRangeToDateRange('2025-01-20/2025-01-26'); + const uke3ManOns: DateRange = ISODateRangeToDateRange('2025-01-13/2025-01-15'); + const uke3TorFre: DateRange = ISODateRangeToDateRange('2025-01-16/2025-01-17'); + const uke3FreSøn: DateRange = ISODateRangeToDateRange('2025-01-17/2025-01-19'); + + it('returnerer false hvis det ikke er noen ansettelsesperiode', () => { + expect(tilgangskontrollUtils.perioderSlutterOgStarterSammeUkeMedOpphold([])).toBeFalsy(); + }); + it('returnerer false hvis det bare er én ansettelsesperiode', () => { + expect(tilgangskontrollUtils.perioderSlutterOgStarterSammeUkeMedOpphold([uke2])).toBeFalsy(); + }); + it('returnerer false hvis det to ansettelsesperiode med én uke mellom', () => { + expect(tilgangskontrollUtils.perioderSlutterOgStarterSammeUkeMedOpphold([uke2, uke4])).toBeFalsy(); + }); + it('returnerer false hvis det to ansettelsesperiode med er sammenhengende', () => { + expect(tilgangskontrollUtils.perioderSlutterOgStarterSammeUkeMedOpphold([uke3ManOns, uke3TorFre])).toBeFalsy(); + }); + it('returnerer true hvis to perioder slutter og starter innenfor samme uke men med opphold', () => { + expect(tilgangskontrollUtils.perioderSlutterOgStarterSammeUkeMedOpphold([uke3ManOns, uke3FreSøn])).toBeTruthy(); + }); + it('returnerer true hvis to det er mange perioder usortert og noen slutter og starter innenfor samme uke men med opphold', () => { + expect( + tilgangskontrollUtils.perioderSlutterOgStarterSammeUkeMedOpphold([uke2, uke4, uke3ManOns, uke3FreSøn]), + ).toBeTruthy(); + }); +}); diff --git a/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/ukjentArbeidsgiverUtils.ts b/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/ukjentArbeidsgiverUtils.test.ts similarity index 93% rename from apps/endringsmelding-pleiepenger/src/app/utils/__tests__/ukjentArbeidsgiverUtils.ts rename to apps/endringsmelding-pleiepenger/src/app/utils/__tests__/ukjentArbeidsgiverUtils.test.ts index 7f4fb3d1ec..e38a0d8c9f 100644 --- a/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/ukjentArbeidsgiverUtils.ts +++ b/apps/endringsmelding-pleiepenger/src/app/utils/__tests__/ukjentArbeidsgiverUtils.test.ts @@ -1,5 +1,4 @@ -import { DateRange } from '@navikt/sif-common-formik-ds'; -import { dateToISODate, ISODate, ISODateRangeToDateRange, ISODateToDate } from '@navikt/sif-common-utils'; +import { DateRange, dateToISODate, ISODate, ISODateRangeToDateRange, ISODateToDate } from '@navikt/sif-common-utils'; import { getSøknadsperioderForUkjentArbeidsforhold } from '../ukjentArbeidsforholdUtils'; describe('ukjentArbeidsforholdUtils', () => { diff --git a/apps/endringsmelding-pleiepenger/src/app/utils/arbeidsukeUtils.ts b/apps/endringsmelding-pleiepenger/src/app/utils/arbeidsukeUtils.ts index c81148c065..24f2442f21 100644 --- a/apps/endringsmelding-pleiepenger/src/app/utils/arbeidsukeUtils.ts +++ b/apps/endringsmelding-pleiepenger/src/app/utils/arbeidsukeUtils.ts @@ -1,16 +1,12 @@ import { dateFormatter, DateRange, - dateRangeToISODateRange, durationToISODuration, - durationUtils, getDatesInDateRange, ISODate, - numberDurationAsDuration, } from '@navikt/sif-common-utils'; -import { ArbeidstidEnkeltdagMap, Arbeidsuke, ArbeidsukeTimer } from '@types'; +import { ArbeidstidEnkeltdagMap, Arbeidsuke } from '@types'; import dayjs from 'dayjs'; -import { beregnSnittTimerPerDag } from './beregnUtils'; export const sorterArbeidsuker = (a1: Arbeidsuke, a2: Arbeidsuke): number => { return dayjs(a1.periode.from).isBefore(a2.periode.from) ? -1 : 1; @@ -56,43 +52,3 @@ export const arbeidsukerHarLikNormaltidPerDag = (arbeidsuker: Arbeidsuke[]): boo export const getDagerFraEnkeltdagMap = (arbeidstidEnkeltdager: ArbeidstidEnkeltdagMap): ISODate[] => { return Object.keys(arbeidstidEnkeltdager).sort(); }; - -/** - * Mapper periode og enkeltdager med arbeid om til Arbeidsuke. Summerer tid per dag om til timer per uke - * @param periode DateRange for uken - * @param arbeidstidEnkeltdagerIUken Enkeltdager med arbeidstid innenfor uken - * @returns Arbeidsuke - */ -export const getArbeidsukeFromEnkeltdagerIUken = ( - uke: DateRange, - arbeidstidEnkeltdagerIUken: ArbeidstidEnkeltdagMap, -): Arbeidsuke => { - const dagerSøktFor = Object.keys(arbeidstidEnkeltdagerIUken); - const antallDagerMedArbeidstid = dagerSøktFor.length; - const normalt = dagerSøktFor.map((key) => arbeidstidEnkeltdagerIUken[key].normalt); - const normaltSummertHeleUken = numberDurationAsDuration(durationUtils.summarizeDurations(normalt)); - const faktiskEnkeltdager = dagerSøktFor.map((key) => arbeidstidEnkeltdagerIUken[key].faktisk); - const harFaktiskArbeidstid = faktiskEnkeltdager.some((f) => f !== undefined); - const faktiskSummertHeleUken = harFaktiskArbeidstid - ? numberDurationAsDuration(durationUtils.summarizeDurations(faktiskEnkeltdager)) - : undefined; - const faktisk: ArbeidsukeTimer | undefined = faktiskSummertHeleUken - ? { - uke: faktiskSummertHeleUken, - dag: beregnSnittTimerPerDag(faktiskSummertHeleUken, antallDagerMedArbeidstid), - } - : undefined; - - const arbeidsuke: Arbeidsuke = { - isoDateRange: dateRangeToISODateRange(uke), - periode: uke, - arbeidstidEnkeltdager: arbeidstidEnkeltdagerIUken, - faktisk, - normalt: { - uke: normaltSummertHeleUken, - dag: beregnSnittTimerPerDag(normaltSummertHeleUken, antallDagerMedArbeidstid), - }, - antallDagerMedArbeidstid: dagerSøktFor.length, - }; - return arbeidsuke; -}; diff --git a/apps/endringsmelding-pleiepenger/src/app/utils/getSakFromK9Sak.ts b/apps/endringsmelding-pleiepenger/src/app/utils/getSakFromK9Sak.ts index 575af27f71..7ea66bbf6e 100644 --- a/apps/endringsmelding-pleiepenger/src/app/utils/getSakFromK9Sak.ts +++ b/apps/endringsmelding-pleiepenger/src/app/utils/getSakFromK9Sak.ts @@ -11,10 +11,13 @@ import { getIsoWeekDateRangeForDate, getLastDateInDateRanges, isDateInDateRange, + isDateInDateRanges, ISODateRangeToDateRange, ISODateToDate, joinAdjacentDateRanges, + MaybeDateRange, numberDurationAsDuration, + sortMaybeDateRange, } from '@navikt/sif-common-utils'; import { Arbeidsaktivitet, @@ -23,7 +26,7 @@ import { ArbeidsaktivitetFrilanser, ArbeidsaktivitetSelvstendigNæringsdrivende, ArbeidsaktivitetType, - Arbeidsgiver, + ArbeidsgiverMedAnsettelseperioder, ArbeidsgiverIkkeFunnetError, ArbeidstidEnkeltdagMap, Arbeidsuke, @@ -62,7 +65,7 @@ interface _PeriodisertK9FormatArbeidstidPerioder { */ export const getSakFromK9Sak = ( k9sak: K9Sak, - alleArbeidsgivere: Arbeidsgiver[], + alleArbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], tillattEndringsperiode: DateRange, ): Sak => { const { arbeidstakerList, frilanserArbeidstidInfo, selvstendigNæringsdrivendeArbeidstidInfo } = @@ -135,8 +138,8 @@ export const getSakFromK9Sak = ( /** Henter utk9SakArbeidstakere med arbeidsgiver funnet i AA-reg */ export const getArbeidsaktiviteterMedKjentArbeidsgiver = ( k9SakArbeidstakere: K9SakArbeidstaker[], - arbeidsgivere: Arbeidsgiver[], -) => { + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], +): K9SakArbeidstaker[] => { return k9SakArbeidstakere.filter((a) => arbeidsgivere.some((arbg) => arbg.organisasjonsnummer === a.organisasjonsnummer), ); @@ -145,7 +148,7 @@ export const getArbeidsaktiviteterMedKjentArbeidsgiver = ( /** Henter utk9SakArbeidstakere hvor arbeidsgiver IKKE er funnet i AA-reg */ export const getArbeidsaktiviteterMedUkjentArbeidsgiver = ( k9SakArbeidstakere: K9SakArbeidstaker[], - arbeidsgivere: Arbeidsgiver[], + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], ) => { return k9SakArbeidstakere.filter( (a) => arbeidsgivere.some((arbg) => arbg.organisasjonsnummer === a.organisasjonsnummer) === false, @@ -160,11 +163,13 @@ export const getArbeidsaktiviteterMedUkjentArbeidsgiver = ( */ const getEndringsperiodeForArbeidsgiver = ( tillattEndringsperiode: DateRange, - arbeidsgiver: Arbeidsgiver, + arbeidsgiver: ArbeidsgiverMedAnsettelseperioder, ): DateRange => { + const { ansettelsesperioder } = arbeidsgiver; + const sisteAnsattTom = ansettelsesperioder.sort(sortMaybeDateRange).reverse()[0]?.to; return { ...tillattEndringsperiode, - to: arbeidsgiver.ansattTom || tillattEndringsperiode.to, + to: sisteAnsattTom || tillattEndringsperiode.to, }; }; @@ -282,17 +287,25 @@ const fjernArbeidstidEnkeltdagerUtenforPeriode = ( return enkeltdagerMap; }; +const getDagerIkkeAnsattIPeriode = (periode: DateRange, ansettelsesperioder?: DateRange[]): Date[] => { + if (!ansettelsesperioder) { + return []; + } + return getDatesInDateRange(periode).filter((d) => !isDateInDateRanges(d, ansettelsesperioder)); +}; + /** * Mapper periode og enkeltdager med arbeid om til Arbeidsuke. Summerer tid per dag om til timer per uke - * @param periode DateRange for uken + * @param ansattUke DateRange for uken, justert ned til perioden en er ansatt * @param arbeidstidEnkeltdagerIUken Enkeltdager med arbeidstid * @returns Arbeidsuke */ -const getArbeidsukeFromEnkeltdagerIUken = ( - periode: DateRange, +export const getArbeidsukeFromEnkeltdagerIUken = ( + ansattUke: DateRange, arbeidstidEnkeltdager: ArbeidstidEnkeltdagMap, ): Arbeidsuke => { - const arbeidstidEnkeltdagerIUken = fjernArbeidstidEnkeltdagerUtenforPeriode(periode, arbeidstidEnkeltdager); + /** Forsikre seg om at ingen enkeltdager er utenfor uken */ + const arbeidstidEnkeltdagerIUken = fjernArbeidstidEnkeltdagerUtenforPeriode(ansattUke, arbeidstidEnkeltdager); const dagerSøktFor = Object.keys(arbeidstidEnkeltdagerIUken); const antallDagerMedArbeidstid = dagerSøktFor.length; const faktisk = dagerSøktFor.map((key) => arbeidstidEnkeltdagerIUken[key].faktisk); @@ -301,9 +314,11 @@ const getArbeidsukeFromEnkeltdagerIUken = ( const faktiskSummertHeleUken = numberDurationAsDuration(durationUtils.summarizeDurations(faktisk)); const arbeidsuke: Arbeidsuke = { - isoDateRange: dateRangeToISODateRange(periode), - periode: periode, + isoDateRange: dateRangeToISODateRange(ansattUke), + periode: ansattUke, arbeidstidEnkeltdager: arbeidstidEnkeltdagerIUken, + dagerSøktFor: dagerSøktFor.map(ISODateToDate), + antallDagerMedArbeidstid: dagerSøktFor.length, faktisk: { uke: faktiskSummertHeleUken, dag: beregnSnittTimerPerDag(faktiskSummertHeleUken, antallDagerMedArbeidstid), @@ -312,33 +327,39 @@ const getArbeidsukeFromEnkeltdagerIUken = ( uke: normaltSummertHeleUken, dag: beregnSnittTimerPerDag(normaltSummertHeleUken, antallDagerMedArbeidstid), }, - antallDagerMedArbeidstid: dagerSøktFor.length, }; return arbeidsuke; }; -const setArbeidsukeStartdatoTilFørsteDagSøktFor = (arbeidsuke: Arbeidsuke): Arbeidsuke => { - const dagerSøktFor = getDagerFraEnkeltdagMap(arbeidsuke.arbeidstidEnkeltdager); - const periode: DateRange = { ...arbeidsuke.periode, from: ISODateToDate(dagerSøktFor[0]) }; - return { - ...arbeidsuke, - periode, - isoDateRange: dateRangeToISODateRange(periode), - }; -}; - -const setArbeidsukeSluttdatoTilSisteDagSøktFor = (arbeidsuke: Arbeidsuke): Arbeidsuke => { +/** Fjerner dager det ikke er søkt for i en arbeidsuke. Men inkluderer lørdag og søndag */ +const trimArbeidsukePeriodeTilDagerSøktForEllerHelUke = ( + arbeidsuke: Arbeidsuke, + erSisteUkeIPeriode: boolean, + ansettelsesperioder: DateRange[], +): Arbeidsuke => { const dagerSøktFor = getDagerFraEnkeltdagMap(arbeidsuke.arbeidstidEnkeltdager); const periode: DateRange = { - ...arbeidsuke.periode, + from: ISODateToDate(dagerSøktFor[0]), to: ISODateToDate(dagerSøktFor[dagerSøktFor.length - 1]), }; + if (!erSisteUkeIPeriode && dayjs(periode.to).isoWeekday() === 5) { + const søndag = dayjs(periode.to).add(2, 'day').toDate(); + const lørdag = dayjs(periode.to).add(1, 'day').toDate(); + if (isDateInDateRanges(søndag, ansettelsesperioder)) { + // Kontroller om en er ansatt søndag + periode.to = søndag; + } else if (isDateInDateRanges(lørdag, ansettelsesperioder)) { + // Kontroller om en er ansatt lørdag + periode.to = lørdag; + } + } return { ...arbeidsuke, periode, isoDateRange: dateRangeToISODateRange(periode), }; }; + /** * Grupperer arbeidsdager inn i uker * Hver uke er hele uker, inklusiv helg, med unntak av første og siste uke som @@ -347,7 +368,10 @@ const setArbeidsukeSluttdatoTilSisteDagSøktFor = (arbeidsuke: Arbeidsuke): Arbe * @param enkeltdager * @returns Array av arbeidsuker */ -const getArbeidsukerFromEnkeltdager = (enkeltdager: ArbeidstidEnkeltdagMap): Arbeidsuke[] => { +const getArbeidsukerFromEnkeltdager = ( + enkeltdager: ArbeidstidEnkeltdagMap, + ansettelsesperioder: DateRange[], +): Arbeidsuke[] => { const ukerMap: { [key: string]: { dagerMap: ArbeidstidEnkeltdagMap; @@ -360,7 +384,17 @@ const getArbeidsukerFromEnkeltdager = (enkeltdager: ArbeidstidEnkeltdagMap): Arb const { faktisk, normalt } = enkeltdager[isoDate]; /** Midlertidig nøkkel som tar hele uken */ - const isoDateRange = dateRangeToISODateRange(getIsoWeekDateRangeForDate(date)); + const uke = getIsoWeekDateRangeForDate(date); + /** Litt tungvindt måte å fjerne dager på, men virker frem til hele løsningen tar bedre høyde for ansettelsesperioder */ + const dagerAnsattIUken = getDatesInDateRange(uke).filter((d) => isDateInDateRanges(d, ansettelsesperioder)); + if (dagerAnsattIUken.length === 0) { + throw new Error('Dag utenfor ansettelsesperiode'); + } + const ansattUke: DateRange = { + from: dagerAnsattIUken[0], + to: dagerAnsattIUken[dagerAnsattIUken.length - 1], + }; + const isoDateRange = dateRangeToISODateRange(ansattUke); if (ukerMap[isoDateRange] === undefined) { ukerMap[isoDateRange] = { dagerMap: {}, @@ -380,8 +414,17 @@ const getArbeidsukerFromEnkeltdager = (enkeltdager: ArbeidstidEnkeltdagMap): Arb }); /** Juster start og sluttdato til første og siste dag søkt for (dag med arbeidstid) */ - arbeidsuker[0] = setArbeidsukeStartdatoTilFørsteDagSøktFor(arbeidsuker[0]); - arbeidsuker[arbeidsuker.length - 1] = setArbeidsukeSluttdatoTilSisteDagSøktFor(arbeidsuker[arbeidsuker.length - 1]); + const antallUker = arbeidsuker.length; + if (antallUker > 0) { + arbeidsuker.forEach((arbeidsuke, index) => { + const erSisteUke = index === antallUker - 1; + arbeidsuker[index] = trimArbeidsukePeriodeTilDagerSøktForEllerHelUke( + arbeidsuke, + erSisteUke, + ansettelsesperioder, + ); + }); + } return arbeidsuker; }; @@ -394,14 +437,25 @@ const getArbeidsukerFromEnkeltdager = (enkeltdager: ArbeidstidEnkeltdagMap): Arb const getPerioderMedArbeidstid = ( arbeidstidPeriodeMap: K9SakArbeidstidPeriodeMap, tillattEndringsperiode: DateRange, + ansettelsesperioderInnenforEndringsperiode: DateRange[], ): PeriodeMedArbeidstid[] => { const perioder = trimArbeidstidTilTillattEndringsperiode(arbeidstidPeriodeMap, tillattEndringsperiode); return grupperArbeidstidPerioder(perioder).map((gruppertPeriode) => { const enkeltdagerIPeriode = getArbeidstidEnkeltdagMapFromPerioder(gruppertPeriode.arbeidstidPerioder); - const arbeidsuker = getArbeidsukerMapFromArbeidsuker(getArbeidsukerFromEnkeltdager(enkeltdagerIPeriode)); + const arbeidsdagerSomKanEndres = getArbeidsdagerInneforEndringsperiodeOgAnsettelsesperioder( + enkeltdagerIPeriode, + tillattEndringsperiode, + ansettelsesperioderInnenforEndringsperiode, + ); + const uker = getArbeidsukerFromEnkeltdager( + arbeidsdagerSomKanEndres, + ansettelsesperioderInnenforEndringsperiode, + ); + const periodeSomKanEndres: DateRange = { from: uker[0].periode.from, to: uker[uker.length - 1].periode.to }; + const arbeidsuker = getArbeidsukerMapFromArbeidsuker(uker); const periode: PeriodeMedArbeidstid = { - ...gruppertPeriode.periode, + ...periodeSomKanEndres, arbeidsuker, }; return periode; @@ -449,12 +503,17 @@ const harPerioderEtterEndringsperiode = ( const getArbeidsaktivitetPerioderPart = ( arbeidstidPerioder: K9SakArbeidstidPeriodeMap, endringsperiode: DateRange, + ansettelsesperioderInnenforEndringsperiode: DateRange[], ): Pick< Arbeidsaktivitet, 'perioderMedArbeidstid' | 'harPerioderEtterTillattEndringsperiode' | 'harPerioderFørTillattEndringsperiode' > => { return { - perioderMedArbeidstid: getPerioderMedArbeidstid(arbeidstidPerioder, endringsperiode), + perioderMedArbeidstid: getPerioderMedArbeidstid( + arbeidstidPerioder, + endringsperiode, + ansettelsesperioderInnenforEndringsperiode, + ), harPerioderFørTillattEndringsperiode: harPerioderFørEndringsperiode(arbeidstidPerioder, endringsperiode), harPerioderEtterTillattEndringsperiode: harPerioderEtterEndringsperiode(arbeidstidPerioder, endringsperiode), }; @@ -469,7 +528,7 @@ const getArbeidsaktivitetPerioderPart = ( */ const getArbeidsaktivitetArbeidstaker = ( arbeidstaker: K9SakArbeidstaker, - arbeidsgivere: Arbeidsgiver[], + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], endringsperiode: DateRange, ): ArbeidsaktivitetArbeidstaker => { const { @@ -486,16 +545,39 @@ const getArbeidsaktivitetArbeidstaker = ( throw error; } const endringsperiodeForArbeidsgiver = getEndringsperiodeForArbeidsgiver(endringsperiode, arbeidsgiver); + const ansettelsesperioderInnenforEndringsperiode = ensureAnsettelsesperioderIsValidDateRange( + arbeidsgiver.ansettelsesperioder, + endringsperiode, + ); return { key: arbeidsgiver.key, arbeidsgiver, type: ArbeidsaktivitetType.arbeidstaker, navn: arbeidsgiver.navn, erUkjentArbeidsforhold: false, - ...getArbeidsaktivitetPerioderPart(perioder, endringsperiodeForArbeidsgiver), + ansettelsesperioderInnenforEndringsperiode, + ...getArbeidsaktivitetPerioderPart( + perioder, + endringsperiodeForArbeidsgiver, + ansettelsesperioderInnenforEndringsperiode, + ), }; }; +/** Går gjennom og endrer ansettelsesperioder til gyldig DateRange + * Bruker tillattEndringsperiode som erstatning hvis ansettelsesperiode mangler daga + */ + +const ensureAnsettelsesperioderIsValidDateRange = ( + ansettelsesperioder: MaybeDateRange[], + endringsperiode: DateRange, +): DateRange[] => { + return ansettelsesperioder.map((a) => ({ + from: a.from || endringsperiode.from, + to: a.to || endringsperiode.to, + })); +}; + /** * * @param frilanserArbeidstidInfo @@ -511,7 +593,8 @@ const getArbeidsaktivitetFrilanser = ( key: ArbeidsaktivitetType.frilanser, type: ArbeidsaktivitetType.frilanser, navn: 'Frilanser', - ...getArbeidsaktivitetPerioderPart(frilanserArbeidstidInfo.perioder, endringsperiode), + ansettelsesperioderInnenforEndringsperiode: [], // Brukes ikke for frilanser + ...getArbeidsaktivitetPerioderPart(frilanserArbeidstidInfo.perioder, endringsperiode, [endringsperiode]), } : undefined; }; @@ -531,30 +614,53 @@ const getArbeidsaktivitetSelvstendigNæringsdrivende = ( key: ArbeidsaktivitetType.selvstendigNæringsdrivende, type: ArbeidsaktivitetType.selvstendigNæringsdrivende, navn: 'Selvstendig næringsdrivende', - ...getArbeidsaktivitetPerioderPart(selvstendigNæringsdrivendeArbeidstidInfo.perioder, endringsperiode), + ansettelsesperioderInnenforEndringsperiode: [], // Brukes ikke for SN + ...getArbeidsaktivitetPerioderPart(selvstendigNæringsdrivendeArbeidstidInfo.perioder, endringsperiode, [ + endringsperiode, + ]), } : undefined; }; +/** + * Sjekker om en er ansatt hos arbeidsgiver innenfor søknadsperioder + * @param arbeidsgiver + * @param søknadsperioder + * @returns boolean + */ +const erArbeidsgiverInnenforSøknadsperioder = ( + arbeidsgiver: ArbeidsgiverMedAnsettelseperioder, + søknadsperioder: DateRange[], +): boolean => { + const { ansettelsesperioder = [] } = arbeidsgiver; + return ansettelsesperioder.some((ansettelsesperiode) => + erAnsattPeriodeInnenforSøknadsperioder(ansettelsesperiode, søknadsperioder), + ); +}; + /** * Sjekker om ansatt-periode hos arbeidsgiver er innenfor søknadsperioder * @param arbeidsgiver * @param søknadsperioder * @returns boolean */ -const erArbeidsgiverInnenforSøknadsperioder = (arbeidsgiver: Arbeidsgiver, søknadsperioder: DateRange[]): boolean => { +const erAnsattPeriodeInnenforSøknadsperioder = ( + ansettelsesperiode: MaybeDateRange, + søknadsperioder: DateRange[], +): boolean => { const sisteSøknadsdag = getLastDateInDateRanges(søknadsperioder); - if (!arbeidsgiver.ansattFom || !sisteSøknadsdag) { + + if (!ansettelsesperiode.from || !sisteSøknadsdag) { return false; } - if (!arbeidsgiver.ansattTom) { - return dayjs(arbeidsgiver.ansattFom).isSameOrBefore(sisteSøknadsdag); + if (!ansettelsesperiode.to) { + return dayjs(ansettelsesperiode.from).isSameOrBefore(sisteSøknadsdag); } - const ansattPeriode: DateRange = { - from: arbeidsgiver.ansattFom, - to: arbeidsgiver.ansattTom || sisteSøknadsdag, + const periode: DateRange = { + from: ansettelsesperiode.from, + to: ansettelsesperiode.to || sisteSøknadsdag, }; - return søknadsperioder.some((søknadsperiode) => dateRangesCollide([søknadsperiode, ansattPeriode])); + return søknadsperioder.some((søknadsperiode) => dateRangesCollide([søknadsperiode, periode])); }; /** @@ -603,4 +709,23 @@ export const _getSakFromK9Sak = { getArbeidsukeFromEnkeltdagerIUken, grupperArbeidstidPerioder, trimArbeidstidTilTillattEndringsperiode, + getDagerIkkeAnsattIPeriode, +}; + +const getArbeidsdagerInneforEndringsperiodeOgAnsettelsesperioder = ( + arbeidsdager: ArbeidstidEnkeltdagMap, + tillattEndringsperiode: DateRange, + ansettelsesperioderInnenforEndringsperiode: DateRange[], +) => { + const arbeidsdagerInnenforPerioder: ArbeidstidEnkeltdagMap = {}; + for (const [dato, info] of Object.entries(arbeidsdager)) { + const d = ISODateToDate(dato); + if ( + isDateInDateRange(d, tillattEndringsperiode) && + isDateInDateRanges(d, ansettelsesperioderInnenforEndringsperiode) + ) { + arbeidsdagerInnenforPerioder[dato] = info; + } + } + return arbeidsdagerInnenforPerioder; }; diff --git a/apps/endringsmelding-pleiepenger/src/app/utils/getSakOgArbeidsgivereDebugInfo.ts b/apps/endringsmelding-pleiepenger/src/app/utils/getSakOgArbeidsgivereDebugInfo.ts index b255e616a1..cd7fc5a92b 100644 --- a/apps/endringsmelding-pleiepenger/src/app/utils/getSakOgArbeidsgivereDebugInfo.ts +++ b/apps/endringsmelding-pleiepenger/src/app/utils/getSakOgArbeidsgivereDebugInfo.ts @@ -1,5 +1,5 @@ import { DateRange } from '@navikt/sif-common-utils'; -import { Arbeidsgiver, K9Sak, K9SakArbeidstaker, Sak } from '@types'; +import { ArbeidsgiverMedAnsettelseperioder, K9Sak, K9SakArbeidstaker, Sak } from '@types'; import { maskString } from './maskString'; const maskK9Arbeidstaker = (k9Arbeidstaker: K9SakArbeidstaker) => { @@ -39,10 +39,9 @@ const maskSak = (sak: Sak) => { }; }; -const maskArbeidsgivere = (arbeidsgivere: Arbeidsgiver[]) => { +const maskArbeidsgivere = (arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[]) => { return arbeidsgivere.map((a) => ({ - ansattFom: a.ansattFom, - ansattTom: a.ansattTom, + ansettelsesperioder: a.ansettelsesperioder, a: maskString(a.key), })); }; @@ -50,7 +49,7 @@ const maskArbeidsgivere = (arbeidsgivere: Arbeidsgiver[]) => { export const getSakOgArbeidsgivereDebugInfo = ( k9sak: K9Sak, sak: Sak, - arbeidsgivere: Arbeidsgiver[], + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], endringsperiode: DateRange, ) => { return { diff --git a/apps/endringsmelding-pleiepenger/src/app/utils/initialDataUtils.ts b/apps/endringsmelding-pleiepenger/src/app/utils/initialDataUtils.ts index 7943fbf04f..fd3034e9fe 100644 --- a/apps/endringsmelding-pleiepenger/src/app/utils/initialDataUtils.ts +++ b/apps/endringsmelding-pleiepenger/src/app/utils/initialDataUtils.ts @@ -1,5 +1,8 @@ -import { DateRange } from '@navikt/sif-common-utils'; +import { DateRange, ISODateToDate, MaybeDateRange } from '@navikt/sif-common-utils'; import dayjs from 'dayjs'; +import { ArbeidsgiverMedAnsettelseperioder } from '../types'; +import { getArbeidsgiverKey } from './arbeidsgiverUtils'; +import { AARegArbeidsgiverOrganisasjon } from '../api/endpoints/arbeidsgivereEndpoint'; export const getPeriodeForArbeidsgiverOppslag = ( dateRangeAlleSaker: DateRange, @@ -14,3 +17,28 @@ export const getPeriodeForArbeidsgiverOppslag = ( } return dateRange; }; + +export const getArbeidsgivereFromArbeidsgiverOrganisasjoner = ( + organisasjoner: AARegArbeidsgiverOrganisasjon[], +): ArbeidsgiverMedAnsettelseperioder[] => { + const aaArbeidsgivereMap = new Map(); + (organisasjoner || []).forEach((a) => { + const ansettelsesperiode: MaybeDateRange = { + from: a.ansattFom ? ISODateToDate(a.ansattFom) : undefined, + to: a.ansattTom ? ISODateToDate(a.ansattTom) : undefined, + }; + + if (aaArbeidsgivereMap.has(a.organisasjonsnummer)) { + aaArbeidsgivereMap.get(a.organisasjonsnummer)!.ansettelsesperioder!.push(ansettelsesperiode); + } else { + aaArbeidsgivereMap.set(a.organisasjonsnummer, { + key: getArbeidsgiverKey(a.organisasjonsnummer), + organisasjonsnummer: a.organisasjonsnummer, + navn: a.navn, + ansettelsesperioder: [ansettelsesperiode], + }); + } + }); + + return Array.from(aaArbeidsgivereMap.values()); +}; diff --git a/apps/endringsmelding-pleiepenger/src/app/utils/k9SakUtils.ts b/apps/endringsmelding-pleiepenger/src/app/utils/k9SakUtils.ts index 7ca7be4b32..88ced6093d 100644 --- a/apps/endringsmelding-pleiepenger/src/app/utils/k9SakUtils.ts +++ b/apps/endringsmelding-pleiepenger/src/app/utils/k9SakUtils.ts @@ -1,5 +1,5 @@ import { DateRange, dateRangeUtils, getDateRangeFromDateRanges } from '@navikt/sif-common-utils'; -import { Arbeidsgiver, K9Sak, K9SakArbeidstaker } from '@types'; +import { ArbeidsgiverMedAnsettelseperioder, K9Sak, K9SakArbeidstaker } from '@types'; import dayjs from 'dayjs'; import isSameOrAfter from 'dayjs/plugin/isSameOrAfter'; @@ -15,7 +15,7 @@ export const getSamletDateRangeForK9Saker = (saker: K9Sak[]): DateRange | undefi }; export const finnesArbeidsgiverIK9Sak = ( - arbeidsgiver: Arbeidsgiver, + arbeidsgiver: ArbeidsgiverMedAnsettelseperioder, arbeidsgivereISak: K9SakArbeidstaker[], ): boolean => { return arbeidsgivereISak.some( diff --git "a/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/__tests__/getDataBruktTilUtledning.test.ts" "b/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/__tests__/getDataBruktTilUtledning.test.ts" index de4e266a2d..4e21bf310f 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/__tests__/getDataBruktTilUtledning.test.ts" +++ "b/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/__tests__/getDataBruktTilUtledning.test.ts" @@ -2,7 +2,7 @@ import { ISODateToDate } from '@navikt/sif-common-utils'; import { ArbeiderIPeriodenSvar, ArbeidsforholdAktivt, - Arbeidsgiver, + ArbeidsgiverMedAnsettelseperioder, ArbeidstidSøknadsdata, TimerEllerProsent, } from '../../../types'; @@ -31,12 +31,12 @@ describe('getDataBruktTilUtledningAnnetData', () => { }); describe('getUkjentArbeidsforholdApiDataFromSøknadsdata', () => { - const arbeidsgivere: Arbeidsgiver[] = [ + const arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[] = [ { organisasjonsnummer: '123', key: 'a_123', navn: 'Arbeidsgibvernavn', - ansattFom: ISODateToDate('2001-01-01'), + ansettelsesperioder: [{ from: ISODateToDate('2001-01-01') }], }, ]; const arbeidstid: ArbeidstidSøknadsdata = { @@ -58,11 +58,11 @@ describe('getUkjentArbeidsforholdApiDataFromSøknadsdata', () => { }); describe('mapArbeidsforholdToArbeidsforholdApiData', () => { - const arbeidsgiver: Arbeidsgiver = { + const arbeidsgiver: ArbeidsgiverMedAnsettelseperioder = { organisasjonsnummer: '123', key: 'a_123', navn: 'Arbeidsgibvernavn', - ansattFom: ISODateToDate('2001-01-01'), + ansettelsesperioder: [{ from: ISODateToDate('2001-01-01') }], }; it('returnerer riktig hvis en ikke er ansatt i arbeidsforholdet', () => { diff --git "a/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getApiDataFromS\303\270knadsdata.ts" "b/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getApiDataFromS\303\270knadsdata.ts" index ce5651523a..a351d43ce2 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getApiDataFromS\303\270knadsdata.ts" +++ "b/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getApiDataFromS\303\270knadsdata.ts" @@ -1,15 +1,16 @@ import { dateToISODate } from '@navikt/sif-common-utils'; -import { Arbeidsgiver, Sak, SøknadApiData, Søknadsdata, ValgteEndringer } from '@types'; +import { ArbeidsgiverMedAnsettelseperioder, Sak, SøknadApiData, Søknadsdata, ValgteEndringer } from '@types'; import { getArbeidstidApiDataFromSøknadsdata } from './getArbeidstidApiDataFromSøknadsdata'; import { getDataBruktTilUtledningAnnetDataApiData, getDataBruktTilUtledningApiData } from './getDataBruktTilUtledning'; import { getLovbestemtFerieApiDataFromSøknadsdata } from './getLovbestemtFerieApiDataFraSøknadsdata'; +import { getEndringsdato, getTillattEndringsperiode } from '../endringsperiode'; export const getApiDataFromSøknadsdata = ( søkerNorskIdent: string, søknadsdata: Søknadsdata, sak: Sak, valgteEndringer: ValgteEndringer, - arbeidsgivere: Arbeidsgiver[], + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], ): SøknadApiData | undefined => { const { id, arbeidstid, lovbestemtFerie, ukjentArbeidsforhold } = søknadsdata; @@ -31,6 +32,7 @@ export const getApiDataFromSøknadsdata = ( lovbestemtFerie: lovbestemtFerie ? getLovbestemtFerieApiDataFromSøknadsdata(lovbestemtFerie) : undefined, arbeidstid: arbeidstid ? getArbeidstidApiDataFromSøknadsdata( + getTillattEndringsperiode(getEndringsdato()), sak.søknadsperioder, arbeidstid.arbeidsaktivitet, sak.arbeidsaktiviteter, diff --git "a/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getArbeidstidApiDataFromS\303\270knadsdata.ts" "b/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getArbeidstidApiDataFromS\303\270knadsdata.ts" index 1b0f52d18d..319fd37e8a 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getArbeidstidApiDataFromS\303\270knadsdata.ts" +++ "b/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getArbeidstidApiDataFromS\303\270knadsdata.ts" @@ -13,7 +13,7 @@ import { Arbeidsaktiviteter, ArbeidsaktivitetType, ArbeiderIPeriodenSvar, - Arbeidsgiver, + ArbeidsgiverMedAnsettelseperioder, ArbeidstakerApiData, ArbeidstidApiData, ArbeidstidEndring, @@ -48,9 +48,9 @@ const getEndretArbeidstid = ( ): ArbeidstidPeriodeApiDataMap => { const perioderMedEndretArbeidstid: ArbeidstidPeriodeApiDataMap = {}; - const endringKeys = Object.keys(endringUkeMap).sort(); + const endringUkeKeys = Object.keys(endringUkeMap).sort(); - endringKeys.forEach((isoDateRange) => { + endringUkeKeys.forEach((isoDateRange) => { const endring = endringUkeMap[isoDateRange]; const arbeidsuker = getAlleArbeidsukerIPerioder(arbeidsaktivitet.perioderMedArbeidstid); const arbeidsuke = arbeidsuker[isoDateRange]; @@ -95,10 +95,11 @@ const getArbeidsaktivitetArbeidstidInfo = ( }; export const getArbeidstidApiDataFromSøknadsdata = ( + endringsperiode: DateRange, søknadsperioder: DateRange[], arbeidsaktivitetEndring: ArbeidstidArbeidsaktivitetMap, arbeidsaktiviteter: Arbeidsaktiviteter, - arbeidsgivereIkkeISak: Arbeidsgiver[], + arbeidsgivereIkkeISak: ArbeidsgiverMedAnsettelseperioder[], ukjentArbeidsforhold?: UkjentArbeidsforholdSøknadsdata, ): ArbeidstidApiData => { const frilansAktivitetEndring = arbeidsaktivitetEndring[ArbeidsaktivitetType.frilanser]?.endringer; @@ -148,6 +149,7 @@ export const getArbeidstidApiDataFromSøknadsdata = ( søknadsperioder, arbeidsgiver, arbeidsforhold, + endringsperiode, ); const arbeidsuker = getArbeidsukerIArbeidsaktivitet(arbeidsaktivitet); diff --git "a/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getDataBruktTilUtledning.ts" "b/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getDataBruktTilUtledning.ts" index 9d89b43b0f..e1adc0c196 100644 --- "a/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getDataBruktTilUtledning.ts" +++ "b/apps/endringsmelding-pleiepenger/src/app/utils/s\303\270knadsdataToApiData/getDataBruktTilUtledning.ts" @@ -2,7 +2,7 @@ import { durationToISODuration } from '@navikt/sif-common-utils'; import { ArbeiderIPeriodenSvar, Arbeidsforhold, - Arbeidsgiver, + ArbeidsgiverMedAnsettelseperioder, ArbeidstidSøknadsdata, DataBruktTilUtledningApiData, DataBruktTilUtledningApiDataAnnetData as DataBruktTilUtledningAnnetDataApiData, @@ -15,7 +15,7 @@ import { getOrgNummerFromArbeidsgiverKey } from '../arbeidsgiverUtils'; export const getDataBruktTilUtledningApiData = ( ukjentArbeidsforhold: UkjentArbeidsforholdSøknadsdata | undefined, arbeidstid: ArbeidstidSøknadsdata | undefined, - arbeidsgivere: Arbeidsgiver[], + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], ): DataBruktTilUtledningApiData => { return { ukjenteArbeidsforhold: getUkjentArbeidsforholdApiDataFromSøknadsdata( @@ -35,7 +35,7 @@ export const getDataBruktTilUtledningAnnetDataApiData = ( export const mapArbeidsforholdToArbeidsforholdApiData = ( arbeidsforhold: Arbeidsforhold, - arbeidsgiver: Arbeidsgiver, + arbeidsgiver: ArbeidsgiverMedAnsettelseperioder, arbeiderIPerioden?: ArbeiderIPeriodenSvar, ): UkjentArbeidsforholdApiData => { const organisasjonsnummer = getOrgNummerFromArbeidsgiverKey(arbeidsforhold.arbeidsgiverKey); @@ -63,7 +63,7 @@ export const mapArbeidsforholdToArbeidsforholdApiData = ( export const getUkjentArbeidsforholdApiDataFromSøknadsdata = ( ukjenteArbeidsforhold: Arbeidsforhold[] | undefined, arbeidstid: ArbeidstidSøknadsdata | undefined, - arbeidsgivere: Arbeidsgiver[], + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], ): UkjentArbeidsforholdApiData[] => { if (ukjenteArbeidsforhold === undefined) { return []; diff --git a/apps/endringsmelding-pleiepenger/src/app/utils/tilgangskontroll.ts b/apps/endringsmelding-pleiepenger/src/app/utils/tilgangskontroll.ts index c6e621285e..68c819c4fa 100644 --- a/apps/endringsmelding-pleiepenger/src/app/utils/tilgangskontroll.ts +++ b/apps/endringsmelding-pleiepenger/src/app/utils/tilgangskontroll.ts @@ -1,6 +1,6 @@ -import { DateRange, durationToDecimalDuration } from '@navikt/sif-common-utils'; +import { DateRange, durationToDecimalDuration, ensureDateRange, sortDateRange } from '@navikt/sif-common-utils'; import { - Arbeidsgiver, + ArbeidsgiverMedAnsettelseperioder, IngenTilgangÅrsak, K9Sak, K9SakArbeidstaker, @@ -26,7 +26,11 @@ type TilgangTillatt = { export type TilgangKontrollResultat = TilgangNektet | TilgangTillatt; -export const tilgangskontroll = (saker: K9Sak[], tillattEndringsperiode: DateRange): TilgangKontrollResultat => { +export const tilgangskontroll = ( + saker: K9Sak[], + tillattEndringsperiode: DateRange, + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], +): TilgangKontrollResultat => { /** Har ingen saker */ if (saker.length === 0) { return { @@ -57,6 +61,16 @@ export const tilgangskontroll = (saker: K9Sak[], tillattEndringsperiode: DateRan ingenTilgangÅrsak.push(IngenTilgangÅrsak.harArbeidstidSomSelvstendigNæringsdrivende); } + /** Bruker har ansettelsperioder hos samme arbeidsgiver som starter og stopper samme uke, med opphold mellom */ + if (harAnsettelsesforholdSomStarterOgSlutterSammeUkeMedOpphold(sak, tillattEndringsperiode, arbeidsgivere)) { + ingenTilgangÅrsak.push(IngenTilgangÅrsak.enArbeidsgiverToAnsettelserSammeUkeMedOpphold); + } + + /** Bruker har flere ansettelsperioder hos ukjent arbeidsgiver */ + if (harFlereAnsettelsesforholdHosUkjentArbeidsgiver(arbeidsgivere, sak.ytelse.arbeidstid.arbeidstakerList)) { + ingenTilgangÅrsak.push(IngenTilgangÅrsak.harFlereAnsettelsesforholdHosUkjentArbeidsgiver); + } + if (ingenTilgangÅrsak.length > 0) { return { kanBrukeSøknad: false, @@ -91,12 +105,16 @@ const getIngenTilgangMeta = (arbeidstid: K9SakArbeidstid): IngenTilgangMeta => { }; }; -const harArbeidsgiverUtenArbeidsaktivitet = ( - arbeidsgivere: Arbeidsgiver[], +const harFlereAnsettelsesforholdHosUkjentArbeidsgiver = ( + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], k9SakArbeidstaker: K9SakArbeidstaker[] = [], ): boolean => { return arbeidsgivere.some((arbeidsgiver) => { - return finnesArbeidsgiverIK9Sak(arbeidsgiver, k9SakArbeidstaker) === false; + const erUkjentArbeidsgiver = finnesArbeidsgiverIK9Sak(arbeidsgiver, k9SakArbeidstaker) === false; + if (!erUkjentArbeidsgiver) { + return false; + } + return arbeidsgiver.ansettelsesperioder.length > 1; }); }; @@ -114,8 +132,51 @@ const harSøknadsperiodeInnenforTillattEndringsperiode = ( : false; }; +const harAnsettelsesforholdSomStarterOgSlutterSammeUkeMedOpphold = ( + sak: K9Sak, + tillattEndringsperiode: DateRange, + arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[], +): boolean => { + const orgnrISak = (sak.ytelse.arbeidstid.arbeidstakerList || []).map((a) => a.organisasjonsnummer); + return arbeidsgivere + .filter((a) => orgnrISak.includes(a.organisasjonsnummer)) + .some((arbeidsgiver) => { + const ansettelserInnenforEndringsperiode = arbeidsgiver.ansettelsesperioder.map((d) => + ensureDateRange(d, tillattEndringsperiode), + ); + return perioderSlutterOgStarterSammeUkeMedOpphold(ansettelserInnenforEndringsperiode); + }); +}; + +/** + * Går gjennom array for å se om det er perioder som slutter og starter innenfor samme + * uke, og hvor det er opphold på en dag mellom periodene. + * @param ansettelsesperioder DateRange + * @returns boolean + */ +const perioderSlutterOgStarterSammeUkeMedOpphold = (ansettelsesperioder: DateRange[]) => { + return ansettelsesperioder.sort(sortDateRange).some((periode, index) => { + if (index === 0) { + return false; + } + const forrigePeriode = ansettelsesperioder[index - 1]; + + /** Slutter og starter periodene innenfor samme uke */ + if (!dayjs(periode.from).isSame(dayjs(forrigePeriode.to), 'isoWeek')) { + return false; + } + /** Periodene er sammenhengende */ + if (dayjs(periode.from).diff(forrigePeriode.to, 'day') === 1) { + return false; + } + + return true; + }); +}; + export const tilgangskontrollUtils = { getIngenTilgangMeta, - harArbeidsgiverUtenArbeidsaktivitet, harSøknadsperiodeInnenforTillattEndringsperiode, + harFlereAnsettelsesforholdHosUkjentArbeidsgiver, + perioderSlutterOgStarterSammeUkeMedOpphold, }; diff --git a/apps/endringsmelding-pleiepenger/src/app/utils/ukjentArbeidsforholdUtils.ts b/apps/endringsmelding-pleiepenger/src/app/utils/ukjentArbeidsforholdUtils.ts index 9e07727350..c34c7c5399 100644 --- a/apps/endringsmelding-pleiepenger/src/app/utils/ukjentArbeidsforholdUtils.ts +++ b/apps/endringsmelding-pleiepenger/src/app/utils/ukjentArbeidsforholdUtils.ts @@ -3,6 +3,7 @@ import { dateRangeToISODateRange, dateToISODate, Duration, + ensureDateRange, getDateRangeFromDateRanges, getDateRangesWithinDateRange, getDatesInDateRange, @@ -13,7 +14,7 @@ import { Arbeidsaktivitet, ArbeidsaktivitetType, ArbeidsforholdAktivt, - Arbeidsgiver, + ArbeidsgiverMedAnsettelseperioder, ArbeidstidEnkeltdagMap, ArbeidstidPerDag, ArbeidsukeMap, @@ -21,8 +22,9 @@ import { UkjentArbeidsforholdSøknadsdata, } from '@types'; import { ArbeidsaktivitetFormValuesMap } from '../søknad/steps/arbeidstid/ArbeidstidForm'; -import { getArbeidsukeFromEnkeltdagerIUken } from './arbeidsukeUtils'; +// import { getArbeidsukeFromEnkeltdagerIUken } from './arbeidsukeUtils'; import { beregnSnittTimerPerDag } from './beregnUtils'; +import { getArbeidsukeFromEnkeltdagerIUken } from './getSakFromK9Sak'; export const getSøknadsperioderForUkjentArbeidsforhold = ( søknadsperioder: DateRange[], @@ -30,6 +32,7 @@ export const getSøknadsperioderForUkjentArbeidsforhold = ( ansattTom: Date | undefined, ): DateRange[] => { const alleSøknadsperioder: DateRange = getDateRangeFromDateRanges(søknadsperioder); + /** TODO - sjekke denne opp mot flere ansattelsesperioder */ const ansettelsesperiode = { from: ansattFom || alleSøknadsperioder.from, to: ansattTom || alleSøknadsperioder.to, @@ -39,15 +42,16 @@ export const getSøknadsperioderForUkjentArbeidsforhold = ( export const getPerioderMedArbeidstidForUkjentArbeidsforhold = ( søknadsperioder: DateRange[], - { ansattFom, ansattTom }: Arbeidsgiver, + ansettelsesperiode: DateRange, normalarbeidstidPerUke: Duration, faktiskArbeidstidPerUke: Duration | undefined, ): PeriodeMedArbeidstid[] => { const søknadsperioderForArbeidsforhold = getSøknadsperioderForUkjentArbeidsforhold( søknadsperioder, - ansattFom, - ansattTom, + ansettelsesperiode.from, + ansettelsesperiode.to, ); + const perioderMedArbeidstid: PeriodeMedArbeidstid[] = []; const arbeidstidPerDag: ArbeidstidPerDag = { @@ -62,7 +66,9 @@ export const getPerioderMedArbeidstidForUkjentArbeidsforhold = ( getDatesInDateRange(uke, true).forEach((date) => { enkeldagerMap[dateToISODate(date)] = arbeidstidPerDag; }); - arbeidsuker[dateRangeToISODateRange(uke)] = getArbeidsukeFromEnkeltdagerIUken(uke, enkeldagerMap); + if (Object.keys(enkeldagerMap).length > 0) { + arbeidsuker[dateRangeToISODateRange(uke)] = getArbeidsukeFromEnkeltdagerIUken(uke, enkeldagerMap); + } }); perioderMedArbeidstid.push({ arbeidsuker, @@ -87,13 +93,27 @@ export const getFaktiskArbeidstidPerUkeForUkjentArbeidsforhold = ( } }; +/** + * Henter ut Arbeidsaktiviet for ukjent arbeidsforhold + * @param søknadsperioder Alle perioder som er søkt for + * @param arbeidsgiver Arbeidsgiveren det gjelder som ikke er registrert i sak + * @param arbeidsforhold Arbeidsforhold utledet tidligere - holder om en er ansatt eller ikke, og evt. normalarbeidstid. Hentes på eget steg + * @param endringsperiode tidsrommet som en kan gjøre endringer i + * @param arbeiderIPerioden om bruker sier en arbeider, arbeider delvis eller arbeider ikke i perioden + * @returns Arbeidsaktivitet + */ export const getArbeidsaktivitetForUkjentArbeidsforhold = ( søknadsperioder: DateRange[], - arbeidsgiver: Arbeidsgiver, + arbeidsgiver: ArbeidsgiverMedAnsettelseperioder, arbeidsforhold: ArbeidsforholdAktivt, + endringsperiode: DateRange, arbeiderIPerioden?: ArbeiderIPeriodenSvar, ): Arbeidsaktivitet => { const faktiskArbeidstid = getFaktiskArbeidstidPerUkeForUkjentArbeidsforhold(arbeidsforhold, arbeiderIPerioden); + if (arbeidsgiver.ansettelsesperioder.length !== 1) { + throw 'Ukjent arbeidsforhold kan kun ha en ansettelsesperiode'; + } + const ansettelsesperiode = ensureDateRange(arbeidsgiver.ansettelsesperioder[0], endringsperiode); const aktivitet: Arbeidsaktivitet = { key: arbeidsgiver.key, @@ -103,9 +123,10 @@ export const getArbeidsaktivitetForUkjentArbeidsforhold = ( navn: arbeidsgiver.navn, harPerioderEtterTillattEndringsperiode: false, harPerioderFørTillattEndringsperiode: false, + ansettelsesperioderInnenforEndringsperiode: [ansettelsesperiode], perioderMedArbeidstid: getPerioderMedArbeidstidForUkjentArbeidsforhold( søknadsperioder, - arbeidsgiver, + ansettelsesperiode, arbeidsforhold.normalarbeidstid.timerPerUke, faktiskArbeidstid, ), @@ -115,8 +136,9 @@ export const getArbeidsaktivitetForUkjentArbeidsforhold = ( export const getArbeidsaktiviteterForUkjenteArbeidsforhold = ( søknadsperioder: DateRange[], - arbeidsgivereIkkeISak: Arbeidsgiver[], + arbeidsgivereIkkeISak: ArbeidsgiverMedAnsettelseperioder[], arbeidsaktivitetFormValues: ArbeidsaktivitetFormValuesMap, + endringsperiode: DateRange, ukjentArbeidsforhold?: UkjentArbeidsforholdSøknadsdata, ): Arbeidsaktivitet[] => { const aktiviteter: Arbeidsaktivitet[] = []; @@ -134,6 +156,7 @@ export const getArbeidsaktiviteterForUkjenteArbeidsforhold = ( søknadsperioder, arbeidsgiver, arbeidsforhold, + endringsperiode, arbeiderIPerioden, ), ); diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/app/arbeidsukerMockData.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/app/arbeidsukerMockData.ts index a82e19841e..2891baf704 100644 --- a/apps/endringsmelding-pleiepenger/src/mocks/data/app/arbeidsukerMockData.ts +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/app/arbeidsukerMockData.ts @@ -7,6 +7,7 @@ import { getDatesInDateRange, ISODateRange, ISODateRangeToDateRange, + ISODateToDate, } from '@navikt/sif-common-utils'; import { ArbeidstidEnkeltdagMap, Arbeidsuke } from '@types'; @@ -33,6 +34,7 @@ const getMockArbeidsuke = ( isoDateRange, periode, arbeidstidEnkeltdager, + dagerSøktFor: dagerSøktFor.map(ISODateToDate), normalt: { uke: decimalDurationToDuration(durationToDecimalDuration(normaltPerDag) * antallDagerMedArbeidstid), dag: normaltPerDag, diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/ArbeidsgiverIkkeISakFlereAnsettelser.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/ArbeidsgiverIkkeISakFlereAnsettelser.ts new file mode 100644 index 0000000000..acb4dd2797 --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/ArbeidsgiverIkkeISakFlereAnsettelser.ts @@ -0,0 +1,10 @@ +import { ScenarioData } from '..'; +import arbeidsgiver from './arbeidsgiver-mock'; +import sak from './sak-mock'; +import søker from './søker-mock'; + +export const ArbeidsgiverIkkeISakFlereAnsettelser: ScenarioData = { + sak, + arbeidsgiver, + søker, +}; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/arbeidsgiver-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/arbeidsgiver-mock.ts new file mode 100644 index 0000000000..a45b295c82 --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/arbeidsgiver-mock.ts @@ -0,0 +1,8 @@ +export default { + organisasjoner: [ + { navn: 'Dykkert svømmeutstyr', organisasjonsnummer: '947064649', ansattFom: '2008-10-01' }, + { navn: 'Vinge flyfly', organisasjonsnummer: '947064640', ansattFom: '2008-10-01' }, + { navn: 'IKKE-I-SAK-AS 1', organisasjonsnummer: '947064642', ansattFom: '2023-02-05', ansattTom: '2023-04-05' }, + { navn: 'IKKE-I-SAK-AS 1', organisasjonsnummer: '947064642', ansattFom: '2023-04-06' }, + ], +}; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/sak-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/sak-mock.ts new file mode 100644 index 0000000000..5f9c1a3f8f --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/sak-mock.ts @@ -0,0 +1,343 @@ +export default [ + { + barn: { + fødselsdato: '2017-03-03', + fornavn: 'NORA', + mellomnavn: null, + etternavn: 'Nordmann', + aktørId: '2559652436225', + identitetsnummer: '03831799748', + }, + søknad: { + søknadId: 'generert', + versjon: '1.0.0.', + mottattDato: '2023-01-18T08:13:37.525Z', + søker: { norskIdentitetsnummer: '00000000000' }, + ytelse: { + type: 'PLEIEPENGER_SYKT_BARN', + barn: { norskIdentitetsnummer: '00000000000', fødselsdato: null }, + søknadsperiode: ['2022-01-01/2024-09-31'], + endringsperiode: [], + trekkKravPerioder: [], + opptjeningAktivitet: {}, + dataBruktTilUtledning: null, + infoFraPunsj: null, + bosteder: { perioder: {}, perioderSomSkalSlettes: {} }, + utenlandsopphold: { perioder: {}, perioderSomSkalSlettes: {} }, + beredskap: { perioder: {}, perioderSomSkalSlettes: {} }, + nattevåk: { perioder: {}, perioderSomSkalSlettes: {} }, + tilsynsordning: { + perioder: { + '2022-12-01/2023-01-31': { etablertTilsynTimerPerDag: 'PT8H' }, + '2023-02-14/2023-03-16': { etablertTilsynTimerPerDag: 'PT8H' }, + }, + }, + lovbestemtFerie: { + perioder: { + '2023-01-12/2023-01-15': { + skalHaFerie: false, + }, + }, + }, + arbeidstid: { + arbeidstakerList: [ + { + norskIdentitetsnummer: null, + organisasjonsnummer: '947064649', + arbeidstidInfo: { + perioder: { + '2022-01-01/2022-03-25': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-03-28/2022-04-01': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-04-04/2022-04-08': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-04-11/2022-04-15': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-04-18/2022-04-22': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-04-25/2022-04-29': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-05-02/2022-05-06': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-05-09/2022-05-13': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-05-16/2022-05-20': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-05-23/2022-05-27': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-05-30/2022-06-03': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-06-06/2022-06-10': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-06-13/2022-06-17': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-06-20/2022-06-24': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-06-27/2022-06-30': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-07-01/2022-07-01': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-07-04/2022-07-07': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-07-08/2022-07-08': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-07-11/2022-07-14': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-07-15/2022-07-15': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-07-18/2022-07-21': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-07-22/2022-07-22': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-07-25/2022-07-28': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-07-29/2022-07-29': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-08-01/2022-08-04': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-08-05/2022-08-05': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-08-08/2022-08-11': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-08-12/2022-08-12': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-08-15/2022-08-18': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-08-19/2022-08-19': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-08-22/2022-08-25': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-08-26/2022-08-26': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-08-29/2022-08-31': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-09-01/2022-09-01': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT3H', + }, + '2022-09-02/2022-09-02': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT4H30M', + }, + '2022-09-05/2022-09-05': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-09-06/2022-09-06': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT2H30M', + }, + '2022-09-07/2022-09-08': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-09-09/2022-09-09': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT5H', + }, + '2022-09-12/2022-09-13': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-09-14/2022-09-14': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT4H', + }, + '2022-09-15/2022-09-15': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT3H30M', + }, + '2022-09-16/2022-09-16': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-09-19/2022-09-22': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-09-23/2022-09-23': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-09-26/2022-09-29': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2022-09-30/2022-09-30': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT7H30M', + }, + '2022-10-03/2024-12-30': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + }, + }, + }, + { + norskIdentitetsnummer: null, + organisasjonsnummer: '947064640', + arbeidstidInfo: { + perioder: { + '2022-09-01/2022-09-30': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2022-10-03/2022-12-30': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2023-01-01/2023-01-15': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + '2023-01-16/2023-03-12': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT4H30M', + }, + '2023-03-13/2023-09-31': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT1H30M', + }, + }, + }, + }, + ], + frilanserArbeidstidInfo: { + perioder: { + '2022-06-25/2022-12-31': { + jobberNormaltTimerPerDag: 'PT0S', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2023-01-02/2023-01-06': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2023-01-09/2023-01-13': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2023-01-16/2023-01-20': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT3H', + }, + '2023-01-23/2023-01-27': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT3H', + }, + '2023-01-30/2023-02-03': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT3H', + }, + '2023-02-06/2023-02-10': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT3H', + }, + '2023-02-13/2023-02-17': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT3H', + }, + '2023-02-20/2023-02-24': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT3H', + }, + '2023-02-27/2023-03-03': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT3H', + }, + '2023-03-06/2023-03-10': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT3H', + }, + '2023-03-13/2023-03-17': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2023-03-20/2023-03-24': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2023-03-27/2023-09-31': { + jobberNormaltTimerPerDag: 'PT3H', + faktiskArbeidTimerPerDag: 'PT0S', + }, + }, + }, + selvstendigNæringsdrivendeArbeidstidInfo: {}, + }, + uttak: { perioder: {} }, + omsorg: { relasjonTilBarnet: null, beskrivelseAvOmsorgsrollen: null }, + }, + språk: 'nb', + journalposter: [], + begrunnelseForInnsending: { tekst: null }, + }, + }, +]; diff --git "a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/s\303\270ker-mock.ts" "b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/s\303\270ker-mock.ts" new file mode 100644 index 0000000000..2dd3e1c484 --- /dev/null +++ "b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak-flere-ansettelser/s\303\270ker-mock.ts" @@ -0,0 +1,8 @@ +export default { + aktørId: '234', + fødselsnummer: '30086421581', + fødselsdato: '2001-02-01', + fornavn: 'NORA', + mellomnavn: null, + etternavn: 'KRONJUVEL', +}; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak/arbeidsgiver-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak/arbeidsgiver-mock.ts index d1f2d8394d..767079758f 100644 --- a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak/arbeidsgiver-mock.ts +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/arbeidsgiver-ikke-i-sak/arbeidsgiver-mock.ts @@ -2,7 +2,7 @@ export default { organisasjoner: [ { navn: 'Dykkert svømmeutstyr', organisasjonsnummer: '947064649', ansattFom: '2008-10-01' }, { navn: 'Vinge flyfly', organisasjonsnummer: '947064640', ansattFom: '2008-10-01' }, - { navn: 'IKKE-I-SAK-AS 1', organisasjonsnummer: '947064642', ansattFom: '2023-02-01' }, + { navn: 'IKKE-I-SAK-AS 1', organisasjonsnummer: '947064642', ansattFom: '2023-02-05' }, { navn: 'IKKE-I-SAK-AS 2', organisasjonsnummer: '947064643', ansattFom: '2023-02-01' }, ], }; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/arbeidsgiver-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/arbeidsgiver-mock.ts index a5c1abb86b..f1f6838bf5 100644 --- a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/arbeidsgiver-mock.ts +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/arbeidsgiver-mock.ts @@ -1,5 +1,8 @@ export default { - organisasjoner: [], - privateArbeidsgivere: null, - frilansoppdrag: null, + frilansoppdrag: [], + organisasjoner: [ + { ansattFom: '2005-01-09', ansattTom: '2024-11-01', navn: 'SAUEFABRIKK', organisasjonsnummer: '896929119' }, + { ansattFom: '2024-12-12', ansattTom: null, navn: 'SAUEFABRIKK', organisasjonsnummer: '896929119' }, + ], + privateArbeidsgivere: [], }; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/sak-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/sak-mock.ts index b341db01ac..23b0466153 100644 --- a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/sak-mock.ts +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/sak-mock.ts @@ -1,28 +1,28 @@ export default [ { barn: { - fødselsdato: '2008-07-27', - fornavn: 'RAVGUL', + fødselsdato: '2023-01-24', + fornavn: 'GEOMETRISK', mellomnavn: null, - etternavn: 'LØVETANN', - aktørId: '2175638020356', - identitetsnummer: '27870899799', + etternavn: 'RIST', + aktørId: '2487158514882', + identitetsnummer: '24412358038', }, søknad: { søknadId: 'generert', versjon: '1.0.0', - mottattDato: '2024-12-10T08:47:11.929Z', + mottattDato: '2025-01-24T07:51:23.794Z', søker: { norskIdentitetsnummer: '00000000000', }, - språk: null, + språk: 'nb', ytelse: { type: 'PLEIEPENGER_SYKT_BARN', barn: { norskIdentitetsnummer: '00000000000', fødselsdato: null, }, - søknadsperiode: ['2024-12-03/2024-12-05'], + søknadsperiode: ['2024-11-01/2025-02-28'], endringsperiode: [], trekkKravPerioder: [], opptjeningAktivitet: {}, @@ -47,23 +47,37 @@ export default [ }, tilsynsordning: { perioder: { - '2024-12-03/2024-12-05': { + '2024-11-01/2025-02-28': { etablertTilsynTimerPerDag: 'PT0S', }, }, }, lovbestemtFerie: { - perioder: { - '2024-12-04/2024-12-05': { - skalHaFerie: false, - }, - }, + perioder: {}, }, arbeidstid: { - arbeidstakerList: [], + arbeidstakerList: [ + { + norskIdentitetsnummer: null, + organisasjonsnummer: '896929119', + organisasjonsnavn: null, + arbeidstidInfo: { + perioder: { + '2024-11-01/2024-11-30': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2024-12-01/2025-02-28': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT0S', + }, + }, + }, + }, + ], frilanserArbeidstidInfo: { perioder: { - '2024-12-03/2024-12-05': { + '2024-11-01/2025-02-28': { jobberNormaltTimerPerDag: 'PT0S', faktiskArbeidTimerPerDag: 'PT0S', }, diff --git "a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/s\303\270ker-mock.ts" "b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/s\303\270ker-mock.ts" index b80d44748e..0921da2df9 100644 --- "a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/s\303\270ker-mock.ts" +++ "b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/debug/s\303\270ker-mock.ts" @@ -1,9 +1,8 @@ export default { - aktørId: '2486083225079', - fødselsdato: '1987-10-09', - fødselsnummer: '09908799647', - fornavn: 'NORA', + aktørId: '2912771641580', + etternavn: 'FJORD', + fornavn: 'TØFF', + fødselsdato: '1983-05-26', + fødselsnummer: '26458341337', mellomnavn: null, - etternavn: 'Etternavn', - myndig: true, }; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/EnArbeidsgiverToAnsettelserSammeUkeMedOpphold.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/EnArbeidsgiverToAnsettelserSammeUkeMedOpphold.ts new file mode 100644 index 0000000000..64031f82f0 --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/EnArbeidsgiverToAnsettelserSammeUkeMedOpphold.ts @@ -0,0 +1,10 @@ +import { ScenarioData } from '..'; +import arbeidsgiver from './arbeidsgiver-mock'; +import sak from './sak-mock'; +import søker from './søker-mock'; + +export const EnArbeidsgiverToAnsettelserSammeUkeMedOpphold: ScenarioData = { + sak, + arbeidsgiver, + søker, +}; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/arbeidsgiver-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/arbeidsgiver-mock.ts new file mode 100644 index 0000000000..a148bdd78a --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/arbeidsgiver-mock.ts @@ -0,0 +1,18 @@ +export default { + organisasjoner: [ + { + organisasjonsnummer: '947064649', + navn: 'Norsk bedrift AS', + ansattFom: '2003-01-16', + ansattTom: '2022-01-11', + }, + { + organisasjonsnummer: '947064649', + navn: 'Norsk bedrift AS', + ansattFom: '2022-01-13', + ansattTom: null, + }, + ], + privateArbeidsgivere: null, + frilansoppdrag: null, +}; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/sak-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/sak-mock.ts new file mode 100644 index 0000000000..8b2cc9fe4d --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/sak-mock.ts @@ -0,0 +1,114 @@ +export default [ + { + barn: { + fødselsdato: '2017-03-03', + fornavn: 'NORA', + mellomnavn: null, + etternavn: 'Nordmann', + aktørId: '2559652436225', + identitetsnummer: '03831799748', + }, + søknad: { + søknadId: 'generert', + versjon: '1.0.0.', + mottattDato: '2023-01-18T08:13:37.525Z', + søker: { norskIdentitetsnummer: '00000000000' }, + ytelse: { + type: 'PLEIEPENGER_SYKT_BARN', + barn: { norskIdentitetsnummer: '00000000000', fødselsdato: null }, + søknadsperiode: ['2022-12-01/2024-05-31'], + endringsperiode: [], + trekkKravPerioder: [], + opptjeningAktivitet: {}, + dataBruktTilUtledning: null, + infoFraPunsj: null, + bosteder: { perioder: {}, perioderSomSkalSlettes: {} }, + utenlandsopphold: { + perioder: { + '2018-12-30/2019-10-20': { + land: 'DNK', + årsak: 'barnetInnlagtIHelseinstitusjonForNorskOffentligRegning', + }, + }, + }, + beredskap: { perioder: {}, perioderSomSkalSlettes: {} }, + nattevåk: { perioder: {}, perioderSomSkalSlettes: {} }, + tilsynsordning: { + perioder: { + '2022-12-01/2023-01-31': { etablertTilsynTimerPerDag: 'PT8H' }, + '2023-02-14/2023-03-16': { etablertTilsynTimerPerDag: 'PT8H' }, + }, + }, + lovbestemtFerie: { + perioder: { + '2023-01-01/2023-01-10': { + skalHaFerie: true, + }, + '2023-01-12/2023-01-15': { + skalHaFerie: false, + }, + }, + }, + arbeidstid: { + arbeidstakerList: [ + { + norskIdentitetsnummer: null, + organisasjonsnummer: '947064649', + arbeidstidInfo: { + perioder: { + '2022-12-01/2022-12-02': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2022-12-05/2022-12-09': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2022-12-12/2022-12-16': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2022-12-19/2022-12-23': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2022-12-26/2022-12-30': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2023-01-02/2023-01-06': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2023-01-09/2023-01-13': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2023-01-16/2023-01-20': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2023-01-23/2023-01-27': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2023-01-30/2024-05-31': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + }, + }, + }, + ], + frilanserArbeidstidInfo: {}, + selvstendigNæringsdrivendeArbeidstidInfo: {}, + }, + uttak: { perioder: {} }, + omsorg: { relasjonTilBarnet: null, beskrivelseAvOmsorgsrollen: null }, + }, + språk: 'nb', + journalposter: [], + begrunnelseForInnsending: { tekst: null }, + }, + }, +]; diff --git "a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/s\303\270ker-mock.ts" "b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/s\303\270ker-mock.ts" new file mode 100644 index 0000000000..b80d44748e --- /dev/null +++ "b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/s\303\270ker-mock.ts" @@ -0,0 +1,9 @@ +export default { + aktørId: '2486083225079', + fødselsdato: '1987-10-09', + fødselsnummer: '09908799647', + fornavn: 'NORA', + mellomnavn: null, + etternavn: 'Etternavn', + myndig: true, +}; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/EnArbeidsgiverToAnsettelserSammeUkeUtenOpphold.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/EnArbeidsgiverToAnsettelserSammeUkeUtenOpphold.ts new file mode 100644 index 0000000000..579142c282 --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/EnArbeidsgiverToAnsettelserSammeUkeUtenOpphold.ts @@ -0,0 +1,10 @@ +import { ScenarioData } from '..'; +import arbeidsgiver from './arbeidsgiver-mock'; +import sak from './sak-mock'; +import søker from './søker-mock'; + +export const EnArbeidsgiverToAnsettelserSammeUkeUtenOpphold: ScenarioData = { + sak, + arbeidsgiver, + søker, +}; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/arbeidsgiver-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/arbeidsgiver-mock.ts new file mode 100644 index 0000000000..049ad63a0c --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/arbeidsgiver-mock.ts @@ -0,0 +1,18 @@ +export default { + organisasjoner: [ + { + organisasjonsnummer: '947064649', + navn: 'Norsk bedrift AS', + ansattFom: '2003-01-16', + ansattTom: '2022-12-05', + }, + { + organisasjonsnummer: '947064649', + navn: 'Norsk bedrift AS', + ansattFom: '2023-01-01', + ansattTom: null, + }, + ], + privateArbeidsgivere: null, + frilansoppdrag: null, +}; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/sak-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/sak-mock.ts new file mode 100644 index 0000000000..8b2cc9fe4d --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/sak-mock.ts @@ -0,0 +1,114 @@ +export default [ + { + barn: { + fødselsdato: '2017-03-03', + fornavn: 'NORA', + mellomnavn: null, + etternavn: 'Nordmann', + aktørId: '2559652436225', + identitetsnummer: '03831799748', + }, + søknad: { + søknadId: 'generert', + versjon: '1.0.0.', + mottattDato: '2023-01-18T08:13:37.525Z', + søker: { norskIdentitetsnummer: '00000000000' }, + ytelse: { + type: 'PLEIEPENGER_SYKT_BARN', + barn: { norskIdentitetsnummer: '00000000000', fødselsdato: null }, + søknadsperiode: ['2022-12-01/2024-05-31'], + endringsperiode: [], + trekkKravPerioder: [], + opptjeningAktivitet: {}, + dataBruktTilUtledning: null, + infoFraPunsj: null, + bosteder: { perioder: {}, perioderSomSkalSlettes: {} }, + utenlandsopphold: { + perioder: { + '2018-12-30/2019-10-20': { + land: 'DNK', + årsak: 'barnetInnlagtIHelseinstitusjonForNorskOffentligRegning', + }, + }, + }, + beredskap: { perioder: {}, perioderSomSkalSlettes: {} }, + nattevåk: { perioder: {}, perioderSomSkalSlettes: {} }, + tilsynsordning: { + perioder: { + '2022-12-01/2023-01-31': { etablertTilsynTimerPerDag: 'PT8H' }, + '2023-02-14/2023-03-16': { etablertTilsynTimerPerDag: 'PT8H' }, + }, + }, + lovbestemtFerie: { + perioder: { + '2023-01-01/2023-01-10': { + skalHaFerie: true, + }, + '2023-01-12/2023-01-15': { + skalHaFerie: false, + }, + }, + }, + arbeidstid: { + arbeidstakerList: [ + { + norskIdentitetsnummer: null, + organisasjonsnummer: '947064649', + arbeidstidInfo: { + perioder: { + '2022-12-01/2022-12-02': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2022-12-05/2022-12-09': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2022-12-12/2022-12-16': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2022-12-19/2022-12-23': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2022-12-26/2022-12-30': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2023-01-02/2023-01-06': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2023-01-09/2023-01-13': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2023-01-16/2023-01-20': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2023-01-23/2023-01-27': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + '2023-01-30/2024-05-31': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT4H32M24S', + }, + }, + }, + }, + ], + frilanserArbeidstidInfo: {}, + selvstendigNæringsdrivendeArbeidstidInfo: {}, + }, + uttak: { perioder: {} }, + omsorg: { relasjonTilBarnet: null, beskrivelseAvOmsorgsrollen: null }, + }, + språk: 'nb', + journalposter: [], + begrunnelseForInnsending: { tekst: null }, + }, + }, +]; diff --git "a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/s\303\270ker-mock.ts" "b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/s\303\270ker-mock.ts" new file mode 100644 index 0000000000..b80d44748e --- /dev/null +++ "b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/s\303\270ker-mock.ts" @@ -0,0 +1,9 @@ +export default { + aktørId: '2486083225079', + fødselsdato: '1987-10-09', + fødselsnummer: '09908799647', + fornavn: 'NORA', + mellomnavn: null, + etternavn: 'Etternavn', + myndig: true, +}; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-perioder/arbeidsgiver-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-perioder/arbeidsgiver-mock.ts index 74e2a56eec..d96164a10d 100644 --- a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-perioder/arbeidsgiver-mock.ts +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/en-arbeidsgiver-to-perioder/arbeidsgiver-mock.ts @@ -4,7 +4,6 @@ export default { organisasjonsnummer: '947064649', navn: 'Norsk bedrift AS', ansattFom: '2003-01-16', - ansattTom: null, }, ], privateArbeidsgivere: null, diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/index.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/index.ts index d07e3ca605..834fc633e5 100644 --- a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/index.ts +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/index.ts @@ -1,19 +1,20 @@ import { ScenarioType } from '../../../app/dev/scenarioer'; import { ArbeidsaktivitetUtenArbeidsgiver } from './arbeidsaktivitet-uten-arbeidsgiver/ArbeidsaktivitetUtenArbeidsgiver'; +import { ArbeidsgiverIkkeISakFlereAnsettelser } from './arbeidsgiver-ikke-i-sak-flere-ansettelser/ArbeidsgiverIkkeISakFlereAnsettelser'; import { ArbeidsgiverIkkeISak } from './arbeidsgiver-ikke-i-sak/ArbeidsgiverIkkeISak'; import { ArbeidsgiverOgFrilanser } from './arbeidsgiver-og-frilanser/ArbeidsgiverOgFrilanser'; import { ArbeidsgivereOgFrilanser } from './arbeidsgivere-og-frilanser/ArbeidsgivereOgFrilanser'; import { Debug } from './debug/Debug'; import { EnArbeidsgiverEnPeriode } from './en-arbeidsgiver-en-periode/EnArbeidsgiverEnPeriode'; +import { EnArbeidsgiverToAnsettelserSammeUkeMedOpphold } from './en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold/EnArbeidsgiverToAnsettelserSammeUkeMedOpphold'; +import { EnArbeidsgiverToAnsettelserSammeUkeUtenOpphold } from './en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold/EnArbeidsgiverToAnsettelserSammeUkeUtenOpphold'; import { EnArbeidsgiverToPerioder } from './en-arbeidsgiver-to-perioder/EnArbeidsgiverToPerioder'; import { FlereSaker } from './flere-saker/FlereSaker'; import { IngenSak } from './ingen-sak/IngenSak'; import { SelvstendigNæringsdrivende } from './selvstendig-næringsdrivende/SelvstendigNæringsdrivende'; import { UgyldigK9Format } from './ugyldig-k9-format/UgyldigK9Format'; -type ScenarioMap = { - [key: string]: ScenarioData; -}; +type ScenarioMap = Record; export const mockData: ScenarioMap = { ['en-arbeidsgiver-en-periode']: EnArbeidsgiverEnPeriode, @@ -25,8 +26,11 @@ export const mockData: ScenarioMap = { ['ingen-sak']: IngenSak, ['debug']: Debug, ['arbeidsgiver-ikke-i-sak']: ArbeidsgiverIkkeISak, + ['arbeidsgiver-ikke-i-sak-flere-ansettelser']: ArbeidsgiverIkkeISakFlereAnsettelser, ['arbeidsaktivitet-uten-arbeidsgiver']: ArbeidsaktivitetUtenArbeidsgiver, ['ugyldig-k9-format']: UgyldigK9Format, + ['en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold']: EnArbeidsgiverToAnsettelserSammeUkeMedOpphold, + ['en-arbeidsgiver-to-ansettelser-samme-uke-uten-opphold']: EnArbeidsgiverToAnsettelserSammeUkeUtenOpphold, }; export interface ScenarioData { diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/IkkeAnsattMandagMidt.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/IkkeAnsattMandagMidt.ts new file mode 100644 index 0000000000..01172f41fa --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/IkkeAnsattMandagMidt.ts @@ -0,0 +1,10 @@ +import { ScenarioData } from '../../'; +import arbeidsgiver from './arbeidsgiver-mock'; +import sak from './sak-mock'; +import søker from './søker-mock'; + +export const IkkeAnsattMandagMidtI: ScenarioData = { + sak, + arbeidsgiver, + søker, +}; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/arbeidsgiver-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/arbeidsgiver-mock.ts new file mode 100644 index 0000000000..ec99dc2658 --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/arbeidsgiver-mock.ts @@ -0,0 +1,9 @@ +/** Første periode viser tom søndag 3.11, selv om en slutter før 1.11 */ +export default { + frilansoppdrag: [], + organisasjoner: [ + { ansattFom: '2005-01-09', ansattTom: '2024-11-01', navn: 'SAUEFABRIKK', organisasjonsnummer: '896929119' }, + { ansattFom: '2024-12-05', ansattTom: null, navn: 'SAUEFABRIKK', organisasjonsnummer: '896929119' }, + ], + privateArbeidsgivere: [], +}; diff --git a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/sak-mock.ts b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/sak-mock.ts new file mode 100644 index 0000000000..23b0466153 --- /dev/null +++ b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/sak-mock.ts @@ -0,0 +1,104 @@ +export default [ + { + barn: { + fødselsdato: '2023-01-24', + fornavn: 'GEOMETRISK', + mellomnavn: null, + etternavn: 'RIST', + aktørId: '2487158514882', + identitetsnummer: '24412358038', + }, + søknad: { + søknadId: 'generert', + versjon: '1.0.0', + mottattDato: '2025-01-24T07:51:23.794Z', + søker: { + norskIdentitetsnummer: '00000000000', + }, + språk: 'nb', + ytelse: { + type: 'PLEIEPENGER_SYKT_BARN', + barn: { + norskIdentitetsnummer: '00000000000', + fødselsdato: null, + }, + søknadsperiode: ['2024-11-01/2025-02-28'], + endringsperiode: [], + trekkKravPerioder: [], + opptjeningAktivitet: {}, + dataBruktTilUtledning: null, + annetDataBruktTilUtledning: null, + infoFraPunsj: null, + bosteder: { + perioder: {}, + perioderSomSkalSlettes: {}, + }, + utenlandsopphold: { + perioder: {}, + perioderSomSkalSlettes: {}, + }, + beredskap: { + perioder: {}, + perioderSomSkalSlettes: {}, + }, + nattevåk: { + perioder: {}, + perioderSomSkalSlettes: {}, + }, + tilsynsordning: { + perioder: { + '2024-11-01/2025-02-28': { + etablertTilsynTimerPerDag: 'PT0S', + }, + }, + }, + lovbestemtFerie: { + perioder: {}, + }, + arbeidstid: { + arbeidstakerList: [ + { + norskIdentitetsnummer: null, + organisasjonsnummer: '896929119', + organisasjonsnavn: null, + arbeidstidInfo: { + perioder: { + '2024-11-01/2024-11-30': { + jobberNormaltTimerPerDag: 'PT7H30M', + faktiskArbeidTimerPerDag: 'PT0S', + }, + '2024-12-01/2025-02-28': { + jobberNormaltTimerPerDag: 'PT8H', + faktiskArbeidTimerPerDag: 'PT0S', + }, + }, + }, + }, + ], + frilanserArbeidstidInfo: { + perioder: { + '2024-11-01/2025-02-28': { + jobberNormaltTimerPerDag: 'PT0S', + faktiskArbeidTimerPerDag: 'PT0S', + }, + }, + }, + selvstendigNæringsdrivendeArbeidstidInfo: null, + }, + uttak: { + perioder: {}, + }, + omsorg: { + relasjonTilBarnet: null, + beskrivelseAvOmsorgsrollen: null, + }, + erSammenMedBarnet: null, + }, + journalposter: [], + begrunnelseForInnsending: { + tekst: null, + }, + kildesystem: null, + }, + }, +]; diff --git "a/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/s\303\270ker-mock.ts" "b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/s\303\270ker-mock.ts" new file mode 100644 index 0000000000..0921da2df9 --- /dev/null +++ "b/apps/endringsmelding-pleiepenger/src/mocks/data/scenario/opphold/ikke-ansatt-mandag-midt-i/s\303\270ker-mock.ts" @@ -0,0 +1,8 @@ +export default { + aktørId: '2912771641580', + etternavn: 'FJORD', + fornavn: 'TØFF', + fødselsdato: '1983-05-26', + fødselsnummer: '26458341337', + mellomnavn: null, +}; diff --git a/apps/endringsmelding-pleiepenger/src/storybook/data/arbeidsgivereMock.ts b/apps/endringsmelding-pleiepenger/src/storybook/data/arbeidsgivereMock.ts index 5c987052fa..d75de02677 100644 --- a/apps/endringsmelding-pleiepenger/src/storybook/data/arbeidsgivereMock.ts +++ b/apps/endringsmelding-pleiepenger/src/storybook/data/arbeidsgivereMock.ts @@ -1,16 +1,16 @@ -import { Arbeidsgiver } from '../../app/types/Arbeidsgiver'; +import { ArbeidsgiverMedAnsettelseperioder } from '../../app/types/ArbeidsgiverMedAnsettelseperioder'; -export const arbeidsgivereMock: Arbeidsgiver[] = [ +export const arbeidsgivereMock: ArbeidsgiverMedAnsettelseperioder[] = [ { key: 'a_805824352', navn: 'Dykkert svømmeutstyr', organisasjonsnummer: '805824352', - ansattFom: new Date('2008-10-01'), + ansettelsesperioder: [{ from: new Date('2008-10-01') }], }, { key: 'a_839942907', navn: 'Flaks og fly', organisasjonsnummer: '839942907', - ansattFom: new Date('2008-10-01'), + ansettelsesperioder: [{ from: new Date('2008-10-01') }], }, ]; diff --git a/apps/endringsmelding-pleiepenger/src/storybook/data/sakMock.ts b/apps/endringsmelding-pleiepenger/src/storybook/data/sakMock.ts index 1a32ad2d86..f781c87b5f 100644 --- a/apps/endringsmelding-pleiepenger/src/storybook/data/sakMock.ts +++ b/apps/endringsmelding-pleiepenger/src/storybook/data/sakMock.ts @@ -9,13 +9,13 @@ export const sakMock: Sak = { key: 'a_947064642', organisasjonsnummer: '947064642', navn: 'IKKE-I-SAK-AS 1', - ansattFom: new Date('2023-02-01T00:00:00.000Z'), + ansettelsesperioder: [{ from: new Date('2023-02-01T00:00:00.000Z') }], }, { key: 'a_947064643', organisasjonsnummer: '947064643', navn: 'IKKE-I-SAK-AS 2', - ansattFom: new Date('2023-02-01T00:00:00.000Z'), + ansettelsesperioder: [{ from: new Date('2023-02-01T00:00:00.000Z') }], }, ], harArbeidsgivereIkkeISak: false, @@ -49,11 +49,14 @@ export const sakMock: Sak = { key: 'a_839942907', organisasjonsnummer: '839942907', navn: 'HÅRREISENDE FRISØR', - ansattFom: new Date('2002-05-09T00:00:00.000Z'), + ansettelsesperioder: [{ from: new Date('2002-05-09T00:00:00.000Z') }], }, type: ArbeidsaktivitetType.arbeidstaker, navn: 'HÅRREISENDE FRISØR', erUkjentArbeidsforhold: false, + ansettelsesperioderInnenforEndringsperiode: [ + { from: new Date('2002-05-09T00:00:00.000Z'), to: new Date('2025-05-09T00:00:00.000Z') }, + ], perioderMedArbeidstid: [ { from: new Date('2024-02-26T00:00:00.000Z'), @@ -65,6 +68,7 @@ export const sakMock: Sak = { from: new Date('2024-02-26T00:00:00.000Z'), to: new Date('2024-02-29T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-02-26': { faktisk: { @@ -141,6 +145,7 @@ export const sakMock: Sak = { from: new Date('2024-03-25T00:00:00.000Z'), to: new Date('2024-03-31T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-03-25': { faktisk: { @@ -221,6 +226,7 @@ export const sakMock: Sak = { from: new Date('2024-04-01T00:00:00.000Z'), to: new Date('2024-04-07T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-01': { faktisk: { @@ -301,6 +307,7 @@ export const sakMock: Sak = { from: new Date('2024-04-08T00:00:00.000Z'), to: new Date('2024-04-14T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-08': { faktisk: { @@ -381,6 +388,7 @@ export const sakMock: Sak = { from: new Date('2024-04-15T00:00:00.000Z'), to: new Date('2024-04-21T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-15': { faktisk: { @@ -461,6 +469,7 @@ export const sakMock: Sak = { from: new Date('2024-04-22T00:00:00.000Z'), to: new Date('2024-04-28T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-22': { faktisk: { @@ -541,6 +550,7 @@ export const sakMock: Sak = { from: new Date('2024-04-29T00:00:00.000Z'), to: new Date('2024-05-05T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-29': { faktisk: { @@ -621,6 +631,7 @@ export const sakMock: Sak = { from: new Date('2024-05-06T00:00:00.000Z'), to: new Date('2024-05-12T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-05-06': { faktisk: { @@ -701,6 +712,7 @@ export const sakMock: Sak = { from: new Date('2024-05-13T00:00:00.000Z'), to: new Date('2024-05-19T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-05-13': { faktisk: { @@ -781,6 +793,7 @@ export const sakMock: Sak = { from: new Date('2024-05-20T00:00:00.000Z'), to: new Date('2024-05-26T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-05-20': { faktisk: { @@ -861,6 +874,7 @@ export const sakMock: Sak = { from: new Date('2024-05-27T00:00:00.000Z'), to: new Date('2024-05-31T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-05-27': { faktisk: { @@ -946,6 +960,9 @@ export const sakMock: Sak = { key: 'selvstendigNæringsdrivende', type: ArbeidsaktivitetType.selvstendigNæringsdrivende, navn: 'Selvstendig næringsdrivende', + ansettelsesperioderInnenforEndringsperiode: [ + { from: new Date('2024-04-08T00:00:00.000Z'), to: new Date('2024-04-09T00:00:00.000Z') }, + ], perioderMedArbeidstid: [ { from: new Date('2024-04-08T00:00:00.000Z'), @@ -957,6 +974,7 @@ export const sakMock: Sak = { from: new Date('2024-04-08T00:00:00.000Z'), to: new Date('2024-04-09T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-08': { faktisk: { @@ -1030,11 +1048,14 @@ export const sakMock: Sak = { key: 'a_839942907', organisasjonsnummer: '839942907', navn: 'HÅRREISENDE FRISØR', - ansattFom: new Date('2002-05-09T00:00:00.000Z'), + ansettelsesperioder: [{ from: new Date('2002-05-09T00:00:00.000Z') }], }, type: ArbeidsaktivitetType.arbeidstaker, navn: 'HÅRREISENDE FRISØR', erUkjentArbeidsforhold: false, + ansettelsesperioderInnenforEndringsperiode: [ + { from: new Date('2002-05-09T00:00:00.000Z'), to: new Date('2025-05-09T00:00:00.000Z') }, + ], perioderMedArbeidstid: [ { from: new Date('2024-02-26T00:00:00.000Z'), @@ -1046,6 +1067,7 @@ export const sakMock: Sak = { from: new Date('2024-02-26T00:00:00.000Z'), to: new Date('2024-02-29T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-02-26': { faktisk: { @@ -1122,6 +1144,7 @@ export const sakMock: Sak = { from: new Date('2024-03-25T00:00:00.000Z'), to: new Date('2024-03-31T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-03-25': { faktisk: { @@ -1202,6 +1225,7 @@ export const sakMock: Sak = { from: new Date('2024-04-01T00:00:00.000Z'), to: new Date('2024-04-07T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-01': { faktisk: { @@ -1282,6 +1306,7 @@ export const sakMock: Sak = { from: new Date('2024-04-08T00:00:00.000Z'), to: new Date('2024-04-14T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-08': { faktisk: { @@ -1362,6 +1387,7 @@ export const sakMock: Sak = { from: new Date('2024-04-15T00:00:00.000Z'), to: new Date('2024-04-21T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-15': { faktisk: { @@ -1442,6 +1468,7 @@ export const sakMock: Sak = { from: new Date('2024-04-22T00:00:00.000Z'), to: new Date('2024-04-28T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-22': { faktisk: { @@ -1522,6 +1549,7 @@ export const sakMock: Sak = { from: new Date('2024-04-29T00:00:00.000Z'), to: new Date('2024-05-05T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-29': { faktisk: { @@ -1602,6 +1630,7 @@ export const sakMock: Sak = { from: new Date('2024-05-06T00:00:00.000Z'), to: new Date('2024-05-12T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-05-06': { faktisk: { @@ -1682,6 +1711,7 @@ export const sakMock: Sak = { from: new Date('2024-05-13T00:00:00.000Z'), to: new Date('2024-05-19T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-05-13': { faktisk: { @@ -1762,6 +1792,7 @@ export const sakMock: Sak = { from: new Date('2024-05-20T00:00:00.000Z'), to: new Date('2024-05-26T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-05-20': { faktisk: { @@ -1842,6 +1873,7 @@ export const sakMock: Sak = { from: new Date('2024-05-27T00:00:00.000Z'), to: new Date('2024-05-31T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-05-27': { faktisk: { @@ -1926,6 +1958,9 @@ export const sakMock: Sak = { key: 'selvstendigNæringsdrivende', type: ArbeidsaktivitetType.selvstendigNæringsdrivende, navn: 'Selvstendig næringsdrivende', + ansettelsesperioderInnenforEndringsperiode: [ + { from: new Date('2024-04-08T00:00:00.000Z'), to: new Date('2024-04-09T00:00:00.000Z') }, + ], perioderMedArbeidstid: [ { from: new Date('2024-04-08T00:00:00.000Z'), @@ -1937,6 +1972,7 @@ export const sakMock: Sak = { from: new Date('2024-04-08T00:00:00.000Z'), to: new Date('2024-04-09T00:00:00.000Z'), }, + dagerSøktFor: [], arbeidstidEnkeltdager: { '2024-04-08': { faktisk: { diff --git a/packages/sif-common-utils/src/dateRangeUtils.ts b/packages/sif-common-utils/src/dateRangeUtils.ts index c12a8ede9b..f988efcd30 100644 --- a/packages/sif-common-utils/src/dateRangeUtils.ts +++ b/packages/sif-common-utils/src/dateRangeUtils.ts @@ -743,6 +743,13 @@ export const getFirstDateInDateRanges = (dateRanges: DateRange[]): Date | undefi return dates[0]; }; +export const ensureDateRange = (maybeDateRange: MaybeDateRange, fallbackDateRange: DateRange): DateRange => { + return { + from: maybeDateRange.from || fallbackDateRange.from, + to: maybeDateRange.to || fallbackDateRange.to, + }; +}; + // const dateRangeDifference = (range1: DateRange[], range2: DateRange[]): DateRange[] { // const difference: DateRange[] = []; // range1.forEach((r1) => { @@ -773,6 +780,7 @@ export const dateRangeUtils = { dateRangeIsAdjacentToDateRange, dateRangesCollide, dateRangeToISODateRange, + ensureDateRange, datesCollideWithDateRanges, getDateRangeFromDates, getDateRangeFromDateRanges,