{
  "version": 3,
  "sources": ["../src/types.ts", "../src/codiceFiscale.ts", "../src/index.ts"],
  "sourcesContent": ["export interface BasePerson {\n  firstName: string;\n  lastName: string;\n  birthDate: Date;\n  gender: 'M' | 'F';\n}\n\nexport interface ItalianPerson extends BasePerson {\n  birthPlace: string;\n  foreignCountry?: 'IT' | undefined;\n}\n\nexport interface ForeignPerson extends BasePerson {\n  foreignCountry: string;\n  birthPlace?: never;\n}\n\nexport type Person = ItalianPerson | ForeignPerson;\n\n/**\n * Type guard to check if a person is an Italian person\n */\nexport function isItalianPerson(person: Person): person is ItalianPerson {\n  return (\n    'birthPlace' in person &&\n    typeof person.birthPlace === 'string' &&\n    person.birthPlace.trim() !== '' &&\n    (!('foreignCountry' in person) || person.foreignCountry === 'IT')\n  );\n}\n\n/**\n * Type guard to check if a person is a foreign person\n */\nexport function isForeignPerson(person: Person): person is ForeignPerson {\n  return (\n    'foreignCountry' in person &&\n    typeof person.foreignCountry === 'string' &&\n    person.foreignCountry.length === 2 && // alpha2 country code\n    person.foreignCountry !== 'IT' &&\n    !('birthPlace' in person)\n  );\n}\n\n/**\n * Validates that a person object has all required fields and follows the correct format\n * @throws Error if the person object is invalid\n */\nexport function validatePerson(person: Person): void {\n  if (!person) throw new Error('Person object is required');\n\n  // Check basic required fields\n  if (!person.firstName || person.firstName.trim() === '')\n    throw new Error('First name is required');\n\n  if (!person.lastName || person.lastName.trim() === '')\n    throw new Error('Last name is required');\n\n  if (\n    !person.birthDate ||\n    !(person.birthDate instanceof Date) ||\n    Number.isNaN(person.birthDate.getTime())\n  )\n    throw new Error('Valid birth date is required');\n\n  if (!person.gender || !['M', 'F'].includes(person.gender))\n    throw new Error('Gender must be either \"M\" or \"F\"');\n\n  // Check that either birthPlace is provided with foreignCountry being undefined or 'IT',\n  // or foreignCountry is provided (not 'IT') without birthPlace\n  if (isItalianPerson(person)) {\n    // Additional validation for Italian person if needed\n  } else if (isForeignPerson(person)) {\n    // Additional validation for Foreign person if needed\n  } else {\n    throw new Error(\n      'Either birthPlace must be provided with foreignCountry being undefined or \"IT\", or foreignCountry must be provided (not \"IT\") without birthPlace'\n    );\n  }\n}\n\nexport type FiscalCodeData = {\n  birthDate?: Date;\n  gender?: 'M' | 'F';\n  firstName?: string;\n  lastName?: string;\n  birthPlace?: string;\n  birthProvince?: string;\n  foreignCountry?: string;\n};\n\nexport type ItalianMunicipality = [\n  cadastralCode: string,\n  name: string,\n  province: string\n];\n\nexport type BilingualMunicipality = [\n  ...ItalianMunicipality,\n  italianName: string,\n  foreignName: string\n];\n\nexport type Municipality = ItalianMunicipality | BilingualMunicipality;\n\nexport type Country = [cadastralCode: string, alpha2: string];\n", "import type { FiscalCodeData, Municipality, Person } from './types.ts';\nimport { isForeignPerson, isItalianPerson, validatePerson } from './types.ts';\n\n/**\n * Gets municipality information by code\n * @param code - The cadastral code to lookup\n * @returns Municipality data\n * @example\n * await getMunicipalityByCode(\"H501\"); // Returns [\"H501\", \"ROMA\", \"RM\"]\n * @throws If the municipality code is invalid\n */\nexport async function getMunicipalityByCode(\n  code: string\n): Promise<Municipality> {\n  // Dynamically import municipalities data\n  const { municipalities } = await import('./data/municipalities.ts');\n  \n  // Find municipality by code\n  const municipality = municipalities.find(\n    ([cadastralCode]) => cadastralCode === code\n  );\n  \n  if (!municipality) {\n    throw new Error(`Invalid municipality code: ${code}`);\n  }\n  \n  return municipality;\n}\n\n/**\n * Normalize a string by removing spaces, accents and special characters\n * @param str - The string to normalize\n * @returns Normalized string in uppercase without spaces or accents\n * @example\n * normalizeString(\"D'Ao\u00FBt-Martin\"); // Returns \"DAOUTMARTIN\"\n */\nexport function normalizeString(str: string): string {\n  // Convert to uppercase\n  str = str.toUpperCase();\n\n  // Remove spaces\n  str = str.replace(/\\s/g, '');\n\n  // Replace accented characters\n  const accentMap: { [key: string]: string } = {\n    \u00C0: 'A',\n    \u00C1: 'A',\n    \u00C2: 'A',\n    \u00C3: 'A',\n    \u00C4: 'A',\n    \u00C5: 'A',\n    \u00C8: 'E',\n    \u00C9: 'E',\n    \u00CA: 'E',\n    \u00CB: 'E',\n    \u00CC: 'I',\n    \u00CD: 'I',\n    \u00CE: 'I',\n    \u00CF: 'I',\n    \u00D2: 'O',\n    \u00D3: 'O',\n    \u00D4: 'O',\n    \u00D5: 'O',\n    \u00D6: 'O',\n    \u00D9: 'U',\n    \u00DA: 'U',\n    \u00DB: 'U',\n    \u00DC: 'U',\n    \u00D1: 'N',\n    \u00C7: 'C'\n  };\n\n  for (const [accented, normal] of Object.entries(accentMap)) {\n    str = str.replace(new RegExp(accented, 'g'), normal);\n  }\n\n  return str;\n}\n\n/**\n * Helper function to extract consonants from a string\n * @param str - The string to extract consonants from\n * @returns A string containing only the consonants\n * @example\n * extractConsonants(\"Hello\"); // Returns \"HLL\"\n */\nexport function extractConsonants(str: string): string {\n  const consonants = str.toUpperCase().match(/[BCDFGHJKLMNPQRSTVWXYZ]/g);\n  return consonants ? consonants.join('') : '';\n}\n\n/**\n * Helper function to extract vowels from a string\n * @param str - The string to extract vowels from\n * @returns A string containing only the vowels\n * @example\n * extractVowels(\"Hello\"); // Returns \"EO\"\n */\nexport function extractVowels(str: string): string {\n  const vowels = str.toUpperCase().match(/[AEIOU]/g);\n  return vowels ? vowels.join('') : '';\n}\n\n/**\n * Calculate the three letters code for a last name according to fiscal code rules\n * @param lastName - The last name to encode\n * @returns Three-letter code representing the last name\n * @example\n * calculateLastNameCode(\"Rossi\"); // Returns \"RSS\"\n * calculateLastNameCode(\"Bo\"); // Returns \"BOX\"\n */\nexport function calculateLastNameCode(lastName: string): string {\n  // Normalize and convert to uppercase\n  lastName = normalizeString(lastName);\n\n  // Extract consonants\n  const consonants = extractConsonants(lastName);\n  // Extract vowels\n  const vowels = extractVowels(lastName);\n\n  let result = '';\n\n  // Add consonants first\n  result += consonants.slice(0, 3);\n\n  // If there aren't enough consonants, add vowels\n  if (result.length < 3) {\n    result += vowels.slice(0, 3 - result.length);\n  }\n\n  // If there still aren't enough characters, add 'X'\n  while (result.length < 3) {\n    result += 'X';\n  }\n\n  return result;\n}\n\n/**\n * Calculate the three letters code for a first name according to fiscal code rules\n * @param firstName - The first name to encode\n * @returns Three-letter code representing the first name\n * @example\n * calculateFirstNameCode(\"Mario\"); // Returns \"MRA\"\n * calculateFirstNameCode(\"Luca\"); // Returns \"LCU\"\n */\nexport function calculateFirstNameCode(firstName: string): string {\n  // Normalize and convert to uppercase\n  firstName = normalizeString(firstName);\n\n  // Extract consonants\n  const consonants = extractConsonants(firstName);\n  // Extract vowels\n  const vowels = extractVowels(firstName);\n\n  let result = '';\n\n  // If there are at least 4 consonants, take the first, third and fourth\n  if (consonants.length >= 4) {\n    result = consonants[0]! + consonants[2]! + consonants[3]!;\n  }\n\n  // Otherwise take all available consonants\n  else {\n    result = consonants;\n\n    // If there aren't enough consonants, add vowels\n    if (result.length < 3) {\n      result += vowels.slice(0, 3 - result.length);\n    }\n\n    // If there still aren't enough characters, add 'X'\n    while (result.length < 3) {\n      result += 'X';\n    }\n  }\n\n  return result;\n}\n\n/**\n * Calculate the two-digit year code from a date\n * @param date - The date to extract the year from\n * @returns Two-digit year code (last two digits of the year)\n * @example\n * calculateYearCode(new Date(1990, 0, 1)); // Returns \"90\"\n */\nexport function calculateYearCode(date: Date): string {\n  const year = date.getFullYear().toString();\n  // Take the last two digits of the year\n  return year.slice(-2);\n}\n\n/**\n * Calculate the letter code for the month according to fiscal code rules\n * @param date - The date to extract the month from\n * @returns Single letter representing the month\n * @example\n * calculateMonthCode(new Date(1990, 0, 1)); // Returns \"A\" (for January)\n */\nexport function calculateMonthCode(date: Date): string {\n  const month = date.getMonth() + 1; // January is 0\n  const lettersForMonth: { [key: number]: string } = {\n    1: 'A', // January\n    2: 'B', // February\n    3: 'C', // March\n    4: 'D', // April\n    5: 'E', // May\n    6: 'H', // June\n    7: 'L', // July\n    8: 'M', // August\n    9: 'P', // September\n    10: 'R', // October\n    11: 'S', // November\n    12: 'T' // December\n  };\n\n  return lettersForMonth[month]!;\n}\n\n/**\n * Calculate the day and gender code according to fiscal code rules\n * @param date - The date to extract the day from\n * @param gender - The gender ('M' for male, 'F' for female)\n * @returns Two-digit code representing day and gender (for females, 40 is added to the day)\n * @example\n * calculateDayGenderCode(new Date(1990, 0, 15), 'M'); // Returns \"15\"\n * calculateDayGenderCode(new Date(1990, 0, 15), 'F'); // Returns \"55\"\n */\nexport function calculateDayGenderCode(date: Date, gender: 'M' | 'F'): string {\n  const day = date.getDate();\n\n  // For women, add 40 to the day\n  const codeValue = gender === 'F' ? day + 40 : day;\n\n  // Format the number with leading zero if needed\n  return codeValue.toString().padStart(2, '0');\n}\n\n/**\n * Get cadastral code from place name or cadastral code\n * @param place - The name of the municipality or its cadastral code\n * @returns The cadastral code for the municipality\n * @example\n * await getMunicipalCodeFromPlace(\"ROMA\"); // Returns \"H501\"\n * await getMunicipalCodeFromPlace(\"H501\"); // Returns \"H501\"\n * @throws If the place is not found\n */\nexport async function getMunicipalCodeFromPlace(\n  place: string\n): Promise<string> {\n  // Dynamically import municipalities data\n  const { municipalities } = await import('./data/municipalities.ts');\n  const normalizedPlace = normalizeString(place.toUpperCase());\n  \n  // If the place is exactly 4 characters, it might be a cadastral code itself\n  if (normalizedPlace.length === 4) {\n    // Check if it exists as a cadastral code directly\n    const municipalityByCode = municipalities.find(\n      ([cadastralCode]) => cadastralCode === normalizedPlace\n    );\n    if (municipalityByCode) {\n      return municipalityByCode[0];\n    }\n  }\n  \n  // Otherwise search by name as before\n  const municipality = municipalities.find(\n    ([, name]) => normalizeString(name.toUpperCase()) === normalizedPlace\n  );\n  if (!municipality) {\n    throw new Error(`Invalid birth place: ${place}`);\n  }\n  return municipality[0];\n}\n\n/**\n * Get the country code from ISO Alpha2 country code\n * @param countryCode - The ISO Alpha2 country code (e.g., \"US\", \"FR\")\n * @returns The cadastral code for the country (Z followed by three digits)\n * @example\n * await getCountryCode(\"US\"); // Returns \"Z404\"\n * @throws If the country code is invalid\n */\nexport async function getCountryCode(countryCode: string): Promise<string> {\n  // Dynamically import countries data\n  const { countries } = await import('./data/countries.ts');\n  const country = countries.find(([, alpha2]) => alpha2 === countryCode);\n\n  if (!country) {\n    throw new Error(`Invalid country code: ${countryCode}`);\n  }\n\n  return country[0]!;\n}\n\n/**\n * Calculate the check character (last character) of the fiscal code\n * @param code - The first 15 characters of the fiscal code\n * @returns The check character\n * @example\n * calculateCheckCharacter(\"RSSMRA90A15H501\"); // Returns a check character like \"X\"\n */\nexport function calculateCheckCharacter(code: string): string {\n  const evenValues: { [key: string]: number } = {\n    '0': 0,\n    A: 0,\n    '1': 1,\n    B: 1,\n    '2': 2,\n    C: 2,\n    '3': 3,\n    D: 3,\n    '4': 4,\n    E: 4,\n    '5': 5,\n    F: 5,\n    '6': 6,\n    G: 6,\n    '7': 7,\n    H: 7,\n    '8': 8,\n    I: 8,\n    '9': 9,\n    J: 9,\n    K: 10,\n    L: 11,\n    M: 12,\n    N: 13,\n    O: 14,\n    P: 15,\n    Q: 16,\n    R: 17,\n    S: 18,\n    T: 19,\n    U: 20,\n    V: 21,\n    W: 22,\n    X: 23,\n    Y: 24,\n    Z: 25\n  };\n\n  const oddValues: { [key: string]: number } = {\n    '0': 1,\n    A: 1,\n    '1': 0,\n    B: 0,\n    '2': 5,\n    C: 5,\n    '3': 7,\n    D: 7,\n    '4': 9,\n    E: 9,\n    '5': 13,\n    F: 13,\n    '6': 15,\n    G: 15,\n    '7': 17,\n    H: 17,\n    '8': 19,\n    I: 19,\n    '9': 21,\n    J: 21,\n    K: 2,\n    L: 4,\n    M: 18,\n    N: 20,\n    O: 11,\n    P: 3,\n    Q: 6,\n    R: 8,\n    S: 12,\n    T: 14,\n    U: 16,\n    V: 10,\n    W: 22,\n    X: 25,\n    Y: 24,\n    Z: 23\n  };\n\n  let sum = 0;\n\n  // Loop through the characters of the code\n  for (let i = 0; i < code.length; i++) {\n    const char = code[i]!;\n\n    // Odd position (remembering that in JavaScript indices start from 0)\n    if (i % 2 === 0) {\n      sum += oddValues[char]!;\n    }\n    // Even position\n    else {\n      sum += evenValues[char]!;\n    }\n  }\n\n  // Calculate the remainder of the division by 26\n  const remainder = sum % 26;\n\n  // Convert the remainder to a letter\n  const checkLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n  return checkLetters[remainder]!;\n}\n\n/**\n * Decode the birth year from the fiscal code's year component\n * @param yearCode - Two-digit year code from the fiscal code\n * @returns Full year (4 digits)\n * @example\n * decodeYear(\"90\"); // Returns 1990 (or could be 2090 depending on current year)\n */\nexport function decodeYear(yearCode: string): number {\n  const yearNum = Number.parseInt(yearCode);\n  const currentYear = new Date().getFullYear();\n  const century = Math.floor(currentYear / 100) * 100;\n\n  // Determine the century\n  if (yearNum > currentYear % 100) {\n    return century - 100 + yearNum;\n  }\n  return century + yearNum;\n}\n\n/**\n * Decode the birth month from the fiscal code's month component\n * @param monthCode - One letter month code from the fiscal code\n * @returns Month number (1-12)\n * @example\n * decodeMonth(\"A\"); // Returns 1 (January)\n */\nexport function decodeMonth(monthCode: string): number {\n  const monthMap: { [key: string]: number } = {\n    A: 1,\n    B: 2,\n    C: 3,\n    D: 4,\n    E: 5,\n    H: 6,\n    L: 7,\n    M: 8,\n    P: 9,\n    R: 10,\n    S: 11,\n    T: 12\n  };\n\n  return monthMap[monthCode] || 1;\n}\n\n/**\n * Decode the birth day from the fiscal code's day component\n * @param dayCode - Two-digit day code from the fiscal code\n * @returns Day of month (1-31)\n * @example\n * decodeDay(15); // Returns 15\n * decodeDay(55); // Returns 15 (for females)\n */\nexport function decodeDay(dayCode: number): number {\n  // For women, subtract 40 from the day\n  return dayCode > 40 ? dayCode - 40 : dayCode;\n}\n\n/**\n * Calculate the complete fiscal code for a person\n * @param person - Object containing person's data\n * @returns The complete 16-character fiscal code\n * @example\n * await calculateFiscalCode(\\{\n *   firstName: \"Mario\",\n *   lastName: \"Rossi\",\n *   gender: \"M\",\n *   birthDate: new Date(1990, 0, 15),\n *   birthPlace: \"ROMA\"\n * \\}); // Returns something like \"RSSMRA90A15H501X\"\n * @throws If the person data is invalid\n */\nexport async function calculateFiscalCode(person: Person): Promise<string> {\n  // Validate person object\n  validatePerson(person);\n\n  const lastName = calculateLastNameCode(person.lastName);\n  const firstName = calculateFirstNameCode(person.firstName);\n  const yearCode = calculateYearCode(person.birthDate);\n  const monthCode = calculateMonthCode(person.birthDate);\n  const dayGenderCode = calculateDayGenderCode(person.birthDate, person.gender);\n\n  let placeCode: string;\n\n  if (isForeignPerson(person)) {\n    placeCode = await getCountryCode(person.foreignCountry);\n  } else if (isItalianPerson(person)) {\n    placeCode = await getMunicipalCodeFromPlace(person.birthPlace);\n  } else {\n    // This should never happen because validatePerson would throw first\n    throw new Error(\n      'Either birthPlace must be provided with foreignCountry being undefined or \"IT\", or foreignCountry must be provided (not \"IT\") without birthPlace'\n    );\n  }\n\n  const partialCode =\n    lastName + firstName + yearCode + monthCode + dayGenderCode + placeCode;\n  const checkChar = calculateCheckCharacter(partialCode);\n\n  return partialCode + checkChar;\n}\n\n/**\n * Validates if a string is a valid fiscal code\n * @param fiscalCode - The fiscal code to validate\n * @returns True if the fiscal code is valid, false otherwise\n * @example\n * isValidFiscalCode(\"RSSMRA90A15H501X\"); // Returns true if valid\n * isValidFiscalCode(\"INVALID\"); // Returns false\n */\nexport function isValidFiscalCode(fiscalCode: string): boolean {\n  // Normalize the fiscal code\n  fiscalCode = fiscalCode.toUpperCase().trim();\n\n  // Check length\n  if (fiscalCode.length !== 16) {\n    return false;\n  }\n\n  // Check format using regex\n  const fiscalCodeRegex = /^[A-Z]{6}\\d{2}[A-Z]\\d{2}[A-Z]\\d{3}[A-Z]$/;\n  if (!fiscalCodeRegex.test(fiscalCode)) {\n    return false;\n  }\n\n  // Check the check character\n  const baseCode = fiscalCode.substring(0, 15);\n  const checkCharacter = fiscalCode.substring(15, 16);\n  const calculatedCheckCharacter = calculateCheckCharacter(baseCode);\n\n  return checkCharacter === calculatedCheckCharacter;\n}\n\n/**\n * Decode a fiscal code to extract available information\n * @param fiscalCode - The fiscal code to decode\n * @returns Object containing decoded information (birth date, gender, place)\n * @example\n * await decodeFiscalCode(\"RSSMRA90A15H501X\");\n * // Returns \\{\n * //   birthDate: new Date(1990, 0, 15),\n * //   gender: \"M\",\n * //   birthPlace: \"ROMA\",\n * //   birthProvince: \"RM\"\n * // \\}\n * @throws If the fiscal code is invalid\n */\nexport async function decodeFiscalCode(\n  fiscalCode: string\n): Promise<FiscalCodeData> {\n  if (!isValidFiscalCode(fiscalCode)) {\n    throw new Error('Invalid fiscal code format');\n  }\n\n  const yearCode = fiscalCode.substring(6, 8);\n  const monthCode = fiscalCode.substring(8, 9);\n  const dayGenderCode = Number.parseInt(fiscalCode.substring(9, 11));\n  const municipalCode = fiscalCode.substring(11, 15);\n\n  // Extract birth date components\n  const year = decodeYear(yearCode);\n  const month = decodeMonth(monthCode);\n  const day = decodeDay(dayGenderCode);\n\n  // Determine gender\n  const gender: 'M' | 'F' = dayGenderCode > 40 ? 'F' : 'M';\n\n  // Create common person data\n  const personData: FiscalCodeData = {\n    birthDate: new Date(year, month - 1, day),\n    gender\n  };\n\n  // Check if born outside Italy (Z code)\n  if (municipalCode.startsWith('Z')) {\n    // Need to look up the ISO country code from the cadastral code\n    const { countries } = await import('./data/countries.ts');\n    const countryEntry = countries.find((c) => c[0] === municipalCode);\n    const foreignCountry = countryEntry\n      ? countryEntry[1]\n      : municipalCode.substring(1);\n\n    return {\n      ...personData,\n      foreignCountry\n    };\n  }\n  // Find birth place by cadastral code (reverse lookup)\n  const birthPlaceInfo = await getMunicipalityByCode(municipalCode);\n\n  return {\n    ...personData,\n    birthPlace: birthPlaceInfo[1],\n    birthProvince: birthPlaceInfo[2]\n  };\n}\n", "export {\n\tcalculateCheckCharacter,\n\tcalculateDayGenderCode,\n\tcalculateFirstNameCode,\n\tcalculateFiscalCode,\n\tcalculateLastNameCode,\n\tcalculateMonthCode,\n\tcalculateYearCode,\n\tdecodeDay,\n\tdecodeFiscalCode,\n\tdecodeMonth,\n\tdecodeYear,\n\textractConsonants,\n\textractVowels,\n\tgetCountryCode,\n\tgetMunicipalCodeFromPlace,\n\tgetMunicipalityByCode,\n\tisValidFiscalCode,\n\tnormalizeString\n} from './codiceFiscale.ts';\n\nexport type {\n\tBasePerson,\n\tBilingualMunicipality,\n\tCountry,\n\tFiscalCodeData,\n\tForeignPerson,\n\tItalianMunicipality,\n\tItalianPerson,\n\tMunicipality,\n\tPerson\n} from './types.ts';\n\nexport {\n\tisForeignPerson,\n\tisItalianPerson,\n\tvalidatePerson\n} from './types.ts';\n\nimport type { Country, Municipality } from './types.ts';\n\n/**\n * Get all Italian municipalities.\n * @returns Array of municipalities with cadastral code, name, province\n * If the municipality is bilingual, the cadastral code will be followed by\n * the italian name and the foreign name.\n * @example\n * ```ts\n * const municipalities = await getMunicipalities();\n * console.log(municipalities); // [['001', 'ROMA', 'RM'], ['002', 'BOLZANO', 'BZ', 'BOLZANO', 'BOZEN']]\n * ```\n */\nexport async function getMunicipalities(): Promise<Municipality[]> {\n\tconst { municipalities } = await import('./data/municipalities.ts');\n\treturn municipalities;\n}\n\n/**\n * Get all supported foreign countries (ISO Alpha2). Italy is not included.\n * @returns Array of countries with cadastral code and ISO Alpha2 code.\n * @example\n * ```ts\n * const countries = await getForeignCountries();\n * console.log(countries); // [['Z001', 'FR'], ['Z002', 'DE']]\n * ```\n */\nexport async function getForeignCountries(): Promise<Country[]> {\n\tconst { countries } = await import('./data/countries.ts');\n\treturn countries;\n}\n"],
  "mappings": "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",
  "names": ["isItalianPerson", "person", "isForeignPerson", "validatePerson", "getMunicipalityByCode", "code", "municipalities", "municipality", "cadastralCode", "normalizeString", "str", "accentMap", "accented", "normal", "extractConsonants", "consonants", "extractVowels", "vowels", "calculateLastNameCode", "lastName", "result", "calculateFirstNameCode", "firstName", "calculateYearCode", "date", "calculateMonthCode", "month", "calculateDayGenderCode", "gender", "day", "getMunicipalCodeFromPlace", "place", "normalizedPlace", "municipalityByCode", "name", "getCountryCode", "countryCode", "countries", "country", "alpha2", "calculateCheckCharacter", "evenValues", "oddValues", "sum", "i", "char", "decodeYear", "yearCode", "yearNum", "currentYear", "century", "decodeMonth", "monthCode", "decodeDay", "dayCode", "calculateFiscalCode", "person", "validatePerson", "dayGenderCode", "placeCode", "isForeignPerson", "isItalianPerson", "partialCode", "checkChar", "isValidFiscalCode", "fiscalCode", "baseCode", "checkCharacter", "calculatedCheckCharacter", "decodeFiscalCode", "municipalCode", "year", "personData", "countryEntry", "c", "foreignCountry", "birthPlaceInfo", "getMunicipalities", "municipalities", "getForeignCountries", "countries"]
}
