Skip to content

Commit

Permalink
Dine pleiepenger - forenkling og zod justering (#1477)
Browse files Browse the repository at this point in the history
* Justere zod validering på søknader.json

* Changeset
  • Loading branch information
frodehansen2 authored Dec 15, 2023
1 parent 9beda65 commit d356f0b
Show file tree
Hide file tree
Showing 13 changed files with 57 additions and 76 deletions.
5 changes: 5 additions & 0 deletions .changeset/wet-sloths-listen.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@navikt/dine-pleiepenger": minor
---

Justere ZOD validering og henting av søknadsinformasjon. Gå over til å bruke opprettetDato for visning av mottatt dato.
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ const SøknadContent: React.FunctionComponent<Props> = ({ søknad }) => {
const intl = useIntl();

const harArbeidsgiver = () => {
if ('arbeidsgivere' in søknad.søknad) {
const arbeidsgivere = søknad.søknad.arbeidsgivere;
if (søknad.søknadstype === Søknadstype.PP_SYKT_BARN) {
const { arbeidsgivere } = søknad.søknad;
if (!Array.isArray(arbeidsgivere)) {
return arbeidsgivere.organisasjoner && arbeidsgivere.organisasjoner.length > 0;
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@ import React from 'react';
import { FormattedMessage } from 'react-intl';
import { Task } from '@navikt/ds-icons';
import { Søknad } from '../../types/Søknad';
import { formatSøknadMottattDato, getSøknadMottattDato } from '../../utils/søknadUtils';
import { formatSøknadOpprettetDato } from '../../utils/søknadUtils';

interface Props {
søknad: Søknad;
}

const SøknadTitle: React.FunctionComponent<Props> = ({ søknad }) => {
const søknadMottattDato = getSøknadMottattDato(søknad);
return (
<div>
<HStack gap="2" align={'start'} wrap={false}>
Expand All @@ -21,9 +20,9 @@ const SøknadTitle: React.FunctionComponent<Props> = ({ søknad }) => {
</BodyShort>
</div>
</HStack>
{søknadMottattDato ? (
{søknad.opprettet ? (
<BodyShort size="small" className="text-grayalpha-700">
Mottatt {formatSøknadMottattDato(søknadMottattDato)}
Mottatt {formatSøknadOpprettetDato(søknad.opprettet)}
</BodyShort>
) : null}
</div>
Expand Down
10 changes: 5 additions & 5 deletions apps/dine-pleiepenger/src/pages/api/innsynsdata.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,16 @@ export const innsynsdataFetcher = async (url: string): Promise<Innsynsdata> => a

async function handler(req: NextApiRequest, res: NextApiResponse) {
const childLogger = createChildLogger(getXRequestId(req));
childLogger.info(`Henter innsynsdata`);
try {
/** Hent søker først for å se om bruker har tilgang */
const søker = await fetchSøker(req);

const hentSvarfrist = Feature.HENT_SVARFRIST;

/** Bruker har tilgang, hent resten av informasjonen */
const [søknader, mellomlagring, svarfrist] = await Promise.allSettled([
fetchSøknader(req),
fetchMellomlagringer(req),
hentSvarfrist ? fetchSvarfrist(req) : Promise.resolve({ frist: undefined }),
Feature.HENT_SVARFRIST ? fetchSvarfrist(req) : Promise.resolve({ frist: undefined }),
]);

if (søknader.status === 'rejected') {
Expand All @@ -31,12 +30,13 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
);
}

res.send({
const innsynsdata: Innsynsdata = {
søker,
søknader: søknader.status === 'fulfilled' ? søknader.value.sort(sortSøknadEtterOpprettetDato) : [],
mellomlagring: mellomlagring.status === 'fulfilled' ? mellomlagring.value : {},
svarfrist: svarfrist.status === 'fulfilled' ? svarfrist.value.frist : undefined,
});
};
res.send(innsynsdata);
} catch (err) {
childLogger.error(`Hent innsynsdata feilet: ${err}`);
if (err.response.status === HttpStatusCode.Forbidden) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { z } from 'zod';

export const ArbeidsgiverSchema = z.object({
erAnsatt: z.boolean(),
navn: z.string(),
organisasjonsnummer: z.string(),
sluttetFørSøknadsperiode: z.union([z.undefined(), z.boolean()]),
});
12 changes: 12 additions & 0 deletions apps/dine-pleiepenger/src/server/api-models/ArbeidsgivereSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { z } from 'zod';
import { ArbeidsgiverSchema } from './ArbeidsgiverSchema';
import { OrganisasjonSchema } from './OrganisasjonSchema';

export const OrganisasjonerSchema = z.object({
organisasjoner: z.array(OrganisasjonSchema),
});

export const ArbeidsgivereSchema = z.union([z.array(ArbeidsgiverSchema), OrganisasjonerSchema]);

export type Arbeidsgiver = z.infer<typeof ArbeidsgiverSchema>;
export type Arbeidsgivere = z.infer<typeof ArbeidsgivereSchema>;
10 changes: 10 additions & 0 deletions apps/dine-pleiepenger/src/server/api-models/OrganisasjonSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { z } from 'zod';

export const OrganisasjonSchema = z.object({
navn: z.string(),
skalJobbe: z.boolean(),
skalJobbeProsent: z.number(),
vetIkkeEkstrainfo: z.union([z.string(), z.null(), z.undefined()]),
jobberNormaltTimer: z.number(),
organisasjonsnummer: z.string(),
});
13 changes: 1 addition & 12 deletions apps/dine-pleiepenger/src/server/api-models/SøknadSchema.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { z } from 'zod';
import { parseMaybeDateStringToDate } from '../../utils/jsonParseUtils';
import { ArbeidsgivereSchema } from '../../types/Arbeidsgiver';
import { ArbeidsgivereSchema } from './ArbeidsgivereSchema';

export enum Søknadsstatus {
MOTTATT = 'MOTTATT',
Expand Down Expand Up @@ -29,18 +29,9 @@ const SøknadDokumentSchema = z.object({
});

const PleiepengerSøknadInfoSchema = z.object({
fraOgMed: z.preprocess((val) => parseMaybeDateStringToDate(val), z.date()),
tilOgMed: z.preprocess((val) => parseMaybeDateStringToDate(val), z.date()),
mottatt: z.preprocess((val) => parseMaybeDateStringToDate(val), z.date()),
arbeidsgivere: ArbeidsgivereSchema,
});

const PleiepengerEndringsmeldingInfoSchema = z.object({});

const PleiepengerEttersendelseInfo = z.object({
mottatt: z.preprocess((val) => parseMaybeDateStringToDate(val), z.date()),
});

const SøknadBaseSchema = z.object({
søknadId: z.string(),
status: z.nativeEnum(Søknadsstatus),
Expand All @@ -58,12 +49,10 @@ const PleiepengerSøknadSchema = SøknadBaseSchema.extend({

const EndringsmeldingSchema = SøknadBaseSchema.extend({
søknadstype: z.literal(Søknadstype.PP_SYKT_BARN_ENDRINGSMELDING),
søknad: PleiepengerEndringsmeldingInfoSchema,
});

const EttersendelseSchema = SøknadBaseSchema.extend({
søknadstype: z.literal(Søknadstype.PP_ETTERSENDELSE),
søknad: PleiepengerEttersendelseInfo,
});

const SøknadSchema = z.discriminatedUnion('søknadstype', [
Expand Down
24 changes: 1 addition & 23 deletions apps/dine-pleiepenger/src/types/Arbeidsgiver.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,4 @@
import { z } from 'zod';

export const ArbeidsgiverSchema = z.object({
erAnsatt: z.boolean(),
navn: z.string(),
organisasjonsnummer: z.string(),
sluttetFørSøknadsperiode: z.union([z.undefined(), z.boolean()]),
});

const OrganisasjonSchema = z.object({
navn: z.string(),
skalJobbe: z.string(),
skalJobbeProsent: z.number(),
vetIkkeEkstrainfo: z.union([z.string(), z.null(), z.undefined()]),
jobberNormaltTimer: z.number(),
organisasjonsnummer: z.string(),
});

export const OrganisasjonerSchema = z.object({
organisasjoner: z.array(OrganisasjonSchema),
});

export const ArbeidsgivereSchema = z.union([z.array(ArbeidsgiverSchema), OrganisasjonerSchema, z.any()]);
import { ArbeidsgiverSchema } from '../server/api-models/ArbeidsgiverSchema';

export type Arbeidsgiver = z.infer<typeof ArbeidsgiverSchema>;
export type Arbeidsgivere = z.infer<typeof ArbeidsgivereSchema>;
7 changes: 3 additions & 4 deletions apps/dine-pleiepenger/src/types/Arbeidsgivere.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Organisasjon } from './Organisasjon';
import { z } from 'zod';
import { ArbeidsgivereSchema } from '../server/api-models/ArbeidsgivereSchema';

export interface Arbeidsgivere {
organisasjoner: Organisasjon[];
}
export type Arbeidsgivere = z.infer<typeof ArbeidsgivereSchema>;
2 changes: 1 addition & 1 deletion apps/dine-pleiepenger/src/types/InnsynData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ export interface Innsynsdata {
søker: Søker;
søknader: Søknad[];
mellomlagring: Mellomlagringer;
svarfrist: Date;
svarfrist?: Date;
}
12 changes: 4 additions & 8 deletions apps/dine-pleiepenger/src/types/Organisasjon.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
export interface Organisasjon {
navn: string;
skalJobbe: string;
skalJobbeProsent: number;
vetIkkeEkstrainfo?: string | null;
jobberNormaltTimer: number;
organisasjonsnummer: string;
}
import { z } from 'zod';
import { OrganisasjonSchema } from '../server/api-models/OrganisasjonSchema';

export type Organisasjon = z.infer<typeof OrganisasjonSchema>;
19 changes: 2 additions & 17 deletions apps/dine-pleiepenger/src/utils/søknadUtils.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,15 @@
import dayjs from 'dayjs';
import timezone from 'dayjs/plugin/timezone';
import utc from 'dayjs/plugin/utc';
import { Søknad, Søknadstype } from '../types/Søknad';
import { Søknad } from '../types/Søknad';

require('dayjs/locale/nb');

dayjs.extend(utc);
dayjs.extend(timezone);
dayjs.locale('nb');

export const getSøknadMottattDatoValue = (søknad: Søknad): Date | string => {
switch (søknad.søknadstype) {
case Søknadstype.PP_SYKT_BARN:
case Søknadstype.PP_ETTERSENDELSE:
return søknad.søknad.mottatt;
case Søknadstype.PP_SYKT_BARN_ENDRINGSMELDING:
return søknad.opprettet;
}
};

export const getSøknadMottattDato = (søknad: Søknad): Date | undefined => {
const mottattDato = getSøknadMottattDatoValue(søknad);
return dayjs(mottattDato).isValid() ? dayjs(mottattDato).toDate() : undefined;
};

export const formatSøknadMottattDato = (date: Date) => {
export const formatSøknadOpprettetDato = (date: Date) => {
return dayjs(date).tz('Europe/Oslo').format('dddd D. MMMM YYYY, [kl.] HH:mm');
};

Expand Down

0 comments on commit d356f0b

Please sign in to comment.