Skip to content

Commit

Permalink
Merge pull request #3309 from navikt/feature/npid-foedsel-1870
Browse files Browse the repository at this point in the history
Oppdatert validering på fødsel når ident er NPID
  • Loading branch information
betsytraran authored Oct 11, 2023
2 parents accdc51 + 858b766 commit 0df6627
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { Alert } from '@navikt/ds-react'
import styled from 'styled-components'
import _has from 'lodash/has'
import _get from 'lodash/get'
import { add, addMonths, getYear, isAfter, isDate, setDate } from 'date-fns'
import { add, addMonths, getYear, isAfter, isDate, parseISO, setDate } from 'date-fns'
import { BestillingsveilederContext } from '@/components/bestillingsveileder/BestillingsveilederContext'
import { validation } from '@/components/fagsystem/alderspensjon/form/validation'
import { Monthpicker } from '@/components/ui/form/inputs/monthpicker/Monthpicker'
Expand Down Expand Up @@ -73,7 +73,7 @@ export const AlderspensjonForm = ({ formikBag }) => {
if (foedsel) {
const foedselsaar =
foedsel[foedsel.length - 1]?.foedselsaar ||
getYear(foedsel[foedsel.length - 1]?.foedselsdato)
getYear(parseISO(foedsel[foedsel.length - 1]?.foedselsdato))
if (foedselsaar < 1944) {
ugyldigFoedselsaar = true
} else if (foedselsaar >= 1944) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@ import * as _ from 'lodash-es'
import { FormikTextInput } from '@/components/ui/form/inputs/textInput/TextInput'
import { FormikDatepicker } from '@/components/ui/form/inputs/datepicker/Datepicker'
import { FormikProps } from 'formik'
import React from 'react'
import React, { useContext } from 'react'
import _get from 'lodash/get'
import { BestillingsveilederContext } from '@/components/bestillingsveileder/BestillingsveilederContext'

interface AlderForm {
formikBag: FormikProps<{}>
}

export const Alder = ({ formikBag }: AlderForm) => {
const opts = useContext(BestillingsveilederContext)

const paths = {
alder: 'pdldata.opprettNyPerson.alder',
foedtEtter: 'pdldata.opprettNyPerson.foedtEtter',
Expand All @@ -34,6 +37,8 @@ export const Alder = ({ formikBag }: AlderForm) => {
const onlyNumberKeyPressHandler = (event: React.KeyboardEvent<any>) =>
!/\d/.test(event.key) && event.preventDefault()

const minDateAlder = opts?.identtype === 'NPID' ? new Date('01.01.1870') : new Date('01.01.1900')

return (
<div className="flexbox--flex-wrap">
<FormikTextInput
Expand All @@ -48,13 +53,15 @@ export const Alder = ({ formikBag }: AlderForm) => {
label="Født etter"
disabled={disableFoedtDato}
maxDate={new Date()}
minDate={minDateAlder}
fastfield={false}
/>
<FormikDatepicker
name={paths.foedtFoer}
label="Født før"
disabled={disableFoedtDato}
maxDate={new Date()}
minDate={minDateAlder}
fastfield={false}
/>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,17 @@ import { FormikSelect } from '@/components/ui/form/inputs/select/Select'
import { FormikProps } from 'formik'
import { SelectedValue } from '@/components/fagsystem/pdlf/PdlTypes'
import { DatepickerWrapper } from '@/components/ui/form/inputs/datepicker/DatepickerStyled'
import _get from 'lodash/get'
import { useContext } from 'react'
import { BestillingsveilederContext } from '@/components/bestillingsveileder/BestillingsveilederContext'

type FoedselTypes = {
formikBag: FormikProps<{}>
path?: string
}

export const FoedselForm = ({ formikBag, path }: FoedselTypes) => {
const opts = useContext(BestillingsveilederContext)

const handleLandChange = (selected: SelectedValue, foedselPath: string) => {
formikBag.setFieldValue(`${foedselPath}.foedeland`, selected?.value || null)
if (selected?.value !== 'NOR') {
Expand All @@ -28,11 +31,14 @@ export const FoedselForm = ({ formikBag, path }: FoedselTypes) => {
const foedselsaar = _.get(formikBag.values, `${path}.foedselsaar`)
const foedselsdato = _.get(formikBag.values, `${path}.foedselsdato`)

const minDateFoedsel =
opts?.identtype === 'NPID' ? new Date('01.01.1870') : new Date('01.01.1900')

const harAlder = () => {
return (
_get(formikBag.values, 'pdldata.opprettNyPerson.alder') ||
_get(formikBag.values, 'pdldata.opprettNyPerson.foedtEtter') ||
_get(formikBag.values, 'pdldata.opprettNyPerson.foedtFoer')
_.get(formikBag.values, 'pdldata.opprettNyPerson.alder') ||
_.get(formikBag.values, 'pdldata.opprettNyPerson.foedtEtter') ||
_.get(formikBag.values, 'pdldata.opprettNyPerson.foedtFoer')
)
}

Expand All @@ -44,6 +50,7 @@ export const FoedselForm = ({ formikBag, path }: FoedselTypes) => {
label="Fødselsdato"
disabled={(foedselsaar !== null && foedselsdato === null) || harAlder()}
maxDate={new Date()}
minDate={minDateFoedsel}
fastfield={false}
/>
<Yearpicker
Expand All @@ -55,6 +62,7 @@ export const FoedselForm = ({ formikBag, path }: FoedselTypes) => {
formikBag.setFieldValue(`${path}.foedselsaar`, val ? new Date(val).getFullYear() : null)
}
maxDate={new Date()}
minDate={minDateFoedsel}
// @ts-ignore
disabled={(foedselsdato !== null && foedselsaar === null) || harAlder()}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,25 @@ const testGyldigFom = (val) => {
})
}

const testGyldigAlder = (val) => {
return val.test('is-valid', function alderErGyldig(alder: string) {
if (alder === null || alder === '') {
return true
}
if (parseInt(alder) < 0) {
return this.createError({ message: 'Alder må være minst 0 år' })
}
const identtype = this?.options?.parent?.identtype
const minYear = identtype === 'NPID' ? 1870 : 1900
if (new Date().getFullYear() - parseInt(alder) < minYear) {
return this.createError({
message: `Alder må være mindre enn ${new Date().getFullYear() - (minYear - 1)} år`,
})
}
return true
})
}

export const doedsfall = Yup.object({
doedsdato: requiredDate.nullable(),
})
Expand All @@ -70,7 +89,7 @@ export const navn = Yup.object().shape(
hasMellomnavn: Yup.boolean().nullable(),
gyldigFraOgMed: testGyldigFom(Yup.mixed().nullable()),
},
['fornavn', 'etternavn']
['fornavn', 'etternavn'],
)

export const folkeregisterpersonstatus = Yup.object({
Expand All @@ -82,59 +101,52 @@ export const folkeregisterpersonstatus = Yup.object({
export const validation = {
pdldata: Yup.object({
opprettNyPerson: Yup.object({
alder: Yup.mixed()
.test(
'max',
`Alder må være mindre enn ${new Date().getFullYear() - 1899} år`,
(val) => !val || new Date().getFullYear() - parseInt(val) >= 1900
)
.test('min', 'Alder må være minst 0 år', (val) => !val || parseInt(val) >= 0)
.nullable(),
alder: testGyldigAlder(Yup.string().nullable()),
foedtEtter: testDatoFom(Yup.date().nullable(), 'foedtFoer', 'Dato må være før født før-dato'),
foedtFoer: testDatoTom(
Yup.date().nullable(),
'foedtEtter',
'Dato må være etter født etter-dato'
'Dato må være etter født etter-dato',
),
}).nullable(),
person: Yup.object({
bostedsadresse: ifPresent('$pdldata.person.bostedsadresse', Yup.array().of(bostedsadresse)),
oppholdsadresse: ifPresent(
'$pdldata.person.oppholdsadresse',
Yup.array().of(oppholdsadresse)
Yup.array().of(oppholdsadresse),
),
kontaktadresse: ifPresent('$pdldata.person.kontaktadresse', Yup.array().of(kontaktadresse)),
adressebeskyttelse: ifPresent(
'$pdldata.person.adressebeskyttelse',
Yup.array().of(adressebeskyttelse)
Yup.array().of(adressebeskyttelse),
),
fullmakt: ifPresent('$pdldata.person.fullmakt', Yup.array().of(fullmakt)),
sikkerhetstiltak: ifPresent('$pdldata.person.sikkerhetstiltak', sikkerhetstiltak),
tilrettelagtKommunikasjon: ifPresent(
'$pdldata.person.tilrettelagtKommunikasjon',
tilrettelagtKommunikasjon
tilrettelagtKommunikasjon,
),
falskIdentitet: ifPresent('$pdldata.person.falskIdentitet', falskIdentitet),
telefonnummer: ifPresent('$pdldata.person.telefonnummer', Yup.array().of(telefonnummer)),
statsborgerskap: ifPresent(
'$pdldata.person.statsborgerskap',
Yup.array().of(statsborgerskap)
Yup.array().of(statsborgerskap),
),
doedsfall: ifPresent('$pdldata.person.doedsfall', Yup.array().of(doedsfall)),
doedfoedtBarn: ifPresent('$pdldata.person.doedfoedtBarn', Yup.array().of(doedfoedtBarn)),
innflytting: ifPresent('$pdldata.person.innflytting', Yup.array().of(innflytting)),
utflytting: ifPresent('$pdldata.person.utflytting', Yup.array().of(utflytting)),
utenlandskIdentifikasjonsnummer: ifPresent(
'$pdldata.person.utenlandskIdentifikasjonsnummer',
Yup.array().of(utenlandskId)
Yup.array().of(utenlandskId),
),
kontaktinformasjonForDoedsbo: ifPresent(
'$pdldata.person.kontaktinformasjonForDoedsbo',
Yup.array().of(kontaktDoedsbo)
Yup.array().of(kontaktDoedsbo),
),
forelderBarnRelasjon: ifPresent(
'$pdldata.person.forelderBarnRelasjon',
Yup.array().of(forelderBarnRelasjon)
Yup.array().of(forelderBarnRelasjon),
),
sivilstand: ifPresent('$pdldata.person.sivilstand', Yup.array().of(sivilstand)),
kjoenn: ifPresent('$pdldata.person.kjoenn', Yup.array().of(kjoenn)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export const Yearpicker = ({
date,
handleDateChange,
maxDate = null,
minDate = null,
disabled = false,
}: YearpickerProps) => {
const getFeilmelding = (formikProps: FormikProps<any>, formikPath: string) => {
Expand All @@ -41,6 +42,7 @@ export const Yearpicker = ({
showYearPicker
customInput={<TextInput icon="calendar" feil={getFeilmelding(formikBag, name)} />}
maxDate={maxDate}
minDate={minDate}
disabled={disabled}
/>
</Label>
Expand Down

0 comments on commit 0df6627

Please sign in to comment.