{"version":3,"sources":["../../src/mock/lcg.ts","../../src/mock/constants.ts","../../src/mock/generators/nik.ts","../../src/mock/generators/phone.ts","../../src/mock/generators/npwp.ts","../../src/mock/generators/plate.ts","../../src/mock/generators/email.ts","../../src/mock/generators/name.ts","../../src/bpjs/constants.ts","../../src/mock/generators/bpjs.ts","../../src/vin/constants.ts","../../src/mock/generators/vin.ts","../../src/mock/generators/person.ts"],"names":["OPERATOR_NAMES","PLATE_LETTERS","SCHEME_LENGTH"],"mappings":"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","file":"index.cjs","sourcesContent":["export interface LCGInstance {\n  /** Returns next raw integer in [0, 2^32 - 1] */\n  next(): number;\n  /** Returns float in [0, 1) */\n  nextFloat(): number;\n  /** Returns integer in [0, max) */\n  nextInt(max: number): number;\n  /** Returns a random element from array */\n  nextElement<T>(arr: readonly T[]): T;\n  /** Returns random integer in [min, max] inclusive */\n  nextRange(min: number, max: number): number;\n  /** Returns a string of n random digits */\n  nextDigits(n: number): string;\n}\n\nexport function createLCG(seed: number = Date.now()): LCGInstance {\n  // Ensure unsigned 32-bit integer, avoid 0 state\n  let state = (Math.abs(Math.floor(seed)) >>> 0) || 1;\n\n  const instance: LCGInstance = {\n    next(): number {\n      state = (Math.imul(1664525, state) + 1013904223) >>> 0;\n      return state;\n    },\n\n    nextFloat(): number {\n      return this.next() / 0x100000000;\n    },\n\n    nextInt(max: number): number {\n      return Math.floor(this.nextFloat() * max);\n    },\n\n    nextElement<T>(arr: readonly T[]): T {\n      return arr[this.nextInt(arr.length)];\n    },\n\n    nextRange(min: number, max: number): number {\n      return min + this.nextInt(max - min + 1);\n    },\n\n    nextDigits(n: number): string {\n      let result = '';\n      for (let i = 0; i < n; i++) {\n        result += this.nextInt(10).toString();\n      }\n      return result;\n    },\n  };\n\n  return instance;\n}\n","export const FIRST_NAMES_MALE: readonly string[] = [\n  'Agus', 'Andi', 'Bayu', 'Budi', 'Cahyo', 'Dani', 'Eko', 'Fajar',\n  'Gilang', 'Hendra', 'Irwan', 'Ivan', 'Joko', 'Krisna', 'Lukman',\n  'Mahmud', 'Nanda', 'Oki', 'Pandu', 'Putra', 'Reza', 'Rizky',\n  'Sandi', 'Tri', 'Umar', 'Wahyu', 'Yoga', 'Yusuf', 'Fauzi', 'Dian',\n];\n\nexport const FIRST_NAMES_FEMALE: readonly string[] = [\n  'Ani', 'Ayu', 'Bunga', 'Citra', 'Dewi', 'Dita', 'Erna', 'Fitri',\n  'Hani', 'Indah', 'Lestari', 'Maya', 'Nita', 'Nurul', 'Putri',\n  'Ratna', 'Rina', 'Rini', 'Selvi', 'Siti', 'Sri', 'Tari', 'Umi',\n  'Vina', 'Wati', 'Widya', 'Yanti', 'Yuni', 'Zahra', 'Clara',\n];\n\nexport const LAST_NAMES: readonly string[] = [\n  'Budiman', 'Darmawan', 'Firmansyah', 'Gunawan', 'Haryanto', 'Hartono',\n  'Hidayat', 'Kurniawan', 'Kusuma', 'Mahendra', 'Mulyadi', 'Nugroho',\n  'Prasetyo', 'Prabowo', 'Purnama', 'Rahayu', 'Ramadan', 'Santoso',\n  'Saputra', 'Setiawan', 'Suharto', 'Sulistyo', 'Supriadi', 'Surya',\n  'Suryadi', 'Susanto', 'Utomo', 'Wahyudi', 'Wibowo', 'Wijaya',\n];\n\nexport const EMAIL_DOMAINS: readonly string[] = [\n  'gmail.com', 'yahoo.co.id', 'outlook.com', 'hotmail.com', 'ymail.com',\n];\n\n/** Valid province codes from NIK format. Mirrors keys of PROVINCES in nik/constants.ts. */\nexport const PROVINCE_CODES: readonly string[] = [\n  '11', '12', '13', '14', '15', '16', '17', '18', '19', '21',\n  '31', '32', '33', '34', '35', '36',\n  '51', '52', '53',\n  '61', '62', '63', '64', '65',\n  '71', '72', '73', '74', '75', '76',\n  '81', '82',\n  '91', '92', '93', '94', '95', '96',\n];\n\n/** Operator name → one representative 4-digit prefix for mobile number generation */\nexport const OPERATOR_SAMPLE_PREFIXES: Record<string, string> = {\n  Telkomsel: '0812',\n  XL: '0817',\n  Indosat: '0814',\n  Axis: '0831',\n  Tri: '0896',\n  Smartfren: '0881',\n};\n\n/** Plate prefixes that represent single-char private vehicle regions */\nexport const PRIVATE_PLATE_PREFIXES: readonly string[] = [\n  'A', 'B', 'D', 'E', 'F', 'G', 'H', 'K', 'L', 'M', 'N',\n  'P', 'R', 'S', 'T',\n];\n","import { createLCG } from '../lcg';\nimport { PROVINCE_CODES } from '../constants';\nimport { NIKMockOptions, MockGender } from '../types';\n\n/**\n * Generates a structurally valid Indonesian NIK.\n * The returned NIK will pass validateNIK() from @indodev/toolkit/nik.\n *\n * WARNING: Only pass birthDate with day ≤ 28 to guarantee valid NIK.\n * Female encoding (day + 40) on days > 28 produces invalid day values.\n *\n * @example\n * generateNIK({ gender: 'M', seed: 42 })\n * // A valid 16-digit NIK string with male-encoded day\n *\n * @example\n * generateNIK({ gender: 'F', birthDate: new Date('1990-05-15'), seed: 1 })\n * // '3271015505900001'  (day 15 + 40 = 55 for female)\n */\nexport function generateNIK(options: NIKMockOptions = {}): string {\n  const { gender, birthDate, provinceCode, seed } = options;\n  const lcg = createLCG(seed);\n\n  // Province\n  const province = provinceCode ?? lcg.nextElement(PROVINCE_CODES);\n\n  // District and sub-district (fixed)\n  const kk = '01';\n  const ss = '01';\n\n  // Gender\n  const resolvedGender: MockGender = gender ?? (lcg.nextInt(2) === 0 ? 'M' : 'F');\n\n  // Birth date\n  let day: number, month: number, year: number;\n\n  if (birthDate) {\n    day = birthDate.getDate();\n    month = birthDate.getMonth() + 1;\n    year = birthDate.getFullYear();\n  } else {\n    // Random date: 1960–2005, day 1–28\n    day = lcg.nextRange(1, 28);\n    month = lcg.nextRange(1, 12);\n    year = lcg.nextRange(1960, 2005);\n  }\n\n  // Female encoding: day + 40\n  const encodedDay = resolvedGender === 'F' ? day + 40 : day;\n\n  const dd = String(encodedDay).padStart(2, '0');\n  const mm = String(month).padStart(2, '0');\n  const yy = String(year).slice(-2); // last 2 digits of year\n\n  // Sequential number — fixed to '0001'\n  const seq = '0001';\n\n  // NIK format: PP KK SS YY MM DD SEQ (validator reads positions 6-11 as YY-MM-DD)\n  return `${province}${kk}${ss}${yy}${mm}${dd}${seq}`;\n}\n","import { createLCG } from '../lcg';\nimport { OPERATOR_SAMPLE_PREFIXES } from '../constants';\nimport { PhoneMockOptions, PhoneOperator } from '../types';\n\nconst OPERATOR_NAMES = Object.keys(OPERATOR_SAMPLE_PREFIXES) as PhoneOperator[];\n\n/**\n * Generates a valid Indonesian mobile phone number.\n * Passes validatePhoneNumber() from @indodev/toolkit/phone.\n *\n * Note: 'international' and 'e164' produce identical output for\n * Indonesian numbers (+62 prefix). This is intentional.\n *\n * @example\n * generatePhone({ format: 'national', operator: 'Telkomsel', seed: 1 })\n * // '08121234567'\n *\n * @example\n * generatePhone({ format: 'international', seed: 5 })\n * // '+628171234567'\n */\nexport function generatePhone(options: PhoneMockOptions = {}): string {\n  const { format = 'national', operator, seed } = options;\n  const lcg = createLCG(seed);\n\n  const resolvedOperator: PhoneOperator = operator ?? lcg.nextElement(OPERATOR_NAMES);\n  const prefix = OPERATOR_SAMPLE_PREFIXES[resolvedOperator]; // e.g., '0812'\n\n  // Generate 7-digit suffix for total of 11 digits in national format\n  const suffix = lcg.nextDigits(7);\n\n  // prefix starts with '0' (4 chars), suffix is 7 chars → national = 11 chars\n  const national = `${prefix}${suffix}`;\n\n  if (format === 'national') return national;\n\n  // Strip leading '0', prepend country code\n  const digits = national.slice(1); // '812xxxxxxx'\n  return `+62${digits}`;\n}\n","import { createLCG } from '../lcg';\nimport { NPWPMockOptions } from '../types';\n\n/**\n * Generates a valid NPWP string.\n * Passes validateNPWP() from @indodev/toolkit/npwp.\n *\n * @example\n * generateNPWP({ format: 'formatted', seed: 1 }) // '12.345.678.9-012.345'\n * generateNPWP({ format: 'raw', seed: 1 }) // '123456789012345'\n */\nexport function generateNPWP(options: NPWPMockOptions = {}): string {\n  const { format = 'formatted', seed } = options;\n  const lcg = createLCG(seed);\n\n  // 15 random digits\n  const digits = lcg.nextDigits(15);\n\n  if (format === 'raw') return digits;\n\n  // Format: XX.XXX.XXX.X-XXX.XXX\n  return (\n    `${digits.slice(0, 2)}.${digits.slice(2, 5)}.${digits.slice(5, 8)}` +\n    `.${digits[8]}-${digits.slice(9, 12)}.${digits.slice(12, 15)}`\n  );\n}\n","import { createLCG } from '../lcg';\nimport { PRIVATE_PLATE_PREFIXES } from '../constants';\nimport { PlateMockOptions } from '../types';\n\nconst PLATE_LETTERS = 'ABCDEFGHJKLMNPQRSTUVWXY'; // common plate suffix chars\n\n/**\n * Generates a valid Indonesian private license plate.\n * Passes validatePlate() from @indodev/toolkit/plate.\n *\n * Note: Only 'private' type is implemented. 'public' type is accepted\n * as a parameter but produces the same output format.\n *\n * @example\n * generatePlate({ type: 'private', region: 'B', seed: 1 }) // 'B 1234 ABC'\n * generatePlate({ seed: 5 }) // 'D 5678 XY'\n */\nexport function generatePlate(options: PlateMockOptions = {}): string {\n  const { region, seed } = options;\n  const lcg = createLCG(seed);\n\n  const prefix = region ?? lcg.nextElement(PRIVATE_PLATE_PREFIXES);\n\n  // 4-digit number: 1000–9999\n  const number = lcg.nextRange(1000, 9999).toString();\n\n  // 2-3 letter suffix\n  const suffixLength = lcg.nextRange(2, 3);\n  let suffix = '';\n  for (let i = 0; i < suffixLength; i++) {\n    suffix += PLATE_LETTERS[lcg.nextInt(PLATE_LETTERS.length)];\n  }\n\n  return `${prefix} ${number} ${suffix}`;\n}\n","import { createLCG } from '../lcg';\nimport { FIRST_NAMES_MALE, LAST_NAMES, EMAIL_DOMAINS } from '../constants';\nimport { EmailMockOptions } from '../types';\n\n/**\n * Generates a realistic Indonesian email address.\n * Passes validateEmail() from @indodev/toolkit/email-validator.\n *\n * Design: Email is gender-neutral. Local part uses male first names\n * regardless of any gender context. This avoids gender inference.\n *\n * @example\n * generateEmail({ domain: 'gmail.com', seed: 1 }) // 'budi.santoso42@gmail.com'\n */\nexport function generateEmail(options: EmailMockOptions = {}): string {\n  const { domain, seed } = options;\n  const lcg = createLCG(seed);\n\n  const resolvedDomain = domain ?? lcg.nextElement(EMAIL_DOMAINS);\n\n  // Use male names as baseline (gender-neutral for email purposes)\n  const first = lcg.nextElement(FIRST_NAMES_MALE).toLowerCase();\n  const last = lcg.nextElement(LAST_NAMES).toLowerCase();\n  const num = lcg.nextRange(10, 99); // 2-digit number\n\n  return `${first}.${last}${num}@${resolvedDomain}`;\n}\n","import { createLCG } from '../lcg';\nimport { FIRST_NAMES_MALE, FIRST_NAMES_FEMALE, LAST_NAMES } from '../constants';\nimport { MockGender, NameMockOptions } from '../types';\n\n/**\n * Generates a realistic Indonesian name from a curated static list.\n * Email is gender-neutral by design — local part uses male first names\n * regardless of the person's gender. This is intentional to avoid\n * gender inference in email addresses.\n *\n * @example\n * generateName({ gender: 'M', seed: 1 }) // 'Budi Santoso'\n * generateName({ gender: 'F', parts: 'first', seed: 2 }) // 'Siti'\n */\nexport function generateName(options: NameMockOptions = {}): string {\n  const { gender, parts = 'full', seed } = options;\n  const lcg = createLCG(seed);\n\n  const resolvedGender: MockGender = gender ?? (lcg.nextInt(2) === 0 ? 'M' : 'F');\n  const firstNames = resolvedGender === 'M' ? FIRST_NAMES_MALE : FIRST_NAMES_FEMALE;\n\n  if (parts === 'first') return lcg.nextElement(firstNames);\n  if (parts === 'last') return lcg.nextElement(LAST_NAMES);\n\n  return `${lcg.nextElement(firstNames)} ${lcg.nextElement(LAST_NAMES)}`;\n}\n","/** Digit count for BPJS Kesehatan numbers */\nexport const KESEHATAN_LENGTH = 13;\n\n/** Digit count for BPJS Ketenagakerjaan numbers */\nexport const KETENAGAKERJAAN_LENGTH = 11;\n","import { createLCG } from '../lcg';\nimport { BPJSMockOptions, BPJSScheme } from '../types';\nimport { KESEHATAN_LENGTH, KETENAGAKERJAAN_LENGTH } from '../../bpjs/constants';\n\nconst SCHEME_LENGTH: Record<BPJSScheme, number> = {\n  kesehatan: KESEHATAN_LENGTH,\n  ketenagakerjaan: KETENAGAKERJAAN_LENGTH,\n};\n\n/**\n * Generates a structurally valid BPJS number for the requested scheme.\n * Output passes `validateBPJS(value, scheme)` from `@indodev/toolkit/bpjs`.\n *\n * - Default scheme: `kesehatan` (13 digits).\n * - When `seed` is provided, the LCG is re-seeded so output is reproducible.\n *\n * @example\n * generateBPJS()                          // 13-digit Kesehatan number\n * generateBPJS({ scheme: 'ketenagakerjaan', seed: 1 })  // 11-digit Ketenagakerjaan\n */\nexport function generateBPJS(options: BPJSMockOptions = {}): string {\n  const { scheme = 'kesehatan', seed } = options;\n  const lcg = createLCG(seed);\n  const length = SCHEME_LENGTH[scheme];\n  return lcg.nextDigits(length);\n}\n","/**\n * The standard length of a VIN (ISO 3779).\n */\nexport const VIN_LENGTH = 17;\n\n/**\n * The 0-based index of the check digit in the VIN (Position 9).\n */\nexport const VIN_CHECK_DIGIT_INDEX = 8;\n\n/**\n * The modulus used in the VIN checksum calculation.\n */\nexport const VIN_MODULUS = 11;\n\n/**\n * The character representing a checksum value of 10.\n */\nexport const VIN_CHECK_DIGIT_X = 'X';\n\n/**\n * Weights used in the VIN checksum calculation.\n * Each position (1-17) is multiplied by its corresponding weight.\n * Position 9 is the check digit itself (weight 0).\n */\nexport const VIN_WEIGHTS = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2];\n\n/**\n * Values assigned to each valid character for VIN calculation.\n * Invalid characters: I, O, Q are not allowed in VIN.\n */\nexport const VIN_CHAR_VALUES: Record<string, number> = {\n  '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,\n  'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8,\n  'J': 1, 'K': 2, 'L': 3, 'M': 4, 'N': 5, 'P': 7, 'R': 9,\n  'S': 2, 'T': 3, 'U': 4, 'V': 5, 'W': 6, 'X': 7, 'Y': 8, 'Z': 9,\n};\n\n/**\n * Characters excluded from VIN (I, O, Q).\n */\nexport const EXCLUDED_VIN_CHARS = ['I', 'O', 'Q'];\n\n/**\n * Version of the VIN utility module.\n */\nexport const VIN_VERSION = '1.0.0';\n\n","import { createLCG } from '../lcg';\nimport { VINMockOptions } from '../types';\nimport {\n  VIN_LENGTH,\n  VIN_CHECK_DIGIT_INDEX,\n  VIN_MODULUS,\n  VIN_CHECK_DIGIT_X,\n  VIN_WEIGHTS,\n  VIN_CHAR_VALUES,\n  EXCLUDED_VIN_CHARS,\n} from '../../vin/constants';\n\nconst VIN_CHARS = Object.keys(VIN_CHAR_VALUES);\nconst EXCLUDED_SET = new Set(EXCLUDED_VIN_CHARS);\n\nfunction computeCheckDigit(chars: readonly string[]): string {\n  let sum = 0;\n  for (let i = 0; i < VIN_LENGTH; i++) {\n    if (i === VIN_CHECK_DIGIT_INDEX) continue;\n    const val = VIN_CHAR_VALUES[chars[i]];\n    sum += val * VIN_WEIGHTS[i];\n  }\n  const value = sum % VIN_MODULUS;\n  return value === 10 ? VIN_CHECK_DIGIT_X : value.toString();\n}\n\nfunction isValidVinChar(c: string): boolean {\n  return c.length === 1 && !EXCLUDED_SET.has(c) && c in VIN_CHAR_VALUES;\n}\n\n/**\n * Generates a structurally valid 17-character VIN.\n * Output passes `validateVIN()` from `@indodev/toolkit/vin`, including a correct\n * check digit at position 9 and no excluded characters (I, O, Q).\n *\n * - When `manufacturerPrefix` is provided, it is used as the leading 3 chars. If the\n *   prefix contains invalid characters, the function falls back to a random prefix.\n * - When `seed` is provided, the LCG is re-seeded so output is reproducible.\n *\n * @example\n * generateVIN()                      // 17-char VIN\n * generateVIN({ manufacturerPrefix: '1HG', seed: 1 })  // starts with '1HG'\n */\nexport function generateVIN(options: VINMockOptions = {}): string {\n  const { manufacturerPrefix, seed } = options;\n  const lcg = createLCG(seed);\n\n  const chars: string[] = new Array(VIN_LENGTH);\n  const usePrefix =\n    typeof manufacturerPrefix === 'string' &&\n    manufacturerPrefix.length === 3 &&\n    [...manufacturerPrefix].every(isValidVinChar);\n\n  if (usePrefix) {\n    for (let i = 0; i < 3; i++) {\n      chars[i] = (manufacturerPrefix as string)[i].toUpperCase();\n    }\n  } else {\n    for (let i = 0; i < 3; i++) {\n      chars[i] = lcg.nextElement(VIN_CHARS);\n    }\n  }\n\n  for (let i = 3; i < VIN_LENGTH; i++) {\n    if (i === VIN_CHECK_DIGIT_INDEX) continue;\n    chars[i] = lcg.nextElement(VIN_CHARS);\n  }\n\n  chars[VIN_CHECK_DIGIT_INDEX] = computeCheckDigit(chars);\n  return chars.join('');\n}\n","import { createLCG, LCGInstance } from '../lcg';\nimport {\n  FIRST_NAMES_MALE, FIRST_NAMES_FEMALE, LAST_NAMES, EMAIL_DOMAINS,\n  PROVINCE_CODES, OPERATOR_SAMPLE_PREFIXES, PRIVATE_PLATE_PREFIXES,\n} from '../constants';\nimport { KESEHATAN_LENGTH, KETENAGAKERJAAN_LENGTH } from '../../bpjs/constants';\nimport {\n  VIN_LENGTH as VIN_LENGTH_LOCAL,\n  VIN_CHECK_DIGIT_INDEX as VIN_CHECK_DIGIT_INDEX_LOCAL,\n  VIN_MODULUS as VIN_MODULUS_LOCAL,\n  VIN_CHECK_DIGIT_X as VIN_CHECK_DIGIT_X_LOCAL,\n  VIN_WEIGHTS as VIN_WEIGHTS_LOCAL,\n  VIN_CHAR_VALUES as VIN_CHAR_VALUES_LOCAL,\n  EXCLUDED_VIN_CHARS as EXCLUDED_VIN_CHARS_LOCAL,\n} from '../../vin/constants';\nimport { MockGender, MockPerson, MockPersonOptions, MockFactory, PhoneOperator, BPJSScheme } from '../types';\n\nconst OPERATOR_NAMES = Object.keys(OPERATOR_SAMPLE_PREFIXES) as PhoneOperator[];\nconst PLATE_LETTERS = 'ABCDEFGHJKLMNPQRSTUVWXY';\nconst SCHEME_LENGTH: Record<BPJSScheme, number> = {\n  kesehatan: KESEHATAN_LENGTH,\n  ketenagakerjaan: KETENAGAKERJAAN_LENGTH,\n};\n\nconst VIN_CHARS_LOCAL = Object.keys(VIN_CHAR_VALUES_LOCAL);\nconst EXCLUDED_SET_LOCAL = new Set(EXCLUDED_VIN_CHARS_LOCAL);\n\nfunction computeCheckDigitLocal(chars: readonly string[]): string {\n  let sum = 0;\n  for (let i = 0; i < VIN_LENGTH_LOCAL; i++) {\n    if (i === VIN_CHECK_DIGIT_INDEX_LOCAL) continue;\n    const val = VIN_CHAR_VALUES_LOCAL[chars[i]];\n    sum += val * VIN_WEIGHTS_LOCAL[i];\n  }\n  const value = sum % VIN_MODULUS_LOCAL;\n  return value === 10 ? VIN_CHECK_DIGIT_X_LOCAL : value.toString();\n}\n\nfunction isValidVinCharLocal(c: string): boolean {\n  return c.length === 1 && !EXCLUDED_SET_LOCAL.has(c) && c in VIN_CHAR_VALUES_LOCAL;\n}\n\nfunction buildPerson(\n  lcg: LCGInstance,\n  genderOverride?: MockGender,\n  includeBPJS = false,\n  bpjsScheme: BPJSScheme = 'kesehatan',\n): MockPerson {\n  // 1. Gender\n  const gender: MockGender = genderOverride ?? (lcg.nextInt(2) === 0 ? 'M' : 'F');\n\n  // 2. Birth date (day 1–28, month 1–12, year 1960–2005)\n  const day = lcg.nextRange(1, 28);\n  const month = lcg.nextRange(1, 12);\n  const year = lcg.nextRange(1960, 2005);\n\n  const birthDate = `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n\n  // 3. Name\n  const firstNames = gender === 'M' ? FIRST_NAMES_MALE : FIRST_NAMES_FEMALE;\n  const firstName = lcg.nextElement(firstNames);\n  const lastName = lcg.nextElement(LAST_NAMES);\n  const name = `${firstName} ${lastName}`;\n\n  // 4. NIK (reuses day/month/year from step 2)\n  const province = lcg.nextElement(PROVINCE_CODES);\n  const encodedDay = gender === 'F' ? day + 40 : day;\n  const dd = String(encodedDay).padStart(2, '0');\n  const mm = String(month).padStart(2, '0');\n  const yy = String(year).slice(-2);\n  // NIK format: PP KK SS YY MM DD SEQ (validator reads positions 6-11 as YY-MM-DD)\n  const nik = `${province}0101${yy}${mm}${dd}0001`;\n\n  // 5. NPWP\n  const npwpDigits = lcg.nextDigits(15);\n  const npwp =\n    `${npwpDigits.slice(0, 2)}.${npwpDigits.slice(2, 5)}.${npwpDigits.slice(5, 8)}` +\n    `.${npwpDigits[8]}-${npwpDigits.slice(9, 12)}.${npwpDigits.slice(12, 15)}`;\n\n  // 6. Phone\n  const operator = lcg.nextElement(OPERATOR_NAMES);\n  const phonePrefix = OPERATOR_SAMPLE_PREFIXES[operator];\n  const phoneSuffix = lcg.nextDigits(7);\n  const phone = `${phonePrefix}${phoneSuffix}`;\n\n  // 7. Email (gender-neutral: uses male first names)\n  const emailFirst = lcg.nextElement(FIRST_NAMES_MALE).toLowerCase();\n  const emailLast = lcg.nextElement(LAST_NAMES).toLowerCase();\n  const emailNum = lcg.nextRange(10, 99);\n  const emailDomain = lcg.nextElement(EMAIL_DOMAINS);\n  const email = `${emailFirst}.${emailLast}${emailNum}@${emailDomain}`;\n\n  // 8. Plate\n  const platePrefix = lcg.nextElement(PRIVATE_PLATE_PREFIXES);\n  const plateNumber = lcg.nextRange(1000, 9999).toString();\n  const suffixLen = lcg.nextRange(2, 3);\n  let plateSuffix = '';\n  for (let i = 0; i < suffixLen; i++) {\n    plateSuffix += PLATE_LETTERS[lcg.nextInt(PLATE_LETTERS.length)];\n  }\n  const plate = `${platePrefix} ${plateNumber} ${plateSuffix}`;\n\n  if (includeBPJS) {\n    const bpjs = lcg.nextDigits(SCHEME_LENGTH[bpjsScheme]);\n    return { name, gender, birthDate, nik, npwp, phone, email, plate, bpjs };\n  }\n\n  return { name, gender, birthDate, nik, npwp, phone, email, plate };\n}\n\n/**\n * Generates a complete consistent fake Indonesian person.\n * The NIK birth date and gender always match the birthDate and gender fields.\n *\n * Set `includeBPJS: true` to add a valid BPJS number (default scheme: `kesehatan`).\n * Default output matches the v0.9.0 shape — the `bpjs` field is omitted unless opted in.\n *\n * @example\n * generateMockPerson({ seed: 42 })\n * // { name: '...', gender: 'M', birthDate: '1990-03-15', nik: '...', ... }\n */\nexport function generateMockPerson(options: MockPersonOptions = {}): MockPerson {\n  const { gender, includeBPJS = false, bpjsScheme = 'kesehatan', seed } = options;\n  const lcg = createLCG(seed);\n  return buildPerson(lcg, gender, includeBPJS, bpjsScheme);\n}\n\n/**\n * Creates a mock factory pre-bound to a seed.\n * The factory maintains a single LCG state shared across all calls,\n * producing a reproducible sequence of mock data.\n *\n * Note: Providing birthDate to factory.generateNIK() skips the random\n * date generation step, advancing the LCG differently than omitting it.\n * This is expected behavior — LCG state depends on which options are passed.\n *\n * @example\n * const factory = createMockFactory(42);\n * const person1 = factory.generateMockPerson();\n * const person2 = factory.generateMockPerson(); // different from person1\n */\nexport function createMockFactory(seed: number): MockFactory {\n  const lcg = createLCG(seed);\n\n  // Each generator on the factory uses the shared LCG (no new seed per call)\n  return {\n    generateNIK(options = {}) {\n      const { gender, birthDate, provinceCode } = options;\n      const resolvedGender: MockGender = gender ?? (lcg.nextInt(2) === 0 ? 'M' : 'F');\n      const province = provinceCode ?? lcg.nextElement(PROVINCE_CODES);\n      let day: number, month: number, year: number;\n      if (birthDate) {\n        day = birthDate.getDate();\n        month = birthDate.getMonth() + 1;\n        year = birthDate.getFullYear();\n      } else {\n        day = lcg.nextRange(1, 28);\n        month = lcg.nextRange(1, 12);\n        year = lcg.nextRange(1960, 2005);\n      }\n      const encodedDay = resolvedGender === 'F' ? day + 40 : day;\n      const dd = String(encodedDay).padStart(2, '0');\n      const mm = String(month).padStart(2, '0');\n      const yy = String(year).slice(-2);\n      return `${province}0101${yy}${mm}${dd}0001`;\n    },\n\n    generatePhone(options = {}) {\n      const { format = 'national', operator } = options;\n      const resolvedOperator: PhoneOperator = operator ?? lcg.nextElement(OPERATOR_NAMES);\n      const prefix = OPERATOR_SAMPLE_PREFIXES[resolvedOperator];\n      const suffix = lcg.nextDigits(7);\n      const national = `${prefix}${suffix}`;\n      if (format === 'national') return national;\n      return `+62${national.slice(1)}`;\n    },\n\n    generateNPWP(options = {}) {\n      const { format = 'formatted' } = options;\n      const digits = lcg.nextDigits(15);\n      if (format === 'raw') return digits;\n      return (\n        `${digits.slice(0, 2)}.${digits.slice(2, 5)}.${digits.slice(5, 8)}` +\n        `.${digits[8]}-${digits.slice(9, 12)}.${digits.slice(12, 15)}`\n      );\n    },\n\n    generatePlate(options = {}) {\n      const { region } = options;\n      const prefix = region ?? lcg.nextElement(PRIVATE_PLATE_PREFIXES);\n      const number = lcg.nextRange(1000, 9999).toString();\n      const suffixLen = lcg.nextRange(2, 3);\n      let suffix = '';\n      for (let i = 0; i < suffixLen; i++) {\n        suffix += PLATE_LETTERS[lcg.nextInt(PLATE_LETTERS.length)];\n      }\n      return `${prefix} ${number} ${suffix}`;\n    },\n\n    generateEmail(options = {}) {\n      const { domain } = options;\n      const resolvedDomain = domain ?? lcg.nextElement(EMAIL_DOMAINS);\n      const first = lcg.nextElement(FIRST_NAMES_MALE).toLowerCase();\n      const last = lcg.nextElement(LAST_NAMES).toLowerCase();\n      const num = lcg.nextRange(10, 99);\n      return `${first}.${last}${num}@${resolvedDomain}`;\n    },\n\n    generateName(options = {}) {\n      const { gender, parts = 'full' } = options;\n      const resolvedGender: MockGender = gender ?? (lcg.nextInt(2) === 0 ? 'M' : 'F');\n      const firstNames = resolvedGender === 'M' ? FIRST_NAMES_MALE : FIRST_NAMES_FEMALE;\n      if (parts === 'first') return lcg.nextElement(firstNames);\n      if (parts === 'last') return lcg.nextElement(LAST_NAMES);\n      return `${lcg.nextElement(firstNames)} ${lcg.nextElement(LAST_NAMES)}`;\n    },\n\n    generateMockPerson(options = {}) {\n      const { gender, includeBPJS = false, bpjsScheme = 'kesehatan' } = options;\n      return buildPerson(lcg, gender, includeBPJS, bpjsScheme);\n    },\n\n    generateBPJS(options = {}) {\n      const { scheme = 'kesehatan' } = options;\n      return lcg.nextDigits(SCHEME_LENGTH[scheme]);\n    },\n\n    generateVIN(options = {}) {\n      const { manufacturerPrefix } = options;\n      const usePrefix =\n        typeof manufacturerPrefix === 'string' &&\n        manufacturerPrefix.length === 3 &&\n        [...manufacturerPrefix].every(isValidVinCharLocal);\n\n      const chars: string[] = new Array(VIN_LENGTH_LOCAL);\n      if (usePrefix) {\n        for (let i = 0; i < 3; i++) {\n          chars[i] = (manufacturerPrefix as string)[i].toUpperCase();\n        }\n      } else {\n        for (let i = 0; i < 3; i++) {\n          chars[i] = lcg.nextElement(VIN_CHARS_LOCAL);\n        }\n      }\n\n      for (let i = 3; i < VIN_LENGTH_LOCAL; i++) {\n        if (i === VIN_CHECK_DIGIT_INDEX_LOCAL) continue;\n        chars[i] = lcg.nextElement(VIN_CHARS_LOCAL);\n      }\n\n      chars[VIN_CHECK_DIGIT_INDEX_LOCAL] = computeCheckDigitLocal(chars);\n      return chars.join('');\n    },\n  };\n}\n"]}