fhir-test-data 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +225 -0
- package/dist/chunk-CBIPVWLL.js +121 -0
- package/dist/chunk-CBIPVWLL.js.map +1 -0
- package/dist/chunk-T46LJ67Q.js +4302 -0
- package/dist/chunk-T46LJ67Q.js.map +1 -0
- package/dist/chunk-U2QJNKBG.js +40 -0
- package/dist/chunk-U2QJNKBG.js.map +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +850 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/faults/index.d.ts +33 -0
- package/dist/core/faults/index.js +14 -0
- package/dist/core/faults/index.js.map +1 -0
- package/dist/core/index.d.ts +115 -0
- package/dist/core/index.js +30 -0
- package/dist/core/index.js.map +1 -0
- package/dist/types-BvGNm2YJ.d.ts +132 -0
- package/package.json +102 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/types.ts","../src/core/generators/addresses.ts","../src/core/generators/names.ts","../src/core/builders/utils.ts","../src/core/generators/check-digits.ts","../src/core/generators/identifiers.ts","../src/locales/us/addresses.ts","../src/locales/us/names.ts","../src/locales/us/index.ts","../src/locales/uk/addresses.ts","../src/locales/uk/names.ts","../src/locales/uk/index.ts","../src/locales/au/addresses.ts","../src/locales/au/names.ts","../src/locales/au/index.ts","../src/locales/ca/addresses.ts","../src/locales/ca/names.ts","../src/locales/ca/index.ts","../src/locales/de/addresses.ts","../src/locales/de/names.ts","../src/locales/de/index.ts","../src/locales/fr/addresses.ts","../src/locales/fr/names.ts","../src/locales/fr/index.ts","../src/locales/nl/addresses.ts","../src/locales/nl/names.ts","../src/locales/nl/index.ts","../src/locales/in/addresses.ts","../src/locales/in/names.ts","../src/locales/in/index.ts","../src/locales/jp/addresses.ts","../src/locales/jp/names.ts","../src/locales/jp/index.ts","../src/locales/kr/addresses.ts","../src/locales/kr/names.ts","../src/locales/kr/index.ts","../src/locales/sg/addresses.ts","../src/locales/sg/names.ts","../src/locales/sg/index.ts","../src/locales/br/addresses.ts","../src/locales/br/names.ts","../src/locales/br/index.ts","../src/locales/mx/addresses.ts","../src/locales/mx/names.ts","../src/locales/mx/index.ts","../src/locales/za/addresses.ts","../src/locales/za/names.ts","../src/locales/za/index.ts","../src/locales/index.ts","../src/core/builders/version-adapters.ts","../src/core/builders/patient.ts","../src/core/builders/practitioner.ts","../src/core/builders/practitioner-role.ts","../src/core/builders/organization.ts","../src/core/data/loinc-codes.ts","../src/core/builders/observation.ts","../src/core/data/snomed-codes.ts","../src/core/builders/condition.ts","../src/core/data/allergy-codes.ts","../src/core/builders/allergy-intolerance.ts","../src/core/data/medication-codes.ts","../src/core/builders/medication-statement.ts","../src/core/builders/bundle.ts"],"sourcesContent":["// All shared types for fhir-test-data. Zero runtime cost — no imports, no classes.\n\n// ---------------------------------------------------------------------------\n// Resource types\n// ---------------------------------------------------------------------------\n\nexport const SUPPORTED_RESOURCE_TYPES = [\n \"Patient\",\n \"Practitioner\",\n \"PractitionerRole\",\n \"Organization\",\n \"Observation\",\n \"Condition\",\n \"AllergyIntolerance\",\n \"MedicationStatement\",\n \"Bundle\",\n] as const;\n\nexport type SupportedResourceType = (typeof SUPPORTED_RESOURCE_TYPES)[number];\n\n// ---------------------------------------------------------------------------\n// FHIR versions\n// ---------------------------------------------------------------------------\n\nexport const SUPPORTED_FHIR_VERSIONS = [\"R4\", \"R4B\", \"R5\"] as const;\n\nexport type FhirVersion = (typeof SUPPORTED_FHIR_VERSIONS)[number];\n\n// ---------------------------------------------------------------------------\n// Locales\n// ---------------------------------------------------------------------------\n\nexport const SUPPORTED_LOCALES = [\"us\", \"uk\", \"au\", \"ca\", \"de\", \"fr\", \"nl\", \"in\", \"jp\", \"kr\", \"sg\", \"br\", \"mx\", \"za\"] as const;\n\nexport type Locale = (typeof SUPPORTED_LOCALES)[number];\n\n// ---------------------------------------------------------------------------\n// FHIR resource base shapes\n// ---------------------------------------------------------------------------\n\nexport interface FhirMeta {\n versionId?: string;\n lastUpdated?: string;\n profile?: string[];\n [key: string]: unknown;\n}\n\n/** Minimal FHIR resource shape. Index signature allows arbitrary FHIR fields. */\nexport interface FhirResource {\n resourceType: string;\n id?: string;\n meta?: FhirMeta;\n [key: string]: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Builder interfaces\n// ---------------------------------------------------------------------------\n\nexport interface BuilderOptions {\n locale: Locale;\n count: number;\n /** Seed for deterministic random generation. Same seed = same output. */\n seed?: number;\n /** FHIR version to target. Defaults to 'R4'. */\n fhirVersion?: FhirVersion;\n /** Partial overrides to merge into every generated resource. */\n overrides?: Record<string, unknown>;\n}\n\nexport interface ResourceBuilder<T extends FhirResource> {\n locale(locale: Locale): this;\n count(count: number): this;\n seed(seed: number): this;\n overrides(overrides: Record<string, unknown>): this;\n build(): T[];\n}\n\n// ---------------------------------------------------------------------------\n// Identifier types\n// ---------------------------------------------------------------------------\n\n/** A deterministic random number generator function. Returns [0, 1). */\nexport type RandomFn = () => number;\n\n/**\n * Optional context passed from a resource builder to an identifier generator.\n * Identifiers that encode demographic data (e.g. Korean RRN) use this to stay\n * internally consistent with the generated resource. All other generators ignore it.\n */\nexport interface IdentifierContext {\n gender?: \"male\" | \"female\" | \"other\" | \"unknown\";\n birthYear?: number;\n}\n\nexport interface IdentifierDefinition {\n /** FHIR system URI (e.g., \"https://fhir.nhs.uk/Id/nhs-number\") */\n system: string;\n /** Human-readable name (e.g., \"NHS Number\") */\n name: string;\n /**\n * Check-digit algorithm name, if applicable (e.g., \"Modulus 11\", \"Luhn\", \"Verhoeff\").\n * Omitted for identifiers validated by format/range only.\n */\n algorithm?: string;\n /**\n * Generate a valid identifier value.\n * `context` is provided by the patient builder when demographic data is\n * available. Implementations that don't need it can safely ignore the\n * second parameter — TypeScript function arity compatibility allows this.\n */\n generate: (rng: RandomFn, context?: IdentifierContext) => string;\n /** Validate an identifier value */\n validate: (value: string) => boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Annotation types\n// ---------------------------------------------------------------------------\n\n/** A single human-readable note explaining a field in a generated resource. */\nexport interface AnnotationNote {\n /** JSONPath-style field reference (e.g., \"identifier[0].value\") */\n path: string;\n /** Plain-language explanation of the field and its value */\n note: string;\n}\n\n/** A generated FHIR resource paired with human-readable field explanations. */\nexport interface AnnotatedResource {\n resource: FhirResource;\n notes: AnnotationNote[];\n}\n\n// ---------------------------------------------------------------------------\n// Address types\n// ---------------------------------------------------------------------------\n\nexport interface CityDefinition {\n name: string;\n state?: string;\n district?: string;\n}\n\nexport interface AddressTemplate {\n /** Street name + number patterns */\n streets: string[];\n /** City definitions with matching state/postcode data */\n cities: CityDefinition[];\n /** Generate a valid postal code for the given state/region */\n generatePostalCode: (rng: RandomFn, state?: string) => string;\n /**\n * Format a street address line. Defaults to \"{number} {street}\" if omitted.\n * Override for locales that use \"{street} {number}\" order (DE, NL, FR).\n */\n formatLine?: (number: number, street: string) => string;\n /** ISO 3166-1 alpha-2 country code */\n country: string;\n}\n\n// ---------------------------------------------------------------------------\n// Name types\n// ---------------------------------------------------------------------------\n\nexport interface NamePool {\n given: {\n male: string[];\n female: string[];\n };\n family: string[];\n /** Optional prefixes (e.g., \"van\", \"de\" for Dutch names) */\n prefixes?: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Locale definition\n// ---------------------------------------------------------------------------\n\nexport interface LocaleDefinition {\n code: Locale;\n /** Display name (e.g., \"United Kingdom\") */\n name: string;\n /** Patient identifier definitions for this locale */\n patientIdentifiers: IdentifierDefinition[];\n /** Practitioner identifier definitions for this locale */\n practitionerIdentifiers: IdentifierDefinition[];\n /** Organization identifier definitions for this locale */\n organizationIdentifiers: IdentifierDefinition[];\n /** Address generation data */\n address: AddressTemplate;\n /** Name pools */\n names: NamePool;\n}\n\n// ---------------------------------------------------------------------------\n// Generated resource wrapper\n// ---------------------------------------------------------------------------\n\nexport interface GeneratedFixture<T extends FhirResource> {\n resource: T;\n /** Which locale was used to generate this resource */\n locale: Locale;\n /** The seed that produced this resource (for reproducibility) */\n seed: number;\n}\n","import type { AddressTemplate, RandomFn } from \"@/core/types.js\";\nimport { pickRandom, randomInt } from \"./rng.js\";\n\nexport interface GeneratedAddress {\n line: string[];\n city: string;\n state?: string;\n district?: string;\n postalCode: string;\n country: string;\n}\n\n/** Generate a single address using the locale's address template. */\nexport function generateAddress(template: AddressTemplate, rng: RandomFn): GeneratedAddress {\n const city = pickRandom(template.cities, rng);\n const street = pickRandom(template.streets, rng);\n const number = randomInt(1, 9999, rng);\n const postalCode = template.generatePostalCode(rng, city.state);\n\n const formatLine = template.formatLine ?? ((n: number, s: string): string => `${n} ${s}`);\n const address: GeneratedAddress = {\n line: [formatLine(number, street)],\n city: city.name,\n postalCode,\n country: template.country,\n };\n\n if (city.state !== undefined) address.state = city.state;\n if (city.district !== undefined) address.district = city.district;\n\n return address;\n}\n","import type { NamePool, RandomFn } from \"@/core/types.js\";\nimport { pickRandom } from \"./rng.js\";\n\nexport interface GeneratedName {\n family: string;\n given: string[];\n prefix?: string;\n /** Surname prefix for Dutch names (e.g., \"van\", \"de\") — stored separately in FHIR */\n familyPrefix?: string;\n /** \"male\" | \"female\" — used to select given names */\n gender: \"male\" | \"female\";\n}\n\n/** Generate a single name using the locale's name pool. */\nexport function generateName(\n pool: NamePool,\n gender: \"male\" | \"female\",\n rng: RandomFn,\n): GeneratedName {\n const givenPool = gender === \"male\" ? pool.given.male : pool.given.female;\n const given = pickRandom(givenPool, rng);\n const family = pickRandom(pool.family, rng);\n\n const name: GeneratedName = {\n family,\n given: [given],\n gender,\n };\n\n if (pool.prefixes !== undefined && pool.prefixes.length > 0) {\n // ~30% chance of including a surname prefix for locales that have them\n if (rng() < 0.3) {\n name.familyPrefix = pickRandom(pool.prefixes, rng);\n }\n }\n\n return name;\n}\n","import type { RandomFn } from \"@/core/types.js\";\nimport { randomInt } from \"@/core/generators/rng.js\";\n\nexport function generateUuidV4(rng: RandomFn): string {\n const hex = (bits: number): string =>\n Math.floor(rng() * (1 << bits))\n .toString(16)\n .padStart(bits / 4, \"0\");\n\n const p1 = hex(32);\n const p2 = hex(16);\n const p3 = \"4\" + hex(12);\n const variant = (8 + Math.floor(rng() * 4)).toString(16);\n const p4 = variant + hex(12);\n const p5 = hex(32) + hex(16);\n return `${p1}-${p2}-${p3}-${p4}-${p5}`;\n}\n\nexport function deepMerge(\n base: Record<string, unknown>,\n overrides: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = { ...base };\n for (const key of Object.keys(overrides)) {\n const overrideVal = overrides[key];\n const baseVal = base[key];\n if (\n overrideVal !== null &&\n typeof overrideVal === \"object\" &&\n !Array.isArray(overrideVal) &&\n baseVal !== null &&\n typeof baseVal === \"object\" &&\n !Array.isArray(baseVal)\n ) {\n result[key] = deepMerge(\n baseVal as Record<string, unknown>,\n overrideVal as Record<string, unknown>,\n );\n } else {\n result[key] = overrideVal;\n }\n }\n return result;\n}\n\n/** Generate an ISO 8601 date string (YYYY-MM-DD) in the given year range. */\nexport function generateDate(minYear: number, maxYear: number, rng: RandomFn): string {\n const year = randomInt(minYear, maxYear, rng);\n const month = randomInt(1, 12, rng);\n const daysInMonth = new Date(year, month, 0).getDate();\n const day = randomInt(1, daysInMonth, rng);\n return `${year.toString()}-${month.toString().padStart(2, \"0\")}-${day.toString().padStart(2, \"0\")}`;\n}\n\n/** Generate an ISO 8601 datetime string (YYYY-MM-DDThh:mm:ss+00:00). */\nexport function generateDateTime(minYear: number, maxYear: number, rng: RandomFn): string {\n const date = generateDate(minYear, maxYear, rng);\n const hour = randomInt(0, 23, rng);\n const min = randomInt(0, 59, rng);\n const sec = randomInt(0, 59, rng);\n return `${date}T${hour.toString().padStart(2, \"0\")}:${min.toString().padStart(2, \"0\")}:${sec.toString().padStart(2, \"0\")}+00:00`;\n}\n","/**\n * Pure check digit algorithm implementations.\n * All functions are stateless and browser-safe.\n * Sources: docs/research/01-country-identifiers.md\n */\n\n// ---------------------------------------------------------------------------\n// Luhn — AU IHI, AU HPI-I, US NPI, FR RPPS\n// ---------------------------------------------------------------------------\n\n/**\n * Compute the Luhn check digit for a string of digits (without the check digit).\n * Returns a single digit string \"0\"–\"9\".\n */\nexport function luhnCheckDigit(digits: string): string {\n let sum = 0;\n for (let i = digits.length - 1; i >= 0; i--) {\n const pos = digits.length - 1 - i; // 0 = rightmost position\n let d = Number(digits[i]);\n if (pos % 2 === 0) {\n d *= 2;\n if (d > 9) d -= 9;\n }\n sum += d;\n }\n return ((10 - (sum % 10)) % 10).toString();\n}\n\n/** Validate a full number (including check digit) against the Luhn algorithm. */\nexport function luhnValidate(value: string): boolean {\n if (!/^\\d+$/.test(value) || value.length < 2) return false;\n let sum = 0;\n for (let i = value.length - 1; i >= 0; i--) {\n const pos = value.length - 1 - i;\n let d = Number(value[i]);\n if (pos % 2 === 1) {\n d *= 2;\n if (d > 9) d -= 9;\n }\n sum += d;\n }\n return sum % 10 === 0;\n}\n\n// ---------------------------------------------------------------------------\n// Modulus 11 — UK NHS Number\n// ---------------------------------------------------------------------------\n\nconst NHS_WEIGHTS = [10, 9, 8, 7, 6, 5, 4, 3, 2];\n\n/**\n * Compute the NHS Modulus 11 check digit for the first 9 digits.\n * Returns null if check digit would be 10 (number must be discarded and regenerated).\n */\nexport function modulus11CheckDigit(nineDigits: string): string | null {\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n const w = NHS_WEIGHTS[i] ?? 0;\n sum += Number(nineDigits[i]) * w;\n }\n const check = 11 - (sum % 11);\n if (check === 11) return \"0\";\n if (check === 10) return null;\n return check.toString();\n}\n\n/** Validate a 10-digit NHS number against the Modulus 11 algorithm. */\nexport function modulus11Validate(value: string): boolean {\n if (!/^\\d{10}$/.test(value)) return false;\n const check = modulus11CheckDigit(value.slice(0, 9));\n return check !== null && check === value[9];\n}\n\n// ---------------------------------------------------------------------------\n// Verhoeff — IN Aadhaar\n// ---------------------------------------------------------------------------\n\n// Dihedral group D5 multiplication table\nconst VERHOEFF_D: readonly (readonly number[])[] = [\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n [1, 2, 3, 4, 0, 6, 7, 8, 9, 5],\n [2, 3, 4, 0, 1, 7, 8, 9, 5, 6],\n [3, 4, 0, 1, 2, 8, 9, 5, 6, 7],\n [4, 0, 1, 2, 3, 9, 5, 6, 7, 8],\n [5, 9, 8, 7, 6, 0, 4, 3, 2, 1],\n [6, 5, 9, 8, 7, 1, 0, 4, 3, 2],\n [7, 6, 5, 9, 8, 2, 1, 0, 4, 3],\n [8, 7, 6, 5, 9, 3, 2, 1, 0, 4],\n [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],\n];\n\n// Permutation table\nconst VERHOEFF_P: readonly (readonly number[])[] = [\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n [1, 5, 7, 6, 2, 8, 3, 0, 9, 4],\n [5, 8, 0, 3, 7, 9, 6, 1, 4, 2],\n [8, 9, 1, 6, 0, 4, 3, 5, 2, 7],\n [9, 4, 5, 3, 1, 2, 6, 8, 7, 0],\n [4, 2, 8, 6, 5, 7, 3, 9, 0, 1],\n [2, 7, 9, 3, 8, 0, 6, 4, 1, 5],\n [7, 0, 4, 6, 9, 1, 3, 2, 5, 8],\n];\n\nconst VERHOEFF_INV = [0, 4, 3, 2, 1, 5, 6, 7, 8, 9];\n\nfunction verhoeffStep(c: number, digit: number, position: number): number {\n const pRow = VERHOEFF_P[position % 8];\n if (pRow === undefined) throw new Error(`Verhoeff P table: row ${position % 8} missing`);\n const pVal = pRow[digit];\n if (pVal === undefined) throw new Error(`Verhoeff P table: col ${digit} missing`);\n const dRow = VERHOEFF_D[c];\n if (dRow === undefined) throw new Error(`Verhoeff D table: row ${c} missing`);\n const result = dRow[pVal];\n if (result === undefined) throw new Error(`Verhoeff D table: col ${pVal} missing`);\n return result;\n}\n\n/**\n * Compute Verhoeff check digit for a string of digits.\n * Returns a single digit string \"0\"–\"9\".\n */\nexport function verhoeffCheckDigit(digits: string): string {\n const withPlaceholder = digits + \"0\";\n const reversed = withPlaceholder.split(\"\").reverse();\n let c = 0;\n for (let i = 0; i < reversed.length; i++) {\n c = verhoeffStep(c, Number(reversed[i]), i);\n }\n const inv = VERHOEFF_INV[c];\n if (inv === undefined) throw new Error(`Verhoeff INV table: index ${c} missing`);\n return inv.toString();\n}\n\n/** Validate a number (including check digit) against the Verhoeff algorithm. */\nexport function verhoeffValidate(value: string): boolean {\n if (!/^\\d+$/.test(value) || value.length < 2) return false;\n const reversed = value.split(\"\").reverse();\n let c = 0;\n for (let i = 0; i < reversed.length; i++) {\n c = verhoeffStep(c, Number(reversed[i]), i);\n }\n return c === 0;\n}\n\n// ---------------------------------------------------------------------------\n// 11-proef — NL BSN\n// ---------------------------------------------------------------------------\n\nconst BSN_WEIGHTS = [9, 8, 7, 6, 5, 4, 3, 2];\nconst BSN_VALIDATE_WEIGHTS = [9, 8, 7, 6, 5, 4, 3, 2, -1];\n\n/**\n * Compute the 11-proef check digit (d9) for 8 leading BSN digits.\n * Returns null if no valid single-digit d9 exists (caller must retry).\n */\nexport function elevenProefCheckDigit(eightDigits: string): string | null {\n let sum = 0;\n for (let i = 0; i < 8; i++) {\n const w = BSN_WEIGHTS[i] ?? 0;\n sum += Number(eightDigits[i]) * w;\n }\n const d9 = sum % 11;\n if (d9 > 9) return null;\n if (sum - d9 === 0) return null;\n return d9.toString();\n}\n\n/** Validate a 9-digit BSN against the 11-proef algorithm. */\nexport function elevenProefValidate(value: string): boolean {\n if (!/^\\d{9}$/.test(value)) return false;\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n const w = BSN_VALIDATE_WEIGHTS[i] ?? 0;\n sum += Number(value[i]) * w;\n }\n return sum !== 0 && sum % 11 === 0;\n}\n\n// ---------------------------------------------------------------------------\n// Modulus 97 — FR NIR\n// ---------------------------------------------------------------------------\n\n/**\n * Compute the 2-digit Modulus 97 key for a 13-digit French NIR.\n * Returns a zero-padded 2-digit string.\n */\nexport function modulus97Key(thirteenDigits: string): string {\n const nir = BigInt(thirteenDigits);\n const key = 97n - (nir % 97n);\n return key.toString().padStart(2, \"0\");\n}\n\n/** Validate a 15-digit French NIR+key (13 NIR digits + 2-digit key). */\nexport function modulus97Validate(value: string): boolean {\n if (!/^\\d{15}$/.test(value)) return false;\n return modulus97Key(value.slice(0, 13)) === value.slice(13, 15);\n}\n\n// ---------------------------------------------------------------------------\n// Modulus 10 — DE LANR (7th digit check over positions 1–6)\n// ---------------------------------------------------------------------------\n\nconst LANR_WEIGHTS = [4, 9, 2, 1, 6, 5];\n\n/**\n * Compute the Modulus 10 check digit for the first 6 digits of a LANR.\n * Returns a single digit string \"0\"–\"9\".\n */\nexport function modulus10CheckDigit(sixDigits: string): string {\n let sum = 0;\n for (let i = 0; i < 6; i++) {\n const w = LANR_WEIGHTS[i] ?? 0;\n sum += Number(sixDigits[i]) * w;\n }\n return ((10 - (sum % 10)) % 10).toString();\n}\n\n// ---------------------------------------------------------------------------\n// Korean RRN — Resident Registration Number\n// ---------------------------------------------------------------------------\n\nconst RRN_WEIGHTS = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5] as const;\n\n/**\n * Compute the Korean RRN check digit for the first 12 digits.\n * Returns a single digit string \"0\"–\"9\".\n */\nexport function rrnCheckDigit(twelveDigits: string): string {\n let sum = 0;\n for (let i = 0; i < 12; i++) {\n const w = RRN_WEIGHTS[i] ?? 0;\n sum += Number(twelveDigits[i]) * w;\n }\n return ((11 - (sum % 11)) % 10).toString();\n}\n\n/** Validate a Korean RRN (13 digits, with or without hyphen). */\nexport function rrnValidate(value: string): boolean {\n const digits = value.replace(/-/g, \"\");\n if (!/^\\d{13}$/.test(digits)) return false;\n return rrnCheckDigit(digits.slice(0, 12)) === digits[12];\n}\n\n// ---------------------------------------------------------------------------\n// Singapore NRIC / FIN — National Registration Identity Card\n// ---------------------------------------------------------------------------\n\nconst NRIC_WEIGHTS = [2, 7, 6, 5, 4, 3, 2] as const;\nconst NRIC_ST_CHECK_LETTERS = \"JZIHGFEDCBA\";\nconst NRIC_FG_CHECK_LETTERS = \"XWUTRQPNMLK\";\n\n/**\n * Compute the Singapore NRIC check letter.\n * prefix: one of \"S\" | \"T\" | \"F\" | \"G\"\n * sevenDigits: 7-digit string\n * Returns a single uppercase letter.\n */\nexport function nricCheckLetter(prefix: string, sevenDigits: string): string {\n let sum = 0;\n for (let i = 0; i < 7; i++) {\n const w = NRIC_WEIGHTS[i] ?? 0;\n sum += Number(sevenDigits[i]) * w;\n }\n if (prefix === \"T\" || prefix === \"G\") sum += 4;\n const checkLetters = prefix === \"F\" || prefix === \"G\" ? NRIC_FG_CHECK_LETTERS : NRIC_ST_CHECK_LETTERS;\n return checkLetters[sum % 11] ?? \"A\";\n}\n\n/** Validate a Singapore NRIC (format: SXXXXXXC — prefix + 7 digits + check letter). */\nexport function nricValidate(value: string): boolean {\n if (!/^[STFG]\\d{7}[A-Z]$/.test(value)) return false;\n const prefix = value[0] ?? \"\";\n const digits = value.slice(1, 8);\n const checkChar = value[8] ?? \"\";\n return nricCheckLetter(prefix, digits) === checkChar;\n}\n\n// ---------------------------------------------------------------------------\n// Brazilian CPF — Cadastro de Pessoas Físicas\n// ---------------------------------------------------------------------------\n\n/**\n * Compute the two CPF check digits for 9 base digits.\n * Returns a 2-digit string (D1D2).\n * CPF format: NNN.NNN.NNN-DD\n */\nexport function cpfCheckDigits(nineDigits: string): string {\n // First check digit: weights 10..2\n let sum1 = 0;\n for (let i = 0; i < 9; i++) {\n sum1 += Number(nineDigits[i]) * (10 - i);\n }\n const rem1 = sum1 % 11;\n const d1 = rem1 < 2 ? 0 : 11 - rem1;\n\n // Second check digit: weights 11..2 (includes d1)\n const tenDigits = nineDigits + d1.toString();\n let sum2 = 0;\n for (let i = 0; i < 10; i++) {\n sum2 += Number(tenDigits[i]) * (11 - i);\n }\n const rem2 = sum2 % 11;\n const d2 = rem2 < 2 ? 0 : 11 - rem2;\n\n return d1.toString() + d2.toString();\n}\n\n/** Validate a CPF string. Accepts formatted (NNN.NNN.NNN-DD) or raw (11 digits). */\nexport function cpfValidate(value: string): boolean {\n const digits = value.replace(/[.\\-]/g, \"\");\n if (!/^\\d{11}$/.test(digits)) return false;\n // Reject all-same-digit CPFs (e.g., \"00000000000\")\n if (/^(\\d)\\1{10}$/.test(digits)) return false;\n const check = cpfCheckDigits(digits.slice(0, 9));\n return check === digits.slice(9, 11);\n}\n","/**\n * Pre-built IdentifierDefinition objects for every supported identifier type.\n * Locales import these and include them in their LocaleDefinition.\n * All generators use only the provided RandomFn — no Math.random().\n */\nimport type { IdentifierContext, IdentifierDefinition, RandomFn } from \"@/core/types.js\";\nimport {\n luhnCheckDigit,\n luhnValidate,\n modulus11CheckDigit,\n modulus11Validate,\n verhoeffCheckDigit,\n verhoeffValidate,\n elevenProefCheckDigit,\n elevenProefValidate,\n modulus97Key,\n modulus97Validate,\n modulus10CheckDigit,\n rrnCheckDigit,\n rrnValidate,\n nricCheckLetter,\n nricValidate,\n cpfCheckDigits,\n cpfValidate,\n} from \"./check-digits.js\";\nimport { randomDigits, randomInt, pickRandom } from \"./rng.js\";\n\n// ---------------------------------------------------------------------------\n// United Kingdom\n// ---------------------------------------------------------------------------\n\nexport const nhsNumberDefinition: IdentifierDefinition = {\n system: \"https://fhir.nhs.uk/Id/nhs-number\",\n name: \"NHS Number\",\n algorithm: \"Modulus 11\",\n generate(rng: RandomFn): string {\n // Retry until we get a valid check digit (10 is invalid)\n for (;;) {\n const nine = randomDigits(9, rng);\n const check = modulus11CheckDigit(nine);\n if (check !== null) return nine + check;\n }\n },\n validate: modulus11Validate,\n};\n\nexport const odsCodDefinition: IdentifierDefinition = {\n system: \"https://fhir.nhs.uk/Id/ods-organization-code\",\n name: \"ODS Code\",\n generate(rng: RandomFn): string {\n const letters = \"ABCDEFGHJKLMNPRSTUVWXY\";\n const letter = pickRandom([...letters], rng);\n const digits = randomDigits(2, rng);\n return letter + digits;\n },\n validate(value: string): boolean {\n return /^[A-Z]{1,3}\\d{1,4}[A-Z0-9]?$/.test(value);\n },\n};\n\nexport const gmpNumberDefinition: IdentifierDefinition = {\n system: \"https://fhir.nhs.uk/Id/gmp-number\",\n name: \"GMP Number\",\n generate(rng: RandomFn): string {\n return \"G\" + randomDigits(7, rng);\n },\n validate(value: string): boolean {\n return /^G\\d{7}$/.test(value);\n },\n};\n\nexport const gmcNumberDefinition: IdentifierDefinition = {\n system: \"https://fhir.hl7.org.uk/Id/gmc-number\",\n name: \"GMC Number\",\n generate(rng: RandomFn): string {\n return randomDigits(7, rng);\n },\n validate(value: string): boolean {\n return /^\\d{7}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Australia\n// ---------------------------------------------------------------------------\n\nexport const ihiDefinition: IdentifierDefinition = {\n system: \"http://ns.electronichealth.net.au/id/hi/ihi/1.0\",\n name: \"Individual Healthcare Identifier (IHI)\",\n algorithm: \"Luhn\",\n generate(rng: RandomFn): string {\n // 16 digits: prefix 800360 + 9 random + 1 Luhn check\n const prefix = \"800360\";\n const body = randomDigits(9, rng);\n const fifteen = prefix + body;\n return fifteen + luhnCheckDigit(fifteen);\n },\n validate(value: string): boolean {\n return /^\\d{16}$/.test(value) && value.startsWith(\"800360\") && luhnValidate(value);\n },\n};\n\nexport const medicareNumberDefinition: IdentifierDefinition = {\n system: \"http://ns.electronichealth.net.au/id/medicare-number\",\n name: \"Medicare Number\",\n algorithm: \"Weighted sum (mod 10)\",\n generate(rng: RandomFn): string {\n // Positions 1-7: random digits. Position 8: weighted check. Position 9: ref. Position 10: IRN.\n const MEDICARE_WEIGHTS = [1, 3, 7, 9, 1, 3, 7] as const;\n const base = randomDigits(7, rng);\n let sum = 0;\n for (let i = 0; i < 7; i++) {\n const w = MEDICARE_WEIGHTS[i] ?? 0;\n sum += Number(base[i]) * w;\n }\n const check = sum % 10;\n const ref = randomDigits(1, rng);\n const irn = randomInt(1, 9, rng).toString();\n return base + check.toString() + ref + irn;\n },\n validate(value: string): boolean {\n if (!/^\\d{10}$/.test(value)) return false;\n const weights = [1, 3, 7, 9, 1, 3, 7];\n let sum = 0;\n for (let i = 0; i < 7; i++) {\n const w = weights[i] ?? 0;\n sum += Number(value[i]) * w;\n }\n return sum % 10 === Number(value[7]);\n },\n};\n\nexport const hpiiDefinition: IdentifierDefinition = {\n system: \"http://ns.electronichealth.net.au/id/hi/hpii/1.0\",\n name: \"Healthcare Provider Identifier — Individual (HPI-I)\",\n algorithm: \"Luhn\",\n generate(rng: RandomFn): string {\n const prefix = \"800361\";\n const body = randomDigits(9, rng);\n const fifteen = prefix + body;\n return fifteen + luhnCheckDigit(fifteen);\n },\n validate(value: string): boolean {\n return /^\\d{16}$/.test(value) && value.startsWith(\"800361\") && luhnValidate(value);\n },\n};\n\nexport const hpioDefinition: IdentifierDefinition = {\n system: \"http://ns.electronichealth.net.au/id/hi/hpio/1.0\",\n name: \"Healthcare Provider Identifier — Organisation (HPI-O)\",\n algorithm: \"Luhn\",\n generate(rng: RandomFn): string {\n const prefix = \"800362\";\n const body = randomDigits(9, rng);\n const fifteen = prefix + body;\n return fifteen + luhnCheckDigit(fifteen);\n },\n validate(value: string): boolean {\n return /^\\d{16}$/.test(value) && value.startsWith(\"800362\") && luhnValidate(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// India\n// ---------------------------------------------------------------------------\n\nexport const aadhaarDefinition: IdentifierDefinition = {\n system: \"https://healthid.ndhm.gov.in/api/v1/auth/aadhaar\",\n name: \"Aadhaar Number\",\n algorithm: \"Verhoeff\",\n generate(rng: RandomFn): string {\n // 12 digits: 11 random + 1 Verhoeff check digit\n const eleven = randomDigits(11, rng);\n return eleven + verhoeffCheckDigit(eleven);\n },\n validate: verhoeffValidate,\n};\n\nexport const abhaNumberDefinition: IdentifierDefinition = {\n system: \"https://healthid.abdm.gov.in/api/v1/abha-number\",\n name: \"ABHA Number\",\n generate(rng: RandomFn): string {\n // 14 digits formatted as XX-XXXX-XXXX-XXXX\n const digits = randomDigits(14, rng);\n return `${digits.slice(0, 2)}-${digits.slice(2, 6)}-${digits.slice(6, 10)}-${digits.slice(10, 14)}`;\n },\n validate(value: string): boolean {\n return /^\\d{2}-\\d{4}-\\d{4}-\\d{4}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Canada\n// ---------------------------------------------------------------------------\n\nexport const ontarioHcnDefinition: IdentifierDefinition = {\n system: \"https://fhir.infoway-inforoute.ca/NamingSystem/ca-on-patient-hcn\",\n name: \"Ontario Health Card Number\",\n generate(rng: RandomFn): string {\n const digits = randomDigits(10, rng);\n const letters = \"ABCDEFGHJKLMNPRSTUVWXY\";\n const v1 = pickRandom([...letters], rng);\n const v2 = pickRandom([...letters], rng);\n return digits + v1 + v2;\n },\n validate(value: string): boolean {\n return /^\\d{10}[A-Z]{2}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Germany\n// ---------------------------------------------------------------------------\n\nexport const kvidDefinition: IdentifierDefinition = {\n system: \"http://fhir.de/sid/gkv/kvid-10\",\n name: \"KVID-10\",\n generate(rng: RandomFn): string {\n // 1 uppercase letter + 9 digits\n const letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n const letter = pickRandom([...letters], rng);\n return letter + randomDigits(9, rng);\n },\n validate(value: string): boolean {\n return /^[A-Z]\\d{9}$/.test(value);\n },\n};\n\nexport const iknrDefinition: IdentifierDefinition = {\n system: \"http://fhir.de/sid/arge-ik/iknr\",\n name: \"Institutionskennzeichen (IKNR)\",\n generate(rng: RandomFn): string {\n return randomDigits(9, rng);\n },\n validate(value: string): boolean {\n return /^\\d{9}$/.test(value);\n },\n};\n\nexport const lanrDefinition: IdentifierDefinition = {\n system: \"http://fhir.de/sid/kbv/lanr\",\n name: \"Lebenslange Arztnummer (LANR)\",\n algorithm: \"Modulus 10\",\n generate(rng: RandomFn): string {\n // 9 digits: 6 base + 1 modulus-10 check + 2 specialty suffix\n const six = randomDigits(6, rng);\n const check = modulus10CheckDigit(six);\n const suffix = randomDigits(2, rng);\n return six + check + suffix;\n },\n validate(value: string): boolean {\n if (!/^\\d{9}$/.test(value)) return false;\n return modulus10CheckDigit(value.slice(0, 6)) === value[6];\n },\n};\n\nexport const bsnrDefinition: IdentifierDefinition = {\n system: \"http://fhir.de/sid/kbv/bsnr\",\n name: \"Betriebsstättennummer (BSNR)\",\n generate(rng: RandomFn): string {\n return randomDigits(9, rng);\n },\n validate(value: string): boolean {\n return /^\\d{9}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// France\n// ---------------------------------------------------------------------------\n\nexport const nirDefinition: IdentifierDefinition = {\n system: \"https://annuaire.sante.fr\",\n name: \"NIR (Numéro d'Inscription au Répertoire)\",\n algorithm: \"Modulus 97\",\n generate(rng: RandomFn): string {\n // 13 digits + 2-digit Modulus 97 key = 15 chars total\n // gender digit: 1 or 2; year: 00-99; dept: 01-95; etc.\n const gender = pickRandom([\"1\", \"2\"], rng);\n const year = randomDigits(2, rng);\n const month = (randomInt(1, 12, rng)).toString().padStart(2, \"0\");\n const dept = (randomInt(1, 95, rng)).toString().padStart(2, \"0\");\n const commune = (randomInt(1, 999, rng)).toString().padStart(3, \"0\");\n const order = (randomInt(1, 999, rng)).toString().padStart(3, \"0\");\n const thirteen = gender + year + month + dept + commune + order;\n return thirteen + modulus97Key(thirteen);\n },\n validate: modulus97Validate,\n};\n\nexport const finessDefinition: IdentifierDefinition = {\n system: \"https://annuaire.sante.fr/finess\",\n name: \"FINESS (Fichier national des établissements sanitaires et sociaux)\",\n generate(rng: RandomFn): string {\n // 9 digits: 2-digit department + 7 remaining\n const dept = (randomInt(1, 95, rng)).toString().padStart(2, \"0\");\n return dept + randomDigits(7, rng);\n },\n validate(value: string): boolean {\n return /^\\d{9}$/.test(value);\n },\n};\n\nexport const rppsDefinition: IdentifierDefinition = {\n system: \"https://annuaire.sante.fr\",\n name: \"RPPS Number\",\n algorithm: \"Luhn\",\n generate(rng: RandomFn): string {\n // 11 digits with Luhn check\n const ten = randomDigits(10, rng);\n return ten + luhnCheckDigit(ten);\n },\n validate(value: string): boolean {\n return /^\\d{11}$/.test(value) && luhnValidate(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Netherlands\n// ---------------------------------------------------------------------------\n\nexport const bsnDefinition: IdentifierDefinition = {\n system: \"http://fhir.nl/fhir/NamingSystem/bsn\",\n name: \"Burgerservicenummer (BSN)\",\n algorithm: \"11-proef\",\n generate(rng: RandomFn): string {\n for (;;) {\n const eight = randomDigits(8, rng);\n const check = elevenProefCheckDigit(eight);\n if (check !== null) return eight + check;\n }\n },\n validate: elevenProefValidate,\n};\n\nexport const agbCodeDefinition: IdentifierDefinition = {\n system: \"http://fhir.nl/fhir/NamingSystem/agb-z\",\n name: \"AGB-Z Code\",\n generate(rng: RandomFn): string {\n return randomDigits(8, rng);\n },\n validate(value: string): boolean {\n return /^\\d{8}$/.test(value);\n },\n};\n\nexport const uziNumberDefinition: IdentifierDefinition = {\n system: \"http://fhir.nl/fhir/NamingSystem/uzi-nr-pers\",\n name: \"UZI Number\",\n generate(rng: RandomFn): string {\n return randomDigits(8, rng);\n },\n validate(value: string): boolean {\n return /^\\d{6,9}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// United States\n// ---------------------------------------------------------------------------\n\nconst IRS_RESERVED_PREFIX = \"987654320\";\n\nexport const ssnDefinition: IdentifierDefinition = {\n system: \"http://hl7.org/fhir/sid/us-ssn\",\n name: \"Social Security Number (SSN)\",\n generate(rng: RandomFn): string {\n for (;;) {\n // Area: 900-999 range (never assigned to real people, safe for synthetic data)\n const area = randomInt(900, 998, rng); // exclude 999 which may be reserved\n const group = randomInt(1, 99, rng);\n const serial = randomInt(1, 9999, rng);\n // Avoid IRS reserved range 987-65-43XX\n const candidate =\n area.toString().padStart(3, \"0\") +\n group.toString().padStart(2, \"0\") +\n serial.toString().padStart(4, \"0\");\n if (candidate.startsWith(IRS_RESERVED_PREFIX)) continue;\n const formatted =\n candidate.slice(0, 3) + \"-\" + candidate.slice(3, 5) + \"-\" + candidate.slice(5);\n return formatted;\n }\n },\n validate(value: string): boolean {\n if (!/^\\d{3}-\\d{2}-\\d{4}$/.test(value)) return false;\n const digits = value.replace(/-/g, \"\");\n const area = Number(digits.slice(0, 3));\n const group = Number(digits.slice(3, 5));\n const serial = Number(digits.slice(5));\n return area !== 0 && area !== 666 && group !== 0 && serial !== 0;\n },\n};\n\nexport const npiDefinition: IdentifierDefinition = {\n system: \"http://hl7.org/fhir/sid/us-npi\",\n name: \"National Provider Identifier (NPI)\",\n algorithm: \"Luhn\",\n generate(rng: RandomFn): string {\n // Generate 9 random digits, prepend 80840 for Luhn, use check digit as 10th NPI digit\n const nine = randomDigits(9, rng);\n const forLuhn = \"80840\" + nine;\n const check = luhnCheckDigit(forLuhn);\n return nine + check;\n },\n validate(value: string): boolean {\n if (!/^\\d{10}$/.test(value)) return false;\n return luhnValidate(\"80840\" + value);\n },\n};\n\nexport const mrnDefinition: IdentifierDefinition = {\n system: \"http://hospital.example.org/fhir/mrn\",\n name: \"Medical Record Number (MRN)\",\n generate(rng: RandomFn): string {\n const letters = \"ABCDEFGHJKLMNPRSTUVWXYZ\";\n const prefix = pickRandom([...letters], rng) + pickRandom([...letters], rng);\n return prefix + randomDigits(6, rng);\n },\n validate(value: string): boolean {\n return /^[A-Z]{2}\\d{6}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Japan\n// ---------------------------------------------------------------------------\n\nexport const jpHospitalMrnDefinition: IdentifierDefinition = {\n system: \"http://jpfhir.jp/fhir/core/NamingSystem/jp-hospitalPatientId\",\n name: \"Japanese Hospital Patient ID\",\n generate(rng: RandomFn): string {\n return randomDigits(10, rng);\n },\n validate(value: string): boolean {\n return /^\\d{10}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// South Korea\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Korean RRN gender digit rules:\n// 1 = male, 1900–1999\n// 2 = female, 1900–1999\n// 3 = male, 2000–2099\n// 4 = female, 2000–2099\n// ---------------------------------------------------------------------------\n\nconst RRN_GENDER_DIGIT: Record<string, string> = {\n \"male-old\": \"1\",\n \"female-old\": \"2\",\n \"male-new\": \"3\",\n \"female-new\": \"4\",\n};\n\nexport const krRrnDefinition: IdentifierDefinition = {\n system: \"http://www.mohw.go.kr/fhir/NamingSystem/rrn\",\n name: \"Resident Registration Number (RRN)\",\n algorithm: \"RRN check digit (weighted sum mod 11)\",\n generate(rng: RandomFn, context?: IdentifierContext): string {\n // Birth year: use builder-supplied value when available, otherwise generate.\n // \"Otherwise\" preserves the original rng call order for standalone use.\n const hasContext = context?.birthYear !== undefined && context.gender !== undefined;\n const fullYear = hasContext ? (context.birthYear as number) : (randomInt(70, 99, rng) + 1900);\n const yy = (fullYear % 100).toString().padStart(2, \"0\");\n\n const month = randomInt(1, 12, rng).toString().padStart(2, \"0\");\n const day = randomInt(1, 28, rng).toString().padStart(2, \"0\");\n\n let genderDigit: string;\n if (hasContext) {\n const century = fullYear >= 2000 ? \"new\" : \"old\";\n const gender = context.gender as string;\n // 'other' / 'unknown' fall back to neutral default (male 1900s = \"1\")\n genderDigit = RRN_GENDER_DIGIT[`${gender}-${century}`] ?? \"1\";\n } else {\n // Standalone usage: pick randomly so format tests still pass\n genderDigit = pickRandom([\"1\", \"2\"], rng);\n }\n\n const seq = randomDigits(5, rng);\n const twelve = yy + month + day + genderDigit + seq;\n const check = rrnCheckDigit(twelve);\n return `${yy}${month}${day}-${genderDigit}${seq}${check}`;\n },\n validate(value: string): boolean {\n if (!/^\\d{6}-\\d{7}$/.test(value)) return false;\n return rrnValidate(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Singapore\n// ---------------------------------------------------------------------------\n\nconst NRIC_PREFIXES = [\"S\", \"S\", \"S\", \"T\", \"T\", \"F\", \"G\"] as const;\n\nexport const sgNricDefinition: IdentifierDefinition = {\n system: \"http://hl7.org.sg/fhir/NamingSystem/nric-fin\",\n name: \"NRIC / FIN\",\n algorithm: \"NRIC check letter\",\n generate(rng: RandomFn): string {\n const prefix = pickRandom([...NRIC_PREFIXES], rng);\n const digits = randomDigits(7, rng);\n const check = nricCheckLetter(prefix, digits);\n return `${prefix}${digits}${check}`;\n },\n validate(value: string): boolean {\n return nricValidate(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Brazil\n// ---------------------------------------------------------------------------\n\nexport const brCpfDefinition: IdentifierDefinition = {\n system: \"http://rnds.saude.gov.br/fhir/r4/NamingSystem/cpf\",\n name: \"CPF (Cadastro de Pessoas Físicas)\",\n algorithm: \"Modulus 11 (CPF two-digit check)\",\n generate(rng: RandomFn): string {\n for (;;) {\n const nine = randomDigits(9, rng);\n // Reject all-same-digit\n if (/^(\\d)\\1{8}$/.test(nine)) continue;\n const check = cpfCheckDigits(nine);\n const raw = nine + check;\n return raw.slice(0, 3) + \".\" + raw.slice(3, 6) + \".\" + raw.slice(6, 9) + \"-\" + raw.slice(9, 11);\n }\n },\n validate: cpfValidate,\n};\n\n// ---------------------------------------------------------------------------\n// Mexico\n// ---------------------------------------------------------------------------\n\nexport const mxCurpDefinition: IdentifierDefinition = {\n system: \"http://www.salud.gob.mx/fhir/NamingSystem/curp\",\n name: \"CURP (Clave Única de Registro de Población)\",\n generate(rng: RandomFn): string {\n // Format: 4 letters + 6-digit DOB (YYMMDD) + gender (H/M) + 2-letter state + 3 consonants + 1 alphanum + 1 check\n const LETTERS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n const CONSONANTS = \"BCDFGHJKLMNPQRSTVWXYZ\";\n const MX_STATES = [\"AS\",\"BC\",\"BS\",\"CC\",\"CL\",\"CM\",\"CS\",\"CH\",\"DF\",\"DG\",\"GT\",\"GR\",\"HG\",\"JC\",\"MC\",\"MN\",\"MS\",\"NT\",\"NL\",\"OC\",\"PL\",\"QT\",\"QR\",\"SP\",\"SL\",\"SR\",\"TC\",\"TS\",\"TL\",\"VZ\",\"YN\",\"ZS\"];\n const ALPHANUM = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n const CURP_CHECK = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\n const l1 = pickRandom([...LETTERS], rng);\n const l2 = pickRandom([...LETTERS], rng);\n const l3 = pickRandom([...LETTERS], rng);\n const l4 = pickRandom([...LETTERS], rng);\n const year = randomInt(50, 99, rng).toString().padStart(2, \"0\");\n const month = randomInt(1, 12, rng).toString().padStart(2, \"0\");\n const day = randomInt(1, 28, rng).toString().padStart(2, \"0\");\n const gender = pickRandom([\"H\", \"M\"], rng);\n const state = pickRandom(MX_STATES, rng);\n const c1 = pickRandom([...CONSONANTS], rng);\n const c2 = pickRandom([...CONSONANTS], rng);\n const c3 = pickRandom([...CONSONANTS], rng);\n const an = pickRandom([...ALPHANUM], rng);\n // check digit: simple index-based (position 0=A,1=B,...,9=9, etc. using CURP_CHECK)\n const body = l1 + l2 + l3 + l4 + year + month + day + gender + state + c1 + c2 + c3 + an;\n let sum = 0;\n for (let i = 0; i < 17; i++) {\n const idx = CURP_CHECK.indexOf(body[i] ?? \"\");\n sum += (idx >= 0 ? idx : 0) * (18 - i);\n }\n const checkIdx = (10 - (sum % 10)) % 10;\n return body + checkIdx.toString();\n },\n validate(value: string): boolean {\n return /^[A-Z]{4}\\d{6}[HM][A-Z]{2}[BCDFGHJKLMNPQRSTVWXYZ]{3}[0-9A-Z]\\d$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// South Africa\n// ---------------------------------------------------------------------------\n\nexport const zaIdDefinition: IdentifierDefinition = {\n system: \"http://www.rsaidentity.co.za/fhir/NamingSystem/said\",\n name: \"South African ID Number\",\n algorithm: \"Luhn\",\n generate(rng: RandomFn): string {\n // Format: YYMMDD + G (gender: 0-4 female, 5-9 male) + SSS + C(0) + A(8) + Z(Luhn)\n const year = randomInt(50, 99, rng).toString().padStart(2, \"0\");\n const month = randomInt(1, 12, rng).toString().padStart(2, \"0\");\n const day = randomInt(1, 28, rng).toString().padStart(2, \"0\");\n const genderDigit = pickRandom([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], rng).toString();\n const seq = randomInt(0, 999, rng).toString().padStart(3, \"0\");\n const citizenship = \"0\";\n const race = \"8\";\n const twelve = year + month + day + genderDigit + seq + citizenship + race;\n const check = luhnCheckDigit(twelve);\n return twelve + check;\n },\n validate(value: string): boolean {\n return /^\\d{13}$/.test(value) && luhnValidate(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Practitioner identifiers — Canada\n// ---------------------------------------------------------------------------\n\nexport const cpsoPractitionerDefinition: IdentifierDefinition = {\n system: \"https://www.cpso.on.ca/\",\n name: \"CPSO/Provincial Licence Number\",\n generate(rng: RandomFn): string {\n return randomDigits(6, rng);\n },\n validate(value: string): boolean {\n return /^\\d{5,6}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Practitioner identifiers — India\n// ---------------------------------------------------------------------------\n\nexport const nmcRegistrationDefinition: IdentifierDefinition = {\n system: \"https://www.nmc.org.in/\",\n name: \"NMC Registration Number\",\n generate(rng: RandomFn): string {\n return randomDigits(6, rng);\n },\n validate(value: string): boolean {\n return /^\\d{6}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Practitioner identifiers — Japan\n// ---------------------------------------------------------------------------\n\nexport const jmpDoctorLicenseDefinition: IdentifierDefinition = {\n system: \"http://jpfhir.jp/fhir/core/NamingSystem/jp-doctor-license\",\n name: \"JMPC Physician Registration Number\",\n generate(rng: RandomFn): string {\n return randomDigits(6, rng);\n },\n validate(value: string): boolean {\n return /^\\d{6}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Practitioner identifiers — South Korea\n// ---------------------------------------------------------------------------\n\nexport const mohwDoctorLicenseDefinition: IdentifierDefinition = {\n system: \"http://www.mohw.go.kr/fhir/NamingSystem/doctor-license\",\n name: \"Medical Licence Number (보건복지부)\",\n generate(rng: RandomFn): string {\n return randomDigits(5, rng);\n },\n validate(value: string): boolean {\n return /^\\d{5}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Practitioner identifiers — Singapore\n// ---------------------------------------------------------------------------\n\nexport const smcRegistrationDefinition: IdentifierDefinition = {\n system: \"http://www.smc.gov.sg/fhir/NamingSystem/smcr\",\n name: \"Singapore Medical Council Registration\",\n generate(rng: RandomFn): string {\n return \"M\" + randomDigits(5, rng);\n },\n validate(value: string): boolean {\n return /^M\\d{5}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Practitioner identifiers — Brazil\n// ---------------------------------------------------------------------------\n\nconst BR_CRM_STATES = [\"SP\", \"RJ\", \"MG\", \"RS\", \"BA\", \"PR\", \"PE\", \"CE\", \"GO\", \"MA\"] as const;\n\nexport const crmPractitionerDefinition: IdentifierDefinition = {\n system: \"https://www.cfm.org.br/fhir/NamingSystem/crm\",\n name: \"CRM (Conselho Regional de Medicina)\",\n generate(rng: RandomFn): string {\n const state = pickRandom([...BR_CRM_STATES], rng);\n return `${state}-${randomDigits(5, rng)}`;\n },\n validate(value: string): boolean {\n return /^[A-Z]{2}-\\d{5}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Practitioner identifiers — Mexico\n// ---------------------------------------------------------------------------\n\nexport const cedulaProfesionalDefinition: IdentifierDefinition = {\n system: \"http://www.sep.gob.mx/fhir/NamingSystem/cedula\",\n name: \"Cédula Profesional\",\n generate(rng: RandomFn): string {\n return randomDigits(7, rng);\n },\n validate(value: string): boolean {\n return /^\\d{7}$/.test(value);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Practitioner identifiers — South Africa\n// ---------------------------------------------------------------------------\n\nexport const hpcsaRegistrationDefinition: IdentifierDefinition = {\n system: \"https://www.hpcsa.co.za/fhir/NamingSystem/hpcsa\",\n name: \"HPCSA Registration Number\",\n generate(rng: RandomFn): string {\n return \"MP\" + randomDigits(6, rng);\n },\n validate(value: string): boolean {\n return /^MP\\d{6}$/.test(value);\n },\n};\n","import type { AddressTemplate, RandomFn } from \"@/core/types.js\";\nimport { randomInt } from \"@/core/generators/rng.js\";\n\nexport const usAddressTemplate: AddressTemplate = {\n streets: [\n \"Oak Street\", \"Maple Avenue\", \"Cedar Lane\", \"Pine Road\", \"Elm Drive\",\n \"Washington Boulevard\", \"Lincoln Way\", \"Jefferson Avenue\", \"Madison Street\",\n \"Franklin Road\", \"Adams Lane\", \"Monroe Drive\", \"Harrison Court\",\n \"Willow Creek Road\", \"Sunset Boulevard\", \"Riverside Drive\", \"Hillcrest Avenue\",\n \"Meadowbrook Lane\", \"Lakeview Drive\", \"Greenwood Place\",\n \"Birchwood Circle\", \"Foxglove Court\", \"Stonebridge Road\", \"Clearwater Lane\",\n ],\n cities: [\n { name: \"Springfield\", state: \"IL\" },\n { name: \"Portland\", state: \"OR\" },\n { name: \"Columbus\", state: \"OH\" },\n { name: \"Austin\", state: \"TX\" },\n { name: \"Phoenix\", state: \"AZ\" },\n { name: \"Charlotte\", state: \"NC\" },\n { name: \"Indianapolis\", state: \"IN\" },\n { name: \"Memphis\", state: \"TN\" },\n { name: \"Louisville\", state: \"KY\" },\n { name: \"Milwaukee\", state: \"WI\" },\n { name: \"Albuquerque\", state: \"NM\" },\n { name: \"Tucson\", state: \"AZ\" },\n { name: \"Fresno\", state: \"CA\" },\n ],\n generatePostalCode(rng: RandomFn, _state?: string): string {\n // 5-digit ZIP, avoid 00000 and 99999\n const zip = randomInt(10000, 99998, rng);\n return zip.toString().padStart(5, \"0\");\n },\n country: \"US\",\n};\n","import type { NamePool } from \"@/core/types.js\";\n\nexport const usNamePool: NamePool = {\n given: {\n male: [\n \"James\", \"John\", \"Robert\", \"Michael\", \"William\", \"David\", \"Richard\",\n \"Joseph\", \"Thomas\", \"Charles\", \"Christopher\", \"Daniel\", \"Matthew\",\n \"Anthony\", \"Donald\", \"Mark\", \"Paul\", \"Steven\", \"Andrew\", \"Kenneth\",\n \"Joshua\", \"Kevin\", \"Brian\", \"George\", \"Timothy\", \"Ronald\", \"Edward\",\n \"Jason\", \"Jeffrey\", \"Ryan\", \"Jacob\", \"Gary\", \"Nicholas\", \"Eric\",\n ],\n female: [\n \"Mary\", \"Patricia\", \"Jennifer\", \"Linda\", \"Barbara\", \"Elizabeth\",\n \"Susan\", \"Jessica\", \"Sarah\", \"Karen\", \"Lisa\", \"Nancy\", \"Betty\",\n \"Margaret\", \"Sandra\", \"Ashley\", \"Dorothy\", \"Kimberly\", \"Emily\",\n \"Donna\", \"Michelle\", \"Carol\", \"Amanda\", \"Melissa\", \"Deborah\",\n \"Stephanie\", \"Rebecca\", \"Sharon\", \"Laura\", \"Cynthia\", \"Kathleen\",\n \"Amy\", \"Angela\", \"Shirley\", \"Anna\",\n ],\n },\n family: [\n \"Smith\", \"Johnson\", \"Williams\", \"Brown\", \"Jones\", \"Garcia\", \"Miller\",\n \"Davis\", \"Rodriguez\", \"Martinez\", \"Hernandez\", \"Lopez\", \"Gonzalez\",\n \"Wilson\", \"Anderson\", \"Thomas\", \"Taylor\", \"Moore\", \"Jackson\", \"Martin\",\n \"Lee\", \"Perez\", \"Thompson\", \"White\", \"Harris\", \"Sanchez\", \"Clark\",\n \"Ramirez\", \"Lewis\", \"Robinson\", \"Walker\", \"Young\", \"Allen\", \"King\",\n \"Wright\", \"Scott\", \"Torres\", \"Nguyen\", \"Hill\", \"Flores\", \"Green\",\n \"Adams\", \"Nelson\", \"Baker\", \"Hall\", \"Rivera\", \"Campbell\", \"Mitchell\",\n ],\n};\n","import {\n ssnDefinition,\n mrnDefinition,\n npiDefinition,\n} from \"@/core/generators/identifiers.js\";\nimport { usAddressTemplate } from \"./addresses.js\";\nimport { usNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const usLocale: LocaleDefinition = {\n code: \"us\",\n name: \"United States\",\n patientIdentifiers: [ssnDefinition, mrnDefinition],\n practitionerIdentifiers: [npiDefinition],\n organizationIdentifiers: [npiDefinition],\n address: usAddressTemplate,\n names: usNamePool,\n};\n","import type { AddressTemplate, RandomFn } from \"@/core/types.js\";\nimport { pickRandom, randomInt } from \"@/core/generators/rng.js\";\n\n// Valid postcode area letters (not all 26 are used as area prefixes)\nconst POSTCODE_AREA_LETTERS = [...\"ABCDEFGHIJKLMNOPRSTUVWXY\"];\nconst POSTCODE_INWARD_LETTERS = [...\"ABDEFGHJLNPQRSTUVWXYZ\"];\n\nexport const ukAddressTemplate: AddressTemplate = {\n streets: [\n \"High Street\", \"Church Lane\", \"Mill Road\", \"Station Road\", \"Park Avenue\",\n \"Victoria Road\", \"Albert Street\", \"George Street\", \"King Street\", \"Queen Street\",\n \"Market Place\", \"Bridge Street\", \"School Lane\", \"Manor Road\", \"Vicarage Lane\",\n \"The Green\", \"Chestnut Avenue\", \"Elm Close\", \"Beech Road\", \"Ash Grove\",\n \"Hollybrook Drive\", \"Primrose Hill\", \"Meadow Way\", \"Oakfield Road\",\n ],\n cities: [\n { name: \"London\", district: \"Greater London\" },\n { name: \"Manchester\", district: \"Greater Manchester\" },\n { name: \"Birmingham\", district: \"West Midlands\" },\n { name: \"Leeds\", district: \"West Yorkshire\" },\n { name: \"Glasgow\", district: \"City of Glasgow\" },\n { name: \"Edinburgh\", district: \"City of Edinburgh\" },\n { name: \"Bristol\", district: \"City of Bristol\" },\n { name: \"Leicester\", district: \"Leicestershire\" },\n { name: \"Coventry\", district: \"West Midlands\" },\n { name: \"Bradford\", district: \"West Yorkshire\" },\n { name: \"Cardiff\", district: \"Cardiff\" },\n { name: \"Nottingham\", district: \"Nottinghamshire\" },\n ],\n generatePostalCode(rng: RandomFn, _state?: string): string {\n // Generate a structurally valid UK postcode: AA9 9AA format\n const area1 = pickRandom(POSTCODE_AREA_LETTERS, rng);\n const area2 = pickRandom(POSTCODE_AREA_LETTERS, rng);\n const district = randomInt(1, 99, rng);\n const sector = randomInt(0, 9, rng);\n const unit1 = pickRandom(POSTCODE_INWARD_LETTERS, rng);\n const unit2 = pickRandom(POSTCODE_INWARD_LETTERS, rng);\n return `${area1}${area2}${district} ${sector}${unit1}${unit2}`;\n },\n country: \"GB\",\n};\n","import type { NamePool } from \"@/core/types.js\";\n\nexport const ukNamePool: NamePool = {\n given: {\n male: [\n \"Oliver\", \"George\", \"Harry\", \"Jack\", \"Jacob\", \"Noah\", \"Charlie\",\n \"Muhammad\", \"Thomas\", \"Oscar\", \"William\", \"James\", \"Henry\", \"Alfie\",\n \"Joshua\", \"Freddie\", \"Archie\", \"Ethan\", \"Isaac\", \"Alexander\",\n \"Edward\", \"Arthur\", \"Sebastian\", \"Daniel\", \"Samuel\", \"Leo\",\n \"Adam\", \"Benjamin\", \"Luca\", \"Elijah\", \"Harrison\", \"Mason\",\n ],\n female: [\n \"Olivia\", \"Amelia\", \"Isla\", \"Ava\", \"Emily\", \"Isabella\", \"Mia\",\n \"Poppy\", \"Ella\", \"Lily\", \"Sophia\", \"Evie\", \"Grace\", \"Freya\",\n \"Charlotte\", \"Emma\", \"Sophie\", \"Alice\", \"Ruby\", \"Florence\",\n \"Evelyn\", \"Daisy\", \"Millie\", \"Phoebe\", \"Harriet\", \"Imogen\",\n \"Ellie\", \"Jasmine\", \"Abigail\", \"Matilda\", \"Rosie\", \"Chloe\",\n ],\n },\n family: [\n \"Smith\", \"Jones\", \"Williams\", \"Taylor\", \"Brown\", \"Davies\", \"Evans\",\n \"Wilson\", \"Thomas\", \"Roberts\", \"Johnson\", \"Lewis\", \"Walker\", \"Robinson\",\n \"Wood\", \"Thompson\", \"White\", \"Watson\", \"Jackson\", \"Wright\",\n \"Green\", \"Harris\", \"Cooper\", \"King\", \"Lee\", \"Martin\", \"Clarke\",\n \"James\", \"Morgan\", \"Hughes\", \"Edwards\", \"Hill\", \"Moore\", \"Clark\",\n \"Harrison\", \"Scott\", \"Young\", \"Morris\", \"Hall\", \"Ward\", \"Turner\",\n \"Carter\", \"Phillips\", \"Mitchell\", \"Patel\", \"Adams\", \"Campbell\",\n \"Anderson\", \"Allen\", \"Cook\",\n ],\n};\n","import {\n nhsNumberDefinition,\n gmcNumberDefinition,\n gmpNumberDefinition,\n odsCodDefinition,\n} from \"@/core/generators/identifiers.js\";\nimport { ukAddressTemplate } from \"./addresses.js\";\nimport { ukNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const ukLocale: LocaleDefinition = {\n code: \"uk\",\n name: \"United Kingdom\",\n patientIdentifiers: [nhsNumberDefinition],\n practitionerIdentifiers: [gmcNumberDefinition, gmpNumberDefinition],\n organizationIdentifiers: [odsCodDefinition],\n address: ukAddressTemplate,\n names: ukNamePool,\n};\n","import type { AddressTemplate, CityDefinition, RandomFn } from \"@/core/types.js\";\nimport { randomInt } from \"@/core/generators/rng.js\";\n\n// Postcode ranges per state, from research doc\nconst STATE_POSTCODE_RANGES: Record<string, [number, number]> = {\n NSW: [2000, 2999],\n VIC: [3000, 3999],\n QLD: [4000, 4999],\n SA: [5000, 5999],\n WA: [6000, 6999],\n TAS: [7000, 7999],\n ACT: [2600, 2639],\n NT: [800, 999],\n};\n\nconst AU_CITIES: CityDefinition[] = [\n { name: \"Sydney\", state: \"NSW\" },\n { name: \"Melbourne\", state: \"VIC\" },\n { name: \"Brisbane\", state: \"QLD\" },\n { name: \"Perth\", state: \"WA\" },\n { name: \"Adelaide\", state: \"SA\" },\n { name: \"Gold Coast\", state: \"QLD\" },\n { name: \"Canberra\", state: \"ACT\" },\n { name: \"Hobart\", state: \"TAS\" },\n { name: \"Darwin\", state: \"NT\" },\n { name: \"Newcastle\", state: \"NSW\" },\n { name: \"Geelong\", state: \"VIC\" },\n { name: \"Wollongong\", state: \"NSW\" },\n];\n\nexport const auAddressTemplate: AddressTemplate = {\n streets: [\n \"George Street\", \"Pitt Street\", \"King Street\", \"Elizabeth Street\",\n \"William Street\", \"Market Street\", \"Hunter Street\", \"Macquarie Street\",\n \"Collins Street\", \"Bourke Street\", \"Swanston Street\", \"Flinders Street\",\n \"Queen Street\", \"Albert Street\", \"Ann Street\", \"Adelaide Street\",\n \"Hay Street\", \"Murray Street\", \"Barrack Street\", \"St Georges Terrace\",\n \"Rundle Mall\", \"Hindley Street\", \"Currie Street\", \"Grenfell Street\",\n ],\n cities: AU_CITIES,\n generatePostalCode(rng: RandomFn, state?: string): string {\n const range = (state !== undefined ? STATE_POSTCODE_RANGES[state] : undefined)\n ?? STATE_POSTCODE_RANGES[\"NSW\"]\n ?? [2000, 2999];\n return randomInt(range[0], range[1], rng).toString().padStart(4, \"0\");\n },\n country: \"AU\",\n};\n","import type { NamePool } from \"@/core/types.js\";\n\nexport const auNamePool: NamePool = {\n given: {\n male: [\n \"Oliver\", \"William\", \"Jack\", \"Noah\", \"Thomas\", \"James\", \"Lucas\",\n \"Henry\", \"Ethan\", \"Mason\", \"Alexander\", \"Charlie\", \"Liam\", \"Lachlan\",\n \"Joshua\", \"Benjamin\", \"Samuel\", \"Cooper\", \"Elijah\", \"Isaac\",\n \"Riley\", \"Hudson\", \"Angus\", \"Flynn\", \"Hamish\", \"Sebastian\",\n \"Harrison\", \"Finn\", \"Archie\", \"Max\", \"Leo\", \"Jake\",\n ],\n female: [\n \"Olivia\", \"Charlotte\", \"Ava\", \"Amelia\", \"Mia\", \"Isla\", \"Grace\",\n \"Sophie\", \"Ella\", \"Emma\", \"Chloe\", \"Isabella\", \"Ruby\", \"Zoe\",\n \"Lily\", \"Emily\", \"Harper\", \"Layla\", \"Aria\", \"Evie\",\n \"Madison\", \"Ellie\", \"Sofia\", \"Scarlett\", \"Sienna\", \"Freya\",\n \"Matilda\", \"Abigail\", \"Hannah\", \"Imogen\", \"Ivy\", \"Aurora\",\n ],\n },\n family: [\n \"Smith\", \"Jones\", \"Williams\", \"Brown\", \"Wilson\", \"Taylor\", \"Johnson\",\n \"White\", \"Martin\", \"Anderson\", \"Thompson\", \"Nguyen\", \"Thomas\", \"Walker\",\n \"Harris\", \"Lee\", \"Ryan\", \"Robinson\", \"Kelly\", \"King\",\n \"Davis\", \"Wright\", \"Evans\", \"Roberts\", \"Green\", \"Hall\", \"Young\",\n \"Clarke\", \"Mitchell\", \"Lewis\", \"Scott\", \"Watson\", \"Morrison\",\n \"O'Brien\", \"Sullivan\", \"Murphy\", \"Walsh\", \"Patel\", \"Singh\", \"Chen\",\n \"Miller\", \"Cooper\", \"Campbell\", \"Stewart\", \"Baker\", \"Turner\",\n \"Hill\", \"Collins\", \"Wood\", \"Parker\",\n ],\n};\n","import {\n ihiDefinition,\n medicareNumberDefinition,\n hpiiDefinition,\n hpioDefinition,\n} from \"@/core/generators/identifiers.js\";\nimport { auAddressTemplate } from \"./addresses.js\";\nimport { auNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const auLocale: LocaleDefinition = {\n code: \"au\",\n name: \"Australia\",\n patientIdentifiers: [ihiDefinition, medicareNumberDefinition],\n practitionerIdentifiers: [hpiiDefinition],\n organizationIdentifiers: [hpioDefinition],\n address: auAddressTemplate,\n names: auNamePool,\n};\n","import type { AddressTemplate, CityDefinition, RandomFn } from \"@/core/types.js\";\nimport { pickRandom, randomInt } from \"@/core/generators/rng.js\";\n\n// Letters D, F, I, O, Q, U are never used in Canadian postal codes\n// W and Z are never used as the first letter\n// Province → first letter mapping\nconst PROVINCE_FSA_LETTER: Record<string, string> = {\n NL: \"A\", NS: \"B\", PE: \"C\", NB: \"E\",\n QC: \"G\", ON: \"M\", MB: \"R\", SK: \"S\",\n AB: \"T\", BC: \"V\", NT: \"X\", YT: \"Y\",\n};\n\n// Valid second-position and alternating letters (no D, F, I, O, Q, U, W, Z per Canada Post rules)\nconst POSTAL_LETTERS = [...\"ABCEGHJKLMNPRSTVY\"];\n\nconst CA_CITIES: CityDefinition[] = [\n { name: \"Toronto\", state: \"ON\" },\n { name: \"Montreal\", state: \"QC\" },\n { name: \"Vancouver\", state: \"BC\" },\n { name: \"Calgary\", state: \"AB\" },\n { name: \"Edmonton\", state: \"AB\" },\n { name: \"Ottawa\", state: \"ON\" },\n { name: \"Winnipeg\", state: \"MB\" },\n { name: \"Quebec City\", state: \"QC\" },\n { name: \"Halifax\", state: \"NS\" },\n { name: \"Saskatoon\", state: \"SK\" },\n { name: \"Regina\", state: \"SK\" },\n { name: \"Victoria\", state: \"BC\" },\n];\n\nexport const caAddressTemplate: AddressTemplate = {\n streets: [\n \"Maple Street\", \"Oak Avenue\", \"Main Street\", \"Centre Street\",\n \"Queen Street\", \"King Street\", \"Wellington Street\", \"Dundas Street\",\n \"Bloor Street\", \"Yonge Street\", \"College Street\", \"Broadview Avenue\",\n \"Rue Saint-Laurent\", \"Rue Sainte-Catherine\", \"Avenue du Parc\",\n \"Boulevard René-Lévesque\", \"Chemin de la Côte-des-Neiges\",\n \"Granville Street\", \"Robson Street\", \"Burrard Street\", \"Jasper Avenue\",\n \"Portage Avenue\", \"Barrington Street\", \"Spring Garden Road\",\n ],\n cities: CA_CITIES,\n generatePostalCode(rng: RandomFn, state?: string): string {\n // A1A 1A1 pattern\n const firstLetter = state !== undefined\n ? (PROVINCE_FSA_LETTER[state] ?? pickRandom(Object.values(PROVINCE_FSA_LETTER), rng))\n : pickRandom(Object.values(PROVINCE_FSA_LETTER), rng);\n const d1 = randomInt(0, 9, rng);\n const l1 = pickRandom(POSTAL_LETTERS, rng);\n const d2 = randomInt(0, 9, rng);\n const l2 = pickRandom(POSTAL_LETTERS, rng);\n const d3 = randomInt(0, 9, rng);\n return `${firstLetter}${d1}${l1} ${d2}${l2}${d3}`;\n },\n country: \"CA\",\n};\n","import type { NamePool } from \"@/core/types.js\";\n\n// Canadian name pool — bilingual (English + French)\nexport const caNamePool: NamePool = {\n given: {\n male: [\n // English names\n \"Liam\", \"Noah\", \"Oliver\", \"William\", \"James\", \"Benjamin\", \"Lucas\",\n \"Henry\", \"Alexander\", \"Mason\", \"Ethan\", \"Daniel\", \"Matthew\", \"Logan\",\n // French-Canadian names\n \"Jean\", \"Pierre\", \"François\", \"Luc\", \"Marc\", \"Maxime\", \"Alexis\",\n \"Simon\", \"Mathieu\", \"Antoine\", \"Gabriel\", \"Samuel\", \"Félix\", \"Julien\",\n \"Etienne\", \"Philippe\", \"Nicolas\", \"Thomas\", \"David\", \"Charles\",\n ],\n female: [\n // English names\n \"Olivia\", \"Emma\", \"Charlotte\", \"Amelia\", \"Ava\", \"Sophia\", \"Isabella\",\n \"Mia\", \"Evelyn\", \"Harper\", \"Luna\", \"Camila\", \"Gianna\", \"Elizabeth\",\n // French-Canadian names\n \"Marie\", \"Sophie\", \"Chloé\", \"Emma\", \"Léa\", \"Jade\", \"Laura\",\n \"Sarah\", \"Camille\", \"Manon\", \"Julie\", \"Isabelle\", \"Amélie\", \"Clara\",\n \"Maëlle\", \"Alice\", \"Lucie\", \"Margot\", \"Audrey\", \"Laurie\",\n ],\n },\n family: [\n // English-Canadian surnames\n \"Smith\", \"Brown\", \"Tremblay\", \"Martin\", \"Roy\", \"Wilson\", \"Macdonald\",\n \"Campbell\", \"Anderson\", \"Scott\", \"Jones\", \"Taylor\", \"Thompson\", \"White\",\n \"Moore\", \"Jackson\", \"Harris\", \"Clark\", \"Lewis\", \"Robinson\",\n // French-Canadian surnames\n \"Gagnon\", \"Bouchard\", \"Côté\", \"Bélanger\", \"Gauthier\", \"Morin\",\n \"Lavoie\", \"Fortin\", \"Gagné\", \"Ouellet\", \"Pelletier\", \"Bergeron\",\n \"Leblanc\", \"Girard\", \"Savard\", \"Villeneuve\", \"Caron\", \"Beaulieu\",\n \"Thibault\", \"Dubois\", \"Poirier\", \"Lacroix\", \"Auger\", \"Denis\",\n \"Lefebvre\", \"Charbonneau\", \"Lapierre\", \"Bolduc\",\n ],\n};\n","import { ontarioHcnDefinition, cpsoPractitionerDefinition } from \"@/core/generators/identifiers.js\";\nimport { caAddressTemplate } from \"./addresses.js\";\nimport { caNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const caLocale: LocaleDefinition = {\n code: \"ca\",\n name: \"Canada\",\n patientIdentifiers: [ontarioHcnDefinition],\n practitionerIdentifiers: [cpsoPractitionerDefinition],\n organizationIdentifiers: [],\n address: caAddressTemplate,\n names: caNamePool,\n};\n","import type { AddressTemplate, RandomFn } from \"@/core/types.js\";\nimport { pickRandom, randomInt } from \"@/core/generators/rng.js\";\n\n// PLZ ranges roughly map: 0xxxx=East, 1xxxx=Berlin/Brandenburg, 2xxxx=North, etc.\nconst STATE_PLZ_PREFIXES: Record<string, number[]> = {\n \"Berlin\": [10, 11, 12, 13, 14],\n \"Bayern\": [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97],\n \"Nordrhein-Westfalen\": [40, 41, 42, 44, 45, 46, 47, 48, 50, 51, 52, 53],\n \"Baden-Württemberg\": [68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79],\n \"Hamburg\": [20, 21, 22],\n \"Sachsen\": [1, 2, 4],\n};\n\nconst DE_STREET_SUFFIXES = [\n \"strasse\", \"weg\", \"platz\", \"allee\", \"ring\", \"gasse\", \"damm\", \"ufer\",\n];\n\nconst DE_STREET_ROOTS = [\n \"Friedrich\", \"Haupt\", \"Bahnhof\", \"Garten\", \"Schloss\", \"Schul\",\n \"Kirch\", \"Markt\", \"Wald\", \"Berg\", \"See\", \"Wiesen\", \"Linden\",\n \"Kaiser\", \"König\", \"Bismarck\", \"Goethe\", \"Schiller\", \"Hegel\",\n \"Humboldt\", \"Kant\", \"Heine\", \"Brahms\",\n];\n\nexport const deAddressTemplate: AddressTemplate = {\n streets: DE_STREET_ROOTS.flatMap((root) =>\n DE_STREET_SUFFIXES.slice(0, 1).map((suffix) => `${root}${suffix}`),\n ).concat([\n \"Friedrichstrasse\", \"Hauptstrasse\", \"Bahnhofstrasse\", \"Gartenweg\",\n \"Schlossallee\", \"Schulstrasse\", \"Kirchgasse\", \"Marktplatz\",\n \"Waldweg\", \"Bergstrasse\", \"Seestrasse\", \"Wiesenweg\", \"Lindenallee\",\n ]),\n cities: [\n { name: \"Berlin\", state: \"Berlin\" },\n { name: \"Hamburg\", state: \"Hamburg\" },\n { name: \"München\", state: \"Bayern\" },\n { name: \"Köln\", state: \"Nordrhein-Westfalen\" },\n { name: \"Frankfurt am Main\", state: \"Hessen\" },\n { name: \"Stuttgart\", state: \"Baden-Württemberg\" },\n { name: \"Düsseldorf\", state: \"Nordrhein-Westfalen\" },\n { name: \"Leipzig\", state: \"Sachsen\" },\n { name: \"Dortmund\", state: \"Nordrhein-Westfalen\" },\n { name: \"Essen\", state: \"Nordrhein-Westfalen\" },\n { name: \"Dresden\", state: \"Sachsen\" },\n { name: \"Bremen\", state: \"Bremen\" },\n ],\n generatePostalCode(rng: RandomFn, state?: string): string {\n const prefixes = (state !== undefined ? STATE_PLZ_PREFIXES[state] : undefined)\n ?? [randomInt(1, 99, rng)];\n const prefix = pickRandom(prefixes, rng);\n const suffix = randomInt(0, 999, rng);\n return `${prefix.toString().padStart(2, \"0\")}${suffix.toString().padStart(3, \"0\")}`;\n },\n // German address format: \"{street} {number}\" (number comes after street name)\n formatLine: (number: number, street: string): string => `${street} ${number}`,\n country: \"DE\",\n};\n","import type { NamePool } from \"@/core/types.js\";\n\nexport const deNamePool: NamePool = {\n given: {\n male: [\n \"Hans\", \"Klaus\", \"Dieter\", \"Werner\", \"Peter\", \"Michael\", \"Thomas\",\n \"Andreas\", \"Stefan\", \"Markus\", \"Christian\", \"Daniel\", \"Martin\",\n \"Frank\", \"Juergen\", \"Uwe\", \"Bernd\", \"Holger\", \"Rainer\", \"Guenter\",\n \"Wolfgang\", \"Matthias\", \"Alexander\", \"Tobias\", \"Sebastian\",\n \"Florian\", \"Jan\", \"Lukas\", \"Felix\", \"David\", \"Max\", \"Tim\",\n \"Nico\", \"Leon\", \"Jonas\",\n ],\n female: [\n \"Petra\", \"Sabine\", \"Claudia\", \"Karin\", \"Susanne\", \"Monika\", \"Helga\",\n \"Ingrid\", \"Ursula\", \"Renate\", \"Elisabeth\", \"Gisela\", \"Brigitte\",\n \"Margit\", \"Christina\", \"Andrea\", \"Nicole\", \"Sandra\", \"Stefanie\",\n \"Julia\", \"Lisa\", \"Laura\", \"Anna\", \"Sarah\", \"Katharina\",\n \"Lena\", \"Hannah\", \"Maria\", \"Sophie\", \"Emma\", \"Mia\", \"Lea\",\n \"Luisa\", \"Johanna\", \"Franziska\",\n ],\n },\n family: [\n \"Mueller\", \"Schmidt\", \"Schneider\", \"Fischer\", \"Weber\", \"Meyer\",\n \"Wagner\", \"Becker\", \"Schulz\", \"Hoffmann\", \"Schafer\", \"Koch\",\n \"Bauer\", \"Richter\", \"Klein\", \"Wolf\", \"Schroeder\", \"Neumann\",\n \"Schwarz\", \"Zimmermann\", \"Braun\", \"Krueger\", \"Hartmann\", \"Lange\",\n \"Werner\", \"Schmitz\", \"Krause\", \"Meier\", \"Lehmann\", \"Schmid\",\n \"Schulze\", \"Maier\", \"Koehler\", \"Herrmann\", \"Koenig\", \"Walter\",\n \"Mayer\", \"Huber\", \"Kaiser\", \"Fuchs\", \"Peters\", \"Lang\",\n \"Scholz\", \"Moeller\", \"Weiss\", \"Jung\", \"Hahn\", \"Schubert\",\n ],\n};\n","import {\n kvidDefinition,\n lanrDefinition,\n bsnrDefinition,\n iknrDefinition,\n} from \"@/core/generators/identifiers.js\";\nimport { deAddressTemplate } from \"./addresses.js\";\nimport { deNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const deLocale: LocaleDefinition = {\n code: \"de\",\n name: \"Germany\",\n patientIdentifiers: [kvidDefinition],\n practitionerIdentifiers: [lanrDefinition],\n organizationIdentifiers: [bsnrDefinition, iknrDefinition],\n address: deAddressTemplate,\n names: deNamePool,\n};\n","import type { AddressTemplate, RandomFn } from \"@/core/types.js\";\nimport { randomInt } from \"@/core/generators/rng.js\";\n\nconst FR_STREET_TYPES = [\n \"Rue\", \"Avenue\", \"Boulevard\", \"Place\", \"Impasse\", \"Allée\", \"Chemin\", \"Route\",\n];\n\nconst FR_STREET_NAMES = [\n \"de la Paix\", \"du Commerce\", \"Victor Hugo\", \"Jean Jaurès\", \"de la République\",\n \"des Fleurs\", \"du Moulin\", \"de l'Église\", \"du Château\", \"des Lilas\",\n \"Gambetta\", \"Pasteur\", \"Foch\", \"Clemenceau\", \"de Gaulle\",\n \"de la Liberté\", \"du Général Leclerc\", \"de la Forêt\", \"de l'Abbaye\",\n];\n\nexport const frAddressTemplate: AddressTemplate = {\n streets: FR_STREET_TYPES.flatMap((type) =>\n FR_STREET_NAMES.slice(0, 3).map((name) => `${type} ${name}`),\n ),\n cities: [\n { name: \"Paris\" },\n { name: \"Marseille\" },\n { name: \"Lyon\" },\n { name: \"Toulouse\" },\n { name: \"Nice\" },\n { name: \"Nantes\" },\n { name: \"Strasbourg\" },\n { name: \"Montpellier\" },\n { name: \"Bordeaux\" },\n { name: \"Lille\" },\n { name: \"Rennes\" },\n { name: \"Reims\" },\n ],\n generatePostalCode(rng: RandomFn, _state?: string): string {\n // 5-digit code postal; first 2 digits = department (01-95, skip 20)\n const dept = randomInt(1, 95, rng);\n const suffix = randomInt(0, 999, rng);\n return `${dept.toString().padStart(2, \"0\")}${suffix.toString().padStart(3, \"0\")}`;\n },\n // French address format: \"{number} {type} {name}\" — number before street type+name\n // The streets array already includes the type+name (e.g., \"Rue de la Paix\"),\n // so the default \"{number} {street}\" format works correctly.\n country: \"FR\",\n};\n","import type { NamePool } from \"@/core/types.js\";\n\nexport const frNamePool: NamePool = {\n given: {\n male: [\n \"Jean\", \"Pierre\", \"Michel\", \"François\", \"André\", \"René\", \"Jacques\",\n \"Alain\", \"Bernard\", \"Philippe\", \"Christian\", \"Patrick\", \"Gilles\",\n \"Nicolas\", \"Thomas\", \"Julien\", \"Alexandre\", \"Mathieu\", \"Antoine\",\n \"Maxime\", \"Hugo\", \"Théo\", \"Raphaël\", \"Gabriel\", \"Lucas\",\n \"Louis\", \"Arthur\", \"Nathan\", \"Tom\", \"Ethan\", \"Nolan\", \"Baptiste\",\n \"Romain\", \"Clément\", \"Samuel\",\n ],\n female: [\n \"Marie\", \"Martine\", \"Françoise\", \"Hélène\", \"Sophie\", \"Isabelle\",\n \"Catherine\", \"Sylvie\", \"Brigitte\", \"Nicole\", \"Christine\", \"Michèle\",\n \"Nathalie\", \"Sandrine\", \"Valérie\", \"Céline\", \"Aurélie\", \"Stéphanie\",\n \"Laura\", \"Camille\", \"Sarah\", \"Emma\", \"Léa\", \"Chloé\", \"Manon\",\n \"Inès\", \"Juliette\", \"Jade\", \"Clara\", \"Lucie\", \"Anaïs\", \"Charlotte\",\n \"Mathilde\", \"Pauline\", \"Alice\",\n ],\n },\n family: [\n \"Martin\", \"Bernard\", \"Thomas\", \"Petit\", \"Robert\", \"Richard\", \"Durand\",\n \"Dubois\", \"Moreau\", \"Laurent\", \"Simon\", \"Michel\", \"Lefebvre\", \"Leroy\",\n \"Roux\", \"David\", \"Bertrand\", \"Morel\", \"Fournier\", \"Girard\",\n \"Bonnet\", \"Dupont\", \"Lambert\", \"Fontaine\", \"Rousseau\", \"Vincent\",\n \"Muller\", \"Lefevre\", \"Faure\", \"Andre\", \"Mercier\", \"Blanc\",\n \"Guerin\", \"Boyer\", \"Garnier\", \"Chevalier\", \"Francois\", \"Legrand\",\n \"Gauthier\", \"Garcia\", \"Perrin\", \"Robin\", \"Clement\", \"Morin\",\n \"Nicolas\", \"Henry\", \"Roussel\", \"Mathieu\", \"Gautier\", \"Masson\",\n ],\n};\n","import {\n nirDefinition,\n rppsDefinition,\n finessDefinition,\n} from \"@/core/generators/identifiers.js\";\nimport { frAddressTemplate } from \"./addresses.js\";\nimport { frNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const frLocale: LocaleDefinition = {\n code: \"fr\",\n name: \"France\",\n patientIdentifiers: [nirDefinition],\n practitionerIdentifiers: [rppsDefinition],\n organizationIdentifiers: [finessDefinition],\n address: frAddressTemplate,\n names: frNamePool,\n};\n","import type { AddressTemplate, RandomFn } from \"@/core/types.js\";\nimport { pickRandom, randomInt } from \"@/core/generators/rng.js\";\n\n// SA, SD, SS are not used as postcode letter pairs\nconst INVALID_NL_PAIRS = new Set([\"SA\", \"SD\", \"SS\"]);\n\nconst NL_LETTERS = [...\"ABCDEFGHJKLMNPRSTUVWXYZ\"]; // excludes I, O, Q, U\n\nfunction generateNlPostalCode(rng: RandomFn): string {\n const digits = randomInt(1000, 9999, rng);\n // Pick two letters, avoiding SA/SD/SS combinations\n for (;;) {\n const l1 = pickRandom(NL_LETTERS, rng);\n const l2 = pickRandom(NL_LETTERS, rng);\n const pair = l1 + l2;\n if (!INVALID_NL_PAIRS.has(pair)) {\n return `${digits} ${pair}`;\n }\n }\n}\n\nexport const nlAddressTemplate: AddressTemplate = {\n streets: [\n \"Keizersgracht\", \"Prinsengracht\", \"Herengracht\", \"Singel\",\n \"Damrak\", \"Rokin\", \"Kalverstraat\", \"Leidsestraat\",\n \"Vondelstraat\", \"Overtoom\", \"Haarlemmerdijk\", \"Jordaan\",\n \"Binnenhof\", \"Lange Voorhout\", \"Grote Markt\", \"Hofweg\",\n \"Binnenweg\", \"Blaak\", \"Coolsingel\", \"Westersingel\",\n \"Stationsplein\", \"Catharijnesingel\", \"Oudegracht\", \"Vredenburg\",\n ],\n cities: [\n { name: \"Amsterdam\", state: \"Noord-Holland\" },\n { name: \"Rotterdam\", state: \"Zuid-Holland\" },\n { name: \"Den Haag\", state: \"Zuid-Holland\" },\n { name: \"Utrecht\", state: \"Utrecht\" },\n { name: \"Eindhoven\", state: \"Noord-Brabant\" },\n { name: \"Groningen\", state: \"Groningen\" },\n { name: \"Tilburg\", state: \"Noord-Brabant\" },\n { name: \"Almere\", state: \"Flevoland\" },\n { name: \"Breda\", state: \"Noord-Brabant\" },\n { name: \"Nijmegen\", state: \"Gelderland\" },\n { name: \"Arnhem\", state: \"Gelderland\" },\n { name: \"Haarlem\", state: \"Noord-Holland\" },\n ],\n generatePostalCode(rng: RandomFn, _state?: string): string {\n return generateNlPostalCode(rng);\n },\n // Dutch: \"{street} {number}\" order\n formatLine: (number: number, street: string): string => `${street} ${number}`,\n country: \"NL\",\n};\n","import type { NamePool } from \"@/core/types.js\";\n\nexport const nlNamePool: NamePool = {\n given: {\n male: [\n \"Jan\", \"Pieter\", \"Hendrik\", \"Johannes\", \"Cornelis\", \"Willem\", \"Dirk\",\n \"Gerard\", \"Theodoor\", \"Adriaan\", \"Daan\", \"Sander\", \"Lars\", \"Tim\",\n \"Bas\", \"Robin\", \"Joris\", \"Thijs\", \"Bram\", \"Niels\", \"Wouter\",\n \"Jeroen\", \"Maarten\", \"Ruben\", \"Thomas\", \"Stefan\", \"Marc\",\n \"Luca\", \"Noah\", \"Finn\", \"Stef\", \"Luuk\", \"Milan\", \"Roel\",\n ],\n female: [\n \"Maria\", \"Anna\", \"Johanna\", \"Cornelia\", \"Wilhelmina\", \"Petronella\",\n \"Emma\", \"Sophia\", \"Laura\", \"Nathalie\", \"Linda\", \"Sandra\", \"Anita\",\n \"Monique\", \"Nicole\", \"Anouk\", \"Femke\", \"Lotte\", \"Iris\", \"Fleur\",\n \"Naomi\", \"Merel\", \"Lisanne\", \"Roos\", \"Lisa\", \"Julia\", \"Sanne\",\n \"Nora\", \"Sara\", \"Mila\", \"Zoë\", \"Manon\", \"Lynn\", \"Tessa\",\n ],\n },\n family: [\n \"de Jong\", \"Jansen\", \"de Vries\", \"van den Berg\", \"van Dijk\",\n \"Bakker\", \"Janssen\", \"Visser\", \"Smit\", \"Meijer\",\n \"de Boer\", \"Mulder\", \"de Groot\", \"Bos\", \"Vos\",\n \"Peters\", \"Hendriks\", \"van Leeuwen\", \"Dekker\", \"Brouwer\",\n \"de Wit\", \"Dijkstra\", \"Smits\", \"de Graaf\", \"van der Berg\",\n \"van der Meer\", \"van der Linden\", \"Kok\", \"Jacobs\", \"de Haan\",\n \"Peeters\", \"Linden\", \"van den Bosch\", \"Groen\", \"Willems\",\n \"Schouten\", \"Prins\", \"Vermeer\", \"van Beek\", \"Lammers\",\n \"Kuiper\", \"Postma\", \"Huisman\", \"Jonker\", \"Bosman\",\n \"Nijs\", \"van der Heijden\", \"Broer\",\n ],\n // Dutch surname prefixes (tussenvoegsel)\n prefixes: [\"van\", \"de\", \"van de\", \"van der\", \"van den\", \"den\", \"ter\"],\n};\n","import {\n bsnDefinition,\n uziNumberDefinition,\n agbCodeDefinition,\n} from \"@/core/generators/identifiers.js\";\nimport { nlAddressTemplate } from \"./addresses.js\";\nimport { nlNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const nlLocale: LocaleDefinition = {\n code: \"nl\",\n name: \"Netherlands\",\n patientIdentifiers: [bsnDefinition],\n practitionerIdentifiers: [uziNumberDefinition],\n organizationIdentifiers: [agbCodeDefinition],\n address: nlAddressTemplate,\n names: nlNamePool,\n};\n","import type { AddressTemplate, CityDefinition, RandomFn } from \"@/core/types.js\";\nimport { pickRandom, randomInt } from \"@/core/generators/rng.js\";\n\n// PIN code first digit → region; use plausible ranges per state\nconst STATE_PIN_RANGES: Record<string, [number, number]> = {\n \"Delhi\": [110001, 110096],\n \"Maharashtra\": [400001, 445001],\n \"Karnataka\": [560001, 591350],\n \"Tamil Nadu\": [600001, 643253],\n \"Telangana\": [500001, 509408],\n \"West Bengal\": [700001, 743513],\n \"Uttar Pradesh\": [201001, 285001],\n \"Rajasthan\": [301001, 345031],\n \"Gujarat\": [360001, 396450],\n \"Kerala\": [670001, 695615],\n};\n\nconst IN_CITIES: CityDefinition[] = [\n { name: \"Mumbai\", state: \"Maharashtra\", district: \"Mumbai\" },\n { name: \"Delhi\", state: \"Delhi\", district: \"New Delhi\" },\n { name: \"Bengaluru\", state: \"Karnataka\", district: \"Bangalore Urban\" },\n { name: \"Chennai\", state: \"Tamil Nadu\", district: \"Chennai\" },\n { name: \"Hyderabad\", state: \"Telangana\", district: \"Hyderabad\" },\n { name: \"Kolkata\", state: \"West Bengal\", district: \"Kolkata\" },\n { name: \"Pune\", state: \"Maharashtra\", district: \"Pune\" },\n { name: \"Ahmedabad\", state: \"Gujarat\", district: \"Ahmedabad\" },\n { name: \"Jaipur\", state: \"Rajasthan\", district: \"Jaipur\" },\n { name: \"Lucknow\", state: \"Uttar Pradesh\", district: \"Lucknow\" },\n { name: \"Thiruvananthapuram\", state: \"Kerala\", district: \"Thiruvananthapuram\" },\n { name: \"Kochi\", state: \"Kerala\", district: \"Ernakulam\" },\n];\n\nexport const inAddressTemplate: AddressTemplate = {\n streets: [\n \"MG Road\", \"Brigade Road\", \"Residency Road\", \"Church Street\",\n \"Linking Road\", \"Hill Road\", \"Bandra West\", \"Juhu Scheme\",\n \"Anna Salai\", \"Nungambakkam High Road\", \"Pondy Bazaar\",\n \"Rashbehari Avenue\", \"Park Street\", \"Elgin Road\", \"Salt Lake\",\n \"Mahatma Gandhi Road\", \"Nehru Street\", \"Gandhi Nagar\",\n \"Rajaji Salai\", \"NSC Bose Road\", \"Kamarajar Salai\",\n \"Indira Nagar\", \"Koramangala\", \"Jayanagar\", \"Malleshwaram\",\n ],\n cities: IN_CITIES,\n generatePostalCode(rng: RandomFn, state?: string): string {\n const range = (state !== undefined ? STATE_PIN_RANGES[state] : undefined)\n ?? [500001, 500100];\n return randomInt(range[0], range[1], rng).toString();\n },\n country: \"IN\",\n};\n\n/** Indian addresses often include landmarks; generate optional second line. */\nexport function generateInAddressLine2(rng: RandomFn): string | undefined {\n const landmarks = [\n \"Near City Mall\", \"Opposite Bus Stand\", \"Behind Railway Station\",\n \"Next to Post Office\", \"Near Government Hospital\",\n ];\n // 40% chance of including a landmark\n return rng() < 0.4 ? pickRandom(landmarks, rng) : undefined;\n}\n","import type { NamePool } from \"@/core/types.js\";\n\n// Indian names from major language groups: Hindi, Tamil, Telugu, Bengali, Marathi, Kannada, Malayalam\nexport const inNamePool: NamePool = {\n given: {\n male: [\n // Hindi/North Indian\n \"Rahul\", \"Amit\", \"Vijay\", \"Suresh\", \"Ramesh\", \"Rajesh\", \"Arun\",\n \"Manoj\", \"Sanjay\", \"Deepak\", \"Rakesh\", \"Ajay\", \"Ankit\", \"Ravi\",\n // South Indian\n \"Karthik\", \"Arjun\", \"Venkatesh\", \"Subramaniam\", \"Balaji\", \"Rajan\",\n \"Pradeep\", \"Srinivas\", \"Mohan\", \"Ravi\", \"Ganesh\", \"Shankar\",\n // Bengali/East Indian\n \"Souvik\", \"Subhash\", \"Debashis\", \"Arnab\", \"Sougata\",\n // Pan-Indian\n \"Rohan\", \"Nikhil\", \"Varun\", \"Akash\", \"Vivek\", \"Abhishek\",\n \"Manish\", \"Ashish\", \"Gaurav\", \"Harish\",\n ],\n female: [\n // Hindi/North Indian\n \"Priya\", \"Sunita\", \"Anita\", \"Kavita\", \"Rekha\", \"Geeta\", \"Meena\",\n \"Pooja\", \"Neha\", \"Shweta\", \"Aarti\", \"Anjali\", \"Divya\", \"Nisha\",\n // South Indian\n \"Lakshmi\", \"Meenakshi\", \"Padmini\", \"Gayathri\", \"Kavitha\", \"Srividya\",\n \"Annapurna\", \"Savitha\", \"Revathi\", \"Nalini\", \"Radha\",\n // Bengali/East Indian\n \"Madhuri\", \"Suparna\", \"Mousumi\", \"Barnali\",\n // Pan-Indian\n \"Shreya\", \"Preeti\", \"Swati\", \"Ritu\", \"Isha\", \"Tanvi\",\n \"Pallavi\", \"Sonal\", \"Megha\", \"Aditi\",\n ],\n },\n family: [\n \"Sharma\", \"Patel\", \"Singh\", \"Kumar\", \"Reddy\", \"Nair\", \"Iyer\",\n \"Das\", \"Gupta\", \"Joshi\", \"Mishra\", \"Verma\", \"Mehta\", \"Shah\",\n \"Bose\", \"Chatterjee\", \"Mukherjee\", \"Banerjee\", \"Ghosh\", \"Sen\",\n \"Rao\", \"Naidu\", \"Krishnamurthy\", \"Pillai\", \"Menon\", \"Varma\",\n \"Chowdhury\", \"Dey\", \"Roy\", \"Mandal\", \"Biswas\", \"Saha\",\n \"Kulkarni\", \"Desai\", \"Jain\", \"Agarwal\", \"Srivastava\", \"Tiwari\",\n \"Pandey\", \"Yadav\", \"Chauhan\", \"Thakur\", \"Malhotra\", \"Kapoor\",\n \"Bhat\", \"Kaur\", \"Shetty\", \"Hegde\",\n ],\n};\n","import { aadhaarDefinition, abhaNumberDefinition, nmcRegistrationDefinition } from \"@/core/generators/identifiers.js\";\nimport { inAddressTemplate } from \"./addresses.js\";\nimport { inNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const inLocale: LocaleDefinition = {\n code: \"in\",\n name: \"India\",\n patientIdentifiers: [aadhaarDefinition, abhaNumberDefinition],\n practitionerIdentifiers: [nmcRegistrationDefinition],\n organizationIdentifiers: [],\n address: inAddressTemplate,\n names: inNamePool,\n};\n","import type { AddressTemplate, CityDefinition, RandomFn } from \"@/core/types.js\";\nimport { randomInt } from \"@/core/generators/rng.js\";\n\nconst JP_CITIES: CityDefinition[] = [\n { name: \"Tokyo\", state: \"Tokyo\", district: \"Shinjuku\" },\n { name: \"Osaka\", state: \"Osaka\", district: \"Namba\" },\n { name: \"Kyoto\", state: \"Kyoto\", district: \"Fushimi\" },\n { name: \"Yokohama\", state: \"Kanagawa\", district: \"Naka\" },\n { name: \"Nagoya\", state: \"Aichi\", district: \"Naka\" },\n { name: \"Sapporo\", state: \"Hokkaido\", district: \"Chuo\" },\n { name: \"Kobe\", state: \"Hyogo\", district: \"Chuo\" },\n { name: \"Fukuoka\", state: \"Fukuoka\", district: \"Hakata\" },\n { name: \"Hiroshima\", state: \"Hiroshima\", district: \"Naka\" },\n { name: \"Sendai\", state: \"Miyagi\", district: \"Aoba\" },\n];\n\nconst JP_POSTAL_RANGES: Record<string, [number, number]> = {\n \"Tokyo\": [1000001, 1999999],\n \"Osaka\": [5300001, 5999999],\n \"Kyoto\": [6000001, 6199999],\n \"Kanagawa\": [2100001, 2599999],\n \"Aichi\": [4400001, 4999999],\n \"Hokkaido\": [600001, 999999],\n \"Hyogo\": [6500001, 6799999],\n \"Fukuoka\": [8100001, 8399999],\n \"Hiroshima\": [7300001, 7399999],\n \"Miyagi\": [9800001, 9899999],\n};\n\nexport const jpAddressTemplate: AddressTemplate = {\n streets: [\n \"Shinjuku\", \"Shibuya\", \"Ginza\", \"Roppongi\", \"Akihabara\",\n \"Harajuku\", \"Asakusa\", \"Ueno\", \"Ikebukuro\", \"Shimokitazawa\",\n \"Namba\", \"Dotonbori\", \"Umeda\", \"Shinsaibashi\",\n \"Gion\", \"Arashiyama\", \"Kawaramachi\",\n \"Minatomachi\", \"Kitanagasa\",\n ],\n cities: JP_CITIES,\n generatePostalCode(rng: RandomFn, state?: string): string {\n const range = (state !== undefined ? JP_POSTAL_RANGES[state] : undefined) ?? [1000001, 1999999];\n const n = randomInt(range[0], range[1], rng);\n const s = n.toString().padStart(7, \"0\");\n return s.slice(0, 3) + \"-\" + s.slice(3);\n },\n formatLine(number: number, street: string): string {\n return `${street} ${number}-chome`;\n },\n country: \"JP\",\n};\n","import type { NamePool } from \"@/core/types.js\";\n\nexport const jpNamePool: NamePool = {\n given: {\n male: [\"Hiroshi\",\"Kenji\",\"Takashi\",\"Masaki\",\"Yusuke\",\"Daisuke\",\"Shota\",\"Kazuki\",\"Ryota\",\"Naoki\",\"Taro\",\"Jiro\",\"Akira\",\"Satoshi\",\"Tetsuya\",\"Makoto\",\"Shinji\",\"Koji\",\"Noboru\",\"Hideo\"],\n female: [\"Yuki\",\"Haruka\",\"Sakura\",\"Aoi\",\"Misaki\",\"Rina\",\"Nana\",\"Mika\",\"Yuko\",\"Ayaka\",\"Hanako\",\"Kimiko\",\"Noriko\",\"Keiko\",\"Fumiko\",\"Michiko\",\"Sumiko\",\"Yoshiko\",\"Tomoko\",\"Naoko\"],\n },\n family: [\"Tanaka\",\"Suzuki\",\"Sato\",\"Watanabe\",\"Ito\",\"Nakamura\",\"Kobayashi\",\"Kato\",\"Yamamoto\",\"Hayashi\",\"Inoue\",\"Kimura\",\"Matsumoto\",\"Fujiwara\",\"Ogawa\",\"Nishimura\",\"Mori\",\"Abe\",\"Ikeda\",\"Hashimoto\",\"Yamada\",\"Ishikawa\",\"Maeda\",\"Fujita\",\"Goto\"],\n};\n","import { jpHospitalMrnDefinition, jmpDoctorLicenseDefinition } from \"@/core/generators/identifiers.js\";\nimport { jpAddressTemplate } from \"./addresses.js\";\nimport { jpNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const jpLocale: LocaleDefinition = {\n code: \"jp\",\n name: \"Japan\",\n patientIdentifiers: [jpHospitalMrnDefinition],\n practitionerIdentifiers: [jmpDoctorLicenseDefinition],\n organizationIdentifiers: [],\n address: jpAddressTemplate,\n names: jpNamePool,\n};\n","import type { AddressTemplate, CityDefinition, RandomFn } from \"@/core/types.js\";\nimport { randomInt } from \"@/core/generators/rng.js\";\n\nconst KR_CITIES: CityDefinition[] = [\n { name: \"Seoul\", state: \"Seoul\", district: \"Gangnam-gu\" },\n { name: \"Busan\", state: \"Busan\", district: \"Haeundae-gu\" },\n { name: \"Incheon\", state: \"Incheon\", district: \"Namdong-gu\" },\n { name: \"Daegu\", state: \"Daegu\", district: \"Dalseo-gu\" },\n { name: \"Daejeon\", state: \"Daejeon\", district: \"Yuseong-gu\" },\n { name: \"Gwangju\", state: \"Gwangju\", district: \"Nam-gu\" },\n { name: \"Suwon\", state: \"Gyeonggi\", district: \"Paldal-gu\" },\n { name: \"Changwon\", state: \"Gyeongnam\", district: \"Seongsan-gu\" },\n];\n\nconst KR_POSTAL_RANGES: Record<string, [number, number]> = {\n \"Seoul\": [2000, 9999],\n \"Busan\": [46000, 49999],\n \"Incheon\": [21000, 23999],\n \"Daegu\": [41000, 43999],\n \"Daejeon\": [34000, 35999],\n \"Gwangju\": [61000, 62999],\n \"Gyeonggi\": [10000, 18999],\n \"Gyeongnam\": [51000, 53999],\n};\n\nexport const krAddressTemplate: AddressTemplate = {\n streets: [\n \"Teheran-ro\",\"Gangnam-daero\",\"Sinchon-ro\",\"Hongdae-ro\",\"Itaewon-ro\",\n \"Jongno\",\"Eulji-ro\",\"Sejong-daero\",\"Hangang-ro\",\"Mapo-daero\",\n \"Haeundae-ro\",\"Gwangbok-ro\",\"Nampo-daero\",\n \"Dunsan-daero\",\"Expo-ro\",\n ],\n cities: KR_CITIES,\n generatePostalCode(rng: RandomFn, state?: string): string {\n const range = (state !== undefined ? KR_POSTAL_RANGES[state] : undefined) ?? [2000, 9999];\n return randomInt(range[0], range[1], rng).toString().padStart(5, \"0\");\n },\n country: \"KR\",\n};\n","import type { NamePool } from \"@/core/types.js\";\n\nexport const krNamePool: NamePool = {\n given: {\n male: [\"Minjun\",\"Hyunwoo\",\"Junho\",\"Seungwoo\",\"Jinhyun\",\"Donghyun\",\"Sanghoon\",\"Kyunghoon\",\"Taehyun\",\"Jaehoon\",\"Minseok\",\"Jongho\",\"Seokjin\",\"Byunghun\",\"Yongsu\",\"Hyungjun\",\"Sunghoon\",\"Woobin\",\"Jaeseon\",\"Chanwoo\"],\n female: [\"Jiyeon\",\"Eunji\",\"Soyeon\",\"Hyunji\",\"Minji\",\"Yuna\",\"Soyun\",\"Jiyu\",\"Hyerim\",\"Seoyeon\",\"Dahye\",\"Jisu\",\"Eunha\",\"Sumin\",\"Nayeon\",\"Hayeon\",\"Jiyoung\",\"Sojeong\",\"Haerin\",\"Chaeyeon\"],\n },\n family: [\"Kim\",\"Lee\",\"Park\",\"Choi\",\"Jung\",\"Kang\",\"Cho\",\"Yoon\",\"Jang\",\"Lim\",\"Han\",\"Oh\",\"Shin\",\"Kwon\",\"Hwang\",\"Ahn\",\"Song\",\"Ryu\",\"Hong\",\"Jeon\"],\n};\n","import { krRrnDefinition, mohwDoctorLicenseDefinition } from \"@/core/generators/identifiers.js\";\nimport { krAddressTemplate } from \"./addresses.js\";\nimport { krNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const krLocale: LocaleDefinition = {\n code: \"kr\",\n name: \"South Korea\",\n patientIdentifiers: [krRrnDefinition],\n practitionerIdentifiers: [mohwDoctorLicenseDefinition],\n organizationIdentifiers: [],\n address: krAddressTemplate,\n names: krNamePool,\n};\n","import type { AddressTemplate, CityDefinition, RandomFn } from \"@/core/types.js\";\nimport { randomInt } from \"@/core/generators/rng.js\";\n\nconst SG_CITIES: CityDefinition[] = [\n { name: \"Singapore\", district: \"Central\" },\n { name: \"Singapore\", district: \"Bedok\" },\n { name: \"Singapore\", district: \"Tampines\" },\n { name: \"Singapore\", district: \"Woodlands\" },\n { name: \"Singapore\", district: \"Jurong West\" },\n { name: \"Singapore\", district: \"Ang Mo Kio\" },\n { name: \"Singapore\", district: \"Toa Payoh\" },\n { name: \"Singapore\", district: \"Punggol\" },\n];\n\nexport const sgAddressTemplate: AddressTemplate = {\n streets: [\n \"Orchard Road\",\"Raffles Place\",\"Marina Bay\",\"Buona Vista\",\n \"Jurong East\",\"Clementi Road\",\"Pasir Panjang Road\",\n \"Upper Changi Road\",\"Tampines Avenue\",\"Bishan Street\",\n \"Serangoon Road\",\"Little India\",\"Chinatown Street\",\n \"Tanjong Pagar Road\",\"Neil Road\",\n ],\n cities: SG_CITIES,\n generatePostalCode(rng: RandomFn): string {\n // 6-digit Singapore postal code\n return randomInt(10000, 829999, rng).toString().padStart(6, \"0\");\n },\n country: \"SG\",\n};\n","import type { NamePool } from \"@/core/types.js\";\n\nexport const sgNamePool: NamePool = {\n given: {\n male: [\"Wei\",\"Jun\",\"Kai\",\"Ethan\",\"Aaron\",\"Marcus\",\"Ryan\",\"Dylan\",\"Sean\",\"Joshua\",\"Farhan\",\"Hafiz\",\"Rashid\",\"Arjun\",\"Vijay\",\"Rajan\",\"Kumar\",\"Raj\",\"Samuel\",\"Daniel\"],\n female: [\"Hui\",\"Ling\",\"Xin\",\"Sarah\",\"Rachel\",\"Priya\",\"Siti\",\"Nurul\",\"Aisha\",\"Jasmine\",\"Michelle\",\"Jessica\",\"Chloe\",\"Mei\",\"Yanling\",\"Kavitha\",\"Nisha\",\"Sunita\",\"Grace\",\"Faith\"],\n },\n family: [\"Tan\",\"Lim\",\"Lee\",\"Ng\",\"Wong\",\"Chan\",\"Koh\",\"Teo\",\"Chua\",\"Goh\",\"Ong\",\"Sim\",\"Foo\",\"Yeo\",\"Low\",\"Bte\",\"Bin\",\"Rajah\",\"Kumar\",\"Singh\"],\n};\n","import { sgNricDefinition, smcRegistrationDefinition } from \"@/core/generators/identifiers.js\";\nimport { sgAddressTemplate } from \"./addresses.js\";\nimport { sgNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const sgLocale: LocaleDefinition = {\n code: \"sg\",\n name: \"Singapore\",\n patientIdentifiers: [sgNricDefinition],\n practitionerIdentifiers: [smcRegistrationDefinition],\n organizationIdentifiers: [],\n address: sgAddressTemplate,\n names: sgNamePool,\n};\n","import type { AddressTemplate, CityDefinition, RandomFn } from \"@/core/types.js\";\nimport { randomInt } from \"@/core/generators/rng.js\";\n\nconst BR_CITIES: CityDefinition[] = [\n { name: \"São Paulo\", state: \"SP\", district: \"Jardins\" },\n { name: \"Rio de Janeiro\", state: \"RJ\", district: \"Copacabana\" },\n { name: \"Belo Horizonte\", state: \"MG\", district: \"Savassi\" },\n { name: \"Brasília\", state: \"DF\", district: \"Asa Sul\" },\n { name: \"Salvador\", state: \"BA\", district: \"Barra\" },\n { name: \"Fortaleza\", state: \"CE\", district: \"Meireles\" },\n { name: \"Curitiba\", state: \"PR\", district: \"Batel\" },\n { name: \"Manaus\", state: \"AM\", district: \"Centro\" },\n { name: \"Recife\", state: \"PE\", district: \"Boa Viagem\" },\n { name: \"Porto Alegre\", state: \"RS\", district: \"Moinhos de Vento\" },\n];\n\nconst BR_CEP_RANGES: Record<string, [number, number]> = {\n \"SP\": [1000000, 9999999],\n \"RJ\": [20000000, 28999999],\n \"MG\": [30000000, 39999999],\n \"DF\": [70000000, 73999999],\n \"BA\": [40000000, 48999999],\n \"CE\": [60000000, 63999999],\n \"PR\": [80000000, 87999999],\n \"AM\": [69000000, 69999999],\n \"PE\": [50000000, 56999999],\n \"RS\": [90000000, 99999999],\n};\n\nexport const brAddressTemplate: AddressTemplate = {\n streets: [\n \"Avenida Paulista\",\"Rua Augusta\",\"Rua Oscar Freire\",\"Avenida Brigadeiro Faria Lima\",\n \"Rua das Flores\",\"Avenida Brasil\",\"Rua Direita\",\"Travessa das Palmeiras\",\n \"Avenida Atlântica\",\"Rua Voluntários da Pátria\",\n \"Avenida Afonso Pena\",\"Rua da Bahia\",\n \"Avenida W3 Sul\",\"Avenida das Nações\",\n ],\n cities: BR_CITIES,\n generatePostalCode(rng: RandomFn, state?: string): string {\n const range = (state !== undefined ? BR_CEP_RANGES[state] : undefined) ?? [1000000, 9999999];\n const n = randomInt(range[0], range[1], rng);\n const s = n.toString().padStart(8, \"0\");\n return s.slice(0, 5) + \"-\" + s.slice(5);\n },\n country: \"BR\",\n};\n","import type { NamePool } from \"@/core/types.js\";\nexport const brNamePool: NamePool = {\n given: {\n male: [\"Lucas\",\"Gabriel\",\"Matheus\",\"Pedro\",\"Rafael\",\"Felipe\",\"João\",\"Bruno\",\"Diego\",\"Carlos\",\"Marcelo\",\"Eduardo\",\"Roberto\",\"Fernando\",\"Henrique\",\"André\",\"Alexandre\",\"Ricardo\",\"Rodrigo\",\"Paulo\"],\n female: [\"Ana\",\"Maria\",\"Juliana\",\"Fernanda\",\"Camila\",\"Aline\",\"Amanda\",\"Beatriz\",\"Larissa\",\"Natalia\",\"Patricia\",\"Leticia\",\"Mariana\",\"Vanessa\",\"Carolina\",\"Viviane\",\"Priscila\",\"Cristiane\",\"Renata\",\"Daniela\"],\n },\n family: [\"Silva\",\"Santos\",\"Oliveira\",\"Souza\",\"Lima\",\"Pereira\",\"Ferreira\",\"Costa\",\"Carvalho\",\"Rodrigues\",\"Alves\",\"Nascimento\",\"Martins\",\"Rocha\",\"Araújo\",\"Ribeiro\",\"Monteiro\",\"Cardoso\",\"Gomes\",\"Castro\"],\n};\n","import { brCpfDefinition, crmPractitionerDefinition } from \"@/core/generators/identifiers.js\";\nimport { brAddressTemplate } from \"./addresses.js\";\nimport { brNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const brLocale: LocaleDefinition = {\n code: \"br\",\n name: \"Brazil\",\n patientIdentifiers: [brCpfDefinition],\n practitionerIdentifiers: [crmPractitionerDefinition],\n organizationIdentifiers: [],\n address: brAddressTemplate,\n names: brNamePool,\n};\n","import type { AddressTemplate, CityDefinition, RandomFn } from \"@/core/types.js\";\nimport { randomInt } from \"@/core/generators/rng.js\";\n\nconst MX_CITIES: CityDefinition[] = [\n { name: \"Ciudad de México\", state: \"CDMX\", district: \"Benito Juárez\" },\n { name: \"Guadalajara\", state: \"JAL\", district: \"Zapopan\" },\n { name: \"Monterrey\", state: \"NL\", district: \"San Pedro\" },\n { name: \"Puebla\", state: \"PUE\", district: \"Centro\" },\n { name: \"Tijuana\", state: \"BC\", district: \"Zona Centro\" },\n { name: \"León\", state: \"GTO\", district: \"Centro\" },\n { name: \"Mérida\", state: \"YUC\", district: \"Centro Histórico\" },\n { name: \"Cancún\", state: \"QR\", district: \"Zona Hotelera\" },\n];\n\nconst MX_POSTAL_RANGES: Record<string, [number, number]> = {\n \"CDMX\": [1000, 16999],\n \"JAL\": [44000, 49999],\n \"NL\": [64000, 67999],\n \"PUE\": [72000, 75999],\n \"BC\": [21000, 22999],\n \"GTO\": [36000, 38999],\n \"YUC\": [97000, 97999],\n \"QR\": [77000, 77999],\n};\n\nexport const mxAddressTemplate: AddressTemplate = {\n streets: [\n \"Paseo de la Reforma\",\"Insurgentes Norte\",\"Insurgentes Sur\",\"Avenida Juárez\",\n \"Calzada de los Leones\",\"Boulevard Miguel Hidalgo\",\"Avenida Chapultepec\",\n \"Calle Madero\",\"Avenida Universidad\",\"Calzada del Ejército\",\n \"Avenida Vallarta\",\"Avenida López Mateos\",\n ],\n cities: MX_CITIES,\n generatePostalCode(rng: RandomFn, state?: string): string {\n const range = (state !== undefined ? MX_POSTAL_RANGES[state] : undefined) ?? [1000, 99999];\n return randomInt(range[0], range[1], rng).toString().padStart(5, \"0\");\n },\n country: \"MX\",\n};\n","import type { NamePool } from \"@/core/types.js\";\nexport const mxNamePool: NamePool = {\n given: {\n male: [\"José\",\"Luis\",\"Carlos\",\"Juan\",\"Miguel\",\"Jorge\",\"Roberto\",\"Francisco\",\"Antonio\",\"Alejandro\",\"Héctor\",\"Arturo\",\"Mario\",\"Ricardo\",\"Raúl\",\"Eduardo\",\"Gabriel\",\"Hugo\",\"Fernando\",\"David\"],\n female: [\"María\",\"Ana\",\"Laura\",\"Patricia\",\"Claudia\",\"Sandra\",\"Rosa\",\"Elena\",\"Daniela\",\"Gabriela\",\"Verónica\",\"Alejandra\",\"Guadalupe\",\"Isabel\",\"Silvia\",\"Adriana\",\"Beatriz\",\"Carmen\",\"Alicia\",\"Mónica\"],\n },\n family: [\"García\",\"Martínez\",\"López\",\"González\",\"Hernández\",\"Pérez\",\"Sánchez\",\"Rodríguez\",\"Flores\",\"Torres\",\"Ramírez\",\"Morales\",\"Díaz\",\"Vásquez\",\"Reyes\",\"Jiménez\",\"Gutiérrez\",\"Ortiz\",\"Castillo\",\"Mendoza\"],\n};\n","import { mxCurpDefinition, cedulaProfesionalDefinition } from \"@/core/generators/identifiers.js\";\nimport { mxAddressTemplate } from \"./addresses.js\";\nimport { mxNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const mxLocale: LocaleDefinition = {\n code: \"mx\",\n name: \"Mexico\",\n patientIdentifiers: [mxCurpDefinition],\n practitionerIdentifiers: [cedulaProfesionalDefinition],\n organizationIdentifiers: [],\n address: mxAddressTemplate,\n names: mxNamePool,\n};\n","import type { AddressTemplate, CityDefinition, RandomFn } from \"@/core/types.js\";\nimport { randomInt } from \"@/core/generators/rng.js\";\n\nconst ZA_CITIES: CityDefinition[] = [\n { name: \"Johannesburg\", state: \"Gauteng\", district: \"Sandton\" },\n { name: \"Cape Town\", state: \"Western Cape\", district: \"City Bowl\" },\n { name: \"Durban\", state: \"KwaZulu-Natal\", district: \"Berea\" },\n { name: \"Pretoria\", state: \"Gauteng\", district: \"Arcadia\" },\n { name: \"Port Elizabeth\", state: \"Eastern Cape\", district: \"Newton Park\" },\n { name: \"Bloemfontein\", state: \"Free State\", district: \"Westdene\" },\n { name: \"East London\", state: \"Eastern Cape\", district: \"Beacon Bay\" },\n { name: \"Nelspruit\", state: \"Mpumalanga\", district: \"West Acres\" },\n];\n\nconst ZA_POSTAL_RANGES: Record<string, [number, number]> = {\n \"Gauteng\": [1400, 2199],\n \"Western Cape\": [7400, 8099],\n \"KwaZulu-Natal\": [3200, 4699],\n \"Eastern Cape\": [5000, 6299],\n \"Free State\": [9300, 9999],\n \"Mpumalanga\": [1200, 1399],\n};\n\nexport const zaAddressTemplate: AddressTemplate = {\n streets: [\n \"Nelson Mandela Drive\",\"Jan Smuts Avenue\",\"Oxford Road\",\"Rivonia Road\",\n \"William Nicol Drive\",\"Sandton Drive\",\"Long Street\",\"Adderley Street\",\n \"Loop Street\",\"Bree Street\",\"Florida Road\",\"Marine Parade\",\n \"Church Street\",\"Paul Kruger Street\",\n ],\n cities: ZA_CITIES,\n generatePostalCode(rng: RandomFn, state?: string): string {\n const range = (state !== undefined ? ZA_POSTAL_RANGES[state] : undefined) ?? [1000, 9999];\n return randomInt(range[0], range[1], rng).toString().padStart(4, \"0\");\n },\n country: \"ZA\",\n};\n","import type { NamePool } from \"@/core/types.js\";\nexport const zaNamePool: NamePool = {\n given: {\n male: [\"Sipho\",\"Thabo\",\"Mandla\",\"Bongani\",\"Siyanda\",\"Lethiwe\",\"Sandile\",\"Nhlanhla\",\"Muzi\",\"Musa\",\"Johan\",\"Pieter\",\"Christiaan\",\"Wilhelm\",\"Andries\",\"Michael\",\"David\",\"James\",\"John\",\"Robert\"],\n female: [\"Nomvula\",\"Zanele\",\"Thandi\",\"Lindiwe\",\"Ntombi\",\"Zodwa\",\"Nosipho\",\"Nandi\",\"Phindile\",\"Sithembile\",\"Annelie\",\"Marietjie\",\"Suzette\",\"Elsa\",\"Hanlie\",\"Mary\",\"Sarah\",\"Grace\",\"Faith\",\"Hope\"],\n },\n family: [\"Dlamini\",\"Nkosi\",\"Mthembu\",\"Zulu\",\"Ndlovu\",\"Khumalo\",\"Nxumalo\",\"Mahlangu\",\"Mazibuko\",\"Mkhize\",\"Van der Merwe\",\"Botha\",\"Pretorius\",\"Venter\",\"Du Plessis\",\"Nel\",\"Fourie\",\"Steyn\",\"Coetzee\",\"Naidoo\"],\n};\n","import { zaIdDefinition, hpcsaRegistrationDefinition } from \"@/core/generators/identifiers.js\";\nimport { zaAddressTemplate } from \"./addresses.js\";\nimport { zaNamePool } from \"./names.js\";\nimport type { LocaleDefinition } from \"@/core/types.js\";\n\nexport const zaLocale: LocaleDefinition = {\n code: \"za\",\n name: \"South Africa\",\n patientIdentifiers: [zaIdDefinition],\n practitionerIdentifiers: [hpcsaRegistrationDefinition],\n organizationIdentifiers: [],\n address: zaAddressTemplate,\n names: zaNamePool,\n};\n","import { usLocale } from \"./us/index.js\";\nimport { ukLocale } from \"./uk/index.js\";\nimport { auLocale } from \"./au/index.js\";\nimport { caLocale } from \"./ca/index.js\";\nimport { deLocale } from \"./de/index.js\";\nimport { frLocale } from \"./fr/index.js\";\nimport { nlLocale } from \"./nl/index.js\";\nimport { inLocale } from \"./in/index.js\";\nimport { jpLocale } from \"./jp/index.js\";\nimport { krLocale } from \"./kr/index.js\";\nimport { sgLocale } from \"./sg/index.js\";\nimport { brLocale } from \"./br/index.js\";\nimport { mxLocale } from \"./mx/index.js\";\nimport { zaLocale } from \"./za/index.js\";\nimport type { Locale, LocaleDefinition } from \"@/core/types.js\";\n\nconst LOCALE_MAP: Record<Locale, LocaleDefinition> = {\n us: usLocale,\n uk: ukLocale,\n au: auLocale,\n ca: caLocale,\n de: deLocale,\n fr: frLocale,\n nl: nlLocale,\n in: inLocale,\n jp: jpLocale,\n kr: krLocale,\n sg: sgLocale,\n br: brLocale,\n mx: mxLocale,\n za: zaLocale,\n};\n\nexport function getLocale(code: Locale): LocaleDefinition {\n return LOCALE_MAP[code];\n}\n\nexport function getAllLocales(): LocaleDefinition[] {\n return Object.values(LOCALE_MAP);\n}\n","import type { FhirResource, FhirVersion } from \"@/core/types.js\";\n\n// ---------------------------------------------------------------------------\n// R5 adapter — MedicationStatement → MedicationUsage\n// ---------------------------------------------------------------------------\n\nfunction adaptMedicationStatementToR5(r: FhirResource): FhirResource {\n const medCodeable = r[\"medicationCodeableConcept\"] as Record<string, unknown> | undefined;\n const { medicationCodeableConcept: _dropped, ...rest } = r as Record<string, unknown>;\n return {\n ...rest,\n resourceType: \"MedicationUsage\",\n medication: medCodeable !== undefined ? { concept: medCodeable } : undefined,\n status: \"recorded\",\n } as FhirResource;\n}\n\n// ---------------------------------------------------------------------------\n// R5 adapter — AllergyIntolerance.type: code → CodeableConcept\n// ---------------------------------------------------------------------------\n\nconst ALLERGY_TYPE_SYSTEM = \"http://hl7.org/fhir/allergy-intolerance-type\";\n\nfunction adaptAllergyIntoleranceToR5(r: FhirResource): FhirResource {\n const typeCode = r[\"type\"] as string | undefined;\n const patientRef = r[\"patient\"];\n\n // Rename patient → subject\n const { patient: _dropped, ...withoutPatient } = r as Record<string, unknown>;\n const adapted: Record<string, unknown> = { ...withoutPatient };\n if (patientRef !== undefined) {\n adapted[\"subject\"] = patientRef;\n }\n\n // type: string → CodeableConcept\n if (typeCode !== undefined) {\n const display = typeCode.charAt(0).toUpperCase() + typeCode.slice(1);\n adapted[\"type\"] = {\n coding: [{ system: ALLERGY_TYPE_SYSTEM, code: typeCode, display }],\n };\n }\n\n return adapted as FhirResource;\n}\n\n// ---------------------------------------------------------------------------\n// R5 dispatcher\n// ---------------------------------------------------------------------------\n\nfunction adaptToR5(resource: FhirResource): FhirResource {\n switch (resource.resourceType) {\n case \"MedicationStatement\":\n return adaptMedicationStatementToR5(resource);\n case \"AllergyIntolerance\":\n return adaptAllergyIntoleranceToR5(resource);\n default:\n return resource;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Adapt a resource built against R4 to the target FHIR version.\n * R4 and R4B return the resource unchanged (R4B is structurally identical\n * to R4 for all resources this library generates).\n * R5 applies structural changes: MedicationStatement→MedicationUsage,\n * AllergyIntolerance.type code→CodeableConcept.\n */\nexport function adaptToVersion(resource: FhirResource, version: FhirVersion): FhirResource {\n if (version === \"R5\") return adaptToR5(resource);\n return resource;\n}\n","import type { FhirResource, FhirVersion, Locale, RandomFn } from \"@/core/types.js\";\nimport { createRng, pickRandom, randomInt } from \"@/core/generators/rng.js\";\nimport { generateAddress } from \"@/core/generators/addresses.js\";\nimport { generateName } from \"@/core/generators/names.js\";\nimport { generateUuidV4, deepMerge, generateDate } from \"./utils.js\";\nimport { getLocale } from \"@/locales/index.js\";\nimport { adaptToVersion } from \"./version-adapters.js\";\n\n// ---------------------------------------------------------------------------\n// Gender\n// ---------------------------------------------------------------------------\n\ntype FhirGender = \"male\" | \"female\" | \"other\" | \"unknown\";\n\nconst GENDER_DISTRIBUTION: Array<[FhirGender, number]> = [\n [\"male\", 0.48],\n [\"female\", 0.48],\n [\"other\", 0.03],\n [\"unknown\", 0.01],\n];\n\nfunction generateGender(rng: RandomFn): FhirGender {\n const roll = rng();\n let cumulative = 0;\n for (const [gender, probability] of GENDER_DISTRIBUTION) {\n cumulative += probability;\n if (roll < cumulative) return gender;\n }\n return \"unknown\";\n}\n\n// ---------------------------------------------------------------------------\n// Phone number formats per locale\n// ---------------------------------------------------------------------------\n\ntype PhoneFormatter = (rng: RandomFn) => string;\n\nconst PHONE_FORMATTERS: Record<Locale, PhoneFormatter> = {\n us: (rng) => `(555) ${randomInt(100, 999, rng)}-${randomInt(1000, 9999, rng)}`,\n ca: (rng) => `(555) ${randomInt(100, 999, rng)}-${randomInt(1000, 9999, rng)}`,\n uk: (rng) => `07700 ${randomInt(100000, 999999, rng)}`,\n au: (rng) => `0400 ${randomInt(100, 999, rng)} ${randomInt(100, 999, rng)}`,\n de: (rng) => `030 ${randomInt(10000000, 99999999, rng)}`,\n fr: (rng) => `06 ${randomInt(10, 99, rng)} ${randomInt(10, 99, rng)} ${randomInt(10, 99, rng)} ${randomInt(10, 99, rng)}`,\n nl: (rng) => `06 ${randomInt(10000000, 99999999, rng)}`,\n in: (rng) => `09${randomInt(10, 99, rng)} ${randomInt(1000000, 9999999, rng)}`,\n jp: (rng) => `0${randomInt(3, 9, rng)}-${randomInt(1000, 9999, rng)}-${randomInt(1000, 9999, rng)}`,\n kr: (rng) => `0${randomInt(10, 99, rng)}-${randomInt(1000, 9999, rng)}-${randomInt(1000, 9999, rng)}`,\n sg: (rng) => `${randomInt(6000, 9999, rng)} ${randomInt(1000, 9999, rng)}`,\n br: (rng) => `(${randomInt(11, 99, rng)}) ${randomInt(91000, 99999, rng)}-${randomInt(1000, 9999, rng)}`,\n mx: (rng) => `55 ${randomInt(1000, 9999, rng)} ${randomInt(1000, 9999, rng)}`,\n za: (rng) => `0${randomInt(10, 99, rng)} ${randomInt(100, 999, rng)} ${randomInt(1000, 9999, rng)}`,\n};\n\n// ---------------------------------------------------------------------------\n// Locale-appropriate language codes\n// ---------------------------------------------------------------------------\n\nconst LOCALE_LANGUAGE: Record<Locale, string> = {\n us: \"en-US\",\n uk: \"en-GB\",\n au: \"en-AU\",\n ca: \"en-CA\",\n de: \"de\",\n fr: \"fr\",\n nl: \"nl\",\n in: \"hi\",\n jp: \"ja\",\n kr: \"ko\",\n sg: \"en-SG\",\n br: \"pt-BR\",\n mx: \"es-MX\",\n za: \"en-ZA\",\n};\n\n// ---------------------------------------------------------------------------\n// Patient resource assembly\n// ---------------------------------------------------------------------------\n\nfunction buildPatient(locale: Locale, rng: RandomFn): FhirResource {\n const localeDef = getLocale(locale);\n const gender = generateGender(rng);\n const nameGender: \"male\" | \"female\" = gender === \"other\" || gender === \"unknown\"\n ? pickRandom([\"male\", \"female\"] as const, rng)\n : gender;\n\n const generatedName = generateName(localeDef.names, nameGender, rng);\n const generatedAddress = generateAddress(localeDef.address, rng);\n\n const givenName = generatedName.given[0] ?? \"\";\n const familyName = generatedName.family;\n const email = `${givenName.toLowerCase()}.${familyName.toLowerCase()}@example.com`;\n\n // birthDate must be generated before the identifier so context (including\n // birthYear) can be forwarded to generators that encode demographic data (e.g. KR RRN).\n const birthDate = generateDate(1940, 2010, rng);\n const birthYear = Number.parseInt(birthDate.slice(0, 4), 10);\n\n const identifierDef = pickRandom(localeDef.patientIdentifiers, rng);\n const identifierValue = identifierDef.generate(rng, { gender, birthYear });\n\n const nameEntry: Record<string, unknown> = {\n use: \"official\",\n family: familyName,\n given: generatedName.given,\n ...(generatedName.familyPrefix !== undefined && {\n _family: {\n extension: [\n {\n url: \"http://hl7.org/fhir/StructureDefinition/humanname-own-prefix\",\n valueString: generatedName.familyPrefix,\n },\n ],\n },\n }),\n };\n\n const addressEntry: Record<string, unknown> = {\n use: \"home\",\n line: generatedAddress.line,\n city: generatedAddress.city,\n postalCode: generatedAddress.postalCode,\n country: generatedAddress.country,\n ...(generatedAddress.state !== undefined && { state: generatedAddress.state }),\n ...(generatedAddress.district !== undefined && { district: generatedAddress.district }),\n };\n\n return {\n resourceType: \"Patient\",\n id: generateUuidV4(rng),\n identifier: [{ system: identifierDef.system, value: identifierValue }],\n name: [nameEntry],\n telecom: [\n { system: \"phone\", value: PHONE_FORMATTERS[locale](rng), use: \"home\" },\n { system: \"email\", value: email, use: \"home\" },\n ],\n gender,\n birthDate,\n address: [addressEntry],\n communication: [\n {\n language: {\n coding: [{ system: \"urn:ietf:bcp:47\", code: LOCALE_LANGUAGE[locale] }],\n },\n },\n ],\n };\n}\n\n// ---------------------------------------------------------------------------\n// PatientBuilder\n// ---------------------------------------------------------------------------\n\nexport interface PatientBuilder {\n locale(locale: Locale): PatientBuilder;\n count(count: number): PatientBuilder;\n seed(seed: number): PatientBuilder;\n fhirVersion(version: FhirVersion): PatientBuilder;\n overrides(overrides: Record<string, unknown>): PatientBuilder;\n build(): FhirResource[];\n}\n\ninterface PatientBuilderState {\n locale: Locale;\n count: number;\n seed: number;\n fhirVersion: FhirVersion;\n overrideMap: Record<string, unknown>;\n}\n\nfunction makeBuilder(state: PatientBuilderState): PatientBuilder {\n return {\n locale(loc: Locale): PatientBuilder { return makeBuilder({ ...state, locale: loc }); },\n count(n: number): PatientBuilder { return makeBuilder({ ...state, count: n }); },\n seed(s: number): PatientBuilder { return makeBuilder({ ...state, seed: s }); },\n fhirVersion(v: FhirVersion): PatientBuilder { return makeBuilder({ ...state, fhirVersion: v }); },\n overrides(o: Record<string, unknown>): PatientBuilder {\n return makeBuilder({ ...state, overrideMap: o });\n },\n build(): FhirResource[] {\n const rng = createRng(state.seed);\n const hasOverrides = Object.keys(state.overrideMap).length > 0;\n return Array.from({ length: state.count }, () => {\n const patient = adaptToVersion(buildPatient(state.locale, rng), state.fhirVersion);\n return hasOverrides\n ? deepMerge(patient as Record<string, unknown>, state.overrideMap) as FhirResource\n : patient;\n });\n },\n };\n}\n\n/** Create a new PatientBuilder with default options. */\nexport function createPatientBuilder(): PatientBuilder {\n return makeBuilder({ locale: \"us\", count: 1, seed: 0, fhirVersion: \"R4\", overrideMap: {} });\n}\n","import type { FhirResource, FhirVersion, Locale, RandomFn } from \"@/core/types.js\";\nimport { createRng, pickRandom } from \"@/core/generators/rng.js\";\nimport { generateName } from \"@/core/generators/names.js\";\nimport { generateUuidV4, deepMerge } from \"./utils.js\";\nimport { getLocale } from \"@/locales/index.js\";\nimport { adaptToVersion } from \"./version-adapters.js\";\n\n// ---------------------------------------------------------------------------\n// Locale-appropriate title/prefix\n// ---------------------------------------------------------------------------\n\nconst TITLE_BY_LOCALE: Record<Locale, string> = {\n us: \"Dr.\",\n uk: \"Dr.\",\n au: \"Dr.\",\n ca: \"Dr.\",\n de: \"Dr. med.\",\n fr: \"Dr\",\n nl: \"Dr.\",\n in: \"Dr.\",\n jp: \"Dr.\",\n kr: \"Dr.\",\n sg: \"Dr.\",\n br: \"Dr.\",\n mx: \"Dr.\",\n za: \"Dr.\",\n};\n\n// ---------------------------------------------------------------------------\n// Practitioner resource assembly\n// ---------------------------------------------------------------------------\n\nfunction buildPractitioner(locale: Locale, rng: RandomFn): FhirResource {\n const localeDef = getLocale(locale);\n const gender: \"male\" | \"female\" = pickRandom([\"male\", \"female\"] as const, rng);\n\n const generatedName = generateName(localeDef.names, gender, rng);\n const givenName = generatedName.given[0] ?? \"\";\n const familyName = generatedName.family;\n const email = `${givenName.toLowerCase()}.${familyName.toLowerCase()}@example-practice.com`;\n\n const nameEntry: Record<string, unknown> = {\n use: \"official\",\n family: familyName,\n given: generatedName.given,\n prefix: [TITLE_BY_LOCALE[locale]],\n ...(generatedName.familyPrefix !== undefined && {\n _family: {\n extension: [\n {\n url: \"http://hl7.org/fhir/StructureDefinition/humanname-own-prefix\",\n valueString: generatedName.familyPrefix,\n },\n ],\n },\n }),\n };\n\n const identifiers: Array<{ system: string; value: string }> = [];\n if (localeDef.practitionerIdentifiers.length > 0) {\n const def = pickRandom(localeDef.practitionerIdentifiers, rng);\n identifiers.push({ system: def.system, value: def.generate(rng) });\n }\n\n return {\n resourceType: \"Practitioner\",\n id: generateUuidV4(rng),\n identifier: identifiers,\n name: [nameEntry],\n telecom: [{ system: \"email\", value: email, use: \"work\" }],\n gender,\n qualification: [\n {\n code: {\n coding: [\n {\n system: \"http://terminology.hl7.org/CodeSystem/v2-0360\",\n code: \"MD\",\n display: \"Doctor of Medicine\",\n },\n ],\n },\n },\n ],\n };\n}\n\n// ---------------------------------------------------------------------------\n// PractitionerBuilder\n// ---------------------------------------------------------------------------\n\nexport interface PractitionerBuilder {\n locale(locale: Locale): PractitionerBuilder;\n count(count: number): PractitionerBuilder;\n seed(seed: number): PractitionerBuilder;\n fhirVersion(version: FhirVersion): PractitionerBuilder;\n overrides(overrides: Record<string, unknown>): PractitionerBuilder;\n build(): FhirResource[];\n}\n\ninterface PractitionerBuilderState {\n locale: Locale;\n count: number;\n seed: number;\n fhirVersion: FhirVersion;\n overrideMap: Record<string, unknown>;\n}\n\nfunction makeBuilder(state: PractitionerBuilderState): PractitionerBuilder {\n return {\n locale(loc: Locale): PractitionerBuilder { return makeBuilder({ ...state, locale: loc }); },\n count(n: number): PractitionerBuilder { return makeBuilder({ ...state, count: n }); },\n seed(s: number): PractitionerBuilder { return makeBuilder({ ...state, seed: s }); },\n fhirVersion(v: FhirVersion): PractitionerBuilder { return makeBuilder({ ...state, fhirVersion: v }); },\n overrides(o: Record<string, unknown>): PractitionerBuilder {\n return makeBuilder({ ...state, overrideMap: o });\n },\n build(): FhirResource[] {\n const rng = createRng(state.seed);\n const hasOverrides = Object.keys(state.overrideMap).length > 0;\n return Array.from({ length: state.count }, () => {\n const practitioner = adaptToVersion(buildPractitioner(state.locale, rng), state.fhirVersion);\n return hasOverrides\n ? deepMerge(practitioner as Record<string, unknown>, state.overrideMap) as FhirResource\n : practitioner;\n });\n },\n };\n}\n\n/** Create a new PractitionerBuilder with default options. */\nexport function createPractitionerBuilder(): PractitionerBuilder {\n return makeBuilder({ locale: \"us\", count: 1, seed: 0, fhirVersion: \"R4\", overrideMap: {} });\n}\n","import type { FhirResource, FhirVersion, Locale, RandomFn } from \"@/core/types.js\";\nimport { createRng, pickRandom } from \"@/core/generators/rng.js\";\nimport { generateUuidV4, deepMerge } from \"./utils.js\";\nimport { createPractitionerBuilder } from \"./practitioner.js\";\nimport { adaptToVersion } from \"./version-adapters.js\";\n\n// ---------------------------------------------------------------------------\n// Role codes\n// ---------------------------------------------------------------------------\n\nconst ROLE_CODES = [\n { code: \"doctor\", display: \"Doctor\", system: \"http://terminology.hl7.org/CodeSystem/practitioner-role\" },\n { code: \"nurse\", display: \"Nurse\", system: \"http://terminology.hl7.org/CodeSystem/practitioner-role\" },\n { code: \"pharmacist\", display: \"Pharmacist\", system: \"http://terminology.hl7.org/CodeSystem/practitioner-role\" },\n { code: \"researcher\", display: \"Researcher\", system: \"http://terminology.hl7.org/CodeSystem/practitioner-role\" },\n] as const;\n\nconst SPECIALTY_CODES = [\n { code: \"394814009\", display: \"General practice\", system: \"http://snomed.info/sct\" },\n { code: \"394579002\", display: \"Cardiology\", system: \"http://snomed.info/sct\" },\n { code: \"394580004\", display: \"Clinical genetics\", system: \"http://snomed.info/sct\" },\n { code: \"394609007\", display: \"General surgery\", system: \"http://snomed.info/sct\" },\n { code: \"394591006\", display: \"Neurology\", system: \"http://snomed.info/sct\" },\n { code: \"394576009\", display: \"Accident and Emergency\", system: \"http://snomed.info/sct\" },\n] as const;\n\n// ---------------------------------------------------------------------------\n// PractitionerRole resource assembly\n// ---------------------------------------------------------------------------\n\ninterface PractitionerRoleOptions {\n /** ID of an already-built Practitioner in the same session. When omitted a\n * synthetic Practitioner is generated internally (standalone usage). */\n practitionerId?: string;\n /** ID of an already-built Organization in the same session. When omitted the\n * organization reference is left unset. */\n organizationId?: string;\n}\n\nfunction buildPractitionerRole(\n locale: Locale,\n fhirVersion: FhirVersion,\n rng: RandomFn,\n options: PractitionerRoleOptions = {},\n): FhirResource {\n // Use the injected Practitioner ID when available; otherwise generate one\n // so the standalone `generate practitioner-role` command still works.\n let practitionerId = options.practitionerId;\n if (practitionerId === undefined) {\n const practSeed = Math.floor(rng() * 0x7fffffff);\n const [practitioner] = createPractitionerBuilder()\n .locale(locale)\n .seed(practSeed)\n .fhirVersion(fhirVersion)\n .build();\n if (!practitioner) throw new Error(\"PractitionerRole: failed to generate Practitioner\");\n practitionerId = practitioner[\"id\"] as string;\n }\n\n const role = pickRandom(ROLE_CODES, rng);\n const specialty = pickRandom(SPECIALTY_CODES, rng);\n\n const resource: FhirResource = {\n resourceType: \"PractitionerRole\",\n id: generateUuidV4(rng),\n active: true,\n practitioner: { reference: `Practitioner/${practitionerId}` },\n ...(options.organizationId !== undefined && {\n organization: { reference: `Organization/${options.organizationId}` },\n }),\n code: [\n {\n coding: [{ system: role.system, code: role.code, display: role.display }],\n },\n ],\n specialty: [\n {\n coding: [{ system: specialty.system, code: specialty.code, display: specialty.display }],\n },\n ],\n };\n\n return adaptToVersion(resource, fhirVersion);\n}\n\n// ---------------------------------------------------------------------------\n// PractitionerRoleBuilder\n// ---------------------------------------------------------------------------\n\nexport interface PractitionerRoleBuilder {\n locale(locale: Locale): PractitionerRoleBuilder;\n count(count: number): PractitionerRoleBuilder;\n seed(seed: number): PractitionerRoleBuilder;\n fhirVersion(version: FhirVersion): PractitionerRoleBuilder;\n /** Inject the ID of an already-built Practitioner so the reference is consistent. */\n practitionerId(id: string): PractitionerRoleBuilder;\n /** Inject the ID of an already-built Organization so the reference is consistent. */\n organizationId(id: string): PractitionerRoleBuilder;\n overrides(overrides: Record<string, unknown>): PractitionerRoleBuilder;\n build(): FhirResource[];\n}\n\ninterface PractitionerRoleBuilderState {\n locale: Locale;\n count: number;\n seed: number;\n fhirVersion: FhirVersion;\n injectedPractitionerId: string | undefined;\n injectedOrganizationId: string | undefined;\n overrideMap: Record<string, unknown>;\n}\n\nfunction makeBuilder(state: PractitionerRoleBuilderState): PractitionerRoleBuilder {\n return {\n locale(loc: Locale): PractitionerRoleBuilder { return makeBuilder({ ...state, locale: loc }); },\n count(n: number): PractitionerRoleBuilder { return makeBuilder({ ...state, count: n }); },\n seed(s: number): PractitionerRoleBuilder { return makeBuilder({ ...state, seed: s }); },\n fhirVersion(v: FhirVersion): PractitionerRoleBuilder { return makeBuilder({ ...state, fhirVersion: v }); },\n practitionerId(id: string): PractitionerRoleBuilder {\n return makeBuilder({ ...state, injectedPractitionerId: id });\n },\n organizationId(id: string): PractitionerRoleBuilder {\n return makeBuilder({ ...state, injectedOrganizationId: id });\n },\n overrides(o: Record<string, unknown>): PractitionerRoleBuilder {\n return makeBuilder({ ...state, overrideMap: o });\n },\n build(): FhirResource[] {\n const rng = createRng(state.seed);\n const hasOverrides = Object.keys(state.overrideMap).length > 0;\n const options: PractitionerRoleOptions = {\n ...(state.injectedPractitionerId !== undefined && { practitionerId: state.injectedPractitionerId }),\n ...(state.injectedOrganizationId !== undefined && { organizationId: state.injectedOrganizationId }),\n };\n return Array.from({ length: state.count }, () => {\n const role = buildPractitionerRole(state.locale, state.fhirVersion, rng, options);\n return hasOverrides\n ? deepMerge(role as Record<string, unknown>, state.overrideMap) as FhirResource\n : role;\n });\n },\n };\n}\n\n/** Create a new PractitionerRoleBuilder with default options. */\nexport function createPractitionerRoleBuilder(): PractitionerRoleBuilder {\n return makeBuilder({\n locale: \"us\",\n count: 1,\n seed: 0,\n fhirVersion: \"R4\",\n injectedPractitionerId: undefined,\n injectedOrganizationId: undefined,\n overrideMap: {},\n });\n}\n","import type { FhirResource, FhirVersion, Locale, RandomFn } from \"@/core/types.js\";\nimport { createRng, pickRandom, randomInt } from \"@/core/generators/rng.js\";\nimport { generateAddress } from \"@/core/generators/addresses.js\";\nimport { generateUuidV4, deepMerge } from \"./utils.js\";\nimport { getLocale } from \"@/locales/index.js\";\nimport { adaptToVersion } from \"./version-adapters.js\";\n\n// ---------------------------------------------------------------------------\n// Organization name generation\n// ---------------------------------------------------------------------------\n\nconst ORG_PREFIXES = [\"St.\", \"Royal\", \"General\", \"University\", \"Community\", \"Memorial\"] as const;\nconst ORG_SUFFIXES = [\n \"Hospital\",\n \"Medical Center\",\n \"Health System\",\n \"Clinic\",\n \"Healthcare\",\n] as const;\n\nfunction generateOrgName(locale: Locale, rng: RandomFn): string {\n const localeDef = getLocale(locale);\n const city = pickRandom(localeDef.address.cities, rng);\n const prefix = pickRandom(ORG_PREFIXES, rng);\n const suffix = pickRandom(ORG_SUFFIXES, rng);\n return `${prefix} ${city.name} ${suffix}`;\n}\n\n// ---------------------------------------------------------------------------\n// Phone number formats per locale\n// ---------------------------------------------------------------------------\n\ntype PhoneFormatter = (rng: RandomFn) => string;\n\nconst WORK_PHONE_FORMATTERS: Record<Locale, PhoneFormatter> = {\n us: (rng) => `(${randomInt(200, 999, rng)}) ${randomInt(200, 999, rng)}-${randomInt(1000, 9999, rng)}`,\n ca: (rng) => `(${randomInt(200, 999, rng)}) ${randomInt(200, 999, rng)}-${randomInt(1000, 9999, rng)}`,\n uk: (rng) => `0${randomInt(100, 999, rng)} ${randomInt(1000, 9999, rng)} ${randomInt(1000, 9999, rng)}`,\n au: (rng) => `0${randomInt(2, 9, rng)} ${randomInt(1000, 9999, rng)} ${randomInt(1000, 9999, rng)}`,\n de: (rng) => `0${randomInt(30, 999, rng)} ${randomInt(10000000, 99999999, rng)}`,\n fr: (rng) => `0${randomInt(1, 9, rng)} ${randomInt(10, 99, rng)} ${randomInt(10, 99, rng)} ${randomInt(10, 99, rng)} ${randomInt(10, 99, rng)}`,\n nl: (rng) => `0${randomInt(10, 99, rng)} ${randomInt(1000000, 9999999, rng)}`,\n in: (rng) => `0${randomInt(11, 99, rng)}-${randomInt(10000000, 99999999, rng)}`,\n jp: (rng) => `0${randomInt(3, 9, rng)}-${randomInt(1000, 9999, rng)}-${randomInt(1000, 9999, rng)}`,\n kr: (rng) => `0${randomInt(10, 99, rng)}-${randomInt(1000, 9999, rng)}-${randomInt(1000, 9999, rng)}`,\n sg: (rng) => `${randomInt(6000, 9999, rng)} ${randomInt(1000, 9999, rng)}`,\n br: (rng) => `(${randomInt(11, 99, rng)}) ${randomInt(2000, 9999, rng)}-${randomInt(1000, 9999, rng)}`,\n mx: (rng) => `55 ${randomInt(1000, 9999, rng)} ${randomInt(1000, 9999, rng)}`,\n za: (rng) => `0${randomInt(10, 99, rng)} ${randomInt(100, 999, rng)} ${randomInt(1000, 9999, rng)}`,\n};\n\n// ---------------------------------------------------------------------------\n// Organization resource assembly\n// ---------------------------------------------------------------------------\n\nfunction buildOrganization(locale: Locale, rng: RandomFn): FhirResource {\n const localeDef = getLocale(locale);\n const generatedAddress = generateAddress(localeDef.address, rng);\n\n const identifiers: Array<{ system: string; value: string }> = [];\n if (localeDef.organizationIdentifiers.length > 0) {\n const def = pickRandom(localeDef.organizationIdentifiers, rng);\n identifiers.push({ system: def.system, value: def.generate(rng) });\n }\n\n const addressEntry: Record<string, unknown> = {\n use: \"work\",\n line: generatedAddress.line,\n city: generatedAddress.city,\n postalCode: generatedAddress.postalCode,\n country: generatedAddress.country,\n ...(generatedAddress.state !== undefined && { state: generatedAddress.state }),\n ...(generatedAddress.district !== undefined && { district: generatedAddress.district }),\n };\n\n return {\n resourceType: \"Organization\",\n id: generateUuidV4(rng),\n identifier: identifiers,\n active: true,\n type: [\n {\n coding: [\n {\n system: \"http://terminology.hl7.org/CodeSystem/organization-type\",\n code: \"prov\",\n display: \"Healthcare Provider\",\n },\n ],\n },\n ],\n name: generateOrgName(locale, rng),\n telecom: [{ system: \"phone\", value: WORK_PHONE_FORMATTERS[locale](rng), use: \"work\" }],\n address: [addressEntry],\n };\n}\n\n// ---------------------------------------------------------------------------\n// OrganizationBuilder\n// ---------------------------------------------------------------------------\n\nexport interface OrganizationBuilder {\n locale(locale: Locale): OrganizationBuilder;\n count(count: number): OrganizationBuilder;\n seed(seed: number): OrganizationBuilder;\n fhirVersion(version: FhirVersion): OrganizationBuilder;\n overrides(overrides: Record<string, unknown>): OrganizationBuilder;\n build(): FhirResource[];\n}\n\ninterface OrganizationBuilderState {\n locale: Locale;\n count: number;\n seed: number;\n fhirVersion: FhirVersion;\n overrideMap: Record<string, unknown>;\n}\n\nfunction makeBuilder(state: OrganizationBuilderState): OrganizationBuilder {\n return {\n locale(loc: Locale): OrganizationBuilder { return makeBuilder({ ...state, locale: loc }); },\n count(n: number): OrganizationBuilder { return makeBuilder({ ...state, count: n }); },\n seed(s: number): OrganizationBuilder { return makeBuilder({ ...state, seed: s }); },\n fhirVersion(v: FhirVersion): OrganizationBuilder { return makeBuilder({ ...state, fhirVersion: v }); },\n overrides(o: Record<string, unknown>): OrganizationBuilder {\n return makeBuilder({ ...state, overrideMap: o });\n },\n build(): FhirResource[] {\n const rng = createRng(state.seed);\n const hasOverrides = Object.keys(state.overrideMap).length > 0;\n return Array.from({ length: state.count }, () => {\n const org = adaptToVersion(buildOrganization(state.locale, rng), state.fhirVersion);\n return hasOverrides\n ? deepMerge(org as Record<string, unknown>, state.overrideMap) as FhirResource\n : org;\n });\n },\n };\n}\n\n/** Create a new OrganizationBuilder with default options. */\nexport function createOrganizationBuilder(): OrganizationBuilder {\n return makeBuilder({ locale: \"us\", count: 1, seed: 0, fhirVersion: \"R4\", overrideMap: {} });\n}\n","export interface LoincCode {\n code: string;\n display: string;\n unit: string;\n /** UCUM code */\n unitCode: string;\n category: \"vital-signs\" | \"laboratory\";\n valueRange: { min: number; max: number };\n /** Decimal places to round the generated value to (0 = integer) */\n decimals: number;\n}\n\nexport const COMMON_LOINC_CODES: LoincCode[] = [\n // Vital signs\n {\n code: \"8867-4\",\n display: \"Heart rate\",\n unit: \"beats/minute\",\n unitCode: \"/min\",\n category: \"vital-signs\",\n valueRange: { min: 50, max: 120 },\n decimals: 0,\n },\n {\n code: \"8310-5\",\n display: \"Body temperature\",\n unit: \"degrees Celsius\",\n unitCode: \"Cel\",\n category: \"vital-signs\",\n valueRange: { min: 35.5, max: 39.0 },\n decimals: 1,\n },\n {\n code: \"8480-6\",\n display: \"Systolic blood pressure\",\n unit: \"mmHg\",\n unitCode: \"mm[Hg]\",\n category: \"vital-signs\",\n valueRange: { min: 90, max: 180 },\n decimals: 0,\n },\n {\n code: \"8462-4\",\n display: \"Diastolic blood pressure\",\n unit: \"mmHg\",\n unitCode: \"mm[Hg]\",\n category: \"vital-signs\",\n valueRange: { min: 50, max: 110 },\n decimals: 0,\n },\n {\n code: \"9279-1\",\n display: \"Respiratory rate\",\n unit: \"breaths/minute\",\n unitCode: \"/min\",\n category: \"vital-signs\",\n valueRange: { min: 10, max: 30 },\n decimals: 0,\n },\n {\n code: \"2708-6\",\n display: \"Oxygen saturation\",\n unit: \"%\",\n unitCode: \"%\",\n category: \"vital-signs\",\n valueRange: { min: 88, max: 100 },\n decimals: 0,\n },\n {\n code: \"29463-7\",\n display: \"Body weight\",\n unit: \"kg\",\n unitCode: \"kg\",\n category: \"vital-signs\",\n valueRange: { min: 40, max: 150 },\n decimals: 1,\n },\n {\n code: \"8302-2\",\n display: \"Body height\",\n unit: \"cm\",\n unitCode: \"cm\",\n category: \"vital-signs\",\n valueRange: { min: 140, max: 200 },\n decimals: 0,\n },\n // Laboratory\n {\n code: \"2339-0\",\n display: \"Glucose\",\n unit: \"mg/dL\",\n unitCode: \"mg/dL\",\n category: \"laboratory\",\n valueRange: { min: 60, max: 200 },\n decimals: 0,\n },\n {\n code: \"718-7\",\n display: \"Hemoglobin\",\n unit: \"g/dL\",\n unitCode: \"g/dL\",\n category: \"laboratory\",\n valueRange: { min: 8, max: 18 },\n decimals: 1,\n },\n {\n code: \"4548-4\",\n display: \"HbA1c\",\n unit: \"%\",\n unitCode: \"%\",\n category: \"laboratory\",\n valueRange: { min: 4, max: 14 },\n decimals: 1,\n },\n {\n code: \"2160-0\",\n display: \"Creatinine\",\n unit: \"mg/dL\",\n unitCode: \"mg/dL\",\n category: \"laboratory\",\n valueRange: { min: 0.5, max: 2.5 },\n decimals: 1,\n },\n {\n code: \"6690-2\",\n display: \"WBC count\",\n unit: \"10*3/uL\",\n unitCode: \"10*3/uL\",\n category: \"laboratory\",\n valueRange: { min: 3, max: 15 },\n decimals: 1,\n },\n // Additional laboratory codes\n {\n code: \"2951-2\",\n display: \"Sodium\",\n unit: \"mmol/L\",\n unitCode: \"mmol/L\",\n category: \"laboratory\",\n valueRange: { min: 130, max: 150 },\n decimals: 0,\n },\n {\n code: \"2823-3\",\n display: \"Potassium\",\n unit: \"mmol/L\",\n unitCode: \"mmol/L\",\n category: \"laboratory\",\n valueRange: { min: 3.0, max: 5.5 },\n decimals: 1,\n },\n {\n code: \"17861-6\",\n display: \"Calcium\",\n unit: \"mg/dL\",\n unitCode: \"mg/dL\",\n category: \"laboratory\",\n valueRange: { min: 8.0, max: 11.0 },\n decimals: 1,\n },\n {\n code: \"1751-7\",\n display: \"Albumin\",\n unit: \"g/dL\",\n unitCode: \"g/dL\",\n category: \"laboratory\",\n valueRange: { min: 2.5, max: 5.0 },\n decimals: 1,\n },\n {\n code: \"2885-2\",\n display: \"Total protein\",\n unit: \"g/dL\",\n unitCode: \"g/dL\",\n category: \"laboratory\",\n valueRange: { min: 5.5, max: 9.0 },\n decimals: 1,\n },\n {\n code: \"3016-3\",\n display: \"TSH\",\n unit: \"mIU/L\",\n unitCode: \"mIU/L\",\n category: \"laboratory\",\n valueRange: { min: 0.3, max: 5.0 },\n decimals: 2,\n },\n {\n code: \"2093-3\",\n display: \"Total cholesterol\",\n unit: \"mg/dL\",\n unitCode: \"mg/dL\",\n category: \"laboratory\",\n valueRange: { min: 100, max: 300 },\n decimals: 0,\n },\n {\n code: \"18262-6\",\n display: \"LDL cholesterol\",\n unit: \"mg/dL\",\n unitCode: \"mg/dL\",\n category: \"laboratory\",\n valueRange: { min: 50, max: 200 },\n decimals: 0,\n },\n {\n code: \"2085-9\",\n display: \"HDL cholesterol\",\n unit: \"mg/dL\",\n unitCode: \"mg/dL\",\n category: \"laboratory\",\n valueRange: { min: 20, max: 100 },\n decimals: 0,\n },\n {\n code: \"2571-8\",\n display: \"Triglycerides\",\n unit: \"mg/dL\",\n unitCode: \"mg/dL\",\n category: \"laboratory\",\n valueRange: { min: 50, max: 400 },\n decimals: 0,\n },\n {\n code: \"1742-6\",\n display: \"ALT\",\n unit: \"U/L\",\n unitCode: \"U/L\",\n category: \"laboratory\",\n valueRange: { min: 5, max: 100 },\n decimals: 0,\n },\n {\n code: \"1920-8\",\n display: \"AST\",\n unit: \"U/L\",\n unitCode: \"U/L\",\n category: \"laboratory\",\n valueRange: { min: 5, max: 100 },\n decimals: 0,\n },\n {\n code: \"1975-2\",\n display: \"Bilirubin total\",\n unit: \"mg/dL\",\n unitCode: \"mg/dL\",\n category: \"laboratory\",\n valueRange: { min: 0.1, max: 3.0 },\n decimals: 1,\n },\n {\n code: \"777-3\",\n display: \"Platelet count\",\n unit: \"10*3/uL\",\n unitCode: \"10*3/uL\",\n category: \"laboratory\",\n valueRange: { min: 100, max: 500 },\n decimals: 0,\n },\n {\n code: \"62238-1\",\n display: \"eGFR\",\n unit: \"mL/min/1.73m2\",\n unitCode: \"mL/min/{1.73_m2}\",\n category: \"laboratory\",\n valueRange: { min: 15, max: 120 },\n decimals: 0,\n },\n // Additional vital-signs codes\n {\n code: \"59408-5\",\n display: \"Oxygen saturation by pulse oximetry\",\n unit: \"%\",\n unitCode: \"%\",\n category: \"vital-signs\",\n valueRange: { min: 88, max: 100 },\n decimals: 0,\n },\n {\n code: \"8287-5\",\n display: \"Head circumference\",\n unit: \"cm\",\n unitCode: \"cm\",\n category: \"vital-signs\",\n valueRange: { min: 50, max: 62 },\n decimals: 0,\n },\n];\n","import type { FhirResource, FhirVersion, Locale } from \"@/core/types.js\";\nimport { createRng, pickRandom, randomInt } from \"@/core/generators/rng.js\";\nimport { generateUuidV4, deepMerge, generateDateTime } from \"./utils.js\";\nimport { COMMON_LOINC_CODES } from \"@/core/data/loinc-codes.js\";\nimport type { LoincCode } from \"@/core/data/loinc-codes.js\";\nimport type { RandomFn } from \"@/core/types.js\";\nimport { adaptToVersion } from \"./version-adapters.js\";\n\n// ---------------------------------------------------------------------------\n// Value generation\n// ---------------------------------------------------------------------------\n\nfunction generateValue(loinc: LoincCode, rng: RandomFn): number {\n const { min, max, decimals } = { ...loinc.valueRange, decimals: loinc.decimals };\n const scale = Math.pow(10, decimals);\n const raw = randomInt(Math.round(min * scale), Math.round(max * scale), rng);\n return raw / scale;\n}\n\n// ---------------------------------------------------------------------------\n// Category display names\n// ---------------------------------------------------------------------------\n\nconst CATEGORY_DISPLAY: Record<\"vital-signs\" | \"laboratory\", string> = {\n \"vital-signs\": \"Vital Signs\",\n laboratory: \"Laboratory\",\n};\n\n// ---------------------------------------------------------------------------\n// Observation resource assembly\n// ---------------------------------------------------------------------------\n\nfunction buildObservation(\n category: \"vital-signs\" | \"laboratory\" | undefined,\n subject: string,\n rng: RandomFn,\n): FhirResource {\n const codes = category\n ? COMMON_LOINC_CODES.filter((c) => c.category === category)\n : COMMON_LOINC_CODES;\n const loinc = pickRandom(codes, rng);\n const effectiveCategory = loinc.category;\n const value = generateValue(loinc, rng);\n\n return {\n resourceType: \"Observation\",\n id: generateUuidV4(rng),\n status: \"final\",\n category: [\n {\n coding: [\n {\n system: \"http://terminology.hl7.org/CodeSystem/observation-category\",\n code: effectiveCategory,\n display: CATEGORY_DISPLAY[effectiveCategory],\n },\n ],\n },\n ],\n code: {\n coding: [\n {\n system: \"http://loinc.org\",\n code: loinc.code,\n display: loinc.display,\n },\n ],\n },\n subject: { reference: subject },\n effectiveDateTime: generateDateTime(2020, 2025, rng),\n valueQuantity: {\n value,\n unit: loinc.unit,\n system: \"http://unitsofmeasure.org\",\n code: loinc.unitCode,\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// ObservationBuilder\n// ---------------------------------------------------------------------------\n\nexport interface ObservationBuilder {\n locale(locale: Locale): ObservationBuilder;\n count(count: number): ObservationBuilder;\n seed(seed: number): ObservationBuilder;\n subject(patientReference: string): ObservationBuilder;\n category(category: \"vital-signs\" | \"laboratory\"): ObservationBuilder;\n fhirVersion(version: FhirVersion): ObservationBuilder;\n overrides(overrides: Record<string, unknown>): ObservationBuilder;\n build(): FhirResource[];\n}\n\ninterface ObservationBuilderState {\n locale: Locale;\n count: number;\n seed: number;\n fhirVersion: FhirVersion;\n subjectRef: string | undefined;\n categoryFilter: \"vital-signs\" | \"laboratory\" | undefined;\n overrideMap: Record<string, unknown>;\n}\n\nfunction makeBuilder(state: ObservationBuilderState): ObservationBuilder {\n return {\n locale(loc: Locale): ObservationBuilder {\n return makeBuilder({ ...state, locale: loc });\n },\n count(n: number): ObservationBuilder {\n return makeBuilder({ ...state, count: n });\n },\n seed(s: number): ObservationBuilder {\n return makeBuilder({ ...state, seed: s });\n },\n subject(ref: string): ObservationBuilder {\n return makeBuilder({ ...state, subjectRef: ref });\n },\n category(cat: \"vital-signs\" | \"laboratory\"): ObservationBuilder {\n return makeBuilder({ ...state, categoryFilter: cat });\n },\n fhirVersion(v: FhirVersion): ObservationBuilder {\n return makeBuilder({ ...state, fhirVersion: v });\n },\n overrides(o: Record<string, unknown>): ObservationBuilder {\n return makeBuilder({ ...state, overrideMap: o });\n },\n build(): FhirResource[] {\n const rng = createRng(state.seed);\n const results: FhirResource[] = [];\n for (let i = 0; i < state.count; i++) {\n const subjectRef = state.subjectRef ?? `Patient/${generateUuidV4(rng)}`;\n const obs = adaptToVersion(buildObservation(state.categoryFilter, subjectRef, rng), state.fhirVersion);\n if (Object.keys(state.overrideMap).length > 0) {\n results.push(deepMerge(obs as Record<string, unknown>, state.overrideMap) as FhirResource);\n } else {\n results.push(obs);\n }\n }\n return results;\n },\n };\n}\n\n/** Create a new ObservationBuilder with default options. */\nexport function createObservationBuilder(): ObservationBuilder {\n return makeBuilder({\n locale: \"us\",\n count: 1,\n seed: 0,\n fhirVersion: \"R4\",\n subjectRef: undefined,\n categoryFilter: undefined,\n overrideMap: {},\n });\n}\n","export interface SnomedCode {\n code: string;\n display: string;\n}\n\nexport const COMMON_SNOMED_CONDITIONS: SnomedCode[] = [\n { code: \"73211009\", display: \"Diabetes mellitus\" },\n { code: \"38341003\", display: \"Hypertension\" },\n { code: \"195967001\", display: \"Asthma\" },\n { code: \"44054006\", display: \"Type 2 diabetes mellitus\" },\n { code: \"84114007\", display: \"Heart failure\" },\n { code: \"13645005\", display: \"COPD\" },\n { code: \"56265001\", display: \"Heart disease\" },\n { code: \"40055000\", display: \"Chronic kidney disease\" },\n { code: \"73430006\", display: \"Sleep apnea\" },\n { code: \"414545008\", display: \"Ischemic heart disease\" },\n { code: \"230690007\", display: \"Stroke\" },\n { code: \"35489007\", display: \"Depressive disorder\" },\n { code: \"197480006\", display: \"Anxiety disorder\" },\n { code: \"396275006\", display: \"Osteoarthritis\" },\n { code: \"69896004\", display: \"Rheumatoid arthritis\" },\n { code: \"40930008\", display: \"Hypothyroidism\" },\n { code: \"49436004\", display: \"Atrial fibrillation\" },\n { code: \"109819003\", display: \"Chronic liver disease\" },\n { code: \"37796009\", display: \"Migraine\" },\n { code: \"34000006\", display: \"Crohn's disease\" },\n { code: \"49049000\", display: \"Parkinson's disease\" },\n { code: \"271737000\", display: \"Anemia\" },\n { code: \"233604007\", display: \"Pneumonia\" },\n { code: \"68566005\", display: \"Urinary tract infection\" },\n { code: \"414916001\", display: \"Obesity\" },\n];\n","import type { FhirResource, FhirVersion, Locale } from \"@/core/types.js\";\nimport { createRng, pickRandom } from \"@/core/generators/rng.js\";\nimport { generateUuidV4, deepMerge, generateDate } from \"./utils.js\";\nimport { COMMON_SNOMED_CONDITIONS } from \"@/core/data/snomed-codes.js\";\nimport type { RandomFn } from \"@/core/types.js\";\nimport { adaptToVersion } from \"./version-adapters.js\";\n\n// ---------------------------------------------------------------------------\n// Condition resource assembly\n// ---------------------------------------------------------------------------\n\nfunction buildCondition(subject: string, rng: RandomFn): FhirResource {\n const snomed = pickRandom(COMMON_SNOMED_CONDITIONS, rng);\n\n return {\n resourceType: \"Condition\",\n id: generateUuidV4(rng),\n clinicalStatus: {\n coding: [\n {\n system: \"http://terminology.hl7.org/CodeSystem/condition-clinical\",\n code: \"active\",\n display: \"Active\",\n },\n ],\n },\n verificationStatus: {\n coding: [\n {\n system: \"http://terminology.hl7.org/CodeSystem/condition-ver-status\",\n code: \"confirmed\",\n display: \"Confirmed\",\n },\n ],\n },\n code: {\n coding: [\n {\n system: \"http://snomed.info/sct\",\n code: snomed.code,\n display: snomed.display,\n },\n ],\n },\n subject: { reference: subject },\n onsetDateTime: generateDate(2015, 2024, rng),\n };\n}\n\n// ---------------------------------------------------------------------------\n// ConditionBuilder\n// ---------------------------------------------------------------------------\n\nexport interface ConditionBuilder {\n locale(locale: Locale): ConditionBuilder;\n count(count: number): ConditionBuilder;\n seed(seed: number): ConditionBuilder;\n subject(patientReference: string): ConditionBuilder;\n fhirVersion(version: FhirVersion): ConditionBuilder;\n overrides(overrides: Record<string, unknown>): ConditionBuilder;\n build(): FhirResource[];\n}\n\ninterface ConditionBuilderState {\n locale: Locale;\n count: number;\n seed: number;\n fhirVersion: FhirVersion;\n subjectRef: string | undefined;\n overrideMap: Record<string, unknown>;\n}\n\nfunction makeBuilder(state: ConditionBuilderState): ConditionBuilder {\n return {\n locale(loc: Locale): ConditionBuilder {\n return makeBuilder({ ...state, locale: loc });\n },\n count(n: number): ConditionBuilder {\n return makeBuilder({ ...state, count: n });\n },\n seed(s: number): ConditionBuilder {\n return makeBuilder({ ...state, seed: s });\n },\n subject(ref: string): ConditionBuilder {\n return makeBuilder({ ...state, subjectRef: ref });\n },\n fhirVersion(v: FhirVersion): ConditionBuilder {\n return makeBuilder({ ...state, fhirVersion: v });\n },\n overrides(o: Record<string, unknown>): ConditionBuilder {\n return makeBuilder({ ...state, overrideMap: o });\n },\n build(): FhirResource[] {\n const rng = createRng(state.seed);\n const results: FhirResource[] = [];\n for (let i = 0; i < state.count; i++) {\n const subjectRef = state.subjectRef ?? `Patient/${generateUuidV4(rng)}`;\n const condition = adaptToVersion(buildCondition(subjectRef, rng), state.fhirVersion);\n if (Object.keys(state.overrideMap).length > 0) {\n results.push(\n deepMerge(condition as Record<string, unknown>, state.overrideMap) as FhirResource,\n );\n } else {\n results.push(condition);\n }\n }\n return results;\n },\n };\n}\n\n/** Create a new ConditionBuilder with default options. */\nexport function createConditionBuilder(): ConditionBuilder {\n return makeBuilder({\n locale: \"us\",\n count: 1,\n seed: 0,\n fhirVersion: \"R4\",\n subjectRef: undefined,\n overrideMap: {},\n });\n}\n","export interface AllergyCode {\n system: string;\n code: string;\n display: string;\n /** FHIR AllergyIntolerance type: \"allergy\" | \"intolerance\" */\n type: \"allergy\" | \"intolerance\";\n /** FHIR category: \"food\" | \"medication\" | \"environment\" | \"biologic\" */\n category: \"food\" | \"medication\" | \"environment\" | \"biologic\";\n}\n\nconst SNOMED = \"http://snomed.info/sct\";\n\nexport const COMMON_ALLERGY_CODES: AllergyCode[] = [\n { system: SNOMED, code: \"91936005\", display: \"Allergy to penicillin\", type: \"allergy\", category: \"medication\" },\n { system: SNOMED, code: \"91935009\", display: \"Allergy to peanuts\", type: \"allergy\", category: \"food\" },\n { system: SNOMED, code: \"294505008\", display: \"Allergy to amoxicillin\", type: \"allergy\", category: \"medication\" },\n { system: SNOMED, code: \"418689008\", display: \"Allergy to grass pollen\", type: \"allergy\", category: \"environment\" },\n { system: SNOMED, code: \"419474003\", display: \"Allergy to sulfonamide\", type: \"allergy\", category: \"medication\" },\n { system: SNOMED, code: \"416098002\", display: \"Allergy to drug\", type: \"allergy\", category: \"medication\" },\n { system: SNOMED, code: \"300916003\", display: \"Latex allergy\", type: \"allergy\", category: \"environment\" },\n { system: SNOMED, code: \"235719002\", display: \"Food intolerance\", type: \"intolerance\", category: \"food\" },\n // Additional medication allergies\n { system: SNOMED, code: \"372687004\", display: \"Allergy to aspirin\", type: \"allergy\", category: \"medication\" },\n { system: SNOMED, code: \"373270004\", display: \"Allergy to cephalosporin antibiotic\", type: \"allergy\", category: \"medication\" },\n { system: SNOMED, code: \"372720008\", display: \"Allergy to codeine\", type: \"allergy\", category: \"medication\" },\n { system: SNOMED, code: \"294506009\", display: \"Allergy to tetracycline\", type: \"allergy\", category: \"medication\" },\n // Additional food allergies/intolerances\n { system: SNOMED, code: \"782415009\", display: \"Intolerance to gluten\", type: \"intolerance\", category: \"food\" },\n { system: SNOMED, code: \"402383003\", display: \"Milk allergy\", type: \"allergy\", category: \"food\" },\n { system: SNOMED, code: \"414285001\", display: \"Allergy to nut\", type: \"allergy\", category: \"food\" },\n { system: SNOMED, code: \"73882009\", display: \"Shellfish allergy\", type: \"allergy\", category: \"food\" },\n { system: SNOMED, code: \"91930004\", display: \"Allergy to eggs\", type: \"allergy\", category: \"food\" },\n { system: SNOMED, code: \"267425008\", display: \"Allergy to strawberries\", type: \"allergy\", category: \"food\" },\n { system: SNOMED, code: \"6235009\", display: \"Allergy to seafood\", type: \"allergy\", category: \"food\" },\n // Additional environmental allergies\n { system: SNOMED, code: \"232350006\", display: \"Allergy to house dust mite\", type: \"allergy\", category: \"environment\" },\n { system: SNOMED, code: \"418290006\", display: \"Allergy to mold\", type: \"allergy\", category: \"environment\" },\n { system: SNOMED, code: \"419199007\", display: \"Allergy to cat dander\", type: \"allergy\", category: \"environment\" },\n { system: SNOMED, code: \"232347008\", display: \"Allergy to dog dander\", type: \"allergy\", category: \"environment\" },\n];\n","import type { FhirResource, FhirVersion, Locale } from \"@/core/types.js\";\nimport { createRng, pickRandom } from \"@/core/generators/rng.js\";\nimport { generateUuidV4, deepMerge, generateDate } from \"./utils.js\";\nimport { COMMON_ALLERGY_CODES } from \"@/core/data/allergy-codes.js\";\nimport type { RandomFn } from \"@/core/types.js\";\nimport { adaptToVersion } from \"./version-adapters.js\";\n\n// ---------------------------------------------------------------------------\n// AllergyIntolerance resource assembly\n// ---------------------------------------------------------------------------\n\nconst CRITICALITY_VALUES = [\"low\", \"high\", \"unable-to-assess\"] as const;\n\nfunction buildAllergyIntolerance(patientRef: string, rng: RandomFn): FhirResource {\n const allergy = pickRandom(COMMON_ALLERGY_CODES, rng);\n const criticality = pickRandom(CRITICALITY_VALUES, rng);\n\n return {\n resourceType: \"AllergyIntolerance\",\n id: generateUuidV4(rng),\n clinicalStatus: {\n coding: [\n {\n system: \"http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical\",\n code: \"active\",\n display: \"Active\",\n },\n ],\n },\n verificationStatus: {\n coding: [\n {\n system: \"http://terminology.hl7.org/CodeSystem/allergyintolerance-verification\",\n code: \"confirmed\",\n display: \"Confirmed\",\n },\n ],\n },\n type: allergy.type,\n category: [allergy.category],\n criticality,\n code: {\n coding: [\n {\n system: allergy.system,\n code: allergy.code,\n display: allergy.display,\n },\n ],\n },\n patient: { reference: patientRef },\n recordedDate: generateDate(2015, 2024, rng),\n };\n}\n\n// ---------------------------------------------------------------------------\n// AllergyIntoleranceBuilder\n// ---------------------------------------------------------------------------\n\nexport interface AllergyIntoleranceBuilder {\n locale(locale: Locale): AllergyIntoleranceBuilder;\n count(count: number): AllergyIntoleranceBuilder;\n seed(seed: number): AllergyIntoleranceBuilder;\n subject(patientReference: string): AllergyIntoleranceBuilder;\n fhirVersion(version: FhirVersion): AllergyIntoleranceBuilder;\n overrides(overrides: Record<string, unknown>): AllergyIntoleranceBuilder;\n build(): FhirResource[];\n}\n\ninterface AllergyIntoleranceBuilderState {\n locale: Locale;\n count: number;\n seed: number;\n fhirVersion: FhirVersion;\n patientRef: string | undefined;\n overrideMap: Record<string, unknown>;\n}\n\nfunction makeBuilder(state: AllergyIntoleranceBuilderState): AllergyIntoleranceBuilder {\n return {\n locale(loc: Locale): AllergyIntoleranceBuilder {\n return makeBuilder({ ...state, locale: loc });\n },\n count(n: number): AllergyIntoleranceBuilder {\n return makeBuilder({ ...state, count: n });\n },\n seed(s: number): AllergyIntoleranceBuilder {\n return makeBuilder({ ...state, seed: s });\n },\n subject(ref: string): AllergyIntoleranceBuilder {\n return makeBuilder({ ...state, patientRef: ref });\n },\n fhirVersion(v: FhirVersion): AllergyIntoleranceBuilder {\n return makeBuilder({ ...state, fhirVersion: v });\n },\n overrides(o: Record<string, unknown>): AllergyIntoleranceBuilder {\n return makeBuilder({ ...state, overrideMap: o });\n },\n build(): FhirResource[] {\n const rng = createRng(state.seed);\n const results: FhirResource[] = [];\n for (let i = 0; i < state.count; i++) {\n const patientRef = state.patientRef ?? `Patient/${generateUuidV4(rng)}`;\n const allergy = adaptToVersion(buildAllergyIntolerance(patientRef, rng), state.fhirVersion);\n if (Object.keys(state.overrideMap).length > 0) {\n results.push(\n deepMerge(allergy as Record<string, unknown>, state.overrideMap) as FhirResource,\n );\n } else {\n results.push(allergy);\n }\n }\n return results;\n },\n };\n}\n\n/** Create a new AllergyIntoleranceBuilder with default options. */\nexport function createAllergyIntoleranceBuilder(): AllergyIntoleranceBuilder {\n return makeBuilder({\n locale: \"us\",\n count: 1,\n seed: 0,\n fhirVersion: \"R4\",\n patientRef: undefined,\n overrideMap: {},\n });\n}\n","export interface MedicationCode {\n system: string;\n code: string;\n display: string;\n /** Typical dose in mg */\n typicalDoseMg: number;\n /** Typical frequency (e.g., \"daily\", \"twice daily\") */\n frequency: string;\n}\n\nconst SNOMED = \"http://snomed.info/sct\";\nconst RXNORM = \"http://www.nlm.nih.gov/research/umls/rxnorm\";\n\nexport const COMMON_MEDICATION_CODES: MedicationCode[] = [\n { system: SNOMED, code: \"27658006\", display: \"Amoxicillin\", typicalDoseMg: 500, frequency: \"three times daily\" },\n { system: SNOMED, code: \"387207008\", display: \"Ibuprofen\", typicalDoseMg: 400, frequency: \"as needed\" },\n { system: SNOMED, code: \"372756006\", display: \"Atorvastatin\", typicalDoseMg: 40, frequency: \"daily\" },\n { system: SNOMED, code: \"386919002\", display: \"Metformin\", typicalDoseMg: 500, frequency: \"twice daily\" },\n { system: SNOMED, code: \"387458008\", display: \"Aspirin\", typicalDoseMg: 100, frequency: \"daily\" },\n { system: SNOMED, code: \"372567009\", display: \"Amlodipine\", typicalDoseMg: 5, frequency: \"daily\" },\n { system: SNOMED, code: \"116602009\", display: \"Lisinopril\", typicalDoseMg: 10, frequency: \"daily\" },\n { system: SNOMED, code: \"387471003\", display: \"Levothyroxine\", typicalDoseMg: 50, frequency: \"daily\" },\n // Additional SNOMED medications\n { system: SNOMED, code: \"372525000\", display: \"Omeprazole\", typicalDoseMg: 20, frequency: \"daily\" },\n { system: SNOMED, code: \"372594008\", display: \"Sertraline\", typicalDoseMg: 50, frequency: \"daily\" },\n { system: SNOMED, code: \"373567009\", display: \"Losartan\", typicalDoseMg: 50, frequency: \"daily\" },\n { system: SNOMED, code: \"387475002\", display: \"Furosemide\", typicalDoseMg: 40, frequency: \"daily\" },\n { system: SNOMED, code: \"372768001\", display: \"Clopidogrel\", typicalDoseMg: 75, frequency: \"daily\" },\n { system: SNOMED, code: \"395726003\", display: \"Pantoprazole\", typicalDoseMg: 40, frequency: \"daily\" },\n { system: SNOMED, code: \"372694001\", display: \"Albuterol\", typicalDoseMg: 2, frequency: \"as needed\" },\n { system: SNOMED, code: \"116601002\", display: \"Prednisone\", typicalDoseMg: 5, frequency: \"daily\" },\n { system: SNOMED, code: \"386928009\", display: \"Gabapentin\", typicalDoseMg: 300, frequency: \"three times daily\" },\n];\n\nexport const US_RXNORM_MEDICATION_CODES: MedicationCode[] = [\n { system: RXNORM, code: \"866419\", display: \"Metoprolol\", typicalDoseMg: 50, frequency: \"twice daily\" },\n { system: RXNORM, code: \"5487\", display: \"Hydrochlorothiazide\", typicalDoseMg: 25, frequency: \"daily\" },\n { system: RXNORM, code: \"11289\", display: \"Warfarin\", typicalDoseMg: 5, frequency: \"daily\" },\n { system: RXNORM, code: \"41493\", display: \"Tramadol\", typicalDoseMg: 50, frequency: \"as needed\" },\n { system: RXNORM, code: \"203457\", display: \"Cetirizine\", typicalDoseMg: 10, frequency: \"daily\" },\n { system: RXNORM, code: \"18631\", display: \"Azithromycin\", typicalDoseMg: 500, frequency: \"daily\" },\n { system: RXNORM, code: \"301542\", display: \"Rosuvastatin\", typicalDoseMg: 10, frequency: \"daily\" },\n { system: RXNORM, code: \"723372\", display: \"Montelukast\", typicalDoseMg: 10, frequency: \"daily\" },\n];\n","import type { FhirResource, FhirVersion, Locale } from \"@/core/types.js\";\nimport { createRng, pickRandom } from \"@/core/generators/rng.js\";\nimport { generateUuidV4, deepMerge, generateDate } from \"./utils.js\";\nimport { COMMON_MEDICATION_CODES, US_RXNORM_MEDICATION_CODES } from \"@/core/data/medication-codes.js\";\nimport type { RandomFn } from \"@/core/types.js\";\nimport { adaptToVersion } from \"./version-adapters.js\";\n\n// ---------------------------------------------------------------------------\n// MedicationStatement resource assembly\n// ---------------------------------------------------------------------------\n\nfunction buildMedicationStatement(subject: string, locale: Locale, rng: RandomFn): FhirResource {\n const pool = locale === \"us\"\n ? [...COMMON_MEDICATION_CODES, ...US_RXNORM_MEDICATION_CODES]\n : COMMON_MEDICATION_CODES;\n const med = pickRandom(pool, rng);\n const startDate = generateDate(2018, 2024, rng);\n\n return {\n resourceType: \"MedicationStatement\",\n id: generateUuidV4(rng),\n status: \"active\",\n medicationCodeableConcept: {\n coding: [\n {\n system: med.system,\n code: med.code,\n display: med.display,\n },\n ],\n },\n subject: { reference: subject },\n effectivePeriod: {\n start: startDate,\n },\n dosage: [\n {\n text: `${med.typicalDoseMg} mg ${med.frequency}`,\n },\n ],\n };\n}\n\n// ---------------------------------------------------------------------------\n// MedicationStatementBuilder\n// ---------------------------------------------------------------------------\n\nexport interface MedicationStatementBuilder {\n locale(locale: Locale): MedicationStatementBuilder;\n count(count: number): MedicationStatementBuilder;\n seed(seed: number): MedicationStatementBuilder;\n subject(patientReference: string): MedicationStatementBuilder;\n fhirVersion(version: FhirVersion): MedicationStatementBuilder;\n overrides(overrides: Record<string, unknown>): MedicationStatementBuilder;\n build(): FhirResource[];\n}\n\ninterface MedicationStatementBuilderState {\n locale: Locale;\n count: number;\n seed: number;\n fhirVersion: FhirVersion;\n subjectRef: string | undefined;\n overrideMap: Record<string, unknown>;\n}\n\nfunction makeBuilder(state: MedicationStatementBuilderState): MedicationStatementBuilder {\n return {\n locale(loc: Locale): MedicationStatementBuilder {\n return makeBuilder({ ...state, locale: loc });\n },\n count(n: number): MedicationStatementBuilder {\n return makeBuilder({ ...state, count: n });\n },\n seed(s: number): MedicationStatementBuilder {\n return makeBuilder({ ...state, seed: s });\n },\n subject(ref: string): MedicationStatementBuilder {\n return makeBuilder({ ...state, subjectRef: ref });\n },\n fhirVersion(v: FhirVersion): MedicationStatementBuilder {\n return makeBuilder({ ...state, fhirVersion: v });\n },\n overrides(o: Record<string, unknown>): MedicationStatementBuilder {\n return makeBuilder({ ...state, overrideMap: o });\n },\n build(): FhirResource[] {\n const rng = createRng(state.seed);\n const results: FhirResource[] = [];\n for (let i = 0; i < state.count; i++) {\n const subjectRef = state.subjectRef ?? `Patient/${generateUuidV4(rng)}`;\n const medStatement = adaptToVersion(\n buildMedicationStatement(subjectRef, state.locale, rng),\n state.fhirVersion,\n );\n if (Object.keys(state.overrideMap).length > 0) {\n results.push(\n deepMerge(\n medStatement as Record<string, unknown>,\n state.overrideMap,\n ) as FhirResource,\n );\n } else {\n results.push(medStatement);\n }\n }\n return results;\n },\n };\n}\n\n/** Create a new MedicationStatementBuilder with default options. */\nexport function createMedicationStatementBuilder(): MedicationStatementBuilder {\n return makeBuilder({\n locale: \"us\",\n count: 1,\n seed: 0,\n fhirVersion: \"R4\",\n subjectRef: undefined,\n overrideMap: {},\n });\n}\n","import type { FhirResource, FhirVersion, Locale } from \"@/core/types.js\";\nimport { createRng, randomInt } from \"@/core/generators/rng.js\";\nimport { generateUuidV4 } from \"./utils.js\";\nimport { createPatientBuilder } from \"./patient.js\";\nimport { createPractitionerBuilder } from \"./practitioner.js\";\nimport { createOrganizationBuilder } from \"./organization.js\";\nimport { createObservationBuilder } from \"./observation.js\";\nimport { createConditionBuilder } from \"./condition.js\";\nimport { createAllergyIntoleranceBuilder } from \"./allergy-intolerance.js\";\nimport { createMedicationStatementBuilder } from \"./medication-statement.js\";\nimport { createPractitionerRoleBuilder } from \"./practitioner-role.js\";\nimport type { RandomFn } from \"@/core/types.js\";\n\n// ---------------------------------------------------------------------------\n// Bundle types\n// ---------------------------------------------------------------------------\n\nexport type BundleType = \"transaction\" | \"document\" | \"collection\" | \"searchset\";\n\n// ---------------------------------------------------------------------------\n// Entry helpers\n// ---------------------------------------------------------------------------\n\nfunction makeEntry(\n resource: FhirResource,\n bundleType: BundleType,\n): Record<string, unknown> {\n const id = resource[\"id\"] as string;\n const resourceType = resource[\"resourceType\"] as string;\n const fullUrl = `urn:uuid:${id}`;\n const entry: Record<string, unknown> = { fullUrl, resource };\n\n if (bundleType === \"transaction\") {\n entry[\"request\"] = { method: \"POST\", url: resourceType };\n } else if (bundleType === \"searchset\") {\n entry[\"search\"] = { mode: \"match\" };\n }\n // collection: no extra fields; document: treated as collection in v1\n\n return entry;\n}\n\n// ---------------------------------------------------------------------------\n// Derive a numeric seed from the PRNG\n// ---------------------------------------------------------------------------\n\nfunction nextSeed(rng: RandomFn): number {\n return Math.floor(rng() * 0x7fffffff);\n}\n\n// ---------------------------------------------------------------------------\n// Clinical resource generation\n// ---------------------------------------------------------------------------\n\ntype ClinicalCategory = \"vital-signs\" | \"laboratory\";\n\nconst CATEGORIES: ClinicalCategory[] = [\"vital-signs\", \"laboratory\"];\n\nfunction buildClinicalResources(\n count: number | undefined,\n patientRef: string,\n practRef: string,\n fhirVersion: FhirVersion,\n rng: RandomFn,\n): FhirResource[] {\n const resources: FhirResource[] = [];\n\n if (count !== undefined) {\n // Generate exactly `count` resources, cycling through types\n const types = [\"observation\", \"observation\", \"condition\", \"allergy\", \"medication\"] as const;\n for (let i = 0; i < count; i++) {\n const type = types[i % types.length];\n const seed = nextSeed(rng);\n if (type === \"observation\") {\n const cat = CATEGORIES[i % CATEGORIES.length];\n const [obs] = createObservationBuilder()\n .subject(patientRef)\n .category(cat ?? \"vital-signs\")\n .seed(seed)\n .fhirVersion(fhirVersion)\n .build();\n if (obs) {\n resources.push({ ...obs, performer: [{ reference: practRef }] });\n }\n } else if (type === \"condition\") {\n const [cond] = createConditionBuilder().subject(patientRef).seed(seed).fhirVersion(fhirVersion).build();\n if (cond) resources.push(cond);\n } else if (type === \"allergy\") {\n const [ai] = createAllergyIntoleranceBuilder().subject(patientRef).seed(seed).fhirVersion(fhirVersion).build();\n if (ai) resources.push(ai);\n } else {\n const [ms] = createMedicationStatementBuilder().subject(patientRef).seed(seed).fhirVersion(fhirVersion).build();\n if (ms) resources.push(ms);\n }\n }\n return resources;\n }\n\n // Default: 1-2 observations + random others\n const numObs = randomInt(1, 2, rng);\n for (let i = 0; i < numObs; i++) {\n const cat = CATEGORIES[i % CATEGORIES.length] ?? \"vital-signs\";\n const [obs] = createObservationBuilder()\n .subject(patientRef)\n .category(cat)\n .seed(nextSeed(rng))\n .fhirVersion(fhirVersion)\n .build();\n if (obs) {\n resources.push({ ...obs, performer: [{ reference: practRef }] });\n }\n }\n\n if (rng() < 0.7) {\n const [cond] = createConditionBuilder().subject(patientRef).seed(nextSeed(rng)).fhirVersion(fhirVersion).build();\n if (cond) resources.push(cond);\n }\n if (rng() < 0.5) {\n const [ai] = createAllergyIntoleranceBuilder().subject(patientRef).seed(nextSeed(rng)).fhirVersion(fhirVersion).build();\n if (ai) resources.push(ai);\n }\n if (rng() < 0.6) {\n const [ms] = createMedicationStatementBuilder().subject(patientRef).seed(nextSeed(rng)).fhirVersion(fhirVersion).build();\n if (ms) resources.push(ms);\n }\n\n return resources;\n}\n\n// ---------------------------------------------------------------------------\n// Single bundle assembly\n// ---------------------------------------------------------------------------\n\nfunction buildSingleBundle(\n locale: Locale,\n bundleType: BundleType,\n clinicalCount: number | undefined,\n fhirVersion: FhirVersion,\n overrideMap: Record<string, unknown>,\n rng: RandomFn,\n): FhirResource {\n // Generate sub-seeds from the shared RNG\n const bundleIdSeed = nextSeed(rng);\n const patientSeed = nextSeed(rng);\n const orgSeed = nextSeed(rng);\n const practSeed = nextSeed(rng);\n const practRoleSeed = nextSeed(rng);\n const clinicalRng = createRng(nextSeed(rng));\n\n // Build component resources\n const [patient] = createPatientBuilder().locale(locale).seed(patientSeed).fhirVersion(fhirVersion).build();\n const [org] = createOrganizationBuilder().locale(locale).seed(orgSeed).fhirVersion(fhirVersion).build();\n const [pract] = createPractitionerBuilder().locale(locale).seed(practSeed).fhirVersion(fhirVersion).build();\n\n if (!patient || !org || !pract) {\n throw new Error(\"Bundle: failed to generate component resources\");\n }\n\n const patientId = patient[\"id\"] as string;\n const orgId = org[\"id\"] as string;\n const practId = pract[\"id\"] as string;\n\n const patientRef = `urn:uuid:${patientId}`;\n const orgRef = `urn:uuid:${orgId}`;\n const practRef = `urn:uuid:${practId}`;\n\n // Build PractitionerRole with the same Practitioner and Organization IDs\n const [practRole] = createPractitionerRoleBuilder()\n .locale(locale)\n .seed(practRoleSeed)\n .fhirVersion(fhirVersion)\n .practitionerId(practId)\n .organizationId(orgId)\n .build();\n\n // Wire patient → organization\n const wiredPatient: FhirResource = {\n ...patient,\n managingOrganization: { reference: orgRef },\n };\n\n // Generate clinical resources\n const clinicalResources = buildClinicalResources(clinicalCount, patientRef, practRef, fhirVersion, clinicalRng);\n\n // Build bundle entries (PractitionerRole immediately after Practitioner)\n const coreResources: FhirResource[] = practRole\n ? [wiredPatient, org, pract, practRole]\n : [wiredPatient, org, pract];\n const allResources: FhirResource[] = [...coreResources, ...clinicalResources];\n const entries = allResources.map((r) => makeEntry(r, bundleType));\n\n const bundleIdRng = createRng(bundleIdSeed);\n const bundle: FhirResource = {\n resourceType: \"Bundle\",\n id: generateUuidV4(bundleIdRng),\n type: bundleType,\n entry: entries,\n };\n\n if (Object.keys(overrideMap).length > 0) {\n return { ...bundle, ...overrideMap };\n }\n return bundle;\n}\n\n// ---------------------------------------------------------------------------\n// BundleBuilder\n// ---------------------------------------------------------------------------\n\nexport interface BundleBuilder {\n locale(locale: Locale): BundleBuilder;\n count(count: number): BundleBuilder;\n seed(seed: number): BundleBuilder;\n type(bundleType: BundleType): BundleBuilder;\n fhirVersion(version: FhirVersion): BundleBuilder;\n clinicalResourcesPerPatient(count: number): BundleBuilder;\n overrides(overrides: Record<string, unknown>): BundleBuilder;\n build(): FhirResource[];\n}\n\ninterface BundleBuilderState {\n locale: Locale;\n count: number;\n seed: number;\n bundleType: BundleType;\n fhirVersion: FhirVersion;\n clinicalCount: number | undefined;\n overrideMap: Record<string, unknown>;\n}\n\nfunction makeBuilder(state: BundleBuilderState): BundleBuilder {\n return {\n locale(loc: Locale): BundleBuilder {\n return makeBuilder({ ...state, locale: loc });\n },\n count(n: number): BundleBuilder {\n return makeBuilder({ ...state, count: n });\n },\n seed(s: number): BundleBuilder {\n return makeBuilder({ ...state, seed: s });\n },\n type(t: BundleType): BundleBuilder {\n return makeBuilder({ ...state, bundleType: t });\n },\n fhirVersion(v: FhirVersion): BundleBuilder {\n return makeBuilder({ ...state, fhirVersion: v });\n },\n clinicalResourcesPerPatient(n: number): BundleBuilder {\n return makeBuilder({ ...state, clinicalCount: n });\n },\n overrides(o: Record<string, unknown>): BundleBuilder {\n return makeBuilder({ ...state, overrideMap: o });\n },\n build(): FhirResource[] {\n const masterRng = createRng(state.seed);\n const results: FhirResource[] = [];\n for (let i = 0; i < state.count; i++) {\n // Use a separate per-bundle seed derived from master RNG\n const bundleSeedRng = createRng(nextSeed(masterRng));\n results.push(\n buildSingleBundle(\n state.locale,\n state.bundleType,\n state.clinicalCount,\n state.fhirVersion,\n state.overrideMap,\n bundleSeedRng,\n ),\n );\n }\n return results;\n },\n };\n}\n\n/** Create a new BundleBuilder with default options. */\nexport function createBundleBuilder(): BundleBuilder {\n return makeBuilder({\n locale: \"us\",\n count: 1,\n seed: 0,\n bundleType: \"transaction\",\n fhirVersion: \"R4\",\n clinicalCount: undefined,\n overrideMap: {},\n });\n}\n"],"mappings":"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,aAA6C;AAAA,EACjD,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/B;AAGA,IAAM,aAA6C;AAAA,EACjD,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAA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","names":["makeBuilder","makeBuilder","makeBuilder","makeBuilder","makeBuilder","makeBuilder","SNOMED","makeBuilder","makeBuilder"]}
|