Skip to content

Commit ecc75e5

Browse files
committed
Utvide sjekk på alder
1 parent 56bf1ba commit ecc75e5

File tree

2 files changed

+36
-18
lines changed

2 files changed

+36
-18
lines changed

apps/opplaringspenger-soknad/src/app/søknad/steps/om-barnet/om-barnet-form/utils/omBarnetFormUtils.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export const getBarnetsAlder = (values: OmBarnetFormValues): number | undefined
132132
const fdato =
133133
values.barnetHarIkkeFnr === true
134134
? datepickerUtils.getDateFromDateString(values.barnetsFødselsdato)
135-
: dateUtils.getFødselsdatoFromFødselsnummer(values.barnetsFødselsnummer);
135+
: dateUtils.getFødselsdatoFromIdNr(values.barnetsFødselsnummer);
136136

137137
if (!fdato) {
138138
return;

packages/sif-common-utils/src/dateUtils.ts

+35-17
Original file line numberDiff line numberDiff line change
@@ -113,36 +113,54 @@ export const sortDates = (d1: Date, d2: Date) => {
113113
/**
114114
* Obs! Denne kan feile hvis fødselsnummeret er syntetisk. Det er også tilfeller hvor dato ikke
115115
* er helt korrekt - men dette er sjelden.
116-
* @param fnr Fødselsnummer
117-
* @returns fødselsdatoen eller null hvis fødselsnummeret er ugyldig
116+
* @param idnr fnr/dnr
117+
* @returns fødselsdatoen eller null hvis fødselsnummeret er ugyldig eller ikke støttet
118118
*/
119-
export const getFødselsdatoFromFødselsnummer = (fnr?: string): Date | undefined => {
120-
if (fnr === undefined || !/^\d{11}$/.test(fnr)) {
119+
export const getFødselsdatoFromIdNr = (idnr?: string): Date | undefined => {
120+
if (idnr === undefined || !/^\d{11}$/.test(idnr)) {
121121
return undefined;
122-
// throw new Error('Ugyldig fødselsnummer. Må bestå av 11 siffer.');
122+
}
123+
let day = parseInt(idnr.substring(0, 2), 10);
124+
let month = parseInt(idnr.substring(2, 4), 10);
125+
const yearPart = parseInt(idnr.substring(4, 6), 10);
126+
const individnummer = parseInt(idnr.substring(6, 9), 10);
127+
128+
// D-nummer: dag 41–71 → trekk 40
129+
if (day >= 41 && day <= 71) {
130+
day -= 40;
131+
}
132+
133+
// NAV-syntetisk: måned 41–52 → trekk 40
134+
if (month >= 41 && month <= 52) {
135+
month -= 40;
123136
}
124137

125-
const day = parseInt(fnr.substring(0, 2), 10);
126-
const month = parseInt(fnr.substring(2, 4), 10);
127-
const yearPart = parseInt(fnr.substring(4, 6), 10);
128-
const individnummer = parseInt(fnr.substring(6, 9), 10);
138+
// Skatt-syntetisk: måned 81–92 → trekk 80
139+
if (month >= 81 && month <= 92) {
140+
month -= 80;
141+
}
142+
143+
// Valider dag/måned etter justering
144+
if (month < 1 || month > 12 || day < 1 || day > 31) {
145+
return undefined;
146+
}
129147

130148
let year: number;
131149

132150
if (individnummer >= 0 && individnummer <= 499) {
133151
year = 1900 + yearPart;
134-
} else if (individnummer >= 500 && individnummer <= 749 && yearPart >= 0 && yearPart <= 39) {
135-
year = 2000 + yearPart;
136-
} else if (individnummer >= 900 && individnummer <= 999 && yearPart >= 0 && yearPart <= 39) {
137-
year = 1900 + yearPart;
138-
} else if (individnummer >= 500 && individnummer <= 999 && yearPart >= 40 && yearPart <= 99) {
152+
} else if (individnummer >= 500 && individnummer <= 749 && yearPart >= 54 && yearPart <= 99) {
153+
year = 1800 + yearPart;
154+
} else if (individnummer >= 900 && individnummer <= 999 && yearPart >= 40 && yearPart <= 99) {
139155
year = 1900 + yearPart;
156+
} else if (individnummer >= 500 && individnummer <= 999 && yearPart >= 0 && yearPart <= 39) {
157+
year = 2000 + yearPart;
140158
} else {
141-
return undefined; // Ugyldig fødselsnummer
159+
return undefined;
142160
}
143161

144162
try {
145-
return dayjs.utc(new Date(year, month - 1, day)).toDate();
163+
return new Date(year, month - 1, day);
146164
} catch {
147165
return undefined;
148166
}
@@ -154,7 +172,7 @@ export const dateUtils = {
154172
getDatesInMonth,
155173
getFirstOfTwoDates,
156174
getFirstWeekDayInMonth,
157-
getFødselsdatoFromFødselsnummer,
175+
getFødselsdatoFromIdNr,
158176
getLastOfTwoDates,
159177
getISOWeekdayFromISODate,
160178
getLastWeekDayInMonth,

0 commit comments

Comments
 (0)