type MockGender = 'M' | 'F'; type PhoneOperator = 'Telkomsel' | 'XL' | 'Indosat' | 'Axis' | 'Tri' | 'Smartfren'; type PhoneFormat = 'national' | 'international' | 'e164'; type NPWPFormat = 'formatted' | 'raw'; type PlateType = 'private' | 'public'; type NameParts = 'first' | 'last' | 'full'; interface NIKMockOptions { gender?: MockGender; birthDate?: Date; provinceCode?: string; seed?: number; } interface PhoneMockOptions { format?: PhoneFormat; operator?: PhoneOperator; seed?: number; } interface NPWPMockOptions { format?: NPWPFormat; seed?: number; } interface PlateMockOptions { type?: PlateType; region?: string; seed?: number; } interface EmailMockOptions { domain?: string; seed?: number; } interface NameMockOptions { gender?: MockGender; parts?: NameParts; seed?: number; } type BPJSScheme = 'kesehatan' | 'ketenagakerjaan'; interface BPJSMockOptions { scheme?: BPJSScheme; seed?: number; } interface VINMockOptions { /** Optional 3-char manufacturer prefix (WMI segment). Must not contain I, O, or Q. */ manufacturerPrefix?: string; seed?: number; } interface MockPersonOptions { gender?: MockGender; includeBPJS?: boolean; bpjsScheme?: BPJSScheme; seed?: number; } interface MockPerson { name: string; gender: MockGender; /** ISO 8601 date string: 'YYYY-MM-DD' */ birthDate: string; nik: string; npwp: string; phone: string; email: string; plate: string; /** Optional BPJS number — only present when MockPersonOptions.includeBPJS is true. */ bpjs?: string; } interface MockFactory { generateNIK(options?: Omit): string; generatePhone(options?: Omit): string; generateNPWP(options?: Omit): string; generatePlate(options?: Omit): string; generateEmail(options?: Omit): string; generateName(options?: Omit): string; generateBPJS(options?: Omit): string; generateVIN(options?: Omit): string; generateMockPerson(options?: Omit): MockPerson; } /** * Generates a structurally valid Indonesian NIK. * The returned NIK will pass validateNIK() from @indodev/toolkit/nik. * * WARNING: Only pass birthDate with day ≤ 28 to guarantee valid NIK. * Female encoding (day + 40) on days > 28 produces invalid day values. * * @example * generateNIK({ gender: 'M', seed: 42 }) * // A valid 16-digit NIK string with male-encoded day * * @example * generateNIK({ gender: 'F', birthDate: new Date('1990-05-15'), seed: 1 }) * // '3271015505900001' (day 15 + 40 = 55 for female) */ declare function generateNIK(options?: NIKMockOptions): string; /** * Generates a valid Indonesian mobile phone number. * Passes validatePhoneNumber() from @indodev/toolkit/phone. * * Note: 'international' and 'e164' produce identical output for * Indonesian numbers (+62 prefix). This is intentional. * * @example * generatePhone({ format: 'national', operator: 'Telkomsel', seed: 1 }) * // '08121234567' * * @example * generatePhone({ format: 'international', seed: 5 }) * // '+628171234567' */ declare function generatePhone(options?: PhoneMockOptions): string; /** * Generates a valid NPWP string. * Passes validateNPWP() from @indodev/toolkit/npwp. * * @example * generateNPWP({ format: 'formatted', seed: 1 }) // '12.345.678.9-012.345' * generateNPWP({ format: 'raw', seed: 1 }) // '123456789012345' */ declare function generateNPWP(options?: NPWPMockOptions): string; /** * Generates a valid Indonesian private license plate. * Passes validatePlate() from @indodev/toolkit/plate. * * Note: Only 'private' type is implemented. 'public' type is accepted * as a parameter but produces the same output format. * * @example * generatePlate({ type: 'private', region: 'B', seed: 1 }) // 'B 1234 ABC' * generatePlate({ seed: 5 }) // 'D 5678 XY' */ declare function generatePlate(options?: PlateMockOptions): string; /** * Generates a realistic Indonesian email address. * Passes validateEmail() from @indodev/toolkit/email-validator. * * Design: Email is gender-neutral. Local part uses male first names * regardless of any gender context. This avoids gender inference. * * @example * generateEmail({ domain: 'gmail.com', seed: 1 }) // 'budi.santoso42@gmail.com' */ declare function generateEmail(options?: EmailMockOptions): string; /** * Generates a realistic Indonesian name from a curated static list. * Email is gender-neutral by design — local part uses male first names * regardless of the person's gender. This is intentional to avoid * gender inference in email addresses. * * @example * generateName({ gender: 'M', seed: 1 }) // 'Budi Santoso' * generateName({ gender: 'F', parts: 'first', seed: 2 }) // 'Siti' */ declare function generateName(options?: NameMockOptions): string; /** * Generates a complete consistent fake Indonesian person. * The NIK birth date and gender always match the birthDate and gender fields. * * Set `includeBPJS: true` to add a valid BPJS number (default scheme: `kesehatan`). * Default output matches the v0.9.0 shape — the `bpjs` field is omitted unless opted in. * * @example * generateMockPerson({ seed: 42 }) * // { name: '...', gender: 'M', birthDate: '1990-03-15', nik: '...', ... } */ declare function generateMockPerson(options?: MockPersonOptions): MockPerson; /** * Creates a mock factory pre-bound to a seed. * The factory maintains a single LCG state shared across all calls, * producing a reproducible sequence of mock data. * * Note: Providing birthDate to factory.generateNIK() skips the random * date generation step, advancing the LCG differently than omitting it. * This is expected behavior — LCG state depends on which options are passed. * * @example * const factory = createMockFactory(42); * const person1 = factory.generateMockPerson(); * const person2 = factory.generateMockPerson(); // different from person1 */ declare function createMockFactory(seed: number): MockFactory; export { type BPJSMockOptions as B, type EmailMockOptions as E, type MockGender as M, type NPWPFormat as N, type PhoneOperator as P, type VINMockOptions as V, generatePhone as a, generateNPWP as b, generatePlate as c, generateEmail as d, generateName as e, generateMockPerson as f, generateNIK as g, createMockFactory as h, type PhoneFormat as i, type PlateType as j, type NameParts as k, type NIKMockOptions as l, type PhoneMockOptions as m, type NPWPMockOptions as n, type PlateMockOptions as o, type NameMockOptions as p, type MockPersonOptions as q, type MockPerson as r, type MockFactory as s, type BPJSScheme as t };