{"version":3,"file":"index.mjs","sources":["../src/const/cf-offsets.const.ts","../src/date-utils/date-matcher.const.ts","../src/date-utils/date-utils.class.ts","../src/const/matcher.const.ts","../src/enums/crc.enum.ts","../src/enums/birth-month.enum.ts","../src/classes/check-digitizer.class.ts","../src/functions/generator-wrapper.function.ts","../src/enums/gender-weight.enum.ts","../src/enums/omocodes.enum.ts","../src/classes/gender.class.ts","../src/const/logic.const.ts","../src/classes/parser.class.ts","../src/const/error-messages.const.ts","../src/classes/cfu-error.class.ts","../src/classes/pattern.class.ts","../src/classes/cf-mismatch-validator.class.ts","../src/classes/validator.class.ts","../src/index.ts"],"sourcesContent":["export const LASTNAME_OFFSET = 0;\r\nexport const LASTNAME_SIZE = 3;\r\nexport const FIRSTNAME_OFFSET = 3;\r\nexport const FIRSTNAME_SIZE = 3;\r\nexport const YEAR_OFFSET = 6;\r\nexport const YEAR_SIZE = 2;\r\nexport const MONTH_OFFSET = 8;\r\nexport const MONTH_SIZE = 1;\r\nexport const DAY_OFFSET = 9;\r\nexport const DAY_SIZE = 2;\r\nexport const DATE_OFFSET = YEAR_OFFSET;\r\nexport const DATE_SIZE = YEAR_SIZE + MONTH_SIZE + DAY_SIZE;\r\nexport const GENDER_OFFSET = DAY_OFFSET;\r\nexport const GENDER_SIZE = 1;\r\nexport const PLACE_OFFSET = 11;\r\nexport const PLACE_SIZE = 4;\r\nexport const CRC_OFFSET = 15;\r\nexport const CRC_SIZE = 1;\r\nexport const CF_SIZE =\r\n\tLASTNAME_SIZE + FIRSTNAME_SIZE + DATE_SIZE + PLACE_SIZE + CRC_SIZE;\r\n","const YEAR: string = \"[12][0-9]{3}\";\r\nconst MONTH: string = \"0[1-9]|1[0-2]\";\r\nconst DAY: string = \"0[1-9]|[12][0-9]|3[01]\";\r\nconst LEAP_MONTH: string = \"02\";\r\nconst DAYS_30_MONTHS: string = \"0[469]|11\";\r\nconst DAYS_31_MONTHS: string = \"0[13578]|1[02]\";\r\nconst MONTH_DAY: string = `(?:${MONTH})-(?:0[1-9]|[12]\\\\d)|(?:${DAYS_30_MONTHS})-30|(?:${DAYS_31_MONTHS})-3[01]`;\r\nconst HOURS: string = \"[01]\\\\d|2[0-3]\";\r\nconst MINUTES: string = \"[0-5]\\\\d\";\r\nconst SECONDS: string = MINUTES;\r\nconst MILLISECONDS: string = \"\\\\d{3}\";\r\nconst TIMEZONE: string = `Z|[-+](?:${HOURS})(?::?${MINUTES})?`;\r\nconst TIME: string = `(?:${HOURS})(?::${MINUTES}(?::${SECONDS}(?:\\\\.${MILLISECONDS})?)?(?:${TIMEZONE})?)?`;\r\nconst ISO8601_SHORT_DATE: string = `${YEAR}-(?:${MONTH_DAY})(?:T${TIME})?`;\r\nconst ISO8601_DATE_TIME: string = `${YEAR}(?:-(?:(?:${MONTH})|(?:${MONTH_DAY})(?:T${TIME})?))?`;\r\n\r\n/**\r\n * Date Matcher consts\r\n * @property {Object} DATE_VALIDATOR\r\n * @property {string} DATE_VALIDATOR.YEAR Matcher for ISO8601 4 digits year (limited to 1000-2999)\r\n * @property {string} DATE_VALIDATOR.MONTH Matcher for ISO8601 2 digits month (01-12)\r\n * @property {string} DATE_VALIDATOR.DAY Matcher for ISO8601 2 digits day (01-31)\r\n * @property {string} DATE_VALIDATOR.LEAP_MONTH Matcher for ISO8601 2 digits leap month\r\n * @property {string} DATE_VALIDATOR.DAYS_30_MONTHS Matcher for ISO8601 2 digits 30 days month\r\n * @property {string} DATE_VALIDATOR.DAYS_31_MONTHS Matcher for ISO8601 2 digits 31 days month\r\n * @property {string} DATE_VALIDATOR.MONTH_DAY Matcher for ISO8601 2 + 2 digits (28~31)month + day\r\n * @property {string} DATE_VALIDATOR.ISO8601_SHORT_DATE Matcher for ISO8601 date: 4+2+2 digits year + (28~31)month + day\r\n * @property {string} DATE_VALIDATOR.HOURS Matcher for ISO8601 2 digits hours (00-23)\r\n * @property {string} DATE_VALIDATOR.MINUTES Matcher for ISO8601 2 digits minutes (00-59)\r\n * @property {string} DATE_VALIDATOR.SECONDS Matcher for ISO8601 2 digits seconds (00-59)\r\n * @property {string} DATE_VALIDATOR.MILLISECONDS Matcher for ISO8601 3 digits milliseconds (000-999)\r\n * @property {string} DATE_VALIDATOR.TIMEZONE Matcher for ISO8601 timezone (Z or ±## or ±##:## or ±####)\r\n * @property {string} DATE_VALIDATOR.TIME Matcher for ISO8601 for time (T## , T##:## , T##:##:## , T##:##:##.###)\r\n * @property {string} DATE_VALIDATOR.ISO8601_DATE_TIME Matcher for ISO8601 date/time format\r\n */\r\nexport {\r\n\tDAY,\r\n\tDAYS_30_MONTHS,\r\n\tDAYS_31_MONTHS,\r\n\tHOURS,\r\n\tISO8601_DATE_TIME,\r\n\tISO8601_SHORT_DATE,\r\n\tLEAP_MONTH,\r\n\tMILLISECONDS,\r\n\tMINUTES,\r\n\tMONTH,\r\n\tMONTH_DAY,\r\n\tSECONDS,\r\n\tTIME,\r\n\tTIMEZONE,\r\n\tYEAR,\r\n};\r\n","import dayjs, { Dayjs } from \"dayjs\";\r\nimport utc from \"dayjs/plugin/utc\";\r\nimport type DateDay from \"./date-day.type\";\r\nimport { ISO8601_DATE_TIME } from \"./date-matcher.const\";\r\nimport type DateMonth from \"./date-month.type\";\r\nimport type MultiFormatDate from \"./multi-format-date.type\";\r\n\r\ndayjs.extend(utc);\r\n\r\nexport default class DateUtils {\r\n\t/**\r\n\t * Parse a Dated and Gender information to create Date/Gender CF part\r\n\t * @param date Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @returns Parsed Date or null if not valid\r\n\t */\r\n\tpublic static parseDate(date?: MultiFormatDate | null): Date | null {\r\n\t\tif (\r\n\t\t\t!(\r\n\t\t\t\tdate instanceof Date ||\r\n\t\t\t\t(typeof date === \"string\" &&\r\n\t\t\t\t\tnew RegExp(`^(?:${ISO8601_DATE_TIME})$`).test(date)) ||\r\n\t\t\t\t(Array.isArray(date) &&\r\n\t\t\t\t\tdate.length &&\r\n\t\t\t\t\t!date.some((value) => typeof value !== \"number\" || isNaN(value)))\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\ttry {\r\n\t\t\tlet parsedDate: Dayjs;\r\n\t\t\tif (Array.isArray(date)) {\r\n\t\t\t\tconst [year, month = 0, day = 1] = date;\r\n\t\t\t\tif (month >= 0 && month <= 11 && day > 0 && day <= 31) {\r\n\t\t\t\t\tparsedDate = dayjs.utc(Date.UTC(year, month || 0, day || 1));\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tparsedDate = dayjs.utc(date);\r\n\t\t\t}\r\n\t\t\treturn parsedDate.isValid() ? parsedDate.toDate() : null;\r\n\t\t} catch (err) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static ymdToDate(\r\n\t\tyear?: number | null,\r\n\t\tmonth?: DateMonth | null,\r\n\t\tday?: DateDay | null\r\n\t): Date | null {\r\n\t\treturn this.parseDate([year, month, day] as number[]);\r\n\t}\r\n}\r\n","export const CONSONANT_LIST: string = \"B-DF-HJ-NP-TV-Z\";\r\nexport const VOWEL_LIST: string = \"AEIOU\";\r\nexport const OMOCODE_NUMBER_LIST: string = \"\\\\dLMNP-V\";\r\nexport const OMOCODE_NON_ZERO_NUMBER_LIST: string = \"1-9MNP-V\";\r\nexport const OMOCODE_ZERO_LIST: string = \"0L\";\r\nexport const MONTH_LIST: string = \"A-EHLMPR-T\";\r\nexport const MONTH_30DAYS_LIST: string = \"DHPS\";\r\nexport const MONTH_31DAYS_LIST: string = \"ACELMRT\";\r\nexport const CITY_CODE_LIST: string = \"A-M\";\r\nexport const COUNTRY_CODE_LIST: string = \"Z\";\r\n\r\nexport const CF_NAME_MATCHER: string = `[A-Z][${VOWEL_LIST}][${VOWEL_LIST}X]|[${VOWEL_LIST}]X{2}|[${CONSONANT_LIST}]{2}[A-Z]`;\r\nexport const CF_SURNAME_MATCHER: string = CF_NAME_MATCHER;\r\nexport const CF_FULL_NAME_MATCHER: string = `(?:${CF_NAME_MATCHER}){2}`;\r\n\r\nexport const YEAR_MATCHER: string = `[${OMOCODE_NUMBER_LIST}]{2}`;\r\nexport const LEAP_YEAR_MATCHER: string =\r\n\t\"[02468LNQSU][048LQU]|[13579MPRTV][26NS]\";\r\nexport const MONTH_MATCHER: string = `[${MONTH_LIST}]`;\r\nexport const DAY_2X_MATCHER: string = \"[26NS]\";\r\nexport const DAY_3X_MATCHER: string = \"[37PT]\";\r\nexport const DAY_29_MATCHER: string = `[${OMOCODE_ZERO_LIST}4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[1256MNRS][${OMOCODE_NUMBER_LIST}]`;\r\nexport const DAY_30_MATCHER: string = `[${DAY_3X_MATCHER}][${OMOCODE_ZERO_LIST}]`;\r\nexport const DAY_31_MATCHER: string = `[${DAY_3X_MATCHER}][${OMOCODE_ZERO_LIST}1M]`;\r\n\r\nexport const DAY_MATCHER: string = `(?:${DAY_29_MATCHER}|${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}1M])`;\r\nexport const MALE_DAY_MATCHER: string = `(?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[12MN][${OMOCODE_NUMBER_LIST}]|[3P][${OMOCODE_ZERO_LIST}1M])`;\r\nexport const FEMALE_DAY_MATCHER: string = `(?:[4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[56RS][${OMOCODE_NUMBER_LIST}]|[7T][${OMOCODE_ZERO_LIST}1M])`;\r\nexport const MONTH_DAY_MATCHER: string = `${MONTH_MATCHER}(?:${DAY_29_MATCHER})|[${MONTH_30DAYS_LIST}]${DAY_30_MATCHER}|[${MONTH_31DAYS_LIST}]${DAY_31_MATCHER}`;\r\nexport const FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[${OMOCODE_ZERO_LIST}4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[15MR][${OMOCODE_NUMBER_LIST}]|${DAY_2X_MATCHER}[0-8LMNP-U])|[${MONTH_30DAYS_LIST}]${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}]${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}]${DAY_2X_MATCHER}[9V])|(?:${LEAP_YEAR_MATCHER})B${DAY_2X_MATCHER}[9V]`;\r\nexport const MALE_FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[1M][${OMOCODE_NUMBER_LIST}]|[2N][0-8LMNP-U])|[${MONTH_30DAYS_LIST}][3P][${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}][3P][${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}][2N][9V])|(?:${LEAP_YEAR_MATCHER})B[2N][9V]`;\r\nexport const FEMALE_FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[5R][${OMOCODE_NUMBER_LIST}]|[6S][0-8LMNP-U])|[${MONTH_30DAYS_LIST}][7T][${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}][7T][${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}][6S][9V])|(?:${LEAP_YEAR_MATCHER})B[6S][9V]`;\r\n\r\nexport const CITY_CODE_MATCHER: string = `[${CITY_CODE_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2}|[${OMOCODE_ZERO_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]|[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]))`;\r\nexport const COUNTRY_CODE_MATCHER: string = `${COUNTRY_CODE_LIST}[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2}`;\r\nexport const BELFIORE_CODE_MATCHER: string = `(?:[${CITY_CODE_LIST}${COUNTRY_CODE_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2})|(?:[${CITY_CODE_LIST}][${OMOCODE_ZERO_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]|[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]))`;\r\n\r\nexport const CHECK_DIGIT: string = \"[A-Z]\";\r\n\r\nexport const CODICE_FISCALE: string = `${CF_FULL_NAME_MATCHER}(?:${FULL_DATE_MATCHER})(?:${BELFIORE_CODE_MATCHER})${CHECK_DIGIT}`;\r\n\r\nexport const PARTIAL_CF_NAME_MATCHER: string = `[A-Z][${VOWEL_LIST}]?|[${CONSONANT_LIST}]{1,2}`;\r\nexport const PARTIAL_CF_FULL_NAME: string = `(?:${PARTIAL_CF_NAME_MATCHER})|(?:(?:${CF_NAME_MATCHER})(?:${PARTIAL_CF_NAME_MATCHER})?)`;\r\nexport const PARTIAL_YEAR: string = `[${OMOCODE_NUMBER_LIST}]`;\r\nexport const PARTIAL_MONTH_DAY: string = `${MONTH_MATCHER}[${OMOCODE_ZERO_LIST}12456MNQRS]?|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}]${DAY_3X_MATCHER}`;\r\nexport const PARTIAL_FULL_DATE: string = `${PARTIAL_YEAR}|(?:${YEAR_MATCHER}(?:${PARTIAL_MONTH_DAY})?)`;\r\nexport const PARTIAL_BELFIORE_CODE_MATCHER: string = `[${CITY_CODE_LIST}${COUNTRY_CODE_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]?)?|[${COUNTRY_CODE_LIST}](?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NUMBER_LIST}]?)?`;\r\n\r\nexport const PARTIAL_CF: string = `${PARTIAL_CF_FULL_NAME}|(?:${CF_FULL_NAME_MATCHER}(?:(?:${PARTIAL_FULL_DATE})|(?:${FULL_DATE_MATCHER})(?:(?:${PARTIAL_BELFIORE_CODE_MATCHER})|(?:${BELFIORE_CODE_MATCHER})${CHECK_DIGIT}?)?)?)?`;\r\n","enum CRC {\r\n    \"B\",\r\n    \"A\",\r\n    \"K\",\r\n    \"P\",\r\n    \"L\",\r\n    \"C\",\r\n    \"Q\",\r\n    \"D\",\r\n    \"R\",\r\n    \"E\",\r\n    \"V\",\r\n    \"O\",\r\n    \"S\",\r\n    \"F\",\r\n    \"T\",\r\n    \"G\",\r\n    \"U\",\r\n    \"H\",\r\n    \"M\",\r\n    \"I\",\r\n    \"N\",\r\n    \"J\",\r\n    \"W\",\r\n    \"Z\",\r\n    \"Y\",\r\n    \"X\",\r\n}\r\n\r\nexport default CRC;\r\n","enum BirthMonth {\r\n\t\"A\",\r\n\t\"B\",\r\n\t\"C\",\r\n\t\"D\",\r\n\t\"E\",\r\n\t\"H\",\r\n\t\"L\",\r\n\t\"M\",\r\n\t\"P\",\r\n\t\"R\",\r\n\t\"S\",\r\n\t\"T\",\r\n}\r\n\r\nexport default BirthMonth;\r\n","import { CRC_OFFSET, LASTNAME_OFFSET } from \"../const/cf-offsets.const\";\r\nimport { PARTIAL_CF } from \"../const/matcher.const\";\r\nimport CRC from \"../enums/crc.enum\";\r\nimport generatorWrapper from \"../functions/generator-wrapper.function\";\r\nimport type IGeneratorWrapper from \"../interfaces/generator-wrapper.interface\";\r\nimport type CodiceFiscaleCRC from \"../types/codice-fiscale-crc.type\";\r\nclass CheckDigitizer {\r\n\t/**\r\n\t * Evaluate given partial CF to produce last check digit character\r\n\t * @param codiceFiscale Partial or complete Fiscal Code to evaluate to produce last character\r\n\t * @returns 16th CF char\r\n\t */\r\n\tpublic static checkDigit(codiceFiscale: string): CodiceFiscaleCRC | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale === \"string\" &&\r\n\t\t\tnew RegExp(PARTIAL_CF).test(codiceFiscale)\r\n\t\t) {\r\n\t\t\tconst partialCF = codiceFiscale.substr(LASTNAME_OFFSET, CRC_OFFSET);\r\n\t\t\tlet partialCfValue = 0;\r\n\t\t\tfor (const charValue of this.evaluateChar(partialCF)) {\r\n\t\t\t\tpartialCfValue += charValue as number;\r\n\t\t\t}\r\n\t\t\treturn String.fromCharCode(\r\n\t\t\t\t(partialCfValue % this.CRC_MOD) + this.CHAR_OFFSET\r\n\t\t\t) as CodiceFiscaleCRC;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tpublic static evaluateChar(\r\n\t\tpartialCF: string = \"\"\r\n\t): IGeneratorWrapper<number, 0, void> {\r\n\t\treturn generatorWrapper(this.evaluateCharGenerator(partialCF));\r\n\t}\r\n\r\n\tprivate static CHAR_OFFSET: number = 65;\r\n\tprivate static CRC_MOD: number = 26;\r\n\r\n\t/**\r\n\t * Partial FiscalCode Evaluator\r\n\t * @param Partial Fiscal Code to evaluate\r\n\t * @yields character value odd/even\r\n\t */\r\n\tprivate static *evaluateCharGenerator(partialCF: string = \"\"): Generator {\r\n\t\tif (typeof partialCF === \"string\" && partialCF.length) {\r\n\t\t\tfor (let index = 0; index < partialCF.length; index++) {\r\n\t\t\t\tlet char: string = partialCF[index].toUpperCase();\r\n\t\t\t\tconst isNumber: boolean = /^\\d$/u.test(char);\r\n\t\t\t\tif (isNumber) {\r\n\t\t\t\t\t// Numbers have always (odd/even) the same values of corresponding letters (0-9 => A-J)\r\n\t\t\t\t\tchar = String.fromCharCode(parseInt(char, 10) + this.CHAR_OFFSET);\r\n\t\t\t\t}\r\n\t\t\t\t// Odd/Even are shifted/swapped\r\n\t\t\t\t// array starts from 0, \"Agenzia delle Entrate\" documentation counts the string from 1\r\n\t\t\t\tconst isOdd: boolean = !(index % 2); // Odd according to documentation\r\n\t\t\t\tif (isOdd) {\r\n\t\t\t\t\t// Odd positions\r\n\t\t\t\t\tyield parseInt(CRC[char as any], 10);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Even positions\r\n\t\t\t\t\tyield char.charCodeAt(0) - this.CHAR_OFFSET;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n}\r\n\r\nexport default CheckDigitizer;\r\n","import type IGeneratorWrapper from \"../interfaces/generator-wrapper.interface\";\r\nexport default function generatorWrapper<\r\n\tT = unknown,\r\n\tTReturn = any,\r\n\tTNext = unknown\r\n>(generator: Generator): IGeneratorWrapper<T, TReturn, TNext> {\r\n\tgenerator[Symbol.iterator] = () => generator;\r\n\treturn generator as IGeneratorWrapper<T, TReturn, TNext>;\r\n}\r\n","enum GenderWeight {\r\n\t\"M\" = 0,\r\n\t\"F\" = 40,\r\n}\r\n\r\nexport default GenderWeight;\r\n","enum Omocodes {\r\n\t\"L\",\r\n\t\"M\",\r\n\t\"N\",\r\n\t\"P\",\r\n\t\"Q\",\r\n\t\"R\",\r\n\t\"S\",\r\n\t\"T\",\r\n\t\"U\",\r\n\t\"V\",\r\n}\r\n\r\nexport default Omocodes;\r\n","import { DateDay } from \"../date-utils/\";\r\nimport GenderWeight from \"../enums/gender-weight.enum\";\r\nimport type Genders from \"../types/genders.type\";\r\n\r\nclass Gender {\r\n\tpublic static getDay(genderDay: number): DateDay | null {\r\n\t\tconst plainDay = genderDay % GenderWeight.F;\r\n\t\treturn plainDay > 0 && plainDay <= this.MAX_MONTH_DAY\r\n\t\t\t? (plainDay as DateDay)\r\n\t\t\t: null;\r\n\t}\r\n\r\n\tpublic static getGender(genderDay: number): Genders | null {\r\n\t\treturn (\r\n\t\t\tthis.toArray().find(\r\n\t\t\t\t(gender) =>\r\n\t\t\t\t\tgenderDay >= GenderWeight[gender] &&\r\n\t\t\t\t\tgenderDay <= GenderWeight[gender] + this.MAX_MONTH_DAY\r\n\t\t\t) || null\r\n\t\t);\r\n\t}\r\n\r\n\tpublic static genderizeDay(day: number, gender: Genders): number {\r\n\t\treturn day + GenderWeight[gender];\r\n\t}\r\n\r\n\tpublic static toArray(): Genders[] {\r\n\t\treturn [\"M\", \"F\"];\r\n\t}\r\n\r\n\tprivate static MAX_MONTH_DAY: number = 31;\r\n}\r\n\r\nexport default Gender;\r\n","export const CF_INTRODUCTION_DATE = new Date(\"1973-09-29\");\r\n","import dayjs from \"dayjs\";\r\nimport {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport DiacriticRemover from \"@marketto/diacritic-remover\";\r\nimport {\r\n\tCRC_OFFSET,\r\n\tCRC_SIZE,\r\n\tDAY_OFFSET,\r\n\tDAY_SIZE,\r\n\tFIRSTNAME_OFFSET,\r\n\tFIRSTNAME_SIZE,\r\n\tGENDER_OFFSET,\r\n\tGENDER_SIZE,\r\n\tLASTNAME_OFFSET,\r\n\tLASTNAME_SIZE,\r\n\tMONTH_OFFSET,\r\n\tMONTH_SIZE,\r\n\tPLACE_OFFSET,\r\n\tPLACE_SIZE,\r\n\tYEAR_OFFSET,\r\n\tYEAR_SIZE,\r\n} from \"../const/cf-offsets.const\";\r\nimport { CF_NAME_MATCHER, CF_SURNAME_MATCHER } from \"../const/matcher.const\";\r\nimport { CONSONANT_LIST, VOWEL_LIST } from \"../const/matcher.const\";\r\nimport { DateDay, DateMonth, DateUtils, MultiFormatDate } from \"../date-utils\";\r\nimport BirthMonth from \"../enums/birth-month.enum\";\r\nimport GenderWeight from \"../enums/gender-weight.enum\";\r\nimport Omocodes from \"../enums/omocodes.enum\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CheckDigitizer from \"./check-digitizer.class\";\r\nimport Gender from \"./gender.class\";\r\nimport { CF_INTRODUCTION_DATE } from \"../const/logic.const\";\r\n\r\nconst diacriticRemover = new DiacriticRemover();\r\n\r\nexport default class Parser {\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {}\r\n\r\n\t/**\r\n\t * Default omocode bitmap\r\n\t */\r\n\tpublic OMOCODE_BITMAP: number = 0b0111011011000000;\r\n\r\n\t/**\r\n\t * Convert omocode CF into plain one\r\n\t * @param codiceFiscale Partial or complete Omocode/Regular CF to parse, starting from LastName\r\n\t * @returns Regular CF w/o omocodes chars\r\n\t */\r\n\tpublic cfDeomocode(codiceFiscale: string): string {\r\n\t\tif (codiceFiscale && codiceFiscale.length <= YEAR_OFFSET) {\r\n\t\t\treturn codiceFiscale;\r\n\t\t}\r\n\t\tconst deomocodedCf = this.partialCfDeomocode(codiceFiscale);\r\n\t\tif (deomocodedCf.length < CRC_OFFSET) {\r\n\t\t\treturn deomocodedCf;\r\n\t\t}\r\n\t\tconst partialDeomocodedCf = deomocodedCf.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tCRC_OFFSET\r\n\t\t);\r\n\t\treturn (\r\n\t\t\tpartialDeomocodedCf +\r\n\t\t\tthis.appyCaseToChar(\r\n\t\t\t\tCheckDigitizer.checkDigit(deomocodedCf) || \"\",\r\n\t\t\t\tdeomocodedCf.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic cfOmocode(codiceFiscale: string, omocodeId: number): string {\r\n\t\tif (!omocodeId) {\r\n\t\t\treturn this.cfDeomocode(codiceFiscale);\r\n\t\t}\r\n\t\tconst omocodedCf = codiceFiscale.split(\"\");\r\n\t\t// tslint:disable-next-line: prefer-for-of\r\n\t\tfor (let i = codiceFiscale.length - 1, o = 0; i >= 0; i--) {\r\n\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\tif ((2 ** i) & this.OMOCODE_BITMAP) {\r\n\t\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\t\tconst charToEncode: boolean = !!(omocodeId & (2 ** o));\r\n\t\t\t\tconst isOmocode: boolean = isNaN(parseInt(omocodedCf[i], 10));\r\n\t\t\t\tif (charToEncode !== isOmocode) {\r\n\t\t\t\t\tconst char: any = omocodedCf[i].toUpperCase();\r\n\t\t\t\t\tomocodedCf[i] = Omocodes[char];\r\n\t\t\t\t}\r\n\t\t\t\to++;\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst crc = omocodedCf[CRC_OFFSET];\r\n\t\tif (crc) {\r\n\t\t\tconst partialCf = omocodedCf.slice(LASTNAME_OFFSET, CRC_OFFSET).join(\"\");\r\n\t\t\tomocodedCf[CRC_OFFSET] = this.appyCaseToChar(\r\n\t\t\t\tCheckDigitizer.checkDigit(partialCf) || \"\",\r\n\t\t\t\tcrc\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn omocodedCf.join(\"\");\r\n\t}\r\n\r\n\tpublic cfOmocodeId(codiceFiscale: string): number {\r\n\t\tconst cfOmocodeBitmap = codiceFiscale\r\n\t\t\t.split(\"\")\r\n\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\t.filter((char, index) => (2 ** index) & this.OMOCODE_BITMAP)\r\n\t\t\t.map((char) => (/^[a-z]$/i.test(diacriticRemover[char]) ? 1 : 0))\r\n\t\t\t.join(\"\");\r\n\t\treturn parseInt(cfOmocodeBitmap, 2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse lastName information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Partial/possible lastName\r\n\t */\r\n\tpublic cfToLastName(codiceFiscale: string): string | null {\r\n\t\tconst cfLastNamePart = codiceFiscale?.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tLASTNAME_OFFSET + LASTNAME_SIZE\r\n\t\t);\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcfLastNamePart.length !== LASTNAME_SIZE ||\r\n\t\t\t!new RegExp(`^(?:${CF_SURNAME_MATCHER})`, \"iu\").test(cfLastNamePart)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst lastNameCf = codiceFiscale.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tLASTNAME_OFFSET + LASTNAME_SIZE\r\n\t\t);\r\n\r\n\t\tconst [cons = \"\"] =\r\n\t\t\tlastNameCf.match(new RegExp(`^[${CONSONANT_LIST}]{1,3}`, \"ig\")) || [];\r\n\t\tconst [vow = \"\"] =\r\n\t\t\tlastNameCf.match(new RegExp(`[${VOWEL_LIST}]{1,3}`, \"ig\")) || [];\r\n\r\n\t\tconst matchingLength = cons.length + vow.length;\r\n\r\n\t\tif (\r\n\t\t\tmatchingLength < 2 ||\r\n\t\t\t(matchingLength < 3 && lastNameCf[2].toUpperCase() !== \"X\")\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tswitch (cons.length) {\r\n\t\t\tcase 3:\r\n\t\t\t\treturn (cons + vow).split(\"\").join(this.JOLLY_CHAR) + this.JOLLY_CHAR;\r\n\t\t\tcase 2:\r\n\t\t\t\treturn `${cons[0]}${vow[0]}*${cons[1]}${this.JOLLY_CHAR}`;\r\n\t\t\tcase 1:\r\n\t\t\t\treturn `${cons[0]}${vow}${this.JOLLY_CHAR}`;\r\n\t\t\tdefault:\r\n\t\t\t\treturn `${vow}${vow.length === 3 ? this.JOLLY_CHAR : \"\"}`;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Parse firstName information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Partial/possible firstName\r\n\t */\r\n\tpublic cfToFirstName(codiceFiscale: string): string | null {\r\n\t\tconst cfFirstNamePart = codiceFiscale?.substring(\r\n\t\t\tFIRSTNAME_OFFSET,\r\n\t\t\tFIRSTNAME_OFFSET + FIRSTNAME_SIZE\r\n\t\t);\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcfFirstNamePart?.length !== FIRSTNAME_SIZE ||\r\n\t\t\t!new RegExp(`^(${CF_NAME_MATCHER})$`, \"iu\").test(cfFirstNamePart)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.cfToLastName(cfFirstNamePart);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse gender information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Male or female\r\n\t */\r\n\tpublic cfToGender(codiceFiscale: string): Genders | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < GENDER_OFFSET + GENDER_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst cfGenderPart = codiceFiscale.substring(\r\n\t\t\tGENDER_OFFSET,\r\n\t\t\tGENDER_OFFSET + GENDER_SIZE\r\n\t\t);\r\n\t\tconst genderInt =\r\n\t\t\tparseInt(this.partialCfDeomocode(cfGenderPart, GENDER_OFFSET), 10) * 10;\r\n\t\treturn Gender.getGender(genderInt);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth year information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Year (4 digits)\r\n\t */\r\n\tpublic cfToBirthYear(codiceFiscale: string): number | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < YEAR_OFFSET + YEAR_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst cfBirthYearPart = codiceFiscale.substring(\r\n\t\t\tYEAR_OFFSET,\r\n\t\t\tYEAR_OFFSET + YEAR_SIZE\r\n\t\t);\r\n\t\tconst birthYear: number = parseInt(\r\n\t\t\tthis.partialCfDeomocode(cfBirthYearPart, YEAR_OFFSET),\r\n\t\t\t10\r\n\t\t);\r\n\r\n\t\tif (isNaN(birthYear)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst current2DigitsYear: number = parseInt(dayjs().format(\"YY\"), 10);\r\n\r\n\t\tconst century: number = (birthYear > current2DigitsYear ? 1 : 0) * 100;\r\n\t\treturn dayjs()\r\n\t\t\t.subtract(current2DigitsYear - birthYear + century, \"years\")\r\n\t\t\t.year();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth month information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Month (0...11 - Date notation)\r\n\t */\r\n\tpublic cfToBirthMonth(codiceFiscale: string): DateMonth | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < MONTH_OFFSET + MONTH_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthMonthPart: any = codiceFiscale\r\n\t\t\t.substring(MONTH_OFFSET, MONTH_OFFSET + MONTH_SIZE)\r\n\t\t\t.toUpperCase();\r\n\t\tconst birthMonth = BirthMonth[cfBirthMonthPart];\r\n\t\tif (typeof birthMonth !== \"number\" || birthMonth < 0 || birthMonth > 11) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn birthMonth as DateMonth;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth day information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth day (1..31)\r\n\t */\r\n\tpublic cfToBirthDay(codiceFiscale: string): DateDay | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < DAY_OFFSET + DAY_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthDayPart = codiceFiscale.substring(\r\n\t\t\tDAY_OFFSET,\r\n\t\t\tDAY_OFFSET + DAY_SIZE\r\n\t\t);\r\n\t\tconst birthDay: number = parseInt(\r\n\t\t\tthis.partialCfDeomocode(cfBirthDayPart, DAY_OFFSET),\r\n\t\t\t10\r\n\t\t);\r\n\r\n\t\tif (isNaN(birthDay)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn Gender.getDay(birthDay);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth date information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Date\r\n\t */\r\n\tpublic cfToBirthDate(codiceFiscale: string): Date | null {\r\n\t\tconst birthDay = this.cfToBirthDay(codiceFiscale);\r\n\t\tif (!birthDay) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst birthMonth = this.cfToBirthMonth(codiceFiscale);\r\n\t\tif (typeof birthMonth !== \"number\") {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst birthYear = this.cfToBirthYear(codiceFiscale);\r\n\r\n\t\treturn DateUtils.ymdToDate(birthYear, birthMonth, birthDay);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth place information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @param checkBirthDateConsistency Ensure birthday is between creation and expiran date of the cf city or country, default value: true\r\n\t * @returns Birth place\r\n\t */\r\n\tpublic async cfToBirthPlace(\r\n\t\tcodiceFiscale: string,\r\n\t\tcheckBirthDateConsistency: boolean = true\r\n\t): Promise<BelfiorePlace | null> {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < PLACE_OFFSET + PLACE_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthPlacePart = codiceFiscale.substring(\r\n\t\t\tPLACE_OFFSET,\r\n\t\t\tPLACE_OFFSET + PLACE_SIZE\r\n\t\t);\r\n\t\tconst belfioreCode: string = this.partialCfDeomocode(\r\n\t\t\tcfBirthPlacePart,\r\n\t\t\tPLACE_OFFSET\r\n\t\t);\r\n\r\n\t\tconst birthPlace: BelfiorePlace | undefined | null =\r\n\t\t\tawait this.belfioreConnector.findByCode(belfioreCode);\r\n\t\tif (!birthPlace) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst { creationDate, expirationDate } = birthPlace;\r\n\t\tif ((creationDate || expirationDate) && checkBirthDateConsistency) {\r\n\t\t\tconst birthDate = this.cfToBirthDate(codiceFiscale);\r\n\t\t\tconst isBirthDateAfterCfIntroduction = dayjs(CF_INTRODUCTION_DATE)\r\n\t\t\t\t// Adding some tolerance\r\n\t\t\t\t.add(5, \"years\")\r\n\t\t\t\t.isBefore(birthDate, \"day\");\r\n\r\n\t\t\t// Skipping birthDate vs Creation/Expiration check for people born up to 5y after cf introduction\r\n\t\t\tif (birthDate && isBirthDateAfterCfIntroduction) {\r\n\t\t\t\tconst datePlaceConsistency =\r\n\t\t\t\t\t// BirthDay is before expiration date\r\n\t\t\t\t\t(!expirationDate ||\r\n\t\t\t\t\t\tdayjs(birthDate).isBefore(expirationDate, \"day\")) &&\r\n\t\t\t\t\t// BirthDay is after creation date\r\n\t\t\t\t\t(!creationDate || dayjs(birthDate).isAfter(creationDate, \"day\"));\r\n\t\t\t\tif (!datePlaceConsistency) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn birthPlace;\r\n\t}\r\n\r\n\t/**\r\n\t * @param fiscalCode 16 character Codice Fiscale to decode\r\n\t * @returns Decoded CF Info\r\n\t */\r\n\tpublic async cfDecode(fiscalCode: string): Promise<IPersonalInfo> {\r\n\t\tconst year = this.cfToBirthYear(fiscalCode) || undefined;\r\n\t\t// 0 is a month\r\n\t\tconst month = this.cfToBirthMonth(fiscalCode) ?? undefined;\r\n\t\tconst day = this.cfToBirthDay(fiscalCode) || undefined;\r\n\t\tconst date = DateUtils.ymdToDate(year, month, day) || undefined;\r\n\t\tconst place = await this.cfToBirthPlace(fiscalCode);\r\n\t\tconst personalInfo: IPersonalInfo = {\r\n\t\t\tfirstName: this.cfToFirstName(fiscalCode) || undefined,\r\n\t\t\tlastName: this.cfToLastName(fiscalCode) || undefined,\r\n\r\n\t\t\tday,\r\n\t\t\tmonth,\r\n\t\t\tyear,\r\n\r\n\t\t\tdate,\r\n\r\n\t\t\tgender: this.cfToGender(fiscalCode) || undefined,\r\n\t\t\tplace: place || undefined,\r\n\r\n\t\t\tomocodeId: this.cfOmocodeId(fiscalCode),\r\n\t\t};\r\n\r\n\t\tif (year && month && day) {\r\n\t\t\tpersonalInfo.date = new Date(Date.UTC(year, month, day));\r\n\t\t}\r\n\r\n\t\treturn personalInfo;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse lastName to cf part\r\n\t * @param lastName Partial or complete CF to parse\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic lastNameToCf(lastName?: string | null): string | null {\r\n\t\tif (!lastName || (lastName || \"\").trim().length < 2) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!/^[A-Z ']{1,32}$/iu.test(diacriticRemover.replace(lastName))) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst consonants = this.charExtractor(lastName, CONSONANT_LIST);\r\n\t\tconst vowels = this.charExtractor(lastName, VOWEL_LIST);\r\n\r\n\t\tconst partialCf = (consonants + vowels).padEnd(3, \"X\").substring(0, 3);\r\n\r\n\t\tif (partialCf.length < 3) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn partialCf.toUpperCase();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse firstName to cf part\r\n\t * @param firstName Partial or complete CF to parse\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic firstNameToCf(firstName?: string | null): string | null {\r\n\t\tif (!firstName || (firstName || \"\").trim().length < 2) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst consonants = this.charExtractor(firstName, CONSONANT_LIST);\r\n\t\tif (consonants.length >= 4) {\r\n\t\t\treturn (consonants[0] + consonants.substring(2, 4)).toUpperCase();\r\n\t\t}\r\n\t\treturn this.lastNameToCf(firstName);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse year to cf part\r\n\t * @param year Birth year 2 or 4 digit string, number above 19XX or below 100\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic yearToCf(year: string | number): string | null {\r\n\t\tlet parsedYear: number;\r\n\t\tif (typeof year === \"string\") {\r\n\t\t\tparsedYear = parseInt(year, 10);\r\n\t\t} else {\r\n\t\t\tparsedYear = year;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\t!(\r\n\t\t\t\ttypeof parsedYear === \"number\" &&\r\n\t\t\t\t!isNaN(parsedYear) &&\r\n\t\t\t\t(parsedYear >= 1900 || parsedYear < 100)\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn `0${parsedYear}`.substr(-2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse month information\r\n\t * @param month Month number 0..11\r\n\t * @returns Birth Month CF code\r\n\t */\r\n\tpublic monthToCf(month: DateMonth | number): string | null {\r\n\t\tif (month < 0 || month > 11) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn BirthMonth[month] || null;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse day information\r\n\t * @param day Day number 1..31\r\n\t * @param gender Gender enum value\r\n\t * @returns Birth Day CF code\r\n\t */\r\n\tpublic dayGenderToCf(day: DateDay | number, gender: Genders): string | null {\r\n\t\tif (day < 1 || day > 31) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst genderValue = GenderWeight[gender as any];\r\n\t\tif (typeof genderValue !== \"number\") {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn `0${day + genderValue}`.substr(-2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Year, Month, Day to Dated\r\n\t * @param year 4 digits Year\r\n\t * @param month 1 or 2 digits Month 0..11\r\n\t * @param day 1,2 digits Day 1..31\r\n\t * @returns Date or null if provided year/month/day are not valid\r\n\t */\r\n\tpublic yearMonthDayToDate(\r\n\t\tyear: number | null | undefined,\r\n\t\tmonth: DateMonth | null | undefined = 0,\r\n\t\tday: DateDay | null | undefined = 1\r\n\t): Date | null {\r\n\t\tif (\r\n\t\t\t!year ||\r\n\t\t\tyear < 1861 ||\r\n\t\t\t[month, day].some((param) => typeof param !== \"number\")\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst date = dayjs(Date.UTC(year, month || 0, day || 1));\r\n\t\tif (\r\n\t\t\t!date.isValid() ||\r\n\t\t\tdate.year() !== year ||\r\n\t\t\tdate.month() !== month ||\r\n\t\t\tdate.date() !== day\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn date.toDate();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Place information to return city or country details\r\n\t * @param place Belfiore place instance, belfiore code or city/country name\r\n\t * @returns BelfiorePlace instance with the target city or country details\r\n\t */\r\n\tpublic async parsePlace(\r\n\t\tplace: BelfiorePlace | string\r\n\t): Promise<BelfiorePlace | null> {\r\n\t\tlet verifiedBirthPlace: BelfiorePlace | null | undefined;\r\n\t\tif (!place) {\r\n\t\t\treturn null;\r\n\t\t} else if (typeof place === \"object\" && place.belfioreCode) {\r\n\t\t\tverifiedBirthPlace = await this.belfioreConnector.findByCode(\r\n\t\t\t\tplace.belfioreCode\r\n\t\t\t);\r\n\t\t} else if (typeof place === \"string\") {\r\n\t\t\tverifiedBirthPlace =\r\n\t\t\t\t(await this.belfioreConnector.findByCode(place)) ||\r\n\t\t\t\t(await this.belfioreConnector.findByName(place));\r\n\t\t}\r\n\t\treturn verifiedBirthPlace || null;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Date and Gender information to create Date/Gender CF part\r\n\t * @param date Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @param gender Gender enum value\r\n\t * @returns Birth date and Gender CF code\r\n\t */\r\n\tpublic dateGenderToCf(date: MultiFormatDate, gender: Genders): string | null {\r\n\t\tconst parsedDate = DateUtils.parseDate(date);\r\n\t\tif (!parsedDate) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfYear = this.yearToCf(parsedDate.getFullYear());\r\n\t\tconst cfMonth = this.monthToCf(parsedDate.getMonth());\r\n\t\tconst cfDayGender = this.dayGenderToCf(parsedDate.getDate(), gender);\r\n\r\n\t\treturn `${cfYear}${cfMonth}${cfDayGender}`;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse place name and province to Belfiore code\r\n\t * @param cityOrCountryName City or Country name\r\n\t * @param provinceId Province code for cities\r\n\t * @returns Matching place belfiore code, if only once is matching criteria\r\n\t */\r\n\t/**\r\n\t * Parse a Date and Gender information to create Date/Gender CF part\r\n\t * @param birthDate Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @param cityOrCountryName City or Country name\r\n\t * @param provinceId Province code for cities\r\n\t * @returns Matching place belfiore code, if only once is matching criteria\r\n\t */\r\n\tpublic async placeToCf(\r\n\t\tcityOrCountryName: string,\r\n\t\tprovinceId?: string\r\n\t): Promise<string | null>;\r\n\tpublic async placeToCf(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tcityOrCountryName: string,\r\n\t\tprovinceId?: string\r\n\t): Promise<string | null>;\r\n\tpublic async placeToCf(\r\n\t\tdateOrName: MultiFormatDate,\r\n\t\tnameOrProvince?: string,\r\n\t\tprovinceId?: string\r\n\t): Promise<string | null> {\r\n\t\tconst birthDate: Date | null = DateUtils.parseDate(dateOrName);\r\n\t\tlet name: string;\r\n\t\tlet province: string | undefined;\r\n\t\tif (!birthDate && typeof dateOrName === \"string\") {\r\n\t\t\tname = dateOrName;\r\n\t\t\tprovince = nameOrProvince;\r\n\t\t} else if (nameOrProvince) {\r\n\t\t\tname = nameOrProvince;\r\n\t\t\tprovince = provinceId;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tlet placeFinder: IBelfioreConnector | undefined = this.belfioreConnector;\r\n\t\tif (province) {\r\n\t\t\tplaceFinder = placeFinder.byProvince(province);\r\n\t\t}\r\n\t\tif (birthDate && placeFinder) {\r\n\t\t\tplaceFinder = placeFinder.from(birthDate);\r\n\t\t}\r\n\t\tif (placeFinder) {\r\n\t\t\tconst foundPlace: BelfiorePlace | null = await new Parser(\r\n\t\t\t\tplaceFinder\r\n\t\t\t).parsePlace(name);\r\n\t\t\tif (foundPlace) {\r\n\t\t\t\treturn foundPlace.belfioreCode;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\t/**\r\n\t * Generates full CF\r\n\t * @returns Complete CF\r\n\t */\r\n\tpublic async encodeCf({\r\n\t\tlastName,\r\n\t\tfirstName,\r\n\r\n\t\tyear,\r\n\t\tmonth,\r\n\t\tday,\r\n\t\tdate,\r\n\r\n\t\tgender,\r\n\t\tplace,\r\n\r\n\t\tomocodeId = 0,\r\n\t}: Omit<IPersonalInfo, \"place\"> & {\r\n\t\tplace?: BelfiorePlace | string | undefined;\r\n\t}): Promise<string | null> {\r\n\t\tconst dtParams =\r\n\t\t\tDateUtils.parseDate(date) || this.yearMonthDayToDate(year, month, day);\r\n\t\tif (!(dtParams && lastName && firstName && gender && place)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst generator = [\r\n\t\t\tasync () => this.lastNameToCf(lastName),\r\n\t\t\tasync () => this.firstNameToCf(firstName),\r\n\t\t\tasync () => this.dateGenderToCf(dtParams, gender),\r\n\t\t\tasync () =>\r\n\t\t\t\tawait this.placeToCf(\r\n\t\t\t\t\tdtParams,\r\n\t\t\t\t\t(place as BelfiorePlace)?.belfioreCode || (place as string)\r\n\t\t\t\t),\r\n\t\t];\r\n\t\tlet cf = \"\";\r\n\t\tfor (const cfPartGenerator of generator) {\r\n\t\t\tconst cfValue = await cfPartGenerator();\r\n\t\t\tif (!cfValue) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcf += cfValue;\r\n\t\t}\r\n\r\n\t\treturn this.cfOmocode(cf, omocodeId);\r\n\t}\r\n\r\n\tprivate JOLLY_CHAR: string = \"*\";\r\n\r\n\tprivate checkBitmap(offset: number): boolean {\r\n\t\t// tslint:disable-next-line: no-bitwise\r\n\t\treturn !!((2 ** offset) & this.OMOCODE_BITMAP);\r\n\t}\r\n\r\n\tprivate charOmocode(char: string, offset: number): string {\r\n\t\tif (/^[A-Z]$/giu.test(char) && this.checkBitmap(offset)) {\r\n\t\t\treturn Omocodes[char.toUpperCase() as any];\r\n\t\t}\r\n\r\n\t\treturn char;\r\n\t}\r\n\r\n\tprivate charExtractor(text: string, CHAR_LIST: string): string {\r\n\t\tconst charMatcher = new RegExp(`[${CHAR_LIST}]{1,24}`, \"ig\");\r\n\t\tconst diacriticFreeText = diacriticRemover.replace(text).trim();\r\n\t\tconst matchingChars = diacriticFreeText.match(charMatcher);\r\n\t\treturn (matchingChars || []).join(\"\");\r\n\t}\r\n\r\n\t/**\r\n\t * Convert omocode full or chunk CF into plain one\r\n\t * @param partialCodiceFiscale Partial or complete Omocode/Regular CF to parse\r\n\t * @param offset starting point of the given chunk in the 16 char CF\r\n\t * @returns Regular version w/o omocodes chars of the given chunk\r\n\t */\r\n\tprivate partialCfDeomocode(\r\n\t\tpartialCodiceFiscale: string,\r\n\t\toffset: number = 0\r\n\t): string {\r\n\t\tconst charReplacer = (char: string, position: number) =>\r\n\t\t\tthis.charOmocode(char, position + offset);\r\n\t\treturn partialCodiceFiscale.replace(/[\\dA-Z]/giu, charReplacer);\r\n\t}\r\n\r\n\tprivate appyCaseToChar(targetChar: string, counterCaseChar: string): string {\r\n\t\tif (targetChar && counterCaseChar) {\r\n\t\t\tconst isUpperCase =\r\n\t\t\t\tcounterCaseChar[0] === counterCaseChar[0].toUpperCase();\r\n\t\t\tconst isLowerCase =\r\n\t\t\t\tcounterCaseChar[0] === counterCaseChar[0].toLowerCase();\r\n\r\n\t\t\tif (isUpperCase && !isLowerCase) {\r\n\t\t\t\treturn targetChar[0].toUpperCase();\r\n\t\t\t} else if (!isUpperCase && isLowerCase) {\r\n\t\t\t\treturn targetChar[0].toLowerCase();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn targetChar[0];\r\n\t}\r\n}\r\n","const INVALID_SURNAME: string =\r\n\t\"Provided lastName is not valid, only letters, diacritics and apostrophe allowed\";\r\nconst INVALID_NAME: string =\r\n\t\"Provided name is not valid, only letters, diacritics and apostrophe allowed\";\r\nconst INVALID_DAY: string = \"Provided day is not valid\";\r\nconst INVALID_GENDER: string = \"Provided gender is not valid\";\r\nconst INVALID_DAY_OR_GENDER: string =\r\n\t\"Provided day and/or gender are not valid\";\r\nconst INVALID_YEAR: string =\r\n\t\"Provided year is not valid, only 2 or 4 digit numbers are allowed\";\r\nconst INVALID_DATE: string = \"Provided date is not valid\";\r\nconst INVALID_PLACE_NAME: string = \"Proviced City/Country name is not valid\";\r\n\r\nexport {\r\n\tINVALID_DATE,\r\n\tINVALID_DAY,\r\n\tINVALID_DAY_OR_GENDER,\r\n\tINVALID_GENDER,\r\n\tINVALID_NAME,\r\n\tINVALID_PLACE_NAME,\r\n\tINVALID_SURNAME,\r\n\tINVALID_YEAR,\r\n};\r\n","import * as ErrorMessages from \"../const/error-messages.const\";\r\n\r\nclass CfuError extends Error {\r\n    constructor(errorMessage: string)\r\n    constructor(errorCode: string) {\r\n        super((Object.entries(ErrorMessages).find(([errId]) => errId === errorCode) || [])[1] || errorCode);\r\n    }\r\n}\r\n\r\nexport default CfuError;\r\n","import {\r\n\tBelfiorePlace,\r\n\tIBelfioreConnector,\r\n} from \"@marketto/belfiore-connector\";\r\nimport DiacriticRemover from \"@marketto/diacritic-remover\";\r\nimport {\r\n\tINVALID_DATE,\r\n\tINVALID_DAY,\r\n\tINVALID_DAY_OR_GENDER,\r\n\tINVALID_GENDER,\r\n\tINVALID_NAME,\r\n\tINVALID_SURNAME,\r\n\tINVALID_YEAR,\r\n} from \"../const/error-messages.const\";\r\nimport {\r\n\tBELFIORE_CODE_MATCHER,\r\n\tCF_NAME_MATCHER,\r\n\tCF_SURNAME_MATCHER,\r\n\tCHECK_DIGIT,\r\n\tCODICE_FISCALE,\r\n\tCONSONANT_LIST,\r\n\tDAY_MATCHER,\r\n\tFEMALE_DAY_MATCHER,\r\n\tFEMALE_FULL_DATE_MATCHER,\r\n\tFULL_DATE_MATCHER,\r\n\tMALE_DAY_MATCHER,\r\n\tMALE_FULL_DATE_MATCHER,\r\n\tMONTH_MATCHER,\r\n\tVOWEL_LIST,\r\n\tYEAR_MATCHER,\r\n} from \"../const/matcher.const\";\r\nimport {\r\n\tDATE_MATCHER,\r\n\tDateDay,\r\n\tDateMonth,\r\n\tDateUtils,\r\n\tMultiFormatDate,\r\n} from \"../date-utils/\";\r\nimport Omocodes from \"../enums/omocodes.enum\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CfuError from \"./cfu-error.class\";\r\nimport Gender from \"./gender.class\";\r\nimport Parser from \"./parser.class\";\r\nimport dayjs from \"dayjs\";\r\n\r\nconst diacriticRemover = new DiacriticRemover();\r\n\r\nexport default class Pattern {\r\n\tprivate parser: Parser;\r\n\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given lastName or generic\r\n\t * @param lastName Optional lastName to generate validation regexp\r\n\t * @return CF Surname matcher\r\n\t * @throw INVALID_SURNAME\r\n\t */\r\n\tpublic cfLastName(lastName?: string): RegExp {\r\n\t\tlet matcher: string = CF_SURNAME_MATCHER;\r\n\t\tif (lastName) {\r\n\t\t\tif (!this.lastName().test(lastName)) {\r\n\t\t\t\tthrow new CfuError(INVALID_SURNAME);\r\n\t\t\t}\r\n\t\t\tmatcher = this.parser.lastNameToCf(lastName) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given name or generic\r\n\t * @param name Optional name to generate validation regexp\r\n\t * @return CF name matcher\r\n\t * @throw INVALID_NAME\r\n\t */\r\n\tpublic cfFirstName(name?: string): RegExp {\r\n\t\tlet matcher: string = CF_NAME_MATCHER;\r\n\t\tif (name) {\r\n\t\t\tif (!this.lastName().test(name)) {\r\n\t\t\t\tthrow new CfuError(INVALID_NAME);\r\n\t\t\t}\r\n\t\t\tmatcher = this.parser.firstNameToCf(name) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param year Optional year to generate validation regexp\r\n\t * @return CF year matcher\r\n\t */\r\n\tpublic cfYear(year?: number): RegExp {\r\n\t\tlet matcher: string = YEAR_MATCHER;\r\n\t\tif (year) {\r\n\t\t\tconst parsedYear = this.parser.yearToCf(year);\r\n\t\t\tif (parsedYear) {\r\n\t\t\t\tmatcher = this.deomocode(parsedYear);\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_YEAR);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given month or generic\r\n\t * @param month Optional month to generate validation regexp\r\n\t * @return CF month matcher\r\n\t */\r\n\tpublic cfMonth(month?: DateMonth) {\r\n\t\tlet matcher: string = MONTH_MATCHER;\r\n\t\tif (month) {\r\n\t\t\tmatcher = this.parser.monthToCf(month) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given day or generic\r\n\t * @param day Optional day to generate validation regexp\r\n\t * @return CF day matcher\r\n\t */\r\n\tpublic cfDay(day?: DateDay): RegExp {\r\n\t\tlet matcher = DAY_MATCHER;\r\n\t\tif (day) {\r\n\t\t\tconst parsedDayM = this.parser.dayGenderToCf(day, \"M\");\r\n\t\t\tconst parsedDayF = this.parser.dayGenderToCf(day, \"F\");\r\n\t\t\tif (parsedDayM && parsedDayF) {\r\n\t\t\t\tconst matcherM: string = this.deomocode(parsedDayM);\r\n\t\t\t\tconst matcherF: string = this.deomocode(parsedDayF);\r\n\t\t\t\tmatcher = `(?:${matcherM})|(?:${matcherF})`;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_DAY);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param day Optional day to generate validation regexp\r\n\t * @param gender Gender @see Genders\r\n\t * @return CF day and gender matcher\r\n\t */\r\n\tpublic cfDayGender(day?: DateDay, gender?: Genders): RegExp {\r\n\t\tif (!gender) {\r\n\t\t\treturn this.cfDay(day);\r\n\t\t}\r\n\t\tlet matcher;\r\n\t\tif (day) {\r\n\t\t\tconst parsedDayGender = this.parser.dayGenderToCf(day, gender);\r\n\t\t\tif (parsedDayGender) {\r\n\t\t\t\tmatcher = this.deomocode(parsedDayGender);\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_DAY_OR_GENDER);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tswitch (gender) {\r\n\t\t\t\tcase \"M\":\r\n\t\t\t\t\tmatcher = MALE_DAY_MATCHER;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"F\":\r\n\t\t\t\t\tmatcher = FEMALE_DAY_MATCHER;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new CfuError(INVALID_GENDER);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param date Optional date to generate validation regexp\r\n\t * @param gender @see Genders\r\n\t * @return CF date and gender matcher\r\n\t */\r\n\tpublic cfDateGender(\r\n\t\tdate?: MultiFormatDate | null,\r\n\t\tgender?: Genders | null\r\n\t): RegExp {\r\n\t\tif (date && !DateUtils.parseDate(date)) {\r\n\t\t\tthrow new CfuError(INVALID_DATE);\r\n\t\t}\r\n\t\tif (gender && !Gender.toArray().includes(gender)) {\r\n\t\t\tthrow new CfuError(INVALID_GENDER);\r\n\t\t}\r\n\t\tlet matcher = FULL_DATE_MATCHER;\r\n\t\tif (date) {\r\n\t\t\tconst parsedDateGender =\r\n\t\t\t\tgender && this.parser.dateGenderToCf(date, gender);\r\n\t\t\tif (parsedDateGender) {\r\n\t\t\t\tmatcher = this.deomocode(parsedDateGender);\r\n\t\t\t} else {\r\n\t\t\t\tconst parseDeomocode = (g: Genders): string => {\r\n\t\t\t\t\tconst parsedGender = this.parser.dateGenderToCf(date, g);\r\n\t\t\t\t\tif (!parsedGender) {\r\n\t\t\t\t\t\tthrow new CfuError(INVALID_DATE);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn parsedGender && this.deomocode(parsedGender);\r\n\t\t\t\t};\r\n\t\t\t\tmatcher = `(?:${Gender.toArray().map(parseDeomocode).join(\"|\")})`;\r\n\t\t\t}\r\n\t\t} else if (gender === \"M\") {\r\n\t\t\tmatcher = MALE_FULL_DATE_MATCHER;\r\n\t\t} else if (gender === \"F\") {\r\n\t\t\tmatcher = FEMALE_FULL_DATE_MATCHER;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * @param placeName Optional place name to generate validation regexp\r\n\t * @return CF place matcher\r\n\t */\r\n\t/**\r\n\t * @param date Optional date to generate validation regexp\r\n\t * @param placeName Optional place name to generate validation regexp\r\n\t * @return CF place matcher\r\n\t */\r\n\tpublic async cfPlace(placeName?: string | null): Promise<RegExp>;\r\n\tpublic async cfPlace(\r\n\t\tbirthDate?: MultiFormatDate | null,\r\n\t\tplaceName?: string | null\r\n\t): Promise<RegExp>;\r\n\tpublic async cfPlace(\r\n\t\tbirthDateOrName?: MultiFormatDate | null,\r\n\t\tplaceName?: string | null\r\n\t): Promise<RegExp> {\r\n\t\tlet matcher = BELFIORE_CODE_MATCHER;\r\n\t\tif (birthDateOrName) {\r\n\t\t\tconst birthDate: Date | null = DateUtils.parseDate(birthDateOrName);\r\n\r\n\t\t\tif (birthDate && placeName) {\r\n\t\t\t\tconst place: string = placeName;\r\n\t\t\t\tconst parsedPlace = await this.parser.placeToCf(birthDate, place);\r\n\t\t\t\tmatcher = this.deomocode(parsedPlace || \"\");\r\n\t\t\t} else if (!birthDate && typeof birthDateOrName === \"string\") {\r\n\t\t\t\tconst place: string = birthDateOrName;\r\n\t\t\t\tconst parsedPlace = await this.parser.placeToCf(place);\r\n\t\t\t\tmatcher = this.deomocode(parsedPlace || \"\");\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Generates full CF validator based on given optional input or generic\r\n\t * @param personalInfo Input Object\r\n\t * @return CodiceFiscale matcher\r\n\t */\r\n\tpublic async codiceFiscale(\r\n\t\tpersonalInfo?: Omit<IPersonalInfo, \"place\"> & {\r\n\t\t\tplace?: BelfiorePlace | string | undefined;\r\n\t\t}\r\n\t): Promise<RegExp> {\r\n\t\tlet matcher = CODICE_FISCALE;\r\n\t\tif (personalInfo) {\r\n\t\t\tconst parsedCf = await this.parser.encodeCf(personalInfo);\r\n\r\n\t\t\tif (parsedCf) {\r\n\t\t\t\tmatcher = this.deomocode(parsedCf);\r\n\t\t\t} else {\r\n\t\t\t\tconst { lastName, firstName, year, month, day, date, gender, place } =\r\n\t\t\t\t\tpersonalInfo;\r\n\t\t\t\tif (\r\n\t\t\t\t\tlastName ||\r\n\t\t\t\t\tfirstName ||\r\n\t\t\t\t\tyear ||\r\n\t\t\t\t\tmonth ||\r\n\t\t\t\t\tday ||\r\n\t\t\t\t\tdate ||\r\n\t\t\t\t\tgender ||\r\n\t\t\t\t\tplace\r\n\t\t\t\t) {\r\n\t\t\t\t\tlet dtParams: Date | null = null;\r\n\t\t\t\t\tif (date) {\r\n\t\t\t\t\t\tdtParams = DateUtils.parseDate(date);\r\n\t\t\t\t\t} else if (year) {\r\n\t\t\t\t\t\tdtParams = this.parser.yearMonthDayToDate(year, month, day);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst generator: (() => Promise<RegExp>)[] = [\r\n\t\t\t\t\t\tasync () => this.cfLastName(lastName),\r\n\t\t\t\t\t\tasync () => this.cfFirstName(firstName),\r\n\t\t\t\t\t\tasync () => this.cfDateGender(dtParams, gender),\r\n\t\t\t\t\t\tasync () =>\r\n\t\t\t\t\t\t\tawait this.cfPlace(\r\n\t\t\t\t\t\t\t\tdtParams,\r\n\t\t\t\t\t\t\t\t(place as BelfiorePlace)?.belfioreCode || (place as string)\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t];\r\n\r\n\t\t\t\t\tmatcher = \"\";\r\n\t\t\t\t\tfor (const validator of generator) {\r\n\t\t\t\t\t\tconst cfMatcher = (await validator()).toString();\r\n\t\t\t\t\t\tconst match = cfMatcher.match(/\\^(.{1,256})\\$/);\r\n\t\t\t\t\t\tconst cfValue: string | null | undefined = match && match[1];\r\n\r\n\t\t\t\t\t\tif (!cfValue) {\r\n\t\t\t\t\t\t\tthrow new Error(`Unable to handle [${cfMatcher}]`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmatcher += `(?:${cfValue})`;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Final addition of CheckDigit\r\n\t\t\t\t\tmatcher += CHECK_DIGIT;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\tprivate LETTER_SET: string = `[A-Z${diacriticRemover.matcherBy(\r\n\t\t/^[A-Z]$/iu\r\n\t)}]`;\r\n\tprivate SEPARATOR_SET: string = \"(?:'?\\\\s{0,4})\";\r\n\r\n\t/**\r\n\t * Returns lastName validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic lastName(codiceFiscale?: string): RegExp {\r\n\t\tlet matcher: string = `${this.LETTER_SET}{1,24}`;\r\n\t\tif (codiceFiscale && /^[A-Z]{1,3}/iu.test(codiceFiscale)) {\r\n\t\t\tconst lastNameCf: string = codiceFiscale.substr(0, 3);\r\n\t\t\tconst diacriticizer = (matchingChars: string) =>\r\n\t\t\t\tmatchingChars\r\n\t\t\t\t\t.split(\"\")\r\n\t\t\t\t\t.map((char) => `[${diacriticRemover.insensitiveMatcher[char]}]`);\r\n\r\n\t\t\tconst [cons, vow] = [\r\n\t\t\t\t`^[${CONSONANT_LIST}]{1,3}`,\r\n\t\t\t\t`[${VOWEL_LIST}]{1,3}`,\r\n\t\t\t].map((charMatcher) =>\r\n\t\t\t\tdiacriticizer(\r\n\t\t\t\t\t(lastNameCf.match(new RegExp(charMatcher, \"ig\")) || [])[0] || \"\"\r\n\t\t\t\t)\r\n\t\t\t);\r\n\r\n\t\t\tconst diacriticsVowelList: string =\r\n\t\t\t\tVOWEL_LIST +\r\n\t\t\t\tdiacriticRemover.matcherBy(new RegExp(`^[${VOWEL_LIST}]$`, \"ui\"));\r\n\t\t\tconst diacriticsVowelMatcher: string = `[${diacriticsVowelList}]`;\r\n\t\t\tconst midDiacriticVowelMatcher: string = `(?:${diacriticsVowelMatcher}${this.SEPARATOR_SET}){0,24}`;\r\n\t\t\tconst endingDiacritcVowelMatcher: string = `(?:${this.SEPARATOR_SET}${midDiacriticVowelMatcher}${diacriticsVowelMatcher})?`;\r\n\t\t\tswitch (cons.length) {\r\n\t\t\t\tcase 3: {\r\n\t\t\t\t\tconst divider = midDiacriticVowelMatcher;\r\n\t\t\t\t\tmatcher =\r\n\t\t\t\t\t\tdivider +\r\n\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}${divider}`) +\r\n\t\t\t\t\t\t`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{0,24}${this.LETTER_SET})?`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase 2: {\r\n\t\t\t\t\tconst possibilities = [\r\n\t\t\t\t\t\t`${vow[0]}${midDiacriticVowelMatcher}${this.SEPARATOR_SET}${cons[0]}${midDiacriticVowelMatcher}${cons[1]}`,\r\n\t\t\t\t\t\t`${cons[0]}${this.SEPARATOR_SET}` +\r\n\t\t\t\t\t\t\tvow.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\t`${this.SEPARATOR_SET}${midDiacriticVowelMatcher}${cons[1]}`,\r\n\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\t`${this.SEPARATOR_SET}${vow[0]}`,\r\n\t\t\t\t\t];\r\n\t\t\t\t\tmatcher = `(?:${possibilities.join(\r\n\t\t\t\t\t\t\"|\"\r\n\t\t\t\t\t)})${endingDiacritcVowelMatcher}`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase 1: {\r\n\t\t\t\t\tconst possibilities = [\r\n\t\t\t\t\t\tvow.slice(0, 2).join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\tmidDiacriticVowelMatcher +\r\n\t\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`),\r\n\t\t\t\t\t\t`${vow[0]}${this.SEPARATOR_SET}` +\r\n\t\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\tvow[1],\r\n\t\t\t\t\t\t[cons[0], ...vow.slice(0, 2)].join(`${this.SEPARATOR_SET}`),\r\n\t\t\t\t\t];\r\n\t\t\t\t\tmatcher = `(?:${possibilities.join(\r\n\t\t\t\t\t\t\"|\"\r\n\t\t\t\t\t)})${endingDiacritcVowelMatcher}`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tmatcher = `${vow.join(\r\n\t\t\t\t\t\t`${this.SEPARATOR_SET}`\r\n\t\t\t\t\t)}${endingDiacritcVowelMatcher}`;\r\n\t\t\t}\r\n\r\n\t\t\tif (vow?.length + cons?.length < 3) {\r\n\t\t\t\treturn this.isolatedInsensitiveTailor(`\\\\s{0,4}(${matcher})\\\\s{0,4}`);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.isolatedInsensitiveTailor(\r\n\t\t\t`\\\\s{0,4}((?:${matcher})(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24})\\\\s{0,4}`\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns name validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic firstName(codiceFiscale?: string): RegExp {\r\n\t\tif (\r\n\t\t\tcodiceFiscale &&\r\n\t\t\tnew RegExp(`^[A-Z]{3}[${CONSONANT_LIST}]{3}`, \"iu\").test(codiceFiscale)\r\n\t\t) {\r\n\t\t\tconst nameCf: string = codiceFiscale.substr(3, 3);\r\n\r\n\t\t\tconst cons: string[] = (\r\n\t\t\t\t(nameCf.match(new RegExp(`^[${CONSONANT_LIST}]{1,3}`, \"ig\")) ||\r\n\t\t\t\t\t[])[0] || \"\"\r\n\t\t\t)\r\n\t\t\t\t.split(\"\")\r\n\t\t\t\t.map((char) => `[${diacriticRemover.insensitiveMatcher[char]}]`);\r\n\r\n\t\t\tconst [diacriticsVowelList, diacriticsConsonantList]: string[] = [\r\n\t\t\t\tVOWEL_LIST,\r\n\t\t\t\tCONSONANT_LIST,\r\n\t\t\t].map(\r\n\t\t\t\t(chars) =>\r\n\t\t\t\t\tchars + diacriticRemover.matcherBy(new RegExp(`^[${chars}]$`, \"ui\"))\r\n\t\t\t);\r\n\r\n\t\t\tconst matcher: string =\r\n\t\t\t\t`(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}${cons[0]}${this.SEPARATOR_SET}(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}(?:[${diacriticsConsonantList}]${this.SEPARATOR_SET}(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24})?` +\r\n\t\t\t\tcons\r\n\t\t\t\t\t.slice(1, 3)\r\n\t\t\t\t\t.join(\r\n\t\t\t\t\t\t`${this.SEPARATOR_SET}(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}`\r\n\t\t\t\t\t) +\r\n\t\t\t\t`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24}`;\r\n\r\n\t\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t\t}\r\n\t\treturn this.lastName((codiceFiscale || \"\").substr(3, 3));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns iso8601 date validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic date(codiceFiscale?: string): RegExp {\r\n\t\tlet matcher: string = DATE_MATCHER.ISO8601_DATE_TIME;\r\n\t\tif (codiceFiscale) {\r\n\t\t\tconst parsedDate = this.parser.cfToBirthDate(codiceFiscale);\r\n\t\t\tif (parsedDate) {\r\n\t\t\t\tconst dateIso8601: string = parsedDate.toJSON();\r\n\t\t\t\tif (dayjs().diff(dayjs(parsedDate), \"y\") < 50) {\r\n\t\t\t\t\tconst century: number = parseInt(dateIso8601.substr(0, 2), 10);\r\n\t\t\t\t\tconst centuries: string[] = [century - 1, century].map((year) =>\r\n\t\t\t\t\t\tyear.toString().padStart(2, \"0\")\r\n\t\t\t\t\t);\r\n\t\t\t\t\tmatcher = `(?:${centuries.join(\"|\")})` + dateIso8601.substr(2, 8);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmatcher = dateIso8601.substr(0, 10);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(\r\n\t\t\t`${matcher}(?:T${DATE_MATCHER.TIME}(?:${DATE_MATCHER.TIMEZONE})?)?`\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns gender validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic gender(codiceFiscale?: string): RegExp {\r\n\t\tconst parsedGender = codiceFiscale && this.parser.cfToGender(codiceFiscale);\r\n\t\tconst matcher: string = parsedGender || `[${Gender.toArray().join(\"\")}]`;\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns place validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic async place(codiceFiscale?: string): Promise<RegExp> {\r\n\t\tlet matcher: string = \".{1,32}\";\r\n\t\tconst parsedPlace =\r\n\t\t\tcodiceFiscale && (await this.parser.cfToBirthPlace(codiceFiscale));\r\n\r\n\t\tif (parsedPlace) {\r\n\t\t\tconst nameMatcher: string = parsedPlace.name.replace(/./gu, (c: string) =>\r\n\t\t\t\tdiacriticRemover[c] === c ? c : `[${c}${diacriticRemover[c]}]`\r\n\t\t\t);\r\n\t\t\tmatcher = `(?:(?:${nameMatcher})|${parsedPlace.belfioreCode})`;\r\n\t\t}\r\n\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\tpublic deomocode(omocode: string): string {\r\n\t\treturn omocode.replace(/\\d/gu, (n: any) => `[${n}${Omocodes[n]}]`);\r\n\t}\r\n\r\n\tprivate isolatedInsensitiveTailor(matcher: string): RegExp {\r\n\t\treturn new RegExp(`^(?:${matcher})$`, \"iu\");\r\n\t}\r\n}\r\n","import dayjs from \"dayjs\";\r\nimport {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport {\r\n\tCRC_OFFSET,\r\n\tCRC_SIZE,\r\n\tDATE_OFFSET,\r\n\tDATE_SIZE,\r\n\tFIRSTNAME_OFFSET,\r\n\tFIRSTNAME_SIZE,\r\n\tGENDER_OFFSET,\r\n\tGENDER_SIZE,\r\n\tLASTNAME_OFFSET,\r\n\tLASTNAME_SIZE,\r\n\tPLACE_OFFSET,\r\n\tPLACE_SIZE,\r\n\tYEAR_OFFSET,\r\n\tYEAR_SIZE,\r\n} from \"../const/cf-offsets.const\";\r\nimport { DateUtils, MultiFormatDate } from \"../date-utils/\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CheckDigitizer from \"./check-digitizer.class\";\r\nimport Parser from \"./parser.class\";\r\nimport Pattern from \"./pattern.class\";\r\nimport type IMismatchVerboseErrors from \"../interfaces/mismatch-verbose-errors.interface\";\r\n\r\nexport default class CFMismatchValidator {\r\n\tprivate pattern: Pattern;\r\n\tprivate parser: Parser;\r\n\tconstructor(\r\n\t\tbelfioreConnector: IBelfioreConnector,\r\n\t\tprivate readonly codiceFiscale: string\r\n\t) {\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t}\r\n\r\n\tprivate get hasLastName() {\r\n\t\treturn this.codiceFiscale?.length >= LASTNAME_OFFSET + LASTNAME_SIZE;\r\n\t}\r\n\r\n\tprivate get hasFirstName() {\r\n\t\treturn this.codiceFiscale?.length >= FIRSTNAME_OFFSET + FIRSTNAME_SIZE;\r\n\t}\r\n\tprivate get hasBirthYear() {\r\n\t\treturn this.codiceFiscale?.length >= YEAR_OFFSET + YEAR_SIZE;\r\n\t}\r\n\tprivate get hasBirthDate() {\r\n\t\treturn this.codiceFiscale?.length >= DATE_OFFSET + DATE_SIZE;\r\n\t}\r\n\tprivate get hasGender() {\r\n\t\treturn this.codiceFiscale?.length >= GENDER_OFFSET + GENDER_SIZE;\r\n\t}\r\n\tprivate get hasBirthPlace() {\r\n\t\treturn this.codiceFiscale?.length >= PLACE_OFFSET + PLACE_SIZE;\r\n\t}\r\n\r\n\tprivate get hasCRC() {\r\n\t\treturn this.codiceFiscale?.length >= CRC_OFFSET + CRC_SIZE;\r\n\t}\r\n\r\n\tpublic async matchPersonalInfo(\r\n\t\tpersonalInfo: Omit<IPersonalInfo, \"place\"> & {\r\n\t\t\tplace?: string | BelfiorePlace;\r\n\t\t}\r\n\t): Promise<boolean> {\r\n\t\treturn (await this.pattern.codiceFiscale(personalInfo)).test(\r\n\t\t\tthis.codiceFiscale\r\n\t\t);\r\n\t}\r\n\tpublic async mismatchPersonalInfo(\r\n\t\tpersonalInfo: Omit<IPersonalInfo, \"place\"> & {\r\n\t\t\tplace?: string | BelfiorePlace;\r\n\t\t}\r\n\t): Promise<boolean> {\r\n\t\treturn !!(\r\n\t\t\tthis.codiceFiscale &&\r\n\t\t\tpersonalInfo &&\r\n\t\t\tpersonalInfo.lastName &&\r\n\t\t\tpersonalInfo.firstName &&\r\n\t\t\t(personalInfo.date ||\r\n\t\t\t\t(personalInfo.day &&\r\n\t\t\t\t\ttypeof personalInfo.month === \"number\" &&\r\n\t\t\t\t\tpersonalInfo.year)) &&\r\n\t\t\tpersonalInfo.gender &&\r\n\t\t\tpersonalInfo.place &&\r\n\t\t\t!(await this.matchPersonalInfo(personalInfo))\r\n\t\t);\r\n\t}\r\n\r\n\tpublic matchLastName(lastName?: string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasLastName &&\r\n\t\t\tthis.pattern.lastName(this.codiceFiscale).test(lastName || \"\")\r\n\t\t);\r\n\t}\r\n\tpublic mismatchLastName(lastName?: string): boolean {\r\n\t\treturn this.hasLastName && !!lastName && !this.matchLastName(lastName);\r\n\t}\r\n\r\n\tpublic matchFirstName(firstName: string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasFirstName &&\r\n\t\t\tthis.pattern.firstName(this.codiceFiscale).test(firstName || \"\")\r\n\t\t);\r\n\t}\r\n\tpublic mismatchFirstName(firstName: string): boolean {\r\n\t\treturn this.hasFirstName && !!firstName && !this.matchFirstName(firstName);\r\n\t}\r\n\r\n\tpublic matchBirthDate(birthDate: MultiFormatDate): boolean {\r\n\t\tif (this.hasBirthDate) {\r\n\t\t\tconst parsedDate = DateUtils.parseDate(birthDate);\r\n\t\t\tconst birthDateMatcher = this.pattern.date(this.codiceFiscale);\r\n\t\t\treturn !!parsedDate && birthDateMatcher.test(parsedDate.toJSON());\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic mismatchBirthDate(birthDate: MultiFormatDate): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasBirthYear &&\r\n\t\t\t!!DateUtils.parseDate(birthDate) &&\r\n\t\t\t!this.matchBirthDate(birthDate)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic matchGender(gender: Genders | string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasGender &&\r\n\t\t\tthis.pattern.gender(this.codiceFiscale).test(gender || \"\")\r\n\t\t);\r\n\t}\r\n\r\n\tpublic mismatchGender(gender: Genders | string): boolean {\r\n\t\treturn this.hasGender && !!gender && !this.matchGender(gender);\r\n\t}\r\n\r\n\t/**\r\n\t * @param birthPlace BirthPlace, place name or BelfioreCode\r\n\t */\r\n\tpublic async matchBirthPlace(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise<boolean> {\r\n\t\tif (this.hasBirthPlace && birthPlace) {\r\n\t\t\tconst matcher = await this.pattern.place(this.codiceFiscale);\r\n\t\t\tconst parsedBirthPlace = await this.parser.parsePlace(birthPlace);\r\n\r\n\t\t\treturn !!parsedBirthPlace && matcher.test(parsedBirthPlace?.belfioreCode);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * @param birthPlace BirthPlace, place name or BelfioreCode\r\n\t */\r\n\tpublic async mismatchBirthPlace(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise<boolean> {\r\n\t\treturn (\r\n\t\t\tthis.hasBirthPlace &&\r\n\t\t\t!!birthPlace &&\r\n\t\t\t!(await this.matchBirthPlace(birthPlace))\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Check the given cf validity by form, birth date/place and digit code\r\n\t * @param codiceFiscale Complete CF to parse\r\n\t * @return Verbose errors\r\n\t */\r\n\tpublic get errors(): Promise<IMismatchVerboseErrors | null> {\r\n\t\treturn Promise.all([\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale, false),\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale, true),\r\n\t\t])\r\n\t\t\t.then(([placeCheck, placeCreationExpirationCheck]) => ({\r\n\t\t\t\t// Checking lastName validity\r\n\t\t\t\t...(this.parser.cfToLastName(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { lastName: \"MISSING_OR_INVALID_LAST_NAME\" }),\r\n\t\t\t\t// Checking firstName validity\r\n\t\t\t\t...(this.parser.cfToFirstName(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { firstName: \"MISSING_OR_INVALID_FIRST_NAME\" }),\r\n\t\t\t\t// Checking Date validity\r\n\t\t\t\t...(this.parser.cfToBirthDate(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_DATE\" }),\r\n\t\t\t\t// Checking Day validity\r\n\t\t\t\t...(this.parser.cfToBirthDay(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_DAY\" }),\r\n\t\t\t\t// Checking Month validity\r\n\t\t\t\t...(typeof this.parser.cfToBirthMonth(this.codiceFiscale) === \"number\"\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_MONTH\" }),\r\n\t\t\t\t// Checking Year validity\r\n\t\t\t\t...(this.parser.cfToBirthYear(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_YEAR\" }),\r\n\t\t\t\t// Checking Gender validity\r\n\t\t\t\t...(this.parser.cfToGender(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { gender: \"MISSING_DAY\" }),\r\n\t\t\t\t// Checking Place validity\r\n\t\t\t\t...(placeCheck ? {} : { place: \"MISSING_OR_INVALID_PLACE\" }),\r\n\t\t\t\t// Checking Place Creation/Expiration vs Birthdate validity\r\n\t\t\t\t...(placeCreationExpirationCheck\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: {\r\n\t\t\t\t\t\t\tplace: \"PLACE_EXPIRED_OR_NOT_YET_CREATED_ON_BIRTDATE\",\r\n\t\t\t\t\t\t\tdate: \"BIRTHDATE_OUT_OF_BIRTH_PLACE_LIFE_RANGE\",\r\n\t\t\t\t\t  }),\r\n\t\t\t\t// Checking 16th char check digit validity\r\n\t\t\t\t...(this.codiceFiscale\r\n\t\t\t\t\t?.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t\t\t?.toUpperCase() === CheckDigitizer.checkDigit(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { crc: \"INVALID_CRC_CODE\" }),\r\n\r\n\t\t\t\t// Checking length\r\n\t\t\t\t...(this.hasCRC ? {} : { crc: \"MISSING_CRC_CODE\" }),\r\n\t\t\t}))\r\n\t\t\t.then((errors) => (Object.keys(errors).length ? errors : null));\r\n\t}\r\n\r\n\t/**\r\n\t * Check the given cf validity by form, birth date/place and digit code\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic get valid(): Promise<boolean> {\r\n\t\treturn Promise.all([\r\n\t\t\tthis.pattern.codiceFiscale(),\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale),\r\n\t\t]).then(\r\n\t\t\t([cfPattern, cfToBirthPlace]) =>\r\n\t\t\t\t!(\r\n\t\t\t\t\t// Checking length\r\n\t\t\t\t\t(\r\n\t\t\t\t\t\t!this.hasCRC ||\r\n\t\t\t\t\t\t// Checking form validity\r\n\t\t\t\t\t\t!cfPattern.test(this.codiceFiscale) ||\r\n\t\t\t\t\t\t// Checking 16th char check digit validity\r\n\t\t\t\t\t\tthis.codiceFiscale\r\n\t\t\t\t\t\t\t?.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t\t\t\t\t?.toUpperCase() !==\r\n\t\t\t\t\t\t\tCheckDigitizer.checkDigit(this.codiceFiscale) ||\r\n\t\t\t\t\t\t// Checking Birth date/place validity\r\n\t\t\t\t\t\t!cfToBirthPlace\r\n\t\t\t\t\t)\r\n\t\t\t\t)\r\n\t\t);\r\n\t}\r\n\tpublic get invalid(): Promise<boolean> {\r\n\t\treturn this.valid.then((isValid) => !!this.codiceFiscale && !isValid);\r\n\t}\r\n}\r\n","import {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport { DateUtils, MultiFormatDate } from \"../date-utils/\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CFMismatchValidator from \"./cf-mismatch-validator.class\";\r\nimport Parser from \"./parser.class\";\r\nimport Pattern from \"./pattern.class\";\r\nimport { CF_INTRODUCTION_DATE } from \"../const/logic.const\";\r\nimport dayjs from \"dayjs\";\r\n\r\nexport default class Validator {\r\n\tprivate parser: Parser;\r\n\tprivate pattern: Pattern;\r\n\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t}\r\n\r\n\tpublic codiceFiscale(codiceFiscale: string): CFMismatchValidator {\r\n\t\treturn new CFMismatchValidator(this.belfioreConnector, codiceFiscale);\r\n\t}\r\n\r\n\tpublic isLastNameValid(lastName: string): boolean {\r\n\t\treturn this.pattern.lastName().test(lastName);\r\n\t}\r\n\tpublic isLastNameInvalid(lastName: string): boolean {\r\n\t\treturn !!lastName && !this.isLastNameValid(lastName);\r\n\t}\r\n\r\n\tpublic isFirstNameValid(firstName: string): boolean {\r\n\t\treturn this.pattern.firstName().test(firstName);\r\n\t}\r\n\tpublic isFirstNameInvalid(firstName: string): boolean {\r\n\t\treturn !!firstName && !this.isFirstNameValid(firstName);\r\n\t}\r\n\r\n\tpublic isBirthDateValid(birthDate: MultiFormatDate): boolean {\r\n\t\treturn !!DateUtils.parseDate(birthDate);\r\n\t}\r\n\tpublic isBirthDateInvalid(birthDate: MultiFormatDate): boolean {\r\n\t\treturn !!birthDate && !this.isBirthDateValid(birthDate);\r\n\t}\r\n\r\n\tpublic isGenderValid(gender: Genders | string): boolean {\r\n\t\treturn this.pattern.gender().test(gender);\r\n\t}\r\n\tpublic isGenderInvalid(gender: Genders | string): boolean {\r\n\t\treturn !!gender && !this.isGenderValid(gender);\r\n\t}\r\n\r\n\tpublic async isBirthPlaceValid(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise<boolean> {\r\n\t\tconst parsedBirthPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\t!!parsedBirthPlace &&\r\n\t\t\t!!(await this.belfioreConnector.findByCode(parsedBirthPlace.belfioreCode))\r\n\t\t);\r\n\t}\r\n\tpublic async isBirthPlaceInvalid(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise<boolean> {\r\n\t\treturn !!birthPlace && !(await this.isBirthPlaceValid(birthPlace));\r\n\t}\r\n\r\n\tpublic async birthDatePlaceMatch(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise<boolean> {\r\n\t\tconst parsedPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\tthis.isBirthDateValid(birthDate) &&\r\n\t\t\t!!parsedPlace &&\r\n\t\t\t(!!(await this.belfioreConnector\r\n\t\t\t\t.from(birthDate)\r\n\t\t\t\t.findByCode(parsedPlace.belfioreCode)) ||\r\n\t\t\t\t// Ignoring control for people born before CF introduction\r\n\t\t\t\t!dayjs(DateUtils.parseDate(birthDate)).isAfter(\r\n\t\t\t\t\tCF_INTRODUCTION_DATE,\r\n\t\t\t\t\t\"day\"\r\n\t\t\t\t))\r\n\t\t);\r\n\t}\r\n\tpublic async birthDatePlaceMismatch(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise<boolean> {\r\n\t\tconst parsedPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\tthis.isBirthDateValid(birthDate) &&\r\n\t\t\t!!parsedPlace &&\r\n\t\t\t!(await this.birthDatePlaceMatch(birthDate, birthPlace))\r\n\t\t);\r\n\t}\r\n\r\n\tpublic async birthPlaceDateMatch(\r\n\t\tbirthPlace: BelfiorePlace | string,\r\n\t\tbirthDate: MultiFormatDate\r\n\t): Promise<boolean> {\r\n\t\treturn await this.birthDatePlaceMatch(birthDate, birthPlace);\r\n\t}\r\n\r\n\tpublic async birthPlaceDateMismatch(\r\n\t\tbirthPlace: BelfiorePlace | string,\r\n\t\tbirthDate: MultiFormatDate\r\n\t): Promise<boolean> {\r\n\t\treturn await this.birthDatePlaceMismatch(birthDate, birthPlace);\r\n\t}\r\n}\r\n","import {\r\n\tBelfiorePlace,\r\n\tIBelfioreConnector,\r\n} from \"@marketto/belfiore-connector\";\r\nimport CFMismatchValidator from \"./classes/cf-mismatch-validator.class\";\r\nimport CheckDigitizer from \"./classes/check-digitizer.class\";\r\nimport Gender from \"./classes/gender.class\";\r\nimport Parser from \"./classes/parser.class\";\r\nimport Pattern from \"./classes/pattern.class\";\r\nimport Validator from \"./classes/validator.class\";\r\nimport * as VALIDATOR from \"./const/matcher.const\";\r\nimport * as Matcher from \"./const/matcher.const\";\r\nimport {\r\n\tDATE_MATCHER,\r\n\ttype DateDay,\r\n\ttype DateMonth,\r\n\tDateUtils,\r\n\ttype MultiFormatDate,\r\n} from \"./date-utils/\";\r\nimport BirthMonth from \"./enums/birth-month.enum\";\r\nimport CRC from \"./enums/crc.enum\";\r\nimport Omocodes from \"./enums/omocodes.enum\";\r\nimport type Genders from \"./types/genders.type\";\r\nimport IMismatchVerboseErrors from \"./interfaces/mismatch-verbose-errors.interface\";\r\n\r\nexport type {\r\n\tBelfiorePlace,\r\n\tDateDay,\r\n\tDateMonth,\r\n\tGenders,\r\n\tMultiFormatDate,\r\n\tIMismatchVerboseErrors,\r\n};\r\n\r\nexport default class CodiceFiscaleUtils {\r\n\tpublic readonly validator: Validator;\r\n\tpublic readonly parser: Parser;\r\n\tpublic readonly pattern: Pattern;\r\n\r\n\tconstructor(public readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.validator = new Validator(belfioreConnector);\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t}\r\n}\r\n\r\nexport {\r\n\tBirthMonth,\r\n\tCheckDigitizer,\r\n\tCRC,\r\n\tDATE_MATCHER,\r\n\tDateUtils,\r\n\tGender,\r\n\tOmocodes,\r\n\tVALIDATOR,\r\n\tMatcher,\r\n\tCFMismatchValidator,\r\n\tParser,\r\n\tPattern,\r\n\tValidator,\r\n\tCodiceFiscaleUtils,\r\n};\r\n"],"names":["CRC_OFFSET","YEAR","MONTH","DAYS_30_MONTHS","DAYS_31_MONTHS","MONTH_DAY","HOURS","MINUTES","SECONDS","MILLISECONDS","TIMEZONE","TIME","ISO8601_SHORT_DATE","ISO8601_DATE_TIME","dayjs","extend","utc","DateUtils","parseDate","date","Date","RegExp","test","Array","isArray","length","some","value","isNaN","parsedDate","year","month","day","UTC","isValid","toDate","err","ymdToDate","this","CONSONANT_LIST","VOWEL_LIST","OMOCODE_NUMBER_LIST","OMOCODE_NON_ZERO_NUMBER_LIST","OMOCODE_ZERO_LIST","MONTH_LIST","MONTH_30DAYS_LIST","MONTH_31DAYS_LIST","CITY_CODE_LIST","COUNTRY_CODE_LIST","CF_NAME_MATCHER","CF_SURNAME_MATCHER","CF_FULL_NAME_MATCHER","YEAR_MATCHER","LEAP_YEAR_MATCHER","MONTH_MATCHER","DAY_2X_MATCHER","DAY_3X_MATCHER","DAY_29_MATCHER","DAY_30_MATCHER","DAY_31_MATCHER","DAY_MATCHER","MALE_DAY_MATCHER","FEMALE_DAY_MATCHER","MONTH_DAY_MATCHER","FULL_DATE_MATCHER","MALE_FULL_DATE_MATCHER","FEMALE_FULL_DATE_MATCHER","CITY_CODE_MATCHER","COUNTRY_CODE_MATCHER","BELFIORE_CODE_MATCHER","CHECK_DIGIT","CODICE_FISCALE","PARTIAL_CF_NAME_MATCHER","PARTIAL_CF_FULL_NAME","PARTIAL_YEAR","PARTIAL_MONTH_DAY","PARTIAL_FULL_DATE","PARTIAL_BELFIORE_CODE_MATCHER","PARTIAL_CF","CRC","BirthMonth","CRC$1","CheckDigitizer","checkDigit","codiceFiscale","partialCF","substr","partialCfValue","charValue","evaluateChar","String","fromCharCode","CRC_MOD","CHAR_OFFSET","generator","evaluateCharGenerator","Symbol","iterator","static","index","char","toUpperCase","parseInt","charCodeAt","GenderWeight","BirthMonth$1","Omocodes","GenderWeight$1","Omocodes$1","Gender","getDay","genderDay","plainDay","F","MAX_MONTH_DAY","getGender","toArray","find","gender","genderizeDay","CF_INTRODUCTION_DATE","diacriticRemover","DiacriticRemover","Parser","belfioreConnector","constructor","OMOCODE_BITMAP","cfDeomocode","deomocodedCf","partialCfDeomocode","substring","appyCaseToChar","cfOmocode","omocodeId","omocodedCf","split","i","o","crc","partialCf","slice","join","cfOmocodeId","cfOmocodeBitmap","filter","map","cfToLastName","cfLastNamePart","LASTNAME_OFFSET","lastNameCf","cons","match","vow","matchingLength","JOLLY_CHAR","cfToFirstName","cfFirstNamePart","FIRSTNAME_OFFSET","cfToGender","GENDER_OFFSET","cfGenderPart","genderInt","cfToBirthYear","YEAR_OFFSET","cfBirthYearPart","birthYear","current2DigitsYear","format","century","subtract","cfToBirthMonth","MONTH_OFFSET","cfBirthMonthPart","birthMonth","cfToBirthDay","DAY_OFFSET","cfBirthDayPart","birthDay","cfToBirthDate","cfToBirthPlace","checkBirthDateConsistency","PLACE_OFFSET","cfBirthPlacePart","belfioreCode","birthPlace","findByCode","creationDate","expirationDate","birthDate","isBirthDateAfterCfIntroduction","add","isBefore","isAfter","cfDecode","fiscalCode","undefined","place","personalInfo","firstName","lastName","lastNameToCf","trim","replace","charExtractor","padEnd","firstNameToCf","consonants","yearToCf","parsedYear","monthToCf","dayGenderToCf","genderValue","yearMonthDayToDate","param","parsePlace","verifiedBirthPlace","findByName","dateGenderToCf","getFullYear","getMonth","getDate","placeToCf","dateOrName","nameOrProvince","provinceId","name","province","placeFinder","byProvince","from","foundPlace","encodeCf","dtParams","async","cf","cfPartGenerator","cfValue","checkBitmap","offset","charOmocode","text","CHAR_LIST","charMatcher","partialCodiceFiscale","position","targetChar","counterCaseChar","isUpperCase","isLowerCase","toLowerCase","INVALID_SURNAME","INVALID_NAME","INVALID_DAY","INVALID_GENDER","INVALID_DAY_OR_GENDER","INVALID_YEAR","INVALID_DATE","CfuError","Error","errorCode","super","Object","entries","ErrorMessages","errId","Pattern","parser","cfLastName","matcher","isolatedInsensitiveTailor","cfFirstName","cfYear","deomocode","cfMonth","cfDay","parsedDayM","parsedDayF","cfDayGender","parsedDayGender","cfDateGender","includes","parsedDateGender","parseDeomocode","g","parsedGender","cfPlace","birthDateOrName","placeName","parsedPlace","parsedCf","validator","cfMatcher","toString","LETTER_SET","matcherBy","SEPARATOR_SET","diacriticizer","matchingChars","insensitiveMatcher","diacriticsVowelMatcher","midDiacriticVowelMatcher","endingDiacritcVowelMatcher","divider","diacriticsVowelList","diacriticsConsonantList","chars","DATE_MATCHER.ISO8601_DATE_TIME","dateIso8601","toJSON","diff","padStart","DATE_MATCHER.TIME","DATE_MATCHER.TIMEZONE","c","omocode","n","CFMismatchValidator","pattern","hasLastName","hasFirstName","hasBirthYear","hasBirthDate","DATE_OFFSET","hasGender","hasBirthPlace","hasCRC","matchPersonalInfo","mismatchPersonalInfo","matchLastName","mismatchLastName","matchFirstName","mismatchFirstName","matchBirthDate","birthDateMatcher","mismatchBirthDate","matchGender","mismatchGender","matchBirthPlace","parsedBirthPlace","mismatchBirthPlace","errors","Promise","all","then","placeCheck","placeCreationExpirationCheck","keys","valid","cfPattern","invalid","Validator","isLastNameValid","isLastNameInvalid","isFirstNameValid","isFirstNameInvalid","isBirthDateValid","isBirthDateInvalid","isGenderValid","isGenderInvalid","isBirthPlaceValid","isBirthPlaceInvalid","birthDatePlaceMatch","birthDatePlaceMismatch","birthPlaceDateMatch","birthPlaceDateMismatch","CodiceFiscaleUtils"],"mappings":"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AAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACKC,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACtBC,GAAyB,CACzBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACL,CACKC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACL,CACKC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA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"}